<?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>194252</bug_id>
          
          <creation_ts>2019-02-04 16:27:07 -0800</creation_ts>
          <short_desc>B3ReduceStrength: missing peephole optimizations for binary operations</short_desc>
          <delta_ts>2019-02-22 14:55:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>154319</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1502096</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-04 16:27:07 -0800</bug_when>
    <thetext>BitAnd is distributive over both BitOr and BitXor. So the following should all work:
- Op(BitAnd(x1, x2), BitAnd(x1, x3)) =&gt; BitAnd(x1, Op(x2, x3))
- Op(BitAnd(x2, x1), BitAnd(x1, x3)) =&gt; BitAnd(x1, Op(x2, x3))
- Op(BitAnd(x1, x2), BitAnd(x3, x1)) =&gt; BitAnd(x1, Op(x2, x3))
- Op(BitAnd(x2, x1), BitAnd(x3, x1)) =&gt; BitAnd(x1, Op(x2, x3))
for Op in {BitOr, BitXor}

Similarily, we can use De Morgan laws to float binary not (represented as BitXor(x, allOnes)) outwards, and eliminate as many as possible:
- BitAnd(BitXor(x1, allOnes), BitXor(x2, allOnes)) =&gt; BitXor(BitOr(x1, x2), allOnes)
- BitOr(BitXor(x1, allOnes), BitXor(x2, allOnes) =&gt; BitXor(BitAnd(x1, x2), allOnes)
- BitAnd(BitXor(x, allOnes), c) =&gt; BitXor(BitOr(x, ~c))
- BitOr(BitXor(x, allOnes), c) =&gt; BitXor(BitAnd(x, ~c))

Like all other peephole optimizations, the performance benefit is probably too small to measure, but it is very low-hanging fruit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502579</commentid>
    <comment_count>1</comment_count>
      <attachid>361240</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-05 16:14:27 -0800</bug_when>
    <thetext>Created attachment 361240
WIP_missing_tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502587</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-02-05 16:23:18 -0800</bug_when>
    <thetext>Attachment 361240 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:999:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1002:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1003:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1003:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1005:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1006:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1016:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1019:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1019:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1021:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1022:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1076:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1079:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1080:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1080:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1082:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1083:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1093:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1096:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1096:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1098:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1099:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:2256:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 23 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503417</commentid>
    <comment_count>3</comment_count>
      <attachid>361312</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-06 12:12:12 -0800</bug_when>
    <thetext>Created attachment 361312
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503422</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-02-06 12:17:35 -0800</bug_when>
    <thetext>Attachment 361312 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1002:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1019:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1079:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1096:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 4 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503775</commentid>
    <comment_count>5</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-07 10:13:29 -0800</bug_when>
    <thetext>(In reply to Build Bot from comment #4)
&gt; Attachment 361312 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1002:  When wrapping a
&gt; line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1019:  When wrapping a
&gt; line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1079:  When wrapping a
&gt; line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1096:  When wrapping a
&gt; line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; Total errors found: 4 in 3 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

I don&apos;t see a way to solve these without making the condition unreadable.
Does it bother anybody if I keep it as is?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507197</commentid>
    <comment_count>6</comment_count>
      <attachid>361312</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-17 23:42:23 -0800</bug_when>
    <thetext>Comment on attachment 361312
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:47
&gt; +        I did not list every single reordering of the arguments as the test part of this patch is already significantly longer than the useful code, and this combination should sample all the relevant paths.

That’s not our criteria for adding tests. Why don’t you just make it so your test doesn’t hard code lhs/rhs to generate all combinations?

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1002
&gt; +                        &amp;&amp; m_value-&gt;child(0)-&gt;child(1)-&gt;isInt(0xffffffffffffffff)

maybe use numeric_limits here?

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:2242
&gt; +    // Turn any of these:

You should say for op Or/Xor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509170</commentid>
    <comment_count>7</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-22 14:15:41 -0800</bug_when>
    <thetext>Thanks for the review.

&gt; &gt; Source/JavaScriptCore/ChangeLog:47
&gt; &gt; +        I did not list every single reordering of the arguments as the test part of this patch is already significantly longer than the useful code, and this combination should sample all the relevant paths.
&gt; 
&gt; That’s not our criteria for adding tests. Why don’t you just make it so your
&gt; test doesn’t hard code lhs/rhs to generate all combinations?

Done.

&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1002
&gt; &gt; +                        &amp;&amp; m_value-&gt;child(0)-&gt;child(1)-&gt;isInt(0xffffffffffffffff)
&gt; 
&gt; maybe use numeric_limits here?

Done.

&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:2242
&gt; &gt; +    // Turn any of these:
&gt; 
&gt; You should say for op Or/Xor

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509171</commentid>
    <comment_count>8</comment_count>
      <attachid>362764</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-22 14:16:23 -0800</bug_when>
    <thetext>Created attachment 362764
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509180</commentid>
    <comment_count>9</comment_count>
      <attachid>362764</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-22 14:54:28 -0800</bug_when>
    <thetext>Comment on attachment 362764
Patch

Clearing flags on attachment: 362764

Committed r241964: &lt;https://trac.webkit.org/changeset/241964&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509181</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-22 14:54:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509182</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-02-22 14:55:34 -0800</bug_when>
    <thetext>&lt;rdar://problem/48325164&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361240</attachid>
            <date>2019-02-05 16:14:27 -0800</date>
            <delta_ts>2019-02-06 12:12:11 -0800</delta_ts>
            <desc>WIP_missing_tests</desc>
            <filename>bug-194252-20190205161426.patch</filename>
            <type>text/plain</type>
            <size>11581</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQwOTk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDE5LTAyLTA1ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAg
ICAgICAgQjNSZWR1Y2VTdHJlbmd0aDogbWlzc2luZyBwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGZv
ciBiaW5hcnkgb3BlcmF0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk0MjUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy90ZXN0
YjMuY3BwOgorCiAyMDE5LTAyLTA1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBGaXggREZHJ3MgZG9lc0dDKCkgZm9yIGEgZmV3IG1vcmUgbm9kZXMuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lv
biAyNDA5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk0OCw2ICs5NDgsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICYmICEobV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIDB4ZmZmZmZmMDApKSB7
CiAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCk7CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBC
aXRBbmQoU0V4dDE2KHZhbHVlKSwgbWFzaykgd2hlcmUgKG1hc2sgJiAweGZmZmYwMDAwKSA9PSAw
CkBAIC05NTYsNiArOTU3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAmJiAhKG1fdmFs
dWUtPmNoaWxkKDEpLT5hc0ludDMyKCkgJiAweGZmZmYwMDAwKSkgewogICAgICAgICAgICAgICAg
IG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwogICAgICAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKFNFeHQzMih2YWx1
ZSksIG1hc2spIHdoZXJlIChtYXNrICYgMHhmZmZmZmZmZjAwMDAwMDAwKSA9PSAwCkBAIC05NjYs
NiArOTY4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgWkV4dDMy
LCBtX3ZhbHVlLT5vcmlnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAg
ICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKE9wKHZhbHVlLCBjb25zdGFu
dDEpLCBjb25zdGFudDIpCkBAIC05ODcsNyArOTkwLDQwIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IEJpdEFuZChCaXRYb3IoeDEsIGFsbE9uZXMpLCBCaXRYb3IoeDIsIGFs
bE9uZXMpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcihCaXRPcih4MSwgeDIpLCBh
bGxPbmVzKQorICAgICAgICAgICAgLy8gQnkgYXBwbHlpbmcgRGUgTW9yZ2FuIGxhd3MKKyAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9yCisgICAgICAg
ICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IEJpdFhvcgorICAgICAg
ICAgICAgICAgICYmICgobV92YWx1ZS0+dHlwZSgpID09IEludDY0CisgICAgICAgICAgICAgICAg
ICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KDB4ZmZmZmZmZmZmZmZm
ZmZmZikKKyAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgx
KS0+aXNJbnQoMHhmZmZmZmZmZmZmZmZmZmZmKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgKG1f
dmFsdWUtPnR5cGUoKSA9PSBJbnQzMgorICAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludCgweGZmZmZmZmZmKQorICAgICAgICAgICAgICAgICAg
ICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpLT5pc0ludCgweGZmZmZmZmZmKSkpKSB7
CisgICAgICAgICAgICAgICAgVmFsdWUqIGJpdE9yID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZh
bHVlPihtX2luZGV4LCBCaXRPciwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAg
ICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgYml0T3Is
IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKEJpdFhvcih4
LCBhbGxPbmVzKSwgYykKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9yKEJpdE9yKHgs
IH5jKSwgYWxsT25lcykKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB2YXJpYXRpb24gb24gdGhl
IHByZXZpb3VzIG9wdGltaXphdGlvbiwgdHJlYXRpbmcgYyBhcyBpZiBpdCB3ZXJlIEJpdFhvcih+
YywgYWxsT25lcykKKyAgICAgICAgICAgIC8vIEl0IGRvZXMgbm90IHJlZHVjZSB0aGUgbnVtYmVy
IG9mIG9wZXJhdGlvbnMsIGJ1dCBwcm92aWRlcyBzb21lIG5vcm1hbGl6YXRpb24gKHdlIHRyeSB0
byBnZXQgQml0WG9yIGJ5IGFsbE9uZXMgYXQgdGhlIG91dGVybW9zdCBwb2ludCksIGFuZCBzb21l
IGNoYW5jZSB0byBmbG9hdCBYb3JzIHRvIGEgcGxhY2Ugd2hlcmUgdGhleSBtaWdodCBnZXQgZWxp
bWluYXRlZC4KKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0g
Qml0WG9yCisgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpCisg
ICAgICAgICAgICAgICAgJiYgKChtX3ZhbHVlLT50eXBlKCkgPT0gSW50NjQKKyAgICAgICAgICAg
ICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoMHhmZmZmZmZm
ZmZmZmZmZmZmKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgKG1fdmFsdWUtPnR5cGUoKSA9PSBJ
bnQzMgorICAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEp
LT5pc0ludCgweGZmZmZmZmZmKSkpKSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIGJpdE9yID0g
bV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBCaXRPciwgbV92YWx1ZS0+b3Jp
Z2luKCksbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Yml0
WG9yQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpKTsKKyAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4o
KSwgYml0T3IsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNh
c2UgQml0T3I6CkBAIC0xMDM0LDYgKzEwNzAsNDAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRP
cihCaXRYb3IoeDEsIGFsbE9uZXMpLCBCaXRYb3IoeDIsIGFsbE9uZXMpCisgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IEJpdFhvcihCaXRBbmQoeDEsIHgyKSwgYWxsT25lcykKKyAgICAgICAgICAg
IC8vIEJ5IGFwcGx5aW5nIERlIE1vcmdhbiBsYXdzCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdFhvcgorICAgICAgICAgICAgICAgICYmIG1fdmFsdWUt
PmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBCaXRYb3IKKyAgICAgICAgICAgICAgICAmJiAoKG1fdmFs
dWUtPnR5cGUoKSA9PSBJbnQ2NAorICAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDEpLT5pc0ludCgweGZmZmZmZmZmZmZmZmZmZmYpCisgICAgICAgICAgICAg
ICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSktPmlzSW50KDB4ZmZmZmZmZmZm
ZmZmZmZmZikpIHx8CisgICAgICAgICAgICAgICAgICAgIChtX3ZhbHVlLT50eXBlKCkgPT0gSW50
MzIKKyAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+
aXNJbnQoMHhmZmZmZmZmZikKKyAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxk
KDEpLT5jaGlsZCgxKS0+aXNJbnQoMHhmZmZmZmZmZikpKSkgeworICAgICAgICAgICAgICAgIFZh
bHVlKiBiaXRBbmQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIEJpdEFu
ZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSwgbV92YWx1
ZS0+Y2hpbGQoMSktPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxW
YWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgYml0QW5kLCBtX3ZhbHVlLT5jaGlsZCgx
KS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdE9yKEJpdFhvcih4LCBhbGxPbmVzKSwgYykKKyAg
ICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9yKEJpdEFuZCh4LCB+YyksIGFsbE9uZXMpCisg
ICAgICAgICAgICAvLyBUaGlzIGlzIGEgdmFyaWF0aW9uIG9uIHRoZSBwcmV2aW91cyBvcHRpbWl6
YXRpb24sIHRyZWF0aW5nIGMgYXMgaWYgaXQgd2VyZSBCaXRYb3IofmMsIGFsbE9uZXMpCisgICAg
ICAgICAgICAvLyBJdCBkb2VzIG5vdCByZWR1Y2UgdGhlIG51bWJlciBvZiBvcGVyYXRpb25zLCBi
dXQgcHJvdmlkZXMgc29tZSBub3JtYWxpemF0aW9uICh3ZSB0cnkgdG8gZ2V0IEJpdFhvciBieSBh
bGxPbmVzIGF0IHRoZSBvdXRlcm1vc3QgcG9pbnQpLCBhbmQgc29tZSBjaGFuY2UgdG8gZmxvYXQg
WG9ycyB0byBhIHBsYWNlIHdoZXJlIHRoZXkgbWlnaHQgZ2V0IGVsaW1pbmF0ZWQuCisgICAgICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdFhvcgorICAgICAgICAg
ICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKQorICAgICAgICAgICAgICAgICYm
ICgobV92YWx1ZS0+dHlwZSgpID09IEludDY0CisgICAgICAgICAgICAgICAgICAgICAmJiBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KDB4ZmZmZmZmZmZmZmZmZmZmZikpIHx8Cisg
ICAgICAgICAgICAgICAgICAgIChtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIKKyAgICAgICAgICAg
ICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoMHhmZmZmZmZm
ZikpKSkgeworICAgICAgICAgICAgICAgIFZhbHVlKiBiaXRBbmQgPSBtX2luc2VydGlvblNldC5p
bnNlcnQ8VmFsdWU+KG1faW5kZXgsIEJpdEFuZCwgbV92YWx1ZS0+b3JpZ2luKCksbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Yml0WG9yQ29uc3RhbnQobV9w
cm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aE5ldzxWYWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgYml0QW5kLCBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoaGFuZGxlQml0QW5kRGlzdHJpYnV0aXZpdHkoKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAg
Y2FzZSBCaXRYb3I6CkBAIC0xMDgwLDYgKzExNTAsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKGhhbmRsZUJpdEFuZERpc3RyaWJ1dGl2aXR5KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0yMTY2LDYgKzIyMzksNjkgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogICAgIH0KIAorICAgIC8vIFR1cm4gYW55IG9mIHRoZXNlOgorICAgIC8vICAg
ICAgT3AoQml0QW5kKHgxLCB4MiksIEJpdEFuZCh4MSwgeDMpKQorICAgIC8vICAgICAgT3AoQml0
QW5kKHgyLCB4MSksIEJpdEFuZCh4MSwgeDMpKQorICAgIC8vICAgICAgT3AoQml0QW5kKHgxLCB4
MiksIEJpdEFuZCh4MywgeDEpKQorICAgIC8vICAgICAgT3AoQml0QW5kKHgyLCB4MSksIEJpdEFu
ZCh4MywgeDEpKQorICAgIC8vIEludG8gdGhpczogQml0QW5kKE9wKHgyLCB4MyksIHgxKQorICAg
IC8vIEFuZCBhbnkgb2YgdGhlc2U6CisgICAgLy8gICAgICBPcChCaXRBbmQoeDEsIHgyKSwgeDEp
CisgICAgLy8gICAgICBPcChCaXRBbmQoeDIsIHgxKSwgeDEpCisgICAgLy8gICAgICBPcCh4MSwg
Qml0QW5kKHgxLCB4MikpCisgICAgLy8gICAgICBPcCh4MSwgQml0QW5kKHgyLCB4MSkpCisgICAg
Ly8gSW50byB0aGlzOiBCaXRBbmQoT3AoeDIsIHgxKSwgeDEpCisgICAgLy8gVGhpcyBzZWNvbmQg
c2V0IGlzIGVxdWl2YWxlbnQgdG8gZG9pbmcgeDEgPT4gQml0QW5kKHgxLCB4MSksIGFuZCB0aGVu
IGFwcGx5aW5nIHRoZSBmaXJzdCBzZXQuCisgICAgLy8gSXQgZG9lcyBub3QgcmVkdWNlIHRoZSBu
dW1iZXIgb2Ygb3BlcmF0aW9ucyBleGVjdXRlZCwgYnV0IHByb3ZpZGVzIHNvbWUgdXNlZnVsIG5v
cm1hbGl6YXRpb246IHdlIHByZWZlciB0byBoYXZlIEJpdEFuZCBhdCB0aGUgb3V0ZXJtb3N0LCB0
aGVuIEJpdFhvciwgYW5kIGZpbmFsbHkgQml0T3IgYXQgdGhlIGlubmVybW9zdAorICAgIGJvb2wg
aGFuZGxlQml0QW5kRGlzdHJpYnV0aXZpdHkoKSB7CisgICAgICAgIEFTU0VSVChtX3ZhbHVlLT5v
cGNvZGUoKSA9PSBCaXRPciB8fCBtX3ZhbHVlLT5vcGNvZGUoKSA9PSBCaXRYb3IpOworICAgICAg
ICBWYWx1ZSogeDEgPSBudWxscHRyOworICAgICAgICBWYWx1ZSogeDIgPSBudWxscHRyOworICAg
ICAgICBWYWx1ZSogeDMgPSBudWxscHRyOworICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkt
Pm9wY29kZSgpID09IEJpdEFuZCAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gQml0
QW5kKSB7CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApID09IG1f
dmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKSkgeworICAgICAgICAgICAgICAgIHgxID0gbV92YWx1
ZS0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAgICAgICAgICAgIHgyID0gbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDEpOworICAgICAgICAgICAgICAgIHgzID0gbV92YWx1ZS0+Y2hpbGQoMSkt
PmNoaWxkKDEpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hp
bGQoMSkgPT0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApKSB7CisgICAgICAgICAgICAgICAg
eDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgeDIgPSBt
X3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgeDMgPSBtX3ZhbHVl
LT5jaGlsZCgxKS0+Y2hpbGQoMSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUtPmNo
aWxkKDApLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSkpIHsKKyAgICAg
ICAgICAgICAgICB4MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAg
ICAgICB4MiA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKTsKKyAgICAgICAgICAgICAgICB4
MyA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgx
KSkgeworICAgICAgICAgICAgICAgIHgxID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpOwor
ICAgICAgICAgICAgICAgIHgyID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAg
ICAgICAgICAgIHgzID0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRB
bmQpIHsKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkgPT0gbV92
YWx1ZS0+Y2hpbGQoMSkpIHsKKyAgICAgICAgICAgICAgICB4MSA9IHgzID0gbV92YWx1ZS0+Y2hp
bGQoMSk7CisgICAgICAgICAgICAgICAgeDIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSA9PSBt
X3ZhbHVlLT5jaGlsZCgxKSkgeworICAgICAgICAgICAgICAgIHgxID0geDMgPSBtX3ZhbHVlLT5j
aGlsZCgxKTsKKyAgICAgICAgICAgICAgICB4MiA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgw
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+
b3Bjb2RlKCkgPT0gQml0QW5kKSB7CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSkt
PmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDApKSB7CisgICAgICAgICAgICAgICAgeDEgPSB4
MyA9IG1fdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIHgyID0gbV92YWx1ZS0+Y2hp
bGQoMSktPmNoaWxkKDEpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgx
KS0+Y2hpbGQoMSkgPT0gbV92YWx1ZS0+Y2hpbGQoMCkpIHsKKyAgICAgICAgICAgICAgICB4MSA9
IHgzID0gbV92YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgeDIgPSBtX3ZhbHVlLT5j
aGlsZCgxKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHgxICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIEFTU0VSVCh4MiAhPSBudWxscHRyICYmIHgz
ICE9IG51bGxwdHIpOworICAgICAgICAgICAgVmFsdWUqIGJpdE9wID0gbV9pbnNlcnRpb25TZXQu
aW5zZXJ0PFZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcGNvZGUoKSwgbV92YWx1ZS0+b3JpZ2lu
KCksIHgyLCB4Myk7CisgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oQml0QW5kLCBt
X3ZhbHVlLT5vcmlnaW4oKSwgYml0T3AsIHgxKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBzdHJ1Y3QgQ2Fu
b25pY2FsaXplZENvbXBhcmlzb24gewogICAgICAgICBPcGNvZGUgb3Bjb2RlOwogICAgICAgICBW
YWx1ZSogb3BlcmFuZHNbMl07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAko
cmV2aXNpb24gMjQwOTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2MzM3LDYgKzE2MzM3LDIyIEBAIGRvdWJsZSBuZWdhdGl2ZVpl
cm8oKQogICAgICAgICAgICAgICAgIH0pKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgIH0KKyNkZWZpbmUgUlVOX1RFUk5BUlkodGVzdCwgdmFsdWVz
QSwgdmFsdWVzQiwgdmFsdWVzQykgXAorICAgIGZvciAoYXV0byBhIDogdmFsdWVzQSkgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZm9yIChhdXRvIGIgOiB2
YWx1ZXNCKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBm
b3IgKGF1dG8gYyA6IHZhbHVlc0MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgIENTdHJpbmcgdGVzdFN0ciA9IHRvQ1N0cmluZygjdGVzdCwgIigiLCBhLm5h
bWUsICIsICIsIGIubmFtZSwgIiwiLCBjLm5hbWUsICIpIik7IFwKKyAgICAgICAgICAgICAgICBp
ZiAoIXNob3VsZFJ1bih0ZXN0U3RyLmRhdGEoKSkpICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgIHRhc2tzLmFwcGVuZChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoKT4o
ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgWz1dICgpIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRv
Q1N0cmluZyh0ZXN0U3RyLCAiLi4uXG4iKSk7ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAg
dGVzdChhLnZhbHVlLCBiLnZhbHVlLCBjLnZhbHVlKTsgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2codG9DU3RyaW5nKHRlc3RTdHIsICI6IE9LIVxuIikpOyBcCisgICAg
ICAgICAgICAgICAgICAgIH0pKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCiB2b2lkIHJ1bihjb25zdCBjaGFyKiBm
aWx0ZXIpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361312</attachid>
            <date>2019-02-06 12:12:12 -0800</date>
            <delta_ts>2019-02-22 14:16:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194252-20190206121211.patch</filename>
            <type>text/plain</type>
            <size>22547</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQxMDM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDE5LTAyLTA2ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAg
ICAgICAgQjNSZWR1Y2VTdHJlbmd0aDogbWlzc2luZyBwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGZv
ciBiaW5hcnkgb3BlcmF0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk0MjUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkcyBzZXZlcmFsIHNldHMgb2Ygb3B0aW1pemF0aW9ucyBmb3IgQml0QW5k
LCBCaXRPciBhbmQgQml0WG9yLgorICAgICAgICBVc2luZyBCaXRBbmQgZGlzdHJpYnV0aXZpdHkg
b3ZlciBCaXRPciBhbmQgQml0WG9yOgorICAgICAgICAgIFR1cm4gYW55IG9mIHRoZXNlIChmb3Ig
T3AgPT0gQml0T3IgfHwgT3AgPT0gQml0WG9yKToKKyAgICAgICAgICAgICAgICBPcChCaXRBbmQo
eDEsIHgyKSwgQml0QW5kKHgxLCB4MykpCisgICAgICAgICAgICAgICAgT3AoQml0QW5kKHgyLCB4
MSksIEJpdEFuZCh4MSwgeDMpKQorICAgICAgICAgICAgICAgIE9wKEJpdEFuZCh4MSwgeDIpLCBC
aXRBbmQoeDMsIHgxKSkKKyAgICAgICAgICAgICAgICBPcChCaXRBbmQoeDIsIHgxKSwgQml0QW5k
KHgzLCB4MSkpCisgICAgICAgICAgIEludG8gdGhpczogQml0QW5kKE9wKHgyLCB4MyksIHgxKQor
ICAgICAgICAgICBBbmQgYW55IG9mIHRoZXNlOgorICAgICAgICAgICAgICAgIE9wKEJpdEFuZCh4
MSwgeDIpLCB4MSkKKyAgICAgICAgICAgICAgICBPcChCaXRBbmQoeDIsIHgxKSwgeDEpCisgICAg
ICAgICAgICAgICAgT3AoeDEsIEJpdEFuZCh4MSwgeDIpKQorICAgICAgICAgICAgICAgIE9wKHgx
LCBCaXRBbmQoeDIsIHgxKSkKKyAgICAgICAgICAgSW50byB0aGlzOiBCaXRBbmQoT3AoeDIsIHgx
KSwgeDEpCisgICAgICAgICAgIFRoaXMgc2Vjb25kIHNldCBpcyBlcXVpdmFsZW50IHRvIGRvaW5n
IHgxID0+IEJpdEFuZCh4MSwgeDEpLCBhbmQgdGhlbiBhcHBseWluZyB0aGUgZmlyc3Qgc2V0Lgor
ICAgICAgICBVc2luZyBkZSBNb3JnYW4gbGF3cyAod2UgcmVwcmVzZW50IG5vdCBhcyBCaXRYb3Ig
d2l0aCBhbGxPbmVzKToKKyAgICAgICAgICBCaXRBbmQoQml0WG9yKHgxLCBhbGxPbmVzKSwgQml0
WG9yKHgyLCBhbGxPbmVzKSkgPT4gQml0WG9yKEJpdE9yKHgxLCB4MiksIGFsbE9uZXMpCisgICAg
ICAgICAgQml0T3IoQml0WG9yKHgxLCBhbGxPbmVzKSwgQml0WG9yKHgyLCBhbGxPbmVzKSA9PiBC
aXRYb3IoQml0QW5kKHgxLCB4MiksIGFsbE9uZXMpCisgICAgICAgICAgQml0T3IoQml0WG9yKHgs
IGFsbE9uZXMpLCBjKSA9PiBCaXRYb3IoQml0QW5kKHgsIH5jKSwgYWxsT25lcykKKyAgICAgICAg
ICBCaXRBbmQoQml0WG9yKHgsIGFsbE9uZXMpLCBjKSA9PiBCaXRYb3IoQml0T3IoeCwgfmMpLCBh
bGxPbmVzKQorICAgICAgICBUaGUgbGF0dGVyIHR3byBhcmUgZXF1aXZhbGVudCB0byBkb2luZyBj
ID0+IEJpdFhvcih+YywgYWxsT25lcyksIGFuZCB0aGVuIGFwcGx5aW5nIHRoZSBmb3JtZXIgdHdv
LgorCisgICAgICAgIEFsbCBvZiB0aGVzZSB0cmFuc2Zvcm1hdGlvbnMgZWl0aGVyIHJlZHVjZSB0
aGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgKHdoaWNoIHdlIGFsd2F5cyBkbyB3aGVuIHBvc3NpYmxl
KSwgb3IgYnJpbmcgdGhlIGV4cHJlc3Npb24gY2xvc2VyIHRvIGhhdmluZzoKKyAgICAgICAgICAt
IEJpdFhvciB3aXRoIGFsbCBvbmVzIGF0IHRoZSBvdXRlcm1vc3QKKyAgICAgICAgICAtIHRoZW4g
Qml0QW5kCisgICAgICAgICAgLSB0aGVuIG90aGVyIEJpdFhvcgorICAgICAgICAgIC0gdGhlbiBC
aXRPciBhdCB0aGUgaW5uZXJtb3N0LgorICAgICAgICBUaGVzZSB0cmFuc2Zvcm1hdGlvbnMgdGhh
dCBkb24ndCBkaXJlY3RseSByZWR1Y2UgdGhlIG51bWJlciBvZiBvcGVyYXRpb25zIGFyZSBzdGls
bCB1c2VmdWwgZm9yIG5vcm1hbGl6YXRpb24gKGhlbHBpbmcgdGhpbmdzIGxpa2UgQ1NFKSwgYW5k
IGFsc28gY2FuIGVuYWJsZQorICAgICAgICBtb3JlIG9wdGltaXphdGlvbnMgKGZvciBleGFtcGxl
IEJpdFhvciB3aXRoIGFsbCBvbmVzIGNhbiBlYXNpbHkgY2FuY2VsIGVhY2ggb3RoZXIgb25jZSB0
aGV5IGFyZSBhbGwgYXQgdGhlIG91dGVybW9zdCBsZXZlbCkuCisKKyAgICAgICAgSW4gdGVybXMg
b2YgdGVzdGluZywgSSBhZGRlZCB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgKGEgJiBiKSB8
IChjICYgYSkKKyAgICAgICAgICAgIChiICYgYSkgXiAoYyAmIGEpCisgICAgICAgICAgICBhIHwg
KGIgJiBhKQorICAgICAgICAgICAgKGEgJiBiKSBeIGEKKyAgICAgICAgICAgICh+YSAmIH5iKQor
ICAgICAgICAgICAgKH5hIHwgfmIpCisgICAgICAgICAgICAofmEgJiBDKQorICAgICAgICAgICAg
KH5hIHwgQykKKyAgICAgICAgSSBkaWQgbm90IGxpc3QgZXZlcnkgc2luZ2xlIHJlb3JkZXJpbmcg
b2YgdGhlIGFyZ3VtZW50cyBhcyB0aGUgdGVzdCBwYXJ0IG9mIHRoaXMgcGF0Y2ggaXMgYWxyZWFk
eSBzaWduaWZpY2FudGx5IGxvbmdlciB0aGFuIHRoZSB1c2VmdWwgY29kZSwgYW5kIHRoaXMgY29t
YmluYXRpb24gc2hvdWxkIHNhbXBsZSBhbGwgdGhlIHJlbGV2YW50IHBhdGhzLgorCisgICAgICAg
ICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAg
ICAgICAgKEpTQzo6QjM6OnRlc3RCaXRBbmROb3ROb3QpOgorICAgICAgICAoSlNDOjpCMzo6dGVz
dEJpdEFuZE5vdEltbSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Qml0T3JBbmRBbmRBcmdzKToK
KyAgICAgICAgKEpTQzo6QjM6OnRlc3RCaXRPckFuZFNhbWVBcmdzKToKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3RCaXRPck5vdE5vdCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Qml0T3JOb3RJbW0p
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJpdFhvckFuZEFuZEFyZ3MpOgorICAgICAgICAoSlND
OjpCMzo6dGVzdEJpdFhvckFuZFNhbWVBcmdzKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisK
IDIwMTktMDItMDYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbSlNDXSBVbmlmeSBpbmRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2UgYW5kIGRpcmVjdEV2YWxF
eGVjdXRhYmxlU3BhY2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0
cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1
Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDI0MDk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQ4LDYgKzk0OCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJ
bnQzMigpICYgMHhmZmZmZmYwMCkpIHsKICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgw
KSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKICAgICAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChTRXh0MTYodmFsdWUpLCBtYXNrKSB3aGVyZSAo
bWFzayAmIDB4ZmZmZjAwMDApID09IDAKQEAgLTk1Niw2ICs5NTcsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICYmICEobV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIDB4ZmZmZjAw
MDApKSB7CiAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMCk7CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gVHVybiB0
aGlzOiBCaXRBbmQoU0V4dDMyKHZhbHVlKSwgbWFzaykgd2hlcmUgKG1hc2sgJiAweGZmZmZmZmZm
MDAwMDAwMDApID09IDAKQEAgLTk2Niw2ICs5NjgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBtX2luZGV4LCBaRXh0MzIsIG1fdmFsdWUtPm9yaWdpbigpLAogICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgxKSk7CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBC
aXRBbmQoT3AodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikKQEAgLTk4Nyw3ICs5OTAsNDAg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKEJpdFhvcih4MSwg
YWxsT25lcyksIEJpdFhvcih4MiwgYWxsT25lcykKKyAgICAgICAgICAgIC8vIEludG8gdGhpczog
Qml0WG9yKEJpdE9yKHgxLCB4MiksIGFsbE9uZXMpCisgICAgICAgICAgICAvLyBCeSBhcHBseWlu
ZyBEZSBNb3JnYW4gbGF3cworICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNv
ZGUoKSA9PSBCaXRYb3IKKyAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bj
b2RlKCkgPT0gQml0WG9yCisgICAgICAgICAgICAgICAgJiYgKChtX3ZhbHVlLT50eXBlKCkgPT0g
SW50NjQKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgxKS0+aXNJbnQoMHhmZmZmZmZmZmZmZmZmZmZmKQorICAgICAgICAgICAgICAgICAgICAgICAg
JiYgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpLT5pc0ludCgweGZmZmZmZmZmZmZmZmZmZmYp
KQorICAgICAgICAgICAgICAgICAgICB8fCAobV92YWx1ZS0+dHlwZSgpID09IEludDMyCisgICAg
ICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50
KDB4ZmZmZmZmZmYpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgx
KS0+Y2hpbGQoMSktPmlzSW50KDB4ZmZmZmZmZmYpKSkpIHsKKyAgICAgICAgICAgICAgICBWYWx1
ZSogYml0T3IgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIEJpdE9yLCBt
X3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBtX3ZhbHVlLT5j
aGlsZCgxKS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVl
PihCaXRYb3IsIG1fdmFsdWUtPm9yaWdpbigpLCBiaXRPciwgbV92YWx1ZS0+Y2hpbGQoMSktPmNo
aWxkKDEpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoQml0WG9yKHgsIGFsbE9uZXMpLCBjKQorICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBCaXRYb3IoQml0T3IoeCwgfmMpLCBhbGxPbmVzKQorICAgICAg
ICAgICAgLy8gVGhpcyBpcyBhIHZhcmlhdGlvbiBvbiB0aGUgcHJldmlvdXMgb3B0aW1pemF0aW9u
LCB0cmVhdGluZyBjIGFzIGlmIGl0IHdlcmUgQml0WG9yKH5jLCBhbGxPbmVzKQorICAgICAgICAg
ICAgLy8gSXQgZG9lcyBub3QgcmVkdWNlIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucywgYnV0IHBy
b3ZpZGVzIHNvbWUgbm9ybWFsaXphdGlvbiAod2UgdHJ5IHRvIGdldCBCaXRYb3IgYnkgYWxsT25l
cyBhdCB0aGUgb3V0ZXJtb3N0IHBvaW50KSwgYW5kIHNvbWUgY2hhbmNlIHRvIGZsb2F0IFhvcnMg
dG8gYSBwbGFjZSB3aGVyZSB0aGV5IG1pZ2h0IGdldCBlbGltaW5hdGVkLgorICAgICAgICAgICAg
aWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRYb3IKKyAgICAgICAgICAgICAg
ICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkKKyAgICAgICAgICAgICAgICAmJiAoKG1f
dmFsdWUtPnR5cGUoKSA9PSBJbnQ2NAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1
ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludCgweGZmZmZmZmZmZmZmZmZmZmYpKQorICAgICAg
ICAgICAgICAgICAgICB8fCAobV92YWx1ZS0+dHlwZSgpID09IEludDMyCisgICAgICAgICAgICAg
ICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KDB4ZmZmZmZm
ZmYpKSkpIHsKKyAgICAgICAgICAgICAgICBWYWx1ZSogYml0T3IgPSBtX2luc2VydGlvblNldC5p
bnNlcnQ8VmFsdWU+KG1faW5kZXgsIEJpdE9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Yml0WG9yQ29uc3RhbnQobV9w
cm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aE5ldzxWYWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgYml0T3IsIG1fdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQml0T3I6CkBAIC0x
MDM0LDYgKzEwNzAsNDAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KIAorICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRPcihCaXRYb3IoeDEsIGFs
bE9uZXMpLCBCaXRYb3IoeDIsIGFsbE9uZXMpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJp
dFhvcihCaXRBbmQoeDEsIHgyKSwgYWxsT25lcykKKyAgICAgICAgICAgIC8vIEJ5IGFwcGx5aW5n
IERlIE1vcmdhbiBsYXdzCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29k
ZSgpID09IEJpdFhvcgorICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNv
ZGUoKSA9PSBCaXRYb3IKKyAgICAgICAgICAgICAgICAmJiAoKG1fdmFsdWUtPnR5cGUoKSA9PSBJ
bnQ2NAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDEpLT5pc0ludCgweGZmZmZmZmZmZmZmZmZmZmYpCisgICAgICAgICAgICAgICAgICAgICAgICAm
JiBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSktPmlzSW50KDB4ZmZmZmZmZmZmZmZmZmZmZikp
CisgICAgICAgICAgICAgICAgICAgIHx8IChtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQo
MHhmZmZmZmZmZikKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEp
LT5jaGlsZCgxKS0+aXNJbnQoMHhmZmZmZmZmZikpKSkgeworICAgICAgICAgICAgICAgIFZhbHVl
KiBiaXRBbmQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIEJpdEFuZCwg
bV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSwgbV92YWx1ZS0+
Y2hpbGQoMSktPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1
ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgYml0QW5kLCBtX3ZhbHVlLT5jaGlsZCgxKS0+
Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdE9yKEJpdFhvcih4LCBhbGxPbmVzKSwgYykKKyAgICAg
ICAgICAgIC8vIEludG8gdGhpczogQml0WG9yKEJpdEFuZCh4LCB+YyksIGFsbE9uZXMpCisgICAg
ICAgICAgICAvLyBUaGlzIGlzIGEgdmFyaWF0aW9uIG9uIHRoZSBwcmV2aW91cyBvcHRpbWl6YXRp
b24sIHRyZWF0aW5nIGMgYXMgaWYgaXQgd2VyZSBCaXRYb3IofmMsIGFsbE9uZXMpCisgICAgICAg
ICAgICAvLyBJdCBkb2VzIG5vdCByZWR1Y2UgdGhlIG51bWJlciBvZiBvcGVyYXRpb25zLCBidXQg
cHJvdmlkZXMgc29tZSBub3JtYWxpemF0aW9uICh3ZSB0cnkgdG8gZ2V0IEJpdFhvciBieSBhbGxP
bmVzIGF0IHRoZSBvdXRlcm1vc3QgcG9pbnQpLCBhbmQgc29tZSBjaGFuY2UgdG8gZmxvYXQgWG9y
cyB0byBhIHBsYWNlIHdoZXJlIHRoZXkgbWlnaHQgZ2V0IGVsaW1pbmF0ZWQuCisgICAgICAgICAg
ICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdFhvcgorICAgICAgICAgICAg
ICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKQorICAgICAgICAgICAgICAgICYmICgo
bV92YWx1ZS0+dHlwZSgpID09IEludDY0CisgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KDB4ZmZmZmZmZmZmZmZmZmZmZikpCisgICAg
ICAgICAgICAgICAgICAgIHx8IChtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoMHhmZmZm
ZmZmZikpKSkgeworICAgICAgICAgICAgICAgIFZhbHVlKiBiaXRBbmQgPSBtX2luc2VydGlvblNl
dC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIEJpdEFuZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSktPmJpdFhvckNvbnN0YW50
KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKSk7CisgICAgICAgICAgICAgICAg
cmVwbGFjZVdpdGhOZXc8VmFsdWU+KEJpdFhvciwgbV92YWx1ZS0+b3JpZ2luKCksIGJpdEFuZCwg
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGhhbmRsZUJpdEFuZERpc3RyaWJ1dGl2aXR5
KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgQml0WG9yOgpAQCAtMTA4MCw2ICsxMTUwLDkgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChoYW5kbGVCaXRBbmREaXN0cmlidXRpdml0eSgpKQorICAgICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgICAgICBicmVhazsKIApAQCAtMjE2Niw2ICsyMjM5LDcwIEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvLyBUdXJuIGFueSBvZiB0aGVzZToKKyAgICAv
LyAgICAgIE9wKEJpdEFuZCh4MSwgeDIpLCBCaXRBbmQoeDEsIHgzKSkKKyAgICAvLyAgICAgIE9w
KEJpdEFuZCh4MiwgeDEpLCBCaXRBbmQoeDEsIHgzKSkKKyAgICAvLyAgICAgIE9wKEJpdEFuZCh4
MSwgeDIpLCBCaXRBbmQoeDMsIHgxKSkKKyAgICAvLyAgICAgIE9wKEJpdEFuZCh4MiwgeDEpLCBC
aXRBbmQoeDMsIHgxKSkKKyAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChPcCh4MiwgeDMpLCB4MSkK
KyAgICAvLyBBbmQgYW55IG9mIHRoZXNlOgorICAgIC8vICAgICAgT3AoQml0QW5kKHgxLCB4Miks
IHgxKQorICAgIC8vICAgICAgT3AoQml0QW5kKHgyLCB4MSksIHgxKQorICAgIC8vICAgICAgT3Ao
eDEsIEJpdEFuZCh4MSwgeDIpKQorICAgIC8vICAgICAgT3AoeDEsIEJpdEFuZCh4MiwgeDEpKQor
ICAgIC8vIEludG8gdGhpczogQml0QW5kKE9wKHgyLCB4MSksIHgxKQorICAgIC8vIFRoaXMgc2Vj
b25kIHNldCBpcyBlcXVpdmFsZW50IHRvIGRvaW5nIHgxID0+IEJpdEFuZCh4MSwgeDEpLCBhbmQg
dGhlbiBhcHBseWluZyB0aGUgZmlyc3Qgc2V0LgorICAgIC8vIEl0IGRvZXMgbm90IHJlZHVjZSB0
aGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgZXhlY3V0ZWQsIGJ1dCBwcm92aWRlcyBzb21lIHVzZWZ1
bCBub3JtYWxpemF0aW9uOiB3ZSBwcmVmZXIgdG8gaGF2ZSBCaXRBbmQgYXQgdGhlIG91dGVybW9z
dCwgdGhlbiBCaXRYb3IsIGFuZCBmaW5hbGx5IEJpdE9yIGF0IHRoZSBpbm5lcm1vc3QKKyAgICBi
b29sIGhhbmRsZUJpdEFuZERpc3RyaWJ1dGl2aXR5KCkKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X3ZhbHVlLT5vcGNvZGUoKSA9PSBCaXRPciB8fCBtX3ZhbHVlLT5vcGNvZGUoKSA9PSBCaXRYb3Ip
OworICAgICAgICBWYWx1ZSogeDEgPSBudWxscHRyOworICAgICAgICBWYWx1ZSogeDIgPSBudWxs
cHRyOworICAgICAgICBWYWx1ZSogeDMgPSBudWxscHRyOworICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdEFuZCAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2Rl
KCkgPT0gQml0QW5kKSB7CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDApID09IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKSkgeworICAgICAgICAgICAgICAgIHgx
ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAgICAgICAgICAgIHgyID0gbV92
YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpOworICAgICAgICAgICAgICAgIHgzID0gbV92YWx1ZS0+
Y2hpbGQoMSktPmNoaWxkKDEpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMSkgPT0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApKSB7CisgICAgICAg
ICAgICAgICAgeDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7CisgICAgICAgICAgICAg
ICAgeDIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgeDMg
PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSkp
IHsKKyAgICAgICAgICAgICAgICB4MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAg
ICAgICAgICAgICAgICB4MiA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKTsKKyAgICAgICAg
ICAgICAgICB4MyA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDEp
LT5jaGlsZCgxKSkgeworICAgICAgICAgICAgICAgIHgxID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDEpOworICAgICAgICAgICAgICAgIHgyID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDAp
OworICAgICAgICAgICAgICAgIHgzID0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUo
KSA9PSBCaXRBbmQpIHsKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKKyAgICAgICAgICAgICAgICB4MSA9IHgzID0gbV92
YWx1ZS0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgeDIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgxKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKSkgeworICAgICAgICAgICAgICAgIHgxID0geDMgPSBt
X3ZhbHVlLT5jaGlsZCgxKTsKKyAgICAgICAgICAgICAgICB4MiA9IG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5j
aGlsZCgxKS0+b3Bjb2RlKCkgPT0gQml0QW5kKSB7CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMSktPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDApKSB7CisgICAgICAgICAgICAg
ICAgeDEgPSB4MyA9IG1fdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIHgyID0gbV92
YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVl
LT5jaGlsZCgxKS0+Y2hpbGQoMSkgPT0gbV92YWx1ZS0+Y2hpbGQoMCkpIHsKKyAgICAgICAgICAg
ICAgICB4MSA9IHgzID0gbV92YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgeDIgPSBt
X3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHgxICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIEFTU0VSVCh4MiAhPSBudWxs
cHRyICYmIHgzICE9IG51bGxwdHIpOworICAgICAgICAgICAgVmFsdWUqIGJpdE9wID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcGNvZGUoKSwgbV92YWx1
ZS0+b3JpZ2luKCksIHgyLCB4Myk7CisgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4o
Qml0QW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwgYml0T3AsIHgxKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBz
dHJ1Y3QgQ2Fub25pY2FsaXplZENvbXBhcmlzb24gewogICAgICAgICBPcGNvZGUgb3Bjb2RlOwog
ICAgICAgICBWYWx1ZSogb3BlcmFuZHNbMl07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVz
dGIzLmNwcAkocmV2aXNpb24gMjQwOTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MjYsNiArMjQyNiw0MSBAQCB2b2lkIHRlc3RC
aXRBbmRTYW1lQXJnKGludDY0X3QgYSkKICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDY0X3Q+
KHByb2MsIGEpID09IGEpOwogfQogCit2b2lkIHRlc3RCaXRBbmROb3ROb3QoaW50NjRfdCBhLCBp
bnQ2NF90IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAg
ICBWYWx1ZSogYXJnQiA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBWYWx1ZSogbm90QSA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgYXJnQSwgcm9vdC0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0xKSk7CisgICAgVmFsdWUqIG5v
dEIgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0Is
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAtMSkpOworICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2Ms
IEJpdEFuZCwgT3JpZ2luKCksCisgICAgICAgICAgICBub3RBLAorICAgICAgICAgICAgbm90Qikp
OworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBhLCBiKSA9PSAofmEg
JiB+YikpOworfQorCit2b2lkIHRlc3RCaXRBbmROb3RJbW0oaW50NjRfdCBhLCBpbnQ2NF90IGIp
Cit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICBWYWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSog
bm90QSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgYXJn
QSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0xKSk7Cisg
ICAgVmFsdWUqIGNzdEIgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmln
aW4oKSwgYik7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIG5vdEEsCisgICAg
ICAgICAgICBjc3RCKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2Ms
IGEsIGIpID09ICh+YSAmIGIpKTsKK30KKwogdm9pZCB0ZXN0Qml0QW5kSW1tcyhpbnQ2NF90IGEs
IGludDY0X3QgYikKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTI4MTAsNiArMjg0NSw3NyBA
QCB2b2lkIHRlc3RCaXRPclNhbWVBcmcoaW50NjRfdCBhKQogICAgIENIRUNLKGNvbXBpbGVBbmRS
dW48aW50NjRfdD4ocHJvYywgYSkgPT0gYSk7CiB9CiAKK3ZvaWQgdGVzdEJpdE9yQW5kQW5kQXJn
cyhpbnQ2NF90IGEsIGludDY0X3QgYiwgaW50NjRfdCBjKQoreworICAgIFByb2NlZHVyZSBwcm9j
OworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFy
Z0EgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGFyZ0IgPSByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
CisgICAgVmFsdWUqIGFyZ0MgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgVmFsdWUqIGFuZEFCID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBhcmdBLCBhcmdC
KTsKKyAgICBWYWx1ZSogYW5kQ0EgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFu
ZCwgT3JpZ2luKCksIGFyZ0MsIGFyZ0EpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZSgKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEJpdE9yLCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgIGFuZEFCLAorICAgICAgICAgICAgYW5kQ0EpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRS
dW48aW50NjRfdD4ocHJvYywgYSwgYiwgYykgPT0gKChhICYgYikgfCAoYyAmIGEpKSk7Cit9CisK
K3ZvaWQgdGVzdEJpdE9yQW5kU2FtZUFyZ3MoaW50NjRfdCBhLCBpbnQ2NF90IGIpCit7CisgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICBWYWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogYXJnQiA9IHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxKTsKKyAgICBWYWx1ZSogYW5kQkEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGFyZ0IsIGFyZ0EpOworICAgIHJvb3QtPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEJpdE9yLCBPcmlnaW4o
KSwKKyAgICAgICAgICAgIGFyZ0EsCisgICAgICAgICAgICBhbmRCQSkpOworCisgICAgQ0hFQ0so
Y29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBhLCBiKSA9PSAoYSB8IChiICYgYSkpKTsKK30K
Kwordm9pZCB0ZXN0Qml0T3JOb3ROb3QoaW50NjRfdCBhLCBpbnQ2NF90IGIpCit7CisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICBWYWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogYXJnQiA9IHJvb3Qt
PmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKKyAgICBWYWx1ZSogbm90QSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQml0WG9yLCBPcmlnaW4oKSwgYXJnQSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIC0xKSk7CisgICAgVmFsdWUqIG5vdEIgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0IsIHJvb3QtPmFwcGVuZE5ldzxDb25z
dDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAtMSkpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZSgKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEJpdE9yLCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgIG5vdEEsCisgICAgICAgICAgICBub3RCKSk7CisKKyAgICBDSEVDSyhjb21waWxl
QW5kUnVuPGludDY0X3Q+KHByb2MsIGEsIGIpID09ICh+YSB8IH5iKSk7Cit9CisKK3ZvaWQgdGVz
dEJpdE9yTm90SW1tKGludDY0X3QgYSwgaW50NjRfdCBiKQoreworICAgIFByb2NlZHVyZSBwcm9j
OworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFy
Z0EgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIG5vdEEgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0EsIHJvb3QtPmFwcGVuZE5ldzxDb25z
dDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAtMSkpOworICAgIFZhbHVlKiBjc3RCID0gcm9vdC0+
YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGIpOworICAgIHJvb3QtPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEJpdE9yLCBP
cmlnaW4oKSwKKyAgICAgICAgICAgIG5vdEEsCisgICAgICAgICAgICBjc3RCKSk7CisgICAgCisg
ICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBhLCBiKSA9PSAofmEgfCBiKSk7
Cit9CisKIHZvaWQgdGVzdEJpdE9ySW1tcyhpbnQ2NF90IGEsIGludDY0X3QgYikKIHsKICAgICBQ
cm9jZWR1cmUgcHJvYzsKQEAgLTMxNzIsNiArMzI3OCw0MiBAQCB2b2lkIHRlc3RCaXRYb3JTYW1l
QXJnKGludDY0X3QgYSkKICAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBh
KSk7CiB9CiAKK3ZvaWQgdGVzdEJpdFhvckFuZEFuZEFyZ3MoaW50NjRfdCBhLCBpbnQ2NF90IGIs
IGludDY0X3QgYykKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290
ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgIFZhbHVlKiBhcmdCID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIFZhbHVlKiBhcmdDID0gcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIpOworICAgIFZhbHVlKiBhbmRCQSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQml0QW5kLCBPcmlnaW4oKSwgYXJnQiwgYXJnQSk7CisgICAgVmFsdWUqIGFuZENBID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBhcmdDLCBhcmdB
KTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICBwcm9jLCBCaXRYb3IsIE9yaWdpbigpLAorICAgICAgICAgICAgYW5kQkEsCisgICAgICAgICAg
ICBhbmRDQSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBhLCBi
LCBjKSA9PSAoKGEgJiBiKSBeIChjICYgYSkpKTsKK30KKwordm9pZCB0ZXN0Qml0WG9yQW5kU2Ft
ZUFyZ3MoaW50NjRfdCBhLCBpbnQ2NF90IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnQSA9IHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogYXJnQiA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBW
YWx1ZSogYW5kQUIgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2lu
KCksIGFyZ0EsIGFyZ0IpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgICAgIHByb2MsIEJpdFhvciwgT3JpZ2luKCksCisgICAgICAgICAgICBhbmRB
QiwKKyAgICAgICAgICAgIGFyZ0EpKTsKKyAgICAKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGlu
dDY0X3Q+KHByb2MsIGEsIGIpID09ICgoYSAmIGIpIF4gYSkpOworfQorCiB2b2lkIHRlc3RCaXRY
b3JJbW1zKGludDY0X3QgYSwgaW50NjRfdCBiKQogewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAt
MTYzMzcsNiArMTY0NzksMjIgQEAgZG91YmxlIG5lZ2F0aXZlWmVybygpCiAgICAgICAgICAgICAg
ICAgfSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgfQorI2RlZmluZSBSVU5fVEVSTkFSWSh0ZXN0LCB2YWx1ZXNBLCB2YWx1ZXNCLCB2YWx1ZXND
KSBcCisgICAgZm9yIChhdXRvIGEgOiB2YWx1ZXNBKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICBmb3IgKGF1dG8gYiA6IHZhbHVlc0IpIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGZvciAoYXV0byBjIDogdmFsdWVz
QykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQ1N0cmlu
ZyB0ZXN0U3RyID0gdG9DU3RyaW5nKCN0ZXN0LCAiKCIsIGEubmFtZSwgIiwgIiwgYi5uYW1lLCAi
LCIsIGMubmFtZSwgIikiKTsgXAorICAgICAgICAgICAgICAgIGlmICghc2hvdWxkUnVuKHRlc3RT
dHIuZGF0YSgpKSkgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg
dGFza3MuYXBwZW5kKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPiggICAgICAgICAgXAorICAgICAg
ICAgICAgICAgICAgICBbPV0gKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9DU3RyaW5nKHRlc3RTdHIsICIu
Li5cbiIpKTsgICBcCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0KGEudmFsdWUsIGIudmFs
dWUsIGMudmFsdWUpOyAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0
b0NTdHJpbmcodGVzdFN0ciwgIjogT0shXG4iKSk7IFwKKyAgICAgICAgICAgICAgICAgICAgfSkp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICB9CiAKIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKIHsKQEAgLTE2NjYx
LDYgKzE2ODE5LDggQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTl9CSU5B
UlkodGVzdEJpdEFuZEFyZ0ltbUZsb2F0LCBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCks
IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSk7CiAgICAgUlVOX0JJTkFSWSh0ZXN0Qml0
QW5kSW1tc0Zsb2F0LCBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCksIGZsb2F0aW5nUG9p
bnRPcGVyYW5kczxmbG9hdD4oKSk7CiAgICAgUlVOX0JJTkFSWSh0ZXN0Qml0QW5kQXJnc0Zsb2F0
V2l0aFVzZWxlc3NEb3VibGVDb252ZXJzaW9uLCBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+
KCksIGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSk7CisgICAgUlVOX0JJTkFSWSh0ZXN0
Qml0QW5kTm90Tm90LCBpbnQ2NE9wZXJhbmRzKCksIGludDY0T3BlcmFuZHMoKSk7CisgICAgUlVO
X0JJTkFSWSh0ZXN0Qml0QW5kTm90SW1tLCBpbnQ2NE9wZXJhbmRzKCksIGludDY0T3BlcmFuZHMo
KSk7CiAKICAgICBSVU4odGVzdEJpdE9yQXJncyg0MywgNDMpKTsKICAgICBSVU4odGVzdEJpdE9y
QXJncyg0MywgMCkpOwpAQCAtMTY3MjMsNiArMTY4ODMsMTAgQEAgdm9pZCBydW4oY29uc3QgY2hh
ciogZmlsdGVyKQogICAgIFJVTl9CSU5BUlkodGVzdEJpdE9yQXJnSW1tRmxvYXQsIGZsb2F0aW5n
UG9pbnRPcGVyYW5kczxmbG9hdD4oKSwgZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZsb2F0PigpKTsK
ICAgICBSVU5fQklOQVJZKHRlc3RCaXRPckltbXNGbG9hdCwgZmxvYXRpbmdQb2ludE9wZXJhbmRz
PGZsb2F0PigpLCBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpOwogICAgIFJVTl9CSU5B
UlkodGVzdEJpdE9yQXJnc0Zsb2F0V2l0aFVzZWxlc3NEb3VibGVDb252ZXJzaW9uLCBmbG9hdGlu
Z1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCksIGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSk7
CisgICAgUlVOX1RFUk5BUlkodGVzdEJpdE9yQW5kQW5kQXJncywgaW50NjRPcGVyYW5kcygpLCBp
bnQ2NE9wZXJhbmRzKCksIGludDY0T3BlcmFuZHMoKSk7CisgICAgUlVOX0JJTkFSWSh0ZXN0Qml0
T3JBbmRTYW1lQXJncywgaW50NjRPcGVyYW5kcygpLCBpbnQ2NE9wZXJhbmRzKCkpOworICAgIFJV
Tl9CSU5BUlkodGVzdEJpdE9yTm90Tm90LCBpbnQ2NE9wZXJhbmRzKCksIGludDY0T3BlcmFuZHMo
KSk7CisgICAgUlVOX0JJTkFSWSh0ZXN0Qml0T3JOb3RJbW0sIGludDY0T3BlcmFuZHMoKSwgaW50
NjRPcGVyYW5kcygpKTsKIAogICAgIFJVTl9CSU5BUlkodGVzdEJpdFhvckFyZ3MsIGludDY0T3Bl
cmFuZHMoKSwgaW50NjRPcGVyYW5kcygpKTsKICAgICBSVU5fVU5BUlkodGVzdEJpdFhvclNhbWVB
cmcsIGludDY0T3BlcmFuZHMoKSk7CkBAIC0xNjc2MSw2ICsxNjkyNSw4IEBAIHZvaWQgcnVuKGNv
bnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdEJpdFhvckltbUJpdFhvckFyZ0ltbTMyKDcs
IDIsIDMpKTsKICAgICBSVU4odGVzdEJpdFhvckltbUJpdFhvckFyZ0ltbTMyKDYsIDEsIDYpKTsK
ICAgICBSVU4odGVzdEJpdFhvckltbUJpdFhvckFyZ0ltbTMyKDI0LCAweGZmZmYsIDcpKTsKKyAg
ICBSVU5fVEVSTkFSWSh0ZXN0Qml0WG9yQW5kQW5kQXJncywgaW50NjRPcGVyYW5kcygpLCBpbnQ2
NE9wZXJhbmRzKCksIGludDY0T3BlcmFuZHMoKSk7CisgICAgUlVOX0JJTkFSWSh0ZXN0Qml0WG9y
QW5kU2FtZUFyZ3MsIGludDY0T3BlcmFuZHMoKSwgaW50NjRPcGVyYW5kcygpKTsKIAogICAgIFJV
Tl9VTkFSWSh0ZXN0Qml0Tm90QXJnLCBpbnQ2NE9wZXJhbmRzKCkpOwogICAgIFJVTl9VTkFSWSh0
ZXN0Qml0Tm90SW1tLCBpbnQ2NE9wZXJhbmRzKCkpOwo=
</data>
<flag name="review"
          id="378010"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362764</attachid>
            <date>2019-02-22 14:16:23 -0800</date>
            <delta_ts>2019-02-22 14:54:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch194252</filename>
            <type>text/plain</type>
            <size>25056</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQxOTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBA
CisyMDE5LTAyLTIyICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAg
ICAgICAgQjNSZWR1Y2VTdHJlbmd0aDogbWlzc2luZyBwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGZv
ciBiaW5hcnkgb3BlcmF0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk0MjUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisK
KyAgICAgICAgQWRkcyBzZXZlcmFsIHNldHMgb2Ygb3B0aW1pemF0aW9ucyBmb3IgQml0QW5kLCBC
aXRPciBhbmQgQml0WG9yLgorICAgICAgICBVc2luZyBCaXRBbmQgZGlzdHJpYnV0aXZpdHkgb3Zl
ciBCaXRPciBhbmQgQml0WG9yOgorICAgICAgICAgIFR1cm4gYW55IG9mIHRoZXNlIChmb3IgT3Ag
PT0gQml0T3IgfHwgT3AgPT0gQml0WG9yKToKKyAgICAgICAgICAgICAgICBPcChCaXRBbmQoeDEs
IHgyKSwgQml0QW5kKHgxLCB4MykpCisgICAgICAgICAgICAgICAgT3AoQml0QW5kKHgyLCB4MSks
IEJpdEFuZCh4MSwgeDMpKQorICAgICAgICAgICAgICAgIE9wKEJpdEFuZCh4MSwgeDIpLCBCaXRB
bmQoeDMsIHgxKSkKKyAgICAgICAgICAgICAgICBPcChCaXRBbmQoeDIsIHgxKSwgQml0QW5kKHgz
LCB4MSkpCisgICAgICAgICAgIEludG8gdGhpczogQml0QW5kKE9wKHgyLCB4MyksIHgxKQorICAg
ICAgICAgICBBbmQgYW55IG9mIHRoZXNlOgorICAgICAgICAgICAgICAgIE9wKEJpdEFuZCh4MSwg
eDIpLCB4MSkKKyAgICAgICAgICAgICAgICBPcChCaXRBbmQoeDIsIHgxKSwgeDEpCisgICAgICAg
ICAgICAgICAgT3AoeDEsIEJpdEFuZCh4MSwgeDIpKQorICAgICAgICAgICAgICAgIE9wKHgxLCBC
aXRBbmQoeDIsIHgxKSkKKyAgICAgICAgICAgSW50byB0aGlzOiBCaXRBbmQoT3AoeDIsIHgxKSwg
eDEpCisgICAgICAgICAgIFRoaXMgc2Vjb25kIHNldCBpcyBlcXVpdmFsZW50IHRvIGRvaW5nIHgx
ID0+IEJpdEFuZCh4MSwgeDEpLCBhbmQgdGhlbiBhcHBseWluZyB0aGUgZmlyc3Qgc2V0LgorICAg
ICAgICBVc2luZyBkZSBNb3JnYW4gbGF3cyAod2UgcmVwcmVzZW50IG5vdCBhcyBCaXRYb3Igd2l0
aCBhbGxPbmVzKToKKyAgICAgICAgICBCaXRBbmQoQml0WG9yKHgxLCBhbGxPbmVzKSwgQml0WG9y
KHgyLCBhbGxPbmVzKSkgPT4gQml0WG9yKEJpdE9yKHgxLCB4MiksIGFsbE9uZXMpCisgICAgICAg
ICAgQml0T3IoQml0WG9yKHgxLCBhbGxPbmVzKSwgQml0WG9yKHgyLCBhbGxPbmVzKSA9PiBCaXRY
b3IoQml0QW5kKHgxLCB4MiksIGFsbE9uZXMpCisgICAgICAgICAgQml0T3IoQml0WG9yKHgsIGFs
bE9uZXMpLCBjKSA9PiBCaXRYb3IoQml0QW5kKHgsIH5jKSwgYWxsT25lcykKKyAgICAgICAgICBC
aXRBbmQoQml0WG9yKHgsIGFsbE9uZXMpLCBjKSA9PiBCaXRYb3IoQml0T3IoeCwgfmMpLCBhbGxP
bmVzKQorICAgICAgICBUaGUgbGF0dGVyIHR3byBhcmUgZXF1aXZhbGVudCB0byBkb2luZyBjID0+
IEJpdFhvcih+YywgYWxsT25lcyksIGFuZCB0aGVuIGFwcGx5aW5nIHRoZSBmb3JtZXIgdHdvLgor
CisgICAgICAgIEFsbCBvZiB0aGVzZSB0cmFuc2Zvcm1hdGlvbnMgZWl0aGVyIHJlZHVjZSB0aGUg
bnVtYmVyIG9mIG9wZXJhdGlvbnMgKHdoaWNoIHdlIGFsd2F5cyBkbyB3aGVuIHBvc3NpYmxlKSwg
b3IgYnJpbmcgdGhlIGV4cHJlc3Npb24gY2xvc2VyIHRvIGhhdmluZzoKKyAgICAgICAgICAtIEJp
dFhvciB3aXRoIGFsbCBvbmVzIGF0IHRoZSBvdXRlcm1vc3QKKyAgICAgICAgICAtIHRoZW4gQml0
QW5kCisgICAgICAgICAgLSB0aGVuIG90aGVyIEJpdFhvcgorICAgICAgICAgIC0gdGhlbiBCaXRP
ciBhdCB0aGUgaW5uZXJtb3N0LgorICAgICAgICBUaGVzZSB0cmFuc2Zvcm1hdGlvbnMgdGhhdCBk
b24ndCBkaXJlY3RseSByZWR1Y2UgdGhlIG51bWJlciBvZiBvcGVyYXRpb25zIGFyZSBzdGlsbCB1
c2VmdWwgZm9yIG5vcm1hbGl6YXRpb24gKGhlbHBpbmcgdGhpbmdzIGxpa2UgQ1NFKSwgYW5kIGFs
c28gY2FuIGVuYWJsZQorICAgICAgICBtb3JlIG9wdGltaXphdGlvbnMgKGZvciBleGFtcGxlIEJp
dFhvciB3aXRoIGFsbCBvbmVzIGNhbiBlYXNpbHkgY2FuY2VsIGVhY2ggb3RoZXIgb25jZSB0aGV5
IGFyZSBhbGwgYXQgdGhlIG91dGVybW9zdCBsZXZlbCkuCisKKyAgICAgICAgKiBiMy9CM1JlZHVj
ZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpC
Mzo6dGVzdEJpdEFuZE5vdE5vdCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Qml0QW5kTm90SW1t
KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCaXRPckFuZEFuZEFyZ3MpOgorICAgICAgICAoSlND
OjpCMzo6dGVzdEJpdE9yQW5kU2FtZUFyZ3MpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJpdE9y
Tm90Tm90KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCaXRPck5vdEltbSk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0Qml0WG9yQW5kQW5kQXJncyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Qml0
WG9yQW5kU2FtZUFyZ3MpOgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKwogMjAxOS0wMi0yMiAg
WXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIHB1dE5v
bkVudW1lcmFibGUgaW4gSlNXcmFwcGVyTWFwIGlzIHRvbyBjb3N0bHkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDI0MTk2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTYyLDggKzk2Miw4IEBACiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogQml0QW5kKHZhbHVlLCBhbGwtb25lcykKICAgICAgICAgICAgIC8vIEludG8gdGhpczogdmFs
dWUuCi0gICAgICAgICAgICBpZiAoKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQ2NCAmJiBtX3ZhbHVl
LT5jaGlsZCgxKS0+aXNJbnQoMHhmZmZmZmZmZmZmZmZmZmZmKSkKLSAgICAgICAgICAgICAgICB8
fCAobV92YWx1ZS0+dHlwZSgpID09IEludDMyICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgw
eGZmZmZmZmZmKSkpIHsKKyAgICAgICAgICAgIGlmICgobV92YWx1ZS0+dHlwZSgpID09IEludDY0
ICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90
Pjo6bWF4KCkpKQorICAgICAgICAgICAgICAgIHx8IChtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIg
JiYgbV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSkpKSB7CiAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVl
LT5jaGlsZCgwKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC05
ODQsNiArOTg0LDcgQEAKICAgICAgICAgICAgICAgICAmJiAhKG1fdmFsdWUtPmNoaWxkKDEpLT5h
c0ludDMyKCkgJiAweGZmZmZmZjAwKSkgewogICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxk
KDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwogICAgICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKFNFeHQxNih2YWx1ZSksIG1hc2spIHdoZXJl
IChtYXNrICYgMHhmZmZmMDAwMCkgPT0gMApAQCAtOTkyLDYgKzk5Myw3IEBACiAgICAgICAgICAg
ICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpICYgMHhmZmZmMDAwMCkpIHsK
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgwKTsKICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJp
dEFuZChTRXh0MzIodmFsdWUpLCBtYXNrKSB3aGVyZSAobWFzayAmIDB4ZmZmZmZmZmYwMDAwMDAw
MCkgPT0gMApAQCAtMTAwMiw2ICsxMDA0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgbV9pbmRl
eCwgWkV4dDMyLCBtX3ZhbHVlLT5vcmlnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOwogICAg
ICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKE9wKHZhbHVl
LCBjb25zdGFudDEpLCBjb25zdGFudDIpCkBAIC0xMDIzLDcgKzEwMjYsNDAgQEAKICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogQml0QW5kKEJpdFhvcih4MSwgYWxsT25lcyksIEJpdFhvcih4Miwg
YWxsT25lcykKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9yKEJpdE9yKHgxLCB4Miks
IGFsbE9uZXMpCisgICAgICAgICAgICAvLyBCeSBhcHBseWluZyBEZSBNb3JnYW4gbGF3cworICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRYb3IKKyAgICAg
ICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gQml0WG9yCisgICAg
ICAgICAgICAgICAgJiYgKChtX3ZhbHVlLT50eXBlKCkgPT0gSW50NjQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1l
cmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYg
bV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ2NF90Pjo6bWF4KCkpKQorICAgICAgICAgICAgICAgICAgICB8fCAobV92YWx1ZS0+dHlwZSgp
ID09IEludDMyCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKS0+aXNJ
bnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkpKSB7CisgICAgICAgICAg
ICAgICAgVmFsdWUqIGJpdE9yID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4
LCBCaXRPciwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSwg
bV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICByZXBsYWNlV2l0
aE5ldzxWYWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgYml0T3IsIG1fdmFsdWUtPmNo
aWxkKDEpLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKEJpdFhvcih4LCBhbGxPbmVzKSwg
YykKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9yKEJpdE9yKHgsIH5jKSwgYWxsT25l
cykKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB2YXJpYXRpb24gb24gdGhlIHByZXZpb3VzIG9w
dGltaXphdGlvbiwgdHJlYXRpbmcgYyBhcyBpZiBpdCB3ZXJlIEJpdFhvcih+YywgYWxsT25lcykK
KyAgICAgICAgICAgIC8vIEl0IGRvZXMgbm90IHJlZHVjZSB0aGUgbnVtYmVyIG9mIG9wZXJhdGlv
bnMsIGJ1dCBwcm92aWRlcyBzb21lIG5vcm1hbGl6YXRpb24gKHdlIHRyeSB0byBnZXQgQml0WG9y
IGJ5IGFsbE9uZXMgYXQgdGhlIG91dGVybW9zdCBwb2ludCksIGFuZCBzb21lIGNoYW5jZSB0byBm
bG9hdCBYb3JzIHRvIGEgcGxhY2Ugd2hlcmUgdGhleSBtaWdodCBnZXQgZWxpbWluYXRlZC4KKyAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9yCisgICAg
ICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpCisgICAgICAgICAgICAg
ICAgJiYgKChtX3ZhbHVlLT50eXBlKCkgPT0gSW50NjQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0
czx1aW50NjRfdD46Om1heCgpKSkKKyAgICAgICAgICAgICAgICAgICAgfHwgKG1fdmFsdWUtPnR5
cGUoKSA9PSBJbnQzMgorICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkp
KSkpIHsKKyAgICAgICAgICAgICAgICBWYWx1ZSogYml0T3IgPSBtX2luc2VydGlvblNldC5pbnNl
cnQ8VmFsdWU+KG1faW5kZXgsIEJpdE9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Yml0WG9yQ29uc3RhbnQobV9wcm9j
LCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aE5ldzxWYWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgYml0T3IsIG1fdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQml0T3I6CkBAIC0xMDY0
LDEyICsxMTAwLDQ2IEBACiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0T3IodmFsdWUs
IGFsbC1vbmVzKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBhbGwtb25lcy4KLSAgICAgICAg
ICAgIGlmICgobV92YWx1ZS0+dHlwZSgpID09IEludDY0ICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5p
c0ludCgweGZmZmZmZmZmZmZmZmZmZmYpKQotICAgICAgICAgICAgICAgIHx8IChtX3ZhbHVlLT50
eXBlKCkgPT0gSW50MzIgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDB4ZmZmZmZmZmYpKSkg
eworICAgICAgICAgICAgaWYgKChtX3ZhbHVlLT50eXBlKCkgPT0gSW50NjQgJiYgbV92YWx1ZS0+
Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpCisg
ICAgICAgICAgICAgICAgfHwgKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiAmJiBtX3ZhbHVlLT5j
aGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkpIHsK
ICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBCaXRPcihCaXRYb3IoeDEsIGFsbE9uZXMpLCBCaXRYb3IoeDIsIGFsbE9uZXMp
CisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcihCaXRBbmQoeDEsIHgyKSwgYWxsT25l
cykKKyAgICAgICAgICAgIC8vIEJ5IGFwcGx5aW5nIERlIE1vcmdhbiBsYXdzCisgICAgICAgICAg
ICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdFhvcgorICAgICAgICAgICAg
ICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBCaXRYb3IKKyAgICAgICAgICAg
ICAgICAmJiAoKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQ2NAorICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQ2NF90Pjo6bWF4KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVl
LT5jaGlsZCgxKS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+
OjptYXgoKSkpCisgICAgICAgICAgICAgICAgICAgIHx8IChtX3ZhbHVlLT50eXBlKCkgPT0gSW50
MzIKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgx
KS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpLT5pc0ludChzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKSkpIHsKKyAgICAgICAgICAgICAgICBW
YWx1ZSogYml0QW5kID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBCaXRB
bmQsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCksIG1fdmFs
dWUtPmNoaWxkKDEpLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8
VmFsdWU+KEJpdFhvciwgbV92YWx1ZS0+b3JpZ2luKCksIGJpdEFuZCwgbV92YWx1ZS0+Y2hpbGQo
MSktPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRPcihCaXRYb3IoeCwgYWxsT25lcyksIGMpCisg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcihCaXRBbmQoeCwgfmMpLCBhbGxPbmVzKQor
ICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHZhcmlhdGlvbiBvbiB0aGUgcHJldmlvdXMgb3B0aW1p
emF0aW9uLCB0cmVhdGluZyBjIGFzIGlmIGl0IHdlcmUgQml0WG9yKH5jLCBhbGxPbmVzKQorICAg
ICAgICAgICAgLy8gSXQgZG9lcyBub3QgcmVkdWNlIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucywg
YnV0IHByb3ZpZGVzIHNvbWUgbm9ybWFsaXphdGlvbiAod2UgdHJ5IHRvIGdldCBCaXRYb3IgYnkg
YWxsT25lcyBhdCB0aGUgb3V0ZXJtb3N0IHBvaW50KSwgYW5kIHNvbWUgY2hhbmNlIHRvIGZsb2F0
IFhvcnMgdG8gYSBwbGFjZSB3aGVyZSB0aGV5IG1pZ2h0IGdldCBlbGltaW5hdGVkLgorICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRYb3IKKyAgICAgICAg
ICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkKKyAgICAgICAgICAgICAgICAm
JiAoKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQ2NAorICAgICAgICAgICAgICAgICAgICAgICAgJiYg
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ2NF90Pjo6bWF4KCkpKQorICAgICAgICAgICAgICAgICAgICB8fCAobV92YWx1ZS0+dHlwZSgp
ID09IEludDMyCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpKSkg
eworICAgICAgICAgICAgICAgIFZhbHVlKiBiaXRBbmQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8
VmFsdWU+KG1faW5kZXgsIEJpdEFuZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxk
KDApLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSktPmJpdFhvckNvbnN0YW50KG1fcHJvYywg
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKSk7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhOZXc8VmFsdWU+KEJpdFhvciwgbV92YWx1ZS0+b3JpZ2luKCksIGJpdEFuZCwgbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGhhbmRsZUJpdEFuZERpc3RyaWJ1dGl2aXR5KCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2Ug
Qml0WG9yOgpAQCAtMTExNiw2ICsxMTg2LDkgQEAKICAgICAgICAgICAgICAgICByZXBsYWNlV2l0
aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChoYW5kbGVCaXRB
bmREaXN0cmlidXRpdml0eSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAg
ICBicmVhazsKIApAQCAtMjIxMCw2ICsyMjgzLDcwIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAg
ICAvLyBGb3IgT3A9PUJpdE9yIG9yIEJpdFhvciwgdHVybiBhbnkgb2YgdGhlc2U6CisgICAgLy8g
ICAgICBPcChCaXRBbmQoeDEsIHgyKSwgQml0QW5kKHgxLCB4MykpCisgICAgLy8gICAgICBPcChC
aXRBbmQoeDIsIHgxKSwgQml0QW5kKHgxLCB4MykpCisgICAgLy8gICAgICBPcChCaXRBbmQoeDEs
IHgyKSwgQml0QW5kKHgzLCB4MSkpCisgICAgLy8gICAgICBPcChCaXRBbmQoeDIsIHgxKSwgQml0
QW5kKHgzLCB4MSkpCisgICAgLy8gSW50byB0aGlzOiBCaXRBbmQoT3AoeDIsIHgzKSwgeDEpCisg
ICAgLy8gQW5kIGFueSBvZiB0aGVzZToKKyAgICAvLyAgICAgIE9wKEJpdEFuZCh4MSwgeDIpLCB4
MSkKKyAgICAvLyAgICAgIE9wKEJpdEFuZCh4MiwgeDEpLCB4MSkKKyAgICAvLyAgICAgIE9wKHgx
LCBCaXRBbmQoeDEsIHgyKSkKKyAgICAvLyAgICAgIE9wKHgxLCBCaXRBbmQoeDIsIHgxKSkKKyAg
ICAvLyBJbnRvIHRoaXM6IEJpdEFuZChPcCh4MiwgeDEpLCB4MSkKKyAgICAvLyBUaGlzIHNlY29u
ZCBzZXQgaXMgZXF1aXZhbGVudCB0byBkb2luZyB4MSA9PiBCaXRBbmQoeDEsIHgxKSwgYW5kIHRo
ZW4gYXBwbHlpbmcgdGhlIGZpcnN0IHNldC4KKyAgICAvLyBJdCBkb2VzIG5vdCByZWR1Y2UgdGhl
IG51bWJlciBvZiBvcGVyYXRpb25zIGV4ZWN1dGVkLCBidXQgcHJvdmlkZXMgc29tZSB1c2VmdWwg
bm9ybWFsaXphdGlvbjogd2UgcHJlZmVyIHRvIGhhdmUgQml0QW5kIGF0IHRoZSBvdXRlcm1vc3Qs
IHRoZW4gQml0WG9yLCBhbmQgZmluYWxseSBCaXRPciBhdCB0aGUgaW5uZXJtb3N0CisgICAgYm9v
bCBoYW5kbGVCaXRBbmREaXN0cmlidXRpdml0eSgpCisgICAgeworICAgICAgICBBU1NFUlQobV92
YWx1ZS0+b3Bjb2RlKCkgPT0gQml0T3IgfHwgbV92YWx1ZS0+b3Bjb2RlKCkgPT0gQml0WG9yKTsK
KyAgICAgICAgVmFsdWUqIHgxID0gbnVsbHB0cjsKKyAgICAgICAgVmFsdWUqIHgyID0gbnVsbHB0
cjsKKyAgICAgICAgVmFsdWUqIHgzID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDApLT5vcGNvZGUoKSA9PSBCaXRBbmQgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgp
ID09IEJpdEFuZCkgeworICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgw
KSA9PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkpIHsKKyAgICAgICAgICAgICAgICB4MSA9
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICB4MiA9IG1fdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgxKTsKKyAgICAgICAgICAgICAgICB4MyA9IG1fdmFsdWUtPmNo
aWxkKDEpLT5jaGlsZCgxKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKSkgeworICAgICAgICAg
ICAgICAgIHgxID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpOworICAgICAgICAgICAgICAg
IHgyID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAgICAgICAgICAgIHgzID0g
bV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpKSB7
CisgICAgICAgICAgICAgICAgeDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAg
ICAgICAgICAgICAgeDIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7CisgICAgICAgICAg
ICAgICAgeDMgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKS0+
Y2hpbGQoMSkpIHsKKyAgICAgICAgICAgICAgICB4MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgxKTsKKyAgICAgICAgICAgICAgICB4MiA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsK
KyAgICAgICAgICAgICAgICB4MyA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkg
PT0gQml0QW5kKSB7CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDAp
ID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7CisgICAgICAgICAgICAgICAgeDEgPSB4MyA9IG1fdmFs
dWUtPmNoaWxkKDEpOworICAgICAgICAgICAgICAgIHgyID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDEpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MSkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKKyAgICAgICAgICAgICAgICB4MSA9IHgzID0gbV92
YWx1ZS0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgeDIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+Y2hp
bGQoMSktPm9wY29kZSgpID09IEJpdEFuZCkgeworICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDEpLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgwKSkgeworICAgICAgICAgICAgICAg
IHgxID0geDMgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICB4MiA9IG1fdmFs
dWUtPmNoaWxkKDEpLT5jaGlsZCgxKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+
Y2hpbGQoMSktPmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDApKSB7CisgICAgICAgICAgICAg
ICAgeDEgPSB4MyA9IG1fdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIHgyID0gbV92
YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGlmICh4MSAhPSBudWxscHRyKSB7CisgICAgICAgICAgICBBU1NFUlQoeDIgIT0gbnVsbHB0
ciAmJiB4MyAhPSBudWxscHRyKTsKKyAgICAgICAgICAgIFZhbHVlKiBiaXRPcCA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3Bjb2RlKCksIG1fdmFsdWUt
Pm9yaWdpbigpLCB4MiwgeDMpOworICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KEJp
dEFuZCwgbV92YWx1ZS0+b3JpZ2luKCksIGJpdE9wLCB4MSk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgc3Ry
dWN0IENhbm9uaWNhbGl6ZWRDb21wYXJpc29uIHsKICAgICAgICAgT3Bjb2RlIG9wY29kZTsKICAg
ICAgICAgVmFsdWUqIG9wZXJhbmRzWzJdOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5jcHAJKHJldmlzaW9uIDI0MTk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDg2LDYgKzI0ODYsNDEgQEAKICAgICBDSEVDSyhj
b21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEpID09IGEpOwogfQogCit2b2lkIHRlc3RCaXRB
bmROb3ROb3QoaW50NjRfdCBhLCBpbnQ2NF90IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7Cisg
ICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnQSA9
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogYXJnQiA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAg
ICBWYWx1ZSogbm90QSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmln
aW4oKSwgYXJnQSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IC0xKSk7CisgICAgVmFsdWUqIG5vdEIgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJp
dFhvciwgT3JpZ2luKCksIGFyZ0IsIHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAtMSkpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgICAgIHByb2MsIEJpdEFuZCwgT3JpZ2luKCksCisgICAgICAgICAgICBub3RB
LAorICAgICAgICAgICAgbm90QikpOworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQ2
NF90Pihwcm9jLCBhLCBiKSwgKH5hICYgfmIpKTsKK30KKwordm9pZCB0ZXN0Qml0QW5kTm90SW1t
KGludDY0X3QgYSwgaW50NjRfdCBiKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZ0EgPSByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgVmFsdWUqIG5vdEEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEJpdFhvciwgT3JpZ2luKCksIGFyZ0EsIHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHBy
b2MsIE9yaWdpbigpLCAtMSkpOworICAgIFZhbHVlKiBjc3RCID0gcm9vdC0+YXBwZW5kTmV3PENv
bnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGIpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZSgKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEJpdEFuZCwgT3JpZ2luKCksCisg
ICAgICAgICAgICBub3RBLAorICAgICAgICAgICAgY3N0QikpOworCisgICAgQ0hFQ0tfRVEoY29t
cGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBhLCBiKSwgKH5hICYgYikpOworfQorCiB2b2lkIHRl
c3RCaXRBbmRJbW1zKGludDY0X3QgYSwgaW50NjRfdCBiKQogewogICAgIFByb2NlZHVyZSBwcm9j
OwpAQCAtMjg3MCw2ICsyOTA1LDkxIEBACiAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90
Pihwcm9jLCBhKSA9PSBhKTsKIH0KIAordm9pZCB0ZXN0Qml0T3JBbmRBbmRBcmdzKGludDY0X3Qg
YSwgaW50NjRfdCBiLCBpbnQ2NF90IGMpCit7CisgICAgLy8gV2Ugd2FudCB0byBjaGVjayBldmVy
eSBwb3NzaWJsZSBvcmRlcmluZyBvZiBhcmd1bWVudHMgKHRvIHByb3Blcmx5IGNoZWNrIGV2ZXJ5
IHBhdGggaW4gQjNSZWR1Y2VTdHJlbmd0aCk6CisgICAgLy8gKChhICYgYikgfCAoYSAmIGMpKQor
ICAgIC8vICgoYSAmIGIpIHwgKGMgJiBhKSkKKyAgICAvLyAoKGIgJiBhKSB8IChhICYgYykpCisg
ICAgLy8gKChiICYgYSkgfCAoYyAmIGEpKQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytp
KSB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0g
cHJvYy5hZGRCbG9jaygpOworICAgICAgICBWYWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICAgICAgVmFsdWUqIGFyZ0IgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIFZhbHVlKiBh
cmdDID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBWYWx1ZSogYW5kQUIgPSBpICYgMiA/IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgYXJnQSwgYXJnQikK
KyAgICAgICAgICAgIDogcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdp
bigpLCBhcmdCLCBhcmdBKTsKKyAgICAgICAgVmFsdWUqIGFuZEFDID0gaSAmIDEgPyByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGFyZ0EsIGFyZ0MpCisgICAg
ICAgICAgICA6IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwg
YXJnQywgYXJnQSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEJpdE9yLCBPcmlnaW4oKSwKKyAgICAg
ICAgICAgICAgICBhbmRBQiwKKyAgICAgICAgICAgICAgICBhbmRBQykpOworCisgICAgICAgIENI
RUNLX0VRKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgYSwgYiwgYyksICgoYSAmIGIpIHwg
KGEgJiBjKSkpOworICAgIH0KK30KKwordm9pZCB0ZXN0Qml0T3JBbmRTYW1lQXJncyhpbnQ2NF90
IGEsIGludDY0X3QgYikKK3sKKyAgICAvLyBXZSB3YW50IHRvIGNoZWNrIGV2ZXJ5IHBvc3NpYmxl
IG9yZGVyaW5nIG9mIGFyZ3VtZW50cyAodG8gcHJvcGVybHkgY2hlY2sgZXZlcnkgcGF0aCBpbiBC
M1JlZHVjZVN0cmVuZ3RoKToKKyAgICAvLyAoKGEgJiBiKSB8IGEpCisgICAgLy8gKChiICYgYSkg
fCBhKQorICAgIC8vIChhIHwgKGEgJiBiKSkKKyAgICAvLyAoYSB8IChiICYgYSkpCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIFZhbHVlKiBh
cmdBID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSogYXJnQiA9IHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKKyAgICAgICAgVmFsdWUqIGFuZEFCID0gaSAmIDEgPyByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGFyZ0EsIGFyZ0IpCisgICAgICAgICAgICA6IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgYXJnQiwgYXJnQSk7
CisgICAgICAgIFZhbHVlKiByZXN1bHQgPSBpICYgMiA/IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQml0T3IsIE9yaWdpbigpLCBhbmRBQiwgYXJnQSkKKyAgICAgICAgICAgIDogcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRPciwgT3JpZ2luKCksIGFyZ0EsIGFuZEFCKTsKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCks
IHJlc3VsdCk7CisKKyAgICAgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9j
LCBhLCBiKSwgKChhICYgYikgfCBhKSk7CisgICAgfQorfQorCit2b2lkIHRlc3RCaXRPck5vdE5v
dChpbnQ2NF90IGEsIGludDY0X3QgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOworICAgIFZhbHVlKiBhcmdCID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIFZhbHVl
KiBub3RBID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBh
cmdBLCByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgLTEpKTsK
KyAgICBWYWx1ZSogbm90QiA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBP
cmlnaW4oKSwgYXJnQiwgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIC0xKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICAgICAgcHJvYywgQml0T3IsIE9yaWdpbigpLAorICAgICAgICAgICAgbm90QSwKKyAgICAg
ICAgICAgIG5vdEIpKTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJv
YywgYSwgYiksICh+YSB8IH5iKSk7Cit9CisKK3ZvaWQgdGVzdEJpdE9yTm90SW1tKGludDY0X3Qg
YSwgaW50NjRfdCBiKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZ0EgPSByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CisgICAgVmFsdWUqIG5vdEEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwg
T3JpZ2luKCksIGFyZ0EsIHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdp
bigpLCAtMSkpOworICAgIFZhbHVlKiBjc3RCID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIGIpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgK
KyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEJpdE9yLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
IG5vdEEsCisgICAgICAgICAgICBjc3RCKSk7CisgICAgCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFu
ZFJ1bjxpbnQ2NF90Pihwcm9jLCBhLCBiKSwgKH5hIHwgYikpOworfQorCiB2b2lkIHRlc3RCaXRP
ckltbXMoaW50NjRfdCBhLCBpbnQ2NF90IGIpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC0z
MjMyLDYgKzMzNTIsNTYgQEAKICAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9j
LCBhKSk7CiB9CiAKK3ZvaWQgdGVzdEJpdFhvckFuZEFuZEFyZ3MoaW50NjRfdCBhLCBpbnQ2NF90
IGIsIGludDY0X3QgYykKK3sKKyAgICAvLyBXZSB3YW50IHRvIGNoZWNrIGV2ZXJ5IHBvc3NpYmxl
IG9yZGVyaW5nIG9mIGFyZ3VtZW50cyAodG8gcHJvcGVybHkgY2hlY2sgZXZlcnkgcGF0aCBpbiBC
M1JlZHVjZVN0cmVuZ3RoKToKKyAgICAvLyAoKGEgJiBiKSBeIChhICYgYykpCisgICAgLy8gKChh
ICYgYikgXiAoYyAmIGEpKQorICAgIC8vICgoYiAmIGEpIF4gKGEgJiBjKSkKKyAgICAvLyAoKGIg
JiBhKSBeIChjICYgYSkpCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKKyAgICAg
ICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisgICAgICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBW
YWx1ZSogYXJnQiA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgVmFsdWUqIGFyZ0MgPSByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMik7CisgICAgICAgIFZhbHVlKiBhbmRBQiA9IGkgJiAyID8gcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBhcmdBLCBhcmdCKQorICAgICAgICAg
ICAgOiByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGFyZ0Is
IGFyZ0EpOworICAgICAgICBWYWx1ZSogYW5kQUMgPSBpICYgMSA/IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgYXJnQSwgYXJnQykKKyAgICAgICAgICAgIDog
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBhcmdDLCBhcmdB
KTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICAgICAgcHJvYywgQml0WG9yLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAg
ICBhbmRBQiwKKyAgICAgICAgICAgICAgICBhbmRBQykpOworCisgICAgICAgIENIRUNLX0VRKGNv
bXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgYSwgYiwgYyksICgoYSAmIGIpIF4gKGEgJiBjKSkp
OworICAgIH0KK30KKwordm9pZCB0ZXN0Qml0WG9yQW5kU2FtZUFyZ3MoaW50NjRfdCBhLCBpbnQ2
NF90IGIpCit7CisgICAgLy8gV2Ugd2FudCB0byBjaGVjayBldmVyeSBwb3NzaWJsZSBvcmRlcmlu
ZyBvZiBhcmd1bWVudHMgKHRvIHByb3Blcmx5IGNoZWNrIGV2ZXJ5IHBhdGggaW4gQjNSZWR1Y2VT
dHJlbmd0aCk6CisgICAgLy8gKChhICYgYikgXiBhKQorICAgIC8vICgoYiAmIGEpIF4gYSkKKyAg
ICAvLyAoYSBeIChhICYgYikpCisgICAgLy8gKGEgXiAoYiAmIGEpKQorICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgNDsgKytpKSB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICBWYWx1ZSogYXJnQSA9IHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKyAgICAgICAgVmFsdWUqIGFyZ0IgPSByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Cisg
ICAgICAgIFZhbHVlKiBhbmRBQiA9IGkgJiAxID8gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBCaXRBbmQsIE9yaWdpbigpLCBhcmdBLCBhcmdCKQorICAgICAgICAgICAgOiByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGFyZ0IsIGFyZ0EpOworICAgICAg
ICBWYWx1ZSogcmVzdWx0ID0gaSAmIDIgPyByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJp
dFhvciwgT3JpZ2luKCksIGFuZEFCLCBhcmdBKQorICAgICAgICAgICAgOiByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0EsIGFuZEFCKTsKKyAgICAgICAg
cm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3Vs
dCk7CisgICAgICAgIAorICAgICAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+KHBy
b2MsIGEsIGIpLCAoKGEgJiBiKSBeIGEpKTsKKyAgICB9Cit9CisKIHZvaWQgdGVzdEJpdFhvcklt
bXMoaW50NjRfdCBhLCBpbnQ2NF90IGIpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC0xNjQ1
Miw2ICsxNjYyMiwyMiBAQAogICAgICAgICAgICAgICAgIH0pKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0KKyNkZWZpbmUgUlVOX1RFUk5BUlko
dGVzdCwgdmFsdWVzQSwgdmFsdWVzQiwgdmFsdWVzQykgXAorICAgIGZvciAoYXV0byBhIDogdmFs
dWVzQSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZm9y
IChhdXRvIGIgOiB2YWx1ZXNCKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICBmb3IgKGF1dG8gYyA6IHZhbHVlc0MpIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgIENTdHJpbmcgdGVzdFN0ciA9IHRvQ1N0cmluZygjdGVz
dCwgIigiLCBhLm5hbWUsICIsICIsIGIubmFtZSwgIiwiLCBjLm5hbWUsICIpIik7IFwKKyAgICAg
ICAgICAgICAgICBpZiAoIXNob3VsZFJ1bih0ZXN0U3RyLmRhdGEoKSkpICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHRhc2tzLmFwcGVuZChjcmVhdGVTaGFyZWRU
YXNrPHZvaWQoKT4oICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgWz1dICgpIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKHRvQ1N0cmluZyh0ZXN0U3RyLCAiLi4uXG4iKSk7ICAgXAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGVzdChhLnZhbHVlLCBiLnZhbHVlLCBjLnZhbHVlKTsgICAgICAgIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9DU3RyaW5nKHRlc3RTdHIsICI6IE9LIVxu
IikpOyBcCisgICAgICAgICAgICAgICAgICAgIH0pKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCiB2b2lkIHJ1bihj
b25zdCBjaGFyKiBmaWx0ZXIpCiB7CkBAIC0xNjc4MCw2ICsxNjk2Niw4IEBACiAgICAgUlVOX0JJ
TkFSWSh0ZXN0Qml0QW5kQXJnSW1tRmxvYXQsIGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4o
KSwgZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZsb2F0PigpKTsKICAgICBSVU5fQklOQVJZKHRlc3RC
aXRBbmRJbW1zRmxvYXQsIGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSwgZmxvYXRpbmdQ
b2ludE9wZXJhbmRzPGZsb2F0PigpKTsKICAgICBSVU5fQklOQVJZKHRlc3RCaXRBbmRBcmdzRmxv
YXRXaXRoVXNlbGVzc0RvdWJsZUNvbnZlcnNpb24sIGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9h
dD4oKSwgZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZsb2F0PigpKTsKKyAgICBSVU5fQklOQVJZKHRl
c3RCaXRBbmROb3ROb3QsIGludDY0T3BlcmFuZHMoKSwgaW50NjRPcGVyYW5kcygpKTsKKyAgICBS
VU5fQklOQVJZKHRlc3RCaXRBbmROb3RJbW0sIGludDY0T3BlcmFuZHMoKSwgaW50NjRPcGVyYW5k
cygpKTsKIAogICAgIFJVTih0ZXN0Qml0T3JBcmdzKDQzLCA0MykpOwogICAgIFJVTih0ZXN0Qml0
T3JBcmdzKDQzLCAwKSk7CkBAIC0xNjg0Miw2ICsxNzAzMCwxMCBAQAogICAgIFJVTl9CSU5BUlko
dGVzdEJpdE9yQXJnSW1tRmxvYXQsIGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSwgZmxv
YXRpbmdQb2ludE9wZXJhbmRzPGZsb2F0PigpKTsKICAgICBSVU5fQklOQVJZKHRlc3RCaXRPcklt
bXNGbG9hdCwgZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZsb2F0PigpLCBmbG9hdGluZ1BvaW50T3Bl
cmFuZHM8ZmxvYXQ+KCkpOwogICAgIFJVTl9CSU5BUlkodGVzdEJpdE9yQXJnc0Zsb2F0V2l0aFVz
ZWxlc3NEb3VibGVDb252ZXJzaW9uLCBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCksIGZs
b2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSk7CisgICAgUlVOX1RFUk5BUlkodGVzdEJpdE9y
QW5kQW5kQXJncywgaW50NjRPcGVyYW5kcygpLCBpbnQ2NE9wZXJhbmRzKCksIGludDY0T3BlcmFu
ZHMoKSk7CisgICAgUlVOX0JJTkFSWSh0ZXN0Qml0T3JBbmRTYW1lQXJncywgaW50NjRPcGVyYW5k
cygpLCBpbnQ2NE9wZXJhbmRzKCkpOworICAgIFJVTl9CSU5BUlkodGVzdEJpdE9yTm90Tm90LCBp
bnQ2NE9wZXJhbmRzKCksIGludDY0T3BlcmFuZHMoKSk7CisgICAgUlVOX0JJTkFSWSh0ZXN0Qml0
T3JOb3RJbW0sIGludDY0T3BlcmFuZHMoKSwgaW50NjRPcGVyYW5kcygpKTsKIAogICAgIFJVTl9C
SU5BUlkodGVzdEJpdFhvckFyZ3MsIGludDY0T3BlcmFuZHMoKSwgaW50NjRPcGVyYW5kcygpKTsK
ICAgICBSVU5fVU5BUlkodGVzdEJpdFhvclNhbWVBcmcsIGludDY0T3BlcmFuZHMoKSk7CkBAIC0x
Njg4MCw2ICsxNzA3Miw4IEBACiAgICAgUlVOKHRlc3RCaXRYb3JJbW1CaXRYb3JBcmdJbW0zMig3
LCAyLCAzKSk7CiAgICAgUlVOKHRlc3RCaXRYb3JJbW1CaXRYb3JBcmdJbW0zMig2LCAxLCA2KSk7
CiAgICAgUlVOKHRlc3RCaXRYb3JJbW1CaXRYb3JBcmdJbW0zMigyNCwgMHhmZmZmLCA3KSk7Cisg
ICAgUlVOX1RFUk5BUlkodGVzdEJpdFhvckFuZEFuZEFyZ3MsIGludDY0T3BlcmFuZHMoKSwgaW50
NjRPcGVyYW5kcygpLCBpbnQ2NE9wZXJhbmRzKCkpOworICAgIFJVTl9CSU5BUlkodGVzdEJpdFhv
ckFuZFNhbWVBcmdzLCBpbnQ2NE9wZXJhbmRzKCksIGludDY0T3BlcmFuZHMoKSk7CiAKICAgICBS
VU5fVU5BUlkodGVzdEJpdE5vdEFyZywgaW50NjRPcGVyYW5kcygpKTsKICAgICBSVU5fVU5BUlko
dGVzdEJpdE5vdEltbSwgaW50NjRPcGVyYW5kcygpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>