<?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>26907</bug_id>
          
          <creation_ts>2009-07-01 15:36:08 -0700</creation_ts>
          <short_desc>[Chromium] Upstream V8SVGPODTypeWrapper</short_desc>
          <delta_ts>2009-07-10 13:28:42 -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>WebCore Misc.</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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>129396</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-07-01 15:36:08 -0700</bug_when>
    <thetext>See summary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129398</commentid>
    <comment_count>1</comment_count>
      <attachid>32150</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-07-01 15:41:29 -0700</bug_when>
    <thetext>Created attachment 32150
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129403</commentid>
    <comment_count>2</comment_count>
      <attachid>32150</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-01 15:58:01 -0700</bug_when>
    <thetext>Comment on attachment 32150
patch

Just a few things to take care of.


&gt; Index: WebCore/bindings/v8/V8SVGPODTypeWrapper.h
&gt; +/*
&gt; + * Copyright (C) 2006, 2008 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
&gt; + * Copyright (C) 2008 Apple Inc. All rights reserved.
&gt; + * Copyright (C) 2008 The Chromium Authors. All rights reserved.

I think this should be &quot;Google&quot; instead of &quot;The Chromium Authors&quot;.  Also I&apos;m sure you did enough changes to add 2009.


&gt; +#ifndef V8SVGPODTypeWrapper_h
&gt; +#define V8SVGPODTypeWrapper_h
&gt; +
&gt; +#if ENABLE(SVG)
&gt; +
&gt; +#include &quot;config.h&quot;

I don&apos;t think header files are suppose to include config.h.



&gt; +public:
&gt; +    V8SVGStaticPODTypeWrapper(PODType type)
&gt; +        : m_podType(type)
&gt; +    { }

Once you&apos;ve put the { } on a new line, just put each on its own line.


&gt; +private:
&gt; +    // Update callbacks

Is this comment useful?



&gt; +    explicit PODTypeWrapperCacheInfo(WTF::HashTableDeletedValueType)
&gt; +        : creator(reinterpret_cast&lt;PODTypeCreator*&gt;(-1))
&gt; +        , getter(0)
&gt; +        , setter(0)
&gt; +    {
&gt; +    }
&gt; +    bool isHashTableDeletedValue() const

Add a blank line before this method.



&gt; +template&lt;typename PODType, typename PODTypeCreator&gt;
&gt; +struct PODTypeWrapperCacheInfoHash {
&gt; +    static unsigned hash(const PODTypeWrapperCacheInfo&lt;PODType, PODTypeCreator&gt;&amp; info)
&gt; +    {
&gt; +        unsigned creator = reinterpret_cast&lt;unsigned&gt;(info.creator);
&gt; +        unsigned getter = reinterpret_cast&lt;unsigned&gt;(*(void**)&amp;info.getter);
&gt; +        unsigned setter = reinterpret_cast&lt;unsigned&gt;(*(void**)&amp;info.setter);

Can reinterpret_cast be used for the void**?



&gt; +template&lt;typename PODType, typename PODTypeCreator&gt;
&gt; +struct PODTypeWrapperCacheInfoTraits : WTF::GenericHashTraits&lt;PODTypeWrapperCacheInfo&lt;PODType, PODTypeCreator&gt; &gt; {
&gt; +    typedef PODTypeWrapperCacheInfo&lt;PODType, PODTypeCreator&gt; CacheInfo;
&gt; +
&gt; +    static const bool emptyValueIsZero = true;
&gt; +    static const bool needsDestruction = false;
&gt; +
&gt; +    static const CacheInfo&amp; emptyValue()
&gt; +    {
&gt; +        static CacheInfo key;

Consider using DEFINE_STATIC_LOCAL.



&gt; +    static DynamicWrapperHashMap&amp; dynamicWrapperHashMap()
&gt; +    {
&gt; +        static DynamicWrapperHashMap _dynamicWrapperHashMap;

Consider using DEFINE_STATIC_LOCAL (and getting rid of the preceding &quot;_&quot;).



&gt; +template &lt;class P&gt;
&gt; +P V8SVGPODTypeUtil::toSVGPODType(V8ClassIndex::V8WrapperType type, v8::Handle&lt;v8::Value&gt; object, bool&amp; ok) {

Brace style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129414</commentid>
    <comment_count>3</comment_count>
      <attachid>32158</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-07-01 16:43:06 -0700</bug_when>
    <thetext>Created attachment 32158
patch2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130929</commentid>
    <comment_count>4</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-10 13:22:50 -0700</bug_when>
    <thetext>This has landed, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130931</commentid>
    <comment_count>5</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-07-10 13:28:42 -0700</bug_when>
    <thetext>Yes, this landed at r45659.  Sorry about that.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32150</attachid>
            <date>2009-07-01 15:41:29 -0700</date>
            <delta_ts>2009-07-01 16:43:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>13800</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTQ1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMDktMDctMDEgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
cHN0cmVhbSBWOFNWR1BPRFR5cGVXcmFwcGVyLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjkwNworCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG06IFVwZGF0ZSBmdW5jdGlvbiBiZWluZyByZW5hbWVkIGluIFY4
U1ZHUE9EVHlwZVdyYXBwZXIuaC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFNWR1BPRFR5cGVX
cmFwcGVyLmg6IFVwc3RyZWFtZWQgZnJvbSBzcmMuY2hyb21pdW0ub3JnLgorCiAyMDA5LTA3LTAx
ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA0NTQ1MikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTE4NTEsNyArMTg1MSw3
IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICAgICAgICAgIG15ICRuYXRpdmVUeXBlID0gR2V0
TmF0aXZlVHlwZSgkdHlwZSk7CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOFNWR1BPRFR5
cGVXcmFwcGVyLmgifSA9IDE7CiAKLSAgICAgICAgICAgIHJldHVybiAiVjhTVkdQT0RUeXBlVXRp
bDo6VG9TVkdQT0RUeXBlPCR7bmF0aXZlVHlwZX0+KFY4Q2xhc3NJbmRleDo6JHtjbGFzc0luZGV4
fSwgJHZhbHVlJHttYXliZU9rUGFyYW19KSIKKyAgICAgICAgICAgIHJldHVybiAiVjhTVkdQT0RU
eXBlVXRpbDo6dG9TVkdQT0RUeXBlPCR7bmF0aXZlVHlwZX0+KFY4Q2xhc3NJbmRleDo6JHtjbGFz
c0luZGV4fSwgJHZhbHVlJHttYXliZU9rUGFyYW19KSIKICAgICAgICAgfQogCiAgICAgICAgICRp
bXBsSW5jbHVkZXN7IlY4JHt0eXBlfS5oIn0gPSAxOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFNWR1BPRFR5cGVXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFNWR1BPRFR5cGVXcmFwcGVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4U1ZHUE9EVHlwZVdyYXBwZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzODEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBDaHJvbWl1bSBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVjhTVkdQT0RUeXBlV3JhcHBl
cl9oCisjZGVmaW5lIFY4U1ZHUE9EVHlwZVdyYXBwZXJfaAorCisjaWYgRU5BQkxFKFNWRykKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJT
VkdMaXN0LmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUE9EVHlwZT4K
K2NsYXNzIFY4U1ZHUE9EVHlwZVdyYXBwZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxWOFNWR1BPRFR5
cGVXcmFwcGVyPFBPRFR5cGU+ID4geworcHVibGljOgorICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXIo
KSB7IH0KKyAgICB2aXJ0dWFsIH5WOFNWR1BPRFR5cGVXcmFwcGVyKCkgeyB9CisgICAgdmlydHVh
bCBvcGVyYXRvciBQT0RUeXBlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21taXRDaGFuZ2Uo
UE9EVHlwZSwgU1ZHRWxlbWVudCopID0gMDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBPRFR5
cGU+CitjbGFzcyBWOFNWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3QgOiBwdWJsaWMgVjhT
VkdQT0RUeXBlV3JhcHBlcjxQT0RUeXBlPgoreworcHVibGljOgorICAgIHR5cGVkZWYgUE9EVHlw
ZSAoU1ZHUE9ETGlzdEl0ZW08UE9EVHlwZT46OipHZXR0ZXJNZXRob2QpKCkgY29uc3Q7CisgICAg
dHlwZWRlZiB2b2lkIChTVkdQT0RMaXN0SXRlbTxQT0RUeXBlPjo6KlNldHRlck1ldGhvZCkoUE9E
VHlwZSk7CisKKyAgICBWOFNWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3QoU1ZHUE9ETGlz
dEl0ZW08UE9EVHlwZT4qIGNyZWF0b3IsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5h
bWUpCisgICAgICAgIDogbV9jcmVhdG9yKGNyZWF0b3IpCisgICAgICAgICwgbV9nZXR0ZXIoJlNW
R1BPRExpc3RJdGVtPFBPRFR5cGU+Ojp2YWx1ZSkKKyAgICAgICAgLCBtX3NldHRlcigmU1ZHUE9E
TGlzdEl0ZW08UE9EVHlwZT46OnNldFZhbHVlKQorICAgICAgICAsIG1fYXNzb2NpYXRlZEF0dHJp
YnV0ZU5hbWUoYXR0cmlidXRlTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NyZWF0b3Ip
OworICAgICAgICBBU1NFUlQobV9nZXR0ZXIpOworICAgICAgICBBU1NFUlQobV9zZXR0ZXIpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgflY4U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdCgp
IHsgfQorCisgICAgLy8gR2V0dGVyIHdyYXBwZXIKKyAgICB2aXJ0dWFsIG9wZXJhdG9yIFBPRFR5
cGUoKSB7IHJldHVybiAobV9jcmVhdG9yLmdldCgpLT4qbV9nZXR0ZXIpKCk7IH0KKworICAgIC8v
IFNldHRlciB3cmFwcGVyCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENoYW5nZShQT0RUeXBlIHR5
cGUsIFNWR0VsZW1lbnQqIGNvbnRleHQpCisgICAgeworICAgICAgICBpZiAoIW1fc2V0dGVyKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIChtX2NyZWF0b3IuZ2V0KCktPiptX3NldHRl
cikodHlwZSk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgICAgICBjb250ZXh0LT5z
dmdBdHRyaWJ1dGVDaGFuZ2VkKG1fYXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICAvLyBVcGRhdGUgY2FsbGJhY2tzCisgICAgUmVmUHRyPFNWR1BPRExpc3RJ
dGVtPFBPRFR5cGU+ID4gbV9jcmVhdG9yOworICAgIEdldHRlck1ldGhvZCBtX2dldHRlcjsKKyAg
ICBTZXR0ZXJNZXRob2QgbV9zZXR0ZXI7CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbV9hc3Nv
Y2lhdGVkQXR0cmlidXRlTmFtZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGU+Citj
bGFzcyBWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyIDogcHVibGljIFY4U1ZHUE9EVHlwZVdyYXBw
ZXI8UE9EVHlwZT4KK3sKK3B1YmxpYzoKKyAgICBWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyKFBP
RFR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3BvZFR5cGUodHlwZSkKKyAgICB7IH0KKworICAgIHZp
cnR1YWwgflY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXIoKSB7IH0KKworICAgIC8vIEdldHRlciB3
cmFwcGVyCisgICAgdmlydHVhbCBvcGVyYXRvciBQT0RUeXBlKCkgeyByZXR1cm4gbV9wb2RUeXBl
OyB9CisKKyAgICAvLyBTZXR0ZXIgd3JhcHBlcgorICAgIHZpcnR1YWwgdm9pZCBjb21taXRDaGFu
Z2UoUE9EVHlwZSB0eXBlLCBTVkdFbGVtZW50KikKKyAgICB7CisgICAgICAgIG1fcG9kVHlwZSA9
IHR5cGU7CisgICAgfQorCitwcml2YXRlOgorICAgIFBPRFR5cGUgbV9wb2RUeXBlOworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgUE9EVHlwZSwgdHlwZW5hbWUgUGFyZW50VHlwZUFyZz4KK2NsYXNz
IFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUE9EVHlwZVBhcmVudCA6IHB1YmxpYyBWOFNW
R1N0YXRpY1BPRFR5cGVXcmFwcGVyPFBPRFR5cGU+IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFY4
U1ZHUE9EVHlwZVdyYXBwZXI8UGFyZW50VHlwZUFyZz4gUGFyZW50VHlwZTsKKworICAgICBWOFNW
R1N0YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBPRFR5cGVQYXJlbnQoUE9EVHlwZSB0eXBlLCBQYXJl
bnRUeXBlKiBwYXJlbnQpCisgICAgICAgIDogVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxQT0RU
eXBlPih0eXBlKQorICAgICAgICAsIG1fcGFyZW50VHlwZShwYXJlbnQpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBjb21taXRDaGFuZ2UoUE9EVHlwZSB0eXBlLCBTVkdFbGVtZW50
KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxQT0RU
eXBlPjo6Y29tbWl0Q2hhbmdlKHR5cGUsIGNvbnRleHQpOworICAgICAgICBtX3BhcmVudFR5cGUt
PmNvbW1pdENoYW5nZShQYXJlbnRUeXBlQXJnKHR5cGUpLCBjb250ZXh0KTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgUmVmUHRyPFBhcmVudFR5cGU+IG1fcGFyZW50VHlwZTsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFBPRFR5cGUsIHR5cGVuYW1lIFBhcmVudFR5cGU+CitjbGFzcyBWOFNWR1N0
YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBhcmVudCA6IHB1YmxpYyBWOFNWR1BPRFR5cGVXcmFwcGVy
PFBPRFR5cGU+IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFBPRFR5cGUgKFBhcmVudFR5cGU6OipH
ZXR0ZXJNZXRob2QpKCkgY29uc3Q7CisgICAgdHlwZWRlZiB2b2lkIChQYXJlbnRUeXBlOjoqU2V0
dGVyTWV0aG9kKShjb25zdCBQT0RUeXBlJik7CisKKyAgICBWOFNWR1N0YXRpY1BPRFR5cGVXcmFw
cGVyV2l0aFBhcmVudChQYXJlbnRUeXBlKiBwYXJlbnQsIEdldHRlck1ldGhvZCBnZXR0ZXIsIFNl
dHRlck1ldGhvZCBzZXR0ZXIpCisgICAgICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgICAgICAs
IG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9wYXJlbnQpOworICAgICAgICBBU1NFUlQobV9nZXR0ZXIpOworICAgICAg
ICBBU1NFUlQobV9zZXR0ZXIpOworICAgIH0KKworICAgIHZpcnR1YWwgb3BlcmF0b3IgUE9EVHlw
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gKG1fcGFyZW50LmdldCgpLT4qbV9nZXR0ZXIpKCk7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENoYW5nZShQT0RUeXBlIHR5cGUsIFNW
R0VsZW1lbnQqIGNvbnRleHQpCisgICAgeworICAgICAgICAobV9wYXJlbnQuZ2V0KCktPiptX3Nl
dHRlcikodHlwZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIFVwZGF0ZSBjYWxsYmFja3MK
KyAgICBSZWZQdHI8UGFyZW50VHlwZT4gbV9wYXJlbnQ7CisgICAgR2V0dGVyTWV0aG9kIG1fZ2V0
dGVyOworICAgIFNldHRlck1ldGhvZCBtX3NldHRlcjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFBPRFR5cGUsIHR5cGVuYW1lIFBPRFR5cGVDcmVhdG9yPgorY2xhc3MgVjhTVkdEeW5hbWljUE9E
VHlwZVdyYXBwZXIgOiBwdWJsaWMgVjhTVkdQT0RUeXBlV3JhcHBlcjxQT0RUeXBlPgoreworcHVi
bGljOgorICAgIHR5cGVkZWYgUE9EVHlwZSAoUE9EVHlwZUNyZWF0b3I6OipHZXR0ZXJNZXRob2Qp
KCkgY29uc3Q7CisgICAgdHlwZWRlZiB2b2lkIChQT0RUeXBlQ3JlYXRvcjo6KlNldHRlck1ldGhv
ZCkoUE9EVHlwZSk7CisgICAgdHlwZWRlZiB2b2lkICgqQ2FjaGVSZW1vdmFsQ2FsbGJhY2spKFY4
U1ZHUE9EVHlwZVdyYXBwZXI8UE9EVHlwZT4qKTsKKworICAgIFY4U1ZHRHluYW1pY1BPRFR5cGVX
cmFwcGVyKFBPRFR5cGVDcmVhdG9yKiBjcmVhdG9yLCBHZXR0ZXJNZXRob2QgZ2V0dGVyLCBTZXR0
ZXJNZXRob2Qgc2V0dGVyLCBDYWNoZVJlbW92YWxDYWxsYmFjayBjYWNoZVJlbW92YWxDYWxsYmFj
aykKKyAgICAgICAgOiBtX2NyZWF0b3IoY3JlYXRvcikKKyAgICAgICAgLCBtX2dldHRlcihnZXR0
ZXIpCisgICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQorICAgICAgICAsIG1fY2FjaGVSZW1vdmFs
Q2FsbGJhY2soY2FjaGVSZW1vdmFsQ2FsbGJhY2spCisgICAgeworICAgICAgICBBU1NFUlQoY3Jl
YXRvcik7CisgICAgICAgIEFTU0VSVChnZXR0ZXIpOworICAgICAgICBBU1NFUlQoc2V0dGVyKTsK
KyAgICAgICAgQVNTRVJUKGNhY2hlUmVtb3ZhbENhbGxiYWNrKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIH5WOFNWR0R5bmFtaWNQT0RUeXBlV3JhcHBlcigpIHsKKyAgICAgICAgQVNTRVJUKG1fY2Fj
aGVSZW1vdmFsQ2FsbGJhY2spOworCisgICAgICAgICgqbV9jYWNoZVJlbW92YWxDYWxsYmFjayko
dGhpcyk7CisgICAgfQorCisgICAgLy8gR2V0dGVyIHdyYXBwZXIKKyAgICB2aXJ0dWFsIG9wZXJh
dG9yIFBPRFR5cGUoKSB7IHJldHVybiAobV9jcmVhdG9yLmdldCgpLT4qbV9nZXR0ZXIpKCk7IH0K
KworICAgIC8vIFNldHRlciB3cmFwcGVyCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENoYW5nZShQ
T0RUeXBlIHR5cGUsIFNWR0VsZW1lbnQqIGNvbnRleHQpCisgICAgeworICAgICAgICAobV9jcmVh
dG9yLmdldCgpLT4qbV9zZXR0ZXIpKHR5cGUpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICAgICAgY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChtX2NyZWF0b3ItPmFzc29jaWF0
ZWRBdHRyaWJ1dGVOYW1lKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICAvLyBVcGRhdGUgY2Fs
bGJhY2tzCisgICAgUmVmUHRyPFBPRFR5cGVDcmVhdG9yPiBtX2NyZWF0b3I7CisgICAgR2V0dGVy
TWV0aG9kIG1fZ2V0dGVyOworICAgIFNldHRlck1ldGhvZCBtX3NldHRlcjsKKyAgICBDYWNoZVJl
bW92YWxDYWxsYmFjayBtX2NhY2hlUmVtb3ZhbENhbGxiYWNrOworfTsKKworLy8gQ2FjaGluZyBm
YWNpbGl0aWVzCit0ZW1wbGF0ZTx0eXBlbmFtZSBQT0RUeXBlLCB0eXBlbmFtZSBQT0RUeXBlQ3Jl
YXRvcj4KK3N0cnVjdCBQT0RUeXBlV3JhcHBlckNhY2hlSW5mbyB7CisgICAgdHlwZWRlZiBQT0RU
eXBlIChQT0RUeXBlQ3JlYXRvcjo6KkdldHRlck1ldGhvZCkoKSBjb25zdDsKKyAgICB0eXBlZGVm
IHZvaWQgKFBPRFR5cGVDcmVhdG9yOjoqU2V0dGVyTWV0aG9kKShQT0RUeXBlKTsKKworICAgIC8v
IEVtcHR5IHZhbHVlCisgICAgUE9EVHlwZVdyYXBwZXJDYWNoZUluZm8oKQorICAgICAgICA6IGNy
ZWF0b3IoMCkKKyAgICAgICAgLCBnZXR0ZXIoMCkKKyAgICAgICAgLCBzZXR0ZXIoMCkKKyAgICB7
IH0KKworICAgIC8vIERlbGV0ZWQgdmFsdWUKKyAgICBleHBsaWNpdCBQT0RUeXBlV3JhcHBlckNh
Y2hlSW5mbyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogY3JlYXRv
cihyZWludGVycHJldF9jYXN0PFBPRFR5cGVDcmVhdG9yKj4oLTEpKQorICAgICAgICAsIGdldHRl
cigwKQorICAgICAgICAsIHNldHRlcigwKQorICAgIHsKKyAgICB9CisgICAgYm9vbCBpc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRvciA9
PSByZWludGVycHJldF9jYXN0PFBPRFR5cGVDcmVhdG9yKj4oLTEpOworICAgIH0KKworICAgIFBP
RFR5cGVXcmFwcGVyQ2FjaGVJbmZvKFBPRFR5cGVDcmVhdG9yKiBfY3JlYXRvciwgR2V0dGVyTWV0
aG9kIF9nZXR0ZXIsIFNldHRlck1ldGhvZCBfc2V0dGVyKQorICAgICAgICA6IGNyZWF0b3IoX2Ny
ZWF0b3IpCisgICAgICAgICwgZ2V0dGVyKF9nZXR0ZXIpCisgICAgICAgICwgc2V0dGVyKF9zZXR0
ZXIpCisgICAgeworICAgICAgICBBU1NFUlQoY3JlYXRvcik7CisgICAgICAgIEFTU0VSVChnZXR0
ZXIpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQT0RUeXBlV3JhcHBlckNh
Y2hlSW5mbyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRvciA9PSBv
dGhlci5jcmVhdG9yICYmIGdldHRlciA9PSBvdGhlci5nZXR0ZXIgJiYgc2V0dGVyID09IG90aGVy
LnNldHRlcjsKKyAgICB9CisKKyAgICBQT0RUeXBlQ3JlYXRvciogY3JlYXRvcjsKKyAgICBHZXR0
ZXJNZXRob2QgZ2V0dGVyOworICAgIFNldHRlck1ldGhvZCBzZXR0ZXI7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBQT0RUeXBlLCB0eXBlbmFtZSBQT0RUeXBlQ3JlYXRvcj4KK3N0cnVjdCBQT0RU
eXBlV3JhcHBlckNhY2hlSW5mb0hhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IFBPRFR5cGVXcmFwcGVyQ2FjaGVJbmZvPFBPRFR5cGUsIFBPRFR5cGVDcmVhdG9yPiYgaW5mbykK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIGNyZWF0b3IgPSByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkPihpbmZvLmNyZWF0b3IpOworICAgICAgICB1bnNpZ25lZCBnZXR0ZXIgPSByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkPigqKHZvaWQqKikmaW5mby5nZXR0ZXIpOworICAgICAgICB1bnNpZ25l
ZCBzZXR0ZXIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkPigqKHZvaWQqKikmaW5mby5zZXR0
ZXIpOworICAgICAgICByZXR1cm4gKGNyZWF0b3IgKiAxMykgKyBnZXR0ZXIgXiAoc2V0dGVyID4+
IDIpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFBPRFR5cGVXcmFwcGVy
Q2FjaGVJbmZvPFBPRFR5cGUsIFBPRFR5cGVDcmVhdG9yPiYgYSwgY29uc3QgUE9EVHlwZVdyYXBw
ZXJDYWNoZUluZm88UE9EVHlwZSwgUE9EVHlwZUNyZWF0b3I+JiBiKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGEgPT0gYjsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21w
YXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQT0RU
eXBlLCB0eXBlbmFtZSBQT0RUeXBlQ3JlYXRvcj4KK3N0cnVjdCBQT0RUeXBlV3JhcHBlckNhY2hl
SW5mb1RyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8UE9EVHlwZVdyYXBwZXJDYWNoZUlu
Zm88UE9EVHlwZSwgUE9EVHlwZUNyZWF0b3I+ID4geworICAgIHR5cGVkZWYgUE9EVHlwZVdyYXBw
ZXJDYWNoZUluZm88UE9EVHlwZSwgUE9EVHlwZUNyZWF0b3I+IENhY2hlSW5mbzsKKworICAgIHN0
YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsKKworICAgIHN0YXRpYyBjb25zdCBDYWNo
ZUluZm8mIGVtcHR5VmFsdWUoKQorICAgIHsKKyAgICAgICAgc3RhdGljIENhY2hlSW5mbyBrZXk7
CisgICAgICAgIHJldHVybiBrZXk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0
RGVsZXRlZFZhbHVlKENhY2hlSW5mbyYgc2xvdCkKKyAgICB7CisgICAgICAgIG5ldyAoJnNsb3Qp
IENhY2hlSW5mbyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7CisgICAgfQorCisgICAgc3Rh
dGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgQ2FjaGVJbmZvJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGUsIHR5cGVuYW1lIFBPRFR5cGVDcmVhdG9yPgor
Y2xhc3MgVjhTVkdEeW5hbWljUE9EVHlwZVdyYXBwZXJDYWNoZQoreworcHVibGljOgorICAgIHR5
cGVkZWYgUE9EVHlwZSAoUE9EVHlwZUNyZWF0b3I6OipHZXR0ZXJNZXRob2QpKCkgY29uc3Q7Cisg
ICAgdHlwZWRlZiB2b2lkIChQT0RUeXBlQ3JlYXRvcjo6KlNldHRlck1ldGhvZCkoUE9EVHlwZSk7
CisKKyAgICB0eXBlZGVmIFBPRFR5cGVXcmFwcGVyQ2FjaGVJbmZvPFBPRFR5cGUsIFBPRFR5cGVD
cmVhdG9yPiBDYWNoZUluZm87CisgICAgdHlwZWRlZiBQT0RUeXBlV3JhcHBlckNhY2hlSW5mb0hh
c2g8UE9EVHlwZSwgUE9EVHlwZUNyZWF0b3I+IENhY2hlSW5mb0hhc2g7CisgICAgdHlwZWRlZiBQ
T0RUeXBlV3JhcHBlckNhY2hlSW5mb1RyYWl0czxQT0RUeXBlLCBQT0RUeXBlQ3JlYXRvcj4gQ2Fj
aGVJbmZvVHJhaXRzOworCisgICAgdHlwZWRlZiBWOFNWR1BPRFR5cGVXcmFwcGVyPFBPRFR5cGU+
IFdyYXBwZXJCYXNlOworICAgIHR5cGVkZWYgVjhTVkdEeW5hbWljUE9EVHlwZVdyYXBwZXI8UE9E
VHlwZSwgUE9EVHlwZUNyZWF0b3I+IER5bmFtaWNXcmFwcGVyOworCisgICAgdHlwZWRlZiBIYXNo
TWFwPENhY2hlSW5mbywgRHluYW1pY1dyYXBwZXIqLCBDYWNoZUluZm9IYXNoLCBDYWNoZUluZm9U
cmFpdHM+IER5bmFtaWNXcmFwcGVySGFzaE1hcDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIER5bmFt
aWNXcmFwcGVySGFzaE1hcDo6Y29uc3RfaXRlcmF0b3IgRHluYW1pY1dyYXBwZXJIYXNoTWFwSXRl
cmF0b3I7CisKKyAgICBzdGF0aWMgRHluYW1pY1dyYXBwZXJIYXNoTWFwJiBkeW5hbWljV3JhcHBl
ckhhc2hNYXAoKQorICAgIHsKKyAgICAgICAgc3RhdGljIER5bmFtaWNXcmFwcGVySGFzaE1hcCBf
ZHluYW1pY1dyYXBwZXJIYXNoTWFwOworICAgICAgICByZXR1cm4gX2R5bmFtaWNXcmFwcGVySGFz
aE1hcDsKKyAgICB9CisKKyAgICAvLyBVc2VkIGZvciByZWFkd3JpdGUgYXR0cmlidXRlcyBvbmx5
CisgICAgc3RhdGljIFdyYXBwZXJCYXNlKiBsb29rdXBPckNyZWF0ZVdyYXBwZXIoUE9EVHlwZUNy
ZWF0b3IqIGNyZWF0b3IsIEdldHRlck1ldGhvZCBnZXR0ZXIsIFNldHRlck1ldGhvZCBzZXR0ZXIp
CisgICAgeworICAgICAgICBEeW5hbWljV3JhcHBlckhhc2hNYXAmIG1hcChkeW5hbWljV3JhcHBl
ckhhc2hNYXAoKSk7CisgICAgICAgIENhY2hlSW5mbyBpbmZvKGNyZWF0b3IsIGdldHRlciwgc2V0
dGVyKTsKKworICAgICAgICBpZiAobWFwLmNvbnRhaW5zKGluZm8pKQorICAgICAgICAgICAgcmV0
dXJuIG1hcC5nZXQoaW5mbyk7CisKKyAgICAgICAgRHluYW1pY1dyYXBwZXIqIHdyYXBwZXIgPSBu
ZXcgVjhTVkdEeW5hbWljUE9EVHlwZVdyYXBwZXI8UE9EVHlwZSwgUE9EVHlwZUNyZWF0b3I+KGNy
ZWF0b3IsIGdldHRlciwgc2V0dGVyLCBmb3JnZXRXcmFwcGVyKTsKKyAgICAgICAgbWFwLnNldChp
bmZvLCB3cmFwcGVyKTsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgZm9yZ2V0V3JhcHBlcihWOFNWR1BPRFR5cGVXcmFwcGVyPFBPRFR5cGU+KiB3cmFw
cGVyKQorICAgIHsKKyAgICAgICAgRHluYW1pY1dyYXBwZXJIYXNoTWFwJiBtYXAoZHluYW1pY1dy
YXBwZXJIYXNoTWFwKCkpOworCisgICAgICAgIER5bmFtaWNXcmFwcGVySGFzaE1hcEl0ZXJhdG9y
IGl0ID0gbWFwLmJlZ2luKCk7CisgICAgICAgIER5bmFtaWNXcmFwcGVySGFzaE1hcEl0ZXJhdG9y
IGVuZCA9IG1hcC5lbmQoKTsKKworICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgICAgICBpZiAoaXQtPnNlY29uZCAhPSB3cmFwcGVyKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICAvLyBJdCdzIGd1YXJhbnRlZWQgdGhhdCB0aGVyZSdzIGp1
c3Qgb25lIG9iamVjdCB3ZSBuZWVkIHRvIHRha2UgY2FyZSBvZi4KKyAgICAgICAgICAgIG1hcC5y
ZW1vdmUoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
fTsKKworY2xhc3MgVjhTVkdQT0RUeXBlVXRpbCB7CitwdWJsaWM6CisgICAgdGVtcGxhdGUgPGNs
YXNzIFA+CisgICAgc3RhdGljIFAgdG9TVkdQT0RUeXBlKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVy
VHlwZSB0eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0LCBib29sJiBvayk7Cit9Owor
Cit0ZW1wbGF0ZSA8Y2xhc3MgUD4KK1AgVjhTVkdQT0RUeXBlVXRpbDo6dG9TVkdQT0RUeXBlKFY4
Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2Jq
ZWN0LCBib29sJiBvaykgeworICAgIHZvaWQgKndyYXBwZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9T
VkdQT0RUeXBlSW1wbCh0eXBlLCBvYmplY3QpOworICAgIGlmICh3cmFwcGVyID09IE5VTEwpIHsK
KyAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFAoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBvayA9IHRydWU7CisgICAgICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8VjhTVkdQT0RU
eXBlV3JhcHBlcjxQPio+KHdyYXBwZXIpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZiAvLyBWOFNWR1BPRFR5cGVXcmFw
cGVyX2gK
</data>
<flag name="review"
          id="16652"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32158</attachid>
            <date>2009-07-01 16:43:06 -0700</date>
            <delta_ts>2009-07-01 17:37:45 -0700</delta_ts>
            <desc>patch2</desc>
            <filename>patch2.txt</filename>
            <type>text/plain</type>
            <size>13816</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTQ1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMDktMDctMDEgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
cHN0cmVhbSBWOFNWR1BPRFR5cGVXcmFwcGVyLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjkwNworCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG06IFVwZGF0ZSBmdW5jdGlvbiBiZWluZyByZW5hbWVkIGluIFY4
U1ZHUE9EVHlwZVdyYXBwZXIuaC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFNWR1BPRFR5cGVX
cmFwcGVyLmg6IFVwc3RyZWFtZWQgZnJvbSBzcmMuY2hyb21pdW0ub3JnLgorCiAyMDA5LTA3LTAx
ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA0NTQ1MikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTE4NTEsNyArMTg1MSw3
IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICAgICAgICAgIG15ICRuYXRpdmVUeXBlID0gR2V0
TmF0aXZlVHlwZSgkdHlwZSk7CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOFNWR1BPRFR5
cGVXcmFwcGVyLmgifSA9IDE7CiAKLSAgICAgICAgICAgIHJldHVybiAiVjhTVkdQT0RUeXBlVXRp
bDo6VG9TVkdQT0RUeXBlPCR7bmF0aXZlVHlwZX0+KFY4Q2xhc3NJbmRleDo6JHtjbGFzc0luZGV4
fSwgJHZhbHVlJHttYXliZU9rUGFyYW19KSIKKyAgICAgICAgICAgIHJldHVybiAiVjhTVkdQT0RU
eXBlVXRpbDo6dG9TVkdQT0RUeXBlPCR7bmF0aXZlVHlwZX0+KFY4Q2xhc3NJbmRleDo6JHtjbGFz
c0luZGV4fSwgJHZhbHVlJHttYXliZU9rUGFyYW19KSIKICAgICAgICAgfQogCiAgICAgICAgICRp
bXBsSW5jbHVkZXN7IlY4JHt0eXBlfS5oIn0gPSAxOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFNWR1BPRFR5cGVXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFNWR1BPRFR5cGVXcmFwcGVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4U1ZHUE9EVHlwZVdyYXBwZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZS4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4U1ZHUE9EVHlwZVdyYXBwZXJfaAorI2Rl
ZmluZSBWOFNWR1BPRFR5cGVXcmFwcGVyX2gKKworI2lmIEVOQUJMRShTVkcpCisKKyNpbmNsdWRl
ICJTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHTGlzdC5oIgorI2luY2x1ZGUgIlY4UHJveHku
aCIKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQT0RUeXBl
PgorY2xhc3MgVjhTVkdQT0RUeXBlV3JhcHBlciA6IHB1YmxpYyBSZWZDb3VudGVkPFY4U1ZHUE9E
VHlwZVdyYXBwZXI8UE9EVHlwZT4+IHsKK3B1YmxpYzoKKyAgICBWOFNWR1BPRFR5cGVXcmFwcGVy
KCkgeyB9CisgICAgdmlydHVhbCB+VjhTVkdQT0RUeXBlV3JhcHBlcigpIHsgfQorICAgIHZpcnR1
YWwgb3BlcmF0b3IgUE9EVHlwZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdl
KFBPRFR5cGUsIFNWR0VsZW1lbnQqKSA9IDA7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQT0RU
eXBlPgorY2xhc3MgVjhTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0IDogcHVibGljIFY4
U1ZHUE9EVHlwZVdyYXBwZXI8UE9EVHlwZT4geworcHVibGljOgorICAgIHR5cGVkZWYgUE9EVHlw
ZSAoU1ZHUE9ETGlzdEl0ZW08UE9EVHlwZT46OipHZXR0ZXJNZXRob2QpKCkgY29uc3Q7CisgICAg
dHlwZWRlZiB2b2lkIChTVkdQT0RMaXN0SXRlbTxQT0RUeXBlPjo6KlNldHRlck1ldGhvZCkoUE9E
VHlwZSk7CisKKyAgICBWOFNWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3QoU1ZHUE9ETGlz
dEl0ZW08UE9EVHlwZT4qIGNyZWF0b3IsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5h
bWUpCisgICAgICAgIDogbV9jcmVhdG9yKGNyZWF0b3IpCisgICAgICAgICwgbV9nZXR0ZXIoJlNW
R1BPRExpc3RJdGVtPFBPRFR5cGU+Ojp2YWx1ZSkKKyAgICAgICAgLCBtX3NldHRlcigmU1ZHUE9E
TGlzdEl0ZW08UE9EVHlwZT46OnNldFZhbHVlKQorICAgICAgICAsIG1fYXNzb2NpYXRlZEF0dHJp
YnV0ZU5hbWUoYXR0cmlidXRlTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NyZWF0b3Ip
OworICAgICAgICBBU1NFUlQobV9nZXR0ZXIpOworICAgICAgICBBU1NFUlQobV9zZXR0ZXIpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgflY4U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdCgp
IHsgfQorCisgICAgLy8gR2V0dGVyIHdyYXBwZXIKKyAgICB2aXJ0dWFsIG9wZXJhdG9yIFBPRFR5
cGUoKSB7IHJldHVybiAobV9jcmVhdG9yLmdldCgpLT4qbV9nZXR0ZXIpKCk7IH0KKworICAgIC8v
IFNldHRlciB3cmFwcGVyCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdENoYW5nZShQT0RUeXBlIHR5
cGUsIFNWR0VsZW1lbnQqIGNvbnRleHQpCisgICAgeworICAgICAgICBpZiAoIW1fc2V0dGVyKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIChtX2NyZWF0b3IuZ2V0KCktPiptX3NldHRl
cikodHlwZSk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgICAgICBjb250ZXh0LT5z
dmdBdHRyaWJ1dGVDaGFuZ2VkKG1fYXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICAvLyBVcGRhdGUgY2FsbGJhY2tzCisgICAgUmVmUHRyPFNWR1BPRExpc3RJ
dGVtPFBPRFR5cGU+ID4gbV9jcmVhdG9yOworICAgIEdldHRlck1ldGhvZCBtX2dldHRlcjsKKyAg
ICBTZXR0ZXJNZXRob2QgbV9zZXR0ZXI7CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbV9hc3Nv
Y2lhdGVkQXR0cmlidXRlTmFtZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGU+Citj
bGFzcyBWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyIDogcHVibGljIFY4U1ZHUE9EVHlwZVdyYXBw
ZXI8UE9EVHlwZT4geworcHVibGljOgorICAgIFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXIoUE9E
VHlwZSB0eXBlKQorICAgICAgICA6IG1fcG9kVHlwZSh0eXBlKQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIH5WOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyKCkgeyB9CisKKyAgICAvLyBHZXR0
ZXIgd3JhcHBlcgorICAgIHZpcnR1YWwgb3BlcmF0b3IgUE9EVHlwZSgpIHsgcmV0dXJuIG1fcG9k
VHlwZTsgfQorCisgICAgLy8gU2V0dGVyIHdyYXBwZXIKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0
Q2hhbmdlKFBPRFR5cGUgdHlwZSwgU1ZHRWxlbWVudCopCisgICAgeworICAgICAgICBtX3BvZFR5
cGUgPSB0eXBlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBQT0RUeXBlIG1fcG9kVHlwZTsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGUsIHR5cGVuYW1lIFBhcmVudFR5cGVBcmc+Citj
bGFzcyBWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyV2l0aFBPRFR5cGVQYXJlbnQgOiBwdWJsaWMg
VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxQT0RUeXBlPiB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBWOFNWR1BPRFR5cGVXcmFwcGVyPFBhcmVudFR5cGVBcmc+IFBhcmVudFR5cGU7CisKKyAgICAg
VjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQT0RUeXBlUGFyZW50KFBPRFR5cGUgdHlwZSwg
UGFyZW50VHlwZSogcGFyZW50KQorICAgICAgICA6IFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8
UE9EVHlwZT4odHlwZSkKKyAgICAgICAgLCBtX3BhcmVudFR5cGUocGFyZW50KQorICAgIHsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdlKFBPRFR5cGUgdHlwZSwgU1ZHRWxl
bWVudCogY29udGV4dCkKKyAgICB7CisgICAgICAgIFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8
UE9EVHlwZT46OmNvbW1pdENoYW5nZSh0eXBlLCBjb250ZXh0KTsKKyAgICAgICAgbV9wYXJlbnRU
eXBlLT5jb21taXRDaGFuZ2UoUGFyZW50VHlwZUFyZyh0eXBlKSwgY29udGV4dCk7CisgICAgfQor
Citwcml2YXRlOgorICAgIFJlZlB0cjxQYXJlbnRUeXBlPiBtX3BhcmVudFR5cGU7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBQT0RUeXBlLCB0eXBlbmFtZSBQYXJlbnRUeXBlPgorY2xhc3MgVjhT
VkdTdGF0aWNQT0RUeXBlV3JhcHBlcldpdGhQYXJlbnQgOiBwdWJsaWMgVjhTVkdQT0RUeXBlV3Jh
cHBlcjxQT0RUeXBlPiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBQT0RUeXBlIChQYXJlbnRUeXBl
OjoqR2V0dGVyTWV0aG9kKSgpIGNvbnN0OworICAgIHR5cGVkZWYgdm9pZCAoUGFyZW50VHlwZTo6
KlNldHRlck1ldGhvZCkoY29uc3QgUE9EVHlwZSYpOworCisgICAgVjhTVkdTdGF0aWNQT0RUeXBl
V3JhcHBlcldpdGhQYXJlbnQoUGFyZW50VHlwZSogcGFyZW50LCBHZXR0ZXJNZXRob2QgZ2V0dGVy
LCBTZXR0ZXJNZXRob2Qgc2V0dGVyKQorICAgICAgICA6IG1fcGFyZW50KHBhcmVudCkKKyAgICAg
ICAgLCBtX2dldHRlcihnZXR0ZXIpCisgICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fcGFyZW50KTsKKyAgICAgICAgQVNTRVJUKG1fZ2V0dGVyKTsKKyAg
ICAgICAgQVNTRVJUKG1fc2V0dGVyKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIG9wZXJhdG9yIFBP
RFR5cGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChtX3BhcmVudC5nZXQoKS0+Km1fZ2V0dGVy
KSgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjb21taXRDaGFuZ2UoUE9EVHlwZSB0eXBl
LCBTVkdFbGVtZW50KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgKG1fcGFyZW50LmdldCgpLT4q
bV9zZXR0ZXIpKHR5cGUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8UGFyZW50VHlw
ZT4gbV9wYXJlbnQ7CisgICAgR2V0dGVyTWV0aG9kIG1fZ2V0dGVyOworICAgIFNldHRlck1ldGhv
ZCBtX3NldHRlcjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGUsIHR5cGVuYW1lIFBP
RFR5cGVDcmVhdG9yPgorY2xhc3MgVjhTVkdEeW5hbWljUE9EVHlwZVdyYXBwZXIgOiBwdWJsaWMg
VjhTVkdQT0RUeXBlV3JhcHBlcjxQT0RUeXBlPiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBQT0RU
eXBlIChQT0RUeXBlQ3JlYXRvcjo6KkdldHRlck1ldGhvZCkoKSBjb25zdDsKKyAgICB0eXBlZGVm
IHZvaWQgKFBPRFR5cGVDcmVhdG9yOjoqU2V0dGVyTWV0aG9kKShQT0RUeXBlKTsKKyAgICB0eXBl
ZGVmIHZvaWQgKCpDYWNoZVJlbW92YWxDYWxsYmFjaykoVjhTVkdQT0RUeXBlV3JhcHBlcjxQT0RU
eXBlPiopOworCisgICAgVjhTVkdEeW5hbWljUE9EVHlwZVdyYXBwZXIoUE9EVHlwZUNyZWF0b3Iq
IGNyZWF0b3IsIEdldHRlck1ldGhvZCBnZXR0ZXIsIFNldHRlck1ldGhvZCBzZXR0ZXIsIENhY2hl
UmVtb3ZhbENhbGxiYWNrIGNhY2hlUmVtb3ZhbENhbGxiYWNrKQorICAgICAgICA6IG1fY3JlYXRv
cihjcmVhdG9yKQorICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRl
cihzZXR0ZXIpCisgICAgICAgICwgbV9jYWNoZVJlbW92YWxDYWxsYmFjayhjYWNoZVJlbW92YWxD
YWxsYmFjaykKKyAgICB7CisgICAgICAgIEFTU0VSVChjcmVhdG9yKTsKKyAgICAgICAgQVNTRVJU
KGdldHRlcik7CisgICAgICAgIEFTU0VSVChzZXR0ZXIpOworICAgICAgICBBU1NFUlQoY2FjaGVS
ZW1vdmFsQ2FsbGJhY2spOworICAgIH0KKworICAgIHZpcnR1YWwgflY4U1ZHRHluYW1pY1BPRFR5
cGVXcmFwcGVyKCkgeworICAgICAgICBBU1NFUlQobV9jYWNoZVJlbW92YWxDYWxsYmFjayk7CisK
KyAgICAgICAgKCptX2NhY2hlUmVtb3ZhbENhbGxiYWNrKSh0aGlzKTsKKyAgICB9CisKKyAgICAv
LyBHZXR0ZXIgd3JhcHBlcgorICAgIHZpcnR1YWwgb3BlcmF0b3IgUE9EVHlwZSgpIHsgcmV0dXJu
IChtX2NyZWF0b3IuZ2V0KCktPiptX2dldHRlcikoKTsgfQorCisgICAgLy8gU2V0dGVyIHdyYXBw
ZXIKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdlKFBPRFR5cGUgdHlwZSwgU1ZHRWxlbWVu
dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIChtX2NyZWF0b3IuZ2V0KCktPiptX3NldHRlciko
dHlwZSk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgICAgICBjb250ZXh0LT5zdmdB
dHRyaWJ1dGVDaGFuZ2VkKG1fY3JlYXRvci0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIC8vIFVwZGF0ZSBjYWxsYmFja3MKKyAgICBSZWZQdHI8UE9E
VHlwZUNyZWF0b3I+IG1fY3JlYXRvcjsKKyAgICBHZXR0ZXJNZXRob2QgbV9nZXR0ZXI7CisgICAg
U2V0dGVyTWV0aG9kIG1fc2V0dGVyOworICAgIENhY2hlUmVtb3ZhbENhbGxiYWNrIG1fY2FjaGVS
ZW1vdmFsQ2FsbGJhY2s7Cit9OworCisvLyBDYWNoaW5nIGZhY2lsaXRpZXMKK3RlbXBsYXRlPHR5
cGVuYW1lIFBPRFR5cGUsIHR5cGVuYW1lIFBPRFR5cGVDcmVhdG9yPgorc3RydWN0IFBPRFR5cGVX
cmFwcGVyQ2FjaGVJbmZvIHsKKyAgICB0eXBlZGVmIFBPRFR5cGUgKFBPRFR5cGVDcmVhdG9yOjoq
R2V0dGVyTWV0aG9kKSgpIGNvbnN0OworICAgIHR5cGVkZWYgdm9pZCAoUE9EVHlwZUNyZWF0b3I6
OipTZXR0ZXJNZXRob2QpKFBPRFR5cGUpOworCisgICAgLy8gRW1wdHkgdmFsdWUKKyAgICBQT0RU
eXBlV3JhcHBlckNhY2hlSW5mbygpCisgICAgICAgIDogY3JlYXRvcigwKQorICAgICAgICAsIGdl
dHRlcigwKQorICAgICAgICAsIHNldHRlcigwKQorICAgIHsgfQorCisgICAgLy8gRGVsZXRlZCB2
YWx1ZQorICAgIGV4cGxpY2l0IFBPRFR5cGVXcmFwcGVyQ2FjaGVJbmZvKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBjcmVhdG9yKHJlaW50ZXJwcmV0X2Nhc3Q8UE9E
VHlwZUNyZWF0b3IqPigtMSkpCisgICAgICAgICwgZ2V0dGVyKDApCisgICAgICAgICwgc2V0dGVy
KDApCisgICAgeworICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0b3IgPT0gcmVpbnRlcnByZXRfY2FzdDxQ
T0RUeXBlQ3JlYXRvcio+KC0xKTsKKyAgICB9CisKKyAgICBQT0RUeXBlV3JhcHBlckNhY2hlSW5m
byhQT0RUeXBlQ3JlYXRvciogX2NyZWF0b3IsIEdldHRlck1ldGhvZCBfZ2V0dGVyLCBTZXR0ZXJN
ZXRob2QgX3NldHRlcikKKyAgICAgICAgOiBjcmVhdG9yKF9jcmVhdG9yKQorICAgICAgICAsIGdl
dHRlcihfZ2V0dGVyKQorICAgICAgICAsIHNldHRlcihfc2V0dGVyKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGNyZWF0b3IpOworICAgICAgICBBU1NFUlQoZ2V0dGVyKTsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgUE9EVHlwZVdyYXBwZXJDYWNoZUluZm8mIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0b3IgPT0gb3RoZXIuY3JlYXRvciAmJiBnZXR0
ZXIgPT0gb3RoZXIuZ2V0dGVyICYmIHNldHRlciA9PSBvdGhlci5zZXR0ZXI7CisgICAgfQorCisg
ICAgUE9EVHlwZUNyZWF0b3IqIGNyZWF0b3I7CisgICAgR2V0dGVyTWV0aG9kIGdldHRlcjsKKyAg
ICBTZXR0ZXJNZXRob2Qgc2V0dGVyOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUE9EVHlwZSwg
dHlwZW5hbWUgUE9EVHlwZUNyZWF0b3I+CitzdHJ1Y3QgUE9EVHlwZVdyYXBwZXJDYWNoZUluZm9I
YXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQT0RUeXBlV3JhcHBlckNhY2hl
SW5mbzxQT0RUeXBlLCBQT0RUeXBlQ3JlYXRvcj4mIGluZm8pCisgICAgeworICAgICAgICB1bnNp
Z25lZCBjcmVhdG9yID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaW5mby5jcmVhdG9yKTsK
KyAgICAgICAgdW5zaWduZWQgZ2V0dGVyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oKih2
b2lkKiopJmluZm8uZ2V0dGVyKTsKKyAgICAgICAgdW5zaWduZWQgc2V0dGVyID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZD4oKih2b2lkKiopJmluZm8uc2V0dGVyKTsKKyAgICAgICAgcmV0dXJu
IChjcmVhdG9yICogMTMpICsgZ2V0dGVyIF4gKHNldHRlciA+PiAyKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBQT0RUeXBlV3JhcHBlckNhY2hlSW5mbzxQT0RUeXBlLCBQ
T0RUeXBlQ3JlYXRvcj4mIGEsIGNvbnN0IFBPRFR5cGVXcmFwcGVyQ2FjaGVJbmZvPFBPRFR5cGUs
IFBPRFR5cGVDcmVhdG9yPiYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAg
fQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQg
PSB0cnVlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUE9EVHlwZSwgdHlwZW5hbWUgUE9EVHlw
ZUNyZWF0b3I+CitzdHJ1Y3QgUE9EVHlwZVdyYXBwZXJDYWNoZUluZm9UcmFpdHMgOiBXVEY6Okdl
bmVyaWNIYXNoVHJhaXRzPFBPRFR5cGVXcmFwcGVyQ2FjaGVJbmZvPFBPRFR5cGUsIFBPRFR5cGVD
cmVhdG9yPiA+IHsKKyAgICB0eXBlZGVmIFBPRFR5cGVXcmFwcGVyQ2FjaGVJbmZvPFBPRFR5cGUs
IFBPRFR5cGVDcmVhdG9yPiBDYWNoZUluZm87CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0
eVZhbHVlSXNaZXJvID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gZmFsc2U7CisKKyAgICBzdGF0aWMgY29uc3QgQ2FjaGVJbmZvJiBlbXB0eVZhbHVlKCkK
KyAgICB7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ2FjaGVJbmZvLCBrZXksICgpKTsK
KyAgICAgICAgcmV0dXJuIGtleTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3RE
ZWxldGVkVmFsdWUoQ2FjaGVJbmZvJiBzbG90KQorICAgIHsKKyAgICAgICAgbmV3ICgmc2xvdCkg
Q2FjaGVJbmZvKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBDYWNoZUluZm8mIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgUE9EVHlwZSwgdHlwZW5hbWUgUE9EVHlwZUNyZWF0b3I+Citj
bGFzcyBWOFNWR0R5bmFtaWNQT0RUeXBlV3JhcHBlckNhY2hlIHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIFBPRFR5cGUgKFBPRFR5cGVDcmVhdG9yOjoqR2V0dGVyTWV0aG9kKSgpIGNvbnN0OworICAg
IHR5cGVkZWYgdm9pZCAoUE9EVHlwZUNyZWF0b3I6OipTZXR0ZXJNZXRob2QpKFBPRFR5cGUpOwor
CisgICAgdHlwZWRlZiBQT0RUeXBlV3JhcHBlckNhY2hlSW5mbzxQT0RUeXBlLCBQT0RUeXBlQ3Jl
YXRvcj4gQ2FjaGVJbmZvOworICAgIHR5cGVkZWYgUE9EVHlwZVdyYXBwZXJDYWNoZUluZm9IYXNo
PFBPRFR5cGUsIFBPRFR5cGVDcmVhdG9yPiBDYWNoZUluZm9IYXNoOworICAgIHR5cGVkZWYgUE9E
VHlwZVdyYXBwZXJDYWNoZUluZm9UcmFpdHM8UE9EVHlwZSwgUE9EVHlwZUNyZWF0b3I+IENhY2hl
SW5mb1RyYWl0czsKKworICAgIHR5cGVkZWYgVjhTVkdQT0RUeXBlV3JhcHBlcjxQT0RUeXBlPiBX
cmFwcGVyQmFzZTsKKyAgICB0eXBlZGVmIFY4U1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVyPFBPRFR5
cGUsIFBPRFR5cGVDcmVhdG9yPiBEeW5hbWljV3JhcHBlcjsKKworICAgIHR5cGVkZWYgSGFzaE1h
cDxDYWNoZUluZm8sIER5bmFtaWNXcmFwcGVyKiwgQ2FjaGVJbmZvSGFzaCwgQ2FjaGVJbmZvVHJh
aXRzPiBEeW5hbWljV3JhcHBlckhhc2hNYXA7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBEeW5hbWlj
V3JhcHBlckhhc2hNYXA6OmNvbnN0X2l0ZXJhdG9yIER5bmFtaWNXcmFwcGVySGFzaE1hcEl0ZXJh
dG9yOworCisgICAgc3RhdGljIER5bmFtaWNXcmFwcGVySGFzaE1hcCYgZHluYW1pY1dyYXBwZXJI
YXNoTWFwKCkKKyAgICB7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoRHluYW1pY1dyYXBw
ZXJIYXNoTWFwLCBkeW5hbWljV3JhcHBlckhhc2hNYXAsICgpKTsKKyAgICAgICAgcmV0dXJuIGR5
bmFtaWNXcmFwcGVySGFzaE1hcDsKKyAgICB9CisKKyAgICAvLyBVc2VkIGZvciByZWFkd3JpdGUg
YXR0cmlidXRlcyBvbmx5CisgICAgc3RhdGljIFdyYXBwZXJCYXNlKiBsb29rdXBPckNyZWF0ZVdy
YXBwZXIoUE9EVHlwZUNyZWF0b3IqIGNyZWF0b3IsIEdldHRlck1ldGhvZCBnZXR0ZXIsIFNldHRl
ck1ldGhvZCBzZXR0ZXIpCisgICAgeworICAgICAgICBEeW5hbWljV3JhcHBlckhhc2hNYXAmIG1h
cChkeW5hbWljV3JhcHBlckhhc2hNYXAoKSk7CisgICAgICAgIENhY2hlSW5mbyBpbmZvKGNyZWF0
b3IsIGdldHRlciwgc2V0dGVyKTsKKworICAgICAgICBpZiAobWFwLmNvbnRhaW5zKGluZm8pKQor
ICAgICAgICAgICAgcmV0dXJuIG1hcC5nZXQoaW5mbyk7CisKKyAgICAgICAgRHluYW1pY1dyYXBw
ZXIqIHdyYXBwZXIgPSBuZXcgVjhTVkdEeW5hbWljUE9EVHlwZVdyYXBwZXI8UE9EVHlwZSwgUE9E
VHlwZUNyZWF0b3I+KGNyZWF0b3IsIGdldHRlciwgc2V0dGVyLCBmb3JnZXRXcmFwcGVyKTsKKyAg
ICAgICAgbWFwLnNldChpbmZvLCB3cmFwcGVyKTsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgZm9yZ2V0V3JhcHBlcihWOFNWR1BPRFR5cGVXcmFwcGVy
PFBPRFR5cGU+KiB3cmFwcGVyKQorICAgIHsKKyAgICAgICAgRHluYW1pY1dyYXBwZXJIYXNoTWFw
JiBtYXAoZHluYW1pY1dyYXBwZXJIYXNoTWFwKCkpOworCisgICAgICAgIER5bmFtaWNXcmFwcGVy
SGFzaE1hcEl0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7CisgICAgICAgIER5bmFtaWNXcmFwcGVy
SGFzaE1hcEl0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKKworICAgICAgICBmb3IgKDsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoaXQtPnNlY29uZCAhPSB3cmFwcGVyKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyBJdCdzIGd1YXJhbnRlZWQg
dGhhdCB0aGVyZSdzIGp1c3Qgb25lIG9iamVjdCB3ZSBuZWVkIHRvIHRha2UgY2FyZSBvZi4KKyAg
ICAgICAgICAgIG1hcC5yZW1vdmUoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorfTsKKworY2xhc3MgVjhTVkdQT0RUeXBlVXRpbCB7CitwdWJsaWM6Cisg
ICAgdGVtcGxhdGUgPGNsYXNzIFA+CisgICAgc3RhdGljIFAgdG9TVkdQT0RUeXBlKFY4Q2xhc3NJ
bmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0LCBi
b29sJiBvayk7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgUD4KK1AgVjhTVkdQT0RUeXBlVXRpbDo6
dG9TVkdQT0RUeXBlKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gb2JqZWN0LCBib29sJiBvaykKK3sKKyAgICB2b2lkICp3cmFwcGVyID0gVjhQ
cm94eTo6Y29udmVydFRvU1ZHUE9EVHlwZUltcGwodHlwZSwgb2JqZWN0KTsKKyAgICBpZiAod3Jh
cHBlciA9PSBOVUxMKSB7CisgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgIHJldHVybiBQKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgb2sgPSB0cnVlOworICAgICAgICByZXR1cm4gKnN0YXRp
Y19jYXN0PFY4U1ZHUE9EVHlwZVdyYXBwZXI8UD4qPih3cmFwcGVyKTsKKyAgICB9Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYgLy8g
VjhTVkdQT0RUeXBlV3JhcHBlcl9oCg==
</data>
<flag name="review"
          id="16658"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>