<?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>299129</bug_id>
          
          <creation_ts>2025-09-18 15:06:24 -0700</creation_ts>
          <short_desc>[text shaping] Selection paint rect should follow shaped content</short_desc>
          <delta_ts>2025-09-19 10:24:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>6148</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2144138</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2025-09-18 15:06:24 -0700</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2144154</commentid>
    <comment_count>1</comment_count>
      <attachid>476796</attachid>
    <who name="alan">zalan</who>
    <bug_when>2025-09-18 15:39:27 -0700</bug_when>
    <thetext>Created attachment 476796
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2144365</commentid>
    <comment_count>2</comment_count>
      <attachid>476796</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2025-09-19 06:14:12 -0700</bug_when>
    <thetext>Comment on attachment 476796
Patch

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

&gt; Source/WebCore/rendering/TextBoxPainter.cpp:570
&gt; +    if (!isInsideShapedContent()) {
&gt; +        fontCascade().adjustSelectionRectForText(m_renderer.canUseSimplifiedTextMeasuring().value_or(false), m_paintTextRun, selectionRect, startOffset, endOffset);
&gt; +        return selectionRect;
&gt; +    }

maybe make the shaped content the branch or even factor it into a separate function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2144395</commentid>
    <comment_count>3</comment_count>
      <attachid>476802</attachid>
    <who name="alan">zalan</who>
    <bug_when>2025-09-19 08:19:50 -0700</bug_when>
    <thetext>Created attachment 476802
[fast-cq]Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2144431</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2025-09-19 10:23:50 -0700</bug_when>
    <thetext>Committed 300241@main (742a9580b8b7): &lt;https://commits.webkit.org/300241@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 476802.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2144432</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2025-09-19 10:24:12 -0700</bug_when>
    <thetext>&lt;rdar://problem/160949905&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2144433</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2025-09-19 10:24:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/160949939&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>476796</attachid>
            <date>2025-09-18 15:39:27 -0700</date>
            <delta_ts>2025-09-19 08:19:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-299129-20250918153926.patch</filename>
            <type>text/plain</type>
            <size>16110</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">RnJvbSBhNDA0OTVlZjliZDZkNzI2OTU1ODkyM2IwOGM5ZmIxYjQ4MDUwNWY4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGFuIEJhcmFkbGF5IDx6YWxhbkBhcHBsZS5jb20+CkRhdGU6
IFRodSwgMTggU2VwIDIwMjUgMTU6MDY6NDEgLTA3MDAKU3ViamVjdDogW1BBVENIXSBbdGV4dCBz
aGFwaW5nXSBTZWxlY3Rpb24gcGFpbnQgcmVjdCBzaG91bGQgZm9sbG93IHNoYXBlZAogY29udGVu
dCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk5MTI5CgpSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KClRoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IHNlbGVjdGlvbiBm
b2xsb3dzIHRoZSBzaGFwZWQgKHBhaW50ZWQpIGNvbnRlbnQuCgoxLiBNYWtlIGEgZGVkaWNhdGVk
IGZ1bmN0aW9uIHRvIGJ1aWxkIHRleHQgZm9yIHNoYXBpbmcgYWNyb3NzIGRpc3BsYXkgYm94ZXMK
KHBhaW50IGFuZCB0ZXh0IHNlbGVjdGlvbiBjYWxsIHRoaXMgZnVuY3Rpb24pCjIuIE1vdmUgc2Vs
ZWN0aW9uIGFkanVzdG1lbnQgbG9naWMgdG8gYSBmdW5jdGlvbiAoc2VsZWN0aW9uUmVjdEZvclJh
bmdlKQp3aGVyZSBpbiBjYXNlIG9mIHNoYXBpbmcsIHdlIHdvdWxkIGNhbGwgJ2J1aWxkVGV4dEZv
clNoYXBpbmcnIGFuZAphZGp1c3QgdGhlIHNlbGVjdGlvbiByZWN0IGFjY29yZGluZ2x5LgoKKiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwOgooV2ViQ29yZTo6YnVp
bGRUZXh0Rm9yU2hhcGluZyk6CihXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6c2VsZWN0aW9uUmVj
dEZvclJhbmdlIGNvbnN0KToKKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91
bmRGaWxsRm9yUmFuZ2UpOgooV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3Vu
ZCk6CihXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kRm9yU2hhcGVSYW5n
ZSk6CihXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6aXNJbnNpZGVTaGFwZWRDb250ZW50IGNvbnN0
KToKKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmRGb3JTaGFwaW5nUmFu
Z2UpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5o
OgotLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAgfCAyMDIg
KysrKysrKysrKysrKy0tLS0tLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFp
bnRlci5oICAgfCAgIDQgKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTM2IGluc2VydGlvbnMoKyksIDcw
IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
Qm94UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIu
Y3BwCmluZGV4IDYyYmY2MjQ3YWYwNi4uZWNjY2FmMmRmMTNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAKQEAgLTk1LDYgKzk1LDg1IEBAIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPGJvb2w+IGVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUoY29uc3QgUmVu
ZGVyVGV4dCYgcmVuZGVyCiAgICAgcmV0dXJuIGlzQWJvdmU7CiB9CiAKK3N0cnVjdCBTaGFwZWRD
b250ZW50IHsKKyAgICBTdHJpbmdCdWlsZGVyIHRleHQ7CisgICAgZmxvYXQgdmlzdWFsTGVmdCB7
IDAuZiB9OyAvLyB2aXN1YWwgbGVmdCBvZiB0aGUgc2hhcGVkIGNvbnRlbnQuCisgICAgc2l6ZV90
IHRleHRCb3hTdGFydE9mZnNldCB7IDAgfTsgLy8gdGV4dCBib3gncyBwb3NpdGlvbiByZWxhdGl2
ZSB0byB0aGUgc2hhcGVkIGNvbnRlbnQuCisgICAgZmxvYXQgdGV4dEJveFZpc3VhbExlZnQgeyAw
LmYgfTsgLy8gdGV4dCBib3gncyBsZWZ0IHJlbGF0aXZlIHRvIHRoZSB2aXN1YWwgbGVmdCBvZiB0
aGUgc2hhcGVkIGNvbnRlbnQuCit9Oworc3RhdGljIHZvaWQgYnVpbGRUZXh0Rm9yU2hhcGluZyhT
aGFwZWRDb250ZW50JiBzaGFwZWRDb250ZW50LCBJbmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0
aCB0ZXh0Qm94LCBib29sIG5lZWRzVGV4dEJveFZpc3VhbExlZnQgPSBmYWxzZSkKK3sKKyAgICBB
U1NFUlQodGV4dEJveC5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpOworCisgICAg
YXV0byBzaGFwaW5nQm91bmRhcnlJdGVyYXRvciA9IHRleHRCb3g7CisgICAgLy8gMS4gRmluZCBz
aGFwaW5nIGJvdW5kYXJ5IHN0YXJ0IHdoZW4gd2UgYXJlIGF0IHRoZSBlbmQgb3IgaW5zaWRlIGEg
c2hhcGUgcmFuZ2UgKG5vdGUgdGhhdCB3ZSBkZWFsIHdpdGgKKyAgICAvLyBydGwgY29udGVudCBo
ZW5jZSB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHdhbGspCisgICAgLy8gMi4gV2FsayBmcm9tIHRo
ZSBzdGFydCB0byB0aGUgZW5kIGFuZCBidWlsZCB0aGUgdGV4dCBjb250ZW50LgorCisgICAgYXV0
byBtb3ZlVG9TaGFwaW5nQm91bmRhcnlTdGFydCA9IFsmXSB7CisgICAgICAgIGlmIChzaGFwaW5n
Qm91bmRhcnlJdGVyYXRvci5ib3goKS50ZXh0KCkuaXNBdFNoYXBpbmdCb3VuZGFyeVN0YXJ0KCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2hhcGluZ0JvdW5kYXJ5SXRlcmF0b3Iu
dHJhdmVyc2VOZXh0TGVhZk9uTGluZSgpOworICAgICAgICBmb3IgKDsgIXNoYXBpbmdCb3VuZGFy
eUl0ZXJhdG9yLmF0RW5kKCk7IHNoYXBpbmdCb3VuZGFyeUl0ZXJhdG9yLnRyYXZlcnNlTmV4dExl
YWZPbkxpbmUoKSkgeworICAgICAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IHNoYXBpbmdCb3Vu
ZGFyeUl0ZXJhdG9yLmJveCgpOworICAgICAgICAgICAgaWYgKGRpc3BsYXlCb3guaXNUZXh0KCkp
IHsKKyAgICAgICAgICAgICAgICBzaGFwZWRDb250ZW50LnRleHRCb3hTdGFydE9mZnNldCArPSBk
aXNwbGF5Qm94LnRleHQoKS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlzcGxheUJv
eC50ZXh0KCkuaXNBdFNoYXBpbmdCb3VuZGFyeVN0YXJ0KCkpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBtb3ZlVG9TaGFw
aW5nQm91bmRhcnlTdGFydCgpOworCisgICAgaWYgKHNoYXBpbmdCb3VuZGFyeUl0ZXJhdG9yLmF0
RW5kKCkgfHwgIXNoYXBpbmdCb3VuZGFyeUl0ZXJhdG9yLmlzVGV4dCgpKSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBi
dWlsZFRleHRDb250ZW50ID0gWyZdIHsKKyAgICAgICAgZm9yICg7ICFzaGFwaW5nQm91bmRhcnlJ
dGVyYXRvci5hdEVuZCgpOyBzaGFwaW5nQm91bmRhcnlJdGVyYXRvci50cmF2ZXJzZVByZXZpb3Vz
TGVhZk9uTGluZSgpKSB7CisgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gc2hhcGluZ0Jv
dW5kYXJ5SXRlcmF0b3IuYm94KCk7CisgICAgICAgICAgICBpZiAoIWRpc3BsYXlCb3guaXNUZXh0
KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRvJiB0ZXh0ID0g
ZGlzcGxheUJveC50ZXh0KCk7CisgICAgICAgICAgICBpZiAoc2hhcGluZ0JvdW5kYXJ5SXRlcmF0
b3IuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKSB7CisgICAgICAgICAgICAgICAg
c2hhcGVkQ29udGVudC50ZXh0LmNsZWFyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBzaGFwZWRDb250ZW50LnRleHQuYXBwZW5kKHRleHQu
cmVuZGVyZWRDb250ZW50KCkpOworICAgICAgICAgICAgaWYgKHRleHQuaXNBdFNoYXBpbmdCb3Vu
ZGFyeUVuZCgpKSB7CisgICAgICAgICAgICAgICAgc2hhcGVkQ29udGVudC52aXN1YWxMZWZ0ID0g
ZGlzcGxheUJveC52aXN1YWxSZWN0SWdub3JpbmdCbG9ja0RpcmVjdGlvbigpLngoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8g
V2Ugc2hvdWxkIGFsd2F5cyBmaW5kIHRoZSBib3VuZGFyeSBlbmQuCisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBzaGFwZWRDb250ZW50LnRleHQuY2xlYXIoKTsKKyAgICB9
OworICAgIGJ1aWxkVGV4dENvbnRlbnQoKTsKKworICAgIGlmIChzaGFwZWRDb250ZW50LnRleHQu
aXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgYXV0byBjb21wdXRlVmlzdWFsTGVmdEZvclRleHRCb3ggPSBbJl0g
eworICAgICAgICBpZiAoIW5lZWRzVGV4dEJveFZpc3VhbExlZnQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIC8vIFN0YXJ0aW5nIGZyb20gdmlzdWFsIGxlZnQsIHdhbGsgYWxsIHRoZSB3
YXkgdG8gdGhlIGN1cnJlbnQgdGV4dCBib3guCisgICAgICAgIGZvciAoOyAhc2hhcGluZ0JvdW5k
YXJ5SXRlcmF0b3IuYXRFbmQoKTsgc2hhcGluZ0JvdW5kYXJ5SXRlcmF0b3IudHJhdmVyc2VOZXh0
TGVhZk9uTGluZSgpKSB7CisgICAgICAgICAgICBpZiAoc2hhcGluZ0JvdW5kYXJ5SXRlcmF0b3Ig
PT0gdGV4dEJveCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBhdXRvJiBk
aXNwbGF5Qm94ID0gc2hhcGluZ0JvdW5kYXJ5SXRlcmF0b3IuYm94KCk7CisgICAgICAgICAgICBp
ZiAoZGlzcGxheUJveC5pc1RleHQoKSkKKyAgICAgICAgICAgICAgICBzaGFwZWRDb250ZW50LnRl
eHRCb3hWaXN1YWxMZWZ0ICs9IGRpc3BsYXlCb3gudmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJl
Y3Rpb24oKS53aWR0aCgpOworICAgICAgICB9CisgICAgfTsKKyAgICBjb21wdXRlVmlzdWFsTGVm
dEZvclRleHRCb3goKTsKK30KKwogVGV4dEJveFBhaW50ZXI6OlRleHRCb3hQYWludGVyKGNvbnN0
IExheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50LCBjb25zdCBJ
bmxpbmVEaXNwbGF5OjpCb3gmIGJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgIDogbV90
ZXh0Qm94KElubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoIHsgaW5saW5lQ29udGVudCwgaW5s
aW5lQ29udGVudC5pbmRleEZvckJveChib3gpIH0pCiAgICAgLCBtX3JlbmRlcmVyKGRvd25jYXN0
PFJlbmRlclRleHQ+KG1fdGV4dEJveC5yZW5kZXJlcigpKSkKQEAgLTQ3MiwxNSArNTUxLDggQEAg
dm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kRmlsbCgpCiAgICAgICAgIHBhaW50
QmFja2dyb3VuZEZpbGxGb3JSYW5nZShtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0
LmVuZE9mZnNldCwgbWFya2VkVGV4dC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IsIEJhY2tncm91bmRT
dHlsZTo6Tm9ybWFsKTsKIH0KIAotdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5k
RmlsbEZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvciwgQmFja2dyb3VuZFN0eWxlIGJhY2tncm91bmRTdHlsZSkKK0xheW91
dFJlY3QgVGV4dEJveFBhaW50ZXI6OnNlbGVjdGlvblJlY3RGb3JSYW5nZSh1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KSBjb25zdAogewotICAgIGlmIChzdGFydE9mZnNl
dCA+PSBlbmRPZmZzZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCA9IG1fcGFpbnRJbmZvLmNvbnRleHQoKTsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIgeyBjb250ZXh0IH07Ci0gICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0
KGNvbnRleHQsIFRleHRQYWludFN0eWxlIHsgY29sb3IgfSk7IC8vIERvbid0IGRyYXcgdGV4dCBh
dCBhbGwhCi0KICAgICAvLyBOb3RlIHRoYXQgaWYgdGhlIHRleHQgaXMgdHJ1bmNhdGVkLCB3ZSBs
ZXQgdGhlIHRoaW5nIGJlaW5nIHBhaW50ZWQgaW4gdGhlIHRydW5jYXRpb24KICAgICAvLyBkcmF3
IGl0cyBvd24gaGlnaGxpZ2h0LgogICAgIGF1dG8gbGluZUJveCA9IG1ha2VJdGVyYXRvcigpLT5s
aW5lQm94KCk7CkBAIC00OTEsMTYgKzU2Myw0OSBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWlu
dEJhY2tncm91bmRGaWxsRm9yUmFuZ2UodW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkCiAg
ICAgYXV0byBkZWx0YVkgPSBMYXlvdXRVbml0IHsgd3JpdGluZ01vZGUoKS5pc0xpbmVJbnZlcnRl
ZCgpID8gc2VsZWN0aW9uQm90dG9tIC0gbV9sb2dpY2FsUmVjdC5tYXhZKCkgOiBtX2xvZ2ljYWxS
ZWN0LnkoKSAtIHNlbGVjdGlvblRvcCB9OwogICAgIGF1dG8gc2VsZWN0aW9uSGVpZ2h0ID0gTGF5
b3V0VW5pdCB7IHN0ZDo6bWF4KDAuZiwgc2VsZWN0aW9uQm90dG9tIC0gc2VsZWN0aW9uVG9wKSB9
OwogICAgIGF1dG8gc2VsZWN0aW9uUmVjdCA9IExheW91dFJlY3QgeyBMYXlvdXRVbml0KG1fcGFp
bnRSZWN0LngoKSksIExheW91dFVuaXQobV9wYWludFJlY3QueSgpIC0gZGVsdGFZKSwgTGF5b3V0
VW5pdChtX2xvZ2ljYWxSZWN0LndpZHRoKCkpLCBzZWxlY3Rpb25IZWlnaHQgfTsKLSAgICBhdXRv
IGFkanVzdGVkU2VsZWN0aW9uUmVjdCA9IHNlbGVjdGlvblJlY3Q7Ci0gICAgZm9udENhc2NhZGUo
KS5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChtX3JlbmRlcmVyLmNhblVzZVNpbXBsaWZpZWRU
ZXh0TWVhc3VyaW5nKCkudmFsdWVfb3IoZmFsc2UpLCBtX3BhaW50VGV4dFJ1biwgYWRqdXN0ZWRT
ZWxlY3Rpb25SZWN0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgIGlmICghaXNJbnNp
ZGVTaGFwZWRDb250ZW50KCkpIHsKKyAgICAgICAgZm9udENhc2NhZGUoKS5hZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yVGV4dChtX3JlbmRlcmVyLmNhblVzZVNpbXBsaWZpZWRUZXh0TWVhc3VyaW5nKCku
dmFsdWVfb3IoZmFsc2UpLCBtX3BhaW50VGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCk7CisgICAgICAgIHJldHVybiBzZWxlY3Rpb25SZWN0OworICAgIH0KKwor
ICAgIGF1dG8gc2hhcGVkQ29udGVudCA9IFNoYXBlZENvbnRlbnQgeyB9OworCisgICAgYnVpbGRU
ZXh0Rm9yU2hhcGluZyhzaGFwZWRDb250ZW50LCBtX3RleHRCb3gsIHRydWUpOworICAgIHNlbGVj
dGlvblJlY3Quc2V0WChzZWxlY3Rpb25SZWN0LngoKSAtIHNoYXBlZENvbnRlbnQudGV4dEJveFZp
c3VhbExlZnQpOworICAgIGF1dG8gc2VsZWN0aW9uTGVuZ3RoID0gZW5kT2Zmc2V0IC0gc3RhcnRP
ZmZzZXQ7CisgICAgYXV0byBhZGp1c3RlZFN0YXJ0T2Zmc2V0ID0gc2hhcGVkQ29udGVudC50ZXh0
Qm94U3RhcnRPZmZzZXQgKyBzdGFydE9mZnNldDsKKworICAgIGF1dG8gY2hhcmFjdGVyU2NhbkZv
ckNvZGVQYXRoID0gdHJ1ZTsKKyAgICBhdXRvIGV4cGFuc2lvbiA9IG1fdGV4dEJveC5ib3goKS5l
eHBhbnNpb24oKTsKKyAgICBhdXRvIHBhaW50UmVjdCA9IG1fcGFpbnRSZWN0OworICAgIHBhaW50
UmVjdC5zaGlmdFhFZGdlVG8oc2hhcGVkQ29udGVudC52aXN1YWxMZWZ0KTsKKyAgICBhdXRvIHJ1
biA9IFRleHRSdW4geyBzaGFwZWRDb250ZW50LnRleHQsIHBhaW50UmVjdC54KCksIGV4cGFuc2lv
bi5ob3Jpem9udGFsRXhwYW5zaW9uLCBleHBhbnNpb24uYmVoYXZpb3IsIG1fdGV4dEJveC5kaXJl
Y3Rpb24oKSwgbV9zdHlsZS5ydGxPcmRlcmluZygpID09IE9yZGVyOjpWaXN1YWwsIGNoYXJhY3Rl
clNjYW5Gb3JDb2RlUGF0aCB9OworCisgICAgZm9udENhc2NhZGUoKS5hZGp1c3RTZWxlY3Rpb25S
ZWN0Rm9yVGV4dChmYWxzZSwgcnVuLCBzZWxlY3Rpb25SZWN0LCBhZGp1c3RlZFN0YXJ0T2Zmc2V0
LCBhZGp1c3RlZFN0YXJ0T2Zmc2V0ICsgc2VsZWN0aW9uTGVuZ3RoKTsKKyAgICByZXR1cm4gc2Vs
ZWN0aW9uUmVjdDsKK30KKwordm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kRmls
bEZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvciwgQmFja2dyb3VuZFN0eWxlIGJhY2tncm91bmRTdHlsZSkKK3sKKyAgICBp
ZiAoc3RhcnRPZmZzZXQgPj0gZW5kT2Zmc2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQgPSBtX3BhaW50SW5mby5jb250ZXh0KCk7CisgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyIHsgY29udGV4dCB9OworICAgIHVwZGF0ZUdy
YXBoaWNzQ29udGV4dChjb250ZXh0LCBUZXh0UGFpbnRTdHlsZSB7IGNvbG9yIH0pOyAvLyBEb24n
dCBkcmF3IHRleHQgYXQgYWxsIQorCisgICAgYXV0byBzZWxlY3Rpb25SZWN0ID0gc2VsZWN0aW9u
UmVjdEZvclJhbmdlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworCiAgICAgaWYgKG1fcGFpbnRU
ZXh0UnVuLmxlbmd0aCgpID09IGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KSB7CiAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgcmVjb25zaWRlciByZS1tZWFzdXJpbmcgdGhlIGNvbnRlbnQgd2hl
biBub24td2hpdGVzcGFjZSBydW5zIGFyZSBqb2luZWQgdG9nZXRoZXIgKHNlZSB3ZWJraXQub3Jn
L2IvMjUxMzE4KS4KLSAgICAgICAgYXV0byB2aXN1YWxSaWdodCA9IHN0ZDo6bWF4KGFkanVzdGVk
U2VsZWN0aW9uUmVjdC5tYXhYKCksIHNlbGVjdGlvblJlY3QubWF4WCgpKTsKLSAgICAgICAgYWRq
dXN0ZWRTZWxlY3Rpb25SZWN0LnNoaWZ0TWF4WEVkZ2VUbyh2aXN1YWxSaWdodCk7CisgICAgICAg
IGF1dG8gdW5BZGp1c3RlZFNlbGVjdGlvblJlY3RNYXhYID0gTGF5b3V0VW5pdCB7IG1fcGFpbnRS
ZWN0LngoKSArIG1fbG9naWNhbFJlY3Qud2lkdGgoKSB9OworICAgICAgICBhdXRvIHZpc3VhbFJp
Z2h0ID0gc3RkOjptYXgoc2VsZWN0aW9uUmVjdC5tYXhYKCksIHVuQWRqdXN0ZWRTZWxlY3Rpb25S
ZWN0TWF4WCk7CisgICAgICAgIHNlbGVjdGlvblJlY3Quc2hpZnRNYXhYRWRnZVRvKHZpc3VhbFJp
Z2h0KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogU3VwcG9ydCBwYWludGluZyBjb21iaW5lZCB0
ZXh0LiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTM+
LgotICAgIGF1dG8gYmFja2dyb3VuZFJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGFkanVz
dGVkU2VsZWN0aW9uUmVjdCwgbV9kb2N1bWVudC5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICBh
dXRvIGJhY2tncm91bmRSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhzZWxlY3Rpb25SZWN0
LCBtX2RvY3VtZW50LmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIGlmIChiYWNrZ3JvdW5kU3R5
bGUgPT0gQmFja2dyb3VuZFN0eWxlOjpSb3VuZGVkKSB7CiAgICAgICAgIGJhY2tncm91bmRSZWN0
LmV4cGFuZCgtMSwgLTEpOwogICAgICAgICBiYWNrZ3JvdW5kUmVjdC5tb3ZlKDAuNSwgMC41KTsK
QEAgLTU0MywxNyArNjQ4LDE0IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3Vu
ZChjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQogICAgICAgICBjb250ZXh0LnNl
dEFscGhhKG1hcmtlZFRleHQuc3R5bGUuYWxwaGEpOwogICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4
dChjb250ZXh0LCBtYXJrZWRUZXh0LnN0eWxlLnRleHRTdHlsZXMpOwogCi0gICAgYXV0byYgZGlz
cGxheUJveCA9IHRleHRCb3goKS5ib3goKTsKLSAgICBhdXRvJiB0ZXh0Q29udGVudCA9IGRpc3Bs
YXlCb3gudGV4dCgpOwotICAgIGF1dG8gc2hvdWxkRXhwYW5kUGFpbnRpbmdSYW5nZSA9IHRleHRD
b250ZW50LmlzQXRTaGFwaW5nQm91bmRhcnlTdGFydCgpIHx8IHRleHRDb250ZW50LmlzQXRTaGFw
aW5nQm91bmRhcnlFbmQoKSB8fCB0ZXh0Q29udGVudC5pc0JldHdlZW5TaGFwaW5nQm91bmRhcmll
cygpOwotICAgIGlmIChzaG91bGRFeHBhbmRQYWludGluZ1JhbmdlICYmIHBhaW50Rm9yZWdyb3Vu
ZEZvclNoYXBpbmdSYW5nZSh0ZXh0UGFpbnRlcikpCisgICAgaWYgKGlzSW5zaWRlU2hhcGVkQ29u
dGVudCgpICYmIHBhaW50Rm9yZWdyb3VuZEZvclNoYXBlUmFuZ2UodGV4dFBhaW50ZXIpKQogICAg
ICAgICByZXR1cm47Ci0gICAgdGV4dFBhaW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVlZGVk
KGRpc3BsYXlCb3gsIG1fcGFpbnRJbmZvLCBtX3N0eWxlLCBtX3BhaW50VGV4dFJ1bik7CisgICAg
dGV4dFBhaW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVlZGVkKHRleHRCb3goKS5ib3goKSwg
bV9wYWludEluZm8sIG1fc3R5bGUsIG1fcGFpbnRUZXh0UnVuKTsKICAgICAvLyBUZXh0UGFpbnRl
ciB3YW50cyB0aGUgYm94IHJlY3RhbmdsZSBhbmQgdGV4dCBvcmlnaW4gb2YgdGhlIGVudGlyZSBs
aW5lIGJveC4KICAgICB0ZXh0UGFpbnRlci5wYWludFJhbmdlKG1fcGFpbnRUZXh0UnVuLCBtX3Bh
aW50UmVjdCwgdGV4dE9yaWdpbkZyb21QYWludFJlY3QobV9wYWludFJlY3QpLCBtYXJrZWRUZXh0
LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7CiB9CiAKLWJvb2wgVGV4dEJveFBh
aW50ZXI6OnBhaW50Rm9yZWdyb3VuZEZvclNoYXBpbmdSYW5nZShUZXh0UGFpbnRlciYgdGV4dFBh
aW50ZXIpCitib29sIFRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmRGb3JTaGFwZVJhbmdl
KFRleHRQYWludGVyJiB0ZXh0UGFpbnRlcikKIHsKICAgICBBU1NFUlQobV9kb2N1bWVudC5zZXR0
aW5ncygpLnRleHRTaGFwaW5nQWNyb3NzSW5saW5lQm94ZXMoKSk7CiAgICAgQVNTRVJUKG1fdGV4
dEJveC5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpOwpAQCAtNTYzLDY0ICs2NjUs
MjAgQEAgYm9vbCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kRm9yU2hhcGluZ1Jhbmdl
KFRleHRQYWludGVyJiB0ZXh0UGFpbnRlcikKICAgICBjb250ZXh0LnNhdmUoKTsKICAgICBjb250
ZXh0LmNsaXAobV9wYWludFJlY3QpOwogCi0gICAgU3RyaW5nQnVpbGRlciB0ZXh0Q29udGVudDsK
LSAgICBhdXRvIGNvbnRlbnRTdGFydFggPSAwLmY7Ci0KLSAgICBhdXRvIGJ1aWxkVGV4dEZvclNo
YXBpbmcgPSBbJl0gewotICAgICAgICBhdXRvIHNoYXBpbmdCb3VuZGFyeUl0ZXJhdG9yID0gbV90
ZXh0Qm94OwotICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gc2hhcGluZ0JvdW5kYXJ5SXRlcmF0
b3IuYm94KCk7CisgICAgYXV0byBzaGFwZWRDb250ZW50ID0gU2hhcGVkQ29udGVudCB7IH07Cisg
ICAgYnVpbGRUZXh0Rm9yU2hhcGluZyhzaGFwZWRDb250ZW50LCBtX3RleHRCb3gpOwogCi0gICAg
ICAgIC8vIDEuIEZpbmQgc2hhcGluZyBib3VuZGFyeSBzdGFydCB3aGVuIHdlIGFyZSBhdCB0aGUg
ZW5kIG9yIGluc2lkZSBhIHNoYXBlIHJhbmdlIChub3RlIHRoYXQgd2UgZGVhbCB3aXRoCi0gICAg
ICAgIC8vIHJ0bCBjb250ZW50IGhlbmNlIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gd2FsaykKLSAg
ICAgICAgLy8gMi4gV2FsayBmcm9tIHRoZSBzdGFydCB0byB0aGUgZW5kIGFuZCBidWlsZCB0aGUg
dGV4dCBjb250ZW50LgotICAgICAgICBpZiAoZGlzcGxheUJveC50ZXh0KCkuaXNBdFNoYXBpbmdC
b3VuZGFyeUVuZCgpIHx8IGRpc3BsYXlCb3gudGV4dCgpLmlzQmV0d2VlblNoYXBpbmdCb3VuZGFy
aWVzKCkpIHsKLSAgICAgICAgICAgIGZvciAoOyAhc2hhcGluZ0JvdW5kYXJ5SXRlcmF0b3IuYXRF
bmQoKTsgc2hhcGluZ0JvdW5kYXJ5SXRlcmF0b3IudHJhdmVyc2VOZXh0TGVhZk9uTGluZSgpKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IHNoYXBpbmdCb3VuZGFyeUl0ZXJh
dG9yLmJveCgpOwotICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5Qm94LmlzVGV4dCgpICYmIGRp
c3BsYXlCb3gudGV4dCgpLmlzQXRTaGFwaW5nQm91bmRhcnlTdGFydCgpKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChz
aGFwaW5nQm91bmRhcnlJdGVyYXRvci5hdEVuZCgpIHx8ICFzaGFwaW5nQm91bmRhcnlJdGVyYXRv
ci5pc1RleHQoKSkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKDsgIXNoYXBpbmdCb3VuZGFy
eUl0ZXJhdG9yLmF0RW5kKCk7IHNoYXBpbmdCb3VuZGFyeUl0ZXJhdG9yLnRyYXZlcnNlUHJldmlv
dXNMZWFmT25MaW5lKCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBzaGFwaW5n
Qm91bmRhcnlJdGVyYXRvci5ib3goKTsKLSAgICAgICAgICAgIGlmIChkaXNwbGF5Qm94LmlzVGV4
dCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgdGV4dCA9IGRpc3BsYXlCb3gudGV4dCgpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKHNoYXBpbmdCb3VuZGFyeUl0ZXJhdG9yLmRpcmVjdGlvbigp
ID09IFRleHREaXJlY3Rpb246OkxUUikgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnQuY2xlYXIoKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHRleHRDb250ZW50LmFwcGVuZCh0ZXh0LnJlbmRlcmVkQ29udGVudCgpKTsKLSAgICAg
ICAgICAgICAgICBpZiAodGV4dC5pc0F0U2hhcGluZ0JvdW5kYXJ5RW5kKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGVudFN0YXJ0WCA9IGRpc3BsYXlCb3gudmlzdWFsUmVjdElnbm9yaW5n
QmxvY2tEaXJlY3Rpb24oKS54KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2Ugc2hv
dWxkIGFsd2F5cyBmaW5kIHRoZSBib3VuZGFyeSBlbmQuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICB0ZXh0Q29udGVudC5jbGVhcigpOwotICAgIH07Ci0gICAgYnVpbGRU
ZXh0Rm9yU2hhcGluZygpOwotCi0gICAgaWYgKHRleHRDb250ZW50LmlzRW1wdHkoKSkKKyAgICBp
ZiAoc2hhcGVkQ29udGVudC50ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgYXV0byBwYWludFJlY3QgPSBtX3BhaW50UmVjdDsKLSAgICBwYWludFJlY3Quc2hpZnRY
RWRnZVRvKG1fcGFpbnRPZmZzZXQueCgpICsgY29udGVudFN0YXJ0WCk7CisgICAgcGFpbnRSZWN0
LnNoaWZ0WEVkZ2VUbyhtX3BhaW50T2Zmc2V0LngoKSArIHNoYXBlZENvbnRlbnQudmlzdWFsTGVm
dCk7CiAKICAgICBhdXRvIGNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCA9IHRydWU7CiAgICAgYXV0
byBleHBhbnNpb24gPSBtX3RleHRCb3guYm94KCkuZXhwYW5zaW9uKCk7Ci0gICAgYXV0byBydW4g
PSBUZXh0UnVuIHsgdGV4dENvbnRlbnQsIHBhaW50UmVjdC54KCksIGV4cGFuc2lvbi5ob3Jpem9u
dGFsRXhwYW5zaW9uLCBleHBhbnNpb24uYmVoYXZpb3IsIG1fdGV4dEJveC5kaXJlY3Rpb24oKSwg
bV9zdHlsZS5ydGxPcmRlcmluZygpID09IE9yZGVyOjpWaXN1YWwsIGNoYXJhY3RlclNjYW5Gb3JD
b2RlUGF0aCB9OworICAgIGF1dG8gcnVuID0gVGV4dFJ1biB7IHNoYXBlZENvbnRlbnQudGV4dCwg
cGFpbnRSZWN0LngoKSwgZXhwYW5zaW9uLmhvcml6b250YWxFeHBhbnNpb24sIGV4cGFuc2lvbi5i
ZWhhdmlvciwgbV90ZXh0Qm94LmRpcmVjdGlvbigpLCBtX3N0eWxlLnJ0bE9yZGVyaW5nKCkgPT0g
T3JkZXI6OlZpc3VhbCwgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoIH07CiAKLSAgICB0ZXh0UGFp
bnRlci5wYWludFJhbmdlKHJ1biwgcGFpbnRSZWN0LCB0ZXh0T3JpZ2luRnJvbVBhaW50UmVjdChw
YWludFJlY3QpLCAwLCB0ZXh0Q29udGVudC5sZW5ndGgoKSk7CisgICAgdGV4dFBhaW50ZXIucGFp
bnRSYW5nZShydW4sIHBhaW50UmVjdCwgdGV4dE9yaWdpbkZyb21QYWludFJlY3QocGFpbnRSZWN0
KSwgMCwgc2hhcGVkQ29udGVudC50ZXh0Lmxlbmd0aCgpKTsKICAgICBjb250ZXh0LnJlc3RvcmUo
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEzMjksNCArMTM4NywxMCBAQCBGbG9hdFBvaW50
IFRleHRCb3hQYWludGVyOjp0ZXh0T3JpZ2luRnJvbVBhaW50UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHBhaW50UmVjdCkgYwogICAgIHJldHVybiB0ZXh0T3JpZ2luOwogfQogCitib29sIFRleHRCb3hQ
YWludGVyOjppc0luc2lkZVNoYXBlZENvbnRlbnQoKSBjb25zdAoreworICAgIGF1dG8mIHRleHRD
b250ZW50ID0gdGV4dEJveCgpLmJveCgpLnRleHQoKTsKKyAgICByZXR1cm4gdGV4dENvbnRlbnQu
aXNBdFNoYXBpbmdCb3VuZGFyeVN0YXJ0KCkgfHwgdGV4dENvbnRlbnQuaXNBdFNoYXBpbmdCb3Vu
ZGFyeUVuZCgpIHx8IHRleHRDb250ZW50LmlzQmV0d2VlblNoYXBpbmdCb3VuZGFyaWVzKCk7Cit9
CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRl
ci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmgKaW5kZXggMjVm
ZWM4YWFlNjQzLi45NmZlMmZhYWQ4YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0Qm94UGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
Qm94UGFpbnRlci5oCkBAIC02OSwxMyArNjksMTQgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcGFp
bnRQbGF0Zm9ybURvY3VtZW50TWFya2VycygpOwogCiAgICAgdm9pZCBwYWludEZvcmVncm91bmQo
Y29uc3QgU3R5bGVkTWFya2VkVGV4dCYpOwotICAgIGJvb2wgcGFpbnRGb3JlZ3JvdW5kRm9yU2hh
cGluZ1JhbmdlKFRleHRQYWludGVyJik7CisgICAgYm9vbCBwYWludEZvcmVncm91bmRGb3JTaGFw
ZVJhbmdlKFRleHRQYWludGVyJik7CiAgICAgVGV4dERlY29yYXRpb25QYWludGVyIGNyZWF0ZURl
Y29yYXRpb25QYWludGVyKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
KTsKICAgICB2b2lkIHBhaW50QmFja2dyb3VuZERlY29yYXRpb25zKFRleHREZWNvcmF0aW9uUGFp
bnRlciYsIGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmLCBjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2
b2lkIHBhaW50Rm9yZWdyb3VuZERlY29yYXRpb25zKFRleHREZWNvcmF0aW9uUGFpbnRlciYsIGNv
bnN0IFN0eWxlZE1hcmtlZFRleHQmLCBjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIHBhaW50
Q29tcG9zaXRpb25VbmRlcmxpbmUoY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmLCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0OjpSYWRpaSYsIGJvb2wgaGFzTGl2ZUNvbnZlcnNpb24pOwogICAgIHZv
aWQgZmlsbENvbXBvc2l0aW9uVW5kZXJsaW5lKGZsb2F0IHN0YXJ0LCBmbG9hdCB3aWR0aCwgY29u
c3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSYs
IGJvb2wgaGFzTGl2ZUNvbnZlcnNpb24pIGNvbnN0OwogICAgIHZvaWQgcGFpbnRQbGF0Zm9ybURv
Y3VtZW50TWFya2VyKGNvbnN0IE1hcmtlZFRleHQmKTsKKyAgICBMYXlvdXRSZWN0IHNlbGVjdGlv
blJlY3RGb3JSYW5nZSh1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KSBj
b25zdDsKIAogICAgIGZsb2F0IHRleHRQb3NpdGlvbigpOwogICAgIEZsb2F0UmVjdCBjb21wdXRl
UGFpbnRSZWN0KGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCk7CkBAIC04NSw2ICs4Niw3
IEBAIHByb3RlY3RlZDoKICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUoKSBjb25z
dDsKICAgICBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUu
d3JpdGluZ01vZGUoKTsgfQogICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbkZyb21QYWludFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgYm9vbCBpc0luc2lkZVNoYXBlZENvbnRlbnQo
KSBjb25zdDsKIAogICAgIHN0cnVjdCBEZWNvcmF0aW5nQm94IHsKICAgICAgICAgSW5saW5lSXRl
cmF0b3I6OklubGluZUJveEl0ZXJhdG9yIGlubGluZUJveDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>476802</attachid>
            <date>2025-09-19 08:19:50 -0700</date>
            <delta_ts>2025-09-19 10:23:51 -0700</delta_ts>
            <desc>[fast-cq]Patch</desc>
            <filename>bug-299129-20250919081949.patch</filename>
            <type>text/plain</type>
            <size>16149</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">RnJvbSA1Zjg4NGMyMGVjMGNiOGFiODdjMzllOGI4NmY5OTZkYTNlY2RmMDdmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGFuIEJhcmFkbGF5IDx6YWxhbkBhcHBsZS5jb20+CkRhdGU6
IFRodSwgMTggU2VwIDIwMjUgMTU6MDY6NDEgLTA3MDAKU3ViamVjdDogW1BBVENIXSBbdGV4dCBz
aGFwaW5nXSBTZWxlY3Rpb24gcGFpbnQgcmVjdCBzaG91bGQgZm9sbG93IHNoYXBlZAogY29udGVu
dCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk5MTI5CgpSZXZpZXdl
ZCBieSBBbnR0aSBLb2l2aXN0by4KClRoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IHNlbGVjdGlvbiBm
b2xsb3dzIHRoZSBzaGFwZWQgKHBhaW50ZWQpIGNvbnRlbnQuCgoxLiBNYWtlIGEgZGVkaWNhdGVk
IGZ1bmN0aW9uIHRvIGJ1aWxkIHRleHQgZm9yIHNoYXBpbmcgYWNyb3NzIGRpc3BsYXkgYm94ZXMK
KHBhaW50IGFuZCB0ZXh0IHNlbGVjdGlvbiBjYWxsIHRoaXMgZnVuY3Rpb24pCjIuIE1vdmUgc2Vs
ZWN0aW9uIGFkanVzdG1lbnQgbG9naWMgdG8gYSBmdW5jdGlvbiAoc2VsZWN0aW9uUmVjdEZvclJh
bmdlKQp3aGVyZSBpbiBjYXNlIG9mIHNoYXBpbmcsIHdlIHdvdWxkIGNhbGwgJ2J1aWxkVGV4dEZv
clNoYXBpbmcnIGFuZAphZGp1c3QgdGhlIHNlbGVjdGlvbiByZWN0IGFjY29yZGluZ2x5LgoKKiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwOgooV2ViQ29yZTo6YnVp
bGRUZXh0Rm9yU2hhcGluZyk6CihXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6c2VsZWN0aW9uUmVj
dEZvclJhbmdlIGNvbnN0KToKKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91
bmRGaWxsRm9yUmFuZ2UpOgooV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3Vu
ZCk6CihXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kRm9yU2hhcGVSYW5n
ZSk6CihXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6aXNJbnNpZGVTaGFwZWRDb250ZW50IGNvbnN0
KToKKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmRGb3JTaGFwaW5nUmFu
Z2UpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5o
OgotLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAgfCAyMDIg
KysrKysrKysrKysrKy0tLS0tLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFp
bnRlci5oICAgfCAgIDQgKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTM2IGluc2VydGlvbnMoKyksIDcw
IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
Qm94UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIu
Y3BwCmluZGV4IDYyYmY2MjQ3YWYwNi4uYTJkMmRjOWFjMzM5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAKQEAgLTk1LDYgKzk1LDg1IEBAIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPGJvb2w+IGVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUoY29uc3QgUmVu
ZGVyVGV4dCYgcmVuZGVyCiAgICAgcmV0dXJuIGlzQWJvdmU7CiB9CiAKK3N0cnVjdCBTaGFwZWRD
b250ZW50IHsKKyAgICBTdHJpbmdCdWlsZGVyIHRleHQ7CisgICAgZmxvYXQgdmlzdWFsTGVmdCB7
IDAuZiB9OyAvLyB2aXN1YWwgbGVmdCBvZiB0aGUgc2hhcGVkIGNvbnRlbnQuCisgICAgc2l6ZV90
IHRleHRCb3hTdGFydE9mZnNldCB7IDAgfTsgLy8gdGV4dCBib3gncyBwb3NpdGlvbiByZWxhdGl2
ZSB0byB0aGUgc2hhcGVkIGNvbnRlbnQuCisgICAgZmxvYXQgdGV4dEJveFZpc3VhbExlZnQgeyAw
LmYgfTsgLy8gdGV4dCBib3gncyBsZWZ0IHJlbGF0aXZlIHRvIHRoZSB2aXN1YWwgbGVmdCBvZiB0
aGUgc2hhcGVkIGNvbnRlbnQuCit9Oworc3RhdGljIHZvaWQgYnVpbGRUZXh0Rm9yU2hhcGluZyhT
aGFwZWRDb250ZW50JiBzaGFwZWRDb250ZW50LCBJbmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0
aCB0ZXh0Qm94LCBib29sIG5lZWRzVGV4dEJveFZpc3VhbExlZnQgPSBmYWxzZSkKK3sKKyAgICBB
U1NFUlQodGV4dEJveC5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpOworCisgICAg
YXV0byBzaGFwaW5nQm91bmRhcnlJdGVyYXRvciA9IHRleHRCb3g7CisgICAgLy8gMS4gRmluZCBz
aGFwaW5nIGJvdW5kYXJ5IHN0YXJ0IHdoZW4gd2UgYXJlIGF0IHRoZSBlbmQgb3IgaW5zaWRlIGEg
c2hhcGUgcmFuZ2UgKG5vdGUgdGhhdCB3ZSBkZWFsIHdpdGgKKyAgICAvLyBydGwgY29udGVudCBo
ZW5jZSB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHdhbGspCisgICAgLy8gMi4gV2FsayBmcm9tIHRo
ZSBzdGFydCB0byB0aGUgZW5kIGFuZCBidWlsZCB0aGUgdGV4dCBjb250ZW50LgorCisgICAgYXV0
byBtb3ZlVG9TaGFwaW5nQm91bmRhcnlTdGFydCA9IFsmXSB7CisgICAgICAgIGlmIChzaGFwaW5n
Qm91bmRhcnlJdGVyYXRvci5ib3goKS50ZXh0KCkuaXNBdFNoYXBpbmdCb3VuZGFyeVN0YXJ0KCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2hhcGluZ0JvdW5kYXJ5SXRlcmF0b3Iu
dHJhdmVyc2VOZXh0TGVhZk9uTGluZSgpOworICAgICAgICBmb3IgKDsgIXNoYXBpbmdCb3VuZGFy
eUl0ZXJhdG9yLmF0RW5kKCk7IHNoYXBpbmdCb3VuZGFyeUl0ZXJhdG9yLnRyYXZlcnNlTmV4dExl
YWZPbkxpbmUoKSkgeworICAgICAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IHNoYXBpbmdCb3Vu
ZGFyeUl0ZXJhdG9yLmJveCgpOworICAgICAgICAgICAgaWYgKGRpc3BsYXlCb3guaXNUZXh0KCkp
IHsKKyAgICAgICAgICAgICAgICBzaGFwZWRDb250ZW50LnRleHRCb3hTdGFydE9mZnNldCArPSBk
aXNwbGF5Qm94LnRleHQoKS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlzcGxheUJv
eC50ZXh0KCkuaXNBdFNoYXBpbmdCb3VuZGFyeVN0YXJ0KCkpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBtb3ZlVG9TaGFw
aW5nQm91bmRhcnlTdGFydCgpOworCisgICAgaWYgKHNoYXBpbmdCb3VuZGFyeUl0ZXJhdG9yLmF0
RW5kKCkgfHwgIXNoYXBpbmdCb3VuZGFyeUl0ZXJhdG9yLmlzVGV4dCgpKSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBi
dWlsZFRleHRDb250ZW50ID0gWyZdIHsKKyAgICAgICAgZm9yICg7ICFzaGFwaW5nQm91bmRhcnlJ
dGVyYXRvci5hdEVuZCgpOyBzaGFwaW5nQm91bmRhcnlJdGVyYXRvci50cmF2ZXJzZVByZXZpb3Vz
TGVhZk9uTGluZSgpKSB7CisgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gc2hhcGluZ0Jv
dW5kYXJ5SXRlcmF0b3IuYm94KCk7CisgICAgICAgICAgICBpZiAoIWRpc3BsYXlCb3guaXNUZXh0
KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRvJiB0ZXh0ID0g
ZGlzcGxheUJveC50ZXh0KCk7CisgICAgICAgICAgICBpZiAoc2hhcGluZ0JvdW5kYXJ5SXRlcmF0
b3IuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKSB7CisgICAgICAgICAgICAgICAg
c2hhcGVkQ29udGVudC50ZXh0LmNsZWFyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBzaGFwZWRDb250ZW50LnRleHQuYXBwZW5kKHRleHQu
cmVuZGVyZWRDb250ZW50KCkpOworICAgICAgICAgICAgaWYgKHRleHQuaXNBdFNoYXBpbmdCb3Vu
ZGFyeUVuZCgpKSB7CisgICAgICAgICAgICAgICAgc2hhcGVkQ29udGVudC52aXN1YWxMZWZ0ID0g
ZGlzcGxheUJveC52aXN1YWxSZWN0SWdub3JpbmdCbG9ja0RpcmVjdGlvbigpLngoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8g
V2Ugc2hvdWxkIGFsd2F5cyBmaW5kIHRoZSBib3VuZGFyeSBlbmQuCisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBzaGFwZWRDb250ZW50LnRleHQuY2xlYXIoKTsKKyAgICB9
OworICAgIGJ1aWxkVGV4dENvbnRlbnQoKTsKKworICAgIGlmIChzaGFwZWRDb250ZW50LnRleHQu
aXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgYXV0byBjb21wdXRlVmlzdWFsTGVmdEZvclRleHRCb3ggPSBbJl0g
eworICAgICAgICBpZiAoIW5lZWRzVGV4dEJveFZpc3VhbExlZnQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIC8vIFN0YXJ0aW5nIGZyb20gdmlzdWFsIGxlZnQsIHdhbGsgYWxsIHRoZSB3
YXkgdG8gdGhlIGN1cnJlbnQgdGV4dCBib3guCisgICAgICAgIGZvciAoOyAhc2hhcGluZ0JvdW5k
YXJ5SXRlcmF0b3IuYXRFbmQoKTsgc2hhcGluZ0JvdW5kYXJ5SXRlcmF0b3IudHJhdmVyc2VOZXh0
TGVhZk9uTGluZSgpKSB7CisgICAgICAgICAgICBpZiAoc2hhcGluZ0JvdW5kYXJ5SXRlcmF0b3Ig
PT0gdGV4dEJveCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBhdXRvJiBk
aXNwbGF5Qm94ID0gc2hhcGluZ0JvdW5kYXJ5SXRlcmF0b3IuYm94KCk7CisgICAgICAgICAgICBp
ZiAoZGlzcGxheUJveC5pc1RleHQoKSkKKyAgICAgICAgICAgICAgICBzaGFwZWRDb250ZW50LnRl
eHRCb3hWaXN1YWxMZWZ0ICs9IGRpc3BsYXlCb3gudmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJl
Y3Rpb24oKS53aWR0aCgpOworICAgICAgICB9CisgICAgfTsKKyAgICBjb21wdXRlVmlzdWFsTGVm
dEZvclRleHRCb3goKTsKK30KKwogVGV4dEJveFBhaW50ZXI6OlRleHRCb3hQYWludGVyKGNvbnN0
IExheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50LCBjb25zdCBJ
bmxpbmVEaXNwbGF5OjpCb3gmIGJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgIDogbV90
ZXh0Qm94KElubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoIHsgaW5saW5lQ29udGVudCwgaW5s
aW5lQ29udGVudC5pbmRleEZvckJveChib3gpIH0pCiAgICAgLCBtX3JlbmRlcmVyKGRvd25jYXN0
PFJlbmRlclRleHQ+KG1fdGV4dEJveC5yZW5kZXJlcigpKSkKQEAgLTQ3MiwxNSArNTUxLDggQEAg
dm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kRmlsbCgpCiAgICAgICAgIHBhaW50
QmFja2dyb3VuZEZpbGxGb3JSYW5nZShtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0
LmVuZE9mZnNldCwgbWFya2VkVGV4dC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IsIEJhY2tncm91bmRT
dHlsZTo6Tm9ybWFsKTsKIH0KIAotdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5k
RmlsbEZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvciwgQmFja2dyb3VuZFN0eWxlIGJhY2tncm91bmRTdHlsZSkKK0xheW91
dFJlY3QgVGV4dEJveFBhaW50ZXI6OnNlbGVjdGlvblJlY3RGb3JSYW5nZSh1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KSBjb25zdAogewotICAgIGlmIChzdGFydE9mZnNl
dCA+PSBlbmRPZmZzZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCA9IG1fcGFpbnRJbmZvLmNvbnRleHQoKTsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIgeyBjb250ZXh0IH07Ci0gICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0
KGNvbnRleHQsIFRleHRQYWludFN0eWxlIHsgY29sb3IgfSk7IC8vIERvbid0IGRyYXcgdGV4dCBh
dCBhbGwhCi0KICAgICAvLyBOb3RlIHRoYXQgaWYgdGhlIHRleHQgaXMgdHJ1bmNhdGVkLCB3ZSBs
ZXQgdGhlIHRoaW5nIGJlaW5nIHBhaW50ZWQgaW4gdGhlIHRydW5jYXRpb24KICAgICAvLyBkcmF3
IGl0cyBvd24gaGlnaGxpZ2h0LgogICAgIGF1dG8gbGluZUJveCA9IG1ha2VJdGVyYXRvcigpLT5s
aW5lQm94KCk7CkBAIC00OTEsMTYgKzU2Myw0OSBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWlu
dEJhY2tncm91bmRGaWxsRm9yUmFuZ2UodW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkCiAg
ICAgYXV0byBkZWx0YVkgPSBMYXlvdXRVbml0IHsgd3JpdGluZ01vZGUoKS5pc0xpbmVJbnZlcnRl
ZCgpID8gc2VsZWN0aW9uQm90dG9tIC0gbV9sb2dpY2FsUmVjdC5tYXhZKCkgOiBtX2xvZ2ljYWxS
ZWN0LnkoKSAtIHNlbGVjdGlvblRvcCB9OwogICAgIGF1dG8gc2VsZWN0aW9uSGVpZ2h0ID0gTGF5
b3V0VW5pdCB7IHN0ZDo6bWF4KDAuZiwgc2VsZWN0aW9uQm90dG9tIC0gc2VsZWN0aW9uVG9wKSB9
OwogICAgIGF1dG8gc2VsZWN0aW9uUmVjdCA9IExheW91dFJlY3QgeyBMYXlvdXRVbml0KG1fcGFp
bnRSZWN0LngoKSksIExheW91dFVuaXQobV9wYWludFJlY3QueSgpIC0gZGVsdGFZKSwgTGF5b3V0
VW5pdChtX2xvZ2ljYWxSZWN0LndpZHRoKCkpLCBzZWxlY3Rpb25IZWlnaHQgfTsKLSAgICBhdXRv
IGFkanVzdGVkU2VsZWN0aW9uUmVjdCA9IHNlbGVjdGlvblJlY3Q7Ci0gICAgZm9udENhc2NhZGUo
KS5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChtX3JlbmRlcmVyLmNhblVzZVNpbXBsaWZpZWRU
ZXh0TWVhc3VyaW5nKCkudmFsdWVfb3IoZmFsc2UpLCBtX3BhaW50VGV4dFJ1biwgYWRqdXN0ZWRT
ZWxlY3Rpb25SZWN0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgIGlmIChpc0luc2lk
ZVNoYXBlZENvbnRlbnQoKSkgeworICAgICAgICBhdXRvIHNoYXBlZENvbnRlbnQgPSBTaGFwZWRD
b250ZW50IHsgfTsKKworICAgICAgICBidWlsZFRleHRGb3JTaGFwaW5nKHNoYXBlZENvbnRlbnQs
IG1fdGV4dEJveCwgdHJ1ZSk7CisgICAgICAgIHNlbGVjdGlvblJlY3Quc2V0WChzZWxlY3Rpb25S
ZWN0LngoKSAtIHNoYXBlZENvbnRlbnQudGV4dEJveFZpc3VhbExlZnQpOworICAgICAgICBhdXRv
IHNlbGVjdGlvbkxlbmd0aCA9IGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0OworICAgICAgICBhdXRv
IGFkanVzdGVkU3RhcnRPZmZzZXQgPSBzaGFwZWRDb250ZW50LnRleHRCb3hTdGFydE9mZnNldCAr
IHN0YXJ0T2Zmc2V0OworCisgICAgICAgIGF1dG8gY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoID0g
dHJ1ZTsKKyAgICAgICAgYXV0byBleHBhbnNpb24gPSBtX3RleHRCb3guYm94KCkuZXhwYW5zaW9u
KCk7CisgICAgICAgIGF1dG8gcGFpbnRSZWN0ID0gbV9wYWludFJlY3Q7CisgICAgICAgIHBhaW50
UmVjdC5zaGlmdFhFZGdlVG8oc2hhcGVkQ29udGVudC52aXN1YWxMZWZ0KTsKKyAgICAgICAgYXV0
byBydW4gPSBUZXh0UnVuIHsgc2hhcGVkQ29udGVudC50ZXh0LCBwYWludFJlY3QueCgpLCBleHBh
bnNpb24uaG9yaXpvbnRhbEV4cGFuc2lvbiwgZXhwYW5zaW9uLmJlaGF2aW9yLCBtX3RleHRCb3gu
ZGlyZWN0aW9uKCksIG1fc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBPcmRlcjo6VmlzdWFsLCBjaGFy
YWN0ZXJTY2FuRm9yQ29kZVBhdGggfTsKKworICAgICAgICBmb250Q2FzY2FkZSgpLmFkanVzdFNl
bGVjdGlvblJlY3RGb3JUZXh0KGZhbHNlLCBydW4sIHNlbGVjdGlvblJlY3QsIGFkanVzdGVkU3Rh
cnRPZmZzZXQsIGFkanVzdGVkU3RhcnRPZmZzZXQgKyBzZWxlY3Rpb25MZW5ndGgpOworICAgICAg
ICByZXR1cm4gc2VsZWN0aW9uUmVjdDsKKyAgICB9CisKKyAgICBmb250Q2FzY2FkZSgpLmFkanVz
dFNlbGVjdGlvblJlY3RGb3JUZXh0KG1fcmVuZGVyZXIuY2FuVXNlU2ltcGxpZmllZFRleHRNZWFz
dXJpbmcoKS52YWx1ZV9vcihmYWxzZSksIG1fcGFpbnRUZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICByZXR1cm4gc2VsZWN0aW9uUmVjdDsKK30KKwor
dm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kRmlsbEZvclJhbmdlKHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvciwgQmFj
a2dyb3VuZFN0eWxlIGJhY2tncm91bmRTdHlsZSkKK3sKKyAgICBpZiAoc3RhcnRPZmZzZXQgPj0g
ZW5kT2Zmc2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQgPSBtX3BhaW50SW5mby5jb250ZXh0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyIHsgY29udGV4dCB9OworICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250
ZXh0LCBUZXh0UGFpbnRTdHlsZSB7IGNvbG9yIH0pOyAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxs
IQorCisgICAgYXV0byBzZWxlY3Rpb25SZWN0ID0gc2VsZWN0aW9uUmVjdEZvclJhbmdlKHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQpOworCiAgICAgaWYgKG1fcGFpbnRUZXh0UnVuLmxlbmd0aCgpID09
IGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
cmVjb25zaWRlciByZS1tZWFzdXJpbmcgdGhlIGNvbnRlbnQgd2hlbiBub24td2hpdGVzcGFjZSBy
dW5zIGFyZSBqb2luZWQgdG9nZXRoZXIgKHNlZSB3ZWJraXQub3JnL2IvMjUxMzE4KS4KLSAgICAg
ICAgYXV0byB2aXN1YWxSaWdodCA9IHN0ZDo6bWF4KGFkanVzdGVkU2VsZWN0aW9uUmVjdC5tYXhY
KCksIHNlbGVjdGlvblJlY3QubWF4WCgpKTsKLSAgICAgICAgYWRqdXN0ZWRTZWxlY3Rpb25SZWN0
LnNoaWZ0TWF4WEVkZ2VUbyh2aXN1YWxSaWdodCk7CisgICAgICAgIGF1dG8gdW5BZGp1c3RlZFNl
bGVjdGlvblJlY3RNYXhYID0gTGF5b3V0VW5pdCB7IG1fcGFpbnRSZWN0LngoKSArIG1fbG9naWNh
bFJlY3Qud2lkdGgoKSB9OworICAgICAgICBhdXRvIHZpc3VhbFJpZ2h0ID0gc3RkOjptYXgoc2Vs
ZWN0aW9uUmVjdC5tYXhYKCksIHVuQWRqdXN0ZWRTZWxlY3Rpb25SZWN0TWF4WCk7CisgICAgICAg
IHNlbGVjdGlvblJlY3Quc2hpZnRNYXhYRWRnZVRvKHZpc3VhbFJpZ2h0KTsKICAgICB9CiAKICAg
ICAvLyBGSVhNRTogU3VwcG9ydCBwYWludGluZyBjb21iaW5lZCB0ZXh0LiBTZWUgPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTM+LgotICAgIGF1dG8gYmFja2dy
b3VuZFJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGFkanVzdGVkU2VsZWN0aW9uUmVjdCwg
bV9kb2N1bWVudC5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICBhdXRvIGJhY2tncm91bmRSZWN0
ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhzZWxlY3Rpb25SZWN0LCBtX2RvY3VtZW50LmRldmlj
ZVNjYWxlRmFjdG9yKCkpOwogICAgIGlmIChiYWNrZ3JvdW5kU3R5bGUgPT0gQmFja2dyb3VuZFN0
eWxlOjpSb3VuZGVkKSB7CiAgICAgICAgIGJhY2tncm91bmRSZWN0LmV4cGFuZCgtMSwgLTEpOwog
ICAgICAgICBiYWNrZ3JvdW5kUmVjdC5tb3ZlKDAuNSwgMC41KTsKQEAgLTU0MywxNyArNjQ4LDE0
IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZChjb25zdCBTdHlsZWRNYXJr
ZWRUZXh0JiBtYXJrZWRUZXh0KQogICAgICAgICBjb250ZXh0LnNldEFscGhhKG1hcmtlZFRleHQu
c3R5bGUuYWxwaGEpOwogICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCBtYXJrZWRU
ZXh0LnN0eWxlLnRleHRTdHlsZXMpOwogCi0gICAgYXV0byYgZGlzcGxheUJveCA9IHRleHRCb3go
KS5ib3goKTsKLSAgICBhdXRvJiB0ZXh0Q29udGVudCA9IGRpc3BsYXlCb3gudGV4dCgpOwotICAg
IGF1dG8gc2hvdWxkRXhwYW5kUGFpbnRpbmdSYW5nZSA9IHRleHRDb250ZW50LmlzQXRTaGFwaW5n
Qm91bmRhcnlTdGFydCgpIHx8IHRleHRDb250ZW50LmlzQXRTaGFwaW5nQm91bmRhcnlFbmQoKSB8
fCB0ZXh0Q29udGVudC5pc0JldHdlZW5TaGFwaW5nQm91bmRhcmllcygpOwotICAgIGlmIChzaG91
bGRFeHBhbmRQYWludGluZ1JhbmdlICYmIHBhaW50Rm9yZWdyb3VuZEZvclNoYXBpbmdSYW5nZSh0
ZXh0UGFpbnRlcikpCisgICAgaWYgKGlzSW5zaWRlU2hhcGVkQ29udGVudCgpICYmIHBhaW50Rm9y
ZWdyb3VuZEZvclNoYXBlUmFuZ2UodGV4dFBhaW50ZXIpKQogICAgICAgICByZXR1cm47Ci0gICAg
dGV4dFBhaW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVlZGVkKGRpc3BsYXlCb3gsIG1fcGFp
bnRJbmZvLCBtX3N0eWxlLCBtX3BhaW50VGV4dFJ1bik7CisgICAgdGV4dFBhaW50ZXIuc2V0R2x5
cGhEaXNwbGF5TGlzdElmTmVlZGVkKHRleHRCb3goKS5ib3goKSwgbV9wYWludEluZm8sIG1fc3R5
bGUsIG1fcGFpbnRUZXh0UnVuKTsKICAgICAvLyBUZXh0UGFpbnRlciB3YW50cyB0aGUgYm94IHJl
Y3RhbmdsZSBhbmQgdGV4dCBvcmlnaW4gb2YgdGhlIGVudGlyZSBsaW5lIGJveC4KICAgICB0ZXh0
UGFpbnRlci5wYWludFJhbmdlKG1fcGFpbnRUZXh0UnVuLCBtX3BhaW50UmVjdCwgdGV4dE9yaWdp
bkZyb21QYWludFJlY3QobV9wYWludFJlY3QpLCBtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0LCBtYXJr
ZWRUZXh0LmVuZE9mZnNldCk7CiB9CiAKLWJvb2wgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdy
b3VuZEZvclNoYXBpbmdSYW5nZShUZXh0UGFpbnRlciYgdGV4dFBhaW50ZXIpCitib29sIFRleHRC
b3hQYWludGVyOjpwYWludEZvcmVncm91bmRGb3JTaGFwZVJhbmdlKFRleHRQYWludGVyJiB0ZXh0
UGFpbnRlcikKIHsKICAgICBBU1NFUlQobV9kb2N1bWVudC5zZXR0aW5ncygpLnRleHRTaGFwaW5n
QWNyb3NzSW5saW5lQm94ZXMoKSk7CiAgICAgQVNTRVJUKG1fdGV4dEJveC5kaXJlY3Rpb24oKSA9
PSBUZXh0RGlyZWN0aW9uOjpSVEwpOwpAQCAtNTYzLDY0ICs2NjUsMjAgQEAgYm9vbCBUZXh0Qm94
UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kRm9yU2hhcGluZ1JhbmdlKFRleHRQYWludGVyJiB0ZXh0
UGFpbnRlcikKICAgICBjb250ZXh0LnNhdmUoKTsKICAgICBjb250ZXh0LmNsaXAobV9wYWludFJl
Y3QpOwogCi0gICAgU3RyaW5nQnVpbGRlciB0ZXh0Q29udGVudDsKLSAgICBhdXRvIGNvbnRlbnRT
dGFydFggPSAwLmY7Ci0KLSAgICBhdXRvIGJ1aWxkVGV4dEZvclNoYXBpbmcgPSBbJl0gewotICAg
ICAgICBhdXRvIHNoYXBpbmdCb3VuZGFyeUl0ZXJhdG9yID0gbV90ZXh0Qm94OwotICAgICAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gc2hhcGluZ0JvdW5kYXJ5SXRlcmF0b3IuYm94KCk7Ci0KLSAgICAg
ICAgLy8gMS4gRmluZCBzaGFwaW5nIGJvdW5kYXJ5IHN0YXJ0IHdoZW4gd2UgYXJlIGF0IHRoZSBl
bmQgb3IgaW5zaWRlIGEgc2hhcGUgcmFuZ2UgKG5vdGUgdGhhdCB3ZSBkZWFsIHdpdGgKLSAgICAg
ICAgLy8gcnRsIGNvbnRlbnQgaGVuY2UgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB3YWxrKQotICAg
ICAgICAvLyAyLiBXYWxrIGZyb20gdGhlIHN0YXJ0IHRvIHRoZSBlbmQgYW5kIGJ1aWxkIHRoZSB0
ZXh0IGNvbnRlbnQuCi0gICAgICAgIGlmIChkaXNwbGF5Qm94LnRleHQoKS5pc0F0U2hhcGluZ0Jv
dW5kYXJ5RW5kKCkgfHwgZGlzcGxheUJveC50ZXh0KCkuaXNCZXR3ZWVuU2hhcGluZ0JvdW5kYXJp
ZXMoKSkgewotICAgICAgICAgICAgZm9yICg7ICFzaGFwaW5nQm91bmRhcnlJdGVyYXRvci5hdEVu
ZCgpOyBzaGFwaW5nQm91bmRhcnlJdGVyYXRvci50cmF2ZXJzZU5leHRMZWFmT25MaW5lKCkpIHsK
LSAgICAgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gc2hhcGluZ0JvdW5kYXJ5SXRlcmF0
b3IuYm94KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGRpc3BsYXlCb3guaXNUZXh0KCkgJiYgZGlz
cGxheUJveC50ZXh0KCkuaXNBdFNoYXBpbmdCb3VuZGFyeVN0YXJ0KCkpCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNo
YXBpbmdCb3VuZGFyeUl0ZXJhdG9yLmF0RW5kKCkgfHwgIXNoYXBpbmdCb3VuZGFyeUl0ZXJhdG9y
LmlzVGV4dCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoOyAhc2hhcGluZ0JvdW5kYXJ5
SXRlcmF0b3IuYXRFbmQoKTsgc2hhcGluZ0JvdW5kYXJ5SXRlcmF0b3IudHJhdmVyc2VQcmV2aW91
c0xlYWZPbkxpbmUoKSkgewotICAgICAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IHNoYXBpbmdC
b3VuZGFyeUl0ZXJhdG9yLmJveCgpOwotICAgICAgICAgICAgaWYgKGRpc3BsYXlCb3guaXNUZXh0
KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiB0ZXh0ID0gZGlzcGxheUJveC50ZXh0KCk7Cisg
ICAgYXV0byBzaGFwZWRDb250ZW50ID0gU2hhcGVkQ29udGVudCB7IH07CisgICAgYnVpbGRUZXh0
Rm9yU2hhcGluZyhzaGFwZWRDb250ZW50LCBtX3RleHRCb3gpOwogCi0gICAgICAgICAgICAgICAg
aWYgKHNoYXBpbmdCb3VuZGFyeUl0ZXJhdG9yLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246
OkxUUikgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgdGV4dENvbnRlbnQuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRleHRDb250ZW50
LmFwcGVuZCh0ZXh0LnJlbmRlcmVkQ29udGVudCgpKTsKLSAgICAgICAgICAgICAgICBpZiAodGV4
dC5pc0F0U2hhcGluZ0JvdW5kYXJ5RW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGVu
dFN0YXJ0WCA9IGRpc3BsYXlCb3gudmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKS54
KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBmaW5kIHRo
ZSBib3VuZGFyeSBlbmQuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB0
ZXh0Q29udGVudC5jbGVhcigpOwotICAgIH07Ci0gICAgYnVpbGRUZXh0Rm9yU2hhcGluZygpOwot
Ci0gICAgaWYgKHRleHRDb250ZW50LmlzRW1wdHkoKSkKKyAgICBpZiAoc2hhcGVkQ29udGVudC50
ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBwYWludFJl
Y3QgPSBtX3BhaW50UmVjdDsKLSAgICBwYWludFJlY3Quc2hpZnRYRWRnZVRvKG1fcGFpbnRPZmZz
ZXQueCgpICsgY29udGVudFN0YXJ0WCk7CisgICAgcGFpbnRSZWN0LnNoaWZ0WEVkZ2VUbyhtX3Bh
aW50T2Zmc2V0LngoKSArIHNoYXBlZENvbnRlbnQudmlzdWFsTGVmdCk7CiAKICAgICBhdXRvIGNo
YXJhY3RlclNjYW5Gb3JDb2RlUGF0aCA9IHRydWU7CiAgICAgYXV0byBleHBhbnNpb24gPSBtX3Rl
eHRCb3guYm94KCkuZXhwYW5zaW9uKCk7Ci0gICAgYXV0byBydW4gPSBUZXh0UnVuIHsgdGV4dENv
bnRlbnQsIHBhaW50UmVjdC54KCksIGV4cGFuc2lvbi5ob3Jpem9udGFsRXhwYW5zaW9uLCBleHBh
bnNpb24uYmVoYXZpb3IsIG1fdGV4dEJveC5kaXJlY3Rpb24oKSwgbV9zdHlsZS5ydGxPcmRlcmlu
ZygpID09IE9yZGVyOjpWaXN1YWwsIGNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCB9OworICAgIGF1
dG8gcnVuID0gVGV4dFJ1biB7IHNoYXBlZENvbnRlbnQudGV4dCwgcGFpbnRSZWN0LngoKSwgZXhw
YW5zaW9uLmhvcml6b250YWxFeHBhbnNpb24sIGV4cGFuc2lvbi5iZWhhdmlvciwgbV90ZXh0Qm94
LmRpcmVjdGlvbigpLCBtX3N0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gT3JkZXI6OlZpc3VhbCwgY2hh
cmFjdGVyU2NhbkZvckNvZGVQYXRoIH07CiAKLSAgICB0ZXh0UGFpbnRlci5wYWludFJhbmdlKHJ1
biwgcGFpbnRSZWN0LCB0ZXh0T3JpZ2luRnJvbVBhaW50UmVjdChwYWludFJlY3QpLCAwLCB0ZXh0
Q29udGVudC5sZW5ndGgoKSk7CisgICAgdGV4dFBhaW50ZXIucGFpbnRSYW5nZShydW4sIHBhaW50
UmVjdCwgdGV4dE9yaWdpbkZyb21QYWludFJlY3QocGFpbnRSZWN0KSwgMCwgc2hhcGVkQ29udGVu
dC50ZXh0Lmxlbmd0aCgpKTsKICAgICBjb250ZXh0LnJlc3RvcmUoKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTEzMjksNCArMTM4NywxMCBAQCBGbG9hdFBvaW50IFRleHRCb3hQYWludGVyOjp0
ZXh0T3JpZ2luRnJvbVBhaW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHBhaW50UmVjdCkgYwogICAg
IHJldHVybiB0ZXh0T3JpZ2luOwogfQogCitib29sIFRleHRCb3hQYWludGVyOjppc0luc2lkZVNo
YXBlZENvbnRlbnQoKSBjb25zdAoreworICAgIGF1dG8mIHRleHRDb250ZW50ID0gdGV4dEJveCgp
LmJveCgpLnRleHQoKTsKKyAgICByZXR1cm4gdGV4dENvbnRlbnQuaXNBdFNoYXBpbmdCb3VuZGFy
eVN0YXJ0KCkgfHwgdGV4dENvbnRlbnQuaXNBdFNoYXBpbmdCb3VuZGFyeUVuZCgpIHx8IHRleHRD
b250ZW50LmlzQmV0d2VlblNoYXBpbmdCb3VuZGFyaWVzKCk7Cit9CisKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmgKaW5kZXggMjVmZWM4YWFlNjQzLi45NmZlMmZh
YWQ4YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5oCkBAIC02
OSwxMyArNjksMTQgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcGFpbnRQbGF0Zm9ybURvY3VtZW50
TWFya2VycygpOwogCiAgICAgdm9pZCBwYWludEZvcmVncm91bmQoY29uc3QgU3R5bGVkTWFya2Vk
VGV4dCYpOwotICAgIGJvb2wgcGFpbnRGb3JlZ3JvdW5kRm9yU2hhcGluZ1JhbmdlKFRleHRQYWlu
dGVyJik7CisgICAgYm9vbCBwYWludEZvcmVncm91bmRGb3JTaGFwZVJhbmdlKFRleHRQYWludGVy
Jik7CiAgICAgVGV4dERlY29yYXRpb25QYWludGVyIGNyZWF0ZURlY29yYXRpb25QYWludGVyKGNv
bnN0IFN0eWxlZE1hcmtlZFRleHQmLCBjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIHBhaW50
QmFja2dyb3VuZERlY29yYXRpb25zKFRleHREZWNvcmF0aW9uUGFpbnRlciYsIGNvbnN0IFN0eWxl
ZE1hcmtlZFRleHQmLCBjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIHBhaW50Rm9yZWdyb3Vu
ZERlY29yYXRpb25zKFRleHREZWNvcmF0aW9uUGFpbnRlciYsIGNvbnN0IFN0eWxlZE1hcmtlZFRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxp
bmUoY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0OjpS
YWRpaSYsIGJvb2wgaGFzTGl2ZUNvbnZlcnNpb24pOwogICAgIHZvaWQgZmlsbENvbXBvc2l0aW9u
VW5kZXJsaW5lKGZsb2F0IHN0YXJ0LCBmbG9hdCB3aWR0aCwgY29uc3QgQ29tcG9zaXRpb25VbmRl
cmxpbmUmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSYsIGJvb2wgaGFzTGl2ZUNvbnZl
cnNpb24pIGNvbnN0OwogICAgIHZvaWQgcGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VyKGNvbnN0
IE1hcmtlZFRleHQmKTsKKyAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3RGb3JSYW5nZSh1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KSBjb25zdDsKIAogICAgIGZsb2F0
IHRleHRQb3NpdGlvbigpOwogICAgIEZsb2F0UmVjdCBjb21wdXRlUGFpbnRSZWN0KGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCk7CkBAIC04NSw2ICs4Niw3IEBAIHByb3RlY3RlZDoKICAg
ICBjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUoKSBjb25zdDsKICAgICBXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUud3JpdGluZ01vZGUoKTsgfQog
ICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbkZyb21QYWludFJlY3QoY29uc3QgRmxvYXRSZWN0Jikg
Y29uc3Q7CisgICAgYm9vbCBpc0luc2lkZVNoYXBlZENvbnRlbnQoKSBjb25zdDsKIAogICAgIHN0
cnVjdCBEZWNvcmF0aW5nQm94IHsKICAgICAgICAgSW5saW5lSXRlcmF0b3I6OklubGluZUJveEl0
ZXJhdG9yIGlubGluZUJveDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>