<?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>15973</bug_id>
          
          <creation_ts>2007-11-13 16:36:24 -0800</creation_ts>
          <short_desc>Use templates to clean up comparison node code</short_desc>
          <delta_ts>2008-09-02 19:51:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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>15972</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>61129</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-13 16:36:24 -0800</bug_when>
    <thetext>Use templates to clean up comparison node code

The end goal is to move to op-code generation for a byte-code interpreter.  In many existing Node evaluate* calls we do the same set of operations:
1. convert the inputs to a base type we know how to handle
2. do whatever is specific to that node
3. convert the output to whatever type was requested by the caller.

I&apos;m trying to get ride of steps 1. and 2. and leave us only with step 3.  Steps 1. and 2. are basically copy/paste code and will end up as standard op-code groups which are re-used by lots of Nodes in the bytecode interpreter.

I&apos;ve attached a patch for comment.  It&apos;s not a perfect solution, but I think it&apos;s a good start.  I&apos;m not sure the template usage is exactly as I want it to be in the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61130</commentid>
    <comment_count>1</comment_count>
      <attachid>17246</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-13 16:37:20 -0800</bug_when>
    <thetext>Created attachment 17246
a first-pass fix (depends on bug 15972)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61131</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-13 16:40:23 -0800</bug_when>
    <thetext>I&apos;d be interested in any comments you all have to offer.  I don&apos;t yet have a SunSpider number.  I think I made a typo in one of the operation implementations, because SunSpider falls to its knees under this patch.  I&apos;m investigating that fix now, but that doesn&apos;t hold up the process of getting comments on the general design.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89968</commentid>
    <comment_count>3</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-02 19:51:44 -0700</bug_when>
    <thetext>This is no longer an issue after SquirrelFish.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17246</attachid>
            <date>2007-11-13 16:37:20 -0800</date>
            <delta_ts>2007-11-13 16:37:20 -0800</delta_ts>
            <desc>a first-pass fix (depends on bug 15972)</desc>
            <filename>first.patch</filename>
            <type>text/plain</type>
            <size>21898</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0luZm8ucGxpc3QgYi9KYXZhU2NyaXB0Q29yZS9J
bmZvLnBsaXN0CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL2dy
YW1tYXIueSBiL0phdmFTY3JpcHRDb3JlL2tqcy9ncmFtbWFyLnkKaW5kZXggMWFiMjUyYi4uNTcy
NTFjYSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL2dyYW1tYXIueQorKysgYi9KYXZh
U2NyaXB0Q29yZS9ranMvZ3JhbW1hci55CkBAIC01Nyw4ICs1NywzMSBAQCBzdGF0aWMgYm9vbCBh
bGxvd0F1dG9tYXRpY1NlbWljb2xvbigpOwogCiB1c2luZyBuYW1lc3BhY2UgS0pTOwogCitzdHJ1
Y3QgTGVzc05vZGVUeXBlcyB7CisgICAgdHlwZWRlZiBMZXNzTm9kZSBWYWx1ZXNOb2RlOworICAg
IHR5cGVkZWYgTGVzc051bWJlcnNOb2RlIE51bWJlcnNOb2RlOworICAgIHR5cGVkZWYgTGVzc1N0
cmluZ3NOb2RlIFN0cmluZ3NOb2RlOworfTsKK3N0cnVjdCBMZXNzRXFOb2RlVHlwZXMgeworICAg
IHR5cGVkZWYgTGVzc0VxTm9kZSBWYWx1ZXNOb2RlOworICAgIHR5cGVkZWYgTGVzc0VxTnVtYmVy
c05vZGUgTnVtYmVyc05vZGU7CisgICAgdHlwZWRlZiBMZXNzRXFTdHJpbmdzTm9kZSBTdHJpbmdz
Tm9kZTsKK307CitzdHJ1Y3QgR3JlYXRlck5vZGVUeXBlcyB7CisgICAgdHlwZWRlZiBHcmVhdGVy
Tm9kZSBWYWx1ZXNOb2RlOworICAgIHR5cGVkZWYgR3JlYXRlck51bWJlcnNOb2RlIE51bWJlcnNO
b2RlOworICAgIHR5cGVkZWYgR3JlYXRlclN0cmluZ3NOb2RlIFN0cmluZ3NOb2RlOworfTsKK3N0
cnVjdCBHcmVhdGVyRXFOb2RlVHlwZXMgeworICAgIHR5cGVkZWYgR3JlYXRlckVxTm9kZSBWYWx1
ZXNOb2RlOworICAgIHR5cGVkZWYgR3JlYXRlckVxTnVtYmVyc05vZGUgTnVtYmVyc05vZGU7Cisg
ICAgdHlwZWRlZiBHcmVhdGVyRXFTdHJpbmdzTm9kZSBTdHJpbmdzTm9kZTsKK307CisKK3RlbXBs
YXRlIDxjbGFzcyBOb2RlVHlwZXM+CitzdGF0aWMgRXhwcmVzc2lvbk5vZGUqIG1ha2VDb21wYXJp
c29uTm9kZShFeHByZXNzaW9uTm9kZSosIEV4cHJlc3Npb25Ob2RlKik7CisKIHN0YXRpYyBBZGRO
b2RlKiBtYWtlQWRkTm9kZShFeHByZXNzaW9uTm9kZSosIEV4cHJlc3Npb25Ob2RlKik7Ci1zdGF0
aWMgTGVzc05vZGUqIG1ha2VMZXNzTm9kZShFeHByZXNzaW9uTm9kZSosIEV4cHJlc3Npb25Ob2Rl
Kik7CiBzdGF0aWMgRXhwcmVzc2lvbk5vZGUqIG1ha2VBc3NpZ25Ob2RlKEV4cHJlc3Npb25Ob2Rl
KiBsb2MsIE9wZXJhdG9yLCBFeHByZXNzaW9uTm9kZSogZXhwcik7CiBzdGF0aWMgRXhwcmVzc2lv
bk5vZGUqIG1ha2VQcmVmaXhOb2RlKEV4cHJlc3Npb25Ob2RlKiBleHByLCBPcGVyYXRvcik7CiBz
dGF0aWMgRXhwcmVzc2lvbk5vZGUqIG1ha2VQb3N0Zml4Tm9kZShFeHByZXNzaW9uTm9kZSogZXhw
ciwgT3BlcmF0b3IpOwpAQCAtNDMwLDMwICs0NTMsMzAgQEAgU2hpZnRFeHByTm9CRjoKIAogUmVs
YXRpb25hbEV4cHI6CiAgICAgU2hpZnRFeHByCi0gIHwgUmVsYXRpb25hbEV4cHIgJzwnIFNoaWZ0
RXhwciAgICAgICAgeyAkJCA9IG1ha2VMZXNzTm9kZSgkMSwgJDMpOyB9Ci0gIHwgUmVsYXRpb25h
bEV4cHIgJz4nIFNoaWZ0RXhwciAgICAgICAgeyAkJCA9IG5ldyBHcmVhdGVyTm9kZSgkMSwgJDMp
OyB9Ci0gIHwgUmVsYXRpb25hbEV4cHIgTEUgU2hpZnRFeHByICAgICAgICAgeyAkJCA9IG5ldyBM
ZXNzRXFOb2RlKCQxLCAkMyk7IH0KLSAgfCBSZWxhdGlvbmFsRXhwciBHRSBTaGlmdEV4cHIgICAg
ICAgICB7ICQkID0gbmV3IEdyZWF0ZXJFcU5vZGUoJDEsICQzKTsgfQorICB8IFJlbGF0aW9uYWxF
eHByICc8JyBTaGlmdEV4cHIgICAgICAgIHsgJCQgPSBtYWtlQ29tcGFyaXNvbk5vZGU8TGVzc05v
ZGVUeXBlcz4oJDEsICQzKTsgfQorICB8IFJlbGF0aW9uYWxFeHByICc+JyBTaGlmdEV4cHIgICAg
ICAgIHsgJCQgPSBtYWtlQ29tcGFyaXNvbk5vZGU8R3JlYXRlck5vZGVUeXBlcz4oJDEsICQzKTsg
fQorICB8IFJlbGF0aW9uYWxFeHByIExFIFNoaWZ0RXhwciAgICAgICAgIHsgJCQgPSBtYWtlQ29t
cGFyaXNvbk5vZGU8TGVzc0VxTm9kZVR5cGVzPigkMSwgJDMpOyB9CisgIHwgUmVsYXRpb25hbEV4
cHIgR0UgU2hpZnRFeHByICAgICAgICAgeyAkJCA9IG1ha2VDb21wYXJpc29uTm9kZTxHcmVhdGVy
RXFOb2RlVHlwZXM+KCQxLCAkMyk7IH0KICAgfCBSZWxhdGlvbmFsRXhwciBJTlNUQU5DRU9GIFNo
aWZ0RXhwciB7ICQkID0gbmV3IEluc3RhbmNlT2ZOb2RlKCQxLCAkMyk7IH0KICAgfCBSZWxhdGlv
bmFsRXhwciBJTlRPS0VOIFNoaWZ0RXhwciAgICB7ICQkID0gbmV3IEluTm9kZSgkMSwgJDMpOyB9
CiA7CiAKIFJlbGF0aW9uYWxFeHByTm9JbjoKICAgICBTaGlmdEV4cHIKLSAgfCBSZWxhdGlvbmFs
RXhwck5vSW4gJzwnIFNoaWZ0RXhwciAgICB7ICQkID0gbWFrZUxlc3NOb2RlKCQxLCAkMyk7IH0K
LSAgfCBSZWxhdGlvbmFsRXhwck5vSW4gJz4nIFNoaWZ0RXhwciAgICB7ICQkID0gbmV3IEdyZWF0
ZXJOb2RlKCQxLCAkMyk7IH0KLSAgfCBSZWxhdGlvbmFsRXhwck5vSW4gTEUgU2hpZnRFeHByICAg
ICB7ICQkID0gbmV3IExlc3NFcU5vZGUoJDEsICQzKTsgfQotICB8IFJlbGF0aW9uYWxFeHByTm9J
biBHRSBTaGlmdEV4cHIgICAgIHsgJCQgPSBuZXcgR3JlYXRlckVxTm9kZSgkMSwgJDMpOyB9Cisg
IHwgUmVsYXRpb25hbEV4cHJOb0luICc8JyBTaGlmdEV4cHIgICAgeyAkJCA9IG1ha2VDb21wYXJp
c29uTm9kZTxMZXNzTm9kZVR5cGVzPigkMSwgJDMpOyB9CisgIHwgUmVsYXRpb25hbEV4cHJOb0lu
ICc+JyBTaGlmdEV4cHIgICAgeyAkJCA9IG1ha2VDb21wYXJpc29uTm9kZTxHcmVhdGVyTm9kZVR5
cGVzPigkMSwgJDMpOyB9CisgIHwgUmVsYXRpb25hbEV4cHJOb0luIExFIFNoaWZ0RXhwciAgICAg
eyAkJCA9IG1ha2VDb21wYXJpc29uTm9kZTxMZXNzRXFOb2RlVHlwZXM+KCQxLCAkMyk7IH0KKyAg
fCBSZWxhdGlvbmFsRXhwck5vSW4gR0UgU2hpZnRFeHByICAgICB7ICQkID0gbWFrZUNvbXBhcmlz
b25Ob2RlPEdyZWF0ZXJFcU5vZGVUeXBlcz4oJDEsICQzKTsgfQogICB8IFJlbGF0aW9uYWxFeHBy
Tm9JbiBJTlNUQU5DRU9GIFNoaWZ0RXhwcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsgJCQgPSBuZXcgSW5zdGFuY2VPZk5vZGUoJDEsICQzKTsgfQogOwogCiBSZWxh
dGlvbmFsRXhwck5vQkY6CiAgICAgU2hpZnRFeHByTm9CRgotICB8IFJlbGF0aW9uYWxFeHByTm9C
RiAnPCcgU2hpZnRFeHByICAgIHsgJCQgPSBtYWtlTGVzc05vZGUoJDEsICQzKTsgfQotICB8IFJl
bGF0aW9uYWxFeHByTm9CRiAnPicgU2hpZnRFeHByICAgIHsgJCQgPSBuZXcgR3JlYXRlck5vZGUo
JDEsICQzKTsgfQotICB8IFJlbGF0aW9uYWxFeHByTm9CRiBMRSBTaGlmdEV4cHIgICAgIHsgJCQg
PSBuZXcgTGVzc0VxTm9kZSgkMSwgJDMpOyB9Ci0gIHwgUmVsYXRpb25hbEV4cHJOb0JGIEdFIFNo
aWZ0RXhwciAgICAgeyAkJCA9IG5ldyBHcmVhdGVyRXFOb2RlKCQxLCAkMyk7IH0KKyAgfCBSZWxh
dGlvbmFsRXhwck5vQkYgJzwnIFNoaWZ0RXhwciAgICB7ICQkID0gbWFrZUNvbXBhcmlzb25Ob2Rl
PExlc3NOb2RlVHlwZXM+KCQxLCAkMyk7IH0KKyAgfCBSZWxhdGlvbmFsRXhwck5vQkYgJz4nIFNo
aWZ0RXhwciAgICB7ICQkID0gbWFrZUNvbXBhcmlzb25Ob2RlPEdyZWF0ZXJOb2RlVHlwZXM+KCQx
LCAkMyk7IH0KKyAgfCBSZWxhdGlvbmFsRXhwck5vQkYgTEUgU2hpZnRFeHByICAgICB7ICQkID0g
bWFrZUNvbXBhcmlzb25Ob2RlPExlc3NFcU5vZGVUeXBlcz4oJDEsICQzKTsgfQorICB8IFJlbGF0
aW9uYWxFeHByTm9CRiBHRSBTaGlmdEV4cHIgICAgIHsgJCQgPSBtYWtlQ29tcGFyaXNvbk5vZGU8
R3JlYXRlckVxTm9kZVR5cGVzPigkMSwgJDMpOyB9CiAgIHwgUmVsYXRpb25hbEV4cHJOb0JGIElO
U1RBTkNFT0YgU2hpZnRFeHByCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyAkJCA9IG5ldyBJbnN0YW5jZU9mTm9kZSgkMSwgJDMpOyB9CiAgIHwgUmVsYXRpb25hbEV4
cHJOb0JGIElOVE9LRU4gU2hpZnRFeHByICAgICB7ICQkID0gbmV3IEluTm9kZSgkMSwgJDMpOyB9
CkBAIC05MTEsMjEgKzkzNCwyMiBAQCBzdGF0aWMgQWRkTm9kZSogbWFrZUFkZE5vZGUoRXhwcmVz
c2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCkKICAgICByZXR1cm4gbmV3IEFk
ZE5vZGUobGVmdCwgcmlnaHQpOwogfQogCi1zdGF0aWMgTGVzc05vZGUqIG1ha2VMZXNzTm9kZShF
eHByZXNzaW9uTm9kZSogbGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0KQordGVtcGxhdGUgPGNs
YXNzIE5vZGVUeXBlcz4KK3N0YXRpYyBFeHByZXNzaW9uTm9kZSogbWFrZUNvbXBhcmlzb25Ob2Rl
KEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQpCiB7CiAgICAgSlNU
eXBlIHQxID0gbGVmdC0+ZXhwZWN0ZWRSZXR1cm5UeXBlKCk7CiAgICAgSlNUeXBlIHQyID0gcmln
aHQtPmV4cGVjdGVkUmV0dXJuVHlwZSgpOwogICAgIAogICAgIGlmICh0MSA9PSBTdHJpbmdUeXBl
ICYmIHQyID09IFN0cmluZ1R5cGUpCi0gICAgICAgIHJldHVybiBuZXcgTGVzc1N0cmluZ3NOb2Rl
KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgcmV0dXJuIG5ldyB0eXBlbmFtZSBOb2RlVHlwZXM6OlN0
cmluZ3NOb2RlKGxlZnQsIHJpZ2h0KTsKIAogICAgIC8vIFRoZXJlIGFyZSBjZXJ0YWlubHkgbW9y
ZSBlZmZpY2llbnQgd2F5cyB0byBkbyB0aGlzIHR5cGUgY2hlY2sgaWYgbmVjZXNzYXJ5CiAgICAg
aWYgKHQxID09IE51bWJlclR5cGUgfHwgdDEgPT0gQm9vbGVhblR5cGUgfHwgdDEgPT0gVW5kZWZp
bmVkVHlwZSB8fCB0MSA9PSBOdWxsVHlwZSB8fAogICAgICAgICB0MiA9PSBOdW1iZXJUeXBlIHx8
IHQyID09IEJvb2xlYW5UeXBlIHx8IHQyID09IFVuZGVmaW5lZFR5cGUgfHwgdDIgPT0gTnVsbFR5
cGUpCi0gICAgICAgIHJldHVybiBuZXcgTGVzc051bWJlcnNOb2RlKGxlZnQsIHJpZ2h0KTsKKyAg
ICAgICAgcmV0dXJuIG5ldyB0eXBlbmFtZSBOb2RlVHlwZXM6Ok51bWJlcnNOb2RlKGxlZnQsIHJp
Z2h0KTsKIAogICAgIC8vIE5laXRoZXIgaXMgY2VydGFpbiB0byBiZSBhIG51bWJlciwgbm9yIHdl
cmUgYm90aCBjZXJ0YWluIHRvIGJlIHN0cmluZ3MsIHNvIHdlIHVzZSB0aGUgZGVmYXVsdCAoc2xv
dykgaW1wbGVtZW50YXRpb24uCi0gICAgcmV0dXJuIG5ldyBMZXNzTm9kZShsZWZ0LCByaWdodCk7
CisgICAgcmV0dXJuIG5ldyB0eXBlbmFtZSBOb2RlVHlwZXM6OlZhbHVlc05vZGUobGVmdCwgcmln
aHQpOwogfQogCiBzdGF0aWMgRXhwcmVzc2lvbk5vZGUqIG1ha2VBc3NpZ25Ob2RlKEV4cHJlc3Np
b25Ob2RlKiBsb2MsIE9wZXJhdG9yIG9wLCBFeHByZXNzaW9uTm9kZSogZXhwcikKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ranMvbm9k
ZXMuY3BwCmluZGV4IDZlZjVjZmQuLmEzN2RmN2UgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L2tqcy9ub2Rlcy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcApAQCAtMjQ1
OCwxNTQgKzI0NTgsNiBAQCB1aW50MzJfdCBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0
ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb1VJ
bnQzMihleGVjKTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlbGF0
aW9uYWwgTm9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1zdGF0aWMgaW5s
aW5lIGJvb2wgbGVzc1RoYW4oRXhlY1N0YXRlICpleGVjLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSog
djIpIAotewotICAgIGRvdWJsZSBuMTsKLSAgICBkb3VibGUgbjI7Ci0gICAgSlNWYWx1ZSogcDE7
Ci0gICAgSlNWYWx1ZSogcDI7Ci0gICAgYm9vbCB3YXNOb3RTdHJpbmcxID0gdjEtPmdldFByaW1p
dGl2ZU51bWJlcihleGVjLCBuMSwgcDEpOwotICAgIGJvb2wgd2FzTm90U3RyaW5nMiA9IHYyLT5n
ZXRQcmltaXRpdmVOdW1iZXIoZXhlYywgbjIsIHAyKTsKLSAgICAKLSAgICBpZiAod2FzTm90U3Ry
aW5nMSB8IHdhc05vdFN0cmluZzIpCi0gICAgICAgIHJldHVybiBuMSA8IG4yOwotCi0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZ0ltcCo+KHAxKS0+dmFsdWUoKSA8IHN0YXRpY19j
YXN0PGNvbnN0IFN0cmluZ0ltcCo+KHAyKS0+dmFsdWUoKTsKLX0KLQotc3RhdGljIGlubGluZSBi
b29sIGxlc3NUaGFuRXEoRXhlY1N0YXRlICpleGVjLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIp
IAotewotICAgIGRvdWJsZSBuMTsKLSAgICBkb3VibGUgbjI7Ci0gICAgSlNWYWx1ZSogcDE7Ci0g
ICAgSlNWYWx1ZSogcDI7Ci0gICAgYm9vbCB3YXNOb3RTdHJpbmcxID0gdjEtPmdldFByaW1pdGl2
ZU51bWJlcihleGVjLCBuMSwgcDEpOwotICAgIGJvb2wgd2FzTm90U3RyaW5nMiA9IHYyLT5nZXRQ
cmltaXRpdmVOdW1iZXIoZXhlYywgbjIsIHAyKTsKLSAgICAKLSAgICBpZiAod2FzTm90U3RyaW5n
MSB8IHdhc05vdFN0cmluZzIpCi0gICAgICAgIHJldHVybiBuMSA8PSBuMjsKLQotICAgIHJldHVy
biAhKHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZ0ltcCo+KHAyKS0+dmFsdWUoKSA8IHN0YXRpY19j
YXN0PGNvbnN0IFN0cmluZ0ltcCo+KHAxKS0+dmFsdWUoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuOC4x
Ci1ib29sIExlc3NOb2RlOjppbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNf
Q0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5ldmFsdWF0
ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAgcmV0dXJuIGxlc3NU
aGFuKGV4ZWMsIHYxLCB2Mik7Ci19Ci0KLUpTVmFsdWUqIExlc3NOb2RlOjpldmFsdWF0ZShFeGVj
U3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihpbmxpbmVFdmFsdWF0ZVRvQm9v
bGVhbihleGVjKSk7Ci19Ci0KLWJvb2wgTGVzc05vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7
Ci19Ci0KLWJvb2wgTGVzc051bWJlcnNOb2RlOjppbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihFeGVj
U3RhdGUqIGV4ZWMpCi17Ci0gICAgZG91YmxlIG4xID0gbV9leHByMS0+ZXZhbHVhdGVUb051bWJl
cihleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIGRvdWJsZSBuMiA9IG1f
ZXhwcjItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci0gICAgcmV0dXJuIG4xIDwgbjI7Ci19Ci0K
LUpTVmFsdWUqIExlc3NOdW1iZXJzTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBqc0Jvb2xlYW4oaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oZXhlYykpOwotfQot
Ci1ib29sIExlc3NOdW1iZXJzTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLX0KLQotYm9v
bCBMZXNzU3RyaW5nc05vZGU6OmlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtK
U19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5ldmFsdWF0
ZShleGVjKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4odjEpLT52YWx1ZSgp
IDwgc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4odjIpLT52YWx1ZSgpOwotfQotCi1KU1ZhbHVlKiBM
ZXNzU3RyaW5nc05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4g
anNCb29sZWFuKGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpKTsKLX0KLQotYm9vbCBMZXNz
U3RyaW5nc05vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBy
ZXR1cm4gaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7Ci19Ci0KLS8vIEVDTUEgMTEuOC4y
Ci1ib29sIEdyZWF0ZXJOb2RlOjppbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUgKmV4
ZWMpCi17Ci0gICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsKLSAgICBL
SlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5ldmFs
dWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAgcmV0dXJuIGxl
c3NUaGFuKGV4ZWMsIHYyLCB2MSk7Ci19Ci0KLUpTVmFsdWUqIEdyZWF0ZXJOb2RlOjpldmFsdWF0
ZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihpbmxpbmVFdmFsdWF0
ZVRvQm9vbGVhbihleGVjKSk7Ci19Ci0KLWJvb2wgR3JlYXRlck5vZGU6OmV2YWx1YXRlVG9Cb29s
ZWFuKEV4ZWNTdGF0ZSAqZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0Jvb2xl
YW4oZXhlYyk7Ci19Ci0KLS8vIEVDTUEgMTEuOC4zCi1ib29sIExlc3NFcU5vZGU6OmlubGluZUV2
YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2MSA9IG1f
ZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAg
ICBKU1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VY
Q0VQVElPTkJPT0xFQU4KLSAgICByZXR1cm4gbGVzc1RoYW5FcShleGVjLCB2MSwgdjIpOwotfQot
Ci1KU1ZhbHVlKiBMZXNzRXFOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
cmV0dXJuIGpzQm9vbGVhbihpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKSk7Ci19Ci0KLWJv
b2wgTGVzc0VxTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQotewotICAg
IHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLX0KLQotLy8gRUNNQSAxMS44
LjQKLWJvb2wgR3JlYXRlckVxTm9kZTo6aW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRl
KiBleGVjKQotewotICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0g
ICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+
ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVy
biBsZXNzVGhhbkVxKGV4ZWMsIHYyLCB2MSk7Ci19Ci0KLUpTVmFsdWUqIEdyZWF0ZXJFcU5vZGU6
OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4ganNCb29sZWFuKGlubGlu
ZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpKTsKLX0KLQotYm9vbCBHcmVhdGVyRXFOb2RlOjpldmFs
dWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1
YXRlVG9Cb29sZWFuKGV4ZWMpOwotfQotCiAvLyBFQ01BIDExLjguNgogSlNWYWx1ZSogSW5zdGFu
Y2VPZk5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL2tqcy9ub2Rlcy5oIGIvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgKaW5kZXgg
Njc3N2Q0Ny4uMjVhMGZmMiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgK
KysrIGIvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgKQEAgLTEzNCw2ICsxMzQsOSBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICAvLyBVc2VkIGZvciBpdGVyYXRpdmUsIGRlcHRoLWZpcnN0IHRyYXZl
cnNhbCBvZiB0aGUgbm9kZSB0cmVlLiBEb2VzIG5vdCBjcm9zcyBmdW5jdGlvbiBjYWxsIGJvdW5k
YXJpZXMuCiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25C
b2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMIHsg
fQogCisgICAgLy8gVGhpcyBpcyBwdWJsaWMgdG8gYWxsb3cgYWNjZXNzIGZyb20gc3RhdGljIHRl
bXBsYXRlIGZ1bmN0aW9ucworICAgIHZvaWQgaGFuZGxlRXhjZXB0aW9uKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CisgICAgICAKICAgcHJvdGVjdGVkOgogICAgIE5vZGUoSlNUeXBlKSBLSlNf
RkFTVF9DQUxMOyAvLyB1c2VkIGJ5IEV4cHJlc3Npb25Ob2RlCiAKQEAgLTE0Nyw3ICsxNTAsNiBA
QCBuYW1lc3BhY2UgS0pTIHsKIAogICAgIEpTVmFsdWUqIHRocm93VW5kZWZpbmVkVmFyaWFibGVF
cnJvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJikgS0pTX0ZBU1RfQ0FMTDsKIAotICAg
IHZvaWQgaGFuZGxlRXhjZXB0aW9uKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdm9p
ZCBoYW5kbGVFeGNlcHRpb24oRXhlY1N0YXRlKiwgSlNWYWx1ZSopIEtKU19GQVNUX0NBTEw7CiAK
ICAgICBDb21wbGV0aW9uIHJldGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKQEAgLTEyMjgsNzQgKzEyMzAsMTg2IEBAIG5hbWVzcGFjZSBLSlMgewogICBwcml2YXRlOgog
ICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3QgaW5saW5lRXZhbHVhdGVUb1VJbnQzMihFeGVjU3Rh
dGUqKTsKICAgfTsKLQotICBjbGFzcyBMZXNzTm9kZSA6IHB1YmxpYyBCaW5hcnlPcGVyYXRvck5v
ZGUgewotICBwdWJsaWM6Ci0gICAgTGVzc05vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNz
aW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwKLSAgICAgIDogQmluYXJ5T3BlcmF0b3JOb2RlKEJv
b2xlYW5UeXBlLCBlMSwgZTIpIHt9Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVh
bihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogb3Bl
cmF0b3JBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICI8IjsgfQotICAgIHZpcnR1YWwgUHJlY2Vk
ZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1JlbGF0aW9uYWw7IH0KLSAgcHJp
dmF0ZToKLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhl
Y1N0YXRlKik7Ci0gIH07Ci0KLSAgICBjbGFzcyBMZXNzTnVtYmVyc05vZGUgOiBwdWJsaWMgTGVz
c05vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgTGVzc051bWJlcnNOb2RlKEV4cHJlc3Npb25O
b2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6
IExlc3NOb2RlKGUxLCBlMikge30KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVU
b0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICBwcml2YXRlOgotICAgICAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKik7
CisgICAgCisgICAgc3RydWN0IENvbXBhcmlzaW9uTm9kZVNwZWMgeworICAgICAgICBzdGF0aWMg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgeyByZXR1cm4gUHJlY1JlbGF0aW9uYWw7IH0KKyAgICAg
ICAgCisgICAgICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBsZXNzVGhhbihFeGVjU3RhdGUgKmV4ZWMs
IEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikgCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvdWJs
ZSBuMTsKKyAgICAgICAgICAgIGRvdWJsZSBuMjsKKyAgICAgICAgICAgIEpTVmFsdWUqIHAxOwor
ICAgICAgICAgICAgSlNWYWx1ZSogcDI7CisgICAgICAgICAgICBib29sIHdhc05vdFN0cmluZzEg
PSB2MS0+Z2V0UHJpbWl0aXZlTnVtYmVyKGV4ZWMsIG4xLCBwMSk7CisgICAgICAgICAgICBib29s
IHdhc05vdFN0cmluZzIgPSB2Mi0+Z2V0UHJpbWl0aXZlTnVtYmVyKGV4ZWMsIG4yLCBwMik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh3YXNOb3RTdHJpbmcxIHwgd2FzTm90U3RyaW5n
MikKKyAgICAgICAgICAgICAgICByZXR1cm4gbjEgPCBuMjsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZ0ltcCo+KHAxKS0+dmFsdWUoKSA8
IHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZ0ltcCo+KHAyKS0+dmFsdWUoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgc3RhdGljIGlubGluZSBib29sIGxlc3NUaGFuRXEoRXhlY1N0YXRl
ICpleGVjLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpIAorICAgICAgICB7CisgICAgICAgICAg
ICBkb3VibGUgbjE7CisgICAgICAgICAgICBkb3VibGUgbjI7CisgICAgICAgICAgICBKU1ZhbHVl
KiBwMTsKKyAgICAgICAgICAgIEpTVmFsdWUqIHAyOworICAgICAgICAgICAgYm9vbCB3YXNOb3RT
dHJpbmcxID0gdjEtPmdldFByaW1pdGl2ZU51bWJlcihleGVjLCBuMSwgcDEpOworICAgICAgICAg
ICAgYm9vbCB3YXNOb3RTdHJpbmcyID0gdjItPmdldFByaW1pdGl2ZU51bWJlcihleGVjLCBuMiwg
cDIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAod2FzTm90U3RyaW5nMSB8IHdhc05v
dFN0cmluZzIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG4xIDw9IG4yOworICAgICAgICAgICAg
CisgICAgICAgICAgICByZXR1cm4gIShzdGF0aWNfY2FzdDxjb25zdCBTdHJpbmdJbXAqPihwMikt
PnZhbHVlKCkgPCBzdGF0aWNfY2FzdDxjb25zdCBTdHJpbmdJbXAqPihwMSktPnZhbHVlKCkpOwor
ICAgICAgICB9ICAgICAgICAKICAgICB9OwotCi0gICAgY2xhc3MgTGVzc1N0cmluZ3NOb2RlIDog
cHVibGljIExlc3NOb2RlIHsKKyAgICAKKyAgICBzdHJ1Y3QgTGVzc05vZGVTcGVjIDogcHVibGlj
IENvbXBhcmlzaW9uTm9kZVNwZWMgeworICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29s
IHRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIENvbXBhcmlzaW9uTm9kZVNwZWM6Omxlc3NUaGFu
KGV4ZWMsIHYxLCB2Mik7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUg
Ym9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKiwgZG91YmxlIG4xLCBkb3VibGUgbjIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBuMSA8IG4yOworICAgICAgICB9CisgICAgICAgIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcm
IHMxLCBjb25zdCBVU3RyaW5nJiBzMikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHMx
IDwgczI7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIG9wZXJhdG9yQXNT
dHJpbmcoKSB7IHJldHVybiAiPCI7IH0KKyAgICB9OworICAgIHN0cnVjdCBMZXNzRXFOb2RlU3Bl
YyA6IHB1YmxpYyBDb21wYXJpc2lvbk5vZGVTcGVjIHsKKyAgICAgICAgc3RhdGljIEFMV0FZU19J
TkxJTkUgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2MSwgSlNWYWx1
ZSogdjIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBDb21wYXJpc2lvbk5vZGVTcGVj
OjpsZXNzVGhhbkVxKGV4ZWMsIHYxLCB2Mik7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIEFM
V0FZU19JTkxJTkUgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKiwgZG91YmxlIG4xLCBkb3VibGUg
bjIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuMSA8PSBuMjsKKyAgICAgICAgfQor
ICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqLCBj
b25zdCBVU3RyaW5nJiBzMSwgY29uc3QgVVN0cmluZyYgczIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAhKHMyIDwgczEpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBvcGVyYXRvckFzU3RyaW5nKCkgeyByZXR1cm4gIjw9IjsgfQorICAgIH07CisgICAgc3Ry
dWN0IEdyZWF0ZXJOb2RlU3BlYyA6IHB1YmxpYyBDb21wYXJpc2lvbk5vZGVTcGVjIHsKKyAgICAg
ICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBD
b21wYXJpc2lvbk5vZGVTcGVjOjpsZXNzVGhhbihleGVjLCB2MiwgdjEpOworICAgICAgICB9Cisg
ICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSosIGRv
dWJsZSBuMSwgZG91YmxlIG4yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbjEgPiBu
MjsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIHRvQm9vbGVh
bihFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJiBzMSwgY29uc3QgVVN0cmluZyYgczIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzMiA8IHMxOworICAgICAgICB9CisgICAgICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBvcGVyYXRvckFzU3RyaW5nKCkgeyByZXR1cm4gIj4iOyB9CisgICAg
fTsKKyAgICBzdHJ1Y3QgR3JlYXRlckVxTm9kZVNwZWMgOiBwdWJsaWMgQ29tcGFyaXNpb25Ob2Rl
U3BlYyB7CisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgdG9Cb29sZWFuKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gQ29tcGFyaXNpb25Ob2RlU3BlYzo6bGVzc1RoYW5FcShleGVjLCB2MiwgdjEp
OworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgdG9Cb29sZWFu
KEV4ZWNTdGF0ZSosIGRvdWJsZSBuMSwgZG91YmxlIG4yKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbjEgPj0gbjI7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKiwgY29uc3QgVVN0cmluZyYgczEsIGNvbnN0IFVT
dHJpbmcmIHMyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIShzMSA8IHMyKTsKKyAg
ICAgICAgfQorICAgICAgICBjb25zdCBjaGFyKiBvcGVyYXRvckFzU3RyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gIj49IjsgfQorICAgIH07CisgICAgCisgICAgdGVtcGxhdGUgPGNsYXNzIE5vZGVTcGVj
PgorICAgIHN0cnVjdCBWYWx1ZVZhbHVlVG9Cb29sZWFuTm9kZUJhc2UgeworICAgICAgICBzdGF0
aWMgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSog
ZXhlYywgRXhwcmVzc2lvbk5vZGUqIG5vZGUsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIyKQorICAgICAgICB7CisgICAgICAgICAgICBKU1ZhbHVlKiB2MSA9IGV4
cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmhhbmRsZUV4Y2VwdGlvbihleGVjKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBKU1Zh
bHVlKiB2MiA9IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKKyAgICAgICAgICAgIHJldHVybiBOb2Rl
U3BlYzo6dG9Cb29sZWFuKGV4ZWMsIHYxLCB2Mik7CisgICAgICAgIH0KKyAgICB9OworICAgIAor
ICAgIHRlbXBsYXRlIDxjbGFzcyBOb2RlU3BlYz4KKyAgICBzdHJ1Y3QgTnVtYmVyTnVtYmVyVG9C
b29sZWFuTm9kZUJhc2UgeworICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlubGlu
ZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYywgRXhwcmVzc2lvbk5vZGUqIG5vZGUs
IEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKQorICAgICAgICB7
CisgICAgICAgICAgICBkb3VibGUgbjEgPSBleHByMS0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsK
KyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICAgICAgICAg
IG5vZGUtPmhhbmRsZUV4Y2VwdGlvbihleGVjKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkb3VibGUgbjIgPSBleHByMi0+ZXZhbHVh
dGVUb051bWJlcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybiBOb2RlU3BlYzo6dG9Cb29sZWFu
KGV4ZWMsIG4xLCBuMik7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIHRlbXBsYXRlIDxj
bGFzcyBOb2RlU3BlYz4KKyAgICBzdHJ1Y3QgU3RyaW5nU3RyaW5nVG9Cb29sZWFuTm9kZUJhc2Ug
eworICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29s
ZWFuKEV4ZWNTdGF0ZSogZXhlYywgRXhwcmVzc2lvbk5vZGUqIG5vZGUsIEV4cHJlc3Npb25Ob2Rl
KiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKQorICAgICAgICB7CisgICAgICAgICAgICBT
dHJpbmdJbXAqIHMxID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4oZXhwcjEtPmV2YWx1YXRlKGV4
ZWMpKTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICAg
ICAgICAgIG5vZGUtPmhhbmRsZUV4Y2VwdGlvbihleGVjKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdHJpbmdJbXAqIHMyID0gc3Rh
dGljX2Nhc3Q8U3RyaW5nSW1wKj4oZXhwcjItPmV2YWx1YXRlKGV4ZWMpKTsKKyAgICAgICAgICAg
IHJldHVybiBOb2RlU3BlYzo6dG9Cb29sZWFuKGV4ZWMsIHMxLCBzMik7CisgICAgICAgIH0KKyAg
ICB9OworICAgIAorICAgIHRlbXBsYXRlIDxjbGFzcyBOb2RlSW5wdXQsIGNsYXNzIE5vZGVTcGVj
LCBjbGFzcyBOb2RlQmFzZT4KKyAgICBjbGFzcyBUb0Jvb2xlYW5Ob2RlIDogcHVibGljIE5vZGVC
YXNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIExlc3NTdHJpbmdzTm9kZShFeHByZXNzaW9uTm9k
ZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBM
ZXNzTm9kZShlMSwgZTIpIHt9Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9C
b29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAg
QUxXQVlTX0lOTElORSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopOwor
ICAgICAgICBUb0Jvb2xlYW5Ob2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUq
IGUyKSBLSlNfRkFTVF9DQUxMCisgICAgICAgIDogTm9kZUJhc2UoQm9vbGVhblR5cGUsIGUxLCBl
Mikge30KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0
YXRlKiBleGVjKSBLSlNfRkFTVF9DQUxMCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBq
c0Jvb2xlYW4oTm9kZUlucHV0OjppbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjLCB0aGlzLCB0
aGlzLT5tX2V4cHIxLmdldCgpLCB0aGlzLT5tX2V4cHIyLmdldCgpKSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUq
IGV4ZWMpIEtKU19GQVNUX0NBTEwKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE5vZGVJ
bnB1dDo6aW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oZXhlYywgdGhpcywgdGhpcy0+bV9leHByMS5n
ZXQoKSwgdGhpcy0+bV9leHByMi5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKSBLSlNfRkFT
VF9DQUxMCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOb2RlSW5wdXQ6OmlubGluZUV2
YWx1YXRlVG9Cb29sZWFuKGV4ZWMsIHRoaXMsIHRoaXMtPm1fZXhwcjEuZ2V0KCksIHRoaXMtPm1f
ZXhwcjIuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHVpbnQz
Ml90IGV2YWx1YXRlVG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKSBLSlNfRkFTVF9DQUxMCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOb2RlSW5wdXQ6OmlubGluZUV2YWx1YXRlVG9Cb29s
ZWFuKGV4ZWMsIHRoaXMsIHRoaXMtPm1fZXhwcjEuZ2V0KCksIHRoaXMtPm1fZXhwcjIuZ2V0KCkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9wZXJh
dG9yQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiBOb2RlU3BlYzo6b3BlcmF0b3JBc1N0cmluZygp
OyB9CisgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1
cm4gTm9kZVNwZWM6OnByZWNlZGVuY2UoKTsgfQogICAgIH07Ci0KLSAgY2xhc3MgR3JlYXRlck5v
ZGUgOiBwdWJsaWMgQmluYXJ5T3BlcmF0b3JOb2RlIHsKLSAgcHVibGljOgotICAgIEdyZWF0ZXJO
b2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxM
Ci0gICAgICA6IEJpbmFyeU9wZXJhdG9yTm9kZShCb29sZWFuVHlwZSwgZTEsIGUyKSB7fQotICAg
IHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9wZXJhdG9yQXNTdHJpbmcoKSBjb25zdCB7IHJl
dHVybiAiPiI7IH0KLSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsg
cmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9Ci0gIHByaXZhdGU6Ci0gICAgQUxXQVlTX0lOTElORSBi
b29sIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopOwotICB9OwotCi0gIGNsYXNz
IExlc3NFcU5vZGUgOiBwdWJsaWMgQmluYXJ5T3BlcmF0b3JOb2RlIHsKLSAgcHVibGljOgotICAg
IExlc3NFcU5vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19G
QVNUX0NBTEwKLSAgICAgIDogQmluYXJ5T3BlcmF0b3JOb2RlKEJvb2xlYW5UeXBlLCBlMSwgZTIp
IHt9Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwotICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogb3BlcmF0b3JBc1N0cmluZygpIGNv
bnN0IHsgcmV0dXJuICI8PSI7IH0KLSAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgp
IGNvbnN0IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9Ci0gIHByaXZhdGU6Ci0gICAgQUxXQVlT
X0lOTElORSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopOwotICB9Owot
Ci0gIGNsYXNzIEdyZWF0ZXJFcU5vZGUgOiBwdWJsaWMgQmluYXJ5T3BlcmF0b3JOb2RlIHsKLSAg
cHVibGljOgotICAgIEdyZWF0ZXJFcU5vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9u
Tm9kZSogZTIpIEtKU19GQVNUX0NBTEwKLSAgICAgIDogQmluYXJ5T3BlcmF0b3JOb2RlKEJvb2xl
YW5UeXBlLCBlMSwgZTIpIHt9Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogb3BlcmF0
b3JBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICI+PSI7IH0KLSAgICB2aXJ0dWFsIFByZWNlZGVu
Y2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9Ci0gIHByaXZh
dGU6Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNT
dGF0ZSopOwotICB9OworICAgIAorICAgIHR5cGVkZWYgVG9Cb29sZWFuTm9kZTxWYWx1ZVZhbHVl
VG9Cb29sZWFuTm9kZUJhc2U8TGVzc05vZGVTcGVjPiwgTGVzc05vZGVTcGVjLCBCaW5hcnlPcGVy
YXRvck5vZGU+IExlc3NOb2RlOworICAgIHR5cGVkZWYgVG9Cb29sZWFuTm9kZTxOdW1iZXJOdW1i
ZXJUb0Jvb2xlYW5Ob2RlQmFzZTxMZXNzTm9kZVNwZWM+LCBMZXNzTm9kZVNwZWMsIEJpbmFyeU9w
ZXJhdG9yTm9kZSA+IExlc3NOdW1iZXJzTm9kZTsKKyAgICB0eXBlZGVmIFRvQm9vbGVhbk5vZGU8
U3RyaW5nU3RyaW5nVG9Cb29sZWFuTm9kZUJhc2U8TGVzc05vZGVTcGVjPiwgTGVzc05vZGVTcGVj
LCBCaW5hcnlPcGVyYXRvck5vZGUgPiBMZXNzU3RyaW5nc05vZGU7CisgICAgdHlwZWRlZiBUb0Jv
b2xlYW5Ob2RlPFZhbHVlVmFsdWVUb0Jvb2xlYW5Ob2RlQmFzZTxMZXNzTm9kZVNwZWM+LCBMZXNz
Tm9kZVNwZWMsIEJpbmFyeU9wZXJhdG9yTm9kZSA+IExlc3NFcU5vZGU7CisgICAgdHlwZWRlZiBU
b0Jvb2xlYW5Ob2RlPE51bWJlck51bWJlclRvQm9vbGVhbk5vZGVCYXNlPExlc3NOb2RlU3BlYz4s
IExlc3NOb2RlU3BlYywgQmluYXJ5T3BlcmF0b3JOb2RlID4gTGVzc0VxTnVtYmVyc05vZGU7Cisg
ICAgdHlwZWRlZiBUb0Jvb2xlYW5Ob2RlPFN0cmluZ1N0cmluZ1RvQm9vbGVhbk5vZGVCYXNlPExl
c3NOb2RlU3BlYz4sIExlc3NOb2RlU3BlYywgQmluYXJ5T3BlcmF0b3JOb2RlID4gTGVzc0VxU3Ry
aW5nc05vZGU7CisgICAgdHlwZWRlZiBUb0Jvb2xlYW5Ob2RlPFZhbHVlVmFsdWVUb0Jvb2xlYW5O
b2RlQmFzZTxHcmVhdGVyTm9kZVNwZWM+LCBHcmVhdGVyTm9kZVNwZWMsIEJpbmFyeU9wZXJhdG9y
Tm9kZSA+IEdyZWF0ZXJOb2RlOworICAgIHR5cGVkZWYgVG9Cb29sZWFuTm9kZTxOdW1iZXJOdW1i
ZXJUb0Jvb2xlYW5Ob2RlQmFzZTxHcmVhdGVyTm9kZVNwZWM+LCBHcmVhdGVyTm9kZVNwZWMsIEJp
bmFyeU9wZXJhdG9yTm9kZSA+IEdyZWF0ZXJOdW1iZXJzTm9kZTsKKyAgICB0eXBlZGVmIFRvQm9v
bGVhbk5vZGU8U3RyaW5nU3RyaW5nVG9Cb29sZWFuTm9kZUJhc2U8R3JlYXRlck5vZGVTcGVjPiwg
R3JlYXRlck5vZGVTcGVjLCBCaW5hcnlPcGVyYXRvck5vZGUgPiBHcmVhdGVyU3RyaW5nc05vZGU7
CisgICAgdHlwZWRlZiBUb0Jvb2xlYW5Ob2RlPFZhbHVlVmFsdWVUb0Jvb2xlYW5Ob2RlQmFzZTxH
cmVhdGVyTm9kZVNwZWM+LCBHcmVhdGVyTm9kZVNwZWMsIEJpbmFyeU9wZXJhdG9yTm9kZSA+IEdy
ZWF0ZXJFcU5vZGU7CisgICAgdHlwZWRlZiBUb0Jvb2xlYW5Ob2RlPE51bWJlck51bWJlclRvQm9v
bGVhbk5vZGVCYXNlPEdyZWF0ZXJOb2RlU3BlYz4sIEdyZWF0ZXJOb2RlU3BlYywgQmluYXJ5T3Bl
cmF0b3JOb2RlID4gR3JlYXRlckVxTnVtYmVyc05vZGU7CisgICAgdHlwZWRlZiBUb0Jvb2xlYW5O
b2RlPFN0cmluZ1N0cmluZ1RvQm9vbGVhbk5vZGVCYXNlPEdyZWF0ZXJOb2RlU3BlYz4sIEdyZWF0
ZXJOb2RlU3BlYywgQmluYXJ5T3BlcmF0b3JOb2RlID4gR3JlYXRlckVxU3RyaW5nc05vZGU7CiAK
ICAgICBjbGFzcyBJbnN0YW5jZU9mTm9kZSA6IHB1YmxpYyBCaW5hcnlPcGVyYXRvck5vZGUgewog
ICBwdWJsaWM6Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>