<?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>209523</bug_id>
          
          <creation_ts>2020-03-24 16:59:04 -0700</creation_ts>
          <short_desc>Rename DragDataMac and DragImageMac to DragDataCocoa and DragImageCocoa</short_desc>
          <delta_ts>2020-03-24 18:22:09 -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>HTML Editing</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>DoNotImportToRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>bdakin</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1633664</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-03-24 16:59:04 -0700</bug_when>
    <thetext>SSIA</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633691</commentid>
    <comment_count>1</comment_count>
      <attachid>394447</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-03-24 17:22:27 -0700</bug_when>
    <thetext>Created attachment 394447
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633718</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-03-24 18:22:07 -0700</bug_when>
    <thetext>Committed r258966: &lt;https://trac.webkit.org/changeset/258966&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 394447.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394447</attachid>
            <date>2020-03-24 17:22:27 -0700</date>
            <delta_ts>2020-03-24 18:22:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209523-20200324172226.patch</filename>
            <type>text/plain</type>
            <size>64324</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4OTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWI3NzgyNmEzMzliODdl
MGE4OWFkZjk3MWM4NmE2Yjg2NGFhNzE2Ni4uNjYyNjBkODVjMjIyNDNlYmE3ODhmNWY1YmJjNGJl
Nzg0OTVkM2JhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIwLTAzLTI0ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBEcmFn
RGF0YU1hYyBhbmQgRHJhZ0ltYWdlTWFjIHRvIERyYWdEYXRhQ29jb2EgYW5kIERyYWdJbWFnZUNv
Y29hCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk1
MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5h
bWUgRHJhZ0RhdGFNYWMgdG8gRHJhZ0RhdGFDb2NvYSwgYW5kIERyYWdJbWFnZU1hYyB0byBEcmFn
SW1hZ2VDb2NvYS4gVGhlc2UgZmlsZXMgY29udGFpbiBsb2dpYyByZWxldmFudCB0bworICAgICAg
ICBib3RoIG1hY09TIGFuZCBpT1MsIGFuZCBhcyBzdWNoLCBiZWxvbmcgaW4gcGxhdGZvcm0vY29j
b2EgcmF0aGVyIHRoYW4gcGxhdGZvcm0vbWFjLgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBiZWhh
dmlvci4KKworICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL0RyYWdE
YXRhQ29jb2EubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJh
Z0RhdGFNYWMubW0uCisgICAgICAgIChXZWJDb3JlOjpydGZQYXN0ZWJvYXJkVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpydGZkUGFzdGVib2FyZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6c3Ry
aW5nUGFzdGVib2FyZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6dXJsUGFzdGVib2FyZFR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6aHRtbFBhc3RlYm9hcmRUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbG9yUGFzdGVib2FyZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6cGRmUGFzdGVib2Fy
ZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6dGlmZlBhc3RlYm9hcmRUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYWdEYXRhOjpEcmFnRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0
YTo6Y29udGFpbnNVUkxUeXBlSWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
cmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdE
YXRhOjpjb250YWluc0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpj
b250YWluc0ZpbGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpudW1iZXJP
ZkZpbGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc0ZpbGVuYW1lcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzUGxhaW5UZXh0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYWdEYXRhOjpjb250YWluc0NvbXBhdGlibGVDb250ZW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc1Byb21pc2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YWdEYXRhOjphc1VSTCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdl
Q29jb2EubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0lt
YWdlTWFjLm1tLgorICAgICAgICAoV2ViQ29yZTo6ZHJhZ0ltYWdlU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpkZWxldGVEcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6c2NhbGVEcmFnSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2VGaWxlbmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpkcmFnT2Zmc2V0Rm9yTGlua0RyYWdJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjphbmNob3JQb2ludEZvckxpbmtEcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TGlua0lt
YWdlTGF5b3V0OjpMaW5rSW1hZ2VMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJh
Z0ltYWdlRm9yTGluayk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JDb2xv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVNoYWRlck1vZHVs
ZU1ldGFsLm1tOgorCisgICAgICAgIFVucmVsYXRlZCBidWlsZCBmaXggZHVlIHRvIGNoYW5naW5n
IHVuaWZpZWQgc291cmNlcy4KKwogMjAyMC0wMy0yNCAgQW50b2luZSBRdWludCAgPGdyYW91dHNA
YXBwbGUuY29tPgogCiAgICAgICAgIFtXZWIgQW5pbWF0aW9uc10gQ2xlYW4gdGltZWxpbmUgaGVh
ZGVycyB1cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYzgwYjIxYTk0ZmMwMGIwYTYxOWI0
NGVmMzU0NzBlNjNkODZlNzJmMS4uYTFmYmY5NTI4NzgwMTVhMzY3ZmZlMzJkNGYwYzk5NjFmYWFk
NTM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0xOTUsNiArMTk1LDggQEAgcGxhdGZv
cm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCiBwbGF0Zm9ybS9jb2NvYS9Db250ZW50RmlsdGVyVW5i
bG9ja0hhbmRsZXJDb2NvYS5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1Nv
ZnRMaW5rLmNwcAogcGxhdGZvcm0vY29jb2EvRGF0YURldGVjdG9yc0NvcmVTb2Z0TGluay5tbSBA
bm8tdW5pZnkKK3BsYXRmb3JtL2NvY29hL0RyYWdEYXRhQ29jb2EubW0KK3BsYXRmb3JtL2NvY29h
L0RyYWdJbWFnZUNvY29hLm1tCiBwbGF0Zm9ybS9jb2NvYS9GaWxlTW9uaXRvckNvY29hLm1tCiBw
bGF0Zm9ybS9jb2NvYS9LZXlFdmVudENvY29hLm1tCiBwbGF0Zm9ybS9jb2NvYS9Mb2NhbGl6ZWRT
dHJpbmdzQ29jb2EubW0KQEAgLTQ0NCw4ICs0NDYsNiBAQCBwbGF0Zm9ybS9pb3Mvd2FrL1dLVmll
dy5tbQogCiBwbGF0Zm9ybS9tYWMvQmxhY2tsaXN0VXBkYXRlci5tbQogcGxhdGZvcm0vbWFjL0N1
cnNvck1hYy5tbSBAbm8tdW5pZnkKLXBsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQotcGxhdGZv
cm0vbWFjL0RyYWdJbWFnZU1hYy5tbQogcGxhdGZvcm0vbWFjL0tleUV2ZW50TWFjLm1tIEBuby11
bmlmeQogcGxhdGZvcm0vbWFjL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBAbm8tdW5p
ZnkKIHBsYXRmb3JtL21hYy9Mb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkY2E1
NWE0MWU5MWZmZGYxNmU5ZTUzOGY2ZjYzZDMzZWUxNzU2NWVjLi45ZjllZDczMzBhODdmODAwYzJi
ZjhlMDlmNTUwODM4ZDhkNjAxNmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTg4NSw3ICsxMTg4NSw2IEBACiAJCUE3ODQ5
NDFBMEI1RkU1MDcwMDFFMjM3QSAvKiBEYXRhVHJhbnNmZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFUcmFuc2Zlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3OEZFMTM5MTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BlbGxDaGVja2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4RkUxM0ExMjM2NkIxMDAwQUNFOEQwIC8q
IFNwZWxsQ2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFNwZWxsQ2hl
Y2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzk1NDYzRDBCNUM0QzgwMDA3
QjQzOEYgLyogRHJhZ0RhdGFNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gRHJhZ0RhdGFNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3
OTU0NjQyMEI1QzRDQjQwMDdCNDM4RiAvKiBEcmFnRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEcmFnRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3OUJBRDlEMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlRmVhdHVyZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSdWxlRmVhdHVyZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OUJBRDlFMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlRmVh
dHVyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSdWxlRmVhdHVyZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE5MTEsNyArMTE5MTAsNiBAQAogCQlBN0NB
NTk2MjBCMjdDMUYyMDBGQTAyMUQgLyogRHJhZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEcmFnQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3Q0ZCM0NGMEI3RUQxMEEwMDcwQzMyRCAvKiBEcmFnSW1hZ2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERyYWdJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3Q0ZCM0QwMEI3RUQxMEEwMDcwQzMyRCAvKiBEcmFnSW1hZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERyYWdJbWFnZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBN0NGQjNENDBCN0VEMTE4MDA3MEMzMkQgLyogRHJhZ0ltYWdlTWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERyYWdJbWFnZU1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdEMDMxOEQwRTkzNTQwMzAwRTI0
QUNEIC8qIEpTSW1hZ2VEYXRhQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTSW1hZ2VEYXRhQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTdEMjBGM0IxMDdGMzczODAwQTgwMzkyIC8qIFdlYkdMQWN0aXZlSW5mby5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViR0xBY3RpdmVJbmZvLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTdEMjBGNjAxMDdGNDA2OTAwQTgwMzkyIC8qIEpTV2ViR0xBY3RpdmVJ
bmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xBY3Rp
dmVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NjM2LDYgKzE1NjM0
LDggQEAKIAkJRjQ1QzIzMUIxOTk1QjczQjAwQTZFMkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBeGlzU2Nyb2xsU25h
cE9mZnNldHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDVDMjMxQzE5OTVC
NzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGNDYyOEE5RTIzNEQzQkJGMDBCQzg4NEMgLyogUGxhdGZvcm1QYXN0ZWJv
YXJkQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF0
Zm9ybVBhc3RlYm9hcmRDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjQ2
MkU3OUYyNDJBREEzQzAwMjA0REREIC8qIERyYWdEYXRhQ29jb2EubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEcmFnRGF0YUNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGNDYyRTdBMDI0MkFEQTNEMDAyMDREREQgLyogRHJhZ0ltYWdlQ29j
b2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEcmFnSW1hZ2VD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ2NzI5MjUxRTBERTVBQjAw
QUNDM0Q4IC8qIFNjcm9sbFNuYXBPZmZzZXRzSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRjQ2QzQ0N0EyMzQ2NTM1RTAwMzlBNzlEIC8qIENsaXBib2FyZEl0ZW1EYXRhU291
cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBib2FyZEl0ZW1EYXRhU291cmNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NkM0NDdDMjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9h
cmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBib2FyZEl0ZW1C
aW5kaW5nc0RhdGFTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNjcx
LDggKzIwNjcxLDYgQEAKIAkJCQkxQUZGQzQ0RDFENUU3RUM3MDAyNjdBNjYgLyogQmxhY2tsaXN0
VXBkYXRlci5oICovLAogCQkJCTFBRkZDNDRFMUQ1RTdFQzcwMDI2N0E2NiAvKiBCbGFja2xpc3RV
cGRhdGVyLm1tICovLAogCQkJCUY1ODc4NEYwMDJERTM3NTkwMUVBNDEyMiAvKiBDdXJzb3JNYWMu
bW0gKi8sCi0JCQkJQTc5NTQ2M0QwQjVDNEM4MDAwN0I0MzhGIC8qIERyYWdEYXRhTWFjLm1tICov
LAotCQkJCUE3Q0ZCM0Q0MEI3RUQxMTgwMDcwQzMyRCAvKiBEcmFnSW1hZ2VNYWMubW0gKi8sCiAJ
CQkJRTFCQTY2RjAxNzQyQkQ4NjAwQzIwMjUxIC8qIER5bmFtaWNMaW5rZXJJbnRlcnBvc2luZy5o
ICovLAogCQkJCTkzNUM0NzZFMDlBQzRENzMwMEE2QUFCNCAvKiBLZXlFdmVudE1hYy5tbSAqLywK
IAkJCQlGNDRBNUY1NzFGRUQzODMwMDA3RjU5NDQgLyogTGVnYWN5TlNQYXN0ZWJvYXJkVHlwZXMu
aCAqLywKQEAgLTIzMjYxLDYgKzIzMjU5LDggQEAKIAkJCQlDRDdEMzM0NjFDN0ExNkJGMDAwNDEy
OTMgLyogQ29yZVZpZGVvU29mdExpbmsuaCAqLywKIAkJCQk3Qzc5NDFFMzFDNTZDMjkzMDBBNEM1
OEUgLyogRGF0YURldGVjdG9yc0NvcmVTb2Z0TGluay5oICovLAogCQkJCTdDNzk0MUUyMUM1NkMy
OTMwMEE0QzU4RSAvKiBEYXRhRGV0ZWN0b3JzQ29yZVNvZnRMaW5rLm1tICovLAorCQkJCUY0NjJF
NzlGMjQyQURBM0MwMDIwNERERCAvKiBEcmFnRGF0YUNvY29hLm1tICovLAorCQkJCUY0NjJFN0Ew
MjQyQURBM0QwMDIwNERERCAvKiBEcmFnSW1hZ2VDb2NvYS5tbSAqLywKIAkJCQk3QTA5Q0VGMDFG
MDFEMUY3MDBFOTNCREIgLyogRmlsZU1vbml0b3JDb2NvYS5tbSAqLywKIAkJCQlBNUM5NzRDRjEx
NDg1RkYxMDA2NkYyQUIgLyogS2V5RXZlbnRDb2NvYS5oICovLAogCQkJCUE1Qzk3NEQwMTE0ODVG
RjEwMDY2RjJBQiAvKiBLZXlFdmVudENvY29hLm1tICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0RhdGFDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL0RyYWdEYXRhQ29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmUxZWVkNGQ2Yjk2M2Jl
N2JjZmRiMjBkODAyZGQ3MDc2MTdlOGU5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL0RyYWdEYXRhQ29jb2EubW0KQEAgLTAsMCArMSwzNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJEcmFnRGF0YS5oIgorCisjaWYgRU5BQkxFKERSQUdfU1VQ
UE9SVCkKKyNpbXBvcnQgIkxlZ2FjeU5TUGFzdGVib2FyZFR5cGVzLmgiCisjaW1wb3J0ICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCisjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgorI2ltcG9ydCAiUGFz
dGVib2FyZC5oIgorI2ltcG9ydCAiUGFzdGVib2FyZFN0cmF0ZWd5LmgiCisjaW1wb3J0ICJQbGF0
Zm9ybVBhc3RlYm9hcmQuaCIKKyNpbXBvcnQgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgorI2ltcG9y
dCAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2ltcG9ydCAiV2ViQ29yZU5TVVJMRXh0cmFz
LmgiCisjaW1wb3J0IDx3dGYvY29jb2EvTlNVUkxFeHRyYXMuaD4KKworI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisjaW1wb3J0IDxNb2JpbGVDb3JlU2VydmljZXMvTW9iaWxlQ29yZVNlcnZpY2Vz
Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIFN0cmlu
ZyBydGZQYXN0ZWJvYXJkVHlwZSgpCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBy
ZXR1cm4gU3RyaW5nKGtVVFR5cGVSVEYpOworI2Vsc2UKKyAgICByZXR1cm4gU3RyaW5nKGxlZ2Fj
eVJURlBhc3RlYm9hcmRUeXBlKCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5n
IHJ0ZmRQYXN0ZWJvYXJkVHlwZSgpCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBy
ZXR1cm4gU3RyaW5nKGtVVFR5cGVGbGF0UlRGRCk7CisjZWxzZQorICAgIHJldHVybiBTdHJpbmco
bGVnYWN5UlRGRFBhc3RlYm9hcmRUeXBlKCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUg
U3RyaW5nIHN0cmluZ1Bhc3RlYm9hcmRUeXBlKCkKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorICAgIHJldHVybiBTdHJpbmcoa1VUVHlwZVRleHQpOworI2Vsc2UKKyAgICByZXR1cm4gU3Ry
aW5nKGxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBp
bmxpbmUgU3RyaW5nIHVybFBhc3RlYm9hcmRUeXBlKCkKK3sKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgIHJldHVybiBTdHJpbmcoa1VUVHlwZVVSTCk7CisjZWxzZQorICAgIHJldHVybiBT
dHJpbmcobGVnYWN5VVJMUGFzdGVib2FyZFR5cGUoKSk7CisjZW5kaWYKK30KKworc3RhdGljIGlu
bGluZSBTdHJpbmcgaHRtbFBhc3RlYm9hcmRUeXBlKCkKK3sKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgIHJldHVybiBTdHJpbmcoa1VUVHlwZUhUTUwpOworI2Vsc2UKKyAgICByZXR1cm4g
U3RyaW5nKGxlZ2FjeUhUTUxQYXN0ZWJvYXJkVHlwZSgpKTsKKyNlbmRpZgorfQorCitzdGF0aWMg
aW5saW5lIFN0cmluZyBjb2xvclBhc3RlYm9hcmRUeXBlKCkKK3sKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIHJldHVybiBTdHJpbmcgeyBVSUNvbG9yUGJvYXJkVHlwZSB9OworI2Vsc2UK
KyAgICByZXR1cm4gU3RyaW5nKGxlZ2FjeUNvbG9yUGFzdGVib2FyZFR5cGUoKSk7CisjZW5kaWYK
K30KKworc3RhdGljIGlubGluZSBTdHJpbmcgcGRmUGFzdGVib2FyZFR5cGUoKQoreworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisgICAgcmV0dXJuIFN0cmluZyhrVVRUeXBlUERGKTsKKyNlbHNl
CisgICAgcmV0dXJuIFN0cmluZyhsZWdhY3lQREZQYXN0ZWJvYXJkVHlwZSgpKTsKKyNlbmRpZgor
fQorCitzdGF0aWMgaW5saW5lIFN0cmluZyB0aWZmUGFzdGVib2FyZFR5cGUoKQoreworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisgICAgcmV0dXJuIFN0cmluZyhrVVRUeXBlVElGRik7CisjZWxz
ZQorICAgIHJldHVybiBTdHJpbmcobGVnYWN5VElGRlBhc3RlYm9hcmRUeXBlKCkpOworI2VuZGlm
Cit9CisKK0RyYWdEYXRhOjpEcmFnRGF0YShEcmFnRGF0YVJlZiBkYXRhLCBjb25zdCBJbnRQb2lu
dCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgRHJhZ09w
ZXJhdGlvbiBzb3VyY2VPcGVyYXRpb25NYXNrLCBEcmFnQXBwbGljYXRpb25GbGFncyBmbGFncywg
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGRlc3RpbmF0aW9uQWN0aW9uKQorICAgIDogbV9jbGllbnRQ
b3NpdGlvbihjbGllbnRQb3NpdGlvbikKKyAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9z
aXRpb24pCisgICAgLCBtX3BsYXRmb3JtRHJhZ0RhdGEoZGF0YSkKKyAgICAsIG1fZHJhZ2dpbmdT
b3VyY2VPcGVyYXRpb25NYXNrKHNvdXJjZU9wZXJhdGlvbk1hc2spCisgICAgLCBtX2FwcGxpY2F0
aW9uRmxhZ3MoZmxhZ3MpCisgICAgLCBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbihkZXN0aW5hdGlv
bkFjdGlvbikKKyNpZiBQTEFURk9STShNQUMpCisgICAgLCBtX3Bhc3RlYm9hcmROYW1lKFtbbV9w
bGF0Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0pCisjZWxzZQorICAgICwg
bV9wYXN0ZWJvYXJkTmFtZSgiZGF0YSBpbnRlcmFjdGlvbiBwYXN0ZWJvYXJkIikKKyNlbmRpZgor
eworfQorCitEcmFnRGF0YTo6RHJhZ0RhdGEoY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUs
IGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBv
c2l0aW9uLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbk1hc2ssIERyYWdBcHBsaWNhdGlv
bkZsYWdzIGZsYWdzLCBEcmFnRGVzdGluYXRpb25BY3Rpb24gZGVzdGluYXRpb25BY3Rpb24pCisg
ICAgOiBtX2NsaWVudFBvc2l0aW9uKGNsaWVudFBvc2l0aW9uKQorICAgICwgbV9nbG9iYWxQb3Np
dGlvbihnbG9iYWxQb3NpdGlvbikKKyAgICAsIG1fcGxhdGZvcm1EcmFnRGF0YSgwKQorICAgICwg
bV9kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soc291cmNlT3BlcmF0aW9uTWFzaykKKyAgICAs
IG1fYXBwbGljYXRpb25GbGFncyhmbGFncykKKyAgICAsIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
KGRlc3RpbmF0aW9uQWN0aW9uKQorICAgICwgbV9wYXN0ZWJvYXJkTmFtZShkcmFnU3RvcmFnZU5h
bWUpCit7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zVVJMVHlwZUlkZW50aWZpZXIoKSBj
b25zdAoreworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOworICAgIHBsYXRmb3JtU3RyYXRlZ2ll
cygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0VHlwZXModHlwZXMsIG1fcGFzdGVib2FyZE5h
bWUpOworICAgIHJldHVybiB0eXBlcy5jb250YWlucyh1cmxQYXN0ZWJvYXJkVHlwZSgpKTsKK30K
KyAgICAKK2Jvb2wgRHJhZ0RhdGE6OmNhblNtYXJ0UmVwbGFjZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFBhc3RlYm9hcmQobV9wYXN0ZWJvYXJkTmFtZSkuY2FuU21hcnRSZXBsYWNlKCk7Cit9CisK
K2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29sb3IoKSBjb25zdAoreworICAgIFZlY3RvcjxTdHJp
bmc+IHR5cGVzOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3ko
KS0+Z2V0VHlwZXModHlwZXMsIG1fcGFzdGVib2FyZE5hbWUpOworICAgIHJldHVybiB0eXBlcy5j
b250YWlucyhjb2xvclBhc3RlYm9hcmRUeXBlKCkpOworfQorCitib29sIERyYWdEYXRhOjpjb250
YWluc0ZpbGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVtYmVyT2ZGaWxlcygpOworfQorCit1
bnNpZ25lZCBEcmFnRGF0YTo6bnVtYmVyT2ZGaWxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0TnVtYmVyT2ZGaWxl
cyhtX3Bhc3RlYm9hcmROYW1lKTsKK30KKworVmVjdG9yPFN0cmluZz4gRHJhZ0RhdGE6OmFzRmls
ZW5hbWVzKCkgY29uc3QKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgVmVjdG9yPFN0cmluZz4g
dHlwZXM7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5n
ZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5z
KFN0cmluZyhsZWdhY3lGaWxlc1Byb21pc2VQYXN0ZWJvYXJkVHlwZSgpKSkpCisgICAgICAgIHJl
dHVybiBmaWxlTmFtZXMoKTsKKworICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdHM7CisgICAgcGxh
dGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRQYXRobmFtZXNGb3JU
eXBlKHJlc3VsdHMsIFN0cmluZyhsZWdhY3lGaWxlbmFtZXNQYXN0ZWJvYXJkVHlwZSgpKSwgbV9w
YXN0ZWJvYXJkTmFtZSk7CisgICAgcmV0dXJuIHJlc3VsdHM7CisjZWxzZQorICAgIHJldHVybiBm
aWxlTmFtZXMoKTsKKyNlbmRpZgorfQorCitib29sIERyYWdEYXRhOjpjb250YWluc1BsYWluVGV4
dCgpIGNvbnN0Cit7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CisgICAgcGxhdGZvcm1TdHJh
dGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJv
YXJkTmFtZSk7CisKKyAgICByZXR1cm4gdHlwZXMuY29udGFpbnMoc3RyaW5nUGFzdGVib2FyZFR5
cGUoKSkKKyAgICAgICAgfHwgdHlwZXMuY29udGFpbnMocnRmZFBhc3RlYm9hcmRUeXBlKCkpCisg
ICAgICAgIHx8IHR5cGVzLmNvbnRhaW5zKHJ0ZlBhc3RlYm9hcmRUeXBlKCkpCisjaWYgUExBVEZP
Uk0oTUFDKQorICAgICAgICB8fCB0eXBlcy5jb250YWlucyhTdHJpbmcobGVnYWN5RmlsZW5hbWVz
UGFzdGVib2FyZFR5cGUoKSkpCisjZW5kaWYKKyAgICAgICAgfHwgcGxhdGZvcm1TdHJhdGVnaWVz
KCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zdHJpbmdGb3JUeXBlKHVybFBhc3RlYm9hcmRUeXBl
KCksIG1fcGFzdGVib2FyZE5hbWUpLmxlbmd0aCgpOworfQorCitTdHJpbmcgRHJhZ0RhdGE6OmFz
UGxhaW5UZXh0KCkgY29uc3QKK3sKKyAgICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQobV9wYXN0ZWJv
YXJkTmFtZSk7CisgICAgUGFzdGVib2FyZFBsYWluVGV4dCB0ZXh0OworICAgIHBhc3RlYm9hcmQu
cmVhZCh0ZXh0KTsKKyAgICBTdHJpbmcgc3RyaW5nID0gdGV4dC50ZXh0OworCisgICAgLy8gRklY
TUU6IEl0J3Mgbm90IGNsZWFyIHRoaXMgaXMgMTAwJSBjb3JyZWN0IHNpbmNlIHdlIGtub3cgLVtO
U1VSTCBVUkxXaXRoU3RyaW5nOl0gZG9lcyBub3QgaGFuZGxlCisgICAgLy8gYWxsIHRoZSBzYW1l
IGNhc2VzIHdlIGhhbmRsZSB3ZWxsIGluIHRoZSBVUkwgY29kZSBmb3IgY3JlYXRpbmcgYW4gTlNV
UkwuCisgICAgaWYgKHRleHQuaXNVUkwpCisgICAgICAgIHJldHVybiBXVEY6OnVzZXJWaXNpYmxl
U3RyaW5nKFtOU1VSTCBVUkxXaXRoU3RyaW5nOnN0cmluZ10pOworCisgICAgLy8gRklYTUU6IFdU
RiBzaG91bGQgb2ZmZXIgYSBub24tTWFjLXNwZWNpZmljIHdheSB0byBjb252ZXJ0IHN0cmluZyB0
byBwcmVjb21wb3NlZCBmb3JtIHNvIHdlIGNhbiBkbyBpdCBmb3IgYWxsIHBsYXRmb3Jtcy4KKyAg
ICByZXR1cm4gWyhOU1N0cmluZyAqKXN0cmluZyBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmlj
YWxNYXBwaW5nXTsKK30KKworQ29sb3IgRHJhZ0RhdGE6OmFzQ29sb3IoKSBjb25zdAoreworICAg
IHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNvbG9y
KG1fcGFzdGVib2FyZE5hbWUpOworfQorCitib29sIERyYWdEYXRhOjpjb250YWluc0NvbXBhdGli
bGVDb250ZW50KERyYWdnaW5nUHVycG9zZSBwdXJwb3NlKSBjb25zdAoreworICAgIGlmIChwdXJw
b3NlID09IERyYWdnaW5nUHVycG9zZTo6Rm9yRmlsZVVwbG9hZCkKKyAgICAgICAgcmV0dXJuIGNv
bnRhaW5zRmlsZXMoKTsKKworICAgIGlmIChwdXJwb3NlID09IERyYWdnaW5nUHVycG9zZTo6Rm9y
Q29sb3JDb250cm9sKQorICAgICAgICByZXR1cm4gY29udGFpbnNDb2xvcigpOworCisgICAgaWYg
KHB1cnBvc2UgPT0gRHJhZ2dpbmdQdXJwb3NlOjpGb3JFZGl0aW5nICYmIFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuYXR0YWNobWVudEVsZW1lbnRFbmFibGVkKCkgJiYg
Y29udGFpbnNGaWxlcygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFZlY3RvcjxTdHJp
bmc+IHR5cGVzOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3ko
KS0+Z2V0VHlwZXModHlwZXMsIG1fcGFzdGVib2FyZE5hbWUpOworICAgIHJldHVybiB0eXBlcy5j
b250YWlucyhTdHJpbmcoV2ViQXJjaGl2ZVBib2FyZFR5cGUpKQorICAgICAgICB8fCB0eXBlcy5j
b250YWlucyhodG1sUGFzdGVib2FyZFR5cGUoKSkKKyAgICAgICAgfHwgdHlwZXMuY29udGFpbnMo
U3RyaW5nKGtVVFR5cGVXZWJBcmNoaXZlKSkKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIHx8
IHR5cGVzLmNvbnRhaW5zKFN0cmluZyhsZWdhY3lGaWxlbmFtZXNQYXN0ZWJvYXJkVHlwZSgpKSkK
KyAgICAgICAgfHwgdHlwZXMuY29udGFpbnMoU3RyaW5nKGxlZ2FjeUZpbGVzUHJvbWlzZVBhc3Rl
Ym9hcmRUeXBlKCkpKQorI2VuZGlmCisgICAgICAgIHx8IHR5cGVzLmNvbnRhaW5zKHRpZmZQYXN0
ZWJvYXJkVHlwZSgpKQorICAgICAgICB8fCB0eXBlcy5jb250YWlucyhwZGZQYXN0ZWJvYXJkVHlw
ZSgpKQorICAgICAgICB8fCB0eXBlcy5jb250YWlucyh1cmxQYXN0ZWJvYXJkVHlwZSgpKQorICAg
ICAgICB8fCB0eXBlcy5jb250YWlucyhydGZkUGFzdGVib2FyZFR5cGUoKSkKKyAgICAgICAgfHwg
dHlwZXMuY29udGFpbnMocnRmUGFzdGVib2FyZFR5cGUoKSkKKyAgICAgICAgfHwgdHlwZXMuY29u
dGFpbnMoU3RyaW5nKGtVVFR5cGVVVEY4UGxhaW5UZXh0KSkKKyAgICAgICAgfHwgdHlwZXMuY29u
dGFpbnMoc3RyaW5nUGFzdGVib2FyZFR5cGUoKSkKKyAgICAgICAgfHwgdHlwZXMuY29udGFpbnMo
Y29sb3JQYXN0ZWJvYXJkVHlwZSgpKQorICAgICAgICB8fCB0eXBlcy5jb250YWlucyhTdHJpbmco
a1VUVHlwZUpQRUcpKQorICAgICAgICB8fCB0eXBlcy5jb250YWlucyhTdHJpbmcoa1VUVHlwZVBO
RykpOworfQorCitib29sIERyYWdEYXRhOjpjb250YWluc1Byb21pc2UoKSBjb25zdAoreworICAg
IC8vIEZJWE1FOiBsZWdhY3lGaWxlc1Byb21pc2VQYXN0ZWJvYXJkVHlwZSgpIGNvbnRhaW5zIFVU
SXMsIG5vdCBwYXRoIG5hbWVzLiBBbHNvLCB3aHkgZG8gd2UKKyAgICAvLyB0aGluayBwcm9taXNl
cyBzaG91bGQgb25seSBjb250YWluIG9uZSBmaWxlIChvciBVVEkpPworICAgIFZlY3RvcjxTdHJp
bmc+IGZpbGVzOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFBhdGhuYW1lc0ZvclR5cGUoZmlsZXMsIFN0cmluZyhs
ZWdhY3lGaWxlc1Byb21pc2VQYXN0ZWJvYXJkVHlwZSgpKSwgbV9wYXN0ZWJvYXJkTmFtZSk7Cisj
ZW5kaWYKKyAgICByZXR1cm4gZmlsZXMuc2l6ZSgpID09IDE7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6
OmNvbnRhaW5zVVJMKEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSkgY29u
c3QKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFVOVVNFRF9QQVJBTShmaWxlbmFt
ZVBvbGljeSk7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CisgICAgcGxhdGZvcm1TdHJhdGVn
aWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJk
TmFtZSk7CisgICAgaWYgKCF0eXBlcy5jb250YWlucyh1cmxQYXN0ZWJvYXJkVHlwZSgpKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byB1cmxTdHJpbmcgPSBwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnN0cmluZ0ZvclR5cGUodXJsUGFzdGVib2Fy
ZFR5cGUoKSwgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgaWYgKHVybFN0cmluZy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgLy8gT24gaU9TLCB3ZSBkb24ndCBnZXQgYWNjZXNzIHRvIHRoZSBjb250ZW50
cyBvZiBOU0l0ZW1Qcm92aWRlcnMgdW50aWwgd2UgcGVyZm9ybSB0aGUgZHJhZyBvcGVyYXRpb24u
CisgICAgICAgIC8vIFRodXMsIHdlIGNvbnNpZGVyIERyYWdEYXRhIHRvIGNvbnRhaW4gYW4gVVJM
IGlmIGl0IGNvbnRhaW5zIHRoZSBgcHVibGljLnVybGAgVVRJIHR5cGUuIExhdGVyIGRvd24gdGhl
CisgICAgICAgIC8vIHJvYWQsIHdoZW4gd2UgcGVyZm9ybSB0aGUgZHJhZyBvcGVyYXRpb24sIHdl
IGNhbiB0aGVuIGNoZWNrIGlmIHRoZSBVUkwncyBwcm90b2NvbCBpcyBodHRwIG9yIGh0dHBzLAor
ICAgICAgICAvLyBhbmQgaWYgaXQgaXNuJ3QsIHdlIGJhaWwgb3V0IG9mIHBhZ2UgbmF2aWdhdGlv
bi4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgVVJMIHdlYmNvcmVVUkwgPSBb
TlNVUkwgVVJMV2l0aFN0cmluZzp1cmxTdHJpbmddOworICAgIHJldHVybiB3ZWJjb3JlVVJMLnBy
b3RvY29sSXMoImh0dHAiKSB8fCB3ZWJjb3JlVVJMLnByb3RvY29sSXMoImh0dHBzIik7CisjZWxz
ZQorICAgIHJldHVybiAhYXNVUkwoZmlsZW5hbWVQb2xpY3kpLmlzRW1wdHkoKTsKKyNlbmRpZgor
fQorCitTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSwgU3Ry
aW5nKiB0aXRsZSkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVXNlIGZpbGVuYW1lUG9saWN5Lgor
CisgICAgaWYgKHRpdGxlKSB7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICBTdHJpbmcgVVJM
VGl0bGVTdHJpbmcgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCkt
PnN0cmluZ0ZvclR5cGUoU3RyaW5nKFdlYlVSTE5hbWVQYm9hcmRUeXBlKSwgbV9wYXN0ZWJvYXJk
TmFtZSk7CisgICAgICAgIGlmICghVVJMVGl0bGVTdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgKnRpdGxlID0gVVJMVGl0bGVTdHJpbmc7CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgVmVj
dG9yPFN0cmluZz4gdHlwZXM7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT5nZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7CisKKyAgICBpZiAo
dHlwZXMuY29udGFpbnModXJsUGFzdGVib2FyZFR5cGUoKSkpIHsKKyAgICAgICAgTlNVUkwgKlVS
TEZyb21QYXN0ZWJvYXJkID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6cGxhdGZvcm1TdHJhdGVnaWVz
KCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zdHJpbmdGb3JUeXBlKHVybFBhc3RlYm9hcmRUeXBl
KCksIG1fcGFzdGVib2FyZE5hbWUpXTsKKyAgICAgICAgTlNTdHJpbmcgKnNjaGVtZSA9IFtVUkxG
cm9tUGFzdGVib2FyZCBzY2hlbWVdOworICAgICAgICAvLyBDYW5ub3QgZHJvcCBvdGhlciBzY2hl
bWVzIHVubGVzcyA8cmRhcjovL3Byb2JsZW0vMTA1NjI2NjI+IGFuZCA8cmRhcjovL3Byb2JsZW0v
MTExODczMTU+IGFyZSBmaXhlZC4KKyAgICAgICAgaWYgKFtzY2hlbWUgaXNFcXVhbFRvU3RyaW5n
OkAiaHR0cCJdIHx8IFtzY2hlbWUgaXNFcXVhbFRvU3RyaW5nOkAiaHR0cHMiXSkKKyAgICAgICAg
ICAgIHJldHVybiBbVVJMQnlDYW5vbmljYWxpemluZ1VSTChVUkxGcm9tUGFzdGVib2FyZCkgYWJz
b2x1dGVTdHJpbmddOworICAgIH0KKyAgICAKKyAgICBpZiAodHlwZXMuY29udGFpbnMoc3RyaW5n
UGFzdGVib2FyZFR5cGUoKSkpIHsKKyAgICAgICAgTlNVUkwgKlVSTEZyb21QYXN0ZWJvYXJkID0g
W05TVVJMIFVSTFdpdGhTdHJpbmc6cGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJh
dGVneSgpLT5zdHJpbmdGb3JUeXBlKHN0cmluZ1Bhc3RlYm9hcmRUeXBlKCksIG1fcGFzdGVib2Fy
ZE5hbWUpXTsKKyAgICAgICAgTlNTdHJpbmcgKnNjaGVtZSA9IFtVUkxGcm9tUGFzdGVib2FyZCBz
Y2hlbWVdOworICAgICAgICAvLyBQYXN0ZWJvYXJkIGNvbnRlbnQgaXMgbm90IHRydXN0ZWQsIGJl
Y2F1c2UgSmF2YVNjcmlwdCBjb2RlIGNhbiBtb2RpZnkgaXQuIFdlIGNhbiBzYW5pdGl6ZSBpdCBm
b3IgVVJMcyBhbmQgb3RoZXIgdHlwZWQgY29udGVudCwgYnV0IG5vdCBmb3Igc3RyaW5ncy4KKyAg
ICAgICAgLy8gVGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5pdGlhdGUg
bmF2aWdhdGlvbiwgc28gd2Ugc2hvdWxkbid0IGFsbG93IGFyYml0cmFyeSBmaWxlIFVSTHMuCisg
ICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYWxsb3cgb25seSBodHRwIGZhbWlseSBzY2hlbWVz
LCBvciBhbnl0aGluZyBub24tbG9jYWw/CisgICAgICAgIGlmIChbc2NoZW1lIGlzRXF1YWxUb1N0
cmluZzpAImh0dHAiXSB8fCBbc2NoZW1lIGlzRXF1YWxUb1N0cmluZzpAImh0dHBzIl0pCisgICAg
ICAgICAgICByZXR1cm4gW1VSTEJ5Q2Fub25pY2FsaXppbmdVUkwoVVJMRnJvbVBhc3RlYm9hcmQp
IGFic29sdXRlU3RyaW5nXTsKKyAgICB9CisgICAgCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlm
ICh0eXBlcy5jb250YWlucyhTdHJpbmcobGVnYWN5RmlsZW5hbWVzUGFzdGVib2FyZFR5cGUoKSkp
KSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVzOworICAgICAgICBwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFBhdGhuYW1lc0ZvclR5cGUoZmlsZXMs
IFN0cmluZyhsZWdhY3lGaWxlbmFtZXNQYXN0ZWJvYXJkVHlwZSgpKSwgbV9wYXN0ZWJvYXJkTmFt
ZSk7CisgICAgICAgIGlmIChmaWxlcy5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgQk9PTCBp
c0RpcmVjdG9yeTsKKyAgICAgICAgICAgIGlmIChbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFn
ZXJdIGZpbGVFeGlzdHNBdFBhdGg6ZmlsZXNbMF0gaXNEaXJlY3Rvcnk6JmlzRGlyZWN0b3J5XSAm
JiBpc0RpcmVjdG9yeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAg
ICAgICByZXR1cm4gW1VSTEJ5Q2Fub25pY2FsaXppbmdVUkwoW05TVVJMIGZpbGVVUkxXaXRoUGF0
aDpmaWxlc1swXV0pIGFic29sdXRlU3RyaW5nXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
ICh0eXBlcy5jb250YWlucyhTdHJpbmcobGVnYWN5RmlsZXNQcm9taXNlUGFzdGVib2FyZFR5cGUo
KSkpICYmIGZpbGVOYW1lcygpLnNpemUoKSA9PSAxKQorICAgICAgICByZXR1cm4gW1VSTEJ5Q2Fu
b25pY2FsaXppbmdVUkwoW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpmaWxlTmFtZXMoKVswXV0pIGFi
c29sdXRlU3RyaW5nXTsKKyNlbmRpZgorCisgICAgcmV0dXJuIFN0cmluZygpOyAgICAgICAgCit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBP
UlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VD
b2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmIyMDFjMGRjYjg4M2IzZDI3MThjZmUxOTcxN2VhOWE3YmZmZmQwMmYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VD
b2NvYS5tbQpAQCAtMCwwICsxLDM0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OSwgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiRHJhZ0ltYWdlLmgiCisKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiBQTEFURk9S
TShNQUMpCisKKyNpbXBvcnQgIkJpdG1hcEltYWdlLmgiCisjaW1wb3J0ICJDb2xvck1hYy5oIgor
I2ltcG9ydCAiRWxlbWVudC5oIgorI2ltcG9ydCAiRmxvYXRSb3VuZGVkUmVjdC5oIgorI2ltcG9y
dCAiRm9udENhc2NhZGUuaCIKKyNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgorI2ltcG9ydCAi
Rm9udFNlbGVjdG9yLmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIklt
YWdlLmgiCisjaW1wb3J0ICJMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLmgiCisjaW1wb3J0
ICJQYWdlLmgiCisjaW1wb3J0ICJTdHJpbmdUcnVuY2F0b3IuaCIKKyNpbXBvcnQgIlRleHRJbmRp
Y2F0b3IuaCIKKyNpbXBvcnQgIldlYktpdE5TSW1hZ2VFeHRyYXMuaCIKKyNpbXBvcnQgPHBhbC9z
cGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0
U1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1VSTEZvcm1hdHRpbmdTUEkuaD4KKyNpbXBv
cnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorI2ltcG9ydCA8d3RmL1VSTC5oPgorCisjaWYgIUhBVkUo
VVJMX0ZPUk1BVFRJTkcpCitTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUktfT1BUSU9OQUwoTGlu
a1ByZXNlbnRhdGlvbikKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFNpemUg
ZHJhZ0ltYWdlU2l6ZShSZXRhaW5QdHI8TlNJbWFnZT4gaW1hZ2UpCit7CisgICAgcmV0dXJuIChJ
bnRTaXplKVtpbWFnZSBzaXplXTsKK30KKwordm9pZCBkZWxldGVEcmFnSW1hZ2UoUmV0YWluUHRy
PE5TSW1hZ2U+KQoreworICAgIC8vIFNpbmNlIHRoaXMgaXMgYSBSZXRhaW5QdHIsIHRoZXJlJ3Mg
bm90aGluZyBhZGRpdGlvbmFsIHdlIG5lZWQgdG8gZG8gdG8KKyAgICAvLyBkZWxldGUgaXQuIEl0
IHdpbGwgYmUgcmVsZWFzZWQgd2hlbiBpdCBmYWxscyBvdXQgb2Ygc2NvcGUuCit9CisKK1JldGFp
blB0cjxOU0ltYWdlPiBzY2FsZURyYWdJbWFnZShSZXRhaW5QdHI8TlNJbWFnZT4gaW1hZ2UsIEZs
b2F0U2l6ZSBzY2FsZSkKK3sKKyAgICBOU1NpemUgb3JpZ2luYWxTaXplID0gW2ltYWdlIHNpemVd
OworICAgIE5TU2l6ZSBuZXdTaXplID0gTlNNYWtlU2l6ZSgob3JpZ2luYWxTaXplLndpZHRoICog
c2NhbGUud2lkdGgoKSksIChvcmlnaW5hbFNpemUuaGVpZ2h0ICogc2NhbGUuaGVpZ2h0KCkpKTsK
KyAgICBuZXdTaXplLndpZHRoID0gcm91bmRmKG5ld1NpemUud2lkdGgpOworICAgIG5ld1NpemUu
aGVpZ2h0ID0gcm91bmRmKG5ld1NpemUuaGVpZ2h0KTsKKyAgICBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19CRUdJTgorICAgIFtpbWFnZSBzZXRTY2FsZXNXaGVuUmVzaXplZDpZRVNdOwor
ICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorICAgIFtpbWFnZSBzZXRTaXpl
Om5ld1NpemVdOworICAgIHJldHVybiBpbWFnZTsKK30KKyAgICAKK1JldGFpblB0cjxOU0ltYWdl
PiBkaXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rpb24oUmV0YWluUHRyPE5TSW1hZ2U+IGltYWdlLCBm
bG9hdCBkZWx0YSkKK3sKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgUmV0YWluUHRyPE5TSW1hZ2U+IGRpc3NvbHZlZEltYWdlID0gYWRvcHROUyhbW05TSW1hZ2Ug
YWxsb2NdIGluaXRXaXRoU2l6ZTpbaW1hZ2Ugc2l6ZV1dKTsKKyAgICAKKyAgICBbZGlzc29sdmVk
SW1hZ2UgbG9ja0ZvY3VzXTsKKyAgICBbaW1hZ2UgZHJhd0F0UG9pbnQ6TlNaZXJvUG9pbnQgZnJv
bVJlY3Q6TlNNYWtlUmVjdCgwLCAwLCBbaW1hZ2Ugc2l6ZV0ud2lkdGgsIFtpbWFnZSBzaXplXS5o
ZWlnaHQpIG9wZXJhdGlvbjpOU0NvbXBvc2l0aW5nT3BlcmF0aW9uQ29weSBmcmFjdGlvbjpkZWx0
YV07CisgICAgW2Rpc3NvbHZlZEltYWdlIHVubG9ja0ZvY3VzXTsKKworICAgIHJldHVybiBkaXNz
b2x2ZWRJbWFnZTsKK30KKworUmV0YWluUHRyPE5TSW1hZ2U+IGNyZWF0ZURyYWdJbWFnZUZyb21J
bWFnZShJbWFnZSogaW1hZ2UsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAg
aWYgKGlzPEJpdG1hcEltYWdlPigqaW1hZ2UpKSB7CisgICAgICAgIEJpdG1hcEltYWdlJiBiaXRt
YXBJbWFnZSA9IGRvd25jYXN0PEJpdG1hcEltYWdlPigqaW1hZ2UpOworCisgICAgICAgIGlmIChv
cmllbnRhdGlvbiA9PSBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UpCisgICAgICAgICAgICBv
cmllbnRhdGlvbiA9IGJpdG1hcEltYWdlLm9yaWVudGF0aW9uRm9yQ3VycmVudEZyYW1lKCk7CisK
KyAgICAgICAgaWYgKG9yaWVudGF0aW9uICE9IEltYWdlT3JpZW50YXRpb246Ok5vbmUpIHsKKyAg
ICAgICAgICAgIC8vIENvbnN0cnVjdCBhIGNvcnJlY3RseS1yb3RhdGVkIGNvcHkgb2YgdGhlIGlt
YWdlIHRvIHVzZSBhcyB0aGUgZHJhZyBpbWFnZS4KKyAgICAgICAgICAgIEZsb2F0U2l6ZSBpbWFn
ZVNpemUgPSBpbWFnZS0+c2l6ZShvcmllbnRhdGlvbik7CisgICAgICAgICAgICBSZXRhaW5QdHI8
TlNJbWFnZT4gcm90YXRlZERyYWdJbWFnZSA9IGFkb3B0TlMoW1tOU0ltYWdlIGFsbG9jXSBpbml0
V2l0aFNpemU6KE5TU2l6ZSkoaW1hZ2VTaXplKV0pOworICAgICAgICAgICAgW3JvdGF0ZWREcmFn
SW1hZ2UgbG9ja0ZvY3VzXTsKKworICAgICAgICAgICAgLy8gSW1hZ2VPcmllbnRhdGlvbiB1c2Vz
IHRvcC1sZWZ0IGNvb3JkaW5hdGVzLCBuZWVkIHRvIGZsaXAgdG8gYm90dG9tLWxlZnQsIGFwcGx5
Li4uCisgICAgICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRy
YW5zZm9ybU1ha2VUcmFuc2xhdGlvbigwLCBpbWFnZVNpemUuaGVpZ2h0KCkpOworICAgICAgICAg
ICAgdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1TY2FsZSh0cmFuc2Zvcm0sIDEsIC0xKTsK
KyAgICAgICAgICAgIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG9yaWVudGF0
aW9uLnRyYW5zZm9ybUZyb21EZWZhdWx0KGltYWdlU2l6ZSksIHRyYW5zZm9ybSk7CisKKyAgICAg
ICAgICAgIGlmIChvcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKQorICAgICAgICAgICAg
ICAgIGltYWdlU2l6ZSA9IGltYWdlU2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOworCisgICAgICAgICAg
ICAvLyAuLi5hbmQgZmxpcCBiYWNrLgorICAgICAgICAgICAgdHJhbnNmb3JtID0gQ0dBZmZpbmVU
cmFuc2Zvcm1UcmFuc2xhdGUodHJhbnNmb3JtLCAwLCBpbWFnZVNpemUuaGVpZ2h0KCkpOworICAg
ICAgICAgICAgdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1TY2FsZSh0cmFuc2Zvcm0sIDEs
IC0xKTsKKworICAgICAgICAgICAgUmV0YWluUHRyPE5TQWZmaW5lVHJhbnNmb3JtPiBjb2NvYVRy
YW5zZm9ybSA9IGFkb3B0TlMoW1tOU0FmZmluZVRyYW5zZm9ybSBhbGxvY10gaW5pdF0pOworICAg
ICAgICAgICAgW2NvY29hVHJhbnNmb3JtIHNldFRyYW5zZm9ybVN0cnVjdDoqKE5TQWZmaW5lVHJh
bnNmb3JtU3RydWN0KikmdHJhbnNmb3JtXTsKKyAgICAgICAgICAgIFtjb2NvYVRyYW5zZm9ybSBj
b25jYXRdOworCisgICAgICAgICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwg
aW1hZ2VTaXplKTsKKyAgICAgICAgICAgIFtpbWFnZS0+c25hcHNob3ROU0ltYWdlKCkgZHJhd0lu
UmVjdDppbWFnZVJlY3QgZnJvbVJlY3Q6aW1hZ2VSZWN0IG9wZXJhdGlvbjpOU0NvbXBvc2l0aW5n
T3BlcmF0aW9uU291cmNlT3ZlciBmcmFjdGlvbjoxLjBdOworCisgICAgICAgICAgICBbcm90YXRl
ZERyYWdJbWFnZSB1bmxvY2tGb2N1c107CisKKyAgICAgICAgICAgIHJldHVybiByb3RhdGVkRHJh
Z0ltYWdlOworICAgICAgICB9CisgICAgfQorCisgICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IGlt
YWdlLT5zaXplKCk7CisgICAgYXV0byBkcmFnSW1hZ2UgPSBpbWFnZS0+c25hcHNob3ROU0ltYWdl
KCk7CisgICAgW2RyYWdJbWFnZSBzZXRTaXplOihOU1NpemUpaW1hZ2VTaXplXTsKKyAgICByZXR1
cm4gZHJhZ0ltYWdlOworfQorICAgIAorUmV0YWluUHRyPE5TSW1hZ2U+IGNyZWF0ZURyYWdJbWFn
ZUljb25Gb3JDYWNoZWRJbWFnZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCit7Cisg
ICAgTlNTdHJpbmcgKmV4dGVuc2lvbiA9IG5pbDsKKyAgICBzaXplX3QgZG90SW5kZXggPSBmaWxl
bmFtZS5yZXZlcnNlRmluZCgnLicpOworICAgIAorICAgIGlmIChkb3RJbmRleCAhPSBub3RGb3Vu
ZCAmJiBkb3RJbmRleCA8IChmaWxlbmFtZS5sZW5ndGgoKSAtIDEpKSAvLyByZXF1aXJlIHRoYXQg
YSAuIGV4aXN0cyBhZnRlciB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCBiZWZvcmUgdGhlIGxhc3QK
KyAgICAgICAgZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGRvdEluZGV4ICsgMSk7Cisg
ICAgZWxzZSB7CisgICAgICAgIC8vIEl0IG1pZ2h0IGJlIHdvcnRoIGRvaW5nIGEgZnVydGhlciBs
b29rdXAgdG8gcHVsbCB0aGUgZXh0ZW5zaW9uIGZyb20gdGhlIE1JTUUgdHlwZS4KKyAgICAgICAg
ZXh0ZW5zaW9uID0gQCIiOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gW1tOU1dvcmtzcGFjZSBz
aGFyZWRXb3Jrc3BhY2VdIGljb25Gb3JGaWxlVHlwZTpleHRlbnNpb25dOworfQorCitjb25zdCBD
R0Zsb2F0IGxpbmtJbWFnZVBhZGRpbmcgPSAxMDsKK2NvbnN0IENHRmxvYXQgbGlua0ltYWdlRG9t
YWluQmFzZWxpbmVUb1RpdGxlQmFzZWxpbmUgPSAxODsKK2NvbnN0IENHRmxvYXQgbGlua0ltYWdl
Q29ybmVyUmFkaXVzID0gNTsKK2NvbnN0IENHRmxvYXQgbGlua0ltYWdlTWF4aW11bVdpZHRoID0g
NDAwOworY29uc3QgQ0dGbG9hdCBsaW5rSW1hZ2VGb250U2l6ZSA9IDExOworY29uc3QgQ0ZJbmRl
eCBsaW5rSW1hZ2VUaXRsZU1heGltdW1MaW5lQ291bnQgPSAyOworY29uc3QgaW50IGxpbmtJbWFn
ZVNoYWRvd1JhZGl1cyA9IDA7Citjb25zdCBpbnQgbGlua0ltYWdlU2hhZG93T2Zmc2V0WSA9IDA7
Citjb25zdCBpbnQgbGlua0ltYWdlRHJhZ0Nvcm5lck91dHNldFggPSA2IC0gbGlua0ltYWdlU2hh
ZG93UmFkaXVzOworY29uc3QgaW50IGxpbmtJbWFnZURyYWdDb3JuZXJPdXRzZXRZID0gMTAgLSBs
aW5rSW1hZ2VTaGFkb3dSYWRpdXMgKyBsaW5rSW1hZ2VTaGFkb3dPZmZzZXRZOworCitJbnRQb2lu
dCBkcmFnT2Zmc2V0Rm9yTGlua0RyYWdJbWFnZShEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlKQorewor
ICAgIEludFNpemUgc2l6ZSA9IGRyYWdJbWFnZVNpemUoZHJhZ0ltYWdlKTsKKyAgICByZXR1cm4g
eyBsaW5rSW1hZ2VEcmFnQ29ybmVyT3V0c2V0WCwgc2l6ZS5oZWlnaHQoKSArIGxpbmtJbWFnZURy
YWdDb3JuZXJPdXRzZXRZIH07Cit9CisKK0Zsb2F0UG9pbnQgYW5jaG9yUG9pbnRGb3JMaW5rRHJh
Z0ltYWdlKERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UpCit7CisgICAgSW50U2l6ZSBzaXplID0gZHJh
Z0ltYWdlU2l6ZShkcmFnSW1hZ2UpOworICAgIHJldHVybiB7IC1zdGF0aWNfY2FzdDxmbG9hdD4o
bGlua0ltYWdlRHJhZ0Nvcm5lck91dHNldFgpIC8gc2l6ZS53aWR0aCgpLCAtc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGxpbmtJbWFnZURyYWdDb3JuZXJPdXRzZXRZKSAvIHNpemUuaGVpZ2h0KCkgfTsKK30K
Kworc3RydWN0IExpbmtJbWFnZUxheW91dCB7CisgICAgTGlua0ltYWdlTGF5b3V0KFVSTCYsIGNv
bnN0IFN0cmluZyYgdGl0bGUpOworCisgICAgc3RydWN0IExhYmVsIHsKKyAgICAgICAgRmxvYXRQ
b2ludCBvcmlnaW47CisgICAgICAgIFJldGFpblB0cjxDVEZyYW1lUmVmPiBmcmFtZTsKKyAgICB9
OworICAgIFZlY3RvcjxMYWJlbD4gbGFiZWxzOworCisgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVj
dDsKK307CisKK0xpbmtJbWFnZUxheW91dDo6TGlua0ltYWdlTGF5b3V0KFVSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHRpdGxlU3RyaW5nKQoreworICAgIE5TU3RyaW5nICp0aXRsZSA9IG5zU3RyaW5n
TmlsSWZFbXB0eSh0aXRsZVN0cmluZyk7CisgICAgTlNVUkwgKmNvY29hVVJMID0gdXJsOworICAg
IE5TU3RyaW5nICphYnNvbHV0ZVVSTFN0cmluZyA9IFtjb2NvYVVSTCBhYnNvbHV0ZVN0cmluZ107
CisKKyAgICBOU1N0cmluZyAqZG9tYWluID0gYWJzb2x1dGVVUkxTdHJpbmc7CisjaWYgSEFWRShV
UkxfRk9STUFUVElORykKKyAgICBkb21haW4gPSBbY29jb2FVUkwgX2xwX3NpbXBsaWZpZWREaXNw
bGF5U3RyaW5nXTsKKyNlbHNlCisgICAgaWYgKExpbmtQcmVzZW50YXRpb25MaWJyYXJ5KCkpCisg
ICAgICAgIGRvbWFpbiA9IFtjb2NvYVVSTCBfbHBfc2ltcGxpZmllZERpc3BsYXlTdHJpbmddOwor
I2VuZGlmCisKKyAgICBpZiAoW3RpdGxlIGlzRXF1YWxUb1N0cmluZzphYnNvbHV0ZVVSTFN0cmlu
Z10pCisgICAgICAgIHRpdGxlID0gbmlsOworCisgICAgTlNGb250ICp0aXRsZUZvbnQgPSBbTlNG
b250IGJvbGRTeXN0ZW1Gb250T2ZTaXplOmxpbmtJbWFnZUZvbnRTaXplXTsKKyAgICBOU0ZvbnQg
KmRvbWFpbkZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6bGlua0ltYWdlRm9udFNpemVd
OworCisgICAgTlNDb2xvciAqdGl0bGVDb2xvciA9IFtOU0NvbG9yIGxhYmVsQ29sb3JdOworICAg
IE5TQ29sb3IgKmRvbWFpbkNvbG9yID0gW05TQ29sb3Igc2Vjb25kYXJ5TGFiZWxDb2xvcl07CisK
KyAgICBDR0Zsb2F0IG1heGltdW1BdmFpbGFibGVXaWR0aCA9IGxpbmtJbWFnZU1heGltdW1XaWR0
aCAtIGxpbmtJbWFnZVBhZGRpbmcgKiAyOworCisgICAgQ0dGbG9hdCBjdXJyZW50WSA9IGxpbmtJ
bWFnZVBhZGRpbmc7CisgICAgQ0dGbG9hdCBtYXhpbXVtVXNlZFRleHRXaWR0aCA9IDA7CisKKyAg
ICBhdXRvIGJ1aWxkTGluZXMgPSBbdGhpcywgbWF4aW11bUF2YWlsYWJsZVdpZHRoLCAmbWF4aW11
bVVzZWRUZXh0V2lkdGgsICZjdXJyZW50WV0gKE5TU3RyaW5nICp0ZXh0LCBOU0NvbG9yICpjb2xv
ciwgTlNGb250ICpmb250LCBDRkluZGV4IG1heGltdW1MaW5lcywgQ1RMaW5lQnJlYWtNb2RlIGxp
bmVCcmVha01vZGUpIHsKKyAgICAgICAgQ1RQYXJhZ3JhcGhTdHlsZVNldHRpbmcgcGFyYWdyYXBo
U3R5bGVTZXR0aW5nc1sxXTsKKyAgICAgICAgcGFyYWdyYXBoU3R5bGVTZXR0aW5nc1swXS5zcGVj
ID0ga0NUUGFyYWdyYXBoU3R5bGVTcGVjaWZpZXJMaW5lQnJlYWtNb2RlOworICAgICAgICBwYXJh
Z3JhcGhTdHlsZVNldHRpbmdzWzBdLnZhbHVlU2l6ZSA9IHNpemVvZihDVExpbmVCcmVha01vZGUp
OworICAgICAgICBwYXJhZ3JhcGhTdHlsZVNldHRpbmdzWzBdLnZhbHVlID0gJmxpbmVCcmVha01v
ZGU7CisgICAgICAgIFJldGFpblB0cjxDVFBhcmFncmFwaFN0eWxlUmVmPiBwYXJhZ3JhcGhTdHls
ZSA9IGFkb3B0Q0YoQ1RQYXJhZ3JhcGhTdHlsZUNyZWF0ZShwYXJhZ3JhcGhTdHlsZVNldHRpbmdz
LCAxKSk7CisKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICp0ZXh0QXR0cmlidXRlcyA9IEB7CisgICAg
ICAgICAgICAoaWQpa0NURm9udEF0dHJpYnV0ZU5hbWU6IGZvbnQsCisgICAgICAgICAgICAoaWQp
a0NURm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZTogY29sb3IsCisgICAgICAgICAgICAoaWQp
a0NUUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lOiAoaWQpcGFyYWdyYXBoU3R5bGUuZ2V0KCkK
KyAgICAgICAgfTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICpmcmFtZUF0dHJpYnV0ZXMgPSBAewor
ICAgICAgICAgICAgKGlkKWtDVEZyYW1lTWF4aW11bU51bWJlck9mTGluZXNBdHRyaWJ1dGVOYW1l
OiBAKG1heGltdW1MaW5lcykKKyAgICAgICAgfTsKKworICAgICAgICBSZXRhaW5QdHI8TlNBdHRy
aWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkVGV4dCA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHQgYXR0cmlidXRlczp0ZXh0QXR0cmlidXRlc10p
OworICAgICAgICBSZXRhaW5QdHI8Q1RGcmFtZXNldHRlclJlZj4gdGV4dEZyYW1lc2V0dGVyID0g
YWRvcHRDRihDVEZyYW1lc2V0dGVyQ3JlYXRlV2l0aEF0dHJpYnV0ZWRTdHJpbmcoKENGQXR0cmli
dXRlZFN0cmluZ1JlZilhdHRyaWJ1dGVkVGV4dC5nZXQoKSkpOworCisgICAgICAgIENGUmFuZ2Ug
Zml0UmFuZ2U7CisgICAgICAgIENHU2l6ZSB0ZXh0U2l6ZSA9IENURnJhbWVzZXR0ZXJTdWdnZXN0
RnJhbWVTaXplV2l0aENvbnN0cmFpbnRzKHRleHRGcmFtZXNldHRlci5nZXQoKSwgQ0ZSYW5nZU1h
a2UoMCwgMCksIChDRkRpY3Rpb25hcnlSZWYpZnJhbWVBdHRyaWJ1dGVzLCBDR1NpemVNYWtlKG1h
eGltdW1BdmFpbGFibGVXaWR0aCwgQ0dGTE9BVF9NQVgpLCAmZml0UmFuZ2UpOworCisgICAgICAg
IFJldGFpblB0cjxDR1BhdGhSZWY+IHRleHRQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVXaXRo
UmVjdChDR1JlY3RNYWtlKDAsIDAsIHRleHRTaXplLndpZHRoLCB0ZXh0U2l6ZS5oZWlnaHQpLCBu
dWxscHRyKSk7CisgICAgICAgIFJldGFpblB0cjxDVEZyYW1lUmVmPiB0ZXh0RnJhbWUgPSBhZG9w
dENGKENURnJhbWVzZXR0ZXJDcmVhdGVGcmFtZSh0ZXh0RnJhbWVzZXR0ZXIuZ2V0KCksIGZpdFJh
bmdlLCB0ZXh0UGF0aC5nZXQoKSwgKENGRGljdGlvbmFyeVJlZilmcmFtZUF0dHJpYnV0ZXMpKTsK
KworICAgICAgICBDRkFycmF5UmVmIGN0TGluZXMgPSBDVEZyYW1lR2V0TGluZXModGV4dEZyYW1l
LmdldCgpKTsKKyAgICAgICAgQ0ZJbmRleCBsaW5lQ291bnQgPSBDRkFycmF5R2V0Q291bnQoY3RM
aW5lcyk7CisgICAgICAgIGlmICghbGluZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIFZlY3RvcjxDR1BvaW50PiBvcmlnaW5zKGxpbmVDb3VudCk7CisgICAgICAgIENHUmVj
dCBsaW5lQm91bmRzOworICAgICAgICBDR0Zsb2F0IGhlaWdodCA9IDA7CisgICAgICAgIENURnJh
bWVHZXRMaW5lT3JpZ2lucyh0ZXh0RnJhbWUuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIDApLCBvcmln
aW5zLmRhdGEoKSk7CisgICAgICAgIGZvciAoQ0ZJbmRleCBsaW5lSW5kZXggPSAwOyBsaW5lSW5k
ZXggPCBsaW5lQ291bnQ7ICsrbGluZUluZGV4KSB7CisgICAgICAgICAgICBDVExpbmVSZWYgbGlu
ZSA9IChDVExpbmVSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChjdExpbmVzLCBsaW5lSW5kZXgp
OworCisgICAgICAgICAgICBsaW5lQm91bmRzID0gQ1RMaW5lR2V0Qm91bmRzV2l0aE9wdGlvbnMo
bGluZSwgMCk7CisgICAgICAgICAgICBDR0Zsb2F0IHRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoID0g
Q1RMaW5lR2V0VHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgobGluZSk7CisgICAgICAgICAgICBDR0Zs
b2F0IGxpbmVXaWR0aElnbm9yaW5nVHJhaWxpbmdXaGl0ZXNwYWNlID0gbGluZUJvdW5kcy5zaXpl
LndpZHRoIC0gdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7CisgICAgICAgICAgICBtYXhpbXVtVXNl
ZFRleHRXaWR0aCA9IHN0ZDo6bWF4KG1heGltdW1Vc2VkVGV4dFdpZHRoLCBsaW5lV2lkdGhJZ25v
cmluZ1RyYWlsaW5nV2hpdGVzcGFjZSk7CisKKyAgICAgICAgICAgIGlmIChsaW5lSW5kZXgpCisg
ICAgICAgICAgICAgICAgaGVpZ2h0ICs9IG9yaWdpbnNbbGluZUluZGV4IC0gMV0ueSAtIG9yaWdp
bnNbbGluZUluZGV4XS55OworICAgICAgICB9CisKKyAgICAgICAgTGlua0ltYWdlTGF5b3V0OjpM
YWJlbCBsYWJlbDsKKyAgICAgICAgbGFiZWwuZnJhbWUgPSB0ZXh0RnJhbWU7CisgICAgICAgIGxh
YmVsLm9yaWdpbiA9IEZsb2F0UG9pbnQobGlua0ltYWdlUGFkZGluZywgY3VycmVudFkgKyBvcmln
aW5zWzBdLnkpOworICAgICAgICBsYWJlbHMuYXBwZW5kKGxhYmVsKTsKKworICAgICAgICBjdXJy
ZW50WSArPSBoZWlnaHQgKyBsaW5lQm91bmRzLnNpemUuaGVpZ2h0OworICAgIH07CisKKyAgICBp
ZiAodGl0bGUpCisgICAgICAgIGJ1aWxkTGluZXModGl0bGUsIHRpdGxlQ29sb3IsIHRpdGxlRm9u
dCwgbGlua0ltYWdlVGl0bGVNYXhpbXVtTGluZUNvdW50LCBrQ1RMaW5lQnJlYWtCeVRydW5jYXRp
bmdUYWlsKTsKKworICAgIGlmICh0aXRsZSAmJiBkb21haW4pCisgICAgICAgIGN1cnJlbnRZICs9
IGxpbmtJbWFnZURvbWFpbkJhc2VsaW5lVG9UaXRsZUJhc2VsaW5lIC0gKGRvbWFpbkZvbnQuYXNj
ZW5kZXIgLSBkb21haW5Gb250LmRlc2NlbmRlcik7CisKKyAgICBpZiAoZG9tYWluKQorICAgICAg
ICBidWlsZExpbmVzKGRvbWFpbiwgZG9tYWluQ29sb3IsIGRvbWFpbkZvbnQsIDEsIGtDVExpbmVC
cmVha0J5VHJ1bmNhdGluZ01pZGRsZSk7CisKKyAgICBjdXJyZW50WSArPSBsaW5rSW1hZ2VQYWRk
aW5nOworCisgICAgYm91bmRpbmdSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIG1heGltdW1Vc2VkVGV4
dFdpZHRoICsgbGlua0ltYWdlUGFkZGluZyAqIDIsIGN1cnJlbnRZKTsKKworICAgIC8vIFRvIHdv
cmsgYXJvdW5kIGJsdXJyeSBkcmFnIGltYWdlcyBvbiAxeCBkaXNwbGF5cywgbWFrZSB0aGUgd2lk
dGggYW5kIGhlaWdodCBhIG11bHRpcGxlIG9mIDIuCisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlz
IHdvcmthcm91bmQgd2hlbiA8cmRhcjovL3Byb2JsZW0vMzMwNTk3Mzk+IGlzIGZpeGVkLgorICAg
IGJvdW5kaW5nUmVjdC5zZXRXaWR0aCgoc3RhdGljX2Nhc3Q8aW50Pihib3VuZGluZ1JlY3Qud2lk
dGgoKSkgLyAyKSAqIDIpOworICAgIGJvdW5kaW5nUmVjdC5zZXRIZWlnaHQoKHN0YXRpY19jYXN0
PGludD4oYm91bmRpbmdSZWN0LmhlaWdodCgpIC8gMikgKiAyKSk7Cit9CisKK0RyYWdJbWFnZVJl
ZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEVsZW1lbnQmIGVsZW1lbnQsIFVSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHRpdGxlLCBUZXh0SW5kaWNhdG9yRGF0YSYsIEZvbnRSZW5kZXJpbmdNb2RlLCBm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKK3sKKyAgICBMaW5rSW1hZ2VMYXlvdXQgbGF5b3V0KHVy
bCwgdGl0bGUpOworCisgICAgTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZSBsb2NhbEFwcGVh
cmFuY2UoZWxlbWVudC5kb2N1bWVudCgpLnVzZURhcmtBcHBlYXJhbmNlKGVsZW1lbnQuY29tcHV0
ZWRTdHlsZSgpKSk7CisKKyAgICBhdXRvIGltYWdlU2l6ZSA9IGxheW91dC5ib3VuZGluZ1JlY3Qu
c2l6ZSgpOworICAgIFJldGFpblB0cjxOU0ltYWdlPiBkcmFnSW1hZ2UgPSBhZG9wdE5TKFtbTlNJ
bWFnZSBhbGxvY10gaW5pdFdpdGhTaXplOmltYWdlU2l6ZV0pOworICAgIFtkcmFnSW1hZ2UgX3dl
Yl9sb2NrRm9jdXNXaXRoRGV2aWNlU2NhbGVGYWN0b3I6ZGV2aWNlU2NhbGVGYWN0b3JdOworCisg
ICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICBHcmFwaGljc0NvbnRl
eHQgY29udGV4dCgoQ0dDb250ZXh0UmVmKVtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4
dF0uZ3JhcGhpY3NQb3J0KTsKKyAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQK
KworICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QobGF5b3V0LmJv
dW5kaW5nUmVjdCwgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkobGlua0ltYWdlQ29ybmVyUmFkaXVz
KSksIGNvbG9yRnJvbU5TQ29sb3IoW05TQ29sb3IgY29udHJvbEJhY2tncm91bmRDb2xvcl0pKTsK
KworICAgIGZvciAoY29uc3QgYXV0byYgbGFiZWwgOiBsYXlvdXQubGFiZWxzKSB7CisgICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIoY29udGV4dCk7CisgICAgICAgIGNvbnRl
eHQudHJhbnNsYXRlKGxhYmVsLm9yaWdpbi54KCksIGxheW91dC5ib3VuZGluZ1JlY3QuaGVpZ2h0
KCkgLSBsYWJlbC5vcmlnaW4ueSgpIC0gbGlua0ltYWdlUGFkZGluZyk7CisgICAgICAgIENURnJh
bWVEcmF3KGxhYmVsLmZyYW1lLmdldCgpLCBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKTsKKyAg
ICB9CisKKyAgICBbZHJhZ0ltYWdlIHVubG9ja0ZvY3VzXTsKKworICAgIHJldHVybiBkcmFnSW1h
Z2U7Cit9CisKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0LCBQYXRoJikKK3sKKyAgICBhdXRvIGRy
YWdJbWFnZSA9IGFkb3B0TlMoW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNpemU6TlNNYWtlU2l6
ZShDb2xvclN3YXRjaFdpZHRoLCBDb2xvclN3YXRjaFdpZHRoKV0pOworCisgICAgW2RyYWdJbWFn
ZSBsb2NrRm9jdXNdOworCisgICAgTlNCZXppZXJQYXRoICpwYXRoID0gW05TQmV6aWVyUGF0aCBi
ZXppZXJQYXRoV2l0aFJvdW5kZWRSZWN0Ok5TTWFrZVJlY3QoMCwgMCwgQ29sb3JTd2F0Y2hXaWR0
aCwgQ29sb3JTd2F0Y2hXaWR0aCkgeFJhZGl1czpDb2xvclN3YXRjaENvcm5lclJhZGl1cyB5UmFk
aXVzOkNvbG9yU3dhdGNoQ29ybmVyUmFkaXVzXTsKKyAgICBbcGF0aCBzZXRMaW5lV2lkdGg6Q29s
b3JTd2F0Y2hTdHJva2VTaXplXTsKKworICAgIFtuc0NvbG9yKGNvbG9yKSBzZXRGaWxsXTsKKyAg
ICBbcGF0aCBmaWxsXTsKKworICAgIFtbTlNDb2xvciBxdWF0ZXJuYXJ5TGFiZWxDb2xvcl0gc2V0
U3Ryb2tlXTsKKyAgICBbcGF0aCBzdHJva2VdOworCisgICAgW2RyYWdJbWFnZSB1bmxvY2tGb2N1
c107CisKKyAgICByZXR1cm4gZHJhZ0ltYWdlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiBQTEFURk9STShNQUMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVU2hh
ZGVyTW9kdWxlTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
Y29jb2EvR1BVU2hhZGVyTW9kdWxlTWV0YWwubW0KaW5kZXggNGFkYTcxZjJkOGFlMWQ3ZjlmZmJk
MTc3ZjFkZGQzMzc5ODNhY2Y0Yi4uYjgyZjMyMzRhZmE2YzdlODUxOTA2MmM2YThlMGEwZGZmNzc2
YWYyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Nv
Y29hL0dQVVNoYWRlck1vZHVsZU1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVTaGFkZXJNb2R1bGVNZXRhbC5tbQpAQCAtMjksNiArMjks
NyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbXBvcnQgIkdQVURldmljZS5oIgorI2ltcG9y
dCAiR1BVRXJyb3JTY29wZXMuaCIKICNpbXBvcnQgIkdQVVNoYWRlck1vZHVsZURlc2NyaXB0b3Iu
aCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Ry
YWdEYXRhTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTNiMDNiMWEyZDg0
MGY4OGM5NWMyODVjYmJjNjZkZjkxNWI0OTRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnRGF0YU1h
Yy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDM0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IkRyYWdEYXRhLmgiCi0KLSNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotI2ltcG9ydCAiTGVnYWN5
TlNQYXN0ZWJvYXJkVHlwZXMuaCIKLSNpbXBvcnQgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbXBv
cnQgIk5vdEltcGxlbWVudGVkLmgiCi0jaW1wb3J0ICJQYXN0ZWJvYXJkLmgiCi0jaW1wb3J0ICJQ
YXN0ZWJvYXJkU3RyYXRlZ3kuaCIKLSNpbXBvcnQgIlBsYXRmb3JtUGFzdGVib2FyZC5oIgotI2lt
cG9ydCAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCi0jaW1wb3J0ICJSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgiCi0jaW1wb3J0ICJXZWJDb3JlTlNVUkxFeHRyYXMuaCIKLSNpbXBvcnQgPHd0Zi9jb2Nv
YS9OU1VSTEV4dHJhcy5oPgotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpbXBvcnQgPE1v
YmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2VydmljZXMuaD4KLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHJ0ZlBhc3RlYm9hcmRUeXBlKCkK
LXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHJldHVybiBTdHJpbmcoa1VUVHlwZVJU
Rik7Ci0jZWxzZQotICAgIHJldHVybiBTdHJpbmcobGVnYWN5UlRGUGFzdGVib2FyZFR5cGUoKSk7
Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgcnRmZFBhc3RlYm9hcmRUeXBlKCkK
LXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHJldHVybiBTdHJpbmcoa1VUVHlwZUZs
YXRSVEZEKTsKLSNlbHNlCi0gICAgcmV0dXJuIFN0cmluZyhsZWdhY3lSVEZEUGFzdGVib2FyZFR5
cGUoKSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nUGFzdGVib2Fy
ZFR5cGUoKQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgcmV0dXJuIFN0cmluZyhr
VVRUeXBlVGV4dCk7Ci0jZWxzZQotICAgIHJldHVybiBTdHJpbmcobGVnYWN5U3RyaW5nUGFzdGVi
b2FyZFR5cGUoKSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgdXJsUGFzdGVi
b2FyZFR5cGUoKQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgcmV0dXJuIFN0cmlu
ZyhrVVRUeXBlVVJMKTsKLSNlbHNlCi0gICAgcmV0dXJuIFN0cmluZyhsZWdhY3lVUkxQYXN0ZWJv
YXJkVHlwZSgpKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyBodG1sUGFzdGVi
b2FyZFR5cGUoKQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgcmV0dXJuIFN0cmlu
ZyhrVVRUeXBlSFRNTCk7Ci0jZWxzZQotICAgIHJldHVybiBTdHJpbmcobGVnYWN5SFRNTFBhc3Rl
Ym9hcmRUeXBlKCkpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIGNvbG9yUGFz
dGVib2FyZFR5cGUoKQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgcmV0dXJuIFN0
cmluZyB7IFVJQ29sb3JQYm9hcmRUeXBlIH07Ci0jZWxzZQotICAgIHJldHVybiBTdHJpbmcobGVn
YWN5Q29sb3JQYXN0ZWJvYXJkVHlwZSgpKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIFN0
cmluZyBwZGZQYXN0ZWJvYXJkVHlwZSgpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICByZXR1cm4gU3RyaW5nKGtVVFR5cGVQREYpOwotI2Vsc2UKLSAgICByZXR1cm4gU3RyaW5nKGxl
Z2FjeVBERlBhc3RlYm9hcmRUeXBlKCkpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgU3Ry
aW5nIHRpZmZQYXN0ZWJvYXJkVHlwZSgpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICByZXR1cm4gU3RyaW5nKGtVVFR5cGVUSUZGKTsKLSNlbHNlCi0gICAgcmV0dXJuIFN0cmluZyhs
ZWdhY3lUSUZGUGFzdGVib2FyZFR5cGUoKSk7Ci0jZW5kaWYKLX0KLQotRHJhZ0RhdGE6OkRyYWdE
YXRhKERyYWdEYXRhUmVmIGRhdGEsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29u
c3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlv
bk1hc2ssIERyYWdBcHBsaWNhdGlvbkZsYWdzIGZsYWdzLCBEcmFnRGVzdGluYXRpb25BY3Rpb24g
ZGVzdGluYXRpb25BY3Rpb24pCi0gICAgOiBtX2NsaWVudFBvc2l0aW9uKGNsaWVudFBvc2l0aW9u
KQotICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3NpdGlvbikKLSAgICAsIG1fcGxhdGZv
cm1EcmFnRGF0YShkYXRhKQotICAgICwgbV9kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soc291
cmNlT3BlcmF0aW9uTWFzaykKLSAgICAsIG1fYXBwbGljYXRpb25GbGFncyhmbGFncykKLSAgICAs
IG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKGRlc3RpbmF0aW9uQWN0aW9uKQotI2lmIFBMQVRGT1JN
KE1BQykKLSAgICAsIG1fcGFzdGVib2FyZE5hbWUoW1ttX3BsYXRmb3JtRHJhZ0RhdGEgZHJhZ2dp
bmdQYXN0ZWJvYXJkXSBuYW1lXSkKLSNlbHNlCi0gICAgLCBtX3Bhc3RlYm9hcmROYW1lKCJkYXRh
IGludGVyYWN0aW9uIHBhc3RlYm9hcmQiKQotI2VuZGlmCi17Ci19Ci0KLURyYWdEYXRhOjpEcmFn
RGF0YShjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSwgY29uc3QgSW50UG9pbnQmIGNsaWVu
dFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIERyYWdPcGVyYXRpb24g
c291cmNlT3BlcmF0aW9uTWFzaywgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgZmxhZ3MsIERyYWdEZXN0
aW5hdGlvbkFjdGlvbiBkZXN0aW5hdGlvbkFjdGlvbikKLSAgICA6IG1fY2xpZW50UG9zaXRpb24o
Y2xpZW50UG9zaXRpb24pCi0gICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQot
ICAgICwgbV9wbGF0Zm9ybURyYWdEYXRhKDApCi0gICAgLCBtX2RyYWdnaW5nU291cmNlT3BlcmF0
aW9uTWFzayhzb3VyY2VPcGVyYXRpb25NYXNrKQotICAgICwgbV9hcHBsaWNhdGlvbkZsYWdzKGZs
YWdzKQotICAgICwgbV9kcmFnRGVzdGluYXRpb25BY3Rpb24oZGVzdGluYXRpb25BY3Rpb24pCi0g
ICAgLCBtX3Bhc3RlYm9hcmROYW1lKGRyYWdTdG9yYWdlTmFtZSkKLXsKLX0KLQotYm9vbCBEcmFn
RGF0YTo6Y29udGFpbnNVUkxUeXBlSWRlbnRpZmllcigpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPFN0
cmluZz4gdHlwZXM7Ci0gICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVn
eSgpLT5nZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7Ci0gICAgcmV0dXJuIHR5cGVz
LmNvbnRhaW5zKHVybFBhc3RlYm9hcmRUeXBlKCkpOwotfQotICAgIAotYm9vbCBEcmFnRGF0YTo6
Y2FuU21hcnRSZXBsYWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUGFzdGVib2FyZChtX3Bhc3Rl
Ym9hcmROYW1lKS5jYW5TbWFydFJlcGxhY2UoKTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFp
bnNDb2xvcigpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0gICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBlcyh0eXBlcywgbV9w
YXN0ZWJvYXJkTmFtZSk7Ci0gICAgcmV0dXJuIHR5cGVzLmNvbnRhaW5zKGNvbG9yUGFzdGVib2Fy
ZFR5cGUoKSk7Ci19Ci0KLWJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25zdAotewot
ICAgIHJldHVybiBudW1iZXJPZkZpbGVzKCk7Ci19Ci0KLXVuc2lnbmVkIERyYWdEYXRhOjpudW1i
ZXJPZkZpbGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBh
c3RlYm9hcmRTdHJhdGVneSgpLT5nZXROdW1iZXJPZkZpbGVzKG1fcGFzdGVib2FyZE5hbWUpOwot
fQotCi1WZWN0b3I8U3RyaW5nPiBEcmFnRGF0YTo6YXNGaWxlbmFtZXMoKSBjb25zdAotewotI2lm
IFBMQVRGT1JNKE1BQykKLSAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5cGVzLCBtX3Bhc3Rl
Ym9hcmROYW1lKTsKLSAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKGxlZ2FjeUZpbGVzUHJv
bWlzZVBhc3RlYm9hcmRUeXBlKCkpKSkKLSAgICAgICAgcmV0dXJuIGZpbGVOYW1lcygpOwotCi0g
ICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0czsKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPmdldFBhdGhuYW1lc0ZvclR5cGUocmVzdWx0cywgU3RyaW5nKGxl
Z2FjeUZpbGVuYW1lc1Bhc3RlYm9hcmRUeXBlKCkpLCBtX3Bhc3RlYm9hcmROYW1lKTsKLSAgICBy
ZXR1cm4gcmVzdWx0czsKLSNlbHNlCi0gICAgcmV0dXJuIGZpbGVOYW1lcygpOwotI2VuZGlmCi19
Ci0KLWJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KCkgY29uc3QKLXsKLSAgICBWZWN0
b3I8U3RyaW5nPiB0eXBlczsKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0
cmF0ZWd5KCktPmdldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKLQotICAgIHJldHVy
biB0eXBlcy5jb250YWlucyhzdHJpbmdQYXN0ZWJvYXJkVHlwZSgpKQotICAgICAgICB8fCB0eXBl
cy5jb250YWlucyhydGZkUGFzdGVib2FyZFR5cGUoKSkKLSAgICAgICAgfHwgdHlwZXMuY29udGFp
bnMocnRmUGFzdGVib2FyZFR5cGUoKSkKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIHx8IHR5
cGVzLmNvbnRhaW5zKFN0cmluZyhsZWdhY3lGaWxlbmFtZXNQYXN0ZWJvYXJkVHlwZSgpKSkKLSNl
bmRpZgotICAgICAgICB8fCBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5
KCktPnN0cmluZ0ZvclR5cGUodXJsUGFzdGVib2FyZFR5cGUoKSwgbV9wYXN0ZWJvYXJkTmFtZSku
bGVuZ3RoKCk7Ci19Ci0KLVN0cmluZyBEcmFnRGF0YTo6YXNQbGFpblRleHQoKSBjb25zdAotewot
ICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChtX3Bhc3RlYm9hcmROYW1lKTsKLSAgICBQYXN0ZWJv
YXJkUGxhaW5UZXh0IHRleHQ7Ci0gICAgcGFzdGVib2FyZC5yZWFkKHRleHQpOwotICAgIFN0cmlu
ZyBzdHJpbmcgPSB0ZXh0LnRleHQ7Ci0KLSAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgdGhp
cyBpcyAxMDAlIGNvcnJlY3Qgc2luY2Ugd2Uga25vdyAtW05TVVJMIFVSTFdpdGhTdHJpbmc6XSBk
b2VzIG5vdCBoYW5kbGUKLSAgICAvLyBhbGwgdGhlIHNhbWUgY2FzZXMgd2UgaGFuZGxlIHdlbGwg
aW4gdGhlIFVSTCBjb2RlIGZvciBjcmVhdGluZyBhbiBOU1VSTC4KLSAgICBpZiAodGV4dC5pc1VS
TCkKLSAgICAgICAgcmV0dXJuIFdURjo6dXNlclZpc2libGVTdHJpbmcoW05TVVJMIFVSTFdpdGhT
dHJpbmc6c3RyaW5nXSk7Ci0KLSAgICAvLyBGSVhNRTogV1RGIHNob3VsZCBvZmZlciBhIG5vbi1N
YWMtc3BlY2lmaWMgd2F5IHRvIGNvbnZlcnQgc3RyaW5nIHRvIHByZWNvbXBvc2VkIGZvcm0gc28g
d2UgY2FuIGRvIGl0IGZvciBhbGwgcGxhdGZvcm1zLgotICAgIHJldHVybiBbKE5TU3RyaW5nICop
c3RyaW5nIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOwotfQotCi1Db2xv
ciBEcmFnRGF0YTo6YXNDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRl
Z2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y29sb3IobV9wYXN0ZWJvYXJkTmFtZSk7Ci19
Ci0KLWJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoRHJhZ2dpbmdQdXJw
b3NlIHB1cnBvc2UpIGNvbnN0Ci17Ci0gICAgaWYgKHB1cnBvc2UgPT0gRHJhZ2dpbmdQdXJwb3Nl
OjpGb3JGaWxlVXBsb2FkKQotICAgICAgICByZXR1cm4gY29udGFpbnNGaWxlcygpOwotCi0gICAg
aWYgKHB1cnBvc2UgPT0gRHJhZ2dpbmdQdXJwb3NlOjpGb3JDb2xvckNvbnRyb2wpCi0gICAgICAg
IHJldHVybiBjb250YWluc0NvbG9yKCk7Ci0KLSAgICBpZiAocHVycG9zZSA9PSBEcmFnZ2luZ1B1
cnBvc2U6OkZvckVkaXRpbmcgJiYgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS5hdHRhY2htZW50RWxlbWVudEVuYWJsZWQoKSAmJiBjb250YWluc0ZpbGVzKCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0gICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBlcyh0eXBlcywgbV9w
YXN0ZWJvYXJkTmFtZSk7Ci0gICAgcmV0dXJuIHR5cGVzLmNvbnRhaW5zKFN0cmluZyhXZWJBcmNo
aXZlUGJvYXJkVHlwZSkpCi0gICAgICAgIHx8IHR5cGVzLmNvbnRhaW5zKGh0bWxQYXN0ZWJvYXJk
VHlwZSgpKQotICAgICAgICB8fCB0eXBlcy5jb250YWlucyhTdHJpbmcoa1VUVHlwZVdlYkFyY2hp
dmUpKQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgfHwgdHlwZXMuY29udGFpbnMoU3RyaW5n
KGxlZ2FjeUZpbGVuYW1lc1Bhc3RlYm9hcmRUeXBlKCkpKQotICAgICAgICB8fCB0eXBlcy5jb250
YWlucyhTdHJpbmcobGVnYWN5RmlsZXNQcm9taXNlUGFzdGVib2FyZFR5cGUoKSkpCi0jZW5kaWYK
LSAgICAgICAgfHwgdHlwZXMuY29udGFpbnModGlmZlBhc3RlYm9hcmRUeXBlKCkpCi0gICAgICAg
IHx8IHR5cGVzLmNvbnRhaW5zKHBkZlBhc3RlYm9hcmRUeXBlKCkpCi0gICAgICAgIHx8IHR5cGVz
LmNvbnRhaW5zKHVybFBhc3RlYm9hcmRUeXBlKCkpCi0gICAgICAgIHx8IHR5cGVzLmNvbnRhaW5z
KHJ0ZmRQYXN0ZWJvYXJkVHlwZSgpKQotICAgICAgICB8fCB0eXBlcy5jb250YWlucyhydGZQYXN0
ZWJvYXJkVHlwZSgpKQotICAgICAgICB8fCB0eXBlcy5jb250YWlucyhTdHJpbmcoa1VUVHlwZVVU
RjhQbGFpblRleHQpKQotICAgICAgICB8fCB0eXBlcy5jb250YWlucyhzdHJpbmdQYXN0ZWJvYXJk
VHlwZSgpKQotICAgICAgICB8fCB0eXBlcy5jb250YWlucyhjb2xvclBhc3RlYm9hcmRUeXBlKCkp
Ci0gICAgICAgIHx8IHR5cGVzLmNvbnRhaW5zKFN0cmluZyhrVVRUeXBlSlBFRykpCi0gICAgICAg
IHx8IHR5cGVzLmNvbnRhaW5zKFN0cmluZyhrVVRUeXBlUE5HKSk7Ci19Ci0KLWJvb2wgRHJhZ0Rh
dGE6OmNvbnRhaW5zUHJvbWlzZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGxlZ2FjeUZpbGVz
UHJvbWlzZVBhc3RlYm9hcmRUeXBlKCkgY29udGFpbnMgVVRJcywgbm90IHBhdGggbmFtZXMuIEFs
c28sIHdoeSBkbyB3ZQotICAgIC8vIHRoaW5rIHByb21pc2VzIHNob3VsZCBvbmx5IGNvbnRhaW4g
b25lIGZpbGUgKG9yIFVUSSk/Ci0gICAgVmVjdG9yPFN0cmluZz4gZmlsZXM7Ci0jaWYgUExBVEZP
Uk0oTUFDKQotICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+
Z2V0UGF0aG5hbWVzRm9yVHlwZShmaWxlcywgU3RyaW5nKGxlZ2FjeUZpbGVzUHJvbWlzZVBhc3Rl
Ym9hcmRUeXBlKCkpLCBtX3Bhc3RlYm9hcmROYW1lKTsKLSNlbmRpZgotICAgIHJldHVybiBmaWxl
cy5zaXplKCkgPT0gMTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNVUkwoRmlsZW5hbWVD
b252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5KSBjb25zdAotewotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgVU5VU0VEX1BBUkFNKGZpbGVuYW1lUG9saWN5KTsKLSAgICBWZWN0b3I8
U3RyaW5nPiB0eXBlczsKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0
ZWd5KCktPmdldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKLSAgICBpZiAoIXR5cGVz
LmNvbnRhaW5zKHVybFBhc3RlYm9hcmRUeXBlKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBhdXRvIHVybFN0cmluZyA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3Ry
YXRlZ3koKS0+c3RyaW5nRm9yVHlwZSh1cmxQYXN0ZWJvYXJkVHlwZSgpLCBtX3Bhc3RlYm9hcmRO
YW1lKTsKLSAgICBpZiAodXJsU3RyaW5nLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBPbiBpT1Ms
IHdlIGRvbid0IGdldCBhY2Nlc3MgdG8gdGhlIGNvbnRlbnRzIG9mIE5TSXRlbVByb3ZpZGVycyB1
bnRpbCB3ZSBwZXJmb3JtIHRoZSBkcmFnIG9wZXJhdGlvbi4KLSAgICAgICAgLy8gVGh1cywgd2Ug
Y29uc2lkZXIgRHJhZ0RhdGEgdG8gY29udGFpbiBhbiBVUkwgaWYgaXQgY29udGFpbnMgdGhlIGBw
dWJsaWMudXJsYCBVVEkgdHlwZS4gTGF0ZXIgZG93biB0aGUKLSAgICAgICAgLy8gcm9hZCwgd2hl
biB3ZSBwZXJmb3JtIHRoZSBkcmFnIG9wZXJhdGlvbiwgd2UgY2FuIHRoZW4gY2hlY2sgaWYgdGhl
IFVSTCdzIHByb3RvY29sIGlzIGh0dHAgb3IgaHR0cHMsCi0gICAgICAgIC8vIGFuZCBpZiBpdCBp
c24ndCwgd2UgYmFpbCBvdXQgb2YgcGFnZSBuYXZpZ2F0aW9uLgotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBVUkwgd2ViY29yZVVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOnVy
bFN0cmluZ107Ci0gICAgcmV0dXJuIHdlYmNvcmVVUkwucHJvdG9jb2xJcygiaHR0cCIpIHx8IHdl
YmNvcmVVUkwucHJvdG9jb2xJcygiaHR0cHMiKTsKLSNlbHNlCi0gICAgcmV0dXJuICFhc1VSTChm
aWxlbmFtZVBvbGljeSkuaXNFbXB0eSgpOwotI2VuZGlmCi19Ci0KLVN0cmluZyBEcmFnRGF0YTo6
YXNVUkwoRmlsZW5hbWVDb252ZXJzaW9uUG9saWN5LCBTdHJpbmcqIHRpdGxlKSBjb25zdAotewot
ICAgIC8vIEZJWE1FOiBVc2UgZmlsZW5hbWVQb2xpY3kuCi0KLSAgICBpZiAodGl0bGUpIHsKLSNp
ZiBQTEFURk9STShNQUMpCi0gICAgICAgIFN0cmluZyBVUkxUaXRsZVN0cmluZyA9IHBsYXRmb3Jt
U3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c3RyaW5nRm9yVHlwZShTdHJpbmco
V2ViVVJMTmFtZVBib2FyZFR5cGUpLCBtX3Bhc3RlYm9hcmROYW1lKTsKLSAgICAgICAgaWYgKCFV
UkxUaXRsZVN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAqdGl0bGUgPSBVUkxUaXRsZVN0
cmluZzsKLSNlbmRpZgotICAgIH0KLSAgICAKLSAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAg
ICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5
cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKLQotICAgIGlmICh0eXBlcy5jb250YWlucyh1cmxQYXN0
ZWJvYXJkVHlwZSgpKSkgewotICAgICAgICBOU1VSTCAqVVJMRnJvbVBhc3RlYm9hcmQgPSBbTlNV
UkwgVVJMV2l0aFN0cmluZzpwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5
KCktPnN0cmluZ0ZvclR5cGUodXJsUGFzdGVib2FyZFR5cGUoKSwgbV9wYXN0ZWJvYXJkTmFtZSld
OwotICAgICAgICBOU1N0cmluZyAqc2NoZW1lID0gW1VSTEZyb21QYXN0ZWJvYXJkIHNjaGVtZV07
Ci0gICAgICAgIC8vIENhbm5vdCBkcm9wIG90aGVyIHNjaGVtZXMgdW5sZXNzIDxyZGFyOi8vcHJv
YmxlbS8xMDU2MjY2Mj4gYW5kIDxyZGFyOi8vcHJvYmxlbS8xMTE4NzMxNT4gYXJlIGZpeGVkLgot
ICAgICAgICBpZiAoW3NjaGVtZSBpc0VxdWFsVG9TdHJpbmc6QCJodHRwIl0gfHwgW3NjaGVtZSBp
c0VxdWFsVG9TdHJpbmc6QCJodHRwcyJdKQotICAgICAgICAgICAgcmV0dXJuIFtVUkxCeUNhbm9u
aWNhbGl6aW5nVVJMKFVSTEZyb21QYXN0ZWJvYXJkKSBhYnNvbHV0ZVN0cmluZ107Ci0gICAgfQot
ICAgIAotICAgIGlmICh0eXBlcy5jb250YWlucyhzdHJpbmdQYXN0ZWJvYXJkVHlwZSgpKSkgewot
ICAgICAgICBOU1VSTCAqVVJMRnJvbVBhc3RlYm9hcmQgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnN0cmluZ0ZvclR5cGUo
c3RyaW5nUGFzdGVib2FyZFR5cGUoKSwgbV9wYXN0ZWJvYXJkTmFtZSldOwotICAgICAgICBOU1N0
cmluZyAqc2NoZW1lID0gW1VSTEZyb21QYXN0ZWJvYXJkIHNjaGVtZV07Ci0gICAgICAgIC8vIFBh
c3RlYm9hcmQgY29udGVudCBpcyBub3QgdHJ1c3RlZCwgYmVjYXVzZSBKYXZhU2NyaXB0IGNvZGUg
Y2FuIG1vZGlmeSBpdC4gV2UgY2FuIHNhbml0aXplIGl0IGZvciBVUkxzIGFuZCBvdGhlciB0eXBl
ZCBjb250ZW50LCBidXQgbm90IGZvciBzdHJpbmdzLgotICAgICAgICAvLyBUaGUgcmVzdWx0IG9m
IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBpbml0aWF0ZSBuYXZpZ2F0aW9uLCBzbyB3ZSBzaG91
bGRuJ3QgYWxsb3cgYXJiaXRyYXJ5IGZpbGUgVVJMcy4KLSAgICAgICAgLy8gRklYTUU6IFNob3Vs
ZCB3ZSBhbGxvdyBvbmx5IGh0dHAgZmFtaWx5IHNjaGVtZXMsIG9yIGFueXRoaW5nIG5vbi1sb2Nh
bD8KLSAgICAgICAgaWYgKFtzY2hlbWUgaXNFcXVhbFRvU3RyaW5nOkAiaHR0cCJdIHx8IFtzY2hl
bWUgaXNFcXVhbFRvU3RyaW5nOkAiaHR0cHMiXSkKLSAgICAgICAgICAgIHJldHVybiBbVVJMQnlD
YW5vbmljYWxpemluZ1VSTChVUkxGcm9tUGFzdGVib2FyZCkgYWJzb2x1dGVTdHJpbmddOwotICAg
IH0KLSAgICAKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmlu
ZyhsZWdhY3lGaWxlbmFtZXNQYXN0ZWJvYXJkVHlwZSgpKSkpIHsKLSAgICAgICAgVmVjdG9yPFN0
cmluZz4gZmlsZXM7Ci0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3Ry
YXRlZ3koKS0+Z2V0UGF0aG5hbWVzRm9yVHlwZShmaWxlcywgU3RyaW5nKGxlZ2FjeUZpbGVuYW1l
c1Bhc3RlYm9hcmRUeXBlKCkpLCBtX3Bhc3RlYm9hcmROYW1lKTsKLSAgICAgICAgaWYgKGZpbGVz
LnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICBCT09MIGlzRGlyZWN0b3J5OwotICAgICAgICAg
ICAgaWYgKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpm
aWxlc1swXSBpc0RpcmVjdG9yeTomaXNEaXJlY3RvcnldICYmIGlzRGlyZWN0b3J5KQotICAgICAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAgICAgICAgIHJldHVybiBbVVJMQnlDYW5v
bmljYWxpemluZ1VSTChbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOmZpbGVzWzBdXSkgYWJzb2x1dGVT
dHJpbmddOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmlu
ZyhsZWdhY3lGaWxlc1Byb21pc2VQYXN0ZWJvYXJkVHlwZSgpKSkgJiYgZmlsZU5hbWVzKCkuc2l6
ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBbVVJMQnlDYW5vbmljYWxpemluZ1VSTChbTlNVUkwg
ZmlsZVVSTFdpdGhQYXRoOmZpbGVOYW1lcygpWzBdXSkgYWJzb2x1dGVTdHJpbmddOwotI2VuZGlm
Ci0KLSAgICByZXR1cm4gU3RyaW5nKCk7ICAgICAgICAKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMzYzZTJlNDc4MjUyMDE2MDNkNTU0ZWRhZTNjNjE5MjM1MzM0ZTUyLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9EcmFnSW1hZ2VNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSwzNDAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkRyYWdJbWFnZS5oIgotCi0jaWYgRU5BQkxFKERS
QUdfU1VQUE9SVCkgJiYgUExBVEZPUk0oTUFDKQotCi0jaW1wb3J0ICJCaXRtYXBJbWFnZS5oIgot
I2ltcG9ydCAiQ29sb3JNYWMuaCIKLSNpbXBvcnQgIkVsZW1lbnQuaCIKLSNpbXBvcnQgIkZsb2F0
Um91bmRlZFJlY3QuaCIKLSNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCi0jaW1wb3J0ICJGb250RGVz
Y3JpcHRpb24uaCIKLSNpbXBvcnQgIkZvbnRTZWxlY3Rvci5oIgotI2ltcG9ydCAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW1wb3J0ICJJbWFnZS5oIgotI2ltcG9ydCAiTG9jYWxEZWZhdWx0U3lzdGVt
QXBwZWFyYW5jZS5oIgotI2ltcG9ydCAiUGFnZS5oIgotI2ltcG9ydCAiU3RyaW5nVHJ1bmNhdG9y
LmgiCi0jaW1wb3J0ICJUZXh0SW5kaWNhdG9yLmgiCi0jaW1wb3J0ICJXZWJLaXROU0ltYWdlRXh0
cmFzLmgiCi0jaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2ltcG9ydCA8
cGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9VUkxG
b3JtYXR0aW5nU1BJLmg+Ci0jaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KLSNpbXBvcnQgPHd0
Zi9VUkwuaD4KLQotI2lmICFIQVZFKFVSTF9GT1JNQVRUSU5HKQotU09GVF9MSU5LX1BSSVZBVEVf
RlJBTUVXT1JLX09QVElPTkFMKExpbmtQcmVzZW50YXRpb24pCi0jZW5kaWYKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1JbnRTaXplIGRyYWdJbWFnZVNpemUoUmV0YWluUHRyPE5TSW1hZ2U+IGlt
YWdlKQotewotICAgIHJldHVybiAoSW50U2l6ZSlbaW1hZ2Ugc2l6ZV07Ci19Ci0KLXZvaWQgZGVs
ZXRlRHJhZ0ltYWdlKFJldGFpblB0cjxOU0ltYWdlPikKLXsKLSAgICAvLyBTaW5jZSB0aGlzIGlz
IGEgUmV0YWluUHRyLCB0aGVyZSdzIG5vdGhpbmcgYWRkaXRpb25hbCB3ZSBuZWVkIHRvIGRvIHRv
Ci0gICAgLy8gZGVsZXRlIGl0LiBJdCB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gaXQgZmFsbHMgb3V0
IG9mIHNjb3BlLgotfQotCi1SZXRhaW5QdHI8TlNJbWFnZT4gc2NhbGVEcmFnSW1hZ2UoUmV0YWlu
UHRyPE5TSW1hZ2U+IGltYWdlLCBGbG9hdFNpemUgc2NhbGUpCi17Ci0gICAgTlNTaXplIG9yaWdp
bmFsU2l6ZSA9IFtpbWFnZSBzaXplXTsKLSAgICBOU1NpemUgbmV3U2l6ZSA9IE5TTWFrZVNpemUo
KG9yaWdpbmFsU2l6ZS53aWR0aCAqIHNjYWxlLndpZHRoKCkpLCAob3JpZ2luYWxTaXplLmhlaWdo
dCAqIHNjYWxlLmhlaWdodCgpKSk7Ci0gICAgbmV3U2l6ZS53aWR0aCA9IHJvdW5kZihuZXdTaXpl
LndpZHRoKTsKLSAgICBuZXdTaXplLmhlaWdodCA9IHJvdW5kZihuZXdTaXplLmhlaWdodCk7Ci0g
ICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBbaW1hZ2Ugc2V0U2Nh
bGVzV2hlblJlc2l6ZWQ6WUVTXTsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19F
TkQKLSAgICBbaW1hZ2Ugc2V0U2l6ZTpuZXdTaXplXTsKLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0g
ICAgCi1SZXRhaW5QdHI8TlNJbWFnZT4gZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKFJldGFp
blB0cjxOU0ltYWdlPiBpbWFnZSwgZmxvYXQgZGVsdGEpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFJldGFpblB0cjxOU0ltYWdlPiBkaXNzb2x2ZWRJbWFn
ZSA9IGFkb3B0TlMoW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNpemU6W2ltYWdlIHNpemVdXSk7
Ci0gICAgCi0gICAgW2Rpc3NvbHZlZEltYWdlIGxvY2tGb2N1c107Ci0gICAgW2ltYWdlIGRyYXdB
dFBvaW50Ok5TWmVyb1BvaW50IGZyb21SZWN0Ok5TTWFrZVJlY3QoMCwgMCwgW2ltYWdlIHNpemVd
LndpZHRoLCBbaW1hZ2Ugc2l6ZV0uaGVpZ2h0KSBvcGVyYXRpb246TlNDb21wb3NpdGluZ09wZXJh
dGlvbkNvcHkgZnJhY3Rpb246ZGVsdGFdOwotICAgIFtkaXNzb2x2ZWRJbWFnZSB1bmxvY2tGb2N1
c107Ci0KLSAgICByZXR1cm4gZGlzc29sdmVkSW1hZ2U7Ci19Ci0gICAgICAgIAotUmV0YWluUHRy
PE5TSW1hZ2U+IGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSogaW1hZ2UsIEltYWdlT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgaWYgKGlzPEJpdG1hcEltYWdlPigqaW1hZ2Up
KSB7Ci0gICAgICAgIEJpdG1hcEltYWdlJiBiaXRtYXBJbWFnZSA9IGRvd25jYXN0PEJpdG1hcElt
YWdlPigqaW1hZ2UpOwotCi0gICAgICAgIGlmIChvcmllbnRhdGlvbiA9PSBJbWFnZU9yaWVudGF0
aW9uOjpGcm9tSW1hZ2UpCi0gICAgICAgICAgICBvcmllbnRhdGlvbiA9IGJpdG1hcEltYWdlLm9y
aWVudGF0aW9uRm9yQ3VycmVudEZyYW1lKCk7Ci0KLSAgICAgICAgaWYgKG9yaWVudGF0aW9uICE9
IEltYWdlT3JpZW50YXRpb246Ok5vbmUpIHsKLSAgICAgICAgICAgIC8vIENvbnN0cnVjdCBhIGNv
cnJlY3RseS1yb3RhdGVkIGNvcHkgb2YgdGhlIGltYWdlIHRvIHVzZSBhcyB0aGUgZHJhZyBpbWFn
ZS4KLSAgICAgICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBpbWFnZS0+c2l6ZShvcmllbnRh
dGlvbik7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNJbWFnZT4gcm90YXRlZERyYWdJbWFnZSA9
IGFkb3B0TlMoW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNpemU6KE5TU2l6ZSkoaW1hZ2VTaXpl
KV0pOwotICAgICAgICAgICAgW3JvdGF0ZWREcmFnSW1hZ2UgbG9ja0ZvY3VzXTsKLQotICAgICAg
ICAgICAgLy8gSW1hZ2VPcmllbnRhdGlvbiB1c2VzIHRvcC1sZWZ0IGNvb3JkaW5hdGVzLCBuZWVk
IHRvIGZsaXAgdG8gYm90dG9tLWxlZnQsIGFwcGx5Li4uCi0gICAgICAgICAgICBDR0FmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VUcmFuc2xhdGlvbigwLCBp
bWFnZVNpemUuaGVpZ2h0KCkpOwotICAgICAgICAgICAgdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFu
c2Zvcm1TY2FsZSh0cmFuc2Zvcm0sIDEsIC0xKTsKLSAgICAgICAgICAgIHRyYW5zZm9ybSA9IENH
QWZmaW5lVHJhbnNmb3JtQ29uY2F0KG9yaWVudGF0aW9uLnRyYW5zZm9ybUZyb21EZWZhdWx0KGlt
YWdlU2l6ZSksIHRyYW5zZm9ybSk7Ci0KLSAgICAgICAgICAgIGlmIChvcmllbnRhdGlvbi51c2Vz
V2lkdGhBc0hlaWdodCgpKQotICAgICAgICAgICAgICAgIGltYWdlU2l6ZSA9IGltYWdlU2l6ZS50
cmFuc3Bvc2VkU2l6ZSgpOwotCi0gICAgICAgICAgICAvLyAuLi5hbmQgZmxpcCBiYWNrLgotICAg
ICAgICAgICAgdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1UcmFuc2xhdGUodHJhbnNmb3Jt
LCAwLCBpbWFnZVNpemUuaGVpZ2h0KCkpOwotICAgICAgICAgICAgdHJhbnNmb3JtID0gQ0dBZmZp
bmVUcmFuc2Zvcm1TY2FsZSh0cmFuc2Zvcm0sIDEsIC0xKTsKLQotICAgICAgICAgICAgUmV0YWlu
UHRyPE5TQWZmaW5lVHJhbnNmb3JtPiBjb2NvYVRyYW5zZm9ybSA9IGFkb3B0TlMoW1tOU0FmZmlu
ZVRyYW5zZm9ybSBhbGxvY10gaW5pdF0pOwotICAgICAgICAgICAgW2NvY29hVHJhbnNmb3JtIHNl
dFRyYW5zZm9ybVN0cnVjdDoqKE5TQWZmaW5lVHJhbnNmb3JtU3RydWN0KikmdHJhbnNmb3JtXTsK
LSAgICAgICAgICAgIFtjb2NvYVRyYW5zZm9ybSBjb25jYXRdOwotCi0gICAgICAgICAgICBGbG9h
dFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXplKTsKLSAgICAgICAgICAgIFtp
bWFnZS0+c25hcHNob3ROU0ltYWdlKCkgZHJhd0luUmVjdDppbWFnZVJlY3QgZnJvbVJlY3Q6aW1h
Z2VSZWN0IG9wZXJhdGlvbjpOU0NvbXBvc2l0aW5nT3BlcmF0aW9uU291cmNlT3ZlciBmcmFjdGlv
bjoxLjBdOwotCi0gICAgICAgICAgICBbcm90YXRlZERyYWdJbWFnZSB1bmxvY2tGb2N1c107Ci0K
LSAgICAgICAgICAgIHJldHVybiByb3RhdGVkRHJhZ0ltYWdlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IGltYWdlLT5zaXplKCk7Ci0gICAgYXV0byBkcmFn
SW1hZ2UgPSBpbWFnZS0+c25hcHNob3ROU0ltYWdlKCk7Ci0gICAgW2RyYWdJbWFnZSBzZXRTaXpl
OihOU1NpemUpaW1hZ2VTaXplXTsKLSAgICByZXR1cm4gZHJhZ0ltYWdlOwotfQotICAgIAotUmV0
YWluUHRyPE5TSW1hZ2U+IGNyZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNoZWRJbWFnZUZpbGVuYW1l
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCi17Ci0gICAgTlNTdHJpbmcgKmV4dGVuc2lvbiA9IG5p
bDsKLSAgICBzaXplX3QgZG90SW5kZXggPSBmaWxlbmFtZS5yZXZlcnNlRmluZCgnLicpOwotICAg
IAotICAgIGlmIChkb3RJbmRleCAhPSBub3RGb3VuZCAmJiBkb3RJbmRleCA8IChmaWxlbmFtZS5s
ZW5ndGgoKSAtIDEpKSAvLyByZXF1aXJlIHRoYXQgYSAuIGV4aXN0cyBhZnRlciB0aGUgZmlyc3Qg
Y2hhcmFjdGVyIGFuZCBiZWZvcmUgdGhlIGxhc3QKLSAgICAgICAgZXh0ZW5zaW9uID0gZmlsZW5h
bWUuc3Vic3RyaW5nKGRvdEluZGV4ICsgMSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIEl0IG1p
Z2h0IGJlIHdvcnRoIGRvaW5nIGEgZnVydGhlciBsb29rdXAgdG8gcHVsbCB0aGUgZXh0ZW5zaW9u
IGZyb20gdGhlIE1JTUUgdHlwZS4KLSAgICAgICAgZXh0ZW5zaW9uID0gQCIiOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gW1tOU1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIGljb25Gb3JGaWxl
VHlwZTpleHRlbnNpb25dOwotfQotCi1jb25zdCBDR0Zsb2F0IGxpbmtJbWFnZVBhZGRpbmcgPSAx
MDsKLWNvbnN0IENHRmxvYXQgbGlua0ltYWdlRG9tYWluQmFzZWxpbmVUb1RpdGxlQmFzZWxpbmUg
PSAxODsKLWNvbnN0IENHRmxvYXQgbGlua0ltYWdlQ29ybmVyUmFkaXVzID0gNTsKLWNvbnN0IENH
RmxvYXQgbGlua0ltYWdlTWF4aW11bVdpZHRoID0gNDAwOwotY29uc3QgQ0dGbG9hdCBsaW5rSW1h
Z2VGb250U2l6ZSA9IDExOwotY29uc3QgQ0ZJbmRleCBsaW5rSW1hZ2VUaXRsZU1heGltdW1MaW5l
Q291bnQgPSAyOwotY29uc3QgaW50IGxpbmtJbWFnZVNoYWRvd1JhZGl1cyA9IDA7Ci1jb25zdCBp
bnQgbGlua0ltYWdlU2hhZG93T2Zmc2V0WSA9IDA7Ci1jb25zdCBpbnQgbGlua0ltYWdlRHJhZ0Nv
cm5lck91dHNldFggPSA2IC0gbGlua0ltYWdlU2hhZG93UmFkaXVzOwotY29uc3QgaW50IGxpbmtJ
bWFnZURyYWdDb3JuZXJPdXRzZXRZID0gMTAgLSBsaW5rSW1hZ2VTaGFkb3dSYWRpdXMgKyBsaW5r
SW1hZ2VTaGFkb3dPZmZzZXRZOwotCi1JbnRQb2ludCBkcmFnT2Zmc2V0Rm9yTGlua0RyYWdJbWFn
ZShEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlKQotewotICAgIEludFNpemUgc2l6ZSA9IGRyYWdJbWFn
ZVNpemUoZHJhZ0ltYWdlKTsKLSAgICByZXR1cm4geyBsaW5rSW1hZ2VEcmFnQ29ybmVyT3V0c2V0
WCwgc2l6ZS5oZWlnaHQoKSArIGxpbmtJbWFnZURyYWdDb3JuZXJPdXRzZXRZIH07Ci19Ci0KLUZs
b2F0UG9pbnQgYW5jaG9yUG9pbnRGb3JMaW5rRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBkcmFnSW1h
Z2UpCi17Ci0gICAgSW50U2l6ZSBzaXplID0gZHJhZ0ltYWdlU2l6ZShkcmFnSW1hZ2UpOwotICAg
IHJldHVybiB7IC1zdGF0aWNfY2FzdDxmbG9hdD4obGlua0ltYWdlRHJhZ0Nvcm5lck91dHNldFgp
IC8gc2l6ZS53aWR0aCgpLCAtc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxpbmtJbWFnZURyYWdDb3JuZXJP
dXRzZXRZKSAvIHNpemUuaGVpZ2h0KCkgfTsKLX0KLQotc3RydWN0IExpbmtJbWFnZUxheW91dCB7
Ci0gICAgTGlua0ltYWdlTGF5b3V0KFVSTCYsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwotCi0gICAg
c3RydWN0IExhYmVsIHsKLSAgICAgICAgRmxvYXRQb2ludCBvcmlnaW47Ci0gICAgICAgIFJldGFp
blB0cjxDVEZyYW1lUmVmPiBmcmFtZTsKLSAgICB9OwotICAgIFZlY3RvcjxMYWJlbD4gbGFiZWxz
OwotCi0gICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdDsKLX07Ci0KLUxpbmtJbWFnZUxheW91dDo6
TGlua0ltYWdlTGF5b3V0KFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlU3RyaW5nKQotewot
ICAgIE5TU3RyaW5nICp0aXRsZSA9IG5zU3RyaW5nTmlsSWZFbXB0eSh0aXRsZVN0cmluZyk7Ci0g
ICAgTlNVUkwgKmNvY29hVVJMID0gdXJsOwotICAgIE5TU3RyaW5nICphYnNvbHV0ZVVSTFN0cmlu
ZyA9IFtjb2NvYVVSTCBhYnNvbHV0ZVN0cmluZ107Ci0KLSAgICBOU1N0cmluZyAqZG9tYWluID0g
YWJzb2x1dGVVUkxTdHJpbmc7Ci0jaWYgSEFWRShVUkxfRk9STUFUVElORykKLSAgICBkb21haW4g
PSBbY29jb2FVUkwgX2xwX3NpbXBsaWZpZWREaXNwbGF5U3RyaW5nXTsKLSNlbHNlCi0gICAgaWYg
KExpbmtQcmVzZW50YXRpb25MaWJyYXJ5KCkpCi0gICAgICAgIGRvbWFpbiA9IFtjb2NvYVVSTCBf
bHBfc2ltcGxpZmllZERpc3BsYXlTdHJpbmddOwotI2VuZGlmCi0KLSAgICBpZiAoW3RpdGxlIGlz
RXF1YWxUb1N0cmluZzphYnNvbHV0ZVVSTFN0cmluZ10pCi0gICAgICAgIHRpdGxlID0gbmlsOwot
Ci0gICAgTlNGb250ICp0aXRsZUZvbnQgPSBbTlNGb250IGJvbGRTeXN0ZW1Gb250T2ZTaXplOmxp
bmtJbWFnZUZvbnRTaXplXTsKLSAgICBOU0ZvbnQgKmRvbWFpbkZvbnQgPSBbTlNGb250IHN5c3Rl
bUZvbnRPZlNpemU6bGlua0ltYWdlRm9udFNpemVdOwotCi0gICAgTlNDb2xvciAqdGl0bGVDb2xv
ciA9IFtOU0NvbG9yIGxhYmVsQ29sb3JdOwotICAgIE5TQ29sb3IgKmRvbWFpbkNvbG9yID0gW05T
Q29sb3Igc2Vjb25kYXJ5TGFiZWxDb2xvcl07Ci0KLSAgICBDR0Zsb2F0IG1heGltdW1BdmFpbGFi
bGVXaWR0aCA9IGxpbmtJbWFnZU1heGltdW1XaWR0aCAtIGxpbmtJbWFnZVBhZGRpbmcgKiAyOwot
Ci0gICAgQ0dGbG9hdCBjdXJyZW50WSA9IGxpbmtJbWFnZVBhZGRpbmc7Ci0gICAgQ0dGbG9hdCBt
YXhpbXVtVXNlZFRleHRXaWR0aCA9IDA7Ci0KLSAgICBhdXRvIGJ1aWxkTGluZXMgPSBbdGhpcywg
bWF4aW11bUF2YWlsYWJsZVdpZHRoLCAmbWF4aW11bVVzZWRUZXh0V2lkdGgsICZjdXJyZW50WV0g
KE5TU3RyaW5nICp0ZXh0LCBOU0NvbG9yICpjb2xvciwgTlNGb250ICpmb250LCBDRkluZGV4IG1h
eGltdW1MaW5lcywgQ1RMaW5lQnJlYWtNb2RlIGxpbmVCcmVha01vZGUpIHsKLSAgICAgICAgQ1RQ
YXJhZ3JhcGhTdHlsZVNldHRpbmcgcGFyYWdyYXBoU3R5bGVTZXR0aW5nc1sxXTsKLSAgICAgICAg
cGFyYWdyYXBoU3R5bGVTZXR0aW5nc1swXS5zcGVjID0ga0NUUGFyYWdyYXBoU3R5bGVTcGVjaWZp
ZXJMaW5lQnJlYWtNb2RlOwotICAgICAgICBwYXJhZ3JhcGhTdHlsZVNldHRpbmdzWzBdLnZhbHVl
U2l6ZSA9IHNpemVvZihDVExpbmVCcmVha01vZGUpOwotICAgICAgICBwYXJhZ3JhcGhTdHlsZVNl
dHRpbmdzWzBdLnZhbHVlID0gJmxpbmVCcmVha01vZGU7Ci0gICAgICAgIFJldGFpblB0cjxDVFBh
cmFncmFwaFN0eWxlUmVmPiBwYXJhZ3JhcGhTdHlsZSA9IGFkb3B0Q0YoQ1RQYXJhZ3JhcGhTdHls
ZUNyZWF0ZShwYXJhZ3JhcGhTdHlsZVNldHRpbmdzLCAxKSk7Ci0KLSAgICAgICAgTlNEaWN0aW9u
YXJ5ICp0ZXh0QXR0cmlidXRlcyA9IEB7Ci0gICAgICAgICAgICAoaWQpa0NURm9udEF0dHJpYnV0
ZU5hbWU6IGZvbnQsCi0gICAgICAgICAgICAoaWQpa0NURm9yZWdyb3VuZENvbG9yQXR0cmlidXRl
TmFtZTogY29sb3IsCi0gICAgICAgICAgICAoaWQpa0NUUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVO
YW1lOiAoaWQpcGFyYWdyYXBoU3R5bGUuZ2V0KCkKLSAgICAgICAgfTsKLSAgICAgICAgTlNEaWN0
aW9uYXJ5ICpmcmFtZUF0dHJpYnV0ZXMgPSBAewotICAgICAgICAgICAgKGlkKWtDVEZyYW1lTWF4
aW11bU51bWJlck9mTGluZXNBdHRyaWJ1dGVOYW1lOiBAKG1heGltdW1MaW5lcykKLSAgICAgICAg
fTsKLQotICAgICAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkVGV4
dCA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRl
eHQgYXR0cmlidXRlczp0ZXh0QXR0cmlidXRlc10pOwotICAgICAgICBSZXRhaW5QdHI8Q1RGcmFt
ZXNldHRlclJlZj4gdGV4dEZyYW1lc2V0dGVyID0gYWRvcHRDRihDVEZyYW1lc2V0dGVyQ3JlYXRl
V2l0aEF0dHJpYnV0ZWRTdHJpbmcoKENGQXR0cmlidXRlZFN0cmluZ1JlZilhdHRyaWJ1dGVkVGV4
dC5nZXQoKSkpOwotCi0gICAgICAgIENGUmFuZ2UgZml0UmFuZ2U7Ci0gICAgICAgIENHU2l6ZSB0
ZXh0U2l6ZSA9IENURnJhbWVzZXR0ZXJTdWdnZXN0RnJhbWVTaXplV2l0aENvbnN0cmFpbnRzKHRl
eHRGcmFtZXNldHRlci5nZXQoKSwgQ0ZSYW5nZU1ha2UoMCwgMCksIChDRkRpY3Rpb25hcnlSZWYp
ZnJhbWVBdHRyaWJ1dGVzLCBDR1NpemVNYWtlKG1heGltdW1BdmFpbGFibGVXaWR0aCwgQ0dGTE9B
VF9NQVgpLCAmZml0UmFuZ2UpOwotCi0gICAgICAgIFJldGFpblB0cjxDR1BhdGhSZWY+IHRleHRQ
YXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVXaXRoUmVjdChDR1JlY3RNYWtlKDAsIDAsIHRleHRT
aXplLndpZHRoLCB0ZXh0U2l6ZS5oZWlnaHQpLCBudWxscHRyKSk7Ci0gICAgICAgIFJldGFpblB0
cjxDVEZyYW1lUmVmPiB0ZXh0RnJhbWUgPSBhZG9wdENGKENURnJhbWVzZXR0ZXJDcmVhdGVGcmFt
ZSh0ZXh0RnJhbWVzZXR0ZXIuZ2V0KCksIGZpdFJhbmdlLCB0ZXh0UGF0aC5nZXQoKSwgKENGRGlj
dGlvbmFyeVJlZilmcmFtZUF0dHJpYnV0ZXMpKTsKLQotICAgICAgICBDRkFycmF5UmVmIGN0TGlu
ZXMgPSBDVEZyYW1lR2V0TGluZXModGV4dEZyYW1lLmdldCgpKTsKLSAgICAgICAgQ0ZJbmRleCBs
aW5lQ291bnQgPSBDRkFycmF5R2V0Q291bnQoY3RMaW5lcyk7Ci0gICAgICAgIGlmICghbGluZUNv
dW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFZlY3RvcjxDR1BvaW50PiBvcmln
aW5zKGxpbmVDb3VudCk7Ci0gICAgICAgIENHUmVjdCBsaW5lQm91bmRzOwotICAgICAgICBDR0Zs
b2F0IGhlaWdodCA9IDA7Ci0gICAgICAgIENURnJhbWVHZXRMaW5lT3JpZ2lucyh0ZXh0RnJhbWUu
Z2V0KCksIENGUmFuZ2VNYWtlKDAsIDApLCBvcmlnaW5zLmRhdGEoKSk7Ci0gICAgICAgIGZvciAo
Q0ZJbmRleCBsaW5lSW5kZXggPSAwOyBsaW5lSW5kZXggPCBsaW5lQ291bnQ7ICsrbGluZUluZGV4
KSB7Ci0gICAgICAgICAgICBDVExpbmVSZWYgbGluZSA9IChDVExpbmVSZWYpQ0ZBcnJheUdldFZh
bHVlQXRJbmRleChjdExpbmVzLCBsaW5lSW5kZXgpOwotCi0gICAgICAgICAgICBsaW5lQm91bmRz
ID0gQ1RMaW5lR2V0Qm91bmRzV2l0aE9wdGlvbnMobGluZSwgMCk7Ci0gICAgICAgICAgICBDR0Zs
b2F0IHRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoID0gQ1RMaW5lR2V0VHJhaWxpbmdXaGl0ZXNwYWNl
V2lkdGgobGluZSk7Ci0gICAgICAgICAgICBDR0Zsb2F0IGxpbmVXaWR0aElnbm9yaW5nVHJhaWxp
bmdXaGl0ZXNwYWNlID0gbGluZUJvdW5kcy5zaXplLndpZHRoIC0gdHJhaWxpbmdXaGl0ZXNwYWNl
V2lkdGg7Ci0gICAgICAgICAgICBtYXhpbXVtVXNlZFRleHRXaWR0aCA9IHN0ZDo6bWF4KG1heGlt
dW1Vc2VkVGV4dFdpZHRoLCBsaW5lV2lkdGhJZ25vcmluZ1RyYWlsaW5nV2hpdGVzcGFjZSk7Ci0K
LSAgICAgICAgICAgIGlmIChsaW5lSW5kZXgpCi0gICAgICAgICAgICAgICAgaGVpZ2h0ICs9IG9y
aWdpbnNbbGluZUluZGV4IC0gMV0ueSAtIG9yaWdpbnNbbGluZUluZGV4XS55OwotICAgICAgICB9
Ci0KLSAgICAgICAgTGlua0ltYWdlTGF5b3V0OjpMYWJlbCBsYWJlbDsKLSAgICAgICAgbGFiZWwu
ZnJhbWUgPSB0ZXh0RnJhbWU7Ci0gICAgICAgIGxhYmVsLm9yaWdpbiA9IEZsb2F0UG9pbnQobGlu
a0ltYWdlUGFkZGluZywgY3VycmVudFkgKyBvcmlnaW5zWzBdLnkpOwotICAgICAgICBsYWJlbHMu
YXBwZW5kKGxhYmVsKTsKLQotICAgICAgICBjdXJyZW50WSArPSBoZWlnaHQgKyBsaW5lQm91bmRz
LnNpemUuaGVpZ2h0OwotICAgIH07Ci0KLSAgICBpZiAodGl0bGUpCi0gICAgICAgIGJ1aWxkTGlu
ZXModGl0bGUsIHRpdGxlQ29sb3IsIHRpdGxlRm9udCwgbGlua0ltYWdlVGl0bGVNYXhpbXVtTGlu
ZUNvdW50LCBrQ1RMaW5lQnJlYWtCeVRydW5jYXRpbmdUYWlsKTsKLQotICAgIGlmICh0aXRsZSAm
JiBkb21haW4pCi0gICAgICAgIGN1cnJlbnRZICs9IGxpbmtJbWFnZURvbWFpbkJhc2VsaW5lVG9U
aXRsZUJhc2VsaW5lIC0gKGRvbWFpbkZvbnQuYXNjZW5kZXIgLSBkb21haW5Gb250LmRlc2NlbmRl
cik7Ci0KLSAgICBpZiAoZG9tYWluKQotICAgICAgICBidWlsZExpbmVzKGRvbWFpbiwgZG9tYWlu
Q29sb3IsIGRvbWFpbkZvbnQsIDEsIGtDVExpbmVCcmVha0J5VHJ1bmNhdGluZ01pZGRsZSk7Ci0K
LSAgICBjdXJyZW50WSArPSBsaW5rSW1hZ2VQYWRkaW5nOwotCi0gICAgYm91bmRpbmdSZWN0ID0g
RmxvYXRSZWN0KDAsIDAsIG1heGltdW1Vc2VkVGV4dFdpZHRoICsgbGlua0ltYWdlUGFkZGluZyAq
IDIsIGN1cnJlbnRZKTsKLQotICAgIC8vIFRvIHdvcmsgYXJvdW5kIGJsdXJyeSBkcmFnIGltYWdl
cyBvbiAxeCBkaXNwbGF5cywgbWFrZSB0aGUgd2lkdGggYW5kIGhlaWdodCBhIG11bHRpcGxlIG9m
IDIuCi0gICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdvcmthcm91bmQgd2hlbiA8cmRhcjovL3By
b2JsZW0vMzMwNTk3Mzk+IGlzIGZpeGVkLgotICAgIGJvdW5kaW5nUmVjdC5zZXRXaWR0aCgoc3Rh
dGljX2Nhc3Q8aW50Pihib3VuZGluZ1JlY3Qud2lkdGgoKSkgLyAyKSAqIDIpOwotICAgIGJvdW5k
aW5nUmVjdC5zZXRIZWlnaHQoKHN0YXRpY19jYXN0PGludD4oYm91bmRpbmdSZWN0LmhlaWdodCgp
IC8gMikgKiAyKSk7Ci19Ci0KLURyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEVs
ZW1lbnQmIGVsZW1lbnQsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBUZXh0SW5kaWNh
dG9yRGF0YSYsIEZvbnRSZW5kZXJpbmdNb2RlLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKLXsK
LSAgICBMaW5rSW1hZ2VMYXlvdXQgbGF5b3V0KHVybCwgdGl0bGUpOwotCi0gICAgTG9jYWxEZWZh
dWx0U3lzdGVtQXBwZWFyYW5jZSBsb2NhbEFwcGVhcmFuY2UoZWxlbWVudC5kb2N1bWVudCgpLnVz
ZURhcmtBcHBlYXJhbmNlKGVsZW1lbnQuY29tcHV0ZWRTdHlsZSgpKSk7Ci0KLSAgICBhdXRvIGlt
YWdlU2l6ZSA9IGxheW91dC5ib3VuZGluZ1JlY3Quc2l6ZSgpOwotICAgIFJldGFpblB0cjxOU0lt
YWdlPiBkcmFnSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhTaXplOmlt
YWdlU2l6ZV0pOwotICAgIFtkcmFnSW1hZ2UgX3dlYl9sb2NrRm9jdXNXaXRoRGV2aWNlU2NhbGVG
YWN0b3I6ZGV2aWNlU2NhbGVGYWN0b3JdOwotCi0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfQkVHSU4KLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgoQ0dDb250ZXh0UmVmKVtO
U0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0uZ3JhcGhpY3NQb3J0KTsKLSAgICBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLQotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRS
ZWN0KEZsb2F0Um91bmRlZFJlY3QobGF5b3V0LmJvdW5kaW5nUmVjdCwgRmxvYXRSb3VuZGVkUmVj
dDo6UmFkaWkobGlua0ltYWdlQ29ybmVyUmFkaXVzKSksIGNvbG9yRnJvbU5TQ29sb3IoW05TQ29s
b3IgY29udHJvbEJhY2tncm91bmRDb2xvcl0pKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgbGFi
ZWwgOiBsYXlvdXQubGFiZWxzKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c2F2ZXIoY29udGV4dCk7Ci0gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGxhYmVsLm9yaWdpbi54
KCksIGxheW91dC5ib3VuZGluZ1JlY3QuaGVpZ2h0KCkgLSBsYWJlbC5vcmlnaW4ueSgpIC0gbGlu
a0ltYWdlUGFkZGluZyk7Ci0gICAgICAgIENURnJhbWVEcmF3KGxhYmVsLmZyYW1lLmdldCgpLCBj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICB9Ci0KLSAgICBbZHJhZ0ltYWdlIHVubG9j
a0ZvY3VzXTsKLQotICAgIHJldHVybiBkcmFnSW1hZ2U7Ci19Ci0KLURyYWdJbWFnZVJlZiBjcmVh
dGVEcmFnSW1hZ2VGb3JDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0LCBQYXRoJikKLXsKLSAgICBhdXRvIGRyYWdJbWFnZSA9IGFkb3B0TlMoW1tOU0ltYWdl
IGFsbG9jXSBpbml0V2l0aFNpemU6TlNNYWtlU2l6ZShDb2xvclN3YXRjaFdpZHRoLCBDb2xvclN3
YXRjaFdpZHRoKV0pOwotCi0gICAgW2RyYWdJbWFnZSBsb2NrRm9jdXNdOwotCi0gICAgTlNCZXpp
ZXJQYXRoICpwYXRoID0gW05TQmV6aWVyUGF0aCBiZXppZXJQYXRoV2l0aFJvdW5kZWRSZWN0Ok5T
TWFrZVJlY3QoMCwgMCwgQ29sb3JTd2F0Y2hXaWR0aCwgQ29sb3JTd2F0Y2hXaWR0aCkgeFJhZGl1
czpDb2xvclN3YXRjaENvcm5lclJhZGl1cyB5UmFkaXVzOkNvbG9yU3dhdGNoQ29ybmVyUmFkaXVz
XTsKLSAgICBbcGF0aCBzZXRMaW5lV2lkdGg6Q29sb3JTd2F0Y2hTdHJva2VTaXplXTsKLQotICAg
IFtuc0NvbG9yKGNvbG9yKSBzZXRGaWxsXTsKLSAgICBbcGF0aCBmaWxsXTsKLQotICAgIFtbTlND
b2xvciBxdWF0ZXJuYXJ5TGFiZWxDb2xvcl0gc2V0U3Ryb2tlXTsKLSAgICBbcGF0aCBzdHJva2Vd
OwotCi0gICAgW2RyYWdJbWFnZSB1bmxvY2tGb2N1c107Ci0KLSAgICByZXR1cm4gZHJhZ0ltYWdl
OwotfQotICAgCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoRFJB
R19TVVBQT1JUKSAmJiBQTEFURk9STShNQUMpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>