<?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>70184</bug_id>
          
          <creation_ts>2011-10-15 15:17:16 -0700</creation_ts>
          <short_desc>Change HTMLSelectElement::setSelectedIndex to use enums instead of bools</short_desc>
          <delta_ts>2011-11-01 19:47:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>abarth</cc>
    
    <cc>jonlee</cc>
    
    <cc>rniwa</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>484660</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-15 15:17:16 -0700</bug_when>
    <thetext>Many arguments to setSelectedIndex take boolean constants. Change them to use enums instead of bools.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486125</commentid>
    <comment_count>1</comment_count>
      <attachid>111459</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-18 10:08:39 -0700</bug_when>
    <thetext>Created attachment 111459
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486155</commentid>
    <comment_count>2</comment_count>
      <attachid>111459</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-18 10:38:19 -0700</bug_when>
    <thetext>Comment on attachment 111459
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests. (OOPS!)

Please remove this. cq- because of this line.

&gt; Source/WebCore/html/HTMLSelectElement.cpp:388
&gt; +            selectOption(index, LeaveOtherOptionsSelected, DoNotDispatchChangeEvent, NotUserDriven);

We can call setSelectedIndex(index, LeaveOtherOptionsSelected); here.

&gt; Source/WebCore/html/HTMLSelectElement.cpp:766
&gt; +        m_isProcessingUserDrivenChange = userDrivenChange;

I&apos;d prefer explicitly comparing userDrivenChange to UserDriven rather than implicitly coercing the enum to bool.

&gt; Source/WebCore/html/HTMLSelectElement.cpp:1010
&gt; +            selectOption(listToOptionIndex(listIndex), DeselectOtherOptions, DoNotDispatchChangeEvent, UserDriven);

Seems like you can just call setSelectedIndex(listToOptionIndex(listIndex), DeselectOtherOptions);

&gt; Source/WebCore/html/HTMLSelectElement.h:39
&gt; +enum ShouldDeselectOtherOptions { LeaveOtherOptionsSelected, DeselectOtherOptions };

I&apos;d prefer calling it KeepOtherOptionsSelectedIfAllowed given that selectOption can ignore this option when m_multiple is false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486200</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-18 11:47:36 -0700</bug_when>
    <thetext>Good suggestions. I’ll deal with this when I get back to the computer that happens to already have this patch on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489191</commentid>
    <comment_count>4</comment_count>
      <attachid>111459</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-23 22:58:31 -0700</bug_when>
    <thetext>Comment on attachment 111459
Patch

I’ve got a new better version of this that I’ll put up for review that goes a little bit further in renaming and refactoring as well as fixing everything Ryosuke mentioned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489192</commentid>
    <comment_count>5</comment_count>
      <attachid>112152</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-23 23:00:13 -0700</bug_when>
    <thetext>Created attachment 112152
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489499</commentid>
    <comment_count>6</comment_count>
      <attachid>112152</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-24 11:55:48 -0700</bug_when>
    <thetext>Comment on attachment 112152
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        OBSOLETE CHANGE LOG NEEDS TO BE UPDATED (OOPS)

Please update the change log.

&gt; Source/WebCore/html/HTMLSelectElement.cpp:749
&gt; +        selectOption(option-&gt;index(), DeselectOnlyToMaintainSingleOptionInvariant, DoNotDispatchChangeEvent, NotUserDriven);

Hm... DeselectOnlyToMaintainSingleOptionInvariant seems too verbose to me. How about DeselectIfMultiSelectIsDisallowed or DeselectIfOnlySingleSelectionIsAllowed (including their variants)?

&gt; Source/WebCore/html/HTMLSelectElement.cpp:754
&gt; +void HTMLSelectElement::selectOption(int optionIndex, ShouldDeselectOtherOptions deselectOptions, ShouldDispatchChangeEvent shouldDispatchChangeEvent, UserDrivenFlag userDrivenFlag)

&quot;flag&quot; makes me think of bit flags. I&apos;d prefer calling it EUserDriven. Also I just recalled that FrameSelection already defines EUserTriggered. Maybe we should move that to EUserTriggered.h and reuse it here?

&gt; Source/WebKit/chromium/ChangeLog:3
&gt; +        OBSOLETE CHANGE LOG NEEDS TO BE UPDATED (OOPS)

Please update the change log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489514</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-24 12:06:52 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; +        selectOption(option-&gt;index(), DeselectOnlyToMaintainSingleOptionInvariant, DoNotDispatchChangeEvent, NotUserDriven);
&gt; 
&gt; Hm... DeselectOnlyToMaintainSingleOptionInvariant seems too verbose to me. How about DeselectIfMultiSelectIsDisallowed or DeselectIfOnlySingleSelectionIsAllowed (including their variants)?

So far I don’t like any of these, including the one I used. Note that they are all about 6 or 7 words.

I do think the “only” is better than “if”. The ones with if don’t indicate what will be deselected very well.

&gt; &gt; +void HTMLSelectElement::selectOption(int optionIndex, ShouldDeselectOtherOptions deselectOptions, ShouldDispatchChangeEvent shouldDispatchChangeEvent, UserDrivenFlag userDrivenFlag)
&gt; 
&gt; &quot;flag&quot; makes me think of bit flags

OK. This is a bit flag; just a single one. But sure, I will stay away from flag.

&gt; I&apos;d prefer calling it EUserDriven.

I am not a fan of that “E”.

&gt; Also I just recalled that FrameSelection already defines EUserTriggered.

Sure, would be good to share that. Although there may be some subtle semantic difference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489571</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-24 13:32:17 -0700</bug_when>
    <thetext>Are you intending to upload a new patch for review? Or is the attachment 112152 supposed to have r? ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489643</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-24 14:27:23 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Are you intending to upload a new patch for review?

Yes. Not for a while, though.

&gt; Or is the attachment 112152 [details] supposed to have r? ?

No. I hadn’t written change log yet, so didn’t put it up for review yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490483</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-25 17:22:00 -0700</bug_when>
    <thetext>I think I should use a single set of flags instead of three separate arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490530</commentid>
    <comment_count>11</comment_count>
      <attachid>112441</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-25 18:45:46 -0700</bug_when>
    <thetext>Created attachment 112441
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490531</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-25 18:46:22 -0700</bug_when>
    <thetext>Still not up for review, still no change log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491353</commentid>
    <comment_count>13</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-10-26 22:33:14 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I think I should use a single set of flags instead of three separate arguments.

This looks good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494232</commentid>
    <comment_count>14</comment_count>
      <attachid>113244</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-01 15:44:59 -0700</bug_when>
    <thetext>Created attachment 113244
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494402</commentid>
    <comment_count>15</comment_count>
      <attachid>113244</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-11-01 19:13:30 -0700</bug_when>
    <thetext>Comment on attachment 113244
Patch

The patch improves the code readability very much!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494410</commentid>
    <comment_count>16</comment_count>
      <attachid>113244</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-01 19:47:37 -0700</bug_when>
    <thetext>Comment on attachment 113244
Patch

Clearing flags on attachment: 113244

Committed r99035: &lt;http://trac.webkit.org/changeset/99035&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494411</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-01 19:47:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111459</attachid>
            <date>2011-10-18 10:08:39 -0700</date>
            <delta_ts>2011-10-23 23:00:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70184-20111018100838.patch</filename>
            <type>text/plain</type>
            <size>20294</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3NzY2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAKKzIwMTEtMTAtMTggIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIENoYW5nZSBIVE1MU2VsZWN0RWxlbWVu
dDo6c2V0U2VsZWN0ZWRJbmRleCB0byB1c2UgZW51bXMgaW5zdGVhZCBvZiBib29scworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAxODQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChP
T1BTISkKKworICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NSFRNTC5tbToKKyAgICAgICAgKC1b
RE9NSFRNTFNlbGVjdEVsZW1lbnQgX2FjdGl2YXRlSXRlbUF0SW5kZXg6XSk6IFJlbW92ZWQgInRy
dWUiIHBhc3NlZCBmb3IgZGVzZWxlY3QKKyAgICAgICAgYXJndW1lbnQgb2Ygc2V0U2VsZWN0ZWRJ
bmRleEJ5VXNlciwgYmVjYXVzZSB0aGF0IGFyZ3VtZW50IHdhcyByZW1vdmVkLgorICAgICAgICAo
LVtET01IVE1MU2VsZWN0RWxlbWVudCBfYWN0aXZhdGVJdGVtQXRJbmRleDphbGxvd011bHRpcGxl
U2VsZWN0aW9uOl0pOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkKTog
VXNlIExlYXZlT3RoZXJPcHRpb25zU2VsZWN0ZWQgaW5zdGVhZAorICAgICAgICBvZiBmYWxzZSBm
b3IgdGhlIGFyZ3VtZW50IHRvIHNldFNlbGVjdGVkSW5kZXguCisgICAgICAgIChXZWJDb3JlOjpI
VE1MT3B0aW9uRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6IERpdHRvLgorCisgICAgICAgICog
aHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudDo6SFRNTFNlbGVjdEVsZW1lbnQpOiBVcGRhdGVkIHNpbmNlIG1fdXNlckRyaXZlbkNo
YW5nZQorICAgICAgICB3YXMgcmVuYW1lZCB0byBtX2lzUHJvY2Vzc2luZ1VzZXJEcml2ZW5DaGFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRl
eEJ5VXNlcik6IFJlbW92ZWQgZGVzZWxlY3QgYXJndW1lbnQsCisgICAgICAgIHdoaWNoIHdhcyBh
bHdheXMgdHJ1ZSBmb3IgYWxsIGNhbGxlcnMuIFVwZGF0ZWQgY29tbWVudC4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpoYXNQbGFjZWhvbGRlckxhYmVsT3B0aW9uKTogVXBk
YXRlZCBjb21tZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldE9w
dGlvbik6IENhbGwgdGhlIG5ldyBzZWxlY3RPcHRpb24gZnVuY3Rpb24uCisgICAgICAgIFRoZSBj
b2RlIHVzZWQgdG8gZXhwbGljaXRseSBhc2sgdGhlIGZ1bmN0aW9uIGl0IGNhbGxzIHRvIGRlc2Vs
ZWN0IGJhc2VkIG9uIHRoZQorICAgICAgICB2YWx1ZSBvZiBtX211bHRpcGxlLCBidXQgbm93IGl0
IGFsd2F5cyBwYXNzZXMgTGVhdmVPdGhlck9wdGlvbnNTZWxlY3RlZCwgc2luY2UKKyAgICAgICAg
dGhlIHNlbGVjdE9wdGlvbiBmdW5jdGlvbiBpdHNlbGYgY2hlY2tzIG1fbXVsdGlwbGUuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6ZGlzcGF0Y2hDaGFuZ2VFdmVudEZvck1l
bnVMaXN0KTogUmVuYW1lZCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICBBbHNvIHVwZGF0ZWQgZm9y
IG5hbWUgY2hhbmdlIHRvIG1faXNQcm9jZXNzaW5nVXNlckRyaXZlbkNoYW5nZS4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZWxlY3RPcHRpb24pOiBSZW5hbWVkIHRoaXMg
ZnJvbSBzZXRTZWxlY3RlZEluZGV4LgorICAgICAgICBDaGFuZ2VkIGFsbCBhcmd1bWVudHMgdG8g
YmUgZW51bXMuIEFkZGVkIGFuIGFzc2VydGlvbiB0byByZXBsYWNlIGEgY29tbWVudCBhbmQKKyAg
ICAgICAgdXBkYXRlZCBmb3Igb3RoZXIgcmVuYW1pbmcuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
U2VsZWN0RWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQpOiBVcGRhdGVkIGZvciBuYW1lIGNoYW5n
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpwbGF0Zm9ybUhhbmRsZUtl
eWRvd25FdmVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6
Om1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlTZXRTZWxlY3RlZEluZGV4KTogRGl0dG8u
CisKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50Lmg6IEFkZGVkIG9uZSBwdWJsaWMg
ZW51bSBhbmQgdHdvIHByaXZhdGUgZW51bXMgdG8gcmVwbGFjZQorICAgICAgICBib29sZWFucyBm
b3Igc29tZSBmdW5jdGlvbiBhcmd1bWVudHMuIFJlbW92ZWQgYW4gdW51c2VkIGFyZ3VtZW50IGZy
b20gdGhlCisgICAgICAgIHNldFNlbGVjdGVkSW5kZXhCeVVzZXIgYW5kIGFkZGVkIGEgRklYTUUg
YWJvdXQgaXRzIG5hbWUuIFJlbmFtZWQgbWVudUxpc3RPbkNoYW5nZQorICAgICAgICB0byBkaXNw
YXRjaENoYW5nZUV2ZW50Rm9yTWVudUxpc3QsIHNpbmNlICJvbnh4eCIgaXMgbm90IGEgZ29vZCB3
YXkgdG8gcmVmZXIgdG8KKyAgICAgICAgZnVuY3Rpb25zIHRoYXQgc2VuZCBET00gZXZlbnRzLiBS
ZW5hbWVkIHRoZSBpbnRlcm5hbCBzZXRTZWxlY3RlZEluZGV4IGZ1bmN0aW9uIHRvCisgICAgICAg
IHNlbGVjdE9wdGlvbiwgc2luY2UgaXQgcmVhbGx5IGlzIG5vdCBhICJzZXQgc2VsZWN0ZWQgaW5k
ZXgiIGZ1bmN0aW9uIGF0IGFsbC4KKyAgICAgICAgVGhlIHB1YmxpYyBmdW5jdGlvbiBzdGlsbCBo
YXMgdGhhdCBuYW1lIGJlY2F1c2UgdGhlIERPTSBiaW5kaW5ncyB1c2UgaXQgZm9yIHdoZW4KKyAg
ICAgICAgc2NyaXB0cyBjaGFuZ2UgdGhlIHZhbHVlIG9mICJzZWxlY3RlZEluZGV4Ii4gUmVuYW1l
ZCBtX3VzZXJEcml2ZW5DaGFuZ2UgdG8KKyAgICAgICAgbV9pc1Byb2Nlc3NpbmdVc2VyRHJpdmVu
Q2hhbmdlLiBPdGhlciBib29sZWFuIGRhdGEgbWVtYmVycyBjb3VsZCBwcm9iYWJseSB1c2UKKyAg
ICAgICAgYmV0dGVyIG5hbWVzIGFzIHdlbGwuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hh
bmdlZCk6IFJlbW92ZWQgInRydWUiIHBhc3NlZCBmb3IgZGVzZWxlY3QKKyAgICAgICAgYXJndW1l
bnQgb2Ygc2V0U2VsZWN0ZWRJbmRleEJ5VXNlciwgYmVjYXVzZSB0aGF0IGFyZ3VtZW50IHdhcyBy
ZW1vdmVkLgorCiAyMDExLTEwLTE4ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgTWFrZSBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIgYSBDYWNoZWRSZXNvdXJj
ZUNsaWVudC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSFRNTC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0JKHJl
dmlzaW9uIDk3NzUxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAgLSAodm9pZClfYWN0aXZhdGVJdGVt
QXRJbmRleDooaW50KWluZGV4CiB7CiAgICAgLy8gVXNlIHRoZSBzZXRTZWxlY3RlZEluZGV4QnlV
c2VyIGZ1bmN0aW9uIHNvIGEgY2hhbmdlIGV2ZW50IHdpbGwgYmUgZmlyZWQuIDxyZGFyOi8vcHJv
YmxlbS82NzYwNTkwPgogICAgIGlmIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0
ID0gY29yZShzZWxmKSkKLSAgICAgICAgc2VsZWN0LT5zZXRTZWxlY3RlZEluZGV4QnlVc2VyKGlu
ZGV4LCB0cnVlLCB0cnVlKTsKKyAgICAgICAgc2VsZWN0LT5zZXRTZWxlY3RlZEluZGV4QnlVc2Vy
KGluZGV4LCB0cnVlKTsKIH0KIAogLSAodm9pZClfYWN0aXZhdGVJdGVtQXRJbmRleDooaW50KWlu
ZGV4IGFsbG93TXVsdGlwbGVTZWxlY3Rpb246KEJPT0wpYWxsb3dNdWx0aXBsZVNlbGVjdGlvbgpA
QCAtMTU1LDcgKzE1NSw3IEBAIC0gKHZvaWQpX2FjdGl2YXRlSXRlbUF0SW5kZXg6KGludClpbmRl
eCAKICAgICAvLyBJZiB0aGlzIGlzIGEgPHNlbGVjdCBtdWx0aXBsZT4gdGhlIGFsbG93TXVsdGlw
bGVTZWxlY3Rpb24gZmxhZyB3aWxsIGFsbG93IHNldHRpbmcgbXVsdGlwbGUKICAgICAvLyBzZWxl
Y3Rpb25zIHdpdGhvdXQgY2xlYXJpbmcgdGhlIG90aGVyIHNlbGVjdGlvbnMuCiAgICAgaWYgKFdl
YkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBjb3JlKHNlbGYpKQotICAgICAgICBz
ZWxlY3QtPnNldFNlbGVjdGVkSW5kZXhCeVVzZXIoaW5kZXgsIHRydWUsIHRydWUsIGFsbG93TXVs
dGlwbGVTZWxlY3Rpb24pOworICAgICAgICBzZWxlY3QtPnNldFNlbGVjdGVkSW5kZXhCeVVzZXIo
aW5kZXgsIHRydWUsIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pOwogfQogCiBAZW5kCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gOTc3NTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVj
dGVkKGJvb2wKICAgICBPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZFN0YXRlKG1fZGF0YSwgdGhp
cywgc2VsZWN0ZWQpOwogCiAgICAgaWYgKEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBvd25l
clNlbGVjdEVsZW1lbnQoKSkKLSAgICAgICAgc2VsZWN0LT5zZXRTZWxlY3RlZEluZGV4KHNlbGVj
dGVkID8gaW5kZXgoKSA6IC0xLCBmYWxzZSk7CisgICAgICAgIHNlbGVjdC0+c2V0U2VsZWN0ZWRJ
bmRleChzZWxlY3RlZCA/IGluZGV4KCkgOiAtMSwgTGVhdmVPdGhlck9wdGlvbnNTZWxlY3RlZCk7
CiB9CiAKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUoYm9vbCBzZWxl
Y3RlZCkKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjppbnNlcnRl
ZEludG9UcmVlCiAgICAgICAgIHNlbGVjdC0+c2V0UmVjYWxjTGlzdEl0ZW1zKCk7CiAgICAgICAg
IC8vIEF2b2lkIG91ciBzZWxlY3RlZCgpIGdldHRlciBzaW5jZSBpdCB3aWxsIHJlY2FsY3VsYXRl
IGxpc3QgaXRlbXMgaW5jb3JyZWN0bHkgZm9yIHVzLgogICAgICAgICBpZiAobV9kYXRhLnNlbGVj
dGVkKCkpCi0gICAgICAgICAgICBzZWxlY3QtPnNldFNlbGVjdGVkSW5kZXgoaW5kZXgoKSwgZmFs
c2UpOworICAgICAgICAgICAgc2VsZWN0LT5zZXRTZWxlY3RlZEluZGV4KGluZGV4KCksIExlYXZl
T3RoZXJPcHRpb25zU2VsZWN0ZWQpOwogICAgICAgICBzZWxlY3QtPnNjcm9sbFRvU2VsZWN0aW9u
KCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50
LmNwcAkocmV2aXNpb24gOTc3NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBIVE1MU2VsZWN0RWxl
bWVudDo6SFRNTFNlbGVjdEVsZW1lbnQoY29uCiAgICAgLCBtX2FjdGl2ZVNlbGVjdGlvbkFuY2hv
ckluZGV4KC0xKQogICAgICwgbV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgtMSkKICAgICAsIG1f
cmVwZWF0aW5nQ2hhcigwKQotICAgICwgbV91c2VyRHJpdmVuQ2hhbmdlKGZhbHNlKQorICAgICwg
bV9pc1Byb2Nlc3NpbmdVc2VyRHJpdmVuQ2hhbmdlKGZhbHNlKQogICAgICwgbV9tdWx0aXBsZShm
YWxzZSkKICAgICAsIG1fYWN0aXZlU2VsZWN0aW9uU3RhdGUoZmFsc2UpCiAgICAgLCBtX3Nob3Vs
ZFJlY2FsY0xpc3RJdGVtcyhmYWxzZSkKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpkZXNlbGVjdEl0ZW1zKEhUCiAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7
CiB9CiAKLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXhCeVVzZXIoaW50
IG9wdGlvbkluZGV4LCBib29sIGRlc2VsZWN0LCBib29sIGZpcmVPbkNoYW5nZU5vdywgYm9vbCBh
bGxvd011bHRpcGxlU2VsZWN0aW9uKQordm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0
ZWRJbmRleEJ5VXNlcihpbnQgb3B0aW9uSW5kZXgsIGJvb2wgZmlyZU9uQ2hhbmdlTm93LCBib29s
IGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pCiB7CiAgICAgLy8gTGlzdCBib3ggc2VsZWN0cyBjYW4g
ZmlyZSBvbmNoYW5nZSBldmVudHMgdGhyb3VnaCB1c2VyIGludGVyYWN0aW9uLCBzdWNoIGFzCiAg
ICAgLy8gbW91c2Vkb3duIGV2ZW50cy4gVGhpcyBhbGxvd3MgdGhhdCBzYW1lIGJlaGF2aW9yIHBy
b2dyYW1tYXRpY2FsbHkuCkBAIC0xMjMsMjAgKzEyMywyMCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVt
ZW50OjpzZXRTZWxlY3RlZEluZGV4CiAgICAgfQogCiAgICAgLy8gQmFpbCBvdXQgaWYgdGhpcyBp
bmRleCBpcyBhbHJlYWR5IHRoZSBzZWxlY3RlZCBvbmUsIHRvIGF2b2lkIHJ1bm5pbmcgdW5uZWNl
c3NhcnkgSmF2YVNjcmlwdCB0aGF0IGNhbiBtZXNzIHVwCi0gICAgLy8gYXV0b2ZpbGwsIHdoZW4g
dGhlcmUgaXMgbm8gYWN0dWFsIGNoYW5nZSAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNTI1NiBhbmQgcmRhcjovLzc0Njc5MTcgKS4KLSAgICAvLyBQZXJoYXBz
IHRoaXMgbG9naWMgY291bGQgYmUgbW92ZWQgaW50byBTZWxlY3RFbGVtZW50LCBidXQgc29tZSBj
YWxsZXJzIG9mIFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXgoKQotICAgIC8vIHNlZW0g
dG8gZXhwZWN0IGl0IHRvIGZpcmUgaXRzIGNoYW5nZSBldmVudCBldmVuIHdoZW4gdGhlIGluZGV4
IHdhcyBhbHJlYWR5IHNlbGVjdGVkLgorICAgIC8vIGF1dG9maWxsIHdoZW4gdGhlcmUgaXMgbm8g
YWN0dWFsIGNoYW5nZSAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNTI1NiBhbmQgPHJkYXI6Ly83NDY3OTE3PikuCisgICAgLy8gUGVyaGFwcyB0aGlzIGxvZ2lj
IGNvdWxkIGJlIG1vdmVkIGludG8gc2VsZWN0T3B0aW9uLCBidXQgc29tZSBjYWxsZXJzIHNlZW0g
dG8gZXhwZWN0IGl0IHRvIGZpcmUgaXRzIGNoYW5nZQorICAgIC8vIGV2ZW50IGV2ZW4gd2hlbiB0
aGUgaW5kZXggd2FzIGFscmVhZHkgc2VsZWN0ZWQuCiAgICAgaWYgKG9wdGlvbkluZGV4ID09IHNl
bGVjdGVkSW5kZXgoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHNldFNlbGVjdGVkSW5k
ZXgob3B0aW9uSW5kZXgsIGRlc2VsZWN0LCBmaXJlT25DaGFuZ2VOb3csIHRydWUpOworCisgICAg
c2VsZWN0T3B0aW9uKG9wdGlvbkluZGV4LCBEZXNlbGVjdE90aGVyT3B0aW9ucywgZmlyZU9uQ2hh
bmdlTm93ID8gRGlzcGF0Y2hDaGFuZ2VFdmVudCA6IERvTm90RGlzcGF0Y2hDaGFuZ2VFdmVudCwg
VXNlckRyaXZlbik7CiB9CiAKIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6Omhhc1BsYWNlaG9sZGVy
TGFiZWxPcHRpb24oKSBjb25zdAogewogICAgIC8vIFRoZSBzZWxlY3QgZWxlbWVudCBoYXMgbm8g
cGxhY2Vob2xkZXIgbGFiZWwgb3B0aW9uIGlmIGl0IGhhcyBhbiBhdHRyaWJ1dGUgIm11bHRpcGxl
IiBzcGVjaWZpZWQgb3IgYSBkaXNwbGF5IHNpemUgb2Ygbm9uLTEuCiAgICAgLy8gCi0gICAgLy8g
VGhlIGNvbmRpdGlvbiAic2l6ZSgpID4gMSIgaXMgYWN0dWFsbHkgbm90IGNvbXBsaWFudCB3aXRo
IHRoZSBIVE1MNSBzcGVjIGFzIG9mIERlYyAzLCAyMDEwLiAic2l6ZSgpICE9IDEiIGlzIGNvcnJl
Y3QuCisgICAgLy8gVGhlIGNvbmRpdGlvbiAic2l6ZSgpID4gMSIgaXMgbm90IGNvbXBsaWFudCB3
aXRoIHRoZSBIVE1MNSBzcGVjIGFzIG9mIERlYyAzLCAyMDEwLiAic2l6ZSgpICE9IDEiIGlzIGNv
cnJlY3QuCiAgICAgLy8gVXNpbmcgInNpemUoKSA+IDEiIGhlcmUgYmVjYXVzZSBzaXplKCkgbWF5
IGJlIDAgaW4gV2ViS2l0LgogICAgIC8vIFNlZSB0aGUgZGlzY3Vzc2lvbiBhdCBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODcKICAgICAvLwpAQCAtMzg1LDcgKzM4
NSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldE9wdGlvbih1bnNpZ24KICAgICBpZiAo
IWVjKSB7CiAgICAgICAgIGFkZChvcHRpb24sIGJlZm9yZSwgZWMpOwogICAgICAgICBpZiAoZGlm
ZiA+PSAwICYmIG9wdGlvbi0+c2VsZWN0ZWQoKSkKLSAgICAgICAgICAgIHNldFNlbGVjdGVkSW5k
ZXgoaW5kZXgsICFtX211bHRpcGxlKTsKKyAgICAgICAgICAgIHNlbGVjdE9wdGlvbihpbmRleCwg
TGVhdmVPdGhlck9wdGlvbnNTZWxlY3RlZCwgRG9Ob3REaXNwYXRjaENoYW5nZUV2ZW50LCBOb3RV
c2VyRHJpdmVuKTsKICAgICB9CiB9CiAKQEAgLTYwNCwxNCArNjA0LDE0IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNoYW5nZSgKICAgICAgICAgZGlzcGF0Y2hGb3JtQ29udHJv
bENoYW5nZUV2ZW50KCk7CiB9CiAKLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0T25D
aGFuZ2UoKQordm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6ZGlzcGF0Y2hDaGFuZ2VFdmVudEZvck1l
bnVMaXN0KCkKIHsKICAgICBBU1NFUlQodXNlc01lbnVMaXN0KCkpOwogCiAgICAgaW50IHNlbGVj
dGVkID0gc2VsZWN0ZWRJbmRleCgpOwotICAgIGlmIChtX2xhc3RPbkNoYW5nZUluZGV4ICE9IHNl
bGVjdGVkICYmIG1fdXNlckRyaXZlbkNoYW5nZSkgeworICAgIGlmIChtX2xhc3RPbkNoYW5nZUlu
ZGV4ICE9IHNlbGVjdGVkICYmIG1faXNQcm9jZXNzaW5nVXNlckRyaXZlbkNoYW5nZSkgewogICAg
ICAgICBtX2xhc3RPbkNoYW5nZUluZGV4ID0gc2VsZWN0ZWQ7Ci0gICAgICAgIG1fdXNlckRyaXZl
bkNoYW5nZSA9IGZhbHNlOworICAgICAgICBtX2lzUHJvY2Vzc2luZ1VzZXJEcml2ZW5DaGFuZ2Ug
PSBmYWxzZTsKICAgICAgICAgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiAgICAg
fQogfQpAQCAtNzMxLDEyICs3MzEsMTIgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjpzZWxlY3Rl
ZEluZGV4KCkgYwogICAgIHJldHVybiAtMTsKIH0KIAotdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
c2V0U2VsZWN0ZWRJbmRleChpbnQgb3B0aW9uSW5kZXgsIGJvb2wgZGVzZWxlY3QsIGJvb2wgZmly
ZU9uQ2hhbmdlTm93LCBib29sIHVzZXJEcml2ZW5DaGFuZ2UpCit2b2lkIEhUTUxTZWxlY3RFbGVt
ZW50OjpzZWxlY3RPcHRpb24oaW50IG9wdGlvbkluZGV4LCBTaG91bGREZXNlbGVjdE90aGVyT3B0
aW9ucyBkZXNlbGVjdCwgU2hvdWxkRGlzcGF0Y2hDaGFuZ2VFdmVudCBmaXJlT25DaGFuZ2VOb3cs
IFVzZXJEcml2ZW5GbGFnIHVzZXJEcml2ZW5DaGFuZ2UpCiB7CiAgICAgaWYgKG9wdGlvbkluZGV4
ID09IC0xICYmICFkZXNlbGVjdCAmJiAhbV9tdWx0aXBsZSkKICAgICAgICAgb3B0aW9uSW5kZXgg
PSBuZXh0U2VsZWN0YWJsZUxpc3RJbmRleCgtMSk7CiAgICAgaWYgKCFtX211bHRpcGxlKQotICAg
ICAgICBkZXNlbGVjdCA9IHRydWU7CisgICAgICAgIGRlc2VsZWN0ID0gRGVzZWxlY3RPdGhlck9w
dGlvbnM7CiAKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRl
bXMoKTsKICAgICBpbnQgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgob3B0aW9uSW5kZXgp
OwpAQCAtNzYwLDExICs3NjAsMTIgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0
ZWRJbmRleAogCiAgICAgc2Nyb2xsVG9TZWxlY3Rpb24oKTsKIAotICAgIC8vIFRoaXMgb25seSBn
ZXRzIGNhbGxlZCB3aXRoIGZpcmVPbkNoYW5nZU5vdyBmb3IgbWVudSBsaXN0cy4gCi0gICAgaWYg
KHVzZXNNZW51TGlzdCgpKSB7Ci0gICAgICAgIG1fdXNlckRyaXZlbkNoYW5nZSA9IHVzZXJEcml2
ZW5DaGFuZ2U7CisgICAgaWYgKCF1c2VzTWVudUxpc3QoKSkKKyAgICAgICAgQVNTRVJUKCFmaXJl
T25DaGFuZ2VOb3cpOworICAgIGVsc2UgeworICAgICAgICBtX2lzUHJvY2Vzc2luZ1VzZXJEcml2
ZW5DaGFuZ2UgPSB1c2VyRHJpdmVuQ2hhbmdlOwogICAgICAgICBpZiAoZmlyZU9uQ2hhbmdlTm93
KQotICAgICAgICAgICAgbWVudUxpc3RPbkNoYW5nZSgpOworICAgICAgICAgICAgZGlzcGF0Y2hD
aGFuZ2VFdmVudEZvck1lbnVMaXN0KCk7CiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSB0aGlzLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgICAg
IGlmICh1c2VzTWVudUxpc3QoKSkKQEAgLTgyOSw3ICs4MzAsNyBAQCB2b2lkIEhUTUxTZWxlY3RF
bGVtZW50OjpkaXNwYXRjaEJsdXJFdmVuCiAgICAgLy8gY2hhbmdlIGV2ZW50cyBmb3IgbGlzdCBi
b3hlcyB3aGVuZXZlciB0aGUgc2VsZWN0aW9uIGNoYW5nZSBpcyBhY3R1YWxseSBtYWRlLgogICAg
IC8vIFRoaXMgbWF0Y2hlcyBvdGhlciBicm93c2VycycgYmVoYXZpb3IuCiAgICAgaWYgKHVzZXNN
ZW51TGlzdCgpKQotICAgICAgICBtZW51TGlzdE9uQ2hhbmdlKCk7CisgICAgICAgIGRpc3BhdGNo
Q2hhbmdlRXZlbnRGb3JNZW51TGlzdCgpOwogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGU6OmRpc3BhdGNoQmx1ckV2ZW50KG5ld0ZvY3VzZWROb2RlKTsKIH0KIApAQCAtOTUzLDcg
Kzk1NCw3IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OnBsYXRmb3JtSGFuZGxlS2UKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0
aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbgotICAgICAgICAg
ICAgLy8gd2hlbiBkaXNwYXRjaGluZyBjaGFuZ2UgZXZlbnRzIGR1cmluZyBzZXRTZWxlY3RlZElu
ZGV4LCB3aGljaAorICAgICAgICAgICAgLy8gd2hlbiBkaXNwYXRjaGluZyBjaGFuZ2UgZXZlbnRz
IGR1cmluZyBzZWxlY3RPcHRpb24sIHdoaWNoCiAgICAgICAgICAgICAvLyBnZXRzIGNhbGxlZCBm
cm9tIFJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQsIHdoaWNoIGdldHMgY2FsbGVkCiAgICAg
ICAgICAgICAvLyBhZnRlciB0aGUgdXNlciBtYWtlcyBhIHNlbGVjdGlvbiBmcm9tIHRoZSBtZW51
LgogICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oKTsKQEAgLTEwMDYsNyArMTAwNyw3IEBA
IHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEUKICAgICAgICAgICAgIGhh
bmRsZWQgPSBmYWxzZTsKIAogICAgICAgICBpZiAoaGFuZGxlZCAmJiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGxpc3RJbmRleCkgPCBsaXN0SXRlbXMuc2l6ZSgpKQotICAgICAgICAgICAgc2V0U2VsZWN0
ZWRJbmRleChsaXN0VG9PcHRpb25JbmRleChsaXN0SW5kZXgpLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7
CisgICAgICAgICAgICBzZWxlY3RPcHRpb24obGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSwg
RGVzZWxlY3RPdGhlck9wdGlvbnMsIERvTm90RGlzcGF0Y2hDaGFuZ2VFdmVudCwgVXNlckRyaXZl
bik7CiAKICAgICAgICAgaWYgKGhhbmRsZWQpCiAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKQEAgLTEwMzgsNyArMTAzOSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6
Om1lbnVMaXN0RGVmYXVsdEUKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAg
IC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5ldyBz
ZWxlY3Rpb24KLSAgICAgICAgICAgIC8vIHdoZW4gZGlzcGF0Y2hpbmcgY2hhbmdlIGV2ZW50cyBk
dXJpbmcgc2V0U2VsZWN0ZWRJbmRleCwgd2hpY2gKKyAgICAgICAgICAgIC8vIHdoZW4gZGlzcGF0
Y2hpbmcgY2hhbmdlIGV2ZW50cyBkdXJpbmcgc2VsZWN0T3B0aW9uLCB3aGljaAogICAgICAgICAg
ICAgLy8gZ2V0cyBjYWxsZWQgZnJvbSBSZW5kZXJNZW51TGlzdDo6dmFsdWVDaGFuZ2VkLCB3aGlj
aCBnZXRzIGNhbGxlZAogICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIHVzZXIgbWFrZXMgYSBzZWxl
Y3Rpb24gZnJvbSB0aGUgbWVudS4KICAgICAgICAgICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7CkBA
IC0xMDU2LDcgKzEwNTcsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1
bHRFCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAvLyBTYXZlIHRoZSBz
ZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uCi0gICAg
ICAgICAgICAvLyB3aGVuIGRpc3BhdGNoaW5nIGNoYW5nZSBldmVudHMgZHVyaW5nIHNldFNlbGVj
dGVkSW5kZXgsIHdoaWNoCisgICAgICAgICAgICAvLyB3aGVuIGRpc3BhdGNoaW5nIGNoYW5nZSBl
dmVudHMgZHVyaW5nIHNlbGVjdE9wdGlvbiwgd2hpY2gKICAgICAgICAgICAgIC8vIGdldHMgY2Fs
bGVkIGZyb20gUmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hhbmdlZCwgd2hpY2ggZ2V0cyBjYWxsZWQK
ICAgICAgICAgICAgIC8vIGFmdGVyIHRoZSB1c2VyIG1ha2VzIGEgc2VsZWN0aW9uIGZyb20gdGhl
IG1lbnUuCiAgICAgICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbigpOwpAQCAtMTA2NiwxNCArMTA2
NywxNCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRFCiAgICAgICAg
IH0gZWxzZSBpZiAoa2V5Q29kZSA9PSAnXHInKSB7CiAgICAgICAgICAgICBpZiAoZm9ybSgpKQog
ICAgICAgICAgICAgICAgIGZvcm0oKS0+c3VibWl0SW1wbGljaXRseShldmVudCwgZmFsc2UpOwot
ICAgICAgICAgICAgbWVudUxpc3RPbkNoYW5nZSgpOworICAgICAgICAgICAgZGlzcGF0Y2hDaGFu
Z2VFdmVudEZvck1lbnVMaXN0KCk7CiAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAg
ICAgfQogI2Vsc2UKICAgICAgICAgaW50IGxpc3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KHNl
bGVjdGVkSW5kZXgoKSk7CiAgICAgICAgIGlmIChrZXlDb2RlID09ICdccicpIHsKICAgICAgICAg
ICAgIC8vIGxpc3RJbmRleCBzaG91bGQgYWxyZWFkeSBiZSBzZWxlY3RlZCwgYnV0IHRoaXMgd2ls
bCBmaXJlIHRoZSBvbmNoYW5nZSBoYW5kbGVyLgotICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRl
eChsaXN0VG9PcHRpb25JbmRleChsaXN0SW5kZXgpLCB0cnVlLCB0cnVlLCB0cnVlKTsKKyAgICAg
ICAgICAgIHNlbGVjdE9wdGlvbihsaXN0VG9PcHRpb25JbmRleChsaXN0SW5kZXgpLCBEZXNlbGVj
dE90aGVyT3B0aW9ucywgRGlzcGF0Y2hDaGFuZ2VFdmVudCwgVXNlckRyaXZlbik7CiAgICAgICAg
ICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC0xMDg5LDcgKzEwOTAs
NyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRFCiAgICAgICAgICAg
ICAgICAgICAgIG1lbnVMaXN0LT5oaWRlUG9wdXAoKTsKICAgICAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBj
b21wYXJlZCB0byB0aGUgbmV3Ci0gICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGlvbiB3aGVu
IHdlIGNhbGwgb25DaGFuZ2UgZHVyaW5nIHNldFNlbGVjdGVkSW5kZXgsCisgICAgICAgICAgICAg
ICAgICAgIC8vIHNlbGVjdGlvbiB3aGVuIHdlIGNhbGwgb25DaGFuZ2UgZHVyaW5nIHNlbGVjdE9w
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBSZW5k
ZXJNZW51TGlzdDo6dmFsdWVDaGFuZ2VkLAogICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCBn
ZXRzIGNhbGxlZCBhZnRlciB0aGUgdXNlciBtYWtlcyBhIHNlbGVjdGlvbiBmcm9tCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZSBtZW51LgpAQCAtMTM4NSw3ICsxMzg2LDcgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6dHlwZUFoZWFkRmluZChLZQogICAgICAgICAvLyBGb2xkIHRoZSBvcHRp
b24gc3RyaW5nIGFuZCBjaGVjayBpZiBpdHMgcHJlZml4IGlzIGVxdWFsIHRvIHRoZSBmb2xkZWQg
cHJlZml4LgogICAgICAgICBTdHJpbmcgdGV4dCA9IG9wdGlvbkVsZW1lbnQtPnRleHRJbmRlbnRl
ZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKICAgICAgICAgaWYgKHN0cmlwTGVhZGluZ1doaXRlU3Bh
Y2UodGV4dCkuZm9sZENhc2UoKS5zdGFydHNXaXRoKHByZWZpeFdpdGhDYXNlRm9sZGVkKSkgewot
ICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChsaXN0VG9PcHRpb25JbmRleChpbmRleCksIHRy
dWUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIHNlbGVjdE9wdGlvbihsaXN0VG9PcHRpb25J
bmRleChpbmRleCksIERlc2VsZWN0T3RoZXJPcHRpb25zLCBEb05vdERpc3BhdGNoQ2hhbmdlRXZl
bnQsIFVzZXJEcml2ZW4pOwogICAgICAgICAgICAgaWYgKCF1c2VzTWVudUxpc3QoKSkKICAgICAg
ICAgICAgICAgICBsaXN0Qm94T25DaGFuZ2UoKTsKIApAQCAtMTQxOCwxMSArMTQxOSwxMSBAQCB2
b2lkIEhUTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlTZXRTZWxlCiAgICAgICAgIGlmIChvcHRp
b25FbGVtZW50LT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgb3B0aW9uRWxlbWVudC0+c2V0U2Vs
ZWN0ZWRTdGF0ZShmYWxzZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldFNlbGVjdGVk
SW5kZXgoaW5kZXgsIGZhbHNlLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgIHNlbGVjdE9wdGlv
bihpbmRleCwgTGVhdmVPdGhlck9wdGlvbnNTZWxlY3RlZCwgRGlzcGF0Y2hDaGFuZ2VFdmVudCwg
VXNlckRyaXZlbik7CiAgICAgfQogCiAgICAgaWYgKHVzZXNNZW51TGlzdCgpKQotICAgICAgICBt
ZW51TGlzdE9uQ2hhbmdlKCk7CisgICAgICAgIGRpc3BhdGNoQ2hhbmdlRXZlbnRGb3JNZW51TGlz
dCgpOwogICAgIGVsc2UKICAgICAgICAgbGlzdEJveE9uQ2hhbmdlKCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDk3NzUxKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NiwxMyArMzYsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTE9wdGlvbkVsZW1l
bnQ7CiBjbGFzcyBIVE1MT3B0aW9uc0NvbGxlY3Rpb247CiAKK2VudW0gU2hvdWxkRGVzZWxlY3RP
dGhlck9wdGlvbnMgeyBMZWF2ZU90aGVyT3B0aW9uc1NlbGVjdGVkLCBEZXNlbGVjdE90aGVyT3B0
aW9ucyB9OworCiBjbGFzcyBIVE1MU2VsZWN0RWxlbWVudCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1M
U2VsZWN0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhU
TUxGb3JtRWxlbWVudCopOwogCiAgICAgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdDsKLSAgICB2
b2lkIHNldFNlbGVjdGVkSW5kZXgoaW50IGluZGV4LCBib29sIGRlc2VsZWN0ID0gdHJ1ZSk7Ci0g
ICAgdm9pZCBzZXRTZWxlY3RlZEluZGV4QnlVc2VyKGludCBpbmRleCwgYm9vbCBkZXNlbGVjdCA9
IHRydWUsIGJvb2wgZmlyZU9uQ2hhbmdlTm93ID0gZmFsc2UsIGJvb2wgYWxsb3dNdWx0aXBsZVNl
bGVjdGlvbiA9IGZhbHNlKTsKKyAgICB2b2lkIHNldFNlbGVjdGVkSW5kZXgoaW50IGluZGV4LCBT
aG91bGREZXNlbGVjdE90aGVyT3B0aW9ucyA9IERlc2VsZWN0T3RoZXJPcHRpb25zKTsKKworICAg
IC8vIEZJWE1FOiBUaGUgcGhyYXNlICJzZXQgc2VsZWN0ZWQgYnkgdXNlciIgaXMgbm90IGEgZ3Jl
YXQgbmFtZSBmb3IgdGhpcy4KKyAgICAvLyBJdCdzIG1vcmUgImNob29zZSBhbiBvcHRpb24gb24g
YmVoYWxmIG9mIHRoZSB1c2VyIi4KKyAgICB2b2lkIHNldFNlbGVjdGVkSW5kZXhCeVVzZXIoaW50
IGluZGV4LCBib29sIGRpc3BhdGNoQ2hhbmdlRXZlbnQsIGJvb2wgYWxsb3dNdWx0aXBsZVNlbGVj
dGlvbiA9IGZhbHNlKTsKIAogICAgIC8vIEZvciBWYWxpZGl0eVN0YXRlCiAgICAgYm9vbCB2YWx1
ZU1pc3NpbmcoKSBjb25zdDsKQEAgLTEyNCw3ICsxMjksNyBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKIAotICAgIHZvaWQgbWVudUxp
c3RPbkNoYW5nZSgpOworICAgIHZvaWQgZGlzcGF0Y2hDaGFuZ2VFdmVudEZvck1lbnVMaXN0KCk7
CiAgICAgCiAgICAgdm9pZCByZWNhbGNMaXN0SXRlbXMoYm9vbCB1cGRhdGVTZWxlY3RlZFN0YXRl
cyA9IHRydWUpIGNvbnN0OwogCkBAIC0xMzksNyArMTQ0LDkgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgaGFzUGxhY2Vob2xkZXJMYWJlbE9wdGlvbigpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRTZWxl
Y3RlZEluZGV4KGludCBvcHRpb25JbmRleCwgYm9vbCBkZXNlbGVjdCwgYm9vbCBmaXJlT25DaGFu
Z2VOb3csIGJvb2wgdXNlckRyaXZlbkNoYW5nZSk7CisgICAgZW51bSBTaG91bGREaXNwYXRjaENo
YW5nZUV2ZW50IHsgRG9Ob3REaXNwYXRjaENoYW5nZUV2ZW50LCBEaXNwYXRjaENoYW5nZUV2ZW50
IH07CisgICAgZW51bSBVc2VyRHJpdmVuRmxhZyB7IE5vdFVzZXJEcml2ZW4sIFVzZXJEcml2ZW4g
fTsKKyAgICB2b2lkIHNlbGVjdE9wdGlvbihpbnQgb3B0aW9uSW5kZXgsIFNob3VsZERlc2VsZWN0
T3RoZXJPcHRpb25zLCBTaG91bGREaXNwYXRjaENoYW5nZUV2ZW50LCBVc2VyRHJpdmVuRmxhZyk7
CiAgICAgdm9pZCBkZXNlbGVjdEl0ZW1zV2l0aG91dFZhbGlkYXRpb24oRWxlbWVudCogZXhjbHVk
ZUVsZW1lbnQgPSAwKTsKICAgICB2b2lkIHBhcnNlTXVsdGlwbGVBdHRyaWJ1dGUoY29uc3QgQXR0
cmlidXRlKik7CiAgICAgaW50IGxhc3RTZWxlY3RlZExpc3RJbmRleCgpIGNvbnN0OwpAQCAtMTc1
LDE1ICsxODIsMTUgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9hY3RpdmVTZWxlY3Rpb25BbmNob3JJ
bmRleDsKICAgICBpbnQgbV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleDsKICAgICBVQ2hhciBtX3Jl
cGVhdGluZ0NoYXI7Ci0gICAgYm9vbCBtX3VzZXJEcml2ZW5DaGFuZ2U7CisgICAgYm9vbCBtX2lz
UHJvY2Vzc2luZ1VzZXJEcml2ZW5DaGFuZ2U7CiAgICAgYm9vbCBtX211bHRpcGxlOwogICAgIGJv
b2wgbV9hY3RpdmVTZWxlY3Rpb25TdGF0ZTsKICAgICBtdXRhYmxlIGJvb2wgbV9zaG91bGRSZWNh
bGNMaXN0SXRlbXM7CiB9OwogCi1pbmxpbmUgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2Vs
ZWN0ZWRJbmRleChpbnQgaW5kZXgsIGJvb2wgZGVzZWxlY3QpCitpbmxpbmUgdm9pZCBIVE1MU2Vs
ZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleChpbnQgaW5kZXgsIFNob3VsZERlc2VsZWN0T3Ro
ZXJPcHRpb25zIHNob3VsZERlc2VsZWN0T3RoZXJPcHRpb25zKQogewotICAgIHNldFNlbGVjdGVk
SW5kZXgoaW5kZXgsIGRlc2VsZWN0LCBmYWxzZSwgZmFsc2UpOworICAgIHNlbGVjdE9wdGlvbihp
bmRleCwgc2hvdWxkRGVzZWxlY3RPdGhlck9wdGlvbnMsIERvTm90RGlzcGF0Y2hDaGFuZ2VFdmVu
dCwgTm90VXNlckRyaXZlbik7CiB9CiAKIGlubGluZSBib29sIEhUTUxTZWxlY3RFbGVtZW50Ojp1
c2VzTWVudUxpc3QoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiA5Nzc1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw3ICszMjYsNyBA
QCB2b2lkIFJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQodW5zaWduCiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9IVE1MU2VsZWN0RWxl
bWVudChub2RlKCkpOwotICAgIHNlbGVjdC0+c2V0U2VsZWN0ZWRJbmRleEJ5VXNlcihzZWxlY3Qt
Pmxpc3RUb09wdGlvbkluZGV4KGxpc3RJbmRleCksIHRydWUsIGZpcmVPbkNoYW5nZSk7CisgICAg
c2VsZWN0LT5zZXRTZWxlY3RlZEluZGV4QnlVc2VyKHNlbGVjdC0+bGlzdFRvT3B0aW9uSW5kZXgo
bGlzdEluZGV4KSwgZmlyZU9uQ2hhbmdlKTsKIH0KIAogI2lmIEVOQUJMRShOT19MSVNUQk9YX1JF
TkRFUklORykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA5Nzc2NikK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTEtMTAtMTggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgor
CisgICAgICAgIENoYW5nZSBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleCB0byB1
c2UgZW51bXMgaW5zdGVhZCBvZiBib29scworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzAxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHRlc3RzL1BvcHVwTWVudVRlc3QuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpUZXN0UG9wdXBNZW51Q2xpZW50Ojp2YWx1ZUNoYW5nZWQpOiBSZW1vdmVkICJ0cnVlIiBw
YXNzZWQgYXMgdGhlCisgICAgICAgIGRlc2VsZWN0IGFyZ3VtZW50IG9mIHNldFNlbGVjdGVkSW5k
ZXhCeVVzZXIsIGJlY2F1c2UgdGhhdCBhcmd1bWVudCB3YXMgcmVtb3ZlZC4KKwogMjAxMS0xMC0x
OCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBi
dXR0b25zIG9mIG51bWJlciB0eXBlIDxpbnB1dD4gY29udHJvbHMgYXJlIG5vdCBmdWxseSBhY2Nl
c3NpYmxlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51
VGVzdC5jcHAJKHJldmlzaW9uIDk3NzUxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9Qb3B1cE1lbnVUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fc2VsZWN0SW5kZXggPSBsaXN0SW5kZXg7CiAgICAgICAgIGlmIChtX25v
ZGUpIHsKICAgICAgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b0hUTUxTZWxl
Y3RFbGVtZW50KG1fbm9kZSk7Ci0gICAgICAgICAgICBzZWxlY3QtPnNldFNlbGVjdGVkSW5kZXhC
eVVzZXIoc2VsZWN0LT5saXN0VG9PcHRpb25JbmRleChsaXN0SW5kZXgpLCB0cnVlLCBmaXJlRXZl
bnRzKTsKKyAgICAgICAgICAgIHNlbGVjdC0+c2V0U2VsZWN0ZWRJbmRleEJ5VXNlcihzZWxlY3Qt
Pmxpc3RUb09wdGlvbkluZGV4KGxpc3RJbmRleCksIGZpcmVFdmVudHMpOwogICAgICAgICB9CiAg
ICAgfQogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKHVuc2lnbmVkLCBib29sKSB7
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112152</attachid>
            <date>2011-10-23 23:00:13 -0700</date>
            <delta_ts>2011-10-25 18:45:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70184-20111023230012.patch</filename>
            <type>text/plain</type>
            <size>23808</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4MjE1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjAgQEAKKzIwMTEtMTAtMjMgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE9CU09MRVRFIENIQU5HRSBMT0cgTkVF
RFMgVE8gQkUgVVBEQVRFRCAoT09QUykKKworICAgICAgICBDaGFuZ2UgSFRNTFNlbGVjdEVsZW1l
bnQ6OnNldFNlbGVjdGVkSW5kZXggdG8gdXNlIGVudW1zIGluc3RlYWQgb2YgYm9vbHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMTg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3JpbmcgdGhh
dCBkb2VzIG5vdCByZXF1aXJlIG5ldyB0ZXN0cy4KKworICAgICAgICAqIGJpbmRpbmdzL29iamMv
RE9NSFRNTC5tbToKKyAgICAgICAgKC1bRE9NSFRNTFNlbGVjdEVsZW1lbnQgX2FjdGl2YXRlSXRl
bUF0SW5kZXg6XSk6IFJlbW92ZWQgInRydWUiIHBhc3NlZCBmb3IgZGVzZWxlY3QKKyAgICAgICAg
YXJndW1lbnQgb2Ygc2V0U2VsZWN0ZWRJbmRleEJ5VXNlciwgYmVjYXVzZSB0aGF0IGFyZ3VtZW50
IHdhcyByZW1vdmVkLgorICAgICAgICAoLVtET01IVE1MU2VsZWN0RWxlbWVudCBfYWN0aXZhdGVJ
dGVtQXRJbmRleDphbGxvd011bHRpcGxlU2VsZWN0aW9uOl0pOiBEaXR0by4KKworICAgICAgICAq
IGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlv
bkVsZW1lbnQ6OnNldFNlbGVjdGVkKTogVXNlIExlYXZlT3RoZXJPcHRpb25zU2VsZWN0ZWQgaW5z
dGVhZAorICAgICAgICBvZiBmYWxzZSBmb3IgdGhlIGFyZ3VtZW50IHRvIHNldFNlbGVjdGVkSW5k
ZXguCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJl
ZSk6IERpdHRvLgorCisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6SFRNTFNlbGVjdEVsZW1lbnQpOiBVcGRh
dGVkIHNpbmNlIG1fdXNlckRyaXZlbkNoYW5nZQorICAgICAgICB3YXMgcmVuYW1lZCB0byBtX2lz
UHJvY2Vzc2luZ1VzZXJEcml2ZW5DaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleEJ5VXNlcik6IFJlbW92ZWQgZGVzZWxlY3QgYXJndW1l
bnQsCisgICAgICAgIHdoaWNoIHdhcyBhbHdheXMgdHJ1ZSBmb3IgYWxsIGNhbGxlcnMuIFVwZGF0
ZWQgY29tbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpoYXNQbGFj
ZWhvbGRlckxhYmVsT3B0aW9uKTogVXBkYXRlZCBjb21tZW50LgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNlbGVjdEVsZW1lbnQ6OnNldE9wdGlvbik6IENhbGwgdGhlIG5ldyBzZWxlY3RPcHRpb24g
ZnVuY3Rpb24uCisgICAgICAgIFRoZSBjb2RlIHVzZWQgdG8gZXhwbGljaXRseSBhc2sgdGhlIGZ1
bmN0aW9uIGl0IGNhbGxzIHRvIGRlc2VsZWN0IGJhc2VkIG9uIHRoZQorICAgICAgICB2YWx1ZSBv
ZiBtX211bHRpcGxlLCBidXQgbm93IGl0IGFsd2F5cyBwYXNzZXMgTGVhdmVPdGhlck9wdGlvbnNT
ZWxlY3RlZCwgc2luY2UKKyAgICAgICAgdGhlIHNlbGVjdE9wdGlvbiBmdW5jdGlvbiBpdHNlbGYg
Y2hlY2tzIG1fbXVsdGlwbGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6
ZGlzcGF0Y2hDaGFuZ2VFdmVudEZvck1lbnVMaXN0KTogUmVuYW1lZCB0aGlzIGZ1bmN0aW9uLgor
ICAgICAgICBBbHNvIHVwZGF0ZWQgZm9yIG5hbWUgY2hhbmdlIHRvIG1faXNQcm9jZXNzaW5nVXNl
ckRyaXZlbkNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZWxl
Y3RPcHRpb24pOiBSZW5hbWVkIHRoaXMgZnJvbSBzZXRTZWxlY3RlZEluZGV4LgorICAgICAgICBD
aGFuZ2VkIGFsbCBhcmd1bWVudHMgdG8gYmUgZW51bXMuIEFkZGVkIGFuIGFzc2VydGlvbiB0byBy
ZXBsYWNlIGEgY29tbWVudCBhbmQKKyAgICAgICAgdXBkYXRlZCBmb3Igb3RoZXIgcmVuYW1pbmcu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQp
OiBVcGRhdGVkIGZvciBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50OjpwbGF0Zm9ybUhhbmRsZUtleWRvd25FdmVudCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcik6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlT
ZXRTZWxlY3RlZEluZGV4KTogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVt
ZW50Lmg6IEFkZGVkIG9uZSBwdWJsaWMgZW51bSBhbmQgdHdvIHByaXZhdGUgZW51bXMgdG8gcmVw
bGFjZQorICAgICAgICBib29sZWFucyBmb3Igc29tZSBmdW5jdGlvbiBhcmd1bWVudHMuIFJlbW92
ZWQgYW4gdW51c2VkIGFyZ3VtZW50IGZyb20gdGhlCisgICAgICAgIHNldFNlbGVjdGVkSW5kZXhC
eVVzZXIgYW5kIGFkZGVkIGEgRklYTUUgYWJvdXQgaXRzIG5hbWUuIFJlbmFtZWQgbWVudUxpc3RP
bkNoYW5nZQorICAgICAgICB0byBkaXNwYXRjaENoYW5nZUV2ZW50Rm9yTWVudUxpc3QsIHNpbmNl
ICJvbnh4eCIgaXMgbm90IGEgZ29vZCB3YXkgdG8gcmVmZXIgdG8KKyAgICAgICAgZnVuY3Rpb25z
IHRoYXQgc2VuZCBET00gZXZlbnRzLiBSZW5hbWVkIHRoZSBpbnRlcm5hbCBzZXRTZWxlY3RlZElu
ZGV4IGZ1bmN0aW9uIHRvCisgICAgICAgIHNlbGVjdE9wdGlvbiwgc2luY2UgaXQgcmVhbGx5IGlz
IG5vdCBhICJzZXQgc2VsZWN0ZWQgaW5kZXgiIGZ1bmN0aW9uIGF0IGFsbC4KKyAgICAgICAgVGhl
IHB1YmxpYyBmdW5jdGlvbiBzdGlsbCBoYXMgdGhhdCBuYW1lIGJlY2F1c2UgdGhlIERPTSBiaW5k
aW5ncyB1c2UgaXQgZm9yIHdoZW4KKyAgICAgICAgc2NyaXB0cyBjaGFuZ2UgdGhlIHZhbHVlIG9m
ICJzZWxlY3RlZEluZGV4Ii4gUmVuYW1lZCBtX3VzZXJEcml2ZW5DaGFuZ2UgdG8KKyAgICAgICAg
bV9pc1Byb2Nlc3NpbmdVc2VyRHJpdmVuQ2hhbmdlLiBPdGhlciBib29sZWFuIGRhdGEgbWVtYmVy
cyBjb3VsZCBwcm9iYWJseSB1c2UKKyAgICAgICAgYmV0dGVyIG5hbWVzIGFzIHdlbGwuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hhbmdlZCk6IFJlbW92ZWQgInRydWUiIHBhc3NlZCBmb3Ig
ZGVzZWxlY3QKKyAgICAgICAgYXJndW1lbnQgb2Ygc2V0U2VsZWN0ZWRJbmRleEJ5VXNlciwgYmVj
YXVzZSB0aGF0IGFyZ3VtZW50IHdhcyByZW1vdmVkLgorCiAyMDExLTEwLTIzICBBZGFtIEJhcnRo
ICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgPGltZyBjcm9zc29yaWdpbj4gc2hvdWxk
IGZhaWwgdG8gbG9hZCB3aGVuIENPUlMgY2hlY2sgZmFpbHMKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL29iamMvRE9NSFRNTC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9vYmpjL0RPTUhUTUwubW0JKHJldmlzaW9uIDk4MjE1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2
LDcgQEAgLSAodm9pZClfYWN0aXZhdGVJdGVtQXRJbmRleDooaW50KWluZGV4CiB7CiAgICAgLy8g
VXNlIHRoZSBzZXRTZWxlY3RlZEluZGV4QnlVc2VyIGZ1bmN0aW9uIHNvIGEgY2hhbmdlIGV2ZW50
IHdpbGwgYmUgZmlyZWQuIDxyZGFyOi8vcHJvYmxlbS82NzYwNTkwPgogICAgIGlmIChXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gY29yZShzZWxmKSkKLSAgICAgICAgc2VsZWN0
LT5zZXRTZWxlY3RlZEluZGV4QnlVc2VyKGluZGV4LCB0cnVlLCB0cnVlKTsKKyAgICAgICAgc2Vs
ZWN0LT5vcHRpb25TZWxlY3RlZEJ5VXNlcihpbmRleCwgdHJ1ZSk7CiB9CiAKIC0gKHZvaWQpX2Fj
dGl2YXRlSXRlbUF0SW5kZXg6KGludClpbmRleCBhbGxvd011bHRpcGxlU2VsZWN0aW9uOihCT09M
KWFsbG93TXVsdGlwbGVTZWxlY3Rpb24KQEAgLTE1NSw3ICsxNTUsNyBAQCAtICh2b2lkKV9hY3Rp
dmF0ZUl0ZW1BdEluZGV4OihpbnQpaW5kZXggCiAgICAgLy8gSWYgdGhpcyBpcyBhIDxzZWxlY3Qg
bXVsdGlwbGU+IHRoZSBhbGxvd011bHRpcGxlU2VsZWN0aW9uIGZsYWcgd2lsbCBhbGxvdyBzZXR0
aW5nIG11bHRpcGxlCiAgICAgLy8gc2VsZWN0aW9ucyB3aXRob3V0IGNsZWFyaW5nIHRoZSBvdGhl
ciBzZWxlY3Rpb25zLgogICAgIGlmIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0
ID0gY29yZShzZWxmKSkKLSAgICAgICAgc2VsZWN0LT5zZXRTZWxlY3RlZEluZGV4QnlVc2VyKGlu
ZGV4LCB0cnVlLCB0cnVlLCBhbGxvd011bHRpcGxlU2VsZWN0aW9uKTsKKyAgICAgICAgc2VsZWN0
LT5vcHRpb25TZWxlY3RlZEJ5VXNlcihpbmRleCwgdHJ1ZSwgYWxsb3dNdWx0aXBsZVNlbGVjdGlv
bik7CiB9CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1l
bnQuY3BwCShyZXZpc2lvbiA5ODIxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlv
bkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNyArMjIwLDcgQEAgdm9pZCBIVE1M
T3B0aW9uRWxlbWVudDo6c2V0U2VsZWN0ZWQoYm9vbAogICAgIHNldFNlbGVjdGVkU3RhdGUoc2Vs
ZWN0ZWQpOwogCiAgICAgaWYgKEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBvd25lclNlbGVj
dEVsZW1lbnQoKSkKLSAgICAgICAgc2VsZWN0LT5zZXRTZWxlY3RlZEluZGV4KHNlbGVjdGVkID8g
aW5kZXgoKSA6IC0xLCBmYWxzZSk7CisgICAgICAgIHNlbGVjdC0+b3B0aW9uU2VsZWN0aW9uU3Rh
dGVDaGFuZ2VkKHRoaXMsIHNlbGVjdGVkKTsKIH0KIAogdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6
c2V0U2VsZWN0ZWRTdGF0ZShib29sIHNlbGVjdGVkKQpAQCAtMjY3LDkgKzI2NywxMCBAQCB2b2lk
IEhUTUxPcHRpb25FbGVtZW50OjpzZXRMYWJlbChjb25zdCBTCiB2b2lkIEhUTUxPcHRpb25FbGVt
ZW50OjpzZXRSZW5kZXJTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZSkKIHsK
ICAgICBtX3N0eWxlID0gbmV3U3R5bGU7Ci0gICAgaWYgKEhUTUxTZWxlY3RFbGVtZW50KiBzZWxl
Y3QgPSBvd25lclNlbGVjdEVsZW1lbnQoKSkKKyAgICBpZiAoSFRNTFNlbGVjdEVsZW1lbnQqIHNl
bGVjdCA9IG93bmVyU2VsZWN0RWxlbWVudCgpKSB7CiAgICAgICAgIGlmIChSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gc2VsZWN0LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgcmVuZGVyZXItPnJl
cGFpbnQoKTsKKyAgICB9CiB9CiAKIFJlbmRlclN0eWxlKiBIVE1MT3B0aW9uRWxlbWVudDo6bm9u
UmVuZGVyZXJSZW5kZXJTdHlsZSgpIGNvbnN0CkBAIC0yOTYsOCArMjk3LDEwIEBAIHZvaWQgSFRN
TE9wdGlvbkVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUKICAgICAgICAgc2VsZWN0LT5zZXRSZWNh
bGNMaXN0SXRlbXMoKTsKICAgICAgICAgLy8gRG8gbm90IGNhbGwgc2VsZWN0ZWQoKSBzaW5jZSBj
YWxsaW5nIHVwZGF0ZUxpc3RJdGVtU2VsZWN0ZWRTdGF0ZXMoKQogICAgICAgICAvLyBhdCB0aGlz
IHRpbWUgd29uJ3QgZG8gdGhlIHJpZ2h0IHRoaW5nLiAoV2h5LCBleGFjdGx5PykKKyAgICAgICAg
Ly8gRklYTUU6IE1pZ2h0IGJlIGJldHRlciB0byBjYWxsIHRoaXMgdW5jb25kaXRpb25hbGx5LCBh
bHdheXMgcGFzc2luZyBtX2lzU2VsZWN0ZWQsCisgICAgICAgIC8vIHJhdGhlciB0aGFuIG9ubHkg
Y2FsbGluZyBpdCBpZiB3ZSBhcmUgc2VsZWN0ZWQuCiAgICAgICAgIGlmIChtX2lzU2VsZWN0ZWQp
Ci0gICAgICAgICAgICBzZWxlY3QtPnNldFNlbGVjdGVkSW5kZXgoaW5kZXgoKSwgZmFsc2UpOwor
ICAgICAgICAgICAgc2VsZWN0LT5vcHRpb25TZWxlY3Rpb25TdGF0ZUNoYW5nZWQodGhpcywgdHJ1
ZSk7CiAgICAgICAgIHNlbGVjdC0+c2Nyb2xsVG9TZWxlY3Rpb24oKTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5ODIx
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIEhUTUxTZWxlY3RFbGVtZW50OjpIVE1MU2VsZWN0RWxl
bWVudChjb24KICAgICAsIG1fYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoLTEpCiAgICAgLCBt
X2FjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KC0xKQogICAgICwgbV9yZXBlYXRpbmdDaGFyKDApCi0g
ICAgLCBtX3VzZXJEcml2ZW5DaGFuZ2UoZmFsc2UpCisgICAgLCBtX2lzUHJvY2Vzc2luZ1VzZXJE
cml2ZW5DaGFuZ2UoZmFsc2UpCiAgICAgLCBtX211bHRpcGxlKGZhbHNlKQogICAgICwgbV9hY3Rp
dmVTZWxlY3Rpb25TdGF0ZShmYWxzZSkKICAgICAsIG1fc2hvdWxkUmVjYWxjTGlzdEl0ZW1zKGZh
bHNlKQpAQCAtMTE2LDEwICsxMTYsMTAgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6ZGVzZWxl
Y3RJdGVtcyhIVAogICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwogfQogCi12b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4QnlVc2VyKGludCBvcHRpb25JbmRleCwgYm9v
bCBkZXNlbGVjdCwgYm9vbCBmaXJlT25DaGFuZ2VOb3csIGJvb2wgYWxsb3dNdWx0aXBsZVNlbGVj
dGlvbikKK3ZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvblNlbGVjdGVkQnlVc2VyKGludCBv
cHRpb25JbmRleCwgYm9vbCBmaXJlT25DaGFuZ2VOb3csIGJvb2wgYWxsb3dNdWx0aXBsZVNlbGVj
dGlvbikKIHsKLSAgICAvLyBMaXN0IGJveCBzZWxlY3RzIGNhbiBmaXJlIG9uY2hhbmdlIGV2ZW50
cyB0aHJvdWdoIHVzZXIgaW50ZXJhY3Rpb24sIHN1Y2ggYXMKLSAgICAvLyBtb3VzZWRvd24gZXZl
bnRzLiBUaGlzIGFsbG93cyB0aGF0IHNhbWUgYmVoYXZpb3IgcHJvZ3JhbW1hdGljYWxseS4KKyAg
ICAvLyBVc2VyIGludGVyYWN0aW9uIHN1Y2ggYXMgbW91c2Vkb3duIGV2ZW50cyBjYW4gY2F1c2Ug
bGlzdCBib3ggc2VsZWN0IGVsZW1lbnRzIHRvIHNlbmQgY2hhbmdlIGV2ZW50cy4KKyAgICAvLyBU
aGlzIGFsbG93cyB0aGF0IHNhbWUgYmVoYXZpb3IgZm9yIGNoYW5nZXMgdHJpZ2dlcmVkIGJ5IG90
aGVyIGNvZGUgcnVubmluZyBvbiBiZWhhbGYgb2YgdGhlIHVzZXIuCiAgICAgaWYgKCF1c2VzTWVu
dUxpc3QoKSkgewogICAgICAgICB1cGRhdGVTZWxlY3RlZFN0YXRlKG9wdGlvbkluZGV4LCBhbGxv
d011bHRpcGxlU2VsZWN0aW9uLCBmYWxzZSk7CiAgICAgICAgIHNldE5lZWRzVmFsaWRpdHlDaGVj
aygpOwpAQCAtMTI5LDIwICsxMjksMjAgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2Vs
ZWN0ZWRJbmRleAogICAgIH0KIAogICAgIC8vIEJhaWwgb3V0IGlmIHRoaXMgaW5kZXggaXMgYWxy
ZWFkeSB0aGUgc2VsZWN0ZWQgb25lLCB0byBhdm9pZCBydW5uaW5nIHVubmVjZXNzYXJ5IEphdmFT
Y3JpcHQgdGhhdCBjYW4gbWVzcyB1cAotICAgIC8vIGF1dG9maWxsLCB3aGVuIHRoZXJlIGlzIG5v
IGFjdHVhbCBjaGFuZ2UgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzUyNTYgYW5kIHJkYXI6Ly83NDY3OTE3ICkuCi0gICAgLy8gUGVyaGFwcyB0aGlzIGxvZ2lj
IGNvdWxkIGJlIG1vdmVkIGludG8gU2VsZWN0RWxlbWVudCwgYnV0IHNvbWUgY2FsbGVycyBvZiBT
ZWxlY3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4KCkKLSAgICAvLyBzZWVtIHRvIGV4cGVjdCBp
dCB0byBmaXJlIGl0cyBjaGFuZ2UgZXZlbnQgZXZlbiB3aGVuIHRoZSBpbmRleCB3YXMgYWxyZWFk
eSBzZWxlY3RlZC4KKyAgICAvLyBhdXRvZmlsbCB3aGVuIHRoZXJlIGlzIG5vIGFjdHVhbCBjaGFu
Z2UgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUyNTYgYW5k
IDxyZGFyOi8vNzQ2NzkxNz4pLgorICAgIC8vIFBlcmhhcHMgdGhpcyBsb2dpYyBjb3VsZCBiZSBt
b3ZlZCBpbnRvIHNlbGVjdE9wdGlvbiwgYnV0IHNvbWUgY2FsbGVycyBzZWVtIHRvIGV4cGVjdCBp
dCB0byBmaXJlIGl0cyBjaGFuZ2UKKyAgICAvLyBldmVudCBldmVuIHdoZW4gdGhlIGluZGV4IHdh
cyBhbHJlYWR5IHNlbGVjdGVkLgogICAgIGlmIChvcHRpb25JbmRleCA9PSBzZWxlY3RlZEluZGV4
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBzZXRTZWxlY3RlZEluZGV4KG9wdGlvbklu
ZGV4LCBkZXNlbGVjdCwgZmlyZU9uQ2hhbmdlTm93LCB0cnVlKTsKKworICAgIHNlbGVjdE9wdGlv
bihvcHRpb25JbmRleCwgQWx3YXlzRGVzZWxlY3RPdGhlcnMsIGZpcmVPbkNoYW5nZU5vdyA/IERp
c3BhdGNoQ2hhbmdlRXZlbnQgOiBEb05vdERpc3BhdGNoQ2hhbmdlRXZlbnQsIFVzZXJEcml2ZW4p
OwogfQogCiBib29sIEhUTUxTZWxlY3RFbGVtZW50OjpoYXNQbGFjZWhvbGRlckxhYmVsT3B0aW9u
KCkgY29uc3QKIHsKICAgICAvLyBUaGUgc2VsZWN0IGVsZW1lbnQgaGFzIG5vIHBsYWNlaG9sZGVy
IGxhYmVsIG9wdGlvbiBpZiBpdCBoYXMgYW4gYXR0cmlidXRlICJtdWx0aXBsZSIgc3BlY2lmaWVk
IG9yIGEgZGlzcGxheSBzaXplIG9mIG5vbi0xLgogICAgIC8vIAotICAgIC8vIFRoZSBjb25kaXRp
b24gInNpemUoKSA+IDEiIGlzIGFjdHVhbGx5IG5vdCBjb21wbGlhbnQgd2l0aCB0aGUgSFRNTDUg
c3BlYyBhcyBvZiBEZWMgMywgMjAxMC4gInNpemUoKSAhPSAxIiBpcyBjb3JyZWN0LgorICAgIC8v
IFRoZSBjb25kaXRpb24gInNpemUoKSA+IDEiIGlzIG5vdCBjb21wbGlhbnQgd2l0aCB0aGUgSFRN
TDUgc3BlYyBhcyBvZiBEZWMgMywgMjAxMC4gInNpemUoKSAhPSAxIiBpcyBjb3JyZWN0LgogICAg
IC8vIFVzaW5nICJzaXplKCkgPiAxIiBoZXJlIGJlY2F1c2Ugc2l6ZSgpIG1heSBiZSAwIGluIFdl
YktpdC4KICAgICAvLyBTZWUgdGhlIGRpc2N1c3Npb24gYXQgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQzODg3CiAgICAgLy8KQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjpzZXRPcHRpb24odW5zaWduCiAgICAgZWMgPSAwOwogICAgIGlm
IChpbmRleCA+IG1heFNlbGVjdEl0ZW1zIC0gMSkKICAgICAgICAgaW5kZXggPSBtYXhTZWxlY3RJ
dGVtcyAtIDE7Ci0gICAgaW50IGRpZmYgPSBpbmRleCAgLSBsZW5ndGgoKTsKKyAgICBpbnQgZGlm
ZiA9IGluZGV4IC0gbGVuZ3RoKCk7CiAgICAgSFRNTEVsZW1lbnQqIGJlZm9yZSA9IDA7CiAgICAg
Ly8gT3V0IG9mIGFycmF5IGJvdW5kcz8gRmlyc3QgaW5zZXJ0IGVtcHR5IGR1bW1pZXMuCiAgICAg
aWYgKGRpZmYgPiAwKSB7CkBAIC0zOTEsNyArMzkxLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6c2V0T3B0aW9uKHVuc2lnbgogICAgIGlmICghZWMpIHsKICAgICAgICAgYWRkKG9wdGlvbiwg
YmVmb3JlLCBlYyk7CiAgICAgICAgIGlmIChkaWZmID49IDAgJiYgb3B0aW9uLT5zZWxlY3RlZCgp
KQotICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChpbmRleCwgIW1fbXVsdGlwbGUpOworICAg
ICAgICAgICAgb3B0aW9uU2VsZWN0aW9uU3RhdGVDaGFuZ2VkKG9wdGlvbiwgdHJ1ZSk7CiAgICAg
fQogfQogCkBAIC02MTAsMTQgKzYxMCwxNCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0
Qm94T25DaGFuZ2UoCiAgICAgICAgIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwog
fQogCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdE9uQ2hhbmdlKCkKK3ZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6OmRpc3BhdGNoQ2hhbmdlRXZlbnRGb3JNZW51TGlzdCgpCiB7CiAgICAg
QVNTRVJUKHVzZXNNZW51TGlzdCgpKTsKIAogICAgIGludCBzZWxlY3RlZCA9IHNlbGVjdGVkSW5k
ZXgoKTsKLSAgICBpZiAobV9sYXN0T25DaGFuZ2VJbmRleCAhPSBzZWxlY3RlZCAmJiBtX3VzZXJE
cml2ZW5DaGFuZ2UpIHsKKyAgICBpZiAobV9sYXN0T25DaGFuZ2VJbmRleCAhPSBzZWxlY3RlZCAm
JiBtX2lzUHJvY2Vzc2luZ1VzZXJEcml2ZW5DaGFuZ2UpIHsKICAgICAgICAgbV9sYXN0T25DaGFu
Z2VJbmRleCA9IHNlbGVjdGVkOwotICAgICAgICBtX3VzZXJEcml2ZW5DaGFuZ2UgPSBmYWxzZTsK
KyAgICAgICAgbV9pc1Byb2Nlc3NpbmdVc2VyRHJpdmVuQ2hhbmdlID0gZmFsc2U7CiAgICAgICAg
IGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogICAgIH0KIH0KQEAgLTczNywxMiAr
NzM3LDIzIEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0ZWRJbmRleCgpIGMKICAgICBy
ZXR1cm4gLTE7CiB9CiAKLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXgo
aW50IG9wdGlvbkluZGV4LCBib29sIGRlc2VsZWN0LCBib29sIGZpcmVPbkNoYW5nZU5vdywgYm9v
bCB1c2VyRHJpdmVuQ2hhbmdlKQordm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJ
bmRleChpbnQgaW5kZXgpCit7CisgICAgc2VsZWN0T3B0aW9uKGluZGV4LCBBbHdheXNEZXNlbGVj
dE90aGVycywgRG9Ob3REaXNwYXRjaENoYW5nZUV2ZW50LCBOb3RVc2VyRHJpdmVuKTsKK30KKwor
dm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uU2VsZWN0aW9uU3RhdGVDaGFuZ2VkKEhUTUxP
cHRpb25FbGVtZW50KiBvcHRpb24sIGJvb2wgb3B0aW9uSXNTZWxlY3RlZCkKK3sKKyAgICBBU1NF
UlQob3B0aW9uLT5vd25lclNlbGVjdEVsZW1lbnQoKSA9PSB0aGlzKTsKKyAgICBpZiAob3B0aW9u
SXNTZWxlY3RlZCkKKyAgICAgICAgc2VsZWN0T3B0aW9uKG9wdGlvbi0+aW5kZXgoKSwgRGVzZWxl
Y3RPbmx5VG9NYWludGFpblNpbmdsZU9wdGlvbkludmFyaWFudCwgRG9Ob3REaXNwYXRjaENoYW5n
ZUV2ZW50LCBOb3RVc2VyRHJpdmVuKTsKKyAgICBlbHNlCisgICAgICAgIHNlbGVjdE9wdGlvbiht
X211bHRpcGxlID8gLTEgOiBuZXh0U2VsZWN0YWJsZUxpc3RJbmRleCgtMSksIERlc2VsZWN0T25s
eVRvTWFpbnRhaW5TaW5nbGVPcHRpb25JbnZhcmlhbnQsIERvTm90RGlzcGF0Y2hDaGFuZ2VFdmVu
dCwgTm90VXNlckRyaXZlbik7Cit9CisKK3ZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdE9w
dGlvbihpbnQgb3B0aW9uSW5kZXgsIFNob3VsZERlc2VsZWN0T3RoZXJPcHRpb25zIGRlc2VsZWN0
T3B0aW9ucywgU2hvdWxkRGlzcGF0Y2hDaGFuZ2VFdmVudCBzaG91bGREaXNwYXRjaENoYW5nZUV2
ZW50LCBVc2VyRHJpdmVuRmxhZyB1c2VyRHJpdmVuRmxhZykKIHsKLSAgICBpZiAob3B0aW9uSW5k
ZXggPT0gLTEgJiYgIWRlc2VsZWN0ICYmICFtX211bHRpcGxlKQotICAgICAgICBvcHRpb25JbmRl
eCA9IG5leHRTZWxlY3RhYmxlTGlzdEluZGV4KC0xKTsKLSAgICBpZiAoIW1fbXVsdGlwbGUpCi0g
ICAgICAgIGRlc2VsZWN0ID0gdHJ1ZTsKKyAgICBib29sIHNob3VsZERlc2VsZWN0ID0gIW1fbXVs
dGlwbGUgfHwgZGVzZWxlY3RPcHRpb25zID09IEFsd2F5c0Rlc2VsZWN0T3RoZXJzOwogCiAgICAg
Y29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaW50
IGxpc3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KG9wdGlvbkluZGV4KTsKQEAgLTc1MCwxNCAr
NzYxLDE0IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXgKICAgICBF
bGVtZW50KiBleGNsdWRlRWxlbWVudCA9IDA7CiAgICAgaWYgKEhUTUxPcHRpb25FbGVtZW50KiBv
cHRpb25FbGVtZW50ID0gKGxpc3RJbmRleCA+PSAwID8gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2xp
c3RJbmRleF0pIDogMCkpIHsKICAgICAgICAgZXhjbHVkZUVsZW1lbnQgPSBpdGVtc1tsaXN0SW5k
ZXhdOwotICAgICAgICBpZiAobV9hY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleCA8IDAgfHwgZGVz
ZWxlY3QpCisgICAgICAgIGlmIChtX2FjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4IDwgMCB8fCBz
aG91bGREZXNlbGVjdCkKICAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4
KGxpc3RJbmRleCk7Ci0gICAgICAgIGlmIChtX2FjdGl2ZVNlbGVjdGlvbkVuZEluZGV4IDwgMCB8
fCBkZXNlbGVjdCkKKyAgICAgICAgaWYgKG1fYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXggPCAwIHx8
IHNob3VsZERlc2VsZWN0KQogICAgICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgo
bGlzdEluZGV4KTsKICAgICAgICAgb3B0aW9uRWxlbWVudC0+c2V0U2VsZWN0ZWRTdGF0ZSh0cnVl
KTsKICAgICB9CiAKLSAgICBpZiAoZGVzZWxlY3QpCisgICAgaWYgKHNob3VsZERlc2VsZWN0KQog
ICAgICAgICBkZXNlbGVjdEl0ZW1zV2l0aG91dFZhbGlkYXRpb24oZXhjbHVkZUVsZW1lbnQpOwog
CiAgICAgLy8gRm9yIHRoZSBtZW51IGxpc3QgY2FzZSwgdGhpcyBpcyB3aGF0IG1ha2VzIHRoZSBz
ZWxlY3RlZCBlbGVtZW50IGFwcGVhci4KQEAgLTc2NiwxMyArNzc3LDEzIEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXgKIAogICAgIHNjcm9sbFRvU2VsZWN0aW9uKCk7
CiAKLSAgICAvLyBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgd2l0aCBmaXJlT25DaGFuZ2VOb3cgZm9y
IG1lbnUgbGlzdHMuIAotICAgIGlmICh1c2VzTWVudUxpc3QoKSkgewotICAgICAgICBtX3VzZXJE
cml2ZW5DaGFuZ2UgPSB1c2VyRHJpdmVuQ2hhbmdlOwotICAgICAgICBpZiAoZmlyZU9uQ2hhbmdl
Tm93KQotICAgICAgICAgICAgbWVudUxpc3RPbkNoYW5nZSgpOwotICAgICAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKHJlbmRlcmVyKSB7
CisgICAgaWYgKCF1c2VzTWVudUxpc3QoKSkKKyAgICAgICAgQVNTRVJUKHNob3VsZERpc3BhdGNo
Q2hhbmdlRXZlbnQgPT0gRG9Ob3REaXNwYXRjaENoYW5nZUV2ZW50KTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgbV9pc1Byb2Nlc3NpbmdVc2VyRHJpdmVuQ2hhbmdlID0gdXNlckRyaXZlbkZsYWcgPT0g
VXNlckRyaXZlbjsKKyAgICAgICAgaWYgKHNob3VsZERpc3BhdGNoQ2hhbmdlRXZlbnQgPT0gRGlz
cGF0Y2hDaGFuZ2VFdmVudCkKKyAgICAgICAgICAgIGRpc3BhdGNoQ2hhbmdlRXZlbnRGb3JNZW51
TGlzdCgpOworICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRl
cmVyKCkpIHsKICAgICAgICAgICAgIGlmICh1c2VzTWVudUxpc3QoKSkKICAgICAgICAgICAgICAg
ICB0b1JlbmRlck1lbnVMaXN0KHJlbmRlcmVyKS0+ZGlkU2V0U2VsZWN0ZWRJbmRleChsaXN0SW5k
ZXgpOwogICAgICAgICAgICAgZWxzZSBpZiAocmVuZGVyZXItPmlzTGlzdEJveCgpKQpAQCAtODM1
LDcgKzg0Niw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW4KICAg
ICAvLyBjaGFuZ2UgZXZlbnRzIGZvciBsaXN0IGJveGVzIHdoZW5ldmVyIHRoZSBzZWxlY3Rpb24g
Y2hhbmdlIGlzIGFjdHVhbGx5IG1hZGUuCiAgICAgLy8gVGhpcyBtYXRjaGVzIG90aGVyIGJyb3dz
ZXJzJyBiZWhhdmlvci4KICAgICBpZiAodXNlc01lbnVMaXN0KCkpCi0gICAgICAgIG1lbnVMaXN0
T25DaGFuZ2UoKTsKKyAgICAgICAgZGlzcGF0Y2hDaGFuZ2VFdmVudEZvck1lbnVMaXN0KCk7CiAg
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGlzcGF0Y2hCbHVyRXZlbnQobmV3
Rm9jdXNlZE5vZGUpOwogfQogCkBAIC05NTksNyArOTcwLDcgQEAgYm9vbCBIVE1MU2VsZWN0RWxl
bWVudDo6cGxhdGZvcm1IYW5kbGVLZQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRv
IHRoZSBuZXcgc2VsZWN0aW9uCi0gICAgICAgICAgICAvLyB3aGVuIGRpc3BhdGNoaW5nIGNoYW5n
ZSBldmVudHMgZHVyaW5nIHNldFNlbGVjdGVkSW5kZXgsIHdoaWNoCisgICAgICAgICAgICAvLyB3
aGVuIGRpc3BhdGNoaW5nIGNoYW5nZSBldmVudHMgZHVyaW5nIHNlbGVjdE9wdGlvbiwgd2hpY2gK
ICAgICAgICAgICAgIC8vIGdldHMgY2FsbGVkIGZyb20gUmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hh
bmdlZCwgd2hpY2ggZ2V0cyBjYWxsZWQKICAgICAgICAgICAgIC8vIGFmdGVyIHRoZSB1c2VyIG1h
a2VzIGEgc2VsZWN0aW9uIGZyb20gdGhlIG1lbnUuCiAgICAgICAgICAgICBzYXZlTGFzdFNlbGVj
dGlvbigpOwpAQCAtMTAxMiw3ICsxMDIzLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVu
dUxpc3REZWZhdWx0RQogICAgICAgICAgICAgaGFuZGxlZCA9IGZhbHNlOwogCiAgICAgICAgIGlm
IChoYW5kbGVkICYmIHN0YXRpY19jYXN0PHNpemVfdD4obGlzdEluZGV4KSA8IGxpc3RJdGVtcy5z
aXplKCkpCi0gICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4KGxpc3RUb09wdGlvbkluZGV4KGxp
c3RJbmRleCksIHRydWUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIHNlbGVjdE9wdGlvbihs
aXN0VG9PcHRpb25JbmRleChsaXN0SW5kZXgpLCBBbHdheXNEZXNlbGVjdE90aGVycywgRG9Ob3RE
aXNwYXRjaENoYW5nZUV2ZW50LCBVc2VyRHJpdmVuKTsKIAogICAgICAgICBpZiAoaGFuZGxlZCkK
ICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwpAQCAtMTA0NCw3ICsxMDU1
LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RQogICAgICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0
IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbgotICAgICAgICAgICAgLy8gd2hl
biBkaXNwYXRjaGluZyBjaGFuZ2UgZXZlbnRzIGR1cmluZyBzZXRTZWxlY3RlZEluZGV4LCB3aGlj
aAorICAgICAgICAgICAgLy8gd2hlbiBkaXNwYXRjaGluZyBjaGFuZ2UgZXZlbnRzIGR1cmluZyBz
ZWxlY3RPcHRpb24sIHdoaWNoCiAgICAgICAgICAgICAvLyBnZXRzIGNhbGxlZCBmcm9tIFJlbmRl
ck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQsIHdoaWNoIGdldHMgY2FsbGVkCiAgICAgICAgICAgICAv
LyBhZnRlciB0aGUgdXNlciBtYWtlcyBhIHNlbGVjdGlvbiBmcm9tIHRoZSBtZW51LgogICAgICAg
ICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oKTsKQEAgLTEwNjIsNyArMTA3Myw3IEBAIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEUKICAgICAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFy
ZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24KLSAgICAgICAgICAgIC8vIHdoZW4gZGlzcGF0Y2hpbmcg
Y2hhbmdlIGV2ZW50cyBkdXJpbmcgc2V0U2VsZWN0ZWRJbmRleCwgd2hpY2gKKyAgICAgICAgICAg
IC8vIHdoZW4gZGlzcGF0Y2hpbmcgY2hhbmdlIGV2ZW50cyBkdXJpbmcgc2VsZWN0T3B0aW9uLCB3
aGljaAogICAgICAgICAgICAgLy8gZ2V0cyBjYWxsZWQgZnJvbSBSZW5kZXJNZW51TGlzdDo6dmFs
dWVDaGFuZ2VkLCB3aGljaCBnZXRzIGNhbGxlZAogICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIHVz
ZXIgbWFrZXMgYSBzZWxlY3Rpb24gZnJvbSB0aGUgbWVudS4KICAgICAgICAgICAgIHNhdmVMYXN0
U2VsZWN0aW9uKCk7CkBAIC0xMDcyLDE0ICsxMDgzLDE0IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6Om1lbnVMaXN0RGVmYXVsdEUKICAgICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09ICdccicp
IHsKICAgICAgICAgICAgIGlmIChmb3JtKCkpCiAgICAgICAgICAgICAgICAgZm9ybSgpLT5zdWJt
aXRJbXBsaWNpdGx5KGV2ZW50LCBmYWxzZSk7Ci0gICAgICAgICAgICBtZW51TGlzdE9uQ2hhbmdl
KCk7CisgICAgICAgICAgICBkaXNwYXRjaENoYW5nZUV2ZW50Rm9yTWVudUxpc3QoKTsKICAgICAg
ICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICB9CiAjZWxzZQogICAgICAgICBpbnQgbGlz
dEluZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgoc2VsZWN0ZWRJbmRleCgpKTsKICAgICAgICAgaWYg
KGtleUNvZGUgPT0gJ1xyJykgewogICAgICAgICAgICAgLy8gbGlzdEluZGV4IHNob3VsZCBhbHJl
YWR5IGJlIHNlbGVjdGVkLCBidXQgdGhpcyB3aWxsIGZpcmUgdGhlIG9uY2hhbmdlIGhhbmRsZXIu
Ci0gICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4KGxpc3RUb09wdGlvbkluZGV4KGxpc3RJbmRl
eCksIHRydWUsIHRydWUsIHRydWUpOworICAgICAgICAgICAgc2VsZWN0T3B0aW9uKGxpc3RUb09w
dGlvbkluZGV4KGxpc3RJbmRleCksIEFsd2F5c0Rlc2VsZWN0T3RoZXJzLCBEaXNwYXRjaENoYW5n
ZUV2ZW50LCBVc2VyRHJpdmVuKTsKICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAg
ICB9CiAjZW5kaWYKQEAgLTEwOTUsNyArMTEwNiw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6
Om1lbnVMaXN0RGVmYXVsdEUKICAgICAgICAgICAgICAgICAgICAgbWVudUxpc3QtPmhpZGVQb3B1
cCgpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAvLyBTYXZl
IHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcKLSAgICAgICAg
ICAgICAgICAgICAgLy8gc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBvbkNoYW5nZSBkdXJpbmcgc2V0
U2VsZWN0ZWRJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0aW9uIHdoZW4gd2Ug
Y2FsbCBvbkNoYW5nZSBkdXJpbmcgc2VsZWN0T3B0aW9uLAogICAgICAgICAgICAgICAgICAgICAv
LyB3aGljaCBnZXRzIGNhbGxlZCBmcm9tIFJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQsCiAg
ICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIGdldHMgY2FsbGVkIGFmdGVyIHRoZSB1c2VyIG1h
a2VzIGEgc2VsZWN0aW9uIGZyb20KICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG1lbnUuCkBA
IC0xMzkxLDcgKzE0MDIsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojp0eXBlQWhlYWRGaW5k
KEtlCiAgICAgICAgIC8vIEZvbGQgdGhlIG9wdGlvbiBzdHJpbmcgYW5kIGNoZWNrIGlmIGl0cyBw
cmVmaXggaXMgZXF1YWwgdG8gdGhlIGZvbGRlZCBwcmVmaXguCiAgICAgICAgIFN0cmluZyB0ZXh0
ID0gb3B0aW9uRWxlbWVudC0+dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogICAg
ICAgICBpZiAoc3RyaXBMZWFkaW5nV2hpdGVTcGFjZSh0ZXh0KS5mb2xkQ2FzZSgpLnN0YXJ0c1dp
dGgocHJlZml4V2l0aENhc2VGb2xkZWQpKSB7Ci0gICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4
KGxpc3RUb09wdGlvbkluZGV4KGluZGV4KSwgdHJ1ZSwgZmFsc2UsIHRydWUpOworICAgICAgICAg
ICAgc2VsZWN0T3B0aW9uKGxpc3RUb09wdGlvbkluZGV4KGluZGV4KSwgQWx3YXlzRGVzZWxlY3RP
dGhlcnMsIERvTm90RGlzcGF0Y2hDaGFuZ2VFdmVudCwgVXNlckRyaXZlbik7CiAgICAgICAgICAg
ICBpZiAoIXVzZXNNZW51TGlzdCgpKQogICAgICAgICAgICAgICAgIGxpc3RCb3hPbkNoYW5nZSgp
OwogCkBAIC0xNDI0LDExICsxNDM1LDExIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmFjY2Vz
c0tleVNldFNlbGUKICAgICAgICAgaWYgKG9wdGlvbkVsZW1lbnQtPnNlbGVjdGVkKCkpCiAgICAg
ICAgICAgICBvcHRpb25FbGVtZW50LT5zZXRTZWxlY3RlZFN0YXRlKGZhbHNlKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChpbmRleCwgZmFsc2UsIHRydWUsIHRy
dWUpOworICAgICAgICAgICAgc2VsZWN0T3B0aW9uKGluZGV4LCBEZXNlbGVjdE9ubHlUb01haW50
YWluU2luZ2xlT3B0aW9uSW52YXJpYW50LCBEaXNwYXRjaENoYW5nZUV2ZW50LCBVc2VyRHJpdmVu
KTsKICAgICB9CiAKICAgICBpZiAodXNlc01lbnVMaXN0KCkpCi0gICAgICAgIG1lbnVMaXN0T25D
aGFuZ2UoKTsKKyAgICAgICAgZGlzcGF0Y2hDaGFuZ2VFdmVudEZvck1lbnVMaXN0KCk7CiAgICAg
ZWxzZQogICAgICAgICBsaXN0Qm94T25DaGFuZ2UoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkocmV2aXNpb24gOTgyMTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDkg
QEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxTZWxlY3RFbGVtZW50PiBjcmVh
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CiAK
ICAgICBpbnQgc2VsZWN0ZWRJbmRleCgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2VsZWN0ZWRJbmRl
eChpbnQgaW5kZXgsIGJvb2wgZGVzZWxlY3QgPSB0cnVlKTsKLSAgICB2b2lkIHNldFNlbGVjdGVk
SW5kZXhCeVVzZXIoaW50IGluZGV4LCBib29sIGRlc2VsZWN0ID0gdHJ1ZSwgYm9vbCBmaXJlT25D
aGFuZ2VOb3cgPSBmYWxzZSwgYm9vbCBhbGxvd011bHRpcGxlU2VsZWN0aW9uID0gZmFsc2UpOwor
ICAgIHZvaWQgc2V0U2VsZWN0ZWRJbmRleChpbnQpOworCisgICAgdm9pZCBvcHRpb25TZWxlY3Rl
ZEJ5VXNlcihpbnQgaW5kZXgsIGJvb2wgZGlzcGF0Y2hDaGFuZ2VFdmVudCwgYm9vbCBhbGxvd011
bHRpcGxlU2VsZWN0aW9uID0gZmFsc2UpOwogCiAgICAgLy8gRm9yIFZhbGlkaXR5U3RhdGUKICAg
ICBib29sIHZhbHVlTWlzc2luZygpIGNvbnN0OwpAQCAtOTYsNiArOTcsOSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChpbnQpOwogICAgIHZvaWQgdXBkYXRl
TGlzdEJveFNlbGVjdGlvbihib29sIGRlc2VsZWN0T3RoZXJPcHRpb25zKTsKICAgICAKKyAgICAv
LyBGb3IgdXNlIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBIVE1MT3B0aW9uRWxlbWVudC4KKyAg
ICB2b2lkIG9wdGlvblNlbGVjdGlvblN0YXRlQ2hhbmdlZChIVE1MT3B0aW9uRWxlbWVudCosIGJv
b2wgb3B0aW9uSXNTZWxlY3RlZCk7CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgSFRNTFNlbGVjdEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7
CiAKQEAgLTEyNCw3ICsxMjgsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIGRlZmF1
bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKIAotICAgIHZvaWQgbWVudUxpc3RPbkNoYW5nZSgpOwor
ICAgIHZvaWQgZGlzcGF0Y2hDaGFuZ2VFdmVudEZvck1lbnVMaXN0KCk7CiAgICAgCiAgICAgdm9p
ZCByZWNhbGNMaXN0SXRlbXMoYm9vbCB1cGRhdGVTZWxlY3RlZFN0YXRlcyA9IHRydWUpIGNvbnN0
OwogCkBAIC0xMzksNyArMTQzLDEwIEBAIHByaXZhdGU6CiAKICAgICBib29sIGhhc1BsYWNlaG9s
ZGVyTGFiZWxPcHRpb24oKSBjb25zdDsKIAotICAgIHZvaWQgc2V0U2VsZWN0ZWRJbmRleChpbnQg
b3B0aW9uSW5kZXgsIGJvb2wgZGVzZWxlY3QsIGJvb2wgZmlyZU9uQ2hhbmdlTm93LCBib29sIHVz
ZXJEcml2ZW5DaGFuZ2UpOworICAgIGVudW0gU2hvdWxkRGVzZWxlY3RPdGhlck9wdGlvbnMgeyBE
ZXNlbGVjdE9ubHlUb01haW50YWluU2luZ2xlT3B0aW9uSW52YXJpYW50LCBBbHdheXNEZXNlbGVj
dE90aGVycyB9OworICAgIGVudW0gU2hvdWxkRGlzcGF0Y2hDaGFuZ2VFdmVudCB7IERvTm90RGlz
cGF0Y2hDaGFuZ2VFdmVudCwgRGlzcGF0Y2hDaGFuZ2VFdmVudCB9OworICAgIGVudW0gVXNlckRy
aXZlbkZsYWcgeyBOb3RVc2VyRHJpdmVuLCBVc2VyRHJpdmVuIH07CisgICAgdm9pZCBzZWxlY3RP
cHRpb24oaW50IG9wdGlvbkluZGV4LCBTaG91bGREZXNlbGVjdE90aGVyT3B0aW9ucywgU2hvdWxk
RGlzcGF0Y2hDaGFuZ2VFdmVudCwgVXNlckRyaXZlbkZsYWcpOwogICAgIHZvaWQgZGVzZWxlY3RJ
dGVtc1dpdGhvdXRWYWxpZGF0aW9uKEVsZW1lbnQqIGV4Y2x1ZGVFbGVtZW50ID0gMCk7CiAgICAg
dm9pZCBwYXJzZU11bHRpcGxlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSopOwogICAgIGludCBs
YXN0U2VsZWN0ZWRMaXN0SW5kZXgoKSBjb25zdDsKQEAgLTE3NSwxNyArMTgyLDEyIEBAIHByaXZh
dGU6CiAgICAgaW50IG1fYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXg7CiAgICAgaW50IG1fYWN0
aXZlU2VsZWN0aW9uRW5kSW5kZXg7CiAgICAgVUNoYXIgbV9yZXBlYXRpbmdDaGFyOwotICAgIGJv
b2wgbV91c2VyRHJpdmVuQ2hhbmdlOworICAgIGJvb2wgbV9pc1Byb2Nlc3NpbmdVc2VyRHJpdmVu
Q2hhbmdlOwogICAgIGJvb2wgbV9tdWx0aXBsZTsKICAgICBib29sIG1fYWN0aXZlU2VsZWN0aW9u
U3RhdGU7CiAgICAgbXV0YWJsZSBib29sIG1fc2hvdWxkUmVjYWxjTGlzdEl0ZW1zOwogfTsKIAot
aW5saW5lIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXgoaW50IGluZGV4
LCBib29sIGRlc2VsZWN0KQotewotICAgIHNldFNlbGVjdGVkSW5kZXgoaW5kZXgsIGRlc2VsZWN0
LCBmYWxzZSwgZmFsc2UpOwotfQotCiBpbmxpbmUgYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6dXNl
c01lbnVMaXN0KCkgY29uc3QKIHsKICNpZiBFTkFCTEUoTk9fTElTVEJPWF9SRU5ERVJJTkcpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlz
aW9uIDk4MjE1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzE4LDE0ICszMTgsMTQgQEAgdm9pZCBSZW5kZXJNZW51TGlz
dDo6aGlkZVBvcHVwKCkKIAogdm9pZCBSZW5kZXJNZW51TGlzdDo6dmFsdWVDaGFuZ2VkKHVuc2ln
bmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlT25DaGFuZ2UpCiB7Ci0gICAgLy8gQ2hlY2sgdG8gZW5z
dXJlIGEgcGFnZSBuYXZpZ2F0aW9uIGhhcyBub3Qgb2NjdXJyZWQgd2hpbGUKLSAgICAvLyB0aGUg
cG9wdXAgd2FzIHVwLgotICAgIERvY3VtZW50KiBkb2MgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
bm9kZSgpKS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvYyB8fCBkb2MgIT0gZG9jLT5mcmFtZSgp
LT5kb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCiAgICAgSFRNTFNlbGVjdEVsZW1l
bnQqIHNlbGVjdCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobm9kZSgpKTsKLSAgICBzZWxlY3QtPnNl
dFNlbGVjdGVkSW5kZXhCeVVzZXIoc2VsZWN0LT5saXN0VG9PcHRpb25JbmRleChsaXN0SW5kZXgp
LCB0cnVlLCBmaXJlT25DaGFuZ2UpOworCisgICAgLy8gQ2hlY2sgdG8gZW5zdXJlIHBhZ2UgbmF2
aWdhdGlvbiBoYXMgbm90IG9jY3VycmVkIHdoaWxlIHRoZSBtZW51IHdhcyB1cC4KKyAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBzZWxlY3QtPmRvY3VtZW50KCk7CisgICAgaWYgKGRvY3VtZW50ICE9
IGRvY3VtZW50LT5mcmFtZSgpLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBz
ZWxlY3QtPm9wdGlvblNlbGVjdGVkQnlVc2VyKHNlbGVjdC0+bGlzdFRvT3B0aW9uSW5kZXgobGlz
dEluZGV4KSwgZmlyZU9uQ2hhbmdlKTsKIH0KIAogI2lmIEVOQUJMRShOT19MSVNUQk9YX1JFTkRF
UklORykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA5ODIxNSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMTEtMTAtMjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisg
ICAgICAgIE9CU09MRVRFIENIQU5HRSBMT0cgTkVFRFMgVE8gQkUgVVBEQVRFRCAoT09QUykKKwor
ICAgICAgICBDaGFuZ2UgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXggdG8gdXNl
IGVudW1zIGluc3RlYWQgb2YgYm9vbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcwMTg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiB0ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6VGVzdFBvcHVwTWVudUNsaWVudDo6dmFsdWVDaGFuZ2VkKTogUmVtb3ZlZCAidHJ1ZSIgcGFz
c2VkIGFzIHRoZQorICAgICAgICBkZXNlbGVjdCBhcmd1bWVudCBvZiBzZXRTZWxlY3RlZEluZGV4
QnlVc2VyLCBiZWNhdXNlIHRoYXQgYXJndW1lbnQgd2FzIHJlbW92ZWQuCisKIDIwMTEtMTAtMjEg
IE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTWFr
ZSBzZXRWaXNpYmlsaXR5IGV4dGVuc2lvbi0gYW5kIHRocmVhZC1jb3JyZWN0CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAJKHJldmlzaW9u
IDk4MjE1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2Vs
ZWN0SW5kZXggPSBsaXN0SW5kZXg7CiAgICAgICAgIGlmIChtX25vZGUpIHsKICAgICAgICAgICAg
IEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b0hUTUxTZWxlY3RFbGVtZW50KG1fbm9kZSk7
Ci0gICAgICAgICAgICBzZWxlY3QtPnNldFNlbGVjdGVkSW5kZXhCeVVzZXIoc2VsZWN0LT5saXN0
VG9PcHRpb25JbmRleChsaXN0SW5kZXgpLCB0cnVlLCBmaXJlRXZlbnRzKTsKKyAgICAgICAgICAg
IHNlbGVjdC0+b3B0aW9uU2VsZWN0ZWRCeVVzZXIoc2VsZWN0LT5saXN0VG9PcHRpb25JbmRleChs
aXN0SW5kZXgpLCBmaXJlRXZlbnRzKTsKICAgICAgICAgfQogICAgIH0KICAgICB2aXJ0dWFsIHZv
aWQgc2VsZWN0aW9uQ2hhbmdlZCh1bnNpZ25lZCwgYm9vbCkge30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112441</attachid>
            <date>2011-10-25 18:45:46 -0700</date>
            <delta_ts>2011-11-01 15:44:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70184-20111025184546.patch</filename>
            <type>text/plain</type>
            <size>22954</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4NDA5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjAgQEAKKzIwMTEtMTAtMjUgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE9CU09MRVRFIENIQU5HRSBMT0cgTkVF
RFMgVE8gQkUgVVBEQVRFRCAoT09QUykKKworICAgICAgICBDaGFuZ2UgSFRNTFNlbGVjdEVsZW1l
bnQ6OnNldFNlbGVjdGVkSW5kZXggdG8gdXNlIGVudW1zIGluc3RlYWQgb2YgYm9vbHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMTg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3JpbmcgdGhh
dCBkb2VzIG5vdCByZXF1aXJlIG5ldyB0ZXN0cy4KKworICAgICAgICAqIGJpbmRpbmdzL29iamMv
RE9NSFRNTC5tbToKKyAgICAgICAgKC1bRE9NSFRNTFNlbGVjdEVsZW1lbnQgX2FjdGl2YXRlSXRl
bUF0SW5kZXg6XSk6IFJlbW92ZWQgInRydWUiIHBhc3NlZCBmb3IgZGVzZWxlY3QKKyAgICAgICAg
YXJndW1lbnQgb2Ygc2V0U2VsZWN0ZWRJbmRleEJ5VXNlciwgYmVjYXVzZSB0aGF0IGFyZ3VtZW50
IHdhcyByZW1vdmVkLgorICAgICAgICAoLVtET01IVE1MU2VsZWN0RWxlbWVudCBfYWN0aXZhdGVJ
dGVtQXRJbmRleDphbGxvd011bHRpcGxlU2VsZWN0aW9uOl0pOiBEaXR0by4KKworICAgICAgICAq
IGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlv
bkVsZW1lbnQ6OnNldFNlbGVjdGVkKTogVXNlIExlYXZlT3RoZXJPcHRpb25zU2VsZWN0ZWQgaW5z
dGVhZAorICAgICAgICBvZiBmYWxzZSBmb3IgdGhlIGFyZ3VtZW50IHRvIHNldFNlbGVjdGVkSW5k
ZXguCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJl
ZSk6IERpdHRvLgorCisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6SFRNTFNlbGVjdEVsZW1lbnQpOiBVcGRh
dGVkIHNpbmNlIG1fdXNlckRyaXZlbkNoYW5nZQorICAgICAgICB3YXMgcmVuYW1lZCB0byBtX2lz
UHJvY2Vzc2luZ1VzZXJEcml2ZW5DaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleEJ5VXNlcik6IFJlbW92ZWQgZGVzZWxlY3QgYXJndW1l
bnQsCisgICAgICAgIHdoaWNoIHdhcyBhbHdheXMgdHJ1ZSBmb3IgYWxsIGNhbGxlcnMuIFVwZGF0
ZWQgY29tbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpoYXNQbGFj
ZWhvbGRlckxhYmVsT3B0aW9uKTogVXBkYXRlZCBjb21tZW50LgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNlbGVjdEVsZW1lbnQ6OnNldE9wdGlvbik6IENhbGwgdGhlIG5ldyBzZWxlY3RPcHRpb24g
ZnVuY3Rpb24uCisgICAgICAgIFRoZSBjb2RlIHVzZWQgdG8gZXhwbGljaXRseSBhc2sgdGhlIGZ1
bmN0aW9uIGl0IGNhbGxzIHRvIGRlc2VsZWN0IGJhc2VkIG9uIHRoZQorICAgICAgICB2YWx1ZSBv
ZiBtX211bHRpcGxlLCBidXQgbm93IGl0IGFsd2F5cyBwYXNzZXMgTGVhdmVPdGhlck9wdGlvbnNT
ZWxlY3RlZCwgc2luY2UKKyAgICAgICAgdGhlIHNlbGVjdE9wdGlvbiBmdW5jdGlvbiBpdHNlbGYg
Y2hlY2tzIG1fbXVsdGlwbGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6
ZGlzcGF0Y2hDaGFuZ2VFdmVudEZvck1lbnVMaXN0KTogUmVuYW1lZCB0aGlzIGZ1bmN0aW9uLgor
ICAgICAgICBBbHNvIHVwZGF0ZWQgZm9yIG5hbWUgY2hhbmdlIHRvIG1faXNQcm9jZXNzaW5nVXNl
ckRyaXZlbkNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZWxl
Y3RPcHRpb24pOiBSZW5hbWVkIHRoaXMgZnJvbSBzZXRTZWxlY3RlZEluZGV4LgorICAgICAgICBD
aGFuZ2VkIGFsbCBhcmd1bWVudHMgdG8gYmUgZW51bXMuIEFkZGVkIGFuIGFzc2VydGlvbiB0byBy
ZXBsYWNlIGEgY29tbWVudCBhbmQKKyAgICAgICAgdXBkYXRlZCBmb3Igb3RoZXIgcmVuYW1pbmcu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQp
OiBVcGRhdGVkIGZvciBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50OjpwbGF0Zm9ybUhhbmRsZUtleWRvd25FdmVudCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcik6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlT
ZXRTZWxlY3RlZEluZGV4KTogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVt
ZW50Lmg6IEFkZGVkIG9uZSBwdWJsaWMgZW51bSBhbmQgdHdvIHByaXZhdGUgZW51bXMgdG8gcmVw
bGFjZQorICAgICAgICBib29sZWFucyBmb3Igc29tZSBmdW5jdGlvbiBhcmd1bWVudHMuIFJlbW92
ZWQgYW4gdW51c2VkIGFyZ3VtZW50IGZyb20gdGhlCisgICAgICAgIHNldFNlbGVjdGVkSW5kZXhC
eVVzZXIgYW5kIGFkZGVkIGEgRklYTUUgYWJvdXQgaXRzIG5hbWUuIFJlbmFtZWQgbWVudUxpc3RP
bkNoYW5nZQorICAgICAgICB0byBkaXNwYXRjaENoYW5nZUV2ZW50Rm9yTWVudUxpc3QsIHNpbmNl
ICJvbnh4eCIgaXMgbm90IGEgZ29vZCB3YXkgdG8gcmVmZXIgdG8KKyAgICAgICAgZnVuY3Rpb25z
IHRoYXQgc2VuZCBET00gZXZlbnRzLiBSZW5hbWVkIHRoZSBpbnRlcm5hbCBzZXRTZWxlY3RlZElu
ZGV4IGZ1bmN0aW9uIHRvCisgICAgICAgIHNlbGVjdE9wdGlvbiwgc2luY2UgaXQgcmVhbGx5IGlz
IG5vdCBhICJzZXQgc2VsZWN0ZWQgaW5kZXgiIGZ1bmN0aW9uIGF0IGFsbC4KKyAgICAgICAgVGhl
IHB1YmxpYyBmdW5jdGlvbiBzdGlsbCBoYXMgdGhhdCBuYW1lIGJlY2F1c2UgdGhlIERPTSBiaW5k
aW5ncyB1c2UgaXQgZm9yIHdoZW4KKyAgICAgICAgc2NyaXB0cyBjaGFuZ2UgdGhlIHZhbHVlIG9m
ICJzZWxlY3RlZEluZGV4Ii4gUmVuYW1lZCBtX3VzZXJEcml2ZW5DaGFuZ2UgdG8KKyAgICAgICAg
bV9pc1Byb2Nlc3NpbmdVc2VyRHJpdmVuQ2hhbmdlLiBPdGhlciBib29sZWFuIGRhdGEgbWVtYmVy
cyBjb3VsZCBwcm9iYWJseSB1c2UKKyAgICAgICAgYmV0dGVyIG5hbWVzIGFzIHdlbGwuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hhbmdlZCk6IFJlbW92ZWQgInRydWUiIHBhc3NlZCBmb3Ig
ZGVzZWxlY3QKKyAgICAgICAgYXJndW1lbnQgb2Ygc2V0U2VsZWN0ZWRJbmRleEJ5VXNlciwgYmVj
YXVzZSB0aGF0IGFyZ3VtZW50IHdhcyByZW1vdmVkLgorCiAyMDExLTEwLTI1ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIE1vdmluZyB0byB0aGUgc3RhcnQgb2Yg
bGluZSBzaG91bGQgbm90IHBsYWNlIHRoZSBjYXJldCBvdXRzaWRlIG9mIHRoZSB0YWJsZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSFRNTC5tbQkocmV2aXNpb24gOTg0MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE0Niw3ICsxNDYsNyBAQCAtICh2b2lkKV9hY3RpdmF0ZUl0ZW1BdEluZGV4OihpbnQp
aW5kZXgKIHsKICAgICAvLyBVc2UgdGhlIHNldFNlbGVjdGVkSW5kZXhCeVVzZXIgZnVuY3Rpb24g
c28gYSBjaGFuZ2UgZXZlbnQgd2lsbCBiZSBmaXJlZC4gPHJkYXI6Ly9wcm9ibGVtLzY3NjA1OTA+
CiAgICAgaWYgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBjb3JlKHNlbGYp
KQotICAgICAgICBzZWxlY3QtPnNldFNlbGVjdGVkSW5kZXhCeVVzZXIoaW5kZXgsIHRydWUsIHRy
dWUpOworICAgICAgICBzZWxlY3QtPm9wdGlvblNlbGVjdGVkQnlVc2VyKGluZGV4LCB0cnVlKTsK
IH0KIAogLSAodm9pZClfYWN0aXZhdGVJdGVtQXRJbmRleDooaW50KWluZGV4IGFsbG93TXVsdGlw
bGVTZWxlY3Rpb246KEJPT0wpYWxsb3dNdWx0aXBsZVNlbGVjdGlvbgpAQCAtMTU1LDcgKzE1NSw3
IEBAIC0gKHZvaWQpX2FjdGl2YXRlSXRlbUF0SW5kZXg6KGludClpbmRleCAKICAgICAvLyBJZiB0
aGlzIGlzIGEgPHNlbGVjdCBtdWx0aXBsZT4gdGhlIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24gZmxh
ZyB3aWxsIGFsbG93IHNldHRpbmcgbXVsdGlwbGUKICAgICAvLyBzZWxlY3Rpb25zIHdpdGhvdXQg
Y2xlYXJpbmcgdGhlIG90aGVyIHNlbGVjdGlvbnMuCiAgICAgaWYgKFdlYkNvcmU6OkhUTUxTZWxl
Y3RFbGVtZW50KiBzZWxlY3QgPSBjb3JlKHNlbGYpKQotICAgICAgICBzZWxlY3QtPnNldFNlbGVj
dGVkSW5kZXhCeVVzZXIoaW5kZXgsIHRydWUsIHRydWUsIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24p
OworICAgICAgICBzZWxlY3QtPm9wdGlvblNlbGVjdGVkQnlVc2VyKGluZGV4LCB0cnVlLCBhbGxv
d011bHRpcGxlU2VsZWN0aW9uKTsKIH0KIAogQGVuZApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDk4NDA5KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw3ICsy
MjAsNyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZChib29sCiAgICAgc2V0
U2VsZWN0ZWRTdGF0ZShzZWxlY3RlZCk7CiAKICAgICBpZiAoSFRNTFNlbGVjdEVsZW1lbnQqIHNl
bGVjdCA9IG93bmVyU2VsZWN0RWxlbWVudCgpKQotICAgICAgICBzZWxlY3QtPnNldFNlbGVjdGVk
SW5kZXgoc2VsZWN0ZWQgPyBpbmRleCgpIDogLTEsIGZhbHNlKTsKKyAgICAgICAgc2VsZWN0LT5v
cHRpb25TZWxlY3Rpb25TdGF0ZUNoYW5nZWQodGhpcywgc2VsZWN0ZWQpOwogfQogCiB2b2lkIEhU
TUxPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZFN0YXRlKGJvb2wgc2VsZWN0ZWQpCkBAIC0yNjcs
OSArMjY3LDEwIEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldExhYmVsKGNvbnN0IFMKIHZv
aWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldFJlbmRlclN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IG5ld1N0eWxlKQogewogICAgIG1fc3R5bGUgPSBuZXdTdHlsZTsKLSAgICBpZiAoSFRNTFNl
bGVjdEVsZW1lbnQqIHNlbGVjdCA9IG93bmVyU2VsZWN0RWxlbWVudCgpKQorICAgIGlmIChIVE1M
U2VsZWN0RWxlbWVudCogc2VsZWN0ID0gb3duZXJTZWxlY3RFbGVtZW50KCkpIHsKICAgICAgICAg
aWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBzZWxlY3QtPnJlbmRlcmVyKCkpCiAgICAgICAg
ICAgICByZW5kZXJlci0+cmVwYWludCgpOworICAgIH0KIH0KIAogUmVuZGVyU3R5bGUqIEhUTUxP
cHRpb25FbGVtZW50Ojpub25SZW5kZXJlclJlbmRlclN0eWxlKCkgY29uc3QKQEAgLTI5Niw4ICsy
OTcsMTAgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZQogICAgICAg
ICBzZWxlY3QtPnNldFJlY2FsY0xpc3RJdGVtcygpOwogICAgICAgICAvLyBEbyBub3QgY2FsbCBz
ZWxlY3RlZCgpIHNpbmNlIGNhbGxpbmcgdXBkYXRlTGlzdEl0ZW1TZWxlY3RlZFN0YXRlcygpCiAg
ICAgICAgIC8vIGF0IHRoaXMgdGltZSB3b24ndCBkbyB0aGUgcmlnaHQgdGhpbmcuIChXaHksIGV4
YWN0bHk/KQorICAgICAgICAvLyBGSVhNRTogTWlnaHQgYmUgYmV0dGVyIHRvIGNhbGwgdGhpcyB1
bmNvbmRpdGlvbmFsbHksIGFsd2F5cyBwYXNzaW5nIG1faXNTZWxlY3RlZCwKKyAgICAgICAgLy8g
cmF0aGVyIHRoYW4gb25seSBjYWxsaW5nIGl0IGlmIHdlIGFyZSBzZWxlY3RlZC4KICAgICAgICAg
aWYgKG1faXNTZWxlY3RlZCkKLSAgICAgICAgICAgIHNlbGVjdC0+c2V0U2VsZWN0ZWRJbmRleChp
bmRleCgpLCBmYWxzZSk7CisgICAgICAgICAgICBzZWxlY3QtPm9wdGlvblNlbGVjdGlvblN0YXRl
Q2hhbmdlZCh0aGlzLCB0cnVlKTsKICAgICAgICAgc2VsZWN0LT5zY3JvbGxUb1NlbGVjdGlvbigp
OwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDk4NDA5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgSFRNTFNlbGVjdEVsZW1l
bnQ6OkhUTUxTZWxlY3RFbGVtZW50KGNvbgogICAgICwgbV9hY3RpdmVTZWxlY3Rpb25BbmNob3JJ
bmRleCgtMSkKICAgICAsIG1fYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoLTEpCiAgICAgLCBtX3Jl
cGVhdGluZ0NoYXIoMCkKLSAgICAsIG1fdXNlckRyaXZlbkNoYW5nZShmYWxzZSkKKyAgICAsIG1f
aXNQcm9jZXNzaW5nVXNlckRyaXZlbkNoYW5nZShmYWxzZSkKICAgICAsIG1fbXVsdGlwbGUoZmFs
c2UpCiAgICAgLCBtX2FjdGl2ZVNlbGVjdGlvblN0YXRlKGZhbHNlKQogICAgICwgbV9zaG91bGRS
ZWNhbGNMaXN0SXRlbXMoZmFsc2UpCkBAIC0xMTAsMTAgKzExMCwxMCBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpkZXNlbGVjdEl0ZW1zKEhUCiAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7
CiB9CiAKLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXhCeVVzZXIoaW50
IG9wdGlvbkluZGV4LCBib29sIGRlc2VsZWN0LCBib29sIGZpcmVPbkNoYW5nZU5vdywgYm9vbCBh
bGxvd011bHRpcGxlU2VsZWN0aW9uKQordm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uU2Vs
ZWN0ZWRCeVVzZXIoaW50IG9wdGlvbkluZGV4LCBib29sIGZpcmVPbkNoYW5nZU5vdywgYm9vbCBh
bGxvd011bHRpcGxlU2VsZWN0aW9uKQogewotICAgIC8vIExpc3QgYm94IHNlbGVjdHMgY2FuIGZp
cmUgb25jaGFuZ2UgZXZlbnRzIHRocm91Z2ggdXNlciBpbnRlcmFjdGlvbiwgc3VjaCBhcwotICAg
IC8vIG1vdXNlZG93biBldmVudHMuIFRoaXMgYWxsb3dzIHRoYXQgc2FtZSBiZWhhdmlvciBwcm9n
cmFtbWF0aWNhbGx5LgorICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24gc3VjaCBhcyBtb3VzZWRvd24g
ZXZlbnRzIGNhbiBjYXVzZSBsaXN0IGJveCBzZWxlY3QgZWxlbWVudHMgdG8gc2VuZCBjaGFuZ2Ug
ZXZlbnRzLgorICAgIC8vIFRoaXMgYWxsb3dzIHRoYXQgc2FtZSBiZWhhdmlvciBmb3IgY2hhbmdl
cyB0cmlnZ2VyZWQgYnkgb3RoZXIgY29kZSBydW5uaW5nIG9uIGJlaGFsZiBvZiB0aGUgdXNlci4K
ICAgICBpZiAoIXVzZXNNZW51TGlzdCgpKSB7CiAgICAgICAgIHVwZGF0ZVNlbGVjdGVkU3RhdGUo
b3B0aW9uSW5kZXgsIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24sIGZhbHNlKTsKICAgICAgICAgc2V0
TmVlZHNWYWxpZGl0eUNoZWNrKCk7CkBAIC0xMjMsMjAgKzEyMywyMCBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4CiAgICAgfQogCiAgICAgLy8gQmFpbCBvdXQgaWYg
dGhpcyBpbmRleCBpcyBhbHJlYWR5IHRoZSBzZWxlY3RlZCBvbmUsIHRvIGF2b2lkIHJ1bm5pbmcg
dW5uZWNlc3NhcnkgSmF2YVNjcmlwdCB0aGF0IGNhbiBtZXNzIHVwCi0gICAgLy8gYXV0b2ZpbGws
IHdoZW4gdGhlcmUgaXMgbm8gYWN0dWFsIGNoYW5nZSAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNTI1NiBhbmQgcmRhcjovLzc0Njc5MTcgKS4KLSAgICAvLyBQ
ZXJoYXBzIHRoaXMgbG9naWMgY291bGQgYmUgbW92ZWQgaW50byBTZWxlY3RFbGVtZW50LCBidXQg
c29tZSBjYWxsZXJzIG9mIFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXgoKQotICAgIC8v
IHNlZW0gdG8gZXhwZWN0IGl0IHRvIGZpcmUgaXRzIGNoYW5nZSBldmVudCBldmVuIHdoZW4gdGhl
IGluZGV4IHdhcyBhbHJlYWR5IHNlbGVjdGVkLgorICAgIC8vIGF1dG9maWxsIHdoZW4gdGhlcmUg
aXMgbm8gYWN0dWFsIGNoYW5nZSAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNTI1NiBhbmQgPHJkYXI6Ly83NDY3OTE3PikuCisgICAgLy8gUGVyaGFwcyB0aGlz
IGxvZ2ljIGNvdWxkIGJlIG1vdmVkIGludG8gc2VsZWN0T3B0aW9uLCBidXQgc29tZSBjYWxsZXJz
IHNlZW0gdG8gZXhwZWN0IGl0IHRvIGZpcmUgaXRzIGNoYW5nZQorICAgIC8vIGV2ZW50IGV2ZW4g
d2hlbiB0aGUgaW5kZXggd2FzIGFscmVhZHkgc2VsZWN0ZWQuCiAgICAgaWYgKG9wdGlvbkluZGV4
ID09IHNlbGVjdGVkSW5kZXgoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHNldFNlbGVj
dGVkSW5kZXgob3B0aW9uSW5kZXgsIGRlc2VsZWN0LCBmaXJlT25DaGFuZ2VOb3csIHRydWUpOwor
CisgICAgc2VsZWN0T3B0aW9uKG9wdGlvbkluZGV4LCBEZXNlbGVjdE90aGVyT3B0aW9ucyB8IChm
aXJlT25DaGFuZ2VOb3cgPyBEaXNwYXRjaENoYW5nZUV2ZW50IDogMCkgfCBVc2VyRHJpdmVuKTsK
IH0KIAogYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6aGFzUGxhY2Vob2xkZXJMYWJlbE9wdGlvbigp
IGNvbnN0CiB7CiAgICAgLy8gVGhlIHNlbGVjdCBlbGVtZW50IGhhcyBubyBwbGFjZWhvbGRlciBs
YWJlbCBvcHRpb24gaWYgaXQgaGFzIGFuIGF0dHJpYnV0ZSAibXVsdGlwbGUiIHNwZWNpZmllZCBv
ciBhIGRpc3BsYXkgc2l6ZSBvZiBub24tMS4KICAgICAvLyAKLSAgICAvLyBUaGUgY29uZGl0aW9u
ICJzaXplKCkgPiAxIiBpcyBhY3R1YWxseSBub3QgY29tcGxpYW50IHdpdGggdGhlIEhUTUw1IHNw
ZWMgYXMgb2YgRGVjIDMsIDIwMTAuICJzaXplKCkgIT0gMSIgaXMgY29ycmVjdC4KKyAgICAvLyBU
aGUgY29uZGl0aW9uICJzaXplKCkgPiAxIiBpcyBub3QgY29tcGxpYW50IHdpdGggdGhlIEhUTUw1
IHNwZWMgYXMgb2YgRGVjIDMsIDIwMTAuICJzaXplKCkgIT0gMSIgaXMgY29ycmVjdC4KICAgICAv
LyBVc2luZyAic2l6ZSgpID4gMSIgaGVyZSBiZWNhdXNlIHNpemUoKSBtYXkgYmUgMCBpbiBXZWJL
aXQuCiAgICAgLy8gU2VlIHRoZSBkaXNjdXNzaW9uIGF0IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00Mzg4NwogICAgIC8vCkBAIC0zNzEsNyArMzcxLDcgQEAgdm9pZCBI
VE1MU2VsZWN0RWxlbWVudDo6c2V0T3B0aW9uKHVuc2lnbgogICAgIGVjID0gMDsKICAgICBpZiAo
aW5kZXggPiBtYXhTZWxlY3RJdGVtcyAtIDEpCiAgICAgICAgIGluZGV4ID0gbWF4U2VsZWN0SXRl
bXMgLSAxOwotICAgIGludCBkaWZmID0gaW5kZXggIC0gbGVuZ3RoKCk7CisgICAgaW50IGRpZmYg
PSBpbmRleCAtIGxlbmd0aCgpOwogICAgIEhUTUxFbGVtZW50KiBiZWZvcmUgPSAwOwogICAgIC8v
IE91dCBvZiBhcnJheSBib3VuZHM/IEZpcnN0IGluc2VydCBlbXB0eSBkdW1taWVzLgogICAgIGlm
IChkaWZmID4gMCkgewpAQCAtMzg1LDcgKzM4NSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6
OnNldE9wdGlvbih1bnNpZ24KICAgICBpZiAoIWVjKSB7CiAgICAgICAgIGFkZChvcHRpb24sIGJl
Zm9yZSwgZWMpOwogICAgICAgICBpZiAoZGlmZiA+PSAwICYmIG9wdGlvbi0+c2VsZWN0ZWQoKSkK
LSAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgoaW5kZXgsICFtX211bHRpcGxlKTsKKyAgICAg
ICAgICAgIG9wdGlvblNlbGVjdGlvblN0YXRlQ2hhbmdlZChvcHRpb24sIHRydWUpOwogICAgIH0K
IH0KIApAQCAtNjA0LDE0ICs2MDQsMTQgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJv
eE9uQ2hhbmdlKAogICAgICAgICBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKIH0K
IAotdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3RPbkNoYW5nZSgpCit2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjpkaXNwYXRjaENoYW5nZUV2ZW50Rm9yTWVudUxpc3QoKQogewogICAgIEFT
U0VSVCh1c2VzTWVudUxpc3QoKSk7CiAKICAgICBpbnQgc2VsZWN0ZWQgPSBzZWxlY3RlZEluZGV4
KCk7Ci0gICAgaWYgKG1fbGFzdE9uQ2hhbmdlSW5kZXggIT0gc2VsZWN0ZWQgJiYgbV91c2VyRHJp
dmVuQ2hhbmdlKSB7CisgICAgaWYgKG1fbGFzdE9uQ2hhbmdlSW5kZXggIT0gc2VsZWN0ZWQgJiYg
bV9pc1Byb2Nlc3NpbmdVc2VyRHJpdmVuQ2hhbmdlKSB7CiAgICAgICAgIG1fbGFzdE9uQ2hhbmdl
SW5kZXggPSBzZWxlY3RlZDsKLSAgICAgICAgbV91c2VyRHJpdmVuQ2hhbmdlID0gZmFsc2U7Cisg
ICAgICAgIG1faXNQcm9jZXNzaW5nVXNlckRyaXZlbkNoYW5nZSA9IGZhbHNlOwogICAgICAgICBk
aXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKICAgICB9CiB9CkBAIC03MzIsMTIgKzcz
MiwyMyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkSW5kZXgoKSBjCiAgICAgcmV0
dXJuIC0xOwogfQogCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4KGlu
dCBvcHRpb25JbmRleCwgYm9vbCBkZXNlbGVjdCwgYm9vbCBmaXJlT25DaGFuZ2VOb3csIGJvb2wg
dXNlckRyaXZlbkNoYW5nZSkKK3ZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5k
ZXgoaW50IGluZGV4KQoreworICAgIHNlbGVjdE9wdGlvbihpbmRleCwgRGVzZWxlY3RPdGhlck9w
dGlvbnMpOworfQorCit2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpvcHRpb25TZWxlY3Rpb25TdGF0
ZUNoYW5nZWQoSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiwgYm9vbCBvcHRpb25Jc1NlbGVjdGVk
KQoreworICAgIEFTU0VSVChvcHRpb24tPm93bmVyU2VsZWN0RWxlbWVudCgpID09IHRoaXMpOwor
ICAgIGlmIChvcHRpb25Jc1NlbGVjdGVkKQorICAgICAgICBzZWxlY3RPcHRpb24ob3B0aW9uLT5p
bmRleCgpKTsKKyAgICBlbHNlCisgICAgICAgIHNlbGVjdE9wdGlvbihtX211bHRpcGxlID8gLTEg
OiBuZXh0U2VsZWN0YWJsZUxpc3RJbmRleCgtMSkpOworfQorCit2b2lkIEhUTUxTZWxlY3RFbGVt
ZW50OjpzZWxlY3RPcHRpb24oaW50IG9wdGlvbkluZGV4LCBTZWxlY3RPcHRpb25GbGFncyBmbGFn
cykKIHsKLSAgICBpZiAob3B0aW9uSW5kZXggPT0gLTEgJiYgIWRlc2VsZWN0ICYmICFtX211bHRp
cGxlKQotICAgICAgICBvcHRpb25JbmRleCA9IG5leHRTZWxlY3RhYmxlTGlzdEluZGV4KC0xKTsK
LSAgICBpZiAoIW1fbXVsdGlwbGUpCi0gICAgICAgIGRlc2VsZWN0ID0gdHJ1ZTsKKyAgICBib29s
IHNob3VsZERlc2VsZWN0ID0gIW1fbXVsdGlwbGUgfHwgKGZsYWdzICYgRGVzZWxlY3RPdGhlck9w
dGlvbnMpOwogCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0
ZW1zKCk7CiAgICAgaW50IGxpc3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KG9wdGlvbkluZGV4
KTsKQEAgLTc0NiwxNSArNzU3LDE1IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVj
dGVkSW5kZXgKICAgICBpZiAobGlzdEluZGV4ID49IDApIHsKICAgICAgICAgZWxlbWVudCA9IGl0
ZW1zW2xpc3RJbmRleF07CiAgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGlvblRh
ZykpIHsKLSAgICAgICAgICAgIGlmIChtX2FjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4IDwgMCB8
fCBkZXNlbGVjdCkKKyAgICAgICAgICAgIGlmIChtX2FjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4
IDwgMCB8fCBzaG91bGREZXNlbGVjdCkKICAgICAgICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rp
b25BbmNob3JJbmRleChsaXN0SW5kZXgpOwotICAgICAgICAgICAgaWYgKG1fYWN0aXZlU2VsZWN0
aW9uRW5kSW5kZXggPCAwIHx8IGRlc2VsZWN0KQorICAgICAgICAgICAgaWYgKG1fYWN0aXZlU2Vs
ZWN0aW9uRW5kSW5kZXggPCAwIHx8IHNob3VsZERlc2VsZWN0KQogICAgICAgICAgICAgICAgIHNl
dEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KGxpc3RJbmRleCk7CiAgICAgICAgICAgICB0b0hUTUxP
cHRpb25FbGVtZW50KGVsZW1lbnQpLT5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKGRlc2VsZWN0KQorICAgIGlmIChzaG91bGREZXNlbGVjdCkKICAg
ICAgICAgZGVzZWxlY3RJdGVtc1dpdGhvdXRWYWxpZGF0aW9uKGVsZW1lbnQpOwogCiAgICAgLy8g
Rm9yIHRoZSBtZW51IGxpc3QgY2FzZSwgdGhpcyBpcyB3aGF0IG1ha2VzIHRoZSBzZWxlY3RlZCBl
bGVtZW50IGFwcGVhci4KQEAgLTc2MywxMyArNzc0LDEzIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6OnNldFNlbGVjdGVkSW5kZXgKIAogICAgIHNjcm9sbFRvU2VsZWN0aW9uKCk7CiAKLSAgICAv
LyBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgd2l0aCBmaXJlT25DaGFuZ2VOb3cgZm9yIG1lbnUgbGlz
dHMuIAotICAgIGlmICh1c2VzTWVudUxpc3QoKSkgewotICAgICAgICBtX3VzZXJEcml2ZW5DaGFu
Z2UgPSB1c2VyRHJpdmVuQ2hhbmdlOwotICAgICAgICBpZiAoZmlyZU9uQ2hhbmdlTm93KQotICAg
ICAgICAgICAgbWVudUxpc3RPbkNoYW5nZSgpOwotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKHJlbmRlcmVyKSB7CisgICAgaWYg
KCF1c2VzTWVudUxpc3QoKSkKKyAgICAgICAgQVNTRVJUKCEoZmxhZ3MgJiBEaXNwYXRjaENoYW5n
ZUV2ZW50KSk7CisgICAgZWxzZSB7CisgICAgICAgIG1faXNQcm9jZXNzaW5nVXNlckRyaXZlbkNo
YW5nZSA9IGZsYWdzICYgVXNlckRyaXZlbjsKKyAgICAgICAgaWYgKGZsYWdzICYgRGlzcGF0Y2hD
aGFuZ2VFdmVudCkKKyAgICAgICAgICAgIGRpc3BhdGNoQ2hhbmdlRXZlbnRGb3JNZW51TGlzdCgp
OworICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkp
IHsKICAgICAgICAgICAgIGlmICh1c2VzTWVudUxpc3QoKSkKICAgICAgICAgICAgICAgICB0b1Jl
bmRlck1lbnVMaXN0KHJlbmRlcmVyKS0+ZGlkU2V0U2VsZWN0ZWRJbmRleChsaXN0SW5kZXgpOwog
ICAgICAgICAgICAgZWxzZSBpZiAocmVuZGVyZXItPmlzTGlzdEJveCgpKQpAQCAtODMyLDcgKzg0
Myw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW4KICAgICAvLyBj
aGFuZ2UgZXZlbnRzIGZvciBsaXN0IGJveGVzIHdoZW5ldmVyIHRoZSBzZWxlY3Rpb24gY2hhbmdl
IGlzIGFjdHVhbGx5IG1hZGUuCiAgICAgLy8gVGhpcyBtYXRjaGVzIG90aGVyIGJyb3dzZXJzJyBi
ZWhhdmlvci4KICAgICBpZiAodXNlc01lbnVMaXN0KCkpCi0gICAgICAgIG1lbnVMaXN0T25DaGFu
Z2UoKTsKKyAgICAgICAgZGlzcGF0Y2hDaGFuZ2VFdmVudEZvck1lbnVMaXN0KCk7CiAgICAgSFRN
TEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGlzcGF0Y2hCbHVyRXZlbnQobmV3Rm9jdXNl
ZE5vZGUpOwogfQogCkBAIC05NTUsNyArOTY2LDcgQEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6
cGxhdGZvcm1IYW5kbGVLZQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAg
ICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBu
ZXcgc2VsZWN0aW9uCi0gICAgICAgICAgICAvLyB3aGVuIGRpc3BhdGNoaW5nIGNoYW5nZSBldmVu
dHMgZHVyaW5nIHNldFNlbGVjdGVkSW5kZXgsIHdoaWNoCisgICAgICAgICAgICAvLyB3aGVuIGRp
c3BhdGNoaW5nIGNoYW5nZSBldmVudHMgZHVyaW5nIHNlbGVjdE9wdGlvbiwgd2hpY2gKICAgICAg
ICAgICAgIC8vIGdldHMgY2FsbGVkIGZyb20gUmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hhbmdlZCwg
d2hpY2ggZ2V0cyBjYWxsZWQKICAgICAgICAgICAgIC8vIGFmdGVyIHRoZSB1c2VyIG1ha2VzIGEg
c2VsZWN0aW9uIGZyb20gdGhlIG1lbnUuCiAgICAgICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbigp
OwpAQCAtMTAwOCw3ICsxMDE5LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3RE
ZWZhdWx0RQogICAgICAgICAgICAgaGFuZGxlZCA9IGZhbHNlOwogCiAgICAgICAgIGlmIChoYW5k
bGVkICYmIHN0YXRpY19jYXN0PHNpemVfdD4obGlzdEluZGV4KSA8IGxpc3RJdGVtcy5zaXplKCkp
Ci0gICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4KGxpc3RUb09wdGlvbkluZGV4KGxpc3RJbmRl
eCksIHRydWUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIHNlbGVjdE9wdGlvbihsaXN0VG9P
cHRpb25JbmRleChsaXN0SW5kZXgpLCBEZXNlbGVjdE90aGVyT3B0aW9ucyB8IFVzZXJEcml2ZW4p
OwogCiAgICAgICAgIGlmIChoYW5kbGVkKQogICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7CkBAIC0xMDQwLDcgKzEwNTEsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojpt
ZW51TGlzdERlZmF1bHRFCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAv
LyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2Vs
ZWN0aW9uCi0gICAgICAgICAgICAvLyB3aGVuIGRpc3BhdGNoaW5nIGNoYW5nZSBldmVudHMgZHVy
aW5nIHNldFNlbGVjdGVkSW5kZXgsIHdoaWNoCisgICAgICAgICAgICAvLyB3aGVuIGRpc3BhdGNo
aW5nIGNoYW5nZSBldmVudHMgZHVyaW5nIHNlbGVjdE9wdGlvbiwgd2hpY2gKICAgICAgICAgICAg
IC8vIGdldHMgY2FsbGVkIGZyb20gUmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hhbmdlZCwgd2hpY2gg
Z2V0cyBjYWxsZWQKICAgICAgICAgICAgIC8vIGFmdGVyIHRoZSB1c2VyIG1ha2VzIGEgc2VsZWN0
aW9uIGZyb20gdGhlIG1lbnUuCiAgICAgICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbigpOwpAQCAt
MTA1OCw3ICsxMDY5LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0
RQogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2Vs
ZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbgotICAgICAg
ICAgICAgLy8gd2hlbiBkaXNwYXRjaGluZyBjaGFuZ2UgZXZlbnRzIGR1cmluZyBzZXRTZWxlY3Rl
ZEluZGV4LCB3aGljaAorICAgICAgICAgICAgLy8gd2hlbiBkaXNwYXRjaGluZyBjaGFuZ2UgZXZl
bnRzIGR1cmluZyBzZWxlY3RPcHRpb24sIHdoaWNoCiAgICAgICAgICAgICAvLyBnZXRzIGNhbGxl
ZCBmcm9tIFJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQsIHdoaWNoIGdldHMgY2FsbGVkCiAg
ICAgICAgICAgICAvLyBhZnRlciB0aGUgdXNlciBtYWtlcyBhIHNlbGVjdGlvbiBmcm9tIHRoZSBt
ZW51LgogICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oKTsKQEAgLTEwNjgsMTQgKzEwNzks
MTQgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RQogICAgICAgICB9
IGVsc2UgaWYgKGtleUNvZGUgPT0gJ1xyJykgewogICAgICAgICAgICAgaWYgKGZvcm0oKSkKICAg
ICAgICAgICAgICAgICBmb3JtKCktPnN1Ym1pdEltcGxpY2l0bHkoZXZlbnQsIGZhbHNlKTsKLSAg
ICAgICAgICAgIG1lbnVMaXN0T25DaGFuZ2UoKTsKKyAgICAgICAgICAgIGRpc3BhdGNoQ2hhbmdl
RXZlbnRGb3JNZW51TGlzdCgpOwogICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAg
IH0KICNlbHNlCiAgICAgICAgIGludCBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChzZWxl
Y3RlZEluZGV4KCkpOwogICAgICAgICBpZiAoa2V5Q29kZSA9PSAnXHInKSB7CiAgICAgICAgICAg
ICAvLyBsaXN0SW5kZXggc2hvdWxkIGFscmVhZHkgYmUgc2VsZWN0ZWQsIGJ1dCB0aGlzIHdpbGwg
ZmlyZSB0aGUgb25jaGFuZ2UgaGFuZGxlci4KLSAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgo
bGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAg
ICAgICBzZWxlY3RPcHRpb24obGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSwgRGVzZWxlY3RP
dGhlck9wdGlvbnMgfCBEaXNwYXRjaENoYW5nZUV2ZW50IHwgVXNlckRyaXZlbik7CiAgICAgICAg
ICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC0xMDkxLDcgKzExMDIs
NyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRFCiAgICAgICAgICAg
ICAgICAgICAgIG1lbnVMaXN0LT5oaWRlUG9wdXAoKTsKICAgICAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBj
b21wYXJlZCB0byB0aGUgbmV3Ci0gICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGlvbiB3aGVu
IHdlIGNhbGwgb25DaGFuZ2UgZHVyaW5nIHNldFNlbGVjdGVkSW5kZXgsCisgICAgICAgICAgICAg
ICAgICAgIC8vIHNlbGVjdGlvbiB3aGVuIHdlIGNhbGwgb25DaGFuZ2UgZHVyaW5nIHNlbGVjdE9w
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBSZW5k
ZXJNZW51TGlzdDo6dmFsdWVDaGFuZ2VkLAogICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCBn
ZXRzIGNhbGxlZCBhZnRlciB0aGUgdXNlciBtYWtlcyBhIHNlbGVjdGlvbiBmcm9tCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZSBtZW51LgpAQCAtMTM4NCw3ICsxMzk1LDcgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6dHlwZUFoZWFkRmluZChLZQogICAgICAgICAvLyBGb2xkIHRoZSBvcHRp
b24gc3RyaW5nIGFuZCBjaGVjayBpZiBpdHMgcHJlZml4IGlzIGVxdWFsIHRvIHRoZSBmb2xkZWQg
cHJlZml4LgogICAgICAgICBTdHJpbmcgdGV4dCA9IHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVu
dCktPnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKICAgICAgICAgaWYgKHN0cmlw
TGVhZGluZ1doaXRlU3BhY2UodGV4dCkuZm9sZENhc2UoKS5zdGFydHNXaXRoKHByZWZpeFdpdGhD
YXNlRm9sZGVkKSkgewotICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChsaXN0VG9PcHRpb25J
bmRleChpbmRleCksIHRydWUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIHNlbGVjdE9wdGlv
bihsaXN0VG9PcHRpb25JbmRleChpbmRleCksIERlc2VsZWN0T3RoZXJPcHRpb25zIHwgVXNlckRy
aXZlbik7CiAgICAgICAgICAgICBpZiAoIXVzZXNNZW51TGlzdCgpKQogICAgICAgICAgICAgICAg
IGxpc3RCb3hPbkNoYW5nZSgpOwogCkBAIC0xNDE5LDEyICsxNDMwLDEyIEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OmFjY2Vzc0tleVNldFNlbGUKICAgICAgICAgICAgIGlmICh0b0hUTUxPcHRp
b25FbGVtZW50KGVsZW1lbnQpLT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgICAgIHRvSFRNTE9w
dGlvbkVsZW1lbnQoZWxlbWVudCktPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgoaW5kZXgsIGZhbHNlLCB0
cnVlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBzZWxlY3RPcHRpb24oaW5kZXgsIERpc3BhdGNo
Q2hhbmdlRXZlbnQgfCBVc2VyRHJpdmVuKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICh1
c2VzTWVudUxpc3QoKSkKLSAgICAgICAgbWVudUxpc3RPbkNoYW5nZSgpOworICAgICAgICBkaXNw
YXRjaENoYW5nZUV2ZW50Rm9yTWVudUxpc3QoKTsKICAgICBlbHNlCiAgICAgICAgIGxpc3RCb3hP
bkNoYW5nZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5o
CShyZXZpc2lvbiA5ODQwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SFRNTFNlbGVjdEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKIAogICAgIGludCBzZWxlY3RlZEluZGV4
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTZWxlY3RlZEluZGV4KGludCBpbmRleCwgYm9vbCBkZXNl
bGVjdCA9IHRydWUpOwotICAgIHZvaWQgc2V0U2VsZWN0ZWRJbmRleEJ5VXNlcihpbnQgaW5kZXgs
IGJvb2wgZGVzZWxlY3QgPSB0cnVlLCBib29sIGZpcmVPbkNoYW5nZU5vdyA9IGZhbHNlLCBib29s
IGFsbG93TXVsdGlwbGVTZWxlY3Rpb24gPSBmYWxzZSk7CisgICAgdm9pZCBzZXRTZWxlY3RlZElu
ZGV4KGludCk7CisKKyAgICB2b2lkIG9wdGlvblNlbGVjdGVkQnlVc2VyKGludCBpbmRleCwgYm9v
bCBkaXNwYXRjaENoYW5nZUV2ZW50LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24gPSBmYWxz
ZSk7CiAKICAgICAvLyBGb3IgVmFsaWRpdHlTdGF0ZQogICAgIGJvb2wgdmFsdWVNaXNzaW5nKCkg
Y29uc3Q7CkBAIC05Niw2ICs5Nyw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFjdGl2ZVNlbGVj
dGlvbkVuZEluZGV4KGludCk7CiAgICAgdm9pZCB1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKGJvb2wg
ZGVzZWxlY3RPdGhlck9wdGlvbnMpOwogICAgIAorICAgIC8vIEZvciB1c2UgaW4gdGhlIGltcGxl
bWVudGF0aW9uIG9mIEhUTUxPcHRpb25FbGVtZW50LgorICAgIHZvaWQgb3B0aW9uU2VsZWN0aW9u
U3RhdGVDaGFuZ2VkKEhUTUxPcHRpb25FbGVtZW50KiwgYm9vbCBvcHRpb25Jc1NlbGVjdGVkKTsK
KyAgICAKIHByb3RlY3RlZDoKICAgICBIVE1MU2VsZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKIApAQCAtMTI0LDcgKzEyOCw3IEBA
IHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCop
OwogCi0gICAgdm9pZCBtZW51TGlzdE9uQ2hhbmdlKCk7CisgICAgdm9pZCBkaXNwYXRjaENoYW5n
ZUV2ZW50Rm9yTWVudUxpc3QoKTsKICAgICAKICAgICB2b2lkIHJlY2FsY0xpc3RJdGVtcyhib29s
IHVwZGF0ZVNlbGVjdGVkU3RhdGVzID0gdHJ1ZSkgY29uc3Q7CiAKQEAgLTEzOSw4ICsxNDMsMTQg
QEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaGFzUGxhY2Vob2xkZXJMYWJlbE9wdGlvbigpIGNvbnN0
OwogCi0gICAgdm9pZCBzZXRTZWxlY3RlZEluZGV4KGludCBvcHRpb25JbmRleCwgYm9vbCBkZXNl
bGVjdCwgYm9vbCBmaXJlT25DaGFuZ2VOb3csIGJvb2wgdXNlckRyaXZlbkNoYW5nZSk7Ci0gICAg
dm9pZCBkZXNlbGVjdEl0ZW1zV2l0aG91dFZhbGlkYXRpb24oSFRNTEVsZW1lbnQqIGV4Y2x1ZGVF
bGVtZW50ID0gMCk7CisgICAgZW51bSBTZWxlY3RPcHRpb25GbGFnIHsKKyAgICAgICAgRGVzZWxl
Y3RPdGhlck9wdGlvbnMgPSAxIDw8IDAsCisgICAgICAgIERpc3BhdGNoQ2hhbmdlRXZlbnQgPSAx
IDw8IDEsCisgICAgICAgIFVzZXJEcml2ZW4gPSAxIDw8IDIsCisgICAgfTsKKyAgICB0eXBlZGVm
IHVuc2lnbmVkIFNlbGVjdE9wdGlvbkZsYWdzOworICAgIHZvaWQgc2VsZWN0T3B0aW9uKGludCBv
cHRpb25JbmRleCwgU2VsZWN0T3B0aW9uRmxhZ3MgPSAwKTsKKyAgICB2b2lkIGRlc2VsZWN0SXRl
bXNXaXRob3V0VmFsaWRhdGlvbihIVE1MRWxlbWVudCogZWxlbWVudFRvRXhjbHVkZSA9IDApOwog
ICAgIHZvaWQgcGFyc2VNdWx0aXBsZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUqKTsKICAgICBp
bnQgbGFzdFNlbGVjdGVkTGlzdEluZGV4KCkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVTZWxlY3Rl
ZFN0YXRlKGludCBsaXN0SW5kZXgsIGJvb2wgbXVsdGksIGJvb2wgc2hpZnQpOwpAQCAtMTc1LDE3
ICsxODUsMTIgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9hY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRl
eDsKICAgICBpbnQgbV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleDsKICAgICBVQ2hhciBtX3JlcGVh
dGluZ0NoYXI7Ci0gICAgYm9vbCBtX3VzZXJEcml2ZW5DaGFuZ2U7CisgICAgYm9vbCBtX2lzUHJv
Y2Vzc2luZ1VzZXJEcml2ZW5DaGFuZ2U7CiAgICAgYm9vbCBtX211bHRpcGxlOwogICAgIGJvb2wg
bV9hY3RpdmVTZWxlY3Rpb25TdGF0ZTsKICAgICBtdXRhYmxlIGJvb2wgbV9zaG91bGRSZWNhbGNM
aXN0SXRlbXM7CiB9OwogCi1pbmxpbmUgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0
ZWRJbmRleChpbnQgaW5kZXgsIGJvb2wgZGVzZWxlY3QpCi17Ci0gICAgc2V0U2VsZWN0ZWRJbmRl
eChpbmRleCwgZGVzZWxlY3QsIGZhbHNlLCBmYWxzZSk7Ci19Ci0KIGlubGluZSBib29sIEhUTUxT
ZWxlY3RFbGVtZW50Ojp1c2VzTWVudUxpc3QoKSBjb25zdAogewogI2lmIEVOQUJMRShOT19MSVNU
Qk9YX1JFTkRFUklORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51
TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1l
bnVMaXN0LmNwcAkocmV2aXNpb24gOTg0MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUsNyArMzI1LDcgQEAgdm9p
ZCBSZW5kZXJNZW51TGlzdDo6dmFsdWVDaGFuZ2VkKHVuc2lnbgogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQo
bm9kZSgpKTsKLSAgICBzZWxlY3QtPnNldFNlbGVjdGVkSW5kZXhCeVVzZXIoc2VsZWN0LT5saXN0
VG9PcHRpb25JbmRleChsaXN0SW5kZXgpLCB0cnVlLCBmaXJlT25DaGFuZ2UpOworICAgIHNlbGVj
dC0+b3B0aW9uU2VsZWN0ZWRCeVVzZXIoc2VsZWN0LT5saXN0VG9PcHRpb25JbmRleChsaXN0SW5k
ZXgpLCBmaXJlT25DaGFuZ2UpOwogfQogCiAjaWYgRU5BQkxFKE5PX0xJU1RCT1hfUkVOREVSSU5H
KQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4NDA5KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NiBAQAorMjAxMS0xMC0yNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgT0JTT0xFVEUgQ0hBTkdFIExPRyBORUVEUyBUTyBCRSBVUERBVEVEIChPT1BTKQorCisgICAg
ICAgIENoYW5nZSBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleCB0byB1c2UgZW51
bXMgaW5zdGVhZCBvZiBib29scworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzAxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHRlc3RzL1BvcHVwTWVudVRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpU
ZXN0UG9wdXBNZW51Q2xpZW50Ojp2YWx1ZUNoYW5nZWQpOiBSZW1vdmVkICJ0cnVlIiBwYXNzZWQg
YXMgdGhlCisgICAgICAgIGRlc2VsZWN0IGFyZ3VtZW50IG9mIHNldFNlbGVjdGVkSW5kZXhCeVVz
ZXIsIGJlY2F1c2UgdGhhdCBhcmd1bWVudCB3YXMgcmVtb3ZlZC4KKwogMjAxMS0xMC0yNSAgQW50
b2luZSBMYWJvdXIgIDxwaW1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRml4IHRlYXJkb3du
IGluIFdlYipMYXllckltcGwsIGFuZCBhZGQgdGVzdHMgZm9yIFdlYipMYXllcgpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCShyZXZpc2lv
biA5ODQwOSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgICAgICBtX3Nl
bGVjdEluZGV4ID0gbGlzdEluZGV4OwogICAgICAgICBpZiAobV9ub2RlKSB7CiAgICAgICAgICAg
ICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9IVE1MU2VsZWN0RWxlbWVudChtX25vZGUp
OwotICAgICAgICAgICAgc2VsZWN0LT5zZXRTZWxlY3RlZEluZGV4QnlVc2VyKHNlbGVjdC0+bGlz
dFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSwgdHJ1ZSwgZmlyZUV2ZW50cyk7CisgICAgICAgICAg
ICBzZWxlY3QtPm9wdGlvblNlbGVjdGVkQnlVc2VyKHNlbGVjdC0+bGlzdFRvT3B0aW9uSW5kZXgo
bGlzdEluZGV4KSwgZmlyZUV2ZW50cyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgdmlydHVhbCB2
b2lkIHNlbGVjdGlvbkNoYW5nZWQodW5zaWduZWQsIGJvb2wpIHt9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113244</attachid>
            <date>2011-11-01 15:44:59 -0700</date>
            <delta_ts>2011-11-01 19:47:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70184-20111101154503.patch</filename>
            <type>text/plain</type>
            <size>23727</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4OTc3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMTAtMjUgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIENoYW5nZSBIVE1MU2VsZWN0RWxlbWVu
dDo6c2V0U2VsZWN0ZWRJbmRleCB0byB1c2UgZW51bXMgaW5zdGVhZCBvZiBib29scworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAxODQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcmluZyB0aGF0
IGRvZXMgbm90IHJlcXVpcmUgbmV3IHRlc3RzLgorCisgICAgICAgICogYmluZGluZ3Mvb2JqYy9E
T01IVE1MLm1tOgorICAgICAgICAoLVtET01IVE1MU2VsZWN0RWxlbWVudCBfYWN0aXZhdGVJdGVt
QXRJbmRleDpdKTogUmVwbGFjZWQgc2V0U2VsZWN0ZWRJbmRleEJ5VXNlcgorICAgICAgICBjYWxs
IHdpdGggYSBjYWxsIHRvIHRoZSByZW5hbWVkIG9wdGlvblNlbGVjdGVkQnlVc2VyLCBhbHNvIHJl
bW92ZWQgb25lIGFyZ3VtZW50LgorICAgICAgICAoLVtET01IVE1MU2VsZWN0RWxlbWVudCBfYWN0
aXZhdGVJdGVtQXRJbmRleDphbGxvd011bHRpcGxlU2VsZWN0aW9uOl0pOiBEaXR0by4KKworICAg
ICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkKTogUmVwbGFjZWQgc2V0U2VsZWN0ZWRJbmRleCBj
YWxsIHdpdGggYQorICAgICAgICBjYWxsIHRvIHRoZSBuZXcgb3B0aW9uU2VsZWN0aW9uU3RhdGVD
aGFuZ2VkIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6Omlu
c2VydGVkSW50b1RyZWUpOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OkhUTUxTZWxlY3RF
bGVtZW50KTogVXBkYXRlZCBzaW5jZSBtX3VzZXJEcml2ZW5DaGFuZ2UKKyAgICAgICAgd2FzIHJl
bmFtZWQgdG8gbV9pc1Byb2Nlc3NpbmdVc2VyRHJpdmVuQ2hhbmdlLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvblNlbGVjdGVkQnlVc2VyKTogUmVtb3ZlZCBkZXNl
bGVjdCBhcmd1bWVudCwKKyAgICAgICAgd2hpY2ggd2FzIGFsd2F5cyB0cnVlIGZvciBhbGwgY2Fs
bGVycy4gVXBkYXRlZCBjb21tZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1l
bnQ6Omhhc1BsYWNlaG9sZGVyTGFiZWxPcHRpb24pOiBVcGRhdGVkIGNvbW1lbnQuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0T3B0aW9uKTogQ2FsbCB0aGUgbmV3IG9w
dGlvblNlbGVjdGlvblN0YXRlQ2hhbmdlZAorICAgICAgICBmdW5jdGlvbi4gVGhlIGNvZGUgdXNl
ZCB0byBleHBsaWNpdGx5IGFzayB0aGUgZnVuY3Rpb24gaXQgY2FsbHMgdG8gZGVzZWxlY3QgYmFz
ZQorICAgICAgICBvbiB0aGUgdmFsdWUgb2YgbV9tdWx0aXBsZSwgYnV0IHRoYXQgaXMgbm8gbG9u
Z2VyIG5lZWRlZCBiZWNhdXNlIHRoZSBzZWxlY3RPcHRpb24KKyAgICAgICAgZnVuY3Rpb24gaXRz
ZWxmIHRha2VzIGNhcmUgb2YgdGhhdCBjaGVjay4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxl
Y3RFbGVtZW50OjpkaXNwYXRjaENoYW5nZUV2ZW50Rm9yTWVudUxpc3QpOiBSZW5hbWVkIHRoaXMg
ZnVuY3Rpb24uCisgICAgICAgIEFsc28gdXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UgdG8gbV9pc1By
b2Nlc3NpbmdVc2VyRHJpdmVuQ2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVs
ZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXgpOiBNb3ZlZCB0aGUgZm9ybWVybHktaW5saW5lZCBmdW5j
dGlvbgorICAgICAgICBoZXJlIGZyb20gdGhlIGhlYWRlciBhbmQgY2hhbmdlZCBpdCB0byBjYWxs
IHRoZSByZW5hbWVkIHNlbGVjdE9wdGlvbiBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50OjpvcHRpb25TZWxlY3Rpb25TdGF0ZUNoYW5nZWQpOiBBZGRlZCB0aGlz
IGZ1bmN0aW9uLgorICAgICAgICBJdCBpcyB1c2VkIGJ5IGNhbGxlcnMgdGhhdCB3ZXJlIHByZXZp
b3VzbHkgdXNpbmcgc2V0U2VsZWN0ZWRJbmRleCBhbmQgcGFzc2luZworICAgICAgICAiZmFsc2Ui
IGZvciB0aGUgZGVzZWxlY3QgYXJndW1lbnQuIEl0J3MgYmV0dGVyIG5vdyB0aGF0IHNldFNlbGVj
dGVkSW5kZXggaXMgbm93IGEKKyAgICAgICAgcHVyZSBET00gc2V0dGVyIGZ1bmN0aW9uIHdpdGhv
dXQgdGhlIG11bHRpcGxlIHB1cnBvc2VzIGl0IGhhZCBiZWZvcmUuIFRoaXMgZnVuY3Rpb24KKyAg
ICAgICAgbm93IGhhcyB0aGUgbG9naWMgdGhhdCBoYW5kbGVzIHRoZSBzcGVjaWFsIGhhbmRsaW5n
IHdoZW4gZGVzZWxlY3RpbmcgYW4gb3B0aW9uLAorICAgICAgICB3aGljaCB1c2VkIHRvIGJlIGF0
IHRoZSB0b3Agb2YgdGhlIG5leHQgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2Vs
ZWN0RWxlbWVudDo6c2VsZWN0T3B0aW9uKTogUmVuYW1lZCB0aGlzIGZyb20gc2V0U2VsZWN0ZWRJ
bmRleC4KKyAgICAgICAgUmVwbGFjZWQgYm9vbGVhbiBhcmd1bWVudHMgd2l0aCBmbGFncy4gUmVt
b3ZlZCBjb2RlIHRvIGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlCisgICAgICAgIHdoZW4gd2UgZGVz
ZWxlY3QgYW4gb3B0aW9uOyB0aGF0J3Mgbm93IGhhbmRsZWQgaW4gdGhlIG9wdGlvblNlbGVjdGlv
blN0YXRlQ2hhbmdlZAorICAgICAgICBmdW5jdGlvbi4gQWRkZWQgYW4gYXNzZXJ0aW9uIHRvIHJl
cGxhY2UgYSBjb21tZW50IGFuZCB1cGRhdGVkIGZvciBvdGhlciByZW5hbWluZy4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCk6IFVwZGF0ZWQg
Zm9yIG5hbWUgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnBs
YXRmb3JtSGFuZGxlS2V5ZG93bkV2ZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1M
U2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKTogQ2hhbmdlZCB0byBj
YWxsIHRoZQorICAgICAgICBuZXcgc2VsZWN0T3B0aW9uIGZ1bmN0aW9uIGFuZCBhbHNvIHVwZGF0
ZWQgZm9yIG90aGVyIG5hbWUgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50Ojp0eXBlQWhlYWRGaW5kKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2Vs
ZWN0RWxlbWVudDo6YWNjZXNzS2V5U2V0U2VsZWN0ZWRJbmRleCk6IERpdHRvLgorCisgICAgICAg
ICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oOiBDaGFuZ2VkIHRoZSBzZXRTZWxlY3RlZEluZGV4
IHRvIGJlIGEgcHVyZSBzZXR0ZXIKKyAgICAgICAgZnVuY3Rpb24gZm9yIHRoZSBzZWxlY3RlZElu
ZGV4IERPTSBwcm9wZXJ0eS4gQWRkZWQgYSBvcHRpb25TZWxlY3RlZEJ5VXNlciBmdW5jdGlvbgor
ICAgICAgICBmb3IgdGhlIG90aGVyIHVzZSBvZiBzZXRTZWxlY3RlZEluZGV4LCBidXQgcmVtb3Zl
ZCB0aGUgYWx3YXlzIHRydWUgImRlc2VsZWN0IgorICAgICAgICBhcmd1bWVudCBmcm9tIGl0LiBB
ZGRlZCBhIG9wdGlvblNlbGVjdGlvblN0YXRlQ2hhbmdlZCBmdW5jdGlvbiBmb3IgdXNlIGluIHRo
ZQorICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCBpbXBsZW1lbnRhdGlvbi4gUmVuYW1lZCBtZW51
TGlzdE9uQ2hhbmdlIHRvCisgICAgICAgIGRpc3BhdGNoQ2hhbmdlRXZlbnRGb3JNZW51TGlzdCBm
b3IgY2xhcml0eS4gQWRkZWQgYSBTZWxlY3RPcHRpb25GbGFnIGFuZAorICAgICAgICBTZWxlY3RP
cHRpb25GbGFncyB0eXBlIGZvciB0aGUgYXJndW1lbnRzIHRvIHRoZSBzZWxlY3RPcHRpb24gZnVu
Y3Rpb24sIGZvcm1lcmx5CisgICAgICAgIGltcGxlbWVudGVkIGFzIGFuIG92ZXJsb2FkIG9mIHNl
dFNlbGVjdGVkSW5kZXggKGFuZCBjYWxsZWQgc2V0U2VsZWN0ZWRJbmRleEludGVybmFsCisgICAg
ICAgIGJlZm9yZSB0aGF0KS4gUmVuYW1lZCBtX3VzZXJEcml2ZW5DaGFuZ2UgdG8gbV9pc1Byb2Nl
c3NpbmdVc2VyRHJpdmVuQ2hhbmdlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVM
aXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQp
OiBSZXBsYWNlZCBzZXRTZWxlY3RlZEluZGV4QnlVc2VyCisgICAgICAgIGNhbGwgd2l0aCBhIGNh
bGwgdG8gdGhlIHJlbmFtZWQgb3B0aW9uU2VsZWN0ZWRCeVVzZXIsIGFsc28gcmVtb3ZlZCBvbmUg
YXJndW1lbnQuCisKIDIwMTEtMTEtMDEgIE1pa2UgUmVlZCAgPHJlZWRAZ29vZ2xlLmNvbT4KIAog
ICAgICAgICBbc2tpYV0gY2FsbCByZWFkUGl4ZWxzIG9uIGNhbnZhcyBpbnN0ZWFkIG9mIGRldmlj
ZSAod2lsbCBiZSBwcml2YXRlIG9uIGRldmljZSBzb29uKSBhbmQgY2hlY2sgZm9yIGVycm9yCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCShyZXZpc2lvbiA5ODk3
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSFRNTC5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTQ2LDcgKzE0Niw3IEBAIC0gKHZvaWQpX2FjdGl2YXRlSXRlbUF0SW5kZXg6KGlu
dClpbmRleAogewogICAgIC8vIFVzZSB0aGUgc2V0U2VsZWN0ZWRJbmRleEJ5VXNlciBmdW5jdGlv
biBzbyBhIGNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkLiA8cmRhcjovL3Byb2JsZW0vNjc2MDU5
MD4KICAgICBpZiAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IGNvcmUoc2Vs
ZikpCi0gICAgICAgIHNlbGVjdC0+c2V0U2VsZWN0ZWRJbmRleEJ5VXNlcihpbmRleCwgdHJ1ZSwg
dHJ1ZSk7CisgICAgICAgIHNlbGVjdC0+b3B0aW9uU2VsZWN0ZWRCeVVzZXIoaW5kZXgsIHRydWUp
OwogfQogCiAtICh2b2lkKV9hY3RpdmF0ZUl0ZW1BdEluZGV4OihpbnQpaW5kZXggYWxsb3dNdWx0
aXBsZVNlbGVjdGlvbjooQk9PTClhbGxvd011bHRpcGxlU2VsZWN0aW9uCkBAIC0xNTUsNyArMTU1
LDcgQEAgLSAodm9pZClfYWN0aXZhdGVJdGVtQXRJbmRleDooaW50KWluZGV4IAogICAgIC8vIElm
IHRoaXMgaXMgYSA8c2VsZWN0IG11bHRpcGxlPiB0aGUgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbiBm
bGFnIHdpbGwgYWxsb3cgc2V0dGluZyBtdWx0aXBsZQogICAgIC8vIHNlbGVjdGlvbnMgd2l0aG91
dCBjbGVhcmluZyB0aGUgb3RoZXIgc2VsZWN0aW9ucy4KICAgICBpZiAoV2ViQ29yZTo6SFRNTFNl
bGVjdEVsZW1lbnQqIHNlbGVjdCA9IGNvcmUoc2VsZikpCi0gICAgICAgIHNlbGVjdC0+c2V0U2Vs
ZWN0ZWRJbmRleEJ5VXNlcihpbmRleCwgdHJ1ZSwgdHJ1ZSwgYWxsb3dNdWx0aXBsZVNlbGVjdGlv
bik7CisgICAgICAgIHNlbGVjdC0+b3B0aW9uU2VsZWN0ZWRCeVVzZXIoaW5kZXgsIHRydWUsIGFs
bG93TXVsdGlwbGVTZWxlY3Rpb24pOwogfQogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gOTg5NzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDcg
KzIyOSw3IEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkKGJvb2wKICAgICBz
ZXRTZWxlY3RlZFN0YXRlKHNlbGVjdGVkKTsKIAogICAgIGlmIChIVE1MU2VsZWN0RWxlbWVudCog
c2VsZWN0ID0gb3duZXJTZWxlY3RFbGVtZW50KCkpCi0gICAgICAgIHNlbGVjdC0+c2V0U2VsZWN0
ZWRJbmRleChzZWxlY3RlZCA/IGluZGV4KCkgOiAtMSwgZmFsc2UpOworICAgICAgICBzZWxlY3Qt
Pm9wdGlvblNlbGVjdGlvblN0YXRlQ2hhbmdlZCh0aGlzLCBzZWxlY3RlZCk7CiB9CiAKIHZvaWQg
SFRNTE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUoYm9vbCBzZWxlY3RlZCkKQEAgLTI3
Niw5ICsyNzYsMTAgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0TGFiZWwoY29uc3QgUwog
dm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0UmVuZGVyU3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gbmV3U3R5bGUpCiB7CiAgICAgbV9zdHlsZSA9IG5ld1N0eWxlOwotICAgIGlmIChIVE1M
U2VsZWN0RWxlbWVudCogc2VsZWN0ID0gb3duZXJTZWxlY3RFbGVtZW50KCkpCisgICAgaWYgKEhU
TUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBvd25lclNlbGVjdEVsZW1lbnQoKSkgewogICAgICAg
ICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHNlbGVjdC0+cmVuZGVyZXIoKSkKICAgICAg
ICAgICAgIHJlbmRlcmVyLT5yZXBhaW50KCk7CisgICAgfQogfQogCiBSZW5kZXJTdHlsZSogSFRN
TE9wdGlvbkVsZW1lbnQ6Om5vblJlbmRlcmVyUmVuZGVyU3R5bGUoKSBjb25zdApAQCAtMzA1LDgg
KzMwNiwxMCBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjppbnNlcnRlZEludG9UcmVlCiAgICAg
ICAgIHNlbGVjdC0+c2V0UmVjYWxjTGlzdEl0ZW1zKCk7CiAgICAgICAgIC8vIERvIG5vdCBjYWxs
IHNlbGVjdGVkKCkgc2luY2UgY2FsbGluZyB1cGRhdGVMaXN0SXRlbVNlbGVjdGVkU3RhdGVzKCkK
ICAgICAgICAgLy8gYXQgdGhpcyB0aW1lIHdvbid0IGRvIHRoZSByaWdodCB0aGluZy4gKFdoeSwg
ZXhhY3RseT8pCisgICAgICAgIC8vIEZJWE1FOiBNaWdodCBiZSBiZXR0ZXIgdG8gY2FsbCB0aGlz
IHVuY29uZGl0aW9uYWxseSwgYWx3YXlzIHBhc3NpbmcgbV9pc1NlbGVjdGVkLAorICAgICAgICAv
LyByYXRoZXIgdGhhbiBvbmx5IGNhbGxpbmcgaXQgaWYgd2UgYXJlIHNlbGVjdGVkLgogICAgICAg
ICBpZiAobV9pc1NlbGVjdGVkKQotICAgICAgICAgICAgc2VsZWN0LT5zZXRTZWxlY3RlZEluZGV4
KGluZGV4KCksIGZhbHNlKTsKKyAgICAgICAgICAgIHNlbGVjdC0+b3B0aW9uU2VsZWN0aW9uU3Rh
dGVDaGFuZ2VkKHRoaXMsIHRydWUpOwogICAgICAgICBzZWxlY3QtPnNjcm9sbFRvU2VsZWN0aW9u
KCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50
LmNwcAkocmV2aXNpb24gOTg5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBIVE1MU2VsZWN0RWxl
bWVudDo6SFRNTFNlbGVjdEVsZW1lbnQoY29uCiAgICAgLCBtX2FjdGl2ZVNlbGVjdGlvbkFuY2hv
ckluZGV4KC0xKQogICAgICwgbV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgtMSkKICAgICAsIG1f
cmVwZWF0aW5nQ2hhcigwKQotICAgICwgbV91c2VyRHJpdmVuQ2hhbmdlKGZhbHNlKQorICAgICwg
bV9pc1Byb2Nlc3NpbmdVc2VyRHJpdmVuQ2hhbmdlKGZhbHNlKQogICAgICwgbV9tdWx0aXBsZShm
YWxzZSkKICAgICAsIG1fYWN0aXZlU2VsZWN0aW9uU3RhdGUoZmFsc2UpCiAgICAgLCBtX3Nob3Vs
ZFJlY2FsY0xpc3RJdGVtcyhmYWxzZSkKQEAgLTExMCwxMCArMTEwLDEwIEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRlbXMoSFQKICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2so
KTsKIH0KIAotdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleEJ5VXNlcihp
bnQgb3B0aW9uSW5kZXgsIGJvb2wgZGVzZWxlY3QsIGJvb2wgZmlyZU9uQ2hhbmdlTm93LCBib29s
IGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pCit2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpvcHRpb25T
ZWxlY3RlZEJ5VXNlcihpbnQgb3B0aW9uSW5kZXgsIGJvb2wgZmlyZU9uQ2hhbmdlTm93LCBib29s
IGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pCiB7Ci0gICAgLy8gTGlzdCBib3ggc2VsZWN0cyBjYW4g
ZmlyZSBvbmNoYW5nZSBldmVudHMgdGhyb3VnaCB1c2VyIGludGVyYWN0aW9uLCBzdWNoIGFzCi0g
ICAgLy8gbW91c2Vkb3duIGV2ZW50cy4gVGhpcyBhbGxvd3MgdGhhdCBzYW1lIGJlaGF2aW9yIHBy
b2dyYW1tYXRpY2FsbHkuCisgICAgLy8gVXNlciBpbnRlcmFjdGlvbiBzdWNoIGFzIG1vdXNlZG93
biBldmVudHMgY2FuIGNhdXNlIGxpc3QgYm94IHNlbGVjdCBlbGVtZW50cyB0byBzZW5kIGNoYW5n
ZSBldmVudHMuCisgICAgLy8gVGhpcyBwcm9kdWNlcyB0aGF0IHNhbWUgYmVoYXZpb3IgZm9yIGNo
YW5nZXMgdHJpZ2dlcmVkIGJ5IG90aGVyIGNvZGUgcnVubmluZyBvbiBiZWhhbGYgb2YgdGhlIHVz
ZXIuCiAgICAgaWYgKCF1c2VzTWVudUxpc3QoKSkgewogICAgICAgICB1cGRhdGVTZWxlY3RlZFN0
YXRlKG9wdGlvbkluZGV4LCBhbGxvd011bHRpcGxlU2VsZWN0aW9uLCBmYWxzZSk7CiAgICAgICAg
IHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwpAQCAtMTIzLDIwICsxMjMsMjAgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleAogICAgIH0KIAogICAgIC8vIEJhaWwgb3V0
IGlmIHRoaXMgaW5kZXggaXMgYWxyZWFkeSB0aGUgc2VsZWN0ZWQgb25lLCB0byBhdm9pZCBydW5u
aW5nIHVubmVjZXNzYXJ5IEphdmFTY3JpcHQgdGhhdCBjYW4gbWVzcyB1cAotICAgIC8vIGF1dG9m
aWxsLCB3aGVuIHRoZXJlIGlzIG5vIGFjdHVhbCBjaGFuZ2UgKHNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUyNTYgYW5kIHJkYXI6Ly83NDY3OTE3ICkuCi0gICAg
Ly8gUGVyaGFwcyB0aGlzIGxvZ2ljIGNvdWxkIGJlIG1vdmVkIGludG8gU2VsZWN0RWxlbWVudCwg
YnV0IHNvbWUgY2FsbGVycyBvZiBTZWxlY3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4KCkKLSAg
ICAvLyBzZWVtIHRvIGV4cGVjdCBpdCB0byBmaXJlIGl0cyBjaGFuZ2UgZXZlbnQgZXZlbiB3aGVu
IHRoZSBpbmRleCB3YXMgYWxyZWFkeSBzZWxlY3RlZC4KKyAgICAvLyBhdXRvZmlsbCB3aGVuIHRo
ZXJlIGlzIG5vIGFjdHVhbCBjaGFuZ2UgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzUyNTYgYW5kIDxyZGFyOi8vNzQ2NzkxNz4pLgorICAgIC8vIFRoZSBzZWxl
Y3RPcHRpb24gZnVuY3Rpb24gZG9lcyBub3QgYmVoYXZlIHRoaXMgd2F5LCBwb3NzaWJseSBiZWNh
dXNlIG90aGVyIGNhbGxlcnMgbmVlZCBhIGNoYW5nZSBldmVudCBldmVuCisgICAgLy8gaW4gY2Fz
ZXMgd2hlcmUgdGhlIHNlbGVjdGVkIG9wdGlvbiBpcyBub3QgY2hhbmdlLgogICAgIGlmIChvcHRp
b25JbmRleCA9PSBzZWxlY3RlZEluZGV4KCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBz
ZXRTZWxlY3RlZEluZGV4KG9wdGlvbkluZGV4LCBkZXNlbGVjdCwgZmlyZU9uQ2hhbmdlTm93LCB0
cnVlKTsKKworICAgIHNlbGVjdE9wdGlvbihvcHRpb25JbmRleCwgRGVzZWxlY3RPdGhlck9wdGlv
bnMgfCAoZmlyZU9uQ2hhbmdlTm93ID8gRGlzcGF0Y2hDaGFuZ2VFdmVudCA6IDApIHwgVXNlckRy
aXZlbik7CiB9CiAKIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6Omhhc1BsYWNlaG9sZGVyTGFiZWxP
cHRpb24oKSBjb25zdAogewogICAgIC8vIFRoZSBzZWxlY3QgZWxlbWVudCBoYXMgbm8gcGxhY2Vo
b2xkZXIgbGFiZWwgb3B0aW9uIGlmIGl0IGhhcyBhbiBhdHRyaWJ1dGUgIm11bHRpcGxlIiBzcGVj
aWZpZWQgb3IgYSBkaXNwbGF5IHNpemUgb2Ygbm9uLTEuCiAgICAgLy8gCi0gICAgLy8gVGhlIGNv
bmRpdGlvbiAic2l6ZSgpID4gMSIgaXMgYWN0dWFsbHkgbm90IGNvbXBsaWFudCB3aXRoIHRoZSBI
VE1MNSBzcGVjIGFzIG9mIERlYyAzLCAyMDEwLiAic2l6ZSgpICE9IDEiIGlzIGNvcnJlY3QuCisg
ICAgLy8gVGhlIGNvbmRpdGlvbiAic2l6ZSgpID4gMSIgaXMgbm90IGNvbXBsaWFudCB3aXRoIHRo
ZSBIVE1MNSBzcGVjIGFzIG9mIERlYyAzLCAyMDEwLiAic2l6ZSgpICE9IDEiIGlzIGNvcnJlY3Qu
CiAgICAgLy8gVXNpbmcgInNpemUoKSA+IDEiIGhlcmUgYmVjYXVzZSBzaXplKCkgbWF5IGJlIDAg
aW4gV2ViS2l0LgogICAgIC8vIFNlZSB0aGUgZGlzY3Vzc2lvbiBhdCBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODcKICAgICAvLwpAQCAtMzg1LDcgKzM4NSw3IEBA
IHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldE9wdGlvbih1bnNpZ24KICAgICBlYyA9IDA7CiAg
ICAgaWYgKGluZGV4ID4gbWF4U2VsZWN0SXRlbXMgLSAxKQogICAgICAgICBpbmRleCA9IG1heFNl
bGVjdEl0ZW1zIC0gMTsKLSAgICBpbnQgZGlmZiA9IGluZGV4ICAtIGxlbmd0aCgpOworICAgIGlu
dCBkaWZmID0gaW5kZXggLSBsZW5ndGgoKTsKICAgICBIVE1MRWxlbWVudCogYmVmb3JlID0gMDsK
ICAgICAvLyBPdXQgb2YgYXJyYXkgYm91bmRzPyBGaXJzdCBpbnNlcnQgZW1wdHkgZHVtbWllcy4K
ICAgICBpZiAoZGlmZiA+IDApIHsKQEAgLTM5OSw3ICszOTksNyBAQCB2b2lkIEhUTUxTZWxlY3RF
bGVtZW50OjpzZXRPcHRpb24odW5zaWduCiAgICAgaWYgKCFlYykgewogICAgICAgICBhZGQob3B0
aW9uLCBiZWZvcmUsIGVjKTsKICAgICAgICAgaWYgKGRpZmYgPj0gMCAmJiBvcHRpb24tPnNlbGVj
dGVkKCkpCi0gICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4KGluZGV4LCAhbV9tdWx0aXBsZSk7
CisgICAgICAgICAgICBvcHRpb25TZWxlY3Rpb25TdGF0ZUNoYW5nZWQob3B0aW9uLCB0cnVlKTsK
ICAgICB9CiB9CiAKQEAgLTYxOCwxNCArNjE4LDE0IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6
Omxpc3RCb3hPbkNoYW5nZSgKICAgICAgICAgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50
KCk7CiB9CiAKLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0T25DaGFuZ2UoKQordm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6ZGlzcGF0Y2hDaGFuZ2VFdmVudEZvck1lbnVMaXN0KCkKIHsK
ICAgICBBU1NFUlQodXNlc01lbnVMaXN0KCkpOwogCiAgICAgaW50IHNlbGVjdGVkID0gc2VsZWN0
ZWRJbmRleCgpOwotICAgIGlmIChtX2xhc3RPbkNoYW5nZUluZGV4ICE9IHNlbGVjdGVkICYmIG1f
dXNlckRyaXZlbkNoYW5nZSkgeworICAgIGlmIChtX2xhc3RPbkNoYW5nZUluZGV4ICE9IHNlbGVj
dGVkICYmIG1faXNQcm9jZXNzaW5nVXNlckRyaXZlbkNoYW5nZSkgewogICAgICAgICBtX2xhc3RP
bkNoYW5nZUluZGV4ID0gc2VsZWN0ZWQ7Ci0gICAgICAgIG1fdXNlckRyaXZlbkNoYW5nZSA9IGZh
bHNlOworICAgICAgICBtX2lzUHJvY2Vzc2luZ1VzZXJEcml2ZW5DaGFuZ2UgPSBmYWxzZTsKICAg
ICAgICAgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiAgICAgfQogfQpAQCAtNzQ2
LDEyICs3NDYsMjMgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjpzZWxlY3RlZEluZGV4KCkgYwog
ICAgIHJldHVybiAtMTsKIH0KIAotdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJ
bmRleChpbnQgb3B0aW9uSW5kZXgsIGJvb2wgZGVzZWxlY3QsIGJvb2wgZmlyZU9uQ2hhbmdlTm93
LCBib29sIHVzZXJEcml2ZW5DaGFuZ2UpCit2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRTZWxl
Y3RlZEluZGV4KGludCBpbmRleCkKK3sKKyAgICBzZWxlY3RPcHRpb24oaW5kZXgsIERlc2VsZWN0
T3RoZXJPcHRpb25zKTsKK30KKwordm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uU2VsZWN0
aW9uU3RhdGVDaGFuZ2VkKEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24sIGJvb2wgb3B0aW9uSXNT
ZWxlY3RlZCkKK3sKKyAgICBBU1NFUlQob3B0aW9uLT5vd25lclNlbGVjdEVsZW1lbnQoKSA9PSB0
aGlzKTsKKyAgICBpZiAob3B0aW9uSXNTZWxlY3RlZCkKKyAgICAgICAgc2VsZWN0T3B0aW9uKG9w
dGlvbi0+aW5kZXgoKSk7CisgICAgZWxzZQorICAgICAgICBzZWxlY3RPcHRpb24obV9tdWx0aXBs
ZSA/IC0xIDogbmV4dFNlbGVjdGFibGVMaXN0SW5kZXgoLTEpKTsKK30KKwordm9pZCBIVE1MU2Vs
ZWN0RWxlbWVudDo6c2VsZWN0T3B0aW9uKGludCBvcHRpb25JbmRleCwgU2VsZWN0T3B0aW9uRmxh
Z3MgZmxhZ3MpCiB7Ci0gICAgaWYgKG9wdGlvbkluZGV4ID09IC0xICYmICFkZXNlbGVjdCAmJiAh
bV9tdWx0aXBsZSkKLSAgICAgICAgb3B0aW9uSW5kZXggPSBuZXh0U2VsZWN0YWJsZUxpc3RJbmRl
eCgtMSk7Ci0gICAgaWYgKCFtX211bHRpcGxlKQotICAgICAgICBkZXNlbGVjdCA9IHRydWU7Cisg
ICAgYm9vbCBzaG91bGREZXNlbGVjdCA9ICFtX211bHRpcGxlIHx8IChmbGFncyAmIERlc2VsZWN0
T3RoZXJPcHRpb25zKTsKIAogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9
IGxpc3RJdGVtcygpOwogICAgIGludCBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChvcHRp
b25JbmRleCk7CkBAIC03NjAsMTUgKzc3MSwxNSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojpz
ZXRTZWxlY3RlZEluZGV4CiAgICAgaWYgKGxpc3RJbmRleCA+PSAwKSB7CiAgICAgICAgIGVsZW1l
bnQgPSBpdGVtc1tsaXN0SW5kZXhdOwogICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShv
cHRpb25UYWcpKSB7Ci0gICAgICAgICAgICBpZiAobV9hY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRl
eCA8IDAgfHwgZGVzZWxlY3QpCisgICAgICAgICAgICBpZiAobV9hY3RpdmVTZWxlY3Rpb25BbmNo
b3JJbmRleCA8IDAgfHwgc2hvdWxkRGVzZWxlY3QpCiAgICAgICAgICAgICAgICAgc2V0QWN0aXZl
U2VsZWN0aW9uQW5jaG9ySW5kZXgobGlzdEluZGV4KTsKLSAgICAgICAgICAgIGlmIChtX2FjdGl2
ZVNlbGVjdGlvbkVuZEluZGV4IDwgMCB8fCBkZXNlbGVjdCkKKyAgICAgICAgICAgIGlmIChtX2Fj
dGl2ZVNlbGVjdGlvbkVuZEluZGV4IDwgMCB8fCBzaG91bGREZXNlbGVjdCkKICAgICAgICAgICAg
ICAgICBzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChsaXN0SW5kZXgpOwogICAgICAgICAgICAg
dG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIGlmIChkZXNlbGVjdCkKKyAgICBpZiAoc2hvdWxkRGVzZWxl
Y3QpCiAgICAgICAgIGRlc2VsZWN0SXRlbXNXaXRob3V0VmFsaWRhdGlvbihlbGVtZW50KTsKIAog
ICAgIC8vIEZvciB0aGUgbWVudSBsaXN0IGNhc2UsIHRoaXMgaXMgd2hhdCBtYWtlcyB0aGUgc2Vs
ZWN0ZWQgZWxlbWVudCBhcHBlYXIuCkBAIC03NzcsMTMgKzc4OCwxMyBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4CiAKICAgICBzY3JvbGxUb1NlbGVjdGlvbigpOwog
Ci0gICAgLy8gVGhpcyBvbmx5IGdldHMgY2FsbGVkIHdpdGggZmlyZU9uQ2hhbmdlTm93IGZvciBt
ZW51IGxpc3RzLiAKLSAgICBpZiAodXNlc01lbnVMaXN0KCkpIHsKLSAgICAgICAgbV91c2VyRHJp
dmVuQ2hhbmdlID0gdXNlckRyaXZlbkNoYW5nZTsKLSAgICAgICAgaWYgKGZpcmVPbkNoYW5nZU5v
dykKLSAgICAgICAgICAgIG1lbnVMaXN0T25DaGFuZ2UoKTsKLSAgICAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmIChyZW5kZXJlcikgewor
ICAgIGlmICghdXNlc01lbnVMaXN0KCkpCisgICAgICAgIEFTU0VSVCghKGZsYWdzICYgRGlzcGF0
Y2hDaGFuZ2VFdmVudCkpOworICAgIGVsc2UgeworICAgICAgICBtX2lzUHJvY2Vzc2luZ1VzZXJE
cml2ZW5DaGFuZ2UgPSBmbGFncyAmIFVzZXJEcml2ZW47CisgICAgICAgIGlmIChmbGFncyAmIERp
c3BhdGNoQ2hhbmdlRXZlbnQpCisgICAgICAgICAgICBkaXNwYXRjaENoYW5nZUV2ZW50Rm9yTWVu
dUxpc3QoKTsKKyAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5k
ZXJlcigpKSB7CiAgICAgICAgICAgICBpZiAodXNlc01lbnVMaXN0KCkpCiAgICAgICAgICAgICAg
ICAgdG9SZW5kZXJNZW51TGlzdChyZW5kZXJlciktPmRpZFNldFNlbGVjdGVkSW5kZXgobGlzdElu
ZGV4KTsKICAgICAgICAgICAgIGVsc2UgaWYgKHJlbmRlcmVyLT5pc0xpc3RCb3goKSkKQEAgLTg0
Niw3ICs4NTcsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVuCiAg
ICAgLy8gY2hhbmdlIGV2ZW50cyBmb3IgbGlzdCBib3hlcyB3aGVuZXZlciB0aGUgc2VsZWN0aW9u
IGNoYW5nZSBpcyBhY3R1YWxseSBtYWRlLgogICAgIC8vIFRoaXMgbWF0Y2hlcyBvdGhlciBicm93
c2VycycgYmVoYXZpb3IuCiAgICAgaWYgKHVzZXNNZW51TGlzdCgpKQotICAgICAgICBtZW51TGlz
dE9uQ2hhbmdlKCk7CisgICAgICAgIGRpc3BhdGNoQ2hhbmdlRXZlbnRGb3JNZW51TGlzdCgpOwog
ICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRpc3BhdGNoQmx1ckV2ZW50KG5l
d0ZvY3VzZWROb2RlKTsKIH0KIApAQCAtOTY5LDcgKzk4MCw3IEBAIGJvb2wgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnBsYXRmb3JtSGFuZGxlS2UKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0
byB0aGUgbmV3IHNlbGVjdGlvbgotICAgICAgICAgICAgLy8gd2hlbiBkaXNwYXRjaGluZyBjaGFu
Z2UgZXZlbnRzIGR1cmluZyBzZXRTZWxlY3RlZEluZGV4LCB3aGljaAorICAgICAgICAgICAgLy8g
d2hlbiBkaXNwYXRjaGluZyBjaGFuZ2UgZXZlbnRzIGR1cmluZyBzZWxlY3RPcHRpb24sIHdoaWNo
CiAgICAgICAgICAgICAvLyBnZXRzIGNhbGxlZCBmcm9tIFJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNo
YW5nZWQsIHdoaWNoIGdldHMgY2FsbGVkCiAgICAgICAgICAgICAvLyBhZnRlciB0aGUgdXNlciBt
YWtlcyBhIHNlbGVjdGlvbiBmcm9tIHRoZSBtZW51LgogICAgICAgICAgICAgc2F2ZUxhc3RTZWxl
Y3Rpb24oKTsKQEAgLTEwMjIsNyArMTAzMyw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1l
bnVMaXN0RGVmYXVsdEUKICAgICAgICAgICAgIGhhbmRsZWQgPSBmYWxzZTsKIAogICAgICAgICBp
ZiAoaGFuZGxlZCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGxpc3RJbmRleCkgPCBsaXN0SXRlbXMu
c2l6ZSgpKQotICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChsaXN0VG9PcHRpb25JbmRleChs
aXN0SW5kZXgpLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICBzZWxlY3RPcHRpb24o
bGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSwgRGVzZWxlY3RPdGhlck9wdGlvbnMgfCBVc2Vy
RHJpdmVuKTsKIAogICAgICAgICBpZiAoaGFuZGxlZCkKICAgICAgICAgICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOwpAQCAtMTA1NCw3ICsxMDY1LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudDo6bWVudUxpc3REZWZhdWx0RQogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUg
bmV3IHNlbGVjdGlvbgotICAgICAgICAgICAgLy8gd2hlbiBkaXNwYXRjaGluZyBjaGFuZ2UgZXZl
bnRzIGR1cmluZyBzZXRTZWxlY3RlZEluZGV4LCB3aGljaAorICAgICAgICAgICAgLy8gd2hlbiBk
aXNwYXRjaGluZyBjaGFuZ2UgZXZlbnRzIGR1cmluZyBzZWxlY3RPcHRpb24sIHdoaWNoCiAgICAg
ICAgICAgICAvLyBnZXRzIGNhbGxlZCBmcm9tIFJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQs
IHdoaWNoIGdldHMgY2FsbGVkCiAgICAgICAgICAgICAvLyBhZnRlciB0aGUgdXNlciBtYWtlcyBh
IHNlbGVjdGlvbiBmcm9tIHRoZSBtZW51LgogICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24o
KTsKQEAgLTEwNzIsNyArMTA4Myw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0
RGVmYXVsdEUKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIC8vIFNhdmUg
dGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24K
LSAgICAgICAgICAgIC8vIHdoZW4gZGlzcGF0Y2hpbmcgY2hhbmdlIGV2ZW50cyBkdXJpbmcgc2V0
U2VsZWN0ZWRJbmRleCwgd2hpY2gKKyAgICAgICAgICAgIC8vIHdoZW4gZGlzcGF0Y2hpbmcgY2hh
bmdlIGV2ZW50cyBkdXJpbmcgc2VsZWN0T3B0aW9uLCB3aGljaAogICAgICAgICAgICAgLy8gZ2V0
cyBjYWxsZWQgZnJvbSBSZW5kZXJNZW51TGlzdDo6dmFsdWVDaGFuZ2VkLCB3aGljaCBnZXRzIGNh
bGxlZAogICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIHVzZXIgbWFrZXMgYSBzZWxlY3Rpb24gZnJv
bSB0aGUgbWVudS4KICAgICAgICAgICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7CkBAIC0xMDgyLDE0
ICsxMDkzLDE0IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEUKICAg
ICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09ICdccicpIHsKICAgICAgICAgICAgIGlmIChmb3Jt
KCkpCiAgICAgICAgICAgICAgICAgZm9ybSgpLT5zdWJtaXRJbXBsaWNpdGx5KGV2ZW50LCBmYWxz
ZSk7Ci0gICAgICAgICAgICBtZW51TGlzdE9uQ2hhbmdlKCk7CisgICAgICAgICAgICBkaXNwYXRj
aENoYW5nZUV2ZW50Rm9yTWVudUxpc3QoKTsKICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwog
ICAgICAgICB9CiAjZWxzZQogICAgICAgICBpbnQgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5k
ZXgoc2VsZWN0ZWRJbmRleCgpKTsKICAgICAgICAgaWYgKGtleUNvZGUgPT0gJ1xyJykgewogICAg
ICAgICAgICAgLy8gbGlzdEluZGV4IHNob3VsZCBhbHJlYWR5IGJlIHNlbGVjdGVkLCBidXQgdGhp
cyB3aWxsIGZpcmUgdGhlIG9uY2hhbmdlIGhhbmRsZXIuCi0gICAgICAgICAgICBzZXRTZWxlY3Rl
ZEluZGV4KGxpc3RUb09wdGlvbkluZGV4KGxpc3RJbmRleCksIHRydWUsIHRydWUsIHRydWUpOwor
ICAgICAgICAgICAgc2VsZWN0T3B0aW9uKGxpc3RUb09wdGlvbkluZGV4KGxpc3RJbmRleCksIERl
c2VsZWN0T3RoZXJPcHRpb25zIHwgRGlzcGF0Y2hDaGFuZ2VFdmVudCB8IFVzZXJEcml2ZW4pOwog
ICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtMTEwNSw3
ICsxMTE2LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RQogICAg
ICAgICAgICAgICAgICAgICBtZW51TGlzdC0+aGlkZVBvcHVwKCk7CiAgICAgICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBj
YW4gYmUgY29tcGFyZWQgdG8gdGhlIG5ldwotICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3Rp
b24gd2hlbiB3ZSBjYWxsIG9uQ2hhbmdlIGR1cmluZyBzZXRTZWxlY3RlZEluZGV4LAorICAgICAg
ICAgICAgICAgICAgICAvLyBzZWxlY3Rpb24gd2hlbiB3ZSBjYWxsIG9uQ2hhbmdlIGR1cmluZyBz
ZWxlY3RPcHRpb24sCiAgICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIGdldHMgY2FsbGVkIGZy
b20gUmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hhbmdlZCwKICAgICAgICAgICAgICAgICAgICAgLy8g
d2hpY2ggZ2V0cyBjYWxsZWQgYWZ0ZXIgdGhlIHVzZXIgbWFrZXMgYSBzZWxlY3Rpb24gZnJvbQog
ICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbWVudS4KQEAgLTEzOTgsNyArMTQwOSw3IEBAIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQoS2UKICAgICAgICAgLy8gRm9sZCB0
aGUgb3B0aW9uIHN0cmluZyBhbmQgY2hlY2sgaWYgaXRzIHByZWZpeCBpcyBlcXVhbCB0byB0aGUg
Zm9sZGVkIHByZWZpeC4KICAgICAgICAgU3RyaW5nIHRleHQgPSB0b0hUTUxPcHRpb25FbGVtZW50
KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAgICAgICAgIGlm
IChzdHJpcExlYWRpbmdXaGl0ZVNwYWNlKHRleHQpLmZvbGRDYXNlKCkuc3RhcnRzV2l0aChwcmVm
aXhXaXRoQ2FzZUZvbGRlZCkpIHsKLSAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgobGlzdFRv
T3B0aW9uSW5kZXgoaW5kZXgpLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICBzZWxl
Y3RPcHRpb24obGlzdFRvT3B0aW9uSW5kZXgoaW5kZXgpLCBEZXNlbGVjdE90aGVyT3B0aW9ucyB8
IFVzZXJEcml2ZW4pOwogICAgICAgICAgICAgaWYgKCF1c2VzTWVudUxpc3QoKSkKICAgICAgICAg
ICAgICAgICBsaXN0Qm94T25DaGFuZ2UoKTsKIApAQCAtMTQzMywxMiArMTQ0NCwxMiBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlTZXRTZWxlCiAgICAgICAgICAgICBpZiAodG9I
VE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQoKSkKICAgICAgICAgICAgICAgICB0
b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT5zZXRTZWxlY3RlZFN0YXRlKGZhbHNlKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4KGluZGV4LCBm
YWxzZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgc2VsZWN0T3B0aW9uKGluZGV4LCBE
aXNwYXRjaENoYW5nZUV2ZW50IHwgVXNlckRyaXZlbik7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICBpZiAodXNlc01lbnVMaXN0KCkpCi0gICAgICAgIG1lbnVMaXN0T25DaGFuZ2UoKTsKKyAgICAg
ICAgZGlzcGF0Y2hDaGFuZ2VFdmVudEZvck1lbnVMaXN0KCk7CiAgICAgZWxzZQogICAgICAgICBs
aXN0Qm94T25DaGFuZ2UoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuaAkocmV2aXNpb24gOTg5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDkgQEAgcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxTZWxlY3RFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CiAKICAgICBpbnQgc2VsZWN0
ZWRJbmRleCgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2VsZWN0ZWRJbmRleChpbnQgaW5kZXgsIGJv
b2wgZGVzZWxlY3QgPSB0cnVlKTsKLSAgICB2b2lkIHNldFNlbGVjdGVkSW5kZXhCeVVzZXIoaW50
IGluZGV4LCBib29sIGRlc2VsZWN0ID0gdHJ1ZSwgYm9vbCBmaXJlT25DaGFuZ2VOb3cgPSBmYWxz
ZSwgYm9vbCBhbGxvd011bHRpcGxlU2VsZWN0aW9uID0gZmFsc2UpOworICAgIHZvaWQgc2V0U2Vs
ZWN0ZWRJbmRleChpbnQpOworCisgICAgdm9pZCBvcHRpb25TZWxlY3RlZEJ5VXNlcihpbnQgaW5k
ZXgsIGJvb2wgZGlzcGF0Y2hDaGFuZ2VFdmVudCwgYm9vbCBhbGxvd011bHRpcGxlU2VsZWN0aW9u
ID0gZmFsc2UpOwogCiAgICAgLy8gRm9yIFZhbGlkaXR5U3RhdGUKICAgICBib29sIHZhbHVlTWlz
c2luZygpIGNvbnN0OwpAQCAtMTAyLDYgKzEwMyw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFj
dGl2ZVNlbGVjdGlvbkVuZEluZGV4KGludCk7CiAgICAgdm9pZCB1cGRhdGVMaXN0Qm94U2VsZWN0
aW9uKGJvb2wgZGVzZWxlY3RPdGhlck9wdGlvbnMpOwogICAgIAorICAgIC8vIEZvciB1c2UgaW4g
dGhlIGltcGxlbWVudGF0aW9uIG9mIEhUTUxPcHRpb25FbGVtZW50LgorICAgIHZvaWQgb3B0aW9u
U2VsZWN0aW9uU3RhdGVDaGFuZ2VkKEhUTUxPcHRpb25FbGVtZW50KiwgYm9vbCBvcHRpb25Jc1Nl
bGVjdGVkKTsKKyAgICAKIHByb3RlY3RlZDoKICAgICBIVE1MU2VsZWN0RWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKIApAQCAtMTMwLDcg
KzEzNCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCopOwogCi0gICAgdm9pZCBtZW51TGlzdE9uQ2hhbmdlKCk7CisgICAgdm9pZCBkaXNw
YXRjaENoYW5nZUV2ZW50Rm9yTWVudUxpc3QoKTsKICAgICAKICAgICB2b2lkIHJlY2FsY0xpc3RJ
dGVtcyhib29sIHVwZGF0ZVNlbGVjdGVkU3RhdGVzID0gdHJ1ZSkgY29uc3Q7CiAKQEAgLTE0NSw4
ICsxNDksMTQgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaGFzUGxhY2Vob2xkZXJMYWJlbE9wdGlv
bigpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRTZWxlY3RlZEluZGV4KGludCBvcHRpb25JbmRleCwg
Ym9vbCBkZXNlbGVjdCwgYm9vbCBmaXJlT25DaGFuZ2VOb3csIGJvb2wgdXNlckRyaXZlbkNoYW5n
ZSk7Ci0gICAgdm9pZCBkZXNlbGVjdEl0ZW1zV2l0aG91dFZhbGlkYXRpb24oSFRNTEVsZW1lbnQq
IGV4Y2x1ZGVFbGVtZW50ID0gMCk7CisgICAgZW51bSBTZWxlY3RPcHRpb25GbGFnIHsKKyAgICAg
ICAgRGVzZWxlY3RPdGhlck9wdGlvbnMgPSAxIDw8IDAsCisgICAgICAgIERpc3BhdGNoQ2hhbmdl
RXZlbnQgPSAxIDw8IDEsCisgICAgICAgIFVzZXJEcml2ZW4gPSAxIDw8IDIsCisgICAgfTsKKyAg
ICB0eXBlZGVmIHVuc2lnbmVkIFNlbGVjdE9wdGlvbkZsYWdzOworICAgIHZvaWQgc2VsZWN0T3B0
aW9uKGludCBvcHRpb25JbmRleCwgU2VsZWN0T3B0aW9uRmxhZ3MgPSAwKTsKKyAgICB2b2lkIGRl
c2VsZWN0SXRlbXNXaXRob3V0VmFsaWRhdGlvbihIVE1MRWxlbWVudCogZWxlbWVudFRvRXhjbHVk
ZSA9IDApOwogICAgIHZvaWQgcGFyc2VNdWx0aXBsZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUq
KTsKICAgICBpbnQgbGFzdFNlbGVjdGVkTGlzdEluZGV4KCkgY29uc3Q7CiAgICAgdm9pZCB1cGRh
dGVTZWxlY3RlZFN0YXRlKGludCBsaXN0SW5kZXgsIGJvb2wgbXVsdGksIGJvb2wgc2hpZnQpOwpA
QCAtMTgwLDE3ICsxOTAsMTIgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9hY3RpdmVTZWxlY3Rpb25B
bmNob3JJbmRleDsKICAgICBpbnQgbV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleDsKICAgICBVQ2hh
ciBtX3JlcGVhdGluZ0NoYXI7Ci0gICAgYm9vbCBtX3VzZXJEcml2ZW5DaGFuZ2U7CisgICAgYm9v
bCBtX2lzUHJvY2Vzc2luZ1VzZXJEcml2ZW5DaGFuZ2U7CiAgICAgYm9vbCBtX211bHRpcGxlOwog
ICAgIGJvb2wgbV9hY3RpdmVTZWxlY3Rpb25TdGF0ZTsKICAgICBtdXRhYmxlIGJvb2wgbV9zaG91
bGRSZWNhbGNMaXN0SXRlbXM7CiB9OwogCi1pbmxpbmUgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
c2V0U2VsZWN0ZWRJbmRleChpbnQgaW5kZXgsIGJvb2wgZGVzZWxlY3QpCi17Ci0gICAgc2V0U2Vs
ZWN0ZWRJbmRleChpbmRleCwgZGVzZWxlY3QsIGZhbHNlLCBmYWxzZSk7Ci19Ci0KIGlubGluZSBi
b29sIEhUTUxTZWxlY3RFbGVtZW50Ojp1c2VzTWVudUxpc3QoKSBjb25zdAogewogI2lmIEVOQUJM
RShOT19MSVNUQk9YX1JFTkRFUklORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gOTg5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUsNyArMzI1
LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6dmFsdWVDaGFuZ2VkKHVuc2lnbgogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvSFRNTFNlbGVj
dEVsZW1lbnQobm9kZSgpKTsKLSAgICBzZWxlY3QtPnNldFNlbGVjdGVkSW5kZXhCeVVzZXIoc2Vs
ZWN0LT5saXN0VG9PcHRpb25JbmRleChsaXN0SW5kZXgpLCB0cnVlLCBmaXJlT25DaGFuZ2UpOwor
ICAgIHNlbGVjdC0+b3B0aW9uU2VsZWN0ZWRCeVVzZXIoc2VsZWN0LT5saXN0VG9PcHRpb25JbmRl
eChsaXN0SW5kZXgpLCBmaXJlT25DaGFuZ2UpOwogfQogCiAjaWYgRU5BQkxFKE5PX0xJU1RCT1hf
UkVOREVSSU5HKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4OTc3
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNCBAQAorMjAxMS0xMC0yNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgQ2hhbmdlIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4IHRv
IHVzZSBlbnVtcyBpbnN0ZWFkIG9mIGJvb2xzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03MDE4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogdGVzdHMvUG9wdXBNZW51VGVzdC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlRlc3RQb3B1cE1lbnVDbGllbnQ6OnZhbHVlQ2hhbmdlZCk6IFJlcGxhY2VkIHNldFNl
bGVjdGVkSW5kZXhCeVVzZXIKKyAgICAgICAgY2FsbCB3aXRoIGEgY2FsbCB0byB0aGUgcmVuYW1l
ZCBvcHRpb25TZWxlY3RlZEJ5VXNlciwgYWxzbyByZW1vdmVkIG9uZSBhcmd1bWVudC4KKwogMjAx
MS0xMS0wMSAgQWxvayBQcml5YWRhcnNoaSAgPGFsb2twQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSb2xsIGNocm9taXVtIERFUFMuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1BvcHVwTWVudVRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvUG9wdXBNZW51VGVzdC5jcHAJKHJldmlzaW9uIDk4OTc3KQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUs
NyArNzUsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2VsZWN0SW5kZXggPSBsaXN0SW5kZXg7CiAg
ICAgICAgIGlmIChtX25vZGUpIHsKICAgICAgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxl
Y3QgPSB0b0hUTUxTZWxlY3RFbGVtZW50KG1fbm9kZSk7Ci0gICAgICAgICAgICBzZWxlY3QtPnNl
dFNlbGVjdGVkSW5kZXhCeVVzZXIoc2VsZWN0LT5saXN0VG9PcHRpb25JbmRleChsaXN0SW5kZXgp
LCB0cnVlLCBmaXJlRXZlbnRzKTsKKyAgICAgICAgICAgIHNlbGVjdC0+b3B0aW9uU2VsZWN0ZWRC
eVVzZXIoc2VsZWN0LT5saXN0VG9PcHRpb25JbmRleChsaXN0SW5kZXgpLCBmaXJlRXZlbnRzKTsK
ICAgICAgICAgfQogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCh1bnNp
Z25lZCwgYm9vbCkge30K
</data>

          </attachment>
      

    </bug>

</bugzilla>