<?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>141100</bug_id>
          
          <creation_ts>2015-01-30 15:25:41 -0800</creation_ts>
          <short_desc>Simple line layout: Make LineState fragment handling simpler.</short_desc>
          <delta_ts>2015-01-30 19:37:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1065670</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-01-30 15:25:41 -0800</bug_when>
    <thetext>By making Run&apos;s last entry to expand as we add fragments. -instead of having LineState:segment (and related) members.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065679</commentid>
    <comment_count>1</comment_count>
      <attachid>245749</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-01-30 15:32:54 -0800</bug_when>
    <thetext>Created attachment 245749
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065695</commentid>
    <comment_count>2</comment_count>
      <attachid>245751</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-01-30 16:11:01 -0800</bug_when>
    <thetext>Created attachment 245751
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065750</commentid>
    <comment_count>3</comment_count>
      <attachid>245751</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-01-30 18:49:18 -0800</bug_when>
    <thetext>Comment on attachment 245751
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065761</commentid>
    <comment_count>4</comment_count>
      <attachid>245751</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-30 19:37:44 -0800</bug_when>
    <thetext>Comment on attachment 245751
Patch

Clearing flags on attachment: 245751

Committed r179435: &lt;http://trac.webkit.org/changeset/179435&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065762</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-30 19:37:48 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245749</attachid>
            <date>2015-01-30 15:32:54 -0800</date>
            <delta_ts>2015-01-30 16:10:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141100-20150130153301.patch</filename>
            <type>text/plain</type>
            <size>17436</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTY2YTY1YTNhOGQ3MmQ5
NmVlOTIxMjA2NGYzNGUwZDcxYmY5N2U3NS4uZTRkNmI0Mzg4YjNiNjFkZDU0NzUxNjFjOGI4M2Vh
MThiNmJiMzk3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE1LTAxLTMwICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBNYWtlIExpbmVTdGF0ZSBmcmFnbWVudCBoYW5kbGluZyBzaW1wbGVyLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMTAwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGluZVN0YXRlOjphcHBlbmRGcmFn
bWVudCBtYW5hZ2VzIHdoaXRlc3BhY2UgY29sbGFwc2luZyBub3cuCisgICAgICAgIEl0IGFsc28g
dXNlcyBSdW4ncyBsYXN0IHNlZ21lbnQgdG8gZXhwYW5kIHRoZSBsaW5lIHdpdGggbmV3IGZyYWdt
ZW50cworICAgICAgICBpbnN0ZWFkIG9mIHRob3NlIGRlZGljYXRlZCBzZWdtZW50IGNsYXNzIG1l
bWJlcnMuCisgICAgICAgIFRoaXMgbWFrZXMgY3JlYXRlTGluZVJ1bnMoKSBsb2dpYyBzaW1wbGVy
IGJ5IHNpbXBseSBhcHBlbmRpbmcKKyAgICAgICAgbmV3IGZyYWdtZW50cyB0byB0aGUgY3VycmVu
dCBsaW5lLgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAg
ICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwOiBNYWtlIExpbmVTdGF0ZSBtZW1iZXJz
IHByaXZhdGUgYW5kIGludHJvZHVjZSBnZXR0ZXJzLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
TGluZUxheW91dDo6TGluZVN0YXRlOjpzZXRBdmFpbGFibGVXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6OnNldExvZ2ljYWxMZWZ0T2Zmc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVTdGF0ZTo6c2V0T3ZlcmZs
b3dlZEZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVT
dGF0ZTo6YXZhaWxhYmxlV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91
dDo6TGluZVN0YXRlOjpsb2dpY2FsTGVmdE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6Om92ZXJmbG93ZWRGcmFnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6Omhhc1RyYWlsaW5nV2hpdGVzcGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6OmlzV2hp
dGVzcGFjZU9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6TGluZVN0
YXRlOjpmaXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVTdGF0
ZTo6Zmlyc3RDaGFyYWN0ZXJGaXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlv
dXQ6OkxpbmVTdGF0ZTo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91
dDo6TGluZVN0YXRlOjphcHBlbmRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVM
aW5lTGF5b3V0OjpMaW5lU3RhdGU6OnJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpyZW1vdmVUcmFpbGluZ1doaXRlc3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6dXBkYXRlTGluZUNvbnN0cmFpbnMp
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Zmlyc3RGcmFnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjcmVhdGVMaW5lUnVucyk6CisgICAg
ICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjbG9zZUxpbmVFbmRpbmdBbmRBZGp1c3RS
dW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNyZWF0ZVRleHRSdW5z
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVTdGF0ZTo6Y3JlYXRl
UnVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVT
dGF0ZTo6YWRkRnJhZ21lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGlu
ZUxheW91dDo6TGluZVN0YXRlOjphZGRXaGl0ZXNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVTdGF0ZTo6aGFzV2hpdGVzcGFjZU9ubHkpOiBE
ZWxldGVkLgorCiAyMDE1LTAxLTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgT3B0aW1pemUgTWVtb3J5Q2FjaGU6OmdldFNlc3Npb25NYXAoKSBhIGJpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCmluZGV4IDQzYzUw
ZjNlODFmMTQ0YThmNWVjZjM0MDVhOTc1NzI3YjhiNmFjZWYuLjllMTkwYTE5MmNlNTI3NWIxYmNl
ZjY0ZmUyOTMyNjcyYjM4OGE4MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dC5jcHAKQEAgLTIyNyw4NiArMjI3LDc0IEBAIHN0YXRpYyBmbG9hdCBjb21w
dXRlTGluZUxlZnQoRVRleHRBbGlnbiB0ZXh0QWxpZ24sIGZsb2F0IGF2YWlsYWJsZVdpZHRoLCBm
bG9hdCBjCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBMaW5lU3RhdGUgewotICAgIHZvaWQg
Y3JlYXRlUnVuKExheW91dDo6UnVuVmVjdG9yJiBsaW5lUnVucykKLSAgICB7Ci0gICAgICAgIGlm
IChzZWdtZW50U3RhcnQgPT0gc2VnbWVudEVuZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBsaW5lUnVucy5hcHBlbmQoUnVuKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCwgcnVuc1dp
ZHRoLCBydW5zV2lkdGggKyBzZWdtZW50V2lkdGgsIGZhbHNlKSk7Ci0gICAgICAgIC8vIE1vdmUg
dW5jb21taXR0ZWQgdG8gY29tbWl0dGVkLgotICAgICAgICBydW5zV2lkdGggKz0gc2VnbWVudFdp
ZHRoOwotICAgICAgICBsYXN0UnVuVHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggPSBzZWdtZW50VHJh
aWxpbmdXaGl0ZXNwYWNlV2lkdGg7Ci0gICAgICAgIGxhc3RSdW5UcmFpbGluZ1doaXRlc3BhY2VM
ZW5ndGggPSBzZWdtZW50VHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoOwotICAgICAgICBpZiAoIW1f
Zmlyc3RDaGFyYWN0ZXJGaXRzKQotICAgICAgICAgICAgbV9maXJzdENoYXJhY3RlckZpdHMgPSBz
ZWdtZW50U3RhcnQgKyAxID4gc2VnbWVudEVuZCB8fCBydW5zV2lkdGggPD0gYXZhaWxhYmxlV2lk
dGg7Ci0KLSAgICAgICAgc2VnbWVudFN0YXJ0ID0gc2VnbWVudEVuZDsKLSAgICAgICAgc2VnbWVu
dFdpZHRoID0gMDsKLSAgICAgICAgc2VnbWVudFRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoID0gMDsK
LSAgICAgICAgc2VnbWVudFRyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aCA9IDA7Ci0gICAgICAgIG1f
bmV3U2VnbWVudCA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBhZGRGcmFnbWVudChjb25zdCBG
bG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCkKLSAgICB7Ci0gICAg
ICAgIC8vIFN0YXJ0IGEgbmV3IHVuY29tbWl0dGVkIHNlZ21lbnQuCi0gICAgICAgIGlmIChtX25l
d1NlZ21lbnQpIHsKLSAgICAgICAgICAgIHNlZ21lbnRTdGFydCA9IGZyYWdtZW50LnN0YXJ0Owot
ICAgICAgICAgICAgbV9uZXdTZWdtZW50ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgc2Vn
bWVudFdpZHRoICs9IGZyYWdtZW50LndpZHRoOwotICAgICAgICBzZWdtZW50RW5kID0gZnJhZ21l
bnQuZW5kOwotICAgICAgICBzZWdtZW50VHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggPSBmcmFnbWVu
dC50eXBlID09IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2Ug
PyBmcmFnbWVudC53aWR0aCA6IDA7Ci0gICAgICAgIHNlZ21lbnRUcmFpbGluZ1doaXRlc3BhY2VM
ZW5ndGggPSBmcmFnbWVudC50eXBlID09IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21l
bnQ6OldoaXRlc3BhY2UgPyBmcmFnbWVudC5lbmQgLSBmcmFnbWVudC5zdGFydCAgOiAwOwotICAg
IH0KK2NsYXNzIExpbmVTdGF0ZSB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRBdmFpbGFibGVXaWR0
aChmbG9hdCB3aWR0aCkgeyBtX2F2YWlsYWJsZVdpZHRoID0gd2lkdGg7IH0KKyAgICB2b2lkIHNl
dExvZ2ljYWxMZWZ0T2Zmc2V0KGZsb2F0IG9mZnNldCkgeyBtX2xvZ2ljYWxMZWZ0T2Zmc2V0ID0g
b2Zmc2V0OyB9CisgICAgdm9pZCBzZXRPdmVyZmxvd2VkRnJhZ21lbnQoY29uc3QgRmxvd0NvbnRl
bnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQpIHsgbV9vdmVyZmxvd2VkRnJhZ21l
bnQgPSBmcmFnbWVudDsgfQorCisgICAgZmxvYXQgYXZhaWxhYmxlV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX2F2YWlsYWJsZVdpZHRoOyB9CisgICAgZmxvYXQgbG9naWNhbExlZnRPZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX2xvZ2ljYWxMZWZ0T2Zmc2V0OyB9CisgICAgRmxvd0NvbnRlbnRzSXRl
cmF0b3I6OlRleHRGcmFnbWVudCBvdmVyZmxvd2VkRnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiBt
X292ZXJmbG93ZWRGcmFnbWVudDsgfQorICAgIGJvb2wgaGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1doaXRlc3BhY2VMZW5ndGg7IH0KKyAgICBib29sIGlz
V2hpdGVzcGFjZU9ubHkoKSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRo
ICYmIG1fcnVuc1dpZHRoID09IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7IH0KKyAgICBib29s
IGZpdHMoZmxvYXQgZXh0cmEpIGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxhYmxlV2lkdGggPj0gbV9y
dW5zV2lkdGggKyBleHRyYTsgfQorICAgIGJvb2wgZmlyc3RDaGFyYWN0ZXJGaXRzKCkgY29uc3Qg
eyByZXR1cm4gbV9maXJzdENoYXJhY3RlckZpdHM7IH0KKyAgICBmbG9hdCB3aWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fcnVuc1dpZHRoOyB9CiAKLSAgICB2b2lkIGFkZFdoaXRlc3BhY2UoZmxvYXQg
d2hpdGVzcGFjZVdpZHRoKQorICAgIHZvaWQgYXBwZW5kRnJhZ21lbnQoY29uc3QgRmxvd0NvbnRl
bnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQsIExheW91dDo6UnVuVmVjdG9yJiBy
dW5zKQogICAgIHsKLSAgICAgICAgYWRkRnJhZ21lbnQoRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRl
eHRGcmFnbWVudChzZWdtZW50RW5kLCBzZWdtZW50RW5kICsgMSwgd2hpdGVzcGFjZVdpZHRoLCB0
cnVlKSk7Ci0gICAgfQorICAgICAgICAvLyBBZGp1c3QgZW5kIHBvc2l0aW9uIHdoaWxlIGNvbGxh
cHNpbmcuCisgICAgICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gZnJhZ21lbnQuaXNDb2xsYXBz
ZWQgPyBmcmFnbWVudC5zdGFydCArIDEgOiBmcmFnbWVudC5lbmQ7CiAKLSAgICBib29sIGhhc1do
aXRlc3BhY2VPbmx5KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBsYXN0UnVuVHJhaWxp
bmdXaGl0ZXNwYWNlV2lkdGggJiYgcnVuc1dpZHRoID09IGxhc3RSdW5UcmFpbGluZ1doaXRlc3Bh
Y2VXaWR0aDsKLSAgICB9Ci0KLSAgICBmbG9hdCB3aWR0aCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gcnVuc1dpZHRoICsgc2VnbWVudFdpZHRoOwotICAgIH0KKyAgICAgICAgaWYgKG1f
Y3JlYXRlTmV3UnVuKQorICAgICAgICAgICAgcnVucy5hcHBlbmQoUnVuKGZyYWdtZW50LnN0YXJ0
LCBlbmRQb3NpdGlvbiwgbV9ydW5zV2lkdGgsIG1fcnVuc1dpZHRoICsgZnJhZ21lbnQud2lkdGgs
IGZhbHNlKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJ1bnMuc2l6ZSgp
KTsKKyAgICAgICAgICAgIFJ1biYgbGFzdFJ1biA9IHJ1bnMubGFzdCgpOworICAgICAgICAgICAg
bGFzdFJ1bi5lbmQgPSBlbmRQb3NpdGlvbjsKKyAgICAgICAgICAgIGxhc3RSdW4ubG9naWNhbFJp
Z2h0ID0gbV9ydW5zV2lkdGggKyBmcmFnbWVudC53aWR0aDsKKyAgICAgICAgfQorICAgICAgICBt
X2NyZWF0ZU5ld1J1biA9IGZyYWdtZW50LmlzQ29sbGFwc2VkOworICAgICAgICBtX3J1bnNXaWR0
aCArPSBmcmFnbWVudC53aWR0aDsKKworICAgICAgICBpZiAoZnJhZ21lbnQudHlwZSA9PSBGbG93
Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKSB7CisgICAgICAgICAg
ICBtX3RyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aCArPSBlbmRQb3NpdGlvbiAtIGZyYWdtZW50LnN0
YXJ0OworICAgICAgICAgICAgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCArPSBmcmFnbWVudC53
aWR0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNl
TGVuZ3RoID0gMDsKKyAgICAgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggPSAwOwor
ICAgICAgICB9CiAKLSAgICBib29sIGZpdHMoZmxvYXQgZXh0cmEpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gYXZhaWxhYmxlV2lkdGggPj0gd2lkdGgoKSArIGV4dHJhOworICAgICAgICBp
ZiAoIW1fZmlyc3RDaGFyYWN0ZXJGaXRzKQorICAgICAgICAgICAgbV9maXJzdENoYXJhY3RlckZp
dHMgPSBmcmFnbWVudC5zdGFydCArIDEgPiBmcmFnbWVudC5lbmQgfHwgbV9ydW5zV2lkdGggPD0g
bV9hdmFpbGFibGVXaWR0aDsKICAgICB9CiAKLSAgICBib29sIGZpcnN0Q2hhcmFjdGVyRml0cygp
IGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RDaGFyYWN0ZXJGaXRzOyB9Ci0KLSAgICB2b2lkIHJlbW92
ZVRyYWlsaW5nV2hpdGVzcGFjZSgpCisgICAgdm9pZCByZW1vdmVUcmFpbGluZ1doaXRlc3BhY2Uo
TGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMpCiAgICAgewotICAgICAgICBydW5zV2lkdGggLT0gbGFz
dFJ1blRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoOwotICAgICAgICBsYXN0UnVuVHJhaWxpbmdXaGl0
ZXNwYWNlV2lkdGggPSAwOwotICAgICAgICBsYXN0UnVuVHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3Ro
ID0gMDsKKyAgICAgICAgQVNTRVJUKHJ1bnMuc2l6ZSgpKTsKKyAgICAgICAgUnVuJiBsYXN0UnVu
ID0gcnVucy5sYXN0KCk7CisgICAgICAgIGxhc3RSdW4ubG9naWNhbFJpZ2h0IC09IG1fdHJhaWxp
bmdXaGl0ZXNwYWNlV2lkdGg7CisgICAgICAgIGxhc3RSdW4uZW5kIC09IG1fdHJhaWxpbmdXaGl0
ZXNwYWNlTGVuZ3RoOworICAgICAgICBpZiAobGFzdFJ1bi5zdGFydCA9PSBsYXN0UnVuLmVuZCkK
KyAgICAgICAgICAgIHJ1bnMucmVtb3ZlTGFzdCgpOworCisgICAgICAgIG1fcnVuc1dpZHRoIC09
IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7CisgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNl
V2lkdGggPSAwOworICAgICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aCA9IDA7CiAgICAg
fQogCi0gICAgZmxvYXQgYXZhaWxhYmxlV2lkdGggeyAwIH07Ci0gICAgZmxvYXQgbG9naWNhbExl
ZnRPZmZzZXQgeyAwIH07Ci0gICAgZmxvYXQgcnVuc1dpZHRoIHsgMCB9OwotICAgIGZsb2F0IGxh
c3RSdW5UcmFpbGluZ1doaXRlc3BhY2VXaWR0aCB7IDAgfTsgLy8gVXNlIHRoaXMgdG8gcmVtb3Zl
IHRyYWlsaW5nIHdoaXRlc3BhY2Ugd2l0aG91dCByZS1tZXN1cmluZyB0aGUgdGV4dC4KLSAgICB1
bnNpZ25lZCBsYXN0UnVuVHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoIHsgMCB9OwotICAgIEZsb3dD
b250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgb3ZlcmZsb3dlZEZyYWdtZW50OwotCiBwcml2
YXRlOgotICAgIHVuc2lnbmVkIHNlZ21lbnRTdGFydCB7IDAgfTsKLSAgICB1bnNpZ25lZCBzZWdt
ZW50RW5kIHsgMCB9OwotICAgIGZsb2F0IHNlZ21lbnRXaWR0aCB7IDAgfTsKLSAgICBmbG9hdCBz
ZWdtZW50VHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggeyAwIH07Ci0gICAgdW5zaWduZWQgc2VnbWVu
dFRyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aCB7IDAgfTsKKyAgICBmbG9hdCBtX2F2YWlsYWJsZVdp
ZHRoIHsgMCB9OworICAgIGZsb2F0IG1fbG9naWNhbExlZnRPZmZzZXQgeyAwIH07CisgICAgRmxv
d0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCBtX292ZXJmbG93ZWRGcmFnbWVudDsKKyAg
ICBmbG9hdCBtX3J1bnNXaWR0aCB7IDAgfTsKKyAgICBib29sIG1fY3JlYXRlTmV3UnVuIHsgdHJ1
ZSB9OworICAgIGZsb2F0IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggeyAwIH07IC8vIFVzZSB0
aGlzIHRvIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIHdpdGhvdXQgcmUtbWVzdXJpbmcgdGhl
IHRleHQuCisgICAgdW5zaWduZWQgbV90cmFpbGluZ1doaXRlc3BhY2VMZW5ndGggeyAwIH07CiAg
ICAgLy8gSGF2aW5nIG9uZSBjaGFyYWN0ZXIgb24gdGhlIGxpbmUgZG9lcyBub3QgbmVjZXNzYXJp
bHkgbWVhbiBpdCBhY3R1YWxseSBmaXRzLgogICAgIC8vIEZpcnN0IGNoYXJhY3RlciBvZiB0aGUg
Zmlyc3QgZnJhZ21lbnQgbWlnaHQgYmUgZm9yY2VkIG9uIHRvIHRoZSBjdXJyZW50IGxpbmUgZXZl
biBpZiBpdCBkb2VzIG5vdCBmaXQuCiAgICAgYm9vbCBtX2ZpcnN0Q2hhcmFjdGVyRml0cyB7IGZh
bHNlIH07Ci0gICAgYm9vbCBtX25ld1NlZ21lbnQgeyB0cnVlIH07CiB9OwogCiBzdGF0aWMgYm9v
bCBwcmVXcmFwKGNvbnN0IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpTdHlsZSYgc3R5bGUpCkBAIC0z
MTQsOSArMzAyLDkgQEAgc3RhdGljIGJvb2wgcHJlV3JhcChjb25zdCBGbG93Q29udGVudHNJdGVy
YXRvcjo6U3R5bGUmIHN0eWxlKQogICAgIHJldHVybiBzdHlsZS53cmFwTGluZXMgJiYgIXN0eWxl
LmNvbGxhcHNlV2hpdGVzcGFjZTsKIH0KICAgICAKLXN0YXRpYyB2b2lkIHJlbW92ZVRyYWlsaW5n
V2hpdGVzcGFjZShMaW5lU3RhdGUmIGxpbmVTdGF0ZSwgTGF5b3V0OjpSdW5WZWN0b3ImIGxpbmVS
dW5zLCBjb25zdCBGbG93Q29udGVudHNJdGVyYXRvciYgZmxvd0NvbnRlbnRzSXRlcmF0b3IpCitz
dGF0aWMgdm9pZCByZW1vdmVUcmFpbGluZ1doaXRlc3BhY2UoTGluZVN0YXRlJiBsaW5lU3RhdGUs
IExheW91dDo6UnVuVmVjdG9yJiBydW5zLCBjb25zdCBGbG93Q29udGVudHNJdGVyYXRvciYgZmxv
d0NvbnRlbnRzSXRlcmF0b3IpCiB7Ci0gICAgaWYgKCFsaW5lU3RhdGUubGFzdFJ1blRyYWlsaW5n
V2hpdGVzcGFjZUxlbmd0aCkKKyAgICBpZiAoIWxpbmVTdGF0ZS5oYXNUcmFpbGluZ1doaXRlc3Bh
Y2UoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIFJlbW92ZSBjb2xsYXBzZWQgd2hp
dGVzcGFjZSwgb3Igbm9uLWNvbGxhcHNlZCBwcmUtd3JhcCB3aGl0ZXNwYWNlLCB1bmxlc3MgaXQn
cyB0aGUgb25seSBjb250ZW50IG9uIHRoZSBsaW5lIC1zbyByZW1vdmluZyB0aGUgd2hpdGVzYXBj
ZSB3b3VsZCBwcm9kdWNlIGFuIGVtcHR5IGxpbmUuCkBAIC0zMjUsMjUgKzMxMywxOSBAQCBzdGF0
aWMgdm9pZCByZW1vdmVUcmFpbGluZ1doaXRlc3BhY2UoTGluZVN0YXRlJiBsaW5lU3RhdGUsIExh
eW91dDo6UnVuVmVjdG9yJiBsaQogICAgIGlmICghY29sbGFwc2VXaGl0ZXNwYWNlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAocHJlV3JhcChzdHlsZSkgJiYgbGluZVN0YXRlLmhhc1doaXRl
c3BhY2VPbmx5KCkpCisgICAgaWYgKHByZVdyYXAoc3R5bGUpICYmIGxpbmVTdGF0ZS5pc1doaXRl
c3BhY2VPbmx5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChsaW5lUnVucy5zaXpl
KCkpOwotICAgIFJ1biYgbGFzdFJ1biA9IGxpbmVSdW5zLmxhc3QoKTsKLSAgICBsYXN0UnVuLmxv
Z2ljYWxSaWdodCAtPSBsaW5lU3RhdGUubGFzdFJ1blRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoOwot
ICAgIGxhc3RSdW4uZW5kIC09IGxpbmVTdGF0ZS5sYXN0UnVuVHJhaWxpbmdXaGl0ZXNwYWNlTGVu
Z3RoOwotICAgIGlmIChsYXN0UnVuLnN0YXJ0ID09IGxhc3RSdW4uZW5kKQotICAgICAgICBsaW5l
UnVucy5yZW1vdmVMYXN0KCk7Ci0gICAgbGluZVN0YXRlLnJlbW92ZVRyYWlsaW5nV2hpdGVzcGFj
ZSgpOworICAgIGxpbmVTdGF0ZS5yZW1vdmVUcmFpbGluZ1doaXRlc3BhY2UocnVucyk7CiB9CiAK
LXN0YXRpYyB2b2lkIHVwZGF0ZUxpbmVDb25zdHJhaW5zKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYg
ZmxvdywgZmxvYXQmIGF2YWlsYWJsZVdpZHRoLCBmbG9hdCYgbG9naWNhbExlZnRPZmZzZXQpCitz
dGF0aWMgdm9pZCB1cGRhdGVMaW5lQ29uc3RyYWlucyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZs
b3csIExpbmVTdGF0ZSYgbGluZSkKIHsKICAgICBMYXlvdXRVbml0IGhlaWdodCA9IGZsb3cubG9n
aWNhbEhlaWdodCgpOwogICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IGZsb3cubWluTGlu
ZUhlaWdodEZvclJlcGxhY2VkUmVuZGVyZXIoZmFsc2UsIDApOwogICAgIGZsb2F0IGxvZ2ljYWxS
aWdodE9mZnNldCA9IGZsb3cubG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShoZWlnaHQsIGZhbHNl
LCBsb2dpY2FsSGVpZ2h0KTsKLSAgICBsb2dpY2FsTGVmdE9mZnNldCA9IGZsb3cubG9naWNhbExl
ZnRPZmZzZXRGb3JMaW5lKGhlaWdodCwgZmFsc2UsIGxvZ2ljYWxIZWlnaHQpOwotICAgIGF2YWls
YWJsZVdpZHRoID0gc3RkOjptYXg8ZmxvYXQ+KDAsIGxvZ2ljYWxSaWdodE9mZnNldCAtIGxvZ2lj
YWxMZWZ0T2Zmc2V0KTsKKyAgICBsaW5lLnNldExvZ2ljYWxMZWZ0T2Zmc2V0KGZsb3cubG9naWNh
bExlZnRPZmZzZXRGb3JMaW5lKGhlaWdodCwgZmFsc2UsIGxvZ2ljYWxIZWlnaHQpKTsKKyAgICBs
aW5lLnNldEF2YWlsYWJsZVdpZHRoKHN0ZDo6bWF4PGZsb2F0PigwLCBsb2dpY2FsUmlnaHRPZmZz
ZXQgLSBsaW5lLmxvZ2ljYWxMZWZ0T2Zmc2V0KCkpKTsKIH0KIAogc3RhdGljIEZsb3dDb250ZW50
c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgc3BsaXRGcmFnbWVudFRvRml0TGluZShGbG93Q29udGVu
dHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudFRvU3BsaXQsIGZsb2F0IGF2YWlsYWJs
ZVdpZHRoLCBib29sIGtlZXBBdExlYXN0T25lQ2hhcmFjdGVyLCBjb25zdCBGbG93Q29udGVudHNJ
dGVyYXRvciYgZmxvd0NvbnRlbnRzSXRlcmF0b3IpCkBAIC0zOTAsNyArMzcyLDcgQEAgc3RhdGlj
IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgc3BsaXRGcmFnbWVudFRvRml0TGlu
ZShGbG93Q29udGVudHNJdGUKIHN0YXRpYyBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdt
ZW50IGZpcnN0RnJhZ21lbnQoRmxvd0NvbnRlbnRzSXRlcmF0b3ImIGZsb3dDb250ZW50c0l0ZXJh
dG9yLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSkKIHsKICAgICAvLyBIYW5kbGUgb3Zl
cmZsb3dlZCBmcmFnbWVudCBmcm9tIHByZXZpb3VzIGxpbmUuCi0gICAgRmxvd0NvbnRlbnRzSXRl
cmF0b3I6OlRleHRGcmFnbWVudCBmaXJzdEZyYWdtZW50ID0gcHJldmlvdXNMaW5lLm92ZXJmbG93
ZWRGcmFnbWVudDsKKyAgICBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGZpcnN0
RnJhZ21lbnQgPSBwcmV2aW91c0xpbmUub3ZlcmZsb3dlZEZyYWdtZW50KCk7CiAgICAgY29uc3Qg
YXV0byYgc3R5bGUgPSBmbG93Q29udGVudHNJdGVyYXRvci5zdHlsZSgpOwogCiAgICAgaWYgKGZp
cnN0RnJhZ21lbnQuaXNFbXB0eSgpKQpAQCAtNDEyLDcgKzM5NCw3IEBAIHN0YXRpYyBGbG93Q29u
dGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGZpcnN0RnJhZ21lbnQoRmxvd0NvbnRlbnRzSXRl
cmF0b3ImIGZsCiAgICAgcmV0dXJuIGZpcnN0RnJhZ21lbnQ7CiB9CiAKLXN0YXRpYyBib29sIGNy
ZWF0ZUxpbmVSdW5zKExpbmVTdGF0ZSYgbGluZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xp
bmUsIExheW91dDo6UnVuVmVjdG9yJiBsaW5lUnVucywgRmxvd0NvbnRlbnRzSXRlcmF0b3ImIGZs
b3dDb250ZW50c0l0ZXJhdG9yKQorc3RhdGljIGJvb2wgY3JlYXRlTGluZVJ1bnMoTGluZVN0YXRl
JiBsaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSwgTGF5b3V0OjpSdW5WZWN0b3Im
IHJ1bnMsIEZsb3dDb250ZW50c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVyYXRvcikKIHsKICAg
ICBjb25zdCBhdXRvJiBzdHlsZSA9IGZsb3dDb250ZW50c0l0ZXJhdG9yLnN0eWxlKCk7CiAgICAg
Ym9vbCBsaW5lQ2FuQmVXcmFwcGVkID0gc3R5bGUud3JhcExpbmVzIHx8IHN0eWxlLmJyZWFrV29y
ZE9uT3ZlcmZsb3c7CkBAIC00MjIsNyArNDA0LDcgQEAgc3RhdGljIGJvb2wgY3JlYXRlTGluZVJ1
bnMoTGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSwgTGF5b3UK
ICAgICAgICAgaWYgKGZyYWdtZW50LnR5cGUgPT0gRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRG
cmFnbWVudDo6TGluZUJyZWFrKSB7CiAgICAgICAgICAgICAvLyBBZGQgdGhlIG5ldyBsaW5lIGZy
YWdtZW50IG9ubHkgaWYgdGhlcmUncyBub3RoaW5nIG9uIHRoZSBsaW5lLiAob3RoZXJ3aXNlIHRo
ZSBleHRyYSBuZXcgbGluZSBjaGFyYWN0ZXIgd291bGQgc2hvdyB1cCBhdCB0aGUgZW5kIG9mIHRo
ZSBjb250ZW50LikKICAgICAgICAgICAgIGlmICghbGluZS53aWR0aCgpKQotICAgICAgICAgICAg
ICAgIGxpbmUuYWRkRnJhZ21lbnQoZnJhZ21lbnQpOworICAgICAgICAgICAgICAgIGxpbmUuYXBw
ZW5kRnJhZ21lbnQoZnJhZ21lbnQsIHJ1bnMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGxpbmVDYW5CZVdyYXBwZWQgJiYgIWxpbmUuZml0cyhmcmFnbWVudC53
aWR0aCkpIHsKQEAgLTQzNiw4ICs0MTgsOCBAQCBzdGF0aWMgYm9vbCBjcmVhdGVMaW5lUnVucyhM
aW5lU3RhdGUmIGxpbmUsIGNvbnN0IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5lLCBMYXlvdQogICAg
ICAgICAgICAgaWYgKGZyYWdtZW50LnR5cGUgPT0gRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRG
cmFnbWVudDo6V2hpdGVzcGFjZSkgewogICAgICAgICAgICAgICAgIGlmICghc3R5bGUuY29sbGFw
c2VXaGl0ZXNwYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBmcmFnbWVu
dDsgKG1vZGlmaWVkKWZyYWdtZW50IHN0YXlzIG9uIHRoaXMgbGluZSwgb3ZlcmZsb3dlZEZyYWdt
ZW50IGlzIHB1c2hlZCB0byBuZXh0IGxpbmUuCi0gICAgICAgICAgICAgICAgICAgIGxpbmUub3Zl
cmZsb3dlZEZyYWdtZW50ID0gc3BsaXRGcmFnbWVudFRvRml0TGluZShmcmFnbWVudCwgbGluZS5h
dmFpbGFibGVXaWR0aCAtIGxpbmUud2lkdGgoKSwgZW1wdHlMaW5lLCBmbG93Q29udGVudHNJdGVy
YXRvcik7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUuYWRkRnJhZ21lbnQoZnJhZ21lbnQpOwor
ICAgICAgICAgICAgICAgICAgICBsaW5lLnNldE92ZXJmbG93ZWRGcmFnbWVudChzcGxpdEZyYWdt
ZW50VG9GaXRMaW5lKGZyYWdtZW50LCBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgLSBsaW5lLndpZHRo
KCksIGVtcHR5TGluZSwgZmxvd0NvbnRlbnRzSXRlcmF0b3IpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbGluZS5hcHBlbmRGcmFnbWVudChmcmFnbWVudCwgcnVucyk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIC8vIFdoZW4gd2hpdGVzcGFjZSBjb2xsYXBzZSBpcyBvbiwgd2hp
dGVzcGFjZSB0aGF0IGRvZXNuJ3QgZml0IGlzIHNpbXBseSBza2lwcGVkLgogICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNDQ1LDMxICs0MjcsMjQgQEAgc3RhdGljIGJvb2wgY3JlYXRlTGluZVJ1
bnMoTGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSwgTGF5b3UK
ICAgICAgICAgICAgIC8vIE5vbi13aGl0ZXNwYWNlIGZyYWdtZW50LiAoIXN0eWxlLndyYXBMaW5l
czogYnVnMTM4MTAyKHByZXNlcnZlIGV4aXN0aW5nIGJlaGF2aW9yKQogICAgICAgICAgICAgaWYg
KChlbXB0eUxpbmUgJiYgc3R5bGUuYnJlYWtXb3JkT25PdmVyZmxvdykgfHwgIXN0eWxlLndyYXBM
aW5lcykgewogICAgICAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBmcmFnbWVudDsgKG1vZGlmaWVk
KWZyYWdtZW50IHN0YXlzIG9uIHRoaXMgbGluZSwgb3ZlcmZsb3dlZEZyYWdtZW50IGlzIHB1c2hl
ZCB0byBuZXh0IGxpbmUuCi0gICAgICAgICAgICAgICAgbGluZS5vdmVyZmxvd2VkRnJhZ21lbnQg
PSBzcGxpdEZyYWdtZW50VG9GaXRMaW5lKGZyYWdtZW50LCBsaW5lLmF2YWlsYWJsZVdpZHRoIC0g
bGluZS53aWR0aCgpLCBlbXB0eUxpbmUsIGZsb3dDb250ZW50c0l0ZXJhdG9yKTsKLSAgICAgICAg
ICAgICAgICBsaW5lLmFkZEZyYWdtZW50KGZyYWdtZW50KTsKKyAgICAgICAgICAgICAgICBsaW5l
LnNldE92ZXJmbG93ZWRGcmFnbWVudChzcGxpdEZyYWdtZW50VG9GaXRMaW5lKGZyYWdtZW50LCBs
aW5lLmF2YWlsYWJsZVdpZHRoKCkgLSBsaW5lLndpZHRoKCksIGVtcHR5TGluZSwgZmxvd0NvbnRl
bnRzSXRlcmF0b3IpKTsKKyAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50KGZyYWdt
ZW50LCBydW5zKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIC8vIE5vbi1icmVha2FibGUgbm9uLXdoaXRlc3BhY2UgZmlyc3QgZnJhZ21lbnQuIEFk
ZCBpdCB0byB0aGUgY3VycmVudCBsaW5lLiAtaXQgb3ZlcmZsb3dzIHRob3VnaC4KICAgICAgICAg
ICAgIGlmIChlbXB0eUxpbmUpIHsKLSAgICAgICAgICAgICAgICBsaW5lLmFkZEZyYWdtZW50KGZy
YWdtZW50KTsKKyAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50KGZyYWdtZW50LCBy
dW5zKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IC8vIE5vbi1icmVha2FibGUgbm9uLXdoaXRlc3BhY2UgZnJhZ21lbnQgd2hlbiB0aGVyZSdzIGFs
cmVhZHkgY29udGVudCBvbiB0aGUgbGluZS4gUHVzaCBpdCB0byB0aGUgbmV4dCBsaW5lLgotICAg
ICAgICAgICAgbGluZS5vdmVyZmxvd2VkRnJhZ21lbnQgPSBmcmFnbWVudDsKKyAgICAgICAgICAg
IGxpbmUuc2V0T3ZlcmZsb3dlZEZyYWdtZW50KGZyYWdtZW50KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIC8vIFdoZW4gdGhlIGN1cnJlbnQgZnJhZ21lbnQgaXMgY29s
bGFwc2VkIHdoaXRlc3BhY2UsIHdlIG5lZWQgdG8gY3JlYXRlIGEgcnVuIGZvciB3aGF0IHdlJ3Zl
IHByb2Nlc3NlZCBzbyBmYXIuCi0gICAgICAgIGlmIChmcmFnbWVudC5pc0NvbGxhcHNlZCkgewot
ICAgICAgICAgICAgLy8gT25lIHRyYWlsaW5nIHdoaXRlc3BhY2UgdG8gcHJlc2VydmUuCi0gICAg
ICAgICAgICBsaW5lLmFkZFdoaXRlc3BhY2Uoc3R5bGUuc3BhY2VXaWR0aCk7Ci0gICAgICAgICAg
ICBsaW5lLmNyZWF0ZVJ1bihsaW5lUnVucyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
bGluZS5hZGRGcmFnbWVudChmcmFnbWVudCk7CisgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnQo
ZnJhZ21lbnQsIHJ1bnMpOwogICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IHRleHQgZnJhZ21lbnQu
CiAgICAgICAgIGZyYWdtZW50ID0gZmxvd0NvbnRlbnRzSXRlcmF0b3IubmV4dFRleHRGcmFnbWVu
dChsaW5lLndpZHRoKCkpOwogICAgIH0KLSAgICBsaW5lLmNyZWF0ZVJ1bihsaW5lUnVucyk7Ci0g
ICAgcmV0dXJuIGZyYWdtZW50LmlzRW1wdHkoKSAmJiBsaW5lLm92ZXJmbG93ZWRGcmFnbWVudC5p
c0VtcHR5KCk7CisgICAgcmV0dXJuIGZyYWdtZW50LmlzRW1wdHkoKSAmJiBsaW5lLm92ZXJmbG93
ZWRGcmFnbWVudCgpLmlzRW1wdHkoKTsKIH0KIAogc3RhdGljIHZvaWQgY2xvc2VMaW5lRW5kaW5n
QW5kQWRqdXN0UnVucyhMaW5lU3RhdGUmIGxpbmUsIExheW91dDo6UnVuVmVjdG9yJiBydW5zLCB1
bnNpZ25lZCBwcmV2aW91c1J1bkNvdW50LCB1bnNpZ25lZCYgbGluZUNvdW50LCBjb25zdCBGbG93
Q29udGVudHNJdGVyYXRvciYgZmxvd0NvbnRlbnRzSXRlcmF0b3IpCkBAIC00ODEsNyArNDU2LDcg
QEAgc3RhdGljIHZvaWQgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyhMaW5lU3RhdGUmIGxp
bmUsIExheW91dDo6UnVuVmVjdG9yJiBydW4KICAgICBpZiAoIXJ1bnMuc2l6ZSgpKQogICAgICAg
ICByZXR1cm47CiAgICAgLy8gQWRqdXN0IHJ1bnMnIHBvc2l0aW9uIGJ5IHRha2luZyBsaW5lJ3Mg
YWxpZ25tZW50IGludG8gYWNjb3VudC4KLSAgICBpZiAoZmxvYXQgbGluZUxvZ2ljYWxMZWZ0ID0g
Y29tcHV0ZUxpbmVMZWZ0KGZsb3dDb250ZW50c0l0ZXJhdG9yLnN0eWxlKCkudGV4dEFsaWduLCBs
aW5lLmF2YWlsYWJsZVdpZHRoLCBsaW5lLnJ1bnNXaWR0aCwgbGluZS5sb2dpY2FsTGVmdE9mZnNl
dCkpIHsKKyAgICBpZiAoZmxvYXQgbGluZUxvZ2ljYWxMZWZ0ID0gY29tcHV0ZUxpbmVMZWZ0KGZs
b3dDb250ZW50c0l0ZXJhdG9yLnN0eWxlKCkudGV4dEFsaWduLCBsaW5lLmF2YWlsYWJsZVdpZHRo
KCksIGxpbmUud2lkdGgoKSwgbGluZS5sb2dpY2FsTGVmdE9mZnNldCgpKSkgewogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBwcmV2aW91c1J1bkNvdW50OyBpIDwgcnVucy5zaXplKCk7ICsraSkg
ewogICAgICAgICAgICAgcnVuc1tpXS5sb2dpY2FsTGVmdCArPSBsaW5lTG9naWNhbExlZnQ7CiAg
ICAgICAgICAgICBydW5zW2ldLmxvZ2ljYWxSaWdodCArPSBsaW5lTG9naWNhbExlZnQ7CkBAIC01
MjYsNyArNTAxLDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlVGV4dFJ1bnMoTGF5b3V0OjpSdW5WZWN0
b3ImIHJ1bnMsIFJlbmRlckJsb2NrRmxvdyYgZmxvdywgdW5zaWcKICAgICAgICAgTGluZVN0YXRl
IHByZXZpb3VzTGluZSA9IGxpbmU7CiAgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzUnVuQ291bnQg
PSBydW5zLnNpemUoKTsKICAgICAgICAgbGluZSA9IExpbmVTdGF0ZSgpOwotICAgICAgICB1cGRh
dGVMaW5lQ29uc3RyYWlucyhmbG93LCBsaW5lLmF2YWlsYWJsZVdpZHRoLCBsaW5lLmxvZ2ljYWxM
ZWZ0T2Zmc2V0KTsKKyAgICAgICAgdXBkYXRlTGluZUNvbnN0cmFpbnMoZmxvdywgbGluZSk7CiAg
ICAgICAgIGlzRW5kT2ZDb250ZW50ID0gY3JlYXRlTGluZVJ1bnMobGluZSwgcHJldmlvdXNMaW5l
LCBydW5zLCBmbG93Q29udGVudHNJdGVyYXRvcik7CiAgICAgICAgIGNsb3NlTGluZUVuZGluZ0Fu
ZEFkanVzdFJ1bnMobGluZSwgcnVucywgcHJldmlvdXNSdW5Db3VudCwgbGluZUNvdW50LCBmbG93
Q29udGVudHNJdGVyYXRvcik7CiAgICAgfSB3aGlsZSAoIWlzRW5kT2ZDb250ZW50KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245751</attachid>
            <date>2015-01-30 16:11:01 -0800</date>
            <delta_ts>2015-01-30 19:37:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141100-20150130161108.patch</filename>
            <type>text/plain</type>
            <size>17672</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTY2YTY1YTNhOGQ3MmQ5
NmVlOTIxMjA2NGYzNGUwZDcxYmY5N2U3NS4uNDg3ZTJmYmUxNjE4NzYyOTJhY2FkZjI4MWUxNmIz
MTMxYTA2MzMxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE1LTAxLTMwICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBNYWtlIExpbmVTdGF0ZSBmcmFnbWVudCBoYW5kbGluZyBzaW1wbGVyLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMTAwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IGZyYWdtZW50cyBhcmUgYXBw
ZW5lZGVkIHRvIHRoZSBSdW4ncyBsYXN0IGVudHJ5CisgICAgICAgIGluc3RlYWQgb2YgYWNjdW11
bGF0aW5nIHRoZW0gdW50aWwgYWZ0ZXIgYSBuZXcgcnVuIGlzIHJlcXVpcmVkLiAKKyAgICAgICAg
KHdoaXRlc3BhY2UgY29sbGFwc2Ugb3IgbGluZSBlbmQpCisgICAgICAgIExpbmVTdGF0ZTo6YXBw
ZW5kRnJhZ21lbnQgbWFuYWdlcyB3aGl0ZXNwYWNlIGNvbGxhcHNpbmcgbm93LgorICAgICAgICBU
aGlzIG1ha2VzIGNyZWF0ZUxpbmVSdW5zKCkgbG9naWMgbGlnaHRlciBhbmQgbm8gbmVlZCB0byAi
Zmx1c2giCisgICAgICAgIHRoZSBMaW5lU3RhdGUgd2hlbiB0aGUgbGluZSBlbmRzLgorCisgICAg
ICAgIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXQuY3BwOiBNYWtlIExpbmVTdGF0ZSBtZW1iZXJzIHByaXZhdGUgYW5kIGlu
dHJvZHVjZSBnZXR0ZXJzLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6TGlu
ZVN0YXRlOjpzZXRBdmFpbGFibGVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5l
TGF5b3V0OjpMaW5lU3RhdGU6OnNldExvZ2ljYWxMZWZ0T2Zmc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVTdGF0ZTo6c2V0T3ZlcmZsb3dlZEZyYWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVTdGF0ZTo6YXZhaWxhYmxl
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6TGluZVN0YXRlOjps
b2dpY2FsTGVmdE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpM
aW5lU3RhdGU6Om92ZXJmbG93ZWRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVM
aW5lTGF5b3V0OjpMaW5lU3RhdGU6Omhhc1RyYWlsaW5nV2hpdGVzcGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6OmlzV2hpdGVzcGFjZU9ubHkpOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6TGluZVN0YXRlOjpmaXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVTdGF0ZTo6Zmlyc3RDaGFyYWN0
ZXJGaXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVTdGF0ZTo6
d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6TGluZVN0YXRlOjph
cHBlbmRGcmFnbWVudCk6IEFwcGVuZCBlYWNoIGZyYWdtZW50IHRvIHRoZSBSdW4gCisgICAgICAg
IGJ5IGVpdGhlciBjcmVhdGluZyBhIG5ldyBydW4gb3IgZXhwYW5kaW5nIHRoZSBsYXN0IG9uZS4K
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVTdGF0ZTo6cmVtb3ZlVHJh
aWxpbmdXaGl0ZXNwYWNlKTogUmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UgZnJvbQorICAgICAg
ICB0aGUgUnVuJ3MgYW5kIHJlc2V0IHRoZSB0cmFpbGluZyB3aGl0ZXNwYWNlIHZhcmlhYmxlcy4K
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnJlbW92ZVRyYWlsaW5nV2hpdGVz
cGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0Ojp1cGRhdGVMaW5lQ29u
c3RyYWlucyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpmaXJzdEZyYWdt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNyZWF0ZUxpbmVSdW5z
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNsb3NlTGluZUVuZGluZ0Fu
ZEFkanVzdFJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y3JlYXRl
VGV4dFJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6TGluZVN0YXRl
OjpjcmVhdGVSdW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91
dDo6TGluZVN0YXRlOjphZGRGcmFnbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6OmFkZFdoaXRlc3BhY2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6TGluZVN0YXRlOjpoYXNXaGl0ZXNwYWNl
T25seSk6IERlbGV0ZWQuCisKIDIwMTUtMDEtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBPcHRpbWl6ZSBNZW1vcnlDYWNoZTo6Z2V0U2Vzc2lvbk1hcCgpIGEg
Yml0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKaW5k
ZXggNDNjNTBmM2U4MWYxNDRhOGY1ZWNmMzQwNWE5NzU3MjdiOGI2YWNlZi4uOWUxOTBhMTkyY2U1
Mjc1YjFiY2VmNjRmZTI5MzI2NzJiMzg4YTgwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcApAQCAtMjI3LDg2ICsyMjcsNzQgQEAgc3RhdGljIGZs
b2F0IGNvbXB1dGVMaW5lTGVmdChFVGV4dEFsaWduIHRleHRBbGlnbiwgZmxvYXQgYXZhaWxhYmxl
V2lkdGgsIGZsb2F0IGMKICAgICByZXR1cm4gMDsKIH0KIAotc3RydWN0IExpbmVTdGF0ZSB7Ci0g
ICAgdm9pZCBjcmVhdGVSdW4oTGF5b3V0OjpSdW5WZWN0b3ImIGxpbmVSdW5zKQotICAgIHsKLSAg
ICAgICAgaWYgKHNlZ21lbnRTdGFydCA9PSBzZWdtZW50RW5kKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGxpbmVSdW5zLmFwcGVuZChSdW4oc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5k
LCBydW5zV2lkdGgsIHJ1bnNXaWR0aCArIHNlZ21lbnRXaWR0aCwgZmFsc2UpKTsKLSAgICAgICAg
Ly8gTW92ZSB1bmNvbW1pdHRlZCB0byBjb21taXR0ZWQuCi0gICAgICAgIHJ1bnNXaWR0aCArPSBz
ZWdtZW50V2lkdGg7Ci0gICAgICAgIGxhc3RSdW5UcmFpbGluZ1doaXRlc3BhY2VXaWR0aCA9IHNl
Z21lbnRUcmFpbGluZ1doaXRlc3BhY2VXaWR0aDsKLSAgICAgICAgbGFzdFJ1blRyYWlsaW5nV2hp
dGVzcGFjZUxlbmd0aCA9IHNlZ21lbnRUcmFpbGluZ1doaXRlc3BhY2VMZW5ndGg7Ci0gICAgICAg
IGlmICghbV9maXJzdENoYXJhY3RlckZpdHMpCi0gICAgICAgICAgICBtX2ZpcnN0Q2hhcmFjdGVy
Rml0cyA9IHNlZ21lbnRTdGFydCArIDEgPiBzZWdtZW50RW5kIHx8IHJ1bnNXaWR0aCA8PSBhdmFp
bGFibGVXaWR0aDsKLQotICAgICAgICBzZWdtZW50U3RhcnQgPSBzZWdtZW50RW5kOwotICAgICAg
ICBzZWdtZW50V2lkdGggPSAwOwotICAgICAgICBzZWdtZW50VHJhaWxpbmdXaGl0ZXNwYWNlV2lk
dGggPSAwOwotICAgICAgICBzZWdtZW50VHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoID0gMDsKLSAg
ICAgICAgbV9uZXdTZWdtZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZEZyYWdtZW50
KGNvbnN0IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50KQotICAg
IHsKLSAgICAgICAgLy8gU3RhcnQgYSBuZXcgdW5jb21taXR0ZWQgc2VnbWVudC4KLSAgICAgICAg
aWYgKG1fbmV3U2VnbWVudCkgewotICAgICAgICAgICAgc2VnbWVudFN0YXJ0ID0gZnJhZ21lbnQu
c3RhcnQ7Ci0gICAgICAgICAgICBtX25ld1NlZ21lbnQgPSBmYWxzZTsKLSAgICAgICAgfQotICAg
ICAgICBzZWdtZW50V2lkdGggKz0gZnJhZ21lbnQud2lkdGg7Ci0gICAgICAgIHNlZ21lbnRFbmQg
PSBmcmFnbWVudC5lbmQ7Ci0gICAgICAgIHNlZ21lbnRUcmFpbGluZ1doaXRlc3BhY2VXaWR0aCA9
IGZyYWdtZW50LnR5cGUgPT0gRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudDo6V2hp
dGVzcGFjZSA/IGZyYWdtZW50LndpZHRoIDogMDsKLSAgICAgICAgc2VnbWVudFRyYWlsaW5nV2hp
dGVzcGFjZUxlbmd0aCA9IGZyYWdtZW50LnR5cGUgPT0gRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRl
eHRGcmFnbWVudDo6V2hpdGVzcGFjZSA/IGZyYWdtZW50LmVuZCAtIGZyYWdtZW50LnN0YXJ0ICA6
IDA7Ci0gICAgfQorY2xhc3MgTGluZVN0YXRlIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEF2YWls
YWJsZVdpZHRoKGZsb2F0IHdpZHRoKSB7IG1fYXZhaWxhYmxlV2lkdGggPSB3aWR0aDsgfQorICAg
IHZvaWQgc2V0TG9naWNhbExlZnRPZmZzZXQoZmxvYXQgb2Zmc2V0KSB7IG1fbG9naWNhbExlZnRP
ZmZzZXQgPSBvZmZzZXQ7IH0KKyAgICB2b2lkIHNldE92ZXJmbG93ZWRGcmFnbWVudChjb25zdCBG
bG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCkgeyBtX292ZXJmbG93
ZWRGcmFnbWVudCA9IGZyYWdtZW50OyB9CisKKyAgICBmbG9hdCBhdmFpbGFibGVXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fYXZhaWxhYmxlV2lkdGg7IH0KKyAgICBmbG9hdCBsb2dpY2FsTGVmdE9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbExlZnRPZmZzZXQ7IH0KKyAgICBGbG93Q29u
dGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50IG92ZXJmbG93ZWRGcmFnbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fb3ZlcmZsb3dlZEZyYWdtZW50OyB9CisgICAgYm9vbCBoYXNUcmFpbGluZ1doaXRl
c3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aDsgfQorICAg
IGJvb2wgaXNXaGl0ZXNwYWNlT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNw
YWNlV2lkdGggJiYgbV9ydW5zV2lkdGggPT0gbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsgfQor
ICAgIGJvb2wgZml0cyhmbG9hdCBleHRyYSkgY29uc3QgeyByZXR1cm4gbV9hdmFpbGFibGVXaWR0
aCA+PSBtX3J1bnNXaWR0aCArIGV4dHJhOyB9CisgICAgYm9vbCBmaXJzdENoYXJhY3RlckZpdHMo
KSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Q2hhcmFjdGVyRml0czsgfQorICAgIGZsb2F0IHdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9ydW5zV2lkdGg7IH0KIAotICAgIHZvaWQgYWRkV2hpdGVzcGFj
ZShmbG9hdCB3aGl0ZXNwYWNlV2lkdGgpCisgICAgdm9pZCBhcHBlbmRGcmFnbWVudChjb25zdCBG
bG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCwgTGF5b3V0OjpSdW5W
ZWN0b3ImIHJ1bnMpCiAgICAgewotICAgICAgICBhZGRGcmFnbWVudChGbG93Q29udGVudHNJdGVy
YXRvcjo6VGV4dEZyYWdtZW50KHNlZ21lbnRFbmQsIHNlZ21lbnRFbmQgKyAxLCB3aGl0ZXNwYWNl
V2lkdGgsIHRydWUpKTsKLSAgICB9CisgICAgICAgIC8vIEFkanVzdCBlbmQgcG9zaXRpb24gd2hp
bGUgY29sbGFwc2luZy4KKyAgICAgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSBmcmFnbWVudC5p
c0NvbGxhcHNlZCA/IGZyYWdtZW50LnN0YXJ0ICsgMSA6IGZyYWdtZW50LmVuZDsKIAotICAgIGJv
b2wgaGFzV2hpdGVzcGFjZU9ubHkoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxhc3RS
dW5UcmFpbGluZ1doaXRlc3BhY2VXaWR0aCAmJiBydW5zV2lkdGggPT0gbGFzdFJ1blRyYWlsaW5n
V2hpdGVzcGFjZVdpZHRoOwotICAgIH0KLQotICAgIGZsb2F0IHdpZHRoKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBydW5zV2lkdGggKyBzZWdtZW50V2lkdGg7Ci0gICAgfQorICAgICAg
ICBpZiAobV9jcmVhdGVOZXdSdW4pCisgICAgICAgICAgICBydW5zLmFwcGVuZChSdW4oZnJhZ21l
bnQuc3RhcnQsIGVuZFBvc2l0aW9uLCBtX3J1bnNXaWR0aCwgbV9ydW5zV2lkdGggKyBmcmFnbWVu
dC53aWR0aCwgZmFsc2UpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQocnVu
cy5zaXplKCkpOworICAgICAgICAgICAgUnVuJiBsYXN0UnVuID0gcnVucy5sYXN0KCk7CisgICAg
ICAgICAgICBsYXN0UnVuLmVuZCA9IGVuZFBvc2l0aW9uOworICAgICAgICAgICAgbGFzdFJ1bi5s
b2dpY2FsUmlnaHQgPSBtX3J1bnNXaWR0aCArIGZyYWdtZW50LndpZHRoOworICAgICAgICB9Cisg
ICAgICAgIG1fY3JlYXRlTmV3UnVuID0gZnJhZ21lbnQuaXNDb2xsYXBzZWQ7CisgICAgICAgIG1f
cnVuc1dpZHRoICs9IGZyYWdtZW50LndpZHRoOworCisgICAgICAgIGlmIChmcmFnbWVudC50eXBl
ID09IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpIHsKKyAg
ICAgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoICs9IGVuZFBvc2l0aW9uIC0gZnJh
Z21lbnQuc3RhcnQ7CisgICAgICAgICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoICs9IGZy
YWdtZW50LndpZHRoOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV90cmFpbGluZ1do
aXRlc3BhY2VMZW5ndGggPSAwOworICAgICAgICAgICAgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0
aCA9IDA7CisgICAgICAgIH0KIAotICAgIGJvb2wgZml0cyhmbG9hdCBleHRyYSkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhdmFpbGFibGVXaWR0aCA+PSB3aWR0aCgpICsgZXh0cmE7Cisg
ICAgICAgIGlmICghbV9maXJzdENoYXJhY3RlckZpdHMpCisgICAgICAgICAgICBtX2ZpcnN0Q2hh
cmFjdGVyRml0cyA9IGZyYWdtZW50LnN0YXJ0ICsgMSA+IGZyYWdtZW50LmVuZCB8fCBtX3J1bnNX
aWR0aCA8PSBtX2F2YWlsYWJsZVdpZHRoOwogICAgIH0KIAotICAgIGJvb2wgZmlyc3RDaGFyYWN0
ZXJGaXRzKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdENoYXJhY3RlckZpdHM7IH0KLQotICAgIHZv
aWQgcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKCkKKyAgICB2b2lkIHJlbW92ZVRyYWlsaW5nV2hp
dGVzcGFjZShMYXlvdXQ6OlJ1blZlY3RvciYgcnVucykKICAgICB7Ci0gICAgICAgIHJ1bnNXaWR0
aCAtPSBsYXN0UnVuVHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7Ci0gICAgICAgIGxhc3RSdW5UcmFp
bGluZ1doaXRlc3BhY2VXaWR0aCA9IDA7Ci0gICAgICAgIGxhc3RSdW5UcmFpbGluZ1doaXRlc3Bh
Y2VMZW5ndGggPSAwOworICAgICAgICBBU1NFUlQocnVucy5zaXplKCkpOworICAgICAgICBSdW4m
IGxhc3RSdW4gPSBydW5zLmxhc3QoKTsKKyAgICAgICAgbGFzdFJ1bi5sb2dpY2FsUmlnaHQgLT0g
bV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsKKyAgICAgICAgbGFzdFJ1bi5lbmQgLT0gbV90cmFp
bGluZ1doaXRlc3BhY2VMZW5ndGg7CisgICAgICAgIGlmIChsYXN0UnVuLnN0YXJ0ID09IGxhc3RS
dW4uZW5kKQorICAgICAgICAgICAgcnVucy5yZW1vdmVMYXN0KCk7CisKKyAgICAgICAgbV9ydW5z
V2lkdGggLT0gbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsKKyAgICAgICAgbV90cmFpbGluZ1do
aXRlc3BhY2VXaWR0aCA9IDA7CisgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoID0g
MDsKICAgICB9CiAKLSAgICBmbG9hdCBhdmFpbGFibGVXaWR0aCB7IDAgfTsKLSAgICBmbG9hdCBs
b2dpY2FsTGVmdE9mZnNldCB7IDAgfTsKLSAgICBmbG9hdCBydW5zV2lkdGggeyAwIH07Ci0gICAg
ZmxvYXQgbGFzdFJ1blRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoIHsgMCB9OyAvLyBVc2UgdGhpcyB0
byByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aXRob3V0IHJlLW1lc3VyaW5nIHRoZSB0ZXh0
LgotICAgIHVuc2lnbmVkIGxhc3RSdW5UcmFpbGluZ1doaXRlc3BhY2VMZW5ndGggeyAwIH07Ci0g
ICAgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCBvdmVyZmxvd2VkRnJhZ21lbnQ7
Ci0KIHByaXZhdGU6Ci0gICAgdW5zaWduZWQgc2VnbWVudFN0YXJ0IHsgMCB9OwotICAgIHVuc2ln
bmVkIHNlZ21lbnRFbmQgeyAwIH07Ci0gICAgZmxvYXQgc2VnbWVudFdpZHRoIHsgMCB9OwotICAg
IGZsb2F0IHNlZ21lbnRUcmFpbGluZ1doaXRlc3BhY2VXaWR0aCB7IDAgfTsKLSAgICB1bnNpZ25l
ZCBzZWdtZW50VHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoIHsgMCB9OworICAgIGZsb2F0IG1fYXZh
aWxhYmxlV2lkdGggeyAwIH07CisgICAgZmxvYXQgbV9sb2dpY2FsTGVmdE9mZnNldCB7IDAgfTsK
KyAgICBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50IG1fb3ZlcmZsb3dlZEZyYWdt
ZW50OworICAgIGZsb2F0IG1fcnVuc1dpZHRoIHsgMCB9OworICAgIGJvb2wgbV9jcmVhdGVOZXdS
dW4geyB0cnVlIH07CisgICAgZmxvYXQgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCB7IDAgfTsg
Ly8gVXNlIHRoaXMgdG8gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2Ugd2l0aG91dCByZS1tZXN1
cmluZyB0aGUgdGV4dC4KKyAgICB1bnNpZ25lZCBtX3RyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aCB7
IDAgfTsKICAgICAvLyBIYXZpbmcgb25lIGNoYXJhY3RlciBvbiB0aGUgbGluZSBkb2VzIG5vdCBu
ZWNlc3NhcmlseSBtZWFuIGl0IGFjdHVhbGx5IGZpdHMuCiAgICAgLy8gRmlyc3QgY2hhcmFjdGVy
IG9mIHRoZSBmaXJzdCBmcmFnbWVudCBtaWdodCBiZSBmb3JjZWQgb24gdG8gdGhlIGN1cnJlbnQg
bGluZSBldmVuIGlmIGl0IGRvZXMgbm90IGZpdC4KICAgICBib29sIG1fZmlyc3RDaGFyYWN0ZXJG
aXRzIHsgZmFsc2UgfTsKLSAgICBib29sIG1fbmV3U2VnbWVudCB7IHRydWUgfTsKIH07CiAKIHN0
YXRpYyBib29sIHByZVdyYXAoY29uc3QgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlN0eWxlJiBzdHls
ZSkKQEAgLTMxNCw5ICszMDIsOSBAQCBzdGF0aWMgYm9vbCBwcmVXcmFwKGNvbnN0IEZsb3dDb250
ZW50c0l0ZXJhdG9yOjpTdHlsZSYgc3R5bGUpCiAgICAgcmV0dXJuIHN0eWxlLndyYXBMaW5lcyAm
JiAhc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlOwogfQogICAgIAotc3RhdGljIHZvaWQgcmVtb3Zl
VHJhaWxpbmdXaGl0ZXNwYWNlKExpbmVTdGF0ZSYgbGluZVN0YXRlLCBMYXlvdXQ6OlJ1blZlY3Rv
ciYgbGluZVJ1bnMsIGNvbnN0IEZsb3dDb250ZW50c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVy
YXRvcikKK3N0YXRpYyB2b2lkIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZShMaW5lU3RhdGUmIGxp
bmVTdGF0ZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIGNvbnN0IEZsb3dDb250ZW50c0l0ZXJh
dG9yJiBmbG93Q29udGVudHNJdGVyYXRvcikKIHsKLSAgICBpZiAoIWxpbmVTdGF0ZS5sYXN0UnVu
VHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoKQorICAgIGlmICghbGluZVN0YXRlLmhhc1RyYWlsaW5n
V2hpdGVzcGFjZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gUmVtb3ZlIGNvbGxh
cHNlZCB3aGl0ZXNwYWNlLCBvciBub24tY29sbGFwc2VkIHByZS13cmFwIHdoaXRlc3BhY2UsIHVu
bGVzcyBpdCdzIHRoZSBvbmx5IGNvbnRlbnQgb24gdGhlIGxpbmUgLXNvIHJlbW92aW5nIHRoZSB3
aGl0ZXNhcGNlIHdvdWxkIHByb2R1Y2UgYW4gZW1wdHkgbGluZS4KQEAgLTMyNSwyNSArMzEzLDE5
IEBAIHN0YXRpYyB2b2lkIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZShMaW5lU3RhdGUmIGxpbmVT
dGF0ZSwgTGF5b3V0OjpSdW5WZWN0b3ImIGxpCiAgICAgaWYgKCFjb2xsYXBzZVdoaXRlc3BhY2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwcmVXcmFwKHN0eWxlKSAmJiBsaW5lU3RhdGUu
aGFzV2hpdGVzcGFjZU9ubHkoKSkKKyAgICBpZiAocHJlV3JhcChzdHlsZSkgJiYgbGluZVN0YXRl
LmlzV2hpdGVzcGFjZU9ubHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGxpbmVS
dW5zLnNpemUoKSk7Ci0gICAgUnVuJiBsYXN0UnVuID0gbGluZVJ1bnMubGFzdCgpOwotICAgIGxh
c3RSdW4ubG9naWNhbFJpZ2h0IC09IGxpbmVTdGF0ZS5sYXN0UnVuVHJhaWxpbmdXaGl0ZXNwYWNl
V2lkdGg7Ci0gICAgbGFzdFJ1bi5lbmQgLT0gbGluZVN0YXRlLmxhc3RSdW5UcmFpbGluZ1doaXRl
c3BhY2VMZW5ndGg7Ci0gICAgaWYgKGxhc3RSdW4uc3RhcnQgPT0gbGFzdFJ1bi5lbmQpCi0gICAg
ICAgIGxpbmVSdW5zLnJlbW92ZUxhc3QoKTsKLSAgICBsaW5lU3RhdGUucmVtb3ZlVHJhaWxpbmdX
aGl0ZXNwYWNlKCk7CisgICAgbGluZVN0YXRlLnJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZShydW5z
KTsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlTGluZUNvbnN0cmFpbnMoY29uc3QgUmVuZGVyQmxv
Y2tGbG93JiBmbG93LCBmbG9hdCYgYXZhaWxhYmxlV2lkdGgsIGZsb2F0JiBsb2dpY2FsTGVmdE9m
ZnNldCkKK3N0YXRpYyB2b2lkIHVwZGF0ZUxpbmVDb25zdHJhaW5zKGNvbnN0IFJlbmRlckJsb2Nr
RmxvdyYgZmxvdywgTGluZVN0YXRlJiBsaW5lKQogewogICAgIExheW91dFVuaXQgaGVpZ2h0ID0g
Zmxvdy5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gZmxv
dy5taW5MaW5lSGVpZ2h0Rm9yUmVwbGFjZWRSZW5kZXJlcihmYWxzZSwgMCk7CiAgICAgZmxvYXQg
bG9naWNhbFJpZ2h0T2Zmc2V0ID0gZmxvdy5sb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGhlaWdo
dCwgZmFsc2UsIGxvZ2ljYWxIZWlnaHQpOwotICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gZmxvdy5s
b2dpY2FsTGVmdE9mZnNldEZvckxpbmUoaGVpZ2h0LCBmYWxzZSwgbG9naWNhbEhlaWdodCk7Ci0g
ICAgYXZhaWxhYmxlV2lkdGggPSBzdGQ6Om1heDxmbG9hdD4oMCwgbG9naWNhbFJpZ2h0T2Zmc2V0
IC0gbG9naWNhbExlZnRPZmZzZXQpOworICAgIGxpbmUuc2V0TG9naWNhbExlZnRPZmZzZXQoZmxv
dy5sb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoaGVpZ2h0LCBmYWxzZSwgbG9naWNhbEhlaWdodCkp
OworICAgIGxpbmUuc2V0QXZhaWxhYmxlV2lkdGgoc3RkOjptYXg8ZmxvYXQ+KDAsIGxvZ2ljYWxS
aWdodE9mZnNldCAtIGxpbmUubG9naWNhbExlZnRPZmZzZXQoKSkpOwogfQogCiBzdGF0aWMgRmxv
d0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCBzcGxpdEZyYWdtZW50VG9GaXRMaW5lKEZs
b3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50VG9TcGxpdCwgZmxvYXQg
YXZhaWxhYmxlV2lkdGgsIGJvb2wga2VlcEF0TGVhc3RPbmVDaGFyYWN0ZXIsIGNvbnN0IEZsb3dD
b250ZW50c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVyYXRvcikKQEAgLTM5MCw3ICszNzIsNyBA
QCBzdGF0aWMgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCBzcGxpdEZyYWdtZW50
VG9GaXRMaW5lKEZsb3dDb250ZW50c0l0ZQogc3RhdGljIEZsb3dDb250ZW50c0l0ZXJhdG9yOjpU
ZXh0RnJhZ21lbnQgZmlyc3RGcmFnbWVudChGbG93Q29udGVudHNJdGVyYXRvciYgZmxvd0NvbnRl
bnRzSXRlcmF0b3IsIGNvbnN0IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5lKQogewogICAgIC8vIEhh
bmRsZSBvdmVyZmxvd2VkIGZyYWdtZW50IGZyb20gcHJldmlvdXMgbGluZS4KLSAgICBGbG93Q29u
dGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGZpcnN0RnJhZ21lbnQgPSBwcmV2aW91c0xpbmUu
b3ZlcmZsb3dlZEZyYWdtZW50OworICAgIEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21l
bnQgZmlyc3RGcmFnbWVudCA9IHByZXZpb3VzTGluZS5vdmVyZmxvd2VkRnJhZ21lbnQoKTsKICAg
ICBjb25zdCBhdXRvJiBzdHlsZSA9IGZsb3dDb250ZW50c0l0ZXJhdG9yLnN0eWxlKCk7CiAKICAg
ICBpZiAoZmlyc3RGcmFnbWVudC5pc0VtcHR5KCkpCkBAIC00MTIsNyArMzk0LDcgQEAgc3RhdGlj
IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgZmlyc3RGcmFnbWVudChGbG93Q29u
dGVudHNJdGVyYXRvciYgZmwKICAgICByZXR1cm4gZmlyc3RGcmFnbWVudDsKIH0KIAotc3RhdGlj
IGJvb2wgY3JlYXRlTGluZVJ1bnMoTGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5lU3RhdGUmIHBy
ZXZpb3VzTGluZSwgTGF5b3V0OjpSdW5WZWN0b3ImIGxpbmVSdW5zLCBGbG93Q29udGVudHNJdGVy
YXRvciYgZmxvd0NvbnRlbnRzSXRlcmF0b3IpCitzdGF0aWMgYm9vbCBjcmVhdGVMaW5lUnVucyhM
aW5lU3RhdGUmIGxpbmUsIGNvbnN0IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5lLCBMYXlvdXQ6OlJ1
blZlY3RvciYgcnVucywgRmxvd0NvbnRlbnRzSXRlcmF0b3ImIGZsb3dDb250ZW50c0l0ZXJhdG9y
KQogewogICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gZmxvd0NvbnRlbnRzSXRlcmF0b3Iuc3R5bGUo
KTsKICAgICBib29sIGxpbmVDYW5CZVdyYXBwZWQgPSBzdHlsZS53cmFwTGluZXMgfHwgc3R5bGUu
YnJlYWtXb3JkT25PdmVyZmxvdzsKQEAgLTQyMiw3ICs0MDQsNyBAQCBzdGF0aWMgYm9vbCBjcmVh
dGVMaW5lUnVucyhMaW5lU3RhdGUmIGxpbmUsIGNvbnN0IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5l
LCBMYXlvdQogICAgICAgICBpZiAoZnJhZ21lbnQudHlwZSA9PSBGbG93Q29udGVudHNJdGVyYXRv
cjo6VGV4dEZyYWdtZW50OjpMaW5lQnJlYWspIHsKICAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV3
IGxpbmUgZnJhZ21lbnQgb25seSBpZiB0aGVyZSdzIG5vdGhpbmcgb24gdGhlIGxpbmUuIChvdGhl
cndpc2UgdGhlIGV4dHJhIG5ldyBsaW5lIGNoYXJhY3RlciB3b3VsZCBzaG93IHVwIGF0IHRoZSBl
bmQgb2YgdGhlIGNvbnRlbnQuKQogICAgICAgICAgICAgaWYgKCFsaW5lLndpZHRoKCkpCi0gICAg
ICAgICAgICAgICAgbGluZS5hZGRGcmFnbWVudChmcmFnbWVudCk7CisgICAgICAgICAgICAgICAg
bGluZS5hcHBlbmRGcmFnbWVudChmcmFnbWVudCwgcnVucyk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBpZiAobGluZUNhbkJlV3JhcHBlZCAmJiAhbGluZS5maXRzKGZy
YWdtZW50LndpZHRoKSkgewpAQCAtNDM2LDggKzQxOCw4IEBAIHN0YXRpYyBib29sIGNyZWF0ZUxp
bmVSdW5zKExpbmVTdGF0ZSYgbGluZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUsIExh
eW91CiAgICAgICAgICAgICBpZiAoZnJhZ21lbnQudHlwZSA9PSBGbG93Q29udGVudHNJdGVyYXRv
cjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHls
ZS5jb2xsYXBzZVdoaXRlc3BhY2UpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gU3BsaXQgdGhl
IGZyYWdtZW50OyAobW9kaWZpZWQpZnJhZ21lbnQgc3RheXMgb24gdGhpcyBsaW5lLCBvdmVyZmxv
d2VkRnJhZ21lbnQgaXMgcHVzaGVkIHRvIG5leHQgbGluZS4KLSAgICAgICAgICAgICAgICAgICAg
bGluZS5vdmVyZmxvd2VkRnJhZ21lbnQgPSBzcGxpdEZyYWdtZW50VG9GaXRMaW5lKGZyYWdtZW50
LCBsaW5lLmF2YWlsYWJsZVdpZHRoIC0gbGluZS53aWR0aCgpLCBlbXB0eUxpbmUsIGZsb3dDb250
ZW50c0l0ZXJhdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgbGluZS5hZGRGcmFnbWVudChmcmFn
bWVudCk7CisgICAgICAgICAgICAgICAgICAgIGxpbmUuc2V0T3ZlcmZsb3dlZEZyYWdtZW50KHNw
bGl0RnJhZ21lbnRUb0ZpdExpbmUoZnJhZ21lbnQsIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSAtIGxp
bmUud2lkdGgoKSwgZW1wdHlMaW5lLCBmbG93Q29udGVudHNJdGVyYXRvcikpOworICAgICAgICAg
ICAgICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50KGZyYWdtZW50LCBydW5zKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gV2hlbiB3aGl0ZXNwYWNlIGNvbGxhcHNlIGlz
IG9uLCB3aGl0ZXNwYWNlIHRoYXQgZG9lc24ndCBmaXQgaXMgc2ltcGx5IHNraXBwZWQuCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC00NDUsMzEgKzQyNywyNCBAQCBzdGF0aWMgYm9vbCBjcmVh
dGVMaW5lUnVucyhMaW5lU3RhdGUmIGxpbmUsIGNvbnN0IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5l
LCBMYXlvdQogICAgICAgICAgICAgLy8gTm9uLXdoaXRlc3BhY2UgZnJhZ21lbnQuICghc3R5bGUu
d3JhcExpbmVzOiBidWcxMzgxMDIocHJlc2VydmUgZXhpc3RpbmcgYmVoYXZpb3IpCiAgICAgICAg
ICAgICBpZiAoKGVtcHR5TGluZSAmJiBzdHlsZS5icmVha1dvcmRPbk92ZXJmbG93KSB8fCAhc3R5
bGUud3JhcExpbmVzKSB7CiAgICAgICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGZyYWdtZW50OyAo
bW9kaWZpZWQpZnJhZ21lbnQgc3RheXMgb24gdGhpcyBsaW5lLCBvdmVyZmxvd2VkRnJhZ21lbnQg
aXMgcHVzaGVkIHRvIG5leHQgbGluZS4KLSAgICAgICAgICAgICAgICBsaW5lLm92ZXJmbG93ZWRG
cmFnbWVudCA9IHNwbGl0RnJhZ21lbnRUb0ZpdExpbmUoZnJhZ21lbnQsIGxpbmUuYXZhaWxhYmxl
V2lkdGggLSBsaW5lLndpZHRoKCksIGVtcHR5TGluZSwgZmxvd0NvbnRlbnRzSXRlcmF0b3IpOwot
ICAgICAgICAgICAgICAgIGxpbmUuYWRkRnJhZ21lbnQoZnJhZ21lbnQpOworICAgICAgICAgICAg
ICAgIGxpbmUuc2V0T3ZlcmZsb3dlZEZyYWdtZW50KHNwbGl0RnJhZ21lbnRUb0ZpdExpbmUoZnJh
Z21lbnQsIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSAtIGxpbmUud2lkdGgoKSwgZW1wdHlMaW5lLCBm
bG93Q29udGVudHNJdGVyYXRvcikpOworICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21l
bnQoZnJhZ21lbnQsIHJ1bnMpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgLy8gTm9uLWJyZWFrYWJsZSBub24td2hpdGVzcGFjZSBmaXJzdCBmcmFn
bWVudC4gQWRkIGl0IHRvIHRoZSBjdXJyZW50IGxpbmUuIC1pdCBvdmVyZmxvd3MgdGhvdWdoLgog
ICAgICAgICAgICAgaWYgKGVtcHR5TGluZSkgewotICAgICAgICAgICAgICAgIGxpbmUuYWRkRnJh
Z21lbnQoZnJhZ21lbnQpOworICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnQoZnJh
Z21lbnQsIHJ1bnMpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgLy8gTm9uLWJyZWFrYWJsZSBub24td2hpdGVzcGFjZSBmcmFnbWVudCB3aGVuIHRo
ZXJlJ3MgYWxyZWFkeSBjb250ZW50IG9uIHRoZSBsaW5lLiBQdXNoIGl0IHRvIHRoZSBuZXh0IGxp
bmUuCi0gICAgICAgICAgICBsaW5lLm92ZXJmbG93ZWRGcmFnbWVudCA9IGZyYWdtZW50OworICAg
ICAgICAgICAgbGluZS5zZXRPdmVyZmxvd2VkRnJhZ21lbnQoZnJhZ21lbnQpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgLy8gV2hlbiB0aGUgY3VycmVudCBmcmFnbWVu
dCBpcyBjb2xsYXBzZWQgd2hpdGVzcGFjZSwgd2UgbmVlZCB0byBjcmVhdGUgYSBydW4gZm9yIHdo
YXQgd2UndmUgcHJvY2Vzc2VkIHNvIGZhci4KLSAgICAgICAgaWYgKGZyYWdtZW50LmlzQ29sbGFw
c2VkKSB7Ci0gICAgICAgICAgICAvLyBPbmUgdHJhaWxpbmcgd2hpdGVzcGFjZSB0byBwcmVzZXJ2
ZS4KLSAgICAgICAgICAgIGxpbmUuYWRkV2hpdGVzcGFjZShzdHlsZS5zcGFjZVdpZHRoKTsKLSAg
ICAgICAgICAgIGxpbmUuY3JlYXRlUnVuKGxpbmVSdW5zKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBsaW5lLmFkZEZyYWdtZW50KGZyYWdtZW50KTsKKyAgICAgICAgbGluZS5hcHBlbmRG
cmFnbWVudChmcmFnbWVudCwgcnVucyk7CiAgICAgICAgIC8vIEZpbmQgdGhlIG5leHQgdGV4dCBm
cmFnbWVudC4KICAgICAgICAgZnJhZ21lbnQgPSBmbG93Q29udGVudHNJdGVyYXRvci5uZXh0VGV4
dEZyYWdtZW50KGxpbmUud2lkdGgoKSk7CiAgICAgfQotICAgIGxpbmUuY3JlYXRlUnVuKGxpbmVS
dW5zKTsKLSAgICByZXR1cm4gZnJhZ21lbnQuaXNFbXB0eSgpICYmIGxpbmUub3ZlcmZsb3dlZEZy
YWdtZW50LmlzRW1wdHkoKTsKKyAgICByZXR1cm4gZnJhZ21lbnQuaXNFbXB0eSgpICYmIGxpbmUu
b3ZlcmZsb3dlZEZyYWdtZW50KCkuaXNFbXB0eSgpOwogfQogCiBzdGF0aWMgdm9pZCBjbG9zZUxp
bmVFbmRpbmdBbmRBZGp1c3RSdW5zKExpbmVTdGF0ZSYgbGluZSwgTGF5b3V0OjpSdW5WZWN0b3Im
IHJ1bnMsIHVuc2lnbmVkIHByZXZpb3VzUnVuQ291bnQsIHVuc2lnbmVkJiBsaW5lQ291bnQsIGNv
bnN0IEZsb3dDb250ZW50c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVyYXRvcikKQEAgLTQ4MSw3
ICs0NTYsNyBAQCBzdGF0aWMgdm9pZCBjbG9zZUxpbmVFbmRpbmdBbmRBZGp1c3RSdW5zKExpbmVT
dGF0ZSYgbGluZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bgogICAgIGlmICghcnVucy5zaXplKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAvLyBBZGp1c3QgcnVucycgcG9zaXRpb24gYnkgdGFraW5n
IGxpbmUncyBhbGlnbm1lbnQgaW50byBhY2NvdW50LgotICAgIGlmIChmbG9hdCBsaW5lTG9naWNh
bExlZnQgPSBjb21wdXRlTGluZUxlZnQoZmxvd0NvbnRlbnRzSXRlcmF0b3Iuc3R5bGUoKS50ZXh0
QWxpZ24sIGxpbmUuYXZhaWxhYmxlV2lkdGgsIGxpbmUucnVuc1dpZHRoLCBsaW5lLmxvZ2ljYWxM
ZWZ0T2Zmc2V0KSkgeworICAgIGlmIChmbG9hdCBsaW5lTG9naWNhbExlZnQgPSBjb21wdXRlTGlu
ZUxlZnQoZmxvd0NvbnRlbnRzSXRlcmF0b3Iuc3R5bGUoKS50ZXh0QWxpZ24sIGxpbmUuYXZhaWxh
YmxlV2lkdGgoKSwgbGluZS53aWR0aCgpLCBsaW5lLmxvZ2ljYWxMZWZ0T2Zmc2V0KCkpKSB7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHByZXZpb3VzUnVuQ291bnQ7IGkgPCBydW5zLnNpemUo
KTsgKytpKSB7CiAgICAgICAgICAgICBydW5zW2ldLmxvZ2ljYWxMZWZ0ICs9IGxpbmVMb2dpY2Fs
TGVmdDsKICAgICAgICAgICAgIHJ1bnNbaV0ubG9naWNhbFJpZ2h0ICs9IGxpbmVMb2dpY2FsTGVm
dDsKQEAgLTUyNiw3ICs1MDEsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVUZXh0UnVucyhMYXlvdXQ6
OlJ1blZlY3RvciYgcnVucywgUmVuZGVyQmxvY2tGbG93JiBmbG93LCB1bnNpZwogICAgICAgICBM
aW5lU3RhdGUgcHJldmlvdXNMaW5lID0gbGluZTsKICAgICAgICAgdW5zaWduZWQgcHJldmlvdXNS
dW5Db3VudCA9IHJ1bnMuc2l6ZSgpOwogICAgICAgICBsaW5lID0gTGluZVN0YXRlKCk7Ci0gICAg
ICAgIHVwZGF0ZUxpbmVDb25zdHJhaW5zKGZsb3csIGxpbmUuYXZhaWxhYmxlV2lkdGgsIGxpbmUu
bG9naWNhbExlZnRPZmZzZXQpOworICAgICAgICB1cGRhdGVMaW5lQ29uc3RyYWlucyhmbG93LCBs
aW5lKTsKICAgICAgICAgaXNFbmRPZkNvbnRlbnQgPSBjcmVhdGVMaW5lUnVucyhsaW5lLCBwcmV2
aW91c0xpbmUsIHJ1bnMsIGZsb3dDb250ZW50c0l0ZXJhdG9yKTsKICAgICAgICAgY2xvc2VMaW5l
RW5kaW5nQW5kQWRqdXN0UnVucyhsaW5lLCBydW5zLCBwcmV2aW91c1J1bkNvdW50LCBsaW5lQ291
bnQsIGZsb3dDb250ZW50c0l0ZXJhdG9yKTsKICAgICB9IHdoaWxlICghaXNFbmRPZkNvbnRlbnQp
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>