<?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>151335</bug_id>
          
          <creation_ts>2015-11-16 18:12:03 -0800</creation_ts>
          <short_desc>B3 Patchpoint and Check opcodes should be able to specify WarmAny, ColdAny, and LateColdAny</short_desc>
          <delta_ts>2015-12-03 19:30:21 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>151214</dependson>
          <blocked>151808</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1142428</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-16 18:12:03 -0800</bug_when>
    <thetext>That would give us the equivalent of early clobber.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145313</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-01 11:42:28 -0800</bug_when>
    <thetext>This is a bit tricky.  Currently, we have five opcodes that have stackmaps:

Patchpoint
Check
CheckAdd
CheckSub
CheckMul

CheckMul already uses LateUse for its stackmap, because the multiply cannot be undone.  Hence we need to ensure that if we want to recover any of the input values, they cannot overlap with the result.

The other opcodes currently have no way of specifying LateUse for their stackmaps.  It&apos;s tricky because currently the machinery for forcing LateUse in CheckMul relies on making the *entire* stackmap into LateUse.  Specifying LateUse on the entire stackmap is super dangerous because it also implies cold use, which is incompatible with constraints like SomeRegister.  What we really want is to specify LateUse on only some of the stackmap arguments. Ideally, there would be some way of saying LateUse in the ValueRep input constraints.  For example, we could have a ValueRep::Late, which is like Any but means LateUse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146070</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-03 14:44:18 -0800</bug_when>
    <thetext>*** Bug 151811 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146130</commentid>
    <comment_count>3</comment_count>
      <attachid>266575</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-03 16:42:14 -0800</bug_when>
    <thetext>Created attachment 266575
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146171</commentid>
    <comment_count>4</comment_count>
      <attachid>266586</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-03 18:57:09 -0800</bug_when>
    <thetext>Created attachment 266586
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146173</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-03 18:59:01 -0800</bug_when>
    <thetext>Attachment 266586 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:3681:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 19 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>1146174</commentid>
    <comment_count>6</comment_count>
      <attachid>266586</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-12-03 19:10:29 -0800</bug_when>
    <thetext>Comment on attachment 266586
the patch

It feels a little weird to tie time of use, warmth of use, and location of use into a single value. But it seems not to be out of control just yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146176</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-03 19:19:47 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 266586 [details]
&gt; the patch
&gt; 
&gt; It feels a little weird to tie time of use, warmth of use, and location of
&gt; use into a single value. But it seems not to be out of control just yet.

It has a good chance of staying under control.  The only location of use for which warmth matters is *Any.  Warmth only influences register allocation.  All other locations have predetermined roles for the register allocator: Register means we have already picked a register, SomeRegister means we need it to be in some register no matter what (i.e. highest possible &quot;warmth&quot;), and StackArgument means it definitely should not be in a register.  Of the non-*Any locations, only SomeRegister could care about time of use: you could imagine LateSomeRegister. But currently late uses only arise for the purpose of OSR, so they are all cold (i.e. they don&apos;t care if they&apos;re in a register).

So then you could argue that this will get out of hand as soon as someone needs a warm late use. Then they might want LateWarmAny and LateSomeRegister. But I don&apos;t believe that they will need it. If you want a child to be constrained as LateWarmAny or LateSomeRegister, you could achieve that by append the child twice: once as WarmAny (or SomeRegister) and then again as LateColdAny.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146178</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-03 19:30:21 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/193393</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266575</attachid>
            <date>2015-12-03 16:42:14 -0800</date>
            <delta_ts>2015-12-03 18:57:09 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19254</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkocmV2
aXNpb24gMTkzMzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBDaGVja1NwZWNpYWw6OktleTo6
S2V5KGNvbnN0IEluc3QmIGluc3QpCiB7CiAgICAgbV9vcGNvZGUgPSBpbnN0Lm9wY29kZTsKICAg
ICBtX251bUFyZ3MgPSBpbnN0LmFyZ3Muc2l6ZSgpOwotICAgIG1fc3RhY2ttYXBSb2xlID0gQXJn
OjpVc2U7CisgICAgbV9zdGFja21hcFJvbGUgPSBTYW1lQXNSZXA7CiB9CiAKIHZvaWQgQ2hlY2tT
cGVjaWFsOjpLZXk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKQEAgLTc4LDcgKzc4LDcg
QEAgdm9pZCBDaGVja1NwZWNpYWw6OktleTo6ZHVtcChQcmludFN0cmVhbQogICAgIG91dC5wcmlu
dChtX29wY29kZSwgIigiLCBtX251bUFyZ3MsICIsIiwgbV9zdGFja21hcFJvbGUsICIpIik7CiB9
CiAKLUNoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWdu
ZWQgbnVtQXJncywgQXJnOjpSb2xlIHN0YWNrbWFwUm9sZSkKK0NoZWNrU3BlY2lhbDo6Q2hlY2tT
cGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQgbnVtQXJncywgUm9sZU1vZGUgc3Rh
Y2ttYXBSb2xlKQogICAgIDogbV9jaGVja09wY29kZShvcGNvZGUpCiAgICAgLCBtX3N0YWNrbWFw
Um9sZShzdGFja21hcFJvbGUpCiAgICAgLCBtX251bUNoZWNrQXJncyhudW1BcmdzKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHJldmlzaW9uIDE5MzM4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NywxMiArNTcsMTIgQEAgcHVibGljOgogICAgIHB1YmxpYzoKICAgICAgICAg
S2V5KCkKICAgICAgICAgICAgIDogbV9vcGNvZGUoQWlyOjpOb3ApCi0gICAgICAgICAgICAsIG1f
c3RhY2ttYXBSb2xlKEFpcjo6QXJnOjpVc2UpCisgICAgICAgICAgICAsIG1fc3RhY2ttYXBSb2xl
KFNhbWVBc1JlcCkKICAgICAgICAgICAgICwgbV9udW1BcmdzKDApCiAgICAgICAgIHsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgS2V5KEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQg
bnVtQXJncywgQWlyOjpBcmc6OlJvbGUgc3RhY2ttYXBSb2xlID0gQWlyOjpBcmc6OlVzZSkKKyAg
ICAgICAgS2V5KEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQgbnVtQXJncywgUm9sZU1vZGUg
c3RhY2ttYXBSb2xlID0gU2FtZUFzUmVwKQogICAgICAgICAgICAgOiBtX29wY29kZShvcGNvZGUp
CiAgICAgICAgICAgICAsIG1fc3RhY2ttYXBSb2xlKHN0YWNrbWFwUm9sZSkKICAgICAgICAgICAg
ICwgbV9udW1BcmdzKG51bUFyZ3MpCkBAIC04NywxMyArODcsMTMgQEAgcHVibGljOgogCiAgICAg
ICAgIEFpcjo6T3Bjb2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bjb2RlOyB9CiAgICAg
ICAgIHVuc2lnbmVkIG51bUFyZ3MoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3M7IH0KLSAgICAg
ICAgQWlyOjpBcmc6OlJvbGUgc3RhY2ttYXBSb2xlKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja21h
cFJvbGU7IH0KKyAgICAgICAgUm9sZU1vZGUgc3RhY2ttYXBSb2xlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGFja21hcFJvbGU7IH0KIAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3Q7CiAKICAgICAgICAgS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKICAg
ICAgICAgICAgIDogbV9vcGNvZGUoQWlyOjpOb3ApCi0gICAgICAgICAgICAsIG1fc3RhY2ttYXBS
b2xlKEFpcjo6QXJnOjpVc2UpCisgICAgICAgICAgICAsIG1fc3RhY2ttYXBSb2xlKFNhbWVBc1Jl
cCkKICAgICAgICAgICAgICwgbV9udW1BcmdzKDEpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAt
MTExLDExICsxMTEsMTEgQEAgcHVibGljOgogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAg
ICBBaXI6Ok9wY29kZSBtX29wY29kZTsKLSAgICAgICAgQWlyOjpBcmc6OlJvbGUgbV9zdGFja21h
cFJvbGU7CisgICAgICAgIFJvbGVNb2RlIG1fc3RhY2ttYXBSb2xlOwogICAgICAgICB1bnNpZ25l
ZCBtX251bUFyZ3M7CiAgICAgfTsKICAgICAKLSAgICBDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUs
IHVuc2lnbmVkIG51bUFyZ3MsIEFpcjo6QXJnOjpSb2xlIHN0YWNrbWFwUm9sZSA9IEFpcjo6QXJn
OjpVc2UpOworICAgIENoZWNrU3BlY2lhbChBaXI6Ok9wY29kZSwgdW5zaWduZWQgbnVtQXJncywg
Um9sZU1vZGUgc3RhY2ttYXBSb2xlID0gU2FtZUFzUmVwKTsKICAgICBDaGVja1NwZWNpYWwoY29u
c3QgS2V5Jik7CiAgICAgfkNoZWNrU3BlY2lhbCgpOwogCkBAIC0xNDAsNyArMTQwLDcgQEAgcHJv
dGVjdGVkOgogCiBwcml2YXRlOgogICAgIEFpcjo6T3Bjb2RlIG1fY2hlY2tPcGNvZGU7Ci0gICAg
QWlyOjpBcmc6OlJvbGUgbV9zdGFja21hcFJvbGU7CisgICAgUm9sZU1vZGUgbV9zdGFja21hcFJv
bGU7CiAgICAgdW5zaWduZWQgbV9udW1DaGVja0FyZ3M7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkocmV2aXNpb24gMTkzMzg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDggKzQ3LDggQEAgQ2hlY2tWYWx1ZTo6Q2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgTwog
ICAgIEFTU0VSVChCMzo6aXNJbnQodHlwZSgpKSk7CiAgICAgQVNTRVJUKGxlZnQtPnR5cGUoKSA9
PSByaWdodC0+dHlwZSgpKTsKICAgICBBU1NFUlQob3Bjb2RlID09IENoZWNrQWRkIHx8IG9wY29k
ZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0gQ2hlY2tNdWwpOwotICAgIGFwcGVuZChDb25zdHJh
aW5lZFZhbHVlKGxlZnQsIFZhbHVlUmVwOjpBbnkpKTsKLSAgICBhcHBlbmQoQ29uc3RyYWluZWRW
YWx1ZShyaWdodCwgVmFsdWVSZXA6OkFueSkpOworICAgIGFwcGVuZChDb25zdHJhaW5lZFZhbHVl
KGxlZnQsIFZhbHVlUmVwOjpXYXJtQW55KSk7CisgICAgYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUo
cmlnaHQsIFZhbHVlUmVwOjpXYXJtQW55KSk7CiB9CiAKIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENo
ZWNrLgpAQCAtNTYsNyArNTYsNyBAQCBDaGVja1ZhbHVlOjpDaGVja1ZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPCiAgICAgOiBTdGFja21hcFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUs
IFZvaWQsIG9yaWdpbikKIHsKICAgICBBU1NFUlQob3Bjb2RlID09IENoZWNrKTsKLSAgICBhcHBl
bmQoQ29uc3RyYWluZWRWYWx1ZShwcmVkaWNhdGUsIFZhbHVlUmVwOjpBbnkpKTsKKyAgICBhcHBl
bmQoQ29uc3RyYWluZWRWYWx1ZShwcmVkaWNhdGUsIFZhbHVlUmVwOjpXYXJtQW55KSk7CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3RyYWluZWRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbnN0cmFpbmVkVmFsdWUuaAkocmV2aXNpb24gMTkzMzg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RyYWluZWRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw3ICs0Miw3IEBAIHB1YmxpYzoKIAogICAgIENvbnN0cmFpbmVkVmFsdWUoVmFsdWUqIHZhbHVl
KQogICAgICAgICA6IG1fdmFsdWUodmFsdWUpCi0gICAgICAgICwgbV9yZXAoVmFsdWVSZXA6OkFu
eSkKKyAgICAgICAgLCBtX3JlcChWYWx1ZVJlcDo6V2FybUFueSkKICAgICB7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24g
MTkzMzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc5Nyw3ICs3OTcsOSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBB
cmcgYXJnOwogICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZXAoKS5raW5kKCkpIHsKLSAgICAg
ICAgICAgIGNhc2UgVmFsdWVSZXA6OkFueToKKyAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6Oldh
cm1Bbnk6CisgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpDb2xkQW55OgorICAgICAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnk6CiAgICAgICAgICAgICAgICAgaWYgKGltbSh2YWx1
ZS52YWx1ZSgpKSkKICAgICAgICAgICAgICAgICAgICAgYXJnID0gaW1tKHZhbHVlLnZhbHVlKCkp
OwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLnZhbHVlKCktPmhhc0ludDY0KCkpCkBA
IC0xNzAwLDcgKzE3MDIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgVmVjdG9yPEluc3Q+IGFm
dGVyOwogICAgICAgICAgICAgaWYgKHBhdGNocG9pbnRWYWx1ZS0+dHlwZSgpICE9IFZvaWQpIHsK
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhdGNocG9pbnRWYWx1ZS0+cmVzdWx0Q29uc3RyYWlu
dC5raW5kKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAg
ICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6V2FybUFueToKKyAgICAgICAgICAgICAgICBjYXNlIFZh
bHVlUmVwOjpDb2xkQW55OgorICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVDb2xk
QW55OgogICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKICAgICAg
ICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXAocGF0Y2hwb2ludFZhbHVlKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTc2MSw3ICsxNzY1LDcgQEAgcHJpdmF0ZToK
IAogICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gQWlyOjpPb3BzOwogICAgICAgICAg
ICAgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0YXRpdmU7Ci0gICAgICAg
ICAgICBBcmc6OlJvbGUgc3RhY2ttYXBSb2xlID0gQXJnOjpVc2U7CisgICAgICAgICAgICBTdGFj
a21hcFNwZWNpYWw6OlJvbGVNb2RlIHN0YWNrbWFwUm9sZSA9IFN0YWNrbWFwU3BlY2lhbDo6U2Ft
ZUFzUmVwOwogICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgewogICAgICAg
ICAgICAgY2FzZSBDaGVja0FkZDoKICAgICAgICAgICAgICAgICBvcGNvZGUgPSBvcGNvZGVGb3JU
eXBlKEJyYW5jaEFkZDMyLCBCcmFuY2hBZGQ2NCwgQWlyOjpPb3BzLCBtX3ZhbHVlLT50eXBlKCkp
OwpAQCAtMTc3Miw3ICsxNzc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgQ2hlY2tNdWw6CiAgICAgICAgICAgICAgICAgb3Bjb2RlID0gb3Bj
b2RlRm9yVHlwZShCcmFuY2hNdWwzMiwgQnJhbmNoTXVsNjQsIEFpcjo6T29wcywgY2hlY2tWYWx1
ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBzdGFja21hcFJvbGUgPSBBcmc6OkxhdGVVc2U7
CisgICAgICAgICAgICAgICAgc3RhY2ttYXBSb2xlID0gU3RhY2ttYXBTcGVjaWFsOjpGb3JjZUxh
dGVVc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCShyZXZpc2lv
biAxOTMzODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lh
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEyICs0OSwxMiBAQCB2b2lkIFBhdGNocG9pbnRT
cGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MTMzNQogICAgIAogICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgp
ID09IFZvaWQpIHsKLSAgICAgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMSwgaW5zdCwgQXJnOjpVc2Us
IGNhbGxiYWNrKTsKKyAgICAgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMSwgaW5zdCwgU2FtZUFzUmVw
LCBjYWxsYmFjayk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBjYWxsYmFjayhpbnN0
LmFyZ3NbMV0sIEFyZzo6RGVmLCBpbnN0Lm9yaWdpbi0+YWlyVHlwZSgpKTsKLSAgICBmb3JFYWNo
QXJnSW1wbCgwLCAyLCBpbnN0LCBBcmc6OlVzZSwgY2FsbGJhY2spOworICAgIGZvckVhY2hBcmdJ
bXBsKDAsIDIsIGluc3QsIFNhbWVBc1JlcCwgY2FsbGJhY2spOwogfQogCiBib29sIFBhdGNocG9p
bnRTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCkBAIC04MCw3ICs4MCw3IEBAIGJvb2wgUGF0
Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QKIAogICAgIGlmIChhcmdJbmRleCA9PSAx
KSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdC5vcmlnaW4tPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+
cmVzdWx0Q29uc3RyYWludC5raW5kKCkpIHsKLSAgICAgICAgY2FzZSBWYWx1ZVJlcDo6QW55Ogor
ICAgICAgICBjYXNlIFZhbHVlUmVwOjpXYXJtQW55OgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpT
dGFja0FyZ3VtZW50OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgVmFs
dWVSZXA6OlNvbWVSZWdpc3RlcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Bh
dGNocG9pbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkocmV2aXNpb24gMTkzMzg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NyArNDMsNyBAQCB2b2lkIFBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmluCiBQYXRj
aHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBP
cmlnaW4gb3JpZ2luKQogICAgIDogQmFzZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgUGF0Y2hwb2lu
dCwgdHlwZSwgb3JpZ2luKQogICAgICwgZWZmZWN0cyhFZmZlY3RzOjpmb3JDYWxsKCkpCi0gICAg
LCByZXN1bHRDb25zdHJhaW50KHR5cGUgPT0gVm9pZCA/IFZhbHVlUmVwOjpBbnkgOiBWYWx1ZVJl
cDo6U29tZVJlZ2lzdGVyKQorICAgICwgcmVzdWx0Q29uc3RyYWludCh0eXBlID09IFZvaWQgPyBW
YWx1ZVJlcDo6V2FybUFueSA6IFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpCiB7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShyZXZpc2lv
biAxOTMzODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtNTEsOSArNTEsOSBAQCBwdWJsaWM6CiAgICAgLy8gb2Ygc3Vi
c3RpdHV0aW9uIGNvdWxkIGJlIG1hZGUgc28gbG9uZyBhcyB0aGVyZSBhcmUgbm8gaW50ZXJmZXJp
bmcgd3JpdGVzLgogICAgIEVmZmVjdHMgZWZmZWN0czsKIAotICAgIC8vIFRoZSBpbnB1dCByZXBy
ZXNlbnRhdGlvbiAoaS5lLiBjb25zdHJhaW50KSBvZiB0aGUgcmV0dXJuIHZhbHVlLiBUaGlzIGRl
ZmF1bHRzIHRvIEFueSBpZiB0aGUgdHlwZSBpcwotICAgIC8vIFZvaWQgYW5kIGl0IGRlZmF1bHRz
IHRvIFNvbWVSZWdpc3RlciBvdGhlcndpc2UuIEl0J3MgaWxsZWdhbCB0byBtZXNzIHdpdGggdGhp
cyBpZiB0aGUgdHlwZSBpcyBWb2lkLgotICAgIC8vIE90aGVyd2lzZSB5b3UgY2FuIHNldCB0aGlz
IHRvIGFueSBpbnB1dCBjb25zdHJhaW50LgorICAgIC8vIFRoZSBpbnB1dCByZXByZXNlbnRhdGlv
biAoaS5lLiBjb25zdHJhaW50KSBvZiB0aGUgcmV0dXJuIHZhbHVlLiBUaGlzIGRlZmF1bHRzIHRv
IFdhcm1BbnkgaWYgdGhlCisgICAgLy8gdHlwZSBpcyBWb2lkIGFuZCBpdCBkZWZhdWx0cyB0byBT
b21lUmVnaXN0ZXIgb3RoZXJ3aXNlLiBJdCdzIGlsbGVnYWwgdG8gbWVzcyB3aXRoIHRoaXMgaWYg
dGhlIHR5cGUKKyAgICAvLyBpcyBWb2lkLiBPdGhlcndpc2UgeW91IGNhbiBzZXQgdGhpcyB0byBh
bnkgaW5wdXQgY29uc3RyYWludC4KICAgICBWYWx1ZVJlcCByZXN1bHRDb25zdHJhaW50OwogCiBw
cm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNp
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
U3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5MzM4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAg
Y29uc3QgUmVnaXN0ZXJTZXQmIFN0YWNrbWFwU3BlY2lhbDo6ZXh0cgogCiB2b2lkIFN0YWNrbWFw
U3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywg
dW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCi0gICAgSW5zdCYgaW5zdCwgQXJnOjpSb2xlIHJv
bGUsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykK
KyAgICBJbnN0JiBpbnN0LCBSb2xlTW9kZSByb2xlTW9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPElu
c3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQogewogICAgIFN0YWNrbWFwVmFsdWUqIHZh
bHVlID0gaW5zdC5vcmlnaW4tPmFzPFN0YWNrbWFwVmFsdWU+KCk7CiAgICAgQVNTRVJUKHZhbHVl
KTsKQEAgLTg3LDExICs4NywzMCBAQCB2b2lkIFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0lt
cGwoCiAgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQWlyQXJnc107
CiAgICAgICAgIENvbnN0cmFpbmVkVmFsdWUgY2hpbGQgPSB2YWx1ZS0+Y29uc3RyYWluZWRDaGls
ZChpICsgbnVtSWdub3JlZEIzQXJncyk7CiAKLSAgICAgICAgQXJnOjpSb2xlIHRoaXNSb2xlID0g
cm9sZTsKLSAgICAgICAgCi0gICAgICAgIC8vIENvb2wgZG93biB0aGUgcm9sZSBpZiB0aGUgdXNl
IGlzIGNvbGQuCi0gICAgICAgIGlmIChjaGlsZC5yZXAoKS5raW5kKCkgPT0gVmFsdWVSZXA6OkFu
eSAmJiB0aGlzUm9sZSA9PSBBcmc6OlVzZSkKLSAgICAgICAgICAgIHRoaXNSb2xlID0gQXJnOjpD
b2xkVXNlOworICAgICAgICBBcmc6OlJvbGUgcm9sZTsKKyAgICAgICAgc3dpdGNoIChyb2xlTW9k
ZSkgeworICAgICAgICBjYXNlIFNhbWVBc1JlcDoKKyAgICAgICAgICAgIHN3aXRjaCAoY2hpbGQu
cmVwKCkua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpXYXJtQW55OgorICAg
ICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICAgICAgY2FzZSBW
YWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFjazoKKyAg
ICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgICAgICBjYXNl
IFZhbHVlUmVwOjpDb25zdGFudDoKKyAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpVc2U7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpDb2xkQW55
OgorICAgICAgICAgICAgICAgIHJvbGUgPSBBcmc6OkNvbGRVc2U7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlQ29sZEFueToKKyAgICAgICAg
ICAgICAgICByb2xlID0gQXJnOjpMYXRlVXNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9yY2VMYXRlVXNl
OgorICAgICAgICAgICAgcm9sZSA9IEFyZzo6TGF0ZVVzZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBjYWxsYmFjayhhcmcsIHJvbGUsIEFyZzo6dHlw
ZUZvckIzVHlwZShjaGlsZC52YWx1ZSgpLT50eXBlKCkpKTsKICAgICB9CkBAIC0xOTMsNyArMjEy
LDkgQEAgYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JWYWx1ZQogYm9vbCBTdGFj
a21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXAoQWlyOjpDb2RlJiBjb2RlLCBjb25zdCBBaXI6
OkFyZyYgYXJnLCBjb25zdCBWYWx1ZVJlcCYgcmVwKQogewogICAgIHN3aXRjaCAocmVwLmtpbmQo
KSkgewotICAgIGNhc2UgVmFsdWVSZXA6OkFueToKKyAgICBjYXNlIFZhbHVlUmVwOjpXYXJtQW55
OgorICAgIGNhc2UgVmFsdWVSZXA6OkNvbGRBbnk6CisgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZUNv
bGRBbnk6CiAgICAgICAgIC8vIFdlIGFscmVhZHkgdmVyaWZpZWQgYnkgaXNBcmdWYWxpZEZvclZh
bHVlKCkuCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdp
c3RlcjoKQEAgLTI0MSw0ICsyNjIsMjMgQEAgVmFsdWVSZXAgU3RhY2ttYXBTcGVjaWFsOjpyZXBG
b3JBcmcoQ29kZQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAorbmFtZXNwYWNlIFdURiB7
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgU3RhY2ttYXBTcGVjaWFsOjpSb2xlTW9kZSBtb2RlKQoreworICAgIHN3aXRj
aCAobW9kZSkgeworICAgIGNhc2UgU3RhY2ttYXBTcGVjaWFsOjpTYW1lQXNSZXA6CisgICAgICAg
IG91dC5wcmludCgiU2FtZUFzUmVwIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNr
bWFwU3BlY2lhbDo6Rm9yY2VMYXRlVXNlOgorICAgICAgICBvdXQucHJpbnQoIkZvcmNlTGF0ZVVz
ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5o
CShyZXZpc2lvbiAxOTMzODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsMTEgQEAgcHVibGljOgogICAg
IFN0YWNrbWFwU3BlY2lhbCgpOwogICAgIHZpcnR1YWwgflN0YWNrbWFwU3BlY2lhbCgpOwogCisg
ICAgZW51bSBSb2xlTW9kZSA6IGludDhfdCB7CisgICAgICAgIFNhbWVBc1JlcCwKKyAgICAgICAg
Rm9yY2VMYXRlVXNlCisgICAgfTsKKwogcHJvdGVjdGVkOgogICAgIHZvaWQgcmVwb3J0VXNlZFJl
Z2lzdGVycyhBaXI6Okluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRlOwogICAgIGNv
bnN0IFJlZ2lzdGVyU2V0JiBleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyhBaXI6Okluc3QmKSBvdmVy
cmlkZTsKQEAgLTUyLDEwICs1NywxMCBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBOb3RlIHRoYXQg
dGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJ
bXBsKCkuIFdlIGhhdmUgbWFueSBzb21lCiAgICAgLy8gc3ViY2xhc3NlcyB0aGF0IGltcGxlbWVu
dCB0aGF0LgotCiAgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgKICAgICAgICAgdW5zaWduZWQgbnVt
SWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCi0gICAgICAgIEFpcjo6
SW5zdCYsIEFpcjo6QXJnOjpSb2xlIHJvbGUsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6
OkVhY2hBcmdDYWxsYmFjaz4mKTsKKyAgICAgICAgQWlyOjpJbnN0JiwgUm9sZU1vZGUsIGNvbnN0
IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKTsKKyAgICAKICAgICBi
b29sIGlzVmFsaWRJbXBsKAogICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNp
Z25lZCBudW1JZ25vcmVkQWlyQXJncywKICAgICAgICAgQWlyOjpJbnN0Jik7CkBAIC03Myw2ICs3
OCwxMiBAQCBwcm90ZWN0ZWQ6CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCituYW1lc3Bh
Y2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6U3Rh
Y2ttYXBTcGVjaWFsOjpSb2xlTW9kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKIAogI2VuZGlmIC8vIEIzU3RhY2ttYXBTcGVjaWFsX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHJldmlzaW9uIDE5
MzM4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtODQsMTEgKzg0LDEyIEBAIHB1YmxpYzoKICAgICAvLyBjaGlsZHJlbigp
LmFwcGVuZCgpLiBUaGF0IHdpbGwgd29yayBmaW5lLCBidXQgaXQncyBub3QgcmVjb21tZW5kZWQu
CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc3RyYWluZWRWYWx1ZSYpOwogCisgICAgLy8gSGVs
cGVyIGZvciBhcHBlbmRpbmcgY29sZCBhbnkncy4gVGhpcyBvZnRlbiB1c2VkIGJ5IGNsaWVudHMg
dG8gaW1wbGVtZW50IE9TUi4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgotICAg
IHZvaWQgYXBwZW5kQW55cyhjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpCisgICAgdm9pZCBhcHBl
bmRDb2xkQW55cyhjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpCiAgICAgewogICAgICAgICBmb3Ig
KFZhbHVlKiB2YWx1ZSA6IHZlY3RvcikKLSAgICAgICAgICAgIGFwcGVuZCh2YWx1ZSk7CisgICAg
ICAgICAgICBhcHBlbmQoQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSwgVmFsdWVSZXA6OkNvbGRBbnkp
KTsKICAgICB9CiAKICAgICAvLyBUaGlzIGlzIGEgaGVscGVyIGZvciBzb21ldGhpbmcgeW91IG1p
Z2h0IGRvIGEgbG90IG9mOiBhcHBlbmQgYSB2YWx1ZSB0aGF0IHNob3VsZCBiZSBjb25zdHJhaW5l
ZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2aXNpb24g
MTkzMzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOTEsOSArMjkxLDIxIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgUGF0Y2hwb2ludDoKICAgICAgICAgICAgICAgICBpZiAo
dmFsdWUtPnR5cGUoKSA9PSBWb2lkKQotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5yZXN1bHRDb25zdHJhaW50ID09IFZhbHVlUmVwOjpB
bnksICgiQXQgIiwgKnZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5yZXN1bHRDb25z
dHJhaW50ID09IFZhbHVlUmVwOjpXYXJtQW55LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5hczxQYXRj
aHBvaW50VmFsdWU+KCktPnJlc3VsdENvbnN0cmFpbnQua2luZCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgVmFsdWVSZXA6Oldhcm1Bbnk6CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVJl
cDo6UmVnaXN0ZXI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJn
dW1lbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKGZhbHNlLCAoIkF0
ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHZh
bGlkYXRlU3RhY2ttYXBDb25zdHJhaW50KHZhbHVlLCBDb25zdHJhaW5lZFZhbHVlKHZhbHVlLCB2
YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5yZXN1bHRDb25zdHJhaW50KSk7CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2ttYXAodmFsdWUpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDaGVja0FkZDoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHJldmlzaW9uIDE5MzM4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsOSBAQCB2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
CiB7CiAgICAgb3V0LnByaW50KG1fa2luZCk7CiAgICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBj
YXNlIEFueToKKyAgICBjYXNlIFdhcm1Bbnk6CisgICAgY2FzZSBDb2xkQW55OgorICAgIGNhc2Ug
TGF0ZUNvbGRBbnk6CiAgICAgY2FzZSBTb21lUmVnaXN0ZXI6CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIFJlZ2lzdGVyOgpAQCAtNjIsOCArNjQsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzo6
QjM7CiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsdWVSZXA6OktpbmQg
a2luZCkKIHsKICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIFZhbHVlUmVwOjpBbnk6Ci0g
ICAgICAgIG91dC5wcmludCgiQW55Iik7CisgICAgY2FzZSBWYWx1ZVJlcDo6V2FybUFueToKKyAg
ICAgICAgb3V0LnByaW50KCJXYXJtQW55Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZh
bHVlUmVwOjpDb2xkQW55OgorICAgICAgICBvdXQucHJpbnQoIkNvbGRBbnkiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVDb2xkQW55OgorICAgICAgICBvdXQucHJp
bnQoIkxhdGVDb2xkQW55Iik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFZhbHVlUmVwOjpT
b21lUmVnaXN0ZXI6CiAgICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyIik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDE5MzM4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDExICs0MywxOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIGNsYXNzIFZhbHVl
UmVwIHsKIHB1YmxpYzoKICAgICBlbnVtIEtpbmQgewotICAgICAgICAvLyBBcyBhbiBpbnB1dCBy
ZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIGNhbiBwaWNrIGFueSByZXByZXNlbnRh
dGlvbi4gSXQgYWxzbyBjdXJyZW50bHkKLSAgICAgICAgLy8gaW1wbGllcyB0aGF0IHRoZSB1c2Ug
aXMgY29sZDogdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBkb2Vzbid0IGNvdW50IGl0LiBBcyBhbiBv
dXRwdXQKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMg
dGhhdCBCMyBjYW4gcGljayBhbnkgcmVwcmVzZW50YXRpb24uIEFzIGFuIG91dHB1dAogICAgICAg
ICAvLyByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IHdlIGRvbid0IGtub3cuIFRoaXMg
d2lsbCBvbmx5IGFyaXNlIGFzIGFuIG91dHB1dAogICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBm
b3IgdGhlIGFjdGl2ZSBhcmd1bWVudHMgb2YgQ2hlY2svQ2hlY2tBZGQvQ2hlY2tTdWIvQ2hlY2tN
dWwuCi0gICAgICAgIEFueSwKKyAgICAgICAgV2FybUFueSwKKworICAgICAgICAvLyBTYW1lIGFz
IFdhcm1BbnksIGJ1dCBpbXBsaWVzIHRoYXQgdGhlIHVzZSBpcyBjb2xkLiBBIGNvbGQgdXNlIGlz
IG5vdCBjb3VudGVkIGFzIGEgdXNlIGZvcgorICAgICAgICAvLyBjb21wdXRpbmcgdGhlIHByaW9y
aXR5IG9mIHRoZSB1c2VkIHRlbXBvcmFyeS4KKyAgICAgICAgQ29sZEFueSwKKworICAgICAgICAv
LyBTYW1lIGFzIENvbGRBbnksIGJ1dCBhbHNvIGltcGxpZXMgdGhhdCB0aGUgdXNlIG9jY3VycyBh
ZnRlciBhbGwgb3RoZXIgZWZmZWN0cyBvZiB0aGUgc3RhY2ttYXAKKyAgICAgICAgLy8gdmFsdWUu
CisgICAgICAgIExhdGVDb2xkQW55LAogCiAgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2Vu
dGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3Rlci4gSXQg
Y291bGQgYmUgYQogICAgICAgICAvLyByZWdpc3RlciB0aGF0IHRoaXMgY2xhaW1zIHRvIGNsb2Ji
ZXIhCkBAIC03MCw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIAogICAgIFZhbHVlUmVw
KCkKLSAgICAgICAgOiBtX2tpbmQoQW55KQorICAgICAgICA6IG1fa2luZChXYXJtQW55KQogICAg
IHsKICAgICB9CiAKQEAgLTgzLDcgKzkwLDcgQEAgcHVibGljOgogICAgIFZhbHVlUmVwKEtpbmQg
a2luZCkKICAgICAgICAgOiBtX2tpbmQoa2luZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChraW5k
ID09IEFueSB8fCBraW5kID09IFNvbWVSZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChraW5kID09
IFdhcm1BbnkgfHwga2luZCA9PSBDb2xkQW55IHx8IGtpbmQgPT0gTGF0ZUNvbGRBbnkgfHwga2lu
ZCA9PSBTb21lUmVnaXN0ZXIpOwogICAgIH0KIAogICAgIHN0YXRpYyBWYWx1ZVJlcCByZWcoUmVn
IHJlZykKQEAgLTE0NSw5ICsxNTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4ga2luZCgpICE9IEFueTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiBraW5kKCkgIT0gV2FybUFueTsgfQogCi0gICAgYm9vbCBpc0FueSgpIGNv
bnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBBbnk7IH0KKyAgICBib29sIGlzQW55KCkgY29uc3QgeyBy
ZXR1cm4ga2luZCgpID09IFdhcm1BbnkgfHwga2luZCgpID09IENvbGRBbnkgfHwga2luZCgpID09
IExhdGVDb2xkQW55OyB9CiAKICAgICBib29sIGlzU29tZVJlZ2lzdGVyKCkgY29uc3QgeyByZXR1
cm4ga2luZCgpID09IFNvbWVSZWdpc3RlcjsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5MzM4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Mzc4LDcgKzkzNzgsNyBAQCBwcml2YXRlOgogICAgICAgICBPU1JFeGl0
RGVzY3JpcHRvckltcGwqIGV4aXREZXNjcmlwdG9ySW1wbCA9ICZtX2Z0bFN0YXRlLm9zckV4aXRE
ZXNjcmlwdG9ySW1wbHMubGFzdCgpOwogICAgICAgICAKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0
ID0gdmFsdWUtPm51bUNoaWxkcmVuKCk7Ci0gICAgICAgIHZhbHVlLT5hcHBlbmRBbnlzKGJ1aWxk
RXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRvciwgbV9mdGxTdGF0ZS5vc3JFeGl0RGVzY3JpcHRv
ckltcGxzLmxhc3QoKSwgbG93VmFsdWUpKTsKKyAgICAgICAgdmFsdWUtPmFwcGVuZENvbGRBbnlz
KGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRvciwgbV9mdGxTdGF0ZS5vc3JFeGl0RGVz
Y3JpcHRvckltcGxzLmxhc3QoKSwgbG93VmFsdWUpKTsKIAogICAgICAgICBTdGF0ZSogc3RhdGUg
PSAmbV9mdGxTdGF0ZTsKICAgICAgICAgdmFsdWUtPnNldEdlbmVyYXRvcigK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266586</attachid>
            <date>2015-12-03 18:57:09 -0800</date>
            <delta_ts>2015-12-03 19:10:29 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>37634</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkzMzkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBA
CisyMDE1LTEyLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgUGF0Y2hwb2ludCBhbmQgQ2hlY2sgb3Bjb2RlcyBzaG91bGQgYmUgYWJsZSB0byBzcGVjaWZ5
IFdhcm1BbnksIENvbGRBbnksIGFuZCBMYXRlQ29sZEFueQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMzM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIFZhbHVlUmVwOjpBbnkgYW5k
IHJlcGxhY2VzIGl0IHdpdGggVmFsdWVSZXA6Oldhcm1BbnksIFZhbHVlUmVwOjpDb2xkQW55LCBh
bmQKKyAgICAgICAgVmFsdWVSZXA6OkxhdGVDb2xkQW55LiBJIHRoaW5rIHRoYXQgY29uY2VwdHVh
bGx5IHRoZSBtb3N0IG9idmlvdXMgdXNlcnMgb2YgcGF0Y2hwb2ludHMgYXJlIGlubGluZQorICAg
ICAgICBjYWNoZXMsIHdoaWNoIHdvdWxkIHVzZSBXYXJtQW55IGZvciB0aGVpciBub24tT1NSIGlu
cHV0cy4gRm9yIHRoaXMgcmVhc29uLCBJIG1ha2UgV2FybUFueSB0aGUKKyAgICAgICAgZGVmYXVs
dC4KKworICAgICAgICBIb3dldmVyLCB0aGUgU3RhY2ttYXBWYWx1ZSBvcHRpbWl6YXRpb24gdGhh
dCBwcm92aWRlcyBhIGRlZmF1bHQgVmFsdWVSZXAgZm9yIGFueSB0aGF0IGFyZSBtaXNzaW5nCisg
ICAgICAgIHdhcyBtZWFudCBmb3IgT1NSLiBTbywgdGhpcyBvcHRpbWl6YXRpb24gbm93IHVzZXMg
Q29sZEFueS4KKworICAgICAgICBUaGlzIHBhdGNoIHdpcmVzIHRoaXMgY2hhbmdlIHRocm91Z2gg
dGhlIHdob2xlIGNvbXBpbGVyIGFuZCBhZGRzIHNvbWUgdGVzdHMuCisKKyAgICAgICAgKiBiMy9C
M0NoZWNrU3BlY2lhbC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OktleTo6
S2V5KToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKiBiMy9C
M0NoZWNrU3BlY2lhbC5oOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6Oktl
eSk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OktleTo6b3Bjb2RlKToKKyAgICAg
ICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpudW1BcmdzKToKKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpzdGFja21hcFJvbGUpOgorICAgICAgICAqIGIzL0IzQ2hl
Y2tWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1ZhbHVlOjpDaGVja1ZhbHVlKToK
KyAgICAgICAgKiBiMy9CM0NvbnN0cmFpbmVkVmFsdWUuaDoKKyAgICAgICAgKEpTQzo6QjM6OkNv
bnN0cmFpbmVkVmFsdWU6OkNvbnN0cmFpbmVkVmFsdWUpOgorICAgICAgICAqIGIzL0IzTG93ZXJU
b0Fpci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmZpbGxTdGFja21h
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6Omxvd2VyKToKKyAgICAgICAg
KiBiMy9CM01vdmVDb25zdGFudHMuY3BwOgorICAgICAgICAqIGIzL0IzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwOgorICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hBcmcp
OgorICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmlzVmFsaWQpOgorICAgICAg
ICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKToKKyAgICAgICAgKiBi
My9CM1BhdGNocG9pbnRWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50VmFs
dWU6OlBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50VmFsdWUuaDoK
KyAgICAgICAgKiBiMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpT
dGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
bWFwU3BlY2lhbDo6YWRtaXRzU3RhY2tJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFw
U3BlY2lhbDo6aXNBcmdWYWxpZEZvclJlcCk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwp
OgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmg6CisgICAgICAgICogYjMvQjNTdGFj
a21hcFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwVmFsdWU6OmFwcGVuZCk6
CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFZhbHVlOjpzZXRDb25zdHJhaW50KToKKyAgICAg
ICAgKiBiMy9CM1N0YWNrbWFwVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmNwcDoK
KyAgICAgICAgKiBiMy9CM1ZhbHVlUmVwLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVw
OjpkdW1wKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNW
YWx1ZVJlcC5oOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OlZhbHVlUmVwKToKKyAgICAg
ICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpyZWcpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6
Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9wZXJhdG9yIGJvb2wp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmlzQW55KToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlUmVwOjppc1NvbWVSZWdpc3Rlcik6CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAg
ICAgICAgKEpTQzo6QjM6OmNvbXBpbGVBbmRSdW4pOgorICAgICAgICAoSlNDOjpCMzo6YWRkMzIp
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdDQyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTaW1w
bGVQYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RQYXRjaHBvaW50V2l0aEVhcmx5
Q2xvYmJlcik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0UGF0Y2hwb2ludEZpeGVkUmVnaXN0ZXIp
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdFBhdGNocG9pbnRBbnkpOgorICAgICAgICAoSlNDOjpC
Mzo6dGVzdFBhdGNocG9pbnRMb3RzT2ZMYXRlQW55cyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
UGF0Y2hwb2ludEFueUltbSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0UGF0Y2hwb2ludE1hbnlJ
bW1zKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RQYXRjaHBvaW50V2l0aFJlZ2lzdGVyUmVzdWx0
KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RQYXRjaHBvaW50V2l0aEFueVJlc3VsdCk6CisgICAg
ICAgIChKU0M6OkIzOjpydW4pOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Ymxlc3NTcGVjdWxhdGlv
bik6CisKIDIwMTUtMTItMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBCMyBwYXRjaHBvaW50cyBzaG91bGQgYWxsb3cgc3BlY2lmeWluZyBvdXRwdXQgY29uc3Ry
YWludHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNw
cAkocmV2aXNpb24gMTkzMzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tT
cGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBDaGVja1NwZWNpYWw6
OktleTo6S2V5KGNvbnN0IEluc3QmIGluc3QpCiB7CiAgICAgbV9vcGNvZGUgPSBpbnN0Lm9wY29k
ZTsKICAgICBtX251bUFyZ3MgPSBpbnN0LmFyZ3Muc2l6ZSgpOwotICAgIG1fc3RhY2ttYXBSb2xl
ID0gQXJnOjpVc2U7CisgICAgbV9zdGFja21hcFJvbGUgPSBTYW1lQXNSZXA7CiB9CiAKIHZvaWQg
Q2hlY2tTcGVjaWFsOjpLZXk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKQEAgLTc4LDcg
Kzc4LDcgQEAgdm9pZCBDaGVja1NwZWNpYWw6OktleTo6ZHVtcChQcmludFN0cmVhbQogICAgIG91
dC5wcmludChtX29wY29kZSwgIigiLCBtX251bUFyZ3MsICIsIiwgbV9zdGFja21hcFJvbGUsICIp
Iik7CiB9CiAKLUNoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29kZSwg
dW5zaWduZWQgbnVtQXJncywgQXJnOjpSb2xlIHN0YWNrbWFwUm9sZSkKK0NoZWNrU3BlY2lhbDo6
Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQgbnVtQXJncywgUm9sZU1v
ZGUgc3RhY2ttYXBSb2xlKQogICAgIDogbV9jaGVja09wY29kZShvcGNvZGUpCiAgICAgLCBtX3N0
YWNrbWFwUm9sZShzdGFja21hcFJvbGUpCiAgICAgLCBtX251bUNoZWNrQXJncyhudW1BcmdzKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHJldmlzaW9u
IDE5MzM4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NywxMiArNTcsMTIgQEAgcHVibGljOgogICAgIHB1YmxpYzoKICAg
ICAgICAgS2V5KCkKICAgICAgICAgICAgIDogbV9vcGNvZGUoQWlyOjpOb3ApCi0gICAgICAgICAg
ICAsIG1fc3RhY2ttYXBSb2xlKEFpcjo6QXJnOjpVc2UpCisgICAgICAgICAgICAsIG1fc3RhY2tt
YXBSb2xlKFNhbWVBc1JlcCkKICAgICAgICAgICAgICwgbV9udW1BcmdzKDApCiAgICAgICAgIHsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgS2V5KEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5z
aWduZWQgbnVtQXJncywgQWlyOjpBcmc6OlJvbGUgc3RhY2ttYXBSb2xlID0gQWlyOjpBcmc6OlVz
ZSkKKyAgICAgICAgS2V5KEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQgbnVtQXJncywgUm9s
ZU1vZGUgc3RhY2ttYXBSb2xlID0gU2FtZUFzUmVwKQogICAgICAgICAgICAgOiBtX29wY29kZShv
cGNvZGUpCiAgICAgICAgICAgICAsIG1fc3RhY2ttYXBSb2xlKHN0YWNrbWFwUm9sZSkKICAgICAg
ICAgICAgICwgbV9udW1BcmdzKG51bUFyZ3MpCkBAIC04NywxMyArODcsMTMgQEAgcHVibGljOgog
CiAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bjb2RlOyB9
CiAgICAgICAgIHVuc2lnbmVkIG51bUFyZ3MoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3M7IH0K
LSAgICAgICAgQWlyOjpBcmc6OlJvbGUgc3RhY2ttYXBSb2xlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGFja21hcFJvbGU7IH0KKyAgICAgICAgUm9sZU1vZGUgc3RhY2ttYXBSb2xlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFja21hcFJvbGU7IH0KIAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3Q7CiAKICAgICAgICAgS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlw
ZSkKICAgICAgICAgICAgIDogbV9vcGNvZGUoQWlyOjpOb3ApCi0gICAgICAgICAgICAsIG1fc3Rh
Y2ttYXBSb2xlKEFpcjo6QXJnOjpVc2UpCisgICAgICAgICAgICAsIG1fc3RhY2ttYXBSb2xlKFNh
bWVBc1JlcCkKICAgICAgICAgICAgICwgbV9udW1BcmdzKDEpCiAgICAgICAgIHsKICAgICAgICAg
fQpAQCAtMTExLDExICsxMTEsMTEgQEAgcHVibGljOgogICAgICAgICAKICAgICBwcml2YXRlOgog
ICAgICAgICBBaXI6Ok9wY29kZSBtX29wY29kZTsKLSAgICAgICAgQWlyOjpBcmc6OlJvbGUgbV9z
dGFja21hcFJvbGU7CisgICAgICAgIFJvbGVNb2RlIG1fc3RhY2ttYXBSb2xlOwogICAgICAgICB1
bnNpZ25lZCBtX251bUFyZ3M7CiAgICAgfTsKICAgICAKLSAgICBDaGVja1NwZWNpYWwoQWlyOjpP
cGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MsIEFpcjo6QXJnOjpSb2xlIHN0YWNrbWFwUm9sZSA9IEFp
cjo6QXJnOjpVc2UpOworICAgIENoZWNrU3BlY2lhbChBaXI6Ok9wY29kZSwgdW5zaWduZWQgbnVt
QXJncywgUm9sZU1vZGUgc3RhY2ttYXBSb2xlID0gU2FtZUFzUmVwKTsKICAgICBDaGVja1NwZWNp
YWwoY29uc3QgS2V5Jik7CiAgICAgfkNoZWNrU3BlY2lhbCgpOwogCkBAIC0xNDAsNyArMTQwLDcg
QEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIEFpcjo6T3Bjb2RlIG1fY2hlY2tPcGNvZGU7
Ci0gICAgQWlyOjpBcmc6OlJvbGUgbV9zdGFja21hcFJvbGU7CisgICAgUm9sZU1vZGUgbV9zdGFj
a21hcFJvbGU7CiAgICAgdW5zaWduZWQgbV9udW1DaGVja0FyZ3M7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkocmV2aXNpb24gMTkzMzg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDggKzQ3LDggQEAgQ2hlY2tWYWx1ZTo6Q2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRl
eCwgTwogICAgIEFTU0VSVChCMzo6aXNJbnQodHlwZSgpKSk7CiAgICAgQVNTRVJUKGxlZnQtPnR5
cGUoKSA9PSByaWdodC0+dHlwZSgpKTsKICAgICBBU1NFUlQob3Bjb2RlID09IENoZWNrQWRkIHx8
IG9wY29kZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0gQ2hlY2tNdWwpOwotICAgIGFwcGVuZChD
b25zdHJhaW5lZFZhbHVlKGxlZnQsIFZhbHVlUmVwOjpBbnkpKTsKLSAgICBhcHBlbmQoQ29uc3Ry
YWluZWRWYWx1ZShyaWdodCwgVmFsdWVSZXA6OkFueSkpOworICAgIGFwcGVuZChDb25zdHJhaW5l
ZFZhbHVlKGxlZnQsIFZhbHVlUmVwOjpXYXJtQW55KSk7CisgICAgYXBwZW5kKENvbnN0cmFpbmVk
VmFsdWUocmlnaHQsIFZhbHVlUmVwOjpXYXJtQW55KSk7CiB9CiAKIC8vIFVzZSB0aGlzIGZvcm0g
Zm9yIENoZWNrLgpAQCAtNTYsNyArNTYsNyBAQCBDaGVja1ZhbHVlOjpDaGVja1ZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPCiAgICAgOiBTdGFja21hcFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBv
cGNvZGUsIFZvaWQsIG9yaWdpbikKIHsKICAgICBBU1NFUlQob3Bjb2RlID09IENoZWNrKTsKLSAg
ICBhcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShwcmVkaWNhdGUsIFZhbHVlUmVwOjpBbnkpKTsKKyAg
ICBhcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShwcmVkaWNhdGUsIFZhbHVlUmVwOjpXYXJtQW55KSk7
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3RyYWluZWRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnN0cmFpbmVkVmFsdWUuaAkocmV2aXNpb24gMTkzMzg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RyYWluZWRWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKIAogICAgIENvbnN0cmFpbmVkVmFsdWUoVmFsdWUq
IHZhbHVlKQogICAgICAgICA6IG1fdmFsdWUodmFsdWUpCi0gICAgICAgICwgbV9yZXAoVmFsdWVS
ZXA6OkFueSkKKyAgICAgICAgLCBtX3JlcChWYWx1ZVJlcDo6V2FybUFueSkKICAgICB7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2
aXNpb24gMTkzMzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc5Nyw3ICs3OTcsOSBAQCBwcml2YXRlOgogCiAgICAgICAg
ICAgICBBcmcgYXJnOwogICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZXAoKS5raW5kKCkpIHsK
LSAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkFueToKKyAgICAgICAgICAgIGNhc2UgVmFsdWVS
ZXA6Oldhcm1Bbnk6CisgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpDb2xkQW55OgorICAgICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnk6CiAgICAgICAgICAgICAgICAgaWYgKGlt
bSh2YWx1ZS52YWx1ZSgpKSkKICAgICAgICAgICAgICAgICAgICAgYXJnID0gaW1tKHZhbHVlLnZh
bHVlKCkpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLnZhbHVlKCktPmhhc0ludDY0
KCkpCkBAIC0xNzAwLDcgKzE3MDIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgVmVjdG9yPElu
c3Q+IGFmdGVyOwogICAgICAgICAgICAgaWYgKHBhdGNocG9pbnRWYWx1ZS0+dHlwZSgpICE9IFZv
aWQpIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhdGNocG9pbnRWYWx1ZS0+cmVzdWx0Q29u
c3RyYWludC5raW5kKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpBbnk6Cisg
ICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6V2FybUFueToKKyAgICAgICAgICAgICAgICBj
YXNlIFZhbHVlUmVwOjpDb2xkQW55OgorICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6Okxh
dGVDb2xkQW55OgogICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoK
ICAgICAgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXAocGF0Y2hwb2ludFZhbHVl
KSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTc2MSw3ICsxNzY1LDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gQWlyOjpPb3BzOwogICAg
ICAgICAgICAgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0YXRpdmU7Ci0g
ICAgICAgICAgICBBcmc6OlJvbGUgc3RhY2ttYXBSb2xlID0gQXJnOjpVc2U7CisgICAgICAgICAg
ICBTdGFja21hcFNwZWNpYWw6OlJvbGVNb2RlIHN0YWNrbWFwUm9sZSA9IFN0YWNrbWFwU3BlY2lh
bDo6U2FtZUFzUmVwOwogICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgewog
ICAgICAgICAgICAgY2FzZSBDaGVja0FkZDoKICAgICAgICAgICAgICAgICBvcGNvZGUgPSBvcGNv
ZGVGb3JUeXBlKEJyYW5jaEFkZDMyLCBCcmFuY2hBZGQ2NCwgQWlyOjpPb3BzLCBtX3ZhbHVlLT50
eXBlKCkpOwpAQCAtMTc3Miw3ICsxNzc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgQ2hlY2tNdWw6CiAgICAgICAgICAgICAgICAgb3Bjb2Rl
ID0gb3Bjb2RlRm9yVHlwZShCcmFuY2hNdWwzMiwgQnJhbmNoTXVsNjQsIEFpcjo6T29wcywgY2hl
Y2tWYWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBzdGFja21hcFJvbGUgPSBBcmc6Okxh
dGVVc2U7CisgICAgICAgICAgICAgICAgc3RhY2ttYXBSb2xlID0gU3RhY2ttYXBTcGVjaWFsOjpG
b3JjZUxhdGVVc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcAkocmV2aXNpb24g
MTkzMzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBWYWx1ZUtleSBrZXkgPSBjaGlsZC0+a2V5KCk7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChzdGFja21hcAogICAgICAgICAgICAgICAgICAgICAgICAgJiYgZ29lc0luVGFibGUoa2V5KQot
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgc3RhY2ttYXAtPmNvbnN0cmFpbmVkQ2hpbGQoY2hp
bGRJbmRleCkucmVwKCkgPT0gVmFsdWVSZXA6OkFueSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgc3RhY2ttYXAtPmNvbnN0cmFpbmVkQ2hpbGQoY2hpbGRJbmRleCkucmVwKCkuaXNBbnko
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHdlaXJkIHNwZWNpYWwg
Y2FzZS4gV2hlbiB3ZSBjb25zdGFudC1mb2xkIGFuIGFyZ3VtZW50IHRvIGEKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHN0YWNrbWFwLCBhbmQgdGhhdCBhcmd1bWVudCBoYXMgdGhlIEFueSBj
b25zdHJhaW50LCB3ZSB3YW50IHRvIGp1c3QKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRl
bGwgdGhlIHN0YWNrbWFwJ3MgZ2VuZXJhdG9yIHRoYXQgdGhlIGFyZ3VtZW50IGlzIGEgY29uc3Rh
bnQgcmF0aGVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3Bl
Y2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hw
b2ludFNwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTMzODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEyICs0
OSwxMiBAQCB2b2lkIFBhdGNocG9pbnRTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTMzNQogICAgIAogICAg
IGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpIHsKLSAgICAgICAgZm9yRWFjaEFyZ0lt
cGwoMCwgMSwgaW5zdCwgQXJnOjpVc2UsIGNhbGxiYWNrKTsKKyAgICAgICAgZm9yRWFjaEFyZ0lt
cGwoMCwgMSwgaW5zdCwgU2FtZUFzUmVwLCBjYWxsYmFjayk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbMV0sIEFyZzo6RGVmLCBpbnN0Lm9yaWdpbi0+
YWlyVHlwZSgpKTsKLSAgICBmb3JFYWNoQXJnSW1wbCgwLCAyLCBpbnN0LCBBcmc6OlVzZSwgY2Fs
bGJhY2spOworICAgIGZvckVhY2hBcmdJbXBsKDAsIDIsIGluc3QsIFNhbWVBc1JlcCwgY2FsbGJh
Y2spOwogfQogCiBib29sIFBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCkBA
IC04MCw3ICs4MCw3IEBAIGJvb2wgUGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QK
IAogICAgIGlmIChhcmdJbmRleCA9PSAxKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdC5vcmlnaW4t
PmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+cmVzdWx0Q29uc3RyYWludC5raW5kKCkpIHsKLSAgICAg
ICAgY2FzZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICBjYXNlIFZhbHVlUmVwOjpXYXJtQW55Ogog
ICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkocmV2aXNpb24g
MTkzMzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCB2b2lkIFBhdGNocG9pbnRWYWx1ZTo6
ZHVtcE1ldGEoQ29tbWFQcmluCiBQYXRjaHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQogICAgIDogQmFzZShpbmRleCwg
Q2hlY2tlZE9wY29kZSwgUGF0Y2hwb2ludCwgdHlwZSwgb3JpZ2luKQogICAgICwgZWZmZWN0cyhF
ZmZlY3RzOjpmb3JDYWxsKCkpCi0gICAgLCByZXN1bHRDb25zdHJhaW50KHR5cGUgPT0gVm9pZCA/
IFZhbHVlUmVwOjpBbnkgOiBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKQorICAgICwgcmVzdWx0Q29u
c3RyYWludCh0eXBlID09IFZvaWQgPyBWYWx1ZVJlcDo6V2FybUFueSA6IFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNo
cG9pbnRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Bh
dGNocG9pbnRWYWx1ZS5oCShyZXZpc2lvbiAxOTMzODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsOSArNTEsOSBA
QCBwdWJsaWM6CiAgICAgLy8gb2Ygc3Vic3RpdHV0aW9uIGNvdWxkIGJlIG1hZGUgc28gbG9uZyBh
cyB0aGVyZSBhcmUgbm8gaW50ZXJmZXJpbmcgd3JpdGVzLgogICAgIEVmZmVjdHMgZWZmZWN0czsK
IAotICAgIC8vIFRoZSBpbnB1dCByZXByZXNlbnRhdGlvbiAoaS5lLiBjb25zdHJhaW50KSBvZiB0
aGUgcmV0dXJuIHZhbHVlLiBUaGlzIGRlZmF1bHRzIHRvIEFueSBpZiB0aGUgdHlwZSBpcwotICAg
IC8vIFZvaWQgYW5kIGl0IGRlZmF1bHRzIHRvIFNvbWVSZWdpc3RlciBvdGhlcndpc2UuIEl0J3Mg
aWxsZWdhbCB0byBtZXNzIHdpdGggdGhpcyBpZiB0aGUgdHlwZSBpcyBWb2lkLgotICAgIC8vIE90
aGVyd2lzZSB5b3UgY2FuIHNldCB0aGlzIHRvIGFueSBpbnB1dCBjb25zdHJhaW50LgorICAgIC8v
IFRoZSBpbnB1dCByZXByZXNlbnRhdGlvbiAoaS5lLiBjb25zdHJhaW50KSBvZiB0aGUgcmV0dXJu
IHZhbHVlLiBUaGlzIGRlZmF1bHRzIHRvIFdhcm1BbnkgaWYgdGhlCisgICAgLy8gdHlwZSBpcyBW
b2lkIGFuZCBpdCBkZWZhdWx0cyB0byBTb21lUmVnaXN0ZXIgb3RoZXJ3aXNlLiBJdCdzIGlsbGVn
YWwgdG8gbWVzcyB3aXRoIHRoaXMgaWYgdGhlIHR5cGUKKyAgICAvLyBpcyBWb2lkLiBPdGhlcndp
c2UgeW91IGNhbiBzZXQgdGhpcyB0byBhbnkgaW5wdXQgY29uc3RyYWludC4KICAgICBWYWx1ZVJl
cCByZXN1bHRDb25zdHJhaW50OwogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5MzM4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDcgKzczLDcgQEAgY29uc3QgUmVnaXN0ZXJTZXQmIFN0YWNrbWFwU3BlY2lh
bDo6ZXh0cgogCiB2b2lkIFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAgdW5z
aWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCi0gICAg
SW5zdCYgaW5zdCwgQXJnOjpSb2xlIHJvbGUsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNo
QXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKKyAgICBJbnN0JiBpbnN0LCBSb2xlTW9kZSByb2xlTW9k
ZSwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQog
ewogICAgIFN0YWNrbWFwVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4tPmFzPFN0YWNrbWFwVmFs
dWU+KCk7CiAgICAgQVNTRVJUKHZhbHVlKTsKQEAgLTg3LDExICs4NywzMCBAQCB2b2lkIFN0YWNr
bWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdz
W2kgKyBudW1JZ25vcmVkQWlyQXJnc107CiAgICAgICAgIENvbnN0cmFpbmVkVmFsdWUgY2hpbGQg
PSB2YWx1ZS0+Y29uc3RyYWluZWRDaGlsZChpICsgbnVtSWdub3JlZEIzQXJncyk7CiAKLSAgICAg
ICAgQXJnOjpSb2xlIHRoaXNSb2xlID0gcm9sZTsKLSAgICAgICAgCi0gICAgICAgIC8vIENvb2wg
ZG93biB0aGUgcm9sZSBpZiB0aGUgdXNlIGlzIGNvbGQuCi0gICAgICAgIGlmIChjaGlsZC5yZXAo
KS5raW5kKCkgPT0gVmFsdWVSZXA6OkFueSAmJiB0aGlzUm9sZSA9PSBBcmc6OlVzZSkKLSAgICAg
ICAgICAgIHRoaXNSb2xlID0gQXJnOjpDb2xkVXNlOworICAgICAgICBBcmc6OlJvbGUgcm9sZTsK
KyAgICAgICAgc3dpdGNoIChyb2xlTW9kZSkgeworICAgICAgICBjYXNlIFNhbWVBc1JlcDoKKyAg
ICAgICAgICAgIHN3aXRjaCAoY2hpbGQucmVwKCkua2luZCgpKSB7CisgICAgICAgICAgICBjYXNl
IFZhbHVlUmVwOjpXYXJtQW55OgorICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyOgorICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgICAgICBj
YXNlIFZhbHVlUmVwOjpTdGFjazoKKyAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJn
dW1lbnQ6CisgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpDb25zdGFudDoKKyAgICAgICAgICAg
ICAgICByb2xlID0gQXJnOjpVc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFZhbHVlUmVwOjpDb2xkQW55OgorICAgICAgICAgICAgICAgIHJvbGUgPSBBcmc6OkNv
bGRVc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVlUmVw
OjpMYXRlQ29sZEFueToKKyAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpMYXRlVXNlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRm9yY2VMYXRlVXNlOgorICAgICAgICAgICAgcm9sZSA9IEFyZzo6TGF0ZVVz
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBjYWxs
YmFjayhhcmcsIHJvbGUsIEFyZzo6dHlwZUZvckIzVHlwZShjaGlsZC52YWx1ZSgpLT50eXBlKCkp
KTsKICAgICB9CkBAIC0xNTQsNyArMTczLDcgQEAgYm9vbCBTdGFja21hcFNwZWNpYWw6OmFkbWl0
c1N0YWNrSW1wbCgKICAgICAKICAgICAvLyBXZSBvbmx5IGFkbWl0IHN0YWNrIGZvciBBbnkncywg
c2luY2UgU3RhY2sgaXMgbm90IGEgdmFsaWQgaW5wdXQgY29uc3RyYWludCwgYW5kIFN0YWNrQXJn
dW1lbnQKICAgICAvLyB0cmFuc2xhdGVzIHRvIGEgQ2FsbEFyZyBpbiBBaXIuCi0gICAgaWYgKHZh
bHVlLT5tX3JlcHNbc3RhY2ttYXBBcmdJbmRleF0ua2luZCgpID09IFZhbHVlUmVwOjpBbnkpCisg
ICAgaWYgKHZhbHVlLT5tX3JlcHNbc3RhY2ttYXBBcmdJbmRleF0uaXNBbnkoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xOTMsNyArMjEyLDkgQEAgYm9v
bCBTdGFja21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JWYWx1ZQogYm9vbCBTdGFja21hcFNwZWNp
YWw6OmlzQXJnVmFsaWRGb3JSZXAoQWlyOjpDb2RlJiBjb2RlLCBjb25zdCBBaXI6OkFyZyYgYXJn
LCBjb25zdCBWYWx1ZVJlcCYgcmVwKQogewogICAgIHN3aXRjaCAocmVwLmtpbmQoKSkgewotICAg
IGNhc2UgVmFsdWVSZXA6OkFueToKKyAgICBjYXNlIFZhbHVlUmVwOjpXYXJtQW55OgorICAgIGNh
c2UgVmFsdWVSZXA6OkNvbGRBbnk6CisgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnk6CiAg
ICAgICAgIC8vIFdlIGFscmVhZHkgdmVyaWZpZWQgYnkgaXNBcmdWYWxpZEZvclZhbHVlKCkuCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKQEAg
LTI0MSw0ICsyNjIsMjMgQEAgVmFsdWVSZXAgU3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JBcmcoQ29k
ZQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAorbmFtZXNwYWNlIFdURiB7CisKK3VzaW5n
IG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgU3RhY2ttYXBTcGVjaWFsOjpSb2xlTW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkg
eworICAgIGNhc2UgU3RhY2ttYXBTcGVjaWFsOjpTYW1lQXNSZXA6CisgICAgICAgIG91dC5wcmlu
dCgiU2FtZUFzUmVwIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrbWFwU3BlY2lh
bDo6Rm9yY2VMYXRlVXNlOgorICAgICAgICBvdXQucHJpbnQoIkZvcmNlTGF0ZVVzZSIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCShyZXZpc2lv
biAxOTMzODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsMTEgQEAgcHVibGljOgogICAgIFN0YWNrbWFw
U3BlY2lhbCgpOwogICAgIHZpcnR1YWwgflN0YWNrbWFwU3BlY2lhbCgpOwogCisgICAgZW51bSBS
b2xlTW9kZSA6IGludDhfdCB7CisgICAgICAgIFNhbWVBc1JlcCwKKyAgICAgICAgRm9yY2VMYXRl
VXNlCisgICAgfTsKKwogcHJvdGVjdGVkOgogICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhB
aXI6Okluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRlOwogICAgIGNvbnN0IFJlZ2lz
dGVyU2V0JiBleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyhBaXI6Okluc3QmKSBvdmVycmlkZTsKQEAg
LTUyLDEwICs1NywxMCBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2Vz
IG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdl
IGhhdmUgbWFueSBzb21lCiAgICAgLy8gc3ViY2xhc3NlcyB0aGF0IGltcGxlbWVudCB0aGF0Lgot
CiAgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgKICAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIz
QXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCi0gICAgICAgIEFpcjo6SW5zdCYsIEFp
cjo6QXJnOjpSb2xlIHJvbGUsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdD
YWxsYmFjaz4mKTsKKyAgICAgICAgQWlyOjpJbnN0JiwgUm9sZU1vZGUsIGNvbnN0IFNjb3BlZExh
bWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKTsKKyAgICAKICAgICBib29sIGlzVmFs
aWRJbXBsKAogICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1J
Z25vcmVkQWlyQXJncywKICAgICAgICAgQWlyOjpJbnN0Jik7CkBAIC03Myw2ICs3OCwxMiBAQCBw
cm90ZWN0ZWQ6CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCituYW1lc3BhY2UgV1RGIHsK
Kwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6U3RhY2ttYXBTcGVj
aWFsOjpSb2xlTW9kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKIAogI2VuZGlmIC8vIEIzU3RhY2ttYXBTcGVjaWFsX2gKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCShyZXZpc2lvbiAxOTMzODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsMTMgKzM2LDEzIEBAIFN0YWNrbWFwVmFsdWU6On5TdGFja21hcFZhbHVl
KCkKIAogdm9pZCBTdGFja21hcFZhbHVlOjphcHBlbmQoY29uc3QgQ29uc3RyYWluZWRWYWx1ZSYg
Y29uc3RyYWluZWRWYWx1ZSkKIHsKLSAgICBpZiAoY29uc3RyYWluZWRWYWx1ZS5yZXAoKSA9PSBW
YWx1ZVJlcChWYWx1ZVJlcDo6QW55KSkgeworICAgIGlmIChjb25zdHJhaW5lZFZhbHVlLnJlcCgp
ID09IFZhbHVlUmVwOjpDb2xkQW55KSB7CiAgICAgICAgIGNoaWxkcmVuKCkuYXBwZW5kKGNvbnN0
cmFpbmVkVmFsdWUudmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICB3aGls
ZSAobV9yZXBzLnNpemUoKSA8IG51bUNoaWxkcmVuKCkpCi0gICAgICAgIG1fcmVwcy5hcHBlbmQo
VmFsdWVSZXA6OkFueSk7CisgICAgICAgIG1fcmVwcy5hcHBlbmQoVmFsdWVSZXA6OkNvbGRBbnkp
OwogCiAgICAgY2hpbGRyZW4oKS5hcHBlbmQoY29uc3RyYWluZWRWYWx1ZS52YWx1ZSgpKTsKICAg
ICBtX3JlcHMuYXBwZW5kKGNvbnN0cmFpbmVkVmFsdWUucmVwKCkpOwpAQCAtNjEsMTEgKzYxLDEx
IEBAIHZvaWQgU3RhY2ttYXBWYWx1ZTo6c2V0Q29uc3RyYWluZWRDaGlsZCgKIAogdm9pZCBTdGFj
a21hcFZhbHVlOjpzZXRDb25zdHJhaW50KHVuc2lnbmVkIGluZGV4LCBjb25zdCBWYWx1ZVJlcCYg
cmVwKQogewotICAgIGlmIChyZXAgPT0gVmFsdWVSZXAoVmFsdWVSZXA6OkFueSkpCisgICAgaWYg
KHJlcCA9PSBWYWx1ZVJlcChWYWx1ZVJlcDo6Q29sZEFueSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHdoaWxlIChtX3JlcHMuc2l6ZSgpIDw9IGluZGV4KQotICAgICAgICBtX3JlcHMuYXBwZW5k
KFZhbHVlUmVwOjpBbnkpOworICAgICAgICBtX3JlcHMuYXBwZW5kKFZhbHVlUmVwOjpDb2xkQW55
KTsKIAogICAgIG1fcmVwc1tpbmRleF0gPSByZXA7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCShyZXZpc2lvbiAxOTMzODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0
LDExICs4NCwxMiBAQCBwdWJsaWM6CiAgICAgLy8gY2hpbGRyZW4oKS5hcHBlbmQoKS4gVGhhdCB3
aWxsIHdvcmsgZmluZSwgYnV0IGl0J3Mgbm90IHJlY29tbWVuZGVkLgogICAgIHZvaWQgYXBwZW5k
KGNvbnN0IENvbnN0cmFpbmVkVmFsdWUmKTsKIAorICAgIC8vIEhlbHBlciBmb3IgYXBwZW5kaW5n
IGNvbGQgYW55J3MuIFRoaXMgb2Z0ZW4gdXNlZCBieSBjbGllbnRzIHRvIGltcGxlbWVudCBPU1Iu
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KLSAgICB2b2lkIGFwcGVuZEFueXMo
Y29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKQorICAgIHZvaWQgYXBwZW5kQ29sZEFueXMoY29uc3Qg
VmVjdG9yVHlwZSYgdmVjdG9yKQogICAgIHsKICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2
ZWN0b3IpCi0gICAgICAgICAgICBhcHBlbmQodmFsdWUpOworICAgICAgICAgICAgYXBwZW5kKENv
bnN0cmFpbmVkVmFsdWUodmFsdWUsIFZhbHVlUmVwOjpDb2xkQW55KSk7CiAgICAgfQogCiAgICAg
Ly8gVGhpcyBpcyBhIGhlbHBlciBmb3Igc29tZXRoaW5nIHlvdSBtaWdodCBkbyBhIGxvdCBvZjog
YXBwZW5kIGEgdmFsdWUgdGhhdCBzaG91bGQgYmUgY29uc3RyYWluZWQKQEAgLTIwMiw3ICsyMDMs
NyBAQCBwdWJsaWM6CiAKICAgICBDb25zdHJhaW5lZFZhbHVlIGNvbnN0cmFpbmVkQ2hpbGQodW5z
aWduZWQgaW5kZXgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gQ29uc3RyYWluZWRWYWx1
ZShjaGlsZChpbmRleCksIGluZGV4IDwgbV9yZXBzLnNpemUoKSA/IG1fcmVwc1tpbmRleF0gOiBW
YWx1ZVJlcCgpKTsKKyAgICAgICAgcmV0dXJuIENvbnN0cmFpbmVkVmFsdWUoY2hpbGQoaW5kZXgp
LCBpbmRleCA8IG1fcmVwcy5zaXplKCkgPyBtX3JlcHNbaW5kZXhdIDogVmFsdWVSZXA6OkNvbGRB
bnkpOwogICAgIH0KIAogICAgIHZvaWQgc2V0Q29uc3RyYWluZWRDaGlsZCh1bnNpZ25lZCBpbmRl
eCwgY29uc3QgQ29uc3RyYWluZWRWYWx1ZSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTkzMzg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTEsOSArMjkxLDIxIEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUGF0Y2hw
b2ludDoKICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPnR5cGUoKSA9PSBWb2lkKQotICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5yZXN1
bHRDb25zdHJhaW50ID09IFZhbHVlUmVwOjpBbnksICgiQXQgIiwgKnZhbHVlKSk7Ci0gICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+YXM8UGF0
Y2hwb2ludFZhbHVlPigpLT5yZXN1bHRDb25zdHJhaW50ID09IFZhbHVlUmVwOjpXYXJtQW55LCAo
IkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPnJlc3VsdENvbnN0cmFp
bnQua2luZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6Oldhcm1Bbnk6
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKGZhbHNlLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2ttYXBDb25zdHJhaW50KHZhbHVl
LCBDb25zdHJhaW5lZFZhbHVlKHZhbHVlLCB2YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5y
ZXN1bHRDb25zdHJhaW50KSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHZh
bGlkYXRlU3RhY2ttYXAodmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBDaGVja0FkZDoKQEAgLTMwMiwxNCArMzE0LDE0IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA+PSAyLCAoIkF0ICIsICp2YWx1
ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT5jaGlsZCgwKS0+dHlw
ZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2
YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7Ci0gICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPmFzPFN0YWNrbWFwVmFsdWU+KCktPmNvbnN0cmFpbmVkQ2hpbGQo
MCkucmVwKCkgPT0gVmFsdWVSZXA6OkFueSwgKCJBdCAiLCAqdmFsdWUpKTsKLSAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+YXM8U3RhY2ttYXBWYWx1ZT4oKS0+Y29uc3RyYWluZWRDaGls
ZCgxKS5yZXAoKSA9PSBWYWx1ZVJlcDo6QW55LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIFZBTElEQVRFKHZhbHVlLT5hczxTdGFja21hcFZhbHVlPigpLT5jb25zdHJhaW5lZENo
aWxkKDApLnJlcCgpID09IFZhbHVlUmVwOjpXYXJtQW55LCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5hczxTdGFja21hcFZhbHVlPigpLT5jb25zdHJh
aW5lZENoaWxkKDEpLnJlcCgpID09IFZhbHVlUmVwOjpXYXJtQW55LCAoIkF0ICIsICp2YWx1ZSkp
OwogICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2ttYXAodmFsdWUpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDaGVjazoKICAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA+PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAg
ICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKSwgKCJBdCAi
LCAqdmFsdWUpKTsKLSAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+YXM8U3RhY2ttYXBW
YWx1ZT4oKS0+Y29uc3RyYWluZWRDaGlsZCgwKS5yZXAoKSA9PSBWYWx1ZVJlcDo6QW55LCAoIkF0
ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5hczxTdGFja21h
cFZhbHVlPigpLT5jb25zdHJhaW5lZENoaWxkKDApLnJlcCgpID09IFZhbHVlUmVwOjpXYXJtQW55
LCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2ttYXAodmFs
dWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBVcHNpbG9uOgpA
QCAtMzQ5LDcgKzM2MSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCB2YWxpZGF0ZVN0YWNrbWFwQ29u
c3RyYWludChWYWx1ZSogY29udGV4dCwgY29uc3QgQ29uc3RyYWluZWRWYWx1ZSYgdmFsdWUpCiAg
ICAgewogICAgICAgICBzd2l0Y2ggKHZhbHVlLnJlcCgpLmtpbmQoKSkgewotICAgICAgICBjYXNl
IFZhbHVlUmVwOjpBbnk6CisgICAgICAgIGNhc2UgVmFsdWVSZXA6Oldhcm1Bbnk6CisgICAgICAg
IGNhc2UgVmFsdWVSZXA6OkNvbGRBbnk6CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVDb2xk
QW55OgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CiAgICAgICAgIGNhc2Ug
VmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHJldmlzaW9uIDE5MzM4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNyArMzQsOSBAQCB2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvCiB7
CiAgICAgb3V0LnByaW50KG1fa2luZCk7CiAgICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNl
IEFueToKKyAgICBjYXNlIFdhcm1Bbnk6CisgICAgY2FzZSBDb2xkQW55OgorICAgIGNhc2UgTGF0
ZUNvbGRBbnk6CiAgICAgY2FzZSBTb21lUmVnaXN0ZXI6CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIFJlZ2lzdGVyOgpAQCAtNjIsOCArNjQsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7
CiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsdWVSZXA6OktpbmQga2lu
ZCkKIHsKICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIFZhbHVlUmVwOjpBbnk6Ci0gICAg
ICAgIG91dC5wcmludCgiQW55Iik7CisgICAgY2FzZSBWYWx1ZVJlcDo6V2FybUFueToKKyAgICAg
ICAgb3V0LnByaW50KCJXYXJtQW55Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVl
UmVwOjpDb2xkQW55OgorICAgICAgICBvdXQucHJpbnQoIkNvbGRBbnkiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVDb2xkQW55OgorICAgICAgICBvdXQucHJpbnQo
IkxhdGVDb2xkQW55Iik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXI6CiAgICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyIik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDE5MzM4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEx
ICs0MywxOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIGNsYXNzIFZhbHVlUmVw
IHsKIHB1YmxpYzoKICAgICBlbnVtIEtpbmQgewotICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXBy
ZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIGNhbiBwaWNrIGFueSByZXByZXNlbnRhdGlv
bi4gSXQgYWxzbyBjdXJyZW50bHkKLSAgICAgICAgLy8gaW1wbGllcyB0aGF0IHRoZSB1c2UgaXMg
Y29sZDogdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBkb2Vzbid0IGNvdW50IGl0LiBBcyBhbiBvdXRw
dXQKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhh
dCBCMyBjYW4gcGljayBhbnkgcmVwcmVzZW50YXRpb24uIEFzIGFuIG91dHB1dAogICAgICAgICAv
LyByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IHdlIGRvbid0IGtub3cuIFRoaXMgd2ls
bCBvbmx5IGFyaXNlIGFzIGFuIG91dHB1dAogICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3Ig
dGhlIGFjdGl2ZSBhcmd1bWVudHMgb2YgQ2hlY2svQ2hlY2tBZGQvQ2hlY2tTdWIvQ2hlY2tNdWwu
Ci0gICAgICAgIEFueSwKKyAgICAgICAgV2FybUFueSwKKworICAgICAgICAvLyBTYW1lIGFzIFdh
cm1BbnksIGJ1dCBpbXBsaWVzIHRoYXQgdGhlIHVzZSBpcyBjb2xkLiBBIGNvbGQgdXNlIGlzIG5v
dCBjb3VudGVkIGFzIGEgdXNlIGZvcgorICAgICAgICAvLyBjb21wdXRpbmcgdGhlIHByaW9yaXR5
IG9mIHRoZSB1c2VkIHRlbXBvcmFyeS4KKyAgICAgICAgQ29sZEFueSwKKworICAgICAgICAvLyBT
YW1lIGFzIENvbGRBbnksIGJ1dCBhbHNvIGltcGxpZXMgdGhhdCB0aGUgdXNlIG9jY3VycyBhZnRl
ciBhbGwgb3RoZXIgZWZmZWN0cyBvZiB0aGUgc3RhY2ttYXAKKyAgICAgICAgLy8gdmFsdWUuCisg
ICAgICAgIExhdGVDb2xkQW55LAogCiAgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0
aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3Rlci4gSXQgY291
bGQgYmUgYQogICAgICAgICAvLyByZWdpc3RlciB0aGF0IHRoaXMgY2xhaW1zIHRvIGNsb2JiZXIh
CkBAIC03MCw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIAogICAgIFZhbHVlUmVwKCkK
LSAgICAgICAgOiBtX2tpbmQoQW55KQorICAgICAgICA6IG1fa2luZChXYXJtQW55KQogICAgIHsK
ICAgICB9CiAKQEAgLTgzLDcgKzkwLDcgQEAgcHVibGljOgogICAgIFZhbHVlUmVwKEtpbmQga2lu
ZCkKICAgICAgICAgOiBtX2tpbmQoa2luZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kID09
IEFueSB8fCBraW5kID09IFNvbWVSZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChraW5kID09IFdh
cm1BbnkgfHwga2luZCA9PSBDb2xkQW55IHx8IGtpbmQgPT0gTGF0ZUNvbGRBbnkgfHwga2luZCA9
PSBTb21lUmVnaXN0ZXIpOwogICAgIH0KIAogICAgIHN0YXRpYyBWYWx1ZVJlcCByZWcoUmVnIHJl
ZykKQEAgLTE0NSw5ICsxNTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4ga2luZCgpICE9IEFueTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiBraW5kKCkgIT0gV2FybUFueTsgfQogCi0gICAgYm9vbCBpc0FueSgpIGNvbnN0
IHsgcmV0dXJuIGtpbmQoKSA9PSBBbnk7IH0KKyAgICBib29sIGlzQW55KCkgY29uc3QgeyByZXR1
cm4ga2luZCgpID09IFdhcm1BbnkgfHwga2luZCgpID09IENvbGRBbnkgfHwga2luZCgpID09IExh
dGVDb2xkQW55OyB9CiAKICAgICBib29sIGlzU29tZVJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4g
a2luZCgpID09IFNvbWVSZWdpc3RlcjsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5jcHAJKHJldmlzaW9uIDE5MzM4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5MiwxNiBAQCBUIGNvbXBpbGVB
bmRSdW4oUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyCiAgICAgcmV0dXJuIGludm9rZTxUPigqY29t
cGlsZShwcm9jZWR1cmUpLCBhcmd1bWVudHMuLi4pOwogfQogCit2b2lkIGFkZDMyKENDYWxsSGVs
cGVycyYgaml0LCBHUFJSZWcgc3JjMSwgR1BSUmVnIHNyYzIsIEdQUlJlZyBkZXN0KQoreworICAg
IGlmIChzcmMyID09IGRlc3QpCisgICAgICAgIGppdC5hZGQzMihzcmMxLCBkZXN0KTsKKyAgICBl
bHNlIHsKKyAgICAgICAgaml0Lm1vdmUoc3JjMSwgZGVzdCk7CisgICAgICAgIGppdC5hZGQzMihz
cmMyLCBkZXN0KTsKKyAgICB9Cit9CisKIHZvaWQgdGVzdDQyKCkKIHsKICAgICBQcm9jZWR1cmUg
cHJvYzsKQEAgLTMzODQsOCArMzM5NCw3IEBAIHZvaWQgdGVzdFNpbXBsZVBhdGNocG9pbnQoKQog
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNHUFIoKSk7CiAgICAgICAgICAgICBD
SEVDSyhwYXJhbXMucmVwc1sxXS5pc0dQUigpKTsKICAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0Lm1vdmUocGFyYW1zLnJlcHNbMV0uZ3By
KCksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAgICAgIGppdC5hZGQzMihwYXJhbXMu
cmVwc1syXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgYWRkMzIo
aml0LCBwYXJhbXMucmVwc1sxXS5ncHIoKSwgcGFyYW1zLnJlcHNbMl0uZ3ByKCksIHBhcmFtcy5y
ZXBzWzBdLmdwcigpKTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xW
YWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7CiAKQEAgLTM1NjAsMTQg
KzM1NjksOCBAQCB2b2lkIHRlc3RQYXRjaHBvaW50V2l0aEVhcmx5Q2xvYmJlcigpCiAgICAgICAg
ICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIENIRUNLKChwYXJhbXMucmVwc1sxXS5ncHIo
KSA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjApID09IGFyZzFJbkFyZ0dQUik7CiAgICAgICAgICAg
ICAgICAgQ0hFQ0soKHBhcmFtcy5yZXBzWzJdLmdwcigpID09IEdQUkluZm86OmFyZ3VtZW50R1BS
MSkgPT0gYXJnMkluQXJnR1BSKTsKLQotICAgICAgICAgICAgICAgIGlmIChwYXJhbXMucmVwc1sw
XS5ncHIoKSA9PSBwYXJhbXMucmVwc1syXS5ncHIoKSkgewotICAgICAgICAgICAgICAgICAgICBq
aXQubW92ZShwYXJhbXMucmVwc1syXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkMzIocGFyYW1zLnJlcHNbMV0uZ3ByKCksIHBhcmFtcy5y
ZXBzWzBdLmdwcigpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBqaXQubW92ZShwYXJhbXMucmVwc1sxXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkp
OwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkMzIocGFyYW1zLnJlcHNbMl0uZ3ByKCksIHBh
cmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgYWRkMzIoaml0LCBwYXJhbXMucmVwc1sxXS5ncHIoKSwgcGFyYW1z
LnJlcHNbMl0uZ3ByKCksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKICAgICAgICAgICAgIH0pOwog
CiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIHBhdGNocG9pbnQpOwpAQCAtMzYyNCwzMCArMzYyNywyMiBAQCB2b2lkIHRlc3RQYXRj
aHBvaW50Rml4ZWRSZWdpc3RlcigpCiAgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5p
c0dQUigpKTsKICAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdID09IFZhbHVlUmVwKEdQ
UkluZm86OnJlZ1QwKSk7CiAgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXSA9PSBWYWx1
ZVJlcChHUFJJbmZvOjpyZWdUMSkpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHBhcmFt
cy5yZXBzWzBdLmdwcigpOwotCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09IEdQUkluZm86OnJl
Z1QxKSB7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmVnVDEsIHJlc3VsdCk7
Ci0gICAgICAgICAgICAgICAgaml0LmFkZDMyKEdQUkluZm86OnJlZ1QwLCByZXN1bHQpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpyZWdU
MCwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkMzIoR1BSSW5mbzo6cmVnVDEsIHJl
c3VsdCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBhZGQzMihqaXQsIEdQUkluZm86OnJl
Z1QwLCBHUFJJbmZvOjpyZWdUMSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOwogICAgICAgICB9KTsK
ICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBwYXRjaHBvaW50KTsKIAogICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCAxLCAy
KSA9PSAzKTsKIH0KIAotdm9pZCB0ZXN0UGF0Y2hwb2ludEFueSgpCit2b2lkIHRlc3RQYXRjaHBv
aW50QW55KFZhbHVlUmVwIHJlcCkKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKICAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwogICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwogICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IHJvb3QtPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHBy
b2MsIEludDMyLCBPcmlnaW4oKSk7Ci0gICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVk
VmFsdWUoYXJnMSwgVmFsdWVSZXA6OkFueSkpOwotICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25z
dHJhaW5lZFZhbHVlKGFyZzIsIFZhbHVlUmVwOjpBbnkpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBl
bmQoQ29uc3RyYWluZWRWYWx1ZShhcmcxLCByZXApKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQo
Q29uc3RyYWluZWRWYWx1ZShhcmcyLCByZXApKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CkBAIC0zNjU2LDE1ICszNjUxLDU1IEBAIHZvaWQg
dGVzdFBhdGNocG9pbnRBbnkoKQogICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNH
UFIoKSk7CiAgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS5pc0dQUigpKTsKICAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0Lm1v
dmUocGFyYW1zLnJlcHNbMV0uZ3ByKCksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAg
ICAgIGppdC5hZGQzMihwYXJhbXMucmVwc1syXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkp
OworICAgICAgICAgICAgYWRkMzIoaml0LCBwYXJhbXMucmVwc1sxXS5ncHIoKSwgcGFyYW1zLnJl
cHNbMl0uZ3ByKCksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKICAgICAgICAgfSk7CiAgICAgcm9v
dC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hw
b2ludCk7CiAKICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgMSwgMikgPT0gMyk7
CiB9CiAKLXZvaWQgdGVzdFBhdGNocG9pbnRBbnlJbW0oKQordm9pZCB0ZXN0UGF0Y2hwb2ludExv
dHNPZkxhdGVBbnlzKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZlY3RvcjxpbnQ+IHRoaW5nczsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAyMDA7IGktLTspCisgICAgICAgIHRoaW5ncy5hcHBlbmQoaSk7CisKKyAg
ICBWZWN0b3I8VmFsdWUqPiB2YWx1ZXM7CisgICAgZm9yIChpbnQmIHRoaW5nIDogdGhpbmdzKSB7
CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisg
ICAgICAgICAgICBwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZ0aGluZykpOworICAg
ICAgICB2YWx1ZXMuYXBwZW5kKHZhbHVlKTsKKyAgICB9CisKKyAgICBQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSByb290LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBJbnQz
MiwgT3JpZ2luKCkpOworICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVzKQorICAgICAgICBw
YXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSwgVmFsdWVSZXA6OkxhdGVD
b2xkQW55KSk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkbid0IGhhdmUgc3BpbGxlZCB0aGUgaW5w
dXRzLCBzbyB3ZSBhc3NlcnQgdGhhdCB0aGV5J3JlIGluIHJlZ2lzdGVycy4KKyAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSB0aGluZ3Muc2l6ZSgpICsgMSk7CisgICAgICAg
ICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBwYXJhbXMucmVwc1swXS5ncHIoKSk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcGFyYW1zLnJlcHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnJlcHNbaV0uaXNHUFIoKSkgeworICAg
ICAgICAgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1tpXSAhPSBwYXJhbXMucmVwc1swXSk7
CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGQzMihwYXJhbXMucmVwc1tpXS5ncHIoKSwgcGFy
YW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzW2ldLmlzU3RhY2soKSk7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIHBhcmFtcy5yZXBzW2ldLm9mZnNldEZyb21GUCgpKSwgcGFyYW1zLnJlcHNbMF0u
Z3ByKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cisg
ICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
cGF0Y2hwb2ludCk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYykgPT0gKHRo
aW5ncy5zaXplKCkgKiAodGhpbmdzLnNpemUoKSAtIDEpKSAvIDIpOworfQorCit2b2lkIHRlc3RQ
YXRjaHBvaW50QW55SW1tKFZhbHVlUmVwIHJlcCkKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKICAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwpAQCAtMzY3Myw4ICszNzA4LDgg
QEAgdm9pZCB0ZXN0UGF0Y2hwb2ludEFueUltbSgpCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7
CiAgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgNDIpOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IHJvb3QtPmFw
cGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIEludDMyLCBPcmlnaW4oKSk7Ci0gICAgcGF0
Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnMSwgVmFsdWVSZXA6OkFueSkpOwot
ICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZzIsIFZhbHVlUmVwOjpB
bnkpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcxLCByZXAp
KTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcyLCByZXApKTsK
ICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CkBA
IC0zNzAxLDEwICszNzM2LDEwIEBAIHZvaWQgdGVzdFBhdGNocG9pbnRNYW55SW1tcygpCiAgICAg
VmFsdWUqIGFyZzMgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgNDMwMDAwMDAwMDAwMDBsbCk7CiAgICAgVmFsdWUqIGFyZzQgPSByb290LT5hcHBlbmROZXc8
Q29uc3REb3VibGVWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQyLjUpOwogICAgIFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2hwb2ludCA9IHJvb3QtPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2Ms
IFZvaWQsIE9yaWdpbigpKTsKLSAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1
ZShhcmcxLCBWYWx1ZVJlcDo6QW55KSk7Ci0gICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFp
bmVkVmFsdWUoYXJnMiwgVmFsdWVSZXA6OkFueSkpOwotICAgIHBhdGNocG9pbnQtPmFwcGVuZChD
b25zdHJhaW5lZFZhbHVlKGFyZzMsIFZhbHVlUmVwOjpBbnkpKTsKLSAgICBwYXRjaHBvaW50LT5h
cHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmc0LCBWYWx1ZVJlcDo6QW55KSk7CisgICAgcGF0Y2hw
b2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnMSwgVmFsdWVSZXA6Oldhcm1BbnkpKTsK
KyAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcyLCBWYWx1ZVJlcDo6
V2FybUFueSkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZzMs
IFZhbHVlUmVwOjpXYXJtQW55KSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVk
VmFsdWUoYXJnNCwgVmFsdWVSZXA6Oldhcm1BbnkpKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUo
KSA9PSA0KTsKQEAgLTM3MzcsOCArMzc3Miw3IEBAIHZvaWQgdGVzdFBhdGNocG9pbnRXaXRoUmVn
aXN0ZXJSZXN1bHQoKQogICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0gPT0gVmFsdWVS
ZXA6OnJlZyhHUFJJbmZvOjpub25BcmdHUFIwKSk7CiAgICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwc1sxXS5pc0dQUigpKTsKICAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BS
KCkpOwotICAgICAgICAgICAgaml0Lm1vdmUocGFyYW1zLnJlcHNbMV0uZ3ByKCksIEdQUkluZm86
Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAgaml0LmFkZDMyKHBhcmFtcy5yZXBzWzJdLmdwcigp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgICAgIGFkZDMyKGppdCwgcGFyYW1zLnJl
cHNbMV0uZ3ByKCksIHBhcmFtcy5yZXBzWzJdLmdwcigpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsK
ICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7CiAKQEAgLTM3ODAsNyArMzgxNCw3IEBAIHZvaWQg
dGVzdFBhdGNocG9pbnRXaXRoQW55UmVzdWx0KCkKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSByb290LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBEb3VibGUsIE9y
aWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcxLCBW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFp
bmVkVmFsdWUoYXJnMiwgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOwotICAgIHBhdGNocG9pbnQt
PnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJlcDo6QW55OworICAgIHBhdGNocG9pbnQtPnJlc3Vs
dENvbnN0cmFpbnQgPSBWYWx1ZVJlcDo6V2FybUFueTsKICAgICBwYXRjaHBvaW50LT5jbG9iYmVy
TGF0ZShSZWdpc3RlclNldDo6YWxsRlBScygpKTsKICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJl
Z2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CiAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlcihSZWdpc3RlclNldChHUFJJbmZvOjpyZWdUMCkpOwpAQCAtMzc5MSw4ICszODI1LDcgQEAg
dm9pZCB0ZXN0UGF0Y2hwb2ludFdpdGhBbnlSZXN1bHQoKQogICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHNbMF0uaXNTdGFjaygpKTsKICAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFd
LmlzR1BSKCkpOwogICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0g
ICAgICAgICAgICBqaXQubW92ZShwYXJhbXMucmVwc1sxXS5ncHIoKSwgR1BSSW5mbzo6cmVnVDAp
OwotICAgICAgICAgICAgaml0LmFkZDMyKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJh
bXMucmVwc1syXS5ncHIoKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgaml0LmNvbnZl
cnRJbnQzMlRvRG91YmxlKEdQUkluZm86OnJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAg
ICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHBhcmFtcy5yZXBzWzBdLm9mZnNldEZy
b21GUCgpKSk7CiAgICAgICAgIH0pOwpAQCAtNjA1Nyw4ICs2MDkwLDEyIEBAIHZvaWQgcnVuKGNv
bnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdFBhdGNocG9pbnRXaXRoRWFybHlDbG9iYmVy
KCkpOwogICAgIFJVTih0ZXN0UGF0Y2hwb2ludENhbGxBcmcoKSk7CiAgICAgUlVOKHRlc3RQYXRj
aHBvaW50Rml4ZWRSZWdpc3RlcigpKTsKLSAgICBSVU4odGVzdFBhdGNocG9pbnRBbnkoKSk7Ci0g
ICAgUlVOKHRlc3RQYXRjaHBvaW50QW55SW1tKCkpOworICAgIFJVTih0ZXN0UGF0Y2hwb2ludEFu
eShWYWx1ZVJlcDo6V2FybUFueSkpOworICAgIFJVTih0ZXN0UGF0Y2hwb2ludEFueShWYWx1ZVJl
cDo6Q29sZEFueSkpOworICAgIFJVTih0ZXN0UGF0Y2hwb2ludExvdHNPZkxhdGVBbnlzKCkpOwor
ICAgIFJVTih0ZXN0UGF0Y2hwb2ludEFueUltbShWYWx1ZVJlcDo6V2FybUFueSkpOworICAgIFJV
Tih0ZXN0UGF0Y2hwb2ludEFueUltbShWYWx1ZVJlcDo6Q29sZEFueSkpOworICAgIFJVTih0ZXN0
UGF0Y2hwb2ludEFueUltbShWYWx1ZVJlcDo6TGF0ZUNvbGRBbnkpKTsKICAgICBSVU4odGVzdFBh
dGNocG9pbnRNYW55SW1tcygpKTsKICAgICBSVU4odGVzdFBhdGNocG9pbnRXaXRoUmVnaXN0ZXJS
ZXN1bHQoKSk7CiAgICAgUlVOKHRlc3RQYXRjaHBvaW50V2l0aFN0YWNrQXJndW1lbnRSZXN1bHQo
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkocmV2aXNpb24gMTkzMzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzNzgsNyArOTM3OCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIE9TUkV4aXREZXNjcmlwdG9ySW1wbCogZXhpdERlc2NyaXB0b3JJ
bXBsID0gJm1fZnRsU3RhdGUub3NyRXhpdERlc2NyaXB0b3JJbXBscy5sYXN0KCk7CiAgICAgICAg
IAogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB2YWx1ZS0+bnVtQ2hpbGRyZW4oKTsKLSAgICAg
ICAgdmFsdWUtPmFwcGVuZEFueXMoYnVpbGRFeGl0QXJndW1lbnRzKGV4aXREZXNjcmlwdG9yLCBt
X2Z0bFN0YXRlLm9zckV4aXREZXNjcmlwdG9ySW1wbHMubGFzdCgpLCBsb3dWYWx1ZSkpOworICAg
ICAgICB2YWx1ZS0+YXBwZW5kQ29sZEFueXMoYnVpbGRFeGl0QXJndW1lbnRzKGV4aXREZXNjcmlw
dG9yLCBtX2Z0bFN0YXRlLm9zckV4aXREZXNjcmlwdG9ySW1wbHMubGFzdCgpLCBsb3dWYWx1ZSkp
OwogCiAgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOwogICAgICAgICB2YWx1ZS0+
c2V0R2VuZXJhdG9yKAo=
</data>
<flag name="review"
          id="291600"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>