<?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>198332</bug_id>
          
          <creation_ts>2019-05-29 08:01:47 -0700</creation_ts>
          <short_desc>[LFC][IFC] Move Line class to a dedicated file</short_desc>
          <delta_ts>2019-05-29 09:07:26 -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>Layout and Rendering</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1539953</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-05-29 08:01:47 -0700</bug_when>
    <thetext>Some upcoming refactoring requires to have a .h (can&apos;t forward declare nested class)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1539954</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-05-29 08:02:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/51221403&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1539957</commentid>
    <comment_count>2</comment_count>
      <attachid>370849</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-05-29 08:06:44 -0700</bug_when>
    <thetext>Created attachment 370849
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1539962</commentid>
    <comment_count>3</comment_count>
      <attachid>370849</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-29 09:07:24 -0700</bug_when>
    <thetext>Comment on attachment 370849
Patch

Clearing flags on attachment: 370849

Committed r245850: &lt;https://trac.webkit.org/changeset/245850&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1539963</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-29 09:07:26 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370849</attachid>
            <date>2019-05-29 08:06:44 -0700</date>
            <delta_ts>2019-05-29 09:07:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198332-20190529080640.patch</filename>
            <type>text/plain</type>
            <size>38294</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1Nzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODhmZWNlY2NhNDVhYTc0
MDEyYWI0MzQyMDYwYjY5ZmY5ZjBjODE4MC4uZGQ0MjAzY2ZlNjQyMjkzY2Q5ZTBjN2FlNmI2MmEw
NmVlZmZiYzkxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE5LTA1LTI5ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIExp
bmUgY2xhc3MgdG8gYSBkZWRpY2F0ZWQgZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MzMyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTIy
MTQwMz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
biB1cGNvbWluZyByZWZhY3RvcmluZyByZXF1aXJlcyB0aGUgTGluZSBjbGFzcyB0byBiZSBpbiBh
IC5oLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5
UnVuLmg6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHRMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmluaXRpYWxpemVMaW5lIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlv
dXQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpoYWxmTGVhZGluZ01ldHJpY3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lOjphdmFpbGFibGVXaWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmU6OmNvbnRlbnRMb2dpY2FsUmlnaHQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpjb250ZW50TG9naWNhbFdpZHRoIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6bG9naWNhbFRvcCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmxvZ2ljYWxM
ZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6bG9n
aWNhbFJpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZTo6bG9naWNhbEJvdHRvbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmU6OmxvZ2ljYWxXaWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmU6OmxvZ2ljYWxIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpMaW5lSXRlbTo6TGluZUl0ZW0pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lOjpjbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmU6OnJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6Om1vdmVMb2dpY2FsTGVmdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6Om1vdmVMb2dpY2FsUmlnaHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojppc1RyaW1tYWJsZUNvbnRlbnQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjp0cmFpbGluZ1RyaW1tYWJsZVdpZHRoIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6aGFzQ29udGVu
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFwcGVu
ZE5vbkJyZWFrYWJsZVNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZTo6YXBwZW5kSW5saW5lQ29udGFpbmVyU3RhcnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lOjphcHBlbmRJbmxpbmVDb250YWluZXJFbmQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjphcHBlbmRUZXh0Q29udGVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFwcGVuZE5vblJlcGxhY2VkSW5s
aW5lQm94KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6YXBwZW5k
UmVwbGFjZWRJbmxpbmVCb3gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lOjphcHBlbmRIYXJkTGluZUJyZWFrKTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5oOgorICAgICAgICAqIGxheW91dC9pbmxpbmVm
b3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpU
ZXh0VXRpbDo6aXNUcmltbWFibGVDb250ZW50KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy90ZXh0L1RleHRVdGlsLmg6CisKIDIwMTktMDUtMjcgIFphbGFuIEJ1anRhcyAgPHph
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIERlY291cGxlIGxpbmUgbGF5b3V0
IGFuZCBwcm9jZXNzaW5nIGlubGluZSBydW5zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBjYTI0OGYzZWJh
NjE0NGVkNDY4MTU3NDQzYjcwN2JlNzJhNDIzZDU4Li4xMWViNDg2YzcyN2UyNWU1ZjcxNTYwMjZl
YTExN2RiNzY1YWEwN2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTM0OCw2ICsxMzQ4LDcgQEAgbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAK
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91
dC5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5jcHAK
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUludmFsaWRhdGlvbi5jcHAKK2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmUuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVMaW5lQnJlYWtlci5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRleHRJ
dGVtLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBj
ZWUwZDRjMGE1YjgwOTFjMGEzMjFiMmNmYzBkNmQ3NDI5NDNjZmU1Li40ZjgyN2IwZGI4NzAxZmQ3
MWIwOWFkZjk2YTMyYmEzNTdjOGVkYzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDEyLDYgKzIwMTIsNyBAQAogCQk2RUQ4
NzhDNTE0NzQ5M0Y0MDA0QzM1OTcgLyogUmVuZGVyVGFibGVDYXB0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUQ4NzhDMzE0NzQ5M0Y0MDA0QzM1
OTcgLyogUmVuZGVyVGFibGVDYXB0aW9uLmggKi87IH07CiAJCTZFRDhDMzdBMTgzQkZGOEMwMDlF
NTNCRCAvKiBCb3hTaGFwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkVEOEMzNzgxODNCRkY4QzAwOUU1M0JEIC8qIEJveFNoYXBlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkVFOEE3NzMxMEY4MDNG
MzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVFOEE3NzExMEY4MDNGMzAwNUE0QTI0IC8q
IEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oICovOyB9OworCQk2RjBDRDY5NTIyOUVEMzI3MDBD
NTk5NEUgLyogSW5saW5lTGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkYwQ0Q2OTQyMjlFRDMyNzAwQzU5OTRFIC8qIElubGluZUxpbmUuaCAqLzsg
fTsKIAkJNkYxQ0MxREUyMjVGOEI0OTAwNzIwQUQyIC8qIElubGluZVRleHRJdGVtLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjFDQzFERDIyNUY4QjQy
MDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjIyMkI3NjFBQjUyRDhBMDA5NDY1MUEgLyogV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkYyMjJCNzUxQUI1MkQ4QTAwOTQ2NTFBIC8qIFdlYkdMVmVydGV4QXJy
YXlPYmplY3RCYXNlLmNwcCAqLzsgfTsKIAkJNkYzRTFGNjIyMTM2MTQyMDAwQTY1QTA4IC8qIEZs
b2F0Qm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RjNFMUY2MTIxMzYxNDE3MDBBNjVBMDggLyogRmxvYXRCb3guaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTExNiw2ICs5MTE3LDggQEAKIAkJNkVF
OEE3NzAxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMQ29udGV4dEF0dHJpYnV0
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUU4QTc3MTEwRjgwM0YzMDA1
QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RjA4MzBERjIwQjQ2OTUxMDA4QTk0NUIgLyogQmxvY2tGb3JtYXR0aW5n
Q29udGV4dEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGMENENjky
MjI5RUQzMTkwMEM1OTk0RSAvKiBJbmxpbmVMaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
bGluZUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjBDRDY5NDIyOUVE
MzI3MDBDNTk5NEUgLyogSW5saW5lTGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbmxpbmVMaW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMUNDMURD
MjI1RjhCNDEwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbmxpbmVUZXh0SXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMUND
MUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bmxpbmVUZXh0SXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjIyMkI3NDFB
QjUyRDY0MDA5NDY1MUEgLyogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE2MzY5LDYgKzE2MzcyLDggQEAKIAkJMTE1Q0ZBOUEyMDhCQzE0MDAwMUU2OTkx
IC8qIGlubGluZWZvcm1hdHRpbmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCTZGMENENjk0MjI5RUQzMjcwMEM1OTk0RSAvKiBJbmxpbmVMaW5lLmggKi8s
CisJCQkJNkYwQ0Q2OTIyMjlFRDMxOTAwQzU5OTRFIC8qIElubGluZUxpbmUuY3BwICovLAogCQkJ
CTZGRTdEREREMjBFQzZFOEIwMDhCNUI0RSAvKiB0ZXh0ICovLAogCQkJCTZGN0NBM0M5MjA4QzJC
MkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgKi8sCiAJCQkJNkY3Q0Ez
QzgyMDhDMkIyRTAwMkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0LmggKi8sCkBAIC0y
ODE2Miw2ICsyODE2Nyw3IEBACiAJCQkJNzE0QzdDNjYxRkRBRDJBMTAwRjJCRUUxIC8qIEFuaW1h
dGlvblBsYXliYWNrRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxNEM3QzY3MUZEQUQyQTkw
MEYyQkVFMSAvKiBBbmltYXRpb25QbGF5YmFja0V2ZW50SW5pdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzEwMjVFQ0QxRjk5RjBDRTAwNEEyNTBDIC8qIEFuaW1hdGlvblRpbWVsaW5lLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk2RjBDRDY5NTIyOUVEMzI3MDBDNTk5NEUgLyogSW5saW5lTGluZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBGQUYxNDk4MDBENDAwRkI1QkQ4IC8qIEFuaW1hdGlvblV0
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTcxNTJCNUEyMUNCM0U4ODAwMEMzN0NBIC8q
IEFwZHVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzE1MkI1QzIxQ0MxOTAyMDAwQzM3
Q0EgLyogQXBkdVJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmggYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJ1bi5oCmluZGV4IDYzOTI5MDM2MDgzYzQwYjAzOWY5
ZGVjNDkzM2Y2MTQyYTc0ZGExYjAuLjdhZTNiNDA5ZDc2MTE2ZjJlOWQxM2NjMzFlYjZlNTYwNjNi
MTA3NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNw
bGF5UnVuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlS
dW4uaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCiAKKyNpbmNsdWRlICJEaXNwbGF5UmVjdC5oIgogI2luY2x1ZGUgIklubGluZUl0ZW0u
aCIKICNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcAppbmRleCAx
MGViMjA4ODA5ZDUyNTBlNzg5NzAyMjVhOTI4Zjg4M2QwYjhkZTA5Li44MTg2MzI5ZDExZmE1YTY4
NjgxMWE5MDRhMWZiZDkwY2I4ODliNTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1h
dHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJG
bG9hdGluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJGbG9hdGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAi
SW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCisjaW5jbHVkZSAiSW5saW5lTGluZS5oIgogI2luY2x1
ZGUgIklubGluZUxpbmVCcmVha2VyLmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCiAjaW5jbHVk
ZSAiTGF5b3V0Q29udGFpbmVyLmgiCkBAIC00MCwyOTYgKzQxLDYgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCi1zdHJ1Y3QgVXNlZEhlaWdodEFuZERlcHRoIHsK
LSAgICBMYXlvdXRVbml0IGhlaWdodDsKLSAgICBMYXlvdXRVbml0IGRlcHRoOwotfTsKLQotc3Rh
dGljIFVzZWRIZWlnaHRBbmREZXB0aCBoYWxmTGVhZGluZ01ldHJpY3MoY29uc3QgRm9udE1ldHJp
Y3MmIGZvbnRNZXRyaWNzLCBMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KQotewotICAgIGF1
dG8gYXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KCk7Ci0gICAgYXV0byBkZXNjZW50ID0gZm9u
dE1ldHJpY3MuZGVzY2VudCgpOwotICAgIC8vIDEwLjguMSBMZWFkaW5nIGFuZCBoYWxmLWxlYWRp
bmcKLSAgICBhdXRvIGxlYWRpbmcgPSBsaW5lTG9naWNhbEhlaWdodCAtIChhc2NlbnQgKyBkZXNj
ZW50KTsKLSAgICAvLyBJbmxpbmUgdHJlZSBpcyBhbGwgaW50ZWdlciBiYXNlZC4KLSAgICBhdXRv
IGFkanVzdGVkQXNjZW50ID0gc3RkOjptYXgoKGFzY2VudCArIGxlYWRpbmcgLyAyKS5mbG9vcigp
LCAwKTsKLSAgICBhdXRvIGFkanVzdGVkRGVzY2VudCA9IHN0ZDo6bWF4KChkZXNjZW50ICsgbGVh
ZGluZyAvIDIpLmNlaWwoKSwgMCk7Ci0gICAgcmV0dXJuIHsgYWRqdXN0ZWRBc2NlbnQsIGFkanVz
dGVkRGVzY2VudCB9OyAKLX0KLQotY2xhc3MgTGluZSB7Ci1wdWJsaWM6Ci0gICAgTGluZShjb25z
dCBMYXlvdXRTdGF0ZSYpOwotCi0gICAgdm9pZCByZXNldChjb25zdCBMYXlvdXRQb2ludCYgdG9w
TGVmdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgTGF5b3V0VW5pdCBtaW5pbXVtTGluZUhl
aWdodCwgTGF5b3V0VW5pdCBiYXNlbGluZU9mZnNldCk7Ci0KLSAgICBzdHJ1Y3QgTGluZUl0ZW0g
ewotICAgICAgICBMaW5lSXRlbShEaXNwbGF5OjpSdW4sIGNvbnN0IElubGluZUl0ZW0mLCBib29s
IGlzQ29sbGFwc2VkLCBib29sIGNhbkJlRXh0ZW5kZWQpOwotCi0gICAgICAgIC8vIFJlbGF0aXZl
IHRvIHRoZSBiYXNlbGluZS4KLSAgICAgICAgRGlzcGxheTo6UnVuIGlubGluZVJ1bjsKLSAgICAg
ICAgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbTsKLSAgICAgICAgYm9vbCBpc0NvbGxhcHNl
ZCB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgY2FuQmVFeHRlbmRlZCB7IGZhbHNlIH07Ci0gICAg
fTsKLQotICAgIHVzaW5nIExpbmVJdGVtcyA9IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TGluZUl0
ZW0+PjsKLSAgICBjb25zdCBMaW5lSXRlbXMmIGNsb3NlKCk7Ci0KLSAgICB2b2lkIGFwcGVuZFRl
eHRDb250ZW50KGNvbnN0IElubGluZVRleHRJdGVtJiwgTGF5b3V0U2l6ZSk7Ci0gICAgdm9pZCBh
cHBlbmROb25SZXBsYWNlZElubGluZUJveChjb25zdCBJbmxpbmVJdGVtJiwgTGF5b3V0U2l6ZSk7
Ci0gICAgdm9pZCBhcHBlbmRSZXBsYWNlZElubGluZUJveChjb25zdCBJbmxpbmVJdGVtJiwgTGF5
b3V0U2l6ZSk7Ci0gICAgdm9pZCBhcHBlbmRJbmxpbmVDb250YWluZXJTdGFydChjb25zdCBJbmxp
bmVJdGVtJik7Ci0gICAgdm9pZCBhcHBlbmRJbmxpbmVDb250YWluZXJFbmQoY29uc3QgSW5saW5l
SXRlbSYpOwotICAgIHZvaWQgYXBwZW5kSGFyZExpbmVCcmVhayhjb25zdCBJbmxpbmVJdGVtJik7
Ci0KLSAgICBib29sIGhhc0NvbnRlbnQoKSBjb25zdDsKLQotICAgIExheW91dFVuaXQgdHJhaWxp
bmdUcmltbWFibGVXaWR0aCgpIGNvbnN0OwotCi0gICAgdm9pZCBtb3ZlTG9naWNhbExlZnQoTGF5
b3V0VW5pdCk7Ci0gICAgdm9pZCBtb3ZlTG9naWNhbFJpZ2h0KExheW91dFVuaXQpOwotCi0gICAg
TGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxXaWR0aCgp
IC0gY29udGVudExvZ2ljYWxXaWR0aCgpOyB9Ci0gICAgCi0gICAgTGF5b3V0VW5pdCBjb250ZW50
TG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbExlZnQoKSArIGNvbnRlbnRMb2dp
Y2FsV2lkdGgoKTsgfQotICAgIExheW91dFVuaXQgY29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudExvZ2ljYWxXaWR0aDsgfQotCi0gICAgTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsVG9wTGVmdC55KCk7IH0KLSAgICBMYXlv
dXRVbml0IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsVG9wTGVmdC54KCk7
IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxM
ZWZ0KCkgKyBsb2dpY2FsV2lkdGgoKTsgfQotICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSgp
IGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxUb3AoKSArIGxvZ2ljYWxIZWlnaHQoKTsgfQotICAgIExh
eW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTG9naWNhbFdpZHRo
OyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dp
Y2FsSGVpZ2h0LmhlaWdodCArIG1fbG9naWNhbEhlaWdodC5kZXB0aDsgfQotCi1wcml2YXRlOgot
ICAgIHZvaWQgYXBwZW5kTm9uQnJlYWthYmxlU3BhY2UoY29uc3QgSW5saW5lSXRlbSYsIGNvbnN0
IERpc3BsYXk6OlJlY3QmIGxvZ2ljYWxSZWN0KTsKLSAgICB2b2lkIHJlbW92ZVRyYWlsaW5nVHJp
bW1hYmxlQ29udGVudCgpOwotCi0gICAgY29uc3QgTGF5b3V0U3RhdGUmIG1fbGF5b3V0U3RhdGU7
Ci0gICAgTGluZUl0ZW1zIG1fbGluZUl0ZW1zOwotICAgIExpc3RIYXNoU2V0PExpbmVJdGVtKj4g
bV90cmltbWFibGVDb250ZW50OwotCi0gICAgTGF5b3V0UG9pbnQgbV9sb2dpY2FsVG9wTGVmdDsK
LSAgICBMYXlvdXRVbml0IG1fY29udGVudExvZ2ljYWxXaWR0aDsKLQotICAgIFVzZWRIZWlnaHRB
bmREZXB0aCBtX2xvZ2ljYWxIZWlnaHQ7Ci0gICAgTGF5b3V0VW5pdCBtX2xpbmVMb2dpY2FsV2lk
dGg7Ci19OwotCi1MaW5lOjpMaW5lSXRlbTo6TGluZUl0ZW0oRGlzcGxheTo6UnVuIGlubGluZVJ1
biwgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgYm9vbCBpc0NvbGxhcHNlZCwgYm9vbCBj
YW5CZUV4dGVuZGVkKQotICAgIDogaW5saW5lUnVuKGlubGluZVJ1bikKLSAgICAsIGlubGluZUl0
ZW0oaW5saW5lSXRlbSkKLSAgICAsIGlzQ29sbGFwc2VkKGlzQ29sbGFwc2VkKQotICAgICwgY2Fu
QmVFeHRlbmRlZChjYW5CZUV4dGVuZGVkKQotewotfQotCi1MaW5lOjpMaW5lKGNvbnN0IExheW91
dFN0YXRlJiBsYXlvdXRTdGF0ZSkKLSAgICA6IG1fbGF5b3V0U3RhdGUobGF5b3V0U3RhdGUpCi17
Ci19Ci0KLXZvaWQgTGluZTo6cmVzZXQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQsIExheW91
dFVuaXQgYXZhaWxhYmxlV2lkdGgsIExheW91dFVuaXQgbWluaW11bUhlaWdodCwgTGF5b3V0VW5p
dCBiYXNlbGluZU9mZnNldCkKLXsKLSAgICBtX2xvZ2ljYWxUb3BMZWZ0ID0gdG9wTGVmdDsKLSAg
ICBtX2xpbmVMb2dpY2FsV2lkdGggPSBhdmFpbGFibGVXaWR0aDsKLSAgICBtX2xvZ2ljYWxIZWln
aHQgPSB7IGJhc2VsaW5lT2Zmc2V0LCBtaW5pbXVtSGVpZ2h0IC0gYmFzZWxpbmVPZmZzZXQgfTsK
LSAgICAKLSAgICBtX2NvbnRlbnRMb2dpY2FsV2lkdGggPSB7IH07Ci0KLSAgICBtX2xpbmVJdGVt
cy5jbGVhcigpOwotICAgIG1fdHJpbW1hYmxlQ29udGVudC5jbGVhcigpOwotfQotCi1jb25zdCBM
aW5lOjpMaW5lSXRlbXMmIExpbmU6OmNsb3NlKCkKLXsKLSAgICByZW1vdmVUcmFpbGluZ1RyaW1t
YWJsZUNvbnRlbnQoKTsKLSAgICAvLyBDb252ZXJ0IGlubGluZSBydW4gZ2VvbWV0cnkgZnJvbSBy
ZWxhdGl2ZSB0byB0aGUgYmFzZWxpbmUgdG8gcmVsYXRpdmUgdG8gbG9naWNhbCB0b3AuCi0gICAg
Zm9yIChhdXRvJiBsaW5lSXRlbSA6IG1fbGluZUl0ZW1zKSB7Ci0gICAgICAgIGF1dG8gYWRqdXN0
ZWRMb2dpY2FsVG9wID0gbGluZUl0ZW0tPmlubGluZVJ1bi5sb2dpY2FsVG9wKCkgKyBtX2xvZ2lj
YWxIZWlnaHQuaGVpZ2h0ICsgbV9sb2dpY2FsVG9wTGVmdC55KCk7Ci0gICAgICAgIGxpbmVJdGVt
LT5pbmxpbmVSdW4uc2V0TG9naWNhbFRvcChhZGp1c3RlZExvZ2ljYWxUb3ApOwotICAgIH0KLSAg
ICByZXR1cm4gbV9saW5lSXRlbXM7Ci19Ci0KLXZvaWQgTGluZTo6cmVtb3ZlVHJhaWxpbmdUcmlt
bWFibGVDb250ZW50KCkKLXsKLSAgICAvLyBDb2xsYXBzZSB0cmltbWFibGUgdHJhaWxpbmcgY29u
dGVudAotICAgIExheW91dFVuaXQgdHJpbW1hYmxlV2lkdGg7Ci0gICAgZm9yIChhdXRvKiB0cmlt
bWFibGVSdW4gOiBtX3RyaW1tYWJsZUNvbnRlbnQpIHsKLSAgICAgICAgdHJpbW1hYmxlUnVuLT5p
c0NvbGxhcHNlZCA9IHRydWU7Ci0gICAgICAgIHRyaW1tYWJsZVdpZHRoICs9IHRyaW1tYWJsZVJ1
bi0+aW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpOwotICAgIH0KLSAgICBtX2NvbnRlbnRMb2dpY2Fs
V2lkdGggLT0gdHJpbW1hYmxlV2lkdGg7Ci19Ci0KLXZvaWQgTGluZTo6bW92ZUxvZ2ljYWxMZWZ0
KExheW91dFVuaXQgZGVsdGEpCi17Ci0gICAgaWYgKCFkZWx0YSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIEFTU0VSVChkZWx0YSA+IDApOwotICAgIC8vIFNocmluayB0aGUgbGluZSBhbmQgbW92ZSB0
aGUgaXRlbXMuCi0gICAgbV9sb2dpY2FsVG9wTGVmdC5tb3ZlKGRlbHRhLCAwKTsKLSAgICBtX2xp
bmVMb2dpY2FsV2lkdGggLT0gZGVsdGE7Ci0gICAgZm9yIChhdXRvJiBsaW5lSXRlbSA6IG1fbGlu
ZUl0ZW1zKQotICAgICAgICBsaW5lSXRlbS0+aW5saW5lUnVuLm1vdmVIb3Jpem9udGFsbHkoZGVs
dGEpOwotfQotCi12b2lkIExpbmU6Om1vdmVMb2dpY2FsUmlnaHQoTGF5b3V0VW5pdCBkZWx0YSkK
LXsKLSAgICBBU1NFUlQoZGVsdGEgPiAwKTsKLSAgICBtX2xpbmVMb2dpY2FsV2lkdGggLT0gZGVs
dGE7Ci19Ci0KLXN0YXRpYyBib29sIGlzVHJpbW1hYmxlQ29udGVudChjb25zdCBJbmxpbmVJdGVt
JiBpbmxpbmVJdGVtKQotewotICAgIGlmICghaXM8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0p
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byYgaW5saW5lVGV4dEl0ZW0gPSBkb3du
Y2FzdDxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSk7Ci0gICAgcmV0dXJuIGlubGluZVRleHRJ
dGVtLmlzV2hpdGVzcGFjZSgpICYmIGlubGluZVRleHRJdGVtLnN0eWxlKCkuY29sbGFwc2VXaGl0
ZVNwYWNlKCk7Ci19Ci0KLUxheW91dFVuaXQgTGluZTo6dHJhaWxpbmdUcmltbWFibGVXaWR0aCgp
IGNvbnN0Ci17Ci0gICAgTGF5b3V0VW5pdCB0cmltbWFibGVXaWR0aDsKLSAgICBmb3IgKGF1dG8q
IHRyaW1tYWJsZVJ1biA6IG1fdHJpbW1hYmxlQ29udGVudCkKLSAgICAgICAgdHJpbW1hYmxlV2lk
dGggKz0gdHJpbW1hYmxlUnVuLT5pbmxpbmVSdW4ubG9naWNhbFdpZHRoKCk7Ci0gICAgcmV0dXJu
IHRyaW1tYWJsZVdpZHRoOwotfQotCi1ib29sIExpbmU6Omhhc0NvbnRlbnQoKSBjb25zdAotewot
ICAgIC8vIFJldHVybiBmYWxzZSBmb3IgZW1wdHkgY29udGFpbmVycyBsaWtlIDxzcGFuPjwvc3Bh
bj4uCi0gICAgaWYgKG1fbGluZUl0ZW1zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGZvciAoYXV0byYgbGluZUl0ZW0gOiBtX2xpbmVJdGVtcykgewotICAgICAgICBpZiAo
bGluZUl0ZW0tPmlubGluZUl0ZW0uaXNDb250YWluZXJTdGFydCgpIHx8IGxpbmVJdGVtLT5pbmxp
bmVJdGVtLmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
aWYgKCFsaW5lSXRlbS0+aXNDb2xsYXBzZWQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIExpbmU6OmFwcGVuZE5vbkJyZWFrYWJs
ZVNwYWNlKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIGNvbnN0IERpc3BsYXk6OlJlY3Qm
IGxvZ2ljYWxSZWN0KQotewotICAgIG1fbGluZUl0ZW1zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVl
PExpbmVJdGVtPihEaXNwbGF5OjpSdW4geyBsb2dpY2FsUmVjdCB9LCBpbmxpbmVJdGVtLCBmYWxz
ZSwgZmFsc2UpKTsKLSAgICBtX2NvbnRlbnRMb2dpY2FsV2lkdGggKz0gaW5saW5lSXRlbS53aWR0
aCgpOwotfQotCi12b2lkIExpbmU6OmFwcGVuZElubGluZUNvbnRhaW5lclN0YXJ0KGNvbnN0IElu
bGluZUl0ZW0mIGlubGluZUl0ZW0pCi17Ci0gICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lSXRl
bS5sYXlvdXRCb3goKTsKLSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAg
IGF1dG8mIGZvbnRNZXRyaWNzID0gc3R5bGUuZm9udE1ldHJpY3MoKTsKLSAgICAKLSAgICBhdXRv
IGFsaWduQW5kQWRqdXN0TGluZUhlaWdodCA9IFsmXSB7Ci0gICAgICAgIExheW91dFVuaXQgaW5s
aW5lQm94SGVpZ2h0ID0gc3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7Ci0KLSAgICAgICAgYXV0
byBoYWxmTGVhZGluZyA9IGhhbGZMZWFkaW5nTWV0cmljcyhmb250TWV0cmljcywgaW5saW5lQm94
SGVpZ2h0KTsKLSAgICAgICAgaWYgKGhhbGZMZWFkaW5nLmRlcHRoID4gMCkKLSAgICAgICAgICAg
IG1fbG9naWNhbEhlaWdodC5kZXB0aCA9IHN0ZDo6bWF4KG1fbG9naWNhbEhlaWdodC5kZXB0aCwg
aGFsZkxlYWRpbmcuZGVwdGgpOwotICAgICAgICBpZiAoaGFsZkxlYWRpbmcuaGVpZ2h0ID4gMCkK
LSAgICAgICAgICAgIG1fbG9naWNhbEhlaWdodC5oZWlnaHQgPSBzdGQ6Om1heChtX2xvZ2ljYWxI
ZWlnaHQuaGVpZ2h0LCBoYWxmTGVhZGluZy5oZWlnaHQpOwotICAgIH07Ci0KLSAgICBhbGlnbkFu
ZEFkanVzdExpbmVIZWlnaHQoKTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbV9sYXlvdXRTdGF0
ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7Ci0gICAgYXV0byBjb250YWluZXJI
ZWlnaHQgPSBmb250TWV0cmljcy5oZWlnaHQoKSArIGRpc3BsYXlCb3gudmVydGljYWxCb3JkZXIo
KSArIGRpc3BsYXlCb3gudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwKTsKLSAgICBhdXRvIGxv
Z2ljYWxUb3AgPSAtZm9udE1ldHJpY3MuYXNjZW50KCkgLSBkaXNwbGF5Qm94LmJvcmRlclRvcCgp
IC0gZGlzcGxheUJveC5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKLSAgICBhdXRvIGxvZ2ljYWxS
ZWN0ID0gRGlzcGxheTo6UmVjdCB7IGxvZ2ljYWxUb3AsIGNvbnRlbnRMb2dpY2FsUmlnaHQoKSwg
aW5saW5lSXRlbS53aWR0aCgpLCBjb250YWluZXJIZWlnaHQgfTsKLSAgICBhcHBlbmROb25CcmVh
a2FibGVTcGFjZShpbmxpbmVJdGVtLCBsb2dpY2FsUmVjdCk7Ci19Ci0KLXZvaWQgTGluZTo6YXBw
ZW5kSW5saW5lQ29udGFpbmVyRW5kKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCi17Ci0g
ICAgLy8gVGhpcyBpcyByZWFsbHkganVzdCBhIHBsYWNlaG9sZGVyIHRvIG1hcmsgdGhlIGVuZCBv
ZiB0aGUgaW5saW5lIGxldmVsIGNvbnRhaW5lci4KLSAgICBhdXRvIGxvZ2ljYWxSZWN0ID0gRGlz
cGxheTo6UmVjdCB7IDAsIGNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgaW5saW5lSXRlbS53aWR0aCgp
LCAwIH07Ci0gICAgYXBwZW5kTm9uQnJlYWthYmxlU3BhY2UoaW5saW5lSXRlbSwgbG9naWNhbFJl
Y3QpOwotfQotCi12b2lkIExpbmU6OmFwcGVuZFRleHRDb250ZW50KGNvbnN0IElubGluZVRleHRJ
dGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRTaXplIHJ1blNpemUpCi17Ci0gICAgYXV0byBpc1RyaW1t
YWJsZSA9IGlzVHJpbW1hYmxlQ29udGVudChpbmxpbmVJdGVtKTsKLSAgICBpZiAoIWlzVHJpbW1h
YmxlKQotICAgICAgICBtX3RyaW1tYWJsZUNvbnRlbnQuY2xlYXIoKTsKLQotICAgIGF1dG8gc2hv
dWxkQ29sbGFwc2VDb21wbGV0ZWx5ID0gWyZdIHsKLSAgICAgICAgaWYgKCFpc1RyaW1tYWJsZSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gTGVhZGluZyB3aGl0ZXNwYWNl
LgotICAgICAgICBpZiAobV9saW5lSXRlbXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBsYXN0IGl0ZW0gaXMgdHJpbW1hYmxlIGFz
IHdlbGwuCi0gICAgICAgIGZvciAoaW50IGluZGV4ID0gbV9saW5lSXRlbXMuc2l6ZSgpIC0gMTsg
aW5kZXggPj0gMDsgLS1pbmRleCkgewotICAgICAgICAgICAgYXV0byYgaW5saW5lSXRlbSA9IG1f
bGluZUl0ZW1zW2luZGV4XS0+aW5saW5lSXRlbTsKLSAgICAgICAgICAgIGlmIChpbmxpbmVJdGVt
LmlzQm94KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYg
KGlubGluZUl0ZW0uaXNUZXh0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGlubGluZUl0ZW0u
aXNUZXh0KCkgJiYgaXNUcmltbWFibGVDb250ZW50KGRvd25jYXN0PElubGluZVRleHRJdGVtPihp
bmxpbmVJdGVtKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0
YXJ0KCkgfHwgaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9OwotCi0gICAgLy8gQ29sbGFwc2VkIGxpbmUgaXRlbXMgZG9u
J3QgY29udHJpYnV0ZSB0byB0aGUgbGluZSB3aWR0aC4KLSAgICBhdXRvIGlzQ29tcGxldGVseUNv
bGxhcHNlZCA9IHNob3VsZENvbGxhcHNlQ29tcGxldGVseSgpOwotICAgIGF1dG8gY2FuQmVFeHRl
bmRlZCA9ICFpc0NvbXBsZXRlbHlDb2xsYXBzZWQgJiYgIWlubGluZUl0ZW0uaXNDb2xsYXBzZWQo
KTsKLSAgICBhdXRvIGxvZ2ljYWxSZWN0ID0gRGlzcGxheTo6UmVjdCB7IC1pbmxpbmVJdGVtLnN0
eWxlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSwgY29udGVudExvZ2ljYWxSaWdodCgpLCBydW5T
aXplLndpZHRoKCksIHJ1blNpemUuaGVpZ2h0KCkgfTsKLSAgICBhdXRvIHRleHRDb250ZXh0ID0g
RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dCB7IGlubGluZUl0ZW0uc3RhcnQoKSwgaW5saW5lSXRl
bS5pc0NvbGxhcHNlZCgpID8gMSA6IGlubGluZUl0ZW0ubGVuZ3RoKCkgfTsKLSAgICBhdXRvIGRp
c3BsYXlSdW4gPSBEaXNwbGF5OjpSdW4obG9naWNhbFJlY3QsIHRleHRDb250ZXh0KTsKLQotICAg
IGF1dG8gbGluZUl0ZW0gPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmVJdGVtPihkaXNwbGF5UnVuLCBp
bmxpbmVJdGVtLCBpc0NvbXBsZXRlbHlDb2xsYXBzZWQsIGNhbkJlRXh0ZW5kZWQpOwotICAgIGlm
IChpc1RyaW1tYWJsZSkgCi0gICAgICAgIG1fdHJpbW1hYmxlQ29udGVudC5hZGQobGluZUl0ZW0u
Z2V0KCkpOwotCi0gICAgbV9saW5lSXRlbXMuYXBwZW5kKFdURk1vdmUobGluZUl0ZW0pKTsKLSAg
ICBtX2NvbnRlbnRMb2dpY2FsV2lkdGggKz0gaXNDb21wbGV0ZWx5Q29sbGFwc2VkID8gTGF5b3V0
VW5pdCgpIDogcnVuU2l6ZS53aWR0aCgpOwotfQotCi12b2lkIExpbmU6OmFwcGVuZE5vblJlcGxh
Y2VkSW5saW5lQm94KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91dFNpemUgcnVu
U2l6ZSkKLXsKLSAgICBhdXRvIGFsaWduQW5kQWRqdXN0TGluZUhlaWdodCA9IFsmXSB7Ci0gICAg
ICAgIGF1dG8gaW5saW5lQm94SGVpZ2h0ID0gcnVuU2l6ZS5oZWlnaHQoKTsKLSAgICAgICAgLy8g
RklYTUU6IFdlIG5lZWQgdG8gbG9vayBpbnNpZGUgdGhlIGlubGluZS1ibG9jaydzIGZvcm1hdHRp
bmcgY29udGV4dCBhbmQgY2hlY2sgdGhlIGxpbmVib3hlcyAoaWYgYW55KSB0byBiZSBhYmxlIHRv
IGJhc2VsaW5lIGFsaWduLgotICAgICAgICBpZiAoaW5saW5lSXRlbS5sYXlvdXRCb3goKS5lc3Rh
Ymxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChpbmxp
bmVCb3hIZWlnaHQgPT0gbG9naWNhbEhlaWdodCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGZhaWxzIHdoZW4gdGhlIGxpbmUgaGVpZ2h0IGRp
ZmZlcmVuY2UgY29tZXMgZnJvbSBmb250LXNpemUgZGlmZi4gCi0gICAgICAgICAgICBtX2xvZ2lj
YWxIZWlnaHQuZGVwdGggPSBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBtX2xvZ2ljYWxIZWlnaHQu
ZGVwdGgpOwotICAgICAgICAgICAgbV9sb2dpY2FsSGVpZ2h0LmhlaWdodCA9IHN0ZDo6bWF4KGlu
bGluZUJveEhlaWdodCwgbV9sb2dpY2FsSGVpZ2h0LmhlaWdodCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gMCBkZXNjZW50IC0+IGJhc2VsaW5lIGFsaWdtZW50
IGZvciBub3cuCi0gICAgICAgIG1fbG9naWNhbEhlaWdodC5kZXB0aCA9IHN0ZDo6bWF4PExheW91
dFVuaXQ+KDAsIG1fbG9naWNhbEhlaWdodC5kZXB0aCk7Ci0gICAgICAgIG1fbG9naWNhbEhlaWdo
dC5oZWlnaHQgPSBzdGQ6Om1heChpbmxpbmVCb3hIZWlnaHQsIG1fbG9naWNhbEhlaWdodC5oZWln
aHQpOwotICAgIH07Ci0KLSAgICBhbGlnbkFuZEFkanVzdExpbmVIZWlnaHQoKTsKLSAgICBhdXRv
JiBkaXNwbGF5Qm94ID0gbV9sYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGlubGlu
ZUl0ZW0ubGF5b3V0Qm94KCkpOwotICAgIGF1dG8gbG9naWNhbFRvcCA9IC1ydW5TaXplLmhlaWdo
dCgpOwotICAgIGF1dG8gaG9yaXpvbnRhbE1hcmdpbiA9IGRpc3BsYXlCb3guaG9yaXpvbnRhbE1h
cmdpbigpOwotICAgIGF1dG8gbG9naWNhbFJlY3QgPSBEaXNwbGF5OjpSZWN0IHsgbG9naWNhbFRv
cCwgY29udGVudExvZ2ljYWxSaWdodCgpICsgaG9yaXpvbnRhbE1hcmdpbi5zdGFydCwgcnVuU2l6
ZS53aWR0aCgpLCBydW5TaXplLmhlaWdodCgpIH07Ci0KLSAgICBtX2xpbmVJdGVtcy5hcHBlbmQo
c3RkOjptYWtlX3VuaXF1ZTxMaW5lSXRlbT4oRGlzcGxheTo6UnVuIHsgbG9naWNhbFJlY3QgfSwg
aW5saW5lSXRlbSwgZmFsc2UsIGZhbHNlKSk7Ci0gICAgbV9jb250ZW50TG9naWNhbFdpZHRoICs9
IChydW5TaXplLndpZHRoKCkgKyBob3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgaG9yaXpvbnRhbE1h
cmdpbi5lbmQpOwotICAgIG1fdHJpbW1hYmxlQ29udGVudC5jbGVhcigpOwotfQotCi12b2lkIExp
bmU6OmFwcGVuZFJlcGxhY2VkSW5saW5lQm94KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0s
IExheW91dFNpemUgcnVuU2l6ZSkKLXsKLSAgICAvLyBGSVhNRSBTdXJlbHkgcmVwbGFjZWQgYm94
ZXMgYmVoYXZlIGRpZmZlcmVudGx5LgotICAgIGFwcGVuZE5vblJlcGxhY2VkSW5saW5lQm94KGlu
bGluZUl0ZW0sIHJ1blNpemUpOwotfQotCi12b2lkIExpbmU6OmFwcGVuZEhhcmRMaW5lQnJlYWso
Y29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKLXsKLSAgICBhdXRvIGFzY2VudCA9IGlubGlu
ZUl0ZW0ubGF5b3V0Qm94KCkuc3R5bGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpOyAKLSAgICBh
dXRvIGxvZ2ljYWxSZWN0ID0gRGlzcGxheTo6UmVjdCB7IC1hc2NlbnQsIGNvbnRlbnRMb2dpY2Fs
UmlnaHQoKSwgeyB9LCBsb2dpY2FsSGVpZ2h0KCkgfTsKLSAgICBtX2xpbmVJdGVtcy5hcHBlbmQo
c3RkOjptYWtlX3VuaXF1ZTxMaW5lSXRlbT4oRGlzcGxheTo6UnVuIHsgbG9naWNhbFJlY3QgfSwg
aW5saW5lSXRlbSwgZmFsc2UsIGZhbHNlKSk7Ci19Ci0KIHN0cnVjdCBVbmNvbW1pdHRlZENvbnRl
bnQgewogICAgIHZvaWQgYWRkKElubGluZUl0ZW0mKTsKICAgICB2b2lkIHJlc2V0KCk7CkBAIC0z
OTUsNyArMTA2LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6
aW5pdGlhbGl6ZUxpbmUoTGluZSYgbGluZSwgTGF5b3V0VW5pdAogCiAgICAgYXV0byYgZm9ybWF0
dGluZ1Jvb3RTdHlsZSA9IG1fZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKTsKICAgICBhdXRvIG1pbWlt
dW1MaW5lSGVpZ2h0ID0gZm9ybWF0dGluZ1Jvb3RTdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKTsK
LSAgICBhdXRvIGJhc2VsaW5lT2Zmc2V0ID0gaGFsZkxlYWRpbmdNZXRyaWNzKGZvcm1hdHRpbmdS
b290U3R5bGUuZm9udE1ldHJpY3MoKSwgbWltaW11bUxpbmVIZWlnaHQpLmhlaWdodDsKKyAgICBh
dXRvIGJhc2VsaW5lT2Zmc2V0ID0gTGluZTo6aGFsZkxlYWRpbmdNZXRyaWNzKGZvcm1hdHRpbmdS
b290U3R5bGUuZm9udE1ldHJpY3MoKSwgbWltaW11bUxpbmVIZWlnaHQpLmhlaWdodDsKICAgICBs
aW5lLnJlc2V0KHsgbGluZUxvZ2ljYWxMZWZ0LCBsaW5lTG9naWNhbFRvcCB9LCBhdmFpbGFibGVX
aWR0aCwgbWltaW11bUxpbmVIZWlnaHQsIGJhc2VsaW5lT2Zmc2V0KTsKIH0KIApAQCAtNDkxLDcg
KzIwMiw3IEBAIExheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6
OmNvbXB1dGVkSW50cmluc2ljV2lkdGgoTGF5b3V0VW5pCiAgICAgICAgICAgICB0cmltbWFibGVU
cmFpbGluZ1dpZHRoID0geyB9OwogICAgICAgICAgICAgbGluZUxvZ2ljYWxSaWdodCA9IHsgfTsK
ICAgICAgICAgfQotICAgICAgICBpZiAoaXNUcmltbWFibGVDb250ZW50KCppbmxpbmVJdGVtKSkg
eworICAgICAgICBpZiAoVGV4dFV0aWw6OmlzVHJpbW1hYmxlQ29udGVudCgqaW5saW5lSXRlbSkp
IHsKICAgICAgICAgICAgIC8vIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlLgogICAgICAgICAgICAg
aWYgKCFsaW5lTG9naWNhbFJpZ2h0KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jMjdiZWEzZjdmZGEzODM0YWVmMmY2Y2VjNTI5MzA5NTViZDE0NmUxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lTGluZS5jcHAKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW5saW5lTGluZS5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlv
dXQgeworCitMaW5lOjpMaW5lSXRlbTo6TGluZUl0ZW0oRGlzcGxheTo6UnVuIGlubGluZVJ1biwg
Y29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgYm9vbCBpc0NvbGxhcHNlZCwgYm9vbCBjYW5C
ZUV4dGVuZGVkKQorICAgIDogaW5saW5lUnVuKGlubGluZVJ1bikKKyAgICAsIGlubGluZUl0ZW0o
aW5saW5lSXRlbSkKKyAgICAsIGlzQ29sbGFwc2VkKGlzQ29sbGFwc2VkKQorICAgICwgY2FuQmVF
eHRlbmRlZChjYW5CZUV4dGVuZGVkKQoreworfQorCitMaW5lOjpMaW5lKGNvbnN0IExheW91dFN0
YXRlJiBsYXlvdXRTdGF0ZSkKKyAgICA6IG1fbGF5b3V0U3RhdGUobGF5b3V0U3RhdGUpCit7Cit9
CisKK3ZvaWQgTGluZTo6cmVzZXQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQsIExheW91dFVu
aXQgYXZhaWxhYmxlV2lkdGgsIExheW91dFVuaXQgbWluaW11bUhlaWdodCwgTGF5b3V0VW5pdCBi
YXNlbGluZU9mZnNldCkKK3sKKyAgICBtX2xvZ2ljYWxUb3BMZWZ0ID0gdG9wTGVmdDsKKyAgICBt
X2xpbmVMb2dpY2FsV2lkdGggPSBhdmFpbGFibGVXaWR0aDsKKyAgICBtX2xvZ2ljYWxIZWlnaHQg
PSB7IGJhc2VsaW5lT2Zmc2V0LCBtaW5pbXVtSGVpZ2h0IC0gYmFzZWxpbmVPZmZzZXQgfTsKKwor
ICAgIG1fY29udGVudExvZ2ljYWxXaWR0aCA9IHsgfTsKKworICAgIG1fbGluZUl0ZW1zLmNsZWFy
KCk7CisgICAgbV90cmltbWFibGVDb250ZW50LmNsZWFyKCk7Cit9CisKK2NvbnN0IExpbmU6Okxp
bmVJdGVtcyYgTGluZTo6Y2xvc2UoKQoreworICAgIHJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29u
dGVudCgpOworICAgIC8vIENvbnZlcnQgaW5saW5lIHJ1biBnZW9tZXRyeSBmcm9tIHJlbGF0aXZl
IHRvIHRoZSBiYXNlbGluZSB0byByZWxhdGl2ZSB0byBsb2dpY2FsIHRvcC4KKyAgICBmb3IgKGF1
dG8mIGxpbmVJdGVtIDogbV9saW5lSXRlbXMpIHsKKyAgICAgICAgYXV0byBhZGp1c3RlZExvZ2lj
YWxUb3AgPSBsaW5lSXRlbS0+aW5saW5lUnVuLmxvZ2ljYWxUb3AoKSArIG1fbG9naWNhbEhlaWdo
dC5oZWlnaHQgKyBtX2xvZ2ljYWxUb3BMZWZ0LnkoKTsKKyAgICAgICAgbGluZUl0ZW0tPmlubGlu
ZVJ1bi5zZXRMb2dpY2FsVG9wKGFkanVzdGVkTG9naWNhbFRvcCk7CisgICAgfQorICAgIHJldHVy
biBtX2xpbmVJdGVtczsKK30KKwordm9pZCBMaW5lOjpyZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNv
bnRlbnQoKQoreworICAgIC8vIENvbGxhcHNlIHRyaW1tYWJsZSB0cmFpbGluZyBjb250ZW50Cisg
ICAgTGF5b3V0VW5pdCB0cmltbWFibGVXaWR0aDsKKyAgICBmb3IgKGF1dG8qIHRyaW1tYWJsZVJ1
biA6IG1fdHJpbW1hYmxlQ29udGVudCkgeworICAgICAgICB0cmltbWFibGVSdW4tPmlzQ29sbGFw
c2VkID0gdHJ1ZTsKKyAgICAgICAgdHJpbW1hYmxlV2lkdGggKz0gdHJpbW1hYmxlUnVuLT5pbmxp
bmVSdW4ubG9naWNhbFdpZHRoKCk7CisgICAgfQorICAgIG1fY29udGVudExvZ2ljYWxXaWR0aCAt
PSB0cmltbWFibGVXaWR0aDsKK30KKwordm9pZCBMaW5lOjptb3ZlTG9naWNhbExlZnQoTGF5b3V0
VW5pdCBkZWx0YSkKK3sKKyAgICBpZiAoIWRlbHRhKQorICAgICAgICByZXR1cm47CisgICAgQVNT
RVJUKGRlbHRhID4gMCk7CisgICAgLy8gU2hyaW5rIHRoZSBsaW5lIGFuZCBtb3ZlIHRoZSBpdGVt
cy4KKyAgICBtX2xvZ2ljYWxUb3BMZWZ0Lm1vdmUoZGVsdGEsIDApOworICAgIG1fbGluZUxvZ2lj
YWxXaWR0aCAtPSBkZWx0YTsKKyAgICBmb3IgKGF1dG8mIGxpbmVJdGVtIDogbV9saW5lSXRlbXMp
CisgICAgICAgIGxpbmVJdGVtLT5pbmxpbmVSdW4ubW92ZUhvcml6b250YWxseShkZWx0YSk7Cit9
CisKK3ZvaWQgTGluZTo6bW92ZUxvZ2ljYWxSaWdodChMYXlvdXRVbml0IGRlbHRhKQoreworICAg
IEFTU0VSVChkZWx0YSA+IDApOworICAgIG1fbGluZUxvZ2ljYWxXaWR0aCAtPSBkZWx0YTsKK30K
KworTGF5b3V0VW5pdCBMaW5lOjp0cmFpbGluZ1RyaW1tYWJsZVdpZHRoKCkgY29uc3QKK3sKKyAg
ICBMYXlvdXRVbml0IHRyaW1tYWJsZVdpZHRoOworICAgIGZvciAoYXV0byogdHJpbW1hYmxlUnVu
IDogbV90cmltbWFibGVDb250ZW50KQorICAgICAgICB0cmltbWFibGVXaWR0aCArPSB0cmltbWFi
bGVSdW4tPmlubGluZVJ1bi5sb2dpY2FsV2lkdGgoKTsKKyAgICByZXR1cm4gdHJpbW1hYmxlV2lk
dGg7Cit9CisKK2Jvb2wgTGluZTo6aGFzQ29udGVudCgpIGNvbnN0Cit7CisgICAgLy8gUmV0dXJu
IGZhbHNlIGZvciBlbXB0eSBjb250YWluZXJzIGxpa2UgPHNwYW4+PC9zcGFuPi4KKyAgICBpZiAo
bV9saW5lSXRlbXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChh
dXRvJiBsaW5lSXRlbSA6IG1fbGluZUl0ZW1zKSB7CisgICAgICAgIGlmIChsaW5lSXRlbS0+aW5s
aW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgbGluZUl0ZW0tPmlubGluZUl0ZW0uaXNDb250
YWluZXJFbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWxpbmVJdGVt
LT5pc0NvbGxhcHNlZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgTGluZTo6YXBwZW5kTm9uQnJlYWthYmxlU3BhY2UoY29uc3Qg
SW5saW5lSXRlbSYgaW5saW5lSXRlbSwgY29uc3QgRGlzcGxheTo6UmVjdCYgbG9naWNhbFJlY3Qp
Cit7CisgICAgbV9saW5lSXRlbXMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8TGluZUl0ZW0+KERp
c3BsYXk6OlJ1biB7IGxvZ2ljYWxSZWN0IH0sIGlubGluZUl0ZW0sIGZhbHNlLCBmYWxzZSkpOwor
ICAgIG1fY29udGVudExvZ2ljYWxXaWR0aCArPSBpbmxpbmVJdGVtLndpZHRoKCk7Cit9CisKK3Zv
aWQgTGluZTo6YXBwZW5kSW5saW5lQ29udGFpbmVyU3RhcnQoY29uc3QgSW5saW5lSXRlbSYgaW5s
aW5lSXRlbSkKK3sKKyAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVJdGVtLmxheW91dEJveCgp
OworICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgYXV0byYgZm9udE1l
dHJpY3MgPSBzdHlsZS5mb250TWV0cmljcygpOworCisgICAgYXV0byBhbGlnbkFuZEFkanVzdExp
bmVIZWlnaHQgPSBbJl0geworICAgICAgICBMYXlvdXRVbml0IGlubGluZUJveEhlaWdodCA9IHN0
eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpOworCisgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBo
YWxmTGVhZGluZ01ldHJpY3MoZm9udE1ldHJpY3MsIGlubGluZUJveEhlaWdodCk7CisgICAgICAg
IGlmIChoYWxmTGVhZGluZy5kZXB0aCA+IDApCisgICAgICAgICAgICBtX2xvZ2ljYWxIZWlnaHQu
ZGVwdGggPSBzdGQ6Om1heChtX2xvZ2ljYWxIZWlnaHQuZGVwdGgsIGhhbGZMZWFkaW5nLmRlcHRo
KTsKKyAgICAgICAgaWYgKGhhbGZMZWFkaW5nLmhlaWdodCA+IDApCisgICAgICAgICAgICBtX2xv
Z2ljYWxIZWlnaHQuaGVpZ2h0ID0gc3RkOjptYXgobV9sb2dpY2FsSGVpZ2h0LmhlaWdodCwgaGFs
ZkxlYWRpbmcuaGVpZ2h0KTsKKyAgICB9OworCisgICAgYWxpZ25BbmRBZGp1c3RMaW5lSGVpZ2h0
KCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IG1fbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxh
eW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8gY29udGFpbmVySGVpZ2h0ID0gZm9udE1ldHJp
Y3MuaGVpZ2h0KCkgKyBkaXNwbGF5Qm94LnZlcnRpY2FsQm9yZGVyKCkgKyBkaXNwbGF5Qm94LnZl
cnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMCk7CisgICAgYXV0byBsb2dpY2FsVG9wID0gLWZvbnRN
ZXRyaWNzLmFzY2VudCgpIC0gZGlzcGxheUJveC5ib3JkZXJUb3AoKSAtIGRpc3BsYXlCb3gucGFk
ZGluZ1RvcCgpLnZhbHVlT3IoMCk7CisgICAgYXV0byBsb2dpY2FsUmVjdCA9IERpc3BsYXk6OlJl
Y3QgeyBsb2dpY2FsVG9wLCBjb250ZW50TG9naWNhbFJpZ2h0KCksIGlubGluZUl0ZW0ud2lkdGgo
KSwgY29udGFpbmVySGVpZ2h0IH07CisgICAgYXBwZW5kTm9uQnJlYWthYmxlU3BhY2UoaW5saW5l
SXRlbSwgbG9naWNhbFJlY3QpOworfQorCit2b2lkIExpbmU6OmFwcGVuZElubGluZUNvbnRhaW5l
ckVuZChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQoreworICAgIC8vIFRoaXMgaXMgcmVh
bGx5IGp1c3QgYSBwbGFjZWhvbGRlciB0byBtYXJrIHRoZSBlbmQgb2YgdGhlIGlubGluZSBsZXZl
bCBjb250YWluZXIuCisgICAgYXV0byBsb2dpY2FsUmVjdCA9IERpc3BsYXk6OlJlY3QgeyAwLCBj
b250ZW50TG9naWNhbFJpZ2h0KCksIGlubGluZUl0ZW0ud2lkdGgoKSwgMCB9OworICAgIGFwcGVu
ZE5vbkJyZWFrYWJsZVNwYWNlKGlubGluZUl0ZW0sIGxvZ2ljYWxSZWN0KTsKK30KKwordm9pZCBM
aW5lOjphcHBlbmRUZXh0Q29udGVudChjb25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lSXRlbSwg
TGF5b3V0U2l6ZSBydW5TaXplKQoreworICAgIGF1dG8gaXNUcmltbWFibGUgPSBUZXh0VXRpbDo6
aXNUcmltbWFibGVDb250ZW50KGlubGluZUl0ZW0pOworICAgIGlmICghaXNUcmltbWFibGUpCisg
ICAgICAgIG1fdHJpbW1hYmxlQ29udGVudC5jbGVhcigpOworCisgICAgYXV0byBzaG91bGRDb2xs
YXBzZUNvbXBsZXRlbHkgPSBbJl0geworICAgICAgICBpZiAoIWlzVHJpbW1hYmxlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBMZWFkaW5nIHdoaXRlc3BhY2UuCisgICAg
ICAgIGlmIChtX2xpbmVJdGVtcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGxhc3QgaXRlbSBpcyB0cmltbWFibGUgYXMgd2VsbC4K
KyAgICAgICAgZm9yIChpbnQgaW5kZXggPSBtX2xpbmVJdGVtcy5zaXplKCkgLSAxOyBpbmRleCA+
PSAwOyAtLWluZGV4KSB7CisgICAgICAgICAgICBhdXRvJiBpbmxpbmVJdGVtID0gbV9saW5lSXRl
bXNbaW5kZXhdLT5pbmxpbmVJdGVtOworICAgICAgICAgICAgaWYgKGlubGluZUl0ZW0uaXNCb3go
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoaW5saW5l
SXRlbS5pc1RleHQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFV0aWw6OmlzVHJpbW1h
YmxlQ29udGVudChpbmxpbmVJdGVtKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVJdGVtLmlz
Q29udGFpbmVyU3RhcnQoKSB8fCBpbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5kKCkpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAgICAvLyBDb2xsYXBzZWQgbGlu
ZSBpdGVtcyBkb24ndCBjb250cmlidXRlIHRvIHRoZSBsaW5lIHdpZHRoLgorICAgIGF1dG8gaXND
b21wbGV0ZWx5Q29sbGFwc2VkID0gc2hvdWxkQ29sbGFwc2VDb21wbGV0ZWx5KCk7CisgICAgYXV0
byBjYW5CZUV4dGVuZGVkID0gIWlzQ29tcGxldGVseUNvbGxhcHNlZCAmJiAhaW5saW5lSXRlbS5p
c0NvbGxhcHNlZCgpOworICAgIGF1dG8gbG9naWNhbFJlY3QgPSBEaXNwbGF5OjpSZWN0IHsgLWlu
bGluZUl0ZW0uc3R5bGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpLCBjb250ZW50TG9naWNhbFJp
Z2h0KCksIHJ1blNpemUud2lkdGgoKSwgcnVuU2l6ZS5oZWlnaHQoKSB9OworICAgIGF1dG8gdGV4
dENvbnRleHQgPSBEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0IHsgaW5saW5lSXRlbS5zdGFydCgp
LCBpbmxpbmVJdGVtLmlzQ29sbGFwc2VkKCkgPyAxIDogaW5saW5lSXRlbS5sZW5ndGgoKSB9Owor
ICAgIGF1dG8gZGlzcGxheVJ1biA9IERpc3BsYXk6OlJ1bihsb2dpY2FsUmVjdCwgdGV4dENvbnRl
eHQpOworCisgICAgYXV0byBsaW5lSXRlbSA9IHN0ZDo6bWFrZV91bmlxdWU8TGluZUl0ZW0+KGRp
c3BsYXlSdW4sIGlubGluZUl0ZW0sIGlzQ29tcGxldGVseUNvbGxhcHNlZCwgY2FuQmVFeHRlbmRl
ZCk7CisgICAgaWYgKGlzVHJpbW1hYmxlKQorICAgICAgICBtX3RyaW1tYWJsZUNvbnRlbnQuYWRk
KGxpbmVJdGVtLmdldCgpKTsKKworICAgIG1fbGluZUl0ZW1zLmFwcGVuZChXVEZNb3ZlKGxpbmVJ
dGVtKSk7CisgICAgbV9jb250ZW50TG9naWNhbFdpZHRoICs9IGlzQ29tcGxldGVseUNvbGxhcHNl
ZCA/IExheW91dFVuaXQoKSA6IHJ1blNpemUud2lkdGgoKTsKK30KKwordm9pZCBMaW5lOjphcHBl
bmROb25SZXBsYWNlZElubGluZUJveChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlv
dXRTaXplIHJ1blNpemUpCit7CisgICAgYXV0byBhbGlnbkFuZEFkanVzdExpbmVIZWlnaHQgPSBb
Jl0geworICAgICAgICBhdXRvIGlubGluZUJveEhlaWdodCA9IHJ1blNpemUuaGVpZ2h0KCk7Cisg
ICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGxvb2sgaW5zaWRlIHRoZSBpbmxpbmUtYmxvY2sn
cyBmb3JtYXR0aW5nIGNvbnRleHQgYW5kIGNoZWNrIHRoZSBsaW5lYm94ZXMgKGlmIGFueSkgdG8g
YmUgYWJsZSB0byBiYXNlbGluZSBhbGlnbi4KKyAgICAgICAgaWYgKGlubGluZUl0ZW0ubGF5b3V0
Qm94KCkuZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7CisgICAgICAgICAg
ICBpZiAoaW5saW5lQm94SGVpZ2h0ID09IGxvZ2ljYWxIZWlnaHQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBmYWlscyB3aGVuIHRoZSBsaW5l
IGhlaWdodCBkaWZmZXJlbmNlIGNvbWVzIGZyb20gZm9udC1zaXplIGRpZmYuCisgICAgICAgICAg
ICBtX2xvZ2ljYWxIZWlnaHQuZGVwdGggPSBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBtX2xvZ2lj
YWxIZWlnaHQuZGVwdGgpOworICAgICAgICAgICAgbV9sb2dpY2FsSGVpZ2h0LmhlaWdodCA9IHN0
ZDo6bWF4KGlubGluZUJveEhlaWdodCwgbV9sb2dpY2FsSGVpZ2h0LmhlaWdodCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gMCBkZXNjZW50IC0+IGJhc2VsaW5l
IGFsaWdtZW50IGZvciBub3cuCisgICAgICAgIG1fbG9naWNhbEhlaWdodC5kZXB0aCA9IHN0ZDo6
bWF4PExheW91dFVuaXQ+KDAsIG1fbG9naWNhbEhlaWdodC5kZXB0aCk7CisgICAgICAgIG1fbG9n
aWNhbEhlaWdodC5oZWlnaHQgPSBzdGQ6Om1heChpbmxpbmVCb3hIZWlnaHQsIG1fbG9naWNhbEhl
aWdodC5oZWlnaHQpOworICAgIH07CisKKyAgICBhbGlnbkFuZEFkanVzdExpbmVIZWlnaHQoKTsK
KyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbV9sYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KGlubGluZUl0ZW0ubGF5b3V0Qm94KCkpOworICAgIGF1dG8gbG9naWNhbFRvcCA9IC1ydW5T
aXplLmhlaWdodCgpOworICAgIGF1dG8gaG9yaXpvbnRhbE1hcmdpbiA9IGRpc3BsYXlCb3guaG9y
aXpvbnRhbE1hcmdpbigpOworICAgIGF1dG8gbG9naWNhbFJlY3QgPSBEaXNwbGF5OjpSZWN0IHsg
bG9naWNhbFRvcCwgY29udGVudExvZ2ljYWxSaWdodCgpICsgaG9yaXpvbnRhbE1hcmdpbi5zdGFy
dCwgcnVuU2l6ZS53aWR0aCgpLCBydW5TaXplLmhlaWdodCgpIH07CisKKyAgICBtX2xpbmVJdGVt
cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxMaW5lSXRlbT4oRGlzcGxheTo6UnVuIHsgbG9naWNh
bFJlY3QgfSwgaW5saW5lSXRlbSwgZmFsc2UsIGZhbHNlKSk7CisgICAgbV9jb250ZW50TG9naWNh
bFdpZHRoICs9IChydW5TaXplLndpZHRoKCkgKyBob3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgaG9y
aXpvbnRhbE1hcmdpbi5lbmQpOworICAgIG1fdHJpbW1hYmxlQ29udGVudC5jbGVhcigpOworfQor
Cit2b2lkIExpbmU6OmFwcGVuZFJlcGxhY2VkSW5saW5lQm94KGNvbnN0IElubGluZUl0ZW0mIGlu
bGluZUl0ZW0sIExheW91dFNpemUgcnVuU2l6ZSkKK3sKKyAgICAvLyBGSVhNRSBTdXJlbHkgcmVw
bGFjZWQgYm94ZXMgYmVoYXZlIGRpZmZlcmVudGx5LgorICAgIGFwcGVuZE5vblJlcGxhY2VkSW5s
aW5lQm94KGlubGluZUl0ZW0sIHJ1blNpemUpOworfQorCit2b2lkIExpbmU6OmFwcGVuZEhhcmRM
aW5lQnJlYWsoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKK3sKKyAgICBhdXRvIGFzY2Vu
dCA9IGlubGluZUl0ZW0ubGF5b3V0Qm94KCkuc3R5bGUoKS5mb250TWV0cmljcygpLmFzY2VudCgp
OworICAgIGF1dG8gbG9naWNhbFJlY3QgPSBEaXNwbGF5OjpSZWN0IHsgLWFzY2VudCwgY29udGVu
dExvZ2ljYWxSaWdodCgpLCB7IH0sIGxvZ2ljYWxIZWlnaHQoKSB9OworICAgIG1fbGluZUl0ZW1z
LmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPExpbmVJdGVtPihEaXNwbGF5OjpSdW4geyBsb2dpY2Fs
UmVjdCB9LCBpbmxpbmVJdGVtLCBmYWxzZSwgZmFsc2UpKTsKK30KKworTGluZTo6VXNlZEhlaWdo
dEFuZERlcHRoIExpbmU6OmhhbGZMZWFkaW5nTWV0cmljcyhjb25zdCBGb250TWV0cmljcyYgZm9u
dE1ldHJpY3MsIExheW91dFVuaXQgbGluZUxvZ2ljYWxIZWlnaHQpCit7CisgICAgYXV0byBhc2Nl
bnQgPSBmb250TWV0cmljcy5hc2NlbnQoKTsKKyAgICBhdXRvIGRlc2NlbnQgPSBmb250TWV0cmlj
cy5kZXNjZW50KCk7CisgICAgLy8gMTAuOC4xIExlYWRpbmcgYW5kIGhhbGYtbGVhZGluZworICAg
IGF1dG8gbGVhZGluZyA9IGxpbmVMb2dpY2FsSGVpZ2h0IC0gKGFzY2VudCArIGRlc2NlbnQpOwor
ICAgIC8vIElubGluZSB0cmVlIGlzIGFsbCBpbnRlZ2VyIGJhc2VkLgorICAgIGF1dG8gYWRqdXN0
ZWRBc2NlbnQgPSBzdGQ6Om1heCgoYXNjZW50ICsgbGVhZGluZyAvIDIpLmZsb29yKCksIDApOwor
ICAgIGF1dG8gYWRqdXN0ZWREZXNjZW50ID0gc3RkOjptYXgoKGRlc2NlbnQgKyBsZWFkaW5nIC8g
MikuY2VpbCgpLCAwKTsKKyAgICByZXR1cm4geyBhZGp1c3RlZEFzY2VudCwgYWRqdXN0ZWREZXNj
ZW50IH07Cit9CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzg2NjVjYjM1MWIy
MWE3ZmZhMjhlZjE0MGQ1ZTMxODI3OWYyN2E4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmUuaApAQCAtMCwwICsxLDEw
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJEaXNwbGF5UnVuLmgiCisjaW5jbHVkZSAiSW5s
aW5lSXRlbS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKwor
Y2xhc3MgTGluZSB7CitwdWJsaWM6CisgICAgTGluZShjb25zdCBMYXlvdXRTdGF0ZSYpOworCisg
ICAgdm9pZCByZXNldChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCwgTGF5b3V0VW5pdCBhdmFp
bGFibGVXaWR0aCwgTGF5b3V0VW5pdCBtaW5pbXVtTGluZUhlaWdodCwgTGF5b3V0VW5pdCBiYXNl
bGluZU9mZnNldCk7CisKKyAgICBzdHJ1Y3QgTGluZUl0ZW0geworICAgICAgICBMaW5lSXRlbShE
aXNwbGF5OjpSdW4sIGNvbnN0IElubGluZUl0ZW0mLCBib29sIGlzQ29sbGFwc2VkLCBib29sIGNh
bkJlRXh0ZW5kZWQpOworCisgICAgICAgIC8vIFJlbGF0aXZlIHRvIHRoZSBiYXNlbGluZS4KKyAg
ICAgICAgRGlzcGxheTo6UnVuIGlubGluZVJ1bjsKKyAgICAgICAgY29uc3QgSW5saW5lSXRlbSYg
aW5saW5lSXRlbTsKKyAgICAgICAgYm9vbCBpc0NvbGxhcHNlZCB7IGZhbHNlIH07CisgICAgICAg
IGJvb2wgY2FuQmVFeHRlbmRlZCB7IGZhbHNlIH07CisgICAgfTsKKworICAgIHVzaW5nIExpbmVJ
dGVtcyA9IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TGluZUl0ZW0+PjsKKyAgICBjb25zdCBMaW5l
SXRlbXMmIGNsb3NlKCk7CisKKyAgICB2b2lkIGFwcGVuZFRleHRDb250ZW50KGNvbnN0IElubGlu
ZVRleHRJdGVtJiwgTGF5b3V0U2l6ZSk7CisgICAgdm9pZCBhcHBlbmROb25SZXBsYWNlZElubGlu
ZUJveChjb25zdCBJbmxpbmVJdGVtJiwgTGF5b3V0U2l6ZSk7CisgICAgdm9pZCBhcHBlbmRSZXBs
YWNlZElubGluZUJveChjb25zdCBJbmxpbmVJdGVtJiwgTGF5b3V0U2l6ZSk7CisgICAgdm9pZCBh
cHBlbmRJbmxpbmVDb250YWluZXJTdGFydChjb25zdCBJbmxpbmVJdGVtJik7CisgICAgdm9pZCBh
cHBlbmRJbmxpbmVDb250YWluZXJFbmQoY29uc3QgSW5saW5lSXRlbSYpOworICAgIHZvaWQgYXBw
ZW5kSGFyZExpbmVCcmVhayhjb25zdCBJbmxpbmVJdGVtJik7CisKKyAgICBib29sIGhhc0NvbnRl
bnQoKSBjb25zdDsKKworICAgIExheW91dFVuaXQgdHJhaWxpbmdUcmltbWFibGVXaWR0aCgpIGNv
bnN0OworCisgICAgdm9pZCBtb3ZlTG9naWNhbExlZnQoTGF5b3V0VW5pdCk7CisgICAgdm9pZCBt
b3ZlTG9naWNhbFJpZ2h0KExheW91dFVuaXQpOworCisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxXaWR0aCgpIC0gY29udGVudExvZ2ljYWxXaWR0
aCgpOyB9CisgICAgCisgICAgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFJpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbG9naWNhbExlZnQoKSArIGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsgfQorICAgIExh
eW91dFVuaXQgY29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudExv
Z2ljYWxXaWR0aDsgfQorCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1
cm4gbV9sb2dpY2FsVG9wTGVmdC55KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KCkg
Y29uc3QgeyByZXR1cm4gbV9sb2dpY2FsVG9wTGVmdC54KCk7IH0KKyAgICBMYXlvdXRVbml0IGxv
Z2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMZWZ0KCkgKyBsb2dpY2FsV2lkdGgo
KTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGxvZ2lj
YWxUb3AoKSArIGxvZ2ljYWxIZWlnaHQoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lTG9naWNhbFdpZHRoOyB9CisgICAgTGF5b3V0VW5pdCBs
b2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsSGVpZ2h0LmhlaWdodCArIG1f
bG9naWNhbEhlaWdodC5kZXB0aDsgfQorCisgICAgc3RydWN0IFVzZWRIZWlnaHRBbmREZXB0aCB7
CisgICAgICAgIExheW91dFVuaXQgaGVpZ2h0OworICAgICAgICBMYXlvdXRVbml0IGRlcHRoOwor
ICAgIH07CisgICAgc3RhdGljIFVzZWRIZWlnaHRBbmREZXB0aCBoYWxmTGVhZGluZ01ldHJpY3Mo
Y29uc3QgRm9udE1ldHJpY3MmLCBMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KTsKKworcHJp
dmF0ZToKKyAgICB2b2lkIGFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKGNvbnN0IElubGluZUl0ZW0m
LCBjb25zdCBEaXNwbGF5OjpSZWN0JiBsb2dpY2FsUmVjdCk7CisgICAgdm9pZCByZW1vdmVUcmFp
bGluZ1RyaW1tYWJsZUNvbnRlbnQoKTsKKworICAgIGNvbnN0IExheW91dFN0YXRlJiBtX2xheW91
dFN0YXRlOworICAgIExpbmVJdGVtcyBtX2xpbmVJdGVtczsKKyAgICBMaXN0SGFzaFNldDxMaW5l
SXRlbSo+IG1fdHJpbW1hYmxlQ29udGVudDsKKworICAgIExheW91dFBvaW50IG1fbG9naWNhbFRv
cExlZnQ7CisgICAgTGF5b3V0VW5pdCBtX2NvbnRlbnRMb2dpY2FsV2lkdGg7CisKKyAgICBVc2Vk
SGVpZ2h0QW5kRGVwdGggbV9sb2dpY2FsSGVpZ2h0OworICAgIExheW91dFVuaXQgbV9saW5lTG9n
aWNhbFdpZHRoOworfTsKKworfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5oIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uaAppbmRleCAyODc0ZjI4
YTMxZGNkMDBhYmVkZTg4OTc1NzQ1MTNjYmUyOWUxNmRlLi5jN2Q4ZjM0YTRiNjBjMWY5MjY0Mzg1
Y2YzZjA3MDJkZmM1YTUzMTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRleHRJdGVtLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5jbHVkZSAiSW5saW5l
Rm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy90ZXh0L1RleHRVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwCmluZGV4IGMxMzllYWJhNzU3Njk2ZDNjODc2ZjQ0NGRj
Yzk3ZmVjN2MzYTYzZWIuLmVmZTc0YjVhMDQ1ZDZhYzU5Njg0Njk2NjNiMmEzMmQ4ZTU4ZDkyOTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQv
VGV4dFV0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L3RleHQvVGV4dFV0aWwuY3BwCkBAIC04OSw2ICs4OSwxNCBAQCBMYXlvdXRVbml0IFRleHRVdGls
OjpmaXhlZFBpdGNoV2lkdGgoU3RyaW5nIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
dW5zaQogICAgIHJldHVybiB3aWR0aDsKIH0KIAorYm9vbCBUZXh0VXRpbDo6aXNUcmltbWFibGVD
b250ZW50KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCit7CisgICAgaWYgKCFpczxJbmxp
bmVUZXh0SXRlbT4oaW5saW5lSXRlbSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRv
JiBpbmxpbmVUZXh0SXRlbSA9IGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKTsK
KyAgICByZXR1cm4gaW5saW5lVGV4dEl0ZW0uaXNXaGl0ZXNwYWNlKCkgJiYgaW5saW5lVGV4dEl0
ZW0uc3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKTsKK30KKwogfQogfQogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRV
dGlsLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRV
dGlsLmgKaW5kZXggZDBmZWE2YWQxZGRkNzI5ZDc0ZjliZGZiMWJjOWQyMWM5ODdkMmUwYy4uNWNm
NzdiZWUyY2EwYTk4OTQ0Yjc3NjdiMzc1MTE1ZDc2MDQwNjQwNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuaApAQCAt
MzYsNiArMzYsNyBAQCBjbGFzcyBUZXh0VXRpbCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIExheW91
dFVuaXQgd2lkdGgoY29uc3QgSW5saW5lQm94JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8s
IExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KTsKICAgICBzdGF0aWMgT3B0aW9uYWw8dW5z
aWduZWQ+IGh5cGhlblBvc2l0aW9uQmVmb3JlKGNvbnN0IElubGluZUl0ZW0mLCB1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBib29sIGlzVHJpbW1hYmxlQ29udGVu
dChjb25zdCBJbmxpbmVJdGVtJik7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIExheW91dFVuaXQg
Zml4ZWRQaXRjaFdpZHRoKFN0cmluZywgY29uc3QgUmVuZGVyU3R5bGUmLCB1bnNpZ25lZCBmcm9t
LCB1bnNpZ25lZCB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>