<?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>212190</bug_id>
          
          <creation_ts>2020-05-20 23:56:27 -0700</creation_ts>
          <short_desc>Add more Bitmap methods.</short_desc>
          <delta_ts>2020-05-27 11:26:58 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>rmorisset</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1654818</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-20 23:56:27 -0700</bug_when>
    <thetext>Specifically,
    setEachNthBit - sets every Nth bit starting at a specified start bit
    operator=     - assignment
    operator|=    - bit or and assignment
    operator&amp;=    - bit and and assignment
    operator^=    - bit xor and assignment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654819</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-20 23:56:56 -0700</bug_when>
    <thetext>&lt;rdar://problem/63481333&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654821</commentid>
    <comment_count>2</comment_count>
      <attachid>399939</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-21 00:02:26 -0700</bug_when>
    <thetext>Created attachment 399939
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654998</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-21 10:54:00 -0700</bug_when>
    <thetext>What do you plan to do with these?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655001</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-21 11:01:04 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #3)
&gt; What do you plan to do with these?

I&apos;m exploring implementing a MarkedBlock FreeList using Bitmap instead of a linked list of FreeCells.  For that purpose, computation of which block atoms are free is done using bit math on Marked bits, NewlyAllocated bits, and some other mask.  The setEachNthBit() method is needed to make the other mask.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655018</commentid>
    <comment_count>5</comment_count>
      <attachid>399939</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2020-05-21 11:45:46 -0700</bug_when>
    <thetext>Comment on attachment 399939
proposed patch.

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

r=me, with a couple of suggestions for the tests.

&gt; Tools/TestWebKitAPI/Tests/WTF/Bitmap.cpp:1001
&gt; +    {

Is this block just the same as the one above except for s/size/smallsize/g ?
If so, is it possible to make it an helper function to avoid the repetition?

&gt; Tools/TestWebKitAPI/Tests/WTF/Bitmap.cpp:1093
&gt; +                temp.set(i, (randomNumber() &gt; 0.5));

I am not sure that a random number in a test is a great idea. It sounds like a recipe for flakiness/non-reproducibility.

&gt; Tools/TestWebKitAPI/Tests/WTF/Bitmap.cpp:1102
&gt; +    Bitmap&lt;smallSize, WordType&gt; smallTemp;

Same comment as above, maybe try merging the tests for smallSize and for size with a helper function.

&gt; Tools/TestWebKitAPI/Tests/WTF/Bitmap.cpp:1113
&gt; +                smallTemp.set(i, (randomNumber() &gt; 0.5));

see my comment above, I think it might be nicer to bake somewhere (at the top of the file?) an array with the random-looking values, instead of drawing them truly randomly at each execution.

&gt; Tools/TestWebKitAPI/Tests/WTF/Bitmap.cpp:1427
&gt; +        // 1 &amp; 0

typo: &amp; instead of ^

&gt; Tools/TestWebKitAPI/Tests/WTF/Bitmap.cpp:1434
&gt; +        // 1 &amp; 1

ditto.

&gt; Tools/TestWebKitAPI/Tests/WTF/Bitmap.cpp:1506
&gt; +        // 1 &amp; 0

ditto.

&gt; Tools/TestWebKitAPI/Tests/WTF/Bitmap.cpp:1513
&gt; +        // 1 &amp; 1

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655034</commentid>
    <comment_count>6</comment_count>
      <attachid>399939</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-21 12:44:06 -0700</bug_when>
    <thetext>Comment on attachment 399939
proposed patch.

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

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/Bitmap.cpp:1001
&gt;&gt; +    {
&gt; 
&gt; Is this block just the same as the one above except for s/size/smallsize/g ?
&gt; If so, is it possible to make it an helper function to avoid the repetition?

Not identical because of the different data sets used.  Also I don&apos;t have predetermined data sets for the smallSize case.  So, I&apos;m using randomNumber to generate them in some of the cases below where needed.  I can look into refactoring this.

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/Bitmap.cpp:1427
&gt;&gt; +        // 1 &amp; 0
&gt; 
&gt; typo: &amp; instead of ^

Thanks fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655083</commentid>
    <comment_count>7</comment_count>
      <attachid>399981</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-21 14:36:32 -0700</bug_when>
    <thetext>Created attachment 399981
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655087</commentid>
    <comment_count>8</comment_count>
      <attachid>399981</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2020-05-21 14:43:21 -0700</bug_when>
    <thetext>Comment on attachment 399981
patch for landing.

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

Thanks for improving the tests!

&gt; Tools/TestWebKitAPI/Tests/WTF/Bitmap.cpp:29
&gt; +#include &lt;wtf/RandomNumber.h&gt;

No longer needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655088</commentid>
    <comment_count>9</comment_count>
      <attachid>399981</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-21 14:44:33 -0700</bug_when>
    <thetext>Comment on attachment 399981
patch for landing.

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

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/Bitmap.cpp:29
&gt;&gt; +#include &lt;wtf/RandomNumber.h&gt;
&gt; 
&gt; No longer needed.

Will remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655095</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-21 15:14:11 -0700</bug_when>
    <thetext>Thanks for the reviews.  Landed in r262030: &lt;http://trac.webkit.org/r262030&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656438</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-05-27 10:53:46 -0700</bug_when>
    <thetext>This introduced a nice GCC warning spam:

In file included from DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-2.cpp:5:
/home/mcatanzaro/Projects/WebKit/Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:194:16: warning: implicitly-declared ‘constexpr WTF::Bitmap&lt;4&gt;::Bitmap(const WTF::Bitmap&lt;4&gt;&amp;)’ is deprecated [-Wdeprecated-copy]
  194 |         return result;
      |                ^~~~~~

because:

DerivedSources/ForwardingHeaders/wtf/Bitmap.h:480:13: note: because ‘WTF::Bitmap&lt;4&gt;’ has user-provided ‘void WTF::Bitmap&lt;bitmapSize, WordType&gt;::operator=(const WTF::Bitmap&lt;bitmapSize, WordType&gt;&amp;) [with long unsigned int bitmapSize = 4; WordType = unsigned int]’
  480 | inline void Bitmap&lt;bitmapSize, WordType&gt;::operator=(const Bitmap&amp; other)
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

To avoid the warning, we should either (a) remove the copy assignment operator, or (b) add a copy constructor. Either way would be fine, but in this case I&apos;d prefer (a) because I don&apos;t think the new copy assignment operator is needed. It uses a loop to manually copy the bits of the sole member variable, a std::array, but a default copy of the array would be equivalent, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656461</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-05-27 11:26:58 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #11)
&gt; This introduced a nice GCC warning spam:

Created: bug #212421</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399939</attachid>
            <date>2020-05-21 00:02:26 -0700</date>
            <delta_ts>2020-05-21 14:36:32 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-212190.patch</filename>
            <type>text/plain</type>
            <size>24135</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjE5ODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDIwLTA1LTIwICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbW9yZSBCaXRtYXAgbWV0aG9kcy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjE5MAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNjM0ODEzMzM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgU3BlY2lmaWNhbGx5LAorICAgICAgICAgICAgc2V0RWFjaE50aEJp
dCAtIHNldHMgZXZlcnkgTnRoIGJpdCBzdGFydGluZyBhdCBhIHNwZWNpZmllZCBzdGFydCBiaXQK
KyAgICAgICAgICAgIG9wZXJhdG9yPSAgICAgLSBhc3NpZ25tZW50CisgICAgICAgICAgICBvcGVy
YXRvcnw9ICAgIC0gYml0IG9yIGFuZCBhc3NpZ25tZW50CisgICAgICAgICAgICBvcGVyYXRvciY9
ICAgIC0gYml0IGFuZCBhbmQgYXNzaWdubWVudAorICAgICAgICAgICAgb3BlcmF0b3JePSAgICAt
IGJpdCB4b3IgYW5kIGFzc2lnbm1lbnQKKworICAgICAgICAqIHd0Zi9CaXRtYXAuaDoKKwogMjAy
MC0wNS0yMCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBXS01vdXNlR2VzdHVyZVJlY29nbml6ZXIgc2hvdWxkIGJlIGltcGxlbWVudGVkIHdpdGhvdXQg
dXNpbmcgVUlLaXQgaW50ZXJuYWxzCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkocmV2aXNpb24gMjYxOTg0KQorKysg
U291cmNlL1dURi93dGYvQml0bWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCwxMCArMTE4LDE3
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIG1lcmdlQW5kQ2xlYXIoQml0bWFwJik7CiAgICAg
dm9pZCBzZXRBbmRDbGVhcihCaXRtYXAmKTsKLSAgICAKKworICAgIHZvaWQgc2V0RWFjaE50aEJp
dChzaXplX3Qgc3RhcnQsIHNpemVfdCBuKTsKKwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBC
aXRtYXAmKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQml0bWFwJikgY29uc3Q7
Ci0gICAgCisKKyAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBCaXRtYXAmKTsKKyAgICB2b2lkIG9w
ZXJhdG9yfD0oY29uc3QgQml0bWFwJik7CisgICAgdm9pZCBvcGVyYXRvciY9KGNvbnN0IEJpdG1h
cCYpOworICAgIHZvaWQgb3BlcmF0b3JePShjb25zdCBCaXRtYXAmKTsKKwogICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdDsKIAogcHJpdmF0ZToKQEAgLTQyMyw2ICs0MzAsMjcgQEAgaW5saW5lIHZv
aWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPgogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0
bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6
ZSwgV29yZFR5cGU+OjpzZXRFYWNoTnRoQml0KHNpemVfdCBzdGFydCwgc2l6ZV90IG4pCit7Cisg
ICAgc2l6ZV90IGluZGV4ID0gc3RhcnQ7CisgICAgc2l6ZV90IHdvcmRJbmRleCA9IGluZGV4IC8g
d29yZFNpemU7CisgICAgaW5kZXggPSBpbmRleCAtIHdvcmRJbmRleCAqIHdvcmRTaXplOworICAg
IHdoaWxlICh3b3JkSW5kZXggPCB3b3JkcykgeworICAgICAgICB3aGlsZSAoaW5kZXggPCB3b3Jk
U2l6ZSkgeworICAgICAgICAgICAgYml0c1t3b3JkSW5kZXhdIHw9IChvbmUgPDwgaW5kZXgpOwor
ICAgICAgICAgICAgaW5kZXggKz0gbjsKKyAgICAgICAgfQorICAgICAgICBpbmRleCAtPSB3b3Jk
U2l6ZTsKKyAgICAgICAgd29yZEluZGV4Kys7CisgICAgfQorICAgIGlmIGNvbnN0ZXhwciAoISEo
Yml0bWFwU2l6ZSAlIHdvcmRTaXplKSkgeworICAgICAgICBjb25zdGV4cHIgc2l6ZV90IHJlbWFp
bmluZ0JpdHMgPSBiaXRtYXBTaXplICUgd29yZFNpemU7CisgICAgICAgIGNvbnN0ZXhwciBXb3Jk
VHlwZSBtYXNrID0gKHN0YXRpY19jYXN0PFdvcmRUeXBlPigxKSA8PCByZW1haW5pbmdCaXRzKSAt
IDE7CisgICAgICAgIGJpdHNbd29yZHMgLSAxXSAmPSBtYXNrOworICAgIH0KK30KKwordGVtcGxh
dGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIGJvb2wgQml0
bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3I9PShjb25zdCBCaXRtYXAmIG90aGVy
KSBjb25zdAogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkgewpAQCAt
NDM5LDYgKzQ2NywzNCBAQCBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+
CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KK2lu
bGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9yPShjb25zdCBC
aXRtYXAmIG90aGVyKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkK
KyAgICAgICAgYml0c1tpXSA9IG90aGVyLmJpdHNbaV07Cit9CisKK3RlbXBsYXRlPHNpemVfdCBi
aXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KK2lubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBT
aXplLCBXb3JkVHlwZT46Om9wZXJhdG9yfD0oY29uc3QgQml0bWFwJiBvdGhlcikKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAgICAgIGJpdHNbaV0gfD0gb3Ro
ZXIuYml0c1tpXTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdv
cmRUeXBlPgoraW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0
b3ImPShjb25zdCBCaXRtYXAmIG90aGVyKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
d29yZHM7ICsraSkKKyAgICAgICAgYml0c1tpXSAmPSBvdGhlci5iaXRzW2ldOworfQorCit0ZW1w
bGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgdm9pZCBC
aXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRvcl49KGNvbnN0IEJpdG1hcCYgb3Ro
ZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAgICAgICBi
aXRzW2ldIF49IG90aGVyLmJpdHNbaV07Cit9CisKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXpl
LCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB1bnNpZ25lZCBCaXRtYXA8Yml0bWFwU2l6ZSwg
V29yZFR5cGU+OjpoYXNoKCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwpJbmRl
eDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNp
b24gMjYxOTg1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjEgQEAKKzIwMjAtMDUtMjAgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAg
ICAgIEFkZCBtb3JlIEJpdG1hcCBtZXRob2RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMTkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MzQ4
MTMzMz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGRlZCB0ZXN0IGNvdmVyYWdlIGZvciB0aGUgbmV3IFdURjo6Qml0bWFwIG1ldGhvZHMuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CaXRtYXAuY3BwOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6dGVzdEJpdG1hcFNldEVhY2hOdGhCaXQpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6dGVzdEJpdG1hcE9wZXJhdG9yQXNzaWdubWVudCk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjp0ZXN0Qml0bWFwT3BlcmF0b3JCaXRPckFzc2lnbm1lbnQpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6dGVzdEJpdG1hcE9wZXJhdG9yQml0QW5kQXNzaWdubWVudCk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjp0ZXN0Qml0bWFwT3BlcmF0b3JCaXRYb3JBc3NpZ25tZW50KToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDIwLTA1LTIwICBTaW1vbiBGcmFzZXIgIDxz
aW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFttYWNPU10gU2Nyb2xsaW5nIHN5bmNo
cm9uaXphdGlvbiBwYXJ0IDE6IEhhdmUgdGhlIHNjcm9sbGluZyB0aHJlYWQgd2FpdCBoYWxmIGEg
ZnJhbWUgZm9yIHRoZSBtYWluIHRocmVhZCB0byBjb21wbGV0ZSB0aGUgcmVuZGVyaW5nIHVwZGF0
ZQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQml0bWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CaXRtYXAuY3BwCShyZXZpc2lv
biAyNjE5ODQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CaXRtYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSA8d3RmL0JpdG1hcC5oPgogCisjaW5jbHVkZSA8d3RmL1JhbmRvbU51bWJlci5oPgorCiBu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIGNvbnN0ZXhwciBzaXplX3Qgc2l6ZSA9IDEyODsK
QEAgLTk2MSw2ICs5NjMsNzQgQEAgdm9pZCB0ZXN0Qml0bWFwU2V0QW5kQ2xlYXIoKQogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBXb3JkVHlwZT4KK3ZvaWQgdGVzdEJpdG1hcFNldEVhY2hOdGhCaXQo
KQoreworICAgIERFQ0xBUkVfQU5EX0lOSVRfQklUTUFQU19GT1JfVEVTVCgpOworCisgICAgewor
ICAgICAgICBCaXRtYXA8c2l6ZSwgV29yZFR5cGU+IHRlbXA7CisgICAgICAgIGNvbnN0ZXhwciBz
aXplX3Qgd29yZFNpemUgPSBzaXplb2YoV29yZFR5cGUpICogODsKKworICAgICAgICBFWFBFQ1Rf
VFJVRSh0ZW1wID09IGJpdG1hcDApOworICAgICAgICB0ZW1wLnNldEVhY2hOdGhCaXQoMCwgMSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwRmlsbGVkKTsKKworICAgICAgICBz
aXplX3QgblZhbHVlc1tdID0geyAxLCAyLCB3b3JkU2l6ZSAvIDIsIHdvcmRTaXplIC0gMSwgd29y
ZFNpemUsIHNpemUgLyAyLCBzaXplIC0gMSwgc2l6ZSB9OworICAgICAgICBzaXplX3QgblZhbHVl
c0NvdW50ID0gc2l6ZW9mKG5WYWx1ZXMpIC8gc2l6ZW9mKG5WYWx1ZXNbMF0pOworCisgICAgICAg
IGZvciAoc2l6ZV90IHN0YXJ0ID0gMDsgc3RhcnQgPCB3b3JkU2l6ZTsgKytzdGFydCkgeworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBuVmFsdWVzQ291bnQ7ICsraikgeworICAg
ICAgICAgICAgICAgIHNpemVfdCBuID0gblZhbHVlc1tqXTsKKyAgICAgICAgICAgICAgICB0ZW1w
LmNsZWFyQWxsKCk7CisgICAgICAgICAgICAgICAgdGVtcC5zZXRFYWNoTnRoQml0KHN0YXJ0LCBu
KTsKKworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhcnQ7ICsraSkK
KyAgICAgICAgICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHRlbXAuZ2V0KGkpKTsKKworICAgICAg
ICAgICAgICAgIHNpemVfdCBjb3VudCA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IHN0YXJ0OyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZXhw
ZWN0ZWQgPSAhY291bnQ7CisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAuZ2V0
KGkpID09IGV4cGVjdGVkKTsKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAg
ICAgICAgICAgICAgY291bnQgPSBjb3VudCAlIG47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBCaXRtYXA8c21hbGxT
aXplLCBXb3JkVHlwZT4gdGVtcDsKKyAgICAgICAgY29uc3RleHByIHNpemVfdCB3b3JkU2l6ZSA9
IHNpemVvZihXb3JkVHlwZSkgKiA4OworCisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0
bWFwU21hbGxaZXJvZWQpOworICAgICAgICB0ZW1wLnNldEVhY2hOdGhCaXQoMCwgMSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwU21hbGxGaWxsZWQpOworCisgICAgICAgIHNp
emVfdCBuVmFsdWVzW10gPSB7IDEsIDIsIHdvcmRTaXplIC8gMiwgd29yZFNpemUgLSAxLCB3b3Jk
U2l6ZSwgc21hbGxTaXplIC8gMiwgc21hbGxTaXplIC0gMSwgc21hbGxTaXplIH07CisgICAgICAg
IHNpemVfdCBuVmFsdWVzQ291bnQgPSBzaXplb2YoblZhbHVlcykgLyBzaXplb2YoblZhbHVlc1sw
XSk7CisKKyAgICAgICAgZm9yIChzaXplX3Qgc3RhcnQgPSAwOyBzdGFydCA8IHdvcmRTaXplOyAr
K3N0YXJ0KSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG5WYWx1ZXNDb3Vu
dDsgKytqKSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IG4gPSBuVmFsdWVzW2pdOworICAgICAg
ICAgICAgICAgIHRlbXAuY2xlYXJBbGwoKTsKKyAgICAgICAgICAgICAgICB0ZW1wLnNldEVhY2hO
dGhCaXQoc3RhcnQsIG4pOworCisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdGFydDsgKytpKQorICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfRkFMU0UodGVtcC5nZXQo
aSkpOworCisgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gc3RhcnQ7IGkgPCBzbWFsbFNpemU7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICBib29sIGV4cGVjdGVkID0gIWNvdW50OworICAgICAgICAgICAgICAgICAgICBF
WFBFQ1RfVFJVRSh0ZW1wLmdldChpKSA9PSBleHBlY3RlZCk7CisgICAgICAgICAgICAgICAgICAg
IGNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gY291bnQgJSBuOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgV29yZFR5cGU+CiB2b2lkIHRlc3RCaXRtYXBPcGVyYXRvckVxdWFsKCkKIHsK
ICAgICBERUNMQVJFX0FORF9JTklUX0JJVE1BUFNfRk9SX1RFU1QoKTsKQEAgLTk5MSw2ICsxMDYx
LDQ4OSBAQCB2b2lkIHRlc3RCaXRtYXBPcGVyYXRvck5vdEVxdWFsKCkKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgV29yZFR5cGU+Cit2b2lkIHRlc3RCaXRtYXBPcGVyYXRvckFzc2lnbm1lbnQoKQor
eworICAgIERFQ0xBUkVfQU5EX0lOSVRfQklUTUFQU19GT1JfVEVTVCgpOworCisgICAgQml0bWFw
PHNpemUsIFdvcmRUeXBlPiB0ZW1wOworICAgIEJpdG1hcDxzaXplLCBXb3JkVHlwZT4gdGVtcDI7
CisgICAgRVhQRUNUX1RSVUUodGVtcC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKHRlbXAy
LmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IGJpdG1hcDApOworICAgIEVY
UEVDVF9UUlVFKHRlbXAgIT0gYml0bWFwMSk7CisKKyAgICB0ZW1wID0gYml0bWFwMTsKKyAgICBF
WFBFQ1RfVFJVRSh0ZW1wICE9IGJpdG1hcDApOworICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0
bWFwMSk7CisKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wICE9IGJpdG1hcDIpOworICAgIHRlbXAgPSBi
aXRtYXAyOworICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwMik7CisgICAgRVhQRUNUX1RS
VUUodGVtcCAhPSBiaXRtYXAxKTsKKworICAgIGZvciAoaW50IGogPSAwOyBqIDwgNTsgKytqKSB7
CisgICAgICAgIHRlbXAuY2xlYXJBbGwoKTsKKyAgICAgICAgdGVtcDIuY2xlYXJBbGwoKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUodGVtcC5pc0VtcHR5KCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0
ZW1wMi5pc0VtcHR5KCkpOworCisgICAgICAgIHdoaWxlICh0ZW1wLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICAg
ICAgdGVtcC5zZXQoaSwgKHJhbmRvbU51bWJlcigpID4gMC41KSk7CisgICAgICAgIH0KKworICAg
ICAgICBFWFBFQ1RfVFJVRSh0ZW1wMiAhPSB0ZW1wKTsKKyAgICAgICAgV1RGOjpjb21waWxlckZl
bmNlKCk7CisgICAgICAgIHRlbXAyID0gdGVtcDsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcDIg
PT0gdGVtcCk7CisgICAgfQorCisgICAgQml0bWFwPHNtYWxsU2l6ZSwgV29yZFR5cGU+IHNtYWxs
VGVtcDsKKyAgICBCaXRtYXA8c21hbGxTaXplLCBXb3JkVHlwZT4gc21hbGxUZW1wMjsKKworICAg
IGZvciAoaW50IGogPSAwOyBqIDwgNTsgKytqKSB7CisgICAgICAgIHNtYWxsVGVtcC5jbGVhckFs
bCgpOworICAgICAgICBzbWFsbFRlbXAyLmNsZWFyQWxsKCk7CisgICAgICAgIEVYUEVDVF9UUlVF
KHNtYWxsVGVtcC5pc0VtcHR5KCkpOworICAgICAgICBFWFBFQ1RfVFJVRShzbWFsbFRlbXAyLmlz
RW1wdHkoKSk7CisKKyAgICAgICAgd2hpbGUgKHNtYWxsVGVtcC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc21hbGxTaXplOyArK2kpCisgICAgICAgICAg
ICAgICAgc21hbGxUZW1wLnNldChpLCAocmFuZG9tTnVtYmVyKCkgPiAwLjUpKTsKKyAgICAgICAg
fQorICAgICAgICBFWFBFQ1RfVFJVRShzbWFsbFRlbXAyICE9IHNtYWxsVGVtcCk7CisgICAgICAg
IFdURjo6Y29tcGlsZXJGZW5jZSgpOworICAgICAgICBzbWFsbFRlbXAyID0gc21hbGxUZW1wOwor
ICAgICAgICBFWFBFQ1RfVFJVRShzbWFsbFRlbXAyID09IHNtYWxsVGVtcCk7CisgICAgfQorfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBXb3JkVHlwZT4KK3ZvaWQgdGVzdEJpdG1hcE9wZXJhdG9yQml0
T3JBc3NpZ25tZW50KCkKK3sKKyAgICBERUNMQVJFX0FORF9JTklUX0JJVE1BUFNfRk9SX1RFU1Qo
KTsKKworICAgIHsKKyAgICAgICAgQml0bWFwPHNpemUsIFdvcmRUeXBlPiB0ZW1wOworICAgICAg
ICBCaXRtYXA8c2l6ZSwgV29yZFR5cGU+IHRlbXAxOworCisgICAgICAgIC8vIDAgfCAwCisgICAg
ICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwMCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRl
bXAgIT0gYml0bWFwRmlsbGVkKTsKKyAgICAgICAgdGVtcCB8PSBiaXRtYXAwOworICAgICAgICBF
WFBFQ1RfVFJVRSh0ZW1wID09IGJpdG1hcDApOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wICE9
IGJpdG1hcEZpbGxlZCk7CisKKyAgICAgICAgLy8gMCB8IDEKKyAgICAgICAgRVhQRUNUX1RSVUUo
dGVtcCA9PSBiaXRtYXAwKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXBGaWxs
ZWQpOworICAgICAgICB0ZW1wIHw9IGJpdG1hcEZpbGxlZDsKKyAgICAgICAgRVhQRUNUX1RSVUUo
dGVtcCAhPSBiaXRtYXAwKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBiaXRtYXBGaWxs
ZWQpOworCisgICAgICAgIC8vIDEgfCAwCisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gYml0
bWFwMCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwRmlsbGVkKTsKKyAgICAg
ICAgdGVtcCB8PSBiaXRtYXAwOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wICE9IGJpdG1hcDAp
OworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IGJpdG1hcEZpbGxlZCk7CisKKyAgICAgICAg
Ly8gMSB8IDEKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXAwKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUodGVtcCA9PSBiaXRtYXBGaWxsZWQpOworICAgICAgICB0ZW1wIHw9IGJpdG1h
cEZpbGxlZDsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXAwKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUodGVtcCA9PSBiaXRtYXBGaWxsZWQpOworCisgICAgICAgIHRlbXAuY2xlYXJB
bGwoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcC5pc0VtcHR5KCkpOworICAgICAgICBFWFBF
Q1RfVFJVRSh0ZW1wICE9IGJpdG1hcDEpOworICAgICAgICB0ZW1wIHw9IGJpdG1hcDE7CisgICAg
ICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwMSk7CisKKyAgICAgICAgdGVtcCB8PSBiaXRt
YXAyOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAg
ICAgIEVYUEVDVF9FUSh0ZW1wLmdldChpKSwgZXhwZWN0ZWRCaXRzMVtpXSB8IGV4cGVjdGVkQml0
czJbaV0pOworCisgICAgICAgIHRlbXAxID0gdGVtcDsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVt
cDEgPT0gdGVtcCk7CisKKyAgICAgICAgdGVtcCB8PSBiaXRtYXAwOworICAgICAgICBFWFBFQ1Rf
VFJVRSh0ZW1wID09IHRlbXAxKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXAw
KTsKKworICAgICAgICB0ZW1wIHw9IGJpdG1hcEZpbGxlZDsKKyAgICAgICAgRVhQRUNUX1RSVUUo
dGVtcCAhPSB0ZW1wMSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwRmlsbGVk
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEJpdG1hcDxzbWFsbFNpemUsIFdvcmRUeXBlPiB0
ZW1wOworICAgICAgICBCaXRtYXA8c21hbGxTaXplLCBXb3JkVHlwZT4gdGVtcDE7CisgICAgICAg
IEJpdG1hcDxzbWFsbFNpemUsIFdvcmRUeXBlPiB0ZW1wMjsKKyAgICAgICAgQml0bWFwPHNtYWxs
U2l6ZSwgV29yZFR5cGU+IHRlbXAzOworCisgICAgICAgIGF1dG8gaW5pdGlhbGl6ZVNtYWxsID0g
W10gKEJpdG1hcDxzbWFsbFNpemUsIFdvcmRUeXBlPiYgdGVtcCkgeworICAgICAgICAgICAgdGVt
cC5jbGVhckFsbCgpOworICAgICAgICAgICAgd2hpbGUgKHRlbXAuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzbWFsbFNpemU7ICsraSkKKyAgICAg
ICAgICAgICAgICAgICAgdGVtcC5zZXQoaSwgKHJhbmRvbU51bWJlcigpID4gMC41KSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgLy8gTWFrZSBzb21lIHZhbHVlcyBmZXIg
dGhlIHRlc3RzIGJlbG93LgorICAgICAgICB3aGlsZSAodGVtcDEgPT0gdGVtcDIpIHsKKyAgICAg
ICAgICAgIGluaXRpYWxpemVTbWFsbCh0ZW1wMSk7CisgICAgICAgICAgICBpbml0aWFsaXplU21h
bGwodGVtcDIpOworICAgICAgICAgICAgdGVtcDMgPSB0ZW1wMTsKKyAgICAgICAgICAgIHRlbXAz
IHw9IHRlbXAyOworICAgICAgICAgICAgaWYgKHRlbXAzID09IGJpdG1hcFNtYWxsRmlsbGVkKSB7
CisgICAgICAgICAgICAgICAgdGVtcDEuY2xlYXJBbGwoKTsKKyAgICAgICAgICAgICAgICB0ZW1w
Mi5jbGVhckFsbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gMCB8
IDAKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBiaXRtYXBTbWFsbFplcm9lZCk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gYml0bWFwU21hbGxGaWxsZWQpOworICAgICAgICB0ZW1w
IHw9IGJpdG1hcFNtYWxsWmVyb2VkOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IGJpdG1h
cFNtYWxsWmVyb2VkKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXBTbWFsbEZp
bGxlZCk7CisKKyAgICAgICAgLy8gMCB8IDEKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBi
aXRtYXBTbWFsbFplcm9lZCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gYml0bWFwU21h
bGxGaWxsZWQpOworICAgICAgICB0ZW1wIHw9IGJpdG1hcFNtYWxsRmlsbGVkOworICAgICAgICBF
WFBFQ1RfVFJVRSh0ZW1wICE9IGJpdG1hcFNtYWxsWmVyb2VkKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUodGVtcCA9PSBiaXRtYXBTbWFsbEZpbGxlZCk7CisKKyAgICAgICAgLy8gMSB8IDAKKyAgICAg
ICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXBTbWFsbFplcm9lZCk7CisgICAgICAgIEVYUEVD
VF9UUlVFKHRlbXAgPT0gYml0bWFwU21hbGxGaWxsZWQpOworICAgICAgICB0ZW1wIHw9IGJpdG1h
cFNtYWxsWmVyb2VkOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wICE9IGJpdG1hcFNtYWxsWmVy
b2VkKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBiaXRtYXBTbWFsbEZpbGxlZCk7CisK
KyAgICAgICAgLy8gMSB8IDEKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXBTbWFs
bFplcm9lZCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwU21hbGxGaWxsZWQp
OworICAgICAgICB0ZW1wIHw9IGJpdG1hcFNtYWxsRmlsbGVkOworICAgICAgICBFWFBFQ1RfVFJV
RSh0ZW1wICE9IGJpdG1hcFNtYWxsWmVyb2VkKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCA9
PSBiaXRtYXBTbWFsbEZpbGxlZCk7CisKKyAgICAgICAgdGVtcC5jbGVhckFsbCgpOworICAgICAg
ICBFWFBFQ1RfVFJVRSh0ZW1wLmlzRW1wdHkoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAg
IT0gdGVtcDEpOworICAgICAgICB0ZW1wIHw9IHRlbXAxOworICAgICAgICBFWFBFQ1RfVFJVRSh0
ZW1wID09IHRlbXAxKTsKKworICAgICAgICB0ZW1wIHw9IHRlbXAyOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgIEVYUEVDVF9FUSh0ZW1wLmdl
dChpKSwgdGVtcDEuZ2V0KGkpIHwgdGVtcDIuZ2V0KGkpKTsKKworICAgICAgICB0ZW1wMyA9IHRl
bXA7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAzID09IHRlbXApOworCisgICAgICAgIHRlbXAg
fD0gYml0bWFwU21hbGxaZXJvZWQ7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gdGVtcDMp
OworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wICE9IGJpdG1hcFNtYWxsWmVyb2VkKTsKKworICAg
ICAgICB0ZW1wIHw9IGJpdG1hcFNtYWxsRmlsbGVkOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1w
ICE9IHRlbXAzKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBiaXRtYXBTbWFsbEZpbGxl
ZCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBXb3JkVHlwZT4KK3ZvaWQgdGVzdEJp
dG1hcE9wZXJhdG9yQml0QW5kQXNzaWdubWVudCgpCit7CisgICAgREVDTEFSRV9BTkRfSU5JVF9C
SVRNQVBTX0ZPUl9URVNUKCk7CisKKyAgICB7CisgICAgICAgIEJpdG1hcDxzaXplLCBXb3JkVHlw
ZT4gdGVtcDsKKyAgICAgICAgQml0bWFwPHNpemUsIFdvcmRUeXBlPiB0ZW1wMTsKKworICAgICAg
ICAvLyAwICYgMAorICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IGJpdG1hcDApOworICAgICAg
ICBFWFBFQ1RfVFJVRSh0ZW1wICE9IGJpdG1hcEZpbGxlZCk7CisgICAgICAgIHRlbXAgJj0gYml0
bWFwMDsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBiaXRtYXAwKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUodGVtcCAhPSBiaXRtYXBGaWxsZWQpOworCisgICAgICAgIC8vIDAgJiAxCisgICAg
ICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwMCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRl
bXAgIT0gYml0bWFwRmlsbGVkKTsKKyAgICAgICAgdGVtcCAmPSBiaXRtYXBGaWxsZWQ7CisgICAg
ICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwMCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRl
bXAgIT0gYml0bWFwRmlsbGVkKTsKKworICAgICAgICAvLyAxICYgMAorICAgICAgICB0ZW1wLmlu
dmVydCgpOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wICE9IGJpdG1hcDApOworICAgICAgICBF
WFBFQ1RfVFJVRSh0ZW1wID09IGJpdG1hcEZpbGxlZCk7CisgICAgICAgIHRlbXAgJj0gYml0bWFw
MDsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBiaXRtYXAwKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUodGVtcCAhPSBiaXRtYXBGaWxsZWQpOworCisgICAgICAgIC8vIDEgJiAxCisgICAgICAg
IHRlbXAuaW52ZXJ0KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gYml0bWFwMCk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwRmlsbGVkKTsKKyAgICAgICAgdGVtcCAm
PSBiaXRtYXBGaWxsZWQ7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gYml0bWFwMCk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwRmlsbGVkKTsKKworICAgICAgICB0ZW1w
LmNsZWFyQWxsKCk7CisgICAgICAgIHRlbXAuaW52ZXJ0KCk7CisgICAgICAgIEVYUEVDVF9UUlVF
KHRlbXAgPT0gYml0bWFwRmlsbGVkKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRt
YXAxKTsKKyAgICAgICAgdGVtcCAmPSBiaXRtYXAxOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1w
ID09IGJpdG1hcDEpOworCisgICAgICAgIHRlbXAgJj0gYml0bWFwMjsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICBFWFBFQ1RfRVEodGVtcC5n
ZXQoaSksIGV4cGVjdGVkQml0czFbaV0gJiBleHBlY3RlZEJpdHMyW2ldKTsKKworICAgICAgICBF
WFBFQ1RfVFJVRSghdGVtcC5pc0VtcHR5KCkpOworICAgICAgICB0ZW1wMSA9IHRlbXA7CisgICAg
ICAgIEVYUEVDVF9UUlVFKHRlbXAxID09IHRlbXApOworCisgICAgICAgIHRlbXAgJj0gYml0bWFw
MDsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSB0ZW1wMSk7CisgICAgICAgIEVYUEVDVF9U
UlVFKHRlbXAgPT0gYml0bWFwMCk7CisKKyAgICAgICAgdGVtcCA9IHRlbXAxOworICAgICAgICB0
ZW1wICY9IGJpdG1hcEZpbGxlZDsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCA9PSB0ZW1wMSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gYml0bWFwRmlsbGVkKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIEJpdG1hcDxzbWFsbFNpemUsIFdvcmRUeXBlPiB0ZW1wOworICAgICAgICBC
aXRtYXA8c21hbGxTaXplLCBXb3JkVHlwZT4gdGVtcDE7CisgICAgICAgIEJpdG1hcDxzbWFsbFNp
emUsIFdvcmRUeXBlPiB0ZW1wMjsKKyAgICAgICAgQml0bWFwPHNtYWxsU2l6ZSwgV29yZFR5cGU+
IHRlbXAzOworCisgICAgICAgIGF1dG8gaW5pdGlhbGl6ZVNtYWxsID0gW10gKEJpdG1hcDxzbWFs
bFNpemUsIFdvcmRUeXBlPiYgdGVtcCkgeworICAgICAgICAgICAgdGVtcC5jbGVhckFsbCgpOwor
ICAgICAgICAgICAgd2hpbGUgKHRlbXAuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzbWFsbFNpemU7ICsraSkKKyAgICAgICAgICAgICAgICAgICAg
dGVtcC5zZXQoaSwgKHJhbmRvbU51bWJlcigpID4gMC41KSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisKKyAgICAgICAgLy8gTWFrZSBzb21lIHZhbHVlcyBmZXIgdGhlIHRlc3RzIGJlbG93
LgorICAgICAgICB3aGlsZSAodGVtcDEgPT0gdGVtcDIpIHsKKyAgICAgICAgICAgIGluaXRpYWxp
emVTbWFsbCh0ZW1wMSk7CisgICAgICAgICAgICBpbml0aWFsaXplU21hbGwodGVtcDIpOworICAg
ICAgICAgICAgdGVtcDMgPSB0ZW1wMTsKKyAgICAgICAgICAgIHRlbXAzICY9IHRlbXAyOworICAg
ICAgICAgICAgaWYgKHRlbXAzID09IGJpdG1hcFNtYWxsWmVyb2VkKSB7CisgICAgICAgICAgICAg
ICAgdGVtcDEuY2xlYXJBbGwoKTsKKyAgICAgICAgICAgICAgICB0ZW1wMi5jbGVhckFsbCgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gMCAmIDAKKyAgICAgICAgRVhQ
RUNUX1RSVUUodGVtcCA9PSBiaXRtYXBTbWFsbFplcm9lZCk7CisgICAgICAgIEVYUEVDVF9UUlVF
KHRlbXAgIT0gYml0bWFwU21hbGxGaWxsZWQpOworICAgICAgICB0ZW1wICY9IGJpdG1hcFNtYWxs
WmVyb2VkOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IGJpdG1hcFNtYWxsWmVyb2VkKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXBTbWFsbEZpbGxlZCk7CisKKyAgICAg
ICAgLy8gMCAmIDEKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBiaXRtYXBTbWFsbFplcm9l
ZCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gYml0bWFwU21hbGxGaWxsZWQpOworICAg
ICAgICB0ZW1wICY9IGJpdG1hcFNtYWxsRmlsbGVkOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1w
ID09IGJpdG1hcFNtYWxsWmVyb2VkKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRt
YXBTbWFsbEZpbGxlZCk7CisKKyAgICAgICAgLy8gMSAmIDAKKyAgICAgICAgdGVtcC5pbnZlcnQo
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXBTbWFsbFplcm9lZCk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwU21hbGxGaWxsZWQpOworICAgICAgICB0ZW1w
ICY9IGJpdG1hcFNtYWxsWmVyb2VkOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IGJpdG1h
cFNtYWxsWmVyb2VkKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXBTbWFsbEZp
bGxlZCk7CisKKyAgICAgICAgLy8gMSAmIDEKKyAgICAgICAgdGVtcC5pbnZlcnQoKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXBTbWFsbFplcm9lZCk7CisgICAgICAgIEVYUEVD
VF9UUlVFKHRlbXAgPT0gYml0bWFwU21hbGxGaWxsZWQpOworICAgICAgICB0ZW1wICY9IGJpdG1h
cFNtYWxsRmlsbGVkOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wICE9IGJpdG1hcFNtYWxsWmVy
b2VkKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBiaXRtYXBTbWFsbEZpbGxlZCk7CisK
KyAgICAgICAgdGVtcC5jbGVhckFsbCgpOworICAgICAgICB0ZW1wLmludmVydCgpOworICAgICAg
ICBFWFBFQ1RfVFJVRSh0ZW1wID09IGJpdG1hcFNtYWxsRmlsbGVkKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUodGVtcCAhPSB0ZW1wMSk7CisgICAgICAgIHRlbXAgJj0gdGVtcDE7CisgICAgICAgIEVY
UEVDVF9UUlVFKHRlbXAgIT0gYml0bWFwU21hbGxGaWxsZWQpOworICAgICAgICBFWFBFQ1RfVFJV
RSh0ZW1wID09IHRlbXAxKTsKKworICAgICAgICB0ZW1wICY9IHRlbXAyOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgIEVYUEVDVF9FUSh0ZW1w
LmdldChpKSwgdGVtcDEuZ2V0KGkpICYgdGVtcDIuZ2V0KGkpKTsKKworICAgICAgICB0ZW1wMyA9
IHRlbXA7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAzID09IHRlbXApOworCisgICAgICAgIHRl
bXAgJj0gYml0bWFwU21hbGxaZXJvZWQ7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gdGVt
cDMpOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IGJpdG1hcFNtYWxsWmVyb2VkKTsKKwor
ICAgICAgICB0ZW1wID0gdGVtcDM7CisgICAgICAgIHRlbXAgJj0gYml0bWFwU21hbGxGaWxsZWQ7
CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gdGVtcDMpOworICAgICAgICBFWFBFQ1RfVFJV
RSh0ZW1wICE9IGJpdG1hcFNtYWxsRmlsbGVkKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFdvcmRUeXBlPgordm9pZCB0ZXN0Qml0bWFwT3BlcmF0b3JCaXRYb3JBc3NpZ25tZW50KCkK
K3sKKyAgICBERUNMQVJFX0FORF9JTklUX0JJVE1BUFNfRk9SX1RFU1QoKTsKKworICAgIHsKKyAg
ICAgICAgQml0bWFwPHNpemUsIFdvcmRUeXBlPiB0ZW1wOworICAgICAgICBCaXRtYXA8c2l6ZSwg
V29yZFR5cGU+IHRlbXAxOworCisgICAgICAgIC8vIDAgXiAwCisgICAgICAgIEVYUEVDVF9UUlVF
KHRlbXAgPT0gYml0bWFwMCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gYml0bWFwRmls
bGVkKTsKKyAgICAgICAgdGVtcCBePSBiaXRtYXAwOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1w
ID09IGJpdG1hcDApOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wICE9IGJpdG1hcEZpbGxlZCk7
CisKKyAgICAgICAgLy8gMCBeIDEKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBiaXRtYXAw
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXBGaWxsZWQpOworICAgICAgICB0
ZW1wIF49IGJpdG1hcEZpbGxlZDsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXAw
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBiaXRtYXBGaWxsZWQpOworCisgICAgICAg
IC8vIDEgJiAwCisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gYml0bWFwMCk7CisgICAgICAg
IEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwRmlsbGVkKTsKKyAgICAgICAgdGVtcCBePSBiaXRt
YXAwOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wICE9IGJpdG1hcDApOworICAgICAgICBFWFBF
Q1RfVFJVRSh0ZW1wID09IGJpdG1hcEZpbGxlZCk7CisKKyAgICAgICAgLy8gMSAmIDEKKyAgICAg
ICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXAwKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVt
cCA9PSBiaXRtYXBGaWxsZWQpOworICAgICAgICB0ZW1wIF49IGJpdG1hcEZpbGxlZDsKKyAgICAg
ICAgRVhQRUNUX1RSVUUodGVtcCA9PSBiaXRtYXAwKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVt
cCAhPSBiaXRtYXBGaWxsZWQpOworCisgICAgICAgIHRlbXAuY2xlYXJBbGwoKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUodGVtcC5pc0VtcHR5KCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wICE9
IGJpdG1hcDEpOworICAgICAgICB0ZW1wIF49IGJpdG1hcDE7CisgICAgICAgIEVYUEVDVF9UUlVF
KHRlbXAgPT0gYml0bWFwMSk7CisKKyAgICAgICAgdGVtcCBePSBiaXRtYXAyOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgIEVYUEVDVF9FUSh0
ZW1wLmdldChpKSwgZXhwZWN0ZWRCaXRzMVtpXSBeIGV4cGVjdGVkQml0czJbaV0pOworCisgICAg
ICAgIHRlbXAxID0gdGVtcDsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcDEgPT0gdGVtcCk7CisK
KyAgICAgICAgdGVtcCBePSBiaXRtYXAwOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IHRl
bXAxKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXAwKTsKKworICAgICAgICB0
ZW1wIF49IGJpdG1hcEZpbGxlZDsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSB0ZW1wMSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gYml0bWFwRmlsbGVkKTsKKyAgICAgICAgdGVt
cDEuaW52ZXJ0KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gdGVtcDEpOworICAgICAg
ICBFWFBFQ1RfVFJVRSh0ZW1wICE9IGJpdG1hcEZpbGxlZCk7CisgICAgfQorCisgICAgeworICAg
ICAgICBCaXRtYXA8c21hbGxTaXplLCBXb3JkVHlwZT4gdGVtcDsKKyAgICAgICAgQml0bWFwPHNt
YWxsU2l6ZSwgV29yZFR5cGU+IHRlbXAxOworICAgICAgICBCaXRtYXA8c21hbGxTaXplLCBXb3Jk
VHlwZT4gdGVtcDI7CisgICAgICAgIEJpdG1hcDxzbWFsbFNpemUsIFdvcmRUeXBlPiB0ZW1wMzsK
KworICAgICAgICBhdXRvIGluaXRpYWxpemVTbWFsbCA9IFtdIChCaXRtYXA8c21hbGxTaXplLCBX
b3JkVHlwZT4mIHRlbXApIHsKKyAgICAgICAgICAgIHRlbXAuY2xlYXJBbGwoKTsKKyAgICAgICAg
ICAgIHdoaWxlICh0ZW1wLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc21hbGxTaXplOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHRlbXAuc2V0
KGksIChyYW5kb21OdW1iZXIoKSA+IDAuNSkpOworICAgICAgICAgICAgfQorICAgICAgICB9Owor
CisgICAgICAgIC8vIE1ha2Ugc29tZSB2YWx1ZXMgZmVyIHRoZSB0ZXN0cyBiZWxvdy4KKyAgICAg
ICAgd2hpbGUgKHRlbXAxID09IHRlbXAyKSB7CisgICAgICAgICAgICBpbml0aWFsaXplU21hbGwo
dGVtcDEpOworICAgICAgICAgICAgaW5pdGlhbGl6ZVNtYWxsKHRlbXAyKTsKKyAgICAgICAgICAg
IHRlbXAzID0gdGVtcDE7CisgICAgICAgICAgICB0ZW1wMyBePSB0ZW1wMjsKKyAgICAgICAgICAg
IGlmICh0ZW1wMyA9PSBiaXRtYXBTbWFsbFplcm9lZCB8fCB0ZW1wMyA9PSBiaXRtYXBTbWFsbEZp
bGxlZCkgeworICAgICAgICAgICAgICAgIHRlbXAxLmNsZWFyQWxsKCk7CisgICAgICAgICAgICAg
ICAgdGVtcDIuY2xlYXJBbGwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IC8vIDAgXiAwCisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwU21hbGxaZXJvZWQp
OworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wICE9IGJpdG1hcFNtYWxsRmlsbGVkKTsKKyAgICAg
ICAgdGVtcCBePSBiaXRtYXBTbWFsbFplcm9lZDsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCA9
PSBiaXRtYXBTbWFsbFplcm9lZCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gYml0bWFw
U21hbGxGaWxsZWQpOworCisgICAgICAgIC8vIDAgXiAxCisgICAgICAgIEVYUEVDVF9UUlVFKHRl
bXAgPT0gYml0bWFwU21hbGxaZXJvZWQpOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wICE9IGJp
dG1hcFNtYWxsRmlsbGVkKTsKKyAgICAgICAgdGVtcCBePSBiaXRtYXBTbWFsbEZpbGxlZDsKKyAg
ICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXBTbWFsbFplcm9lZCk7CisgICAgICAgIEVY
UEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwU21hbGxGaWxsZWQpOworCisgICAgICAgIC8vIDEgJiAw
CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gYml0bWFwU21hbGxaZXJvZWQpOworICAgICAg
ICBFWFBFQ1RfVFJVRSh0ZW1wID09IGJpdG1hcFNtYWxsRmlsbGVkKTsKKyAgICAgICAgdGVtcCBe
PSBiaXRtYXBTbWFsbFplcm9lZDsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXBT
bWFsbFplcm9lZCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwU21hbGxGaWxs
ZWQpOworCisgICAgICAgIC8vIDEgJiAxCisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gYml0
bWFwU21hbGxaZXJvZWQpOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IGJpdG1hcFNtYWxs
RmlsbGVkKTsKKyAgICAgICAgdGVtcCBePSBiaXRtYXBTbWFsbEZpbGxlZDsKKyAgICAgICAgRVhQ
RUNUX1RSVUUodGVtcCA9PSBiaXRtYXBTbWFsbFplcm9lZCk7CisgICAgICAgIEVYUEVDVF9UUlVF
KHRlbXAgIT0gYml0bWFwU21hbGxGaWxsZWQpOworCisgICAgICAgIHRlbXAuY2xlYXJBbGwoKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUodGVtcC5pc0VtcHR5KCkpOworICAgICAgICBFWFBFQ1RfVFJV
RSh0ZW1wICE9IHRlbXAxKTsKKyAgICAgICAgdGVtcCBePSB0ZW1wMTsKKyAgICAgICAgRVhQRUNU
X1RSVUUodGVtcCA9PSB0ZW1wMSk7CisKKyAgICAgICAgdGVtcCBePSB0ZW1wMjsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICBFWFBFQ1RfRVEo
dGVtcC5nZXQoaSksIHRlbXAxLmdldChpKSBeIHRlbXAyLmdldChpKSk7CisKKyAgICAgICAgdGVt
cDMgPSB0ZW1wOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wMyA9PSB0ZW1wKTsKKworICAgICAg
ICB0ZW1wIF49IGJpdG1hcFNtYWxsWmVyb2VkOworICAgICAgICBFWFBFQ1RfVFJVRSh0ZW1wID09
IHRlbXAzKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXBTbWFsbFplcm9lZCk7
CisKKyAgICAgICAgdGVtcCBePSBiaXRtYXBTbWFsbEZpbGxlZDsKKyAgICAgICAgRVhQRUNUX1RS
VUUodGVtcCAhPSB0ZW1wMyk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gYml0bWFwU21h
bGxGaWxsZWQpOworICAgICAgICB0ZW1wMy5pbnZlcnQoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
dGVtcCA9PSB0ZW1wMyk7CisgICAgICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gYml0bWFwU21hbGxG
aWxsZWQpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgV29yZFR5cGU+CiB2b2lkIHRl
c3RCaXRtYXBIYXNoKCkKIHsKICAgICBERUNMQVJFX0FORF9JTklUX0JJVE1BUFNfRk9SX1RFU1Qo
KTsKQEAgLTEwNzYsOCArMTYyOSwxMyBAQCBURVNUKFdURl9CaXRtYXAsIEZpbmRCaXRfdWludDMy
X3QpIHsgdGVzCiBURVNUKFdURl9CaXRtYXAsIEl0ZXJhdGlvbl91aW50MzJfdCkgeyB0ZXN0Qml0
bWFwSXRlcmF0aW9uPHVpbnQzMl90PigpOyB9CiBURVNUKFdURl9CaXRtYXAsIE1lcmdlQW5kQ2xl
YXJfdWludDMyX3QpIHsgdGVzdEJpdG1hcE1lcmdlQW5kQ2xlYXI8dWludDMyX3Q+KCk7IH0KIFRF
U1QoV1RGX0JpdG1hcCwgU2V0QW5kQ2xlYXJfdWludDMyX3QpIHsgdGVzdEJpdG1hcFNldEFuZENs
ZWFyPHVpbnQzMl90PigpOyB9CitURVNUKFdURl9CaXRtYXAsIFNldEVhY2hOdGhCaXRfdWludDMy
X3QpIHsgdGVzdEJpdG1hcFNldEVhY2hOdGhCaXQ8dWludDMyX3Q+KCk7IH0KIFRFU1QoV1RGX0Jp
dG1hcCwgT3BlcmF0b3JFcXVhbEFjY2Vzc191aW50MzJfdCkgeyB0ZXN0Qml0bWFwT3BlcmF0b3JF
cXVhbDx1aW50MzJfdD4oKTsgfQogVEVTVChXVEZfQml0bWFwLCBPcGVyYXRvck5vdEVxdWFsQWNj
ZXNzX3VpbnQzMl90KSB7IHRlc3RCaXRtYXBPcGVyYXRvck5vdEVxdWFsPHVpbnQzMl90PigpOyB9
CitURVNUKFdURl9CaXRtYXAsIE9wZXJhdG9yQXNzaWdubWVudF91aW50MzJfdCkgeyB0ZXN0Qml0
bWFwT3BlcmF0b3JBc3NpZ25tZW50PHVpbnQzMl90PigpOyB9CitURVNUKFdURl9CaXRtYXAsIE9w
ZXJhdG9yQml0T3JBc3NpZ25tZW50X3VpbnQzMl90KSB7IHRlc3RCaXRtYXBPcGVyYXRvckJpdE9y
QXNzaWdubWVudDx1aW50MzJfdD4oKTsgfQorVEVTVChXVEZfQml0bWFwLCBPcGVyYXRvckJpdEFu
ZEFzc2lnbm1lbnRfdWludDMyX3QpIHsgdGVzdEJpdG1hcE9wZXJhdG9yQml0QW5kQXNzaWdubWVu
dDx1aW50MzJfdD4oKTsgfQorVEVTVChXVEZfQml0bWFwLCBPcGVyYXRvckJpdFhvckFzc2lnbm1l
bnRfdWludDMyX3QpIHsgdGVzdEJpdG1hcE9wZXJhdG9yQml0WG9yQXNzaWdubWVudDx1aW50MzJf
dD4oKTsgfQogVEVTVChXVEZfQml0bWFwLCBIYXNoX3VpbnQzMl90KSB7IHRlc3RCaXRtYXBIYXNo
PHVpbnQzMl90PigpOyB9CiAKICNpZiBDUFUoUkVHSVNURVI2NCkKQEAgLTExMDYsOCArMTY2NCwx
MyBAQCBURVNUKFdURl9CaXRtYXAsIEZpbmRCaXRfdWludDY0X3QpIHsgdGVzCiBURVNUKFdURl9C
aXRtYXAsIEl0ZXJhdGlvbl91aW50NjRfdCkgeyB0ZXN0Qml0bWFwSXRlcmF0aW9uPHVpbnQ2NF90
PigpOyB9CiBURVNUKFdURl9CaXRtYXAsIE1lcmdlQW5kQ2xlYXJfdWludDY0X3QpIHsgdGVzdEJp
dG1hcE1lcmdlQW5kQ2xlYXI8dWludDY0X3Q+KCk7IH0KIFRFU1QoV1RGX0JpdG1hcCwgU2V0QW5k
Q2xlYXJfdWludDY0X3QpIHsgdGVzdEJpdG1hcFNldEFuZENsZWFyPHVpbnQ2NF90PigpOyB9CitU
RVNUKFdURl9CaXRtYXAsIFNldEVhY2hOdGhCaXRfdWludDY0X3QpIHsgdGVzdEJpdG1hcFNldEVh
Y2hOdGhCaXQ8dWludDY0X3Q+KCk7IH0KIFRFU1QoV1RGX0JpdG1hcCwgT3BlcmF0b3JFcXVhbEFj
Y2Vzc191aW50NjRfdCkgeyB0ZXN0Qml0bWFwT3BlcmF0b3JFcXVhbDx1aW50NjRfdD4oKTsgfQog
VEVTVChXVEZfQml0bWFwLCBPcGVyYXRvck5vdEVxdWFsQWNjZXNzX3VpbnQ2NF90KSB7IHRlc3RC
aXRtYXBPcGVyYXRvck5vdEVxdWFsPHVpbnQ2NF90PigpOyB9CitURVNUKFdURl9CaXRtYXAsIE9w
ZXJhdG9yQXNzaWdubWVudF91aW50NjRfdCkgeyB0ZXN0Qml0bWFwT3BlcmF0b3JBc3NpZ25tZW50
PHVpbnQ2NF90PigpOyB9CitURVNUKFdURl9CaXRtYXAsIE9wZXJhdG9yQml0T3JBc3NpZ25tZW50
X3VpbnQ2NF90KSB7IHRlc3RCaXRtYXBPcGVyYXRvckJpdE9yQXNzaWdubWVudDx1aW50NjRfdD4o
KTsgfQorVEVTVChXVEZfQml0bWFwLCBPcGVyYXRvckJpdEFuZEFzc2lnbm1lbnRfdWludDY0X3Qp
IHsgdGVzdEJpdG1hcE9wZXJhdG9yQml0QW5kQXNzaWdubWVudDx1aW50NjRfdD4oKTsgfQorVEVT
VChXVEZfQml0bWFwLCBPcGVyYXRvckJpdFhvckFzc2lnbm1lbnRfdWludDY0X3QpIHsgdGVzdEJp
dG1hcE9wZXJhdG9yQml0WG9yQXNzaWdubWVudDx1aW50NjRfdD4oKTsgfQogVEVTVChXVEZfQml0
bWFwLCBIYXNoX3VpbnQ2NF90KSB7IHRlc3RCaXRtYXBIYXNoPHVpbnQ2NF90PigpOyB9CiAKICNl
bmRpZiAvLyBDUFUoUkVHSVNURVI2NCkK
</data>
<flag name="review"
          id="415354"
          type_id="1"
          status="+"
          setter="rmorisset"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399981</attachid>
            <date>2020-05-21 14:36:32 -0700</date>
            <delta_ts>2020-05-21 14:43:21 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-212190.patch</filename>
            <type>text/plain</type>
            <size>16880</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjIwMjQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDIwLTA1LTIwICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbW9yZSBCaXRtYXAgbWV0aG9kcy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjE5MAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNjM0ODEzMzM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUm9iaW4gTW9y
aXNzZXQuCisKKyAgICAgICAgU3BlY2lmaWNhbGx5LAorICAgICAgICAgICAgc2V0RWFjaE50aEJp
dCAtIHNldHMgZXZlcnkgTnRoIGJpdCBzdGFydGluZyBhdCBhIHNwZWNpZmllZCBzdGFydCBiaXQK
KyAgICAgICAgICAgIG9wZXJhdG9yPSAgICAgLSBhc3NpZ25tZW50CisgICAgICAgICAgICBvcGVy
YXRvcnw9ICAgIC0gYml0IG9yIGFuZCBhc3NpZ25tZW50CisgICAgICAgICAgICBvcGVyYXRvciY9
ICAgIC0gYml0IGFuZCBhbmQgYXNzaWdubWVudAorICAgICAgICAgICAgb3BlcmF0b3JePSAgICAt
IGJpdCB4b3IgYW5kIGFzc2lnbm1lbnQKKworICAgICAgICAqIHd0Zi9CaXRtYXAuaDoKKwogMjAy
MC0wNS0yMSAgWW9zaGlha2kgSml0c3VrYXdhICA8eW9zaGlha2kuaml0c3VrYXdhQHNvbnkuY29t
PgogCiAgICAgICAgIFtQbGF5U3RhdGlvbl0gQWRkIG1pbmltYWwgV0tWaWV3IEFQSSB0byBlbmFi
bGUgVGVzdFdlYktpdEFQSQpJbmRleDogU291cmNlL1dURi93dGYvQml0bWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvQml0bWFwLmgJKHJldmlzaW9uIDI2MjAyNCkKKysrIFNvdXJj
ZS9XVEYvd3RmL0JpdG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsMTAgKzExOCwxNyBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdm9pZCBtZXJnZUFuZENsZWFyKEJpdG1hcCYpOwogICAgIHZvaWQg
c2V0QW5kQ2xlYXIoQml0bWFwJik7Ci0gICAgCisKKyAgICB2b2lkIHNldEVhY2hOdGhCaXQoc2l6
ZV90IHN0YXJ0LCBzaXplX3Qgbik7CisKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQml0bWFw
JikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEJpdG1hcCYpIGNvbnN0OwotICAg
IAorCisgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgQml0bWFwJik7CisgICAgdm9pZCBvcGVyYXRv
cnw9KGNvbnN0IEJpdG1hcCYpOworICAgIHZvaWQgb3BlcmF0b3ImPShjb25zdCBCaXRtYXAmKTsK
KyAgICB2b2lkIG9wZXJhdG9yXj0oY29uc3QgQml0bWFwJik7CisKICAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3Q7CiAKIHByaXZhdGU6CkBAIC00MjMsNiArNDMwLDI3IEBAIGlubGluZSB2b2lkIEJp
dG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KIH0KIAogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNp
emUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdv
cmRUeXBlPjo6c2V0RWFjaE50aEJpdChzaXplX3Qgc3RhcnQsIHNpemVfdCBuKQoreworICAgIHNp
emVfdCBpbmRleCA9IHN0YXJ0OworICAgIHNpemVfdCB3b3JkSW5kZXggPSBpbmRleCAvIHdvcmRT
aXplOworICAgIGluZGV4ID0gaW5kZXggLSB3b3JkSW5kZXggKiB3b3JkU2l6ZTsKKyAgICB3aGls
ZSAod29yZEluZGV4IDwgd29yZHMpIHsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgd29yZFNpemUp
IHsKKyAgICAgICAgICAgIGJpdHNbd29yZEluZGV4XSB8PSAob25lIDw8IGluZGV4KTsKKyAgICAg
ICAgICAgIGluZGV4ICs9IG47CisgICAgICAgIH0KKyAgICAgICAgaW5kZXggLT0gd29yZFNpemU7
CisgICAgICAgIHdvcmRJbmRleCsrOworICAgIH0KKyAgICBpZiBjb25zdGV4cHIgKCEhKGJpdG1h
cFNpemUgJSB3b3JkU2l6ZSkpIHsKKyAgICAgICAgY29uc3RleHByIHNpemVfdCByZW1haW5pbmdC
aXRzID0gYml0bWFwU2l6ZSAlIHdvcmRTaXplOworICAgICAgICBjb25zdGV4cHIgV29yZFR5cGUg
bWFzayA9IChzdGF0aWNfY2FzdDxXb3JkVHlwZT4oMSkgPDwgcmVtYWluaW5nQml0cykgLSAxOwor
ICAgICAgICBiaXRzW3dvcmRzIC0gMV0gJj0gbWFzazsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHNp
emVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSBib29sIEJpdG1hcDxi
aXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9yPT0oY29uc3QgQml0bWFwJiBvdGhlcikgY29u
c3QKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpIHsKQEAgLTQzOSw2
ICs0NjcsMzQgQEAgaW5saW5lIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPgogfQog
CiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUg
dm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRvcj0oY29uc3QgQml0bWFw
JiBvdGhlcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAg
ICAgIGJpdHNbaV0gPSBvdGhlci5iaXRzW2ldOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFw
U2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwg
V29yZFR5cGU+OjpvcGVyYXRvcnw9KGNvbnN0IEJpdG1hcCYgb3RoZXIpCit7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAgICAgICBiaXRzW2ldIHw9IG90aGVyLmJp
dHNbaV07Cit9CisKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlw
ZT4KK2lubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9yJj0o
Y29uc3QgQml0bWFwJiBvdGhlcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRz
OyArK2kpCisgICAgICAgIGJpdHNbaV0gJj0gb3RoZXIuYml0c1tpXTsKK30KKwordGVtcGxhdGU8
c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIHZvaWQgQml0bWFw
PGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3JePShjb25zdCBCaXRtYXAmIG90aGVyKQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkKKyAgICAgICAgYml0c1tp
XSBePSBvdGhlci5iaXRzW2ldOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlw
ZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgdW5zaWduZWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRU
eXBlPjo6aGFzaCgpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2
MjAyNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDIwLTA1LTIwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgbW9yZSBCaXRtYXAgbWV0aG9kcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxMjE5MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjM0ODEzMzM+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUm9iaW4gTW9yaXNzZXQuCisKKyAgICAgICAgQWRkZWQg
dGVzdCBjb3ZlcmFnZSBmb3IgdGhlIG5ldyBXVEY6OkJpdG1hcCBtZXRob2RzLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQml0bWFwLmNwcDoKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OnRlc3RCaXRtYXBTZXRFYWNoTnRoQml0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OnRlc3RCaXRtYXBPcGVyYXRvckFzc2lnbm1lbnQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
dGVzdEJpdG1hcE9wZXJhdG9yQml0T3JBc3NpZ25tZW50KToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OnRlc3RCaXRtYXBPcGVyYXRvckJpdEFuZEFzc2lnbm1lbnQpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6dGVzdEJpdG1hcE9wZXJhdG9yQml0WG9yQXNzaWdubWVudCk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMC0wNS0yMSAgWW9zaGlha2kgSml0c3VrYXdhICA8
eW9zaGlha2kuaml0c3VrYXdhQHNvbnkuY29tPgogCiAgICAgICAgIFtQbGF5U3RhdGlvbl0gQWRk
IG1pbmltYWwgV0tWaWV3IEFQSSB0byBlbmFibGUgVGVzdFdlYktpdEFQSQpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQml0bWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CaXRtYXAuY3BwCShyZXZpc2lvbiAyNjIwMjQpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CaXRtYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSA8d3RmL0JpdG1h
cC5oPgogCisjaW5jbHVkZSA8d3RmL1JhbmRvbU51bWJlci5oPgorCiBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CiAKIGNvbnN0ZXhwciBzaXplX3Qgc2l6ZSA9IDEyODsKQEAgLTcwLDYgKzcyLDE2
IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBleHBlY3RlZEJpdHMyW3NpemUKICAgICBmYWxzZSwg
dHJ1ZSwgIGZhbHNlLCB0cnVlLCAgIHRydWUsICB0cnVlLCAgdHJ1ZSwgIHRydWUsCiB9OwogCitz
dGF0aWMgY29uc3RleHByIGJvb2wgZXhwZWN0ZWRTbWFsbEJpdHMxW3NtYWxsU2l6ZV0gPSB7Cisg
ICAgZmFsc2UsIHRydWUsIHRydWUsICBmYWxzZSwgIHRydWUsICBmYWxzZSwgZmFsc2UsIHRydWUs
CisgICAgdHJ1ZSwKK307CisKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCBleHBlY3RlZFNtYWxsQml0
czJbc21hbGxTaXplXSA9IHsKKyAgICB0cnVlLCAgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAgZmFsc2Us
IGZhbHNlLCB0cnVlLCAgdHJ1ZSwKKyAgICBmYWxzZSwKK307CisKIGNvbnN0ZXhwciBzaXplX3Qg
Y291bnRCaXRzKGNvbnN0IGJvb2wgYm9vbEFycmF5W10sIHNpemVfdCBzaXplKQogewogICAgIHNp
emVfdCByZXN1bHQgPSAwOwpAQCAtOTAsNyArMTAyLDkgQEAgY29uc3RleHByIHNpemVfdCBleHBl
Y3RlZE51bWJlck9mU2V0Qml0cwogICAgIEJpdG1hcDxzaXplLCBXb3JkVHlwZT4gYml0bWFwMzsg
LyogU2FtZSBhcyBiaXRtYXAyLiAqLyBcCiAgICAgQml0bWFwPHNpemUsIFdvcmRUeXBlPiBiaXRt
YXBGaWxsZWQ7IFwKICAgICBCaXRtYXA8c21hbGxTaXplLCBXb3JkVHlwZT4gYml0bWFwU21hbGxa
ZXJvZWQ7IFwKLSAgICBCaXRtYXA8c21hbGxTaXplLCBXb3JkVHlwZT4gYml0bWFwU21hbGxGaWxs
ZWQ7CisgICAgQml0bWFwPHNtYWxsU2l6ZSwgV29yZFR5cGU+IGJpdG1hcFNtYWxsRmlsbGVkOyBc
CisgICAgQml0bWFwPHNtYWxsU2l6ZSwgV29yZFR5cGU+IGJpdG1hcFNtYWxsMTsgLyogV2lsbCBo
b2xkIHZhbHVlcyBzcGVjaWZpZWQgaW4gZXhwZWN0ZWRTbWFsbEJpdHMxLiAqLyBcCisgICAgQml0
bWFwPHNtYWxsU2l6ZSwgV29yZFR5cGU+IGJpdG1hcFNtYWxsMjsgLyogV2lsbCBob2xkIHZhbHVl
cyBzcGVjaWZpZWQgaW4gZXhwZWN0ZWRTbWFsbEJpdHMyLiAqLyBcCiAKICNkZWZpbmUgREVDTEFS
RV9BTkRfSU5JVF9CSVRNQVBTX0ZPUl9URVNUKCkgXAogICAgIERFQ0xBUkVfQklUTUFQU19GT1Jf
VEVTVCgpIFwKQEAgLTEwMCw4ICsxMTQsMTEgQEAgY29uc3RleHByIHNpemVfdCBleHBlY3RlZE51
bWJlck9mU2V0Qml0cwogICAgICAgICBiaXRtYXAzLnNldChpLCBleHBlY3RlZEJpdHMyW2ldKTsg
XAogICAgICAgICBiaXRtYXBGaWxsZWQuc2V0KGkpOyBcCiAgICAgfSBcCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzbWFsbFNpemU7ICsraSkgXAotICAgICAgICBiaXRtYXBTbWFsbEZpbGxl
ZC5zZXQoaSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzbWFsbFNpemU7ICsraSkgeyBc
CisgICAgICAgIGJpdG1hcFNtYWxsMS5zZXQoaSwgZXhwZWN0ZWRTbWFsbEJpdHMxW2ldKTsgXAor
ICAgICAgICBiaXRtYXBTbWFsbDIuc2V0KGksIGV4cGVjdGVkU21hbGxCaXRzMltpXSk7IFwKKyAg
ICAgICAgYml0bWFwU21hbGxGaWxsZWQuc2V0KGkpOyBcCisgICAgfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBXb3JkVHlwZT4KIHZvaWQgdGVzdEJpdG1hcFNpemUoKQpAQCAtOTYwLDYgKzk3Nyw0NyBA
QCB2b2lkIHRlc3RCaXRtYXBTZXRBbmRDbGVhcigpCiAgICAgQVNTRVJUX1RSVUUoYml0bWFwU21h
bGxGaWxsZWQuaXNFbXB0eSgpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQml0bWFwPgordm9p
ZCB0ZXN0Qml0bWFwU2V0RWFjaE50aEJpdEltcGwoc2l6ZV90IHNpemUsIHNpemVfdCB3b3JkU2l6
ZSwgY29uc3QgQml0bWFwJiB6ZXJvZXMsIGNvbnN0IEJpdG1hcCYgb25lcykKK3sKKyAgICBCaXRt
YXAgdGVtcDsKKworICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gemVyb2VzKTsKKyAgICB0ZW1wLnNl
dEVhY2hOdGhCaXQoMCwgMSk7CisgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBvbmVzKTsKKworICAg
IHNpemVfdCBuVmFsdWVzW10gPSB7IDEsIDIsIHdvcmRTaXplIC8gMiwgd29yZFNpemUgLSAxLCB3
b3JkU2l6ZSwgc2l6ZSAvIDIsIHNpemUgLSAxLCBzaXplIH07CisgICAgc2l6ZV90IG5WYWx1ZXND
b3VudCA9IHNpemVvZihuVmFsdWVzKSAvIHNpemVvZihuVmFsdWVzWzBdKTsKKworICAgIGZvciAo
c2l6ZV90IHN0YXJ0ID0gMDsgc3RhcnQgPCB3b3JkU2l6ZTsgKytzdGFydCkgeworICAgICAgICBm
b3IgKHNpemVfdCBqID0gMDsgaiA8IG5WYWx1ZXNDb3VudDsgKytqKSB7CisgICAgICAgICAgICBz
aXplX3QgbiA9IG5WYWx1ZXNbal07CisgICAgICAgICAgICB0ZW1wLmNsZWFyQWxsKCk7CisgICAg
ICAgICAgICB0ZW1wLnNldEVhY2hOdGhCaXQoc3RhcnQsIG4pOworCisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHN0YXJ0OyArK2kpCisgICAgICAgICAgICAgICAgRVhQRUNUX0ZB
TFNFKHRlbXAuZ2V0KGkpKTsKKworICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAg
ICAgICAgIGJvb2wgZXhwZWN0ZWQgPSAhY291bnQ7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RS
VUUodGVtcC5nZXQoaSkgPT0gZXhwZWN0ZWQpOworICAgICAgICAgICAgICAgIGNvdW50Kys7Cisg
ICAgICAgICAgICAgICAgY291bnQgPSBjb3VudCAlIG47CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFdvcmRUeXBlPgordm9pZCB0ZXN0Qml0
bWFwU2V0RWFjaE50aEJpdCgpCit7CisgICAgREVDTEFSRV9BTkRfSU5JVF9CSVRNQVBTX0ZPUl9U
RVNUKCk7CisgICAgY29uc3RleHByIHNpemVfdCB3b3JkU2l6ZSA9IHNpemVvZihXb3JkVHlwZSkg
KiA4OworICAgIHRlc3RCaXRtYXBTZXRFYWNoTnRoQml0SW1wbChzaXplLCB3b3JkU2l6ZSwgYml0
bWFwMCwgYml0bWFwRmlsbGVkKTsKKyAgICB0ZXN0Qml0bWFwU2V0RWFjaE50aEJpdEltcGwoc21h
bGxTaXplLCB3b3JkU2l6ZSwgYml0bWFwU21hbGxaZXJvZWQsIGJpdG1hcFNtYWxsRmlsbGVkKTsK
K30KKwogdGVtcGxhdGU8dHlwZW5hbWUgV29yZFR5cGU+CiB2b2lkIHRlc3RCaXRtYXBPcGVyYXRv
ckVxdWFsKCkKIHsKQEAgLTk5MCw2ICsxMDQ4LDI1MCBAQCB2b2lkIHRlc3RCaXRtYXBPcGVyYXRv
ck5vdEVxdWFsKCkKICAgICBFWFBFQ1RfVFJVRShiaXRtYXBTbWFsbFplcm9lZCAhPSBiaXRtYXBT
bWFsbEZpbGxlZCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEJpdG1hcD4KK3ZvaWQgdGVzdEJp
dG1hcE9wZXJhdG9yQXNzaWdubWVudEltcGwoY29uc3QgQml0bWFwJiBiaXRtYXAxLCBjb25zdCBC
aXRtYXAmIGJpdG1hcDIsIGNvbnN0IEJpdG1hcCYgemVyb2VzLCBjb25zdCBCaXRtYXAmIG9uZXMp
Cit7CisgICAgQml0bWFwIHRlbXA7CisgICAgQml0bWFwIHRlbXAyOworICAgIEVYUEVDVF9UUlVF
KHRlbXAuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wMi5pc0VtcHR5KCkpOworCisg
ICAgRVhQRUNUX1RSVUUodGVtcCA9PSB6ZXJvZXMpOworICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0g
Yml0bWFwMSk7CisgICAgdGVtcCA9IGJpdG1hcDE7CisgICAgRVhQRUNUX1RSVUUodGVtcCAhPSB6
ZXJvZXMpOworICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwMSk7CisKKyAgICBFWFBFQ1Rf
VFJVRSh0ZW1wICE9IGJpdG1hcDIpOworICAgIHRlbXAgPSBiaXRtYXAyOworICAgIEVYUEVDVF9U
UlVFKHRlbXAgPT0gYml0bWFwMik7CisgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXAxKTsK
KworICAgIHRlbXAuY2xlYXJBbGwoKTsKKyAgICB0ZW1wMi5jbGVhckFsbCgpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYml0bWFwMS5zaXplKCk7ICsraSkKKyAgICAgICAgdGVtcC5zZXQo
aSwgYml0bWFwMS5nZXQoaSkpOworCisgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBiaXRtYXAxKTsK
KyAgICBFWFBFQ1RfVFJVRSh0ZW1wMi5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKHRlbXAy
ICE9IGJpdG1hcDEpOworICAgIHRlbXAyID0gdGVtcDsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wMiA9
PSBiaXRtYXAxKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgV29yZFR5cGU+Cit2b2lkIHRlc3RC
aXRtYXBPcGVyYXRvckFzc2lnbm1lbnQoKQoreworICAgIERFQ0xBUkVfQU5EX0lOSVRfQklUTUFQ
U19GT1JfVEVTVCgpOworICAgIHRlc3RCaXRtYXBPcGVyYXRvckFzc2lnbm1lbnRJbXBsKGJpdG1h
cDEsIGJpdG1hcDIsIGJpdG1hcDAsIGJpdG1hcEZpbGxlZCk7CisgICAgdGVzdEJpdG1hcE9wZXJh
dG9yQXNzaWdubWVudEltcGwoYml0bWFwU21hbGwxLCBiaXRtYXBTbWFsbDIsIGJpdG1hcFNtYWxs
WmVyb2VkLCBiaXRtYXBTbWFsbEZpbGxlZCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJpdG1h
cD4KK3ZvaWQgdGVzdEJpdG1hcE9wZXJhdG9yQml0T3JBc3NpZ25tZW50SW1wbChzaXplX3Qgc2l6
ZSwgY29uc3QgQml0bWFwJiBiaXRtYXAxLCBjb25zdCBCaXRtYXAmIGJpdG1hcDIsIGNvbnN0IEJp
dG1hcCYgemVyb2VzLCBjb25zdCBCaXRtYXAmIG9uZXMpCit7CisgICAgQml0bWFwIHRlbXA7Cisg
ICAgQml0bWFwIHRlbXAxOworCisgICAgLy8gMCB8IDAKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wID09
IHplcm9lcyk7CisgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBvbmVzKTsKKyAgICB0ZW1wIHw9IHpl
cm9lczsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IHplcm9lcyk7CisgICAgRVhQRUNUX1RSVUUo
dGVtcCAhPSBvbmVzKTsKKworICAgIC8vIDAgfCAxCisgICAgRVhQRUNUX1RSVUUodGVtcCA9PSB6
ZXJvZXMpOworICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gb25lcyk7CisgICAgdGVtcCB8PSBvbmVz
OworICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gemVyb2VzKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1w
ID09IG9uZXMpOworCisgICAgLy8gMSB8IDAKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wICE9IHplcm9l
cyk7CisgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBvbmVzKTsKKyAgICB0ZW1wIHw9IHplcm9lczsK
KyAgICBFWFBFQ1RfVFJVRSh0ZW1wICE9IHplcm9lcyk7CisgICAgRVhQRUNUX1RSVUUodGVtcCA9
PSBvbmVzKTsKKworICAgIC8vIDEgfCAxCisgICAgRVhQRUNUX1RSVUUodGVtcCAhPSB6ZXJvZXMp
OworICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gb25lcyk7CisgICAgdGVtcCB8PSBvbmVzOworICAg
IEVYUEVDVF9UUlVFKHRlbXAgIT0gemVyb2VzKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IG9u
ZXMpOworCisgICAgdGVtcCA9IHplcm9lczsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wLmlzRW1wdHko
KSk7CisgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBiaXRtYXAxKTsKKyAgICB0ZW1wIHw9IGJpdG1h
cDE7CisgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBiaXRtYXAxKTsKKworICAgIHRlbXAgfD0gYml0
bWFwMjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgRVhQ
RUNUX0VRKHRlbXAuZ2V0KGkpLCBiaXRtYXAxLmdldChpKSB8IGJpdG1hcDIuZ2V0KGkpKTsKKwor
ICAgIHRlbXAxID0gdGVtcDsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wMSA9PSB0ZW1wKTsKKworICAg
IHRlbXAgfD0gemVyb2VzOworICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gdGVtcDEpOworICAgIEVY
UEVDVF9UUlVFKHRlbXAgIT0gemVyb2VzKTsKKworICAgIHRlbXAgfD0gb25lczsKKyAgICBFWFBF
Q1RfVFJVRSh0ZW1wICE9IHRlbXAxKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IG9uZXMpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBXb3JkVHlwZT4KK3ZvaWQgdGVzdEJpdG1hcE9wZXJhdG9y
Qml0T3JBc3NpZ25tZW50KCkKK3sKKyAgICBERUNMQVJFX0FORF9JTklUX0JJVE1BUFNfRk9SX1RF
U1QoKTsKKyAgICB0ZXN0Qml0bWFwT3BlcmF0b3JCaXRPckFzc2lnbm1lbnRJbXBsKHNpemUsIGJp
dG1hcDEsIGJpdG1hcDIsIGJpdG1hcDAsIGJpdG1hcEZpbGxlZCk7CisgICAgdGVzdEJpdG1hcE9w
ZXJhdG9yQml0T3JBc3NpZ25tZW50SW1wbChzbWFsbFNpemUsIGJpdG1hcFNtYWxsMSwgYml0bWFw
U21hbGwyLCBiaXRtYXBTbWFsbFplcm9lZCwgYml0bWFwU21hbGxGaWxsZWQpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBCaXRtYXA+Cit2b2lkIHRlc3RCaXRtYXBPcGVyYXRvckJpdEFuZEFzc2ln
bm1lbnRJbXBsKHNpemVfdCBzaXplLCBjb25zdCBCaXRtYXAmIGJpdG1hcDEsIGNvbnN0IEJpdG1h
cCYgYml0bWFwMiwgY29uc3QgQml0bWFwJiB6ZXJvZXMsIGNvbnN0IEJpdG1hcCYgb25lcykKK3sK
KyAgICBCaXRtYXAgdGVtcDsKKyAgICBCaXRtYXAgdGVtcDE7CisKKyAgICAvLyAwICYgMAorICAg
IHRlbXAgPSB6ZXJvZXM7CisgICAgRVhQRUNUX1RSVUUodGVtcCA9PSB6ZXJvZXMpOworICAgIEVY
UEVDVF9UUlVFKHRlbXAgIT0gb25lcyk7CisgICAgdGVtcCAmPSB6ZXJvZXM7CisgICAgRVhQRUNU
X1RSVUUodGVtcCA9PSB6ZXJvZXMpOworICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gb25lcyk7CisK
KyAgICAvLyAwICYgMQorICAgIHRlbXAgPSB6ZXJvZXM7CisgICAgRVhQRUNUX1RSVUUodGVtcCA9
PSB6ZXJvZXMpOworICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gb25lcyk7CisgICAgdGVtcCAmPSBv
bmVzOworICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gemVyb2VzKTsKKyAgICBFWFBFQ1RfVFJVRSh0
ZW1wICE9IG9uZXMpOworCisgICAgLy8gMSAmIDAKKyAgICB0ZW1wID0gb25lczsKKyAgICBFWFBF
Q1RfVFJVRSh0ZW1wICE9IHplcm9lcyk7CisgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBvbmVzKTsK
KyAgICB0ZW1wICY9IHplcm9lczsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IHplcm9lcyk7Cisg
ICAgRVhQRUNUX1RSVUUodGVtcCAhPSBvbmVzKTsKKworICAgIC8vIDEgJiAxCisgICAgdGVtcCA9
IG9uZXM7CisgICAgRVhQRUNUX1RSVUUodGVtcCAhPSB6ZXJvZXMpOworICAgIEVYUEVDVF9UUlVF
KHRlbXAgPT0gb25lcyk7CisgICAgdGVtcCAmPSBvbmVzOworICAgIEVYUEVDVF9UUlVFKHRlbXAg
IT0gemVyb2VzKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IG9uZXMpOworCisgICAgdGVtcCA9
IG9uZXM7CisgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBvbmVzKTsKKyAgICBFWFBFQ1RfVFJVRSh0
ZW1wICE9IGJpdG1hcDEpOworICAgIHRlbXAgJj0gYml0bWFwMTsKKyAgICBFWFBFQ1RfVFJVRSh0
ZW1wID09IGJpdG1hcDEpOworCisgICAgdGVtcCAmPSBiaXRtYXAyOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBFWFBFQ1RfRVEodGVtcC5nZXQoaSksIGJp
dG1hcDEuZ2V0KGkpICYgYml0bWFwMi5nZXQoaSkpOworCisgICAgRVhQRUNUX1RSVUUoIXRlbXAu
aXNFbXB0eSgpKTsKKyAgICB0ZW1wMSA9IHRlbXA7CisgICAgRVhQRUNUX1RSVUUodGVtcDEgPT0g
dGVtcCk7CisKKyAgICB0ZW1wICY9IHplcm9lczsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wICE9IHRl
bXAxKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IHplcm9lcyk7CisKKyAgICB0ZW1wID0gdGVt
cDE7CisgICAgdGVtcCAmPSBvbmVzOworICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gdGVtcDEpOwor
ICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gb25lcyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFdv
cmRUeXBlPgordm9pZCB0ZXN0Qml0bWFwT3BlcmF0b3JCaXRBbmRBc3NpZ25tZW50KCkKK3sKKyAg
ICBERUNMQVJFX0FORF9JTklUX0JJVE1BUFNfRk9SX1RFU1QoKTsKKyAgICB0ZXN0Qml0bWFwT3Bl
cmF0b3JCaXRBbmRBc3NpZ25tZW50SW1wbChzaXplLCBiaXRtYXAxLCBiaXRtYXAyLCBiaXRtYXAw
LCBiaXRtYXBGaWxsZWQpOworICAgIHRlc3RCaXRtYXBPcGVyYXRvckJpdEFuZEFzc2lnbm1lbnRJ
bXBsKHNtYWxsU2l6ZSwgYml0bWFwU21hbGwxLCBiaXRtYXBTbWFsbDIsIGJpdG1hcFNtYWxsWmVy
b2VkLCBiaXRtYXBTbWFsbEZpbGxlZCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJpdG1hcD4K
K3ZvaWQgdGVzdEJpdG1hcE9wZXJhdG9yQml0WG9yQXNzaWdubWVudEltcGwoc2l6ZV90IHNpemUs
IGNvbnN0IEJpdG1hcCYgYml0bWFwMSwgY29uc3QgQml0bWFwJiBiaXRtYXAyLCBjb25zdCBCaXRt
YXAmIHplcm9lcywgY29uc3QgQml0bWFwJiBvbmVzKQoreworICAgIEJpdG1hcCB0ZW1wOworICAg
IEJpdG1hcCB0ZW1wMTsKKworICAgIC8vIDAgXiAwCisgICAgdGVtcCA9IHplcm9lczsKKyAgICBF
WFBFQ1RfVFJVRSh0ZW1wID09IHplcm9lcyk7CisgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBvbmVz
KTsKKyAgICB0ZW1wIF49IHplcm9lczsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IHplcm9lcyk7
CisgICAgRVhQRUNUX1RSVUUodGVtcCAhPSBvbmVzKTsKKworICAgIC8vIDAgXiAxCisgICAgdGVt
cCA9IHplcm9lczsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IHplcm9lcyk7CisgICAgRVhQRUNU
X1RSVUUodGVtcCAhPSBvbmVzKTsKKyAgICB0ZW1wIF49IG9uZXM7CisgICAgRVhQRUNUX1RSVUUo
dGVtcCAhPSB6ZXJvZXMpOworICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gb25lcyk7CisKKyAgICAv
LyAxIF4gMAorICAgIHRlbXAgPSBvbmVzOworICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gemVyb2Vz
KTsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wID09IG9uZXMpOworICAgIHRlbXAgXj0gemVyb2VzOwor
ICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gemVyb2VzKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wID09
IG9uZXMpOworCisgICAgLy8gMSBeIDEKKyAgICB0ZW1wID0gb25lczsKKyAgICBFWFBFQ1RfVFJV
RSh0ZW1wICE9IHplcm9lcyk7CisgICAgRVhQRUNUX1RSVUUodGVtcCA9PSBvbmVzKTsKKyAgICB0
ZW1wIF49IG9uZXM7CisgICAgRVhQRUNUX1RSVUUodGVtcCA9PSB6ZXJvZXMpOworICAgIEVYUEVD
VF9UUlVFKHRlbXAgIT0gb25lcyk7CisKKyAgICB0ZW1wLmNsZWFyQWxsKCk7CisgICAgRVhQRUNU
X1RSVUUodGVtcC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKHRlbXAgIT0gYml0bWFwMSk7
CisgICAgdGVtcCBePSBiaXRtYXAxOworICAgIEVYUEVDVF9UUlVFKHRlbXAgPT0gYml0bWFwMSk7
CisKKyAgICB0ZW1wIF49IGJpdG1hcDI7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyArK2kpCisgICAgICAgIEVYUEVDVF9FUSh0ZW1wLmdldChpKSwgYml0bWFwMS5nZXQoaSkgXiBi
aXRtYXAyLmdldChpKSk7CisKKyAgICB0ZW1wMSA9IHRlbXA7CisgICAgRVhQRUNUX1RSVUUodGVt
cDEgPT0gdGVtcCk7CisKKyAgICB0ZW1wIF49IHplcm9lczsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1w
ID09IHRlbXAxKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wICE9IHplcm9lcyk7CisKKyAgICB0ZW1w
IF49IG9uZXM7CisgICAgRVhQRUNUX1RSVUUodGVtcCAhPSB0ZW1wMSk7CisgICAgRVhQRUNUX1RS
VUUodGVtcCAhPSBvbmVzKTsKKyAgICB0ZW1wMS5pbnZlcnQoKTsKKyAgICBFWFBFQ1RfVFJVRSh0
ZW1wID09IHRlbXAxKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZW1wICE9IG9uZXMpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBXb3JkVHlwZT4KK3ZvaWQgdGVzdEJpdG1hcE9wZXJhdG9yQml0WG9yQXNz
aWdubWVudCgpCit7CisgICAgREVDTEFSRV9BTkRfSU5JVF9CSVRNQVBTX0ZPUl9URVNUKCk7Cisg
ICAgdGVzdEJpdG1hcE9wZXJhdG9yQml0WG9yQXNzaWdubWVudEltcGwoc2l6ZSwgYml0bWFwMSwg
Yml0bWFwMiwgYml0bWFwMCwgYml0bWFwRmlsbGVkKTsKKyAgICB0ZXN0Qml0bWFwT3BlcmF0b3JC
aXRYb3JBc3NpZ25tZW50SW1wbChzbWFsbFNpemUsIGJpdG1hcFNtYWxsMSwgYml0bWFwU21hbGwy
LCBiaXRtYXBTbWFsbFplcm9lZCwgYml0bWFwU21hbGxGaWxsZWQpOworfQorCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBXb3JkVHlwZT4KIHZvaWQgdGVzdEJpdG1hcEhhc2goKQogewpAQCAtMTA3Niw4ICsx
Mzc4LDEzIEBAIFRFU1QoV1RGX0JpdG1hcCwgRmluZEJpdF91aW50MzJfdCkgeyB0ZXMKIFRFU1Qo
V1RGX0JpdG1hcCwgSXRlcmF0aW9uX3VpbnQzMl90KSB7IHRlc3RCaXRtYXBJdGVyYXRpb248dWlu
dDMyX3Q+KCk7IH0KIFRFU1QoV1RGX0JpdG1hcCwgTWVyZ2VBbmRDbGVhcl91aW50MzJfdCkgeyB0
ZXN0Qml0bWFwTWVyZ2VBbmRDbGVhcjx1aW50MzJfdD4oKTsgfQogVEVTVChXVEZfQml0bWFwLCBT
ZXRBbmRDbGVhcl91aW50MzJfdCkgeyB0ZXN0Qml0bWFwU2V0QW5kQ2xlYXI8dWludDMyX3Q+KCk7
IH0KK1RFU1QoV1RGX0JpdG1hcCwgU2V0RWFjaE50aEJpdF91aW50MzJfdCkgeyB0ZXN0Qml0bWFw
U2V0RWFjaE50aEJpdDx1aW50MzJfdD4oKTsgfQogVEVTVChXVEZfQml0bWFwLCBPcGVyYXRvckVx
dWFsQWNjZXNzX3VpbnQzMl90KSB7IHRlc3RCaXRtYXBPcGVyYXRvckVxdWFsPHVpbnQzMl90Pigp
OyB9CiBURVNUKFdURl9CaXRtYXAsIE9wZXJhdG9yTm90RXF1YWxBY2Nlc3NfdWludDMyX3QpIHsg
dGVzdEJpdG1hcE9wZXJhdG9yTm90RXF1YWw8dWludDMyX3Q+KCk7IH0KK1RFU1QoV1RGX0JpdG1h
cCwgT3BlcmF0b3JBc3NpZ25tZW50X3VpbnQzMl90KSB7IHRlc3RCaXRtYXBPcGVyYXRvckFzc2ln
bm1lbnQ8dWludDMyX3Q+KCk7IH0KK1RFU1QoV1RGX0JpdG1hcCwgT3BlcmF0b3JCaXRPckFzc2ln
bm1lbnRfdWludDMyX3QpIHsgdGVzdEJpdG1hcE9wZXJhdG9yQml0T3JBc3NpZ25tZW50PHVpbnQz
Ml90PigpOyB9CitURVNUKFdURl9CaXRtYXAsIE9wZXJhdG9yQml0QW5kQXNzaWdubWVudF91aW50
MzJfdCkgeyB0ZXN0Qml0bWFwT3BlcmF0b3JCaXRBbmRBc3NpZ25tZW50PHVpbnQzMl90PigpOyB9
CitURVNUKFdURl9CaXRtYXAsIE9wZXJhdG9yQml0WG9yQXNzaWdubWVudF91aW50MzJfdCkgeyB0
ZXN0Qml0bWFwT3BlcmF0b3JCaXRYb3JBc3NpZ25tZW50PHVpbnQzMl90PigpOyB9CiBURVNUKFdU
Rl9CaXRtYXAsIEhhc2hfdWludDMyX3QpIHsgdGVzdEJpdG1hcEhhc2g8dWludDMyX3Q+KCk7IH0K
IAogI2lmIENQVShSRUdJU1RFUjY0KQpAQCAtMTEwNiw4ICsxNDEzLDEzIEBAIFRFU1QoV1RGX0Jp
dG1hcCwgRmluZEJpdF91aW50NjRfdCkgeyB0ZXMKIFRFU1QoV1RGX0JpdG1hcCwgSXRlcmF0aW9u
X3VpbnQ2NF90KSB7IHRlc3RCaXRtYXBJdGVyYXRpb248dWludDY0X3Q+KCk7IH0KIFRFU1QoV1RG
X0JpdG1hcCwgTWVyZ2VBbmRDbGVhcl91aW50NjRfdCkgeyB0ZXN0Qml0bWFwTWVyZ2VBbmRDbGVh
cjx1aW50NjRfdD4oKTsgfQogVEVTVChXVEZfQml0bWFwLCBTZXRBbmRDbGVhcl91aW50NjRfdCkg
eyB0ZXN0Qml0bWFwU2V0QW5kQ2xlYXI8dWludDY0X3Q+KCk7IH0KK1RFU1QoV1RGX0JpdG1hcCwg
U2V0RWFjaE50aEJpdF91aW50NjRfdCkgeyB0ZXN0Qml0bWFwU2V0RWFjaE50aEJpdDx1aW50NjRf
dD4oKTsgfQogVEVTVChXVEZfQml0bWFwLCBPcGVyYXRvckVxdWFsQWNjZXNzX3VpbnQ2NF90KSB7
IHRlc3RCaXRtYXBPcGVyYXRvckVxdWFsPHVpbnQ2NF90PigpOyB9CiBURVNUKFdURl9CaXRtYXAs
IE9wZXJhdG9yTm90RXF1YWxBY2Nlc3NfdWludDY0X3QpIHsgdGVzdEJpdG1hcE9wZXJhdG9yTm90
RXF1YWw8dWludDY0X3Q+KCk7IH0KK1RFU1QoV1RGX0JpdG1hcCwgT3BlcmF0b3JBc3NpZ25tZW50
X3VpbnQ2NF90KSB7IHRlc3RCaXRtYXBPcGVyYXRvckFzc2lnbm1lbnQ8dWludDY0X3Q+KCk7IH0K
K1RFU1QoV1RGX0JpdG1hcCwgT3BlcmF0b3JCaXRPckFzc2lnbm1lbnRfdWludDY0X3QpIHsgdGVz
dEJpdG1hcE9wZXJhdG9yQml0T3JBc3NpZ25tZW50PHVpbnQ2NF90PigpOyB9CitURVNUKFdURl9C
aXRtYXAsIE9wZXJhdG9yQml0QW5kQXNzaWdubWVudF91aW50NjRfdCkgeyB0ZXN0Qml0bWFwT3Bl
cmF0b3JCaXRBbmRBc3NpZ25tZW50PHVpbnQ2NF90PigpOyB9CitURVNUKFdURl9CaXRtYXAsIE9w
ZXJhdG9yQml0WG9yQXNzaWdubWVudF91aW50NjRfdCkgeyB0ZXN0Qml0bWFwT3BlcmF0b3JCaXRY
b3JBc3NpZ25tZW50PHVpbnQ2NF90PigpOyB9CiBURVNUKFdURl9CaXRtYXAsIEhhc2hfdWludDY0
X3QpIHsgdGVzdEJpdG1hcEhhc2g8dWludDY0X3Q+KCk7IH0KIAogI2VuZGlmIC8vIENQVShSRUdJ
U1RFUjY0KQo=
</data>
<flag name="review"
          id="415399"
          type_id="1"
          status="+"
          setter="rmorisset"
    />
          </attachment>
      

    </bug>

</bugzilla>