<?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>227204</bug_id>
          
          <creation_ts>2021-06-20 21:54:02 -0700</creation_ts>
          <short_desc>Add a new pattern to instruction selector to utilize UBFIZ supported by ARM64</short_desc>
          <delta_ts>2021-06-23 15:10:04 -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></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>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</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>1771217</commentid>
    <comment_count>0</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-20 21:54:02 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771554</commentid>
    <comment_count>1</comment_count>
      <attachid>431934</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-21 17:50:04 -0700</bug_when>
    <thetext>Created attachment 431934
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771558</commentid>
    <comment_count>2</comment_count>
      <attachid>431934</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-06-21 18:06:21 -0700</bug_when>
    <thetext>Comment on attachment 431934
Patch

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

Nice. r=me

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2761
&gt; +                uint64_t width = static_cast&lt;uint64_t&gt;(WTF::bitCount(mask));

nit: this static cast isn&apos;t needed

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2795
&gt; +                uint64_t width = static_cast&lt;uint64_t&gt;(WTF::bitCount(mask));

nit: this static_cast isn&apos;t needed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771562</commentid>
    <comment_count>3</comment_count>
      <attachid>431934</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-06-21 18:22:06 -0700</bug_when>
    <thetext>Comment on attachment 431934
Patch

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

&gt; Source/WTF/wtf/MathExtras.h:741
&gt; +inline size_t countTrailingZeros(uint32_t v)
&gt; +{
&gt; +    static const unsigned Mod37BitPosition[] = {
&gt; +        32, 0, 1, 26, 2, 23, 27, 0, 3, 16, 24, 30, 28, 11, 0, 13,
&gt; +        4, 7, 17, 0, 25, 22, 31, 15, 29, 10, 12, 6, 0, 21, 14, 9,
&gt; +        5, 20, 8, 19, 18
&gt; +    };
&gt; +    return Mod37BitPosition[((1 + ~v) &amp; v) % 37];
&gt; +}
&gt; +
&gt; +inline size_t countTrailingZeros(uint64_t v)

should we use builtin_ctz when compiling with GCC or clang so the proper instruction can be selected?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771569</commentid>
    <comment_count>4</comment_count>
      <attachid>431939</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-21 18:51:37 -0700</bug_when>
    <thetext>Created attachment 431939
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771680</commentid>
    <comment_count>5</comment_count>
      <attachid>431939</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-06-22 08:56:51 -0700</bug_when>
    <thetext>Comment on attachment 431939
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:19
&gt; +        d = (n &lt;&lt; lsb) &amp; mask

Why not instead select (n &amp; mask) &lt;&lt; lsb?

Then, you can canonicalize (n &lt;&lt; lsb) &amp; mask to (n &amp; mask) &lt;&lt; lsb in reduceStrength.

The benefit of (n &amp; mask) &lt;&lt; lsb being the canonical form is it&apos;s easier to recognize. So, if some other part of the compiler needed to recognize this pattern, they&apos;d only have to recognize the easier one of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771848</commentid>
    <comment_count>6</comment_count>
      <attachid>432014</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-22 19:24:11 -0700</bug_when>
    <thetext>Created attachment 432014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771961</commentid>
    <comment_count>7</comment_count>
      <attachid>432014</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-06-23 09:04:40 -0700</bug_when>
    <thetext>Comment on attachment 432014
Patch

Let&apos;s figure out the crash</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771969</commentid>
    <comment_count>8</comment_count>
      <attachid>432059</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-23 09:31:26 -0700</bug_when>
    <thetext>Created attachment 432059
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772051</commentid>
    <comment_count>9</comment_count>
      <attachid>432059</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-06-23 13:36:59 -0700</bug_when>
    <thetext>Comment on attachment 432059
Patch

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

This looks good but you&apos;re matching rules for BitAnd that won&apos;t happen after reduceStrength does handleCommutativity.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2753
&gt; +                if (imm(srcValue) || !imm(lsbValue) || lsbValue-&gt;asInt() &lt; 0 || !right-&gt;hasInt())

You don&apos;t need to exit if srcValue has an imm.  If it had an imm, then it wouldn&apos;t have had ZShr as its opcode.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2770
&gt; +            if (tryAppendUBFX(left, right) || tryAppendUBFX(right, left))

You can be sure that BitAnd will have its immediate on the right.

I believe we have a reduceStrength rule for that:

        case BitAnd:
            handleCommutativity();

handleCommutativity() will flip the BitAnd to put the immediate on the right if it wasn&apos;t on the right already.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2829
&gt; +                    if (imm(nValue) || !maskValue-&gt;hasInt() || !imm(right) || right-&gt;asInt() &lt; 0)

No need to bail out of imm() returns true.  If both sides are imm then the whole thing would have been constant folded and you wouldn&apos;t have even seen a BitAnd.  And if it wasn&apos;t constant folded for any reason, then there&apos;s no downside to you matching this rule.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2846
&gt; +                return tryAndValueMask(andLeft, andRight) || tryAndValueMask(andRight, andLeft);

Ditto - only have to match the case where the immediate is on the right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772058</commentid>
    <comment_count>10</comment_count>
      <attachid>432089</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-23 14:00:20 -0700</bug_when>
    <thetext>Created attachment 432089
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772059</commentid>
    <comment_count>11</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-23 14:02:21 -0700</bug_when>
    <thetext>Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772080</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-23 15:09:38 -0700</bug_when>
    <thetext>Committed r279193 (239084@main): &lt;https://commits.webkit.org/239084@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 432089.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431934</attachid>
            <date>2021-06-21 17:50:04 -0700</date>
            <delta_ts>2021-06-21 18:51:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227204-20210621195003.patch</filename>
            <type>text/plain</type>
            <size>29642</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MDc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
OTNjMGNmMWI2ZTcwMGVkMDQ1ZjkyZWU5ZDI3MmExODg0MTI4OGM1Li43YmMyOTNkY2ZhZTQyOWJm
NGIxMTQyYjdkZWQ3NGI2ZGExOTgzZGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NiBAQAorMjAyMS0wNi0yMSAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIGEgbmV3IHBhdHRlcm4gdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXRpbGl6ZSBVQkZJWiBzdXBwb3J0ZWQgYnkgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzIwNAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuc2lnbmVkIEJpdGZpZWxkIEluc2VydCBpbiBa
ZXJvKFVCRklaKSwgc3VwcG9ydGVkIGJ5IEFSTTY0LCB6ZXJvcyB0aGUgCisgICAgICAgIGRlc3Rp
bmF0aW9uIHJlZ2lzdGVyIGFuZCBjb3BpZXMgYW55IG51bWJlciBvZiBjb250aWd1b3VzIGJpdHMg
ZnJvbSBhIAorICAgICAgICBzb3VyY2UgcmVnaXN0ZXIgaW50byBhbnkgcG9zaXRpb24gaW4gdGhl
IGRlc3RpbmF0aW9uIHJlZ2lzdGVyLiBUaGUgCisgICAgICAgIGluc3RydWN0aW9uIHNlbGVjdG9y
IGNhbiB1dGlsaXplIHRoaXMgdG8gbG93ZXJpbmcgY2VydGFpbiBwYXR0ZXJucyBpbiAKKyAgICAg
ICAgQjMgSVIgYmVmb3JlIGZ1cnRoZXIgQWlyIG9wdGltaXphdGlvbi4gCisKKyAgICAgICAgR2l2
ZW4gdGhlIG9wZXJhdGlvbjogdWJmaXogZCwgbiwgbHNiLCB3aWR0aAorCisgICAgICAgIFRoaXMg
aXMgZXF1aXZhbGVudCB0byAiZCA9IChuIDw8IGxzYikgJiAoKCgxIDw8IHdpZHRoKSAtIDEpIDw8
IGxzYikiLiAKKyAgICAgICAgU2luY2Ugd2FzbSBpbnRyb2R1Y2VzIGNvbnN0YW50IGZvbGRpbmcs
IHRoZW4gdGhlIHBhdHRlcm4gd291bGQgYmU6CisKKyAgICAgICAgZCA9IChuIDw8IGxzYikgJiBt
YXNrCisKKyAgICAgICAgd2hlcmUgdGhlIG1hc2sgc2hvdWxkIGhhdmUgYSBiaW5hcnkgdHlwZSBp
biBjb250aWd1b3VzIG9uZXMgc3RhcnRpbmcgZnJvbSBsc2IuIAorICAgICAgICBGb3IgZXhhbXBs
ZTogMGIwMDExMTEwMAorCisgICAgICAgIFRvIG1ha2UgdGhlIHBhdHRlcm4gbWF0Y2hpbmcgaW4g
aW5zdHJ1Y3Rpb24gc2VsZWN0aW9uIGJlbmVmaWNpYWwgdG8gSklULCB0aGVzZSAKKyAgICAgICAg
Y29uc3RyYWludHMgc2hvdWxkIGJlIGludHJvZHVjZWQ6CisKKyAgICAgICAgMS4gbHNiID49IDAg
CisgICAgICAgIDIuIHdpZHRoID4gMAorICAgICAgICAzLiBsc2IgKyB3aWR0aCA8PSBkYXRhc2l6
ZSAoMzIgb3IgNjQpCisKKyAgICAgICAgR2l2ZW4gQjMgSVI6CisgICAgICAgIEludCBAMCA9IEFy
Z3VtZW50UmVnKCV4MCkKKyAgICAgICAgSW50IEAxID0gbHNiCisgICAgICAgIEludCBAMiA9IDBi
MDExMAorICAgICAgICBJbnQgQDMgPSBTaGwoQDAsIEAxKQorICAgICAgICBJbnQgQDQgPSBCaXRB
bmQoQDMsIEAyKSAgCisgICAgICAgIFZvaWRANSA9IFJldHVybihANCwgVGVybWluYWwpICAgICAg
CisKKyAgICAgICAgQmVmb3JlIEFkZGluZyBVQkZJWiBQYXR0ZXJuOgorICAgICAgICAvLyBPbGQg
b3B0aW1pemVkIEFJUgorICAgICAgICBMc2hpZnQgICV4MCwgJDYyLCAleDAsIEAzCisgICAgICAg
IEFuZCAgMGIwMTEwLCAleDAsICV4MCwgQDQKKyAgICAgICAgUmV0ICAgICAleDAsICAgICAgICAg
ICBANQorCisgICAgICAgIEFmdGVyIEFkZGluZyBVQkZJWiBQYXR0ZXJuOgorICAgICAgICAvLyBO
ZXcgb3B0aW1pemVkIEFJUgorICAgICAgICBVYmZpeiAleDAsIGxzYiwgMiwgJXgwLCBANAorICAg
ICAgICBSZXQgICAleDAsICAgICAgICAgICAgICBANQorCisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6
dWJmaXozMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnViZml6NjQpOgor
ICAgICAgICAqIGFzc2VtYmxlci90ZXN0bWFzbS5jcHA6CisgICAgICAgIChKU0M6OnRlc3RVYmZp
ejMyKToKKyAgICAgICAgKEpTQzo6dGVzdFViZml6NjQpOgorICAgICAgICAqIGIzL0IzTG93ZXJU
b0Fpci5jcHA6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAq
IGIzL3Rlc3RiMy5oOgorICAgICAgICAqIGIzL3Rlc3RiM18yLmNwcDoKKyAgICAgICAgKHRlc3RV
YmZ4MzJBcmdMZWZ0KToKKyAgICAgICAgKHRlc3RVYmZ4MzJBcmdSaWdodCk6CisgICAgICAgICh0
ZXN0VWJmeDY0QXJnTGVmdCk6CisgICAgICAgICh0ZXN0VWJmeDY0QXJnUmlnaHQpOgorICAgICAg
ICAodGVzdFViZml6MzJBcmdMZWZ0KToKKyAgICAgICAgKHRlc3RVYmZpejMyQXJnUmlnaHQpOgor
ICAgICAgICAodGVzdFViZml6NjRBcmdMZWZ0KToKKyAgICAgICAgKHRlc3RVYmZpejY0QXJnUmln
aHQpOgorICAgICAgICAoYWRkQml0VGVzdHMpOgorICAgICAgICAodGVzdFViZngzMik6IERlbGV0
ZWQuCisgICAgICAgICh0ZXN0VWJmeDMyUGF0dGVybk1hdGNoKTogRGVsZXRlZC4KKyAgICAgICAg
KHRlc3RVYmZ4NjQpOiBEZWxldGVkLgorICAgICAgICAodGVzdFViZng2NFBhdHRlcm5NYXRjaCk6
IERlbGV0ZWQuCisKIDIwMjEtMDYtMjEgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCBhIG5ldyBwYXR0ZXJuIHRvIGluc3RydWN0aW9uIHNlbGVjdG9y
IHRvIHV0aWxpemUgU01TVUJMIHN1cHBvcnRlZCBieSBBUk02NApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA1MzA4YThlMDA2NmU2
YmU1ODI2YzU2NmYzN2I2NzQxYjE0NzQyMGYzLi4wMDA5NmU5ODVjNTU3M2QxOGY1ODcxZDBhOWZm
OTVjNWQ4OGFlNDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTA2LTIxICBZaWppYSBIdWFu
ZyAgPHlpamlhX2h1YW5nQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBuZXcgcGF0dGVybiB0
byBpbnN0cnVjdGlvbiBzZWxlY3RvciB0byB1dGlsaXplIFVCRklaIHN1cHBvcnRlZCBieSBBUk02
NAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjA0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGZ1
bmN0aW9ucyB0byBjb3VudCB0aGUgY29uc2VjdXRpdmUgemVybyBiaXRzICh0cmFpbGluZykgb24g
dGhlIAorICAgICAgICByaWdodCB3aXRoIG1vZHVsdXMgZGl2aXNpb24gYW5kIGxvb2t1cC4gUmVm
ZXJlbmNlOiBCaXQgVHdpZGRsaW5nIEhhY2tzLgorCisgICAgICAgICogd3RmL01hdGhFeHRyYXMu
aDoKKyAgICAgICAgKFdURjo6Y291bnRUcmFpbGluZ1plcm9zKToKKwogMjAyMS0wNi0yMSAgS2lt
bW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIG1ha2VVbmlxdWUg
Y2Fubm90IGJlIHVzZWQgdG8gaW5zdGFudGlhdGUgZnVuY3Rpb24tbG9jYWwgY2xhc3NlcwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjQuaAppbmRleCBjYTg3YTllMDRhM2YyZjU4OTE3YzNhNzRhMzY4MGMyYzI3MTBhYjhmLi4yNzM4
YThlZjEyMDFiNzFkZDg2NjE1YWE2MjRjOWZkZDg1M2QyOGJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtNDAw
LDYgKzQwMCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnViZng8NjQ+KGRlc3Qs
IHNyYywgbHNiLm1fdmFsdWUsIHdpZHRoLm1fdmFsdWUpOwogICAgIH0KIAorICAgIHZvaWQgdWJm
aXozMihSZWdpc3RlcklEIHNyYywgVHJ1c3RlZEltbTMyIGxzYiwgVHJ1c3RlZEltbTMyIHdpZHRo
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci51YmZpejwzMj4o
ZGVzdCwgc3JjLCBsc2IubV92YWx1ZSwgd2lkdGgubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9p
ZCB1YmZpejY0KFJlZ2lzdGVySUQgc3JjLCBUcnVzdGVkSW1tMzIgbHNiLCBUcnVzdGVkSW1tMzIg
d2lkdGgsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnViZml6
PDY0PihkZXN0LCBzcmMsIGxzYi5tX3ZhbHVlLCB3aWR0aC5tX3ZhbHVlKTsKKyAgICB9CisKICAg
ICB2b2lkIGFuZDY0KFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBSZWdpc3RlcklE
IGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRfPDY0PihkZXN0LCBzcmMxLCBz
cmMyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1h
c20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKaW5k
ZXggNzBjMDlkMmU1Njk5ZDgzZjc3OTA0Zjc4MWZkYmUyZmViZTNhZTUyZS4uNmRhYWIwZTRiMDBj
ODc4MzdhNjBkMmRhNjUzMmNhYjYxYjRiYjZjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKQEAgLTExMTMsNiArMTExMyw1NiBAQCB2b2lkIHRlc3RV
YmZ4NjQoKQogICAgICAgICB9CiAgICAgfQogfQorCit2b2lkIHRlc3RVYmZpejMyKCkKK3sKKyAg
ICB1aW50MzJfdCBzcmMgPSAweGZmZmZmZmZmOworICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9
IHsgMCwgMSwgMzAsIDMxLCAzMiwgNjIsIDYzLCA2NCB9OworICAgIGZvciAoYXV0byBsc2IgOiBp
bW1zKSB7CisgICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGltbXMpIHsKKyAgICAgICAgICAgIGlm
IChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lkdGggPCAzMikgeworICAgICAgICAg
ICAgICAgIGF1dG8gdWJmaXozMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgewor
ICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAg
ICAgICAgICAgICAgIGppdC51YmZpejMyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGxzYiksIAorICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod2lkdGgpLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAg
ICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAg
ICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
dWludDMyX3QgbWFzayA9ICgoMVUgPDwgd2lkdGgpIC0gMVUpIDw8IGxzYjsKKyAgICAgICAgICAg
ICAgICBDSEVDS19FUShpbnZva2U8dWludDMyX3Q+KHViZml6MzIsIHNyYyksICgoc3JjIDw8IGxz
YikgJiBtYXNrKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
dGVzdFViZml6NjQoKQoreworICAgIHVpbnQ2NF90IHNyYyA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsK
KyAgICBWZWN0b3I8dWludDMyX3Q+IGltbXMgPSB7IDAsIDEsIDMwLCAzMSwgMzIsIDYyLCA2Mywg
NjQgfTsKKyAgICBmb3IgKGF1dG8gbHNiIDogaW1tcykgeworICAgICAgICBmb3IgKGF1dG8gd2lk
dGggOiBpbW1zKSB7CisgICAgICAgICAgICBpZiAobHNiID49IDAgJiYgd2lkdGggPiAwICYmIGxz
YiArIHdpZHRoIDwgNjQpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHViZml6NjQgPSBjb21waWxl
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQudWJmaXo2NChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihsc2IpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKHdpZHRoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSAoKDFVTEwgPDwgd2lk
dGgpIC0gMVVMTCkgPDwgbHNiOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGludm9rZTx1aW50
NjRfdD4odWJmaXo2NCwgc3JjKSwgKHNyYyA8PCBsc2IpICYgbWFzayk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9Cit9CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZf
NjQpIHx8IENQVShBUk02NCkKQEAgLTMyODAsNiArMzMzMCw4IEBAIHZvaWQgcnVuKGNvbnN0IGNo
YXIqIGZpbHRlcikgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVUWV9BTkFMWVNJUwogICAgIFJVTih0
ZXN0TXVsU3ViU2lnbkV4dGVuZDMyKCkpOwogICAgIFJVTih0ZXN0VWJmeDMyKCkpOwogICAgIFJV
Tih0ZXN0VWJmeDY0KCkpOworICAgIFJVTih0ZXN0VWJmaXozMigpKTsKKyAgICBSVU4odGVzdFVi
Zml6NjQoKSk7CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShB
Uk02NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKaW5kZXggMzM4
NjNlYjhlYzQ4NzI0MjE2NWNmMTA4NTA3YjA2NjBlMmFlN2Y0Yy4uYTcwYTM4ZmFiNGM4MjU4YzQz
OGM5MWJiOTM3ZDc5MDg5OWYwZGE5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTG93ZXJUb0Fpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJCM1dhc21BZGRyZXNzVmFs
dWUuaCIKICNpbmNsdWRlIDx3dGYvSW5kZXhNYXAuaD4KICNpbmNsdWRlIDx3dGYvSW5kZXhTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KIAogI2lmICFBU1NFUlRfRU5BQkxFRApAQCAtMjU5Niw3ICsyNTk3LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG11bHRpcGx5TGVmdCA9IHJpZ2h0LT5jaGls
ZCgwKTsKICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG11bHRpcGx5UmlnaHQgPSByaWdodC0+
Y2hpbGQoMSk7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gU01TVUJMOiBkID0gYSAtIFNFeHQz
MihuKSAqICBTRXh0MzIobSkKKyAgICAgICAgICAgICAgICAgICAgLy8gU01TVUJMOiBkID0gYSAt
IFNFeHQzMihuKSAqIFNFeHQzMihtKQogICAgICAgICAgICAgICAgICAgICBpZiAobXVsdGlwbHlT
dWJPcGNvZGUgPT0gTXVsdGlwbHlTdWI2NAogICAgICAgICAgICAgICAgICAgICAgICAgJiYgaXNW
YWxpZEZvcm0oTXVsdGlwbHlTdWJTaWduRXh0ZW5kMzIsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJn
OjpUbXAsIEFyZzo6VG1wKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0cnlTRXh0
MzIgPSBbJl0gKFZhbHVlKiB2KSB7CkBAIC0yNzQwLDI2ICsyNzQxLDY5IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBV
QkZYIFBhdHRlcm46IGRlc3QgPSAoc3JjID4+IGxzYikgJiAoKDEgPDwgd2lkdGgpIC0gMSkKLSAg
ICAgICAgICAgIGlmIChjYW5CZUludGVybmFsKGxlZnQpICYmIGxlZnQtPm9wY29kZSgpID09IFpT
aHIpIHsKKyAgICAgICAgICAgIC8vIFVCRlggUGF0dGVybjogZGVzdCA9IChzcmMgPj4gbHNiKSAm
IG1hc2sgd2hlcmUgbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICAgICAgICAgIGF1dG8gdHJ5
VUJGWCA9IFsmXSAoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkgLT4gYm9vbCB7CisgICAgICAg
ICAgICAgICAgaWYgKGxlZnQtPm9wY29kZSgpICE9IFpTaHIgfHwgIWNhbkJlSW50ZXJuYWwobGVm
dCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBW
YWx1ZSogc3JjVmFsdWUgPSBsZWZ0LT5jaGlsZCgwKTsKICAgICAgICAgICAgICAgICBWYWx1ZSog
bHNiVmFsdWUgPSBsZWZ0LT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICBpZiAoIWltbShzcmNW
YWx1ZSkgJiYgaW1tKGxzYlZhbHVlKSAmJiByaWdodC0+aGFzSW50KCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaW50NjRfdCBsc2IgPSBsc2JWYWx1ZS0+YXNJbnQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgdWludDY0X3QgbWFzayA9IHJpZ2h0LT5hc0ludCgpOwotICAgICAgICAgICAgICAgICAg
ICB1aW50OF90IHdpZHRoID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oIShtYXNrICYgKG1hc2sgKyAx
KSkpICogV1RGOjpiaXRDb3VudChtYXNrKTsKLSAgICAgICAgICAgICAgICAgICAgQWlyOjpPcGNv
ZGUgb3Bjb2RlID0gb3Bjb2RlRm9yVHlwZShVYmZ4MzIsIFViZng2NCwgc3JjVmFsdWUtPnR5cGUo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvcGNvZGUKLSAgICAgICAgICAgICAgICAgICAg
ICAgICYmIGxzYiA+PSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiB3aWR0aCA+IDAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICYmIGxzYiArIHdpZHRoIDw9ICgzMiA8PCAob3Bjb2RlID09
IFViZng2NCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBpc1ZhbGlkRm9ybShvcGNvZGUs
IEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChzcmNWYWx1ZSksIGltbShsc2JWYWx1ZSks
IGltbSh3aWR0aCksIHRtcChtX3ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21t
aXRJbnRlcm5hbChsZWZ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG9wY29kZUZvclR5cGUoVWJmeDMyLCBV
YmZ4NjQsIHNyY1ZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZv
cm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6SW1tLCBBcmc6OlRtcCkpIAorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKGltbShz
cmNWYWx1ZSkgfHwgIWltbShsc2JWYWx1ZSkgfHwgbHNiVmFsdWUtPmFzSW50KCkgPCAwIHx8ICFy
aWdodC0+aGFzSW50KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICAgICAgICAgIHVpbnQ2NF90IGxzYiA9IGxzYlZhbHVlLT5hc0ludCgpOworICAgICAgICAg
ICAgICAgIHVpbnQ2NF90IG1hc2sgPSByaWdodC0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIW1hc2sgfHwgbWFzayAmIChtYXNrICsgMSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCB3aWR0aCA9IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihXVEY6OmJpdENvdW50KG1hc2spKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBk
YXRhc2l6ZSA9IG9wY29kZSA9PSBVYmZ4MzIgPyAzMiA6IDY0OworICAgICAgICAgICAgICAgIGlm
IChsc2IgKyB3aWR0aCA+IGRhdGFzaXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAoc3JjVmFsdWUpLCBpbW0o
bHNiVmFsdWUpLCBpbW0od2lkdGgpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgICAgIGNv
bW1pdEludGVybmFsKGxlZnQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHRyeVVCRlgobGVmdCwgcmlnaHQpIHx8IHRyeVVC
RlgocmlnaHQsIGxlZnQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
Ly8gVUJGSVogUGF0dGVybjogZGVzdCA9IChuIDw8IGxzYikgJiBtYXNrIHdoZXJlIG1hc2sgPSAo
KDEgPDwgd2lkdGgpIC0gMSkgPDwgbHNiCisgICAgICAgICAgICBhdXRvIHRyeVVCRklaID0gWyZd
IChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBp
ZiAobGVmdC0+b3Bjb2RlKCkgIT0gU2hsIHx8ICFjYW5CZUludGVybmFsKGxlZnQpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgVmFsdWUqIHNyY1Zh
bHVlID0gbGVmdC0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGxzYlZhbHVlID0g
bGVmdC0+Y2hpbGQoMSk7CisKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBv
cGNvZGVGb3JUeXBlKFViZml6MzIsIFViZml6NjQsIHNyY1ZhbHVlLT50eXBlKCkpOworICAgICAg
ICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFy
Zzo6SW1tLCBBcmc6OlRtcCkpIAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgaWYgKGltbShzcmNWYWx1ZSkgfHwgIWltbShsc2JWYWx1ZSkgfHwgbHNi
VmFsdWUtPmFzSW50KCkgPCAwIHx8ICFyaWdodC0+aGFzSW50KCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxzYiA9IGxzYlZh
bHVlLT5hc0ludCgpOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSByaWdodC0+YXNJ
bnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrTFNCID0gV1RGOjpjb3VudFRyYWls
aW5nWmVyb3MobWFzayk7CisgICAgICAgICAgICAgICAgaWYgKGxzYiAhPSBtYXNrTFNCKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgbWFzayA+Pj0g
bWFza0xTQjsKKyAgICAgICAgICAgICAgICBpZiAoIW1hc2sgfHwgbWFzayAmIChtYXNrICsgMSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB1aW50
NjRfdCB3aWR0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihXVEY6OmJpdENvdW50KG1hc2spKTsK
KyAgICAgICAgICAgICAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IG9wY29kZSA9PSBVYmZpejMyID8g
MzIgOiA2NDsKKyAgICAgICAgICAgICAgICBpZiAobHNiICsgd2lkdGggPiBkYXRhc2l6ZSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgYXBwZW5k
KG9wY29kZSwgdG1wKHNyY1ZhbHVlKSwgaW1tKGxzYlZhbHVlKSwgaW1tKHdpZHRoKSwgdG1wKG1f
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0
cnlVQkZJWihsZWZ0LCByaWdodCkgfHwgdHJ5VUJGSVoocmlnaHQsIGxlZnQpKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgYXBwZW5kQmluT3A8QW5kMzIsIEFuZDY0LCBB
bmREb3VibGUsIEFuZEZsb2F0LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOwogICAgICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJP
cGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9w
Y29kZXMKaW5kZXggOWEyZTc0Mjc2NTM3MGYzM2Q2ZjJkYzY2MjUxZTYxN2E1NGZkMjI5ZC4uY2Uy
MDFiYmFlNTFiYjQzODg5ZmE1MjgwNzMyZDhmN2JkMjkyYzlmZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBAIC0zNjYsNiArMzY2LDEyIEBA
IGFybTY0OiBVYmZ4MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogYXJtNjQ6IFVi
Zng2NCBVOkc6NjQsIFU6RzozMiwgVTpHOjMyLCBEOkc6NjQKICAgICBUbXAsIEltbSwgSW1tLCBU
bXAKIAorYXJtNjQ6IFViZml6MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgorICAg
IFRtcCwgSW1tLCBJbW0sIFRtcAorCithcm02NDogVWJmaXo2NCBVOkc6NjQsIFU6RzozMiwgVTpH
OjMyLCBEOkc6NjQKKyAgICBUbXAsIEltbSwgSW1tLCBUbXAKKwogNjQ6IEFuZDY0IFU6Rzo2NCwg
VTpHOjY0LCBEOkc6NjQKICAgICBUbXAsIFRtcCwgVG1wCiAgICAgYXJtNjQ6IEJpdEltbTY0LCBU
bXAsIFRtcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IGI1ZTRjZjJjNzg4ODgyZjY1
ZDNmMTJjNzMyZWUyNGQ1YzY4MzNlZTQuLjgyOWE5MzhkMTM1ZmY0OWIxODBiNzM3YTUxMWIxNjBm
M2U2YmRiYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTQxNiwxMCArNDE2LDE0
IEBAIGlubGluZSBkb3VibGUgbW9kZWxMb2FkPGRvdWJsZSwgZG91YmxlPihkb3VibGUgdmFsdWUp
IHsgcmV0dXJuIHZhbHVlOyB9CiAKIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcik7CiB2b2lk
IHRlc3RCaXRBbmRTRXh0MzIoaW50MzJfdCB2YWx1ZSwgaW50NjRfdCBtYXNrKTsKLXZvaWQgdGVz
dFViZngzMigpOwotdm9pZCB0ZXN0VWJmeDMyUGF0dGVybk1hdGNoKCk7Ci12b2lkIHRlc3RVYmZ4
NjQoKTsKLXZvaWQgdGVzdFViZng2NFBhdHRlcm5NYXRjaCgpOwordm9pZCB0ZXN0VWJmeDMyQXJn
TGVmdCgpOwordm9pZCB0ZXN0VWJmeDMyQXJnUmlnaHQoKTsKK3ZvaWQgdGVzdFViZng2NEFyZ0xl
ZnQoKTsKK3ZvaWQgdGVzdFViZng2NEFyZ1JpZ2h0KCk7Cit2b2lkIHRlc3RVYmZpejMyQXJnTGVm
dCgpOwordm9pZCB0ZXN0VWJmaXozMkFyZ1JpZ2h0KCk7Cit2b2lkIHRlc3RVYmZpejY0QXJnTGVm
dCgpOwordm9pZCB0ZXN0VWJmaXo2NEFyZ1JpZ2h0KCk7CiB2b2lkIHRlc3RCaXRBbmRaZXJvU2hp
ZnRSaWdodEFyZ0ltbU1hc2szMigpOwogdm9pZCB0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJ
bW1NYXNrNjQoKTsKIHZvaWQgdGVzdEJhc2ljU2VsZWN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiM18yLmNwcAppbmRleCAxZGRjNzFmMTAyYWQ1YWFiYjcxOTIxMWRlNDc5ZjBkMWM4YTY5
YTcxLi5mNWQ0YjQ5OTczNzk0OGIxYjQ1MGYwOTdjYjgwMTgxZDI5NmRlYTYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAKQEAgLTI1ODEsMTIgKzI1ODEsMTQgQEAgdm9pZCB0
ZXN0TmVnRmxvYXRXaXRoVXNlbGVzc0RvdWJsZUNvbnZlcnNpb24oZmxvYXQgYSkKICAgICBDSEVD
Syhpc0lkZW50aWNhbChjb21waWxlQW5kUnVuPGZsb2F0Pihwcm9jLCBiaXR3aXNlX2Nhc3Q8aW50
MzJfdD4oYSkpLCAtYSkpOwogfQogCi12b2lkIHRlc3RVYmZ4MzIoKQordm9pZCB0ZXN0VWJmeDMy
QXJnTGVmdCgpCiB7CiAgICAgLy8gKHNyYyA+PiBsc2IpICYgbWFzaworICAgIGlmIChKU0M6Ok9w
dGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CiAgICAgdWlu
dDMyX3Qgc3JjID0gMHhmZmZmZmZmZjsKLSAgICBWZWN0b3I8dWludDMyX3Q+IGxzYnMgPSB7IDAs
IDE1LCAzMCB9OwotICAgIFZlY3Rvcjx1aW50MzJfdD4gd2lkdGhzID0geyAzMCwgMTYsIDEgfTsK
KyAgICBWZWN0b3I8dWludDMyX3Q+IGxzYnMgPSB7IDEsIDE0LCAzMCB9OworICAgIFZlY3Rvcjx1
aW50MzJfdD4gd2lkdGhzID0geyAzMCwgMTcsIDEgfTsKIAogICAgIGF1dG8gdGVzdCA9IFsmXSAo
dWludDMyX3QgbHNiLCB1aW50MzJfdCBtYXNrKSAtPiB1aW50MzJfdCB7CiAgICAgICAgIFByb2Nl
ZHVyZSBwcm9jOwpAQCAtMjYwMiw4ICsyNjA0LDExIEBAIHZvaWQgdGVzdFViZngzMigpCiAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKICAgICAgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJp
dEFuZCwgT3JpZ2luKCksIGxlZnQsIG1hc2tWYWx1ZSkpOwotICAgICAgICAKLSAgICAgICAgcmV0
dXJuIGNvbXBpbGVBbmRSdW48dWludDMyX3Q+KHByb2MsIHNyYyk7CisKKyAgICAgICAgYXV0byBj
b2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAg
ICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInViZngiKTsKKyAgICAgICAgcmV0dXJu
IGludm9rZTx1aW50MzJfdD4oKmNvZGUsIHNyYyk7CiAgICAgfTsKIAogICAgIGF1dG8gZ2VuZXJh
dGVNYXNrID0gWyZdICh1aW50MzJfdCB3aWR0aCkgLT4gdWludDMyX3QgewpAQCAtMjYxMywxOSAr
MjYxOCwyMCBAQCB2b2lkIHRlc3RVYmZ4MzIoKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bHNicy5zaXplKCk7ICsraSkgewogICAgICAgICB1aW50MzJfdCBsc2IgPSBsc2JzLmF0KGkpOwog
ICAgICAgICB1aW50MzJfdCBtYXNrID0gZ2VuZXJhdGVNYXNrKHdpZHRocy5hdChpKSk7Ci0gICAg
ICAgIHVpbnQzMl90IGxocyA9IHRlc3QobHNiLCBtYXNrKTsKLSAgICAgICAgdWludDMyX3Qgcmhz
ID0gKChzcmMgPj4gbHNiKSAmIG1hc2spOwotICAgICAgICBDSEVDSyhsaHMgPT0gcmhzKTsKKyAg
ICAgICAgQ0hFQ0sodGVzdChsc2IsIG1hc2spID09ICgoc3JjID4+IGxzYikgJiBtYXNrKSk7CiAg
ICAgfQogfQogCi12b2lkIHRlc3RVYmZ4MzJQYXR0ZXJuTWF0Y2goKQordm9pZCB0ZXN0VWJmeDMy
QXJnUmlnaHQoKQogewotICAgIC8vIChzcmMgPj4gbHNiKSAmICgoMSA8PCB3aWR0aCkgLSAxKQor
ICAgIC8vIG1hc2sgJiAoc3JjID4+IGxzYikKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0
QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOwogICAgIHVpbnQzMl90IHNyYyA9IDB4
ZmZmZmZmZmY7Ci0gICAgVmVjdG9yPHVpbnQzMl90PiBpbW1zID0geyAwLCAxLCAzMCwgMzEsIDMy
LCA2MiwgNjMsIDY0IH07CisgICAgVmVjdG9yPHVpbnQzMl90PiBsc2JzID0geyAxLCAxNCwgMzAg
fTsKKyAgICBWZWN0b3I8dWludDMyX3Q+IHdpZHRocyA9IHsgMzAsIDE3LCAxIH07CiAKLSAgICBh
dXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IGxzYiwgdWludDMyX3Qgd2lkdGgpIC0+IHVpbnQzMl90
IHsKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IGxzYiwgdWludDMyX3QgbWFzaykgLT4g
dWludDMyX3QgewogICAgICAgICBQcm9jZWR1cmUgcHJvYzsKICAgICAgICAgQmFzaWNCbG9jayog
cm9vdCA9IHByb2MuYWRkQmxvY2soKTsKIApAQCAtMjYzMywzNiArMjYzOSwzOCBAQCB2b2lkIHRl
c3RVYmZ4MzJQYXR0ZXJuTWF0Y2goKQogICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigp
LCAKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CiAgICAgICAgIFZhbHVlKiBsc2JWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsc2IpOwot
ICAgICAgICBWYWx1ZSogd2lkdGhWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCB3aWR0aCk7Ci0gICAgICAgIFZhbHVlKiBjb25zdFZhbHVlQSA9IHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKTsKLSAgICAgICAg
VmFsdWUqIGNvbnN0VmFsdWVCID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDEpOworICAgICAgICBWYWx1ZSogbWFza1ZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2spOwogCi0gICAgICAgIFZhbHVlKiBs
ZWZ0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgc3JjVmFs
dWUsIGxzYlZhbHVlKTsKLSAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPigKLSAgICAgICAgICAgIHByb2MsIFN1YiwgT3JpZ2luKCksIAotICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBjb25zdFZhbHVlQSwgd2lk
dGhWYWx1ZSksIGNvbnN0VmFsdWVCKTsKKyAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgc3JjVmFsdWUsIGxzYlZhbHVlKTsK
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAogICAgICAgICAgICAgcHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwKLSAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQml0QW5kLCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbWFza1ZhbHVlLCByaWdodCkp
OworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAo
aXNBUk02NCgpKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1YmZ4
Iik7CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDMyX3Q+KCpjb2RlLCBzcmMpOworICAgIH07
CiAKLSAgICAgICAgcmV0dXJuIGNvbXBpbGVBbmRSdW48dWludDMyX3Q+KHByb2MsIHNyYyk7Cisg
ICAgYXV0byBnZW5lcmF0ZU1hc2sgPSBbJl0gKHVpbnQzMl90IHdpZHRoKSAtPiB1aW50MzJfdCB7
CisgICAgICAgIHJldHVybiAoMVUgPDwgd2lkdGgpIC0gMVU7CiAgICAgfTsKIAotICAgIGZvciAo
YXV0byBsc2IgOiBpbW1zKSB7Ci0gICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGltbXMpIHsKLSAg
ICAgICAgICAgIHVpbnQzMl90IGxocyA9IHRlc3QobHNiLCB3aWR0aCk7Ci0gICAgICAgICAgICB1
aW50MzJfdCByaHMgPSAoKHNyYyA+PiBsc2IpICYgKCgxVSA8PCB3aWR0aCkgLSAxVSkpOwotICAg
ICAgICAgICAgQ0hFQ0sobGhzID09IHJocyk7Ci0gICAgICAgIH0KKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxzYnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgbHNiID0gbHNi
cy5hdChpKTsKKyAgICAgICAgdWludDMyX3QgbWFzayA9IGdlbmVyYXRlTWFzayh3aWR0aHMuYXQo
aSkpOworICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgbWFzaykgPT0gKG1hc2sgJiAoc3JjID4+IGxz
YikpKTsKICAgICB9CiB9CiAKLXZvaWQgdGVzdFViZng2NCgpCit2b2lkIHRlc3RVYmZ4NjRBcmdM
ZWZ0KCkKIHsKICAgICAvLyAoc3JjID4+IGxzYikgJiBtYXNrCi0gICAgdWludDY0X3Qgc3JjID0g
MHhmZmZmZmZmZjsKLSAgICBWZWN0b3I8dWludDY0X3Q+IGxzYnMgPSB7IDAsIDMxLCA2MiB9Owot
ICAgIFZlY3Rvcjx1aW50NjRfdD4gd2lkdGhzID0geyA2MywgMzIsIDEgfTsKKyAgICBpZiAoSlND
OjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAg
IHVpbnQ2NF90IHNyYyA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsKKyAgICBWZWN0b3I8dWludDY0X3Q+
IGxzYnMgPSB7IDEsIDMwLCA2MiB9OworICAgIFZlY3Rvcjx1aW50NjRfdD4gd2lkdGhzID0geyA2
MiwgMzMsIDEgfTsKIAogICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDY0X3QgbHNiLCB1aW50NjRf
dCBtYXNrKSAtPiB1aW50NjRfdCB7CiAgICAgICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtMjY3Nyw3
ICsyNjg1LDEwIEBAIHZvaWQgdGVzdFViZng2NCgpCiAgICAgICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLAogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRB
bmQsIE9yaWdpbigpLCBsZWZ0LCBtYXNrVmFsdWUpKTsKIAotICAgICAgICByZXR1cm4gY29tcGls
ZUFuZFJ1bjx1aW50NjRfdD4ocHJvYywgc3JjKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1Vz
ZXNJbnN0cnVjdGlvbigqY29kZSwgInViZngiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50
NjRfdD4oKmNvZGUsIHNyYyk7CiAgICAgfTsKIAogICAgIGF1dG8gZ2VuZXJhdGVNYXNrID0gWyZd
ICh1aW50NjRfdCB3aWR0aCkgLT4gdWludDY0X3QgewpAQCAtMjY4Nyw0NSArMjY5OCwyMDYgQEAg
dm9pZCB0ZXN0VWJmeDY0KCkKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxzYnMuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgdWludDY0X3QgbHNiID0gbHNicy5hdChpKTsKICAgICAgICAgdWlu
dDY0X3QgbWFzayA9IGdlbmVyYXRlTWFzayh3aWR0aHMuYXQoaSkpOwotICAgICAgICB1aW50NjRf
dCBsaHMgPSB0ZXN0KGxzYiwgbWFzayk7Ci0gICAgICAgIHVpbnQ2NF90IHJocyA9ICgoc3JjID4+
IGxzYikgJiBtYXNrKTsKLSAgICAgICAgQ0hFQ0sobGhzID09IHJocyk7CisgICAgICAgIENIRUNL
KHRlc3QobHNiLCBtYXNrKSA9PSAoKHNyYyA+PiBsc2IpICYgbWFzaykpOwogICAgIH0KIH0KIAot
dm9pZCB0ZXN0VWJmeDY0UGF0dGVybk1hdGNoKCkKK3ZvaWQgdGVzdFViZng2NEFyZ1JpZ2h0KCkK
IHsKLSAgICAvLyAoc3JjID4+IGxzYikgJiAoKDEgPDwgd2lkdGgpIC0gMSkKKyAgICAvLyBtYXNr
ICYgKHNyYyA+PiBsc2IpCisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwo
KSA8IDIpCisgICAgICAgIHJldHVybjsKICAgICB1aW50NjRfdCBzcmMgPSAweGZmZmZmZmZmZmZm
ZmZmZmY7Ci0gICAgVmVjdG9yPHVpbnQzMl90PiBpbW1zID0geyAwLCAxLCAzMCwgMzEsIDMyLCA2
MiwgNjMsIDY0IH07CisgICAgVmVjdG9yPHVpbnQ2NF90PiBsc2JzID0geyAxLCAzMCwgNjIgfTsK
KyAgICBWZWN0b3I8dWludDY0X3Q+IHdpZHRocyA9IHsgNjIsIDMzLCAxIH07CiAKLSAgICBhdXRv
IHRlc3QgPSBbJl0gKHVpbnQzMl90IGxzYiwgdWludDMyX3Qgd2lkdGgpIC0+IHVpbnQ2NF90IHsK
KyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQ2NF90IGxzYiwgdWludDY0X3QgbWFzaykgLT4gdWlu
dDY0X3QgewogICAgICAgICBQcm9jZWR1cmUgcHJvYzsKICAgICAgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKIAogICAgICAgICBWYWx1ZSogc3JjVmFsdWUgPSByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CiAgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsc2IpOwotICAgICAgICBWYWx1ZSogd2lkdGhWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCB3aWR0aCk7
Ci0gICAgICAgIFZhbHVlKiBjb25zdFZhbHVlQSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFs
dWU+KHByb2MsIE9yaWdpbigpLCAxKTsKLSAgICAgICAgVmFsdWUqIGNvbnN0VmFsdWVCID0gcm9v
dC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEpOworICAgICAgICBW
YWx1ZSogbWFza1ZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIG1hc2spOwogCi0gICAgICAgIFZhbHVlKiBsZWZ0ID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgc3JjVmFsdWUsIGxzYlZhbHVlKTsKLSAgICAgICAg
VmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKLSAgICAgICAgICAgIHByb2Ms
IFN1YiwgT3JpZ2luKCksIAotICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBTaGwsIE9yaWdpbigpLCBjb25zdFZhbHVlQSwgd2lkdGhWYWx1ZSksIGNvbnN0VmFsdWVCKTsK
KyAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hy
LCBPcmlnaW4oKSwgc3JjVmFsdWUsIGxzYlZhbHVlKTsKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKAogICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKLSAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbGVm
dCwgcmlnaHQpKTsKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0
QW5kLCBPcmlnaW4oKSwgbWFza1ZhbHVlLCByaWdodCkpOwogCi0gICAgICAgIHJldHVybiBjb21w
aWxlQW5kUnVuPHVpbnQ2NF90Pihwcm9jLCBzcmMpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21w
aWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNr
VXNlc0luc3RydWN0aW9uKCpjb2RlLCAidWJmeCIpOworICAgICAgICByZXR1cm4gaW52b2tlPHVp
bnQ2NF90PigqY29kZSwgc3JjKTsKICAgICB9OwogCi0gICAgZm9yIChhdXRvIGxzYiA6IGltbXMp
IHsKLSAgICAgICAgZm9yIChhdXRvIHdpZHRoIDogaW1tcykgewotICAgICAgICAgICAgdWludDY0
X3QgbGhzID0gdGVzdChsc2IsIHdpZHRoKTsKLSAgICAgICAgICAgIHVpbnQ2NF90IHJocyA9ICgo
c3JjID4+IGxzYikgJiAoKDFVTEwgPDwgd2lkdGgpIC0gMVVMTCkpOwotICAgICAgICAgICAgQ0hF
Q0sobGhzID09IHJocyk7Ci0gICAgICAgIH0KKyAgICBhdXRvIGdlbmVyYXRlTWFzayA9IFsmXSAo
dWludDY0X3Qgd2lkdGgpIC0+IHVpbnQ2NF90IHsKKyAgICAgICAgcmV0dXJuICgxVUxMIDw8IHdp
ZHRoKSAtIDFVTEw7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbHNicy5z
aXplKCk7ICsraSkgeworICAgICAgICB1aW50NjRfdCBsc2IgPSBsc2JzLmF0KGkpOworICAgICAg
ICB1aW50NjRfdCBtYXNrID0gZ2VuZXJhdGVNYXNrKHdpZHRocy5hdChpKSk7CisgICAgICAgIENI
RUNLKHRlc3QobHNiLCBtYXNrKSA9PSAobWFzayAmIChzcmMgPj4gbHNiKSkpOworICAgIH0KK30K
Kwordm9pZCB0ZXN0VWJmaXozMkFyZ0xlZnQoKQoreworICAgIC8vIGRlc3QgPSAobiA8PCBsc2Ip
ICYgbWFzayB3aGVyZSBtYXNrID0gKCgxIDw8IHdpZHRoKSAtIDEpIDw8IGxzYgorICAgIGlmIChK
U0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47Cisg
ICAgdWludDMyX3Qgc3JjID0gMHhmZmZmZmZmZjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGxzYnMg
PSB7IDEsIDE0LCAzMCB9OworICAgIFZlY3Rvcjx1aW50MzJfdD4gd2lkdGhzID0geyAzMCwgMTcs
IDEgfTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgbHNiLCB1aW50MzJfdCBtYXNr
KSAtPiB1aW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBzcmNWYWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2lu
KCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIGxzYlZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxzYik7
CisgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgbWFzayk7CisKKyAgICAgICAgVmFsdWUqIGxlZnQgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIHNyY1ZhbHVlLCBsc2JWYWx1ZSk7
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2Ms
IFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEJpdEFuZCwgT3JpZ2luKCksIGxlZnQsIG1hc2tWYWx1ZSkpOworCisgICAgICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAg
ICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1YmZpeiIpOworICAgICAgICByZXR1
cm4gaW52b2tlPHVpbnQzMl90PigqY29kZSwgc3JjKTsKKyAgICB9OworCisgICAgYXV0byBnZW5l
cmF0ZU1hc2sgPSBbJl0gKHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBsc2IpIC0+IHVpbnQzMl90
IHsKKyAgICAgICAgcmV0dXJuICgoMVUgPDwgd2lkdGgpIC0gMVUpIDw8IGxzYjsKKyAgICB9Owor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IHVpbnQzMl90IGxzYiA9IGxzYnMuYXQoaSk7CisgICAgICAgIHVpbnQzMl90IG1hc2sgPSBnZW5l
cmF0ZU1hc2sod2lkdGhzLmF0KGkpLCBsc2IpOworICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgbWFz
aykgPT0gKChzcmMgPDwgbHNiKSAmIG1hc2spKTsKKyAgICB9Cit9CisKK3ZvaWQgdGVzdFViZml6
MzJBcmdSaWdodCgpCit7CisgICAgLy8gZGVzdCA9ICBtYXNrICYgKG4gPDwgbHNiKSB3aGVyZSBt
YXNrID0gKCgxIDw8IHdpZHRoKSAtIDEpIDw8IGxzYgorICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRl
ZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgdWludDMyX3Qgc3Jj
ID0gMHhmZmZmZmZmZjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGxzYnMgPSB7IDEsIDE0LCAzMCB9
OworICAgIFZlY3Rvcjx1aW50MzJfdD4gd2lkdGhzID0geyAzMCwgMTcsIDEgfTsKKworICAgIGF1
dG8gdGVzdCA9IFsmXSAodWludDMyX3QgbHNiLCB1aW50MzJfdCBtYXNrKSAtPiB1aW50MzJfdCB7
CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBzcmNWYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIGxzYlZhbHVlID0gcm9vdC0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxzYik7CisgICAgICAgIFZhbHVl
KiBtYXNrVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgbWFzayk7CisKKyAgICAgICAgVmFsdWUqIGxlZnQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIFNobCwgT3JpZ2luKCksIHNyY1ZhbHVlLCBsc2JWYWx1ZSk7CisgICAgICAgIHJvb3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3Jp
Z2luKCksIG1hc2tWYWx1ZSwgbGVmdCkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hlY2tVc2Vz
SW5zdHJ1Y3Rpb24oKmNvZGUsICJ1YmZpeiIpOworICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQz
Ml90PigqY29kZSwgc3JjKTsKKyAgICB9OworCisgICAgYXV0byBnZW5lcmF0ZU1hc2sgPSBbJl0g
KHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBsc2IpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgcmV0
dXJuICgoMVUgPDwgd2lkdGgpIC0gMVUpIDw8IGxzYjsKKyAgICB9OworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVpbnQzMl90IGxzYiA9
IGxzYnMuYXQoaSk7CisgICAgICAgIHVpbnQzMl90IG1hc2sgPSBnZW5lcmF0ZU1hc2sod2lkdGhz
LmF0KGkpLCBsc2IpOworICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgbWFzaykgPT0gKG1hc2sgJiAo
c3JjIDw8IGxzYikpKTsKKyAgICB9Cit9CisKK3ZvaWQgdGVzdFViZml6NjRBcmdMZWZ0KCkKK3sK
KyAgICAvLyBkZXN0ID0gKG4gPDwgbHNiKSAmIG1hc2sgd2hlcmUgbWFzayA9ICgoMSA8PCB3aWR0
aCkgLSAxKSA8PCBsc2IKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgp
IDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIHVpbnQ2NF90IHNyYyA9IDB4ZmZmZmZmZmZmZmZm
ZmZmZjsKKyAgICBWZWN0b3I8dWludDY0X3Q+IGxzYnMgPSB7IDEsIDMwLCA2MiB9OworICAgIFZl
Y3Rvcjx1aW50NjRfdD4gd2lkdGhzID0geyA2MiwgMzMsIDEgfTsKKworICAgIGF1dG8gdGVzdCA9
IFsmXSAodWludDY0X3QgbHNiLCB1aW50NjRfdCBtYXNrKSAtPiB1aW50NjRfdCB7CisgICAgICAg
IFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9j
aygpOworCisgICAgICAgIFZhbHVlKiBzcmNWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgVmFsdWUqIGxzYlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIGxzYik7CisgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzayk7CisKKyAgICAgICAgVmFsdWUq
IGxlZnQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIHNyY1Zh
bHVlLCBsc2JWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAg
ICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGxlZnQsIG1hc2tWYWx1ZSkpOwor
CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNB
Uk02NCgpKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1YmZpeiIp
OworICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgc3JjKTsKKyAgICB9Owor
CisgICAgYXV0byBnZW5lcmF0ZU1hc2sgPSBbJl0gKHVpbnQ2NF90IHdpZHRoLCB1aW50MzJfdCBs
c2IpIC0+IHVpbnQ2NF90IHsKKyAgICAgICAgcmV0dXJuICgoMVVMTCA8PCB3aWR0aCkgLSAxVUxM
KSA8PCBsc2I7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbHNicy5zaXpl
KCk7ICsraSkgeworICAgICAgICB1aW50NjRfdCBsc2IgPSBsc2JzLmF0KGkpOworICAgICAgICB1
aW50NjRfdCBtYXNrID0gZ2VuZXJhdGVNYXNrKHdpZHRocy5hdChpKSwgbHNiKTsKKyAgICAgICAg
Q0hFQ0sodGVzdChsc2IsIG1hc2spID09ICgoc3JjIDw8IGxzYikgJiBtYXNrKSk7CisgICAgfQor
fQorCit2b2lkIHRlc3RVYmZpejY0QXJnUmlnaHQoKQoreworICAgIC8vIGRlc3QgPSBtYXNrICYg
KG4gPDwgbHNiKSB3aGVyZSBtYXNrID0gKCgxIDw8IHdpZHRoKSAtIDEpIDw8IGxzYgorICAgIGlm
IChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47
CisgICAgdWludDY0X3Qgc3JjID0gMHhmZmZmZmZmZmZmZmZmZmZmOworICAgIFZlY3Rvcjx1aW50
NjRfdD4gbHNicyA9IHsgMSwgMzAsIDYyIH07CisgICAgVmVjdG9yPHVpbnQ2NF90PiB3aWR0aHMg
PSB7IDYyLCAzMywgMSB9OworCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50NjRfdCBsc2IsIHVp
bnQ2NF90IG1hc2spIC0+IHVpbnQ2NF90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUq
IHNyY1ZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSogbHNiVmFsdWUgPSBy
b290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbHNiKTsKKyAgICAg
ICAgVmFsdWUqIG1hc2tWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBtYXNrKTsKKworICAgICAgICBWYWx1ZSogbGVmdCA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgc3JjVmFsdWUsIGxzYlZhbHVlKTsKKyAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0
QW5kLCBPcmlnaW4oKSwgbWFza1ZhbHVlLCBsZWZ0KSk7CisKKyAgICAgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBj
aGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInViZml6Iik7CisgICAgICAgIHJldHVybiBpbnZv
a2U8dWludDY0X3Q+KCpjb2RlLCBzcmMpOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyYXRlTWFz
ayA9IFsmXSAodWludDY0X3Qgd2lkdGgsIHVpbnQzMl90IGxzYikgLT4gdWludDY0X3QgeworICAg
ICAgICByZXR1cm4gKCgxVUxMIDw8IHdpZHRoKSAtIDFVTEwpIDw8IGxzYjsKKyAgICB9OworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVp
bnQ2NF90IGxzYiA9IGxzYnMuYXQoaSk7CisgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBnZW5lcmF0
ZU1hc2sod2lkdGhzLmF0KGkpLCBsc2IpOworICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgbWFzaykg
PT0gKG1hc2sgJiAoc3JjIDw8IGxzYikpKTsKICAgICB9CiB9CiAKQEAgLTM2MTUsMTAgKzM3ODcs
MTQgQEAgc3RhdGljIHZvaWQgdGVzdEJpdE9ySW1tQXJnMzIoaW50IGEsIGludCBiKQogCiB2b2lk
IGFkZEJpdFRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8
dm9pZCgpPj4+JiB0YXNrcykKIHsKLSAgICBSVU4odGVzdFViZngzMigpKTsKLSAgICBSVU4odGVz
dFViZngzMlBhdHRlcm5NYXRjaCgpKTsKLSAgICBSVU4odGVzdFViZng2NCgpKTsKLSAgICBSVU4o
dGVzdFViZng2NFBhdHRlcm5NYXRjaCgpKTsKKyAgICBSVU4odGVzdFViZngzMkFyZ0xlZnQoKSk7
CisgICAgUlVOKHRlc3RVYmZ4MzJBcmdSaWdodCgpKTsKKyAgICBSVU4odGVzdFViZng2NEFyZ0xl
ZnQoKSk7CisgICAgUlVOKHRlc3RVYmZ4NjRBcmdSaWdodCgpKTsKKyAgICBSVU4odGVzdFViZml6
MzJBcmdMZWZ0KCkpOworICAgIFJVTih0ZXN0VWJmaXozMkFyZ1JpZ2h0KCkpOworICAgIFJVTih0
ZXN0VWJmaXo2NEFyZ0xlZnQoKSk7CisgICAgUlVOKHRlc3RVYmZpejY0QXJnUmlnaHQoKSk7CiAg
ICAgUlVOKHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2szMigpKTsKICAgICBSVU4o
dGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazY0KCkpOwogICAgIFJVTih0ZXN0Qml0
QW5kQXJncyg0MywgNDMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMu
aCBiL1NvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAppbmRleCAwMWZlMjM2YTIxOWU3MDE5MTlk
MjJhZjBlN2Y0M2NhYTA1N2I5YjljLi43YWRiODc0MmE4ZGU5ODEzNzIzZTU5MjUzMmY0YWEzMDE0
NjQ4OWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKKysrIGIvU291
cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCkBAIC03MjgsNiArNzI4LDI4IEBAIGNvbnN0ZXhwciB1
bnNpZ25lZCBnZXRNU0JTZXRDb25zdGV4cHIoVCB0KQogICAgIHJldHVybiBiaXRTaXplIC0gMSAt
IGNsekNvbnN0ZXhwcih0KTsKIH0KIAoraW5saW5lIHNpemVfdCBjb3VudFRyYWlsaW5nWmVyb3Mo
dWludDMyX3QgdikKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgTW9kMzdCaXRQb3NpdGlv
bltdID0geworICAgICAgICAzMiwgMCwgMSwgMjYsIDIsIDIzLCAyNywgMCwgMywgMTYsIDI0LCAz
MCwgMjgsIDExLCAwLCAxMywKKyAgICAgICAgNCwgNywgMTcsIDAsIDI1LCAyMiwgMzEsIDE1LCAy
OSwgMTAsIDEyLCA2LCAwLCAyMSwgMTQsIDksCisgICAgICAgIDUsIDIwLCA4LCAxOSwgMTgKKyAg
ICB9OworICAgIHJldHVybiBNb2QzN0JpdFBvc2l0aW9uWygoMSArIH52KSAmIHYpICUgMzddOwor
fQorCitpbmxpbmUgc2l6ZV90IGNvdW50VHJhaWxpbmdaZXJvcyh1aW50NjRfdCB2KQoreworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBNb2Q2N1Bvc2l0aW9uW10gPSB7CisgICAgICAgIDY0LCAw
LCAxLCAzOSwgMiwgMTUsIDQwLCAyMywgMywgMTIsIDE2LCA1OSwgNDEsIDE5LCAyNCwgNTQsCisg
ICAgICAgIDQsIDY0LCAxMywgMTAsIDE3LCA2MiwgNjAsIDI4LCA0MiwgMzAsIDIwLCA1MSwgMjUs
IDQ0LCA1NSwKKyAgICAgICAgNDcsIDUsIDMyLCA2NSwgMzgsIDE0LCAyMiwgMTEsIDU4LCAxOCwg
NTMsIDYzLCA5LCA2MSwgMjcsCisgICAgICAgIDI5LCA1MCwgNDMsIDQ2LCAzMSwgMzcsIDIxLCA1
NywgNTIsIDgsIDI2LCA0OSwgNDUsIDM2LCA1NiwKKyAgICAgICAgNywgNDgsIDM1LCA2LCAzNCwg
MzMsIDAKKyAgICB9OworICAgIHJldHVybiBNb2Q2N1Bvc2l0aW9uWygoMSArIH52KSAmIHYpICUg
NjddOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpzaHVmZmxlVmVjdG9y
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431939</attachid>
            <date>2021-06-21 18:51:37 -0700</date>
            <delta_ts>2021-06-22 19:24:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227204-20210621205136.patch</filename>
            <type>text/plain</type>
            <size>29596</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MDc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
OTNjMGNmMWI2ZTcwMGVkMDQ1ZjkyZWU5ZDI3MmExODg0MTI4OGM1Li43YmMyOTNkY2ZhZTQyOWJm
NGIxMTQyYjdkZWQ3NGI2ZGExOTgzZGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NiBAQAorMjAyMS0wNi0yMSAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIGEgbmV3IHBhdHRlcm4gdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXRpbGl6ZSBVQkZJWiBzdXBwb3J0ZWQgYnkgQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzIwNAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuc2lnbmVkIEJpdGZpZWxkIEluc2VydCBpbiBa
ZXJvKFVCRklaKSwgc3VwcG9ydGVkIGJ5IEFSTTY0LCB6ZXJvcyB0aGUgCisgICAgICAgIGRlc3Rp
bmF0aW9uIHJlZ2lzdGVyIGFuZCBjb3BpZXMgYW55IG51bWJlciBvZiBjb250aWd1b3VzIGJpdHMg
ZnJvbSBhIAorICAgICAgICBzb3VyY2UgcmVnaXN0ZXIgaW50byBhbnkgcG9zaXRpb24gaW4gdGhl
IGRlc3RpbmF0aW9uIHJlZ2lzdGVyLiBUaGUgCisgICAgICAgIGluc3RydWN0aW9uIHNlbGVjdG9y
IGNhbiB1dGlsaXplIHRoaXMgdG8gbG93ZXJpbmcgY2VydGFpbiBwYXR0ZXJucyBpbiAKKyAgICAg
ICAgQjMgSVIgYmVmb3JlIGZ1cnRoZXIgQWlyIG9wdGltaXphdGlvbi4gCisKKyAgICAgICAgR2l2
ZW4gdGhlIG9wZXJhdGlvbjogdWJmaXogZCwgbiwgbHNiLCB3aWR0aAorCisgICAgICAgIFRoaXMg
aXMgZXF1aXZhbGVudCB0byAiZCA9IChuIDw8IGxzYikgJiAoKCgxIDw8IHdpZHRoKSAtIDEpIDw8
IGxzYikiLiAKKyAgICAgICAgU2luY2Ugd2FzbSBpbnRyb2R1Y2VzIGNvbnN0YW50IGZvbGRpbmcs
IHRoZW4gdGhlIHBhdHRlcm4gd291bGQgYmU6CisKKyAgICAgICAgZCA9IChuIDw8IGxzYikgJiBt
YXNrCisKKyAgICAgICAgd2hlcmUgdGhlIG1hc2sgc2hvdWxkIGhhdmUgYSBiaW5hcnkgdHlwZSBp
biBjb250aWd1b3VzIG9uZXMgc3RhcnRpbmcgZnJvbSBsc2IuIAorICAgICAgICBGb3IgZXhhbXBs
ZTogMGIwMDExMTEwMAorCisgICAgICAgIFRvIG1ha2UgdGhlIHBhdHRlcm4gbWF0Y2hpbmcgaW4g
aW5zdHJ1Y3Rpb24gc2VsZWN0aW9uIGJlbmVmaWNpYWwgdG8gSklULCB0aGVzZSAKKyAgICAgICAg
Y29uc3RyYWludHMgc2hvdWxkIGJlIGludHJvZHVjZWQ6CisKKyAgICAgICAgMS4gbHNiID49IDAg
CisgICAgICAgIDIuIHdpZHRoID4gMAorICAgICAgICAzLiBsc2IgKyB3aWR0aCA8PSBkYXRhc2l6
ZSAoMzIgb3IgNjQpCisKKyAgICAgICAgR2l2ZW4gQjMgSVI6CisgICAgICAgIEludCBAMCA9IEFy
Z3VtZW50UmVnKCV4MCkKKyAgICAgICAgSW50IEAxID0gbHNiCisgICAgICAgIEludCBAMiA9IDBi
MDExMAorICAgICAgICBJbnQgQDMgPSBTaGwoQDAsIEAxKQorICAgICAgICBJbnQgQDQgPSBCaXRB
bmQoQDMsIEAyKSAgCisgICAgICAgIFZvaWRANSA9IFJldHVybihANCwgVGVybWluYWwpICAgICAg
CisKKyAgICAgICAgQmVmb3JlIEFkZGluZyBVQkZJWiBQYXR0ZXJuOgorICAgICAgICAvLyBPbGQg
b3B0aW1pemVkIEFJUgorICAgICAgICBMc2hpZnQgICV4MCwgJDYyLCAleDAsIEAzCisgICAgICAg
IEFuZCAgMGIwMTEwLCAleDAsICV4MCwgQDQKKyAgICAgICAgUmV0ICAgICAleDAsICAgICAgICAg
ICBANQorCisgICAgICAgIEFmdGVyIEFkZGluZyBVQkZJWiBQYXR0ZXJuOgorICAgICAgICAvLyBO
ZXcgb3B0aW1pemVkIEFJUgorICAgICAgICBVYmZpeiAleDAsIGxzYiwgMiwgJXgwLCBANAorICAg
ICAgICBSZXQgICAleDAsICAgICAgICAgICAgICBANQorCisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6
dWJmaXozMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnViZml6NjQpOgor
ICAgICAgICAqIGFzc2VtYmxlci90ZXN0bWFzbS5jcHA6CisgICAgICAgIChKU0M6OnRlc3RVYmZp
ejMyKToKKyAgICAgICAgKEpTQzo6dGVzdFViZml6NjQpOgorICAgICAgICAqIGIzL0IzTG93ZXJU
b0Fpci5jcHA6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAq
IGIzL3Rlc3RiMy5oOgorICAgICAgICAqIGIzL3Rlc3RiM18yLmNwcDoKKyAgICAgICAgKHRlc3RV
YmZ4MzJBcmdMZWZ0KToKKyAgICAgICAgKHRlc3RVYmZ4MzJBcmdSaWdodCk6CisgICAgICAgICh0
ZXN0VWJmeDY0QXJnTGVmdCk6CisgICAgICAgICh0ZXN0VWJmeDY0QXJnUmlnaHQpOgorICAgICAg
ICAodGVzdFViZml6MzJBcmdMZWZ0KToKKyAgICAgICAgKHRlc3RVYmZpejMyQXJnUmlnaHQpOgor
ICAgICAgICAodGVzdFViZml6NjRBcmdMZWZ0KToKKyAgICAgICAgKHRlc3RVYmZpejY0QXJnUmln
aHQpOgorICAgICAgICAoYWRkQml0VGVzdHMpOgorICAgICAgICAodGVzdFViZngzMik6IERlbGV0
ZWQuCisgICAgICAgICh0ZXN0VWJmeDMyUGF0dGVybk1hdGNoKTogRGVsZXRlZC4KKyAgICAgICAg
KHRlc3RVYmZ4NjQpOiBEZWxldGVkLgorICAgICAgICAodGVzdFViZng2NFBhdHRlcm5NYXRjaCk6
IERlbGV0ZWQuCisKIDIwMjEtMDYtMjEgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCBhIG5ldyBwYXR0ZXJuIHRvIGluc3RydWN0aW9uIHNlbGVjdG9y
IHRvIHV0aWxpemUgU01TVUJMIHN1cHBvcnRlZCBieSBBUk02NApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA1MzA4YThlMDA2NmU2
YmU1ODI2YzU2NmYzN2I2NzQxYjE0NzQyMGYzLi4wMDA5NmU5ODVjNTU3M2QxOGY1ODcxZDBhOWZm
OTVjNWQ4OGFlNDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTA2LTIxICBZaWppYSBIdWFu
ZyAgPHlpamlhX2h1YW5nQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBuZXcgcGF0dGVybiB0
byBpbnN0cnVjdGlvbiBzZWxlY3RvciB0byB1dGlsaXplIFVCRklaIHN1cHBvcnRlZCBieSBBUk02
NAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjA0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGZ1
bmN0aW9ucyB0byBjb3VudCB0aGUgY29uc2VjdXRpdmUgemVybyBiaXRzICh0cmFpbGluZykgb24g
dGhlIAorICAgICAgICByaWdodCB3aXRoIG1vZHVsdXMgZGl2aXNpb24gYW5kIGxvb2t1cC4gUmVm
ZXJlbmNlOiBCaXQgVHdpZGRsaW5nIEhhY2tzLgorCisgICAgICAgICogd3RmL01hdGhFeHRyYXMu
aDoKKyAgICAgICAgKFdURjo6Y291bnRUcmFpbGluZ1plcm9zKToKKwogMjAyMS0wNi0yMSAgS2lt
bW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIG1ha2VVbmlxdWUg
Y2Fubm90IGJlIHVzZWQgdG8gaW5zdGFudGlhdGUgZnVuY3Rpb24tbG9jYWwgY2xhc3NlcwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjQuaAppbmRleCBjYTg3YTllMDRhM2YyZjU4OTE3YzNhNzRhMzY4MGMyYzI3MTBhYjhmLi4yNzM4
YThlZjEyMDFiNzFkZDg2NjE1YWE2MjRjOWZkZDg1M2QyOGJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtNDAw
LDYgKzQwMCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnViZng8NjQ+KGRlc3Qs
IHNyYywgbHNiLm1fdmFsdWUsIHdpZHRoLm1fdmFsdWUpOwogICAgIH0KIAorICAgIHZvaWQgdWJm
aXozMihSZWdpc3RlcklEIHNyYywgVHJ1c3RlZEltbTMyIGxzYiwgVHJ1c3RlZEltbTMyIHdpZHRo
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci51YmZpejwzMj4o
ZGVzdCwgc3JjLCBsc2IubV92YWx1ZSwgd2lkdGgubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9p
ZCB1YmZpejY0KFJlZ2lzdGVySUQgc3JjLCBUcnVzdGVkSW1tMzIgbHNiLCBUcnVzdGVkSW1tMzIg
d2lkdGgsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnViZml6
PDY0PihkZXN0LCBzcmMsIGxzYi5tX3ZhbHVlLCB3aWR0aC5tX3ZhbHVlKTsKKyAgICB9CisKICAg
ICB2b2lkIGFuZDY0KFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBSZWdpc3RlcklE
IGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRfPDY0PihkZXN0LCBzcmMxLCBz
cmMyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1h
c20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKaW5k
ZXggNzBjMDlkMmU1Njk5ZDgzZjc3OTA0Zjc4MWZkYmUyZmViZTNhZTUyZS4uNmRhYWIwZTRiMDBj
ODc4MzdhNjBkMmRhNjUzMmNhYjYxYjRiYjZjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKQEAgLTExMTMsNiArMTExMyw1NiBAQCB2b2lkIHRlc3RV
YmZ4NjQoKQogICAgICAgICB9CiAgICAgfQogfQorCit2b2lkIHRlc3RVYmZpejMyKCkKK3sKKyAg
ICB1aW50MzJfdCBzcmMgPSAweGZmZmZmZmZmOworICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9
IHsgMCwgMSwgMzAsIDMxLCAzMiwgNjIsIDYzLCA2NCB9OworICAgIGZvciAoYXV0byBsc2IgOiBp
bW1zKSB7CisgICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGltbXMpIHsKKyAgICAgICAgICAgIGlm
IChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lkdGggPCAzMikgeworICAgICAgICAg
ICAgICAgIGF1dG8gdWJmaXozMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgewor
ICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAg
ICAgICAgICAgICAgIGppdC51YmZpejMyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGxzYiksIAorICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod2lkdGgpLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAg
ICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAg
ICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
dWludDMyX3QgbWFzayA9ICgoMVUgPDwgd2lkdGgpIC0gMVUpIDw8IGxzYjsKKyAgICAgICAgICAg
ICAgICBDSEVDS19FUShpbnZva2U8dWludDMyX3Q+KHViZml6MzIsIHNyYyksICgoc3JjIDw8IGxz
YikgJiBtYXNrKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
dGVzdFViZml6NjQoKQoreworICAgIHVpbnQ2NF90IHNyYyA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsK
KyAgICBWZWN0b3I8dWludDMyX3Q+IGltbXMgPSB7IDAsIDEsIDMwLCAzMSwgMzIsIDYyLCA2Mywg
NjQgfTsKKyAgICBmb3IgKGF1dG8gbHNiIDogaW1tcykgeworICAgICAgICBmb3IgKGF1dG8gd2lk
dGggOiBpbW1zKSB7CisgICAgICAgICAgICBpZiAobHNiID49IDAgJiYgd2lkdGggPiAwICYmIGxz
YiArIHdpZHRoIDwgNjQpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHViZml6NjQgPSBjb21waWxl
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQudWJmaXo2NChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihsc2IpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKHdpZHRoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSAoKDFVTEwgPDwgd2lk
dGgpIC0gMVVMTCkgPDwgbHNiOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGludm9rZTx1aW50
NjRfdD4odWJmaXo2NCwgc3JjKSwgKHNyYyA8PCBsc2IpICYgbWFzayk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9Cit9CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZf
NjQpIHx8IENQVShBUk02NCkKQEAgLTMyODAsNiArMzMzMCw4IEBAIHZvaWQgcnVuKGNvbnN0IGNo
YXIqIGZpbHRlcikgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVUWV9BTkFMWVNJUwogICAgIFJVTih0
ZXN0TXVsU3ViU2lnbkV4dGVuZDMyKCkpOwogICAgIFJVTih0ZXN0VWJmeDMyKCkpOwogICAgIFJV
Tih0ZXN0VWJmeDY0KCkpOworICAgIFJVTih0ZXN0VWJmaXozMigpKTsKKyAgICBSVU4odGVzdFVi
Zml6NjQoKSk7CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShB
Uk02NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKaW5kZXggMzM4
NjNlYjhlYzQ4NzI0MjE2NWNmMTA4NTA3YjA2NjBlMmFlN2Y0Yy4uNDQ0N2FmMzA4MGZlMzBkYTA4
YTEwMGIzMTYxNDkyZGE5MjA1ZDljNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTG93ZXJUb0Fpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJCM1dhc21BZGRyZXNzVmFs
dWUuaCIKICNpbmNsdWRlIDx3dGYvSW5kZXhNYXAuaD4KICNpbmNsdWRlIDx3dGYvSW5kZXhTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KIAogI2lmICFBU1NFUlRfRU5BQkxFRApAQCAtMjU5Niw3ICsyNTk3LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG11bHRpcGx5TGVmdCA9IHJpZ2h0LT5jaGls
ZCgwKTsKICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG11bHRpcGx5UmlnaHQgPSByaWdodC0+
Y2hpbGQoMSk7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gU01TVUJMOiBkID0gYSAtIFNFeHQz
MihuKSAqICBTRXh0MzIobSkKKyAgICAgICAgICAgICAgICAgICAgLy8gU01TVUJMOiBkID0gYSAt
IFNFeHQzMihuKSAqIFNFeHQzMihtKQogICAgICAgICAgICAgICAgICAgICBpZiAobXVsdGlwbHlT
dWJPcGNvZGUgPT0gTXVsdGlwbHlTdWI2NAogICAgICAgICAgICAgICAgICAgICAgICAgJiYgaXNW
YWxpZEZvcm0oTXVsdGlwbHlTdWJTaWduRXh0ZW5kMzIsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJn
OjpUbXAsIEFyZzo6VG1wKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0cnlTRXh0
MzIgPSBbJl0gKFZhbHVlKiB2KSB7CkBAIC0yNzQwLDI2ICsyNzQxLDY5IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBV
QkZYIFBhdHRlcm46IGRlc3QgPSAoc3JjID4+IGxzYikgJiAoKDEgPDwgd2lkdGgpIC0gMSkKLSAg
ICAgICAgICAgIGlmIChjYW5CZUludGVybmFsKGxlZnQpICYmIGxlZnQtPm9wY29kZSgpID09IFpT
aHIpIHsKKyAgICAgICAgICAgIC8vIFVCRlggUGF0dGVybjogZGVzdCA9IChzcmMgPj4gbHNiKSAm
IG1hc2sgd2hlcmUgbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICAgICAgICAgIGF1dG8gdHJ5
VUJGWCA9IFsmXSAoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkgLT4gYm9vbCB7CisgICAgICAg
ICAgICAgICAgaWYgKGxlZnQtPm9wY29kZSgpICE9IFpTaHIgfHwgIWNhbkJlSW50ZXJuYWwobGVm
dCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBW
YWx1ZSogc3JjVmFsdWUgPSBsZWZ0LT5jaGlsZCgwKTsKICAgICAgICAgICAgICAgICBWYWx1ZSog
bHNiVmFsdWUgPSBsZWZ0LT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICBpZiAoIWltbShzcmNW
YWx1ZSkgJiYgaW1tKGxzYlZhbHVlKSAmJiByaWdodC0+aGFzSW50KCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaW50NjRfdCBsc2IgPSBsc2JWYWx1ZS0+YXNJbnQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgdWludDY0X3QgbWFzayA9IHJpZ2h0LT5hc0ludCgpOwotICAgICAgICAgICAgICAgICAg
ICB1aW50OF90IHdpZHRoID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oIShtYXNrICYgKG1hc2sgKyAx
KSkpICogV1RGOjpiaXRDb3VudChtYXNrKTsKLSAgICAgICAgICAgICAgICAgICAgQWlyOjpPcGNv
ZGUgb3Bjb2RlID0gb3Bjb2RlRm9yVHlwZShVYmZ4MzIsIFViZng2NCwgc3JjVmFsdWUtPnR5cGUo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvcGNvZGUKLSAgICAgICAgICAgICAgICAgICAg
ICAgICYmIGxzYiA+PSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiB3aWR0aCA+IDAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICYmIGxzYiArIHdpZHRoIDw9ICgzMiA8PCAob3Bjb2RlID09
IFViZng2NCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBpc1ZhbGlkRm9ybShvcGNvZGUs
IEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChzcmNWYWx1ZSksIGltbShsc2JWYWx1ZSks
IGltbSh3aWR0aCksIHRtcChtX3ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21t
aXRJbnRlcm5hbChsZWZ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG9wY29kZUZvclR5cGUoVWJmeDMyLCBV
YmZ4NjQsIHNyY1ZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZv
cm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6SW1tLCBBcmc6OlRtcCkpIAorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKGltbShz
cmNWYWx1ZSkgfHwgIWltbShsc2JWYWx1ZSkgfHwgbHNiVmFsdWUtPmFzSW50KCkgPCAwIHx8ICFy
aWdodC0+aGFzSW50KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICAgICAgICAgIHVpbnQ2NF90IGxzYiA9IGxzYlZhbHVlLT5hc0ludCgpOworICAgICAgICAg
ICAgICAgIHVpbnQ2NF90IG1hc2sgPSByaWdodC0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIW1hc2sgfHwgbWFzayAmIChtYXNrICsgMSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCB3aWR0aCA9IFdURjo6Yml0Q291bnQo
bWFzayk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgZGF0YXNpemUgPSBvcGNvZGUgPT0gVWJm
eDMyID8gMzIgOiA2NDsKKyAgICAgICAgICAgICAgICBpZiAobHNiICsgd2lkdGggPiBkYXRhc2l6
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAg
YXBwZW5kKG9wY29kZSwgdG1wKHNyY1ZhbHVlKSwgaW1tKGxzYlZhbHVlKSwgaW1tKHdpZHRoKSwg
dG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
IGlmICh0cnlVQkZYKGxlZnQsIHJpZ2h0KSB8fCB0cnlVQkZYKHJpZ2h0LCBsZWZ0KSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIFVCRklaIFBhdHRlcm46IGRlc3Qg
PSAobiA8PCBsc2IpICYgbWFzayB3aGVyZSBtYXNrID0gKCgxIDw8IHdpZHRoKSAtIDEpIDw8IGxz
YgorICAgICAgICAgICAgYXV0byB0cnlVQkZJWiA9IFsmXSAoVmFsdWUqIGxlZnQsIFZhbHVlKiBy
aWdodCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPm9wY29kZSgpICE9IFNo
bCB8fCAhY2FuQmVJbnRlcm5hbChsZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIFZhbHVlKiBzcmNWYWx1ZSA9IGxlZnQtPmNoaWxkKDApOwor
ICAgICAgICAgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IGxlZnQtPmNoaWxkKDEpOworCisgICAg
ICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gb3Bjb2RlRm9yVHlwZShVYmZpejMyLCBV
YmZpejY0LCBzcmNWYWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRG
b3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OkltbSwgQXJnOjpUbXApKSAKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChpbW0o
c3JjVmFsdWUpIHx8ICFpbW0obHNiVmFsdWUpIHx8IGxzYlZhbHVlLT5hc0ludCgpIDwgMCB8fCAh
cmlnaHQtPmhhc0ludCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgICAgICAgICB1aW50NjRfdCBsc2IgPSBsc2JWYWx1ZS0+YXNJbnQoKTsKKyAgICAgICAg
ICAgICAgICB1aW50NjRfdCBtYXNrID0gcmlnaHQtPmFzSW50KCk7CisgICAgICAgICAgICAgICAg
dWludDY0X3QgbWFza0xTQiA9IFdURjo6Y291bnRUcmFpbGluZ1plcm9zKG1hc2spOworICAgICAg
ICAgICAgICAgIGlmIChsc2IgIT0gbWFza0xTQikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIG1hc2sgPj49IG1hc2tMU0I7CisgICAgICAgICAgICAg
ICAgaWYgKCFtYXNrIHx8IG1hc2sgJiAobWFzayArIDEpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgdWludDY0X3Qgd2lkdGggPSBXVEY6OmJpdENv
dW50KG1hc2spOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGRhdGFzaXplID0gb3Bjb2RlID09
IFViZml6MzIgPyAzMiA6IDY0OworICAgICAgICAgICAgICAgIGlmIChsc2IgKyB3aWR0aCA+IGRh
dGFzaXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAg
ICAgICBhcHBlbmQob3Bjb2RlLCB0bXAoc3JjVmFsdWUpLCBpbW0obHNiVmFsdWUpLCBpbW0od2lk
dGgpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQp
OworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKworICAgICAg
ICAgICAgaWYgKHRyeVVCRklaKGxlZnQsIHJpZ2h0KSB8fCB0cnlVQkZJWihyaWdodCwgbGVmdCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBhcHBlbmRCaW5PcDxBbmQz
MiwgQW5kNjQsIEFuZERvdWJsZSwgQW5kRmxvYXQsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7
CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJPcGNvZGUub3Bjb2RlcwppbmRleCA5YTJlNzQyNzY1MzcwZjMzZDZmMmRjNjYyNTFlNjE3YTU0
ZmQyMjlkLi5jZTIwMWJiYWU1MWJiNDM4ODlmYTUyODA3MzJkOGY3YmQyOTJjOWZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKQEAgLTM2Niw2
ICszNjYsMTIgQEAgYXJtNjQ6IFViZngzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMy
CiBhcm02NDogVWJmeDY0IFU6Rzo2NCwgVTpHOjMyLCBVOkc6MzIsIEQ6Rzo2NAogICAgIFRtcCwg
SW1tLCBJbW0sIFRtcAogCithcm02NDogVWJmaXozMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBa
RDpHOjMyCisgICAgVG1wLCBJbW0sIEltbSwgVG1wCisKK2FybTY0OiBVYmZpejY0IFU6Rzo2NCwg
VTpHOjMyLCBVOkc6MzIsIEQ6Rzo2NAorICAgIFRtcCwgSW1tLCBJbW0sIFRtcAorCiA2NDogQW5k
NjQgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAogICAgIFRtcCwgVG1wLCBUbXAKICAgICBhcm02NDog
Qml0SW1tNjQsIFRtcCwgVG1wCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggYjVlNGNm
MmM3ODg4ODJmNjVkM2YxMmM3MzJlZTI0ZDVjNjgzM2VlNC4uODI5YTkzOGQxMzVmZjQ5YjE4MGI3
MzdhNTExYjE2MGYzZTZiZGJiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtNDE2
LDEwICs0MTYsMTQgQEAgaW5saW5lIGRvdWJsZSBtb2RlbExvYWQ8ZG91YmxlLCBkb3VibGU+KGRv
dWJsZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KIAogdm9pZCBydW4oY29uc3QgY2hhciogZmls
dGVyKTsKIHZvaWQgdGVzdEJpdEFuZFNFeHQzMihpbnQzMl90IHZhbHVlLCBpbnQ2NF90IG1hc2sp
Owotdm9pZCB0ZXN0VWJmeDMyKCk7Ci12b2lkIHRlc3RVYmZ4MzJQYXR0ZXJuTWF0Y2goKTsKLXZv
aWQgdGVzdFViZng2NCgpOwotdm9pZCB0ZXN0VWJmeDY0UGF0dGVybk1hdGNoKCk7Cit2b2lkIHRl
c3RVYmZ4MzJBcmdMZWZ0KCk7Cit2b2lkIHRlc3RVYmZ4MzJBcmdSaWdodCgpOwordm9pZCB0ZXN0
VWJmeDY0QXJnTGVmdCgpOwordm9pZCB0ZXN0VWJmeDY0QXJnUmlnaHQoKTsKK3ZvaWQgdGVzdFVi
Zml6MzJBcmdMZWZ0KCk7Cit2b2lkIHRlc3RVYmZpejMyQXJnUmlnaHQoKTsKK3ZvaWQgdGVzdFVi
Zml6NjRBcmdMZWZ0KCk7Cit2b2lkIHRlc3RVYmZpejY0QXJnUmlnaHQoKTsKIHZvaWQgdGVzdEJp
dEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazMyKCk7CiB2b2lkIHRlc3RCaXRBbmRaZXJvU2hp
ZnRSaWdodEFyZ0ltbU1hc2s2NCgpOwogdm9pZCB0ZXN0QmFzaWNTZWxlY3QoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwCmluZGV4IDFkZGM3MWYxMDJhZDVhYWJiNzE5MjExZGU0
NzlmMGQxYzhhNjlhNzEuLmY1ZDRiNDk5NzM3OTQ4YjFiNDUwZjA5N2NiODAxODFkMjk2ZGVhNjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcApAQCAtMjU4MSwxMiArMjU4MSwx
NCBAQCB2b2lkIHRlc3ROZWdGbG9hdFdpdGhVc2VsZXNzRG91YmxlQ29udmVyc2lvbihmbG9hdCBh
KQogICAgIENIRUNLKGlzSWRlbnRpY2FsKGNvbXBpbGVBbmRSdW48ZmxvYXQ+KHByb2MsIGJpdHdp
c2VfY2FzdDxpbnQzMl90PihhKSksIC1hKSk7CiB9CiAKLXZvaWQgdGVzdFViZngzMigpCit2b2lk
IHRlc3RVYmZ4MzJBcmdMZWZ0KCkKIHsKICAgICAvLyAoc3JjID4+IGxzYikgJiBtYXNrCisgICAg
aWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVy
bjsKICAgICB1aW50MzJfdCBzcmMgPSAweGZmZmZmZmZmOwotICAgIFZlY3Rvcjx1aW50MzJfdD4g
bHNicyA9IHsgMCwgMTUsIDMwIH07Ci0gICAgVmVjdG9yPHVpbnQzMl90PiB3aWR0aHMgPSB7IDMw
LCAxNiwgMSB9OworICAgIFZlY3Rvcjx1aW50MzJfdD4gbHNicyA9IHsgMSwgMTQsIDMwIH07Cisg
ICAgVmVjdG9yPHVpbnQzMl90PiB3aWR0aHMgPSB7IDMwLCAxNywgMSB9OwogCiAgICAgYXV0byB0
ZXN0ID0gWyZdICh1aW50MzJfdCBsc2IsIHVpbnQzMl90IG1hc2spIC0+IHVpbnQzMl90IHsKICAg
ICAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC0yNjAyLDggKzI2MDQsMTEgQEAgdm9pZCB0ZXN0VWJm
eDMyKCkKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAogICAgICAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbGVmdCwgbWFza1ZhbHVlKSk7Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gY29tcGlsZUFuZFJ1bjx1aW50MzJfdD4ocHJvYywgc3JjKTsKKworICAg
ICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQo
KSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAidWJmeCIpOworICAg
ICAgICByZXR1cm4gaW52b2tlPHVpbnQzMl90PigqY29kZSwgc3JjKTsKICAgICB9OwogCiAgICAg
YXV0byBnZW5lcmF0ZU1hc2sgPSBbJl0gKHVpbnQzMl90IHdpZHRoKSAtPiB1aW50MzJfdCB7CkBA
IC0yNjEzLDE5ICsyNjE4LDIwIEBAIHZvaWQgdGVzdFViZngzMigpCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIHVpbnQzMl90IGxzYiA9IGxz
YnMuYXQoaSk7CiAgICAgICAgIHVpbnQzMl90IG1hc2sgPSBnZW5lcmF0ZU1hc2sod2lkdGhzLmF0
KGkpKTsKLSAgICAgICAgdWludDMyX3QgbGhzID0gdGVzdChsc2IsIG1hc2spOwotICAgICAgICB1
aW50MzJfdCByaHMgPSAoKHNyYyA+PiBsc2IpICYgbWFzayk7Ci0gICAgICAgIENIRUNLKGxocyA9
PSByaHMpOworICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgbWFzaykgPT0gKChzcmMgPj4gbHNiKSAm
IG1hc2spKTsKICAgICB9CiB9CiAKLXZvaWQgdGVzdFViZngzMlBhdHRlcm5NYXRjaCgpCit2b2lk
IHRlc3RVYmZ4MzJBcmdSaWdodCgpCiB7Ci0gICAgLy8gKHNyYyA+PiBsc2IpICYgKCgxIDw8IHdp
ZHRoKSAtIDEpCisgICAgLy8gbWFzayAmIChzcmMgPj4gbHNiKQorICAgIGlmIChKU0M6Ok9wdGlv
bnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CiAgICAgdWludDMy
X3Qgc3JjID0gMHhmZmZmZmZmZjsKLSAgICBWZWN0b3I8dWludDMyX3Q+IGltbXMgPSB7IDAsIDEs
IDMwLCAzMSwgMzIsIDYyLCA2MywgNjQgfTsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGxzYnMgPSB7
IDEsIDE0LCAzMCB9OworICAgIFZlY3Rvcjx1aW50MzJfdD4gd2lkdGhzID0geyAzMCwgMTcsIDEg
fTsKIAotICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgbHNiLCB1aW50MzJfdCB3aWR0aCkg
LT4gdWludDMyX3QgeworICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgbHNiLCB1aW50MzJf
dCBtYXNrKSAtPiB1aW50MzJfdCB7CiAgICAgICAgIFByb2NlZHVyZSBwcm9jOwogICAgICAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwogCkBAIC0yNjMzLDM2ICsyNjM5LDM4
IEBAIHZvaWQgdGVzdFViZngzMlBhdHRlcm5NYXRjaCgpCiAgICAgICAgICAgICBwcm9jLCBUcnVu
YywgT3JpZ2luKCksIAogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKICAgICAgICAgVmFs
dWUqIGxzYlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIGxzYik7Ci0gICAgICAgIFZhbHVlKiB3aWR0aFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHdpZHRoKTsKLSAgICAgICAgVmFsdWUqIGNvbnN0
VmFsdWVBID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEp
OwotICAgICAgICBWYWx1ZSogY29uc3RWYWx1ZUIgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgMSk7CisgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUgPSByb290
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzayk7CiAKLSAgICAg
ICAgVmFsdWUqIGxlZnQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdp
bigpLCBzcmNWYWx1ZSwgbHNiVmFsdWUpOwotICAgICAgICBWYWx1ZSogcmlnaHQgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KAotICAgICAgICAgICAgcHJvYywgU3ViLCBPcmlnaW4oKSwgCi0gICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIGNvbnN0
VmFsdWVBLCB3aWR0aFZhbHVlKSwgY29uc3RWYWx1ZUIpOworICAgICAgICBWYWx1ZSogcmlnaHQg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdpbigpLCBzcmNWYWx1ZSwg
bHNiVmFsdWUpOwogICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCiAgICAgICAg
ICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAotICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBsZWZ0LCByaWdodCkpOworICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBtYXNrVmFs
dWUsIHJpZ2h0KSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7Cisg
ICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigq
Y29kZSwgInViZngiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIHNy
Yyk7CisgICAgfTsKIAotICAgICAgICByZXR1cm4gY29tcGlsZUFuZFJ1bjx1aW50MzJfdD4ocHJv
Yywgc3JjKTsKKyAgICBhdXRvIGdlbmVyYXRlTWFzayA9IFsmXSAodWludDMyX3Qgd2lkdGgpIC0+
IHVpbnQzMl90IHsKKyAgICAgICAgcmV0dXJuICgxVSA8PCB3aWR0aCkgLSAxVTsKICAgICB9Owog
Ci0gICAgZm9yIChhdXRvIGxzYiA6IGltbXMpIHsKLSAgICAgICAgZm9yIChhdXRvIHdpZHRoIDog
aW1tcykgewotICAgICAgICAgICAgdWludDMyX3QgbGhzID0gdGVzdChsc2IsIHdpZHRoKTsKLSAg
ICAgICAgICAgIHVpbnQzMl90IHJocyA9ICgoc3JjID4+IGxzYikgJiAoKDFVIDw8IHdpZHRoKSAt
IDFVKSk7Ci0gICAgICAgICAgICBDSEVDSyhsaHMgPT0gcmhzKTsKLSAgICAgICAgfQorICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbHNicy5zaXplKCk7ICsraSkgeworICAgICAgICB1aW50MzJf
dCBsc2IgPSBsc2JzLmF0KGkpOworICAgICAgICB1aW50MzJfdCBtYXNrID0gZ2VuZXJhdGVNYXNr
KHdpZHRocy5hdChpKSk7CisgICAgICAgIENIRUNLKHRlc3QobHNiLCBtYXNrKSA9PSAobWFzayAm
IChzcmMgPj4gbHNiKSkpOwogICAgIH0KIH0KIAotdm9pZCB0ZXN0VWJmeDY0KCkKK3ZvaWQgdGVz
dFViZng2NEFyZ0xlZnQoKQogewogICAgIC8vIChzcmMgPj4gbHNiKSAmIG1hc2sKLSAgICB1aW50
NjRfdCBzcmMgPSAweGZmZmZmZmZmOwotICAgIFZlY3Rvcjx1aW50NjRfdD4gbHNicyA9IHsgMCwg
MzEsIDYyIH07Ci0gICAgVmVjdG9yPHVpbnQ2NF90PiB3aWR0aHMgPSB7IDYzLCAzMiwgMSB9Owor
ICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICBy
ZXR1cm47CisgICAgdWludDY0X3Qgc3JjID0gMHhmZmZmZmZmZmZmZmZmZmZmOworICAgIFZlY3Rv
cjx1aW50NjRfdD4gbHNicyA9IHsgMSwgMzAsIDYyIH07CisgICAgVmVjdG9yPHVpbnQ2NF90PiB3
aWR0aHMgPSB7IDYyLCAzMywgMSB9OwogCiAgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50NjRfdCBs
c2IsIHVpbnQ2NF90IG1hc2spIC0+IHVpbnQ2NF90IHsKICAgICAgICAgUHJvY2VkdXJlIHByb2M7
CkBAIC0yNjc3LDcgKzI2ODUsMTAgQEAgdm9pZCB0ZXN0VWJmeDY0KCkKICAgICAgICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGxlZnQsIG1hc2tWYWx1ZSkpOwogCi0gICAgICAgIHJl
dHVybiBjb21waWxlQW5kUnVuPHVpbnQ2NF90Pihwcm9jLCBzcmMpOworICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAg
ICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAidWJmeCIpOworICAgICAgICByZXR1cm4g
aW52b2tlPHVpbnQ2NF90PigqY29kZSwgc3JjKTsKICAgICB9OwogCiAgICAgYXV0byBnZW5lcmF0
ZU1hc2sgPSBbJl0gKHVpbnQ2NF90IHdpZHRoKSAtPiB1aW50NjRfdCB7CkBAIC0yNjg3LDQ1ICsy
Njk4LDIwNiBAQCB2b2lkIHRlc3RVYmZ4NjQoKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bHNicy5zaXplKCk7ICsraSkgewogICAgICAgICB1aW50NjRfdCBsc2IgPSBsc2JzLmF0KGkpOwog
ICAgICAgICB1aW50NjRfdCBtYXNrID0gZ2VuZXJhdGVNYXNrKHdpZHRocy5hdChpKSk7Ci0gICAg
ICAgIHVpbnQ2NF90IGxocyA9IHRlc3QobHNiLCBtYXNrKTsKLSAgICAgICAgdWludDY0X3Qgcmhz
ID0gKChzcmMgPj4gbHNiKSAmIG1hc2spOwotICAgICAgICBDSEVDSyhsaHMgPT0gcmhzKTsKKyAg
ICAgICAgQ0hFQ0sodGVzdChsc2IsIG1hc2spID09ICgoc3JjID4+IGxzYikgJiBtYXNrKSk7CiAg
ICAgfQogfQogCi12b2lkIHRlc3RVYmZ4NjRQYXR0ZXJuTWF0Y2goKQordm9pZCB0ZXN0VWJmeDY0
QXJnUmlnaHQoKQogewotICAgIC8vIChzcmMgPj4gbHNiKSAmICgoMSA8PCB3aWR0aCkgLSAxKQor
ICAgIC8vIG1hc2sgJiAoc3JjID4+IGxzYikKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0
QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOwogICAgIHVpbnQ2NF90IHNyYyA9IDB4
ZmZmZmZmZmZmZmZmZmZmZjsKLSAgICBWZWN0b3I8dWludDMyX3Q+IGltbXMgPSB7IDAsIDEsIDMw
LCAzMSwgMzIsIDYyLCA2MywgNjQgfTsKKyAgICBWZWN0b3I8dWludDY0X3Q+IGxzYnMgPSB7IDEs
IDMwLCA2MiB9OworICAgIFZlY3Rvcjx1aW50NjRfdD4gd2lkdGhzID0geyA2MiwgMzMsIDEgfTsK
IAotICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgbHNiLCB1aW50MzJfdCB3aWR0aCkgLT4g
dWludDY0X3QgeworICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDY0X3QgbHNiLCB1aW50NjRfdCBt
YXNrKSAtPiB1aW50NjRfdCB7CiAgICAgICAgIFByb2NlZHVyZSBwcm9jOwogICAgICAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwogCiAgICAgICAgIFZhbHVlKiBzcmNWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgVmFsdWUqIGxzYlZhbHVlID0gcm9vdC0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxzYik7Ci0gICAgICAgIFZhbHVl
KiB3aWR0aFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIHdpZHRoKTsKLSAgICAgICAgVmFsdWUqIGNvbnN0VmFsdWVBID0gcm9vdC0+YXBwZW5kTmV3
PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEpOwotICAgICAgICBWYWx1ZSogY29uc3RW
YWx1ZUIgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSk7
CisgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgbWFzayk7CiAKLSAgICAgICAgVmFsdWUqIGxlZnQgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdpbigpLCBzcmNWYWx1ZSwgbHNiVmFsdWUp
OwotICAgICAgICBWYWx1ZSogcmlnaHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAotICAgICAg
ICAgICAgcHJvYywgU3ViLCBPcmlnaW4oKSwgCi0gICAgICAgICAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIGNvbnN0VmFsdWVBLCB3aWR0aFZhbHVlKSwgY29u
c3RWYWx1ZUIpOworICAgICAgICBWYWx1ZSogcmlnaHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIFpTaHIsIE9yaWdpbigpLCBzcmNWYWx1ZSwgbHNiVmFsdWUpOwogICAgICAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCiAgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLAotICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9y
aWdpbigpLCBsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBtYXNrVmFsdWUsIHJpZ2h0KSk7CiAKLSAgICAgICAg
cmV0dXJuIGNvbXBpbGVBbmRSdW48dWludDY0X3Q+KHByb2MsIHNyYyk7CisgICAgICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAg
ICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1YmZ4Iik7CisgICAgICAgIHJldHVy
biBpbnZva2U8dWludDY0X3Q+KCpjb2RlLCBzcmMpOwogICAgIH07CiAKLSAgICBmb3IgKGF1dG8g
bHNiIDogaW1tcykgewotICAgICAgICBmb3IgKGF1dG8gd2lkdGggOiBpbW1zKSB7Ci0gICAgICAg
ICAgICB1aW50NjRfdCBsaHMgPSB0ZXN0KGxzYiwgd2lkdGgpOwotICAgICAgICAgICAgdWludDY0
X3QgcmhzID0gKChzcmMgPj4gbHNiKSAmICgoMVVMTCA8PCB3aWR0aCkgLSAxVUxMKSk7Ci0gICAg
ICAgICAgICBDSEVDSyhsaHMgPT0gcmhzKTsKLSAgICAgICAgfQorICAgIGF1dG8gZ2VuZXJhdGVN
YXNrID0gWyZdICh1aW50NjRfdCB3aWR0aCkgLT4gdWludDY0X3QgeworICAgICAgICByZXR1cm4g
KDFVTEwgPDwgd2lkdGgpIC0gMVVMTDsKKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVpbnQ2NF90IGxzYiA9IGxzYnMuYXQo
aSk7CisgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBnZW5lcmF0ZU1hc2sod2lkdGhzLmF0KGkpKTsK
KyAgICAgICAgQ0hFQ0sodGVzdChsc2IsIG1hc2spID09IChtYXNrICYgKHNyYyA+PiBsc2IpKSk7
CisgICAgfQorfQorCit2b2lkIHRlc3RVYmZpejMyQXJnTGVmdCgpCit7CisgICAgLy8gZGVzdCA9
IChuIDw8IGxzYikgJiBtYXNrIHdoZXJlIG1hc2sgPSAoKDEgPDwgd2lkdGgpIC0gMSkgPDwgbHNi
CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAg
IHJldHVybjsKKyAgICB1aW50MzJfdCBzcmMgPSAweGZmZmZmZmZmOworICAgIFZlY3Rvcjx1aW50
MzJfdD4gbHNicyA9IHsgMSwgMTQsIDMwIH07CisgICAgVmVjdG9yPHVpbnQzMl90PiB3aWR0aHMg
PSB7IDMwLCAxNywgMSB9OworCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50MzJfdCBsc2IsIHVp
bnQzMl90IG1hc2spIC0+IHVpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUq
IHNyY1ZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRy
dW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBW
YWx1ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNrKTsKKworICAgICAgICBWYWx1ZSogbGVm
dCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgc3JjVmFsdWUs
IGxzYlZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAg
ICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbGVmdCwgbWFza1ZhbHVlKSk7CisKKyAg
ICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0
KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInViZml6Iik7Cisg
ICAgICAgIHJldHVybiBpbnZva2U8dWludDMyX3Q+KCpjb2RlLCBzcmMpOworICAgIH07CisKKyAg
ICBhdXRvIGdlbmVyYXRlTWFzayA9IFsmXSAodWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGxzYikg
LT4gdWludDMyX3QgeworICAgICAgICByZXR1cm4gKCgxVSA8PCB3aWR0aCkgLSAxVSkgPDwgbHNi
OworICAgIH07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxzYnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgdWludDMyX3QgbHNiID0gbHNicy5hdChpKTsKKyAgICAgICAgdWludDMyX3Qg
bWFzayA9IGdlbmVyYXRlTWFzayh3aWR0aHMuYXQoaSksIGxzYik7CisgICAgICAgIENIRUNLKHRl
c3QobHNiLCBtYXNrKSA9PSAoKHNyYyA8PCBsc2IpICYgbWFzaykpOworICAgIH0KK30KKwordm9p
ZCB0ZXN0VWJmaXozMkFyZ1JpZ2h0KCkKK3sKKyAgICAvLyBkZXN0ID0gIG1hc2sgJiAobiA8PCBs
c2IpIHdoZXJlIG1hc2sgPSAoKDEgPDwgd2lkdGgpIC0gMSkgPDwgbHNiCisgICAgaWYgKEpTQzo6
T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICB1
aW50MzJfdCBzcmMgPSAweGZmZmZmZmZmOworICAgIFZlY3Rvcjx1aW50MzJfdD4gbHNicyA9IHsg
MSwgMTQsIDMwIH07CisgICAgVmVjdG9yPHVpbnQzMl90PiB3aWR0aHMgPSB7IDMwLCAxNywgMSB9
OworCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50MzJfdCBsc2IsIHVpbnQzMl90IG1hc2spIC0+
IHVpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIHNyY1ZhbHVlID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwg
CisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSogbHNiVmFsdWUg
PSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbHNiKTsKKyAg
ICAgICAgVmFsdWUqIG1hc2tWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBtYXNrKTsKKworICAgICAgICBWYWx1ZSogbGVmdCA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgc3JjVmFsdWUsIGxzYlZhbHVlKTsKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
Qml0QW5kLCBPcmlnaW4oKSwgbWFza1ZhbHVlLCBsZWZ0KSk7CisKKyAgICAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAg
ICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInViZml6Iik7CisgICAgICAgIHJldHVybiBp
bnZva2U8dWludDMyX3Q+KCpjb2RlLCBzcmMpOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyYXRl
TWFzayA9IFsmXSAodWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGxzYikgLT4gdWludDMyX3Qgewor
ICAgICAgICByZXR1cm4gKCgxVSA8PCB3aWR0aCkgLSAxVSkgPDwgbHNiOworICAgIH07CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxzYnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdWlu
dDMyX3QgbHNiID0gbHNicy5hdChpKTsKKyAgICAgICAgdWludDMyX3QgbWFzayA9IGdlbmVyYXRl
TWFzayh3aWR0aHMuYXQoaSksIGxzYik7CisgICAgICAgIENIRUNLKHRlc3QobHNiLCBtYXNrKSA9
PSAobWFzayAmIChzcmMgPDwgbHNiKSkpOworICAgIH0KK30KKwordm9pZCB0ZXN0VWJmaXo2NEFy
Z0xlZnQoKQoreworICAgIC8vIGRlc3QgPSAobiA8PCBsc2IpICYgbWFzayB3aGVyZSBtYXNrID0g
KCgxIDw8IHdpZHRoKSAtIDEpIDw8IGxzYgorICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRC
M09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgdWludDY0X3Qgc3JjID0gMHhm
ZmZmZmZmZmZmZmZmZmZmOworICAgIFZlY3Rvcjx1aW50NjRfdD4gbHNicyA9IHsgMSwgMzAsIDYy
IH07CisgICAgVmVjdG9yPHVpbnQ2NF90PiB3aWR0aHMgPSB7IDYyLCAzMywgMSB9OworCisgICAg
YXV0byB0ZXN0ID0gWyZdICh1aW50NjRfdCBsc2IsIHVpbnQ2NF90IG1hc2spIC0+IHVpbnQ2NF90
IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBw
cm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIHNyY1ZhbHVlID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgICAgICBWYWx1ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNrKTsKKworICAg
ICAgICBWYWx1ZSogbGVmdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmln
aW4oKSwgc3JjVmFsdWUsIGxzYlZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbGVmdCwgbWFz
a1ZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAg
ICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29k
ZSwgInViZml6Iik7CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDY0X3Q+KCpjb2RlLCBzcmMp
OworICAgIH07CisKKyAgICBhdXRvIGdlbmVyYXRlTWFzayA9IFsmXSAodWludDY0X3Qgd2lkdGgs
IHVpbnQzMl90IGxzYikgLT4gdWludDY0X3QgeworICAgICAgICByZXR1cm4gKCgxVUxMIDw8IHdp
ZHRoKSAtIDFVTEwpIDw8IGxzYjsKKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsc2JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVpbnQ2NF90IGxzYiA9IGxzYnMuYXQoaSk7
CisgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBnZW5lcmF0ZU1hc2sod2lkdGhzLmF0KGkpLCBsc2Ip
OworICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgbWFzaykgPT0gKChzcmMgPDwgbHNiKSAmIG1hc2sp
KTsKKyAgICB9Cit9CisKK3ZvaWQgdGVzdFViZml6NjRBcmdSaWdodCgpCit7CisgICAgLy8gZGVz
dCA9IG1hc2sgJiAobiA8PCBsc2IpIHdoZXJlIG1hc2sgPSAoKDEgPDwgd2lkdGgpIC0gMSkgPDwg
bHNiCisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAg
ICAgIHJldHVybjsKKyAgICB1aW50NjRfdCBzcmMgPSAweGZmZmZmZmZmZmZmZmZmZmY7CisgICAg
VmVjdG9yPHVpbnQ2NF90PiBsc2JzID0geyAxLCAzMCwgNjIgfTsKKyAgICBWZWN0b3I8dWludDY0
X3Q+IHdpZHRocyA9IHsgNjIsIDMzLCAxIH07CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQ2
NF90IGxzYiwgdWludDY0X3QgbWFzaykgLT4gdWludDY0X3QgeworICAgICAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAg
ICAgICBWYWx1ZSogc3JjVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBs
c2JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBs
c2IpOworICAgICAgICBWYWx1ZSogbWFza1ZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2spOworCisgICAgICAgIFZhbHVlKiBsZWZ0ID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBzcmNWYWx1ZSwgbHNiVmFs
dWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBtYXNrVmFsdWUsIGxlZnQpKTsKKworICAgICAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAg
ICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAidWJmaXoiKTsKKyAgICAgICAg
cmV0dXJuIGludm9rZTx1aW50NjRfdD4oKmNvZGUsIHNyYyk7CisgICAgfTsKKworICAgIGF1dG8g
Z2VuZXJhdGVNYXNrID0gWyZdICh1aW50NjRfdCB3aWR0aCwgdWludDMyX3QgbHNiKSAtPiB1aW50
NjRfdCB7CisgICAgICAgIHJldHVybiAoKDFVTEwgPDwgd2lkdGgpIC0gMVVMTCkgPDwgbHNiOwor
ICAgIH07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxzYnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgdWludDY0X3QgbHNiID0gbHNicy5hdChpKTsKKyAgICAgICAgdWludDY0X3QgbWFz
ayA9IGdlbmVyYXRlTWFzayh3aWR0aHMuYXQoaSksIGxzYik7CisgICAgICAgIENIRUNLKHRlc3Qo
bHNiLCBtYXNrKSA9PSAobWFzayAmIChzcmMgPDwgbHNiKSkpOwogICAgIH0KIH0KIApAQCAtMzYx
NSwxMCArMzc4NywxNCBAQCBzdGF0aWMgdm9pZCB0ZXN0Qml0T3JJbW1BcmczMihpbnQgYSwgaW50
IGIpCiAKIHZvaWQgYWRkQml0VGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRhc2tzKQogewotICAgIFJVTih0ZXN0VWJmeDMyKCkpOwot
ICAgIFJVTih0ZXN0VWJmeDMyUGF0dGVybk1hdGNoKCkpOwotICAgIFJVTih0ZXN0VWJmeDY0KCkp
OwotICAgIFJVTih0ZXN0VWJmeDY0UGF0dGVybk1hdGNoKCkpOworICAgIFJVTih0ZXN0VWJmeDMy
QXJnTGVmdCgpKTsKKyAgICBSVU4odGVzdFViZngzMkFyZ1JpZ2h0KCkpOworICAgIFJVTih0ZXN0
VWJmeDY0QXJnTGVmdCgpKTsKKyAgICBSVU4odGVzdFViZng2NEFyZ1JpZ2h0KCkpOworICAgIFJV
Tih0ZXN0VWJmaXozMkFyZ0xlZnQoKSk7CisgICAgUlVOKHRlc3RVYmZpejMyQXJnUmlnaHQoKSk7
CisgICAgUlVOKHRlc3RVYmZpejY0QXJnTGVmdCgpKTsKKyAgICBSVU4odGVzdFViZml6NjRBcmdS
aWdodCgpKTsKICAgICBSVU4odGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazMyKCkp
OwogICAgIFJVTih0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrNjQoKSk7CiAgICAg
UlVOKHRlc3RCaXRBbmRBcmdzKDQzLCA0MykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
TWF0aEV4dHJhcy5oIGIvU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCmluZGV4IDAxZmUyMzZh
MjE5ZTcwMTkxOWQyMmFmMGU3ZjQzY2FhMDU3YjliOWMuLjdhZGI4NzQyYThkZTk4MTM3MjNlNTky
NTMyZjRhYTMwMTQ2NDg5ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKQEAgLTcyOCw2ICs3MjgsMjggQEAg
Y29uc3RleHByIHVuc2lnbmVkIGdldE1TQlNldENvbnN0ZXhwcihUIHQpCiAgICAgcmV0dXJuIGJp
dFNpemUgLSAxIC0gY2x6Q29uc3RleHByKHQpOwogfQogCitpbmxpbmUgc2l6ZV90IGNvdW50VHJh
aWxpbmdaZXJvcyh1aW50MzJfdCB2KQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBNb2Qz
N0JpdFBvc2l0aW9uW10gPSB7CisgICAgICAgIDMyLCAwLCAxLCAyNiwgMiwgMjMsIDI3LCAwLCAz
LCAxNiwgMjQsIDMwLCAyOCwgMTEsIDAsIDEzLAorICAgICAgICA0LCA3LCAxNywgMCwgMjUsIDIy
LCAzMSwgMTUsIDI5LCAxMCwgMTIsIDYsIDAsIDIxLCAxNCwgOSwKKyAgICAgICAgNSwgMjAsIDgs
IDE5LCAxOAorICAgIH07CisgICAgcmV0dXJuIE1vZDM3Qml0UG9zaXRpb25bKCgxICsgfnYpICYg
dikgJSAzN107Cit9CisKK2lubGluZSBzaXplX3QgY291bnRUcmFpbGluZ1plcm9zKHVpbnQ2NF90
IHYpCit7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE1vZDY3UG9zaXRpb25bXSA9IHsKKyAg
ICAgICAgNjQsIDAsIDEsIDM5LCAyLCAxNSwgNDAsIDIzLCAzLCAxMiwgMTYsIDU5LCA0MSwgMTks
IDI0LCA1NCwKKyAgICAgICAgNCwgNjQsIDEzLCAxMCwgMTcsIDYyLCA2MCwgMjgsIDQyLCAzMCwg
MjAsIDUxLCAyNSwgNDQsIDU1LAorICAgICAgICA0NywgNSwgMzIsIDY1LCAzOCwgMTQsIDIyLCAx
MSwgNTgsIDE4LCA1MywgNjMsIDksIDYxLCAyNywKKyAgICAgICAgMjksIDUwLCA0MywgNDYsIDMx
LCAzNywgMjEsIDU3LCA1MiwgOCwgMjYsIDQ5LCA0NSwgMzYsIDU2LAorICAgICAgICA3LCA0OCwg
MzUsIDYsIDM0LCAzMywgMAorICAgIH07CisgICAgcmV0dXJuIE1vZDY3UG9zaXRpb25bKCgxICsg
fnYpICYgdikgJSA2N107Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OnNo
dWZmbGVWZWN0b3I7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432014</attachid>
            <date>2021-06-22 19:24:11 -0700</date>
            <delta_ts>2021-06-23 09:31:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227204-20210622212410.patch</filename>
            <type>text/plain</type>
            <size>44621</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MDc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
OTNjMGNmMWI2ZTcwMGVkMDQ1ZjkyZWU5ZDI3MmExODg0MTI4OGM1Li5iZjVhNmE4MDIwOWE3YjJh
NjRmNzQ1NjYyNzI0YjZjMzFlYmEyYjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTMgQEAKKzIwMjEtMDYtMjEgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBhIG5ldyBwYXR0ZXJuIHRvIGluc3RydWN0aW9uIHNlbGVjdG9y
IHRvIHV0aWxpemUgVUJGSVogc3VwcG9ydGVkIGJ5IEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMDQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGluY2x1ZGVzIHRocmVlIHBh
cnRzOgorICAgICAgICAgICAgQSkgQWRkIFVCRklaIHRvIGluc3RydWN0aW9uIHNlbGVjdG9yLgor
ICAgICAgICAgICAgQikgRml4IFVCRlgsIGludHJvZHVjZWQgaW4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjk4NCwgCisgICAgICAgICAgICAgICB0byBtYXRjaCBh
bGwgcGF0dGVybnMuIAorICAgICAgICAgICAgQykgRml4IGVycm9yIGNvbmRpdGlvbiBpbiBvbmUg
c3RyZW5ndGggcmVkdWN0aW9uIGludHJvZHVjZWQgCisgICAgICAgICAgICAgICBpbiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MTM4LgorCisgICAgICAgIFBhcnQg
QQorICAgICAgICBVbnNpZ25lZCBCaXRmaWVsZCBJbnNlcnQgaW4gWmVybyhVQkZJWiksIHN1cHBv
cnRlZCBieSBBUk02NCwgemVyb3MgdGhlIAorICAgICAgICBkZXN0aW5hdGlvbiByZWdpc3RlciBh
bmQgY29waWVzIGFueSBudW1iZXIgb2YgY29udGlndW91cyBiaXRzIGZyb20gYSAKKyAgICAgICAg
c291cmNlIHJlZ2lzdGVyIGludG8gYW55IHBvc2l0aW9uIGluIHRoZSBkZXN0aW5hdGlvbiByZWdp
c3Rlci4gVGhlIAorICAgICAgICBpbnN0cnVjdGlvbiBzZWxlY3RvciBjYW4gdXRpbGl6ZSB0aGlz
IHRvIGxvd2VyaW5nIGNlcnRhaW4gcGF0dGVybnMgaW4gCisgICAgICAgIEIzIElSIGJlZm9yZSBm
dXJ0aGVyIEFpciBvcHRpbWl6YXRpb24uIAorCisgICAgICAgIEdpdmVuIHRoZSBvcGVyYXRpb246
IHViZml6IGQsIG4sIGxzYiwgd2lkdGgKKworICAgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8g
ImQgPSAobiA8PCBsc2IpICYgKCgoMSA8PCB3aWR0aCkgLSAxKSA8PCBsc2IpIi4gCisgICAgICAg
IFNpbmNlIHdhc20gaW50cm9kdWNlcyBjb25zdGFudCBmb2xkaW5nLCB0aGVuIHRoZSBtYXRjaGVk
IHBhdHRlcm5zIHdvdWxkIGJlOgorICAgICAgICAxLjEgZCA9IChuIDw8IGxzYikgJiBtYXNrU2hp
ZnQKKyAgICAgICAgMS4yIGQgPSBtYXNrU2hpZnQgJiAobiA8PCBsc2IpCisKKyAgICAgICAgMi4x
IGQgPSAobiAmIG1hc2spIDw8IGxzYgorICAgICAgICAyLjIgZCA9IChtYXNrICYgbikgPDwgbHNi
CisKKyAgICAgICAgV2hlcmU6CisgICAgICAgICAgICBtYXNrU2hpZnQgPSBtYXNrIDw8IGxzYgor
ICAgICAgICAgICAgbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKworICAgICAgICBUbyBtYWtlIHRo
ZSBwYXR0ZXJuIG1hdGNoaW5nIGluIGluc3RydWN0aW9uIHNlbGVjdGlvbiBiZW5lZmljaWFsIHRv
IEpJVCwgdGhlc2UgCisgICAgICAgIGNvbnN0cmFpbnRzIHNob3VsZCBiZSBpbnRyb2R1Y2VkOgor
ICAgICAgICAgICAgMS4gMCA8PSBsc2IgPCBkYXRhc2l6ZQorICAgICAgICAgICAgMi4gMCA8IHdp
ZHRoIDwgZGF0YXNpemUKKyAgICAgICAgICAgIDMuIGxzYiArIHdpZHRoIDw9IGRhdGFzaXplCisK
KyAgICAgICAgQ2hvb3NlIChuICYgbWFzaykgPDwgbHNiIGFzIHRoZSBjYW5vbmljYWwgZm9ybSBh
bmQgaW50cm9kdWNlIGEgc3RyZW5ndGggcmVkdWN0aW9uLgorICAgICAgICBUdXJuIHRoaXM6IChu
IDw8IGxzYikgJiBtYXNrU2hpZnQKKyAgICAgICAgSW50byB0aGlzOiAobiAmIG1hc2spIDw8IGxz
YgorCisgICAgICAgIEdpdmVuIEIzIElSOgorICAgICAgICBJbnQgQDAgPSBBcmd1bWVudFJlZygl
eDApCisgICAgICAgIEludCBAMSA9IGxzYgorICAgICAgICBJbnQgQDIgPSAwYjAxMTAKKyAgICAg
ICAgSW50IEAzID0gU2hsKEAwLCBAMSkKKyAgICAgICAgSW50IEA0ID0gQml0QW5kKEAzLCBAMikg
IAorICAgICAgICBWb2lkQDUgPSBSZXR1cm4oQDQsIFRlcm1pbmFsKSAgICAgIAorCisgICAgICAg
IEJlZm9yZSBBZGRpbmcgVUJGSVogUGF0dGVybjoKKyAgICAgICAgLy8gT2xkIG9wdGltaXplZCBB
SVIKKyAgICAgICAgTHNoaWZ0ICAleDAsICQ2MiwgJXgwLCBAMworICAgICAgICBBbmQgIDBiMDEx
MCwgJXgwLCAleDAsIEA0CisgICAgICAgIFJldCAgICAgJXgwLCAgICAgICAgICAgQDUKKworICAg
ICAgICBBZnRlciBBZGRpbmcgVUJGSVogUGF0dGVybjoKKyAgICAgICAgLy8gTmV3IG9wdGltaXpl
ZCBBSVIKKyAgICAgICAgVWJmaXogJXgwLCBsc2IsIDIsICV4MCwgQDQKKyAgICAgICAgUmV0ICAg
JXgwLCAgICAgICAgICAgICAgQDUKKworICAgICAgICBQYXJ0IEIKKyAgICAgICAgRml4IFVCRlgg
dG8gbWF0Y2ggYm90aCBwYXR0ZXJuczoKKyAgICAgICAgZGVzdCA9IChzcmMgPj4gbHNiKSAmIG1h
c2sKKyAgICAgICAgZGVzdCA9IG1hc2sgJiAoc3JjID4+IGxzYikKKworICAgICAgICBXaGVyZToK
KyAgICAgICAgMS4gbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICAgICAgMi4gMCA8PSBsc2Ig
PCBkYXRhc2l6ZQorICAgICAgICAzLiAwIDwgd2lkdGggPCBkYXRhc2l6ZQorICAgICAgICA0LiBs
c2IgKyB3aWR0aCA8PSBkYXRhc2l6ZSAgICAgICAKKworICAgICAgICBQYXJ0IEMKKyAgICAgICAg
Rml4IG9uZSBCMyBzdHJlbmd0aCByZWR1Y3Rpb24uCisgICAgICAgIFR1cm4gdGhpczogKHNyYyA+
PiBzaGlmdEFtb3VudCkgJiBtYXNrCisgICAgICAgIEludG8gdGhpczogc3JjID4+IHNoaWZ0QW1v
dW50CisKKyAgICAgICAgV2l0aCB1cGRhdGVkIGNvbnN0cmFpbnRzOgorICAgICAgICAxLiBtYXNr
ID0gKDEgPDwgd2lkdGgpIC0gMQorICAgICAgICAyLiAwIDw9IHNoaWZ0QW1vdW50IDwgZGF0YXNp
emUKKyAgICAgICAgMy4gMCA8IHdpZHRoIDwgZGF0YXNpemUKKyAgICAgICAgNC4gc2hpZnRBbW91
bnQgKyB3aWR0aCA+PSBkYXRhc2l6ZQorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6dWJmaXozMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnViZml6NjQpOgorICAgICAgICAq
IGFzc2VtYmxlci90ZXN0bWFzbS5jcHA6CisgICAgICAgIChKU0M6OnRlc3RVYmZpejMyKToKKyAg
ICAgICAgKEpTQzo6dGVzdFViZml6NjQpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6
CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL3Rlc3Ri
My5oOgorICAgICAgICAqIGIzL3Rlc3RiM18yLmNwcDoKKyAgICAgICAgKHRlc3RVYmZ4MzJBcmdM
ZWZ0KToKKyAgICAgICAgKHRlc3RVYmZ4MzJBcmdSaWdodCk6CisgICAgICAgICh0ZXN0VWJmeDY0
QXJnTGVmdCk6CisgICAgICAgICh0ZXN0VWJmeDY0QXJnUmlnaHQpOgorICAgICAgICAodGVzdFVi
Zml6MzJBcmdMZWZ0KToKKyAgICAgICAgKHRlc3RVYmZpejMyQXJnUmlnaHQpOgorICAgICAgICAo
dGVzdFViZml6NjRBcmdMZWZ0KToKKyAgICAgICAgKHRlc3RVYmZpejY0QXJnUmlnaHQpOgorICAg
ICAgICAoYWRkQml0VGVzdHMpOgorICAgICAgICAodGVzdFViZngzMik6IERlbGV0ZWQuCisgICAg
ICAgICh0ZXN0VWJmeDMyUGF0dGVybk1hdGNoKTogRGVsZXRlZC4KKyAgICAgICAgKHRlc3RVYmZ4
NjQpOiBEZWxldGVkLgorICAgICAgICAodGVzdFViZng2NFBhdHRlcm5NYXRjaCk6IERlbGV0ZWQu
CisKIDIwMjEtMDYtMjEgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCBhIG5ldyBwYXR0ZXJuIHRvIGluc3RydWN0aW9uIHNlbGVjdG9yIHRvIHV0aWxp
emUgU01TVUJMIHN1cHBvcnRlZCBieSBBUk02NApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA1MzA4YThlMDA2NmU2YmU1ODI2YzU2
NmYzN2I2NzQxYjE0NzQyMGYzLi4wMDA5NmU5ODVjNTU3M2QxOGY1ODcxZDBhOWZmOTVjNWQ4OGFl
NDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTA2LTIxICBZaWppYSBIdWFuZyAgPHlpamlh
X2h1YW5nQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBuZXcgcGF0dGVybiB0byBpbnN0cnVj
dGlvbiBzZWxlY3RvciB0byB1dGlsaXplIFVCRklaIHN1cHBvcnRlZCBieSBBUk02NAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjA0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGZ1bmN0aW9ucyB0
byBjb3VudCB0aGUgY29uc2VjdXRpdmUgemVybyBiaXRzICh0cmFpbGluZykgb24gdGhlIAorICAg
ICAgICByaWdodCB3aXRoIG1vZHVsdXMgZGl2aXNpb24gYW5kIGxvb2t1cC4gUmVmZXJlbmNlOiBC
aXQgVHdpZGRsaW5nIEhhY2tzLgorCisgICAgICAgICogd3RmL01hdGhFeHRyYXMuaDoKKyAgICAg
ICAgKFdURjo6Y291bnRUcmFpbGluZ1plcm9zKToKKwogMjAyMS0wNi0yMSAgS2ltbW8gS2lubnVu
ZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIG1ha2VVbmlxdWUgY2Fubm90IGJl
IHVzZWQgdG8gaW5zdGFudGlhdGUgZnVuY3Rpb24tbG9jYWwgY2xhc3NlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRl
eCBjYTg3YTllMDRhM2YyZjU4OTE3YzNhNzRhMzY4MGMyYzI3MTBhYjhmLi4yNzM4YThlZjEyMDFi
NzFkZDg2NjE1YWE2MjRjOWZkZDg1M2QyOGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtNDAwLDYgKzQwMCwx
NiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnViZng8NjQ+KGRlc3QsIHNyYywgbHNi
Lm1fdmFsdWUsIHdpZHRoLm1fdmFsdWUpOwogICAgIH0KIAorICAgIHZvaWQgdWJmaXozMihSZWdp
c3RlcklEIHNyYywgVHJ1c3RlZEltbTMyIGxzYiwgVHJ1c3RlZEltbTMyIHdpZHRoLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci51YmZpejwzMj4oZGVzdCwgc3Jj
LCBsc2IubV92YWx1ZSwgd2lkdGgubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCB1YmZpejY0
KFJlZ2lzdGVySUQgc3JjLCBUcnVzdGVkSW1tMzIgbHNiLCBUcnVzdGVkSW1tMzIgd2lkdGgsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnViZml6PDY0PihkZXN0
LCBzcmMsIGxzYi5tX3ZhbHVlLCB3aWR0aC5tX3ZhbHVlKTsKKyAgICB9CisKICAgICB2b2lkIGFu
ZDY0KFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBSZWdpc3RlcklEIGRlc3QpCiAg
ICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRfPDY0PihkZXN0LCBzcmMxLCBzcmMyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKaW5kZXggNzBjMDlk
MmU1Njk5ZDgzZjc3OTA0Zjc4MWZkYmUyZmViZTNhZTUyZS4uNTgwNjJjZWU4NTFhNDc0ZDFkNDVj
OTgyZGIyZTNlNTk0Mzc3ZDBiYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci90ZXN0bWFzbS5jcHAKQEAgLTExMTMsNiArMTExMyw1NiBAQCB2b2lkIHRlc3RVYmZ4NjQoKQog
ICAgICAgICB9CiAgICAgfQogfQorCit2b2lkIHRlc3RVYmZpejMyKCkKK3sKKyAgICB1aW50MzJf
dCBzcmMgPSAweGZmZmZmZmZmOworICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwg
MzAsIDMxLCAzMiwgNjIsIDYzLCA2NCB9OworICAgIGZvciAoYXV0byBsc2IgOiBpbW1zKSB7Cisg
ICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGltbXMpIHsKKyAgICAgICAgICAgIGlmIChsc2IgPj0g
MCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lkdGggPCAzMikgeworICAgICAgICAgICAgICAgIGF1
dG8gdWJmaXozMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAg
ICAgIGppdC51YmZpejMyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGxzYiksIAorICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod2lkdGgpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBq
aXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgdWludDMyX3Qg
bWFzayA9ICgxVSA8PCB3aWR0aCkgLSAxVTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShpbnZv
a2U8dWludDMyX3Q+KHViZml6MzIsIHNyYyksIChzcmMgJiBtYXNrKSA8PCBsc2IpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RVYmZpejY0KCkKK3sKKyAg
ICB1aW50NjRfdCBzcmMgPSAweGZmZmZmZmZmZmZmZmZmZmY7CisgICAgVmVjdG9yPHVpbnQzMl90
PiBpbW1zID0geyAwLCAxLCAzMCwgMzEsIDMyLCA2MiwgNjMsIDY0IH07CisgICAgZm9yIChhdXRv
IGxzYiA6IGltbXMpIHsKKyAgICAgICAgZm9yIChhdXRvIHdpZHRoIDogaW1tcykgeworICAgICAg
ICAgICAgaWYgKGxzYiA+PSAwICYmIHdpZHRoID4gMCAmJiBsc2IgKyB3aWR0aCA8IDY0KSB7Cisg
ICAgICAgICAgICAgICAgYXV0byB1YmZpejY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYg
aml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgICAgICAgICAgICAgaml0LnViZml6NjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobHNi
KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih3
aWR0aCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICB1aW50NjRfdCBtYXNrID0gKDFVTEwgPDwgd2lkdGgpIC0gMVVMTDsKKyAgICAgICAg
ICAgICAgICBDSEVDS19FUShpbnZva2U8dWludDY0X3Q+KHViZml6NjQsIHNyYyksIChzcmMgJiBt
YXNrKSA8PCBsc2IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQogI2VuZGlm
CiAKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCkBAIC0zMjgwLDYg
KzMzMzAsOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpIFdURl9JR05PUkVTX1RIUkVB
RF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdE11bFN1YlNpZ25FeHRlbmQzMigpKTsKICAg
ICBSVU4odGVzdFViZngzMigpKTsKICAgICBSVU4odGVzdFViZng2NCgpKTsKKyAgICBSVU4odGVz
dFViZml6MzIoKSk7CisgICAgUlVOKHRlc3RVYmZpejY0KCkpOwogI2VuZGlmCiAKICNpZiBDUFUo
WDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IDMzODYzZWI4ZWM0ODcyNDIxNjVjZjEwODUwN2IwNjYw
ZTJhZTdmNGMuLmI4YjQzN2E4MjJkMTg3NDlhNGZiNDFiNjE1YzNhN2E0OTBiNGNiNGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0yNTk2LDcgKzI1OTYs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbHlMZWZ0ID0g
cmlnaHQtPmNoaWxkKDApOwogICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbHlSaWdo
dCA9IHJpZ2h0LT5jaGlsZCgxKTsKIAotICAgICAgICAgICAgICAgICAgICAvLyBTTVNVQkw6IGQg
PSBhIC0gU0V4dDMyKG4pICogIFNFeHQzMihtKQorICAgICAgICAgICAgICAgICAgICAvLyBTTVNV
Qkw6IGQgPSBhIC0gU0V4dDMyKG4pICogU0V4dDMyKG0pCiAgICAgICAgICAgICAgICAgICAgIGlm
IChtdWx0aXBseVN1Yk9wY29kZSA9PSBNdWx0aXBseVN1YjY0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiBpc1ZhbGlkRm9ybShNdWx0aXBseVN1YlNpZ25FeHRlbmQzMiwgQXJnOjpUbXAsIEFy
Zzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIHRyeVNFeHQzMiA9IFsmXSAoVmFsdWUqIHYpIHsKQEAgLTI3NDAsMjYgKzI3NDAsMzUgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIC8vIFVCRlggUGF0dGVybjogZGVzdCA9IChzcmMgPj4gbHNiKSAmICgoMSA8PCB3aWR0
aCkgLSAxKQotICAgICAgICAgICAgaWYgKGNhbkJlSW50ZXJuYWwobGVmdCkgJiYgbGVmdC0+b3Bj
b2RlKCkgPT0gWlNocikgeworICAgICAgICAgICAgLy8gVUJGWCBQYXR0ZXJuOiBkZXN0ID0gKHNy
YyA+PiBsc2IpICYgbWFzayB3aGVyZSBtYXNrID0gKDEgPDwgd2lkdGgpIC0gMQorICAgICAgICAg
ICAgYXV0byB0cnlBcHBlbmRVQkZYID0gWyZdIChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAt
PiBib29sIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+b3Bjb2RlKCkgIT0gWlNociB8fCAh
Y2FuQmVJbnRlcm5hbChsZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgICAgIFZhbHVlKiBzcmNWYWx1ZSA9IGxlZnQtPmNoaWxkKDApOwogICAgICAg
ICAgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IGxlZnQtPmNoaWxkKDEpOwotICAgICAgICAgICAg
ICAgIGlmICghaW1tKHNyY1ZhbHVlKSAmJiBpbW0obHNiVmFsdWUpICYmIHJpZ2h0LT5oYXNJbnQo
KSkgewotICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGxzYiA9IGxzYlZhbHVlLT5hc0ludCgp
OwotICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrID0gcmlnaHQtPmFzSW50KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgd2lkdGggPSBzdGF0aWNfY2FzdDx1aW50OF90Pigh
KG1hc2sgJiAobWFzayArIDEpKSkgKiBXVEY6OmJpdENvdW50KG1hc2spOwotICAgICAgICAgICAg
ICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVGb3JUeXBlKFViZngzMiwgVWJmeDY0
LCBzcmNWYWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9wY29kZQotICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgbHNiID49IDAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICYmIHdpZHRoID4gMAotICAgICAgICAgICAgICAgICAgICAgICAgJiYgbHNiICsgd2lkdGggPD0g
KDMyIDw8IChvcGNvZGUgPT0gVWJmeDY0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGlz
VmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OkltbSwgQXJnOjpUbXAp
KSAgewotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKHNyY1ZhbHVl
KSwgaW1tKGxzYlZhbHVlKSwgaW1tKHdpZHRoKSwgdG1wKG1fdmFsdWUpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gb3Bjb2Rl
Rm9yVHlwZShVYmZ4MzIsIFViZng2NCwgc3JjVmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpJbW0s
IEFyZzo6VG1wKSkgCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBpZiAoaW1tKHNyY1ZhbHVlKSB8fCAhaW1tKGxzYlZhbHVlKSB8fCBsc2JWYWx1ZS0+
YXNJbnQoKSA8IDAgfHwgIXJpZ2h0LT5oYXNJbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgdWludDY0X3QgbHNiID0gbHNiVmFsdWUtPmFz
SW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbWFzayA9IHJpZ2h0LT5hc0ludCgpOwor
ICAgICAgICAgICAgICAgIGlmICghbWFzayB8fCBtYXNrICYgKG1hc2sgKyAxKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHdpZHRo
ID0gV1RGOjpiaXRDb3VudChtYXNrKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBkYXRhc2l6
ZSA9IG9wY29kZSA9PSBVYmZ4MzIgPyAzMiA6IDY0OworICAgICAgICAgICAgICAgIGlmIChsc2Ig
KyB3aWR0aCA+IGRhdGFzaXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAoc3JjVmFsdWUpLCBpbW0obHNiVmFs
dWUpLCBpbW0od2lkdGgpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgICAgIGNvbW1pdElu
dGVybmFsKGxlZnQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fTsKKworICAgICAgICAgICAgaWYgKHRyeUFwcGVuZFVCRlgobGVmdCwgcmlnaHQpIHx8IHRyeUFw
cGVuZFVCRlgocmlnaHQsIGxlZnQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICAgICAgYXBwZW5kQmluT3A8QW5kMzIsIEFuZDY0LCBBbmREb3VibGUsIEFuZEZsb2F0LCBDb21t
dXRhdGl2ZT4obGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjgwMywxMiAr
MjgxMiw0OSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTaGw6IHsKLSAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQzMigxKSkgewotICAgICAgICAg
ICAgICAgIGFwcGVuZEJpbk9wPEFkZDMyLCBBZGQ2NCwgQWRkRG91YmxlLCBBZGRGbG9hdCwgQ29t
bXV0YXRpdmU+KG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAg
ICAgICBWYWx1ZSogbGVmdCA9IG1fdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgVmFsdWUq
IHJpZ2h0ID0gbV92YWx1ZS0+Y2hpbGQoMSk7CisKKyAgICAgICAgICAgIC8vIFVCRklaIFBhdHRl
cm46IGQgPSAobiAmIG1hc2spIDw8IGxzYiB3aGVyZSBtYXNrID0gKDEgPDwgd2lkdGgpIC0gMQor
ICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRVQkZaID0gWyZdICgpIC0+IGJvb2wgeworICAgICAg
ICAgICAgICAgIGlmIChsZWZ0LT5vcGNvZGUoKSAhPSBCaXRBbmQgfHwgIWNhbkJlSW50ZXJuYWwo
bGVmdCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBWYWx1ZSogYW5kTGVmdCA9IGxlZnQtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZhbHVl
KiBhbmRSaWdodCA9IGxlZnQtPmNoaWxkKDEpOworCisgICAgICAgICAgICAgICAgYXV0byB0cnlB
bmRWYWx1ZU1hc2sgPSBbJl0gKFZhbHVlKiBuVmFsdWUsIFZhbHVlKiBtYXNrVmFsdWUpIC0+IGJv
b2wgeworICAgICAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVGb3JU
eXBlKFViZml6MzIsIFViZml6NjQsIG5WYWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpJbW0s
IEFyZzo6VG1wKSkgCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpbW0oblZhbHVlKSB8fCAhbWFza1ZhbHVlLT5oYXNJbnQoKSB8
fCAhaW1tKHJpZ2h0KSB8fCByaWdodC0+YXNJbnQoKSA8IDApCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbHNiID0g
cmlnaHQtPmFzSW50KCk7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBtYXNr
VmFsdWUtPmFzSW50KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbWFzayB8fCBtYXNrICYg
KG1hc2sgKyAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgdWludDY0X3Qgd2lkdGggPSBXVEY6OmJpdENvdW50KG1hc2spOworICAg
ICAgICAgICAgICAgICAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IG9wY29kZSA9PSBVYmZpejMyID8g
MzIgOiA2NDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxzYiArIHdpZHRoID4gZGF0YXNpemUp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKG5WYWx1ZSksIGltbShyaWdodCksIGltbSh3aWR0aCks
IHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9Owor
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRyeUFuZFZhbHVlTWFzayhhbmRMZWZ0LCBhbmRSaWdo
dCkgfHwgdHJ5QW5kVmFsdWVNYXNrKGFuZFJpZ2h0LCBhbmRMZWZ0KTsKKyAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRVQkZaKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBpZiAocmlnaHQtPmlzSW50MzIoMSkpIHsKKyAgICAgICAgICAg
ICAgICBhcHBlbmRCaW5PcDxBZGQzMiwgQWRkNjQsIEFkZERvdWJsZSwgQWRkRmxvYXQsIENvbW11
dGF0aXZlPihsZWZ0LCBsZWZ0KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGFwcGVuZFNoaWZ0PExzaGlmdDMyLCBMc2hp
ZnQ2ND4obV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKKworICAgICAgICAg
ICAgYXBwZW5kU2hpZnQ8THNoaWZ0MzIsIExzaGlmdDY0PihsZWZ0LCByaWdodCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UmVkdWNlU3RyZW5ndGguY3BwCmluZGV4IDYyYjA4MTc1ZTlhNTBkMDIwNjM0YzljMmJhZDYxYzFk
YWIzYmMyOTUuLjVhOTM4Y2RjMDZkNWZiYjcyMDViZWY1MzljOTg3MjRmZDkxNTA1MzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKQEAgLTQyLDYg
KzQyLDcgQEAKICNpbmNsdWRlICJCM1ZhbHVlS2V5SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzVmFs
dWVJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xMDM3LDIyICsxMDM4LDU5IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKFpTaHIodmFsdWUs
IHNoaWZ0QW1vdW50KSwgbWFzaykKLSAgICAgICAgICAgIC8vIC0gc2hpZnRBbW91bnQgPj0gMCBh
bmQgbWFzayBpcyBjb250aWd1b3VzIG9uZXMgZnJvbSBMU0IsIGV4YW1wbGUgMGIwMTExMTExMQot
ICAgICAgICAgICAgLy8gLSBzaGlmdEFtb3VudCArIGJpdENvdW50KG1hc2spID09IG1heEJpdFdp
ZHRoCisgICAgICAgICAgICAvLyBDb25kaXRpb25zOgorICAgICAgICAgICAgLy8gMS4gbWFzayA9
ICgxIDw8IHdpZHRoKSAtIDEKKyAgICAgICAgICAgIC8vIDIuIDAgPD0gc2hpZnRBbW91bnQgPCBk
YXRhc2l6ZQorICAgICAgICAgICAgLy8gMy4gMCA8IHdpZHRoIDwgZGF0YXNpemUKKyAgICAgICAg
ICAgIC8vIDQuIHNoaWZ0QW1vdW50ICsgd2lkdGggPj0gZGF0YXNpemUKICAgICAgICAgICAgIC8v
IEludG8gdGhpczogWlNocih2YWx1ZSwgc2hpZnRBbW91bnQpCiAgICAgICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFpTaHIKICAgICAgICAgICAgICAgICAmJiBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludCgpCisgICAgICAgICAgICAgICAgJiYgbV92
YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludCgpID49IDAKICAgICAgICAgICAgICAgICAm
JiBtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICBpbnQ2NF90
IHNoaWZ0QW1vdW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludCgpOworICAg
ICAgICAgICAgICAgIHVpbnQ2NF90IHNoaWZ0QW1vdW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDEpLT5hc0ludCgpOwogICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBtX3ZhbHVl
LT5jaGlsZCgxKS0+YXNJbnQoKTsKLSAgICAgICAgICAgICAgICBib29sIGlzVmFsaWQgPSBtYXNr
ICYmICEobWFzayAmIChtYXNrICsgMSkpOwotICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1heEJp
dFdpZHRoID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLT50eXBlKCkgPT0gSW50NjQgPyA2
NCA6IDMyOwotICAgICAgICAgICAgICAgIGlmIChzaGlmdEFtb3VudCA+PSAwICYmIGlzVmFsaWQg
JiYgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNoaWZ0QW1vdW50ICsgV1RGOjpiaXRDb3VudChtYXNr
KSkgPT0gbWF4Qml0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBib29sIGlzVmFsaWRNYXNrID0g
bWFzayAmJiAhKG1hc2sgJiAobWFzayArIDEpKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBk
YXRhc2l6ZSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKS0+dHlwZSgpID09IEludDY0ID8g
NjQgOiAzMjsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCB3aWR0aCA9IFdURjo6Yml0Q291bnQo
bWFzayk7CisgICAgICAgICAgICAgICAgaWYgKHNoaWZ0QW1vdW50IDwgZGF0YXNpemUgJiYgaXNW
YWxpZE1hc2sgJiYgc2hpZnRBbW91bnQgKyB3aWR0aCA+PSBkYXRhc2l6ZSkgewogICAgICAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChTaGwodmFsdWUsIHNoaWZ0QW1vdW50
KSwgbWFza1NoaWZ0KQorICAgICAgICAgICAgLy8gQ29uZGl0aW9uczoKKyAgICAgICAgICAgIC8v
IDEuIG1hc2tTaGlmdCA9IG1hc2sgPDwgc2hpZnRBbW91bnQKKyAgICAgICAgICAgIC8vIDIuIG1h
c2sgPSAoMSA8PCB3aWR0aCkgLSAxCisgICAgICAgICAgICAvLyAzLiAwIDw9IHNoaWZ0QW1vdW50
IDwgZGF0YXNpemUKKyAgICAgICAgICAgIC8vIDQuIDAgPCB3aWR0aCA8IGRhdGFzaXplCisgICAg
ICAgICAgICAvLyA1LiBzaGlmdEFtb3VudCArIHdpZHRoIDw9IGRhdGFzaXplCisgICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IFNobChCaXRBbmQodmFsdWUsIG1hc2spLCBzaGlmdEFtb3VudCkKKyAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU2hsCisgICAgICAg
ICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludCgpID49IDAKKyAg
ICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludCgpCisg
ICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7CisgICAgICAg
ICAgICAgICAgdWludDY0X3Qgc2hpZnRBbW91bnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MSktPmFzSW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbWFza1NoaWZ0ID0gbV92YWx1
ZS0+Y2hpbGQoMSktPmFzSW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbWFza1NoaWZ0
QW1vdW50ID0gV1RGOjpjb3VudFRyYWlsaW5nWmVyb3MobWFza1NoaWZ0KTsKKyAgICAgICAgICAg
ICAgICB1aW50NjRfdCBtYXNrID0gbWFza1NoaWZ0ID4+IG1hc2tTaGlmdEFtb3VudDsKKyAgICAg
ICAgICAgICAgICB1aW50NjRfdCB3aWR0aCA9IFdURjo6Yml0Q291bnQobWFzayk7CisgICAgICAg
ICAgICAgICAgdWludDY0X3QgZGF0YXNpemUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkt
PnR5cGUoKSA9PSBJbnQ2NCA/IDY0IDogMzI7CisgICAgICAgICAgICAgICAgYm9vbCBpc1ZhbGlk
U2hpZnRBbW91bnQgPSBzaGlmdEFtb3VudCA9PSBtYXNrU2hpZnRBbW91bnQgJiYgc2hpZnRBbW91
bnQgPCBkYXRhc2l6ZTsKKyAgICAgICAgICAgICAgICBib29sIGlzVmFsaWRNYXNrID0gbWFzayAm
JiAhKG1hc2sgJiAobWFzayArIDEpKSAmJiB3aWR0aCA8IGRhdGFzaXplOworICAgICAgICAgICAg
ICAgIGlmIChpc1ZhbGlkU2hpZnRBbW91bnQgJiYgaXNWYWxpZE1hc2sgJiYgc2hpZnRBbW91bnQg
KyB3aWR0aCA8PSBkYXRhc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbWFza1Zh
bHVlOworICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YXNpemUgPT0gMzIpCisgICAgICAgICAg
ICAgICAgICAgICAgICBtYXNrVmFsdWUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZh
bHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFzayk7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tWYWx1ZSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCBtYXNr
KTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGJpdEFuZCA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxWYWx1ZT4obV9pbmRleCwgQml0QW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDApLCBtYXNrVmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aE5ldzxWYWx1ZT4oU2hsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgYml0QW5kLCBtX3ZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
Qml0QW5kKHZhbHVlLCBhbGwtb25lcykKICAgICAgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUu
CiAgICAgICAgICAgICBpZiAoKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQ2NCAmJiBtX3ZhbHVlLT5j
aGlsZCgxKS0+aXNJbnQ2NChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rl
cyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKaW5kZXgg
OWEyZTc0Mjc2NTM3MGYzM2Q2ZjJkYzY2MjUxZTYxN2E1NGZkMjI5ZC4uY2UyMDFiYmFlNTFiYjQz
ODg5ZmE1MjgwNzMyZDhmN2JkMjkyYzlmZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBAIC0zNjYsNiArMzY2LDEyIEBAIGFybTY0OiBVYmZ4
MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogYXJtNjQ6IFViZng2NCBVOkc6NjQs
IFU6RzozMiwgVTpHOjMyLCBEOkc6NjQKICAgICBUbXAsIEltbSwgSW1tLCBUbXAKIAorYXJtNjQ6
IFViZml6MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgorICAgIFRtcCwgSW1tLCBJ
bW0sIFRtcAorCithcm02NDogVWJmaXo2NCBVOkc6NjQsIFU6RzozMiwgVTpHOjMyLCBEOkc6NjQK
KyAgICBUbXAsIEltbSwgSW1tLCBUbXAKKwogNjQ6IEFuZDY0IFU6Rzo2NCwgVTpHOjY0LCBEOkc6
NjQKICAgICBUbXAsIFRtcCwgVG1wCiAgICAgYXJtNjQ6IEJpdEltbTY0LCBUbXAsIFRtcApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IGI1ZTRjZjJjNzg4ODgyZjY1ZDNmMTJjNzMyZWUy
NGQ1YzY4MzNlZTQuLjRkM2QyYjY5Y2Y3OTc3ZjgyYmUyMmM4ZjYxYjllMTk0MTYzMmEyZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTQxNiwxMCArNDE2LDE4IEBAIGlubGluZSBk
b3VibGUgbW9kZWxMb2FkPGRvdWJsZSwgZG91YmxlPihkb3VibGUgdmFsdWUpIHsgcmV0dXJuIHZh
bHVlOyB9CiAKIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcik7CiB2b2lkIHRlc3RCaXRBbmRT
RXh0MzIoaW50MzJfdCB2YWx1ZSwgaW50NjRfdCBtYXNrKTsKLXZvaWQgdGVzdFViZngzMigpOwot
dm9pZCB0ZXN0VWJmeDMyUGF0dGVybk1hdGNoKCk7Ci12b2lkIHRlc3RVYmZ4NjQoKTsKLXZvaWQg
dGVzdFViZng2NFBhdHRlcm5NYXRjaCgpOwordm9pZCB0ZXN0VWJmeDMyU2hpZnRBbmQoKTsKK3Zv
aWQgdGVzdFViZngzMkFuZFNoaWZ0KCk7Cit2b2lkIHRlc3RVYmZ4NjRTaGlmdEFuZCgpOwordm9p
ZCB0ZXN0VWJmeDY0QW5kU2hpZnQoKTsKK3ZvaWQgdGVzdFViZml6MzJBbmRTaGlmdFZhbHVlTWFz
aygpOwordm9pZCB0ZXN0VWJmaXozMkFuZFNoaWZ0TWFza1ZhbHVlKCk7Cit2b2lkIHRlc3RVYmZp
ejMyU2hpZnRBbmQoKTsKK3ZvaWQgdGVzdFViZml6MzJBbmRTaGlmdCgpOwordm9pZCB0ZXN0VWJm
aXo2NEFuZFNoaWZ0VmFsdWVNYXNrKCk7Cit2b2lkIHRlc3RVYmZpejY0QW5kU2hpZnRNYXNrVmFs
dWUoKTsKK3ZvaWQgdGVzdFViZml6NjRTaGlmdEFuZCgpOwordm9pZCB0ZXN0VWJmaXo2NEFuZFNo
aWZ0KCk7CiB2b2lkIHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2szMigpOwogdm9p
ZCB0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrNjQoKTsKIHZvaWQgdGVzdEJhc2lj
U2VsZWN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcAppbmRleCAxZGRjNzFm
MTAyYWQ1YWFiYjcxOTIxMWRlNDc5ZjBkMWM4YTY5YTcxLi45NzQzNDU4YTJmODkxYzg1MjFiYmYx
YmYzM2Y3Y2Q0MjhkNGY0MzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzXzIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAK
QEAgLTI1ODEsMTIgKzI1ODEsMTUgQEAgdm9pZCB0ZXN0TmVnRmxvYXRXaXRoVXNlbGVzc0RvdWJs
ZUNvbnZlcnNpb24oZmxvYXQgYSkKICAgICBDSEVDSyhpc0lkZW50aWNhbChjb21waWxlQW5kUnVu
PGZsb2F0Pihwcm9jLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oYSkpLCAtYSkpOwogfQogCi12b2lk
IHRlc3RVYmZ4MzIoKQordm9pZCB0ZXN0VWJmeDMyU2hpZnRBbmQoKQogewotICAgIC8vIChzcmMg
Pj4gbHNiKSAmIG1hc2sKKyAgICAvLyBUZXN0IFBhdHRlcm46IChzcmMgPj4gbHNiKSAmIG1hc2sK
KyAgICAvLyB3aGVyZTogbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICBpZiAoSlNDOjpPcHRp
b25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOwogICAgIHVpbnQz
Ml90IHNyYyA9IDB4ZmZmZmZmZmY7Ci0gICAgVmVjdG9yPHVpbnQzMl90PiBsc2JzID0geyAwLCAx
NSwgMzAgfTsKLSAgICBWZWN0b3I8dWludDMyX3Q+IHdpZHRocyA9IHsgMzAsIDE2LCAxIH07Cisg
ICAgVmVjdG9yPHVpbnQzMl90PiBsc2JzID0geyAxLCAxNCwgMzAgfTsKKyAgICBWZWN0b3I8dWlu
dDMyX3Q+IHdpZHRocyA9IHsgMzAsIDE3LCAxIH07CiAKICAgICBhdXRvIHRlc3QgPSBbJl0gKHVp
bnQzMl90IGxzYiwgdWludDMyX3QgbWFzaykgLT4gdWludDMyX3QgewogICAgICAgICBQcm9jZWR1
cmUgcHJvYzsKQEAgLTI2MDIsOCArMjYwNSwxMSBAQCB2b2lkIHRlc3RVYmZ4MzIoKQogICAgICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCiAgICAgICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLAogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRB
bmQsIE9yaWdpbigpLCBsZWZ0LCBtYXNrVmFsdWUpKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVy
biBjb21waWxlQW5kUnVuPHVpbnQzMl90Pihwcm9jLCBzcmMpOworCisgICAgICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAg
ICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1YmZ4Iik7CisgICAgICAgIHJldHVybiBp
bnZva2U8dWludDMyX3Q+KCpjb2RlLCBzcmMpOwogICAgIH07CiAKICAgICBhdXRvIGdlbmVyYXRl
TWFzayA9IFsmXSAodWludDMyX3Qgd2lkdGgpIC0+IHVpbnQzMl90IHsKQEAgLTI2MTMsMTkgKzI2
MTksMjEgQEAgdm9pZCB0ZXN0VWJmeDMyKCkKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxz
YnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgdWludDMyX3QgbHNiID0gbHNicy5hdChpKTsKICAg
ICAgICAgdWludDMyX3QgbWFzayA9IGdlbmVyYXRlTWFzayh3aWR0aHMuYXQoaSkpOwotICAgICAg
ICB1aW50MzJfdCBsaHMgPSB0ZXN0KGxzYiwgbWFzayk7Ci0gICAgICAgIHVpbnQzMl90IHJocyA9
ICgoc3JjID4+IGxzYikgJiBtYXNrKTsKLSAgICAgICAgQ0hFQ0sobGhzID09IHJocyk7CisgICAg
ICAgIENIRUNLKHRlc3QobHNiLCBtYXNrKSA9PSAoKHNyYyA+PiBsc2IpICYgbWFzaykpOwogICAg
IH0KIH0KIAotdm9pZCB0ZXN0VWJmeDMyUGF0dGVybk1hdGNoKCkKK3ZvaWQgdGVzdFViZngzMkFu
ZFNoaWZ0KCkKIHsKLSAgICAvLyAoc3JjID4+IGxzYikgJiAoKDEgPDwgd2lkdGgpIC0gMSkKKyAg
ICAvLyBUZXN0IFBhdHRlcm46IG1hc2sgJiAoc3JjID4+IGxzYikKKyAgICAvLyBXaGVyZTogbWFz
ayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRM
ZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOwogICAgIHVpbnQzMl90IHNyYyA9IDB4ZmZmZmZm
ZmY7Ci0gICAgVmVjdG9yPHVpbnQzMl90PiBpbW1zID0geyAwLCAxLCAzMCwgMzEsIDMyLCA2Miwg
NjMsIDY0IH07CisgICAgVmVjdG9yPHVpbnQzMl90PiBsc2JzID0geyAxLCAxNCwgMzAgfTsKKyAg
ICBWZWN0b3I8dWludDMyX3Q+IHdpZHRocyA9IHsgMzAsIDE3LCAxIH07CiAKLSAgICBhdXRvIHRl
c3QgPSBbJl0gKHVpbnQzMl90IGxzYiwgdWludDMyX3Qgd2lkdGgpIC0+IHVpbnQzMl90IHsKKyAg
ICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IGxzYiwgdWludDMyX3QgbWFzaykgLT4gdWludDMy
X3QgewogICAgICAgICBQcm9jZWR1cmUgcHJvYzsKICAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKIApAQCAtMjYzMywzNiArMjY0MSwzOSBAQCB2b2lkIHRlc3RVYmZ4
MzJQYXR0ZXJuTWF0Y2goKQogICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CiAgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsc2IpOwotICAgICAg
ICBWYWx1ZSogd2lkdGhWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCB3aWR0aCk7Ci0gICAgICAgIFZhbHVlKiBjb25zdFZhbHVlQSA9IHJvb3QtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKTsKLSAgICAgICAgVmFsdWUq
IGNvbnN0VmFsdWVCID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIDEpOworICAgICAgICBWYWx1ZSogbWFza1ZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2spOwogCi0gICAgICAgIFZhbHVlKiBsZWZ0ID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgc3JjVmFsdWUsIGxz
YlZhbHVlKTsKLSAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
LSAgICAgICAgICAgIHByb2MsIFN1YiwgT3JpZ2luKCksIAotICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBjb25zdFZhbHVlQSwgd2lkdGhWYWx1
ZSksIGNvbnN0VmFsdWVCKTsKKyAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgc3JjVmFsdWUsIGxzYlZhbHVlKTsKICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAogICAgICAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwKLSAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0
QW5kLCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbWFza1ZhbHVlLCByaWdodCkpOwogCi0g
ICAgICAgIHJldHVybiBjb21waWxlQW5kUnVuPHVpbnQzMl90Pihwcm9jLCBzcmMpOworICAgICAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkK
KyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAidWJmeCIpOworICAgICAg
ICByZXR1cm4gaW52b2tlPHVpbnQzMl90PigqY29kZSwgc3JjKTsKICAgICB9OwogCi0gICAgZm9y
IChhdXRvIGxzYiA6IGltbXMpIHsKLSAgICAgICAgZm9yIChhdXRvIHdpZHRoIDogaW1tcykgewot
ICAgICAgICAgICAgdWludDMyX3QgbGhzID0gdGVzdChsc2IsIHdpZHRoKTsKLSAgICAgICAgICAg
IHVpbnQzMl90IHJocyA9ICgoc3JjID4+IGxzYikgJiAoKDFVIDw8IHdpZHRoKSAtIDFVKSk7Ci0g
ICAgICAgICAgICBDSEVDSyhsaHMgPT0gcmhzKTsKLSAgICAgICAgfQorICAgIGF1dG8gZ2VuZXJh
dGVNYXNrID0gWyZdICh1aW50MzJfdCB3aWR0aCkgLT4gdWludDMyX3QgeworICAgICAgICByZXR1
cm4gKDFVIDw8IHdpZHRoKSAtIDFVOworICAgIH07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxzYnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgbHNiID0gbHNicy5hdChp
KTsKKyAgICAgICAgdWludDMyX3QgbWFzayA9IGdlbmVyYXRlTWFzayh3aWR0aHMuYXQoaSkpOwor
ICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgbWFzaykgPT0gKG1hc2sgJiAoc3JjID4+IGxzYikpKTsK
ICAgICB9CiB9CiAKLXZvaWQgdGVzdFViZng2NCgpCit2b2lkIHRlc3RVYmZ4NjRTaGlmdEFuZCgp
CiB7Ci0gICAgLy8gKHNyYyA+PiBsc2IpICYgbWFzawotICAgIHVpbnQ2NF90IHNyYyA9IDB4ZmZm
ZmZmZmY7Ci0gICAgVmVjdG9yPHVpbnQ2NF90PiBsc2JzID0geyAwLCAzMSwgNjIgfTsKLSAgICBW
ZWN0b3I8dWludDY0X3Q+IHdpZHRocyA9IHsgNjMsIDMyLCAxIH07CisgICAgLy8gVGVzdCBQYXR0
ZXJuOiAoc3JjID4+IGxzYikgJiBtYXNrCisgICAgLy8gd2hlcmU6IG1hc2sgPSAoMSA8PCB3aWR0
aCkgLSAxCisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisg
ICAgICAgIHJldHVybjsKKyAgICB1aW50NjRfdCBzcmMgPSAweGZmZmZmZmZmZmZmZmZmZmY7Cisg
ICAgVmVjdG9yPHVpbnQ2NF90PiBsc2JzID0geyAxLCAzMCwgNjIgfTsKKyAgICBWZWN0b3I8dWlu
dDY0X3Q+IHdpZHRocyA9IHsgNjIsIDMzLCAxIH07CiAKICAgICBhdXRvIHRlc3QgPSBbJl0gKHVp
bnQ2NF90IGxzYiwgdWludDY0X3QgbWFzaykgLT4gdWludDY0X3QgewogICAgICAgICBQcm9jZWR1
cmUgcHJvYzsKQEAgLTI2NzcsNyArMjY4OCwxMCBAQCB2b2lkIHRlc3RVYmZ4NjQoKQogICAgICAg
ICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbGVmdCwgbWFza1ZhbHVlKSk7CiAKLSAg
ICAgICAgcmV0dXJuIGNvbXBpbGVBbmRSdW48dWludDY0X3Q+KHByb2MsIHNyYyk7CisgICAgICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKQor
ICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1YmZ4Iik7CisgICAgICAg
IHJldHVybiBpbnZva2U8dWludDY0X3Q+KCpjb2RlLCBzcmMpOwogICAgIH07CiAKICAgICBhdXRv
IGdlbmVyYXRlTWFzayA9IFsmXSAodWludDY0X3Qgd2lkdGgpIC0+IHVpbnQ2NF90IHsKQEAgLTI2
ODcsNDUgKzI3MDEsMzc5IEBAIHZvaWQgdGVzdFViZng2NCgpCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIHVpbnQ2NF90IGxzYiA9IGxzYnMu
YXQoaSk7CiAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBnZW5lcmF0ZU1hc2sod2lkdGhzLmF0KGkp
KTsKLSAgICAgICAgdWludDY0X3QgbGhzID0gdGVzdChsc2IsIG1hc2spOwotICAgICAgICB1aW50
NjRfdCByaHMgPSAoKHNyYyA+PiBsc2IpICYgbWFzayk7Ci0gICAgICAgIENIRUNLKGxocyA9PSBy
aHMpOworICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgbWFzaykgPT0gKChzcmMgPj4gbHNiKSAmIG1h
c2spKTsKICAgICB9CiB9CiAKLXZvaWQgdGVzdFViZng2NFBhdHRlcm5NYXRjaCgpCit2b2lkIHRl
c3RVYmZ4NjRBbmRTaGlmdCgpCiB7Ci0gICAgLy8gKHNyYyA+PiBsc2IpICYgKCgxIDw8IHdpZHRo
KSAtIDEpCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBtYXNrICYgKHNyYyA+PiBsc2IpCisgICAgLy8g
V2hlcmU6IG1hc2sgPSAoMSA8PCB3aWR0aCkgLSAxCisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVm
YXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKICAgICB1aW50NjRfdCBzcmMg
PSAweGZmZmZmZmZmZmZmZmZmZmY7Ci0gICAgVmVjdG9yPHVpbnQzMl90PiBpbW1zID0geyAwLCAx
LCAzMCwgMzEsIDMyLCA2MiwgNjMsIDY0IH07CisgICAgVmVjdG9yPHVpbnQ2NF90PiBsc2JzID0g
eyAxLCAzMCwgNjIgfTsKKyAgICBWZWN0b3I8dWludDY0X3Q+IHdpZHRocyA9IHsgNjIsIDMzLCAx
IH07CiAKLSAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IGxzYiwgdWludDMyX3Qgd2lkdGgp
IC0+IHVpbnQ2NF90IHsKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQ2NF90IGxzYiwgdWludDY0
X3QgbWFzaykgLT4gdWludDY0X3QgewogICAgICAgICBQcm9jZWR1cmUgcHJvYzsKICAgICAgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKIAogICAgICAgICBWYWx1ZSogc3Jj
VmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsc2IpOwotICAgICAgICBW
YWx1ZSogd2lkdGhWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCB3aWR0aCk7Ci0gICAgICAgIFZhbHVlKiBjb25zdFZhbHVlQSA9IHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKTsKLSAgICAgICAgVmFsdWUqIGNv
bnN0VmFsdWVCID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IDEpOworICAgICAgICBWYWx1ZSogbWFza1ZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2spOwogCi0gICAgICAgIFZhbHVlKiBsZWZ0ID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgc3JjVmFsdWUsIGxzYlZh
bHVlKTsKLSAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKLSAg
ICAgICAgICAgIHByb2MsIFN1YiwgT3JpZ2luKCksIAotICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBjb25zdFZhbHVlQSwgd2lkdGhWYWx1ZSks
IGNvbnN0VmFsdWVCKTsKKyAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgc3JjVmFsdWUsIGxzYlZhbHVlKTsKICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAogICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwKLSAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5k
LCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbWFza1ZhbHVlLCByaWdodCkpOwogCi0gICAg
ICAgIHJldHVybiBjb21waWxlQW5kUnVuPHVpbnQ2NF90Pihwcm9jLCBzcmMpOworICAgICAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAg
ICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAidWJmeCIpOworICAgICAgICBy
ZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgc3JjKTsKICAgICB9OwogCi0gICAgZm9yIChh
dXRvIGxzYiA6IGltbXMpIHsKLSAgICAgICAgZm9yIChhdXRvIHdpZHRoIDogaW1tcykgewotICAg
ICAgICAgICAgdWludDY0X3QgbGhzID0gdGVzdChsc2IsIHdpZHRoKTsKLSAgICAgICAgICAgIHVp
bnQ2NF90IHJocyA9ICgoc3JjID4+IGxzYikgJiAoKDFVTEwgPDwgd2lkdGgpIC0gMVVMTCkpOwot
ICAgICAgICAgICAgQ0hFQ0sobGhzID09IHJocyk7Ci0gICAgICAgIH0KKyAgICBhdXRvIGdlbmVy
YXRlTWFzayA9IFsmXSAodWludDY0X3Qgd2lkdGgpIC0+IHVpbnQ2NF90IHsKKyAgICAgICAgcmV0
dXJuICgxVUxMIDw8IHdpZHRoKSAtIDFVTEw7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbHNicy5zaXplKCk7ICsraSkgeworICAgICAgICB1aW50NjRfdCBsc2IgPSBsc2Jz
LmF0KGkpOworICAgICAgICB1aW50NjRfdCBtYXNrID0gZ2VuZXJhdGVNYXNrKHdpZHRocy5hdChp
KSk7CisgICAgICAgIENIRUNLKHRlc3QobHNiLCBtYXNrKSA9PSAobWFzayAmIChzcmMgPj4gbHNi
KSkpOworICAgIH0KK30KKwordm9pZCB0ZXN0VWJmaXozMkFuZFNoaWZ0VmFsdWVNYXNrKCkKK3sK
KyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSAobiAmIG1hc2spIDw8IGxzYiAKKyAgICAvLyBXaGVy
ZTogbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0
QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIHVpbnQzMl90IG4gPSAweGZm
ZmZmZmZmOworICAgIFZlY3Rvcjx1aW50MzJfdD4gbHNicyA9IHsgMSwgMTQsIDMwIH07CisgICAg
VmVjdG9yPHVpbnQzMl90PiB3aWR0aHMgPSB7IDMwLCAxNywgMSB9OworCisgICAgYXV0byB0ZXN0
ID0gWyZdICh1aW50MzJfdCBsc2IsIHVpbnQzMl90IG1hc2spIC0+IHVpbnQzMl90IHsKKyAgICAg
ICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIGxzYlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxzYik7CisgICAgICAgIFZhbHVlKiBtYXNrVmFs
dWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzayk7
CisKKyAgICAgICAgVmFsdWUqIGxlZnQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJp
dEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgbWFza1ZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgbGVm
dCwgbHNiVmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
KyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9u
KCpjb2RlLCAidWJmaXoiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUs
IG4pOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyYXRlTWFzayA9IFsmXSAodWludDMyX3Qgd2lk
dGgpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgcmV0dXJuICgxVSA8PCB3aWR0aCkgLSAxVTsKKyAg
ICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIHVpbnQzMl90IGxzYiA9IGxzYnMuYXQoaSk7CisgICAgICAgIHVpbnQzMl90IG1hc2sg
PSBnZW5lcmF0ZU1hc2sod2lkdGhzLmF0KGkpKTsKKyAgICAgICAgQ0hFQ0sodGVzdChsc2IsIG1h
c2spID09ICgobiAmIG1hc2spIDw8IGxzYikpOworICAgIH0KK30KKwordm9pZCB0ZXN0VWJmaXoz
MkFuZFNoaWZ0TWFza1ZhbHVlKCkKK3sKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSAobWFzayAm
IG4pIDw8IGxzYiAKKyAgICAvLyBXaGVyZTogbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICBp
ZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJu
OworICAgIHVpbnQzMl90IG4gPSAweGZmZmZmZmZmOworICAgIFZlY3Rvcjx1aW50MzJfdD4gbHNi
cyA9IHsgMSwgMTQsIDMwIH07CisgICAgVmVjdG9yPHVpbnQzMl90PiB3aWR0aHMgPSB7IDMwLCAx
NywgMSB9OworCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50MzJfdCBsc2IsIHVpbnQzMl90IG1h
c2spIC0+IHVpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2lu
KCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIGxzYlZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxzYik7
CisgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgbWFzayk7CisKKyAgICAgICAgVmFsdWUqIGxlZnQgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG1hc2tWYWx1ZSwgblZhbHVl
KTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgU2hsLCBPcmlnaW4oKSwgbGVmdCwgbHNiVmFsdWUpKTsKKworICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAg
ICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAidWJmaXoiKTsKKyAgICAgICAgcmV0dXJu
IGludm9rZTx1aW50MzJfdD4oKmNvZGUsIG4pOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyYXRl
TWFzayA9IFsmXSAodWludDMyX3Qgd2lkdGgpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgcmV0dXJu
ICgxVSA8PCB3aWR0aCkgLSAxVTsKKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsc2JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVpbnQzMl90IGxzYiA9IGxzYnMuYXQoaSk7
CisgICAgICAgIHVpbnQzMl90IG1hc2sgPSBnZW5lcmF0ZU1hc2sod2lkdGhzLmF0KGkpKTsKKyAg
ICAgICAgQ0hFQ0sodGVzdChsc2IsIG1hc2spID09ICgobWFzayAmIG4pIDw8IGxzYikpOworICAg
IH0KK30KKwordm9pZCB0ZXN0VWJmaXozMlNoaWZ0QW5kKCkKK3sKKyAgICAvLyBUZXN0IFBhdHRl
cm46IGQgPSAobiA8PCBsc2IpICYgbWFza1NoaWZ0CisgICAgLy8gV2hlcmU6IG1hc2tTaGlmdCA9
IG1hc2sgPDwgbHNiCisgICAgLy8gICAgICAgIG1hc2sgPSAoMSA8PCB3aWR0aCkgLSAxCisgICAg
aWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVy
bjsKKyAgICB1aW50MzJfdCBuID0gMHhmZmZmZmZmZjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGxz
YnMgPSB7IDEsIDE0LCAzMCB9OworICAgIFZlY3Rvcjx1aW50MzJfdD4gd2lkdGhzID0geyAzMCwg
MTcsIDEgfTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgbHNiLCB1aW50MzJfdCBt
YXNrU2hpZnQpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5W
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywg
T3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUq
IGxzYlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IGxzYik7CisgICAgICAgIFZhbHVlKiBtYXNrU2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNrU2hpZnQpOworCisgICAgICAgIFZhbHVl
KiBsZWZ0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBuVmFs
dWUsIGxzYlZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAg
ICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbGVmdCwgbWFza1NoaWZ0VmFsdWUp
KTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYg
KGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAidWJm
aXoiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIG4pOworICAgIH07
CisKKyAgICBhdXRvIGdlbmVyYXRlTWFza1NoaWZ0ID0gWyZdICh1aW50MzJfdCB3aWR0aCwgdWlu
dDMyX3QgbHNiKSAtPiB1aW50MzJfdCB7CisgICAgICAgIHJldHVybiAoKDFVIDw8IHdpZHRoKSAt
IDFVKSA8PCBsc2I7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbHNicy5z
aXplKCk7ICsraSkgeworICAgICAgICB1aW50MzJfdCBsc2IgPSBsc2JzLmF0KGkpOworICAgICAg
ICB1aW50MzJfdCBtYXNrU2hpZnQgPSBnZW5lcmF0ZU1hc2tTaGlmdCh3aWR0aHMuYXQoaSksIGxz
Yik7CisgICAgICAgIENIRUNLKHRlc3QobHNiLCBtYXNrU2hpZnQpID09ICgobiA8PCBsc2IpICYg
bWFza1NoaWZ0KSk7CisgICAgfQorfQorCit2b2lkIHRlc3RVYmZpejMyQW5kU2hpZnQoKQorewor
ICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG1hc2tTaGlmdCAmIChuIDw8IGxzYikKKyAgICAvLyBX
aGVyZTogbWFza1NoaWZ0ID0gbWFzayA8PCBsc2IKKyAgICAvLyAgICAgICAgbWFzayA9ICgxIDw8
IHdpZHRoKSAtIDEKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwg
MikKKyAgICAgICAgcmV0dXJuOworICAgIHVpbnQzMl90IG4gPSAweGZmZmZmZmZmOworICAgIFZl
Y3Rvcjx1aW50MzJfdD4gbHNicyA9IHsgMSwgMTQsIDMwIH07CisgICAgVmVjdG9yPHVpbnQzMl90
PiB3aWR0aHMgPSB7IDMwLCAxNywgMSB9OworCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50MzJf
dCBsc2IsIHVpbnQzMl90IG1hc2tTaGlmdCkgLT4gdWludDMyX3QgeworICAgICAgICBQcm9jZWR1
cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKwor
ICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OworICAgICAgICBWYWx1ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2tTaGlmdFZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2tTaGlmdCk7
CisKKyAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBT
aGwsIE9yaWdpbigpLCBuVmFsdWUsIGxzYlZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbWFz
a1NoaWZ0VmFsdWUsIHJpZ2h0KSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0
cnVjdGlvbigqY29kZSwgInViZml6Iik7CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDMyX3Q+
KCpjb2RlLCBuKTsKKyAgICB9OworCisgICAgYXV0byBnZW5lcmF0ZU1hc2tTaGlmdCA9IFsmXSAo
dWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGxzYikgLT4gdWludDMyX3QgeworICAgICAgICByZXR1
cm4gKCgxVSA8PCB3aWR0aCkgLSAxVSkgPDwgbHNiOworICAgIH07CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxzYnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgbHNiID0g
bHNicy5hdChpKTsKKyAgICAgICAgdWludDMyX3QgbWFza1NoaWZ0ID0gZ2VuZXJhdGVNYXNrU2hp
ZnQod2lkdGhzLmF0KGkpLCBsc2IpOworICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgbWFza1NoaWZ0
KSA9PSAobWFza1NoaWZ0ICYgKG4gPDwgbHNiKSkpOworICAgIH0KK30KKwordm9pZCB0ZXN0VWJm
aXo2NEFuZFNoaWZ0VmFsdWVNYXNrKCkKK3sKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSAobiAm
IG1hc2spIDw8IGxzYiAKKyAgICAvLyBXaGVyZTogbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAg
ICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0
dXJuOworICAgIHVpbnQ2NF90IG4gPSAweGZmZmZmZmZmZmZmZmZmZmY7CisgICAgVmVjdG9yPHVp
bnQ2NF90PiBsc2JzID0geyAxLCAzMCwgNjIgfTsKKyAgICBWZWN0b3I8dWludDY0X3Q+IHdpZHRo
cyA9IHsgNjIsIDMzLCAxIH07CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQ2NF90IGxzYiwg
dWludDY0X3QgbWFzaykgLT4gdWludDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1
ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSogbHNiVmFsdWUgPSBy
b290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbHNiKTsKKyAgICAg
ICAgVmFsdWUqIG1hc2tWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBtYXNrKTsKKworICAgICAgICBWYWx1ZSogbGVmdCA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBtYXNrVmFsdWUpOworICAg
ICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBT
aGwsIE9yaWdpbigpLCBsZWZ0LCBsc2JWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hl
Y2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1YmZpeiIpOworICAgICAgICByZXR1cm4gaW52b2tl
PHVpbnQ2NF90PigqY29kZSwgbik7CisgICAgfTsKKworICAgIGF1dG8gZ2VuZXJhdGVNYXNrID0g
WyZdICh1aW50NjRfdCB3aWR0aCkgLT4gdWludDY0X3QgeworICAgICAgICByZXR1cm4gKDFVTEwg
PDwgd2lkdGgpIC0gMVVMTDsKKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
c2JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVpbnQ2NF90IGxzYiA9IGxzYnMuYXQoaSk7Cisg
ICAgICAgIHVpbnQ2NF90IG1hc2sgPSBnZW5lcmF0ZU1hc2sod2lkdGhzLmF0KGkpKTsKKyAgICAg
ICAgQ0hFQ0sodGVzdChsc2IsIG1hc2spID09ICgobiAmIG1hc2spIDw8IGxzYikpOworICAgIH0K
K30KKwordm9pZCB0ZXN0VWJmaXo2NEFuZFNoaWZ0TWFza1ZhbHVlKCkKK3sKKyAgICAvLyBUZXN0
IFBhdHRlcm46IGQgPSAobWFzayAmIG4pIDw8IGxzYiAKKyAgICAvLyBXaGVyZTogbWFzayA9ICgx
IDw8IHdpZHRoKSAtIDEKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgp
IDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIHVpbnQ2NF90IG4gPSAweGZmZmZmZmZmZmZmZmZm
ZmY7CisgICAgVmVjdG9yPHVpbnQ2NF90PiBsc2JzID0geyAxLCAzMCwgNjIgfTsKKyAgICBWZWN0
b3I8dWludDY0X3Q+IHdpZHRocyA9IHsgNjIsIDMzLCAxIH07CisKKyAgICBhdXRvIHRlc3QgPSBb
Jl0gKHVpbnQ2NF90IGxzYiwgdWludDY0X3QgbWFzaykgLT4gdWludDY0X3QgeworICAgICAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2so
KTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBW
YWx1ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxD
b25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNrKTsKKworICAgICAgICBWYWx1ZSogbGVm
dCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbWFza1Zh
bHVlLCBuVmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAg
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBsZWZ0LCBsc2JWYWx1ZSkpOworCisgICAg
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgp
KQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1YmZpeiIpOworICAg
ICAgICByZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgbik7CisgICAgfTsKKworICAgIGF1
dG8gZ2VuZXJhdGVNYXNrID0gWyZdICh1aW50NjRfdCB3aWR0aCkgLT4gdWludDY0X3QgeworICAg
ICAgICByZXR1cm4gKDFVTEwgPDwgd2lkdGgpIC0gMVVMTDsKKyAgICB9OworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVpbnQ2NF90IGxz
YiA9IGxzYnMuYXQoaSk7CisgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBnZW5lcmF0ZU1hc2sod2lk
dGhzLmF0KGkpKTsKKyAgICAgICAgQ0hFQ0sodGVzdChsc2IsIG1hc2spID09ICgobWFzayAmIG4p
IDw8IGxzYikpOworICAgIH0KK30KKwordm9pZCB0ZXN0VWJmaXo2NFNoaWZ0QW5kKCkKK3sKKyAg
ICAvLyBUZXN0IFBhdHRlcm46IGQgPSAobiA8PCBsc2IpICYgbWFza1NoaWZ0CisgICAgLy8gV2hl
cmU6IG1hc2tTaGlmdCA9IG1hc2sgPDwgbHNiCisgICAgLy8gICAgICAgIG1hc2sgPSAoMSA8PCB3
aWR0aCkgLSAxCisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIp
CisgICAgICAgIHJldHVybjsKKyAgICB1aW50NjRfdCBuID0gMHhmZmZmZmZmZmZmZmZmZmZmOwor
ICAgIFZlY3Rvcjx1aW50NjRfdD4gbHNicyA9IHsgMSwgMzAsIDYyIH07CisgICAgVmVjdG9yPHVp
bnQ2NF90PiB3aWR0aHMgPSB7IDYyLCAzMywgMSB9OworCisgICAgYXV0byB0ZXN0ID0gWyZdICh1
aW50NjRfdCBsc2IsIHVpbnQ2NF90IG1hc2tTaGlmdCkgLT4gdWludDY0X3QgeworICAgICAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2so
KTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBW
YWx1ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2tTaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5k
TmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2tTaGlmdCk7CisKKyAgICAgICAg
VmFsdWUqIGxlZnQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCks
IG5WYWx1ZSwgbHNiVmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
CisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBsZWZ0LCBtYXNrU2hpZnRW
YWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAg
ICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUs
ICJ1YmZpeiIpOworICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgbik7Cisg
ICAgfTsKKworICAgIGF1dG8gZ2VuZXJhdGVNYXNrU2hpZnQgPSBbJl0gKHVpbnQ2NF90IHdpZHRo
LCB1aW50NjRfdCBsc2IpIC0+IHVpbnQ2NF90IHsKKyAgICAgICAgcmV0dXJuICgoMVVMTCA8PCB3
aWR0aCkgLSAxVUxMKSA8PCBsc2I7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbHNicy5zaXplKCk7ICsraSkgeworICAgICAgICB1aW50NjRfdCBsc2IgPSBsc2JzLmF0KGkp
OworICAgICAgICB1aW50NjRfdCBtYXNrU2hpZnQgPSBnZW5lcmF0ZU1hc2tTaGlmdCh3aWR0aHMu
YXQoaSksIGxzYik7CisgICAgICAgIENIRUNLKHRlc3QobHNiLCBtYXNrU2hpZnQpID09ICgobiA8
PCBsc2IpICYgbWFza1NoaWZ0KSk7CisgICAgfQorfQorCit2b2lkIHRlc3RVYmZpejY0QW5kU2hp
ZnQoKQoreworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG1hc2tTaGlmdCAmIChuIDw8IGxzYikK
KyAgICAvLyBXaGVyZTogbWFza1NoaWZ0ID0gbWFzayA8PCBsc2IKKyAgICAvLyAgICAgICAgbWFz
ayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRM
ZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIHVpbnQ2NF90IG4gPSAweGZmZmZmZmZm
ZmZmZmZmZmY7CisgICAgVmVjdG9yPHVpbnQ2NF90PiBsc2JzID0geyAxLCAzMCwgNjIgfTsKKyAg
ICBWZWN0b3I8dWludDY0X3Q+IHdpZHRocyA9IHsgNjIsIDMzLCAxIH07CisKKyAgICBhdXRvIHRl
c3QgPSBbJl0gKHVpbnQ2NF90IGxzYiwgdWludDY0X3QgbWFza1NoaWZ0KSAtPiB1aW50NjRfdCB7
CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CisgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBsc2IpOworICAgICAgICBWYWx1ZSogbWFza1NoaWZ0VmFsdWUgPSBy
b290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFza1NoaWZ0KTsK
KworICAgICAgICBWYWx1ZSogcmlnaHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNo
bCwgT3JpZ2luKCksIG5WYWx1ZSwgbHNiVmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdD
b250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBtYXNr
U2hpZnRWYWx1ZSwgcmlnaHQpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3Ry
dWN0aW9uKCpjb2RlLCAidWJmaXoiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50NjRfdD4o
KmNvZGUsIG4pOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyYXRlTWFza1NoaWZ0ID0gWyZdICh1
aW50NjRfdCB3aWR0aCwgdWludDY0X3QgbHNiKSAtPiB1aW50NjRfdCB7CisgICAgICAgIHJldHVy
biAoKDFVTEwgPDwgd2lkdGgpIC0gMVVMTCkgPDwgbHNiOworICAgIH07CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxzYnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdWludDY0X3QgbHNi
ID0gbHNicy5hdChpKTsKKyAgICAgICAgdWludDY0X3QgbWFza1NoaWZ0ID0gZ2VuZXJhdGVNYXNr
U2hpZnQod2lkdGhzLmF0KGkpLCBsc2IpOworICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgbWFza1No
aWZ0KSA9PSAobWFza1NoaWZ0ICYgKG4gPDwgbHNiKSkpOwogICAgIH0KIH0KIApAQCAtMjczNCw4
ICszMDgyLDggQEAgdm9pZCB0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrMzIoKQog
ICAgIC8vIFR1cm4gdGhpczogKHRtcCA+PiBpbW0pICYgbWFzayAKICAgICAvLyBJbnRvIHRoaXM6
IHRtcCA+PiBpbW0KICAgICB1aW50MzJfdCB0bXAgPSAweGZmZmZmZmZmOwotICAgIFZlY3Rvcjx1
aW50MzJfdD4gaW1tcyA9IHsgNCwgMjggfTsKLSAgICBWZWN0b3I8dWludDMyX3Q+IG1hc2tzID0g
eyAweDBmZmZmZmZmLCAweGYgfTsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGltbXMgPSB7IDQsIDI4
LCAzMSB9OworICAgIFZlY3Rvcjx1aW50MzJfdD4gbWFza3MgPSB7IDB4MGZmZmZmZmYsIDB4Ziwg
MHhmZmZmIH07CiAKICAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IGltbSwgdWludDMyX3Qg
bWFzaykgewogICAgICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTI3NTIsMTEgKzMxMDAsOCBAQCB2
b2lkIHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2szMigpCiAgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGxlZnRWYWx1ZSwg
cmlnaHRWYWx1ZSkpOwogCiAgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwot
ICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCiAgICAgICAg
ICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxzciIpOwotICAgICAgICAgICAgY2hl
Y2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24oKmNvZGUsICJhbmQiKTsKLSAgICAgICAgICAgIGNoZWNr
RG9lc05vdFVzZUluc3RydWN0aW9uKCpjb2RlLCAidWJmeCIpOwotICAgICAgICB9CiAgICAgICAg
IHVpbnQzMl90IGxocyA9IGludm9rZTx1aW50MzJfdD4oKmNvZGUsIHRtcCk7CiAgICAgICAgIHVp
bnQzMl90IHJocyA9IHRtcCA+PiBpbW07CiAgICAgICAgIENIRUNLKGxocyA9PSByaHMpOwpAQCAt
Mjc3MSw4ICszMTE2LDggQEAgdm9pZCB0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNr
NjQoKQogICAgIC8vIFR1cm4gdGhpczogKHRtcCA+PiBpbW0pICYgbWFzayAKICAgICAvLyBJbnRv
IHRoaXM6IHRtcCA+PiBpbW0KICAgICB1aW50NjRfdCB0bXAgPSAweGZmZmZmZmZmZmZmZmZmZmY7
Ci0gICAgVmVjdG9yPHVpbnQ2NF90PiBpbW1zID0geyA0LCA2MCB9OwotICAgIFZlY3Rvcjx1aW50
NjRfdD4gbWFza3MgPSB7IDB4MGZmZmZmZmZmZmZmZmZmZiwgMHhmIH07CisgICAgVmVjdG9yPHVp
bnQ2NF90PiBpbW1zID0geyA0LCA2MCwgNjMgfTsKKyAgICBWZWN0b3I8dWludDY0X3Q+IG1hc2tz
ID0geyAweDBmZmZmZmZmZmZmZmZmZmYsIDB4ZiwgMHhmZmZmIH07CiAKICAgICBhdXRvIHRlc3Qg
PSBbJl0gKHVpbnQ2NF90IGltbSwgdWludDY0X3QgbWFzaykgewogICAgICAgICBQcm9jZWR1cmUg
cHJvYzsKQEAgLTI3ODcsMTEgKzMxMzIsOCBAQCB2b2lkIHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdo
dEFyZ0ltbU1hc2s2NCgpCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEJpdEFuZCwgT3JpZ2luKCksIGxlZnRWYWx1ZSwgcmlnaHRWYWx1ZSkpOwogCiAgICAgICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwotICAgICAgICBpZiAoaXNBUk02NCgpKSB7Cisg
ICAgICAgIGlmIChpc0FSTTY0KCkpCiAgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigq
Y29kZSwgImxzciIpOwotICAgICAgICAgICAgY2hlY2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24oKmNv
ZGUsICJhbmQiKTsKLSAgICAgICAgICAgIGNoZWNrRG9lc05vdFVzZUluc3RydWN0aW9uKCpjb2Rl
LCAidWJmeCIpOwotICAgICAgICB9CiAgICAgICAgIHVpbnQ2NF90IGxocyA9IGludm9rZTx1aW50
NjRfdD4oKmNvZGUsIHRtcCk7CiAgICAgICAgIHVpbnQ2NF90IHJocyA9IHRtcCA+PiBpbW07CiAg
ICAgICAgIENIRUNLKGxocyA9PSByaHMpOwpAQCAtMzYxNSwxMCArMzk1NywxOCBAQCBzdGF0aWMg
dm9pZCB0ZXN0Qml0T3JJbW1BcmczMihpbnQgYSwgaW50IGIpCiAKIHZvaWQgYWRkQml0VGVzdHMo
Y29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRh
c2tzKQogewotICAgIFJVTih0ZXN0VWJmeDMyKCkpOwotICAgIFJVTih0ZXN0VWJmeDMyUGF0dGVy
bk1hdGNoKCkpOwotICAgIFJVTih0ZXN0VWJmeDY0KCkpOwotICAgIFJVTih0ZXN0VWJmeDY0UGF0
dGVybk1hdGNoKCkpOworICAgIFJVTih0ZXN0VWJmeDMyU2hpZnRBbmQoKSk7CisgICAgUlVOKHRl
c3RVYmZ4MzJBbmRTaGlmdCgpKTsKKyAgICBSVU4odGVzdFViZng2NFNoaWZ0QW5kKCkpOworICAg
IFJVTih0ZXN0VWJmeDY0QW5kU2hpZnQoKSk7CisgICAgUlVOKHRlc3RVYmZpejMyQW5kU2hpZnRW
YWx1ZU1hc2soKSk7CisgICAgUlVOKHRlc3RVYmZpejMyQW5kU2hpZnRNYXNrVmFsdWUoKSk7Cisg
ICAgUlVOKHRlc3RVYmZpejMyU2hpZnRBbmQoKSk7CisgICAgUlVOKHRlc3RVYmZpejMyQW5kU2hp
ZnQoKSk7CisgICAgUlVOKHRlc3RVYmZpejY0QW5kU2hpZnRWYWx1ZU1hc2soKSk7CisgICAgUlVO
KHRlc3RVYmZpejY0QW5kU2hpZnRNYXNrVmFsdWUoKSk7CisgICAgUlVOKHRlc3RVYmZpejY0U2hp
ZnRBbmQoKSk7CisgICAgUlVOKHRlc3RVYmZpejY0QW5kU2hpZnQoKSk7CiAgICAgUlVOKHRlc3RC
aXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2szMigpKTsKICAgICBSVU4odGVzdEJpdEFuZFpl
cm9TaGlmdFJpZ2h0QXJnSW1tTWFzazY0KCkpOwogICAgIFJVTih0ZXN0Qml0QW5kQXJncyg0Mywg
NDMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaCBiL1NvdXJjZS9X
VEYvd3RmL01hdGhFeHRyYXMuaAppbmRleCAwMWZlMjM2YTIxOWU3MDE5MTlkMjJhZjBlN2Y0M2Nh
YTA1N2I5YjljLi43YWRiODc0MmE4ZGU5ODEzNzIzZTU5MjUzMmY0YWEzMDE0NjQ4OWVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKKysrIGIvU291cmNlL1dURi93dGYv
TWF0aEV4dHJhcy5oCkBAIC03MjgsNiArNzI4LDI4IEBAIGNvbnN0ZXhwciB1bnNpZ25lZCBnZXRN
U0JTZXRDb25zdGV4cHIoVCB0KQogICAgIHJldHVybiBiaXRTaXplIC0gMSAtIGNsekNvbnN0ZXhw
cih0KTsKIH0KIAoraW5saW5lIHNpemVfdCBjb3VudFRyYWlsaW5nWmVyb3ModWludDMyX3QgdikK
K3sKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgTW9kMzdCaXRQb3NpdGlvbltdID0geworICAg
ICAgICAzMiwgMCwgMSwgMjYsIDIsIDIzLCAyNywgMCwgMywgMTYsIDI0LCAzMCwgMjgsIDExLCAw
LCAxMywKKyAgICAgICAgNCwgNywgMTcsIDAsIDI1LCAyMiwgMzEsIDE1LCAyOSwgMTAsIDEyLCA2
LCAwLCAyMSwgMTQsIDksCisgICAgICAgIDUsIDIwLCA4LCAxOSwgMTgKKyAgICB9OworICAgIHJl
dHVybiBNb2QzN0JpdFBvc2l0aW9uWygoMSArIH52KSAmIHYpICUgMzddOworfQorCitpbmxpbmUg
c2l6ZV90IGNvdW50VHJhaWxpbmdaZXJvcyh1aW50NjRfdCB2KQoreworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBNb2Q2N1Bvc2l0aW9uW10gPSB7CisgICAgICAgIDY0LCAwLCAxLCAzOSwgMiwg
MTUsIDQwLCAyMywgMywgMTIsIDE2LCA1OSwgNDEsIDE5LCAyNCwgNTQsCisgICAgICAgIDQsIDY0
LCAxMywgMTAsIDE3LCA2MiwgNjAsIDI4LCA0MiwgMzAsIDIwLCA1MSwgMjUsIDQ0LCA1NSwKKyAg
ICAgICAgNDcsIDUsIDMyLCA2NSwgMzgsIDE0LCAyMiwgMTEsIDU4LCAxOCwgNTMsIDYzLCA5LCA2
MSwgMjcsCisgICAgICAgIDI5LCA1MCwgNDMsIDQ2LCAzMSwgMzcsIDIxLCA1NywgNTIsIDgsIDI2
LCA0OSwgNDUsIDM2LCA1NiwKKyAgICAgICAgNywgNDgsIDM1LCA2LCAzNCwgMzMsIDAKKyAgICB9
OworICAgIHJldHVybiBNb2Q2N1Bvc2l0aW9uWygoMSArIH52KSAmIHYpICUgNjddOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpzaHVmZmxlVmVjdG9yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432059</attachid>
            <date>2021-06-23 09:31:26 -0700</date>
            <delta_ts>2021-06-23 14:00:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227204-20210623113124.patch</filename>
            <type>text/plain</type>
            <size>44621</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MDc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
OTNjMGNmMWI2ZTcwMGVkMDQ1ZjkyZWU5ZDI3MmExODg0MTI4OGM1Li5iZjVhNmE4MDIwOWE3YjJh
NjRmNzQ1NjYyNzI0YjZjMzFlYmEyYjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTMgQEAKKzIwMjEtMDYtMjEgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBhIG5ldyBwYXR0ZXJuIHRvIGluc3RydWN0aW9uIHNlbGVjdG9y
IHRvIHV0aWxpemUgVUJGSVogc3VwcG9ydGVkIGJ5IEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMDQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGluY2x1ZGVzIHRocmVlIHBh
cnRzOgorICAgICAgICAgICAgQSkgQWRkIFVCRklaIHRvIGluc3RydWN0aW9uIHNlbGVjdG9yLgor
ICAgICAgICAgICAgQikgRml4IFVCRlgsIGludHJvZHVjZWQgaW4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjk4NCwgCisgICAgICAgICAgICAgICB0byBtYXRjaCBh
bGwgcGF0dGVybnMuIAorICAgICAgICAgICAgQykgRml4IGVycm9yIGNvbmRpdGlvbiBpbiBvbmUg
c3RyZW5ndGggcmVkdWN0aW9uIGludHJvZHVjZWQgCisgICAgICAgICAgICAgICBpbiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MTM4LgorCisgICAgICAgIFBhcnQg
QQorICAgICAgICBVbnNpZ25lZCBCaXRmaWVsZCBJbnNlcnQgaW4gWmVybyhVQkZJWiksIHN1cHBv
cnRlZCBieSBBUk02NCwgemVyb3MgdGhlIAorICAgICAgICBkZXN0aW5hdGlvbiByZWdpc3RlciBh
bmQgY29waWVzIGFueSBudW1iZXIgb2YgY29udGlndW91cyBiaXRzIGZyb20gYSAKKyAgICAgICAg
c291cmNlIHJlZ2lzdGVyIGludG8gYW55IHBvc2l0aW9uIGluIHRoZSBkZXN0aW5hdGlvbiByZWdp
c3Rlci4gVGhlIAorICAgICAgICBpbnN0cnVjdGlvbiBzZWxlY3RvciBjYW4gdXRpbGl6ZSB0aGlz
IHRvIGxvd2VyaW5nIGNlcnRhaW4gcGF0dGVybnMgaW4gCisgICAgICAgIEIzIElSIGJlZm9yZSBm
dXJ0aGVyIEFpciBvcHRpbWl6YXRpb24uIAorCisgICAgICAgIEdpdmVuIHRoZSBvcGVyYXRpb246
IHViZml6IGQsIG4sIGxzYiwgd2lkdGgKKworICAgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8g
ImQgPSAobiA8PCBsc2IpICYgKCgoMSA8PCB3aWR0aCkgLSAxKSA8PCBsc2IpIi4gCisgICAgICAg
IFNpbmNlIHdhc20gaW50cm9kdWNlcyBjb25zdGFudCBmb2xkaW5nLCB0aGVuIHRoZSBtYXRjaGVk
IHBhdHRlcm5zIHdvdWxkIGJlOgorICAgICAgICAxLjEgZCA9IChuIDw8IGxzYikgJiBtYXNrU2hp
ZnQKKyAgICAgICAgMS4yIGQgPSBtYXNrU2hpZnQgJiAobiA8PCBsc2IpCisKKyAgICAgICAgMi4x
IGQgPSAobiAmIG1hc2spIDw8IGxzYgorICAgICAgICAyLjIgZCA9IChtYXNrICYgbikgPDwgbHNi
CisKKyAgICAgICAgV2hlcmU6CisgICAgICAgICAgICBtYXNrU2hpZnQgPSBtYXNrIDw8IGxzYgor
ICAgICAgICAgICAgbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKworICAgICAgICBUbyBtYWtlIHRo
ZSBwYXR0ZXJuIG1hdGNoaW5nIGluIGluc3RydWN0aW9uIHNlbGVjdGlvbiBiZW5lZmljaWFsIHRv
IEpJVCwgdGhlc2UgCisgICAgICAgIGNvbnN0cmFpbnRzIHNob3VsZCBiZSBpbnRyb2R1Y2VkOgor
ICAgICAgICAgICAgMS4gMCA8PSBsc2IgPCBkYXRhc2l6ZQorICAgICAgICAgICAgMi4gMCA8IHdp
ZHRoIDwgZGF0YXNpemUKKyAgICAgICAgICAgIDMuIGxzYiArIHdpZHRoIDw9IGRhdGFzaXplCisK
KyAgICAgICAgQ2hvb3NlIChuICYgbWFzaykgPDwgbHNiIGFzIHRoZSBjYW5vbmljYWwgZm9ybSBh
bmQgaW50cm9kdWNlIGEgc3RyZW5ndGggcmVkdWN0aW9uLgorICAgICAgICBUdXJuIHRoaXM6IChu
IDw8IGxzYikgJiBtYXNrU2hpZnQKKyAgICAgICAgSW50byB0aGlzOiAobiAmIG1hc2spIDw8IGxz
YgorCisgICAgICAgIEdpdmVuIEIzIElSOgorICAgICAgICBJbnQgQDAgPSBBcmd1bWVudFJlZygl
eDApCisgICAgICAgIEludCBAMSA9IGxzYgorICAgICAgICBJbnQgQDIgPSAwYjAxMTAKKyAgICAg
ICAgSW50IEAzID0gU2hsKEAwLCBAMSkKKyAgICAgICAgSW50IEA0ID0gQml0QW5kKEAzLCBAMikg
IAorICAgICAgICBWb2lkQDUgPSBSZXR1cm4oQDQsIFRlcm1pbmFsKSAgICAgIAorCisgICAgICAg
IEJlZm9yZSBBZGRpbmcgVUJGSVogUGF0dGVybjoKKyAgICAgICAgLy8gT2xkIG9wdGltaXplZCBB
SVIKKyAgICAgICAgTHNoaWZ0ICAleDAsICQ2MiwgJXgwLCBAMworICAgICAgICBBbmQgIDBiMDEx
MCwgJXgwLCAleDAsIEA0CisgICAgICAgIFJldCAgICAgJXgwLCAgICAgICAgICAgQDUKKworICAg
ICAgICBBZnRlciBBZGRpbmcgVUJGSVogUGF0dGVybjoKKyAgICAgICAgLy8gTmV3IG9wdGltaXpl
ZCBBSVIKKyAgICAgICAgVWJmaXogJXgwLCBsc2IsIDIsICV4MCwgQDQKKyAgICAgICAgUmV0ICAg
JXgwLCAgICAgICAgICAgICAgQDUKKworICAgICAgICBQYXJ0IEIKKyAgICAgICAgRml4IFVCRlgg
dG8gbWF0Y2ggYm90aCBwYXR0ZXJuczoKKyAgICAgICAgZGVzdCA9IChzcmMgPj4gbHNiKSAmIG1h
c2sKKyAgICAgICAgZGVzdCA9IG1hc2sgJiAoc3JjID4+IGxzYikKKworICAgICAgICBXaGVyZToK
KyAgICAgICAgMS4gbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICAgICAgMi4gMCA8PSBsc2Ig
PCBkYXRhc2l6ZQorICAgICAgICAzLiAwIDwgd2lkdGggPCBkYXRhc2l6ZQorICAgICAgICA0LiBs
c2IgKyB3aWR0aCA8PSBkYXRhc2l6ZSAgICAgICAKKworICAgICAgICBQYXJ0IEMKKyAgICAgICAg
Rml4IG9uZSBCMyBzdHJlbmd0aCByZWR1Y3Rpb24uCisgICAgICAgIFR1cm4gdGhpczogKHNyYyA+
PiBzaGlmdEFtb3VudCkgJiBtYXNrCisgICAgICAgIEludG8gdGhpczogc3JjID4+IHNoaWZ0QW1v
dW50CisKKyAgICAgICAgV2l0aCB1cGRhdGVkIGNvbnN0cmFpbnRzOgorICAgICAgICAxLiBtYXNr
ID0gKDEgPDwgd2lkdGgpIC0gMQorICAgICAgICAyLiAwIDw9IHNoaWZ0QW1vdW50IDwgZGF0YXNp
emUKKyAgICAgICAgMy4gMCA8IHdpZHRoIDwgZGF0YXNpemUKKyAgICAgICAgNC4gc2hpZnRBbW91
bnQgKyB3aWR0aCA+PSBkYXRhc2l6ZQorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6dWJmaXozMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnViZml6NjQpOgorICAgICAgICAq
IGFzc2VtYmxlci90ZXN0bWFzbS5jcHA6CisgICAgICAgIChKU0M6OnRlc3RVYmZpejMyKToKKyAg
ICAgICAgKEpTQzo6dGVzdFViZml6NjQpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6
CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL3Rlc3Ri
My5oOgorICAgICAgICAqIGIzL3Rlc3RiM18yLmNwcDoKKyAgICAgICAgKHRlc3RVYmZ4MzJBcmdM
ZWZ0KToKKyAgICAgICAgKHRlc3RVYmZ4MzJBcmdSaWdodCk6CisgICAgICAgICh0ZXN0VWJmeDY0
QXJnTGVmdCk6CisgICAgICAgICh0ZXN0VWJmeDY0QXJnUmlnaHQpOgorICAgICAgICAodGVzdFVi
Zml6MzJBcmdMZWZ0KToKKyAgICAgICAgKHRlc3RVYmZpejMyQXJnUmlnaHQpOgorICAgICAgICAo
dGVzdFViZml6NjRBcmdMZWZ0KToKKyAgICAgICAgKHRlc3RVYmZpejY0QXJnUmlnaHQpOgorICAg
ICAgICAoYWRkQml0VGVzdHMpOgorICAgICAgICAodGVzdFViZngzMik6IERlbGV0ZWQuCisgICAg
ICAgICh0ZXN0VWJmeDMyUGF0dGVybk1hdGNoKTogRGVsZXRlZC4KKyAgICAgICAgKHRlc3RVYmZ4
NjQpOiBEZWxldGVkLgorICAgICAgICAodGVzdFViZng2NFBhdHRlcm5NYXRjaCk6IERlbGV0ZWQu
CisKIDIwMjEtMDYtMjEgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCBhIG5ldyBwYXR0ZXJuIHRvIGluc3RydWN0aW9uIHNlbGVjdG9yIHRvIHV0aWxp
emUgU01TVUJMIHN1cHBvcnRlZCBieSBBUk02NApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA1MzA4YThlMDA2NmU2YmU1ODI2YzU2
NmYzN2I2NzQxYjE0NzQyMGYzLi4wMDA5NmU5ODVjNTU3M2QxOGY1ODcxZDBhOWZmOTVjNWQ4OGFl
NDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTA2LTIxICBZaWppYSBIdWFuZyAgPHlpamlh
X2h1YW5nQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBuZXcgcGF0dGVybiB0byBpbnN0cnVj
dGlvbiBzZWxlY3RvciB0byB1dGlsaXplIFVCRklaIHN1cHBvcnRlZCBieSBBUk02NAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjA0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGZ1bmN0aW9ucyB0
byBjb3VudCB0aGUgY29uc2VjdXRpdmUgemVybyBiaXRzICh0cmFpbGluZykgb24gdGhlIAorICAg
ICAgICByaWdodCB3aXRoIG1vZHVsdXMgZGl2aXNpb24gYW5kIGxvb2t1cC4gUmVmZXJlbmNlOiBC
aXQgVHdpZGRsaW5nIEhhY2tzLgorCisgICAgICAgICogd3RmL01hdGhFeHRyYXMuaDoKKyAgICAg
ICAgKFdURjo6Y291bnRUcmFpbGluZ1plcm9zKToKKwogMjAyMS0wNi0yMSAgS2ltbW8gS2lubnVu
ZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIG1ha2VVbmlxdWUgY2Fubm90IGJl
IHVzZWQgdG8gaW5zdGFudGlhdGUgZnVuY3Rpb24tbG9jYWwgY2xhc3NlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRl
eCBjYTg3YTllMDRhM2YyZjU4OTE3YzNhNzRhMzY4MGMyYzI3MTBhYjhmLi4yNzM4YThlZjEyMDFi
NzFkZDg2NjE1YWE2MjRjOWZkZDg1M2QyOGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtNDAwLDYgKzQwMCwx
NiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnViZng8NjQ+KGRlc3QsIHNyYywgbHNi
Lm1fdmFsdWUsIHdpZHRoLm1fdmFsdWUpOwogICAgIH0KIAorICAgIHZvaWQgdWJmaXozMihSZWdp
c3RlcklEIHNyYywgVHJ1c3RlZEltbTMyIGxzYiwgVHJ1c3RlZEltbTMyIHdpZHRoLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci51YmZpejwzMj4oZGVzdCwgc3Jj
LCBsc2IubV92YWx1ZSwgd2lkdGgubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCB1YmZpejY0
KFJlZ2lzdGVySUQgc3JjLCBUcnVzdGVkSW1tMzIgbHNiLCBUcnVzdGVkSW1tMzIgd2lkdGgsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnViZml6PDY0PihkZXN0
LCBzcmMsIGxzYi5tX3ZhbHVlLCB3aWR0aC5tX3ZhbHVlKTsKKyAgICB9CisKICAgICB2b2lkIGFu
ZDY0KFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBSZWdpc3RlcklEIGRlc3QpCiAg
ICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRfPDY0PihkZXN0LCBzcmMxLCBzcmMyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKaW5kZXggNzBjMDlk
MmU1Njk5ZDgzZjc3OTA0Zjc4MWZkYmUyZmViZTNhZTUyZS4uNTgwNjJjZWU4NTFhNDc0ZDFkNDVj
OTgyZGIyZTNlNTk0Mzc3ZDBiYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci90ZXN0bWFzbS5jcHAKQEAgLTExMTMsNiArMTExMyw1NiBAQCB2b2lkIHRlc3RVYmZ4NjQoKQog
ICAgICAgICB9CiAgICAgfQogfQorCit2b2lkIHRlc3RVYmZpejMyKCkKK3sKKyAgICB1aW50MzJf
dCBzcmMgPSAweGZmZmZmZmZmOworICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwg
MzAsIDMxLCAzMiwgNjIsIDYzLCA2NCB9OworICAgIGZvciAoYXV0byBsc2IgOiBpbW1zKSB7Cisg
ICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGltbXMpIHsKKyAgICAgICAgICAgIGlmIChsc2IgPj0g
MCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lkdGggPCAzMikgeworICAgICAgICAgICAgICAgIGF1
dG8gdWJmaXozMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAg
ICAgIGppdC51YmZpejMyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGxzYiksIAorICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod2lkdGgpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBq
aXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgdWludDMyX3Qg
bWFzayA9ICgxVSA8PCB3aWR0aCkgLSAxVTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShpbnZv
a2U8dWludDMyX3Q+KHViZml6MzIsIHNyYyksIChzcmMgJiBtYXNrKSA8PCBsc2IpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RVYmZpejY0KCkKK3sKKyAg
ICB1aW50NjRfdCBzcmMgPSAweGZmZmZmZmZmZmZmZmZmZmY7CisgICAgVmVjdG9yPHVpbnQzMl90
PiBpbW1zID0geyAwLCAxLCAzMCwgMzEsIDMyLCA2MiwgNjMsIDY0IH07CisgICAgZm9yIChhdXRv
IGxzYiA6IGltbXMpIHsKKyAgICAgICAgZm9yIChhdXRvIHdpZHRoIDogaW1tcykgeworICAgICAg
ICAgICAgaWYgKGxzYiA+PSAwICYmIHdpZHRoID4gMCAmJiBsc2IgKyB3aWR0aCA8IDY0KSB7Cisg
ICAgICAgICAgICAgICAgYXV0byB1YmZpejY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYg
aml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgICAgICAgICAgICAgaml0LnViZml6NjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobHNi
KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih3
aWR0aCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICB1aW50NjRfdCBtYXNrID0gKDFVTEwgPDwgd2lkdGgpIC0gMVVMTDsKKyAgICAgICAg
ICAgICAgICBDSEVDS19FUShpbnZva2U8dWludDY0X3Q+KHViZml6NjQsIHNyYyksIChzcmMgJiBt
YXNrKSA8PCBsc2IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQogI2VuZGlm
CiAKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCkBAIC0zMjgwLDYg
KzMzMzAsOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpIFdURl9JR05PUkVTX1RIUkVB
RF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdE11bFN1YlNpZ25FeHRlbmQzMigpKTsKICAg
ICBSVU4odGVzdFViZngzMigpKTsKICAgICBSVU4odGVzdFViZng2NCgpKTsKKyAgICBSVU4odGVz
dFViZml6MzIoKSk7CisgICAgUlVOKHRlc3RVYmZpejY0KCkpOwogI2VuZGlmCiAKICNpZiBDUFUo
WDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IDMzODYzZWI4ZWM0ODcyNDIxNjVjZjEwODUwN2IwNjYw
ZTJhZTdmNGMuLmI4YjQzN2E4MjJkMTg3NDlhNGZiNDFiNjE1YzNhN2E0OTBiNGNiNGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0yNTk2LDcgKzI1OTYs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbHlMZWZ0ID0g
cmlnaHQtPmNoaWxkKDApOwogICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbHlSaWdo
dCA9IHJpZ2h0LT5jaGlsZCgxKTsKIAotICAgICAgICAgICAgICAgICAgICAvLyBTTVNVQkw6IGQg
PSBhIC0gU0V4dDMyKG4pICogIFNFeHQzMihtKQorICAgICAgICAgICAgICAgICAgICAvLyBTTVNV
Qkw6IGQgPSBhIC0gU0V4dDMyKG4pICogU0V4dDMyKG0pCiAgICAgICAgICAgICAgICAgICAgIGlm
IChtdWx0aXBseVN1Yk9wY29kZSA9PSBNdWx0aXBseVN1YjY0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiBpc1ZhbGlkRm9ybShNdWx0aXBseVN1YlNpZ25FeHRlbmQzMiwgQXJnOjpUbXAsIEFy
Zzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIHRyeVNFeHQzMiA9IFsmXSAoVmFsdWUqIHYpIHsKQEAgLTI3NDAsMjYgKzI3NDAsMzUgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIC8vIFVCRlggUGF0dGVybjogZGVzdCA9IChzcmMgPj4gbHNiKSAmICgoMSA8PCB3aWR0
aCkgLSAxKQotICAgICAgICAgICAgaWYgKGNhbkJlSW50ZXJuYWwobGVmdCkgJiYgbGVmdC0+b3Bj
b2RlKCkgPT0gWlNocikgeworICAgICAgICAgICAgLy8gVUJGWCBQYXR0ZXJuOiBkZXN0ID0gKHNy
YyA+PiBsc2IpICYgbWFzayB3aGVyZSBtYXNrID0gKDEgPDwgd2lkdGgpIC0gMQorICAgICAgICAg
ICAgYXV0byB0cnlBcHBlbmRVQkZYID0gWyZdIChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAt
PiBib29sIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+b3Bjb2RlKCkgIT0gWlNociB8fCAh
Y2FuQmVJbnRlcm5hbChsZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgICAgIFZhbHVlKiBzcmNWYWx1ZSA9IGxlZnQtPmNoaWxkKDApOwogICAgICAg
ICAgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IGxlZnQtPmNoaWxkKDEpOwotICAgICAgICAgICAg
ICAgIGlmICghaW1tKHNyY1ZhbHVlKSAmJiBpbW0obHNiVmFsdWUpICYmIHJpZ2h0LT5oYXNJbnQo
KSkgewotICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGxzYiA9IGxzYlZhbHVlLT5hc0ludCgp
OwotICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrID0gcmlnaHQtPmFzSW50KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgd2lkdGggPSBzdGF0aWNfY2FzdDx1aW50OF90Pigh
KG1hc2sgJiAobWFzayArIDEpKSkgKiBXVEY6OmJpdENvdW50KG1hc2spOwotICAgICAgICAgICAg
ICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVGb3JUeXBlKFViZngzMiwgVWJmeDY0
LCBzcmNWYWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9wY29kZQotICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgbHNiID49IDAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICYmIHdpZHRoID4gMAotICAgICAgICAgICAgICAgICAgICAgICAgJiYgbHNiICsgd2lkdGggPD0g
KDMyIDw8IChvcGNvZGUgPT0gVWJmeDY0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGlz
VmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OkltbSwgQXJnOjpUbXAp
KSAgewotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKHNyY1ZhbHVl
KSwgaW1tKGxzYlZhbHVlKSwgaW1tKHdpZHRoKSwgdG1wKG1fdmFsdWUpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gb3Bjb2Rl
Rm9yVHlwZShVYmZ4MzIsIFViZng2NCwgc3JjVmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpJbW0s
IEFyZzo6VG1wKSkgCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBpZiAoaW1tKHNyY1ZhbHVlKSB8fCAhaW1tKGxzYlZhbHVlKSB8fCBsc2JWYWx1ZS0+
YXNJbnQoKSA8IDAgfHwgIXJpZ2h0LT5oYXNJbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgdWludDY0X3QgbHNiID0gbHNiVmFsdWUtPmFz
SW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbWFzayA9IHJpZ2h0LT5hc0ludCgpOwor
ICAgICAgICAgICAgICAgIGlmICghbWFzayB8fCBtYXNrICYgKG1hc2sgKyAxKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHdpZHRo
ID0gV1RGOjpiaXRDb3VudChtYXNrKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBkYXRhc2l6
ZSA9IG9wY29kZSA9PSBVYmZ4MzIgPyAzMiA6IDY0OworICAgICAgICAgICAgICAgIGlmIChsc2Ig
KyB3aWR0aCA+IGRhdGFzaXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAoc3JjVmFsdWUpLCBpbW0obHNiVmFs
dWUpLCBpbW0od2lkdGgpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgICAgIGNvbW1pdElu
dGVybmFsKGxlZnQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fTsKKworICAgICAgICAgICAgaWYgKHRyeUFwcGVuZFVCRlgobGVmdCwgcmlnaHQpIHx8IHRyeUFw
cGVuZFVCRlgocmlnaHQsIGxlZnQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICAgICAgYXBwZW5kQmluT3A8QW5kMzIsIEFuZDY0LCBBbmREb3VibGUsIEFuZEZsb2F0LCBDb21t
dXRhdGl2ZT4obGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjgwMywxMiAr
MjgxMiw0OSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTaGw6IHsKLSAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQzMigxKSkgewotICAgICAgICAg
ICAgICAgIGFwcGVuZEJpbk9wPEFkZDMyLCBBZGQ2NCwgQWRkRG91YmxlLCBBZGRGbG9hdCwgQ29t
bXV0YXRpdmU+KG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAg
ICAgICBWYWx1ZSogbGVmdCA9IG1fdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgVmFsdWUq
IHJpZ2h0ID0gbV92YWx1ZS0+Y2hpbGQoMSk7CisKKyAgICAgICAgICAgIC8vIFVCRklaIFBhdHRl
cm46IGQgPSAobiAmIG1hc2spIDw8IGxzYiB3aGVyZSBtYXNrID0gKDEgPDwgd2lkdGgpIC0gMQor
ICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRVQkZaID0gWyZdICgpIC0+IGJvb2wgeworICAgICAg
ICAgICAgICAgIGlmIChsZWZ0LT5vcGNvZGUoKSAhPSBCaXRBbmQgfHwgIWNhbkJlSW50ZXJuYWwo
bGVmdCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBWYWx1ZSogYW5kTGVmdCA9IGxlZnQtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZhbHVl
KiBhbmRSaWdodCA9IGxlZnQtPmNoaWxkKDEpOworCisgICAgICAgICAgICAgICAgYXV0byB0cnlB
bmRWYWx1ZU1hc2sgPSBbJl0gKFZhbHVlKiBuVmFsdWUsIFZhbHVlKiBtYXNrVmFsdWUpIC0+IGJv
b2wgeworICAgICAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVGb3JU
eXBlKFViZml6MzIsIFViZml6NjQsIG5WYWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpJbW0s
IEFyZzo6VG1wKSkgCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpbW0oblZhbHVlKSB8fCAhbWFza1ZhbHVlLT5oYXNJbnQoKSB8
fCAhaW1tKHJpZ2h0KSB8fCByaWdodC0+YXNJbnQoKSA8IDApCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbHNiID0g
cmlnaHQtPmFzSW50KCk7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBtYXNr
VmFsdWUtPmFzSW50KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbWFzayB8fCBtYXNrICYg
KG1hc2sgKyAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgdWludDY0X3Qgd2lkdGggPSBXVEY6OmJpdENvdW50KG1hc2spOworICAg
ICAgICAgICAgICAgICAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IG9wY29kZSA9PSBVYmZpejMyID8g
MzIgOiA2NDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxzYiArIHdpZHRoID4gZGF0YXNpemUp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKG5WYWx1ZSksIGltbShyaWdodCksIGltbSh3aWR0aCks
IHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9Owor
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRyeUFuZFZhbHVlTWFzayhhbmRMZWZ0LCBhbmRSaWdo
dCkgfHwgdHJ5QW5kVmFsdWVNYXNrKGFuZFJpZ2h0LCBhbmRMZWZ0KTsKKyAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRVQkZaKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBpZiAocmlnaHQtPmlzSW50MzIoMSkpIHsKKyAgICAgICAgICAg
ICAgICBhcHBlbmRCaW5PcDxBZGQzMiwgQWRkNjQsIEFkZERvdWJsZSwgQWRkRmxvYXQsIENvbW11
dGF0aXZlPihsZWZ0LCBsZWZ0KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGFwcGVuZFNoaWZ0PExzaGlmdDMyLCBMc2hp
ZnQ2ND4obV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKKworICAgICAgICAg
ICAgYXBwZW5kU2hpZnQ8THNoaWZ0MzIsIExzaGlmdDY0PihsZWZ0LCByaWdodCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UmVkdWNlU3RyZW5ndGguY3BwCmluZGV4IDYyYjA4MTc1ZTlhNTBkMDIwNjM0YzljMmJhZDYxYzFk
YWIzYmMyOTUuLjNkZGFkZTc3MDhlYjRjN2I0MmM1N2JiYTA2MjljNmU5ZmRmNjU4ZmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKQEAgLTQyLDYg
KzQyLDcgQEAKICNpbmNsdWRlICJCM1ZhbHVlS2V5SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzVmFs
dWVJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xMDM3LDIyICsxMDM4LDU5IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKFpTaHIodmFsdWUs
IHNoaWZ0QW1vdW50KSwgbWFzaykKLSAgICAgICAgICAgIC8vIC0gc2hpZnRBbW91bnQgPj0gMCBh
bmQgbWFzayBpcyBjb250aWd1b3VzIG9uZXMgZnJvbSBMU0IsIGV4YW1wbGUgMGIwMTExMTExMQot
ICAgICAgICAgICAgLy8gLSBzaGlmdEFtb3VudCArIGJpdENvdW50KG1hc2spID09IG1heEJpdFdp
ZHRoCisgICAgICAgICAgICAvLyBDb25kaXRpb25zOgorICAgICAgICAgICAgLy8gMS4gbWFzayA9
ICgxIDw8IHdpZHRoKSAtIDEKKyAgICAgICAgICAgIC8vIDIuIDAgPD0gc2hpZnRBbW91bnQgPCBk
YXRhc2l6ZQorICAgICAgICAgICAgLy8gMy4gMCA8IHdpZHRoIDwgZGF0YXNpemUKKyAgICAgICAg
ICAgIC8vIDQuIHNoaWZ0QW1vdW50ICsgd2lkdGggPj0gZGF0YXNpemUKICAgICAgICAgICAgIC8v
IEludG8gdGhpczogWlNocih2YWx1ZSwgc2hpZnRBbW91bnQpCiAgICAgICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFpTaHIKICAgICAgICAgICAgICAgICAmJiBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludCgpCisgICAgICAgICAgICAgICAgJiYgbV92
YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludCgpID49IDAKICAgICAgICAgICAgICAgICAm
JiBtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICBpbnQ2NF90
IHNoaWZ0QW1vdW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludCgpOworICAg
ICAgICAgICAgICAgIHVpbnQ2NF90IHNoaWZ0QW1vdW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDEpLT5hc0ludCgpOwogICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBtX3ZhbHVl
LT5jaGlsZCgxKS0+YXNJbnQoKTsKLSAgICAgICAgICAgICAgICBib29sIGlzVmFsaWQgPSBtYXNr
ICYmICEobWFzayAmIChtYXNrICsgMSkpOwotICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1heEJp
dFdpZHRoID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLT50eXBlKCkgPT0gSW50NjQgPyA2
NCA6IDMyOwotICAgICAgICAgICAgICAgIGlmIChzaGlmdEFtb3VudCA+PSAwICYmIGlzVmFsaWQg
JiYgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNoaWZ0QW1vdW50ICsgV1RGOjpiaXRDb3VudChtYXNr
KSkgPT0gbWF4Qml0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBib29sIGlzVmFsaWRNYXNrID0g
bWFzayAmJiAhKG1hc2sgJiAobWFzayArIDEpKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBk
YXRhc2l6ZSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKS0+dHlwZSgpID09IEludDY0ID8g
NjQgOiAzMjsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCB3aWR0aCA9IFdURjo6Yml0Q291bnQo
bWFzayk7CisgICAgICAgICAgICAgICAgaWYgKHNoaWZ0QW1vdW50IDwgZGF0YXNpemUgJiYgaXNW
YWxpZE1hc2sgJiYgc2hpZnRBbW91bnQgKyB3aWR0aCA+PSBkYXRhc2l6ZSkgewogICAgICAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChTaGwodmFsdWUsIHNoaWZ0QW1vdW50
KSwgbWFza1NoaWZ0KQorICAgICAgICAgICAgLy8gQ29uZGl0aW9uczoKKyAgICAgICAgICAgIC8v
IDEuIG1hc2tTaGlmdCA9IG1hc2sgPDwgc2hpZnRBbW91bnQKKyAgICAgICAgICAgIC8vIDIuIG1h
c2sgPSAoMSA8PCB3aWR0aCkgLSAxCisgICAgICAgICAgICAvLyAzLiAwIDw9IHNoaWZ0QW1vdW50
IDwgZGF0YXNpemUKKyAgICAgICAgICAgIC8vIDQuIDAgPCB3aWR0aCA8IGRhdGFzaXplCisgICAg
ICAgICAgICAvLyA1LiBzaGlmdEFtb3VudCArIHdpZHRoIDw9IGRhdGFzaXplCisgICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IFNobChCaXRBbmQodmFsdWUsIG1hc2spLCBzaGlmdEFtb3VudCkKKyAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU2hsCisgICAgICAg
ICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQoKQorICAgICAg
ICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQoKSA+PSAwCisg
ICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7CisgICAgICAg
ICAgICAgICAgdWludDY0X3Qgc2hpZnRBbW91bnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MSktPmFzSW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbWFza1NoaWZ0ID0gbV92YWx1
ZS0+Y2hpbGQoMSktPmFzSW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbWFza1NoaWZ0
QW1vdW50ID0gV1RGOjpjb3VudFRyYWlsaW5nWmVyb3MobWFza1NoaWZ0KTsKKyAgICAgICAgICAg
ICAgICB1aW50NjRfdCBtYXNrID0gbWFza1NoaWZ0ID4+IG1hc2tTaGlmdEFtb3VudDsKKyAgICAg
ICAgICAgICAgICB1aW50NjRfdCB3aWR0aCA9IFdURjo6Yml0Q291bnQobWFzayk7CisgICAgICAg
ICAgICAgICAgdWludDY0X3QgZGF0YXNpemUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkt
PnR5cGUoKSA9PSBJbnQ2NCA/IDY0IDogMzI7CisgICAgICAgICAgICAgICAgYm9vbCBpc1ZhbGlk
U2hpZnRBbW91bnQgPSBzaGlmdEFtb3VudCA9PSBtYXNrU2hpZnRBbW91bnQgJiYgc2hpZnRBbW91
bnQgPCBkYXRhc2l6ZTsKKyAgICAgICAgICAgICAgICBib29sIGlzVmFsaWRNYXNrID0gbWFzayAm
JiAhKG1hc2sgJiAobWFzayArIDEpKSAmJiB3aWR0aCA8IGRhdGFzaXplOworICAgICAgICAgICAg
ICAgIGlmIChpc1ZhbGlkU2hpZnRBbW91bnQgJiYgaXNWYWxpZE1hc2sgJiYgc2hpZnRBbW91bnQg
KyB3aWR0aCA8PSBkYXRhc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbWFza1Zh
bHVlOworICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YXNpemUgPT0gMzIpCisgICAgICAgICAg
ICAgICAgICAgICAgICBtYXNrVmFsdWUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZh
bHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFzayk7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tWYWx1ZSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCBtYXNr
KTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGJpdEFuZCA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxWYWx1ZT4obV9pbmRleCwgQml0QW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDApLCBtYXNrVmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aE5ldzxWYWx1ZT4oU2hsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgYml0QW5kLCBtX3ZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
Qml0QW5kKHZhbHVlLCBhbGwtb25lcykKICAgICAgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUu
CiAgICAgICAgICAgICBpZiAoKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQ2NCAmJiBtX3ZhbHVlLT5j
aGlsZCgxKS0+aXNJbnQ2NChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rl
cyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKaW5kZXgg
OWEyZTc0Mjc2NTM3MGYzM2Q2ZjJkYzY2MjUxZTYxN2E1NGZkMjI5ZC4uY2UyMDFiYmFlNTFiYjQz
ODg5ZmE1MjgwNzMyZDhmN2JkMjkyYzlmZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBAIC0zNjYsNiArMzY2LDEyIEBAIGFybTY0OiBVYmZ4
MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogYXJtNjQ6IFViZng2NCBVOkc6NjQs
IFU6RzozMiwgVTpHOjMyLCBEOkc6NjQKICAgICBUbXAsIEltbSwgSW1tLCBUbXAKIAorYXJtNjQ6
IFViZml6MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgorICAgIFRtcCwgSW1tLCBJ
bW0sIFRtcAorCithcm02NDogVWJmaXo2NCBVOkc6NjQsIFU6RzozMiwgVTpHOjMyLCBEOkc6NjQK
KyAgICBUbXAsIEltbSwgSW1tLCBUbXAKKwogNjQ6IEFuZDY0IFU6Rzo2NCwgVTpHOjY0LCBEOkc6
NjQKICAgICBUbXAsIFRtcCwgVG1wCiAgICAgYXJtNjQ6IEJpdEltbTY0LCBUbXAsIFRtcApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IGI1ZTRjZjJjNzg4ODgyZjY1ZDNmMTJjNzMyZWUy
NGQ1YzY4MzNlZTQuLjRkM2QyYjY5Y2Y3OTc3ZjgyYmUyMmM4ZjYxYjllMTk0MTYzMmEyZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTQxNiwxMCArNDE2LDE4IEBAIGlubGluZSBk
b3VibGUgbW9kZWxMb2FkPGRvdWJsZSwgZG91YmxlPihkb3VibGUgdmFsdWUpIHsgcmV0dXJuIHZh
bHVlOyB9CiAKIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcik7CiB2b2lkIHRlc3RCaXRBbmRT
RXh0MzIoaW50MzJfdCB2YWx1ZSwgaW50NjRfdCBtYXNrKTsKLXZvaWQgdGVzdFViZngzMigpOwot
dm9pZCB0ZXN0VWJmeDMyUGF0dGVybk1hdGNoKCk7Ci12b2lkIHRlc3RVYmZ4NjQoKTsKLXZvaWQg
dGVzdFViZng2NFBhdHRlcm5NYXRjaCgpOwordm9pZCB0ZXN0VWJmeDMyU2hpZnRBbmQoKTsKK3Zv
aWQgdGVzdFViZngzMkFuZFNoaWZ0KCk7Cit2b2lkIHRlc3RVYmZ4NjRTaGlmdEFuZCgpOwordm9p
ZCB0ZXN0VWJmeDY0QW5kU2hpZnQoKTsKK3ZvaWQgdGVzdFViZml6MzJBbmRTaGlmdFZhbHVlTWFz
aygpOwordm9pZCB0ZXN0VWJmaXozMkFuZFNoaWZ0TWFza1ZhbHVlKCk7Cit2b2lkIHRlc3RVYmZp
ejMyU2hpZnRBbmQoKTsKK3ZvaWQgdGVzdFViZml6MzJBbmRTaGlmdCgpOwordm9pZCB0ZXN0VWJm
aXo2NEFuZFNoaWZ0VmFsdWVNYXNrKCk7Cit2b2lkIHRlc3RVYmZpejY0QW5kU2hpZnRNYXNrVmFs
dWUoKTsKK3ZvaWQgdGVzdFViZml6NjRTaGlmdEFuZCgpOwordm9pZCB0ZXN0VWJmaXo2NEFuZFNo
aWZ0KCk7CiB2b2lkIHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2szMigpOwogdm9p
ZCB0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrNjQoKTsKIHZvaWQgdGVzdEJhc2lj
U2VsZWN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcAppbmRleCAxZGRjNzFm
MTAyYWQ1YWFiYjcxOTIxMWRlNDc5ZjBkMWM4YTY5YTcxLi45NzQzNDU4YTJmODkxYzg1MjFiYmYx
YmYzM2Y3Y2Q0MjhkNGY0MzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzXzIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAK
QEAgLTI1ODEsMTIgKzI1ODEsMTUgQEAgdm9pZCB0ZXN0TmVnRmxvYXRXaXRoVXNlbGVzc0RvdWJs
ZUNvbnZlcnNpb24oZmxvYXQgYSkKICAgICBDSEVDSyhpc0lkZW50aWNhbChjb21waWxlQW5kUnVu
PGZsb2F0Pihwcm9jLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oYSkpLCAtYSkpOwogfQogCi12b2lk
IHRlc3RVYmZ4MzIoKQordm9pZCB0ZXN0VWJmeDMyU2hpZnRBbmQoKQogewotICAgIC8vIChzcmMg
Pj4gbHNiKSAmIG1hc2sKKyAgICAvLyBUZXN0IFBhdHRlcm46IChzcmMgPj4gbHNiKSAmIG1hc2sK
KyAgICAvLyB3aGVyZTogbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICBpZiAoSlNDOjpPcHRp
b25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOwogICAgIHVpbnQz
Ml90IHNyYyA9IDB4ZmZmZmZmZmY7Ci0gICAgVmVjdG9yPHVpbnQzMl90PiBsc2JzID0geyAwLCAx
NSwgMzAgfTsKLSAgICBWZWN0b3I8dWludDMyX3Q+IHdpZHRocyA9IHsgMzAsIDE2LCAxIH07Cisg
ICAgVmVjdG9yPHVpbnQzMl90PiBsc2JzID0geyAxLCAxNCwgMzAgfTsKKyAgICBWZWN0b3I8dWlu
dDMyX3Q+IHdpZHRocyA9IHsgMzAsIDE3LCAxIH07CiAKICAgICBhdXRvIHRlc3QgPSBbJl0gKHVp
bnQzMl90IGxzYiwgdWludDMyX3QgbWFzaykgLT4gdWludDMyX3QgewogICAgICAgICBQcm9jZWR1
cmUgcHJvYzsKQEAgLTI2MDIsOCArMjYwNSwxMSBAQCB2b2lkIHRlc3RVYmZ4MzIoKQogICAgICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCiAgICAgICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLAogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRB
bmQsIE9yaWdpbigpLCBsZWZ0LCBtYXNrVmFsdWUpKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVy
biBjb21waWxlQW5kUnVuPHVpbnQzMl90Pihwcm9jLCBzcmMpOworCisgICAgICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAg
ICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1YmZ4Iik7CisgICAgICAgIHJldHVybiBp
bnZva2U8dWludDMyX3Q+KCpjb2RlLCBzcmMpOwogICAgIH07CiAKICAgICBhdXRvIGdlbmVyYXRl
TWFzayA9IFsmXSAodWludDMyX3Qgd2lkdGgpIC0+IHVpbnQzMl90IHsKQEAgLTI2MTMsMTkgKzI2
MTksMjEgQEAgdm9pZCB0ZXN0VWJmeDMyKCkKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxz
YnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgdWludDMyX3QgbHNiID0gbHNicy5hdChpKTsKICAg
ICAgICAgdWludDMyX3QgbWFzayA9IGdlbmVyYXRlTWFzayh3aWR0aHMuYXQoaSkpOwotICAgICAg
ICB1aW50MzJfdCBsaHMgPSB0ZXN0KGxzYiwgbWFzayk7Ci0gICAgICAgIHVpbnQzMl90IHJocyA9
ICgoc3JjID4+IGxzYikgJiBtYXNrKTsKLSAgICAgICAgQ0hFQ0sobGhzID09IHJocyk7CisgICAg
ICAgIENIRUNLKHRlc3QobHNiLCBtYXNrKSA9PSAoKHNyYyA+PiBsc2IpICYgbWFzaykpOwogICAg
IH0KIH0KIAotdm9pZCB0ZXN0VWJmeDMyUGF0dGVybk1hdGNoKCkKK3ZvaWQgdGVzdFViZngzMkFu
ZFNoaWZ0KCkKIHsKLSAgICAvLyAoc3JjID4+IGxzYikgJiAoKDEgPDwgd2lkdGgpIC0gMSkKKyAg
ICAvLyBUZXN0IFBhdHRlcm46IG1hc2sgJiAoc3JjID4+IGxzYikKKyAgICAvLyBXaGVyZTogbWFz
ayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRM
ZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOwogICAgIHVpbnQzMl90IHNyYyA9IDB4ZmZmZmZm
ZmY7Ci0gICAgVmVjdG9yPHVpbnQzMl90PiBpbW1zID0geyAwLCAxLCAzMCwgMzEsIDMyLCA2Miwg
NjMsIDY0IH07CisgICAgVmVjdG9yPHVpbnQzMl90PiBsc2JzID0geyAxLCAxNCwgMzAgfTsKKyAg
ICBWZWN0b3I8dWludDMyX3Q+IHdpZHRocyA9IHsgMzAsIDE3LCAxIH07CiAKLSAgICBhdXRvIHRl
c3QgPSBbJl0gKHVpbnQzMl90IGxzYiwgdWludDMyX3Qgd2lkdGgpIC0+IHVpbnQzMl90IHsKKyAg
ICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IGxzYiwgdWludDMyX3QgbWFzaykgLT4gdWludDMy
X3QgewogICAgICAgICBQcm9jZWR1cmUgcHJvYzsKICAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKIApAQCAtMjYzMywzNiArMjY0MSwzOSBAQCB2b2lkIHRlc3RVYmZ4
MzJQYXR0ZXJuTWF0Y2goKQogICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CiAgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsc2IpOwotICAgICAg
ICBWYWx1ZSogd2lkdGhWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCB3aWR0aCk7Ci0gICAgICAgIFZhbHVlKiBjb25zdFZhbHVlQSA9IHJvb3QtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKTsKLSAgICAgICAgVmFsdWUq
IGNvbnN0VmFsdWVCID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIDEpOworICAgICAgICBWYWx1ZSogbWFza1ZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2spOwogCi0gICAgICAgIFZhbHVlKiBsZWZ0ID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgc3JjVmFsdWUsIGxz
YlZhbHVlKTsKLSAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
LSAgICAgICAgICAgIHByb2MsIFN1YiwgT3JpZ2luKCksIAotICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBjb25zdFZhbHVlQSwgd2lkdGhWYWx1
ZSksIGNvbnN0VmFsdWVCKTsKKyAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgc3JjVmFsdWUsIGxzYlZhbHVlKTsKICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAogICAgICAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwKLSAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0
QW5kLCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbWFza1ZhbHVlLCByaWdodCkpOwogCi0g
ICAgICAgIHJldHVybiBjb21waWxlQW5kUnVuPHVpbnQzMl90Pihwcm9jLCBzcmMpOworICAgICAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkK
KyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAidWJmeCIpOworICAgICAg
ICByZXR1cm4gaW52b2tlPHVpbnQzMl90PigqY29kZSwgc3JjKTsKICAgICB9OwogCi0gICAgZm9y
IChhdXRvIGxzYiA6IGltbXMpIHsKLSAgICAgICAgZm9yIChhdXRvIHdpZHRoIDogaW1tcykgewot
ICAgICAgICAgICAgdWludDMyX3QgbGhzID0gdGVzdChsc2IsIHdpZHRoKTsKLSAgICAgICAgICAg
IHVpbnQzMl90IHJocyA9ICgoc3JjID4+IGxzYikgJiAoKDFVIDw8IHdpZHRoKSAtIDFVKSk7Ci0g
ICAgICAgICAgICBDSEVDSyhsaHMgPT0gcmhzKTsKLSAgICAgICAgfQorICAgIGF1dG8gZ2VuZXJh
dGVNYXNrID0gWyZdICh1aW50MzJfdCB3aWR0aCkgLT4gdWludDMyX3QgeworICAgICAgICByZXR1
cm4gKDFVIDw8IHdpZHRoKSAtIDFVOworICAgIH07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxzYnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgbHNiID0gbHNicy5hdChp
KTsKKyAgICAgICAgdWludDMyX3QgbWFzayA9IGdlbmVyYXRlTWFzayh3aWR0aHMuYXQoaSkpOwor
ICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgbWFzaykgPT0gKG1hc2sgJiAoc3JjID4+IGxzYikpKTsK
ICAgICB9CiB9CiAKLXZvaWQgdGVzdFViZng2NCgpCit2b2lkIHRlc3RVYmZ4NjRTaGlmdEFuZCgp
CiB7Ci0gICAgLy8gKHNyYyA+PiBsc2IpICYgbWFzawotICAgIHVpbnQ2NF90IHNyYyA9IDB4ZmZm
ZmZmZmY7Ci0gICAgVmVjdG9yPHVpbnQ2NF90PiBsc2JzID0geyAwLCAzMSwgNjIgfTsKLSAgICBW
ZWN0b3I8dWludDY0X3Q+IHdpZHRocyA9IHsgNjMsIDMyLCAxIH07CisgICAgLy8gVGVzdCBQYXR0
ZXJuOiAoc3JjID4+IGxzYikgJiBtYXNrCisgICAgLy8gd2hlcmU6IG1hc2sgPSAoMSA8PCB3aWR0
aCkgLSAxCisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisg
ICAgICAgIHJldHVybjsKKyAgICB1aW50NjRfdCBzcmMgPSAweGZmZmZmZmZmZmZmZmZmZmY7Cisg
ICAgVmVjdG9yPHVpbnQ2NF90PiBsc2JzID0geyAxLCAzMCwgNjIgfTsKKyAgICBWZWN0b3I8dWlu
dDY0X3Q+IHdpZHRocyA9IHsgNjIsIDMzLCAxIH07CiAKICAgICBhdXRvIHRlc3QgPSBbJl0gKHVp
bnQ2NF90IGxzYiwgdWludDY0X3QgbWFzaykgLT4gdWludDY0X3QgewogICAgICAgICBQcm9jZWR1
cmUgcHJvYzsKQEAgLTI2NzcsNyArMjY4OCwxMCBAQCB2b2lkIHRlc3RVYmZ4NjQoKQogICAgICAg
ICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbGVmdCwgbWFza1ZhbHVlKSk7CiAKLSAg
ICAgICAgcmV0dXJuIGNvbXBpbGVBbmRSdW48dWludDY0X3Q+KHByb2MsIHNyYyk7CisgICAgICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKQor
ICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1YmZ4Iik7CisgICAgICAg
IHJldHVybiBpbnZva2U8dWludDY0X3Q+KCpjb2RlLCBzcmMpOwogICAgIH07CiAKICAgICBhdXRv
IGdlbmVyYXRlTWFzayA9IFsmXSAodWludDY0X3Qgd2lkdGgpIC0+IHVpbnQ2NF90IHsKQEAgLTI2
ODcsNDUgKzI3MDEsMzc5IEBAIHZvaWQgdGVzdFViZng2NCgpCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIHVpbnQ2NF90IGxzYiA9IGxzYnMu
YXQoaSk7CiAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBnZW5lcmF0ZU1hc2sod2lkdGhzLmF0KGkp
KTsKLSAgICAgICAgdWludDY0X3QgbGhzID0gdGVzdChsc2IsIG1hc2spOwotICAgICAgICB1aW50
NjRfdCByaHMgPSAoKHNyYyA+PiBsc2IpICYgbWFzayk7Ci0gICAgICAgIENIRUNLKGxocyA9PSBy
aHMpOworICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgbWFzaykgPT0gKChzcmMgPj4gbHNiKSAmIG1h
c2spKTsKICAgICB9CiB9CiAKLXZvaWQgdGVzdFViZng2NFBhdHRlcm5NYXRjaCgpCit2b2lkIHRl
c3RVYmZ4NjRBbmRTaGlmdCgpCiB7Ci0gICAgLy8gKHNyYyA+PiBsc2IpICYgKCgxIDw8IHdpZHRo
KSAtIDEpCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBtYXNrICYgKHNyYyA+PiBsc2IpCisgICAgLy8g
V2hlcmU6IG1hc2sgPSAoMSA8PCB3aWR0aCkgLSAxCisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVm
YXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKICAgICB1aW50NjRfdCBzcmMg
PSAweGZmZmZmZmZmZmZmZmZmZmY7Ci0gICAgVmVjdG9yPHVpbnQzMl90PiBpbW1zID0geyAwLCAx
LCAzMCwgMzEsIDMyLCA2MiwgNjMsIDY0IH07CisgICAgVmVjdG9yPHVpbnQ2NF90PiBsc2JzID0g
eyAxLCAzMCwgNjIgfTsKKyAgICBWZWN0b3I8dWludDY0X3Q+IHdpZHRocyA9IHsgNjIsIDMzLCAx
IH07CiAKLSAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IGxzYiwgdWludDMyX3Qgd2lkdGgp
IC0+IHVpbnQ2NF90IHsKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQ2NF90IGxzYiwgdWludDY0
X3QgbWFzaykgLT4gdWludDY0X3QgewogICAgICAgICBQcm9jZWR1cmUgcHJvYzsKICAgICAgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKIAogICAgICAgICBWYWx1ZSogc3Jj
VmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsc2IpOwotICAgICAgICBW
YWx1ZSogd2lkdGhWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCB3aWR0aCk7Ci0gICAgICAgIFZhbHVlKiBjb25zdFZhbHVlQSA9IHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKTsKLSAgICAgICAgVmFsdWUqIGNv
bnN0VmFsdWVCID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IDEpOworICAgICAgICBWYWx1ZSogbWFza1ZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2spOwogCi0gICAgICAgIFZhbHVlKiBsZWZ0ID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgc3JjVmFsdWUsIGxzYlZh
bHVlKTsKLSAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKLSAg
ICAgICAgICAgIHByb2MsIFN1YiwgT3JpZ2luKCksIAotICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBjb25zdFZhbHVlQSwgd2lkdGhWYWx1ZSks
IGNvbnN0VmFsdWVCKTsKKyAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgc3JjVmFsdWUsIGxzYlZhbHVlKTsKICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAogICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwKLSAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5k
LCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbWFza1ZhbHVlLCByaWdodCkpOwogCi0gICAg
ICAgIHJldHVybiBjb21waWxlQW5kUnVuPHVpbnQ2NF90Pihwcm9jLCBzcmMpOworICAgICAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAg
ICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAidWJmeCIpOworICAgICAgICBy
ZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgc3JjKTsKICAgICB9OwogCi0gICAgZm9yIChh
dXRvIGxzYiA6IGltbXMpIHsKLSAgICAgICAgZm9yIChhdXRvIHdpZHRoIDogaW1tcykgewotICAg
ICAgICAgICAgdWludDY0X3QgbGhzID0gdGVzdChsc2IsIHdpZHRoKTsKLSAgICAgICAgICAgIHVp
bnQ2NF90IHJocyA9ICgoc3JjID4+IGxzYikgJiAoKDFVTEwgPDwgd2lkdGgpIC0gMVVMTCkpOwot
ICAgICAgICAgICAgQ0hFQ0sobGhzID09IHJocyk7Ci0gICAgICAgIH0KKyAgICBhdXRvIGdlbmVy
YXRlTWFzayA9IFsmXSAodWludDY0X3Qgd2lkdGgpIC0+IHVpbnQ2NF90IHsKKyAgICAgICAgcmV0
dXJuICgxVUxMIDw8IHdpZHRoKSAtIDFVTEw7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbHNicy5zaXplKCk7ICsraSkgeworICAgICAgICB1aW50NjRfdCBsc2IgPSBsc2Jz
LmF0KGkpOworICAgICAgICB1aW50NjRfdCBtYXNrID0gZ2VuZXJhdGVNYXNrKHdpZHRocy5hdChp
KSk7CisgICAgICAgIENIRUNLKHRlc3QobHNiLCBtYXNrKSA9PSAobWFzayAmIChzcmMgPj4gbHNi
KSkpOworICAgIH0KK30KKwordm9pZCB0ZXN0VWJmaXozMkFuZFNoaWZ0VmFsdWVNYXNrKCkKK3sK
KyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSAobiAmIG1hc2spIDw8IGxzYiAKKyAgICAvLyBXaGVy
ZTogbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0
QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIHVpbnQzMl90IG4gPSAweGZm
ZmZmZmZmOworICAgIFZlY3Rvcjx1aW50MzJfdD4gbHNicyA9IHsgMSwgMTQsIDMwIH07CisgICAg
VmVjdG9yPHVpbnQzMl90PiB3aWR0aHMgPSB7IDMwLCAxNywgMSB9OworCisgICAgYXV0byB0ZXN0
ID0gWyZdICh1aW50MzJfdCBsc2IsIHVpbnQzMl90IG1hc2spIC0+IHVpbnQzMl90IHsKKyAgICAg
ICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIGxzYlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxzYik7CisgICAgICAgIFZhbHVlKiBtYXNrVmFs
dWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzayk7
CisKKyAgICAgICAgVmFsdWUqIGxlZnQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJp
dEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgbWFza1ZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgbGVm
dCwgbHNiVmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
KyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9u
KCpjb2RlLCAidWJmaXoiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUs
IG4pOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyYXRlTWFzayA9IFsmXSAodWludDMyX3Qgd2lk
dGgpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgcmV0dXJuICgxVSA8PCB3aWR0aCkgLSAxVTsKKyAg
ICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIHVpbnQzMl90IGxzYiA9IGxzYnMuYXQoaSk7CisgICAgICAgIHVpbnQzMl90IG1hc2sg
PSBnZW5lcmF0ZU1hc2sod2lkdGhzLmF0KGkpKTsKKyAgICAgICAgQ0hFQ0sodGVzdChsc2IsIG1h
c2spID09ICgobiAmIG1hc2spIDw8IGxzYikpOworICAgIH0KK30KKwordm9pZCB0ZXN0VWJmaXoz
MkFuZFNoaWZ0TWFza1ZhbHVlKCkKK3sKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSAobWFzayAm
IG4pIDw8IGxzYiAKKyAgICAvLyBXaGVyZTogbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICBp
ZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJu
OworICAgIHVpbnQzMl90IG4gPSAweGZmZmZmZmZmOworICAgIFZlY3Rvcjx1aW50MzJfdD4gbHNi
cyA9IHsgMSwgMTQsIDMwIH07CisgICAgVmVjdG9yPHVpbnQzMl90PiB3aWR0aHMgPSB7IDMwLCAx
NywgMSB9OworCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50MzJfdCBsc2IsIHVpbnQzMl90IG1h
c2spIC0+IHVpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2lu
KCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIGxzYlZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxzYik7
CisgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgbWFzayk7CisKKyAgICAgICAgVmFsdWUqIGxlZnQgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG1hc2tWYWx1ZSwgblZhbHVl
KTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgU2hsLCBPcmlnaW4oKSwgbGVmdCwgbHNiVmFsdWUpKTsKKworICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAg
ICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAidWJmaXoiKTsKKyAgICAgICAgcmV0dXJu
IGludm9rZTx1aW50MzJfdD4oKmNvZGUsIG4pOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyYXRl
TWFzayA9IFsmXSAodWludDMyX3Qgd2lkdGgpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgcmV0dXJu
ICgxVSA8PCB3aWR0aCkgLSAxVTsKKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsc2JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVpbnQzMl90IGxzYiA9IGxzYnMuYXQoaSk7
CisgICAgICAgIHVpbnQzMl90IG1hc2sgPSBnZW5lcmF0ZU1hc2sod2lkdGhzLmF0KGkpKTsKKyAg
ICAgICAgQ0hFQ0sodGVzdChsc2IsIG1hc2spID09ICgobWFzayAmIG4pIDw8IGxzYikpOworICAg
IH0KK30KKwordm9pZCB0ZXN0VWJmaXozMlNoaWZ0QW5kKCkKK3sKKyAgICAvLyBUZXN0IFBhdHRl
cm46IGQgPSAobiA8PCBsc2IpICYgbWFza1NoaWZ0CisgICAgLy8gV2hlcmU6IG1hc2tTaGlmdCA9
IG1hc2sgPDwgbHNiCisgICAgLy8gICAgICAgIG1hc2sgPSAoMSA8PCB3aWR0aCkgLSAxCisgICAg
aWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVy
bjsKKyAgICB1aW50MzJfdCBuID0gMHhmZmZmZmZmZjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGxz
YnMgPSB7IDEsIDE0LCAzMCB9OworICAgIFZlY3Rvcjx1aW50MzJfdD4gd2lkdGhzID0geyAzMCwg
MTcsIDEgfTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgbHNiLCB1aW50MzJfdCBt
YXNrU2hpZnQpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5W
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywg
T3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUq
IGxzYlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IGxzYik7CisgICAgICAgIFZhbHVlKiBtYXNrU2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNrU2hpZnQpOworCisgICAgICAgIFZhbHVl
KiBsZWZ0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBuVmFs
dWUsIGxzYlZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAg
ICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbGVmdCwgbWFza1NoaWZ0VmFsdWUp
KTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYg
KGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAidWJm
aXoiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIG4pOworICAgIH07
CisKKyAgICBhdXRvIGdlbmVyYXRlTWFza1NoaWZ0ID0gWyZdICh1aW50MzJfdCB3aWR0aCwgdWlu
dDMyX3QgbHNiKSAtPiB1aW50MzJfdCB7CisgICAgICAgIHJldHVybiAoKDFVIDw8IHdpZHRoKSAt
IDFVKSA8PCBsc2I7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbHNicy5z
aXplKCk7ICsraSkgeworICAgICAgICB1aW50MzJfdCBsc2IgPSBsc2JzLmF0KGkpOworICAgICAg
ICB1aW50MzJfdCBtYXNrU2hpZnQgPSBnZW5lcmF0ZU1hc2tTaGlmdCh3aWR0aHMuYXQoaSksIGxz
Yik7CisgICAgICAgIENIRUNLKHRlc3QobHNiLCBtYXNrU2hpZnQpID09ICgobiA8PCBsc2IpICYg
bWFza1NoaWZ0KSk7CisgICAgfQorfQorCit2b2lkIHRlc3RVYmZpejMyQW5kU2hpZnQoKQorewor
ICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG1hc2tTaGlmdCAmIChuIDw8IGxzYikKKyAgICAvLyBX
aGVyZTogbWFza1NoaWZ0ID0gbWFzayA8PCBsc2IKKyAgICAvLyAgICAgICAgbWFzayA9ICgxIDw8
IHdpZHRoKSAtIDEKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwg
MikKKyAgICAgICAgcmV0dXJuOworICAgIHVpbnQzMl90IG4gPSAweGZmZmZmZmZmOworICAgIFZl
Y3Rvcjx1aW50MzJfdD4gbHNicyA9IHsgMSwgMTQsIDMwIH07CisgICAgVmVjdG9yPHVpbnQzMl90
PiB3aWR0aHMgPSB7IDMwLCAxNywgMSB9OworCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50MzJf
dCBsc2IsIHVpbnQzMl90IG1hc2tTaGlmdCkgLT4gdWludDMyX3QgeworICAgICAgICBQcm9jZWR1
cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKwor
ICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OworICAgICAgICBWYWx1ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2tTaGlmdFZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2tTaGlmdCk7
CisKKyAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBT
aGwsIE9yaWdpbigpLCBuVmFsdWUsIGxzYlZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbWFz
a1NoaWZ0VmFsdWUsIHJpZ2h0KSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0
cnVjdGlvbigqY29kZSwgInViZml6Iik7CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDMyX3Q+
KCpjb2RlLCBuKTsKKyAgICB9OworCisgICAgYXV0byBnZW5lcmF0ZU1hc2tTaGlmdCA9IFsmXSAo
dWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGxzYikgLT4gdWludDMyX3QgeworICAgICAgICByZXR1
cm4gKCgxVSA8PCB3aWR0aCkgLSAxVSkgPDwgbHNiOworICAgIH07CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxzYnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgbHNiID0g
bHNicy5hdChpKTsKKyAgICAgICAgdWludDMyX3QgbWFza1NoaWZ0ID0gZ2VuZXJhdGVNYXNrU2hp
ZnQod2lkdGhzLmF0KGkpLCBsc2IpOworICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgbWFza1NoaWZ0
KSA9PSAobWFza1NoaWZ0ICYgKG4gPDwgbHNiKSkpOworICAgIH0KK30KKwordm9pZCB0ZXN0VWJm
aXo2NEFuZFNoaWZ0VmFsdWVNYXNrKCkKK3sKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSAobiAm
IG1hc2spIDw8IGxzYiAKKyAgICAvLyBXaGVyZTogbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAg
ICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0
dXJuOworICAgIHVpbnQ2NF90IG4gPSAweGZmZmZmZmZmZmZmZmZmZmY7CisgICAgVmVjdG9yPHVp
bnQ2NF90PiBsc2JzID0geyAxLCAzMCwgNjIgfTsKKyAgICBWZWN0b3I8dWludDY0X3Q+IHdpZHRo
cyA9IHsgNjIsIDMzLCAxIH07CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQ2NF90IGxzYiwg
dWludDY0X3QgbWFzaykgLT4gdWludDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1
ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSogbHNiVmFsdWUgPSBy
b290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbHNiKTsKKyAgICAg
ICAgVmFsdWUqIG1hc2tWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBtYXNrKTsKKworICAgICAgICBWYWx1ZSogbGVmdCA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBtYXNrVmFsdWUpOworICAg
ICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBT
aGwsIE9yaWdpbigpLCBsZWZ0LCBsc2JWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hl
Y2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1YmZpeiIpOworICAgICAgICByZXR1cm4gaW52b2tl
PHVpbnQ2NF90PigqY29kZSwgbik7CisgICAgfTsKKworICAgIGF1dG8gZ2VuZXJhdGVNYXNrID0g
WyZdICh1aW50NjRfdCB3aWR0aCkgLT4gdWludDY0X3QgeworICAgICAgICByZXR1cm4gKDFVTEwg
PDwgd2lkdGgpIC0gMVVMTDsKKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
c2JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVpbnQ2NF90IGxzYiA9IGxzYnMuYXQoaSk7Cisg
ICAgICAgIHVpbnQ2NF90IG1hc2sgPSBnZW5lcmF0ZU1hc2sod2lkdGhzLmF0KGkpKTsKKyAgICAg
ICAgQ0hFQ0sodGVzdChsc2IsIG1hc2spID09ICgobiAmIG1hc2spIDw8IGxzYikpOworICAgIH0K
K30KKwordm9pZCB0ZXN0VWJmaXo2NEFuZFNoaWZ0TWFza1ZhbHVlKCkKK3sKKyAgICAvLyBUZXN0
IFBhdHRlcm46IGQgPSAobWFzayAmIG4pIDw8IGxzYiAKKyAgICAvLyBXaGVyZTogbWFzayA9ICgx
IDw8IHdpZHRoKSAtIDEKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgp
IDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIHVpbnQ2NF90IG4gPSAweGZmZmZmZmZmZmZmZmZm
ZmY7CisgICAgVmVjdG9yPHVpbnQ2NF90PiBsc2JzID0geyAxLCAzMCwgNjIgfTsKKyAgICBWZWN0
b3I8dWludDY0X3Q+IHdpZHRocyA9IHsgNjIsIDMzLCAxIH07CisKKyAgICBhdXRvIHRlc3QgPSBb
Jl0gKHVpbnQ2NF90IGxzYiwgdWludDY0X3QgbWFzaykgLT4gdWludDY0X3QgeworICAgICAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2so
KTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBW
YWx1ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxD
b25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNrKTsKKworICAgICAgICBWYWx1ZSogbGVm
dCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbWFza1Zh
bHVlLCBuVmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAg
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBsZWZ0LCBsc2JWYWx1ZSkpOworCisgICAg
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgp
KQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1YmZpeiIpOworICAg
ICAgICByZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgbik7CisgICAgfTsKKworICAgIGF1
dG8gZ2VuZXJhdGVNYXNrID0gWyZdICh1aW50NjRfdCB3aWR0aCkgLT4gdWludDY0X3QgeworICAg
ICAgICByZXR1cm4gKDFVTEwgPDwgd2lkdGgpIC0gMVVMTDsKKyAgICB9OworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVpbnQ2NF90IGxz
YiA9IGxzYnMuYXQoaSk7CisgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBnZW5lcmF0ZU1hc2sod2lk
dGhzLmF0KGkpKTsKKyAgICAgICAgQ0hFQ0sodGVzdChsc2IsIG1hc2spID09ICgobWFzayAmIG4p
IDw8IGxzYikpOworICAgIH0KK30KKwordm9pZCB0ZXN0VWJmaXo2NFNoaWZ0QW5kKCkKK3sKKyAg
ICAvLyBUZXN0IFBhdHRlcm46IGQgPSAobiA8PCBsc2IpICYgbWFza1NoaWZ0CisgICAgLy8gV2hl
cmU6IG1hc2tTaGlmdCA9IG1hc2sgPDwgbHNiCisgICAgLy8gICAgICAgIG1hc2sgPSAoMSA8PCB3
aWR0aCkgLSAxCisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIp
CisgICAgICAgIHJldHVybjsKKyAgICB1aW50NjRfdCBuID0gMHhmZmZmZmZmZmZmZmZmZmZmOwor
ICAgIFZlY3Rvcjx1aW50NjRfdD4gbHNicyA9IHsgMSwgMzAsIDYyIH07CisgICAgVmVjdG9yPHVp
bnQ2NF90PiB3aWR0aHMgPSB7IDYyLCAzMywgMSB9OworCisgICAgYXV0byB0ZXN0ID0gWyZdICh1
aW50NjRfdCBsc2IsIHVpbnQ2NF90IG1hc2tTaGlmdCkgLT4gdWludDY0X3QgeworICAgICAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2so
KTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBW
YWx1ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2tTaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5k
TmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2tTaGlmdCk7CisKKyAgICAgICAg
VmFsdWUqIGxlZnQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCks
IG5WYWx1ZSwgbHNiVmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
CisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBsZWZ0LCBtYXNrU2hpZnRW
YWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAg
ICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUs
ICJ1YmZpeiIpOworICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgbik7Cisg
ICAgfTsKKworICAgIGF1dG8gZ2VuZXJhdGVNYXNrU2hpZnQgPSBbJl0gKHVpbnQ2NF90IHdpZHRo
LCB1aW50NjRfdCBsc2IpIC0+IHVpbnQ2NF90IHsKKyAgICAgICAgcmV0dXJuICgoMVVMTCA8PCB3
aWR0aCkgLSAxVUxMKSA8PCBsc2I7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbHNicy5zaXplKCk7ICsraSkgeworICAgICAgICB1aW50NjRfdCBsc2IgPSBsc2JzLmF0KGkp
OworICAgICAgICB1aW50NjRfdCBtYXNrU2hpZnQgPSBnZW5lcmF0ZU1hc2tTaGlmdCh3aWR0aHMu
YXQoaSksIGxzYik7CisgICAgICAgIENIRUNLKHRlc3QobHNiLCBtYXNrU2hpZnQpID09ICgobiA8
PCBsc2IpICYgbWFza1NoaWZ0KSk7CisgICAgfQorfQorCit2b2lkIHRlc3RVYmZpejY0QW5kU2hp
ZnQoKQoreworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG1hc2tTaGlmdCAmIChuIDw8IGxzYikK
KyAgICAvLyBXaGVyZTogbWFza1NoaWZ0ID0gbWFzayA8PCBsc2IKKyAgICAvLyAgICAgICAgbWFz
ayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRM
ZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIHVpbnQ2NF90IG4gPSAweGZmZmZmZmZm
ZmZmZmZmZmY7CisgICAgVmVjdG9yPHVpbnQ2NF90PiBsc2JzID0geyAxLCAzMCwgNjIgfTsKKyAg
ICBWZWN0b3I8dWludDY0X3Q+IHdpZHRocyA9IHsgNjIsIDMzLCAxIH07CisKKyAgICBhdXRvIHRl
c3QgPSBbJl0gKHVpbnQ2NF90IGxzYiwgdWludDY0X3QgbWFza1NoaWZ0KSAtPiB1aW50NjRfdCB7
CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CisgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBsc2IpOworICAgICAgICBWYWx1ZSogbWFza1NoaWZ0VmFsdWUgPSBy
b290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFza1NoaWZ0KTsK
KworICAgICAgICBWYWx1ZSogcmlnaHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNo
bCwgT3JpZ2luKCksIG5WYWx1ZSwgbHNiVmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdD
b250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBtYXNr
U2hpZnRWYWx1ZSwgcmlnaHQpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3Ry
dWN0aW9uKCpjb2RlLCAidWJmaXoiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50NjRfdD4o
KmNvZGUsIG4pOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyYXRlTWFza1NoaWZ0ID0gWyZdICh1
aW50NjRfdCB3aWR0aCwgdWludDY0X3QgbHNiKSAtPiB1aW50NjRfdCB7CisgICAgICAgIHJldHVy
biAoKDFVTEwgPDwgd2lkdGgpIC0gMVVMTCkgPDwgbHNiOworICAgIH07CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxzYnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdWludDY0X3QgbHNi
ID0gbHNicy5hdChpKTsKKyAgICAgICAgdWludDY0X3QgbWFza1NoaWZ0ID0gZ2VuZXJhdGVNYXNr
U2hpZnQod2lkdGhzLmF0KGkpLCBsc2IpOworICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgbWFza1No
aWZ0KSA9PSAobWFza1NoaWZ0ICYgKG4gPDwgbHNiKSkpOwogICAgIH0KIH0KIApAQCAtMjczNCw4
ICszMDgyLDggQEAgdm9pZCB0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrMzIoKQog
ICAgIC8vIFR1cm4gdGhpczogKHRtcCA+PiBpbW0pICYgbWFzayAKICAgICAvLyBJbnRvIHRoaXM6
IHRtcCA+PiBpbW0KICAgICB1aW50MzJfdCB0bXAgPSAweGZmZmZmZmZmOwotICAgIFZlY3Rvcjx1
aW50MzJfdD4gaW1tcyA9IHsgNCwgMjggfTsKLSAgICBWZWN0b3I8dWludDMyX3Q+IG1hc2tzID0g
eyAweDBmZmZmZmZmLCAweGYgfTsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGltbXMgPSB7IDQsIDI4
LCAzMSB9OworICAgIFZlY3Rvcjx1aW50MzJfdD4gbWFza3MgPSB7IDB4MGZmZmZmZmYsIDB4Ziwg
MHhmZmZmIH07CiAKICAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IGltbSwgdWludDMyX3Qg
bWFzaykgewogICAgICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTI3NTIsMTEgKzMxMDAsOCBAQCB2
b2lkIHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2szMigpCiAgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGxlZnRWYWx1ZSwg
cmlnaHRWYWx1ZSkpOwogCiAgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwot
ICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCiAgICAgICAg
ICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxzciIpOwotICAgICAgICAgICAgY2hl
Y2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24oKmNvZGUsICJhbmQiKTsKLSAgICAgICAgICAgIGNoZWNr
RG9lc05vdFVzZUluc3RydWN0aW9uKCpjb2RlLCAidWJmeCIpOwotICAgICAgICB9CiAgICAgICAg
IHVpbnQzMl90IGxocyA9IGludm9rZTx1aW50MzJfdD4oKmNvZGUsIHRtcCk7CiAgICAgICAgIHVp
bnQzMl90IHJocyA9IHRtcCA+PiBpbW07CiAgICAgICAgIENIRUNLKGxocyA9PSByaHMpOwpAQCAt
Mjc3MSw4ICszMTE2LDggQEAgdm9pZCB0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNr
NjQoKQogICAgIC8vIFR1cm4gdGhpczogKHRtcCA+PiBpbW0pICYgbWFzayAKICAgICAvLyBJbnRv
IHRoaXM6IHRtcCA+PiBpbW0KICAgICB1aW50NjRfdCB0bXAgPSAweGZmZmZmZmZmZmZmZmZmZmY7
Ci0gICAgVmVjdG9yPHVpbnQ2NF90PiBpbW1zID0geyA0LCA2MCB9OwotICAgIFZlY3Rvcjx1aW50
NjRfdD4gbWFza3MgPSB7IDB4MGZmZmZmZmZmZmZmZmZmZiwgMHhmIH07CisgICAgVmVjdG9yPHVp
bnQ2NF90PiBpbW1zID0geyA0LCA2MCwgNjMgfTsKKyAgICBWZWN0b3I8dWludDY0X3Q+IG1hc2tz
ID0geyAweDBmZmZmZmZmZmZmZmZmZmYsIDB4ZiwgMHhmZmZmIH07CiAKICAgICBhdXRvIHRlc3Qg
PSBbJl0gKHVpbnQ2NF90IGltbSwgdWludDY0X3QgbWFzaykgewogICAgICAgICBQcm9jZWR1cmUg
cHJvYzsKQEAgLTI3ODcsMTEgKzMxMzIsOCBAQCB2b2lkIHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdo
dEFyZ0ltbU1hc2s2NCgpCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEJpdEFuZCwgT3JpZ2luKCksIGxlZnRWYWx1ZSwgcmlnaHRWYWx1ZSkpOwogCiAgICAgICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwotICAgICAgICBpZiAoaXNBUk02NCgpKSB7Cisg
ICAgICAgIGlmIChpc0FSTTY0KCkpCiAgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigq
Y29kZSwgImxzciIpOwotICAgICAgICAgICAgY2hlY2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24oKmNv
ZGUsICJhbmQiKTsKLSAgICAgICAgICAgIGNoZWNrRG9lc05vdFVzZUluc3RydWN0aW9uKCpjb2Rl
LCAidWJmeCIpOwotICAgICAgICB9CiAgICAgICAgIHVpbnQ2NF90IGxocyA9IGludm9rZTx1aW50
NjRfdD4oKmNvZGUsIHRtcCk7CiAgICAgICAgIHVpbnQ2NF90IHJocyA9IHRtcCA+PiBpbW07CiAg
ICAgICAgIENIRUNLKGxocyA9PSByaHMpOwpAQCAtMzYxNSwxMCArMzk1NywxOCBAQCBzdGF0aWMg
dm9pZCB0ZXN0Qml0T3JJbW1BcmczMihpbnQgYSwgaW50IGIpCiAKIHZvaWQgYWRkQml0VGVzdHMo
Y29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRh
c2tzKQogewotICAgIFJVTih0ZXN0VWJmeDMyKCkpOwotICAgIFJVTih0ZXN0VWJmeDMyUGF0dGVy
bk1hdGNoKCkpOwotICAgIFJVTih0ZXN0VWJmeDY0KCkpOwotICAgIFJVTih0ZXN0VWJmeDY0UGF0
dGVybk1hdGNoKCkpOworICAgIFJVTih0ZXN0VWJmeDMyU2hpZnRBbmQoKSk7CisgICAgUlVOKHRl
c3RVYmZ4MzJBbmRTaGlmdCgpKTsKKyAgICBSVU4odGVzdFViZng2NFNoaWZ0QW5kKCkpOworICAg
IFJVTih0ZXN0VWJmeDY0QW5kU2hpZnQoKSk7CisgICAgUlVOKHRlc3RVYmZpejMyQW5kU2hpZnRW
YWx1ZU1hc2soKSk7CisgICAgUlVOKHRlc3RVYmZpejMyQW5kU2hpZnRNYXNrVmFsdWUoKSk7Cisg
ICAgUlVOKHRlc3RVYmZpejMyU2hpZnRBbmQoKSk7CisgICAgUlVOKHRlc3RVYmZpejMyQW5kU2hp
ZnQoKSk7CisgICAgUlVOKHRlc3RVYmZpejY0QW5kU2hpZnRWYWx1ZU1hc2soKSk7CisgICAgUlVO
KHRlc3RVYmZpejY0QW5kU2hpZnRNYXNrVmFsdWUoKSk7CisgICAgUlVOKHRlc3RVYmZpejY0U2hp
ZnRBbmQoKSk7CisgICAgUlVOKHRlc3RVYmZpejY0QW5kU2hpZnQoKSk7CiAgICAgUlVOKHRlc3RC
aXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2szMigpKTsKICAgICBSVU4odGVzdEJpdEFuZFpl
cm9TaGlmdFJpZ2h0QXJnSW1tTWFzazY0KCkpOwogICAgIFJVTih0ZXN0Qml0QW5kQXJncyg0Mywg
NDMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaCBiL1NvdXJjZS9X
VEYvd3RmL01hdGhFeHRyYXMuaAppbmRleCAwMWZlMjM2YTIxOWU3MDE5MTlkMjJhZjBlN2Y0M2Nh
YTA1N2I5YjljLi43YWRiODc0MmE4ZGU5ODEzNzIzZTU5MjUzMmY0YWEzMDE0NjQ4OWVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKKysrIGIvU291cmNlL1dURi93dGYv
TWF0aEV4dHJhcy5oCkBAIC03MjgsNiArNzI4LDI4IEBAIGNvbnN0ZXhwciB1bnNpZ25lZCBnZXRN
U0JTZXRDb25zdGV4cHIoVCB0KQogICAgIHJldHVybiBiaXRTaXplIC0gMSAtIGNsekNvbnN0ZXhw
cih0KTsKIH0KIAoraW5saW5lIHNpemVfdCBjb3VudFRyYWlsaW5nWmVyb3ModWludDMyX3QgdikK
K3sKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgTW9kMzdCaXRQb3NpdGlvbltdID0geworICAg
ICAgICAzMiwgMCwgMSwgMjYsIDIsIDIzLCAyNywgMCwgMywgMTYsIDI0LCAzMCwgMjgsIDExLCAw
LCAxMywKKyAgICAgICAgNCwgNywgMTcsIDAsIDI1LCAyMiwgMzEsIDE1LCAyOSwgMTAsIDEyLCA2
LCAwLCAyMSwgMTQsIDksCisgICAgICAgIDUsIDIwLCA4LCAxOSwgMTgKKyAgICB9OworICAgIHJl
dHVybiBNb2QzN0JpdFBvc2l0aW9uWygoMSArIH52KSAmIHYpICUgMzddOworfQorCitpbmxpbmUg
c2l6ZV90IGNvdW50VHJhaWxpbmdaZXJvcyh1aW50NjRfdCB2KQoreworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBNb2Q2N1Bvc2l0aW9uW10gPSB7CisgICAgICAgIDY0LCAwLCAxLCAzOSwgMiwg
MTUsIDQwLCAyMywgMywgMTIsIDE2LCA1OSwgNDEsIDE5LCAyNCwgNTQsCisgICAgICAgIDQsIDY0
LCAxMywgMTAsIDE3LCA2MiwgNjAsIDI4LCA0MiwgMzAsIDIwLCA1MSwgMjUsIDQ0LCA1NSwKKyAg
ICAgICAgNDcsIDUsIDMyLCA2NSwgMzgsIDE0LCAyMiwgMTEsIDU4LCAxOCwgNTMsIDYzLCA5LCA2
MSwgMjcsCisgICAgICAgIDI5LCA1MCwgNDMsIDQ2LCAzMSwgMzcsIDIxLCA1NywgNTIsIDgsIDI2
LCA0OSwgNDUsIDM2LCA1NiwKKyAgICAgICAgNywgNDgsIDM1LCA2LCAzNCwgMzMsIDAKKyAgICB9
OworICAgIHJldHVybiBNb2Q2N1Bvc2l0aW9uWygoMSArIH52KSAmIHYpICUgNjddOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpzaHVmZmxlVmVjdG9yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432089</attachid>
            <date>2021-06-23 14:00:20 -0700</date>
            <delta_ts>2021-06-23 15:09:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227204-20210623160019.patch</filename>
            <type>text/plain</type>
            <size>44251</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MDc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
OTNjMGNmMWI2ZTcwMGVkMDQ1ZjkyZWU5ZDI3MmExODg0MTI4OGM1Li5iZjVhNmE4MDIwOWE3YjJh
NjRmNzQ1NjYyNzI0YjZjMzFlYmEyYjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTMgQEAKKzIwMjEtMDYtMjEgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBhIG5ldyBwYXR0ZXJuIHRvIGluc3RydWN0aW9uIHNlbGVjdG9y
IHRvIHV0aWxpemUgVUJGSVogc3VwcG9ydGVkIGJ5IEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMDQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGluY2x1ZGVzIHRocmVlIHBh
cnRzOgorICAgICAgICAgICAgQSkgQWRkIFVCRklaIHRvIGluc3RydWN0aW9uIHNlbGVjdG9yLgor
ICAgICAgICAgICAgQikgRml4IFVCRlgsIGludHJvZHVjZWQgaW4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjk4NCwgCisgICAgICAgICAgICAgICB0byBtYXRjaCBh
bGwgcGF0dGVybnMuIAorICAgICAgICAgICAgQykgRml4IGVycm9yIGNvbmRpdGlvbiBpbiBvbmUg
c3RyZW5ndGggcmVkdWN0aW9uIGludHJvZHVjZWQgCisgICAgICAgICAgICAgICBpbiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MTM4LgorCisgICAgICAgIFBhcnQg
QQorICAgICAgICBVbnNpZ25lZCBCaXRmaWVsZCBJbnNlcnQgaW4gWmVybyhVQkZJWiksIHN1cHBv
cnRlZCBieSBBUk02NCwgemVyb3MgdGhlIAorICAgICAgICBkZXN0aW5hdGlvbiByZWdpc3RlciBh
bmQgY29waWVzIGFueSBudW1iZXIgb2YgY29udGlndW91cyBiaXRzIGZyb20gYSAKKyAgICAgICAg
c291cmNlIHJlZ2lzdGVyIGludG8gYW55IHBvc2l0aW9uIGluIHRoZSBkZXN0aW5hdGlvbiByZWdp
c3Rlci4gVGhlIAorICAgICAgICBpbnN0cnVjdGlvbiBzZWxlY3RvciBjYW4gdXRpbGl6ZSB0aGlz
IHRvIGxvd2VyaW5nIGNlcnRhaW4gcGF0dGVybnMgaW4gCisgICAgICAgIEIzIElSIGJlZm9yZSBm
dXJ0aGVyIEFpciBvcHRpbWl6YXRpb24uIAorCisgICAgICAgIEdpdmVuIHRoZSBvcGVyYXRpb246
IHViZml6IGQsIG4sIGxzYiwgd2lkdGgKKworICAgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8g
ImQgPSAobiA8PCBsc2IpICYgKCgoMSA8PCB3aWR0aCkgLSAxKSA8PCBsc2IpIi4gCisgICAgICAg
IFNpbmNlIHdhc20gaW50cm9kdWNlcyBjb25zdGFudCBmb2xkaW5nLCB0aGVuIHRoZSBtYXRjaGVk
IHBhdHRlcm5zIHdvdWxkIGJlOgorICAgICAgICAxLjEgZCA9IChuIDw8IGxzYikgJiBtYXNrU2hp
ZnQKKyAgICAgICAgMS4yIGQgPSBtYXNrU2hpZnQgJiAobiA8PCBsc2IpCisKKyAgICAgICAgMi4x
IGQgPSAobiAmIG1hc2spIDw8IGxzYgorICAgICAgICAyLjIgZCA9IChtYXNrICYgbikgPDwgbHNi
CisKKyAgICAgICAgV2hlcmU6CisgICAgICAgICAgICBtYXNrU2hpZnQgPSBtYXNrIDw8IGxzYgor
ICAgICAgICAgICAgbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKworICAgICAgICBUbyBtYWtlIHRo
ZSBwYXR0ZXJuIG1hdGNoaW5nIGluIGluc3RydWN0aW9uIHNlbGVjdGlvbiBiZW5lZmljaWFsIHRv
IEpJVCwgdGhlc2UgCisgICAgICAgIGNvbnN0cmFpbnRzIHNob3VsZCBiZSBpbnRyb2R1Y2VkOgor
ICAgICAgICAgICAgMS4gMCA8PSBsc2IgPCBkYXRhc2l6ZQorICAgICAgICAgICAgMi4gMCA8IHdp
ZHRoIDwgZGF0YXNpemUKKyAgICAgICAgICAgIDMuIGxzYiArIHdpZHRoIDw9IGRhdGFzaXplCisK
KyAgICAgICAgQ2hvb3NlIChuICYgbWFzaykgPDwgbHNiIGFzIHRoZSBjYW5vbmljYWwgZm9ybSBh
bmQgaW50cm9kdWNlIGEgc3RyZW5ndGggcmVkdWN0aW9uLgorICAgICAgICBUdXJuIHRoaXM6IChu
IDw8IGxzYikgJiBtYXNrU2hpZnQKKyAgICAgICAgSW50byB0aGlzOiAobiAmIG1hc2spIDw8IGxz
YgorCisgICAgICAgIEdpdmVuIEIzIElSOgorICAgICAgICBJbnQgQDAgPSBBcmd1bWVudFJlZygl
eDApCisgICAgICAgIEludCBAMSA9IGxzYgorICAgICAgICBJbnQgQDIgPSAwYjAxMTAKKyAgICAg
ICAgSW50IEAzID0gU2hsKEAwLCBAMSkKKyAgICAgICAgSW50IEA0ID0gQml0QW5kKEAzLCBAMikg
IAorICAgICAgICBWb2lkQDUgPSBSZXR1cm4oQDQsIFRlcm1pbmFsKSAgICAgIAorCisgICAgICAg
IEJlZm9yZSBBZGRpbmcgVUJGSVogUGF0dGVybjoKKyAgICAgICAgLy8gT2xkIG9wdGltaXplZCBB
SVIKKyAgICAgICAgTHNoaWZ0ICAleDAsICQ2MiwgJXgwLCBAMworICAgICAgICBBbmQgIDBiMDEx
MCwgJXgwLCAleDAsIEA0CisgICAgICAgIFJldCAgICAgJXgwLCAgICAgICAgICAgQDUKKworICAg
ICAgICBBZnRlciBBZGRpbmcgVUJGSVogUGF0dGVybjoKKyAgICAgICAgLy8gTmV3IG9wdGltaXpl
ZCBBSVIKKyAgICAgICAgVWJmaXogJXgwLCBsc2IsIDIsICV4MCwgQDQKKyAgICAgICAgUmV0ICAg
JXgwLCAgICAgICAgICAgICAgQDUKKworICAgICAgICBQYXJ0IEIKKyAgICAgICAgRml4IFVCRlgg
dG8gbWF0Y2ggYm90aCBwYXR0ZXJuczoKKyAgICAgICAgZGVzdCA9IChzcmMgPj4gbHNiKSAmIG1h
c2sKKyAgICAgICAgZGVzdCA9IG1hc2sgJiAoc3JjID4+IGxzYikKKworICAgICAgICBXaGVyZToK
KyAgICAgICAgMS4gbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICAgICAgMi4gMCA8PSBsc2Ig
PCBkYXRhc2l6ZQorICAgICAgICAzLiAwIDwgd2lkdGggPCBkYXRhc2l6ZQorICAgICAgICA0LiBs
c2IgKyB3aWR0aCA8PSBkYXRhc2l6ZSAgICAgICAKKworICAgICAgICBQYXJ0IEMKKyAgICAgICAg
Rml4IG9uZSBCMyBzdHJlbmd0aCByZWR1Y3Rpb24uCisgICAgICAgIFR1cm4gdGhpczogKHNyYyA+
PiBzaGlmdEFtb3VudCkgJiBtYXNrCisgICAgICAgIEludG8gdGhpczogc3JjID4+IHNoaWZ0QW1v
dW50CisKKyAgICAgICAgV2l0aCB1cGRhdGVkIGNvbnN0cmFpbnRzOgorICAgICAgICAxLiBtYXNr
ID0gKDEgPDwgd2lkdGgpIC0gMQorICAgICAgICAyLiAwIDw9IHNoaWZ0QW1vdW50IDwgZGF0YXNp
emUKKyAgICAgICAgMy4gMCA8IHdpZHRoIDwgZGF0YXNpemUKKyAgICAgICAgNC4gc2hpZnRBbW91
bnQgKyB3aWR0aCA+PSBkYXRhc2l6ZQorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6dWJmaXozMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnViZml6NjQpOgorICAgICAgICAq
IGFzc2VtYmxlci90ZXN0bWFzbS5jcHA6CisgICAgICAgIChKU0M6OnRlc3RVYmZpejMyKToKKyAg
ICAgICAgKEpTQzo6dGVzdFViZml6NjQpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6
CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL3Rlc3Ri
My5oOgorICAgICAgICAqIGIzL3Rlc3RiM18yLmNwcDoKKyAgICAgICAgKHRlc3RVYmZ4MzJBcmdM
ZWZ0KToKKyAgICAgICAgKHRlc3RVYmZ4MzJBcmdSaWdodCk6CisgICAgICAgICh0ZXN0VWJmeDY0
QXJnTGVmdCk6CisgICAgICAgICh0ZXN0VWJmeDY0QXJnUmlnaHQpOgorICAgICAgICAodGVzdFVi
Zml6MzJBcmdMZWZ0KToKKyAgICAgICAgKHRlc3RVYmZpejMyQXJnUmlnaHQpOgorICAgICAgICAo
dGVzdFViZml6NjRBcmdMZWZ0KToKKyAgICAgICAgKHRlc3RVYmZpejY0QXJnUmlnaHQpOgorICAg
ICAgICAoYWRkQml0VGVzdHMpOgorICAgICAgICAodGVzdFViZngzMik6IERlbGV0ZWQuCisgICAg
ICAgICh0ZXN0VWJmeDMyUGF0dGVybk1hdGNoKTogRGVsZXRlZC4KKyAgICAgICAgKHRlc3RVYmZ4
NjQpOiBEZWxldGVkLgorICAgICAgICAodGVzdFViZng2NFBhdHRlcm5NYXRjaCk6IERlbGV0ZWQu
CisKIDIwMjEtMDYtMjEgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCBhIG5ldyBwYXR0ZXJuIHRvIGluc3RydWN0aW9uIHNlbGVjdG9yIHRvIHV0aWxp
emUgU01TVUJMIHN1cHBvcnRlZCBieSBBUk02NApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA1MzA4YThlMDA2NmU2YmU1ODI2YzU2
NmYzN2I2NzQxYjE0NzQyMGYzLi4wMDA5NmU5ODVjNTU3M2QxOGY1ODcxZDBhOWZmOTVjNWQ4OGFl
NDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTA2LTIxICBZaWppYSBIdWFuZyAgPHlpamlh
X2h1YW5nQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBuZXcgcGF0dGVybiB0byBpbnN0cnVj
dGlvbiBzZWxlY3RvciB0byB1dGlsaXplIFVCRklaIHN1cHBvcnRlZCBieSBBUk02NAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjA0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGZ1bmN0aW9ucyB0
byBjb3VudCB0aGUgY29uc2VjdXRpdmUgemVybyBiaXRzICh0cmFpbGluZykgb24gdGhlIAorICAg
ICAgICByaWdodCB3aXRoIG1vZHVsdXMgZGl2aXNpb24gYW5kIGxvb2t1cC4gUmVmZXJlbmNlOiBC
aXQgVHdpZGRsaW5nIEhhY2tzLgorCisgICAgICAgICogd3RmL01hdGhFeHRyYXMuaDoKKyAgICAg
ICAgKFdURjo6Y291bnRUcmFpbGluZ1plcm9zKToKKwogMjAyMS0wNi0yMSAgS2ltbW8gS2lubnVu
ZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIG1ha2VVbmlxdWUgY2Fubm90IGJl
IHVzZWQgdG8gaW5zdGFudGlhdGUgZnVuY3Rpb24tbG9jYWwgY2xhc3NlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRl
eCBjYTg3YTllMDRhM2YyZjU4OTE3YzNhNzRhMzY4MGMyYzI3MTBhYjhmLi4yNzM4YThlZjEyMDFi
NzFkZDg2NjE1YWE2MjRjOWZkZDg1M2QyOGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtNDAwLDYgKzQwMCwx
NiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnViZng8NjQ+KGRlc3QsIHNyYywgbHNi
Lm1fdmFsdWUsIHdpZHRoLm1fdmFsdWUpOwogICAgIH0KIAorICAgIHZvaWQgdWJmaXozMihSZWdp
c3RlcklEIHNyYywgVHJ1c3RlZEltbTMyIGxzYiwgVHJ1c3RlZEltbTMyIHdpZHRoLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci51YmZpejwzMj4oZGVzdCwgc3Jj
LCBsc2IubV92YWx1ZSwgd2lkdGgubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCB1YmZpejY0
KFJlZ2lzdGVySUQgc3JjLCBUcnVzdGVkSW1tMzIgbHNiLCBUcnVzdGVkSW1tMzIgd2lkdGgsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnViZml6PDY0PihkZXN0
LCBzcmMsIGxzYi5tX3ZhbHVlLCB3aWR0aC5tX3ZhbHVlKTsKKyAgICB9CisKICAgICB2b2lkIGFu
ZDY0KFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBSZWdpc3RlcklEIGRlc3QpCiAg
ICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRfPDY0PihkZXN0LCBzcmMxLCBzcmMyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKaW5kZXggNzBjMDlk
MmU1Njk5ZDgzZjc3OTA0Zjc4MWZkYmUyZmViZTNhZTUyZS4uNTgwNjJjZWU4NTFhNDc0ZDFkNDVj
OTgyZGIyZTNlNTk0Mzc3ZDBiYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci90ZXN0bWFzbS5jcHAKQEAgLTExMTMsNiArMTExMyw1NiBAQCB2b2lkIHRlc3RVYmZ4NjQoKQog
ICAgICAgICB9CiAgICAgfQogfQorCit2b2lkIHRlc3RVYmZpejMyKCkKK3sKKyAgICB1aW50MzJf
dCBzcmMgPSAweGZmZmZmZmZmOworICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwg
MzAsIDMxLCAzMiwgNjIsIDYzLCA2NCB9OworICAgIGZvciAoYXV0byBsc2IgOiBpbW1zKSB7Cisg
ICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGltbXMpIHsKKyAgICAgICAgICAgIGlmIChsc2IgPj0g
MCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lkdGggPCAzMikgeworICAgICAgICAgICAgICAgIGF1
dG8gdWJmaXozMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAg
ICAgIGppdC51YmZpejMyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGxzYiksIAorICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod2lkdGgpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBq
aXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgdWludDMyX3Qg
bWFzayA9ICgxVSA8PCB3aWR0aCkgLSAxVTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShpbnZv
a2U8dWludDMyX3Q+KHViZml6MzIsIHNyYyksIChzcmMgJiBtYXNrKSA8PCBsc2IpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RVYmZpejY0KCkKK3sKKyAg
ICB1aW50NjRfdCBzcmMgPSAweGZmZmZmZmZmZmZmZmZmZmY7CisgICAgVmVjdG9yPHVpbnQzMl90
PiBpbW1zID0geyAwLCAxLCAzMCwgMzEsIDMyLCA2MiwgNjMsIDY0IH07CisgICAgZm9yIChhdXRv
IGxzYiA6IGltbXMpIHsKKyAgICAgICAgZm9yIChhdXRvIHdpZHRoIDogaW1tcykgeworICAgICAg
ICAgICAgaWYgKGxzYiA+PSAwICYmIHdpZHRoID4gMCAmJiBsc2IgKyB3aWR0aCA8IDY0KSB7Cisg
ICAgICAgICAgICAgICAgYXV0byB1YmZpejY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYg
aml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgICAgICAgICAgICAgaml0LnViZml6NjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobHNi
KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih3
aWR0aCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICB1aW50NjRfdCBtYXNrID0gKDFVTEwgPDwgd2lkdGgpIC0gMVVMTDsKKyAgICAgICAg
ICAgICAgICBDSEVDS19FUShpbnZva2U8dWludDY0X3Q+KHViZml6NjQsIHNyYyksIChzcmMgJiBt
YXNrKSA8PCBsc2IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQogI2VuZGlm
CiAKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCkBAIC0zMjgwLDYg
KzMzMzAsOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpIFdURl9JR05PUkVTX1RIUkVB
RF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdE11bFN1YlNpZ25FeHRlbmQzMigpKTsKICAg
ICBSVU4odGVzdFViZngzMigpKTsKICAgICBSVU4odGVzdFViZng2NCgpKTsKKyAgICBSVU4odGVz
dFViZml6MzIoKSk7CisgICAgUlVOKHRlc3RVYmZpejY0KCkpOwogI2VuZGlmCiAKICNpZiBDUFUo
WDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IDMzODYzZWI4ZWM0ODcyNDIxNjVjZjEwODUwN2IwNjYw
ZTJhZTdmNGMuLmM0MWFiNzAxNmMwNjU3MzlkODBkYzUwNzcxNjdlOTgyOWQ1NzYwMDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0yNTk2LDcgKzI1OTYs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbHlMZWZ0ID0g
cmlnaHQtPmNoaWxkKDApOwogICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbHlSaWdo
dCA9IHJpZ2h0LT5jaGlsZCgxKTsKIAotICAgICAgICAgICAgICAgICAgICAvLyBTTVNVQkw6IGQg
PSBhIC0gU0V4dDMyKG4pICogIFNFeHQzMihtKQorICAgICAgICAgICAgICAgICAgICAvLyBTTVNV
Qkw6IGQgPSBhIC0gU0V4dDMyKG4pICogU0V4dDMyKG0pCiAgICAgICAgICAgICAgICAgICAgIGlm
IChtdWx0aXBseVN1Yk9wY29kZSA9PSBNdWx0aXBseVN1YjY0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiBpc1ZhbGlkRm9ybShNdWx0aXBseVN1YlNpZ25FeHRlbmQzMiwgQXJnOjpUbXAsIEFy
Zzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIHRyeVNFeHQzMiA9IFsmXSAoVmFsdWUqIHYpIHsKQEAgLTI3NDAsMjYgKzI3NDAsMzUgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIC8vIFVCRlggUGF0dGVybjogZGVzdCA9IChzcmMgPj4gbHNiKSAmICgoMSA8PCB3aWR0
aCkgLSAxKQotICAgICAgICAgICAgaWYgKGNhbkJlSW50ZXJuYWwobGVmdCkgJiYgbGVmdC0+b3Bj
b2RlKCkgPT0gWlNocikgeworICAgICAgICAgICAgLy8gVUJGWCBQYXR0ZXJuOiBkZXN0ID0gKHNy
YyA+PiBsc2IpICYgbWFzayB3aGVyZSBtYXNrID0gKDEgPDwgd2lkdGgpIC0gMQorICAgICAgICAg
ICAgYXV0byB0cnlBcHBlbmRVQkZYID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAg
IGlmIChsZWZ0LT5vcGNvZGUoKSAhPSBaU2hyIHx8ICFjYW5CZUludGVybmFsKGxlZnQpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgVmFsdWUqIHNy
Y1ZhbHVlID0gbGVmdC0+Y2hpbGQoMCk7CiAgICAgICAgICAgICAgICAgVmFsdWUqIGxzYlZhbHVl
ID0gbGVmdC0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpbW0oc3JjVmFsdWUpICYm
IGltbShsc2JWYWx1ZSkgJiYgcmlnaHQtPmhhc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGludDY0X3QgbHNiID0gbHNiVmFsdWUtPmFzSW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIHVp
bnQ2NF90IG1hc2sgPSByaWdodC0+YXNJbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgdWludDhf
dCB3aWR0aCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KCEobWFzayAmIChtYXNrICsgMSkpKSAqIFdU
Rjo6Yml0Q291bnQobWFzayk7Ci0gICAgICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29k
ZSA9IG9wY29kZUZvclR5cGUoVWJmeDMyLCBVYmZ4NjQsIHNyY1ZhbHVlLT50eXBlKCkpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAob3Bjb2RlCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBs
c2IgPj0gMAotICAgICAgICAgICAgICAgICAgICAgICAgJiYgd2lkdGggPiAwCi0gICAgICAgICAg
ICAgICAgICAgICAgICAmJiBsc2IgKyB3aWR0aCA8PSAoMzIgPDwgKG9wY29kZSA9PSBVYmZ4NjQp
KQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRt
cCwgQXJnOjpJbW0sIEFyZzo6SW1tLCBBcmc6OlRtcCkpICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBhcHBlbmQob3Bjb2RlLCB0bXAoc3JjVmFsdWUpLCBpbW0obHNiVmFsdWUpLCBpbW0od2lk
dGgpLCB0bXAobV92YWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJu
YWwobGVmdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVGb3JUeXBlKFViZngzMiwgVWJmeDY0LCBz
cmNWYWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29k
ZSwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OkltbSwgQXJnOjpUbXApKSAKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghaW1tKGxzYlZhbHVl
KSB8fCBsc2JWYWx1ZS0+YXNJbnQoKSA8IDAgfHwgIXJpZ2h0LT5oYXNJbnQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgdWludDY0X3QgbHNi
ID0gbHNiVmFsdWUtPmFzSW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbWFzayA9IHJp
Z2h0LT5hc0ludCgpOworICAgICAgICAgICAgICAgIGlmICghbWFzayB8fCBtYXNrICYgKG1hc2sg
KyAxKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IHVpbnQ2NF90IHdpZHRoID0gV1RGOjpiaXRDb3VudChtYXNrKTsKKyAgICAgICAgICAgICAgICB1
aW50NjRfdCBkYXRhc2l6ZSA9IG9wY29kZSA9PSBVYmZ4MzIgPyAzMiA6IDY0OworICAgICAgICAg
ICAgICAgIGlmIChsc2IgKyB3aWR0aCA+IGRhdGFzaXplKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAoc3JjVmFs
dWUpLCBpbW0obHNiVmFsdWUpLCBpbW0od2lkdGgpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAg
ICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHRyeUFwcGVuZFVCRlgoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFuZDMyLCBB
bmQ2NCwgQW5kRG91YmxlLCBBbmRGbG9hdCwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTI4MDMsMTIgKzI4MTIsNDUgQEAgcHJpdmF0ZToKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2UgU2hsOiB7Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMSktPmlzSW50MzIoMSkpIHsKLSAgICAgICAgICAgICAgICBhcHBlbmRCaW5PcDxBZGQzMiwg
QWRkNjQsIEFkZERvdWJsZSwgQWRkRmxvYXQsIENvbW11dGF0aXZlPihtX3ZhbHVlLT5jaGlsZCgw
KSwgbV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSBtX3ZhbHVl
LT5jaGlsZCgwKTsKKyAgICAgICAgICAgIFZhbHVlKiByaWdodCA9IG1fdmFsdWUtPmNoaWxkKDEp
OworCisgICAgICAgICAgICAvLyBVQkZJWiBQYXR0ZXJuOiBkID0gKG4gJiBtYXNrKSA8PCBsc2Ig
d2hlcmUgbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5k
VUJGWiA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+b3Bjb2Rl
KCkgIT0gQml0QW5kIHx8ICFjYW5CZUludGVybmFsKGxlZnQpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IGxlZnQtPmNo
aWxkKDApOworICAgICAgICAgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUgPSBsZWZ0LT5jaGlsZCgx
KTsKKworICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG9wY29kZUZvclR5cGUo
VWJmaXozMiwgVWJmaXo2NCwgblZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAgIGlmICgh
aXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6SW1tLCBBcmc6OlRt
cCkpIAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
aWYgKCFtYXNrVmFsdWUtPmhhc0ludCgpIHx8ICFpbW0ocmlnaHQpIHx8IHJpZ2h0LT5hc0ludCgp
IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAg
ICAgdWludDY0X3QgbHNiID0gcmlnaHQtPmFzSW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0
X3QgbWFzayA9IG1hc2tWYWx1ZS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1hc2sg
fHwgbWFzayAmIChtYXNrICsgMSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICB1aW50NjRfdCB3aWR0aCA9IFdURjo6Yml0Q291bnQobWFzayk7Cisg
ICAgICAgICAgICAgICAgdWludDY0X3QgZGF0YXNpemUgPSBvcGNvZGUgPT0gVWJmaXozMiA/IDMy
IDogNjQ7CisgICAgICAgICAgICAgICAgaWYgKGxzYiArIHdpZHRoID4gZGF0YXNpemUpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIGFwcGVuZChv
cGNvZGUsIHRtcChuVmFsdWUpLCBpbW0ocmlnaHQpLCBpbW0od2lkdGgpLCB0bXAobV92YWx1ZSkp
OworICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOworICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHRyeUFwcGVu
ZFVCRlooKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChyaWdo
dC0+aXNJbnQzMigxKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFkZDMyLCBBZGQ2
NCwgQWRkRG91YmxlLCBBZGRGbG9hdCwgQ29tbXV0YXRpdmU+KGxlZnQsIGxlZnQpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgYXBwZW5kU2hpZnQ8THNoaWZ0MzIsIExzaGlmdDY0PihtX3ZhbHVlLT5jaGlsZCgwKSwgbV92
YWx1ZS0+Y2hpbGQoMSkpOworCisgICAgICAgICAgICBhcHBlbmRTaGlmdDxMc2hpZnQzMiwgTHNo
aWZ0NjQ+KGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKaW5kZXggNjJi
MDgxNzVlOWE1MGQwMjA2MzRjOWMyYmFkNjFjMWRhYjNiYzI5NS4uM2RkYWRlNzcwOGViNGM3YjQy
YzU3YmJhMDYyOWM2ZTlmZGY2NThmZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1JlZHVjZVN0cmVuZ3RoLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkIzVmFsdWVL
ZXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKQEAgLTEwMzcs
MjIgKzEwMzgsNTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBCaXRBbmQoWlNocih2YWx1ZSwgc2hpZnRBbW91bnQpLCBtYXNrKQotICAgICAg
ICAgICAgLy8gLSBzaGlmdEFtb3VudCA+PSAwIGFuZCBtYXNrIGlzIGNvbnRpZ3VvdXMgb25lcyBm
cm9tIExTQiwgZXhhbXBsZSAwYjAxMTExMTExCi0gICAgICAgICAgICAvLyAtIHNoaWZ0QW1vdW50
ICsgYml0Q291bnQobWFzaykgPT0gbWF4Qml0V2lkdGgKKyAgICAgICAgICAgIC8vIENvbmRpdGlv
bnM6CisgICAgICAgICAgICAvLyAxLiBtYXNrID0gKDEgPDwgd2lkdGgpIC0gMQorICAgICAgICAg
ICAgLy8gMi4gMCA8PSBzaGlmdEFtb3VudCA8IGRhdGFzaXplCisgICAgICAgICAgICAvLyAzLiAw
IDwgd2lkdGggPCBkYXRhc2l6ZQorICAgICAgICAgICAgLy8gNC4gc2hpZnRBbW91bnQgKyB3aWR0
aCA+PSBkYXRhc2l6ZQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBaU2hyKHZhbHVlLCBzaGlm
dEFtb3VudCkKICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0g
WlNocgogICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aGFz
SW50KCkKKyAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFz
SW50KCkgPj0gMAogICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQo
KSkgewotICAgICAgICAgICAgICAgIGludDY0X3Qgc2hpZnRBbW91bnQgPSBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMSktPmFzSW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3Qgc2hpZnRB
bW91bnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50KCk7CiAgICAgICAgICAg
ICAgICAgdWludDY0X3QgbWFzayA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpOwotICAgICAg
ICAgICAgICAgIGJvb2wgaXNWYWxpZCA9IG1hc2sgJiYgIShtYXNrICYgKG1hc2sgKyAxKSk7Ci0g
ICAgICAgICAgICAgICAgdWludDY0X3QgbWF4Qml0V2lkdGggPSBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCktPnR5cGUoKSA9PSBJbnQ2NCA/IDY0IDogMzI7Ci0gICAgICAgICAgICAgICAgaWYg
KHNoaWZ0QW1vdW50ID49IDAgJiYgaXNWYWxpZCAmJiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2hp
ZnRBbW91bnQgKyBXVEY6OmJpdENvdW50KG1hc2spKSA9PSBtYXhCaXRXaWR0aCkgeworICAgICAg
ICAgICAgICAgIGJvb2wgaXNWYWxpZE1hc2sgPSBtYXNrICYmICEobWFzayAmIChtYXNrICsgMSkp
OworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGRhdGFzaXplID0gbV92YWx1ZS0+Y2hpbGQoMCkt
PmNoaWxkKDApLT50eXBlKCkgPT0gSW50NjQgPyA2NCA6IDMyOworICAgICAgICAgICAgICAgIHVp
bnQ2NF90IHdpZHRoID0gV1RGOjpiaXRDb3VudChtYXNrKTsKKyAgICAgICAgICAgICAgICBpZiAo
c2hpZnRBbW91bnQgPCBkYXRhc2l6ZSAmJiBpc1ZhbGlkTWFzayAmJiBzaGlmdEFtb3VudCArIHdp
ZHRoID49IGRhdGFzaXplKSB7CiAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRp
dHkobV92YWx1ZS0+Y2hpbGQoMCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
Qml0QW5kKFNobCh2YWx1ZSwgc2hpZnRBbW91bnQpLCBtYXNrU2hpZnQpCisgICAgICAgICAgICAv
LyBDb25kaXRpb25zOgorICAgICAgICAgICAgLy8gMS4gbWFza1NoaWZ0ID0gbWFzayA8PCBzaGlm
dEFtb3VudAorICAgICAgICAgICAgLy8gMi4gbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICAg
ICAgICAgIC8vIDMuIDAgPD0gc2hpZnRBbW91bnQgPCBkYXRhc2l6ZQorICAgICAgICAgICAgLy8g
NC4gMCA8IHdpZHRoIDwgZGF0YXNpemUKKyAgICAgICAgICAgIC8vIDUuIHNoaWZ0QW1vdW50ICsg
d2lkdGggPD0gZGF0YXNpemUKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogU2hsKEJpdEFuZCh2
YWx1ZSwgbWFzayksIHNoaWZ0QW1vdW50KQorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxk
KDApLT5vcGNvZGUoKSA9PSBTaGwKKyAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMSktPmhhc0ludCgpCisgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDEpLT5hc0ludCgpID49IDAKKyAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5j
aGlsZCgxKS0+aGFzSW50KCkpIHsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBzaGlmdEFtb3Vu
dCA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAg
ICB1aW50NjRfdCBtYXNrU2hpZnQgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKTsKKyAgICAg
ICAgICAgICAgICB1aW50NjRfdCBtYXNrU2hpZnRBbW91bnQgPSBXVEY6OmNvdW50VHJhaWxpbmda
ZXJvcyhtYXNrU2hpZnQpOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBtYXNrU2hp
ZnQgPj4gbWFza1NoaWZ0QW1vdW50OworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHdpZHRoID0g
V1RGOjpiaXRDb3VudChtYXNrKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBkYXRhc2l6ZSA9
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKS0+dHlwZSgpID09IEludDY0ID8gNjQgOiAzMjsK
KyAgICAgICAgICAgICAgICBib29sIGlzVmFsaWRTaGlmdEFtb3VudCA9IHNoaWZ0QW1vdW50ID09
IG1hc2tTaGlmdEFtb3VudCAmJiBzaGlmdEFtb3VudCA8IGRhdGFzaXplOworICAgICAgICAgICAg
ICAgIGJvb2wgaXNWYWxpZE1hc2sgPSBtYXNrICYmICEobWFzayAmIChtYXNrICsgMSkpICYmIHdp
ZHRoIDwgZGF0YXNpemU7CisgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRTaGlmdEFtb3VudCAm
JiBpc1ZhbGlkTWFzayAmJiBzaGlmdEFtb3VudCArIHdpZHRoIDw9IGRhdGFzaXplKSB7CisgICAg
ICAgICAgICAgICAgICAgIFZhbHVlKiBtYXNrVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGlm
IChkYXRhc2l6ZSA9PSAzMikKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tWYWx1ZSA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdp
bigpLCBtYXNrKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgbWFza1ZhbHVlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4obV9p
bmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIG1hc2spOworICAgICAgICAgICAgICAgICAgICBWYWx1
ZSogYml0QW5kID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBCaXRBbmQs
IG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCksIG1hc2tWYWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihTaGwsIG1fdmFs
dWUtPm9yaWdpbigpLCBiaXRBbmQsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KwogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQodmFsdWUsIGFsbC1vbmVzKQogICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZS4KICAgICAgICAgICAgIGlmICgobV92YWx1ZS0+
dHlwZSgpID09IEludDY0ICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDY0KHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJPcGNvZGUub3Bjb2RlcwppbmRleCA5YTJlNzQyNzY1MzcwZjMzZDZmMmRjNjYyNTFl
NjE3YTU0ZmQyMjlkLi5jZTIwMWJiYWU1MWJiNDM4ODlmYTUyODA3MzJkOGY3YmQyOTJjOWZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVz
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKQEAg
LTM2Niw2ICszNjYsMTIgQEAgYXJtNjQ6IFViZngzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBa
RDpHOjMyCiBhcm02NDogVWJmeDY0IFU6Rzo2NCwgVTpHOjMyLCBVOkc6MzIsIEQ6Rzo2NAogICAg
IFRtcCwgSW1tLCBJbW0sIFRtcAogCithcm02NDogVWJmaXozMiBVOkc6MzIsIFU6RzozMiwgVTpH
OjMyLCBaRDpHOjMyCisgICAgVG1wLCBJbW0sIEltbSwgVG1wCisKK2FybTY0OiBVYmZpejY0IFU6
Rzo2NCwgVTpHOjMyLCBVOkc6MzIsIEQ6Rzo2NAorICAgIFRtcCwgSW1tLCBJbW0sIFRtcAorCiA2
NDogQW5kNjQgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAogICAgIFRtcCwgVG1wLCBUbXAKICAgICBh
cm02NDogQml0SW1tNjQsIFRtcCwgVG1wCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXgg
YjVlNGNmMmM3ODg4ODJmNjVkM2YxMmM3MzJlZTI0ZDVjNjgzM2VlNC4uNGQzZDJiNjljZjc5Nzdm
ODJiZTIyYzhmNjFiOWUxOTQxNjMyYTJmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApA
QCAtNDE2LDEwICs0MTYsMTggQEAgaW5saW5lIGRvdWJsZSBtb2RlbExvYWQ8ZG91YmxlLCBkb3Vi
bGU+KGRvdWJsZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KIAogdm9pZCBydW4oY29uc3QgY2hh
ciogZmlsdGVyKTsKIHZvaWQgdGVzdEJpdEFuZFNFeHQzMihpbnQzMl90IHZhbHVlLCBpbnQ2NF90
IG1hc2spOwotdm9pZCB0ZXN0VWJmeDMyKCk7Ci12b2lkIHRlc3RVYmZ4MzJQYXR0ZXJuTWF0Y2go
KTsKLXZvaWQgdGVzdFViZng2NCgpOwotdm9pZCB0ZXN0VWJmeDY0UGF0dGVybk1hdGNoKCk7Cit2
b2lkIHRlc3RVYmZ4MzJTaGlmdEFuZCgpOwordm9pZCB0ZXN0VWJmeDMyQW5kU2hpZnQoKTsKK3Zv
aWQgdGVzdFViZng2NFNoaWZ0QW5kKCk7Cit2b2lkIHRlc3RVYmZ4NjRBbmRTaGlmdCgpOwordm9p
ZCB0ZXN0VWJmaXozMkFuZFNoaWZ0VmFsdWVNYXNrKCk7Cit2b2lkIHRlc3RVYmZpejMyQW5kU2hp
ZnRNYXNrVmFsdWUoKTsKK3ZvaWQgdGVzdFViZml6MzJTaGlmdEFuZCgpOwordm9pZCB0ZXN0VWJm
aXozMkFuZFNoaWZ0KCk7Cit2b2lkIHRlc3RVYmZpejY0QW5kU2hpZnRWYWx1ZU1hc2soKTsKK3Zv
aWQgdGVzdFViZml6NjRBbmRTaGlmdE1hc2tWYWx1ZSgpOwordm9pZCB0ZXN0VWJmaXo2NFNoaWZ0
QW5kKCk7Cit2b2lkIHRlc3RVYmZpejY0QW5kU2hpZnQoKTsKIHZvaWQgdGVzdEJpdEFuZFplcm9T
aGlmdFJpZ2h0QXJnSW1tTWFzazMyKCk7CiB2b2lkIHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFy
Z0ltbU1hc2s2NCgpOwogdm9pZCB0ZXN0QmFzaWNTZWxlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzXzIuY3BwCmluZGV4IDFkZGM3MWYxMDJhZDVhYWJiNzE5MjExZGU0NzlmMGQxYzhh
NjlhNzEuLjk3NDM0NThhMmY4OTFjODUyMWJiZjFiZjMzZjdjZDQyOGQ0ZjQzMTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcApAQCAtMjU4MSwxMiArMjU4MSwxNSBAQCB2b2lk
IHRlc3ROZWdGbG9hdFdpdGhVc2VsZXNzRG91YmxlQ29udmVyc2lvbihmbG9hdCBhKQogICAgIENI
RUNLKGlzSWRlbnRpY2FsKGNvbXBpbGVBbmRSdW48ZmxvYXQ+KHByb2MsIGJpdHdpc2VfY2FzdDxp
bnQzMl90PihhKSksIC1hKSk7CiB9CiAKLXZvaWQgdGVzdFViZngzMigpCit2b2lkIHRlc3RVYmZ4
MzJTaGlmdEFuZCgpCiB7Ci0gICAgLy8gKHNyYyA+PiBsc2IpICYgbWFzaworICAgIC8vIFRlc3Qg
UGF0dGVybjogKHNyYyA+PiBsc2IpICYgbWFzaworICAgIC8vIHdoZXJlOiBtYXNrID0gKDEgPDwg
d2lkdGgpIC0gMQorICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAy
KQorICAgICAgICByZXR1cm47CiAgICAgdWludDMyX3Qgc3JjID0gMHhmZmZmZmZmZjsKLSAgICBW
ZWN0b3I8dWludDMyX3Q+IGxzYnMgPSB7IDAsIDE1LCAzMCB9OwotICAgIFZlY3Rvcjx1aW50MzJf
dD4gd2lkdGhzID0geyAzMCwgMTYsIDEgfTsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGxzYnMgPSB7
IDEsIDE0LCAzMCB9OworICAgIFZlY3Rvcjx1aW50MzJfdD4gd2lkdGhzID0geyAzMCwgMTcsIDEg
fTsKIAogICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgbHNiLCB1aW50MzJfdCBtYXNrKSAt
PiB1aW50MzJfdCB7CiAgICAgICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtMjYwMiw4ICsyNjA1LDEx
IEBAIHZvaWQgdGVzdFViZngzMigpCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZSgKICAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGxlZnQsIG1hc2tWYWx1
ZSkpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGNvbXBpbGVBbmRSdW48dWludDMyX3Q+KHBy
b2MsIHNyYyk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAg
ICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29k
ZSwgInViZngiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIHNyYyk7
CiAgICAgfTsKIAogICAgIGF1dG8gZ2VuZXJhdGVNYXNrID0gWyZdICh1aW50MzJfdCB3aWR0aCkg
LT4gdWludDMyX3QgewpAQCAtMjYxMywxOSArMjYxOSwyMSBAQCB2b2lkIHRlc3RVYmZ4MzIoKQog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbHNicy5zaXplKCk7ICsraSkgewogICAgICAgICB1
aW50MzJfdCBsc2IgPSBsc2JzLmF0KGkpOwogICAgICAgICB1aW50MzJfdCBtYXNrID0gZ2VuZXJh
dGVNYXNrKHdpZHRocy5hdChpKSk7Ci0gICAgICAgIHVpbnQzMl90IGxocyA9IHRlc3QobHNiLCBt
YXNrKTsKLSAgICAgICAgdWludDMyX3QgcmhzID0gKChzcmMgPj4gbHNiKSAmIG1hc2spOwotICAg
ICAgICBDSEVDSyhsaHMgPT0gcmhzKTsKKyAgICAgICAgQ0hFQ0sodGVzdChsc2IsIG1hc2spID09
ICgoc3JjID4+IGxzYikgJiBtYXNrKSk7CiAgICAgfQogfQogCi12b2lkIHRlc3RVYmZ4MzJQYXR0
ZXJuTWF0Y2goKQordm9pZCB0ZXN0VWJmeDMyQW5kU2hpZnQoKQogewotICAgIC8vIChzcmMgPj4g
bHNiKSAmICgoMSA8PCB3aWR0aCkgLSAxKQorICAgIC8vIFRlc3QgUGF0dGVybjogbWFzayAmIChz
cmMgPj4gbHNiKQorICAgIC8vIFdoZXJlOiBtYXNrID0gKDEgPDwgd2lkdGgpIC0gMQorICAgIGlm
IChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47
CiAgICAgdWludDMyX3Qgc3JjID0gMHhmZmZmZmZmZjsKLSAgICBWZWN0b3I8dWludDMyX3Q+IGlt
bXMgPSB7IDAsIDEsIDMwLCAzMSwgMzIsIDYyLCA2MywgNjQgfTsKKyAgICBWZWN0b3I8dWludDMy
X3Q+IGxzYnMgPSB7IDEsIDE0LCAzMCB9OworICAgIFZlY3Rvcjx1aW50MzJfdD4gd2lkdGhzID0g
eyAzMCwgMTcsIDEgfTsKIAotICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgbHNiLCB1aW50
MzJfdCB3aWR0aCkgLT4gdWludDMyX3QgeworICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3Qg
bHNiLCB1aW50MzJfdCBtYXNrKSAtPiB1aW50MzJfdCB7CiAgICAgICAgIFByb2NlZHVyZSBwcm9j
OwogICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwogCkBAIC0yNjMz
LDM2ICsyNjQxLDM5IEBAIHZvaWQgdGVzdFViZngzMlBhdHRlcm5NYXRjaCgpCiAgICAgICAgICAg
ICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsK
ICAgICAgICAgVmFsdWUqIGxzYlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIGxzYik7Ci0gICAgICAgIFZhbHVlKiB3aWR0aFZhbHVlID0gcm9vdC0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHdpZHRoKTsKLSAgICAgICAg
VmFsdWUqIGNvbnN0VmFsdWVBID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDEpOwotICAgICAgICBWYWx1ZSogY29uc3RWYWx1ZUIgPSByb290LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSk7CisgICAgICAgIFZhbHVlKiBtYXNr
VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFz
ayk7CiAKLSAgICAgICAgVmFsdWUqIGxlZnQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IFpTaHIsIE9yaWdpbigpLCBzcmNWYWx1ZSwgbHNiVmFsdWUpOwotICAgICAgICBWYWx1ZSogcmln
aHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAotICAgICAgICAgICAgcHJvYywgU3ViLCBPcmln
aW4oKSwgCi0gICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3Jp
Z2luKCksIGNvbnN0VmFsdWVBLCB3aWR0aFZhbHVlKSwgY29uc3RWYWx1ZUIpOworICAgICAgICBW
YWx1ZSogcmlnaHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdpbigp
LCBzcmNWYWx1ZSwgbHNiVmFsdWUpOwogICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFs
dWUoCiAgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAotICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBsZWZ0LCByaWdodCkp
OworICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdp
bigpLCBtYXNrVmFsdWUsIHJpZ2h0KSk7CiAKLSAgICAgICAgcmV0dXJuIGNvbXBpbGVBbmRSdW48
dWludDMyX3Q+KHByb2MsIHNyYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHBy
b2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1
Y3Rpb24oKmNvZGUsICJ1YmZ4Iik7CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDMyX3Q+KCpj
b2RlLCBzcmMpOwogICAgIH07CiAKLSAgICBmb3IgKGF1dG8gbHNiIDogaW1tcykgewotICAgICAg
ICBmb3IgKGF1dG8gd2lkdGggOiBpbW1zKSB7Ci0gICAgICAgICAgICB1aW50MzJfdCBsaHMgPSB0
ZXN0KGxzYiwgd2lkdGgpOwotICAgICAgICAgICAgdWludDMyX3QgcmhzID0gKChzcmMgPj4gbHNi
KSAmICgoMVUgPDwgd2lkdGgpIC0gMVUpKTsKLSAgICAgICAgICAgIENIRUNLKGxocyA9PSByaHMp
OwotICAgICAgICB9CisgICAgYXV0byBnZW5lcmF0ZU1hc2sgPSBbJl0gKHVpbnQzMl90IHdpZHRo
KSAtPiB1aW50MzJfdCB7CisgICAgICAgIHJldHVybiAoMVUgPDwgd2lkdGgpIC0gMVU7CisgICAg
fTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbHNicy5zaXplKCk7ICsraSkgeworICAg
ICAgICB1aW50MzJfdCBsc2IgPSBsc2JzLmF0KGkpOworICAgICAgICB1aW50MzJfdCBtYXNrID0g
Z2VuZXJhdGVNYXNrKHdpZHRocy5hdChpKSk7CisgICAgICAgIENIRUNLKHRlc3QobHNiLCBtYXNr
KSA9PSAobWFzayAmIChzcmMgPj4gbHNiKSkpOwogICAgIH0KIH0KIAotdm9pZCB0ZXN0VWJmeDY0
KCkKK3ZvaWQgdGVzdFViZng2NFNoaWZ0QW5kKCkKIHsKLSAgICAvLyAoc3JjID4+IGxzYikgJiBt
YXNrCi0gICAgdWludDY0X3Qgc3JjID0gMHhmZmZmZmZmZjsKLSAgICBWZWN0b3I8dWludDY0X3Q+
IGxzYnMgPSB7IDAsIDMxLCA2MiB9OwotICAgIFZlY3Rvcjx1aW50NjRfdD4gd2lkdGhzID0geyA2
MywgMzIsIDEgfTsKKyAgICAvLyBUZXN0IFBhdHRlcm46IChzcmMgPj4gbHNiKSAmIG1hc2sKKyAg
ICAvLyB3aGVyZTogbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICBpZiAoSlNDOjpPcHRpb25z
OjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIHVpbnQ2NF90
IHNyYyA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsKKyAgICBWZWN0b3I8dWludDY0X3Q+IGxzYnMgPSB7
IDEsIDMwLCA2MiB9OworICAgIFZlY3Rvcjx1aW50NjRfdD4gd2lkdGhzID0geyA2MiwgMzMsIDEg
fTsKIAogICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDY0X3QgbHNiLCB1aW50NjRfdCBtYXNrKSAt
PiB1aW50NjRfdCB7CiAgICAgICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtMjY3Nyw3ICsyNjg4LDEw
IEBAIHZvaWQgdGVzdFViZng2NCgpCiAgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LAogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdp
bigpLCBsZWZ0LCBtYXNrVmFsdWUpKTsKIAotICAgICAgICByZXR1cm4gY29tcGlsZUFuZFJ1bjx1
aW50NjRfdD4ocHJvYywgc3JjKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVj
dGlvbigqY29kZSwgInViZngiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50NjRfdD4oKmNv
ZGUsIHNyYyk7CiAgICAgfTsKIAogICAgIGF1dG8gZ2VuZXJhdGVNYXNrID0gWyZdICh1aW50NjRf
dCB3aWR0aCkgLT4gdWludDY0X3QgewpAQCAtMjY4Nyw0NSArMjcwMSwzNzkgQEAgdm9pZCB0ZXN0
VWJmeDY0KCkKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxzYnMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgdWludDY0X3QgbHNiID0gbHNicy5hdChpKTsKICAgICAgICAgdWludDY0X3QgbWFz
ayA9IGdlbmVyYXRlTWFzayh3aWR0aHMuYXQoaSkpOwotICAgICAgICB1aW50NjRfdCBsaHMgPSB0
ZXN0KGxzYiwgbWFzayk7Ci0gICAgICAgIHVpbnQ2NF90IHJocyA9ICgoc3JjID4+IGxzYikgJiBt
YXNrKTsKLSAgICAgICAgQ0hFQ0sobGhzID09IHJocyk7CisgICAgICAgIENIRUNLKHRlc3QobHNi
LCBtYXNrKSA9PSAoKHNyYyA+PiBsc2IpICYgbWFzaykpOwogICAgIH0KIH0KIAotdm9pZCB0ZXN0
VWJmeDY0UGF0dGVybk1hdGNoKCkKK3ZvaWQgdGVzdFViZng2NEFuZFNoaWZ0KCkKIHsKLSAgICAv
LyAoc3JjID4+IGxzYikgJiAoKDEgPDwgd2lkdGgpIC0gMSkKKyAgICAvLyBUZXN0IFBhdHRlcm46
IG1hc2sgJiAoc3JjID4+IGxzYikKKyAgICAvLyBXaGVyZTogbWFzayA9ICgxIDw8IHdpZHRoKSAt
IDEKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAg
ICAgcmV0dXJuOwogICAgIHVpbnQ2NF90IHNyYyA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsKLSAgICBW
ZWN0b3I8dWludDMyX3Q+IGltbXMgPSB7IDAsIDEsIDMwLCAzMSwgMzIsIDYyLCA2MywgNjQgfTsK
KyAgICBWZWN0b3I8dWludDY0X3Q+IGxzYnMgPSB7IDEsIDMwLCA2MiB9OworICAgIFZlY3Rvcjx1
aW50NjRfdD4gd2lkdGhzID0geyA2MiwgMzMsIDEgfTsKIAotICAgIGF1dG8gdGVzdCA9IFsmXSAo
dWludDMyX3QgbHNiLCB1aW50MzJfdCB3aWR0aCkgLT4gdWludDY0X3QgeworICAgIGF1dG8gdGVz
dCA9IFsmXSAodWludDY0X3QgbHNiLCB1aW50NjRfdCBtYXNrKSAtPiB1aW50NjRfdCB7CiAgICAg
ICAgIFByb2NlZHVyZSBwcm9jOwogICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOwogCiAgICAgICAgIFZhbHVlKiBzcmNWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAg
ICAgICAgVmFsdWUqIGxzYlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIGxzYik7Ci0gICAgICAgIFZhbHVlKiB3aWR0aFZhbHVlID0gcm9vdC0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHdpZHRoKTsKLSAgICAgICAgVmFs
dWUqIGNvbnN0VmFsdWVBID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIDEpOwotICAgICAgICBWYWx1ZSogY29uc3RWYWx1ZUIgPSByb290LT5hcHBlbmROZXc8
Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSk7CisgICAgICAgIFZhbHVlKiBtYXNrVmFs
dWUgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzayk7
CiAKLSAgICAgICAgVmFsdWUqIGxlZnQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpT
aHIsIE9yaWdpbigpLCBzcmNWYWx1ZSwgbHNiVmFsdWUpOwotICAgICAgICBWYWx1ZSogcmlnaHQg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KAotICAgICAgICAgICAgcHJvYywgU3ViLCBPcmlnaW4o
KSwgCi0gICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2lu
KCksIGNvbnN0VmFsdWVBLCB3aWR0aFZhbHVlKSwgY29uc3RWYWx1ZUIpOworICAgICAgICBWYWx1
ZSogcmlnaHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdpbigpLCBz
cmNWYWx1ZSwgbHNiVmFsdWUpOwogICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
CiAgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAotICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBsZWZ0LCByaWdodCkpOwor
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigp
LCBtYXNrVmFsdWUsIHJpZ2h0KSk7CiAKLSAgICAgICAgcmV0dXJuIGNvbXBpbGVBbmRSdW48dWlu
dDY0X3Q+KHByb2MsIHNyYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rp
b24oKmNvZGUsICJ1YmZ4Iik7CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDY0X3Q+KCpjb2Rl
LCBzcmMpOwogICAgIH07CiAKLSAgICBmb3IgKGF1dG8gbHNiIDogaW1tcykgewotICAgICAgICBm
b3IgKGF1dG8gd2lkdGggOiBpbW1zKSB7Ci0gICAgICAgICAgICB1aW50NjRfdCBsaHMgPSB0ZXN0
KGxzYiwgd2lkdGgpOwotICAgICAgICAgICAgdWludDY0X3QgcmhzID0gKChzcmMgPj4gbHNiKSAm
ICgoMVVMTCA8PCB3aWR0aCkgLSAxVUxMKSk7Ci0gICAgICAgICAgICBDSEVDSyhsaHMgPT0gcmhz
KTsKLSAgICAgICAgfQorICAgIGF1dG8gZ2VuZXJhdGVNYXNrID0gWyZdICh1aW50NjRfdCB3aWR0
aCkgLT4gdWludDY0X3QgeworICAgICAgICByZXR1cm4gKDFVTEwgPDwgd2lkdGgpIC0gMVVMTDsK
KyAgICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIHVpbnQ2NF90IGxzYiA9IGxzYnMuYXQoaSk7CisgICAgICAgIHVpbnQ2NF90IG1h
c2sgPSBnZW5lcmF0ZU1hc2sod2lkdGhzLmF0KGkpKTsKKyAgICAgICAgQ0hFQ0sodGVzdChsc2Is
IG1hc2spID09IChtYXNrICYgKHNyYyA+PiBsc2IpKSk7CisgICAgfQorfQorCit2b2lkIHRlc3RV
YmZpejMyQW5kU2hpZnRWYWx1ZU1hc2soKQoreworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IChu
ICYgbWFzaykgPDwgbHNiIAorICAgIC8vIFdoZXJlOiBtYXNrID0gKDEgPDwgd2lkdGgpIC0gMQor
ICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICBy
ZXR1cm47CisgICAgdWludDMyX3QgbiA9IDB4ZmZmZmZmZmY7CisgICAgVmVjdG9yPHVpbnQzMl90
PiBsc2JzID0geyAxLCAxNCwgMzAgfTsKKyAgICBWZWN0b3I8dWludDMyX3Q+IHdpZHRocyA9IHsg
MzAsIDE3LCAxIH07CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IGxzYiwgdWludDMy
X3QgbWFzaykgLT4gdWludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBP
cmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSog
bHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
bHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNrKTsKKworICAgICAgICBWYWx1ZSogbGVmdCA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBtYXNr
VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBsZWZ0LCBsc2JWYWx1ZSkpOworCisgICAgICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAg
ICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1YmZpeiIpOworICAgICAgICBy
ZXR1cm4gaW52b2tlPHVpbnQzMl90PigqY29kZSwgbik7CisgICAgfTsKKworICAgIGF1dG8gZ2Vu
ZXJhdGVNYXNrID0gWyZdICh1aW50MzJfdCB3aWR0aCkgLT4gdWludDMyX3QgeworICAgICAgICBy
ZXR1cm4gKDFVIDw8IHdpZHRoKSAtIDFVOworICAgIH07CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxzYnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgbHNiID0gbHNicy5h
dChpKTsKKyAgICAgICAgdWludDMyX3QgbWFzayA9IGdlbmVyYXRlTWFzayh3aWR0aHMuYXQoaSkp
OworICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgbWFzaykgPT0gKChuICYgbWFzaykgPDwgbHNiKSk7
CisgICAgfQorfQorCit2b2lkIHRlc3RVYmZpejMyQW5kU2hpZnRNYXNrVmFsdWUoKQoreworICAg
IC8vIFRlc3QgUGF0dGVybjogZCA9IChtYXNrICYgbikgPDwgbHNiIAorICAgIC8vIFdoZXJlOiBt
YXNrID0gKDEgPDwgd2lkdGgpIC0gMQorICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09w
dExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgdWludDMyX3QgbiA9IDB4ZmZmZmZm
ZmY7CisgICAgVmVjdG9yPHVpbnQzMl90PiBsc2JzID0geyAxLCAxNCwgMzAgfTsKKyAgICBWZWN0
b3I8dWludDMyX3Q+IHdpZHRocyA9IHsgMzAsIDE3LCAxIH07CisKKyAgICBhdXRvIHRlc3QgPSBb
Jl0gKHVpbnQzMl90IGxzYiwgdWludDMyX3QgbWFzaykgLT4gdWludDMyX3QgeworICAgICAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2so
KTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCkpOworICAgICAgICBWYWx1ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNrKTsKKwor
ICAgICAgICBWYWx1ZSogbGVmdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5k
LCBPcmlnaW4oKSwgbWFza1ZhbHVlLCBuVmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdD
b250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBsZWZ0LCBs
c2JWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAg
ICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNv
ZGUsICJ1YmZpeiIpOworICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQzMl90PigqY29kZSwgbik7
CisgICAgfTsKKworICAgIGF1dG8gZ2VuZXJhdGVNYXNrID0gWyZdICh1aW50MzJfdCB3aWR0aCkg
LT4gdWludDMyX3QgeworICAgICAgICByZXR1cm4gKDFVIDw8IHdpZHRoKSAtIDFVOworICAgIH07
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxzYnMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgdWludDMyX3QgbHNiID0gbHNicy5hdChpKTsKKyAgICAgICAgdWludDMyX3QgbWFzayA9IGdl
bmVyYXRlTWFzayh3aWR0aHMuYXQoaSkpOworICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgbWFzaykg
PT0gKChtYXNrICYgbikgPDwgbHNiKSk7CisgICAgfQorfQorCit2b2lkIHRlc3RVYmZpejMyU2hp
ZnRBbmQoKQoreworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IChuIDw8IGxzYikgJiBtYXNrU2hp
ZnQKKyAgICAvLyBXaGVyZTogbWFza1NoaWZ0ID0gbWFzayA8PCBsc2IKKyAgICAvLyAgICAgICAg
bWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIHVpbnQzMl90IG4gPSAweGZmZmZm
ZmZmOworICAgIFZlY3Rvcjx1aW50MzJfdD4gbHNicyA9IHsgMSwgMTQsIDMwIH07CisgICAgVmVj
dG9yPHVpbnQzMl90PiB3aWR0aHMgPSB7IDMwLCAxNywgMSB9OworCisgICAgYXV0byB0ZXN0ID0g
WyZdICh1aW50MzJfdCBsc2IsIHVpbnQzMl90IG1hc2tTaGlmdCkgLT4gdWludDMyX3QgeworICAg
ICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2tT
aGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IG1hc2tTaGlmdCk7CisKKyAgICAgICAgVmFsdWUqIGxlZnQgPSByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIFNobCwgT3JpZ2luKCksIG5WYWx1ZSwgbHNiVmFsdWUpOworICAgICAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9y
aWdpbigpLCBsZWZ0LCBtYXNrU2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hl
Y2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1YmZpeiIpOworICAgICAgICByZXR1cm4gaW52b2tl
PHVpbnQzMl90PigqY29kZSwgbik7CisgICAgfTsKKworICAgIGF1dG8gZ2VuZXJhdGVNYXNrU2hp
ZnQgPSBbJl0gKHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBsc2IpIC0+IHVpbnQzMl90IHsKKyAg
ICAgICAgcmV0dXJuICgoMVUgPDwgd2lkdGgpIC0gMVUpIDw8IGxzYjsKKyAgICB9OworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVpbnQz
Ml90IGxzYiA9IGxzYnMuYXQoaSk7CisgICAgICAgIHVpbnQzMl90IG1hc2tTaGlmdCA9IGdlbmVy
YXRlTWFza1NoaWZ0KHdpZHRocy5hdChpKSwgbHNiKTsKKyAgICAgICAgQ0hFQ0sodGVzdChsc2Is
IG1hc2tTaGlmdCkgPT0gKChuIDw8IGxzYikgJiBtYXNrU2hpZnQpKTsKKyAgICB9Cit9CisKK3Zv
aWQgdGVzdFViZml6MzJBbmRTaGlmdCgpCit7CisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbWFz
a1NoaWZ0ICYgKG4gPDwgbHNiKQorICAgIC8vIFdoZXJlOiBtYXNrU2hpZnQgPSBtYXNrIDw8IGxz
YgorICAgIC8vICAgICAgICBtYXNrID0gKDEgPDwgd2lkdGgpIC0gMQorICAgIGlmIChKU0M6Ok9w
dGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgdWlu
dDMyX3QgbiA9IDB4ZmZmZmZmZmY7CisgICAgVmVjdG9yPHVpbnQzMl90PiBsc2JzID0geyAxLCAx
NCwgMzAgfTsKKyAgICBWZWN0b3I8dWludDMyX3Q+IHdpZHRocyA9IHsgMzAsIDE3LCAxIH07CisK
KyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IGxzYiwgdWludDMyX3QgbWFza1NoaWZ0KSAt
PiB1aW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAK
KyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsc2IpOworICAg
ICAgICBWYWx1ZSogbWFza1NoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgbWFza1NoaWZ0KTsKKworICAgICAgICBWYWx1ZSogcmlnaHQgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIG5WYWx1ZSwgbHNiVmFs
dWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBtYXNrU2hpZnRWYWx1ZSwgcmlnaHQpKTsKKworICAg
ICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQo
KSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAidWJmaXoiKTsKKyAg
ICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIG4pOworICAgIH07CisKKyAgICBh
dXRvIGdlbmVyYXRlTWFza1NoaWZ0ID0gWyZdICh1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgbHNi
KSAtPiB1aW50MzJfdCB7CisgICAgICAgIHJldHVybiAoKDFVIDw8IHdpZHRoKSAtIDFVKSA8PCBs
c2I7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbHNicy5zaXplKCk7ICsr
aSkgeworICAgICAgICB1aW50MzJfdCBsc2IgPSBsc2JzLmF0KGkpOworICAgICAgICB1aW50MzJf
dCBtYXNrU2hpZnQgPSBnZW5lcmF0ZU1hc2tTaGlmdCh3aWR0aHMuYXQoaSksIGxzYik7CisgICAg
ICAgIENIRUNLKHRlc3QobHNiLCBtYXNrU2hpZnQpID09IChtYXNrU2hpZnQgJiAobiA8PCBsc2Ip
KSk7CisgICAgfQorfQorCit2b2lkIHRlc3RVYmZpejY0QW5kU2hpZnRWYWx1ZU1hc2soKQorewor
ICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IChuICYgbWFzaykgPDwgbHNiIAorICAgIC8vIFdoZXJl
OiBtYXNrID0gKDEgPDwgd2lkdGgpIC0gMQorICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRC
M09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgdWludDY0X3QgbiA9IDB4ZmZm
ZmZmZmZmZmZmZmZmZjsKKyAgICBWZWN0b3I8dWludDY0X3Q+IGxzYnMgPSB7IDEsIDMwLCA2MiB9
OworICAgIFZlY3Rvcjx1aW50NjRfdD4gd2lkdGhzID0geyA2MiwgMzMsIDEgfTsKKworICAgIGF1
dG8gdGVzdCA9IFsmXSAodWludDY0X3QgbHNiLCB1aW50NjRfdCBtYXNrKSAtPiB1aW50NjRfdCB7
CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CisgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBsc2IpOworICAgICAgICBWYWx1ZSogbWFza1ZhbHVlID0gcm9vdC0+
YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2spOworCisgICAgICAg
IFZhbHVlKiBsZWZ0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdp
bigpLCBuVmFsdWUsIG1hc2tWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIGxlZnQsIGxzYlZhbHVl
KSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlm
IChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInVi
Zml6Iik7CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDY0X3Q+KCpjb2RlLCBuKTsKKyAgICB9
OworCisgICAgYXV0byBnZW5lcmF0ZU1hc2sgPSBbJl0gKHVpbnQ2NF90IHdpZHRoKSAtPiB1aW50
NjRfdCB7CisgICAgICAgIHJldHVybiAoMVVMTCA8PCB3aWR0aCkgLSAxVUxMOworICAgIH07CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxzYnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
dWludDY0X3QgbHNiID0gbHNicy5hdChpKTsKKyAgICAgICAgdWludDY0X3QgbWFzayA9IGdlbmVy
YXRlTWFzayh3aWR0aHMuYXQoaSkpOworICAgICAgICBDSEVDSyh0ZXN0KGxzYiwgbWFzaykgPT0g
KChuICYgbWFzaykgPDwgbHNiKSk7CisgICAgfQorfQorCit2b2lkIHRlc3RVYmZpejY0QW5kU2hp
ZnRNYXNrVmFsdWUoKQoreworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IChtYXNrICYgbikgPDwg
bHNiIAorICAgIC8vIFdoZXJlOiBtYXNrID0gKDEgPDwgd2lkdGgpIC0gMQorICAgIGlmIChKU0M6
Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAg
dWludDY0X3QgbiA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsKKyAgICBWZWN0b3I8dWludDY0X3Q+IGxz
YnMgPSB7IDEsIDMwLCA2MiB9OworICAgIFZlY3Rvcjx1aW50NjRfdD4gd2lkdGhzID0geyA2Miwg
MzMsIDEgfTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDY0X3QgbHNiLCB1aW50NjRfdCBt
YXNrKSAtPiB1aW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUg
PSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsc2IpOworICAgICAgICBWYWx1ZSog
bWFza1ZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IG1hc2spOworCisgICAgICAgIFZhbHVlKiBsZWZ0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBCaXRBbmQsIE9yaWdpbigpLCBtYXNrVmFsdWUsIG5WYWx1ZSk7CisgICAgICAgIHJvb3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2lu
KCksIGxlZnQsIGxzYlZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0
cnVjdGlvbigqY29kZSwgInViZml6Iik7CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDY0X3Q+
KCpjb2RlLCBuKTsKKyAgICB9OworCisgICAgYXV0byBnZW5lcmF0ZU1hc2sgPSBbJl0gKHVpbnQ2
NF90IHdpZHRoKSAtPiB1aW50NjRfdCB7CisgICAgICAgIHJldHVybiAoMVVMTCA8PCB3aWR0aCkg
LSAxVUxMOworICAgIH07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxzYnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgdWludDY0X3QgbHNiID0gbHNicy5hdChpKTsKKyAgICAgICAgdWlu
dDY0X3QgbWFzayA9IGdlbmVyYXRlTWFzayh3aWR0aHMuYXQoaSkpOworICAgICAgICBDSEVDSyh0
ZXN0KGxzYiwgbWFzaykgPT0gKChtYXNrICYgbikgPDwgbHNiKSk7CisgICAgfQorfQorCit2b2lk
IHRlc3RVYmZpejY0U2hpZnRBbmQoKQoreworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IChuIDw8
IGxzYikgJiBtYXNrU2hpZnQKKyAgICAvLyBXaGVyZTogbWFza1NoaWZ0ID0gbWFzayA8PCBsc2IK
KyAgICAvLyAgICAgICAgbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICBpZiAoSlNDOjpPcHRp
b25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIHVpbnQ2
NF90IG4gPSAweGZmZmZmZmZmZmZmZmZmZmY7CisgICAgVmVjdG9yPHVpbnQ2NF90PiBsc2JzID0g
eyAxLCAzMCwgNjIgfTsKKyAgICBWZWN0b3I8dWludDY0X3Q+IHdpZHRocyA9IHsgNjIsIDMzLCAx
IH07CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQ2NF90IGxzYiwgdWludDY0X3QgbWFza1No
aWZ0KSAtPiB1aW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUg
PSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsc2IpOworICAgICAgICBWYWx1ZSog
bWFza1NoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmln
aW4oKSwgbWFza1NoaWZ0KTsKKworICAgICAgICBWYWx1ZSogbGVmdCA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgblZhbHVlLCBsc2JWYWx1ZSk7CisgICAgICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwg
T3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFu
ZCwgT3JpZ2luKCksIGxlZnQsIG1hc2tTaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAg
ICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInViZml6Iik7CisgICAgICAgIHJldHVybiBp
bnZva2U8dWludDY0X3Q+KCpjb2RlLCBuKTsKKyAgICB9OworCisgICAgYXV0byBnZW5lcmF0ZU1h
c2tTaGlmdCA9IFsmXSAodWludDY0X3Qgd2lkdGgsIHVpbnQ2NF90IGxzYikgLT4gdWludDY0X3Qg
eworICAgICAgICByZXR1cm4gKCgxVUxMIDw8IHdpZHRoKSAtIDFVTEwpIDw8IGxzYjsKKyAgICB9
OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIHVpbnQ2NF90IGxzYiA9IGxzYnMuYXQoaSk7CisgICAgICAgIHVpbnQ2NF90IG1hc2tTaGlm
dCA9IGdlbmVyYXRlTWFza1NoaWZ0KHdpZHRocy5hdChpKSwgbHNiKTsKKyAgICAgICAgQ0hFQ0so
dGVzdChsc2IsIG1hc2tTaGlmdCkgPT0gKChuIDw8IGxzYikgJiBtYXNrU2hpZnQpKTsKKyAgICB9
Cit9CisKK3ZvaWQgdGVzdFViZml6NjRBbmRTaGlmdCgpCit7CisgICAgLy8gVGVzdCBQYXR0ZXJu
OiBkID0gbWFza1NoaWZ0ICYgKG4gPDwgbHNiKQorICAgIC8vIFdoZXJlOiBtYXNrU2hpZnQgPSBt
YXNrIDw8IGxzYgorICAgIC8vICAgICAgICBtYXNrID0gKDEgPDwgd2lkdGgpIC0gMQorICAgIGlm
IChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47
CisgICAgdWludDY0X3QgbiA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsKKyAgICBWZWN0b3I8dWludDY0
X3Q+IGxzYnMgPSB7IDEsIDMwLCA2MiB9OworICAgIFZlY3Rvcjx1aW50NjRfdD4gd2lkdGhzID0g
eyA2MiwgMzMsIDEgfTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDY0X3QgbHNiLCB1aW50
NjRfdCBtYXNrU2hpZnQpIC0+IHVpbnQ2NF90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFs
dWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgVmFsdWUqIGxzYlZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxzYik7CisgICAg
ICAgIFZhbHVlKiBtYXNrU2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KHByb2MsIE9yaWdpbigpLCBtYXNrU2hpZnQpOworCisgICAgICAgIFZhbHVlKiByaWdodCA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgblZhbHVlLCBsc2JWYWx1
ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG1hc2tTaGlmdFZhbHVlLCByaWdodCkpOworCisgICAg
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgp
KQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1YmZpeiIpOworICAg
ICAgICByZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgbik7CisgICAgfTsKKworICAgIGF1
dG8gZ2VuZXJhdGVNYXNrU2hpZnQgPSBbJl0gKHVpbnQ2NF90IHdpZHRoLCB1aW50NjRfdCBsc2Ip
IC0+IHVpbnQ2NF90IHsKKyAgICAgICAgcmV0dXJuICgoMVVMTCA8PCB3aWR0aCkgLSAxVUxMKSA8
PCBsc2I7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbHNicy5zaXplKCk7
ICsraSkgeworICAgICAgICB1aW50NjRfdCBsc2IgPSBsc2JzLmF0KGkpOworICAgICAgICB1aW50
NjRfdCBtYXNrU2hpZnQgPSBnZW5lcmF0ZU1hc2tTaGlmdCh3aWR0aHMuYXQoaSksIGxzYik7Cisg
ICAgICAgIENIRUNLKHRlc3QobHNiLCBtYXNrU2hpZnQpID09IChtYXNrU2hpZnQgJiAobiA8PCBs
c2IpKSk7CiAgICAgfQogfQogCkBAIC0yNzM0LDggKzMwODIsOCBAQCB2b2lkIHRlc3RCaXRBbmRa
ZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2szMigpCiAgICAgLy8gVHVybiB0aGlzOiAodG1wID4+IGlt
bSkgJiBtYXNrIAogICAgIC8vIEludG8gdGhpczogdG1wID4+IGltbQogICAgIHVpbnQzMl90IHRt
cCA9IDB4ZmZmZmZmZmY7Ci0gICAgVmVjdG9yPHVpbnQzMl90PiBpbW1zID0geyA0LCAyOCB9Owot
ICAgIFZlY3Rvcjx1aW50MzJfdD4gbWFza3MgPSB7IDB4MGZmZmZmZmYsIDB4ZiB9OworICAgIFZl
Y3Rvcjx1aW50MzJfdD4gaW1tcyA9IHsgNCwgMjgsIDMxIH07CisgICAgVmVjdG9yPHVpbnQzMl90
PiBtYXNrcyA9IHsgMHgwZmZmZmZmZiwgMHhmLCAweGZmZmYgfTsKIAogICAgIGF1dG8gdGVzdCA9
IFsmXSAodWludDMyX3QgaW1tLCB1aW50MzJfdCBtYXNrKSB7CiAgICAgICAgIFByb2NlZHVyZSBw
cm9jOwpAQCAtMjc1MiwxMSArMzEwMCw4IEBAIHZvaWQgdGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0
QXJnSW1tTWFzazMyKCkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
Qml0QW5kLCBPcmlnaW4oKSwgbGVmdFZhbHVlLCByaWdodFZhbHVlKSk7CiAKICAgICAgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7Ci0gICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAg
ICAgICAgaWYgKGlzQVJNNjQoKSkKICAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpj
b2RlLCAibHNyIik7Ci0gICAgICAgICAgICBjaGVja0RvZXNOb3RVc2VJbnN0cnVjdGlvbigqY29k
ZSwgImFuZCIpOwotICAgICAgICAgICAgY2hlY2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24oKmNvZGUs
ICJ1YmZ4Iik7Ci0gICAgICAgIH0KICAgICAgICAgdWludDMyX3QgbGhzID0gaW52b2tlPHVpbnQz
Ml90PigqY29kZSwgdG1wKTsKICAgICAgICAgdWludDMyX3QgcmhzID0gdG1wID4+IGltbTsKICAg
ICAgICAgQ0hFQ0sobGhzID09IHJocyk7CkBAIC0yNzcxLDggKzMxMTYsOCBAQCB2b2lkIHRlc3RC
aXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2s2NCgpCiAgICAgLy8gVHVybiB0aGlzOiAodG1w
ID4+IGltbSkgJiBtYXNrIAogICAgIC8vIEludG8gdGhpczogdG1wID4+IGltbQogICAgIHVpbnQ2
NF90IHRtcCA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsKLSAgICBWZWN0b3I8dWludDY0X3Q+IGltbXMg
PSB7IDQsIDYwIH07Ci0gICAgVmVjdG9yPHVpbnQ2NF90PiBtYXNrcyA9IHsgMHgwZmZmZmZmZmZm
ZmZmZmZmLCAweGYgfTsKKyAgICBWZWN0b3I8dWludDY0X3Q+IGltbXMgPSB7IDQsIDYwLCA2MyB9
OworICAgIFZlY3Rvcjx1aW50NjRfdD4gbWFza3MgPSB7IDB4MGZmZmZmZmZmZmZmZmZmZiwgMHhm
LCAweGZmZmYgfTsKIAogICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDY0X3QgaW1tLCB1aW50NjRf
dCBtYXNrKSB7CiAgICAgICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtMjc4NywxMSArMzEzMiw4IEBA
IHZvaWQgdGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazY0KCkKICAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbGVmdFZhbHVl
LCByaWdodFZhbHVlKSk7CiAKICAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
Ci0gICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKICAgICAg
ICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibHNyIik7Ci0gICAgICAgICAgICBj
aGVja0RvZXNOb3RVc2VJbnN0cnVjdGlvbigqY29kZSwgImFuZCIpOwotICAgICAgICAgICAgY2hl
Y2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1YmZ4Iik7Ci0gICAgICAgIH0KICAgICAg
ICAgdWludDY0X3QgbGhzID0gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgdG1wKTsKICAgICAgICAg
dWludDY0X3QgcmhzID0gdG1wID4+IGltbTsKICAgICAgICAgQ0hFQ0sobGhzID09IHJocyk7CkBA
IC0zNjE1LDEwICszOTU3LDE4IEBAIHN0YXRpYyB2b2lkIHRlc3RCaXRPckltbUFyZzMyKGludCBh
LCBpbnQgYikKIAogdm9pZCBhZGRCaXRUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYgdGFza3MpCiB7Ci0gICAgUlVOKHRlc3RVYmZ4MzIo
KSk7Ci0gICAgUlVOKHRlc3RVYmZ4MzJQYXR0ZXJuTWF0Y2goKSk7Ci0gICAgUlVOKHRlc3RVYmZ4
NjQoKSk7Ci0gICAgUlVOKHRlc3RVYmZ4NjRQYXR0ZXJuTWF0Y2goKSk7CisgICAgUlVOKHRlc3RV
YmZ4MzJTaGlmdEFuZCgpKTsKKyAgICBSVU4odGVzdFViZngzMkFuZFNoaWZ0KCkpOworICAgIFJV
Tih0ZXN0VWJmeDY0U2hpZnRBbmQoKSk7CisgICAgUlVOKHRlc3RVYmZ4NjRBbmRTaGlmdCgpKTsK
KyAgICBSVU4odGVzdFViZml6MzJBbmRTaGlmdFZhbHVlTWFzaygpKTsKKyAgICBSVU4odGVzdFVi
Zml6MzJBbmRTaGlmdE1hc2tWYWx1ZSgpKTsKKyAgICBSVU4odGVzdFViZml6MzJTaGlmdEFuZCgp
KTsKKyAgICBSVU4odGVzdFViZml6MzJBbmRTaGlmdCgpKTsKKyAgICBSVU4odGVzdFViZml6NjRB
bmRTaGlmdFZhbHVlTWFzaygpKTsKKyAgICBSVU4odGVzdFViZml6NjRBbmRTaGlmdE1hc2tWYWx1
ZSgpKTsKKyAgICBSVU4odGVzdFViZml6NjRTaGlmdEFuZCgpKTsKKyAgICBSVU4odGVzdFViZml6
NjRBbmRTaGlmdCgpKTsKICAgICBSVU4odGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFz
azMyKCkpOwogICAgIFJVTih0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrNjQoKSk7
CiAgICAgUlVOKHRlc3RCaXRBbmRBcmdzKDQzLCA0MykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvTWF0aEV4dHJhcy5oIGIvU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCmluZGV4IDAx
ZmUyMzZhMjE5ZTcwMTkxOWQyMmFmMGU3ZjQzY2FhMDU3YjliOWMuLjdhZGI4NzQyYThkZTk4MTM3
MjNlNTkyNTMyZjRhYTMwMTQ2NDg5ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01hdGhF
eHRyYXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKQEAgLTcyOCw2ICs3Mjgs
MjggQEAgY29uc3RleHByIHVuc2lnbmVkIGdldE1TQlNldENvbnN0ZXhwcihUIHQpCiAgICAgcmV0
dXJuIGJpdFNpemUgLSAxIC0gY2x6Q29uc3RleHByKHQpOwogfQogCitpbmxpbmUgc2l6ZV90IGNv
dW50VHJhaWxpbmdaZXJvcyh1aW50MzJfdCB2KQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBNb2QzN0JpdFBvc2l0aW9uW10gPSB7CisgICAgICAgIDMyLCAwLCAxLCAyNiwgMiwgMjMsIDI3
LCAwLCAzLCAxNiwgMjQsIDMwLCAyOCwgMTEsIDAsIDEzLAorICAgICAgICA0LCA3LCAxNywgMCwg
MjUsIDIyLCAzMSwgMTUsIDI5LCAxMCwgMTIsIDYsIDAsIDIxLCAxNCwgOSwKKyAgICAgICAgNSwg
MjAsIDgsIDE5LCAxOAorICAgIH07CisgICAgcmV0dXJuIE1vZDM3Qml0UG9zaXRpb25bKCgxICsg
fnYpICYgdikgJSAzN107Cit9CisKK2lubGluZSBzaXplX3QgY291bnRUcmFpbGluZ1plcm9zKHVp
bnQ2NF90IHYpCit7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE1vZDY3UG9zaXRpb25bXSA9
IHsKKyAgICAgICAgNjQsIDAsIDEsIDM5LCAyLCAxNSwgNDAsIDIzLCAzLCAxMiwgMTYsIDU5LCA0
MSwgMTksIDI0LCA1NCwKKyAgICAgICAgNCwgNjQsIDEzLCAxMCwgMTcsIDYyLCA2MCwgMjgsIDQy
LCAzMCwgMjAsIDUxLCAyNSwgNDQsIDU1LAorICAgICAgICA0NywgNSwgMzIsIDY1LCAzOCwgMTQs
IDIyLCAxMSwgNTgsIDE4LCA1MywgNjMsIDksIDYxLCAyNywKKyAgICAgICAgMjksIDUwLCA0Mywg
NDYsIDMxLCAzNywgMjEsIDU3LCA1MiwgOCwgMjYsIDQ5LCA0NSwgMzYsIDU2LAorICAgICAgICA3
LCA0OCwgMzUsIDYsIDM0LCAzMywgMAorICAgIH07CisgICAgcmV0dXJuIE1vZDY3UG9zaXRpb25b
KCgxICsgfnYpICYgdikgJSA2N107Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBX
VEY6OnNodWZmbGVWZWN0b3I7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>