<?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>164123</bug_id>
          
          <creation_ts>2016-10-28 06:02:19 -0700</creation_ts>
          <short_desc>[JSC] JSON.stringify should handle Proxy which is non JSArray but isArray is true</short_desc>
          <delta_ts>2017-02-17 06:26:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kamil Frankowicz">kamil.frankowicz</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>darin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1245561</commentid>
    <comment_count>0</comment_count>
      <attachid>293147</attachid>
    <who name="Kamil Frankowicz">kamil.frankowicz</who>
    <bug_when>2016-10-28 06:02:19 -0700</bug_when>
    <thetext>Created attachment 293147
POC to trigger SEGFAULT (jsc)

Affected SVN revision: 208042

To reproduce the problem:
./jsc wekbit_string_builder.js

ASAN Output:

ASAN:DEADLYSIGNAL
=================================================================
==16295==ERROR: AddressSanitizer: SEGV on unknown address 0x6041000021a3 (pc 0x7fa5adf38ee4 bp 0x0000ffffffff sp 0x7ffd4d2f6790 T0)
==16295==The signal is caused by a READ memory access.
    #0 0x7fa5adf38ee3 in WTF::StringBuilder::operator[](unsigned int) const XYZ/webkit/Source/WTF/wtf/text/StringBuilder.h:247:20
    #1 0x7fa5adf38ee3 in JSC::Stringifier::Holder::appendNextProperty(JSC::Stringifier&amp;, WTF::StringBuilder&amp;) XYZ/webkit/Source/JavaScriptCore/runtime/JSONObject.cpp:465
    #2 0x7fa5adf35501 in JSC::Stringifier::appendStringifiedValue(WTF::StringBuilder&amp;, JSC::JSValue, JSC::JSObject*, JSC::PropertyNameForFunctionCall const&amp;) XYZ/webkit/Source/JavaScriptCore/runtime/JSONObject.cpp:384:37
    #3 0x7fa5adf31deb in JSC::Stringifier::stringify(JSC::Handle&lt;JSC::Unknown&gt;) XYZ/webkit/Source/JavaScriptCore/runtime/JSONObject.cpp:262:9
    #4 0x7fa5adf406c4 in JSC::JSONProtoFuncStringify(JSC::ExecState*) XYZ/webkit/Source/JavaScriptCore/runtime/JSONObject.cpp:786:57
    #5 0x7fa565afe027  (&lt;unknown module&gt;)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV XYZ/webkit/Source/WTF/wtf/text/StringBuilder.h:247:20 in WTF::StringBuilder::operator[](unsigned int) const
==16295==ABORTING


Regards,
Kamil Frankowicz</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246046</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-10-29 09:49:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/29015948&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246129</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-29 20:18:34 -0700</bug_when>
    <thetext>More easy way is `JSON.parse(new Proxy([undefined], {}));`. investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246130</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-29 20:21:24 -0700</bug_when>
    <thetext>s/parse/stringify/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246144</commentid>
    <comment_count>4</comment_count>
      <attachid>293328</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-29 22:02:02 -0700</bug_when>
    <thetext>Created attachment 293328
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246159</commentid>
    <comment_count>5</comment_count>
      <attachid>293328</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-10-29 23:00:10 -0700</bug_when>
    <thetext>Comment on attachment 293328
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:11
&gt; +        When JSON.stringify encounter the value like undefined, which results depend
&gt; +        on the context. If it is produced under the object property context, we ignore
&gt; +        that property. On the other hand, if it is produced under the array element
&gt; +        context, we produce &quot;null&quot;.

Can you quote the relevant urls to the spec here?

&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:265
&gt; +    Holder root(Holder::RootHolder, vm, object);

Why can&apos;t you just use:
    Holder root(vm, m_exec, object);

&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:426
&gt; +    , m_isArray(JSC::isArray(exec, object))

m_isJSArray is uninitialized here.  Is that intentional?

&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:440
&gt; +inline Stringifier::Holder::Holder(RootHolderTag, VM&amp; vm, JSObject* object)
&gt; +    : m_object(vm, object)
&gt; +    , m_isArray(false)
&gt; +    , m_isJSArray(false)
&gt;      , m_index(0)
&gt;  #ifndef NDEBUG
&gt;      , m_size(0)

Why do we need this version?  Won&apos;t the Holder(VM&amp; vm, ExecState* exec, JSObject* object) work just as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246162</commentid>
    <comment_count>6</comment_count>
      <attachid>293328</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-29 23:09:50 -0700</bug_when>
    <thetext>Comment on attachment 293328
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/ChangeLog:11
&gt;&gt; +        context, we produce &quot;null&quot;.
&gt; 
&gt; Can you quote the relevant urls to the spec here?

Yup! I&apos;ll include it.
https://tc39.github.io/ecma262/#sec-serializejsonarray we write &quot;null&quot;.
But https://tc39.github.io/ecma262/#sec-serializejsonobject, we skip the property in 8-b.

&gt;&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:265
&gt;&gt; +    Holder root(Holder::RootHolder, vm, object);
&gt; 
&gt; Why can&apos;t you just use:
&gt;     Holder root(vm, m_exec, object);

I don&apos;t think using it directly is good. It calls `isArray` for the given object and isArray() could raise exceptions for some objects.
Of course, here, the exception never happens. But I would like to explicitly say that this Holder does not cause any observable behaviors.
That&apos;s why I did not include ExecState* in this constructor.

&gt;&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:426
&gt;&gt; +    , m_isArray(JSC::isArray(exec, object))
&gt; 
&gt; m_isJSArray is uninitialized here.  Is that intentional?

Yes, that is intentional. And this function is original one and it is not changed.
This m_isJSArray will be initialized when we call appendNextProperty for this holder.

&gt;&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:440
&gt;&gt;      , m_size(0)
&gt; 
&gt; Why do we need this version?  Won&apos;t the Holder(VM&amp; vm, ExecState* exec, JSObject* object) work just as well?

Yeah, it works. But I don&apos;t think it is good manner.
And since we do not call appendNextProperty for this root Holder, some of the fields (m_isJSArray) remains uninitialized.
I don&apos;t think it is good thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246163</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-29 23:12:13 -0700</bug_when>
    <thetext>Notable example is,

JSON.stringify({ value: undefined }) =&gt; &quot;{}&quot;
JSON.stringify([undefined]) =&gt; &quot;[null]&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246164</commentid>
    <comment_count>8</comment_count>
      <attachid>293328</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-29 23:16:00 -0700</bug_when>
    <thetext>Comment on attachment 293328
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:426
&gt;&gt;&gt; +    , m_isArray(JSC::isArray(exec, object))
&gt;&gt; 
&gt;&gt; m_isJSArray is uninitialized here.  Is that intentional?
&gt; 
&gt; Yes, that is intentional. And this function is original one and it is not changed.
&gt; This m_isJSArray will be initialized when we call appendNextProperty for this holder.

But, I think initializing it is better. Since isJSArray() is not observable one, we can just call it here.
I&apos;ll change this part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246165</commentid>
    <comment_count>9</comment_count>
      <attachid>293335</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-29 23:20:53 -0700</bug_when>
    <thetext>Created attachment 293335
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246169</commentid>
    <comment_count>10</comment_count>
      <attachid>293335</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-10-30 00:03:40 -0700</bug_when>
    <thetext>Comment on attachment 293335
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        When JSON.stringify encounter the value like undefined, which results depend

/the value like undefined/the undefined value/
/which results depend/the result depends/

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +            // https://tc39.github.io/ecma262/#sec-serializejsonobject

I suggest adding &quot;section 8.b&quot; after the spec url above.

&gt; Source/JavaScriptCore/ChangeLog:18
&gt; +            // https://tc39.github.io/ecma262/#sec-serializejsonarray

I suggest adding &quot;section 8.b&quot; after the spec url above.

&gt; JSTests/stress/json-stringify-with-non-jsarray-array.js:24
&gt; +shouldBe(JSON.stringify(new Proxy([function() { }], {})), `[null]`);

Can you also add the test case for JSON.stringify(new Proxy({ value: undefined }, {}))?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246175</commentid>
    <comment_count>11</comment_count>
      <attachid>293335</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-30 00:49:05 -0700</bug_when>
    <thetext>Comment on attachment 293335
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:8
&gt;&gt; +        When JSON.stringify encounter the value like undefined, which results depend
&gt; 
&gt; /the value like undefined/the undefined value/
&gt; /which results depend/the result depends/

Oops, fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:14
&gt;&gt; +            // https://tc39.github.io/ecma262/#sec-serializejsonobject
&gt; 
&gt; I suggest adding &quot;section 8.b&quot; after the spec url above.

Yeah, nice. Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:18
&gt;&gt; +            // https://tc39.github.io/ecma262/#sec-serializejsonarray
&gt; 
&gt; I suggest adding &quot;section 8.b&quot; after the spec url above.

Fixed.

&gt;&gt; JSTests/stress/json-stringify-with-non-jsarray-array.js:24
&gt;&gt; +shouldBe(JSON.stringify(new Proxy([function() { }], {})), `[null]`);
&gt; 
&gt; Can you also add the test case for JSON.stringify(new Proxy({ value: undefined }, {}))?

Yup, added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246183</commentid>
    <comment_count>12</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-30 02:17:38 -0700</bug_when>
    <thetext>Committed r208123: &lt;http://trac.webkit.org/changeset/208123&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246275</commentid>
    <comment_count>13</comment_count>
      <attachid>293335</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-30 15:22:49 -0700</bug_when>
    <thetext>Comment on attachment 293335
Patch

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

&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:431
&gt; +    , m_index(0)
&gt; +#ifndef NDEBUG
&gt; +    , m_size(0)
&gt; +#endif

It would be better to initialize these in the class definition.

&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:441
&gt; +    , m_isArray(false)
&gt; +    , m_isJSArray(false)
&gt;      , m_index(0)
&gt;  #ifndef NDEBUG
&gt;      , m_size(0)

It would be better to initialize these in the class definition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246827</commentid>
    <comment_count>14</comment_count>
      <attachid>293335</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-31 22:40:50 -0700</bug_when>
    <thetext>Comment on attachment 293335
Patch

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

Thanks, I&apos;ll create a follow-up patch.

&gt;&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:431
&gt;&gt; +#endif
&gt; 
&gt; It would be better to initialize these in the class definition.

Sounds nice. I&apos;ll move this function to the class definition.
And use default initialization for some members (m_index for example).

&gt;&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:441
&gt;&gt;      , m_size(0)
&gt; 
&gt; It would be better to initialize these in the class definition.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278220</commentid>
    <comment_count>15</comment_count>
    <who name="Kamil Frankowicz">kamil.frankowicz</who>
    <bug_when>2017-02-17 06:26:37 -0800</bug_when>
    <thetext>This is CVE-2016-10222.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>293147</attachid>
            <date>2016-10-28 06:02:19 -0700</date>
            <delta_ts>2016-10-28 06:02:19 -0700</delta_ts>
            <desc>POC to trigger SEGFAULT (jsc)</desc>
            <filename>wekbit_string_builder.js</filename>
            <type>application/javascript</type>
            <size>71</size>
            <attacher name="Kamil Frankowicz">kamil.frankowicz</attacher>
            
              <data encoding="base64">ZnVuY3Rpb24gdGVzdCgpe3JldHVybiBKU09OLnN0cmluZ2lmeShuZXcgUHJveHkoWzAwLl9dLHt9
KSk9PTB9KHRlc3QoKSk=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293328</attachid>
            <date>2016-10-29 22:02:02 -0700</date>
            <delta_ts>2016-10-29 23:20:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164123-20161030135808.patch</filename>
            <type>text/plain</type>
            <size>9511</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4MTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NThkOTA4MDU4OTk2NWEzMjBlNzg2MjEzYTY5MDQwOTBiZTU1ZWI0Li5mYzNhM2U4YzU3OGM1MGRl
NDBkY2Y0M2Y0M2YzNDlkNjFhY2VlNDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOSBAQAorMjAxNi0xMC0yOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBKU09OLnN0cmluZ2lmeSBzaG91bGQgaGFuZGxlIFByb3h5IHdoaWNo
IGlzIG5vbiBKU0FycmF5IGJ1dCBpc0FycmF5IGlzIHRydWUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEyMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gSlNPTi5zdHJpbmdpZnkgZW5jb3VudGVy
IHRoZSB2YWx1ZSBsaWtlIHVuZGVmaW5lZCwgd2hpY2ggcmVzdWx0cyBkZXBlbmQKKyAgICAgICAg
b24gdGhlIGNvbnRleHQuIElmIGl0IGlzIHByb2R1Y2VkIHVuZGVyIHRoZSBvYmplY3QgcHJvcGVy
dHkgY29udGV4dCwgd2UgaWdub3JlCisgICAgICAgIHRoYXQgcHJvcGVydHkuIE9uIHRoZSBvdGhl
ciBoYW5kLCBpZiBpdCBpcyBwcm9kdWNlZCB1bmRlciB0aGUgYXJyYXkgZWxlbWVudAorICAgICAg
ICBjb250ZXh0LCB3ZSBwcm9kdWNlICJudWxsIi4KKworICAgICAgICBBdCB0aGF0IHRpbWUsIHdl
IGRlY2lkZSB0aGUgY29udGV4dCBiYXNlZCBvbiB0aGUgYGhvbGRlci0+aW5oZXJpdHMoSlNBcnJh
eTo6aW5mbygpKWAuCisgICAgICAgIEJ1dCBpdCBpcyBub3QgY29ycmVjdCBzaW5jZSB3ZSBoYXZl
IGEgaG9sZGVyIHRoYXQgY3JlYXRlcyB0aGUgYXJyYXkgZWxlbWVudCBjb250ZXh0CisgICAgICAg
IGJ1dCBpdCBpcyBub3QgSlNBcnJheSBzdWJ0eXBlLiBFUzYgUHJveHkgdG8gYW4gYXJyYXkgaXMg
b25lIGV4YW1wbGUuIEluIHRoYXQgY2FzZSwKKyAgICAgICAgYGlzQXJyYXkoZXhlYywgcHJveHkp
YCByZXR1cm5zIGB0cnVlYCwgYnV0IGBpbmhlcml0cyhKU0FycmF5OjppbmZvKCkpYCByZXR1cm5z
IGZhbHNlLgorICAgICAgICBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhpcyBgaXNBcnJheSgpYCB2
YWx1ZSBpbiBTdHJpbmdpZmllcjo6SG9sZGVyLCB3ZSBzaG91bGQgcmV1c2UKKyAgICAgICAgdGhp
cyBoZXJlLiBBbmQgdGhpcyBpcyB0aGUgY29ycmVjdCBiZWhhdmlvciBpbiB0aGUgRVM2IHNwZWMu
CisKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpTdHJp
bmdpZmllcjo6SG9sZGVyOjppc0FycmF5KToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OnN0
cmluZ2lmeSk6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjphcHBlbmRTdHJpbmdpZmllZFZh
bHVlKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OkhvbGRlcjo6SG9sZGVyKToKKyAgICAg
ICAgKEpTQzo6U3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5KToKKwogMjAx
Ni0xMC0yOSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZSBz
aG91bGQgaGF2ZSBhIHdheSBvZiBwcm9maWxpbmcgd2hlbiBhIGdldF9ieV9pZCBpcyBwdXJlIGFu
ZCB0byBlbWl0IGEgUHVyZUdldEJ5SWQgaW4gdGhlIERGRy9GVEwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKaW5kZXggMWQ3NTk2MmU3YTg1OTBkMDViNGE4
YTYzNGJjZTFhNTkyMjMyODA0Ny4uMjlkOWU3N2RlNDEwNWQ1MzExYzBmMjM1ZTlmNTkwMzIwODA2
NzM2MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVj
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAK
QEAgLTkzLDkgKzkzLDEyIEBAIGNsYXNzIFN0cmluZ2lmaWVyIHsKIHByaXZhdGU6CiAgICAgY2xh
c3MgSG9sZGVyIHsKICAgICBwdWJsaWM6CisgICAgICAgIGVudW0gUm9vdEhvbGRlclRhZyB7IFJv
b3RIb2xkZXIgfTsKICAgICAgICAgSG9sZGVyKFZNJiwgRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsK
KyAgICAgICAgSG9sZGVyKFJvb3RIb2xkZXJUYWcsIFZNJiwgSlNPYmplY3QqKTsKIAogICAgICAg
ICBKU09iamVjdCogb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3QuZ2V0KCk7IH0KKyAg
ICAgICAgYm9vbCBpc0FycmF5KCkgY29uc3QgeyByZXR1cm4gbV9pc0FycmF5OyB9CiAKICAgICAg
ICAgYm9vbCBhcHBlbmROZXh0UHJvcGVydHkoU3RyaW5naWZpZXImLCBTdHJpbmdCdWlsZGVyJik7
CiAKQEAgLTExNCw3ICsxMTcsNyBAQCBjbGFzcyBTdHJpbmdpZmllciB7CiAgICAgSlNWYWx1ZSB0
b0pTT05JbXBsKEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUgdG9KU09ORnVuY3Rpb24sIGNvbnN0IFBy
b3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCYpOwogCiAgICAgZW51bSBTdHJpbmdpZnlSZXN1bHQg
eyBTdHJpbmdpZnlGYWlsZWQsIFN0cmluZ2lmeVN1Y2NlZWRlZCwgU3RyaW5naWZ5RmFpbGVkRHVl
VG9VbmRlZmluZWRPclN5bWJvbFZhbHVlIH07Ci0gICAgU3RyaW5naWZ5UmVzdWx0IGFwcGVuZFN0
cmluZ2lmaWVkVmFsdWUoU3RyaW5nQnVpbGRlciYsIEpTVmFsdWUsIEpTT2JqZWN0KiBob2xkZXIs
IGNvbnN0IFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCYpOworICAgIFN0cmluZ2lmeVJlc3Vs
dCBhcHBlbmRTdHJpbmdpZmllZFZhbHVlKFN0cmluZ0J1aWxkZXImLCBKU1ZhbHVlLCBjb25zdCBI
b2xkZXImLCBjb25zdCBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwmKTsKIAogICAgIGJvb2wg
d2lsbEluZGVudCgpIGNvbnN0OwogICAgIHZvaWQgaW5kZW50KCk7CkBAIC0yNTksNyArMjYyLDgg
QEAgTG9jYWw8VW5rbm93bj4gU3RyaW5naWZpZXI6OnN0cmluZ2lmeShIYW5kbGU8VW5rbm93bj4g
dmFsdWUpCiAgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmVtcHR5
SWRlbnRpZmllciwgdmFsdWUuZ2V0KCkpOwogCiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0g
ICAgaWYgKGFwcGVuZFN0cmluZ2lmaWVkVmFsdWUocmVzdWx0LCB2YWx1ZS5nZXQoKSwgb2JqZWN0
LCBlbXB0eVByb3BlcnR5TmFtZSkgIT0gU3RyaW5naWZ5U3VjY2VlZGVkKQorICAgIEhvbGRlciBy
b290KEhvbGRlcjo6Um9vdEhvbGRlciwgdm0sIG9iamVjdCk7CisgICAgaWYgKGFwcGVuZFN0cmlu
Z2lmaWVkVmFsdWUocmVzdWx0LCB2YWx1ZS5nZXQoKSwgcm9vdCwgZW1wdHlQcm9wZXJ0eU5hbWUp
ICE9IFN0cmluZ2lmeVN1Y2NlZWRlZCkKICAgICAgICAgcmV0dXJuIExvY2FsPFVua25vd24+KHZt
LCBqc1VuZGVmaW5lZCgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBMb2NhbDxV
bmtub3duPih2bSwganNOdWxsKCkpKTsKIApAQCAtMjk2LDcgKzMwMCw3IEBAIEpTVmFsdWUgU3Ry
aW5naWZpZXI6OnRvSlNPTkltcGwoSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSB0b0pTT05GdW5jdGlv
biwgY29uc3QgUHJvCiAgICAgcmV0dXJuIGNhbGwobV9leGVjLCBhc09iamVjdCh0b0pTT05GdW5j
dGlvbiksIGNhbGxUeXBlLCBjYWxsRGF0YSwgdmFsdWUsIGFyZ3MpOwogfQogCi1TdHJpbmdpZmll
cjo6U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVyOjphcHBlbmRTdHJpbmdpZmllZFZhbHVlKFN0
cmluZ0J1aWxkZXImIGJ1aWxkZXIsIEpTVmFsdWUgdmFsdWUsIEpTT2JqZWN0KiBob2xkZXIsIGNv
bnN0IFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCYgcHJvcGVydHlOYW1lKQorU3RyaW5naWZp
ZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdpZmllcjo6YXBwZW5kU3RyaW5naWZpZWRWYWx1ZShT
dHJpbmdCdWlsZGVyJiBidWlsZGVyLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBIb2xkZXImIGhvbGRl
ciwgY29uc3QgUHJvcGVydHlOYW1lRm9yRnVuY3Rpb25DYWxsJiBwcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgVk0mIHZtID0gbV9leGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTMxMCwxMSArMzE0LDExIEBAIFN0cmluZ2lmaWVyOjpTdHJpbmdpZnlS
ZXN1bHQgU3RyaW5naWZpZXI6OmFwcGVuZFN0cmluZ2lmaWVkVmFsdWUoU3RyaW5nQnVpbGRlciYK
ICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICAgICAgYXJncy5hcHBlbmQo
cHJvcGVydHlOYW1lLnZhbHVlKG1fZXhlYykpOwogICAgICAgICBhcmdzLmFwcGVuZCh2YWx1ZSk7
Ci0gICAgICAgIHZhbHVlID0gY2FsbChtX2V4ZWMsIG1fcmVwbGFjZXIuZ2V0KCksIG1fcmVwbGFj
ZXJDYWxsVHlwZSwgbV9yZXBsYWNlckNhbGxEYXRhLCBob2xkZXIsIGFyZ3MpOworICAgICAgICB2
YWx1ZSA9IGNhbGwobV9leGVjLCBtX3JlcGxhY2VyLmdldCgpLCBtX3JlcGxhY2VyQ2FsbFR5cGUs
IG1fcmVwbGFjZXJDYWxsRGF0YSwgaG9sZGVyLm9iamVjdCgpLCBhcmdzKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgU3RyaW5naWZ5RmFpbGVkKTsKICAgICB9CiAKLSAgICBp
ZiAoKHZhbHVlLmlzVW5kZWZpbmVkKCkgfHwgdmFsdWUuaXNTeW1ib2woKSkgJiYgIWhvbGRlci0+
aW5oZXJpdHMoSlNBcnJheTo6aW5mbygpKSkKKyAgICBpZiAoKHZhbHVlLmlzVW5kZWZpbmVkKCkg
fHwgdmFsdWUuaXNTeW1ib2woKSkgJiYgIWhvbGRlci5pc0FycmF5KCkpCiAgICAgICAgIHJldHVy
biBTdHJpbmdpZnlGYWlsZWREdWVUb1VuZGVmaW5lZE9yU3ltYm9sVmFsdWU7CiAKICAgICBpZiAo
dmFsdWUuaXNOdWxsKCkpIHsKQEAgLTM1OSw3ICszNjMsNyBAQCBTdHJpbmdpZmllcjo6U3RyaW5n
aWZ5UmVzdWx0IFN0cmluZ2lmaWVyOjphcHBlbmRTdHJpbmdpZmllZFZhbHVlKFN0cmluZ0J1aWxk
ZXImCiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBpZiAob2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5nZXRDYWxsRGF0YShvYmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZTo6Tm9uZSkgewot
ICAgICAgICBpZiAoaG9sZGVyLT5pbmhlcml0cyhKU0FycmF5OjppbmZvKCkpKSB7CisgICAgICAg
IGlmIChob2xkZXIuaXNBcnJheSgpKSB7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoIm51bGwiKTsKICAgICAgICAgICAgIHJldHVybiBTdHJpbmdpZnlTdWNjZWVkZWQ7CiAgICAg
ICAgIH0KQEAgLTQxOSw3ICs0MjMsMTggQEAgaW5saW5lIHZvaWQgU3RyaW5naWZpZXI6OnN0YXJ0
TmV3TGluZShTdHJpbmdCdWlsZGVyJiBidWlsZGVyKSBjb25zdAogCiBpbmxpbmUgU3RyaW5naWZp
ZXI6OkhvbGRlcjo6SG9sZGVyKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2Jq
ZWN0KQogICAgIDogbV9vYmplY3Qodm0sIG9iamVjdCkKLSAgICAsIG1faXNBcnJheShpc0FycmF5
KGV4ZWMsIG9iamVjdCkpCisgICAgLCBtX2lzQXJyYXkoSlNDOjppc0FycmF5KGV4ZWMsIG9iamVj
dCkpCisgICAgLCBtX2luZGV4KDApCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9zaXplKDApCisj
ZW5kaWYKK3sKK30KKworaW5saW5lIFN0cmluZ2lmaWVyOjpIb2xkZXI6OkhvbGRlcihSb290SG9s
ZGVyVGFnLCBWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCisgICAgOiBtX29iamVjdCh2bSwgb2Jq
ZWN0KQorICAgICwgbV9pc0FycmF5KGZhbHNlKQorICAgICwgbV9pc0pTQXJyYXkoZmFsc2UpCiAg
ICAgLCBtX2luZGV4KDApCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9zaXplKDApCkBAIC00NDEs
OCArNDU2LDEwIEBAIGJvb2wgU3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5
KFN0cmluZ2lmaWVyJiBzdHJpbmdpZmllciwgU3RyaW5nQnVpCiAgICAgICAgICAgICBtX2lzSlNB
cnJheSA9IGlzSlNBcnJheShtX29iamVjdC5nZXQoKSk7CiAgICAgICAgICAgICBpZiAobV9pc0pT
QXJyYXkpCiAgICAgICAgICAgICAgICAgbV9zaXplID0gYXNBcnJheShtX29iamVjdC5nZXQoKSkt
Pmxlbmd0aCgpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAgICAgbV9zaXplID0gbV9vYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCdbJyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoc3RyaW5naWZpZXIu
bV91c2luZ0FycmF5UmVwbGFjZXIpCkBAIC00OTIsNyArNTA5LDggQEAgYm9vbCBTdHJpbmdpZmll
cjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcGVydHkoU3RyaW5naWZpZXImIHN0cmluZ2lmaWVyLCBT
dHJpbmdCdWkKICAgICAgICAgc3RyaW5naWZpZXIuc3RhcnROZXdMaW5lKGJ1aWxkZXIpOwogCiAg
ICAgICAgIC8vIEFwcGVuZCB0aGUgc3RyaW5naWZpZWQgdmFsdWUuCi0gICAgICAgIHN0cmluZ2lm
eVJlc3VsdCA9IHN0cmluZ2lmaWVyLmFwcGVuZFN0cmluZ2lmaWVkVmFsdWUoYnVpbGRlciwgdmFs
dWUsIG1fb2JqZWN0LmdldCgpLCBpbmRleCk7CisgICAgICAgIHN0cmluZ2lmeVJlc3VsdCA9IHN0
cmluZ2lmaWVyLmFwcGVuZFN0cmluZ2lmaWVkVmFsdWUoYnVpbGRlciwgdmFsdWUsICp0aGlzLCBp
bmRleCk7CisgICAgICAgIEFTU0VSVChzdHJpbmdpZnlSZXN1bHQgIT0gU3RyaW5naWZ5RmFpbGVk
RHVlVG9VbmRlZmluZWRPclN5bWJvbFZhbHVlKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBH
ZXQgdGhlIHZhbHVlLgogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChtX29iamVjdC5nZXQoKSwg
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7CkBAIC01MTYsNyArNTM0LDcg
QEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcGVydHkoU3RyaW5naWZp
ZXImIHN0cmluZ2lmaWVyLCBTdHJpbmdCdWkKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcg
Jyk7CiAKICAgICAgICAgLy8gQXBwZW5kIHRoZSBzdHJpbmdpZmllZCB2YWx1ZS4KLSAgICAgICAg
c3RyaW5naWZ5UmVzdWx0ID0gc3RyaW5naWZpZXIuYXBwZW5kU3RyaW5naWZpZWRWYWx1ZShidWls
ZGVyLCB2YWx1ZSwgbV9vYmplY3QuZ2V0KCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHN0cmlu
Z2lmeVJlc3VsdCA9IHN0cmluZ2lmaWVyLmFwcGVuZFN0cmluZ2lmaWVkVmFsdWUoYnVpbGRlciwg
dmFsdWUsICp0aGlzLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KIAogICAgIC8vIEZyb20gdGhpcyBw
b2ludCBvbiwgbm8gYWNjZXNzIHRvIHRoZSB0aGlzIHBvaW50ZXIgb3IgdG8gYW55IG1lbWJlcnMs
IGJlY2F1c2UgdGhlCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDI4YTUxZmIxMzFiN2UxYTZkOGRkODJjYjAyZDMxZmE2YTA2Y2FkN2IuLjZj
Zjg5ZDhiOGNlYjQ2YmQzNDJiOWE2YzhjNjc5Y2I3Yzk4YTMzZDYgMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MTYtMTAtMjkgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAg
ICAgSlNPTi5zdHJpbmdpZnkgc2hvdWxkIGhhbmRsZSBQcm94eSB3aGljaCBpcyBub24gSlNBcnJh
eSBidXQgaXNBcnJheSBpcyB0cnVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjQxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHN0cmVzcy9qc29uLXN0cmluZ2lmeS13aXRoLW5vbi1qc2FycmF5LWFy
cmF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKHNob3VsZEJlLkpT
T04uc3RyaW5naWZ5Lm5ldy5Qcm94eSk6CisKIDIwMTYtMTAtMjkgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxkIGhhdmUgYSB3YXkgb2YgcHJvZmls
aW5nIHdoZW4gYSBnZXRfYnlfaWQgaXMgcHVyZSBhbmQgdG8gZW1pdCBhIFB1cmVHZXRCeUlkIGlu
IHRoZSBERkcvRlRMCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9qc29uLXN0cmluZ2lmeS13
aXRoLW5vbi1qc2FycmF5LWFycmF5LmpzIGIvSlNUZXN0cy9zdHJlc3MvanNvbi1zdHJpbmdpZnkt
d2l0aC1ub24tanNhcnJheS1hcnJheS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjc2ZDZmMDRlZTdmMWJkOTU5
YWFhNjVlNGVjNWYyNzk5Njg0ZWVjCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3Mv
anNvbi1zdHJpbmdpZnktd2l0aC1ub24tanNhcnJheS1hcnJheS5qcwpAQCAtMCwwICsxLDM1IEBA
CitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKQoreworICAgIGlmIChhY3R1YWwg
IT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJhZCB2YWx1ZTogJHtTdHJp
bmcoYWN0dWFsKX1gKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JNZXNz
YWdlKQoreworICAgIHZhciBlcnJvclRocm93biA9IGZhbHNlOworICAgIHZhciBlcnJvciA9IG51
bGw7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgZXJyb3JUaHJvd24gPSB0cnVlOworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorICAgIGlm
ICghZXJyb3JUaHJvd24pCisgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IHRocm93bicpOwor
ICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcihgYmFkIGVycm9yOiAke1N0cmluZyhlcnJvcil9YCk7Cit9CisKK3Nob3VsZEJlKEpT
T04uc3RyaW5naWZ5KG5ldyBQcm94eShbdW5kZWZpbmVkXSwge30pKSwgYFtudWxsXWApOworc2hv
dWxkQmUoSlNPTi5zdHJpbmdpZnkobmV3IFByb3h5KFtmdW5jdGlvbigpIHsgfV0sIHt9KSksIGBb
bnVsbF1gKTsKKworc2hvdWxkVGhyb3coZnVuY3Rpb24gKCkgeworICAgIGxldCBwcm94eSA9IG5l
dyBQcm94eShbXSwgeworICAgICAgICBnZXQodGhlVGFyZ2V0LCBwcm9wTmFtZSkgeworICAgICAg
ICAgICAgaWYgKHByb3BOYW1lID09PSAnbGVuZ3RoJykKKyAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoJ29rJyk7CisgICAgICAgICAgICByZXR1cm4gNDI7CisgICAgICAgIH0KKyAgICB9
KTsKKyAgICBKU09OLnN0cmluZ2lmeShwcm94eSk7Cit9LCBgRXJyb3I6IG9rYCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293335</attachid>
            <date>2016-10-29 23:20:53 -0700</date>
            <delta_ts>2016-10-30 00:03:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164123-20161030151659.patch</filename>
            <type>text/plain</type>
            <size>10330</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4MTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NThkOTA4MDU4OTk2NWEzMjBlNzg2MjEzYTY5MDQwOTBiZTU1ZWI0Li5hMGRiMTA5NmEyMWExNjFk
YmFiM2NkZTc2ZjJlMGQ1ZDA4Yjc2MzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOCBAQAorMjAxNi0xMC0yOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbSlNDXSBKU09OLnN0cmluZ2lmeSBzaG91bGQgaGFuZGxlIFByb3h5
IHdoaWNoIGlzIG5vbiBKU0FycmF5IGJ1dCBpc0FycmF5IGlzIHRydWUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEyMworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gSlNPTi5zdHJpbmdpZnkgZW5j
b3VudGVyIHRoZSB2YWx1ZSBsaWtlIHVuZGVmaW5lZCwgd2hpY2ggcmVzdWx0cyBkZXBlbmQKKyAg
ICAgICAgb24gdGhlIGNvbnRleHQuIElmIGl0IGlzIHByb2R1Y2VkIHVuZGVyIHRoZSBvYmplY3Qg
cHJvcGVydHkgY29udGV4dCwgd2UgaWdub3JlCisgICAgICAgIHRoYXQgcHJvcGVydHkuIE9uIHRo
ZSBvdGhlciBoYW5kLCBpZiBpdCBpcyBwcm9kdWNlZCB1bmRlciB0aGUgYXJyYXkgZWxlbWVudAor
ICAgICAgICBjb250ZXh0LCB3ZSBwcm9kdWNlICJudWxsIi4KKworICAgICAgICBGb3IgZXhhbXBs
ZSwKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXNl
cmlhbGl6ZWpzb25vYmplY3QKKyAgICAgICAgICAgIC8vIFNraXAgdGhlIHByb3BlcnR5IHRoYXQg
dmFsdWUgaXMgdW5kZWZpbmVkLgorICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoeyB2YWx1ZTog
dW5kZWZpbmVkIH0pOyAgLy8gPT4gInt9IgorCisgICAgICAgICAgICAvLyBodHRwczovL3RjMzku
Z2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zZXJpYWxpemVqc29uYXJyYXkKKyAgICAgICAgICAgIC8v
IFdyaXRlICJudWxsIiB3aGVuIHRoZSBlbGVtZW50IGlzIHVuZGVmaW5lZC4KKyAgICAgICAgICAg
IEpTT04uc3RyaW5naWZ5KFt1bmRlZmluZWRdKTsgICAgICAgICAgIC8vID0+ICJbbnVsbF0iCisK
KyAgICAgICAgQXQgdGhhdCB0aW1lLCB3ZSBkZWNpZGUgdGhlIGNvbnRleHQgYmFzZWQgb24gdGhl
IGBob2xkZXItPmluaGVyaXRzKEpTQXJyYXk6OmluZm8oKSlgLgorICAgICAgICBCdXQgaXQgaXMg
bm90IGNvcnJlY3Qgc2luY2Ugd2UgaGF2ZSBhIGhvbGRlciB0aGF0IGNyZWF0ZXMgdGhlIGFycmF5
IGVsZW1lbnQgY29udGV4dAorICAgICAgICBidXQgaXQgaXMgbm90IEpTQXJyYXkgc3VidHlwZS4g
RVM2IFByb3h5IHRvIGFuIGFycmF5IGlzIG9uZSBleGFtcGxlLiBJbiB0aGF0IGNhc2UsCisgICAg
ICAgIGBpc0FycmF5KGV4ZWMsIHByb3h5KWAgcmV0dXJucyBgdHJ1ZWAsIGJ1dCBgaW5oZXJpdHMo
SlNBcnJheTo6aW5mbygpKWAgcmV0dXJucyBmYWxzZS4KKyAgICAgICAgU2luY2Ugd2UgYWxyZWFk
eSBoYXZlIHRoaXMgYGlzQXJyYXkoKWAgdmFsdWUgaW4gU3RyaW5naWZpZXI6OkhvbGRlciwgd2Ug
c2hvdWxkIHJldXNlCisgICAgICAgIHRoaXMgaGVyZS4gQW5kIHRoaXMgaXMgdGhlIGNvcnJlY3Qg
YmVoYXZpb3IgaW4gdGhlIEVTNiBzcGVjLgorCisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OkhvbGRlcjo6aXNBcnJheSk6CisgICAg
ICAgIChKU0M6OlN0cmluZ2lmaWVyOjpzdHJpbmdpZnkpOgorICAgICAgICAoSlNDOjpTdHJpbmdp
Zmllcjo6YXBwZW5kU3RyaW5naWZpZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVy
OjpIb2xkZXI6OkhvbGRlcik6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpIb2xkZXI6OmFw
cGVuZE5leHRQcm9wZXJ0eSk6CisKIDIwMTYtMTAtMjkgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBh
cHBsZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxkIGhhdmUgYSB3YXkgb2YgcHJvZmlsaW5nIHdo
ZW4gYSBnZXRfYnlfaWQgaXMgcHVyZSBhbmQgdG8gZW1pdCBhIFB1cmVHZXRCeUlkIGluIHRoZSBE
RkcvRlRMCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCmlu
ZGV4IDFkNzU5NjJlN2E4NTkwZDA1YjRhOGE2MzRiY2UxYTU5MjIzMjgwNDcuLmJiZjkyYjE1ODUx
MzI4ZWYxN2VkYTgwNmQxMzI0YWY1YjhmY2Q2OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCkBAIC05MywxNiArOTMsMTkgQEAgY2xhc3MgU3RyaW5n
aWZpZXIgewogcHJpdmF0ZToKICAgICBjbGFzcyBIb2xkZXIgewogICAgIHB1YmxpYzoKKyAgICAg
ICAgZW51bSBSb290SG9sZGVyVGFnIHsgUm9vdEhvbGRlciB9OwogICAgICAgICBIb2xkZXIoVk0m
LCBFeGVjU3RhdGUqLCBKU09iamVjdCopOworICAgICAgICBIb2xkZXIoUm9vdEhvbGRlclRhZywg
Vk0mLCBKU09iamVjdCopOwogCiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QoKSBjb25zdCB7IHJl
dHVybiBtX29iamVjdC5nZXQoKTsgfQorICAgICAgICBib29sIGlzQXJyYXkoKSBjb25zdCB7IHJl
dHVybiBtX2lzQXJyYXk7IH0KIAogICAgICAgICBib29sIGFwcGVuZE5leHRQcm9wZXJ0eShTdHJp
bmdpZmllciYsIFN0cmluZ0J1aWxkZXImKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIExvY2Fs
PEpTT2JqZWN0PiBtX29iamVjdDsKICAgICAgICAgY29uc3QgYm9vbCBtX2lzQXJyYXk7Ci0gICAg
ICAgIGJvb2wgbV9pc0pTQXJyYXk7CisgICAgICAgIGNvbnN0IGJvb2wgbV9pc0pTQXJyYXk7CiAg
ICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKICAgICAg
ICAgUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4gbV9wcm9wZXJ0eU5hbWVzOwpAQCAtMTE0
LDcgKzExNyw3IEBAIGNsYXNzIFN0cmluZ2lmaWVyIHsKICAgICBKU1ZhbHVlIHRvSlNPTkltcGwo
SlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSB0b0pTT05GdW5jdGlvbiwgY29uc3QgUHJvcGVydHlOYW1l
Rm9yRnVuY3Rpb25DYWxsJik7CiAKICAgICBlbnVtIFN0cmluZ2lmeVJlc3VsdCB7IFN0cmluZ2lm
eUZhaWxlZCwgU3RyaW5naWZ5U3VjY2VlZGVkLCBTdHJpbmdpZnlGYWlsZWREdWVUb1VuZGVmaW5l
ZE9yU3ltYm9sVmFsdWUgfTsKLSAgICBTdHJpbmdpZnlSZXN1bHQgYXBwZW5kU3RyaW5naWZpZWRW
YWx1ZShTdHJpbmdCdWlsZGVyJiwgSlNWYWx1ZSwgSlNPYmplY3QqIGhvbGRlciwgY29uc3QgUHJv
cGVydHlOYW1lRm9yRnVuY3Rpb25DYWxsJik7CisgICAgU3RyaW5naWZ5UmVzdWx0IGFwcGVuZFN0
cmluZ2lmaWVkVmFsdWUoU3RyaW5nQnVpbGRlciYsIEpTVmFsdWUsIGNvbnN0IEhvbGRlciYsIGNv
bnN0IFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCYpOwogCiAgICAgYm9vbCB3aWxsSW5kZW50
KCkgY29uc3Q7CiAgICAgdm9pZCBpbmRlbnQoKTsKQEAgLTI1OSw3ICsyNjIsOCBAQCBMb2NhbDxV
bmtub3duPiBTdHJpbmdpZmllcjo6c3RyaW5naWZ5KEhhbmRsZTxVbmtub3duPiB2YWx1ZSkKICAg
ICBvYmplY3QtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVy
LCB2YWx1ZS5nZXQoKSk7CiAKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICBpZiAoYXBw
ZW5kU3RyaW5naWZpZWRWYWx1ZShyZXN1bHQsIHZhbHVlLmdldCgpLCBvYmplY3QsIGVtcHR5UHJv
cGVydHlOYW1lKSAhPSBTdHJpbmdpZnlTdWNjZWVkZWQpCisgICAgSG9sZGVyIHJvb3QoSG9sZGVy
OjpSb290SG9sZGVyLCB2bSwgb2JqZWN0KTsKKyAgICBpZiAoYXBwZW5kU3RyaW5naWZpZWRWYWx1
ZShyZXN1bHQsIHZhbHVlLmdldCgpLCByb290LCBlbXB0eVByb3BlcnR5TmFtZSkgIT0gU3RyaW5n
aWZ5U3VjY2VlZGVkKQogICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4odm0sIGpzVW5kZWZp
bmVkKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIExvY2FsPFVua25vd24+KHZt
LCBqc051bGwoKSkpOwogCkBAIC0yOTYsNyArMzAwLDcgQEAgSlNWYWx1ZSBTdHJpbmdpZmllcjo6
dG9KU09OSW1wbChKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIHRvSlNPTkZ1bmN0aW9uLCBjb25zdCBQ
cm8KICAgICByZXR1cm4gY2FsbChtX2V4ZWMsIGFzT2JqZWN0KHRvSlNPTkZ1bmN0aW9uKSwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCB2YWx1ZSwgYXJncyk7CiB9CiAKLVN0cmluZ2lmaWVyOjpTdHJpbmdp
ZnlSZXN1bHQgU3RyaW5naWZpZXI6OmFwcGVuZFN0cmluZ2lmaWVkVmFsdWUoU3RyaW5nQnVpbGRl
ciYgYnVpbGRlciwgSlNWYWx1ZSB2YWx1ZSwgSlNPYmplY3QqIGhvbGRlciwgY29uc3QgUHJvcGVy
dHlOYW1lRm9yRnVuY3Rpb25DYWxsJiBwcm9wZXJ0eU5hbWUpCitTdHJpbmdpZmllcjo6U3RyaW5n
aWZ5UmVzdWx0IFN0cmluZ2lmaWVyOjphcHBlbmRTdHJpbmdpZmllZFZhbHVlKFN0cmluZ0J1aWxk
ZXImIGJ1aWxkZXIsIEpTVmFsdWUgdmFsdWUsIGNvbnN0IEhvbGRlciYgaG9sZGVyLCBjb25zdCBQ
cm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwmIHByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0g
PSBtX2V4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtMzEwLDExICszMTQsMTEgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJp
bmdpZmllcjo6YXBwZW5kU3RyaW5naWZpZWRWYWx1ZShTdHJpbmdCdWlsZGVyJgogICAgICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgICAgICBhcmdzLmFwcGVuZChwcm9wZXJ0eU5h
bWUudmFsdWUobV9leGVjKSk7CiAgICAgICAgIGFyZ3MuYXBwZW5kKHZhbHVlKTsKLSAgICAgICAg
dmFsdWUgPSBjYWxsKG1fZXhlYywgbV9yZXBsYWNlci5nZXQoKSwgbV9yZXBsYWNlckNhbGxUeXBl
LCBtX3JlcGxhY2VyQ2FsbERhdGEsIGhvbGRlciwgYXJncyk7CisgICAgICAgIHZhbHVlID0gY2Fs
bChtX2V4ZWMsIG1fcmVwbGFjZXIuZ2V0KCksIG1fcmVwbGFjZXJDYWxsVHlwZSwgbV9yZXBsYWNl
ckNhbGxEYXRhLCBob2xkZXIub2JqZWN0KCksIGFyZ3MpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBTdHJpbmdpZnlGYWlsZWQpOwogICAgIH0KIAotICAgIGlmICgodmFsdWUu
aXNVbmRlZmluZWQoKSB8fCB2YWx1ZS5pc1N5bWJvbCgpKSAmJiAhaG9sZGVyLT5pbmhlcml0cyhK
U0FycmF5OjppbmZvKCkpKQorICAgIGlmICgodmFsdWUuaXNVbmRlZmluZWQoKSB8fCB2YWx1ZS5p
c1N5bWJvbCgpKSAmJiAhaG9sZGVyLmlzQXJyYXkoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZ2lm
eUZhaWxlZER1ZVRvVW5kZWZpbmVkT3JTeW1ib2xWYWx1ZTsKIAogICAgIGlmICh2YWx1ZS5pc051
bGwoKSkgewpAQCAtMzU5LDcgKzM2Myw3IEBAIFN0cmluZ2lmaWVyOjpTdHJpbmdpZnlSZXN1bHQg
U3RyaW5naWZpZXI6OmFwcGVuZFN0cmluZ2lmaWVkVmFsdWUoU3RyaW5nQnVpbGRlciYKIAogICAg
IENhbGxEYXRhIGNhbGxEYXRhOwogICAgIGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENh
bGxEYXRhKG9iamVjdCwgY2FsbERhdGEpICE9IENhbGxUeXBlOjpOb25lKSB7Ci0gICAgICAgIGlm
IChob2xkZXItPmluaGVyaXRzKEpTQXJyYXk6OmluZm8oKSkpIHsKKyAgICAgICAgaWYgKGhvbGRl
ci5pc0FycmF5KCkpIHsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgibnVsbCIp
OwogICAgICAgICAgICAgcmV0dXJuIFN0cmluZ2lmeVN1Y2NlZWRlZDsKICAgICAgICAgfQpAQCAt
NDE5LDcgKzQyMywxOSBAQCBpbmxpbmUgdm9pZCBTdHJpbmdpZmllcjo6c3RhcnROZXdMaW5lKFN0
cmluZ0J1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiAKIGlubGluZSBTdHJpbmdpZmllcjo6SG9sZGVy
OjpIb2xkZXIoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCiAgICAg
OiBtX29iamVjdCh2bSwgb2JqZWN0KQotICAgICwgbV9pc0FycmF5KGlzQXJyYXkoZXhlYywgb2Jq
ZWN0KSkKKyAgICAsIG1faXNBcnJheShKU0M6OmlzQXJyYXkoZXhlYywgb2JqZWN0KSkKKyAgICAs
IG1faXNKU0FycmF5KG1faXNBcnJheSAmJiBpc0pTQXJyYXkob2JqZWN0KSkKKyAgICAsIG1faW5k
ZXgoMCkKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX3NpemUoMCkKKyNlbmRpZgoreworfQorCitp
bmxpbmUgU3RyaW5naWZpZXI6OkhvbGRlcjo6SG9sZGVyKFJvb3RIb2xkZXJUYWcsIFZNJiB2bSwg
SlNPYmplY3QqIG9iamVjdCkKKyAgICA6IG1fb2JqZWN0KHZtLCBvYmplY3QpCisgICAgLCBtX2lz
QXJyYXkoZmFsc2UpCisgICAgLCBtX2lzSlNBcnJheShmYWxzZSkKICAgICAsIG1faW5kZXgoMCkK
ICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX3NpemUoMCkKQEAgLTQzOCwxMSArNDU0LDEyIEBAIGJv
b2wgU3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5KFN0cmluZ2lmaWVyJiBz
dHJpbmdpZmllciwgU3RyaW5nQnVpCiAgICAgLy8gRmlyc3QgdGltZSB0aHJvdWdoLCBpbml0aWFs
aXplLgogICAgIGlmICghbV9pbmRleCkgewogICAgICAgICBpZiAobV9pc0FycmF5KSB7Ci0gICAg
ICAgICAgICBtX2lzSlNBcnJheSA9IGlzSlNBcnJheShtX29iamVjdC5nZXQoKSk7CiAgICAgICAg
ICAgICBpZiAobV9pc0pTQXJyYXkpCiAgICAgICAgICAgICAgICAgbV9zaXplID0gYXNBcnJheSht
X29iamVjdC5nZXQoKSktPmxlbmd0aCgpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgbV9zaXplID0gbV9vYmplY3QtPmdldChleGVjLCB2bS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCdbJyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBp
ZiAoc3RyaW5naWZpZXIubV91c2luZ0FycmF5UmVwbGFjZXIpCkBAIC00OTIsNyArNTA5LDggQEAg
Ym9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcGVydHkoU3RyaW5naWZpZXIm
IHN0cmluZ2lmaWVyLCBTdHJpbmdCdWkKICAgICAgICAgc3RyaW5naWZpZXIuc3RhcnROZXdMaW5l
KGJ1aWxkZXIpOwogCiAgICAgICAgIC8vIEFwcGVuZCB0aGUgc3RyaW5naWZpZWQgdmFsdWUuCi0g
ICAgICAgIHN0cmluZ2lmeVJlc3VsdCA9IHN0cmluZ2lmaWVyLmFwcGVuZFN0cmluZ2lmaWVkVmFs
dWUoYnVpbGRlciwgdmFsdWUsIG1fb2JqZWN0LmdldCgpLCBpbmRleCk7CisgICAgICAgIHN0cmlu
Z2lmeVJlc3VsdCA9IHN0cmluZ2lmaWVyLmFwcGVuZFN0cmluZ2lmaWVkVmFsdWUoYnVpbGRlciwg
dmFsdWUsICp0aGlzLCBpbmRleCk7CisgICAgICAgIEFTU0VSVChzdHJpbmdpZnlSZXN1bHQgIT0g
U3RyaW5naWZ5RmFpbGVkRHVlVG9VbmRlZmluZWRPclN5bWJvbFZhbHVlKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICAvLyBHZXQgdGhlIHZhbHVlLgogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCht
X29iamVjdC5nZXQoKSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7CkBA
IC01MTYsNyArNTM0LDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJv
cGVydHkoU3RyaW5naWZpZXImIHN0cmluZ2lmaWVyLCBTdHJpbmdCdWkKICAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCcgJyk7CiAKICAgICAgICAgLy8gQXBwZW5kIHRoZSBzdHJpbmdpZmllZCB2
YWx1ZS4KLSAgICAgICAgc3RyaW5naWZ5UmVzdWx0ID0gc3RyaW5naWZpZXIuYXBwZW5kU3RyaW5n
aWZpZWRWYWx1ZShidWlsZGVyLCB2YWx1ZSwgbV9vYmplY3QuZ2V0KCksIHByb3BlcnR5TmFtZSk7
CisgICAgICAgIHN0cmluZ2lmeVJlc3VsdCA9IHN0cmluZ2lmaWVyLmFwcGVuZFN0cmluZ2lmaWVk
VmFsdWUoYnVpbGRlciwgdmFsdWUsICp0aGlzLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KIAogICAg
IC8vIEZyb20gdGhpcyBwb2ludCBvbiwgbm8gYWNjZXNzIHRvIHRoZSB0aGlzIHBvaW50ZXIgb3Ig
dG8gYW55IG1lbWJlcnMsIGJlY2F1c2UgdGhlCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxv
ZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDI4YTUxZmIxMzFiN2UxYTZkOGRkODJjYjAyZDMx
ZmE2YTA2Y2FkN2IuLmJmNGQyYzEzOGUxODdjZTg4OGZmMDg5NTdlZGI5YWE2MjY0NWY2NmEgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTYtMTAtMjkgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgW0pTQ10gSlNPTi5zdHJpbmdpZnkgc2hvdWxkIGhhbmRsZSBQcm94
eSB3aGljaCBpcyBub24gSlNBcnJheSBidXQgaXNBcnJheSBpcyB0cnVlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9qc29uLXN0cmluZ2lm
eS13aXRoLW5vbi1qc2FycmF5LWFycmF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToK
KyAgICAgICAgKHNob3VsZEJlLkpTT04uc3RyaW5naWZ5Lm5ldy5Qcm94eSk6CisKIDIwMTYtMTAt
MjkgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxk
IGhhdmUgYSB3YXkgb2YgcHJvZmlsaW5nIHdoZW4gYSBnZXRfYnlfaWQgaXMgcHVyZSBhbmQgdG8g
ZW1pdCBhIFB1cmVHZXRCeUlkIGluIHRoZSBERkcvRlRMCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0
cmVzcy9qc29uLXN0cmluZ2lmeS13aXRoLW5vbi1qc2FycmF5LWFycmF5LmpzIGIvSlNUZXN0cy9z
dHJlc3MvanNvbi1zdHJpbmdpZnktd2l0aC1ub24tanNhcnJheS1hcnJheS5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xZjc2ZDZmMDRlZTdmMWJkOTU5YWFhNjVlNGVjNWYyNzk5Njg0ZWVjCi0tLSAvZGV2L251bGwK
KysrIGIvSlNUZXN0cy9zdHJlc3MvanNvbi1zdHJpbmdpZnktd2l0aC1ub24tanNhcnJheS1hcnJh
eS5qcwpAQCAtMCwwICsxLDM1IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVk
KQoreworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoYGJhZCB2YWx1ZTogJHtTdHJpbmcoYWN0dWFsKX1gKTsKK30KKworZnVuY3Rpb24gc2hvdWxk
VGhyb3coZnVuYywgZXJyb3JNZXNzYWdlKQoreworICAgIHZhciBlcnJvclRocm93biA9IGZhbHNl
OworICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOworICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3JUaHJvd24gPSB0cnVlOworICAgICAgICBlcnJv
ciA9IGU7CisgICAgfQorICAgIGlmICghZXJyb3JUaHJvd24pCisgICAgICAgIHRocm93IG5ldyBF
cnJvcignbm90IHRocm93bicpOworICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1lc3Nh
Z2UpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIGVycm9yOiAke1N0cmluZyhlcnJvcil9
YCk7Cit9CisKK3Nob3VsZEJlKEpTT04uc3RyaW5naWZ5KG5ldyBQcm94eShbdW5kZWZpbmVkXSwg
e30pKSwgYFtudWxsXWApOworc2hvdWxkQmUoSlNPTi5zdHJpbmdpZnkobmV3IFByb3h5KFtmdW5j
dGlvbigpIHsgfV0sIHt9KSksIGBbbnVsbF1gKTsKKworc2hvdWxkVGhyb3coZnVuY3Rpb24gKCkg
eworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eShbXSwgeworICAgICAgICBnZXQodGhlVGFyZ2V0
LCBwcm9wTmFtZSkgeworICAgICAgICAgICAgaWYgKHByb3BOYW1lID09PSAnbGVuZ3RoJykKKyAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ29rJyk7CisgICAgICAgICAgICByZXR1cm4g
NDI7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBKU09OLnN0cmluZ2lmeShwcm94eSk7Cit9LCBg
RXJyb3I6IG9rYCk7Cg==
</data>
<flag name="review"
          id="316234"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>