<?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>204986</bug_id>
          
          <creation_ts>2019-12-07 07:48:26 -0800</creation_ts>
          <short_desc>[LFC][IFC] Introduce InlineLayoutUnit</short_desc>
          <delta_ts>2019-12-07 10:18:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>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>1596575</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-12-07 07:48:26 -0800</bug_when>
    <thetext>While IFC uses LayoutUnit only, CLL has a mixture of different types like float, int and LayoutUnit. In order to match CLL&apos;s output, IFC needs to use similar types (or at least types with similar precision). Using LayoutUnit exclusively (and by that lowering the precision compared to what CLL ends up having) could cause significant difference in the final inline layout.
Let&apos;s introduce these 2 new types and map them to float, FloatRect 
1. to be able to match CLL&apos;s output
2. ensure that we use one type and one type only for geometry computation (can&apos;t really force it though).
3. be able to swap out the mapped type to something else when needed (like when we move over to a higher precision LayoutUnit)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596578</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-07 08:42:31 -0800</bug_when>
    <thetext>&lt;rdar://problem/57728333&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596579</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-07 08:51:41 -0800</bug_when>
    <thetext>&lt;rdar://problem/57728377&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596581</commentid>
    <comment_count>3</comment_count>
      <attachid>385100</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-12-07 09:23:17 -0800</bug_when>
    <thetext>Created attachment 385100
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596585</commentid>
    <comment_count>4</comment_count>
      <attachid>385100</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-07 10:18:24 -0800</bug_when>
    <thetext>Comment on attachment 385100
Patch

Clearing flags on attachment: 385100

Committed r253255: &lt;https://trac.webkit.org/changeset/253255&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596586</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-07 10:18:26 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385100</attachid>
            <date>2019-12-07 09:23:17 -0800</date>
            <delta_ts>2019-12-07 10:18:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204986-20191207092316.patch</filename>
            <type>text/plain</type>
            <size>60392</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjc1NWRlZWI5MjI3ZjFm
YTliMGI4MGU1OGViMTUyNjJkZTYwZDczOC4uYzEzNzQ4MmJiMTc3YTI1MzY0YzhkMmQxNWYxMzg3
YjA0NTYwZWI2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOSBAQAorMjAxOS0xMi0wNyAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdW0lGQ10gSW50cm9k
dWNlIElubGluZUxheW91dFVuaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNDk4NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTc3MjgzMzM+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hpbGUgSUZD
IHVzZXMgTGF5b3V0VW5pdCB0eXBlIHNvbGVseSB0byBjb21wdXRlIGlubGluZSBnZW9tZXRyeSwg
Y29tcGxleCBsaW5lIGxheW91dCAoQ0xMKSBoYXMKKyAgICAgICAgYWRvcHRlZCBzZXZlcmFsIGRp
ZmZlcmVudCB0eXBlcyBvdmVyIHRpbWUgKGludCwgZmxvYXQgYW5kIExheW91dFVuaXQpLiBUaGVz
ZSB0eXBlcyBhbGwgaGF2ZSBkaWZmZXJlbnQgcHJlY2lzaW9ucy4KKyAgICAgICAgSW4gb3JkZXIg
dG8gbWF0Y2ggQ0xMJ3Mgb3V0cHV0IChpbmxpbmUgdHJlZSBnZW9tZXRyeSkgSUZDIG5lZWRzIHRv
IHVzZSBhIHR5cGUgdGhhdCBoYXMKKyAgICAgICAgcm91Z2hseSB0aGUgc2FtZSBwcmVjaXNpb24g
YXMgd2hhdCBDTEwgdXNlcy4KKyAgICAgICAgTGF5b3V0VW5pdCBjdXJyZW50bHkgZG9lcyBub3Qg
aGF2ZSBoaWdoIGVub3VnaCBwcmVjaXNpb24gKDEvNjQpIHRvIHByb2R1Y2UgbWF0Y2hpbmcgcmVz
dWx0cy4KKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIElubGluZUxheW91dFVuaXQuIEl0
IGlzIGdvaW5nIHRvIGJlIG1hcHBlZCB0byAnZmxvYXQnIGZvciBub3cgKGluIGEgc3Vic2VxdWVu
dCBwYXRjaCkuCisgICAgICAgIEl0IGhlbHBzIHRvIGtlZXAgb25lIHVuaWZvcm0gdHlwZSBhY3Jv
c3MgdGhlIElGQyBjb2RlYmFzZSBhbmQgd2UgY291bGQgYWxzbyBqdXN0IHJlLW1hcCBpdCB0byBz
b21ldGhpbmcKKyAgICAgICAgbW9yZSBhcHByb3ByaWF0ZSBpbiB0aGUgZnV0dXJlLiAKKworICAg
ICAgICAqIGxheW91dC9MYXlvdXRVbml0cy5oOgorICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJl
ZS9EaXNwbGF5TGluZUJveC5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6TGluZUJveDo6
QmFzZWxpbmU6OmhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpMaW5l
Qm94Ojpsb2dpY2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpMaW5l
Qm94Ojpsb2dpY2FsUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6TGlu
ZUJveDo6bG9naWNhbFRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpMaW5l
Qm94Ojpsb2dpY2FsQm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6Okxp
bmVCb3g6OmxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpM
aW5lQm94Ojpsb2dpY2FsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OkxpbmVCb3g6OnNldExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
TGluZUJveDo6c2V0TG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6Okxp
bmVCb3g6Om1vdmVIb3Jpem9udGFsbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6TGlu
ZUJveDo6ZXhwYW5kSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6Okxp
bmVCb3g6OnNocmlua0hvcml6b250YWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpM
aW5lQm94OjpleHBhbmRWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6Okxp
bmVCb3g6OnNocmlua1ZlcnRpY2FsbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6TGlu
ZUJveDo6TGluZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpMaW5lQm94OjpzZXRM
b2dpY2FsSGVpZ2h0SWZHcmVhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkxpbmVC
b3g6OnNldEJhc2VsaW5lT2Zmc2V0SWZHcmVhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OkxpbmVCb3g6OnNldEFzY2VudElmR3JlYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpMaW5lQm94OjpzZXREZXNjZW50SWZHcmVhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OkxpbmVCb3g6OmJhc2VsaW5lT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OkxpbmVCb3g6OkJhc2VsaW5lOjpCYXNlbGluZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5OjpMaW5lQm94OjpCYXNlbGluZTo6c2V0QXNjZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXk6OkxpbmVCb3g6OkJhc2VsaW5lOjpzZXREZXNjZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OkxpbmVCb3g6OkJhc2VsaW5lOjphc2NlbnQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6TGluZUJveDo6QmFzZWxpbmU6OmRlc2NlbnQgY29uc3QpOgor
ICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoRm9y
Q29uc3RyYWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1h
dHRpbmdDb250ZXh0Ojpjb25zdHJhaW50c0ZvckxpbmUpOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjps
aW5lSGVpZ2h0Q29uc3RyYWludHMgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJyZWFrZXI6OnNob3VsZFdyYXBGbG9hdEJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCcmVha2VyOjp3b3JkQnJlYWtpbmdCZWhhdmlvciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjp0cnlCcmVha2luZ1RleHRSdW4gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6Q29udGVudDo6YXBwZW5kKToK
KyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6Q29udGVudDo6d2lkdGggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6Q29udGVudDo6bm9u
VHJpbW1hYmxlV2lkdGggY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OlJ1bjo6c2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5zaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6YWxpZ25Db250ZW50VmVydGljYWxseSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpqdXN0aWZ5UnVucyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjphbGlnbkNvbnRlbnRIb3Jpem9udGFs
bHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6bW92ZUxv
Z2ljYWxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6Om1vdmVM
b2dpY2FsUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6YXBw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmFwcGVuZE5vbkJy
ZWFrYWJsZVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmFw
cGVuZElubGluZUNvbnRhaW5lclN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OmFwcGVuZElubGluZUNvbnRhaW5lckVuZCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVCdWlsZGVyOjphcHBlbmRUZXh0Q29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjphcHBlbmROb25SZXBsYWNlZElubGluZUJveCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjphcHBlbmRSZXBsYWNlZElubGluZUJv
eCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpydW5Db250ZW50SGVp
Z2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmhhbGZM
ZWFkaW5nTWV0cmljcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpU
cmltbWFibGVDb250ZW50OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
QnVpbGRlcjo6VHJpbW1hYmxlQ29udGVudDo6dHJpbSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCdWlsZGVyOjpUcmltbWFibGVDb250ZW50Ojp0cmltVHJhaWxpbmdSdW4pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6SW5saW5l
SXRlbVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxpbmVJ
dGVtUnVuOjp0cmFpbGluZ0xldHRlclNwYWNpbmcgY29uc3QpOgorICAgICAgICAqIGxheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVCdWlsZGVyOjphdmFpbGFibGVXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjp0cmFpbGluZ1RyaW1tYWJsZVdpZHRoIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6YWRqdXN0TG9naWNh
bFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46Om1vdmVI
b3Jpem9udGFsbHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVu
Ojptb3ZlVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpSdW46OnNldExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
QnVpbGRlcjo6bG9naWNhbFRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCdWlsZGVyOjpsb2dpY2FsQm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OmxvZ2ljYWxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJ1aWxkZXI6OmxvZ2ljYWxSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpsb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6bG9naWNhbEhlaWdodCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpjb250ZW50TG9naWNhbFdpZHRoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmNvbnRlbnRMb2dpY2Fs
UmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6YmFz
ZWxpbmVPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRl
cjo6SW5saW5lSXRlbVJ1bjo6bG9naWNhbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6bG9naWNhbFdpZHRoIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OklubGluZUl0ZW1SdW46Om1v
dmVIb3Jpem9udGFsbHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6
VHJpbW1hYmxlQ29udGVudDo6d2lkdGggY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZVRleHRJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lVGV4dEl0ZW06OmNyZWF0ZUFuZEFwcGVuZFRleHRJdGVtcyk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZVRleHRJdGVtOjpjcmVhdGVXaGl0ZXNwYWNlSXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZVRleHRJdGVtOjpjcmVhdGVOb25XaGl0ZXNwYWNl
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZVRleHRJdGVtOjpJbmxpbmVU
ZXh0SXRlbSk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0
ZW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lVGV4dEl0ZW06OndpZHRoIGNv
bnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlubGluZUl0ZW1XaWR0aCk6CisgICAg
ICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OlRleHRVdGlsOjp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OlRleHRVdGlsOjpmaXhlZFBpdGNoV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpUZXh0VXRpbDo6c3BsaXQpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L3RleHQvVGV4dFV0aWwuaDoKKwogMjAxOS0xMi0wNyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBh
cHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIExpbmVCb3ggdG8gRGlzcGxheSBu
YW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRVbml0cy5o
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dFVuaXRzLmgKaW5kZXggZGJlOTQwMDdjYTc3
YjAyMDY0OTIyMzU1MTRmYjg3YTNkMjJkNmZiMy4uY2U4ZDI0YjMzY2RjZjA3ZjdkOTYyODA1ZDQw
NDc5YjA3ZTNiMjI3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dFVu
aXRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dFVuaXRzLmgKQEAgLTM4LDYg
KzM4LDggQEAgbmFtZXNwYWNlIERpc3BsYXkgewogY2xhc3MgQm94OwogfQogCit1c2luZyBJbmxp
bmVMYXlvdXRVbml0ID0gTGF5b3V0VW5pdDsKKwogbmFtZXNwYWNlIExheW91dCB7CiAKIHN0cnVj
dCBQb3NpdGlvbiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRy
ZWUvRGlzcGxheUxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9E
aXNwbGF5TGluZUJveC5oCmluZGV4IDM5MDk2MTBlOWNiMjA4ZDA3NzQ4ODUzYjJlMDUxNzQ2YTFm
MDkzNzUuLjUyMGY0Mjc3MDhhY2UyOWYzOTk2ZGZiOTVmZTBjNGJiM2ZjNGI4Y2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5TGluZUJveC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5TGluZUJveC5oCkBA
IC0zNiwzOSArMzYsMzkgQEAgY2xhc3MgTGluZUJveCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgc3RydWN0IEJhc2VsaW5lIHsKLSAgICAgICAgQmFzZWxpbmUo
TGF5b3V0VW5pdCBhc2NlbnQsIExheW91dFVuaXQgZGVzY2VudCk7CisgICAgICAgIEJhc2VsaW5l
KElubGluZUxheW91dFVuaXQgYXNjZW50LCBJbmxpbmVMYXlvdXRVbml0IGRlc2NlbnQpOwogICAg
ICAgICBCYXNlbGluZSgpID0gZGVmYXVsdDsKIAotICAgICAgICB2b2lkIHNldEFzY2VudChMYXlv
dXRVbml0KTsKLSAgICAgICAgdm9pZCBzZXREZXNjZW50KExheW91dFVuaXQpOworICAgICAgICB2
b2lkIHNldEFzY2VudChJbmxpbmVMYXlvdXRVbml0KTsKKyAgICAgICAgdm9pZCBzZXREZXNjZW50
KElubGluZUxheW91dFVuaXQpOwogCiAgICAgICAgIHZvaWQgcmVzZXQoKTsKIAotICAgICAgICBM
YXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGFzY2VudCgpICsgZGVzY2VudCgpOyB9
Ci0gICAgICAgIExheW91dFVuaXQgYXNjZW50KCkgY29uc3Q7Ci0gICAgICAgIExheW91dFVuaXQg
ZGVzY2VudCgpIGNvbnN0OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIGFzY2VudCgpICsgZGVzY2VudCgpOyB9CisgICAgICAgIElubGluZUxheW91dFVu
aXQgYXNjZW50KCkgY29uc3Q7CisgICAgICAgIElubGluZUxheW91dFVuaXQgZGVzY2VudCgpIGNv
bnN0OwogCiAgICAgcHJpdmF0ZToKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIGJvb2wg
bV9oYXNWYWxpZEFzY2VudCB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgbV9oYXNWYWxpZERlc2Nl
bnQgeyBmYWxzZSB9OwogI2VuZGlmCi0gICAgICAgIExheW91dFVuaXQgbV9hc2NlbnQ7Ci0gICAg
ICAgIExheW91dFVuaXQgbV9kZXNjZW50OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fYXNj
ZW50OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fZGVzY2VudDsKICAgICB9OwogCi0gICAg
TGluZUJveChSZWN0LCBjb25zdCBCYXNlbGluZSYsIExheW91dFVuaXQgYmFzZWxpbmVPZmZzZXQp
OworICAgIExpbmVCb3goUmVjdCwgY29uc3QgQmFzZWxpbmUmLCBJbmxpbmVMYXlvdXRVbml0IGJh
c2VsaW5lT2Zmc2V0KTsKICAgICBMaW5lQm94KCkgPSBkZWZhdWx0OwogICAgIAogICAgIExheW91
dFBvaW50IGxvZ2ljYWxUb3BMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LnRvcExlZnQoKTsg
fQogCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5s
ZWZ0KCk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdC5yaWdodCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0LnRvcCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWN0LmJvdHRvbSgpOyB9CisgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2Fs
TGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5sZWZ0KCk7IH0KKyAgICBJbmxpbmVMYXlvdXRV
bml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5yaWdodCgpOyB9CisgICAg
SW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LnRvcCgp
OyB9CisgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4g
bV9yZWN0LmJvdHRvbSgpOyB9CiAKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdC53aWR0aCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LmhlaWdodCgpOyB9CisgICAgSW5saW5lTGF5b3V0VW5p
dCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3JlY3Qud2lkdGgoKTsgfQorICAgIElu
bGluZUxheW91dFVuaXQgbG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5oZWln
aHQoKTsgfQogCiAgICAgY29uc3QgQmFzZWxpbmUmIGJhc2VsaW5lKCkgY29uc3Q7CiAgICAgLy8g
QmFzZWxpbmUgb2Zmc2V0IGZyb20gbGluZSBsb2dpY2FsIHRvcC4gTm90ZSB0aGF0IG9mZnNldCBk
b2VzIG5vdCBuZWNlc3NhcmlseSBlcXVhbCB0byBhc2NlbnQuCkBAIC04NiwyNyArODYsMjcgQEAg
cHVibGljOgogICAgIC8vICAgfCBkZXNjZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdgogICAgIC8vICAgdgogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0gICAgbGluZSBs
b2dpY2FsIGJvdHRvbSAgLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIExheW91dFVuaXQgYmFzZWxp
bmVPZmZzZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldEJhc2VsaW5lT2Zmc2V0SWZHcmVhdGVyKExh
eW91dFVuaXQpOwotICAgIHZvaWQgc2V0QXNjZW50SWZHcmVhdGVyKExheW91dFVuaXQpOwotICAg
IHZvaWQgc2V0RGVzY2VudElmR3JlYXRlcihMYXlvdXRVbml0KTsKKyAgICBJbmxpbmVMYXlvdXRV
bml0IGJhc2VsaW5lT2Zmc2V0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRCYXNlbGluZU9mZnNldElm
R3JlYXRlcihJbmxpbmVMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldEFzY2VudElmR3JlYXRlcihJ
bmxpbmVMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldERlc2NlbnRJZkdyZWF0ZXIoSW5saW5lTGF5
b3V0VW5pdCk7CiAKICAgICB2b2lkIHJlc2V0QmFzZWxpbmUoKTsKICAgICB2b2lkIHJlc2V0RGVz
Y2VudCgpIHsgbV9iYXNlbGluZS5zZXREZXNjZW50KDBfbHUpOyB9CiAKICAgICB2b2lkIHNldExv
Z2ljYWxUb3BMZWZ0KExheW91dFBvaW50IGxvZ2ljYWxUb3BMZWZ0KSB7IG1fcmVjdC5zZXRUb3BM
ZWZ0KGxvZ2ljYWxUb3BMZWZ0KTsgfQotICAgIHZvaWQgc2V0TG9naWNhbEhlaWdodChMYXlvdXRV
bml0IGxvZ2ljYWxIZWlnaHQpIHsgbV9yZWN0LnNldEhlaWdodChsb2dpY2FsSGVpZ2h0KTsgfQor
ICAgIHZvaWQgc2V0TG9naWNhbEhlaWdodChJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQp
IHsgbV9yZWN0LnNldEhlaWdodChsb2dpY2FsSGVpZ2h0KTsgfQogCi0gICAgdm9pZCBzZXRMb2dp
Y2FsSGVpZ2h0SWZHcmVhdGVyKExheW91dFVuaXQpOwotICAgIHZvaWQgc2V0TG9naWNhbFdpZHRo
KExheW91dFVuaXQgbG9naWNhbFdpZHRoKSB7IG1fcmVjdC5zZXRXaWR0aChsb2dpY2FsV2lkdGgp
OyB9CisgICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKElubGluZUxheW91dFVuaXQp
OworICAgIHZvaWQgc2V0TG9naWNhbFdpZHRoKElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRo
KSB7IG1fcmVjdC5zZXRXaWR0aChsb2dpY2FsV2lkdGgpOyB9CiAKLSAgICB2b2lkIG1vdmVIb3Jp
em9udGFsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX3JlY3QubW92ZUhvcml6b250YWxseShkZWx0
YSk7IH0KKyAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5pdCBkZWx0YSkg
eyBtX3JlY3QubW92ZUhvcml6b250YWxseShkZWx0YSk7IH0KIAotICAgIHZvaWQgZXhwYW5kSG9y
aXpvbnRhbGx5KExheW91dFVuaXQgZGVsdGEpIHsgbV9yZWN0LmV4cGFuZEhvcml6b250YWxseShk
ZWx0YSk7IH0KLSAgICB2b2lkIHNocmlua0hvcml6b250YWxseShMYXlvdXRVbml0IGRlbHRhKSB7
IGV4cGFuZEhvcml6b250YWxseSgtZGVsdGEpOyB9CisgICAgdm9pZCBleHBhbmRIb3Jpem9udGFs
bHkoSW5saW5lTGF5b3V0VW5pdCBkZWx0YSkgeyBtX3JlY3QuZXhwYW5kSG9yaXpvbnRhbGx5KGRl
bHRhKTsgfQorICAgIHZvaWQgc2hyaW5rSG9yaXpvbnRhbGx5KElubGluZUxheW91dFVuaXQgZGVs
dGEpIHsgZXhwYW5kSG9yaXpvbnRhbGx5KC1kZWx0YSk7IH0KIAotICAgIHZvaWQgZXhwYW5kVmVy
dGljYWxseShMYXlvdXRVbml0IGRlbHRhKSB7IG1fcmVjdC5leHBhbmRWZXJ0aWNhbGx5KGRlbHRh
KTsgfQotICAgIHZvaWQgc2hyaW5rVmVydGljYWxseShMYXlvdXRVbml0IGRlbHRhKSB7IGV4cGFu
ZFZlcnRpY2FsbHkoLWRlbHRhKTsgfQorICAgIHZvaWQgZXhwYW5kVmVydGljYWxseShJbmxpbmVM
YXlvdXRVbml0IGRlbHRhKSB7IG1fcmVjdC5leHBhbmRWZXJ0aWNhbGx5KGRlbHRhKTsgfQorICAg
IHZvaWQgc2hyaW5rVmVydGljYWxseShJbmxpbmVMYXlvdXRVbml0IGRlbHRhKSB7IGV4cGFuZFZl
cnRpY2FsbHkoLWRlbHRhKTsgfQogCiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIy
L3Zpc3VyZW4uaHRtbCNpbmxpbmUtZm9ybWF0dGluZwogICAgIC8vIExpbmUgYm94ZXMgdGhhdCBj
b250YWluIG5vIHRleHQsIG5vIHByZXNlcnZlZCB3aGl0ZSBzcGFjZSwgbm8gaW5saW5lIGVsZW1l
bnRzIHdpdGggbm9uLXplcm8gbWFyZ2lucywgcGFkZGluZywgb3IgYm9yZGVycywKQEAgLTEyNSwx
MSArMTI1LDExIEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBSZWN0IG1fcmVjdDsKICAgICBCYXNl
bGluZSBtX2Jhc2VsaW5lOwotICAgIExheW91dFVuaXQgbV9iYXNlbGluZU9mZnNldDsKKyAgICBJ
bmxpbmVMYXlvdXRVbml0IG1fYmFzZWxpbmVPZmZzZXQ7CiAgICAgYm9vbCBtX2lzQ29uc2lkZXJl
ZEVtcHR5IHsgdHJ1ZSB9OwogfTsKIAotaW5saW5lIExpbmVCb3g6OkxpbmVCb3goUmVjdCByZWN0
LCBjb25zdCBCYXNlbGluZSYgYmFzZWxpbmUsIExheW91dFVuaXQgYmFzZWxpbmVPZmZzZXQpCitp
bmxpbmUgTGluZUJveDo6TGluZUJveChSZWN0IHJlY3QsIGNvbnN0IEJhc2VsaW5lJiBiYXNlbGlu
ZSwgSW5saW5lTGF5b3V0VW5pdCBiYXNlbGluZU9mZnNldCkKICAgICA6IG1fcmVjdChyZWN0KQog
ICAgICwgbV9iYXNlbGluZShiYXNlbGluZSkKICAgICAsIG1fYmFzZWxpbmVPZmZzZXQoYmFzZWxp
bmVPZmZzZXQpCkBAIC0xNDAsNyArMTQwLDcgQEAgaW5saW5lIExpbmVCb3g6OkxpbmVCb3goUmVj
dCByZWN0LCBjb25zdCBCYXNlbGluZSYgYmFzZWxpbmUsIExheW91dFVuaXQgYmFzZWxpbmUKICNl
bmRpZgogfQogCi1pbmxpbmUgdm9pZCBMaW5lQm94OjpzZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVy
KExheW91dFVuaXQgbG9naWNhbEhlaWdodCkKK2lubGluZSB2b2lkIExpbmVCb3g6OnNldExvZ2lj
YWxIZWlnaHRJZkdyZWF0ZXIoSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KQogewogICAg
IGlmIChsb2dpY2FsSGVpZ2h0IDw9IG1fcmVjdC5oZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTUzLDcgKzE1Myw3IEBAIGlubGluZSBjb25zdCBMaW5lQm94OjpCYXNlbGluZSYgTGluZUJv
eDo6YmFzZWxpbmUoKSBjb25zdAogICAgIHJldHVybiBtX2Jhc2VsaW5lOwogfQogCi1pbmxpbmUg
dm9pZCBMaW5lQm94OjpzZXRCYXNlbGluZU9mZnNldElmR3JlYXRlcihMYXlvdXRVbml0IGJhc2Vs
aW5lT2Zmc2V0KQoraW5saW5lIHZvaWQgTGluZUJveDo6c2V0QmFzZWxpbmVPZmZzZXRJZkdyZWF0
ZXIoSW5saW5lTGF5b3V0VW5pdCBiYXNlbGluZU9mZnNldCkKIHsKICNpZiAhQVNTRVJUX0RJU0FC
TEVECiAgICAgbV9oYXNWYWxpZEJhc2VsaW5lT2Zmc2V0ID0gdHJ1ZTsKQEAgLTE2MSw3ICsxNjEs
NyBAQCBpbmxpbmUgdm9pZCBMaW5lQm94OjpzZXRCYXNlbGluZU9mZnNldElmR3JlYXRlcihMYXlv
dXRVbml0IGJhc2VsaW5lT2Zmc2V0KQogICAgIG1fYmFzZWxpbmVPZmZzZXQgPSBzdGQ6Om1heChi
YXNlbGluZU9mZnNldCwgbV9iYXNlbGluZU9mZnNldCk7CiB9CiAKLWlubGluZSB2b2lkIExpbmVC
b3g6OnNldEFzY2VudElmR3JlYXRlcihMYXlvdXRVbml0IGFzY2VudCkKK2lubGluZSB2b2lkIExp
bmVCb3g6OnNldEFzY2VudElmR3JlYXRlcihJbmxpbmVMYXlvdXRVbml0IGFzY2VudCkKIHsKICAg
ICBpZiAoYXNjZW50IDwgbV9iYXNlbGluZS5hc2NlbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTY5LDE0ICsxNjksMTQgQEAgaW5saW5lIHZvaWQgTGluZUJveDo6c2V0QXNjZW50SWZHcmVhdGVy
KExheW91dFVuaXQgYXNjZW50KQogICAgIG1fYmFzZWxpbmUuc2V0QXNjZW50KGFzY2VudCk7CiB9
CiAKLWlubGluZSB2b2lkIExpbmVCb3g6OnNldERlc2NlbnRJZkdyZWF0ZXIoTGF5b3V0VW5pdCBk
ZXNjZW50KQoraW5saW5lIHZvaWQgTGluZUJveDo6c2V0RGVzY2VudElmR3JlYXRlcihJbmxpbmVM
YXlvdXRVbml0IGRlc2NlbnQpCiB7CiAgICAgaWYgKGRlc2NlbnQgPCBtX2Jhc2VsaW5lLmRlc2Nl
bnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fYmFzZWxpbmUuc2V0RGVzY2VudChkZXNjZW50
KTsKIH0KIAotaW5saW5lIExheW91dFVuaXQgTGluZUJveDo6YmFzZWxpbmVPZmZzZXQoKSBjb25z
dAoraW5saW5lIElubGluZUxheW91dFVuaXQgTGluZUJveDo6YmFzZWxpbmVPZmZzZXQoKSBjb25z
dAogewogICAgIEFTU0VSVChtX2hhc1ZhbGlkQmFzZWxpbmVPZmZzZXQpOwogICAgIHJldHVybiBt
X2Jhc2VsaW5lT2Zmc2V0OwpAQCAtMTkxLDcgKzE5MSw3IEBAIGlubGluZSB2b2lkIExpbmVCb3g6
OnJlc2V0QmFzZWxpbmUoKQogICAgIG1fYmFzZWxpbmUucmVzZXQoKTsKIH0KIAotaW5saW5lIExp
bmVCb3g6OkJhc2VsaW5lOjpCYXNlbGluZShMYXlvdXRVbml0IGFzY2VudCwgTGF5b3V0VW5pdCBk
ZXNjZW50KQoraW5saW5lIExpbmVCb3g6OkJhc2VsaW5lOjpCYXNlbGluZShJbmxpbmVMYXlvdXRV
bml0IGFzY2VudCwgSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50KQogICAgIDogbV9hc2NlbnQoYXNj
ZW50KQogICAgICwgbV9kZXNjZW50KGRlc2NlbnQpCiB7CkBAIC0yMDEsNyArMjAxLDcgQEAgaW5s
aW5lIExpbmVCb3g6OkJhc2VsaW5lOjpCYXNlbGluZShMYXlvdXRVbml0IGFzY2VudCwgTGF5b3V0
VW5pdCBkZXNjZW50KQogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIExpbmVCb3g6OkJhc2VsaW5l
OjpzZXRBc2NlbnQoTGF5b3V0VW5pdCBhc2NlbnQpCitpbmxpbmUgdm9pZCBMaW5lQm94OjpCYXNl
bGluZTo6c2V0QXNjZW50KElubGluZUxheW91dFVuaXQgYXNjZW50KQogewogI2lmICFBU1NFUlRf
RElTQUJMRUQKICAgICBtX2hhc1ZhbGlkQXNjZW50ID0gdHJ1ZTsKQEAgLTIwOSw3ICsyMDksNyBA
QCBpbmxpbmUgdm9pZCBMaW5lQm94OjpCYXNlbGluZTo6c2V0QXNjZW50KExheW91dFVuaXQgYXNj
ZW50KQogICAgIG1fYXNjZW50ID0gYXNjZW50OwogfQogCi1pbmxpbmUgdm9pZCBMaW5lQm94OjpC
YXNlbGluZTo6c2V0RGVzY2VudChMYXlvdXRVbml0IGRlc2NlbnQpCitpbmxpbmUgdm9pZCBMaW5l
Qm94OjpCYXNlbGluZTo6c2V0RGVzY2VudChJbmxpbmVMYXlvdXRVbml0IGRlc2NlbnQpCiB7CiAj
aWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIG1faGFzVmFsaWREZXNjZW50ID0gdHJ1ZTsKQEAgLTIy
NywxMyArMjI3LDEzIEBAIGlubGluZSB2b2lkIExpbmVCb3g6OkJhc2VsaW5lOjpyZXNldCgpCiAg
ICAgbV9kZXNjZW50ID0gMF9sdTsKIH0KIAotaW5saW5lIExheW91dFVuaXQgTGluZUJveDo6QmFz
ZWxpbmU6OmFzY2VudCgpIGNvbnN0CitpbmxpbmUgSW5saW5lTGF5b3V0VW5pdCBMaW5lQm94OjpC
YXNlbGluZTo6YXNjZW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9oYXNWYWxpZEFzY2VudCk7
CiAgICAgcmV0dXJuIG1fYXNjZW50OwogfQogCi1pbmxpbmUgTGF5b3V0VW5pdCBMaW5lQm94OjpC
YXNlbGluZTo6ZGVzY2VudCgpIGNvbnN0CitpbmxpbmUgSW5saW5lTGF5b3V0VW5pdCBMaW5lQm94
OjpCYXNlbGluZTo6ZGVzY2VudCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1faGFzVmFsaWREZXNj
ZW50KTsKICAgICByZXR1cm4gbV9kZXNjZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQuY3BwCmluZGV4IDkxYTBkMmIwZWM1MWRmMGVjOTNlNjUzODQyYTZiYmI1MmZkODgyNjAuLmI4
MTZkMTNkODE5MzQwZTM1ZGUzNzUzZTdiM2NiMTMzMjRmYTBlNjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTIyMywxNSArMjIzLDE1IEBAIEZvcm1hdHRpbmdDb250
ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlZEluCiAgICAgICAgIHJldHVybiBjb21wdXRlZEludHJpbnNpY1dpZHRoRm9yQ29uc3Ry
YWludCh1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CiAgICAgfTsKIAotICAgIGF1dG8gY29uc3RyYWlu
dHMgPSBnZW9tZXRyeSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgocm9vdCgpLCB7IG1heGltdW1M
aW5lV2lkdGgoMCksIG1heGltdW1MaW5lV2lkdGgoTGF5b3V0VW5pdDo6bWF4KCkpIH0pOworICAg
IGF1dG8gY29uc3RyYWludHMgPSBnZW9tZXRyeSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgocm9v
dCgpLCB7IG1heGltdW1MaW5lV2lkdGgoMCksIG1heGltdW1MaW5lV2lkdGgoSW5saW5lTGF5b3V0
VW5pdDo6bWF4KCkpIH0pOwogICAgIGZvcm1hdHRpbmdTdGF0ZSgpLnNldEludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMoY29uc3RyYWludHMpOwogICAgIHJldHVybiBjb25zdHJhaW50czsKIH0KIAot
TGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0
aEZvckNvbnN0cmFpbnQoY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmIHVzZWRIb3Jpem9udGFs
VmFsdWVzKSBjb25zdAorSW5saW5lTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aEZvckNvbnN0cmFpbnQoY29uc3QgVXNlZEhvcml6b250YWxW
YWx1ZXMmIHVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdAogewogICAgIGF1dG8mIGlubGluZUl0
ZW1zID0gZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lSXRlbXMoKTsKLSAgICBMYXlvdXRVbml0IG1h
eGltdW1MaW5lV2lkdGg7CisgICAgSW5saW5lTGF5b3V0VW5pdCBtYXhpbXVtTGluZVdpZHRoOwog
ICAgIHVuc2lnbmVkIGxlYWRpbmdJbmxpbmVJdGVtSW5kZXggPSAwOwogICAgIGF1dG8gbGluZUJ1
aWxkZXIgPSBMaW5lQnVpbGRlciB7ICp0aGlzLCByb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSwg
TGluZUJ1aWxkZXI6OlNraXBBbGlnbm1lbnQ6OlllcyB9OwogICAgIGF1dG8gbGluZUxheW91dENv
bnRleHQgPSBMaW5lTGF5b3V0Q29udGV4dCB7ICp0aGlzLCByb290KCksIGlubGluZUl0ZW1zIH07
CkBAIC0yNDEsNyArMjQxLDcgQEAgTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aEZvckNvbnN0cmFpbnQoY29uc3QgVXMKICAgICAgICAgYXV0
byBsaW5lQ29udGVudCA9IGxpbmVMYXlvdXRDb250ZXh0LmxheW91dExpbmUobGluZUJ1aWxkZXIs
IGxlYWRpbmdJbmxpbmVJdGVtSW5kZXgsIHsgfSk7CiAKICAgICAgICAgbGVhZGluZ0lubGluZUl0
ZW1JbmRleCA9ICpsaW5lQ29udGVudC50cmFpbGluZ0lubGluZUl0ZW1JbmRleCArIDE7Ci0gICAg
ICAgIExheW91dFVuaXQgZmxvYXRzV2lkdGg7CisgICAgICAgIElubGluZUxheW91dFVuaXQgZmxv
YXRzV2lkdGg7CiAgICAgICAgIGZvciAoYXV0byYgZmxvYXRJdGVtIDogbGluZUNvbnRlbnQuZmxv
YXRzKQogICAgICAgICAgICAgZmxvYXRzV2lkdGggKz0gZ2VvbWV0cnlGb3JCb3goZmxvYXRJdGVt
LT5sYXlvdXRCb3goKSkubWFyZ2luQm94V2lkdGgoKTsKICAgICAgICAgbWF4aW11bUxpbmVXaWR0
aCA9IHN0ZDo6bWF4KG1heGltdW1MaW5lV2lkdGgsIGZsb2F0c1dpZHRoICsgbGluZUNvbnRlbnQu
bGluZUJveC5sb2dpY2FsV2lkdGgoKSk7CkBAIC0zNzEsNyArMzcxLDcgQEAgdm9pZCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29sbGVjdElubGluZUNvbnRlbnRJZk5lZWRlZCgpCiAgICAgfQog
fQogCi1MaW5lQnVpbGRlcjo6Q29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bnN0cmFpbnRzRm9yTGluZShjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYgdXNlZEhvcml6b250
YWxWYWx1ZXMsIGNvbnN0IExheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApCitMaW5lQnVpbGRlcjo6
Q29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbnN0cmFpbnRzRm9yTGluZShj
b25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYgdXNlZEhvcml6b250YWxWYWx1ZXMsIGNvbnN0IElu
bGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApCiB7CiAgICAgYXV0byBsaW5lTG9naWNhbExl
ZnQgPSBnZW9tZXRyeUZvckJveChyb290KCkpLmNvbnRlbnRCb3hMZWZ0KCk7CiAgICAgYXV0byBh
dmFpbGFibGVXaWR0aCA9IHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnN0cmFpbnRzLndpZHRoOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggZmNkZWNjZWQ5NzQzMmM5ZGFkNTM2
M2Y4NDEyMDA4MGYxMTI0ZWM1MS4uOGU0MGE1NDBkNDczYzQwMTc1MGFkMzlkNWIzMDAwNzJmMDdj
YjRlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC04MiwxNCArODIsMTQg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRm9ybWF0dGlu
Z1Jvb3QoY29uc3QgQm94JiwgY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmKTsKICAgICB2b2lk
IGNvbXB1dGVXaWR0aEFuZEhlaWdodEZvclJlcGxhY2VkSW5saW5lQm94KGNvbnN0IEJveCYsIGNv
bnN0IFVzZWRIb3Jpem9udGFsVmFsdWVzJiwgY29uc3QgVXNlZFZlcnRpY2FsVmFsdWVzJik7Ci0g
ICAgTGF5b3V0VW5pdCBjb21wdXRlZEludHJpbnNpY1dpZHRoRm9yQ29uc3RyYWludChjb25zdCBV
c2VkSG9yaXpvbnRhbFZhbHVlcyYpIGNvbnN0OworICAgIElubGluZUxheW91dFVuaXQgY29tcHV0
ZWRJbnRyaW5zaWNXaWR0aEZvckNvbnN0cmFpbnQoY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMm
KSBjb25zdDsKIAogICAgIHZvaWQgY29tcHV0ZUhvcml6b250YWxNYXJnaW4oY29uc3QgQm94Jiwg
Y29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmKTsKICAgICB2b2lkIGNvbXB1dGVIZWlnaHRBbmRN
YXJnaW4oY29uc3QgQm94JiwgY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmLCBjb25zdCBVc2Vk
VmVydGljYWxWYWx1ZXMmKTsKICAgICB2b2lkIGNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBC
b3gmLCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYpOwogCiAgICAgdm9pZCBjb2xsZWN0SW5s
aW5lQ29udGVudElmTmVlZGVkKCk7Ci0gICAgTGluZUJ1aWxkZXI6OkNvbnN0cmFpbnRzIGNvbnN0
cmFpbnRzRm9yTGluZShjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYsIGNvbnN0IExheW91dFVu
aXQgbGluZUxvZ2ljYWxUb3ApOworICAgIExpbmVCdWlsZGVyOjpDb25zdHJhaW50cyBjb25zdHJh
aW50c0ZvckxpbmUoY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmLCBjb25zdCBJbmxpbmVMYXlv
dXRVbml0IGxpbmVMb2dpY2FsVG9wKTsKICAgICB2b2lkIHNldERpc3BsYXlCb3hlc0ZvckxpbmUo
Y29uc3QgTGluZUxheW91dENvbnRleHQ6OkxpbmVDb250ZW50JiwgY29uc3QgVXNlZEhvcml6b250
YWxWYWx1ZXMmKTsKICAgICB2b2lkIGludmFsaWRhdGVGb3JtYXR0aW5nU3RhdGUoY29uc3QgSW52
YWxpZGF0aW9uU3RhdGUmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRR
dWlya3MuY3BwCmluZGV4IGFiMWNlNGE2NTUxMTVjODcwOWE1ZDlmNzI2OTE4ZmE2YzI1N2NlMjIu
LjYwZjVkNTFlZDk1YTY5NWJiNjM0NGE1ZDkyOTYzNTdjNWJlYTVlMDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0UXVpcmtzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgTGlu
ZUJ1aWxkZXI6OkNvbnN0cmFpbnRzOjpIZWlnaHRBbmRCYXNlbGluZSBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6UXVpcmtzOjpsaW4KICAgICAgICAgcmV0dXJuIHsgaW5pdGlhbEJhc2VsaW5lT2Zm
c2V0LCBpbml0aWFsQmFzZWxpbmVPZmZzZXQsIERpc3BsYXk6OkxpbmVCb3g6OkJhc2VsaW5lIHsg
c3RydXRCYXNlbGluZU9mZnNldCwgc3RydXRIZWlnaHQgLSBzdHJ1dEJhc2VsaW5lT2Zmc2V0IH0g
fTsKICAgICB9CiAgICAgLy8gRklYTUU6IFRoZSBvbmx5IHJlYXNvbiB3aHkgd2UgdXNlIGludFZh
bHVlKCkgaGVyZSBpcyB0byBtYXRjaCBjdXJyZW50IGlubGluZSB0cmVlIChpbnRlZ3JhbCliZWhh
dmlvci4KLSAgICBhdXRvIGluaXRpYWxMaW5lSGVpZ2h0ID0gTGF5b3V0VW5pdCB7IGxpbmVIZWln
aHQuaW50VmFsdWUoKSB9OworICAgIGF1dG8gaW5pdGlhbExpbmVIZWlnaHQgPSBJbmxpbmVMYXlv
dXRVbml0IHsgbGluZUhlaWdodC5pbnRWYWx1ZSgpIH07CiAgICAgYXV0byBpbml0aWFsQmFzZWxp
bmVPZmZzZXQgPSBMaW5lQnVpbGRlcjo6aGFsZkxlYWRpbmdNZXRyaWNzKGZvcm1hdHRpbmdSb290
LnN0eWxlKCkuZm9udE1ldHJpY3MoKSwgaW5pdGlhbExpbmVIZWlnaHQpLmFzY2VudCgpOwogICAg
IHJldHVybiB7IGluaXRpYWxMaW5lSGVpZ2h0LCBpbml0aWFsQmFzZWxpbmVPZmZzZXQsIERpc3Bs
YXk6OkxpbmVCb3g6OkJhc2VsaW5lIHsgc3RydXRCYXNlbGluZU9mZnNldCwgc3RydXRIZWlnaHQg
LSBzdHJ1dEJhc2VsaW5lT2Zmc2V0IH0gfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcAppbmRl
eCAwZGIxMWNkODJiYzgwNTM2ODYzMWNmZjQ1YzRjNTI5MTNkOGY1YzJiLi45MDhlNmViZmFmNWYw
NzYwZTgwODdiMDRjMjYyMzUyMzNlZjk2ZjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwCkBA
IC05MywxNiArOTMsMTYgQEAgTGluZUJyZWFrZXI6OkJyZWFraW5nQ29udGV4dCBMaW5lQnJlYWtl
cjo6YnJlYWtpbmdDb250ZXh0Rm9ySW5saW5lQ29udGVudChjb25zdAogICAgIHJldHVybiB7IGxp
bmVTdGF0dXMubGluZUlzRW1wdHkgPyBCcmVha2luZ0NvbnRleHQ6OkNvbnRlbnRXcmFwcGluZ1J1
bGU6OktlZXAgOiBCcmVha2luZ0NvbnRleHQ6OkNvbnRlbnRXcmFwcGluZ1J1bGU6OlB1c2gsIHsg
fSB9OwogfQogCi1ib29sIExpbmVCcmVha2VyOjpzaG91bGRXcmFwRmxvYXRCb3goTGF5b3V0VW5p
dCBmbG9hdExvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgYm9vbCBsaW5l
SXNFbXB0eSkKK2Jvb2wgTGluZUJyZWFrZXI6OnNob3VsZFdyYXBGbG9hdEJveChJbmxpbmVMYXlv
dXRVbml0IGZsb2F0TG9naWNhbFdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRo
LCBib29sIGxpbmVJc0VtcHR5KQogewogICAgIHJldHVybiAhbGluZUlzRW1wdHkgJiYgZmxvYXRM
b2dpY2FsV2lkdGggPiBhdmFpbGFibGVXaWR0aDsKIH0KIAotT3B0aW9uYWw8TGluZUJyZWFrZXI6
OkJyZWFraW5nQ29udGV4dDo6UGFydGlhbFRyYWlsaW5nQ29udGVudD4gTGluZUJyZWFrZXI6Ondv
cmRCcmVha2luZ0JlaGF2aW9yKGNvbnN0IENvbnRlbnQ6OlJ1bkxpc3QmIHJ1bnMsIExheW91dFVu
aXQgYXZhaWxhYmxlV2lkdGgpIGNvbnN0CitPcHRpb25hbDxMaW5lQnJlYWtlcjo6QnJlYWtpbmdD
b250ZXh0OjpQYXJ0aWFsVHJhaWxpbmdDb250ZW50PiBMaW5lQnJlYWtlcjo6d29yZEJyZWFraW5n
QmVoYXZpb3IoY29uc3QgQ29udGVudDo6UnVuTGlzdCYgcnVucywgSW5saW5lTGF5b3V0VW5pdCBh
dmFpbGFibGVXaWR0aCkgY29uc3QKIHsKICAgICAvLyBDaGVjayB3aGVyZSB0aGUgb3ZlcmZsb3cg
b2NjdXJzIGFuZCB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgc3R5bGUgdG8gZmlndXJlIG91dCB0aGUg
YnJlYWtpbmcgYmVoYXZpb3VyLgogICAgIC8vIDxzcGFuIHN0eWxlPSJ3b3JkLWJyZWFrOiBub3Jt
YWwiPmZpcnN0PC9zcGFuPjxzcGFuIHN0eWxlPSJ3b3JkLWJyZWFrOiBicmVhay1hbGwiPnNlY29u
ZDwvc3Bhbj48c3BhbiBzdHlsZT0id29yZC1icmVhazogbm9ybWFsIj50aGlyZDwvc3Bhbj4KLSAg
ICBMYXlvdXRVbml0IGFjY3VtdWxhdGVkUnVuV2lkdGg7CisgICAgSW5saW5lTGF5b3V0VW5pdCBh
Y2N1bXVsYXRlZFJ1bldpZHRoOwogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICB3aGlsZSAo
aW5kZXggPCBydW5zLnNpemUoKSkgewogICAgICAgICBhdXRvJiBydW4gPSBydW5zW2luZGV4XTsK
QEAgLTEzMyw3ICsxMzMsNyBAQCBPcHRpb25hbDxMaW5lQnJlYWtlcjo6QnJlYWtpbmdDb250ZXh0
OjpQYXJ0aWFsVHJhaWxpbmdDb250ZW50PiBMaW5lQnJlYWtlcjo6d29yZAogICAgIHJldHVybiB7
IH07CiB9CiAKLU9wdGlvbmFsPExpbmVCcmVha2VyOjpMZWZ0U2lkZT4gTGluZUJyZWFrZXI6OnRy
eUJyZWFraW5nVGV4dFJ1bihjb25zdCBDb250ZW50OjpSdW4mIG92ZXJmbG93UnVuLCBMYXlvdXRV
bml0IGF2YWlsYWJsZVdpZHRoKSBjb25zdAorT3B0aW9uYWw8TGluZUJyZWFrZXI6OkxlZnRTaWRl
PiBMaW5lQnJlYWtlcjo6dHJ5QnJlYWtpbmdUZXh0UnVuKGNvbnN0IENvbnRlbnQ6OlJ1biYgb3Zl
cmZsb3dSdW4sIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKG92ZXJmbG93UnVuLmlubGluZUl0ZW0uaXNUZXh0KCkpOwogICAgIGF1dG8mIHN0eWxl
ID0gb3ZlcmZsb3dSdW4uaW5saW5lSXRlbS5zdHlsZSgpOwpAQCAtMTYxLDcgKzE2MSw3IEBAIE9w
dGlvbmFsPExpbmVCcmVha2VyOjpMZWZ0U2lkZT4gTGluZUJyZWFrZXI6OnRyeUJyZWFraW5nVGV4
dFJ1bihjb25zdCBDb250ZW50OjpSCiAKICAgICBhdXRvJiBmb250Q2FzY2FkZSA9IHN0eWxlLmZv
bnRDYXNjYWRlKCk7CiAgICAgLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdG8gY2FjaGUgdGhlIGh5
cGhlbiB3aWR0aC4KLSAgICBhdXRvIGh5cGhlbldpZHRoID0gTGF5b3V0VW5pdCB7IGZvbnRDYXNj
YWRlLndpZHRoKFRleHRSdW4geyBTdHJpbmdWaWV3IHsgc3R5bGUuaHlwaGVuU3RyaW5nKCkgfSB9
KSB9OworICAgIGF1dG8gaHlwaGVuV2lkdGggPSBJbmxpbmVMYXlvdXRVbml0IHsgZm9udENhc2Nh
ZGUud2lkdGgoVGV4dFJ1biB7IFN0cmluZ1ZpZXcgeyBzdHlsZS5oeXBoZW5TdHJpbmcoKSB9IH0p
IH07CiAgICAgYXV0byBhdmFpbGFibGVXaWR0aEV4Y2x1ZGluZ0h5cGhlbiA9IGF2YWlsYWJsZVdp
ZHRoIC0gaHlwaGVuV2lkdGg7CiAKICAgICAvLyBGb3Igc3BhY2VXaWR0aCgpIHNlZSB3ZWJraXQu
b3JnL2IvMTY5NjEzCkBAIC0yNzIsNyArMjcyLDcgQEAgYm9vbCBMaW5lQnJlYWtlcjo6Q29udGVu
dDo6aXNBdENvbnRlbnRCb3VuZGFyeShjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBjb24K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBMaW5lQnJlYWtlcjo6Q29udGVudDo6YXBwZW5k
KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVuaXQgbG9naWNhbFdpZHRoKQor
dm9pZCBMaW5lQnJlYWtlcjo6Q29udGVudDo6YXBwZW5kKGNvbnN0IElubGluZUl0ZW0mIGlubGlu
ZUl0ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKQogewogICAgIEFTU0VSVCghaW5s
aW5lSXRlbS5pc0Zsb2F0KCkpOwogICAgIEFTU0VSVChpbmxpbmVJdGVtLmlzTGluZUJyZWFrKCkg
fHwgIWlzQXRDb250ZW50Qm91bmRhcnkoaW5saW5lSXRlbSwgKnRoaXMpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJl
YWtlci5oCmluZGV4IDlmMjg2NDM4OWU0MDFjMjljNjNkZThlNjg3MjM0NGEwZDA5ZWY0YTguLmRj
MDI3MGY3Mzk5YjM1YzEwMGJlNWIyODA0MjJhYzkxN2NhNTViZTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFr
ZXIuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCiAKLSNpbmNsdWRlICJMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdHMu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CkBAIC00Nyw3ICs0
Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgc3RydWN0IFBhcnRpYWxUcmFpbGluZ0NvbnRlbnQgewog
ICAgICAgICAgICAgdW5zaWduZWQgcnVuSW5kZXggeyAwIH07CiAgICAgICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggeyAwIH07Ci0gICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aDsKKyAg
ICAgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoOwogICAgICAgICAgICAgYm9v
bCBuZWVkc0h5cGhlbiB7IGZhbHNlIH07CiAgICAgICAgIH07CiAgICAgICAgIE9wdGlvbmFsPFBh
cnRpYWxUcmFpbGluZ0NvbnRlbnQ+IHBhcnRpYWxUcmFpbGluZ0NvbnRlbnQ7CkBAIC02Myw3ICs2
Myw3IEBAIHB1YmxpYzoKICAgICAvLyBbY29udGFpbmVyIHN0YXJ0XVtzcGFuMV1bY29udGFpbmVy
IGVuZF1bYmV0d2Vlbl1bY29udGFpbmVyIHN0YXJ0XVtzcGFuMl1bY29udGFpbmVyIGVuZF0KICAg
ICAvLyBzZWUgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10ZXh0LTMvI2xpbmUtYnJlYWst
ZGV0YWlscwogICAgIHN0cnVjdCBDb250ZW50IHsKLSAgICAgICAgdm9pZCBhcHBlbmQoY29uc3Qg
SW5saW5lSXRlbSYsIExheW91dFVuaXQgbG9naWNhbFdpZHRoKTsKKyAgICAgICAgdm9pZCBhcHBl
bmQoY29uc3QgSW5saW5lSXRlbSYsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKTsKICAg
ICAgICAgdm9pZCByZXNldCgpOwogICAgICAgICB2b2lkIHRyaW0odW5zaWduZWQgbmV3U2l6ZSk7
CiAKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogCiAgICAgICAgIHN0cnVjdCBSdW4gewogICAg
ICAgICAgICAgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbTsKLSAgICAgICAgICAgIExheW91
dFVuaXQgbG9naWNhbFdpZHRoOworICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2Fs
V2lkdGg7CiAgICAgICAgIH07CiAgICAgICAgIHVzaW5nIFJ1bkxpc3QgPSBWZWN0b3I8UnVuLCAz
MD47CiAKQEAgLTgxLDggKzgxLDggQEAgcHVibGljOgogICAgICAgICBib29sIGhhc1RleHRDb250
ZW50T25seSgpIGNvbnN0OwogICAgICAgICBib29sIGhhc05vbkNvbnRlbnRSdW5zT25seSgpIGNv
bnN0OwogICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb250aW5vdXNS
dW5zLnNpemUoKTsgfQotICAgICAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV93aWR0aDsgfQotICAgICAgICBMYXlvdXRVbml0IG5vblRyaW1tYWJsZVdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV93aWR0aCAtIG1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50LndpZHRoOyB9Cisg
ICAgICAgIElubGluZUxheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9
CisgICAgICAgIElubGluZUxheW91dFVuaXQgbm9uVHJpbW1hYmxlV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX3dpZHRoIC0gbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQud2lkdGg7IH0KIAogICAg
ICAgICBib29sIGhhc1RyYWlsaW5nVHJpbW1hYmxlQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuICEh
bV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQud2lkdGg7IH0KICAgICAgICAgYm9vbCBpc1RyYWls
aW5nQ29udGVudEZ1bGx5VHJpbW1hYmxlKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1RyaW1t
YWJsZUNvbnRlbnQuaXNGdWxseVRyaW1tYWJsZTsgfQpAQCAtOTMsMzEgKzkzLDMxIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHZvaWQgcmVzZXQoKTsKIAogICAgICAgICAgICAgYm9vbCBpc0Z1bGx5
VHJpbW1hYmxlIHsgZmFsc2UgfTsKLSAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGg7CisgICAg
ICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHdpZHRoOwogICAgICAgICB9OwogICAgICAgICBUcmFp
bGluZ1RyaW1tYWJsZUNvbnRlbnQgbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQ7Ci0gICAgICAg
IExheW91dFVuaXQgbV93aWR0aDsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX3dpZHRoOwog
ICAgIH07CiAKICAgICBzdHJ1Y3QgTGluZVN0YXR1cyB7Ci0gICAgICAgIExheW91dFVuaXQgYXZh
aWxhYmxlV2lkdGg7Ci0gICAgICAgIExheW91dFVuaXQgdHJpbW1hYmxlV2lkdGg7CisgICAgICAg
IElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGg7CisgICAgICAgIElubGluZUxheW91dFVu
aXQgdHJpbW1hYmxlV2lkdGg7CiAgICAgICAgIGJvb2wgbGluZUhhc0Z1bGx5VHJpbW1hYmxlVHJh
aWxpbmdSdW47CiAgICAgICAgIGJvb2wgbGluZUlzRW1wdHk7CiAgICAgfTsKICAgICBCcmVha2lu
Z0NvbnRleHQgYnJlYWtpbmdDb250ZXh0Rm9ySW5saW5lQ29udGVudChjb25zdCBDb250ZW50JiBj
YW5kaWRhdGVSdW5zLCBjb25zdCBMaW5lU3RhdHVzJik7Ci0gICAgYm9vbCBzaG91bGRXcmFwRmxv
YXRCb3goTGF5b3V0VW5pdCBmbG9hdExvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBhdmFpbGFibGVX
aWR0aCwgYm9vbCBsaW5lSXNFbXB0eSk7CisgICAgYm9vbCBzaG91bGRXcmFwRmxvYXRCb3goSW5s
aW5lTGF5b3V0VW5pdCBmbG9hdExvZ2ljYWxXaWR0aCwgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFi
bGVXaWR0aCwgYm9vbCBsaW5lSXNFbXB0eSk7CiAKICAgICB2b2lkIHNldEh5cGhlbmF0aW9uRGlz
YWJsZWQoKSB7IG5faHlwaGVuYXRpb25Jc0Rpc2FibGVkID0gdHJ1ZTsgfQogCiBwcml2YXRlOgot
ICAgIE9wdGlvbmFsPEJyZWFraW5nQ29udGV4dDo6UGFydGlhbFRyYWlsaW5nQ29udGVudD4gd29y
ZEJyZWFraW5nQmVoYXZpb3IoY29uc3QgQ29udGVudDo6UnVuTGlzdCYsIExheW91dFVuaXQgYXZh
aWxhYmxlV2lkdGgpIGNvbnN0OworICAgIE9wdGlvbmFsPEJyZWFraW5nQ29udGV4dDo6UGFydGlh
bFRyYWlsaW5nQ29udGVudD4gd29yZEJyZWFraW5nQmVoYXZpb3IoY29uc3QgQ29udGVudDo6UnVu
TGlzdCYsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpIGNvbnN0OwogICAgIHN0cnVj
dCBMZWZ0U2lkZSB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCB7IDAgfTsKLSAgICAgICAgTGF5
b3V0VW5pdCBsb2dpY2FsV2lkdGg7CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdp
ZHRoOwogICAgICAgICBib29sIG5lZWRzSHlwaGVuIHsgZmFsc2UgfTsKICAgICB9OwotICAgIE9w
dGlvbmFsPExlZnRTaWRlPiB0cnlCcmVha2luZ1RleHRSdW4oY29uc3QgQ29udGVudDo6UnVuJiBv
dmVyZmxvd1J1biwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkgY29uc3Q7CisgICAgT3B0aW9u
YWw8TGVmdFNpZGU+IHRyeUJyZWFraW5nVGV4dFJ1bihjb25zdCBDb250ZW50OjpSdW4mIG92ZXJm
bG93UnVuLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKSBjb25zdDsKIAogICAgIGJv
b2wgbl9oeXBoZW5hdGlvbklzRGlzYWJsZWQgeyBmYWxzZSB9OwogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWls
ZGVyLmNwcAppbmRleCA3NDMwOGZjN2VmMjk0ZWQxMzQ0YzA4MTZhMWM0MzZhYWY4OTI4YzQ2Li40
MDFhYzljMzNlOWM4YTUzNzYzOTUyZTQxYzNkYzEyNmFkNmJmYzQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1
aWxkZXIuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgSW5saW5lSXRl
bVJ1biYgbV9pbml0aWFsSW5saW5lUnVuOwogICAgIGNvbnN0IGJvb2wgbV90ZXh0SXNBbGlnbkp1
c3RpZnkgeyBmYWxzZSB9OwogICAgIHVuc2lnbmVkIG1fZXhwYW5kZWRMZW5ndGggeyAwIH07Ci0g
ICAgTGF5b3V0VW5pdCBtX2V4cGFuZGVkV2lkdGg7CisgICAgSW5saW5lTGF5b3V0VW5pdCBtX2V4
cGFuZGVkV2lkdGg7CiAgICAgYm9vbCBtX3RyYWlsaW5nUnVuQ2FuQmVFeHBhbmRlZCB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX2hhc1RyYWlsaW5nRXhwYW5zaW9uT3Bwb3J0dW5pdHkgeyBmYWxzZSB9
OwogICAgIHVuc2lnbmVkIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCB7IDAgfTsKQEAgLTE0
NCw3ICsxNDQsNyBAQCBpbmxpbmUgT3B0aW9uYWw8RXhwYW5zaW9uQmVoYXZpb3I+IExpbmVCdWls
ZGVyOjpSdW46OmV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QKICAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIExpbmVCdWlsZGVyOjpSdW46OnNldENvbXB1dGVkSG9yaXpvbnRhbEV4cGFuc2lvbihM
YXlvdXRVbml0IGxvZ2ljYWxFeHBhbnNpb24pCit2b2lkIExpbmVCdWlsZGVyOjpSdW46OnNldENv
bXB1dGVkSG9yaXpvbnRhbEV4cGFuc2lvbihJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxFeHBhbnNp
b24pCiB7CiAgICAgQVNTRVJUKGlzVGV4dCgpKTsKICAgICBBU1NFUlQoaGFzRXhwYW5zaW9uT3Bw
b3J0dW5pdHkoKSk7CkBAIC0xNjgsOCArMTY4LDggQEAgdm9pZCBMaW5lQnVpbGRlcjo6aW5pdGlh
bGl6ZShjb25zdCBDb25zdHJhaW50cyYgY29uc3RyYWludHMpCiB7CiAgICAgQVNTRVJUKG1fc2tp
cEFsaWdubWVudCB8fCBjb25zdHJhaW50cy5oZWlnaHRBbmRCYXNlbGluZSk7CiAKLSAgICBMYXlv
dXRVbml0IGluaXRpYWxMaW5lSGVpZ2h0OwotICAgIExheW91dFVuaXQgaW5pdGlhbEJhc2VsaW5l
T2Zmc2V0OworICAgIElubGluZUxheW91dFVuaXQgaW5pdGlhbExpbmVIZWlnaHQ7CisgICAgSW5s
aW5lTGF5b3V0VW5pdCBpbml0aWFsQmFzZWxpbmVPZmZzZXQ7CiAgICAgaWYgKGNvbnN0cmFpbnRz
LmhlaWdodEFuZEJhc2VsaW5lKSB7CiAgICAgICAgIG1faW5pdGlhbFN0cnV0ID0gY29uc3RyYWlu
dHMuaGVpZ2h0QW5kQmFzZWxpbmUtPnN0cnV0OwogICAgICAgICBpbml0aWFsTGluZUhlaWdodCA9
IGNvbnN0cmFpbnRzLmhlaWdodEFuZEJhc2VsaW5lLT5oZWlnaHQ7CkBAIC0yMzgsNyArMjM4LDcg
QEAgdm9pZCBMaW5lQnVpbGRlcjo6YWxpZ25Db250ZW50VmVydGljYWxseShSdW5MaXN0JiBydW5M
aXN0KQogewogICAgIEFTU0VSVCghbV9za2lwQWxpZ25tZW50KTsKICAgICBmb3IgKGF1dG8mIHJ1
biA6IHJ1bkxpc3QpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wOworICAgICAgICBJ
bmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxUb3A7CiAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IHJ1
bi5sYXlvdXRCb3goKTsKICAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWduID0gbGF5b3V0Qm94LnN0
eWxlKCkudmVydGljYWxBbGlnbigpOwogICAgICAgICBhdXRvIGFzY2VudCA9IGxheW91dEJveC5z
dHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7CkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBM
aW5lQnVpbGRlcjo6anVzdGlmeVJ1bnMoUnVuTGlzdCYgcnVuTGlzdCkgY29uc3QKICAgICAgICAg
cmV0dXJuOwogICAgIC8vIERpc3RyaWJ1dGUgdGhlIGV4dHJhIHNwYWNlLgogICAgIGF1dG8gZXhw
YW5zaW9uVG9EaXN0cmlidXRlID0gYXZhaWxhYmxlV2lkdGgoKSAvIGV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQ7Ci0gICAgTGF5b3V0VW5pdCBhY2N1bXVsYXRlZEV4cGFuc2lvbjsKKyAgICBJbmxp
bmVMYXlvdXRVbml0IGFjY3VtdWxhdGVkRXhwYW5zaW9uOwogICAgIGZvciAoYXV0byYgcnVuIDog
cnVuTGlzdCkgewogICAgICAgICAvLyBFeHBhbmQgYW5kIG1vdmVzIHJ1bnMgYnkgdGhlIGFjY3Vt
dWxhdGVkIGV4cGFuc2lvbi4KICAgICAgICAgaWYgKCFydW4uaGFzRXhwYW5zaW9uT3Bwb3J0dW5p
dHkoKSkgewpAQCAtMzM0LDcgKzMzNCw3IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFsaWduQ29udGVu
dEhvcml6b250YWxseShSdW5MaXN0JiBydW5MaXN0LCBJc0xhc3RMaW5lV2l0aElubGluCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGFkanVzdG1lbnRGb3JBbGlnbm1lbnQgPSBb
Jl0oKSAtPiBPcHRpb25hbDxMYXlvdXRVbml0PiB7CisgICAgYXV0byBhZGp1c3RtZW50Rm9yQWxp
Z25tZW50ID0gWyZdKCkgLT4gT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gewogICAgICAgICBz
d2l0Y2ggKCptX2hvcml6b250YWxBbGlnbm1lbnQpIHsKICAgICAgICAgY2FzZSBUZXh0QWxpZ25N
b2RlOjpMZWZ0OgogICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6CkBAIC0z
ODcsNyArMzg3LDcgQEAgdm9pZCBMaW5lQnVpbGRlcjo6cmVtb3ZlVHJhaWxpbmdUcmltbWFibGVD
b250ZW50KCkKICAgICBtX2xpbmVJc1Zpc3VhbGx5RW1wdHlCZWZvcmVUcmltbWFibGVDb250ZW50
ID0geyB9OwogfQogCi12b2lkIExpbmVCdWlsZGVyOjptb3ZlTG9naWNhbExlZnQoTGF5b3V0VW5p
dCBkZWx0YSkKK3ZvaWQgTGluZUJ1aWxkZXI6Om1vdmVMb2dpY2FsTGVmdChJbmxpbmVMYXlvdXRV
bml0IGRlbHRhKQogewogICAgIGlmICghZGVsdGEpCiAgICAgICAgIHJldHVybjsKQEAgLTM5Niwx
MyArMzk2LDEzIEBAIHZvaWQgTGluZUJ1aWxkZXI6Om1vdmVMb2dpY2FsTGVmdChMYXlvdXRVbml0
IGRlbHRhKQogICAgIG1fbGluZUxvZ2ljYWxXaWR0aCAtPSBkZWx0YTsKIH0KIAotdm9pZCBMaW5l
QnVpbGRlcjo6bW92ZUxvZ2ljYWxSaWdodChMYXlvdXRVbml0IGRlbHRhKQordm9pZCBMaW5lQnVp
bGRlcjo6bW92ZUxvZ2ljYWxSaWdodChJbmxpbmVMYXlvdXRVbml0IGRlbHRhKQogewogICAgIEFT
U0VSVChkZWx0YSA+IDApOwogICAgIG1fbGluZUxvZ2ljYWxXaWR0aCAtPSBkZWx0YTsKIH0KIAot
dm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExh
eW91dFVuaXQgbG9naWNhbFdpZHRoKQordm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kKGNvbnN0IElu
bGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKQogewog
ICAgIGlmIChpbmxpbmVJdGVtLmlzVGV4dCgpKQogICAgICAgICBhcHBlbmRUZXh0Q29udGVudChk
b3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSksIGxvZ2ljYWxXaWR0aCk7CkBAIC00
MjUsMTkgKzQyNSwxOSBAQCB2b2lkIExpbmVCdWlsZGVyOjphcHBlbmQoY29uc3QgSW5saW5lSXRl
bSYgaW5saW5lSXRlbSwgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpCiAgICAgICAgIG1fbGluZUJv
eC5zZXRJc0NvbnNpZGVyZWROb25FbXB0eSgpOwogfQogCi12b2lkIExpbmVCdWlsZGVyOjphcHBl
bmROb25CcmVha2FibGVTcGFjZShjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRV
bml0IGxvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKK3ZvaWQgTGluZUJ1aWxk
ZXI6OmFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0s
IElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdp
ZHRoKQogewogICAgIG1faW5saW5lSXRlbVJ1bnMuYXBwZW5kKHsgaW5saW5lSXRlbSwgbG9naWNh
bExlZnQsIGxvZ2ljYWxXaWR0aCB9KTsKICAgICBtX2xpbmVCb3guZXhwYW5kSG9yaXpvbnRhbGx5
KGxvZ2ljYWxXaWR0aCk7CiB9CiAKLXZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZElubGluZUNvbnRh
aW5lclN0YXJ0KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVuaXQgbG9naWNh
bFdpZHRoKQordm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kSW5saW5lQ29udGFpbmVyU3RhcnQoY29u
c3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgp
CiB7CiAgICAgLy8gVGhpcyBpcyByZWFsbHkganVzdCBhIHBsYWNlaG9sZGVyIHRvIG1hcmsgdGhl
IHN0YXJ0IG9mIHRoZSBpbmxpbmUgbGV2ZWwgY29udGFpbmVyIDxzcGFuPi4KICAgICBhcHBlbmRO
b25CcmVha2FibGVTcGFjZShpbmxpbmVJdGVtLCBjb250ZW50TG9naWNhbFdpZHRoKCksIGxvZ2lj
YWxXaWR0aCk7CiB9CiAKLXZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZElubGluZUNvbnRhaW5lckVu
ZChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkK
K3ZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZElubGluZUNvbnRhaW5lckVuZChjb25zdCBJbmxpbmVJ
dGVtJiBpbmxpbmVJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKIHsKICAgICAv
LyBUaGlzIGlzIHJlYWxseSBqdXN0IGEgcGxhY2Vob2xkZXIgdG8gbWFyayB0aGUgZW5kIG9mIHRo
ZSBpbmxpbmUgbGV2ZWwgY29udGFpbmVyIDwvc3Bhbj4uCiAgICAgYXV0byB0cmltVHJhaWxpbmdM
ZXR0ZXJTcGFjaW5nID0gWyZdIHsKQEAgLTQ1MSw3ICs0NTEsNyBAQCB2b2lkIExpbmVCdWlsZGVy
OjphcHBlbmRJbmxpbmVDb250YWluZXJFbmQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwg
TGF5b3V0VQogICAgIGFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKGlubGluZUl0ZW0sIGNvbnRlbnRM
b2dpY2FsUmlnaHQoKSwgbG9naWNhbFdpZHRoKTsKIH0KIAotdm9pZCBMaW5lQnVpbGRlcjo6YXBw
ZW5kVGV4dENvbnRlbnQoY29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVu
aXQgbG9naWNhbFdpZHRoKQordm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kVGV4dENvbnRlbnQoY29u
c3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZUl0ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNhbFdp
ZHRoKQogewogICAgIGF1dG8gd2lsbENvbGxhcHNlQ29tcGxldGVseSA9IFsmXSB7CiAgICAgICAg
IC8vIEVtcHR5IHJ1bi4KQEAgLTUxMCw3ICs1MTAsNyBAQCB2b2lkIExpbmVCdWlsZGVyOjphcHBl
bmRUZXh0Q29udGVudChjb25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0VW5p
dAogICAgIH0KIH0KIAotdm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kTm9uUmVwbGFjZWRJbmxpbmVC
b3goY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgp
Cit2b2lkIExpbmVCdWlsZGVyOjphcHBlbmROb25SZXBsYWNlZElubGluZUJveChjb25zdCBJbmxp
bmVJdGVtJiBpbmxpbmVJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKIHsKICAg
ICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVJdGVtLmxheW91dEJveCgpOwogICAgIGF1dG8mIGJv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gp
OwpAQCAtNTIwLDcgKzUyMCw3IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZE5vblJlcGxhY2Vk
SW5saW5lQm94KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91CiAgICAgbV90cmlt
bWFibGVDb250ZW50LnJlc2V0KCk7CiB9CiAKLXZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZFJlcGxh
Y2VkSW5saW5lQm94KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVuaXQgbG9n
aWNhbFdpZHRoKQordm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kUmVwbGFjZWRJbmxpbmVCb3goY29u
c3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgp
CiB7CiAgICAgQVNTRVJUKGlubGluZUl0ZW0ubGF5b3V0Qm94KCkuaXNSZXBsYWNlZCgpKTsKICAg
ICAvLyBGSVhNRTogU3VyZWx5IHJlcGxhY2VkIGJveGVzIGJlaGF2ZSBkaWZmZXJlbnRseS4KQEAg
LTYyNCw3ICs2MjQsNyBAQCB2b2lkIExpbmVCdWlsZGVyOjphZGp1c3RCYXNlbGluZUFuZExpbmVI
ZWlnaHQoY29uc3QgUnVuJiBydW4pCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLUxh
eW91dFVuaXQgTGluZUJ1aWxkZXI6OnJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgUnVuJiBydW4pIGNv
bnN0CitJbmxpbmVMYXlvdXRVbml0IExpbmVCdWlsZGVyOjpydW5Db250ZW50SGVpZ2h0KGNvbnN0
IFJ1biYgcnVuKSBjb25zdAogewogICAgIEFTU0VSVCghbV9za2lwQWxpZ25tZW50KTsKICAgICBh
dXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZvbnRNZXRyaWNzKCk7CkBAIC02NzcsNyAr
Njc3LDcgQEAgYm9vbCBMaW5lQnVpbGRlcjo6aXNWaXN1YWxseU5vbkVtcHR5KGNvbnN0IElubGlu
ZUl0ZW1SdW4mIHJ1bikgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLURpc3BsYXk6Okxp
bmVCb3g6OkJhc2VsaW5lIExpbmVCdWlsZGVyOjpoYWxmTGVhZGluZ01ldHJpY3MoY29uc3QgRm9u
dE1ldHJpY3MmIGZvbnRNZXRyaWNzLCBMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KQorRGlz
cGxheTo6TGluZUJveDo6QmFzZWxpbmUgTGluZUJ1aWxkZXI6OmhhbGZMZWFkaW5nTWV0cmljcyhj
b25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2lj
YWxIZWlnaHQpCiB7CiAgICAgYXV0byBhc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQoKTsKICAg
ICBhdXRvIGRlc2NlbnQgPSBmb250TWV0cmljcy5kZXNjZW50KCk7CkBAIC03MDcsNyArNzA3LDcg
QEAgTGluZUJ1aWxkZXI6OlRyaW1tYWJsZUNvbnRlbnQ6OlRyaW1tYWJsZUNvbnRlbnQoSW5saW5l
SXRlbVJ1bkxpc3QmIGlubGluZUl0ZW1SdW4KIHZvaWQgTGluZUJ1aWxkZXI6OlRyaW1tYWJsZUNv
bnRlbnQ6OmFwcGVuZChzaXplX3QgcnVuSW5kZXgpCiB7CiAgICAgYXV0byYgdHJpbW1hYmxlUnVu
ID0gbV9pbmxpbmVpdGVtUnVuTGlzdFtydW5JbmRleF07Ci0gICAgTGF5b3V0VW5pdCB0cmltbWFi
bGVXaWR0aDsKKyAgICBJbmxpbmVMYXlvdXRVbml0IHRyaW1tYWJsZVdpZHRoOwogICAgIGF1dG8g
aXNGdWxseVRyaW1tYWJsZSA9IHRyaW1tYWJsZVJ1bi5pc1RyaW1tYWJsZVdoaXRlc3BhY2UoKTsK
ICAgICBpZiAoaXNGdWxseVRyaW1tYWJsZSkKICAgICAgICAgdHJpbW1hYmxlV2lkdGggPSB0cmlt
bWFibGVSdW4ubG9naWNhbFdpZHRoKCk7CkBAIC03MjQsNyArNzI0LDcgQEAgdm9pZCBMaW5lQnVp
bGRlcjo6VHJpbW1hYmxlQ29udGVudDo6YXBwZW5kKHNpemVfdCBydW5JbmRleCkKICAgICBtX2Zp
cnN0UnVuSW5kZXggPSBtX2ZpcnN0UnVuSW5kZXgudmFsdWVPcihydW5JbmRleCk7CiB9CiAKLUxh
eW91dFVuaXQgTGluZUJ1aWxkZXI6OlRyaW1tYWJsZUNvbnRlbnQ6OnRyaW0oKQorSW5saW5lTGF5
b3V0VW5pdCBMaW5lQnVpbGRlcjo6VHJpbW1hYmxlQ29udGVudDo6dHJpbSgpCiB7CiAgICAgQVNT
RVJUKCFpc0VtcHR5KCkpOwogI2lmbmRlZiBOREVCVUcKQEAgLTczNCw3ICs3MzQsNyBAQCBMYXlv
dXRVbml0IExpbmVCdWlsZGVyOjpUcmltbWFibGVDb250ZW50Ojp0cmltKCkKICAgICAvLyA8c3Bh
bj4gPC9zcGFuPjxzcGFuPjwvc3Bhbj4gLT4KICAgICAvLyBbd2hpdGVzcGFjZV1bY29udGFpbmVy
IGVuZF1bY29udGFpbmVyIHN0YXJ0XVtjb250YWluZXIgZW5kXQogICAgIC8vIFRyaW0gdGhlIHdo
aXRlc3BhY2UgcnVuIGFuZCBtb3ZlIHRoZSB0cmFpbGluZyBpbmxpbmUgY29udGFpbmVyIHJ1bnMg
dG8gdGhlIGxlZnQuCi0gICAgTGF5b3V0VW5pdCBhY2N1bXVsYXRlZFRyaW1tZWRXaWR0aDsKKyAg
ICBJbmxpbmVMYXlvdXRVbml0IGFjY3VtdWxhdGVkVHJpbW1lZFdpZHRoOwogICAgIGZvciAoYXV0
byBpbmRleCA9ICptX2ZpcnN0UnVuSW5kZXg7IGluZGV4IDwgbV9pbmxpbmVpdGVtUnVuTGlzdC5z
aXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgYXV0byYgcnVuID0gbV9pbmxpbmVpdGVtUnVuTGlz
dFtpbmRleF07CiAgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KC1hY2N1bXVsYXRlZFRyaW1t
ZWRXaWR0aCk7CkBAIC03NjEsNyArNzYxLDcgQEAgTGF5b3V0VW5pdCBMaW5lQnVpbGRlcjo6VHJp
bW1hYmxlQ29udGVudDo6dHJpbSgpCiAgICAgcmV0dXJuIGFjY3VtdWxhdGVkVHJpbW1lZFdpZHRo
OwogfQogCi1MYXlvdXRVbml0IExpbmVCdWlsZGVyOjpUcmltbWFibGVDb250ZW50Ojp0cmltVHJh
aWxpbmdSdW4oKQorSW5saW5lTGF5b3V0VW5pdCBMaW5lQnVpbGRlcjo6VHJpbW1hYmxlQ29udGVu
dDo6dHJpbVRyYWlsaW5nUnVuKCkKIHsKICAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CiAgICAgLy8g
RmluZCB0aGUgbGFzdCB0cmltbWFibGUgcnVuIChpdCBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGxh
c3QgcnVuIGUuZyBbY29udGFpbmVyIHN0YXJ0XVt3aGl0ZXNwYWNlXVtjb250YWluZXIgZW5kXSkK
QEAgLTc3MSw3ICs3NzEsNyBAQCBMYXlvdXRVbml0IExpbmVCdWlsZGVyOjpUcmltbWFibGVDb250
ZW50Ojp0cmltVHJhaWxpbmdSdW4oKQogICAgICAgICAgICAgQVNTRVJUKHJ1bi5pc0NvbnRhaW5l
clN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KLSAgICAgICAgTGF5b3V0VW5pdCB0cmltbWVkV2lkdGg7CisgICAgICAgIElu
bGluZUxheW91dFVuaXQgdHJpbW1lZFdpZHRoOwogICAgICAgICBpZiAocnVuLmlzV2hpdGVzcGFj
ZSgpKSB7CiAgICAgICAgICAgICB0cmltbWVkV2lkdGggPSBydW4ubG9naWNhbFdpZHRoKCk7CiAg
ICAgICAgICAgICBydW4uc2V0Q29sbGFwc2VzVG9aZXJvQWR2YW5jZVdpZHRoKCk7CkBAIC03OTIs
NyArNzkyLDcgQEAgTGF5b3V0VW5pdCBMaW5lQnVpbGRlcjo6VHJpbW1hYmxlQ29udGVudDo6dHJp
bVRyYWlsaW5nUnVuKCkKICAgICByZXR1cm4gMF9sdTsKIH0KIAotTGluZUJ1aWxkZXI6OklubGlu
ZUl0ZW1SdW46OklubGluZUl0ZW1SdW4oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgTGF5
b3V0VW5pdCBsb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIFdURjo6T3B0aW9u
YWw8RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dD4gdGV4dENvbnRleHQpCitMaW5lQnVpbGRlcjo6
SW5saW5lSXRlbVJ1bjo6SW5saW5lSXRlbVJ1bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVt
LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxX
aWR0aCwgV1RGOjpPcHRpb25hbDxEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0PiB0ZXh0Q29udGV4
dCkKICAgICA6IG1faW5saW5lSXRlbShpbmxpbmVJdGVtKQogICAgICwgbV9sb2dpY2FsTGVmdChs
b2dpY2FsTGVmdCkKICAgICAsIG1fbG9naWNhbFdpZHRoKGxvZ2ljYWxXaWR0aCkKQEAgLTgxMiwx
MSArODEyLDExIEBAIGJvb2wgTGluZUJ1aWxkZXI6OklubGluZUl0ZW1SdW46Omhhc1RyYWlsaW5n
TGV0dGVyU3BhY2luZygpIGNvbnN0CiAgICAgcmV0dXJuICFpc1doaXRlc3BhY2UoKSAmJiBzdHls
ZSgpLmxldHRlclNwYWNpbmcoKSA+IDA7CiB9CiAKLUxheW91dFVuaXQgTGluZUJ1aWxkZXI6Oklu
bGluZUl0ZW1SdW46OnRyYWlsaW5nTGV0dGVyU3BhY2luZygpIGNvbnN0CitJbmxpbmVMYXlvdXRV
bml0IExpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVuOjp0cmFpbGluZ0xldHRlclNwYWNpbmcoKSBj
b25zdAogewogICAgIGlmICghaGFzVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCkpCiAgICAgICAgIHJl
dHVybiAwX2x1OwotICAgIHJldHVybiBMYXlvdXRVbml0IHsgc3R5bGUoKS5sZXR0ZXJTcGFjaW5n
KCkgfTsKKyAgICByZXR1cm4gSW5saW5lTGF5b3V0VW5pdCB7IHN0eWxlKCkubGV0dGVyU3BhY2lu
ZygpIH07CiB9CiAKIHZvaWQgTGluZUJ1aWxkZXI6OklubGluZUl0ZW1SdW46OnNldENvbGxhcHNl
c1RvWmVyb0FkdmFuY2VXaWR0aCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaAppbmRleCBjMGE0ZGJjZjk5
ZGYwNzNhM2ZhZjFkYTRmMzM3OTExMWZlZjhkMjBlLi5jY2U4NDViZjdmYTdiMmQ5NDg0ZTU1N2Vh
ODk4NGNjY2IwNDY4NjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKQEAgLTQ0LDExICs0NCwxMSBA
QCBjbGFzcyBMaW5lQnVpbGRlciB7CiBwdWJsaWM6CiAgICAgc3RydWN0IENvbnN0cmFpbnRzIHsK
ICAgICAgICAgTGF5b3V0UG9pbnQgbG9naWNhbFRvcExlZnQ7Ci0gICAgICAgIExheW91dFVuaXQg
YXZhaWxhYmxlTG9naWNhbFdpZHRoOworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aDsKICAgICAgICAgYm9vbCBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQgeyBm
YWxzZSB9OwogICAgICAgICBzdHJ1Y3QgSGVpZ2h0QW5kQmFzZWxpbmUgewotICAgICAgICAgICAg
TGF5b3V0VW5pdCBoZWlnaHQ7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IGJhc2VsaW5lT2Zmc2V0
OworICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBoZWlnaHQ7CisgICAgICAgICAgICBJbmxp
bmVMYXlvdXRVbml0IGJhc2VsaW5lT2Zmc2V0OwogICAgICAgICAgICAgT3B0aW9uYWw8RGlzcGxh
eTo6TGluZUJveDo6QmFzZWxpbmU+IHN0cnV0OwogICAgICAgICB9OwogICAgICAgICBPcHRpb25h
bDxIZWlnaHRBbmRCYXNlbGluZT4gaGVpZ2h0QW5kQmFzZWxpbmU7CkBAIC01OSwxNyArNTksMTcg
QEAgcHVibGljOgogICAgIH5MaW5lQnVpbGRlcigpOwogCiAgICAgdm9pZCBpbml0aWFsaXplKGNv
bnN0IENvbnN0cmFpbnRzJik7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgSW5saW5lSXRlbSYsIExh
eW91dFVuaXQgbG9naWNhbFdpZHRoKTsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBJbmxpbmVJdGVt
JiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpOwogICAgIGJvb2wgaXNWaXN1YWxseUVt
cHR5KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94LmlzQ29uc2lkZXJlZEVtcHR5KCk7IH0KICAg
ICBib29sIGhhc0ludHJ1c2l2ZUZsb2F0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbnRydXNpdmVG
bG9hdDsgfQotICAgIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBs
b2dpY2FsV2lkdGgoKSAtIGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsgfQorICAgIElubGluZUxheW91
dFVuaXQgYXZhaWxhYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBsb2dpY2FsV2lkdGgoKSAtIGNv
bnRlbnRMb2dpY2FsV2lkdGgoKTsgfQogCi0gICAgTGF5b3V0VW5pdCB0cmFpbGluZ1RyaW1tYWJs
ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV90cmltbWFibGVDb250ZW50LndpZHRoKCk7IH0KKyAg
ICBJbmxpbmVMYXlvdXRVbml0IHRyYWlsaW5nVHJpbW1hYmxlV2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3RyaW1tYWJsZUNvbnRlbnQud2lkdGgoKTsgfQogICAgIGJvb2wgaXNUcmFpbGluZ1J1bkZ1
bGx5VHJpbW1hYmxlKCkgY29uc3QgeyByZXR1cm4gbV90cmltbWFibGVDb250ZW50LmlzVHJhaWxp
bmdSdW5GdWxseVRyaW1tYWJsZSgpOyB9CiAKICAgICBjb25zdCBEaXNwbGF5OjpMaW5lQm94JiBs
aW5lQm94KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94OyB9Ci0gICAgdm9pZCBtb3ZlTG9naWNh
bExlZnQoTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBtb3ZlTG9naWNhbFJpZ2h0KExheW91dFVuaXQp
OworICAgIHZvaWQgbW92ZUxvZ2ljYWxMZWZ0KElubGluZUxheW91dFVuaXQpOworICAgIHZvaWQg
bW92ZUxvZ2ljYWxSaWdodChJbmxpbmVMYXlvdXRVbml0KTsKICAgICB2b2lkIHNldEhhc0ludHJ1
c2l2ZUZsb2F0KCkgeyBtX2hhc0ludHJ1c2l2ZUZsb2F0ID0gdHJ1ZTsgfQogCiAgICAgc3RydWN0
IFJ1biB7CkBAIC05MywxNSArOTMsMTUgQEAgcHVibGljOgogICAgIHByaXZhdGU6CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBMaW5lQnVpbGRlcjsKIAotICAgICAgICB2b2lkIGFkanVzdExvZ2ljYWxU
b3AoTGF5b3V0VW5pdCBsb2dpY2FsVG9wKSB7IG1fbG9naWNhbFJlY3Quc2V0VG9wKGxvZ2ljYWxU
b3ApOyB9Ci0gICAgICAgIHZvaWQgbW92ZUhvcml6b250YWxseShMYXlvdXRVbml0IG9mZnNldCkg
eyBtX2xvZ2ljYWxSZWN0Lm1vdmVIb3Jpem9udGFsbHkob2Zmc2V0KTsgfQotICAgICAgICB2b2lk
IG1vdmVWZXJ0aWNhbGx5KExheW91dFVuaXQgb2Zmc2V0KSB7IG1fbG9naWNhbFJlY3QubW92ZVZl
cnRpY2FsbHkob2Zmc2V0KTsgfQotICAgICAgICB2b2lkIHNldExvZ2ljYWxIZWlnaHQoTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0KSB7IG1fbG9naWNhbFJlY3Quc2V0SGVpZ2h0KGxvZ2ljYWxIZWln
aHQpOyB9CisgICAgICAgIHZvaWQgYWRqdXN0TG9naWNhbFRvcChJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxUb3ApIHsgbV9sb2dpY2FsUmVjdC5zZXRUb3AobG9naWNhbFRvcCk7IH0KKyAgICAgICAg
dm9pZCBtb3ZlSG9yaXpvbnRhbGx5KElubGluZUxheW91dFVuaXQgb2Zmc2V0KSB7IG1fbG9naWNh
bFJlY3QubW92ZUhvcml6b250YWxseShvZmZzZXQpOyB9CisgICAgICAgIHZvaWQgbW92ZVZlcnRp
Y2FsbHkoSW5saW5lTGF5b3V0VW5pdCBvZmZzZXQpIHsgbV9sb2dpY2FsUmVjdC5tb3ZlVmVydGlj
YWxseShvZmZzZXQpOyB9CisgICAgICAgIHZvaWQgc2V0TG9naWNhbEhlaWdodChJbmxpbmVMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHQpIHsgbV9sb2dpY2FsUmVjdC5zZXRIZWlnaHQobG9naWNhbEhl
aWdodCk7IH0KIAogICAgICAgICBib29sIGhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50OyB9CiAgICAgICAgIE9wdGlvbmFs
PEV4cGFuc2lvbkJlaGF2aW9yPiBleHBhbnNpb25CZWhhdmlvcigpIGNvbnN0OwogICAgICAgICB1
bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9leHBh
bnNpb25PcHBvcnR1bml0eUNvdW50OyB9Ci0gICAgICAgIHZvaWQgc2V0Q29tcHV0ZWRIb3Jpem9u
dGFsRXhwYW5zaW9uKExheW91dFVuaXQgbG9naWNhbEV4cGFuc2lvbik7CisgICAgICAgIHZvaWQg
c2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5zaW9uKElubGluZUxheW91dFVuaXQgbG9naWNhbEV4
cGFuc2lvbik7CiAgICAgICAgIHZvaWQgYWRqdXN0RXhwYW5zaW9uQmVoYXZpb3IoRXhwYW5zaW9u
QmVoYXZpb3IpOwogCiAgICAgICAgIGNvbnN0IEJveCogbV9sYXlvdXRCb3ggeyBudWxscHRyIH07
CkBAIC0xMTUsMjggKzExNSwyOCBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBJc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQgeyBObywgWWVzIH07CiAgICAgUnVuTGlzdCBjbG9zZShJc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQgPSBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vKTsK
IAotICAgIHN0YXRpYyBEaXNwbGF5OjpMaW5lQm94OjpCYXNlbGluZSBoYWxmTGVhZGluZ01ldHJp
Y3MoY29uc3QgRm9udE1ldHJpY3MmLCBMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KTsKKyAg
ICBzdGF0aWMgRGlzcGxheTo6TGluZUJveDo6QmFzZWxpbmUgaGFsZkxlYWRpbmdNZXRyaWNzKGNv
bnN0IEZvbnRNZXRyaWNzJiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbEhlaWdodCk7CiAK
IHByaXZhdGU6Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9s
aW5lQm94LmxvZ2ljYWxUb3AoKTsgfQotICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGluZUJveC5sb2dpY2FsQm90dG9tKCk7IH0KKyAgICBJbmxpbmVMYXlv
dXRVbml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3gubG9naWNhbFRvcCgp
OyB9CisgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4g
bV9saW5lQm94LmxvZ2ljYWxCb3R0b20oKTsgfQogCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVm
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveC5sb2dpY2FsTGVmdCgpOyB9Ci0gICAgTGF5b3V0
VW5pdCBsb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBsb2dpY2FsTGVmdCgpICsgbG9naWNh
bFdpZHRoKCk7IH0KKyAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyBy
ZXR1cm4gbV9saW5lQm94LmxvZ2ljYWxMZWZ0KCk7IH0KKyAgICBJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMZWZ0KCkgKyBsb2dpY2FsV2lkdGgo
KTsgfQogCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xp
bmVMb2dpY2FsV2lkdGg7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7
IHJldHVybiBtX2xpbmVCb3gubG9naWNhbEhlaWdodCgpOyB9CisgICAgSW5saW5lTGF5b3V0VW5p
dCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVMb2dpY2FsV2lkdGg7IH0KKyAg
ICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVC
b3gubG9naWNhbEhlaWdodCgpOyB9CiAKLSAgICBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3gubG9naWNhbFdpZHRoKCk7IH0KLSAgICBMYXlv
dXRVbml0IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3gubG9n
aWNhbFJpZ2h0KCk7IH0KLSAgICBMYXlvdXRVbml0IGJhc2VsaW5lT2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9saW5lQm94LmJhc2VsaW5lT2Zmc2V0KCk7IH0KKyAgICBJbmxpbmVMYXlvdXRVbml0
IGNvbnRlbnRMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3gubG9naWNhbFdp
ZHRoKCk7IH0KKyAgICBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25z
dCB7IHJldHVybiBtX2xpbmVCb3gubG9naWNhbFJpZ2h0KCk7IH0KKyAgICBJbmxpbmVMYXlvdXRV
bml0IGJhc2VsaW5lT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94LmJhc2VsaW5lT2Zm
c2V0KCk7IH0KIAotICAgIHZvaWQgYXBwZW5kTm9uQnJlYWthYmxlU3BhY2UoY29uc3QgSW5saW5l
SXRlbSYsIExheW91dFVuaXQgbG9naWNhbExlZnQsIExheW91dFVuaXQgbG9naWNhbFdpZHRoKTsK
LSAgICB2b2lkIGFwcGVuZFRleHRDb250ZW50KGNvbnN0IElubGluZVRleHRJdGVtJiwgTGF5b3V0
VW5pdCBsb2dpY2FsV2lkdGgpOwotICAgIHZvaWQgYXBwZW5kTm9uUmVwbGFjZWRJbmxpbmVCb3go
Y29uc3QgSW5saW5lSXRlbSYsIExheW91dFVuaXQgbG9naWNhbFdpZHRoKTsKLSAgICB2b2lkIGFw
cGVuZFJlcGxhY2VkSW5saW5lQm94KGNvbnN0IElubGluZUl0ZW0mLCBMYXlvdXRVbml0IGxvZ2lj
YWxXaWR0aCk7Ci0gICAgdm9pZCBhcHBlbmRJbmxpbmVDb250YWluZXJTdGFydChjb25zdCBJbmxp
bmVJdGVtJiwgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpOwotICAgIHZvaWQgYXBwZW5kSW5saW5l
Q29udGFpbmVyRW5kKGNvbnN0IElubGluZUl0ZW0mLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7
CisgICAgdm9pZCBhcHBlbmROb25CcmVha2FibGVTcGFjZShjb25zdCBJbmxpbmVJdGVtJiwgSW5s
aW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgp
OworICAgIHZvaWQgYXBwZW5kVGV4dENvbnRlbnQoY29uc3QgSW5saW5lVGV4dEl0ZW0mLCBJbmxp
bmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7CisgICAgdm9pZCBhcHBlbmROb25SZXBsYWNlZElu
bGluZUJveChjb25zdCBJbmxpbmVJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgp
OworICAgIHZvaWQgYXBwZW5kUmVwbGFjZWRJbmxpbmVCb3goY29uc3QgSW5saW5lSXRlbSYsIElu
bGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKTsKKyAgICB2b2lkIGFwcGVuZElubGluZUNvbnRh
aW5lclN0YXJ0KGNvbnN0IElubGluZUl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0
aCk7CisgICAgdm9pZCBhcHBlbmRJbmxpbmVDb250YWluZXJFbmQoY29uc3QgSW5saW5lSXRlbSYs
IElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKTsKICAgICB2b2lkIGFwcGVuZExpbmVCcmVh
ayhjb25zdCBJbmxpbmVJdGVtJik7CiAKICAgICB2b2lkIHJlbW92ZVRyYWlsaW5nVHJpbW1hYmxl
Q29udGVudCgpOwpAQCAtMTQ0LDcgKzE0NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhbGlnbkNv
bnRlbnRWZXJ0aWNhbGx5KFJ1bkxpc3QmKTsKIAogICAgIHZvaWQgYWRqdXN0QmFzZWxpbmVBbmRM
aW5lSGVpZ2h0KGNvbnN0IFJ1biYpOwotICAgIExheW91dFVuaXQgcnVuQ29udGVudEhlaWdodChj
b25zdCBSdW4mKSBjb25zdDsKKyAgICBJbmxpbmVMYXlvdXRVbml0IHJ1bkNvbnRlbnRIZWlnaHQo
Y29uc3QgUnVuJikgY29uc3Q7CiAKICAgICBib29sIGlzVGV4dEFsaWduSnVzdGlmeSgpIGNvbnN0
IHsgcmV0dXJuIG1faG9yaXpvbnRhbEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5
OyB9OwogICAgIHZvaWQganVzdGlmeVJ1bnMoUnVuTGlzdCYpIGNvbnN0OwpAQCAtMTU2LDEyICsx
NTYsMTIgQEAgcHJpdmF0ZToKIAogICAgIGNsYXNzIElubGluZUl0ZW1SdW4gewogICAgIHB1Ymxp
YzoKLSAgICAgICAgSW5saW5lSXRlbVJ1bihjb25zdCBJbmxpbmVJdGVtJiwgTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdCwgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIFdURjo6T3B0aW9uYWw8RGlzcGxh
eTo6UnVuOjpUZXh0Q29udGV4dD4gPSBXVEY6Om51bGxvcHQpOworICAgICAgICBJbmxpbmVJdGVt
UnVuKGNvbnN0IElubGluZUl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxp
bmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgV1RGOjpPcHRpb25hbDxEaXNwbGF5OjpSdW46OlRl
eHRDb250ZXh0PiA9IFdURjo6bnVsbG9wdCk7CiAKICAgICAgICAgY29uc3QgQm94JiBsYXlvdXRC
b3goKSBjb25zdCB7IHJldHVybiBtX2lubGluZUl0ZW0ubGF5b3V0Qm94KCk7IH0KICAgICAgICAg
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbGF5b3V0Qm94KCkuc3R5
bGUoKTsgfQotICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4g
bV9sb2dpY2FsTGVmdDsgfQotICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9naWNhbFdpZHRoOyB9CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9n
aWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxMZWZ0OyB9CisgICAgICAgIElubGlu
ZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsV2lkdGg7
IH0KICAgICAgICAgY29uc3QgT3B0aW9uYWw8RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dD4mIHRl
eHRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQogCiAgICAgICAgIGJv
b2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVJdGVtLmlzVGV4dCgpOyB9CkBAIC0x
NzQsMTIgKzE3NCwxMiBAQCBwcml2YXRlOgogICAgICAgICB2b2lkIHNldElzQ29sbGFwc2VkKCkg
eyBtX2lzQ29sbGFwc2VkID0gdHJ1ZTsgfQogICAgICAgICBib29sIGlzQ29sbGFwc2VkKCkgY29u
c3QgeyByZXR1cm4gbV9pc0NvbGxhcHNlZDsgfQogCi0gICAgICAgIHZvaWQgbW92ZUhvcml6b250
YWxseShMYXlvdXRVbml0IG9mZnNldCkgeyBtX2xvZ2ljYWxMZWZ0ICs9IG9mZnNldDsgfQorICAg
ICAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5pdCBvZmZzZXQpIHsgbV9s
b2dpY2FsTGVmdCArPSBvZmZzZXQ7IH0KIAogICAgICAgICBib29sIGlzVHJpbW1hYmxlV2hpdGVz
cGFjZSgpIGNvbnN0OwogICAgICAgICBib29sIGhhc1RyYWlsaW5nTGV0dGVyU3BhY2luZygpIGNv
bnN0OwogCi0gICAgICAgIExheW91dFVuaXQgdHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCkgY29uc3Q7
CisgICAgICAgIElubGluZUxheW91dFVuaXQgdHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCkgY29uc3Q7
CiAgICAgICAgIHZvaWQgcmVtb3ZlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCk7CiAKICAgICAgICAg
dm9pZCBzZXRDb2xsYXBzZXNUb1plcm9BZHZhbmNlV2lkdGgoKTsKQEAgLTE5Miw4ICsxOTIsOCBA
QCBwcml2YXRlOgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgSW5saW5lSXRlbSYgbV9p
bmxpbmVJdGVtOwotICAgICAgICBMYXlvdXRVbml0IG1fbG9naWNhbExlZnQ7Ci0gICAgICAgIExh
eW91dFVuaXQgbV9sb2dpY2FsV2lkdGg7CisgICAgICAgIElubGluZUxheW91dFVuaXQgbV9sb2dp
Y2FsTGVmdDsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX2xvZ2ljYWxXaWR0aDsKICAgICAg
ICAgY29uc3QgT3B0aW9uYWw8RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dD4gbV90ZXh0Q29udGV4
dDsKICAgICAgICAgYm9vbCBtX2lzQ29sbGFwc2VkIHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBt
X2NvbGxhcHNlZFRvWmVyb0FkdmFuY2VXaWR0aCB7IGZhbHNlIH07CkBAIC0yMDUsMTEgKzIwNSwx
MSBAQCBwcml2YXRlOgogICAgICAgICBUcmltbWFibGVDb250ZW50KElubGluZUl0ZW1SdW5MaXN0
Jik7CiAKICAgICAgICAgdm9pZCBhcHBlbmQoc2l6ZV90IHJ1bkluZGV4KTsKLSAgICAgICAgTGF5
b3V0VW5pdCB0cmltKCk7Ci0gICAgICAgIExheW91dFVuaXQgdHJpbVRyYWlsaW5nUnVuKCk7Cisg
ICAgICAgIElubGluZUxheW91dFVuaXQgdHJpbSgpOworICAgICAgICBJbmxpbmVMYXlvdXRVbml0
IHRyaW1UcmFpbGluZ1J1bigpOwogICAgICAgICB2b2lkIHJlc2V0KCk7CiAKLSAgICAgICAgTGF5
b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICAgICAgSW5saW5l
TGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KICAgICAgICAgT3B0
aW9uYWw8c2l6ZV90PiBmaXJzdFJ1bkluZGV4KCkgeyByZXR1cm4gbV9maXJzdFJ1bkluZGV4OyB9
CiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2ZpcnN0UnVuSW5kZXgu
aGFzVmFsdWUoKTsgfQogICAgICAgICBib29sIGlzVHJhaWxpbmdSdW5GdWxseVRyaW1tYWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJ1bklzRnVsbHlUcmltbWFibGU7IH0KQEAgLTIxOCw3ICsy
MTgsNyBAQCBwcml2YXRlOgogICAgIHByaXZhdGU6CiAgICAgICAgIElubGluZUl0ZW1SdW5MaXN0
JiBtX2lubGluZWl0ZW1SdW5MaXN0OwogICAgICAgICBPcHRpb25hbDxzaXplX3Q+IG1fZmlyc3RS
dW5JbmRleDsKLSAgICAgICAgTGF5b3V0VW5pdCBtX3dpZHRoOworICAgICAgICBJbmxpbmVMYXlv
dXRVbml0IG1fd2lkdGg7CiAgICAgICAgIGJvb2wgbV9sYXN0UnVuSXNGdWxseVRyaW1tYWJsZSB7
IGZhbHNlIH07CiAgICAgfTsKIApAQCAtMjI2LDcgKzIyNiw3IEBAIHByaXZhdGU6CiAgICAgSW5s
aW5lSXRlbVJ1bkxpc3QgbV9pbmxpbmVJdGVtUnVuczsKICAgICBUcmltbWFibGVDb250ZW50IG1f
dHJpbW1hYmxlQ29udGVudDsKICAgICBPcHRpb25hbDxEaXNwbGF5OjpMaW5lQm94OjpCYXNlbGlu
ZT4gbV9pbml0aWFsU3RydXQ7Ci0gICAgTGF5b3V0VW5pdCBtX2xpbmVMb2dpY2FsV2lkdGg7Cisg
ICAgSW5saW5lTGF5b3V0VW5pdCBtX2xpbmVMb2dpY2FsV2lkdGg7CiAgICAgT3B0aW9uYWw8VGV4
dEFsaWduTW9kZT4gbV9ob3Jpem9udGFsQWxpZ25tZW50OwogICAgIGJvb2wgbV9za2lwQWxpZ25t
ZW50IHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzSW50cnVzaXZlRmxvYXQgeyBmYWxzZSB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
VGV4dEl0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lVGV4dEl0ZW0uY3BwCmluZGV4IDRjODYzOTA2YzZiNWJkODI3Y2NjY2I2MzBlOWZiNmQ2Zjgz
NWMwZjkuLjBlZWUzMGNlOGI3MzViY2M3YTE5NjQwMDhiZWFiNTRlOTNmNmMzNDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRleHRJdGVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVU
ZXh0SXRlbS5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBJbmxpbmVUZXh0SXRlbTo6Y3JlYXRl
QW5kQXBwZW5kVGV4dEl0ZW1zKElubGluZUl0ZW1zJiBpbmxpbmVDb250ZW50LCBjb25zdAogICAg
IExhenlMaW5lQnJlYWtJdGVyYXRvciBsaW5lQnJlYWtJdGVyYXRvcih0ZXh0KTsKICAgICB1bnNp
Z25lZCBjdXJyZW50UG9zaXRpb24gPSAwOwogCi0gICAgYXV0byBpbmxpbmVJdGVtV2lkdGggPSBb
Jl0oYXV0byBzdGFydFBvc2l0aW9uLCBhdXRvIGxlbmd0aCkgLT4gT3B0aW9uYWw8TGF5b3V0VW5p
dD4geworICAgIGF1dG8gaW5saW5lSXRlbVdpZHRoID0gWyZdKGF1dG8gc3RhcnRQb3NpdGlvbiwg
YXV0byBsZW5ndGgpIC0+IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsKICAgICAgICAgaWYg
KCF0ZXh0Q29udGV4dC5jYW5Vc2VTaW1wbGlmaWVkQ29udGVudE1lYXN1cmluZykKICAgICAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgICAgIHJldHVybiBUZXh0VXRpbDo6d2lkdGgoaW5saW5lQm94
LCBzdGFydFBvc2l0aW9uLCBzdGFydFBvc2l0aW9uICsgbGVuZ3RoKTsKQEAgLTExNiw3ICsxMTYs
NyBAQCB2b2lkIElubGluZVRleHRJdGVtOjpjcmVhdGVBbmRBcHBlbmRUZXh0SXRlbXMoSW5saW5l
SXRlbXMmIGlubGluZUNvbnRlbnQsIGNvbnN0CiAgICAgICAgIGlmIChpc1doaXRlc3BhY2VDaGFy
YWN0ZXIodGV4dFtjdXJyZW50UG9zaXRpb25dLCBzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkpIHsK
ICAgICAgICAgICAgIGF1dG8gbGVuZ3RoID0gbW92ZVRvTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlv
bih0ZXh0LCBjdXJyZW50UG9zaXRpb24sIHN0eWxlLnByZXNlcnZlTmV3bGluZSgpKTsKICAgICAg
ICAgICAgIGF1dG8gc2ltcGxlU2luZ2xlV2hpdGVzcGFjZUNvbnRlbnQgPSB0ZXh0Q29udGV4dC5j
YW5Vc2VTaW1wbGlmaWVkQ29udGVudE1lYXN1cmluZyAmJiAobGVuZ3RoID09IDEgfHwgc3R5bGUu
Y29sbGFwc2VXaGl0ZVNwYWNlKCkpOwotICAgICAgICAgICAgYXV0byB3aWR0aCA9IHNpbXBsZVNp
bmdsZVdoaXRlc3BhY2VDb250ZW50ID8gbWFrZU9wdGlvbmFsKExheW91dFVuaXQgeyBmb250LnNw
YWNlV2lkdGgoKSB9KSA6IGlubGluZUl0ZW1XaWR0aChjdXJyZW50UG9zaXRpb24sIGxlbmd0aCk7
CisgICAgICAgICAgICBhdXRvIHdpZHRoID0gc2ltcGxlU2luZ2xlV2hpdGVzcGFjZUNvbnRlbnQg
PyBtYWtlT3B0aW9uYWwoSW5saW5lTGF5b3V0VW5pdCB7IGZvbnQuc3BhY2VXaWR0aCgpIH0pIDog
aW5saW5lSXRlbVdpZHRoKGN1cnJlbnRQb3NpdGlvbiwgbGVuZ3RoKTsKICAgICAgICAgICAgIGlu
bGluZUNvbnRlbnQuYXBwZW5kKElubGluZVRleHRJdGVtOjpjcmVhdGVXaGl0ZXNwYWNlSXRlbShp
bmxpbmVCb3gsIGN1cnJlbnRQb3NpdGlvbiwgbGVuZ3RoLCB3aWR0aCkpOwogICAgICAgICAgICAg
Y3VycmVudFBvc2l0aW9uICs9IGxlbmd0aDsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTI4
LDEyICsxMjgsMTIgQEAgdm9pZCBJbmxpbmVUZXh0SXRlbTo6Y3JlYXRlQW5kQXBwZW5kVGV4dEl0
ZW1zKElubGluZUl0ZW1zJiBpbmxpbmVDb250ZW50LCBjb25zdAogICAgIH0KIH0KIAotc3RkOjp1
bmlxdWVfcHRyPElubGluZVRleHRJdGVtPiBJbmxpbmVUZXh0SXRlbTo6Y3JlYXRlV2hpdGVzcGFj
ZUl0ZW0oY29uc3QgQm94JiBpbmxpbmVCb3gsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5n
dGgsIE9wdGlvbmFsPExheW91dFVuaXQ+IHdpZHRoKQorc3RkOjp1bmlxdWVfcHRyPElubGluZVRl
eHRJdGVtPiBJbmxpbmVUZXh0SXRlbTo6Y3JlYXRlV2hpdGVzcGFjZUl0ZW0oY29uc3QgQm94JiBp
bmxpbmVCb3gsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIE9wdGlvbmFsPElubGlu
ZUxheW91dFVuaXQ+IHdpZHRoKQogewogICAgIHJldHVybiBtYWtlVW5pcXVlPElubGluZVRleHRJ
dGVtPihpbmxpbmVCb3gsIHN0YXJ0LCBsZW5ndGgsIHdpZHRoLCBUZXh0SXRlbVR5cGU6OldoaXRl
c3BhY2UpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW5saW5lVGV4dEl0ZW0+IElubGluZVRleHRJ
dGVtOjpjcmVhdGVOb25XaGl0ZXNwYWNlSXRlbShjb25zdCBCb3gmIGlubGluZUJveCwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gd2lkdGgpCitz
dGQ6OnVuaXF1ZV9wdHI8SW5saW5lVGV4dEl0ZW0+IElubGluZVRleHRJdGVtOjpjcmVhdGVOb25X
aGl0ZXNwYWNlSXRlbShjb25zdCBCb3gmIGlubGluZUJveCwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGxlbmd0aCwgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gd2lkdGgpCiB7CiAgICAgcmV0
dXJuIG1ha2VVbmlxdWU8SW5saW5lVGV4dEl0ZW0+KGlubGluZUJveCwgc3RhcnQsIGxlbmd0aCwg
d2lkdGgsIFRleHRJdGVtVHlwZTo6Tm9uV2hpdGVzcGFjZSk7CiB9CkBAIC0xNDMsNyArMTQzLDcg
QEAgc3RkOjp1bmlxdWVfcHRyPElubGluZVRleHRJdGVtPiBJbmxpbmVUZXh0SXRlbTo6Y3JlYXRl
RW1wdHlJdGVtKGNvbnN0IEJveCYgaW5saW4KICAgICByZXR1cm4gbWFrZVVuaXF1ZTxJbmxpbmVU
ZXh0SXRlbT4oaW5saW5lQm94KTsKIH0KIAotSW5saW5lVGV4dEl0ZW06OklubGluZVRleHRJdGVt
KGNvbnN0IEJveCYgaW5saW5lQm94LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBP
cHRpb25hbDxMYXlvdXRVbml0PiB3aWR0aCwgVGV4dEl0ZW1UeXBlIHRleHRJdGVtVHlwZSkKK0lu
bGluZVRleHRJdGVtOjpJbmxpbmVUZXh0SXRlbShjb25zdCBCb3gmIGlubGluZUJveCwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gd2lk
dGgsIFRleHRJdGVtVHlwZSB0ZXh0SXRlbVR5cGUpCiAgICAgOiBJbmxpbmVJdGVtKGlubGluZUJv
eCwgVHlwZTo6VGV4dCkKICAgICAsIG1fc3RhcnQoc3RhcnQpCiAgICAgLCBtX2xlbmd0aChsZW5n
dGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVUZXh0SXRlbS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lVGV4dEl0ZW0uaAppbmRleCBlM2NiYTFkYmE1YzA2NDdjMzE2ZTllMWExYTdhZmMzMTNj
Mzk5NjQ0Li5kNDFjYWZmNGU3ODg2OWU1ODc3OTA5YjExMWVkMGRmMGY0ZWI2NzRmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRl
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRl
eHRJdGVtLmgKQEAgLTM3LDggKzM3LDggQEAgY2xhc3MgSW5saW5lVGV4dEl0ZW0gOiBwdWJsaWMg
SW5saW5lSXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5kVGV4
dEl0ZW1zKElubGluZUl0ZW1zJiwgY29uc3QgQm94Jik7CiAKLSAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPElubGluZVRleHRJdGVtPiBjcmVhdGVXaGl0ZXNwYWNlSXRlbShjb25zdCBCb3gmLCB1
bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBPcHRpb25hbDxMYXlvdXRVbml0PiB3aWR0
aCk7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0SXRlbT4gY3JlYXRlTm9u
V2hpdGVzcGFjZUl0ZW0oY29uc3QgQm94JiwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0
aCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gd2lkdGgpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8SW5saW5lVGV4dEl0ZW0+IGNyZWF0ZVdoaXRlc3BhY2VJdGVtKGNvbnN0IEJveCYsIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHdp
ZHRoKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElubGluZVRleHRJdGVtPiBjcmVhdGVO
b25XaGl0ZXNwYWNlSXRlbShjb25zdCBCb3gmLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVu
Z3RoLCBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiB3aWR0aCk7CiAgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxJbmxpbmVUZXh0SXRlbT4gY3JlYXRlRW1wdHlJdGVtKGNvbnN0IEJveCYpOwog
CiAgICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CkBAIC00Nywx
OSArNDcsMTkgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1doaXRlc3BhY2UoKSBjb25zdCB7IHJl
dHVybiBtX3RleHRJdGVtVHlwZSA9PSBUZXh0SXRlbVR5cGU6OldoaXRlc3BhY2U7IH0KICAgICBi
b29sIGlzQ29sbGFwc2libGUoKSBjb25zdCB7IHJldHVybiBpc1doaXRlc3BhY2UoKSAmJiBzdHls
ZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpOyB9Ci0gICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gd2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgT3B0aW9uYWw8SW5saW5lTGF5b3V0
VW5pdD4gd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CiAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW5saW5lVGV4dEl0ZW0+IGxlZnQodW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW5saW5lVGV4dEl0ZW0+IHJpZ2h0KHVuc2lnbmVkIGxlbmd0aCkgY29u
c3Q7CiAKICAgICBlbnVtIGNsYXNzIFRleHRJdGVtVHlwZSB7IFVuZGVmaW5lZCwgV2hpdGVzcGFj
ZSwgTm9uV2hpdGVzcGFjZSB9OwotICAgIElubGluZVRleHRJdGVtKGNvbnN0IEJveCYsIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIE9wdGlvbmFsPExheW91dFVuaXQ+IHdpZHRoLCBU
ZXh0SXRlbVR5cGUpOworICAgIElubGluZVRleHRJdGVtKGNvbnN0IEJveCYsIHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHdpZHRoLCBU
ZXh0SXRlbVR5cGUpOwogICAgIElubGluZVRleHRJdGVtKGNvbnN0IEJveCYpOwogCiBwcml2YXRl
OgogICAgIHVuc2lnbmVkIG1fc3RhcnQgeyAwIH07CiAgICAgdW5zaWduZWQgbV9sZW5ndGggeyAw
IH07Ci0gICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gbV93aWR0aDsKKyAgICBPcHRpb25hbDxJbmxp
bmVMYXlvdXRVbml0PiBtX3dpZHRoOwogICAgIFRleHRJdGVtVHlwZSBtX3RleHRJdGVtVHlwZSB7
IFRleHRJdGVtVHlwZTo6VW5kZWZpbmVkIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5jcHAK
aW5kZXggMzY4ZWJlNGZjOWExNDg3M2M4MGE3ODdkZWVmMjNlOWVhMDdmMjQ2NS4uMjY0ODk3MjQw
N2JiYjM3ZjMxMjJiNmZjMDVlYTg5YzMwMDYxOGUwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNw
cApAQCAtMzUsNyArMzUsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91
dCB7CiAKLXN0YXRpYyBMYXlvdXRVbml0IGlubGluZUl0ZW1XaWR0aChjb25zdCBGb3JtYXR0aW5n
Q29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0s
IExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KQorc3RhdGljIElubGluZUxheW91dFVuaXQg
aW5saW5lSXRlbVdpZHRoKGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4
dCwgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50
TG9naWNhbExlZnQpCiB7CiAgICAgaWYgKGlubGluZUl0ZW0uaXNMaW5lQnJlYWsoKSkKICAgICAg
ICAgcmV0dXJuIDBfbHU7CkBAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyBMYXlvdXRVbml0IGlubGlu
ZUl0ZW1XaWR0aChjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQsIGNv
CiAgICAgICAgICAgICBhdXRvIGVuZCA9IGlubGluZVRleHRJdGVtLmlzQ29sbGFwc2libGUoKSA/
IGlubGluZVRleHRJdGVtLnN0YXJ0KCkgKyAxIDogaW5saW5lVGV4dEl0ZW0uZW5kKCk7CiAgICAg
ICAgICAgICBjb250ZW50V2lkdGggPSBUZXh0VXRpbDo6d2lkdGgoaW5saW5lVGV4dEl0ZW0ubGF5
b3V0Qm94KCksIGlubGluZVRleHRJdGVtLnN0YXJ0KCksIGVuZCwgY29udGVudExvZ2ljYWxMZWZ0
KTsKICAgICAgICAgfQotICAgICAgICBhdXRvIHdvcmRTcGFjaW5nID0gaW5saW5lVGV4dEl0ZW0u
aXNXaGl0ZXNwYWNlKCkgPyBMYXlvdXRVbml0KGlubGluZVRleHRJdGVtLnN0eWxlKCkuZm9udENh
c2NhZGUoKS53b3JkU3BhY2luZygpKSA6IDBfbHU7CisgICAgICAgIGF1dG8gd29yZFNwYWNpbmcg
PSBpbmxpbmVUZXh0SXRlbS5pc1doaXRlc3BhY2UoKSA/IElubGluZUxheW91dFVuaXQoaW5saW5l
VGV4dEl0ZW0uc3R5bGUoKS5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5nKCkpIDogMF9sdTsKICAg
ICAgICAgcmV0dXJuICpjb250ZW50V2lkdGggKyB3b3JkU3BhY2luZzsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0
aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0
VXRpbC5jcHAKaW5kZXggMjUyOTA4NzFmYTk0YjBlZDFhMGI5YjllNzgyMDVlZDhlMTYwMmEzMS4u
NDU4YTJmMDJmOTczODAzYjJiOGM3MDEyMzAwYmZiM2Q5MjdiNjQ5MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5j
cHAKQEAgLTM5LDcgKzM5LDcgQEAgT3B0aW9uYWw8dW5zaWduZWQ+IFRleHRVdGlsOjpoeXBoZW5Q
b3NpdGlvbkJlZm9yZShjb25zdCBJbmxpbmVJdGVtJiwgdW5zaWduZWQsIHUKICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogfQogCi1MYXlvdXRVbml0IFRleHRVdGlsOjp3aWR0aChjb25zdCBCb3gm
IGlubGluZUJveCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIExheW91dFVuaXQgY29udGVu
dExvZ2ljYWxMZWZ0KQorSW5saW5lTGF5b3V0VW5pdCBUZXh0VXRpbDo6d2lkdGgoY29uc3QgQm94
JiBpbmxpbmVCb3gsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBJbmxpbmVMYXlvdXRVbml0
IGNvbnRlbnRMb2dpY2FsTGVmdCkKIHsKICAgICBhdXRvJiBzdHlsZSA9IGlubGluZUJveC5zdHls
ZSgpOwogICAgIGF1dG8mIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwpAQCAtNzEsMTAgKzcx
LDEwIEBAIExheW91dFVuaXQgVGV4dFV0aWw6OndpZHRoKGNvbnN0IEJveCYgaW5saW5lQm94LCB1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgTGF5CiAgICAgaWYgKG1lYXN1cmVXaXRoRW5kU3Bh
Y2UpCiAgICAgICAgIHdpZHRoIC09IChmb250LnNwYWNlV2lkdGgoKSArIGZvbnQud29yZFNwYWNp
bmcoKSk7CiAKLSAgICByZXR1cm4gc3RkOjptYXgoMF9sdSwgTGF5b3V0VW5pdDo6ZnJvbUZsb2F0
Um91bmQod2lkdGgpKTsKKyAgICByZXR1cm4gc3RkOjptYXgoMF9sdSwgSW5saW5lTGF5b3V0VW5p
dDo6ZnJvbUZsb2F0Um91bmQod2lkdGgpKTsKIH0KIAotTGF5b3V0VW5pdCBUZXh0VXRpbDo6Zml4
ZWRQaXRjaFdpZHRoKGNvbnN0IFN0cmluZ1ZpZXcmIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIExheW91dFVuaXQgY29udGVudExvZ2lj
YWxMZWZ0KQorSW5saW5lTGF5b3V0VW5pdCBUZXh0VXRpbDo6Zml4ZWRQaXRjaFdpZHRoKGNvbnN0
IFN0cmluZ1ZpZXcmIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgdW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgdG8sIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KQogewog
ICAgIGF1dG8mIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwogICAgIGF1dG8gbW9ub3NwYWNl
Q2hhcmFjdGVyV2lkdGggPSBmb250LnNwYWNlV2lkdGgoKTsKQEAgLTkwLDE5ICs5MCwxOSBAQCBM
YXlvdXRVbml0IFRleHRVdGlsOjpmaXhlZFBpdGNoV2lkdGgoY29uc3QgU3RyaW5nVmlldyYgdGV4
dCwgY29uc3QgUmVuZGVyU3R5bGUmCiAgICAgICAgICAgICB3aWR0aCArPSBmb250LndvcmRTcGFj
aW5nKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHN0ZDo6bWF4KDBfbHUsIExheW91dFVuaXQ6OmZy
b21GbG9hdFJvdW5kKHdpZHRoKSk7CisgICAgcmV0dXJuIHN0ZDo6bWF4KDBfbHUsIElubGluZUxh
eW91dFVuaXQ6OmZyb21GbG9hdFJvdW5kKHdpZHRoKSk7CiB9CiAKLVRleHRVdGlsOjpTcGxpdERh
dGEgVGV4dFV0aWw6OnNwbGl0KGNvbnN0IEJveCYgaW5saW5lQm94LCB1bnNpZ25lZCBzdGFydFBv
c2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIExheW91dFVuaXQgdGV4dFdpZHRoLCBMYXlvdXRVbml0
IGF2YWlsYWJsZVdpZHRoLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkKK1RleHRVdGls
OjpTcGxpdERhdGEgVGV4dFV0aWw6OnNwbGl0KGNvbnN0IEJveCYgaW5saW5lQm94LCB1bnNpZ25l
ZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIElubGluZUxheW91dFVuaXQgdGV4dFdp
ZHRoLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGNv
bnRlbnRMb2dpY2FsTGVmdCkKIHsKICAgICBBU1NFUlQoYXZhaWxhYmxlV2lkdGggPj0gMCk7CiAg
ICAgYXV0byBsZWZ0ID0gc3RhcnRQb3NpdGlvbjsKICAgICAvLyBQYXRob2xvZ2ljYWwgY2FzZSBv
ZiAoZXh0cmVtZWx5KWxvbmcgc3RyaW5nIGFuZCBuYXJyb3cgbGluZXMuCiAgICAgLy8gQWRqdXN0
IHRoZSByYW5nZSBzbyB0aGF0IHdlIGNhbiBwaWNrIGEgcmVhc29uYWJsZSBtaWRwb2ludC4KLSAg
ICBMYXlvdXRVbml0IGF2ZXJhZ2VDaGFyYWN0ZXJXaWR0aCA9IHRleHRXaWR0aCAvIGxlbmd0aDsK
KyAgICBJbmxpbmVMYXlvdXRVbml0IGF2ZXJhZ2VDaGFyYWN0ZXJXaWR0aCA9IHRleHRXaWR0aCAv
IGxlbmd0aDsKICAgICBhdXRvIHJpZ2h0ID0gc3RkOjptaW48dW5zaWduZWQ+KGxlZnQgKyAoMiAq
IGF2YWlsYWJsZVdpZHRoIC8gYXZlcmFnZUNoYXJhY3RlcldpZHRoKS50b1Vuc2lnbmVkKCksIChz
dGFydFBvc2l0aW9uICsgbGVuZ3RoIC0gMSkpOwogICAgIC8vIFByZXNlcnZlIHRoZSBsZWZ0IHdp
ZHRoIGZvciB0aGUgZmluYWwgc3BsaXQgcG9zaXRpb24gc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRv
IHJlbWVhc3VyZSB0aGUgbGVmdCBzaWRlIGFnYWluLgotICAgIExheW91dFVuaXQgbGVmdFNpZGVX
aWR0aCA9IDA7CisgICAgSW5saW5lTGF5b3V0VW5pdCBsZWZ0U2lkZVdpZHRoID0gMDsKICAgICB3
aGlsZSAobGVmdCA8IHJpZ2h0KSB7CiAgICAgICAgIGF1dG8gbWlkZGxlID0gKGxlZnQgKyByaWdo
dCkgLyAyOwogICAgICAgICBhdXRvIHdpZHRoID0gVGV4dFV0aWw6OndpZHRoKGlubGluZUJveCwg
c3RhcnRQb3NpdGlvbiwgbWlkZGxlICsgMSwgY29udGVudExvZ2ljYWxMZWZ0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwu
aCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwu
aAppbmRleCAwNmVjNWE5YWI5ZTMzNGUzYTY0MjVlOTJiNjRkOWMzMGZkNTdkN2Y4Li40ZTRhY2U1
OWEzMjJjYzdhNjNjMzhkYzAxZmUxMWJhZjBiMDQ1Zjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5oCkBAIC0zNywx
OCArMzcsMTggQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIFRleHRVdGlsIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgTGF5b3V0VW5pdCB3aWR0aChjb25zdCBCb3gmLCB1bnNpZ25lZCBmcm9t
LCB1bnNpZ25lZCB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQgPSAwX2x1KTsKKyAg
ICBzdGF0aWMgSW5saW5lTGF5b3V0VW5pdCB3aWR0aChjb25zdCBCb3gmLCB1bnNpZ25lZCBmcm9t
LCB1bnNpZ25lZCB0bywgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQgPSAwX2x1
KTsKICAgICBzdGF0aWMgT3B0aW9uYWw8dW5zaWduZWQ+IGh5cGhlblBvc2l0aW9uQmVmb3JlKGNv
bnN0IElubGluZUl0ZW0mLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIHN0
cnVjdCBTcGxpdERhdGEgewogICAgICAgICB1bnNpZ25lZCBzdGFydCB7IDAgfTsKICAgICAgICAg
dW5zaWduZWQgbGVuZ3RoIHsgMCB9OwotICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aDsK
KyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGg7CiAgICAgfTsKLSAgICBzdGF0
aWMgU3BsaXREYXRhIHNwbGl0KGNvbnN0IEJveCYsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVu
c2lnbmVkIGxlbmd0aCwgTGF5b3V0VW5pdCB0ZXh0V2lkdGgsIExheW91dFVuaXQgYXZhaWxhYmxl
V2lkdGgsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KTsKKyAgICBzdGF0aWMgU3BsaXRE
YXRhIHNwbGl0KGNvbnN0IEJveCYsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGxl
bmd0aCwgSW5saW5lTGF5b3V0VW5pdCB0ZXh0V2lkdGgsIElubGluZUxheW91dFVuaXQgYXZhaWxh
YmxlV2lkdGgsIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KTsKICAgICBzdGF0
aWMgYm9vbCBzaG91bGRQcmVzZXJ2ZVRyYWlsaW5nV2hpdGVzcGFjZShjb25zdCBSZW5kZXJTdHls
ZSYpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBMYXlvdXRVbml0IGZpeGVkUGl0Y2hXaWR0aChj
b25zdCBTdHJpbmdWaWV3JiwgY29uc3QgUmVuZGVyU3R5bGUmLCB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpOworICAgIHN0YXRpYyBJbmxp
bmVMYXlvdXRVbml0IGZpeGVkUGl0Y2hXaWR0aChjb25zdCBTdHJpbmdWaWV3JiwgY29uc3QgUmVu
ZGVyU3R5bGUmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgSW5saW5lTGF5b3V0VW5pdCBj
b250ZW50TG9naWNhbExlZnQpOwogfTsKIAogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>