<?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>81861</bug_id>
          
          <creation_ts>2012-03-21 18:23:21 -0700</creation_ts>
          <short_desc>Two race conditions in FileWriter</short_desc>
          <delta_ts>2012-03-28 14:43:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric U.">ericu</reporter>
          <assigned_to name="Eric U.">ericu</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>kinuko</cc>
    
    <cc>levin</cc>
    
    <cc>michaeln</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>584860</commentid>
    <comment_count>0</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2012-03-21 18:23:21 -0700</bug_when>
    <thetext>FileWriter has two race conditions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584866</commentid>
    <comment_count>1</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2012-03-21 18:27:21 -0700</bug_when>
    <thetext>1) An abort on its way to the backend might, in the Chromium/worker implementation, pass a success or failure message coming the other way.  Then we&apos;d request an abort with no task pending, which the backend won&apos;t like.
2) If the user with a write in progress calls abort/write/abort quickly enough, we&apos;ll actually send two aborts to the backend, where one is the right number.

The Chromium implementation should just drop any extra calls [I&apos;ll do that fix too, but it&apos;s not in the WebKit repo], but FileWriter should also be robust to success/non-abort-failure responses when it&apos;s sent an abort.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584873</commentid>
    <comment_count>2</comment_count>
      <attachid>133164</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2012-03-21 18:33:52 -0700</bug_when>
    <thetext>Created attachment 133164
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584913</commentid>
    <comment_count>3</comment_count>
      <attachid>133164</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-03-21 20:04:01 -0700</bug_when>
    <thetext>Comment on attachment 133164
Patch

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

&gt; Source/WebCore/ChangeLog:13
&gt; +        it appropriately.

Could you elaborate a little more about what could (unexpectedly) happen without this change?

&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:195
&gt; +        completeAbort();

Can we early exit here and remove else in line 196?

&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:197
&gt; +        ASSERT(m_readyState == WRITING);

Is there a chance this is called after stop()?

&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:223
&gt; +        completeAbort();

ditto.

&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:240
&gt; +        completeAbort();

ditto.

&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:245
&gt;          m_blobBeingWritten.clear();

Do we need to change operationInProgress to None here?

&gt; Source/WebCore/Modules/filesystem/FileWriter.h:120
&gt;      ReadyState m_readyState;

Now we have two (or three) variables to keep status.
We sometimes only check ReadyState while do also check progress/queued operations other times and it makes me feel nervous.
Is it possible to submerge m_readyState into progress/queued operation status?  Looks like we can return WRITING status if progress == Write||Truncate||Abort?
(DONE/INIT needs one more operation status though)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584929</commentid>
    <comment_count>4</comment_count>
      <attachid>133164</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2012-03-21 20:39:29 -0700</bug_when>
    <thetext>Comment on attachment 133164
Patch

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

I agree with Kinuko so this at least needs a few more comments (in the ChangeLog).

&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:127
&gt; +    } else {

doOperation(OperationWrite);

&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:168
&gt; +    } else {

doOperation(OperationTruncate);

&gt;&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:195
&gt;&gt; +        completeAbort();
&gt; 
&gt; Can we early exit here and remove else in line 196?

And that should make the diff less as well :)

&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:281
&gt; +    default:

Don&apos;t add a default to a switch for an enum so that the compile will catch unhandled enums. 

In this case if you wish to assert, do it after the switch and change the break&apos;s to return&apos;s so they don&apos;t hit the assert (and add the new enum value in here and just break for it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585458</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-22 10:40:12 -0700</bug_when>
    <thetext>This looks like cross-platform code, why [chromium] is title?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585526</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-22 11:36:41 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; This looks like cross-platform code, why [chromium] is title?

We&apos;ve been having trouble with folks using the [Chromium] tag too often in the title of bugs.  I&apos;ve tried to correct it when I&apos;ve noticed.  If you&apos;d be willing to help out educating folks when to use the tag, that would be beneficial.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588277</commentid>
    <comment_count>7</comment_count>
      <attachid>133923</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2012-03-26 16:27:27 -0700</bug_when>
    <thetext>Created attachment 133923
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588279</commentid>
    <comment_count>8</comment_count>
      <attachid>133164</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2012-03-26 16:28:19 -0700</bug_when>
    <thetext>Comment on attachment 133164
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:13
&gt;&gt; +        it appropriately.
&gt; 
&gt; Could you elaborate a little more about what could (unexpectedly) happen without this change?

Done.

&gt;&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:127
&gt;&gt; +    } else {
&gt; 
&gt; doOperation(OperationWrite);

Fixed, thanks.

&gt;&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:168
&gt;&gt; +    } else {
&gt; 
&gt; doOperation(OperationTruncate);

Fixed.

&gt;&gt;&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:195
&gt;&gt;&gt; +        completeAbort();
&gt;&gt; 
&gt;&gt; Can we early exit here and remove else in line 196?
&gt; 
&gt; And that should make the diff less as well :)

Done.

&gt;&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:197
&gt;&gt; +        ASSERT(m_readyState == WRITING);
&gt; 
&gt; Is there a chance this is called after stop()?

Yes, thanks for the catch!  I&apos;ve changed stop to use the same code, so now when the completion comes after stop, it sees the same setup, and everything shuts down nicely.

&gt;&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:223
&gt;&gt; +        completeAbort();
&gt; 
&gt; ditto.

Done.

&gt;&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:240
&gt;&gt; +        completeAbort();
&gt; 
&gt; ditto.

Done.

&gt;&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:245
&gt;&gt;          m_blobBeingWritten.clear();
&gt; 
&gt; Do we need to change operationInProgress to None here?

Yes!  Done.

&gt;&gt; Source/WebCore/Modules/filesystem/FileWriter.cpp:281
&gt;&gt; +    default:
&gt; 
&gt; Don&apos;t add a default to a switch for an enum so that the compile will catch unhandled enums. 
&gt; 
&gt; In this case if you wish to assert, do it after the switch and change the break&apos;s to return&apos;s so they don&apos;t hit the assert (and add the new enum value in here and just break for it).

Got it; done.  But I&apos;ve rolled OperationAbort in to share the code.

&gt;&gt; Source/WebCore/Modules/filesystem/FileWriter.h:120
&gt;&gt;      ReadyState m_readyState;
&gt; 
&gt; Now we have two (or three) variables to keep status.
&gt; We sometimes only check ReadyState while do also check progress/queued operations other times and it makes me feel nervous.
&gt; Is it possible to submerge m_readyState into progress/queued operation status?  Looks like we can return WRITING status if progress == Write||Truncate||Abort?
&gt; (DONE/INIT needs one more operation status though)

I&apos;m not sure whether we can reduce by one variable or not.  I suspect not, given that the spec puts rather strict limits on when readyState changes.  However, the spec is just about to change, and I don&apos;t think it&apos;s worth the effort of doing that optimization before we see exactly what Arun puts in there.  I suggest we revisit the idea when I roll in the next spec change, as it would certainly be nice to drop a variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588285</commentid>
    <comment_count>9</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2012-03-26 16:30:26 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; This looks like cross-platform code, why [chromium] is title?

Sorry about that--the reason I did it was that the actual assert/crash is only in the Chromium implementation.  I&apos;m changing cross-platform code in ways that should make it more robust for any implementer, but there&apos;s no actual error in non-Chromium code that I know of.

I agree that I miscategorized it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588292</commentid>
    <comment_count>10</comment_count>
      <attachid>133923</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2012-03-26 16:36:04 -0700</bug_when>
    <thetext>Comment on attachment 133923
Patch

Looks ok to me. I think Kinuko did a better job than I did reviewing this so I&apos;d wait for her ok also if possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588305</commentid>
    <comment_count>11</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2012-03-26 16:41:09 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 133923 [details])
&gt; Looks ok to me. I think Kinuko did a better job than I did reviewing this so I&apos;d wait for her ok also if possible.

Sure, will do.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588967</commentid>
    <comment_count>12</comment_count>
      <attachid>133923</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-03-27 09:15:38 -0700</bug_when>
    <thetext>Comment on attachment 133923
Patch

LGTM too.

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

&gt; Source/WebCore/ChangeLog:31
&gt; +        robust to extra abort calls.

Thanks, now it&apos;s much clearer!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590459</commentid>
    <comment_count>13</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2012-03-28 14:43:44 -0700</bug_when>
    <thetext>Committed r112445: &lt;http://trac.webkit.org/changeset/112445&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133164</attachid>
            <date>2012-03-21 18:33:52 -0700</date>
            <delta_ts>2012-03-26 16:28:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81861-20120321183351.patch</filename>
            <type>text/plain</type>
            <size>9966</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNDIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2RjNDUyN2Y4ZTBhNjEz
MTcwMTBmODJmMjU2ZjQwODA2MTc0OTAxMi4uOTQ2NjVkMzY0YThkYjEzYWJjNjEzYzFkNDE3MTQ0
Mjk2YjJiNmZiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTAzLTIxICBFcmlj
IFVocmhhbmUgIDxlcmljdUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRmlsZVdyaXRlciBoYXMg
dHdvIHJhY2UgY29uZGl0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODE4NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBTaG91bGQgbWFrZSBjdXJyZW50IHRlc3RzIGxlc3MgZmxha3kuCisKKyAgICAg
ICAgKiBNb2R1bGVzL2ZpbGVzeXN0ZW0vRmlsZVdyaXRlci5jcHA6CisgICAgICAgIFRyYWNrIHRo
ZSBpbi1mbGlnaHQgb3BlcmF0aW9uLCB3aGV0aGVyIGl0IGJlIGFuIGFib3J0L3dyaXRlL3RydW5j
YXRlLgorICAgICAgICBXaGV0aGVyIGFuIGFib3J0IGNvbWVzIGJhY2sgYXMgZGlkV3JpdGUsIGRp
ZFRydW5jYXRlLCBvciBkaWRGYWlsLCBoYW5kbGUKKyAgICAgICAgaXQgYXBwcm9wcmlhdGVseS4K
KyAgICAgICAgKiBNb2R1bGVzL2ZpbGVzeXN0ZW0vRmlsZVdyaXRlci5oOgorCiAyMDEyLTAzLTIw
ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4IGFm
dGVyIHIxMTE0MTkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0
ZW0vRmlsZVdyaXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRmls
ZVdyaXRlci5jcHAKaW5kZXggNTg1ODRiYjBjNjVkNTVmYzc0Y2M5NzQ0ZTU5NTk0NGNlMGZmODkx
Mi4uYzllOTNiY2YzODE3NzlmYzJlYTkxNDFmODZhYzMzYWIxZTIzY2M2MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0ZpbGVXcml0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVyLmNwcApAQCAtNTUsNyAr
NTUsNyBAQCBQYXNzUmVmUHRyPEZpbGVXcml0ZXI+IEZpbGVXcml0ZXI6OmNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogRmlsZVdyaXRlcjo6RmlsZVdyaXRlcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQs
IHRoaXMpCiAgICAgLCBtX3JlYWR5U3RhdGUoSU5JVCkKLSAgICAsIG1faXNPcGVyYXRpb25JblBy
b2dyZXNzKGZhbHNlKQorICAgICwgbV9vcGVyYXRpb25JblByb2dyZXNzKE9wZXJhdGlvbk5vbmUp
CiAgICAgLCBtX3F1ZXVlZE9wZXJhdGlvbihPcGVyYXRpb25Ob25lKQogICAgICwgbV9ieXRlc1dy
aXR0ZW4oMCkKICAgICAsIG1fYnl0ZXNUb1dyaXRlKDApCkBAIC05MSw3ICs5MSw4IEBAIGJvb2wg
RmlsZVdyaXRlcjo6Y2FuU3VzcGVuZCgpIGNvbnN0CiB2b2lkIEZpbGVXcml0ZXI6OnN0b3AoKQog
ewogICAgIC8vIE1ha2Ugc3VyZSB3ZSd2ZSBhY3R1YWxseSBnb3Qgc29tZXRoaW5nIHRvIHN0b3As
IGFuZCBoYXZlbid0IGFscmVhZHkgY2FsbGVkIGFib3J0KCkuCi0gICAgaWYgKHdyaXRlcigpICYm
IG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HICYmIG1faXNPcGVyYXRpb25JblByb2dyZXNzICYmIG1f
cXVldWVkT3BlcmF0aW9uID09IE9wZXJhdGlvbk5vbmUpCisgICAgaWYgKHdyaXRlcigpICYmIG1f
cmVhZHlTdGF0ZSA9PSBXUklUSU5HCisgICAgICAgICYmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3Mg
PT0gT3BlcmF0aW9uV3JpdGUgfHwgbV9vcGVyYXRpb25JblByb2dyZXNzID09IE9wZXJhdGlvblRy
dW5jYXRlKSkKICAgICAgICAgd3JpdGVyKCktPmFib3J0KCk7CiAgICAgbV9ibG9iQmVpbmdXcml0
dGVuLmNsZWFyKCk7CiAgICAgbV9yZWFkeVN0YXRlID0gRE9ORTsKQEAgLTExOSwxMSArMTIwLDE0
IEBAIHZvaWQgRmlsZVdyaXRlcjo6d3JpdGUoQmxvYiogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiAgICAgbV9ieXRlc1dyaXR0ZW4gPSAwOwogICAgIG1fYnl0ZXNUb1dyaXRlID0gZGF0YS0+c2l6
ZSgpOwogICAgIEFTU0VSVChtX3F1ZXVlZE9wZXJhdGlvbiA9PSBPcGVyYXRpb25Ob25lKTsKLSAg
ICBpZiAobV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MpIC8vIFdlIG11c3QgYmUgd2FpdGluZyBmb3Ig
YW4gYWJvcnQgdG8gY29tcGxldGUsIHNpbmNlIG1fcmVhZHlTdGF0ZSB3YXNuJ3QgV1JJVElORy4K
KyAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzICE9IE9wZXJhdGlvbk5vbmUpIHsKKyAgICAg
ICAgLy8gV2UgbXVzdCBiZSB3YWl0aW5nIGZvciBhbiBhYm9ydCB0byBjb21wbGV0ZSwgc2luY2Ug
bV9yZWFkeVN0YXRlIHdhc24ndCBXUklUSU5HLgorICAgICAgICBBU1NFUlQobV9vcGVyYXRpb25J
blByb2dyZXNzID09IE9wZXJhdGlvbkFib3J0KTsKICAgICAgICAgbV9xdWV1ZWRPcGVyYXRpb24g
PSBPcGVyYXRpb25Xcml0ZTsKLSAgICBlbHNlCisgICAgfSBlbHNlIHsKICAgICAgICAgd3JpdGVy
KCktPndyaXRlKHBvc2l0aW9uKCksIG1fYmxvYkJlaW5nV3JpdHRlbi5nZXQoKSk7Ci0gICAgbV9p
c09wZXJhdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOworICAgICAgICBtX29wZXJhdGlvbkluUHJvZ3Jl
c3MgPSBPcGVyYXRpb25Xcml0ZTsKKyAgICB9CiAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS53
cml0ZXN0YXJ0RXZlbnQpOwogfQogCkBAIC0xNTcsMTEgKzE2MSwxNCBAQCB2b2lkIEZpbGVXcml0
ZXI6OnRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
bV9ieXRlc1RvV3JpdGUgPSAwOwogICAgIG1fdHJ1bmNhdGVMZW5ndGggPSBwb3NpdGlvbjsKICAg
ICBBU1NFUlQobV9xdWV1ZWRPcGVyYXRpb24gPT0gT3BlcmF0aW9uTm9uZSk7Ci0gICAgaWYgKG1f
aXNPcGVyYXRpb25JblByb2dyZXNzKSAvLyBXZSBtdXN0IGJlIHdhaXRpbmcgZm9yIGFuIGFib3J0
IHRvIGNvbXBsZXRlLgorICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gT3BlcmF0aW9u
Tm9uZSkgeworICAgICAgICAvLyBXZSBtdXN0IGJlIHdhaXRpbmcgZm9yIGFuIGFib3J0IHRvIGNv
bXBsZXRlLCBzaW5jZSBtX3JlYWR5U3RhdGUgd2Fzbid0IFdSSVRJTkcuCisgICAgICAgIEFTU0VS
VChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gT3BlcmF0aW9uQWJvcnQpOwogICAgICAgICBtX3F1
ZXVlZE9wZXJhdGlvbiA9IE9wZXJhdGlvblRydW5jYXRlOwotICAgIGVsc2UKKyAgICB9IGVsc2Ug
ewogICAgICAgICB3cml0ZXIoKS0+dHJ1bmNhdGUobV90cnVuY2F0ZUxlbmd0aCk7Ci0gICAgbV9p
c09wZXJhdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOworICAgICAgICBtX29wZXJhdGlvbkluUHJvZ3Jl
c3MgPSBPcGVyYXRpb25UcnVuY2F0ZTsKKyAgICB9CiAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMo
KS53cml0ZXN0YXJ0RXZlbnQpOwogfQogCkBAIC0xNzIsOCArMTc5LDEwIEBAIHZvaWQgRmlsZVdy
aXRlcjo6YWJvcnQoRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIHJldHVybjsKICAgICArK21f
bnVtQWJvcnRzOwogCi0gICAgaWYgKG1faXNPcGVyYXRpb25JblByb2dyZXNzKQorICAgIGlmICht
X29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gT3BlcmF0aW9uV3JpdGUgfHwgbV9vcGVyYXRpb25JblBy
b2dyZXNzID09IE9wZXJhdGlvblRydW5jYXRlKSB7CiAgICAgICAgIHdyaXRlcigpLT5hYm9ydCgp
OworICAgICAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBPcGVyYXRpb25BYm9ydDsKKyAgICB9
CiAgICAgbV9xdWV1ZWRPcGVyYXRpb24gPSBPcGVyYXRpb25Ob25lOwogICAgIG1fYmxvYkJlaW5n
V3JpdHRlbi5jbGVhcigpOwogICAgIG1fdHJ1bmNhdGVMZW5ndGggPSAtMTsKQEAgLTE4Miw0OCAr
MTkxLDU1IEBAIHZvaWQgRmlsZVdyaXRlcjo6YWJvcnQoRXhjZXB0aW9uQ29kZSYgZWMpCiAKIHZv
aWQgRmlsZVdyaXRlcjo6ZGlkV3JpdGUobG9uZyBsb25nIGJ5dGVzLCBib29sIGNvbXBsZXRlKQog
ewotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gV1JJVElORyk7Ci0gICAgQVNTRVJUKG1fdHJ1
bmNhdGVMZW5ndGggPT0gLTEpOwotICAgIEFTU0VSVChtX2lzT3BlcmF0aW9uSW5Qcm9ncmVzcyk7
Ci0gICAgQVNTRVJUKGJ5dGVzICsgbV9ieXRlc1dyaXR0ZW4gPiAwKTsKLSAgICBBU1NFUlQoYnl0
ZXMgKyBtX2J5dGVzV3JpdHRlbiA8PSBtX2J5dGVzVG9Xcml0ZSk7Ci0gICAgbV9ieXRlc1dyaXR0
ZW4gKz0gYnl0ZXM7Ci0gICAgQVNTRVJUKChtX2J5dGVzV3JpdHRlbiA9PSBtX2J5dGVzVG9Xcml0
ZSkgfHwgIWNvbXBsZXRlKTsKLSAgICBzZXRQb3NpdGlvbihwb3NpdGlvbigpICsgYnl0ZXMpOwot
ICAgIGlmIChwb3NpdGlvbigpID4gbGVuZ3RoKCkpCi0gICAgICAgIHNldExlbmd0aChwb3NpdGlv
bigpKTsKLSAgICAvLyBUT0RPOiBUaHJvdHRsZSB0byBubyBtb3JlIGZyZXF1ZW50bHkgdGhhbiBl
dmVyeSA1MG1zLgotICAgIGludCBudW1BYm9ydHMgPSBtX251bUFib3J0czsKLSAgICBmaXJlRXZl
bnQoZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQpOwotICAgIC8vIFdlIGNvdWxkIGdldCBhbiBh
Ym9ydCBpbiB0aGUgaGFuZGxlciBmb3IgdGhpcyBldmVudC4gSWYgd2UgZG8sIGl0J3MKLSAgICAv
LyBhbHJlYWR5IGhhbmRsZWQgdGhlIGNsZWFudXAgYW5kIHNpZ25hbENvbXBsZXRpb24gY2FsbC4K
LSAgICBpZiAoY29tcGxldGUgJiYgbnVtQWJvcnRzID09IG1fbnVtQWJvcnRzKSB7Ci0gICAgICAg
IG1fYmxvYkJlaW5nV3JpdHRlbi5jbGVhcigpOwotICAgICAgICBtX2lzT3BlcmF0aW9uSW5Qcm9n
cmVzcyA9IGZhbHNlOwotICAgICAgICBzaWduYWxDb21wbGV0aW9uKEZpbGVFcnJvcjo6T0spOwor
ICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gT3BlcmF0aW9uQWJvcnQpCisgICAgICAg
IGNvbXBsZXRlQWJvcnQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fcmVhZHlTdGF0
ZSA9PSBXUklUSU5HKTsKKyAgICAgICAgQVNTRVJUKG1fdHJ1bmNhdGVMZW5ndGggPT0gLTEpOwor
ICAgICAgICBBU1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IE9wZXJhdGlvbldyaXRlKTsK
KyAgICAgICAgQVNTRVJUKGJ5dGVzICsgbV9ieXRlc1dyaXR0ZW4gPiAwKTsKKyAgICAgICAgQVNT
RVJUKGJ5dGVzICsgbV9ieXRlc1dyaXR0ZW4gPD0gbV9ieXRlc1RvV3JpdGUpOworICAgICAgICBt
X2J5dGVzV3JpdHRlbiArPSBieXRlczsKKyAgICAgICAgQVNTRVJUKChtX2J5dGVzV3JpdHRlbiA9
PSBtX2J5dGVzVG9Xcml0ZSkgfHwgIWNvbXBsZXRlKTsKKyAgICAgICAgc2V0UG9zaXRpb24ocG9z
aXRpb24oKSArIGJ5dGVzKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uKCkgPiBsZW5ndGgoKSkKKyAg
ICAgICAgICAgIHNldExlbmd0aChwb3NpdGlvbigpKTsKKyAgICAgICAgLy8gVE9ETzogVGhyb3R0
bGUgdG8gbm8gbW9yZSBmcmVxdWVudGx5IHRoYW4gZXZlcnkgNTBtcy4KKyAgICAgICAgaW50IG51
bUFib3J0cyA9IG1fbnVtQWJvcnRzOworICAgICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLnBy
b2dyZXNzRXZlbnQpOworICAgICAgICAvLyBXZSBjb3VsZCBnZXQgYW4gYWJvcnQgaW4gdGhlIGhh
bmRsZXIgZm9yIHRoaXMgZXZlbnQuIElmIHdlIGRvLCBpdCdzCisgICAgICAgIC8vIGFscmVhZHkg
aGFuZGxlZCB0aGUgY2xlYW51cCBhbmQgc2lnbmFsQ29tcGxldGlvbiBjYWxsLgorICAgICAgICBp
ZiAoY29tcGxldGUgJiYgbnVtQWJvcnRzID09IG1fbnVtQWJvcnRzKSB7CisgICAgICAgICAgICBt
X2Jsb2JCZWluZ1dyaXR0ZW4uY2xlYXIoKTsKKyAgICAgICAgICAgIG1fb3BlcmF0aW9uSW5Qcm9n
cmVzcyA9IE9wZXJhdGlvbk5vbmU7CisgICAgICAgICAgICBzaWduYWxDb21wbGV0aW9uKEZpbGVF
cnJvcjo6T0spOworICAgICAgICB9CiAgICAgfQogfQogCiB2b2lkIEZpbGVXcml0ZXI6OmRpZFRy
dW5jYXRlKCkKIHsKLSAgICBBU1NFUlQobV90cnVuY2F0ZUxlbmd0aCA+PSAwKTsKLSAgICBzZXRM
ZW5ndGgobV90cnVuY2F0ZUxlbmd0aCk7Ci0gICAgaWYgKHBvc2l0aW9uKCkgPiBsZW5ndGgoKSkK
LSAgICAgICAgc2V0UG9zaXRpb24obGVuZ3RoKCkpOwotICAgIG1faXNPcGVyYXRpb25JblByb2dy
ZXNzID0gZmFsc2U7Ci0gICAgc2lnbmFsQ29tcGxldGlvbihGaWxlRXJyb3I6Ok9LKTsKKyAgICBp
ZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IE9wZXJhdGlvbkFib3J0KQorICAgICAgICBjb21w
bGV0ZUFib3J0KCk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChtX29wZXJhdGlvbkluUHJv
Z3Jlc3MgPT0gT3BlcmF0aW9uVHJ1bmNhdGUpOworICAgICAgICBBU1NFUlQobV90cnVuY2F0ZUxl
bmd0aCA+PSAwKTsKKyAgICAgICAgc2V0TGVuZ3RoKG1fdHJ1bmNhdGVMZW5ndGgpOworICAgICAg
ICBpZiAocG9zaXRpb24oKSA+IGxlbmd0aCgpKQorICAgICAgICAgICAgc2V0UG9zaXRpb24obGVu
Z3RoKCkpOworICAgICAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBPcGVyYXRpb25Ob25lOwor
ICAgICAgICBzaWduYWxDb21wbGV0aW9uKEZpbGVFcnJvcjo6T0spOworICAgIH0KIH0KIAogdm9p
ZCBGaWxlV3JpdGVyOjpkaWRGYWlsKEZpbGVFcnJvcjo6RXJyb3JDb2RlIGNvZGUpCiB7Ci0gICAg
QVNTRVJUKG1faXNPcGVyYXRpb25JblByb2dyZXNzKTsKLSAgICBtX2lzT3BlcmF0aW9uSW5Qcm9n
cmVzcyA9IGZhbHNlOworICAgIEFTU0VSVChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gT3BlcmF0
aW9uTm9uZSk7CiAgICAgQVNTRVJUKGNvZGUgIT0gRmlsZUVycm9yOjpPSyk7Ci0gICAgaWYgKGNv
ZGUgPT0gRmlsZUVycm9yOjpBQk9SVF9FUlIpIHsKLSAgICAgICAgT3BlcmF0aW9uIG9wZXJhdGlv
biA9IG1fcXVldWVkT3BlcmF0aW9uOwotICAgICAgICBtX3F1ZXVlZE9wZXJhdGlvbiA9IE9wZXJh
dGlvbk5vbmU7Ci0gICAgICAgIGRvT3BlcmF0aW9uKG9wZXJhdGlvbik7CisgICAgaWYgKG1fb3Bl
cmF0aW9uSW5Qcm9ncmVzcyA9PSBPcGVyYXRpb25BYm9ydCkgeworICAgICAgICBjb21wbGV0ZUFi
b3J0KCk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGNvZGUgIT0gRmlsZUVycm9yOjpB
Qk9SVF9FUlIpOwogICAgICAgICBBU1NFUlQobV9xdWV1ZWRPcGVyYXRpb24gPT0gT3BlcmF0aW9u
Tm9uZSk7CiAgICAgICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gV1JJVElORyk7CiAgICAgICAg
IG1fYmxvYkJlaW5nV3JpdHRlbi5jbGVhcigpOwpAQCAtMjMxLDMwICsyNDcsNDAgQEAgdm9pZCBG
aWxlV3JpdGVyOjpkaWRGYWlsKEZpbGVFcnJvcjo6RXJyb3JDb2RlIGNvZGUpCiAgICAgfQogfQog
Cit2b2lkIEZpbGVXcml0ZXI6OmNvbXBsZXRlQWJvcnQoKQoreworICAgIEFTU0VSVChtX29wZXJh
dGlvbkluUHJvZ3Jlc3MgPT0gT3BlcmF0aW9uQWJvcnQpOworICAgIG1fb3BlcmF0aW9uSW5Qcm9n
cmVzcyA9IE9wZXJhdGlvbk5vbmU7CisgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG1fcXVldWVk
T3BlcmF0aW9uOworICAgIG1fcXVldWVkT3BlcmF0aW9uID0gT3BlcmF0aW9uTm9uZTsKKyAgICBk
b09wZXJhdGlvbihvcGVyYXRpb24pOworfQorCiB2b2lkIEZpbGVXcml0ZXI6OmRvT3BlcmF0aW9u
KE9wZXJhdGlvbiBvcGVyYXRpb24pCiB7CiAgICAgQVNTRVJUKG1fcXVldWVkT3BlcmF0aW9uID09
IE9wZXJhdGlvbk5vbmUpOwotICAgIEFTU0VSVCghbV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MpOwot
ICAgIEFTU0VSVChvcGVyYXRpb24gPT0gT3BlcmF0aW9uTm9uZSB8fCBvcGVyYXRpb24gPT0gT3Bl
cmF0aW9uV3JpdGUgfHwgb3BlcmF0aW9uID09IE9wZXJhdGlvblRydW5jYXRlKTsKKyAgICBBU1NF
UlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IE9wZXJhdGlvbk5vbmUpOworICAgIG1fb3BlcmF0
aW9uSW5Qcm9ncmVzcyA9IG9wZXJhdGlvbjsKICAgICBzd2l0Y2ggKG9wZXJhdGlvbikgewogICAg
IGNhc2UgT3BlcmF0aW9uV3JpdGU6CiAgICAgICAgIEFTU0VSVChtX3RydW5jYXRlTGVuZ3RoID09
IC0xKTsKICAgICAgICAgQVNTRVJUKG1fYmxvYkJlaW5nV3JpdHRlbi5nZXQoKSk7CiAgICAgICAg
IEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gV1JJVElORyk7CiAgICAgICAgIHdyaXRlcigpLT53cml0
ZShwb3NpdGlvbigpLCBtX2Jsb2JCZWluZ1dyaXR0ZW4uZ2V0KCkpOwotICAgICAgICBtX2lzT3Bl
cmF0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgT3BlcmF0
aW9uVHJ1bmNhdGU6CiAgICAgICAgIEFTU0VSVChtX3RydW5jYXRlTGVuZ3RoID49IDApOwogICAg
ICAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFdSSVRJTkcpOwogICAgICAgICB3cml0ZXIoKS0+
dHJ1bmNhdGUobV90cnVuY2F0ZUxlbmd0aCk7Ci0gICAgICAgIG1faXNPcGVyYXRpb25JblByb2dy
ZXNzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPcGVyYXRpb25Ob25lOgogICAg
ICAgICBBU1NFUlQobV90cnVuY2F0ZUxlbmd0aCA9PSAtMSk7CiAgICAgICAgIEFTU0VSVCghbV9i
bG9iQmVpbmdXcml0dGVuLmdldCgpKTsKICAgICAgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBE
T05FKTsKICAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0ZpbGVXcml0ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVyLmgKaW5kZXggOTQ2MTM1MDcyNmFhNWUyZGZk
ZjQyNWMyMDAwYjVhNjYyNGY5MDhlMy4uOGI0NmQzYTdiMTU0MTUzYjYyOGM5Y2JhZDA4MTJlYmJi
MTI2MTZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0Zp
bGVXcml0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRmlsZVdy
aXRlci5oCkBAIC05MSw3ICs5MSw4IEBAIHByaXZhdGU6CiAgICAgZW51bSBPcGVyYXRpb24gewog
ICAgICAgICBPcGVyYXRpb25Ob25lLAogICAgICAgICBPcGVyYXRpb25Xcml0ZSwKLSAgICAgICAg
T3BlcmF0aW9uVHJ1bmNhdGUKKyAgICAgICAgT3BlcmF0aW9uVHJ1bmNhdGUsCisgICAgICAgIE9w
ZXJhdGlvbkFib3J0CiAgICAgfTsKIAogICAgIEZpbGVXcml0ZXIoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopOwpAQCAtMTA0LDYgKzEwNSw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBFdmVudFRh
cmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsg
fQogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKSB7
IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0KIAorICAgIHZvaWQgY29tcGxldGVBYm9ydCgp
OworCiAgICAgdm9pZCBkb09wZXJhdGlvbihPcGVyYXRpb24pOwogCiAgICAgdm9pZCBzaWduYWxD
b21wbGV0aW9uKEZpbGVFcnJvcjo6RXJyb3JDb2RlKTsKQEAgLTExNSw3ICsxMTgsNyBAQCBwcml2
YXRlOgogICAgIFJlZlB0cjxGaWxlRXJyb3I+IG1fZXJyb3I7CiAgICAgRXZlbnRUYXJnZXREYXRh
IG1fZXZlbnRUYXJnZXREYXRhOwogICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwotICAgIGJv
b2wgbV9pc09wZXJhdGlvbkluUHJvZ3Jlc3M7CisgICAgT3BlcmF0aW9uIG1fb3BlcmF0aW9uSW5Q
cm9ncmVzczsKICAgICBPcGVyYXRpb24gbV9xdWV1ZWRPcGVyYXRpb247CiAgICAgbG9uZyBsb25n
IG1fYnl0ZXNXcml0dGVuOwogICAgIGxvbmcgbG9uZyBtX2J5dGVzVG9Xcml0ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133923</attachid>
            <date>2012-03-26 16:27:27 -0700</date>
            <delta_ts>2012-03-27 09:15:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81861-20120326162725.patch</filename>
            <type>text/plain</type>
            <size>10098</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNDIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2RjNDUyN2Y4ZTBhNjEz
MTcwMTBmODJmMjU2ZjQwODA2MTc0OTAxMi4uOGEzYTkzMTYxNzVjZGVkNGE3OWZlN2Y1MWY5OWM3
YjQ5NGI1ZWI4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTAzLTI2ICBFcmlj
IFVocmhhbmUgIDxlcmljdUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRmlsZVdyaXRlciBoYXMg
dHdvIHJhY2UgY29uZGl0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODE4NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBTaG91bGQgbWFrZSBjdXJyZW50IHRlc3RzIGxlc3MgZmxha3kuCisKKyAgICAg
ICAgKiBNb2R1bGVzL2ZpbGVzeXN0ZW0vRmlsZVdyaXRlci5oOgorICAgICAgICAqIE1vZHVsZXMv
ZmlsZXN5c3RlbS9GaWxlV3JpdGVyLmNwcDoKKyAgICAgICAgVHJhY2sgdGhlIGluLWZsaWdodCBv
cGVyYXRpb24sIHdoZXRoZXIgaXQgYmUgYW4gYWJvcnQvd3JpdGUvdHJ1bmNhdGUuCisgICAgICAg
IFdoZXRoZXIgYW4gYWJvcnQgY29tZXMgYmFjayBhcyBkaWRXcml0ZSwgZGlkVHJ1bmNhdGUsIG9y
IGRpZEZhaWwsIGhhbmRsZQorICAgICAgICBpdCBhcHByb3ByaWF0ZWx5LiAgQmVmb3JlIHRoaXMg
Zml4LCB0aGUgQ2hyb21pdW0gaW1wbGVtZW50YXRpb24gd291bGQKKyAgICAgICAgYXNzZXJ0IGlu
IHR3byBjYXNlczoKKworICAgICAgICBJZiB0aGUgdXNlciBjYWxscyBhYm9ydCwgdGhlbiB3cml0
ZSwgdGhlbiBhYm9ydCBiZWZvcmUgdGhlIGJhY2tlbmQKKyAgICAgICAgY2F0Y2hlcyB1cCwgd2Un
ZCBzZW5kIGJvdGggYWJvcnRzIHRvIHRoZSBiYWNrZW5kLCBldmVuIHRob3VnaCBpdCBoYWRuJ3QK
KyAgICAgICAgcmVjZWl2ZWQgdGhlIHdyaXRlIHlldC4gIENocm9taXVtJ3MgYmFja2VuZCBhc3Nl
cnRzIGlmIHRoZXJlJ3MgYW4gYWJvcnQKKyAgICAgICAgd2l0aCBubyB3cml0ZSBpbiBwcm9ncmVz
cy4gIFdlIG5vdyByZWNvcmQgdGhhdCB3ZSd2ZSBzZW50IGFuIGFib3J0IGFuZAorICAgICAgICBh
cmUgd2FpdGluZyBmb3IgdGhlIHJlc3BvbnNlLgorCisgICAgICAgIElmIHRoZSB1c2VyIGNhbGxz
IGFib3J0IHdoaWxlIGEgd3JpdGUvdHJ1bmNhdGUgaXMganVzdCBmaW5pc2hpbmcsIG9uIHRoZQor
ICAgICAgICBDaHJvbWl1bSB3b3JrZXIgaW1wbGVtZW50YXRpb24sIHRoZSBjb21wbGV0aW9uIG1l
c3NhZ2UgY291bGQgYmUKKyAgICAgICAgdGhyZWFkLWhvcHBpbmcgYmFjayB0byBXZWJDb3JlIGF0
IHRoZQorICAgICAgICBXb3JrZXJBc3luY0ZpbGVXcml0ZXJDYWxsYmFja3NCcmlkZ2Ugd2hpbGUg
dGhlIGFib3J0IGlzIHRocmVhZC1ob3BwaW5nCisgICAgICAgIGluIHRoZSBvdGhlciBkaXJlY3Rp
b24uICBBZ2FpbiwgdGhpcyBsZWFkcyB0byBhbiBhYm9ydCBjYWxsIHRvIHRoZQorICAgICAgICBi
YWNrZW5kIHdpdGggbm8gd3JpdGUgaW4gcHJvZ3Jlc3MsIGFuZCBhbiBhc3NlcnQuICBXZSdyZSBu
b3cgcm9idXN0IHRvCisgICAgICAgIGNvbXBsZXRpb25zIGNvbWluZyBiYWNrIHdoZW4gd2UncmUg
ZXhwZWN0aW5nIGFuIGFib3J0LCBhbmQKKyAgICAgICAgaHR0cHM6Ly9jaHJvbWl1bWNvZGVyZXZp
ZXcuYXBwc3BvdC5jb20vOTc2NDAxOC8gd2lsbCBtYWtlIHRoZSBiYWNrZW5kCisgICAgICAgIHJv
YnVzdCB0byBleHRyYSBhYm9ydCBjYWxscy4KKwogMjAxMi0wMy0yMCAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeCBhZnRlciByMTExNDE5LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0ZpbGVXcml0ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0ZpbGVXcml0ZXIuY3BwCmluZGV4
IDU4NTg0YmIwYzY1ZDU1ZmM3NGNjOTc0NGU1OTU5NDRjZTBmZjg5MTIuLjZkMzI4NTY2YzhlZGM5
MzgwOTA2OGNiYWY0MGIzOTNhNWI5ODljODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ZpbGVzeXN0ZW0vRmlsZVdyaXRlci5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgUGFzc1JlZlB0
cjxGaWxlV3JpdGVyPiBGaWxlV3JpdGVyOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKIEZpbGVXcml0ZXI6OkZpbGVXcml0ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKICAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQogICAgICwgbV9y
ZWFkeVN0YXRlKElOSVQpCi0gICAgLCBtX2lzT3BlcmF0aW9uSW5Qcm9ncmVzcyhmYWxzZSkKKyAg
ICAsIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyhPcGVyYXRpb25Ob25lKQogICAgICwgbV9xdWV1ZWRP
cGVyYXRpb24oT3BlcmF0aW9uTm9uZSkKICAgICAsIG1fYnl0ZXNXcml0dGVuKDApCiAgICAgLCBt
X2J5dGVzVG9Xcml0ZSgwKQpAQCAtOTEsOSArOTEsOSBAQCBib29sIEZpbGVXcml0ZXI6OmNhblN1
c3BlbmQoKSBjb25zdAogdm9pZCBGaWxlV3JpdGVyOjpzdG9wKCkKIHsKICAgICAvLyBNYWtlIHN1
cmUgd2UndmUgYWN0dWFsbHkgZ290IHNvbWV0aGluZyB0byBzdG9wLCBhbmQgaGF2ZW4ndCBhbHJl
YWR5IGNhbGxlZCBhYm9ydCgpLgotICAgIGlmICh3cml0ZXIoKSAmJiBtX3JlYWR5U3RhdGUgPT0g
V1JJVElORyAmJiBtX2lzT3BlcmF0aW9uSW5Qcm9ncmVzcyAmJiBtX3F1ZXVlZE9wZXJhdGlvbiA9
PSBPcGVyYXRpb25Ob25lKQotICAgICAgICB3cml0ZXIoKS0+YWJvcnQoKTsKLSAgICBtX2Jsb2JC
ZWluZ1dyaXR0ZW4uY2xlYXIoKTsKKyAgICBpZiAoIXdyaXRlcigpIHx8IG1fcmVhZHlTdGF0ZSAh
PSBXUklUSU5HKQorICAgICAgICByZXR1cm47CisgICAgZG9PcGVyYXRpb24oT3BlcmF0aW9uQWJv
cnQpOwogICAgIG1fcmVhZHlTdGF0ZSA9IERPTkU7CiB9CiAKQEAgLTExOSwxMSArMTE5LDEzIEBA
IHZvaWQgRmlsZVdyaXRlcjo6d3JpdGUoQmxvYiogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAg
ICAgbV9ieXRlc1dyaXR0ZW4gPSAwOwogICAgIG1fYnl0ZXNUb1dyaXRlID0gZGF0YS0+c2l6ZSgp
OwogICAgIEFTU0VSVChtX3F1ZXVlZE9wZXJhdGlvbiA9PSBPcGVyYXRpb25Ob25lKTsKLSAgICBp
ZiAobV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MpIC8vIFdlIG11c3QgYmUgd2FpdGluZyBmb3IgYW4g
YWJvcnQgdG8gY29tcGxldGUsIHNpbmNlIG1fcmVhZHlTdGF0ZSB3YXNuJ3QgV1JJVElORy4KKyAg
ICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzICE9IE9wZXJhdGlvbk5vbmUpIHsKKyAgICAgICAg
Ly8gV2UgbXVzdCBiZSB3YWl0aW5nIGZvciBhbiBhYm9ydCB0byBjb21wbGV0ZSwgc2luY2UgbV9y
ZWFkeVN0YXRlIHdhc24ndCBXUklUSU5HLgorICAgICAgICBBU1NFUlQobV9vcGVyYXRpb25JblBy
b2dyZXNzID09IE9wZXJhdGlvbkFib3J0KTsKICAgICAgICAgbV9xdWV1ZWRPcGVyYXRpb24gPSBP
cGVyYXRpb25Xcml0ZTsKLSAgICBlbHNlCi0gICAgICAgIHdyaXRlcigpLT53cml0ZShwb3NpdGlv
bigpLCBtX2Jsb2JCZWluZ1dyaXR0ZW4uZ2V0KCkpOwotICAgIG1faXNPcGVyYXRpb25JblByb2dy
ZXNzID0gdHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgZG9PcGVyYXRpb24oT3BlcmF0aW9uV3Jp
dGUpOworCiAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS53cml0ZXN0YXJ0RXZlbnQpOwogfQog
CkBAIC0xNTcsMTEgKzE1OSwxMiBAQCB2b2lkIEZpbGVXcml0ZXI6OnRydW5jYXRlKGxvbmcgbG9u
ZyBwb3NpdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgbV9ieXRlc1RvV3JpdGUgPSAwOwog
ICAgIG1fdHJ1bmNhdGVMZW5ndGggPSBwb3NpdGlvbjsKICAgICBBU1NFUlQobV9xdWV1ZWRPcGVy
YXRpb24gPT0gT3BlcmF0aW9uTm9uZSk7Ci0gICAgaWYgKG1faXNPcGVyYXRpb25JblByb2dyZXNz
KSAvLyBXZSBtdXN0IGJlIHdhaXRpbmcgZm9yIGFuIGFib3J0IHRvIGNvbXBsZXRlLgorICAgIGlm
IChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gT3BlcmF0aW9uTm9uZSkgeworICAgICAgICAvLyBX
ZSBtdXN0IGJlIHdhaXRpbmcgZm9yIGFuIGFib3J0IHRvIGNvbXBsZXRlLCBzaW5jZSBtX3JlYWR5
U3RhdGUgd2Fzbid0IFdSSVRJTkcuCisgICAgICAgIEFTU0VSVChtX29wZXJhdGlvbkluUHJvZ3Jl
c3MgPT0gT3BlcmF0aW9uQWJvcnQpOwogICAgICAgICBtX3F1ZXVlZE9wZXJhdGlvbiA9IE9wZXJh
dGlvblRydW5jYXRlOwotICAgIGVsc2UKLSAgICAgICAgd3JpdGVyKCktPnRydW5jYXRlKG1fdHJ1
bmNhdGVMZW5ndGgpOwotICAgIG1faXNPcGVyYXRpb25JblByb2dyZXNzID0gdHJ1ZTsKKyAgICB9
IGVsc2UKKyAgICAgICAgZG9PcGVyYXRpb24oT3BlcmF0aW9uVHJ1bmNhdGUpOwogICAgIGZpcmVF
dmVudChldmVudE5hbWVzKCkud3JpdGVzdGFydEV2ZW50KTsKIH0KIApAQCAtMTcyLDE5ICsxNzUs
MTkgQEAgdm9pZCBGaWxlV3JpdGVyOjphYm9ydChFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAg
cmV0dXJuOwogICAgICsrbV9udW1BYm9ydHM7CiAKLSAgICBpZiAobV9pc09wZXJhdGlvbkluUHJv
Z3Jlc3MpCi0gICAgICAgIHdyaXRlcigpLT5hYm9ydCgpOwotICAgIG1fcXVldWVkT3BlcmF0aW9u
ID0gT3BlcmF0aW9uTm9uZTsKLSAgICBtX2Jsb2JCZWluZ1dyaXR0ZW4uY2xlYXIoKTsKLSAgICBt
X3RydW5jYXRlTGVuZ3RoID0gLTE7CisgICAgZG9PcGVyYXRpb24oT3BlcmF0aW9uQWJvcnQpOwog
ICAgIHNpZ25hbENvbXBsZXRpb24oRmlsZUVycm9yOjpBQk9SVF9FUlIpOwogfQogCiB2b2lkIEZp
bGVXcml0ZXI6OmRpZFdyaXRlKGxvbmcgbG9uZyBieXRlcywgYm9vbCBjb21wbGV0ZSkKIHsKKyAg
ICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IE9wZXJhdGlvbkFib3J0KSB7CisgICAgICAg
IGNvbXBsZXRlQWJvcnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBBU1NFUlQobV9y
ZWFkeVN0YXRlID09IFdSSVRJTkcpOwogICAgIEFTU0VSVChtX3RydW5jYXRlTGVuZ3RoID09IC0x
KTsKLSAgICBBU1NFUlQobV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MpOworICAgIEFTU0VSVChtX29w
ZXJhdGlvbkluUHJvZ3Jlc3MgPT0gT3BlcmF0aW9uV3JpdGUpOwogICAgIEFTU0VSVChieXRlcyAr
IG1fYnl0ZXNXcml0dGVuID4gMCk7CiAgICAgQVNTRVJUKGJ5dGVzICsgbV9ieXRlc1dyaXR0ZW4g
PD0gbV9ieXRlc1RvV3JpdGUpOwogICAgIG1fYnl0ZXNXcml0dGVuICs9IGJ5dGVzOwpAQCAtMTk5
LDYzICsyMDIsODMgQEAgdm9pZCBGaWxlV3JpdGVyOjpkaWRXcml0ZShsb25nIGxvbmcgYnl0ZXMs
IGJvb2wgY29tcGxldGUpCiAgICAgLy8gYWxyZWFkeSBoYW5kbGVkIHRoZSBjbGVhbnVwIGFuZCBz
aWduYWxDb21wbGV0aW9uIGNhbGwuCiAgICAgaWYgKGNvbXBsZXRlICYmIG51bUFib3J0cyA9PSBt
X251bUFib3J0cykgewogICAgICAgICBtX2Jsb2JCZWluZ1dyaXR0ZW4uY2xlYXIoKTsKLSAgICAg
ICAgbV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgbV9vcGVyYXRpb25J
blByb2dyZXNzID0gT3BlcmF0aW9uTm9uZTsKICAgICAgICAgc2lnbmFsQ29tcGxldGlvbihGaWxl
RXJyb3I6Ok9LKTsKICAgICB9CiB9CiAKIHZvaWQgRmlsZVdyaXRlcjo6ZGlkVHJ1bmNhdGUoKQog
eworICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gT3BlcmF0aW9uQWJvcnQpIHsKKyAg
ICAgICAgY29tcGxldGVBYm9ydCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VS
VChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gT3BlcmF0aW9uVHJ1bmNhdGUpOwogICAgIEFTU0VS
VChtX3RydW5jYXRlTGVuZ3RoID49IDApOwogICAgIHNldExlbmd0aChtX3RydW5jYXRlTGVuZ3Ro
KTsKICAgICBpZiAocG9zaXRpb24oKSA+IGxlbmd0aCgpKQogICAgICAgICBzZXRQb3NpdGlvbihs
ZW5ndGgoKSk7Ci0gICAgbV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICBtX29w
ZXJhdGlvbkluUHJvZ3Jlc3MgPSBPcGVyYXRpb25Ob25lOwogICAgIHNpZ25hbENvbXBsZXRpb24o
RmlsZUVycm9yOjpPSyk7CiB9CiAKIHZvaWQgRmlsZVdyaXRlcjo6ZGlkRmFpbChGaWxlRXJyb3I6
OkVycm9yQ29kZSBjb2RlKQogewotICAgIEFTU0VSVChtX2lzT3BlcmF0aW9uSW5Qcm9ncmVzcyk7
Ci0gICAgbV9pc09wZXJhdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICBBU1NFUlQobV9vcGVy
YXRpb25JblByb2dyZXNzICE9IE9wZXJhdGlvbk5vbmUpOwogICAgIEFTU0VSVChjb2RlICE9IEZp
bGVFcnJvcjo6T0spOwotICAgIGlmIChjb2RlID09IEZpbGVFcnJvcjo6QUJPUlRfRVJSKSB7Ci0g
ICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24gPSBtX3F1ZXVlZE9wZXJhdGlvbjsKLSAgICAgICAg
bV9xdWV1ZWRPcGVyYXRpb24gPSBPcGVyYXRpb25Ob25lOwotICAgICAgICBkb09wZXJhdGlvbihv
cGVyYXRpb24pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX3F1ZXVlZE9wZXJhdGlv
biA9PSBPcGVyYXRpb25Ob25lKTsKLSAgICAgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBXUklU
SU5HKTsKLSAgICAgICAgbV9ibG9iQmVpbmdXcml0dGVuLmNsZWFyKCk7Ci0gICAgICAgIHNpZ25h
bENvbXBsZXRpb24oY29kZSk7CisgICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBPcGVy
YXRpb25BYm9ydCkgeworICAgICAgICBjb21wbGV0ZUFib3J0KCk7CisgICAgICAgIHJldHVybjsK
ICAgICB9CisgICAgQVNTRVJUKGNvZGUgIT0gRmlsZUVycm9yOjpBQk9SVF9FUlIpOworICAgIEFT
U0VSVChtX3F1ZXVlZE9wZXJhdGlvbiA9PSBPcGVyYXRpb25Ob25lKTsKKyAgICBBU1NFUlQobV9y
ZWFkeVN0YXRlID09IFdSSVRJTkcpOworICAgIG1fYmxvYkJlaW5nV3JpdHRlbi5jbGVhcigpOwor
ICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE9wZXJhdGlvbk5vbmU7CisgICAgc2lnbmFsQ29t
cGxldGlvbihjb2RlKTsKK30KKwordm9pZCBGaWxlV3JpdGVyOjpjb21wbGV0ZUFib3J0KCkKK3sK
KyAgICBBU1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IE9wZXJhdGlvbkFib3J0KTsKKyAg
ICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBPcGVyYXRpb25Ob25lOworICAgIE9wZXJhdGlvbiBv
cGVyYXRpb24gPSBtX3F1ZXVlZE9wZXJhdGlvbjsKKyAgICBtX3F1ZXVlZE9wZXJhdGlvbiA9IE9w
ZXJhdGlvbk5vbmU7CisgICAgZG9PcGVyYXRpb24ob3BlcmF0aW9uKTsKIH0KIAogdm9pZCBGaWxl
V3JpdGVyOjpkb09wZXJhdGlvbihPcGVyYXRpb24gb3BlcmF0aW9uKQogewotICAgIEFTU0VSVCht
X3F1ZXVlZE9wZXJhdGlvbiA9PSBPcGVyYXRpb25Ob25lKTsKLSAgICBBU1NFUlQoIW1faXNPcGVy
YXRpb25JblByb2dyZXNzKTsKLSAgICBBU1NFUlQob3BlcmF0aW9uID09IE9wZXJhdGlvbk5vbmUg
fHwgb3BlcmF0aW9uID09IE9wZXJhdGlvbldyaXRlIHx8IG9wZXJhdGlvbiA9PSBPcGVyYXRpb25U
cnVuY2F0ZSk7CiAgICAgc3dpdGNoIChvcGVyYXRpb24pIHsKICAgICBjYXNlIE9wZXJhdGlvbldy
aXRlOgorICAgICAgICBBU1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IE9wZXJhdGlvbk5v
bmUpOwogICAgICAgICBBU1NFUlQobV90cnVuY2F0ZUxlbmd0aCA9PSAtMSk7CiAgICAgICAgIEFT
U0VSVChtX2Jsb2JCZWluZ1dyaXR0ZW4uZ2V0KCkpOwogICAgICAgICBBU1NFUlQobV9yZWFkeVN0
YXRlID09IFdSSVRJTkcpOwogICAgICAgICB3cml0ZXIoKS0+d3JpdGUocG9zaXRpb24oKSwgbV9i
bG9iQmVpbmdXcml0dGVuLmdldCgpKTsKLSAgICAgICAgbV9pc09wZXJhdGlvbkluUHJvZ3Jlc3Mg
PSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE9wZXJhdGlvblRydW5jYXRlOgorICAg
ICAgICBBU1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IE9wZXJhdGlvbk5vbmUpOwogICAg
ICAgICBBU1NFUlQobV90cnVuY2F0ZUxlbmd0aCA+PSAwKTsKICAgICAgICAgQVNTRVJUKG1fcmVh
ZHlTdGF0ZSA9PSBXUklUSU5HKTsKICAgICAgICAgd3JpdGVyKCktPnRydW5jYXRlKG1fdHJ1bmNh
dGVMZW5ndGgpOwotICAgICAgICBtX2lzT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgT3BlcmF0aW9uTm9uZToKKyAgICAgICAgQVNTRVJUKG1fb3Bl
cmF0aW9uSW5Qcm9ncmVzcyA9PSBPcGVyYXRpb25Ob25lKTsKICAgICAgICAgQVNTRVJUKG1fdHJ1
bmNhdGVMZW5ndGggPT0gLTEpOwogICAgICAgICBBU1NFUlQoIW1fYmxvYkJlaW5nV3JpdHRlbi5n
ZXQoKSk7CiAgICAgICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gRE9ORSk7CiAgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgT3BlcmF0aW9uQWJvcnQ6CisgICAgICAgIGlmIChtX29wZXJhdGlvbklu
UHJvZ3Jlc3MgPT0gT3BlcmF0aW9uV3JpdGUgfHwgbV9vcGVyYXRpb25JblByb2dyZXNzID09IE9w
ZXJhdGlvblRydW5jYXRlKQorICAgICAgICAgICAgd3JpdGVyKCktPmFib3J0KCk7CisgICAgICAg
IG1fcXVldWVkT3BlcmF0aW9uID0gT3BlcmF0aW9uTm9uZTsKKyAgICAgICAgbV9ibG9iQmVpbmdX
cml0dGVuLmNsZWFyKCk7CisgICAgICAgIG1fdHJ1bmNhdGVMZW5ndGggPSAtMTsKKyAgICAgICAg
YnJlYWs7CiAgICAgfQorICAgIEFTU0VSVChtX3F1ZXVlZE9wZXJhdGlvbiA9PSBPcGVyYXRpb25O
b25lKTsKKyAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBvcGVyYXRpb247CiB9CiAKIHZvaWQg
RmlsZVdyaXRlcjo6c2lnbmFsQ29tcGxldGlvbihGaWxlRXJyb3I6OkVycm9yQ29kZSBjb2RlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0ZpbGVXcml0ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9GaWxlV3JpdGVyLmgKaW5kZXgg
OTQ2MTM1MDcyNmFhNWUyZGZkZjQyNWMyMDAwYjVhNjYyNGY5MDhlMy4uOGI0NmQzYTdiMTU0MTUz
YjYyOGM5Y2JhZDA4MTJlYmJiMTI2MTZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9maWxlc3lzdGVtL0ZpbGVXcml0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZpbGVzeXN0ZW0vRmlsZVdyaXRlci5oCkBAIC05MSw3ICs5MSw4IEBAIHByaXZhdGU6CiAgICAg
ZW51bSBPcGVyYXRpb24gewogICAgICAgICBPcGVyYXRpb25Ob25lLAogICAgICAgICBPcGVyYXRp
b25Xcml0ZSwKLSAgICAgICAgT3BlcmF0aW9uVHJ1bmNhdGUKKyAgICAgICAgT3BlcmF0aW9uVHJ1
bmNhdGUsCisgICAgICAgIE9wZXJhdGlvbkFib3J0CiAgICAgfTsKIAogICAgIEZpbGVXcml0ZXIo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwpAQCAtMTA0LDYgKzEwNSw4IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZt
X2V2ZW50VGFyZ2V0RGF0YTsgfQogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVF
dmVudFRhcmdldERhdGEoKSB7IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0KIAorICAgIHZv
aWQgY29tcGxldGVBYm9ydCgpOworCiAgICAgdm9pZCBkb09wZXJhdGlvbihPcGVyYXRpb24pOwog
CiAgICAgdm9pZCBzaWduYWxDb21wbGV0aW9uKEZpbGVFcnJvcjo6RXJyb3JDb2RlKTsKQEAgLTEx
NSw3ICsxMTgsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxGaWxlRXJyb3I+IG1fZXJyb3I7CiAg
ICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwogICAgIFJlYWR5U3RhdGUgbV9y
ZWFkeVN0YXRlOwotICAgIGJvb2wgbV9pc09wZXJhdGlvbkluUHJvZ3Jlc3M7CisgICAgT3BlcmF0
aW9uIG1fb3BlcmF0aW9uSW5Qcm9ncmVzczsKICAgICBPcGVyYXRpb24gbV9xdWV1ZWRPcGVyYXRp
b247CiAgICAgbG9uZyBsb25nIG1fYnl0ZXNXcml0dGVuOwogICAgIGxvbmcgbG9uZyBtX2J5dGVz
VG9Xcml0ZTsK
</data>
<flag name="review"
          id="138046"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>