<?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>20827</bug_id>
          
          <creation_ts>2008-09-13 02:40:43 -0700</creation_ts>
          <short_desc>the &apos;typeof&apos; operator is slow</short_desc>
          <delta_ts>2008-09-14 17:26:43 -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>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>
          
          <blocked>20813</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron Zwarich (cpst)">zwarich</reporter>
          <assigned_to name="Cameron Zwarich (cpst)">zwarich</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>91027</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-13 02:40:43 -0700</bug_when>
    <thetext>The &apos;typeof&apos; operator now accounts for about 4.7% of the Shark profile of the V8 Earley-Boyer benchmark. We should look at optimizing it, probably taking advantage of StructureIDs. A lot of the examples in Earley-Boyer are of the form

typeof &lt;expression&gt; == &lt;string&gt;

We can optimize these using a peephole optimization in CodeGenerator and some new opcodes. I&apos;ll assign this to myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91103</commentid>
    <comment_count>1</comment_count>
      <attachid>23407</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-14 01:26:55 -0700</bug_when>
    <thetext>Created attachment 23407
Proposed patch

This patch is a 6% speedup on Earley-Boyer, but it unfortunately triggers the Richards compilation-related badness on my machine. I will try again soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91148</commentid>
    <comment_count>2</comment_count>
      <attachid>23423</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-14 16:24:30 -0700</bug_when>
    <thetext>Created attachment 23423
Proposed patch with ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91149</commentid>
    <comment_count>3</comment_count>
      <attachid>23423</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-14 16:25:06 -0700</bug_when>
    <thetext>Comment on attachment 23423
Proposed patch with ChangeLog

Oops, I posted the wrong typeof patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91150</commentid>
    <comment_count>4</comment_count>
      <attachid>23424</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-14 16:26:06 -0700</bug_when>
    <thetext>Created attachment 23424
Proposed patch with ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91154</commentid>
    <comment_count>5</comment_count>
      <attachid>23424</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-14 16:58:09 -0700</bug_when>
    <thetext>Comment on attachment 23424
Proposed patch with ChangeLog

r=me subject to comments from IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91160</commentid>
    <comment_count>6</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-14 17:26:43 -0700</bug_when>
    <thetext>Landed with requested changes in r36412.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23407</attachid>
            <date>2008-09-14 01:26:55 -0700</date>
            <delta_ts>2008-09-14 16:26:06 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>typeofconstant.diff</filename>
            <type>text/plain</type>
            <size>15599</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL0NUSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ1RJLmNwcAkocmV2aXNpb24gMzYz
OTYpCisrKyBWTS9DVEkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzQsNiArMzc0LDE1IEBAIENU
STo6Q1RJKE1hY2hpbmUqIG1hY2hpbmUsIEV4ZWNTdGF0ZSogZXgKICAgICAgICAgYnJlYWs7IFwK
ICAgICB9CiAKKyNkZWZpbmUgQ1RJX0NPTVBJTEVfVU5BUllfT1AobmFtZSkgXAorICAgIGNhc2Ug
bmFtZTogeyBcCisgICAgICAgIGVtaXRHZXRQdXRBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZCwgMCwgWDg2OjplY3gpOyBcCisgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV8j
I25hbWUpOyBcCisgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCk7IFwKKyAgICAgICAgaSArPSAzOyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorCiAj
aWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiBPcGNvZGVJRCB3aGF0ID0gKE9wY29kZUlEKS0xOwog
I2VuZGlmCkBAIC0xMTI5LDEzICsxMTM4LDEzIEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKICAgICAgICAgICAgIGkgKz0gMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfdHlwZW9mOiB7Ci0gICAgICAgICAgICBlbWl0R2V0UHV0QXJn
KGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAg
IGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF90eXBlb2YpOwotICAgICAgICAgICAgZW1pdFB1
dFJlc3VsdChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0g
MzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIENUSV9DT01QSUxFX1VO
QVJZX09QKG9wX3R5cGVvZikKKyAgICAgICAgQ1RJX0NPTVBJTEVfVU5BUllfT1Aob3BfaXNfdW5k
ZWZpbmVkKQorICAgICAgICBDVElfQ09NUElMRV9VTkFSWV9PUChvcF9pc19ib29sZWFuKQorICAg
ICAgICBDVElfQ09NUElMRV9VTkFSWV9PUChvcF9pc19udW1iZXIpCisgICAgICAgIENUSV9DT01Q
SUxFX1VOQVJZX09QKG9wX2lzX3N0cmluZykKKyAgICAgICAgQ1RJX0NPTVBJTEVfVU5BUllfT1Ao
b3BfaXNfb2JqZWN0KQorICAgICAgICBDVElfQ09NUElMRV9VTkFSWV9PUChvcF9pc19mdW5jdGlv
bikKICAgICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09QKG9wX3N0cmljdGVxKQogICAgICAgICBD
VElfQ09NUElMRV9CSU5BUllfT1Aob3BfbnN0cmljdGVxKQogICAgICAgICBjYXNlIG9wX3RvX2pz
bnVtYmVyOiB7CkluZGV4OiBWTS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVC
bG9jay5jcHAJKHJldmlzaW9uIDM2Mzk2KQorKysgVk0vQ29kZUJsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDkxLDYgKzQ5MSwzMCBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUq
IGV4ZWMsIGNvCiAgICAgICAgICAgICBwcmludFVuYXJ5T3AobG9jYXRpb24sIGl0LCAidHlwZW9m
Iik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2lzX3Vu
ZGVmaW5lZDogeworICAgICAgICAgICAgcHJpbnRVbmFyeU9wKGxvY2F0aW9uLCBpdCwgImlzX3Vu
ZGVmaW5lZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9pc19ib29sZWFuOiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3AobG9jYXRpb24sIGl0LCAi
aXNfYm9vbGVhbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBvcF9pc19udW1iZXI6IHsKKyAgICAgICAgICAgIHByaW50VW5hcnlPcChsb2NhdGlvbiwgaXQs
ICJpc19udW1iZXIiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfaXNfc3RyaW5nOiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3AobG9jYXRpb24sIGl0
LCAiaXNfc3RyaW5nIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX2lzX29iamVjdDogeworICAgICAgICAgICAgcHJpbnRVbmFyeU9wKGxvY2F0aW9uLCBp
dCwgImlzX29iamVjdCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9pc19mdW5jdGlvbjogeworICAgICAgICAgICAgcHJpbnRVbmFyeU9wKGxvY2F0aW9u
LCBpdCwgImlzX2Z1bmN0aW9uIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg
ICAgICBjYXNlIG9wX2luOiB7CiAgICAgICAgICAgICBwcmludEJpbmFyeU9wKGxvY2F0aW9uLCBp
dCwgImluIik7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFZNL0NvZGVHZW5lcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFZNL0NvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAzNjM5NikKKysr
IFZNL0NvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDMsNiArNjQzLDcxIEBA
IFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRCaW5hcnlPcCgKICAgICByZXR1cm4gZHN0
OwogfQogCitSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcChPcGNvZGVJ
RCBvcGNvZGUsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCog
c3JjMikKK3sKKyAgICBpZiAobV9sYXN0T3Bjb2RlSUQgPT0gb3BfdHlwZW9mKSB7CisgICAgICAg
IGludCBkc3RJbmRleDsKKyAgICAgICAgaW50IHNyY0luZGV4OworCisgICAgICAgIHJldHJpZXZl
TGFzdFVuYXJ5T3AoZHN0SW5kZXgsIHNyY0luZGV4KTsKKworICAgICAgICBpZiAoc3JjMS0+aW5k
ZXgoKSA9PSBkc3RJbmRleAorICAgICAgICAgICAgJiYgc3JjMS0+aXNUZW1wb3JhcnkoKQorICAg
ICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNyYzItPmluZGV4KCkpIDwgbV9jb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzLnNpemUoKQorICAgICAgICAgICAgJiYgbV9jb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXJzW3NyYzItPmluZGV4KCldLmpzVmFsdWUoZ2xvYmFsRXhlYygp
KSkgeworICAgICAgICAgICAgY29uc3QgVVN0cmluZyYgdmFsdWUgPSBzdGF0aWNfY2FzdDxKU1N0
cmluZyo+KG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyc1tzcmMyLT5pbmRleCgpXS5qc1Zh
bHVlKGdsb2JhbEV4ZWMoKSkpLT52YWx1ZSgpOworICAgICAgICAgICAgaWYgKHZhbHVlID09ICJ1
bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgcmV3aW5kVW5hcnlPcCgpOworICAgICAgICAg
ICAgICAgIGVtaXRPcGNvZGUob3BfaXNfdW5kZWZpbmVkKTsKKyAgICAgICAgICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoc3JjSW5kZXgpOworICAgICAgICAgICAgICAgIHJldHVybiBkc3Q7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gImJvb2xlYW4iKSB7CisgICAg
ICAgICAgICAgICAgcmV3aW5kVW5hcnlPcCgpOworICAgICAgICAgICAgICAgIGVtaXRPcGNvZGUo
b3BfaXNfYm9vbGVhbik7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRz
dC0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyY0lu
ZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZHN0OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHZhbHVlID09ICJudW1iZXIiKSB7CisgICAgICAgICAgICAgICAgcmV3aW5kVW5h
cnlPcCgpOworICAgICAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfaXNfbnVtYmVyKTsKKyAgICAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICAgICAg
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjSW5kZXgpOworICAgICAgICAgICAgICAg
IHJldHVybiBkc3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gInN0
cmluZyIpIHsKKyAgICAgICAgICAgICAgICByZXdpbmRVbmFyeU9wKCk7CisgICAgICAgICAgICAg
ICAgZW1pdE9wY29kZShvcF9pc19zdHJpbmcpOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChzcmNJbmRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRzdDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAib2JqZWN0IikgeworICAgICAgICAgICAg
ICAgIHJld2luZFVuYXJ5T3AoKTsKKyAgICAgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2lzX29i
amVjdCk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgo
KSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyY0luZGV4KTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZHN0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHZhbHVlID09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgICAgICByZXdpbmRVbmFyeU9wKCk7
CisgICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF9pc19mdW5jdGlvbik7CisgICAgICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyY0luZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZHN0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZW1pdE9wY29k
ZShvcGNvZGUpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMxLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoc3JjMi0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKwogUmVnaXN0ZXJJ
RCogQ29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGIpCiB7CiAg
ICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwganNCb29sZWFuKGIpKTsKSW5kZXg6IFZNL0NvZGVHZW5l
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDM2Mzk2
KQorKysgVk0vQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNiArMjM0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFVuYXJ5T3AoT3Bj
b2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdEJpbmFyeU9wKE9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0RXF1YWxp
dHlPcChPcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3Rl
cklEKiBzcmMyKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFVuYXJ5Tm9Ec3RPcChPcGNvZGVJ
RCwgUmVnaXN0ZXJJRCogc3JjKTsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3T2JqZWN0
KFJlZ2lzdGVySUQqIGRzdCk7CkluZGV4OiBWTS9NYWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBW
TS9NYWNoaW5lLmNwcAkocmV2aXNpb24gMzYzOTYpCisrKyBWTS9NYWNoaW5lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQ3LDYgKzI0NywzNCBAQCBzdGF0aWMgSlNWYWx1ZSoganNUeXBlU3RyaW5n
Rm9yVmFsdWUoRXhlCiAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAib2JqZWN0
Iik7CiB9CiAKK3N0YXRpYyBib29sIGpzSXNPYmplY3RUeXBlKEpTVmFsdWUqIHYpCit7CisgICAg
aWYgKEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSkKKyAgICAgICAgcmV0dXJuIHYtPmlzTnVs
bCgpOworCisgICAgSlNUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPih2KS0+c3RydWN0
dXJlSUQoKS0+dHlwZSgpOworICAgIGlmICh0eXBlID09IE51bWJlclR5cGUgfHwgdHlwZSA9PSBT
dHJpbmdUeXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHR5cGUgPT0gT2JqZWN0
VHlwZSkgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KS0+bWFzcXVlcmFk
ZUFzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIENhbGxE
YXRhIGNhbGxEYXRhOworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KS0+Z2V0
Q2FsbERhdGEoY2FsbERhdGEpICE9IENhbGxUeXBlTm9uZSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGpzSXNGdW5j
dGlvblR5cGUoSlNWYWx1ZSogdikKK3sKKyAgICBpZiAodi0+aXNPYmplY3QoKSkgeworICAgICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4o
diktPmdldENhbGxEYXRhKGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5vbmUpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgYm9vbCBO
RVZFUl9JTkxJTkUgcmVzb2x2ZShFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiB2UEMsIFJl
Z2lzdGVyKiByLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKIHsKICAgICBpbnQgZHN0ID0gKHZQQyArIDEp
LT51Lm9wZXJhbmQ7CkBAIC0yMDI2LDYgKzIwNTQsOTEgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJp
dmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7
CiAgICAgfQorICAgIEJFR0lOX09QQ09ERShvcF9pc191bmRlZmluZWQpIHsKKyAgICAgICAgLyog
aXNfdW5kZWZpbmVkIGRzdChyKSBzcmMocikKKworICAgICAgICAgICBEZXRlcm1pbmVzIHdoZXRo
ZXIgdGhlIHR5cGUgc3RyaW5nIGZvciBzcmMgYWNjb3JkaW5nIHRvCisgICAgICAgICAgIHRoZSBF
Q01BU2NyaXB0IHJ1bGVzIGlzICJ1bmRlZmluZWQiLCBhbmQgcHV0cyB0aGUgcmVzdWx0CisgICAg
ICAgICAgIGluIHJlZ2lzdGVyIGRzdC4KKyAgICAgICAgKi8KKyAgICAgICAgaW50IGRzdCA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAgaW50IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
KyAgICAgICAgSlNWYWx1ZSogdiA9IHJbc3JjXS5qc1ZhbHVlKGV4ZWMpOworICAgICAgICByW2Rz
dF0gPSBqc0Jvb2xlYW4odi0+aXNVbmRlZmluZWQoKSB8fCAodi0+aXNPYmplY3QoKSAmJiBzdGF0
aWNfY2FzdDxKU09iamVjdCo+KHYpLT5tYXNxdWVyYWRlQXNVbmRlZmluZWQoKSkpOworCisgICAg
ICAgICsrdlBDOworICAgICAgICBORVhUX09QQ09ERTsKKyAgICB9CisgICAgQkVHSU5fT1BDT0RF
KG9wX2lzX2Jvb2xlYW4pIHsKKyAgICAgICAgLyogaXNfYm9vbGVhbiBkc3Qocikgc3JjKHIpCisK
KyAgICAgICAgICAgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0eXBlIHN0cmluZyBmb3Igc3JjIGFj
Y29yZGluZyB0bworICAgICAgICAgICB0aGUgRUNNQVNjcmlwdCBydWxlcyBpcyAiYm9vbGVhbiIs
IGFuZCBwdXRzIHRoZSByZXN1bHQKKyAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0LgorICAgICAg
ICAqLworICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOworICAgICAgICBpbnQg
c3JjID0gKCsrdlBDKS0+dS5vcGVyYW5kOworICAgICAgICByW2RzdF0gPSBqc0Jvb2xlYW4ocltz
cmNdLmpzVmFsdWUoZXhlYyktPmlzQm9vbGVhbigpKTsKKworICAgICAgICArK3ZQQzsKKyAgICAg
ICAgTkVYVF9PUENPREU7CisgICAgfQorICAgIEJFR0lOX09QQ09ERShvcF9pc19udW1iZXIpIHsK
KyAgICAgICAgLyogaXNfbnVtYmVyIGRzdChyKSBzcmMocikKKworICAgICAgICAgICBEZXRlcm1p
bmVzIHdoZXRoZXIgdGhlIHR5cGUgc3RyaW5nIGZvciBzcmMgYWNjb3JkaW5nIHRvCisgICAgICAg
ICAgIHRoZSBFQ01BU2NyaXB0IHJ1bGVzIGlzICJudW1iZXIiLCBhbmQgcHV0cyB0aGUgcmVzdWx0
CisgICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4KKyAgICAgICAgKi8KKyAgICAgICAgaW50IGRz
dCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAgaW50IHNyYyA9ICgrK3ZQQyktPnUub3Bl
cmFuZDsKKyAgICAgICAgcltkc3RdID0ganNCb29sZWFuKHJbc3JjXS5qc1ZhbHVlKGV4ZWMpLT5p
c051bWJlcigpKTsKKworICAgICAgICArK3ZQQzsKKyAgICAgICAgTkVYVF9PUENPREU7CisgICAg
fQorICAgIEJFR0lOX09QQ09ERShvcF9pc19zdHJpbmcpIHsKKyAgICAgICAgLyogaXNfc3RyaW5n
IGRzdChyKSBzcmMocikKKworICAgICAgICAgICBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHR5cGUg
c3RyaW5nIGZvciBzcmMgYWNjb3JkaW5nIHRvCisgICAgICAgICAgIHRoZSBFQ01BU2NyaXB0IHJ1
bGVzIGlzICJzdHJpbmciLCBhbmQgcHV0cyB0aGUgcmVzdWx0CisgICAgICAgICAgIGluIHJlZ2lz
dGVyIGRzdC4KKyAgICAgICAgKi8KKyAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFu
ZDsKKyAgICAgICAgaW50IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAgcltkc3Rd
ID0ganNCb29sZWFuKHJbc3JjXS5qc1ZhbHVlKGV4ZWMpLT5pc1N0cmluZygpKTsKKworICAgICAg
ICArK3ZQQzsKKyAgICAgICAgTkVYVF9PUENPREU7CisgICAgfQorICAgIEJFR0lOX09QQ09ERShv
cF9pc19vYmplY3QpIHsKKyAgICAgICAgLyogaXNfb2JqZWN0IGRzdChyKSBzcmMocikKKworICAg
ICAgICAgICBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHR5cGUgc3RyaW5nIGZvciBzcmMgYWNjb3Jk
aW5nIHRvCisgICAgICAgICAgIHRoZSBFQ01BU2NyaXB0IHJ1bGVzIGlzICJvYmplY3QiLCBhbmQg
cHV0cyB0aGUgcmVzdWx0CisgICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4KKyAgICAgICAgKi8K
KyAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAgaW50IHNyYyA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAgcltkc3RdID0ganNCb29sZWFuKGpzSXNPYmpl
Y3RUeXBlKHJbc3JjXS5qc1ZhbHVlKGV4ZWMpKSk7CisKKyAgICAgICAgKyt2UEM7CisgICAgICAg
IE5FWFRfT1BDT0RFOworICAgIH0KKyAgICBCRUdJTl9PUENPREUob3BfaXNfZnVuY3Rpb24pIHsK
KyAgICAgICAgLyogaXNfZnVuY3Rpb24gZHN0KHIpIHNyYyhyKQorCisgICAgICAgICAgIERldGVy
bWluZXMgd2hldGhlciB0aGUgdHlwZSBzdHJpbmcgZm9yIHNyYyBhY2NvcmRpbmcgdG8KKyAgICAg
ICAgICAgdGhlIEVDTUFTY3JpcHQgcnVsZXMgaXMgImZ1bmN0aW9uIiwgYW5kIHB1dHMgdGhlIHJl
c3VsdAorICAgICAgICAgICBpbiByZWdpc3RlciBkc3QuCisgICAgICAgICovCisgICAgICAgIGlu
dCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIGludCBzcmMgPSAoKyt2UEMpLT51
Lm9wZXJhbmQ7CisgICAgICAgIHJbZHN0XSA9IGpzQm9vbGVhbihqc0lzRnVuY3Rpb25UeXBlKHJb
c3JjXS5qc1ZhbHVlKGV4ZWMpKSk7CisKKyAgICAgICAgKyt2UEM7CisgICAgICAgIE5FWFRfT1BD
T0RFOworICAgIH0KICAgICBCRUdJTl9PUENPREUob3BfaW4pIHsKICAgICAgICAgLyogaW4gZHN0
KHIpIHByb3BlcnR5KHIpIGJhc2UocikKIApAQCAtNDg1OSw2ICs0OTcyLDM3IEBAIEpTVmFsdWUq
IE1hY2hpbmU6OmN0aV9vcF90eXBlb2YoQ1RJX0FSR1MKICAgICByZXR1cm4ganNUeXBlU3RyaW5n
Rm9yVmFsdWUoQVJHX2V4ZWMsIEFSR19zcmMxKTsKIH0KIAorSlNWYWx1ZSogTWFjaGluZTo6Y3Rp
X29wX2lzX3VuZGVmaW5lZChDVElfQVJHUykKK3sKKyAgICBKU1ZhbHVlKiB2ID0gQVJHX3NyYzE7
CisgICAgcmV0dXJuIGpzQm9vbGVhbih2LT5pc1VuZGVmaW5lZCgpIHx8ICh2LT5pc09iamVjdCgp
ICYmIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odiktPm1hc3F1ZXJhZGVBc1VuZGVmaW5lZCgpKSk7
Cit9CisKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9pc19ib29sZWFuKENUSV9BUkdTKQorewor
ICAgIHJldHVybiBqc0Jvb2xlYW4oQVJHX3NyYzEtPmlzQm9vbGVhbigpKTsKK30KKworSlNWYWx1
ZSogTWFjaGluZTo6Y3RpX29wX2lzX251bWJlcihDVElfQVJHUykKK3sKKyAgICByZXR1cm4ganNC
b29sZWFuKEFSR19zcmMxLT5pc051bWJlcigpKTsKK30KKworSlNWYWx1ZSogTWFjaGluZTo6Y3Rp
X29wX2lzX3N0cmluZyhDVElfQVJHUykKK3sKKyAgICByZXR1cm4ganNCb29sZWFuKEFSR19zcmMx
LT5pc1N0cmluZygpKTsKK30KKworSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2lzX29iamVjdChD
VElfQVJHUykKK3sKKyAgICByZXR1cm4ganNCb29sZWFuKGpzSXNPYmplY3RUeXBlKEFSR19zcmMx
KSk7Cit9CisKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9pc19mdW5jdGlvbihDVElfQVJHUykK
K3sKKyAgICByZXR1cm4ganNCb29sZWFuKGpzSXNGdW5jdGlvblR5cGUoQVJHX3NyYzEpKTsKK30K
KwogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3N0cmljdGVxKENUSV9BUkdTKQogewogICAgIEpT
VmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKSW5kZXg6IFZNL01hY2hpbmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBWTS9NYWNoaW5lLmgJKHJldmlzaW9uIDM2Mzk2KQorKysgVk0vTWFjaGluZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDEsNiArMjAxLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0
aWMgdm9pZCBTRlhfQ0FMTCBjdGlfb3BfcHVzaF9zY29wZShDVElfQVJHUyk7CiAgICAgICAgIHN0
YXRpYyB2b2lkIFNGWF9DQUxMIGN0aV9vcF9wb3Bfc2NvcGUoQ1RJX0FSR1MpOwogICAgICAgICBz
dGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX3R5cGVvZihDVElfQVJHUyk7CisgICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfaXNfdW5kZWZpbmVkKENUSV9BUkdTKTsK
KyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9pc19ib29sZWFuKENUSV9B
UkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9pc19udW1iZXIo
Q1RJX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX2lzX3N0
cmluZyhDVElfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3Bf
aXNfb2JqZWN0KENUSV9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0
aV9vcF9pc19mdW5jdGlvbihDVElfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhf
Q0FMTCBjdGlfb3Bfc3RyaWN0ZXEoQ1RJX0FSR1MpOwogICAgICAgICBzdGF0aWMgSlNWYWx1ZSog
U0ZYX0NBTEwgY3RpX29wX25zdHJpY3RlcShDVElfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBKU1Zh
bHVlKiBTRlhfQ0FMTCBjdGlfb3BfdG9fanNudW1iZXIoQ1RJX0FSR1MpOwpJbmRleDogVk0vT3Bj
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVk0vT3Bjb2RlLmgJKHJldmlzaW9uIDM2Mzk2KQorKysgVk0v
T3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDEyIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBcCiAgICAgICAgIG1hY3JvKG9wX2luc3RhbmNlb2YpIFwKICAgICAgICAgbWFj
cm8ob3BfdHlwZW9mKSBcCisgICAgICAgIG1hY3JvKG9wX2lzX3VuZGVmaW5lZCkgXAorICAgICAg
ICBtYWNybyhvcF9pc19ib29sZWFuKSBcCisgICAgICAgIG1hY3JvKG9wX2lzX251bWJlcikgXAor
ICAgICAgICBtYWNybyhvcF9pc19zdHJpbmcpIFwKKyAgICAgICAgbWFjcm8ob3BfaXNfb2JqZWN0
KSBcCisgICAgICAgIG1hY3JvKG9wX2lzX2Z1bmN0aW9uKSBcCiAgICAgICAgIG1hY3JvKG9wX2lu
KSBcCiAgICAgICAgIFwKICAgICAgICAgbWFjcm8ob3BfcmVzb2x2ZSkgXApJbmRleDoga2pzL25v
ZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBranMvbm9kZXMuY3BwCShyZXZpc2lvbiAzNjM5NikKKysr
IGtqcy9ub2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0OCwxMCArNzQ4LDEwIEBAIFJlZ2lz
dGVySUQqIFVuYXJ5T3BOb2RlOjplbWl0Q29kZShDb2RlR2UKIFJlZ2lzdGVySUQqIEJpbmFyeU9w
Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
CiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlID0gdGhpcy0+b3Bjb2RlKCk7Ci0gICAgaWYgKG9wY29k
ZSA9PSBvcF9lcSB8fCBvcGNvZGUgPT0gb3BfbmVxKSB7CisgICAgaWYgKG9wY29kZSA9PSBvcF9u
ZXEpIHsKICAgICAgICAgaWYgKG1fZXhwcjEtPmlzTnVsbCgpIHx8IG1fZXhwcjItPmlzTnVsbCgp
KSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKGRzdCwgbV9leHByMS0+aXNOdWxsKCkgPyBtX2V4cHIyLmdldCgpIDogbV9leHByMS5nZXQo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wY29kZSA9PSBv
cF9lcSA/IG9wX2VxX251bGwgOiBvcF9uZXFfbnVsbCwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRp
b24oZHN0LCBzcmMuZ2V0KCkpLCBzcmMuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0VW5hcnlPcChvcF9uZXFfbnVsbCwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0LCBzcmMuZ2V0KCkpLCBzcmMuZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC03NjAs
NiArNzYwLDI1IEBAIFJlZ2lzdGVySUQqIEJpbmFyeU9wTm9kZTo6ZW1pdENvZGUoQ29kZUcKICAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcChvcGNvZGUsIGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIpOwogfQogCitSZWdp
c3RlcklEKiBFcXVhbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQoreworICAgIGlmIChtX2V4cHIxLT5pc051bGwoKSB8fCBtX2V4cHIyLT5p
c051bGwoKSkgeworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjID0gZ2VuZXJhdG9yLmVt
aXROb2RlKGRzdCwgbV9leHByMS0+aXNOdWxsKCkgPyBtX2V4cHIyLmdldCgpIDogbV9leHByMS5n
ZXQoKSk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFVuYXJ5T3Aob3BfZXFfbnVsbCwg
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMuZ2V0KCkpLCBzcmMuZ2V0KCkpOwor
ICAgIH0KKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2Rl
Rm9yTGVmdEhhbmRTaWRlKG1fZXhwcjEuZ2V0KCksIG1fcmlnaHRIYXNBc3NpZ25tZW50cywgbV9l
eHByMi0+aXNQdXJlKGdlbmVyYXRvcikpOworICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobV9leHByMi5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RXF1
YWxpdHlPcChvcF9lcSwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgp
KSwgc3JjMS5nZXQoKSwgc3JjMik7Cit9CisKK1JlZ2lzdGVySUQqIFN0cmljdEVxdWFsTm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7Cisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFu
ZFNpZGUobV9leHByMS5nZXQoKSwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX2V4cHIyLT5pc1B1
cmUoZ2VuZXJhdG9yKSk7CisgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShtX2V4cHIyLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRFcXVhbGl0eU9wKG9w
X3N0cmljdGVxLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBz
cmMxLmdldCgpLCBzcmMyKTsKK30KKwogUmVnaXN0ZXJJRCogUmV2ZXJzZUJpbmFyeU9wTm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFu
ZFNpZGUobV9leHByMS5nZXQoKSwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX2V4cHIyLT5pc1B1
cmUoZ2VuZXJhdG9yKSk7CkluZGV4OiBranMvbm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvbm9k
ZXMuaAkocmV2aXNpb24gMzYzOTYpCisrKyBranMvbm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQ0OCw2ICsxNDQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQog
CisgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBPcGNvZGVJRCBv
cGNvZGUoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIG9wX2VxOyB9CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwog
ICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFBy
ZWNFcXVhbGl0eTsgfQpAQCAtMTQ3Miw2ICsxNDczLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCBPcGNvZGVJRCBvcGNvZGUoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIG9w
X3N0cmljdGVxOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNFcXVhbGl0eTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23423</attachid>
            <date>2008-09-14 16:24:30 -0700</date>
            <delta_ts>2008-09-14 16:25:06 -0700</delta_ts>
            <desc>Proposed patch with ChangeLog</desc>
            <filename>typeof.diff</filename>
            <type>text/plain</type>
            <size>1907</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL01hY2hpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL01hY2hpbmUuY3BwCShyZXZp
c2lvbiAzNjM5NikKKysrIFZNL01hY2hpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsMjQg
KzIyNywzOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUqIGpzQWRkKEV4ZWNTdGF0ZSogCiAKIHN0
YXRpYyBKU1ZhbHVlKiBqc1R5cGVTdHJpbmdGb3JWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUqIHYpCiB7Ci0gICAgaWYgKHYtPmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBqc05v
bnRyaXZpYWxTdHJpbmcoZXhlYywgInVuZGVmaW5lZCIpOwotICAgIGlmICh2LT5pc0Jvb2xlYW4o
KSkKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiYm9vbGVhbiIpOwot
ICAgIGlmICh2LT5pc051bWJlcigpKQorICAgIGlmIChKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUo
dikpIHsKKyAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjppc051bWJlcih2KSkKKyAgICAgICAgICAg
IHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIm51bWJlciIpOworCisgICAgICAgIGlm
IChKU0ltbWVkaWF0ZTo6aXNCb29sZWFuKHYpKQorICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJp
dmlhbFN0cmluZyhleGVjLCAiYm9vbGVhbiIpOworCisgICAgICAgIGlmICh2ID09IGpzTnVsbCgp
KQorICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAib2JqZWN0Iik7
CisKKyAgICAgICAgaWYgKHYgPT0ganNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBq
c05vbnRyaXZpYWxTdHJpbmcoZXhlYywgInVuZGVmaW5lZCIpOworICAgIH0KKworICAgIEpTVHlw
ZSB0eXBlID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4odiktPnN0cnVjdHVyZUlEKCktPnR5cGUoKTsK
KworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTnVtYmVyVHlwZToKICAgICAgICAgcmV0
dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAibnVtYmVyIik7Ci0gICAgaWYgKHYtPmlzU3Ry
aW5nKCkpCisgICAgICAgIAorICAgIGNhc2UgU3RyaW5nVHlwZToKICAgICAgICAgcmV0dXJuIGpz
Tm9udHJpdmlhbFN0cmluZyhleGVjLCAic3RyaW5nIik7Ci0gICAgaWYgKHYtPmlzT2JqZWN0KCkp
IHsKLSAgICAgICAgLy8gUmV0dXJuICJ1bmRlZmluZWQiIGZvciBvYmplY3RzIHRoYXQgc2hvdWxk
IGJlIHRyZWF0ZWQKLSAgICAgICAgLy8gYXMgbnVsbCB3aGVuIGRvaW5nIGNvbXBhcmlzb25zLgor
CisgICAgY2FzZSBPYmplY3RUeXBlOgogICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8SlNPYmplY3Qq
Pih2KS0+bWFzcXVlcmFkZUFzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICByZXR1cm4ganNOb250
cml2aWFsU3RyaW5nKGV4ZWMsICJ1bmRlZmluZWQiKTsKICAgICAgICAgQ2FsbERhdGEgY2FsbERh
dGE7CiAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpLT5nZXRDYWxsRGF0YShj
YWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lKQogICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCAiZnVuY3Rpb24iKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
anNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJvYmplY3QiKTsKICAgICB9Ci0gICAgcmV0dXJuIGpz
Tm9udHJpdmlhbFN0cmluZyhleGVjLCAib2JqZWN0Iik7CiB9CiAKIHN0YXRpYyBib29sIE5FVkVS
X0lOTElORSByZXNvbHZlKEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHZQQywgUmVnaXN0
ZXIqIHIsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23424</attachid>
            <date>2008-09-14 16:26:06 -0700</date>
            <delta_ts>2008-09-14 16:58:09 -0700</delta_ts>
            <desc>Proposed patch with ChangeLog</desc>
            <filename>typeofconstant.diff</filename>
            <type>text/plain</type>
            <size>17105</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM2NDA4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAKKzIwMDgtMDkt
MTQgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDIwODI3OiB0aGUgJ3R5
cGVvZicgb3BlcmF0b3IgaXMgc2xvdworICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwODI3PgorCisgICAgICAgIE9wdGltaXplIHRoZSAndHlwZW9mJyBv
cGVyYXRvciB3aGVuIGl0cyByZXN1bHQgaXMgY29tcGFyZWQgdG8gYSBjb25zdGFudAorICAgICAg
ICBzdHJpbmcuCisKKyAgICAgICAgVGhpcyBpcyBhIDUuNSUgc3BlZWR1cCBvbiB0aGUgVjggRWFy
bGV5LUJveWVyIHRlc3QuCisKKyAgICAgICAgKiBWTS9DVEkuY3BwOgorICAgICAgICAoSlNDOjpD
VEk6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAqIFZNL0NvZGVCbG9jay5jcHA6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAgICogVk0vQ29kZUdlbmVy
YXRvci5jcHA6CisgICAgICAgIChKU0M6OkNvZGVHZW5lcmF0b3I6OmVtaXRFcXVhbGl0eU9wKToK
KyAgICAgICAgKiBWTS9Db2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogVk0vTWFjaGluZS5jcHA6
CisgICAgICAgIChKU0M6OmpzSXNPYmplY3RUeXBlKToKKyAgICAgICAgKEpTQzo6anNJc0Z1bmN0
aW9uVHlwZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKToKKyAgICAg
ICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmU6OmN0aV9vcF9pc19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29w
X2lzX251bWJlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9pc19zdHJpbmcpOgor
ICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfaXNfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6
TWFjaGluZTo6Y3RpX29wX2lzX2Z1bmN0aW9uKToKKyAgICAgICAgKiBWTS9NYWNoaW5lLmg6Cisg
ICAgICAgICogVk0vT3Bjb2RlLmg6CisgICAgICAgICoga2pzL25vZGVzLmNwcDoKKyAgICAgICAg
KEpTQzo6QmluYXJ5T3BOb2RlOjplbWl0Q29kZSk6CisgICAgICAgIChKU0M6OkVxdWFsTm9kZTo6
ZW1pdENvZGUpOgorICAgICAgICAoSlNDOjpTdHJpY3RFcXVhbE5vZGU6OmVtaXRDb2RlKToKKyAg
ICAgICAgKiBranMvbm9kZXMuaDoKKwogMjAwOC0wOS0xNCAgQ2FtZXJvbiBad2FyaWNoICA8Y3d6
d2FyaWNoQHV3YXRlcmxvby5jYT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4K
SW5kZXg6IFZNL0NUSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ1RJLmNwcAkocmV2aXNpb24gMzY0
MDgpCisrKyBWTS9DVEkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzQsNiArMzc0LDE1IEBAIENU
STo6Q1RJKE1hY2hpbmUqIG1hY2hpbmUsIEV4ZWNTdGF0ZSogZXgKICAgICAgICAgYnJlYWs7IFwK
ICAgICB9CiAKKyNkZWZpbmUgQ1RJX0NPTVBJTEVfVU5BUllfT1AobmFtZSkgXAorICAgIGNhc2Ug
bmFtZTogeyBcCisgICAgICAgIGVtaXRHZXRQdXRBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZCwgMCwgWDg2OjplY3gpOyBcCisgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV8j
I25hbWUpOyBcCisgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCk7IFwKKyAgICAgICAgaSArPSAzOyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorCiAj
aWYgRU5BQkxFKFNBTVBMSU5HX1RPT0wpCiBPcGNvZGVJRCBjdXJyZW50T3Bjb2RlSUQgPSBzdGF0
aWNfY2FzdDxPcGNvZGVJRD4oLTEpOwogI2VuZGlmCkBAIC0xMTUwLDEzICsxMTU5LDEzIEBAIHZv
aWQgQ1RJOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIGkgKz0gMTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdHlwZW9mOiB7Ci0g
ICAgICAgICAgICBlbWl0R2V0UHV0QXJnKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAs
IFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF90eXBl
b2YpOwotICAgICAgICAgICAgZW1pdFB1dFJlc3VsdChpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CisgICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX3R5cGVvZikKKyAgICAgICAgQ1RJX0NP
TVBJTEVfVU5BUllfT1Aob3BfaXNfdW5kZWZpbmVkKQorICAgICAgICBDVElfQ09NUElMRV9VTkFS
WV9PUChvcF9pc19ib29sZWFuKQorICAgICAgICBDVElfQ09NUElMRV9VTkFSWV9PUChvcF9pc19u
dW1iZXIpCisgICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX2lzX3N0cmluZykKKyAgICAg
ICAgQ1RJX0NPTVBJTEVfVU5BUllfT1Aob3BfaXNfb2JqZWN0KQorICAgICAgICBDVElfQ09NUElM
RV9VTkFSWV9PUChvcF9pc19mdW5jdGlvbikKICAgICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09Q
KG9wX3N0cmljdGVxKQogICAgICAgICBDVElfQ09NUElMRV9CSU5BUllfT1Aob3BfbnN0cmljdGVx
KQogICAgICAgICBjYXNlIG9wX3RvX2pzbnVtYmVyOiB7CkluZGV4OiBWTS9Db2RlQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFZNL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDM2NDA4KQorKysgVk0v
Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDYgKzQ5NSwzMCBAQCB2b2lkIENv
ZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgICAgICAgICAgICBwcmludFVuYXJ5
T3AobG9jYXRpb24sIGl0LCAidHlwZW9mIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZDogeworICAgICAgICAgICAgcHJpbnRVbmFy
eU9wKGxvY2F0aW9uLCBpdCwgImlzX3VuZGVmaW5lZCIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pc19ib29sZWFuOiB7CisgICAgICAgICAgICBwcmlu
dFVuYXJ5T3AobG9jYXRpb24sIGl0LCAiaXNfYm9vbGVhbiIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pc19udW1iZXI6IHsKKyAgICAgICAgICAgIHBy
aW50VW5hcnlPcChsb2NhdGlvbiwgaXQsICJpc19udW1iZXIiKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfaXNfc3RyaW5nOiB7CisgICAgICAgICAgICBw
cmludFVuYXJ5T3AobG9jYXRpb24sIGl0LCAiaXNfc3RyaW5nIik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2lzX29iamVjdDogeworICAgICAgICAgICAg
cHJpbnRVbmFyeU9wKGxvY2F0aW9uLCBpdCwgImlzX29iamVjdCIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pc19mdW5jdGlvbjogeworICAgICAgICAg
ICAgcHJpbnRVbmFyeU9wKGxvY2F0aW9uLCBpdCwgImlzX2Z1bmN0aW9uIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2luOiB7CiAgICAgICAgICAgICBw
cmludEJpbmFyeU9wKGxvY2F0aW9uLCBpdCwgImluIik7CiAgICAgICAgICAgICBicmVhazsKSW5k
ZXg6IFZNL0NvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVHZW5lcmF0b3Iu
Y3BwCShyZXZpc2lvbiAzNjQwOCkKKysrIFZNL0NvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NTgsNiArNjU4LDcxIEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRC
aW5hcnlPcCgKICAgICByZXR1cm4gZHN0OwogfQogCitSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9y
OjplbWl0RXF1YWxpdHlPcChPcGNvZGVJRCBvcGNvZGUsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCogc3JjMikKK3sKKyAgICBpZiAobV9sYXN0T3Bjb2RlSUQg
PT0gb3BfdHlwZW9mKSB7CisgICAgICAgIGludCBkc3RJbmRleDsKKyAgICAgICAgaW50IHNyY0lu
ZGV4OworCisgICAgICAgIHJldHJpZXZlTGFzdFVuYXJ5T3AoZHN0SW5kZXgsIHNyY0luZGV4KTsK
KworICAgICAgICBpZiAoc3JjMS0+aW5kZXgoKSA9PSBkc3RJbmRleAorICAgICAgICAgICAgJiYg
c3JjMS0+aXNUZW1wb3JhcnkoKQorICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHNyYzItPmluZGV4KCkpIDwgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzLnNpemUoKQor
ICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzW3NyYzItPmluZGV4
KCldLmpzVmFsdWUoZ2xvYmFsRXhlYygpKSkgeworICAgICAgICAgICAgY29uc3QgVVN0cmluZyYg
dmFsdWUgPSBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyc1tzcmMyLT5pbmRleCgpXS5qc1ZhbHVlKGdsb2JhbEV4ZWMoKSkpLT52YWx1ZSgpOworICAg
ICAgICAgICAgaWYgKHZhbHVlID09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgcmV3
aW5kVW5hcnlPcCgpOworICAgICAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfaXNfdW5kZWZpbmVk
KTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsK
KyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjSW5kZXgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBkc3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFs
dWUgPT0gImJvb2xlYW4iKSB7CisgICAgICAgICAgICAgICAgcmV3aW5kVW5hcnlPcCgpOworICAg
ICAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfaXNfYm9vbGVhbik7CisgICAgICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHNyY0luZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZHN0
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbHVlID09ICJudW1iZXIiKSB7Cisg
ICAgICAgICAgICAgICAgcmV3aW5kVW5hcnlPcCgpOworICAgICAgICAgICAgICAgIGVtaXRPcGNv
ZGUob3BfaXNfbnVtYmVyKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
ZHN0LT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3Jj
SW5kZXgpOworICAgICAgICAgICAgICAgIHJldHVybiBkc3Q7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAodmFsdWUgPT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICByZXdpbmRV
bmFyeU9wKCk7CisgICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF9pc19zdHJpbmcpOworICAg
ICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgICAg
ICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmNJbmRleCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGRzdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAi
b2JqZWN0IikgeworICAgICAgICAgICAgICAgIHJld2luZFVuYXJ5T3AoKTsKKyAgICAgICAgICAg
ICAgICBlbWl0T3Bjb2RlKG9wX2lzX29iamVjdCk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHNyY0luZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZHN0OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbHVlID09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAg
ICAgICAgICByZXdpbmRVbmFyeU9wKCk7CisgICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF9p
c19mdW5jdGlvbik7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+
aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyY0luZGV4
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZHN0OworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgZW1pdE9wY29kZShvcGNvZGUpOworICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMxLT5pbmRl
eCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjMi0+aW5kZXgoKSk7CisgICAgcmV0
dXJuIGRzdDsKK30KKwogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0
ZXJJRCogZHN0LCBib29sIGIpCiB7CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwganNCb29sZWFu
KGIpKTsKSW5kZXg6IFZNL0NvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2Vu
ZXJhdG9yLmgJKHJldmlzaW9uIDM2NDA3KQorKysgVk0vQ29kZUdlbmVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzQsNiArMjM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdFVuYXJ5T3AoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogc3JjKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJpbmFyeU9wKE9wY29kZUlELCBSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIpOworICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0RXF1YWxpdHlPcChPcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBzcmMyKTsKICAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdFVuYXJ5Tm9Ec3RPcChPcGNvZGVJRCwgUmVnaXN0ZXJJRCogc3JjKTsKIAogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0TmV3T2JqZWN0KFJlZ2lzdGVySUQqIGRzdCk7CkluZGV4OiBWTS9NYWNo
aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9NYWNoaW5lLmNwcAkocmV2aXNpb24gMzY0MDgpCisr
KyBWTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ3LDYgKzI0NywzNCBAQCBzdGF0
aWMgSlNWYWx1ZSoganNUeXBlU3RyaW5nRm9yVmFsdWUoRXhlCiAgICAgcmV0dXJuIGpzTm9udHJp
dmlhbFN0cmluZyhleGVjLCAib2JqZWN0Iik7CiB9CiAKK3N0YXRpYyBib29sIGpzSXNPYmplY3RU
eXBlKEpTVmFsdWUqIHYpCit7CisgICAgaWYgKEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSkK
KyAgICAgICAgcmV0dXJuIHYtPmlzTnVsbCgpOworCisgICAgSlNUeXBlIHR5cGUgPSBzdGF0aWNf
Y2FzdDxKU0NlbGwqPih2KS0+c3RydWN0dXJlSUQoKS0+dHlwZSgpOworICAgIGlmICh0eXBlID09
IE51bWJlclR5cGUgfHwgdHlwZSA9PSBTdHJpbmdUeXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKHR5cGUgPT0gT2JqZWN0VHlwZSkgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
SlNPYmplY3QqPih2KS0+bWFzcXVlcmFkZUFzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8SlNPYmplY3QqPih2KS0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpICE9IENhbGxUeXBlTm9u
ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBib29sIGpzSXNGdW5jdGlvblR5cGUoSlNWYWx1ZSogdikKK3sKKyAgICBpZiAo
di0+aXNPYmplY3QoKSkgeworICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICAgICAgaWYg
KHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odiktPmdldENhbGxEYXRhKGNhbGxEYXRhKSAhPSBDYWxs
VHlwZU5vbmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCiBzdGF0aWMgYm9vbCBORVZFUl9JTkxJTkUgcmVzb2x2ZShFeGVjU3RhdGUqIGV4
ZWMsIEluc3RydWN0aW9uKiB2UEMsIFJlZ2lzdGVyKiByLCBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKIHsK
ICAgICBpbnQgZHN0ID0gKHZQQyArIDEpLT51Lm9wZXJhbmQ7CkBAIC0yMDQ1LDYgKzIwNzMsOTEg
QEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICArK3ZQ
QzsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQorICAgIEJFR0lOX09QQ09ERShvcF9pc191
bmRlZmluZWQpIHsKKyAgICAgICAgLyogaXNfdW5kZWZpbmVkIGRzdChyKSBzcmMocikKKworICAg
ICAgICAgICBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHR5cGUgc3RyaW5nIGZvciBzcmMgYWNjb3Jk
aW5nIHRvCisgICAgICAgICAgIHRoZSBFQ01BU2NyaXB0IHJ1bGVzIGlzICJ1bmRlZmluZWQiLCBh
bmQgcHV0cyB0aGUgcmVzdWx0CisgICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4KKyAgICAgICAg
Ki8KKyAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAgaW50IHNy
YyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAgSlNWYWx1ZSogdiA9IHJbc3JjXS5qc1Zh
bHVlKGV4ZWMpOworICAgICAgICByW2RzdF0gPSBqc0Jvb2xlYW4odi0+aXNVbmRlZmluZWQoKSB8
fCAodi0+aXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpLT5tYXNxdWVyYWRl
QXNVbmRlZmluZWQoKSkpOworCisgICAgICAgICsrdlBDOworICAgICAgICBORVhUX09QQ09ERTsK
KyAgICB9CisgICAgQkVHSU5fT1BDT0RFKG9wX2lzX2Jvb2xlYW4pIHsKKyAgICAgICAgLyogaXNf
Ym9vbGVhbiBkc3Qocikgc3JjKHIpCisKKyAgICAgICAgICAgRGV0ZXJtaW5lcyB3aGV0aGVyIHRo
ZSB0eXBlIHN0cmluZyBmb3Igc3JjIGFjY29yZGluZyB0bworICAgICAgICAgICB0aGUgRUNNQVNj
cmlwdCBydWxlcyBpcyAiYm9vbGVhbiIsIGFuZCBwdXRzIHRoZSByZXN1bHQKKyAgICAgICAgICAg
aW4gcmVnaXN0ZXIgZHN0LgorICAgICAgICAqLworICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+
dS5vcGVyYW5kOworICAgICAgICBpbnQgc3JjID0gKCsrdlBDKS0+dS5vcGVyYW5kOworICAgICAg
ICByW2RzdF0gPSBqc0Jvb2xlYW4ocltzcmNdLmpzVmFsdWUoZXhlYyktPmlzQm9vbGVhbigpKTsK
KworICAgICAgICArK3ZQQzsKKyAgICAgICAgTkVYVF9PUENPREU7CisgICAgfQorICAgIEJFR0lO
X09QQ09ERShvcF9pc19udW1iZXIpIHsKKyAgICAgICAgLyogaXNfbnVtYmVyIGRzdChyKSBzcmMo
cikKKworICAgICAgICAgICBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHR5cGUgc3RyaW5nIGZvciBz
cmMgYWNjb3JkaW5nIHRvCisgICAgICAgICAgIHRoZSBFQ01BU2NyaXB0IHJ1bGVzIGlzICJudW1i
ZXIiLCBhbmQgcHV0cyB0aGUgcmVzdWx0CisgICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4KKyAg
ICAgICAgKi8KKyAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAg
aW50IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAgcltkc3RdID0ganNCb29sZWFu
KHJbc3JjXS5qc1ZhbHVlKGV4ZWMpLT5pc051bWJlcigpKTsKKworICAgICAgICArK3ZQQzsKKyAg
ICAgICAgTkVYVF9PUENPREU7CisgICAgfQorICAgIEJFR0lOX09QQ09ERShvcF9pc19zdHJpbmcp
IHsKKyAgICAgICAgLyogaXNfc3RyaW5nIGRzdChyKSBzcmMocikKKworICAgICAgICAgICBEZXRl
cm1pbmVzIHdoZXRoZXIgdGhlIHR5cGUgc3RyaW5nIGZvciBzcmMgYWNjb3JkaW5nIHRvCisgICAg
ICAgICAgIHRoZSBFQ01BU2NyaXB0IHJ1bGVzIGlzICJzdHJpbmciLCBhbmQgcHV0cyB0aGUgcmVz
dWx0CisgICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4KKyAgICAgICAgKi8KKyAgICAgICAgaW50
IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAgaW50IHNyYyA9ICgrK3ZQQyktPnUu
b3BlcmFuZDsKKyAgICAgICAgcltkc3RdID0ganNCb29sZWFuKHJbc3JjXS5qc1ZhbHVlKGV4ZWMp
LT5pc1N0cmluZygpKTsKKworICAgICAgICArK3ZQQzsKKyAgICAgICAgTkVYVF9PUENPREU7Cisg
ICAgfQorICAgIEJFR0lOX09QQ09ERShvcF9pc19vYmplY3QpIHsKKyAgICAgICAgLyogaXNfb2Jq
ZWN0IGRzdChyKSBzcmMocikKKworICAgICAgICAgICBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHR5
cGUgc3RyaW5nIGZvciBzcmMgYWNjb3JkaW5nIHRvCisgICAgICAgICAgIHRoZSBFQ01BU2NyaXB0
IHJ1bGVzIGlzICJvYmplY3QiLCBhbmQgcHV0cyB0aGUgcmVzdWx0CisgICAgICAgICAgIGluIHJl
Z2lzdGVyIGRzdC4KKyAgICAgICAgKi8KKyAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3Bl
cmFuZDsKKyAgICAgICAgaW50IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAgcltk
c3RdID0ganNCb29sZWFuKGpzSXNPYmplY3RUeXBlKHJbc3JjXS5qc1ZhbHVlKGV4ZWMpKSk7CisK
KyAgICAgICAgKyt2UEM7CisgICAgICAgIE5FWFRfT1BDT0RFOworICAgIH0KKyAgICBCRUdJTl9P
UENPREUob3BfaXNfZnVuY3Rpb24pIHsKKyAgICAgICAgLyogaXNfZnVuY3Rpb24gZHN0KHIpIHNy
YyhyKQorCisgICAgICAgICAgIERldGVybWluZXMgd2hldGhlciB0aGUgdHlwZSBzdHJpbmcgZm9y
IHNyYyBhY2NvcmRpbmcgdG8KKyAgICAgICAgICAgdGhlIEVDTUFTY3JpcHQgcnVsZXMgaXMgImZ1
bmN0aW9uIiwgYW5kIHB1dHMgdGhlIHJlc3VsdAorICAgICAgICAgICBpbiByZWdpc3RlciBkc3Qu
CisgICAgICAgICovCisgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAg
ICAgIGludCBzcmMgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIHJbZHN0XSA9IGpzQm9v
bGVhbihqc0lzRnVuY3Rpb25UeXBlKHJbc3JjXS5qc1ZhbHVlKGV4ZWMpKSk7CisKKyAgICAgICAg
Kyt2UEM7CisgICAgICAgIE5FWFRfT1BDT0RFOworICAgIH0KICAgICBCRUdJTl9PUENPREUob3Bf
aW4pIHsKICAgICAgICAgLyogaW4gZHN0KHIpIHByb3BlcnR5KHIpIGJhc2UocikKIApAQCAtNDk4
NSw2ICs1MDk4LDM3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF90eXBlb2YoQ1RJX0FSR1MK
ICAgICByZXR1cm4ganNUeXBlU3RyaW5nRm9yVmFsdWUoQVJHX2V4ZWMsIEFSR19zcmMxKTsKIH0K
IAorSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2lzX3VuZGVmaW5lZChDVElfQVJHUykKK3sKKyAg
ICBKU1ZhbHVlKiB2ID0gQVJHX3NyYzE7CisgICAgcmV0dXJuIGpzQm9vbGVhbih2LT5pc1VuZGVm
aW5lZCgpIHx8ICh2LT5pc09iamVjdCgpICYmIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odiktPm1h
c3F1ZXJhZGVBc1VuZGVmaW5lZCgpKSk7Cit9CisKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9p
c19ib29sZWFuKENUSV9BUkdTKQoreworICAgIHJldHVybiBqc0Jvb2xlYW4oQVJHX3NyYzEtPmlz
Qm9vbGVhbigpKTsKK30KKworSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2lzX251bWJlcihDVElf
QVJHUykKK3sKKyAgICByZXR1cm4ganNCb29sZWFuKEFSR19zcmMxLT5pc051bWJlcigpKTsKK30K
KworSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2lzX3N0cmluZyhDVElfQVJHUykKK3sKKyAgICBy
ZXR1cm4ganNCb29sZWFuKEFSR19zcmMxLT5pc1N0cmluZygpKTsKK30KKworSlNWYWx1ZSogTWFj
aGluZTo6Y3RpX29wX2lzX29iamVjdChDVElfQVJHUykKK3sKKyAgICByZXR1cm4ganNCb29sZWFu
KGpzSXNPYmplY3RUeXBlKEFSR19zcmMxKSk7Cit9CisKK0pTVmFsdWUqIE1hY2hpbmU6OmN0aV9v
cF9pc19mdW5jdGlvbihDVElfQVJHUykKK3sKKyAgICByZXR1cm4ganNCb29sZWFuKGpzSXNGdW5j
dGlvblR5cGUoQVJHX3NyYzEpKTsKK30KKwogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX3N0cmlj
dGVxKENUSV9BUkdTKQogewogICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKSW5kZXg6IFZN
L01hY2hpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9NYWNoaW5lLmgJKHJldmlzaW9uIDM2NDA4KQor
KysgVk0vTWFjaGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNiArMjAyLDEyIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBjdGlfb3BfcHVzaF9zY29w
ZShDVElfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIFNGWF9DQUxMIGN0aV9vcF9wb3Bfc2Nv
cGUoQ1RJX0FSR1MpOwogICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX3R5
cGVvZihDVElfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3Bf
aXNfdW5kZWZpbmVkKENUSV9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxM
IGN0aV9vcF9pc19ib29sZWFuKENUSV9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNG
WF9DQUxMIGN0aV9vcF9pc19udW1iZXIoQ1RJX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1
ZSogU0ZYX0NBTEwgY3RpX29wX2lzX3N0cmluZyhDVElfQVJHUyk7CisgICAgICAgIHN0YXRpYyBK
U1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfaXNfb2JqZWN0KENUSV9BUkdTKTsKKyAgICAgICAgc3Rh
dGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9pc19mdW5jdGlvbihDVElfQVJHUyk7CiAgICAg
ICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3Bfc3RyaWN0ZXEoQ1RJX0FSR1MpOwog
ICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX25zdHJpY3RlcShDVElfQVJH
Uyk7CiAgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfdG9fanNudW1iZXIo
Q1RJX0FSR1MpOwpJbmRleDogVk0vT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vT3Bjb2RlLmgJ
KHJldmlzaW9uIDM2NDA4KQorKysgVk0vT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYg
Kzc4LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBcCiAgICAgICAgIG1hY3JvKG9wX2lu
c3RhbmNlb2YpIFwKICAgICAgICAgbWFjcm8ob3BfdHlwZW9mKSBcCisgICAgICAgIG1hY3JvKG9w
X2lzX3VuZGVmaW5lZCkgXAorICAgICAgICBtYWNybyhvcF9pc19ib29sZWFuKSBcCisgICAgICAg
IG1hY3JvKG9wX2lzX251bWJlcikgXAorICAgICAgICBtYWNybyhvcF9pc19zdHJpbmcpIFwKKyAg
ICAgICAgbWFjcm8ob3BfaXNfb2JqZWN0KSBcCisgICAgICAgIG1hY3JvKG9wX2lzX2Z1bmN0aW9u
KSBcCiAgICAgICAgIG1hY3JvKG9wX2luKSBcCiAgICAgICAgIFwKICAgICAgICAgbWFjcm8ob3Bf
cmVzb2x2ZSkgXApJbmRleDoga2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvbm9kZXMu
Y3BwCShyZXZpc2lvbiAzNjQwNykKKysrIGtqcy9ub2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc0OCwxMCArNzQ4LDEwIEBAIFJlZ2lzdGVySUQqIFVuYXJ5T3BOb2RlOjplbWl0Q29kZShDb2Rl
R2UKIFJlZ2lzdGVySUQqIEJpbmFyeU9wTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlID0gdGhpcy0+
b3Bjb2RlKCk7Ci0gICAgaWYgKG9wY29kZSA9PSBvcF9lcSB8fCBvcGNvZGUgPT0gb3BfbmVxKSB7
CisgICAgaWYgKG9wY29kZSA9PSBvcF9uZXEpIHsKICAgICAgICAgaWYgKG1fZXhwcjEtPmlzTnVs
bCgpIHx8IG1fZXhwcjItPmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gc3JjID0gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9leHByMS0+aXNOdWxsKCkgPyBtX2V4
cHIyLmdldCgpIDogbV9leHByMS5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXRVbmFyeU9wKG9wY29kZSA9PSBvcF9lcSA/IG9wX2VxX251bGwgOiBvcF9uZXFfbnVsbCwg
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMuZ2V0KCkpLCBzcmMuZ2V0KCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VW5hcnlPcChvcF9uZXFfbnVsbCwgZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMuZ2V0KCkpLCBzcmMuZ2V0KCkpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC03NjAsNiArNzYwLDI1IEBAIFJlZ2lzdGVySUQqIEJpbmFyeU9w
Tm9kZTo6ZW1pdENvZGUoQ29kZUcKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcChv
cGNvZGUsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEu
Z2V0KCksIHNyYzIpOwogfQogCitSZWdpc3RlcklEKiBFcXVhbE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIGlmIChtX2V4cHIx
LT5pc051bGwoKSB8fCBtX2V4cHIyLT5pc051bGwoKSkgeworICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gc3JjID0gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9leHByMS0+aXNOdWxsKCkgPyBt
X2V4cHIyLmdldCgpIDogbV9leHByMS5nZXQoKSk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdFVuYXJ5T3Aob3BfZXFfbnVsbCwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBz
cmMuZ2V0KCkpLCBzcmMuZ2V0KCkpOworICAgIH0KKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBz
cmMxID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fZXhwcjEuZ2V0KCksIG1f
cmlnaHRIYXNBc3NpZ25tZW50cywgbV9leHByMi0+aXNQdXJlKGdlbmVyYXRvcikpOworICAgIFJl
Z2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMi5nZXQoKSk7CisgICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0RXF1YWxpdHlPcChvcF9lcSwgZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7Cit9CisKK1JlZ2lz
dGVySUQqIFN0cmljdEVxdWFsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5l
cmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9leHByMS5nZXQoKSwgbV9yaWdodEhhc0Fz
c2lnbm1lbnRzLCBtX2V4cHIyLT5pc1B1cmUoZ2VuZXJhdG9yKSk7CisgICAgUmVnaXN0ZXJJRCog
c3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyLmdldCgpKTsKKyAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRFcXVhbGl0eU9wKG9wX3N0cmljdGVxLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyKTsKK30KKwogUmVnaXN0ZXJJ
RCogUmV2ZXJzZUJpbmFyeU9wTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5l
cmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9leHByMS5nZXQoKSwgbV9yaWdodEhhc0Fz
c2lnbm1lbnRzLCBtX2V4cHIyLT5pc1B1cmUoZ2VuZXJhdG9yKSk7CkluZGV4OiBranMvbm9kZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBranMvbm9kZXMuaAkocmV2aXNpb24gMzY0MDcpCisrKyBranMvbm9k
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0OCw2ICsxNDQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCBPcGNvZGVJRCBvcGNvZGUoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0
dXJuIG9wX2VxOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNFcXVhbGl0eTsgfQpAQCAtMTQ3Miw2ICsxNDczLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkg
SlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBPcGNvZGVJRCBvcGNvZGUoKSBjb25zdCBK
U0NfRkFTVF9DQUxMIHsgcmV0dXJuIG9wX3N0cmljdGVxOyB9CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2
aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNFcXVhbGl0
eTsgfQo=
</data>
<flag name="review"
          id="10452"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>