<?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>52890</bug_id>
          
          <creation_ts>2011-01-21 07:03:16 -0800</creation_ts>
          <short_desc>IndexedDB corrupts data on disk</short_desc>
          <delta_ts>2011-01-22 07:00:54 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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="Andrei Popescu">andreip</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>hans</cc>
    
    <cc>jorlow</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>338038</commentid>
    <comment_count>0</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-01-21 07:03:16 -0800</bug_when>
    <thetext>IndexedDB corrupts data on disk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338040</commentid>
    <comment_count>1</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-01-21 07:11:13 -0800</bug_when>
    <thetext>SerializedScriptValue values should be stored in a BLOB column rather than TEXT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338041</commentid>
    <comment_count>2</comment_count>
      <attachid>79732</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-01-21 07:20:38 -0800</bug_when>
    <thetext>Created attachment 79732
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338043</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-21 07:23:47 -0800</bug_when>
    <thetext>Attachment 79732 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/stor...&quot; exit_code: 1

Source/WebCore/platform/sql/SQLiteStatement.cpp:388:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338092</commentid>
    <comment_count>4</comment_count>
      <attachid>79732</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-01-21 09:10:25 -0800</bug_when>
    <thetext>Comment on attachment 79732
Patch

Looks great. Some nits:


&gt; Source/WebCore/platform/sql/SQLiteStatement.cpp:190
&gt; +    return bindBlob(index, reinterpret_cast&lt;const void*&gt;(characters), text.length() * sizeof(UChar));

I believe static_cast is preferred. Sorry for not saying that earlier.

&gt; Source/WebCore/platform/sql/SQLiteStatement.cpp:391
&gt; +    return String(reinterpret_cast&lt;const UChar*&gt;(blob), size / sizeof(UChar));

Ditto.

&gt; Source/WebCore/platform/sql/SQLiteStatement.cpp:418
&gt;  }

Ditto.

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:134
&gt; +    return runCommands(sqliteDatabase, commands, 12);

Using &apos;12&apos; here seems a bit dangerous.. sizeof commands / sizeof commands[0] ?

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:144
&gt; +    return runCommands(sqliteDatabase, commands, 2);

Ditto for 2.

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:187
&gt; +        if (!runCommands(sqliteDatabase, commands, 15))

Ditto.

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:205
&gt; +        if (!runCommands(sqliteDatabase, commands, 7))

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338097</commentid>
    <comment_count>5</comment_count>
      <attachid>79732</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-01-21 09:14:35 -0800</bug_when>
    <thetext>Comment on attachment 79732
Patch

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

&gt;&gt; Source/WebCore/platform/sql/SQLiteStatement.cpp:190
&gt;&gt; +    return bindBlob(index, reinterpret_cast&lt;const void*&gt;(characters), text.length() * sizeof(UChar));
&gt; 
&gt; I believe static_cast is preferred. Sorry for not saying that earlier.

In fact, I don&apos;t even think you need a cast here...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338109</commentid>
    <comment_count>6</comment_count>
      <attachid>79751</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-01-21 09:39:57 -0800</bug_when>
    <thetext>Created attachment 79751
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338111</commentid>
    <comment_count>7</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-01-21 09:41:39 -0800</bug_when>
    <thetext>Thanks Hans!

(In reply to comment #4)
&gt; (From update of attachment 79732 [details])
&gt; Looks great. Some nits:
&gt; 
&gt; 
&gt; &gt; Source/WebCore/platform/sql/SQLiteStatement.cpp:190
&gt; &gt; +    return bindBlob(index, reinterpret_cast&lt;const void*&gt;(characters), text.length() * sizeof(UChar));
&gt; 
&gt; I believe static_cast is preferred. Sorry for not saying that earlier.
&gt; 

Removed cast altogether.

&gt; &gt; Source/WebCore/platform/sql/SQLiteStatement.cpp:391
&gt; &gt; +    return String(reinterpret_cast&lt;const UChar*&gt;(blob), size / sizeof(UChar));
&gt; 
&gt; Ditto.
&gt; 

Done.

&gt; &gt; Source/WebCore/platform/sql/SQLiteStatement.cpp:418
&gt; &gt;  }
&gt; 
&gt; Ditto.
&gt; 

Done.

&gt; &gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:134
&gt; &gt; +    return runCommands(sqliteDatabase, commands, 12);
&gt; 
&gt; Using &apos;12&apos; here seems a bit dangerous.. sizeof commands / sizeof commands[0] ?
&gt; 

Done.

&gt; &gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:144
&gt; &gt; +    return runCommands(sqliteDatabase, commands, 2);
&gt; 
&gt; Ditto for 2.
&gt; 

Done.

&gt; &gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:187
&gt; &gt; +        if (!runCommands(sqliteDatabase, commands, 15))
&gt; 
&gt; Ditto.
&gt; 

Done.

&gt; &gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:205
&gt; &gt; +        if (!runCommands(sqliteDatabase, commands, 7))
&gt; 
&gt; Ditto.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338114</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-21 09:43:13 -0800</bug_when>
    <thetext>Attachment 79751 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/stor...&quot; exit_code: 1

Source/WebCore/platform/sql/SQLiteStatement.cpp:388:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338134</commentid>
    <comment_count>9</comment_count>
      <attachid>79751</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-01-21 10:14:56 -0800</bug_when>
    <thetext>Comment on attachment 79751
Patch

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

r=me

&gt;&gt; Source/WebCore/platform/sql/SQLiteStatement.cpp:388
&gt;&gt; +    if (size &lt; 0 || size % sizeof(UChar) != 0)
&gt; 
&gt; Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]

The latter seems more like a sanity check...should we assert it&apos;s not true?  The following / is safe in that we won&apos;t read invalid memory.

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:189
&gt;  

get rid of second newline

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:198
&gt; +            &quot;INSERT INTO ObjectStoreData2 SELECT * FROM ObjectStoreData&quot;,

I worry about this....and think we should probably just blow away the data.  No one should have anything they really care about yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338589</commentid>
    <comment_count>10</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-01-22 07:00:54 -0800</bug_when>
    <thetext>Committed r76448: &lt;http://trac.webkit.org/changeset/76448&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79732</attachid>
            <date>2011-01-21 07:20:38 -0800</date>
            <delta_ts>2011-01-21 09:39:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52890-20110121152036.patch</filename>
            <type>text/plain</type>
            <size>16664</size>
            <attacher name="Andrei Popescu">andreip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyODU4Mjk4YWE0YjlhY2Q1OTNlM2FhZmU2NzRkZmYzZWE1ZTlmMjQ2Li41MzliYjA2
NGRmOWIyM2ExOWMwNWYyODA1ZjIyM2NjOTU1MDdhOGU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTEtMDEtMjEgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluZGV4ZWREQiBjb3Jy
dXB0cyBkYXRhIG9uIGRpc2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUyODkwCisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9kYXRhLWNvcnJ1
cHRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9k
YXRhLWNvcnJ1cHRpb24uaHRtbDogQWRkZWQuCisKIDIwMTEtMDEtMjEgIFl1cnkgU2VtaWtoYXRz
a3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVs
ZG1hbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGEtY29y
cnVwdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRh
LWNvcnJ1cHRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjZTM5MDE1M2IyYWIzOTk0MDNk
NGNjODE0MDY1NTg4YWVmNWI3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9kYXRhLWNvcnJ1cHRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNjkg
QEAKK1Rlc3QgdGhhdCBkYXRhIGluc2VydGVkIGludG8gSW5kZXhlZERCIGRvZXMgbm90IGdldCBj
b3JydXB0ZWQgb24gZGlzay4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK3dlYmtp
dEluZGV4ZWREQi5vcGVuKCduYW1lJykKK1BBU1MgJ29uc3VjY2VzcycgaW4gcmVzdWx0IGlzIHRy
dWUKK1BBU1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdyZWFkeVN0YXRlJyBp
biByZXN1bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUgc2hvcnRseS4uLgorCitvcGVu
U3VjY2VzcygpOgorU3VjY2VzcyBldmVudCBmaXJlZDoKK1BBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQg
aXMgdHJ1ZQorUEFTUyAnY29kZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ21lc3NhZ2UnIGlu
IGV2ZW50IGlzIGZhbHNlCitQQVNTICdzb3VyY2UnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgZXZl
bnQuc291cmNlICE9IG51bGwgaXMgdHJ1ZQorUEFTUyAnb25zdWNjZXNzJyBpbiBldmVudC50YXJn
ZXQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1Mg
J3JlYWR5U3RhdGUnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTIGV2ZW50LnRhcmdldC5y
ZWFkeVN0YXRlIGlzIGV2ZW50LnRhcmdldC5ET05FCisKK2RiID0gZXZlbnQucmVzdWx0CitkYi5z
ZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpCitQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3VsdCBpcyB0
cnVlCitQQVNTICdvbmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScg
aW4gcmVzdWx0IGlzIHRydWUKK0FuIGV2ZW50IHNob3VsZCBmaXJlIHNob3J0bHkuLi4KKworc2V0
VmVyc2lvblN1Y2Nlc3MoKToKK1N1Y2Nlc3MgZXZlbnQgZmlyZWQ6CitQQVNTICdyZXN1bHQnIGlu
IGV2ZW50IGlzIHRydWUKK1BBU1MgJ2NvZGUnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdtZXNz
YWdlJyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnc291cmNlJyBpbiBldmVudCBpcyB0cnVlCitQ
QVNTIGV2ZW50LnNvdXJjZSAhPSBudWxsIGlzIHRydWUKK1BBU1MgJ29uc3VjY2VzcycgaW4gZXZl
bnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIGV2ZW50LnRhcmdldCBpcyB0cnVl
CitQQVNTICdyZWFkeVN0YXRlJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyBldmVudC50
YXJnZXQucmVhZHlTdGF0ZSBpcyBldmVudC50YXJnZXQuRE9ORQorCit0cmFucyA9IGV2ZW50LnJl
c3VsdAorUEFTUyB0cmFucyAhPT0gbnVsbCBpcyB0cnVlCitEZWxldGVkIGFsbCBvYmplY3Qgc3Rv
cmVzLgorY3JlYXRlT2JqZWN0U3RvcmUoKToKK2RiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZU5h
bWUnKQorYWRkRGF0YSgpOgordHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbih7bW9kZTogd2Vi
a2l0SURCVHJhbnNhY3Rpb24uUkVBRF9XUklURX0pCityZXN1bHQgPSB0cmFuc2FjdGlvbi5vYmpl
Y3RTdG9yZSgnc3RvcmVOYW1lJykuYWRkKHt4OiB0ZXN0RGF0ZX0sICdrZXknKQorYWRkRGF0YSgp
OgordHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbih7bW9kZTogd2Via2l0SURCVHJhbnNhY3Rp
b24uUkVBRF9PTkxZfSkKK3Jlc3VsdCA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5h
bWUnKS5nZXQoJ2tleScpCitTdWNjZXNzIGV2ZW50IGZpcmVkOgorUEFTUyAncmVzdWx0JyBpbiBl
dmVudCBpcyB0cnVlCitQQVNTICdjb2RlJyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnbWVzc2Fn
ZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ3NvdXJjZScgaW4gZXZlbnQgaXMgdHJ1ZQorUEFT
UyBldmVudC5zb3VyY2UgIT0gbnVsbCBpcyB0cnVlCitQQVNTICdvbnN1Y2Nlc3MnIGluIGV2ZW50
LnRhcmdldCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQor
UEFTUyAncmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgZXZlbnQudGFy
Z2V0LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUKKworUEFTUyBldmVudC5yZXN1bHQu
eC50b1N0cmluZygpID09IHRlc3REYXRlLnRvU3RyaW5nKCkgaXMgdHJ1ZQorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGEtY29ycnVwdGlvbi5odG1sIGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvZGF0YS1jb3JydXB0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmI0
OWZjNzFkYTVhZmMyNTdlZWMxYzJlYzI5NTgwZDQ3YzQ4NzA3NwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGEtY29ycnVwdGlvbi5odG1sCkBAIC0w
LDAgKzEsODggQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgZGF0YSBpbnNl
cnRlZCBpbnRvIEluZGV4ZWREQiBkb2VzIG5vdCBnZXQgY29ycnVwdGVkIG9uIGRpc2suIik7Citp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSAKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIHJlc3VsdCA9IGV2
YWxBbmRMb2coIndlYmtpdEluZGV4ZWREQi5vcGVuKCduYW1lJykiKTsKKyAgICB2ZXJpZnlSZXN1
bHQocmVzdWx0KTsKKyAgICByZXN1bHQub25zdWNjZXNzID0gb3BlblN1Y2Nlc3M7CisgICAgcmVz
dWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gb3Bl
blN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJvcGVuU3VjY2VzcygpOiIpOworICAgIHZlcmlmeVN1
Y2Nlc3NFdmVudChldmVudCk7CisgICAgd2luZG93LmRiID0gZXZhbEFuZExvZygiZGIgPSBldmVu
dC5yZXN1bHQiKTsKKworICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coImRiLnNldFZlcnNpb24oJ25l
dyB2ZXJzaW9uJykiKTsKKyAgICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKKyAgICByZXN1bHQub25z
dWNjZXNzID0gc2V0VmVyc2lvblN1Y2Nlc3M7CisgICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4cGVj
dGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gc2V0VmVyc2lvblN1Y2Nlc3MoKQorewor
ICAgIGRlYnVnKCJzZXRWZXJzaW9uU3VjY2VzcygpOiIpOworICAgIHZlcmlmeVN1Y2Nlc3NFdmVu
dChldmVudCk7CisgICAgd2luZG93LnRyYW5zID0gZXZhbEFuZExvZygidHJhbnMgPSBldmVudC5y
ZXN1bHQiKTsKKyAgICBzaG91bGRCZVRydWUoInRyYW5zICE9PSBudWxsIik7CisgICAgdHJhbnMu
b25hYm9ydCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNrOworICAgIHRyYW5zLm9uY29tcGxldGUg
PSBhZGREYXRhOworCisgICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiLCBjcmVhdGVPYmplY3RT
dG9yZSk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZU9iamVjdFN0b3JlKCkKK3sKKyAgICBkZWJ1Zygi
Y3JlYXRlT2JqZWN0U3RvcmUoKToiKTsKKyAgICBldmFsQW5kTG9nKCJkYi5jcmVhdGVPYmplY3RT
dG9yZSgnc3RvcmVOYW1lJykiKTsKK30KKwordmFyIHRlc3REYXRlID0gbmV3IERhdGUoJ0ZlYnJ1
YXJ5IDI0LCAxOTU1IDEyOjAwOjA4Jyk7CisKK2Z1bmN0aW9uIGFkZERhdGEoKQoreworICAgIGRl
YnVnKCJhZGREYXRhKCk6Iik7CisgICAgdmFyIHRyYW5zYWN0aW9uID0gZXZhbEFuZExvZygidHJh
bnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbih7bW9kZTogd2Via2l0SURCVHJhbnNhY3Rpb24uUkVB
RF9XUklURX0pIik7CisgICAgdmFyIHJlc3VsdCA9IGV2YWxBbmRMb2coInJlc3VsdCA9IHRyYW5z
YWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKS5hZGQoe3g6IHRlc3REYXRlfSwgJ2tleScp
Iik7CisgICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICB0
cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZ2V0RGF0YTsKK30KKworZnVuY3Rpb24gZ2V0RGF0YSgp
Cit7CisgICAgZGVidWcoImFkZERhdGEoKToiKTsKKyAgICB2YXIgdHJhbnNhY3Rpb24gPSBldmFs
QW5kTG9nKCJ0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKHttb2RlOiB3ZWJraXRJREJUcmFu
c2FjdGlvbi5SRUFEX09OTFl9KSIpOworICAgIHZhciByZXN1bHQgPSBldmFsQW5kTG9nKCJyZXN1
bHQgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykuZ2V0KCdrZXknKSIpOwor
ICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgcmVzdWx0
Lm9uc3VjY2VzcyA9IGRvQ2hlY2s7Cit9CisKK2Z1bmN0aW9uIGRvQ2hlY2soKQoreworICAgIHZl
cmlmeVN1Y2Nlc3NFdmVudChldmVudCk7CisgICAgc2hvdWxkQmVUcnVlKCJldmVudC5yZXN1bHQu
eC50b1N0cmluZygpID09IHRlc3REYXRlLnRvU3RyaW5nKCkiKTsKKyAgICBkb25lKCk7Cit9CisK
K3Rlc3QoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDljYmI5NjY0Y2EyM2Y2MTMwNzhhZTdkNTM0
ZGM4N2U5NThmYzhkMjkuLjU1MjJjYzhjYTg5MjhlNTkxODM0MDFkMTgwOWE1NDdmZTczZTc1ZTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMS0wMS0yMSAgQW5kcmVpIFBvcGVzY3Ug
IDxhbmRyZWlwQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW5kZXhlZERCIGNvcnJ1cHRzIGRhdGEgb24gZGlzaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI4OTAKKworICAgICAgICBX
ZSBuZWVkIHRvIHN0b3JlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZXMgb24gZGlzayBpbiBhIEJMT0Ig
Y29sdW1uIHJhdGhlciB0aGFuIGEgVEVYVCBjb2x1bW4uCisgICAgICAgIFRlc3Q6IHN0b3JhZ2Uv
aW5kZXhlZGRiL2RhdGEtY29ycnVwdGlvbi5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6
YmluZEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5C
bG9iQXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1
bW5CbG9iQXNWZWN0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQu
aDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpsb2FkQ3VycmVudFJvdyk6CisgICAgICAg
ICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cnVuQ29tbWFuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVGFibGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZU1ldGFEYXRhVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6bWlncmF0
ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6cHV0T2JqZWN0U3RvcmVEYXRhKToKKwogMjAxMS0w
MS0yMSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjc2MzM1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAppbmRleCBhZjk1MThhODZhYTA1ZDJkODg5
ZDIxNmJmNTMwODRiOWM3N2NjOTcyLi44MmM3ZjlmN2MyZTk5MDUyODIxODMxYzY4NTNiNzcyZDg4
NTA1NDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3Rh
dGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVt
ZW50LmNwcApAQCAtMTc2LDYgKzE3NiwyMCBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxv
YihpbnQgaW5kZXgsIGNvbnN0IHZvaWQqIGJsb2IsIGludCBzaXplKQogICAgIHJldHVybiBzcWxp
dGUzX2JpbmRfYmxvYihtX3N0YXRlbWVudCwgaW5kZXgsIGJsb2IsIHNpemUsIFNRTElURV9UUkFO
U0lFTlQpOwogfQogCitpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIGNv
bnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICAvLyBTdHJpbmc6OmNoYXJhY3RlcnMoKSByZXR1cm5z
IDAgZm9yIHRoZSBlbXB0eSBzdHJpbmcsIHdoaWNoIFNRTGl0ZQorICAgIC8vIHRyZWF0cyBhcyBh
IG51bGwsIHNvIHdlIHN1cHBseSBhIG5vbi1udWxsIHBvaW50ZXIgZm9yIHRoYXQgY2FzZS4KKyAg
ICBVQ2hhciBhbnlDaGFyYWN0ZXIgPSAwOworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzOwor
ICAgIGlmICh0ZXh0LmlzRW1wdHkoKSAmJiAhdGV4dC5pc051bGwoKSkKKyAgICAgICAgY2hhcmFj
dGVycyA9ICZhbnlDaGFyYWN0ZXI7CisgICAgZWxzZQorICAgICAgICBjaGFyYWN0ZXJzID0gdGV4
dC5jaGFyYWN0ZXJzKCk7CisKKyAgICByZXR1cm4gYmluZEJsb2IoaW5kZXgsIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3Qgdm9pZCo+KGNoYXJhY3RlcnMpLCB0ZXh0Lmxlbmd0aCgpICogc2l6ZW9mKFVD
aGFyKSk7Cit9CisKIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRUZXh0KGludCBpbmRleCwgY29u
c3QgU3RyaW5nJiB0ZXh0KQogewogICAgIEFTU0VSVChtX2lzUHJlcGFyZWQpOwpAQCAtMzU1LDcg
KzM2OSwyOCBAQCBpbnQ2NF90IFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uSW50NjQoaW50IGNv
bCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNxbGl0ZTNfY29sdW1uX2ludDY0KG1f
c3RhdGVtZW50LCBjb2wpOwogfQotICAgIAorCitTdHJpbmcgU1FMaXRlU3RhdGVtZW50OjpnZXRD
b2x1bW5CbG9iQXNTdHJpbmcoaW50IGNvbCkKK3sKKyAgICBBU1NFUlQoY29sID49IDApOworCisg
ICAgaWYgKCFtX3N0YXRlbWVudCAmJiBwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9ST1cpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGlmIChjb2x1bW5Db3VudCgpIDw9IGNvbCkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgY29uc3Qgdm9pZCogYmxvYiA9IHNxbGl0
ZTNfY29sdW1uX2Jsb2IobV9zdGF0ZW1lbnQsIGNvbCk7CisgICAgaWYgKCFibG9iKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpbnQgc2l6ZSA9IHNxbGl0ZTNfY29sdW1uX2J5dGVz
KG1fc3RhdGVtZW50LCBjb2wpOworICAgIGlmIChzaXplIDwgMCB8fCBzaXplICUgc2l6ZW9mKFVD
aGFyKSAhPSAwKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICByZXR1cm4gU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihibG9iKSwgc2l6ZSAvIHNpemVvZihVQ2hh
cikpOworfQorCiB2b2lkIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKGlu
dCBjb2wsIFZlY3RvcjxjaGFyPiYgcmVzdWx0KQogewogICAgIEFTU0VSVChjb2wgPj0gMCk7CkBA
IC0zNzksNyArNDE0LDcgQEAgdm9pZCBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1Zl
Y3RvcihpbnQgY29sLCBWZWN0b3I8Y2hhcj4mIHJlc3VsdCkKICAgICBpbnQgc2l6ZSA9IHNxbGl0
ZTNfY29sdW1uX2J5dGVzKG1fc3RhdGVtZW50LCBjb2wpOwogICAgIHJlc3VsdC5yZXNpemUoKHNp
emVfdClzaXplKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAg
cmVzdWx0W2ldID0gKChjb25zdCB1bnNpZ25lZCBjaGFyKilibG9iKVtpXTsKKyAgICAgICAgcmVz
dWx0W2ldID0gKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGJsb2IpKVtp
XTsKIH0KIAogY29uc3Qgdm9pZCogU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iKGludCBj
b2wsIGludCYgc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVTdGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0
ZW1lbnQuaAppbmRleCBmZDFhYmZiMmUyMGM0MjNlMTg2Y2Y2ZDE4NmVlYzcwOGFlYjJkZmQ1Li4z
NWRjZWNmZWIyNTBlNmVkM2MxMjgwOWM3NDY4OTBiZGY3YTBjMmUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCkBAIC00Miw2ICs0Miw3IEBAIHB1
YmxpYzoKICAgICAKICAgICBpbnQgcHJlcGFyZSgpOwogICAgIGludCBiaW5kQmxvYihpbnQgaW5k
ZXgsIGNvbnN0IHZvaWQqIGJsb2IsIGludCBzaXplKTsKKyAgICBpbnQgYmluZEJsb2IoaW50IGlu
ZGV4LCBjb25zdCBTdHJpbmcmKTsKICAgICBpbnQgYmluZFRleHQoaW50IGluZGV4LCBjb25zdCBT
dHJpbmcmKTsKICAgICBpbnQgYmluZEludChpbnQgaW5kZXgsIGludCk7CiAgICAgaW50IGJpbmRJ
bnQ2NChpbnQgaW5kZXgsIGludDY0X3QpOwpAQCAtODAsNiArODEsNyBAQCBwdWJsaWM6CiAgICAg
aW50IGdldENvbHVtbkludChpbnQgY29sKTsKICAgICBpbnQ2NF90IGdldENvbHVtbkludDY0KGlu
dCBjb2wpOwogICAgIGNvbnN0IHZvaWQqIGdldENvbHVtbkJsb2IoaW50IGNvbCwgaW50JiBzaXpl
KTsKKyAgICBTdHJpbmcgZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKGludCBjb2wpOwogICAgIHZvaWQg
Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKGludCBjb2wsIFZlY3RvcjxjaGFyPiYpOwogCiAgICAgYm9v
bCByZXR1cm5UZXh0UmVzdWx0cyhpbnQgY29sLCBWZWN0b3I8U3RyaW5nPiYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAppbmRleCBkNzVlMjhk
ODkyNmIwNDQ0MzI4OTUwMDkyYzg0OGNlNjg5ZTc0ZGE5Li4wZmUyZDIxNGNkMmZmNjVhMjJmNzIx
NTY4MTA5YTU1OTQ1Mjc1MWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkN1cnNvckJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1
cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgSURCQ3Vyc29yQmFj
a2VuZEltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICBtX2N1cnJlbnRJZCA9IG1fcXVlcnktPmdl
dENvbHVtbkludDY0KDApOwogICAgIG1fY3VycmVudEtleSA9IElEQktleTo6ZnJvbVF1ZXJ5KCpt
X3F1ZXJ5LCAxKTsKICAgICBpZiAobV9pc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZUN1cnNvcikKLSAg
ICAgICAgbV9jdXJyZW50U2VyaWFsaXplZFNjcmlwdFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGVGcm9tV2lyZShtX3F1ZXJ5LT5nZXRDb2x1bW5UZXh0KDQpKTsKKyAgICAgICAg
bV9jdXJyZW50U2VyaWFsaXplZFNjcmlwdFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGVGcm9tV2lyZShtX3F1ZXJ5LT5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoNCkpOwogCiAgICAg
bV9jdXJyZW50SURCS2V5VmFsdWUgPSBJREJLZXk6OmZyb21RdWVyeSgqbV9xdWVyeSwgNSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAK
aW5kZXggNDVjZmZlYjQzZTc0NzYyZDU3MzI2YWU2YzhkOTQ2NDFmNGE3ZWU3ZC4uM2NkYTUwZjk5
YjQwYmU2YWEzMjk4OTRkMzJlNzEwN2JiM2M0Y2E5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApAQCAtOTMsNiArOTMsMjAgQEAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCU1FMaXRlRGF0YWJhc2U+IG9wZW5TUUxpdGVEYXRhYmFzZShTZWN1
cml0eU9yaWdpbiogc2VjdXJpdHkKICAgICByZXR1cm4gc3FsaXRlRGF0YWJhc2UucmVsZWFzZSgp
OwogfQogCitzdGF0aWMgYm9vbCBydW5Db21tYW5kcyhTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0
YWJhc2UsIGNvbnN0IGNoYXIqKiBjb21tYW5kcywgc2l6ZV90IG51bWJlck9mQ29tbWFuZHMpCit7
CisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oc3FsaXRlRGF0YWJhc2UsIGZhbHNl
KTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bnVtYmVyT2ZDb21tYW5kczsgKytpKSB7CisgICAgICAgIGlmICghc3FsaXRlRGF0YWJhc2UuZXhl
Y3V0ZUNvbW1hbmQoY29tbWFuZHNbaV0pKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kIGZvciBJbmRleGVkREI6ICVzIiwgY29tbWFu
ZHNbaV0pOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAg
IHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIHJldHVybiB0cnVlOworfQorCiBzdGF0aWMgYm9v
bCBjcmVhdGVUYWJsZXMoU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKQogewogICAgIGlm
IChzcWxpdGVEYXRhYmFzZS50YWJsZUV4aXN0cygiRGF0YWJhc2VzIikpCkBAIC0xMTcsMTcgKzEz
MSw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZVRhYmxlcyhTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0
YWJhc2UpCiAgICAgICAgICJDUkVBVEUgSU5ERVggSW5kZXhEYXRhX2luZGV4SWQgT04gSW5kZXhE
YXRhKGluZGV4SWQpIiwKICAgICAgICAgfTsKIAotICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5z
YWN0aW9uKHNxbGl0ZURhdGFiYXNlLCBmYWxzZSk7Ci0gICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5c2l6ZShjb21tYW5kcyk7ICsraSkgewot
ICAgICAgICBpZiAoIXNxbGl0ZURhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNvbW1hbmRzW2ldKSkg
ewotICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gcmVjb3ZlciBmcm9tIHRo
aXMgc2l0dWF0aW9uLiBNYXliZSBudWtlIHRoZSBkYXRhYmFzZSBhbmQgc3RhcnQgb3Zlcj8KLSAg
ICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQg
Zm9yIEluZGV4ZWREQjogJXMiLCBjb21tYW5kc1tpXSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHJ1bkNvbW1hbmRzKHNxbGl0ZURhdGFiYXNlLCBjb21tYW5k
cywgMTIpOwogfQogCiBzdGF0aWMgYm9vbCBjcmVhdGVNZXRhRGF0YVRhYmxlKFNRTGl0ZURhdGFi
YXNlJiBzcWxpdGVEYXRhYmFzZSkKQEAgLTEzNywxNCArMTQxLDcgQEAgc3RhdGljIGJvb2wgY3Jl
YXRlTWV0YURhdGFUYWJsZShTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UpCiAgICAgICAg
ICJJTlNFUlQgSU5UTyBNZXRhRGF0YSBWQUxVRVMgKCd2ZXJzaW9uJywgMSkiLAogICAgIH07CiAK
LSAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihzcWxpdGVEYXRhYmFzZSwgZmFsc2Up
OwotICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBh
cnJheXNpemUoY29tbWFuZHMpOyArK2kpIHsKLSAgICAgICAgaWYgKCFzcWxpdGVEYXRhYmFzZS5l
eGVjdXRlQ29tbWFuZChjb21tYW5kc1tpXSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBydW5Db21tYW5kcyhzcWxpdGVEYXRhYmFzZSwgY29tbWFuZHMsIDIpOwogfQogCiBzdGF0
aWMgYm9vbCBnZXREYXRhYmFzZVZlcnNpb24oU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNl
LCBpbnQqIGRhdGFiYXNlVmVyc2lvbikKQEAgLTE4NywxOSArMTg0LDMwIEBAIHN0YXRpYyBib29s
IG1pZ3JhdGVEYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UpCiAgICAgICAg
ICAgICAiVVBEQVRFIE1ldGFEYXRhIFNFVCB2YWx1ZSA9IDIgV0hFUkUgbmFtZSA9ICd2ZXJzaW9u
JyIsCiAgICAgICAgIH07CiAKLSAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24o
c3FsaXRlRGF0YWJhc2UsIGZhbHNlKTsKLSAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheXNpemUoY29tbWFuZHMpOyArK2kpIHsK
LSAgICAgICAgICAgIGlmICghc3FsaXRlRGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY29tbWFuZHNb
aV0pKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcnVuIHRoZSBmb2xs
b3dpbmcgY29tbWFuZCBmb3IgSW5kZXhlZERCOiAlcyIsIGNvbW1hbmRzW2ldKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
dHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgICAgIGlmICghcnVuQ29tbWFuZHMoc3FsaXRlRGF0
YWJhc2UsIGNvbW1hbmRzLCAxNSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgZGF0YWJhc2VWZXJzaW9uID0gMjsKICAgICB9CiAKKyAgICBpZiAoZGF0YWJhc2VWZXJzaW9u
ID09IDIpIHsKKyAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHRoZSBPYmplY3RTdG9yZURhdGEu
dmFsdWUgYmUgYSBCTE9CIGluc3RlYWQgb2YgVEVYVC4KKyAgICAgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGNvbW1hbmRzW10gPSB7CisgICAgICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElTVFMgT2Jq
ZWN0U3RvcmVEYXRhMiIsCisgICAgICAgICAgICAiQ1JFQVRFIFRBQkxFIE9iamVjdFN0b3JlRGF0
YTIgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG9iamVjdFN0b3JlSWQgSU5URUdFUiBOT1QgTlVM
TCBSRUZFUkVOQ0VTIE9iamVjdFN0b3JlKGlkKSwga2V5U3RyaW5nIFRFWFQsIGtleURhdGUgUkVB
TCwga2V5TnVtYmVyIFJFQUwsIHZhbHVlIEJMT0IgTk9UIE5VTEwpIiwKKyAgICAgICAgICAgICJJ
TlNFUlQgSU5UTyBPYmplY3RTdG9yZURhdGEyIFNFTEVDVCAqIEZST00gT2JqZWN0U3RvcmVEYXRh
IiwKKyAgICAgICAgICAgICJEUk9QIFRBQkxFIE9iamVjdFN0b3JlRGF0YSIsIC8vIFRoaXMgZHJv
cHMgYXNzb2NpYXRlZCBpbmRpY2VzLgorICAgICAgICAgICAgIkFMVEVSIFRBQkxFIE9iamVjdFN0
b3JlRGF0YTIgUkVOQU1FIFRPIE9iamVjdFN0b3JlRGF0YSIsCisgICAgICAgICAgICAiQ1JFQVRF
IFVOSVFVRSBJTkRFWCBPYmplY3RTdG9yZURhdGFfY29tcG9zaXQgT04gT2JqZWN0U3RvcmVEYXRh
KGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCBvYmplY3RTdG9yZUlkKSIsCisgICAgICAg
ICAgICAiVVBEQVRFIE1ldGFEYXRhIFNFVCB2YWx1ZSA9IDMgV0hFUkUgbmFtZSA9ICd2ZXJzaW9u
JyIsCisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFydW5Db21tYW5kcyhzcWxpdGVEYXRhYmFz
ZSwgY29tbWFuZHMsIDcpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGRh
dGFiYXNlVmVyc2lvbiA9IDM7CisgICAgfQorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
CmluZGV4IDZiMTYyZWY2MTFlOGY2ZGU2YjZhYjZmMjQ1NWUyN2M0MmYxZDExNGUuLmJkNjZiYjFl
MmUzZjFkOTI1YmM5YTU2MGVlYTEyNGNkNWY3OTY5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMTE4LDcgKzEx
OCw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgQVNTRVJUKChrZXktPnR5cGUoKSA9
PSBJREJLZXk6OkRhdGVUeXBlKSAhPSBxdWVyeS5pc0NvbHVtbk51bGwoMSkpOwogICAgIEFTU0VS
VCgoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKSAhPSBxdWVyeS5pc0NvbHVtbk51
bGwoMikpOwogCi0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGVGcm9tV2lyZShxdWVyeS5nZXRDb2x1bW5UZXh0KDMpKSk7CisgICAgY2FsbGJhY2tz
LT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShxdWVyeS5n
ZXRDb2x1bW5CbG9iQXNTdHJpbmcoMykpKTsKICAgICBBU1NFUlQocXVlcnkuc3RlcCgpICE9IFNR
TFJlc3VsdFJvdyk7CiB9CiAKQEAgLTE0Miw3ICsxNDIsNyBAQCBzdGF0aWMgYm9vbCBwdXRPYmpl
Y3RTdG9yZURhdGEoU1FMaXRlRGF0YWJhc2UmIGRiLCBJREJLZXkqIGtleSwgU2VyaWFsaXplZFNj
cmlwdAogICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBrZXktPmJpbmRXaXRoTnVsbHMocXVlcnksIDEpOwotICAgIHF1ZXJ5
LmJpbmRUZXh0KDQsIHZhbHVlLT50b1dpcmVTdHJpbmcoKSk7CisgICAgcXVlcnkuYmluZEJsb2Io
NCwgdmFsdWUtPnRvV2lyZVN0cmluZygpKTsKICAgICBpZiAoZGF0YVJvd0lkICE9IElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OkludmFsaWRJZCkKICAgICAgICAgcXVlcnkuYmluZEludDY0KDUsIGRh
dGFSb3dJZCk7CiAgICAgZWxzZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79751</attachid>
            <date>2011-01-21 09:39:57 -0800</date>
            <delta_ts>2011-01-21 10:14:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52890-20110121173954.patch</filename>
            <type>text/plain</type>
            <size>16769</size>
            <attacher name="Andrei Popescu">andreip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyODU4Mjk4YWE0YjlhY2Q1OTNlM2FhZmU2NzRkZmYzZWE1ZTlmMjQ2Li41MzliYjA2
NGRmOWIyM2ExOWMwNWYyODA1ZjIyM2NjOTU1MDdhOGU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTEtMDEtMjEgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluZGV4ZWREQiBjb3Jy
dXB0cyBkYXRhIG9uIGRpc2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUyODkwCisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9kYXRhLWNvcnJ1
cHRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9k
YXRhLWNvcnJ1cHRpb24uaHRtbDogQWRkZWQuCisKIDIwMTEtMDEtMjEgIFl1cnkgU2VtaWtoYXRz
a3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVs
ZG1hbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGEtY29y
cnVwdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRh
LWNvcnJ1cHRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjZTM5MDE1M2IyYWIzOTk0MDNk
NGNjODE0MDY1NTg4YWVmNWI3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9kYXRhLWNvcnJ1cHRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNjkg
QEAKK1Rlc3QgdGhhdCBkYXRhIGluc2VydGVkIGludG8gSW5kZXhlZERCIGRvZXMgbm90IGdldCBj
b3JydXB0ZWQgb24gZGlzay4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK3dlYmtp
dEluZGV4ZWREQi5vcGVuKCduYW1lJykKK1BBU1MgJ29uc3VjY2VzcycgaW4gcmVzdWx0IGlzIHRy
dWUKK1BBU1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdyZWFkeVN0YXRlJyBp
biByZXN1bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUgc2hvcnRseS4uLgorCitvcGVu
U3VjY2VzcygpOgorU3VjY2VzcyBldmVudCBmaXJlZDoKK1BBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQg
aXMgdHJ1ZQorUEFTUyAnY29kZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ21lc3NhZ2UnIGlu
IGV2ZW50IGlzIGZhbHNlCitQQVNTICdzb3VyY2UnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgZXZl
bnQuc291cmNlICE9IG51bGwgaXMgdHJ1ZQorUEFTUyAnb25zdWNjZXNzJyBpbiBldmVudC50YXJn
ZXQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1Mg
J3JlYWR5U3RhdGUnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTIGV2ZW50LnRhcmdldC5y
ZWFkeVN0YXRlIGlzIGV2ZW50LnRhcmdldC5ET05FCisKK2RiID0gZXZlbnQucmVzdWx0CitkYi5z
ZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpCitQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3VsdCBpcyB0
cnVlCitQQVNTICdvbmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScg
aW4gcmVzdWx0IGlzIHRydWUKK0FuIGV2ZW50IHNob3VsZCBmaXJlIHNob3J0bHkuLi4KKworc2V0
VmVyc2lvblN1Y2Nlc3MoKToKK1N1Y2Nlc3MgZXZlbnQgZmlyZWQ6CitQQVNTICdyZXN1bHQnIGlu
IGV2ZW50IGlzIHRydWUKK1BBU1MgJ2NvZGUnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdtZXNz
YWdlJyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnc291cmNlJyBpbiBldmVudCBpcyB0cnVlCitQ
QVNTIGV2ZW50LnNvdXJjZSAhPSBudWxsIGlzIHRydWUKK1BBU1MgJ29uc3VjY2VzcycgaW4gZXZl
bnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIGV2ZW50LnRhcmdldCBpcyB0cnVl
CitQQVNTICdyZWFkeVN0YXRlJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyBldmVudC50
YXJnZXQucmVhZHlTdGF0ZSBpcyBldmVudC50YXJnZXQuRE9ORQorCit0cmFucyA9IGV2ZW50LnJl
c3VsdAorUEFTUyB0cmFucyAhPT0gbnVsbCBpcyB0cnVlCitEZWxldGVkIGFsbCBvYmplY3Qgc3Rv
cmVzLgorY3JlYXRlT2JqZWN0U3RvcmUoKToKK2RiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZU5h
bWUnKQorYWRkRGF0YSgpOgordHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbih7bW9kZTogd2Vi
a2l0SURCVHJhbnNhY3Rpb24uUkVBRF9XUklURX0pCityZXN1bHQgPSB0cmFuc2FjdGlvbi5vYmpl
Y3RTdG9yZSgnc3RvcmVOYW1lJykuYWRkKHt4OiB0ZXN0RGF0ZX0sICdrZXknKQorYWRkRGF0YSgp
OgordHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbih7bW9kZTogd2Via2l0SURCVHJhbnNhY3Rp
b24uUkVBRF9PTkxZfSkKK3Jlc3VsdCA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5h
bWUnKS5nZXQoJ2tleScpCitTdWNjZXNzIGV2ZW50IGZpcmVkOgorUEFTUyAncmVzdWx0JyBpbiBl
dmVudCBpcyB0cnVlCitQQVNTICdjb2RlJyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnbWVzc2Fn
ZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ3NvdXJjZScgaW4gZXZlbnQgaXMgdHJ1ZQorUEFT
UyBldmVudC5zb3VyY2UgIT0gbnVsbCBpcyB0cnVlCitQQVNTICdvbnN1Y2Nlc3MnIGluIGV2ZW50
LnRhcmdldCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQor
UEFTUyAncmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgZXZlbnQudGFy
Z2V0LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUKKworUEFTUyBldmVudC5yZXN1bHQu
eC50b1N0cmluZygpID09IHRlc3REYXRlLnRvU3RyaW5nKCkgaXMgdHJ1ZQorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGEtY29ycnVwdGlvbi5odG1sIGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvZGF0YS1jb3JydXB0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmI0
OWZjNzFkYTVhZmMyNTdlZWMxYzJlYzI5NTgwZDQ3YzQ4NzA3NwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGEtY29ycnVwdGlvbi5odG1sCkBAIC0w
LDAgKzEsODggQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgZGF0YSBpbnNl
cnRlZCBpbnRvIEluZGV4ZWREQiBkb2VzIG5vdCBnZXQgY29ycnVwdGVkIG9uIGRpc2suIik7Citp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSAKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIHJlc3VsdCA9IGV2
YWxBbmRMb2coIndlYmtpdEluZGV4ZWREQi5vcGVuKCduYW1lJykiKTsKKyAgICB2ZXJpZnlSZXN1
bHQocmVzdWx0KTsKKyAgICByZXN1bHQub25zdWNjZXNzID0gb3BlblN1Y2Nlc3M7CisgICAgcmVz
dWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gb3Bl
blN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJvcGVuU3VjY2VzcygpOiIpOworICAgIHZlcmlmeVN1
Y2Nlc3NFdmVudChldmVudCk7CisgICAgd2luZG93LmRiID0gZXZhbEFuZExvZygiZGIgPSBldmVu
dC5yZXN1bHQiKTsKKworICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coImRiLnNldFZlcnNpb24oJ25l
dyB2ZXJzaW9uJykiKTsKKyAgICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKKyAgICByZXN1bHQub25z
dWNjZXNzID0gc2V0VmVyc2lvblN1Y2Nlc3M7CisgICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4cGVj
dGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gc2V0VmVyc2lvblN1Y2Nlc3MoKQorewor
ICAgIGRlYnVnKCJzZXRWZXJzaW9uU3VjY2VzcygpOiIpOworICAgIHZlcmlmeVN1Y2Nlc3NFdmVu
dChldmVudCk7CisgICAgd2luZG93LnRyYW5zID0gZXZhbEFuZExvZygidHJhbnMgPSBldmVudC5y
ZXN1bHQiKTsKKyAgICBzaG91bGRCZVRydWUoInRyYW5zICE9PSBudWxsIik7CisgICAgdHJhbnMu
b25hYm9ydCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNrOworICAgIHRyYW5zLm9uY29tcGxldGUg
PSBhZGREYXRhOworCisgICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiLCBjcmVhdGVPYmplY3RT
dG9yZSk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZU9iamVjdFN0b3JlKCkKK3sKKyAgICBkZWJ1Zygi
Y3JlYXRlT2JqZWN0U3RvcmUoKToiKTsKKyAgICBldmFsQW5kTG9nKCJkYi5jcmVhdGVPYmplY3RT
dG9yZSgnc3RvcmVOYW1lJykiKTsKK30KKwordmFyIHRlc3REYXRlID0gbmV3IERhdGUoJ0ZlYnJ1
YXJ5IDI0LCAxOTU1IDEyOjAwOjA4Jyk7CisKK2Z1bmN0aW9uIGFkZERhdGEoKQoreworICAgIGRl
YnVnKCJhZGREYXRhKCk6Iik7CisgICAgdmFyIHRyYW5zYWN0aW9uID0gZXZhbEFuZExvZygidHJh
bnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbih7bW9kZTogd2Via2l0SURCVHJhbnNhY3Rpb24uUkVB
RF9XUklURX0pIik7CisgICAgdmFyIHJlc3VsdCA9IGV2YWxBbmRMb2coInJlc3VsdCA9IHRyYW5z
YWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKS5hZGQoe3g6IHRlc3REYXRlfSwgJ2tleScp
Iik7CisgICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICB0
cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZ2V0RGF0YTsKK30KKworZnVuY3Rpb24gZ2V0RGF0YSgp
Cit7CisgICAgZGVidWcoImFkZERhdGEoKToiKTsKKyAgICB2YXIgdHJhbnNhY3Rpb24gPSBldmFs
QW5kTG9nKCJ0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKHttb2RlOiB3ZWJraXRJREJUcmFu
c2FjdGlvbi5SRUFEX09OTFl9KSIpOworICAgIHZhciByZXN1bHQgPSBldmFsQW5kTG9nKCJyZXN1
bHQgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykuZ2V0KCdrZXknKSIpOwor
ICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgcmVzdWx0
Lm9uc3VjY2VzcyA9IGRvQ2hlY2s7Cit9CisKK2Z1bmN0aW9uIGRvQ2hlY2soKQoreworICAgIHZl
cmlmeVN1Y2Nlc3NFdmVudChldmVudCk7CisgICAgc2hvdWxkQmVUcnVlKCJldmVudC5yZXN1bHQu
eC50b1N0cmluZygpID09IHRlc3REYXRlLnRvU3RyaW5nKCkiKTsKKyAgICBkb25lKCk7Cit9CisK
K3Rlc3QoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDljYmI5NjY0Y2EyM2Y2MTMwNzhhZTdkNTM0
ZGM4N2U5NThmYzhkMjkuLjU1MjJjYzhjYTg5MjhlNTkxODM0MDFkMTgwOWE1NDdmZTczZTc1ZTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMS0wMS0yMSAgQW5kcmVpIFBvcGVzY3Ug
IDxhbmRyZWlwQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW5kZXhlZERCIGNvcnJ1cHRzIGRhdGEgb24gZGlzaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI4OTAKKworICAgICAgICBX
ZSBuZWVkIHRvIHN0b3JlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZXMgb24gZGlzayBpbiBhIEJMT0Ig
Y29sdW1uIHJhdGhlciB0aGFuIGEgVEVYVCBjb2x1bW4uCisgICAgICAgIFRlc3Q6IHN0b3JhZ2Uv
aW5kZXhlZGRiL2RhdGEtY29ycnVwdGlvbi5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6
YmluZEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5C
bG9iQXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1
bW5CbG9iQXNWZWN0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQu
aDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpsb2FkQ3VycmVudFJvdyk6CisgICAgICAg
ICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cnVuQ29tbWFuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVGFibGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZU1ldGFEYXRhVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6bWlncmF0
ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6cHV0T2JqZWN0U3RvcmVEYXRhKToKKwogMjAxMS0w
MS0yMSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjc2MzM1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAppbmRleCBhZjk1MThhODZhYTA1ZDJkODg5
ZDIxNmJmNTMwODRiOWM3N2NjOTcyLi44NTE2ZmFlYWMzZDk1ODZlMzE3NGQ0NTY0MzgyYTYyNDMz
ZmE1YTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3Rh
dGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVt
ZW50LmNwcApAQCAtMTc2LDYgKzE3NiwyMCBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxv
YihpbnQgaW5kZXgsIGNvbnN0IHZvaWQqIGJsb2IsIGludCBzaXplKQogICAgIHJldHVybiBzcWxp
dGUzX2JpbmRfYmxvYihtX3N0YXRlbWVudCwgaW5kZXgsIGJsb2IsIHNpemUsIFNRTElURV9UUkFO
U0lFTlQpOwogfQogCitpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kQmxvYihpbnQgaW5kZXgsIGNv
bnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICAvLyBTdHJpbmc6OmNoYXJhY3RlcnMoKSByZXR1cm5z
IDAgZm9yIHRoZSBlbXB0eSBzdHJpbmcsIHdoaWNoIFNRTGl0ZQorICAgIC8vIHRyZWF0cyBhcyBh
IG51bGwsIHNvIHdlIHN1cHBseSBhIG5vbi1udWxsIHBvaW50ZXIgZm9yIHRoYXQgY2FzZS4KKyAg
ICBVQ2hhciBhbnlDaGFyYWN0ZXIgPSAwOworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzOwor
ICAgIGlmICh0ZXh0LmlzRW1wdHkoKSAmJiAhdGV4dC5pc051bGwoKSkKKyAgICAgICAgY2hhcmFj
dGVycyA9ICZhbnlDaGFyYWN0ZXI7CisgICAgZWxzZQorICAgICAgICBjaGFyYWN0ZXJzID0gdGV4
dC5jaGFyYWN0ZXJzKCk7CisKKyAgICByZXR1cm4gYmluZEJsb2IoaW5kZXgsIGNoYXJhY3RlcnMs
IHRleHQubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKK30KKwogaW50IFNRTGl0ZVN0YXRlbWVu
dDo6YmluZFRleHQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7CiAgICAgQVNTRVJU
KG1faXNQcmVwYXJlZCk7CkBAIC0zNTUsNyArMzY5LDI4IEBAIGludDY0X3QgU1FMaXRlU3RhdGVt
ZW50OjpnZXRDb2x1bW5JbnQ2NChpbnQgY29sKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1
cm4gc3FsaXRlM19jb2x1bW5faW50NjQobV9zdGF0ZW1lbnQsIGNvbCk7CiB9Ci0gICAgCisKK1N0
cmluZyBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1N0cmluZyhpbnQgY29sKQorewor
ICAgIEFTU0VSVChjb2wgPj0gMCk7CisKKyAgICBpZiAoIW1fc3RhdGVtZW50ICYmIHByZXBhcmVB
bmRTdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAg
aWYgKGNvbHVtbkNvdW50KCkgPD0gY29sKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAg
ICBjb25zdCB2b2lkKiBibG9iID0gc3FsaXRlM19jb2x1bW5fYmxvYihtX3N0YXRlbWVudCwgY29s
KTsKKyAgICBpZiAoIWJsb2IpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGludCBz
aXplID0gc3FsaXRlM19jb2x1bW5fYnl0ZXMobV9zdGF0ZW1lbnQsIGNvbCk7CisgICAgaWYgKHNp
emUgPCAwIHx8IHNpemUgJSBzaXplb2YoVUNoYXIpICE9IDApCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgIHJldHVybiBTdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPihibG9i
KSwgc2l6ZSAvIHNpemVvZihVQ2hhcikpOworfQorCiB2b2lkIFNRTGl0ZVN0YXRlbWVudDo6Z2V0
Q29sdW1uQmxvYkFzVmVjdG9yKGludCBjb2wsIFZlY3RvcjxjaGFyPiYgcmVzdWx0KQogewogICAg
IEFTU0VSVChjb2wgPj0gMCk7CkBAIC0zNzksNyArNDE0LDcgQEAgdm9pZCBTUUxpdGVTdGF0ZW1l
bnQ6OmdldENvbHVtbkJsb2JBc1ZlY3RvcihpbnQgY29sLCBWZWN0b3I8Y2hhcj4mIHJlc3VsdCkK
ICAgICBpbnQgc2l6ZSA9IHNxbGl0ZTNfY29sdW1uX2J5dGVzKG1fc3RhdGVtZW50LCBjb2wpOwog
ICAgIHJlc3VsdC5yZXNpemUoKHNpemVfdClzaXplKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNpemU7ICsraSkKLSAgICAgICAgcmVzdWx0W2ldID0gKChjb25zdCB1bnNpZ25lZCBjaGFyKili
bG9iKVtpXTsKKyAgICAgICAgcmVzdWx0W2ldID0gKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihibG9iKSlbaV07CiB9CiAKIGNvbnN0IHZvaWQqIFNRTGl0ZVN0YXRlbWVudDo6Z2V0
Q29sdW1uQmxvYihpbnQgY29sLCBpbnQmIHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKaW5kZXggZmQxYWJmYjJlMjBjNDIzZTE4NmNmNmQxODZl
ZWM3MDhhZWIyZGZkNS4uMzVkY2VjZmViMjUwZTZlZDNjMTI4MDljNzQ2ODkwYmRmN2EwYzJlMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaApAQCAt
NDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgaW50IHByZXBhcmUoKTsKICAgICBpbnQg
YmluZEJsb2IoaW50IGluZGV4LCBjb25zdCB2b2lkKiBibG9iLCBpbnQgc2l6ZSk7CisgICAgaW50
IGJpbmRCbG9iKGludCBpbmRleCwgY29uc3QgU3RyaW5nJik7CiAgICAgaW50IGJpbmRUZXh0KGlu
dCBpbmRleCwgY29uc3QgU3RyaW5nJik7CiAgICAgaW50IGJpbmRJbnQoaW50IGluZGV4LCBpbnQp
OwogICAgIGludCBiaW5kSW50NjQoaW50IGluZGV4LCBpbnQ2NF90KTsKQEAgLTgwLDYgKzgxLDcg
QEAgcHVibGljOgogICAgIGludCBnZXRDb2x1bW5JbnQoaW50IGNvbCk7CiAgICAgaW50NjRfdCBn
ZXRDb2x1bW5JbnQ2NChpbnQgY29sKTsKICAgICBjb25zdCB2b2lkKiBnZXRDb2x1bW5CbG9iKGlu
dCBjb2wsIGludCYgc2l6ZSk7CisgICAgU3RyaW5nIGdldENvbHVtbkJsb2JBc1N0cmluZyhpbnQg
Y29sKTsKICAgICB2b2lkIGdldENvbHVtbkJsb2JBc1ZlY3RvcihpbnQgY29sLCBWZWN0b3I8Y2hh
cj4mKTsKIAogICAgIGJvb2wgcmV0dXJuVGV4dFJlc3VsdHMoaW50IGNvbCwgVmVjdG9yPFN0cmlu
Zz4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2Vu
ZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5j
cHAKaW5kZXggZDc1ZTI4ZDg5MjZiMDQ0NDMyODk1MDA5MmM4NDhjZTY4OWU3NGRhOS4uMGZlMmQy
MTRjZDJmZjY1YTIyZjcyMTU2ODEwOWE1NTk0NTI3NTFhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKQEAgLTE3OCw3ICsxNzgsNyBAQCB2
b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgbV9jdXJyZW50
SWQgPSBtX3F1ZXJ5LT5nZXRDb2x1bW5JbnQ2NCgwKTsKICAgICBtX2N1cnJlbnRLZXkgPSBJREJL
ZXk6OmZyb21RdWVyeSgqbV9xdWVyeSwgMSk7CiAgICAgaWYgKG1faXNTZXJpYWxpemVkU2NyaXB0
VmFsdWVDdXJzb3IpCi0gICAgICAgIG1fY3VycmVudFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA9IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUobV9xdWVyeS0+Z2V0Q29sdW1uVGV4
dCg0KSk7CisgICAgICAgIG1fY3VycmVudFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA9IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUobV9xdWVyeS0+Z2V0Q29sdW1uQmxvYkFzU3Ry
aW5nKDQpKTsKIAogICAgIG1fY3VycmVudElEQktleVZhbHVlID0gSURCS2V5Ojpmcm9tUXVlcnko
Km1fcXVlcnksIDUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJG
YWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5
QmFja2VuZEltcGwuY3BwCmluZGV4IDQ1Y2ZmZWI0M2U3NDc2MmQ1NzMyNmFlNmM4ZDk0NjQxZjRh
N2VlN2QuLjE5YTQ1YTM4YmRmMmJlNzU1NDYwZGE3NzJkOTU2N2EyNjcyMWI4ZTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTkz
LDYgKzkzLDIwIEBAIHN0YXRpYyBQYXNzUmVmUHRyPElEQlNRTGl0ZURhdGFiYXNlPiBvcGVuU1FM
aXRlRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5CiAgICAgcmV0dXJuIHNxbGl0ZURh
dGFiYXNlLnJlbGVhc2UoKTsKIH0KIAorc3RhdGljIGJvb2wgcnVuQ29tbWFuZHMoU1FMaXRlRGF0
YWJhc2UmIHNxbGl0ZURhdGFiYXNlLCBjb25zdCBjaGFyKiogY29tbWFuZHMsIHNpemVfdCBudW1i
ZXJPZkNvbW1hbmRzKQoreworICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKHNxbGl0
ZURhdGFiYXNlLCBmYWxzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG51bWJlck9mQ29tbWFuZHM7ICsraSkgeworICAgICAgICBpZiAoIXNx
bGl0ZURhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNvbW1hbmRzW2ldKSkgeworICAgICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBmb3IgSW5kZXhl
ZERCOiAlcyIsIGNvbW1hbmRzW2ldKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwogc3RhdGljIGJvb2wgY3JlYXRlVGFibGVzKFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRh
YmFzZSkKIHsKICAgICBpZiAoc3FsaXRlRGF0YWJhc2UudGFibGVFeGlzdHMoIkRhdGFiYXNlcyIp
KQpAQCAtMTE3LDE3ICsxMzEsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVUYWJsZXMoU1FMaXRlRGF0
YWJhc2UmIHNxbGl0ZURhdGFiYXNlKQogICAgICAgICAiQ1JFQVRFIElOREVYIEluZGV4RGF0YV9p
bmRleElkIE9OIEluZGV4RGF0YShpbmRleElkKSIsCiAgICAgICAgIH07CiAKLSAgICBTUUxpdGVU
cmFuc2FjdGlvbiB0cmFuc2FjdGlvbihzcWxpdGVEYXRhYmFzZSwgZmFsc2UpOwotICAgIHRyYW5z
YWN0aW9uLmJlZ2luKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheXNpemUoY29t
bWFuZHMpOyArK2kpIHsKLSAgICAgICAgaWYgKCFzcWxpdGVEYXRhYmFzZS5leGVjdXRlQ29tbWFu
ZChjb21tYW5kc1tpXSkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdHJ5IHRv
IHJlY292ZXIgZnJvbSB0aGlzIHNpdHVhdGlvbi4gTWF5YmUgbnVrZSB0aGUgZGF0YWJhc2UgYW5k
IHN0YXJ0IG92ZXI/Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBydW4gdGhlIGZv
bGxvd2luZyBjb21tYW5kIGZvciBJbmRleGVkREI6ICVzIiwgY29tbWFuZHNbaV0pOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIHRyYW5zYWN0aW9uLmNv
bW1pdCgpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBydW5Db21tYW5kcyhzcWxpdGVE
YXRhYmFzZSwgY29tbWFuZHMsIHNpemVvZihjb21tYW5kcykgLyBzaXplb2YoY29tbWFuZHNbMF0p
KTsKIH0KIAogc3RhdGljIGJvb2wgY3JlYXRlTWV0YURhdGFUYWJsZShTUUxpdGVEYXRhYmFzZSYg
c3FsaXRlRGF0YWJhc2UpCkBAIC0xMzcsMTQgKzE0MSw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZU1l
dGFEYXRhVGFibGUoU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKQogICAgICAgICAiSU5T
RVJUIElOVE8gTWV0YURhdGEgVkFMVUVTICgndmVyc2lvbicsIDEpIiwKICAgICB9OwogCi0gICAg
U1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oc3FsaXRlRGF0YWJhc2UsIGZhbHNlKTsKLSAg
ICB0cmFuc2FjdGlvbi5iZWdpbigpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlz
aXplKGNvbW1hbmRzKTsgKytpKSB7Ci0gICAgICAgIGlmICghc3FsaXRlRGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmQoY29tbWFuZHNbaV0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
cnVuQ29tbWFuZHMoc3FsaXRlRGF0YWJhc2UsIGNvbW1hbmRzLCBzaXplb2YoY29tbWFuZHMpIC8g
c2l6ZW9mKGNvbW1hbmRzWzBdKSk7CiB9CiAKIHN0YXRpYyBib29sIGdldERhdGFiYXNlVmVyc2lv
bihTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UsIGludCogZGF0YWJhc2VWZXJzaW9uKQpA
QCAtMTg3LDE5ICsxODQsMzAgQEAgc3RhdGljIGJvb2wgbWlncmF0ZURhdGFiYXNlKFNRTGl0ZURh
dGFiYXNlJiBzcWxpdGVEYXRhYmFzZSkKICAgICAgICAgICAgICJVUERBVEUgTWV0YURhdGEgU0VU
IHZhbHVlID0gMiBXSEVSRSBuYW1lID0gJ3ZlcnNpb24nIiwKICAgICAgICAgfTsKIAotICAgICAg
ICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihzcWxpdGVEYXRhYmFzZSwgZmFsc2UpOwot
ICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGFycmF5c2l6ZShjb21tYW5kcyk7ICsraSkgewotICAgICAgICAgICAgaWYgKCFzcWxpdGVE
YXRhYmFzZS5leGVjdXRlQ29tbWFuZChjb21tYW5kc1tpXSkpIHsKLSAgICAgICAgICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kIGZvciBJbmRleGVk
REI6ICVzIiwgY29tbWFuZHNbaV0pOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKyAg
ICAgICAgaWYgKCFydW5Db21tYW5kcyhzcWxpdGVEYXRhYmFzZSwgY29tbWFuZHMsIHNpemVvZihj
b21tYW5kcykgLyBzaXplb2YoY29tbWFuZHNbMF0pKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICBkYXRhYmFzZVZlcnNpb24gPSAyOwogICAgIH0KIAorICAgIGlmIChkYXRh
YmFzZVZlcnNpb24gPT0gMikgeworICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2UgdGhlIE9iamVj
dFN0b3JlRGF0YS52YWx1ZSBiZSBhIEJMT0IgaW5zdGVhZCBvZiBURVhULgorICAgICAgICBzdGF0
aWMgY29uc3QgY2hhciogY29tbWFuZHNbXSA9IHsKKyAgICAgICAgICAgICJEUk9QIFRBQkxFIElG
IEVYSVNUUyBPYmplY3RTdG9yZURhdGEyIiwKKyAgICAgICAgICAgICJDUkVBVEUgVEFCTEUgT2Jq
ZWN0U3RvcmVEYXRhMiAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgb2JqZWN0U3RvcmVJZCBJTlRF
R0VSIE5PVCBOVUxMIFJFRkVSRU5DRVMgT2JqZWN0U3RvcmUoaWQpLCBrZXlTdHJpbmcgVEVYVCwg
a2V5RGF0ZSBSRUFMLCBrZXlOdW1iZXIgUkVBTCwgdmFsdWUgQkxPQiBOT1QgTlVMTCkiLAorICAg
ICAgICAgICAgIklOU0VSVCBJTlRPIE9iamVjdFN0b3JlRGF0YTIgU0VMRUNUICogRlJPTSBPYmpl
Y3RTdG9yZURhdGEiLAorICAgICAgICAgICAgIkRST1AgVEFCTEUgT2JqZWN0U3RvcmVEYXRhIiwg
Ly8gVGhpcyBkcm9wcyBhc3NvY2lhdGVkIGluZGljZXMuCisgICAgICAgICAgICAiQUxURVIgVEFC
TEUgT2JqZWN0U3RvcmVEYXRhMiBSRU5BTUUgVE8gT2JqZWN0U3RvcmVEYXRhIiwKKyAgICAgICAg
ICAgICJDUkVBVEUgVU5JUVVFIElOREVYIE9iamVjdFN0b3JlRGF0YV9jb21wb3NpdCBPTiBPYmpl
Y3RTdG9yZURhdGEoa2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIsIG9iamVjdFN0b3JlSWQp
IiwKKyAgICAgICAgICAgICJVUERBVEUgTWV0YURhdGEgU0VUIHZhbHVlID0gMyBXSEVSRSBuYW1l
ID0gJ3ZlcnNpb24nIiwKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoIXJ1bkNvbW1hbmRzKHNx
bGl0ZURhdGFiYXNlLCBjb21tYW5kcywgc2l6ZW9mKGNvbW1hbmRzKSAvIHNpemVvZihjb21tYW5k
c1swXSkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGRhdGFiYXNlVmVy
c2lvbiA9IDM7CisgICAgfQorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IDZi
MTYyZWY2MTFlOGY2ZGU2YjZhYjZmMjQ1NWUyN2M0MmYxZDExNGUuLmJkNjZiYjFlMmUzZjFkOTI1
YmM5YTU2MGVlYTEyNGNkNWY3OTY5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMTE4LDcgKzExOCw3IEBAIHZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgQVNTRVJUKChrZXktPnR5cGUoKSA9PSBJREJLZXk6
OkRhdGVUeXBlKSAhPSBxdWVyeS5pc0NvbHVtbk51bGwoMSkpOwogICAgIEFTU0VSVCgoa2V5LT50
eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKSAhPSBxdWVyeS5pc0NvbHVtbk51bGwoMikpOwog
Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVG
cm9tV2lyZShxdWVyeS5nZXRDb2x1bW5UZXh0KDMpKSk7CisgICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShxdWVyeS5nZXRDb2x1bW5C
bG9iQXNTdHJpbmcoMykpKTsKICAgICBBU1NFUlQocXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJv
dyk7CiB9CiAKQEAgLTE0Miw3ICsxNDIsNyBAQCBzdGF0aWMgYm9vbCBwdXRPYmplY3RTdG9yZURh
dGEoU1FMaXRlRGF0YWJhc2UmIGRiLCBJREJLZXkqIGtleSwgU2VyaWFsaXplZFNjcmlwdAogICAg
IGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBrZXktPmJpbmRXaXRoTnVsbHMocXVlcnksIDEpOwotICAgIHF1ZXJ5LmJpbmRUZXh0
KDQsIHZhbHVlLT50b1dpcmVTdHJpbmcoKSk7CisgICAgcXVlcnkuYmluZEJsb2IoNCwgdmFsdWUt
PnRvV2lyZVN0cmluZygpKTsKICAgICBpZiAoZGF0YVJvd0lkICE9IElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OkludmFsaWRJZCkKICAgICAgICAgcXVlcnkuYmluZEludDY0KDUsIGRhdGFSb3dJZCk7
CiAgICAgZWxzZQo=
</data>
<flag name="review"
          id="71179"
          type_id="1"
          status="+"
          setter="jorlow"
    />
          </attachment>
      

    </bug>

</bugzilla>