<?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>216869</bug_id>
          
          <creation_ts>2020-09-23 02:08:00 -0700</creation_ts>
          <short_desc>[LFC][Integration] Add canUseFor functions</short_desc>
          <delta_ts>2020-09-23 05:05:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</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>1691050</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-23 02:08:00 -0700</bug_when>
    <thetext>Don&apos;t use SLL versions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691053</commentid>
    <comment_count>1</comment_count>
      <attachid>409453</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-23 02:21:48 -0700</bug_when>
    <thetext>Created attachment 409453
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691056</commentid>
    <comment_count>2</comment_count>
      <attachid>409455</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-23 02:37:00 -0700</bug_when>
    <thetext>Created attachment 409455
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691063</commentid>
    <comment_count>3</comment_count>
      <attachid>409458</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-23 04:07:22 -0700</bug_when>
    <thetext>Created attachment 409458
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691074</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-23 05:04:01 -0700</bug_when>
    <thetext>Committed r267468: &lt;https://trac.webkit.org/changeset/267468&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 409458.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691075</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-23 05:05:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/69429476&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409453</attachid>
            <date>2020-09-23 02:21:48 -0700</date>
            <delta_ts>2020-09-23 02:37:00 -0700</delta_ts>
            <desc>patch</desc>
            <filename>lfc-canuse.patch</filename>
            <type>text/plain</type>
            <size>37537</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0ZWEwZWUxMzJhMWUuLjA5NjRkYmUyZWFjMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDM1IEBACisyMDIwLTA5LTIzICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gQWRkIGNhblVzZUZvciBmdW5jdGlvbnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjg2OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvcHkgdGhl
IFNMTCBjYW5Vc2VGb3IgY29kZS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmNhblVzZUZvckNoYXJhY3Rlcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6Y2FuVXNlRm9yVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6Y2FuVXNlRm9yRm9udEFuZFRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmNhblVzZUZvclN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpjYW5Vc2VGb3JMaW5lTGF5b3V0V2l0aFJlYXNv
bik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6Y2FuVXNlRm9yTGluZUxh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6Y2FuVXNlRm9yTGlu
ZUxheW91dEFmdGVyU3R5bGVDaGFuZ2UpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmg6IEFkZGVkLgorCisgICAgICAgIEFsc28gc3dpdGNo
IHRvIE9wdGlvblNldC4KKworICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRl
Z3JhdGlvbkxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRp
b246OkxpbmVMYXlvdXQ6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRl
Z3JhdGlvbjo6TGluZUxheW91dDo6Y2FuVXNlRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dEludGVncmF0aW9uOjpMaW5lTGF5b3V0OjpjYW5Vc2VGb3JBZnRlclN0eWxlQ2hhbmdlKToKKyAg
ICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y2FuVXNl
Rm9yKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0SW5saW5lQ2hpbGRyZW4p
OgorCiAyMDIwLTA5LTIyICBQYXRyaWNrIEFuZ2xlICA8cGFuZ2xlQGFwcGxlLmNvbT4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBDaGFuZ2UgYEluc3BlY3RvckFuaW1hdGlvbkFnZW50LT5zdGFy
dFRyYWNraW5nYCB0byBub3QgZXJyb3Igb24gcmVwZWF0ZWQgY2FsbHMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5k
ZXggMThlZDE3M2Q4OTQ2Li5hNDNmYjk3MWMwMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xNDU1LDYg
KzE0NTUsNyBAQCBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAK
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRleHRJdGVtLmNwcAogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5jcHAKIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvbkJveFRyZWUuY3BwCitsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRp
b25Db3ZlcmFnZS5jcHAKIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVM
YXlvdXQuY3BwCiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9u
LmNwcAogbGF5b3V0L2ludmFsaWRhdGlvbi9JbnZhbGlkYXRpb25Db250ZXh0LmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDdm
ODczNTgzNTJiZS4uODFjNjEwMzdiMjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00OTc1LDYgKzQ5NzUsOCBAQAogCQlFM0ZB
Mzg2NDFENzE4MTJEMDBBQTU5NTAgLyogUGVuZGluZ1NjcmlwdENsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNGQTM4NjExRDcxNkU3NjAwQUE1
OTUwIC8qIFBlbmRpbmdTY3JpcHRDbGllbnQuaCAqLzsgfTsKIAkJRTQwMUMyNzUxN0NFNTNFQzAw
QzQxQTM1IC8qIEVsZW1lbnRJdGVyYXRvckFzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MDFDMjc0MTdDRTUzRUMwMEM0MUEzNSAvKiBF
bGVtZW50SXRlcmF0b3JBc3NlcnRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQwMUUwQTQxQzNDMEI4MzAwRjM0RDEwIC8qIFN0eWxlQ2hh
bmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDAx
RTBBMzFDM0MwQjgzMDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFNDAzQjdBMjI1MUIxMTkzMDAxOUU4MDAg
LyogTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQwM0I3QTEyNTFCMTE5MzAwMTlFODAwIC8qIExheW91dElu
dGVncmF0aW9uQ292ZXJhZ2UuaCAqLzsgfTsKKwkJRTQwM0I3QTMyNTFCMTFDMTAwMTlFODAwIC8q
IExheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzMTJBQjcyNEIzMjY1NjAwNjc4MzQ5IC8qIExheW91dElu
dGVncmF0aW9uUGFnaW5hdGlvbi5oICovOyB9OwogCQlFNDE4MDI1NTIzRDQ1NDlCMDBGRkIwNzEg
LyogTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDE4MDI1MzIzRDQ1NDlBMDBGRkIwNzEgLyogTGF5b3V0SW50
ZWdyYXRpb25Cb3hUcmVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTQxOTA0MUYxQ0M2NDg2QjAwQzM1RjVEIC8qIEZvbnRTZWxlY3RvckNsaWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQxOTA0
MUUxQ0M2NDg2QjAwQzM1RjVEIC8qIEZvbnRTZWxlY3RvckNsaWVudC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0MjA1MDE3MjE0MTkwMUIwMDY2
RUYzQiAvKiBQcm9jZXNzV2FybWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQyMDUwMTQyMTQxOTAxQTAwNjZFRjNCIC8qIFByb2Nlc3NXYXJtaW5n
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE1
ODE0LDYgKzE1ODE2LDggQEAKIAkJRTQwMUMyNzQxN0NFNTNFQzAwQzQxQTM1IC8qIEVsZW1lbnRJ
dGVyYXRvckFzc2VydGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWxl
bWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NDAxRTBBMzFDM0MwQjgzMDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVDaGFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTQwMUUwQTUxQzNDMENGNzAwRjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlQ2hhbmdlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQwM0I3OUYyNTFCMTE4QjAwMTlFODAwIC8qIExheW91dElu
dGVncmF0aW9uQ292ZXJhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0SW50ZWdyYXRp
b25Db3ZlcmFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0MDNCN0ExMjUx
QjExOTMwMDE5RTgwMCAvKiBMYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dEludGVncmF0aW9uQ292ZXJhZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQwNkYzRkIxMTk4MzA3RDAwOUQ1OUQ2IC8qIENvbG9y
RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDb2xvckRhdGEu
Y3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9Db2xvckRhdGEuY3BwOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlFNDE4MDI1MzIzRDQ1NDlBMDBGRkIwNzEg
LyogTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExheW91dEludGVncmF0aW9uQm94VHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNDE4MDI1NjIzRDQ1NEI1MDBGRkIwNzEgLyogTGF5b3V0SW50ZWdyYXRpb25Cb3hU
cmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dEludGVncmF0aW9uQm94VHJlZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODQ0MywxMiArMjg0NDcsMTQgQEAKIAkJ
RTRGQjRCMUUyMzk1MzU2RjAwM0MzMzZBIC8qIGludGVncmF0aW9uICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlFNDMxMkFCNTI0QjMyNjU2MDA2NzgzNDkg
LyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcCAqLywKLQkJCQlFNDMxMkFCNzI0QjMy
NjU2MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmggKi8sCiAJCQkJRTQx
ODAyNTYyM0Q0NTRCNTAwRkZCMDcxIC8qIExheW91dEludGVncmF0aW9uQm94VHJlZS5jcHAgKi8s
CiAJCQkJRTQxODAyNTMyM0Q0NTQ5QTAwRkZCMDcxIC8qIExheW91dEludGVncmF0aW9uQm94VHJl
ZS5oICovLAorCQkJCUU0MDNCNzlGMjUxQjExOEIwMDE5RTgwMCAvKiBMYXlvdXRJbnRlZ3JhdGlv
bkNvdmVyYWdlLmNwcCAqLywKKwkJCQlFNDAzQjdBMTI1MUIxMTkzMDAxOUU4MDAgLyogTGF5b3V0
SW50ZWdyYXRpb25Db3ZlcmFnZS5oICovLAogCQkJCUU0QUJBQkRFMjM2MDg5M0QwMEZBNDM0NSAv
KiBMYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwICovLAogCQkJCUU0QUJBQkRCMjM2MDg4
RkQwMEZBNDM0NSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaCAqLywKKwkJCQlFNDMx
MkFCNTI0QjMyNjU2MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcCAq
LywKKwkJCQlFNDMxMkFCNzI0QjMyNjU2MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdp
bmF0aW9uLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGludGVncmF0aW9uOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKQEAgLTMyNzgzLDYgKzMyNzg5LDcgQEAKIAkJCQlCMjIyNzk2NTBEMDBC
RjIyMDA3MUI3ODIgLyogTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBQjMxQzkxRTEwQUUxQjhFMDAwQzdCOTIgLyogTGluZUNsYW1wVmFsdWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZGRUZBQjJBMTgzODBEQTAwMDUxNDUzNCAvKiBMaW5lTGF5b3V0U3RhdGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCUU0MDNCN0EyMjUxQjExOTMwMDE5RTgwMCAvKiBMYXlvdXRJ
bnRlZ3JhdGlvbkNvdmVyYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDg0QTMzRTIzMDU1MzI1
MDA5QURFNkEgLyogTGluZUxheW91dFRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQz
NDNEMjUyMzkyNzc5MDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ1MUM2MjgyMzkyOTNFQzAwOTkzMTkwIC8qIExpbmVMYXlv
dXRUcmF2ZXJzYWxEaXNwbGF5UnVuUGF0aC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzY1MSw2ICsz
MzY1OCw3IEBACiAJCQkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJs
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQwMEQ3QTgxNzEzNkVBNzAwNzdDRTA1IC8qIFNjcmlw
dFdyYXBwYWJsZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEFFMzRGMTJFQTA5NkEw
MEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQwM0I3QTMy
NTFCMTFDMTAwMTlFODAwIC8qIExheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUQ5MjVCNjgwRjY0RDRERDAwQjg0N0YwIC8qIFNjcm9sbEFsaWdubWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQ0EzQkY2N0UxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFu
aW1hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE3NzQ4MDEzNzhCNzcyMDA5REE3NkEgLyog
U2Nyb2xsQW5pbWF0b3JJT1MuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJh
Z2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uY2U2YjlkNTk0
ZWQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuY3BwCkBAIC0wLDAgKzEsMzc2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRp
b25Db3ZlcmFnZS5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCisj
aW5jbHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJMb2dnaW5n
LmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCisjaW5jbHVkZSAiUmVuZGVyTXVsdGlj
b2x1bW5GbG93LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKKyNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1
ZGUgIlNldHRpbmdzLmgiCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
KworI2lmbmRlZiBOREVCVUcKKyNkZWZpbmUgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURF
RChyZWFzb24sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKSB7IFwKKyAgICAgICAgcmVhc29ucy5h
ZGQoQXZvaWRhbmNlUmVhc29uOjpyZWFzb24pOyBcCisgICAgICAgIGlmIChpbmNsdWRlUmVhc29u
cyA9PSBJbmNsdWRlUmVhc29uczo6Rmlyc3QpIFwKKyAgICAgICAgICAgIHJldHVybiByZWFzb25z
OyBcCisgICAgfQorI2Vsc2UKKyNkZWZpbmUgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURF
RChyZWFzb24sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKSB7IFwKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChpbmNsdWRlUmVhc29ucywgaW5jbHVkZVJlYXNvbnMgPT0gSW5jbHVkZVJlYXNvbnM6OkZp
cnN0KTsgXAorICAgICAgICByZWFzb25zLmFkZChBdm9pZGFuY2VSZWFzb246OnJlYXNvbik7IFwK
KyAgICAgICAgcmV0dXJuIHJlYXNvbnM7IFwKKyAgICB9CisjZW5kaWYKKworI2lmbmRlZiBOREVC
VUcKKyNkZWZpbmUgQUREX1JFQVNPTlNfQU5EX1JFVFVSTl9JRl9ORUVERUQobmV3UmVhc29ucywg
cmVhc29ucywgaW5jbHVkZVJlYXNvbnMpIHsgXAorICAgICAgICByZWFzb25zLmFkZChuZXdSZWFz
b25zKTsgXAorICAgICAgICBpZiAoaW5jbHVkZVJlYXNvbnMgPT0gSW5jbHVkZVJlYXNvbnM6OkZp
cnN0KSBcCisgICAgICAgICAgICByZXR1cm4gcmVhc29uczsgXAorICAgIH0KKyNlbHNlCisjZGVm
aW5lIEFERF9SRUFTT05TX0FORF9SRVRVUk5fSUZfTkVFREVEKG5ld1JlYXNvbnMsIHJlYXNvbnMs
IGluY2x1ZGVSZWFzb25zKSB7IFwKKyAgICAgICAgQVNTRVJUX1VOVVNFRChpbmNsdWRlUmVhc29u
cywgaW5jbHVkZVJlYXNvbnMgPT0gSW5jbHVkZVJlYXNvbnM6OkZpcnN0KTsgXAorICAgICAgICBy
ZWFzb25zLmFkZChuZXdSZWFzb25zKTsgXAorICAgICAgICByZXR1cm4gcmVhc29uczsgXAorICAg
IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0SW50ZWdy
YXRpb24geworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uU2V0PEF2
b2lkYW5jZVJlYXNvbj4gY2FuVXNlRm9yQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUsIGJvb2wgdGV4
dElzSnVzdGlmaWVkLCBJbmNsdWRlUmVhc29ucyk7CisKK3RlbXBsYXRlPD4gT3B0aW9uU2V0PEF2
b2lkYW5jZVJlYXNvbj4gY2FuVXNlRm9yQ2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlciwgYm9vbCB0
ZXh0SXNKdXN0aWZpZWQsIEluY2x1ZGVSZWFzb25zIGluY2x1ZGVSZWFzb25zKQoreworICAgIE9w
dGlvblNldDxBdm9pZGFuY2VSZWFzb24+IHJlYXNvbnM7CisgICAgaWYgKHRleHRJc0p1c3RpZmll
ZCkgeworICAgICAgICAvLyBJbmNsdWRlIGNoYXJhY3RlcnMgdXAgdG8gTGF0aW4gRXh0ZW5kZWQt
QiBhbmQgc29tZSBwdW5jdHVhdGlvbiByYW5nZSB3aGVuIHRleHQgaXMganVzdGlmaWVkLgorICAg
ICAgICBib29sIGlzTGF0aW5JbmNsdWRpbmdFeHRlbmRlZEIgPSBjaGFyYWN0ZXIgPD0gMHgwMUZG
OworICAgICAgICBib29sIGlzUHVuY3R1YXRpb25SYW5nZSA9IGNoYXJhY3RlciA+PSAweDIwMTAg
JiYgY2hhcmFjdGVyIDw9IDB4MjAyNzsKKyAgICAgICAgaWYgKCEoaXNMYXRpbkluY2x1ZGluZ0V4
dGVuZGVkQiB8fCBpc1B1bmN0dWF0aW9uUmFuZ2UpKQorICAgICAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzSnVzdGlmaWVkTm9uTGF0aW5UZXh0LCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7CisgICAgfQorCisgICAgaWYgKFUxNl9JU19TVVJST0dBVEUoY2hh
cmFjdGVyKSkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93VGV4
dEhhc1N1cnJvZ2F0ZVBhaXIsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKworICAgIFVDaGFy
RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHVfY2hhckRpcmVjdGlvbihjaGFyYWN0ZXIpOworICAgIGlm
IChkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUIHx8IGRpcmVjdGlvbiA9PSBVX1JJR0hUX1RP
X0xFRlRfQVJBQklDCisgICAgICAgIHx8IGRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlRfRU1C
RURESU5HIHx8IGRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREUKKyAgICAgICAg
fHwgZGlyZWN0aW9uID09IFVfTEVGVF9UT19SSUdIVF9FTUJFRERJTkcgfHwgZGlyZWN0aW9uID09
IFVfTEVGVF9UT19SSUdIVF9PVkVSUklERQorICAgICAgICB8fCBkaXJlY3Rpb24gPT0gVV9QT1Bf
RElSRUNUSU9OQUxfRk9STUFUIHx8IGRpcmVjdGlvbiA9PSBVX0JPVU5EQVJZX05FVVRSQUwpCisg
ICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRIYXNEaXJlY3Rp
b25DaGFyYWN0ZXIsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKworICAgIHJldHVybiByZWFz
b25zOworfQorCit0ZW1wbGF0ZTw+IE9wdGlvblNldDxBdm9pZGFuY2VSZWFzb24+IGNhblVzZUZv
ckNoYXJhY3RlcihMQ2hhciwgYm9vbCwgSW5jbHVkZVJlYXNvbnMpCit7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgT3B0aW9u
U2V0PEF2b2lkYW5jZVJlYXNvbj4gY2FuVXNlRm9yVGV4dChjb25zdCBDaGFyYWN0ZXJUeXBlKiB0
ZXh0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZSwgT3B0
aW9uYWw8ZmxvYXQ+IGxpbmVIZWlnaHRDb25zdHJhaW50LAorICAgIGJvb2wgdGV4dElzSnVzdGlm
aWVkLCBJbmNsdWRlUmVhc29ucyBpbmNsdWRlUmVhc29ucykKK3sKKyAgICBPcHRpb25TZXQ8QXZv
aWRhbmNlUmVhc29uPiByZWFzb25zOworICAgIGF1dG8mIHByaW1hcnlGb250ID0gZm9udENhc2Nh
ZGUucHJpbWFyeUZvbnQoKTsKKyAgICBhdXRvJiBmb250TWV0cmljcyA9IHByaW1hcnlGb250LmZv
bnRNZXRyaWNzKCk7CisgICAgYXV0byBhdmFpbGFibGVTcGFjZUZvckdseXBoQXNjZW50ID0gZm9u
dE1ldHJpY3MuYXNjZW50KCk7CisgICAgYXV0byBhdmFpbGFibGVTcGFjZUZvckdseXBoRGVzY2Vu
dCA9IGZvbnRNZXRyaWNzLmRlc2NlbnQoKTsKKyAgICBpZiAobGluZUhlaWdodENvbnN0cmFpbnQp
IHsKKyAgICAgICAgYXV0byBsaW5lSGVpZ2h0UGFkZGluZyA9ICpsaW5lSGVpZ2h0Q29uc3RyYWlu
dCAtIGZvbnRNZXRyaWNzLmhlaWdodCgpOworICAgICAgICBhdmFpbGFibGVTcGFjZUZvckdseXBo
QXNjZW50ICs9IGxpbmVIZWlnaHRQYWRkaW5nIC8gMjsKKyAgICAgICAgYXZhaWxhYmxlU3BhY2VG
b3JHbHlwaERlc2NlbnQgKz0gbGluZUhlaWdodFBhZGRpbmcgLyAyOworICAgIH0KKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIGNoYXJh
Y3RlciA9IHRleHRbaV07CisgICAgICAgIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNo
YXJhY3RlcikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoY2hhcmFjdGVy
ID09IHNvZnRIeXBoZW4pCisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKEZsb3dUZXh0SGFzU29mdEh5cGhlbiwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworCisg
ICAgICAgIGF1dG8gY2hhcmFjdGVyUmVhc29ucyA9IGNhblVzZUZvckNoYXJhY3RlcihjaGFyYWN0
ZXIsIHRleHRJc0p1c3RpZmllZCwgaW5jbHVkZVJlYXNvbnMpOworICAgICAgICBpZiAoY2hhcmFj
dGVyUmVhc29ucykKKyAgICAgICAgICAgIEFERF9SRUFTT05TX0FORF9SRVRVUk5fSUZfTkVFREVE
KGNoYXJhY3RlclJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKworICAgICAgICBh
dXRvIGdseXBoRGF0YSA9IGZvbnRDYXNjYWRlLmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0
ZXIsIGZhbHNlKTsKKyAgICAgICAgaWYgKCFnbHlwaERhdGEuaXNWYWxpZCgpIHx8IGdseXBoRGF0
YS5mb250ICE9ICZwcmltYXJ5Rm9udCkKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVS
Tl9JRl9ORUVERUQoRmxvd1ByaW1hcnlGb250SXNJbnN1ZmZpY2llbnQsIHJlYXNvbnMsIGluY2x1
ZGVSZWFzb25zKTsKKworICAgICAgICBpZiAobGluZUhlaWdodENvbnN0cmFpbnQpIHsKKyAgICAg
ICAgICAgIGF1dG8gYm91bmRzID0gcHJpbWFyeUZvbnQuYm91bmRzRm9yR2x5cGgoZ2x5cGhEYXRh
LmdseXBoKTsKKyAgICAgICAgICAgIGlmIChjZWlsZigtYm91bmRzLnkoKSkgPiBhdmFpbGFibGVT
cGFjZUZvckdseXBoQXNjZW50IHx8IGNlaWxmKGJvdW5kcy5tYXhZKCkpID4gYXZhaWxhYmxlU3Bh
Y2VGb3JHbHlwaERlc2NlbnQpCisgICAgICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChGbG93Rm9udEhhc092ZXJmbG93R2x5cGgsIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVhc29uczsKK30KKworc3RhdGlj
IE9wdGlvblNldDxBdm9pZGFuY2VSZWFzb24+IGNhblVzZUZvclRleHQoU3RyaW5nVmlldyB0ZXh0
LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUsIE9wdGlvbmFsPGZsb2F0PiBsaW5lSGVp
Z2h0Q29uc3RyYWludCwgYm9vbCB0ZXh0SXNKdXN0aWZpZWQsIEluY2x1ZGVSZWFzb25zIGluY2x1
ZGVSZWFzb25zKQoreworICAgIGlmICh0ZXh0LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gY2Fu
VXNlRm9yVGV4dCh0ZXh0LmNoYXJhY3RlcnM4KCksIHRleHQubGVuZ3RoKCksIGZvbnRDYXNjYWRl
LCBsaW5lSGVpZ2h0Q29uc3RyYWludCwgdGV4dElzSnVzdGlmaWVkLCBpbmNsdWRlUmVhc29ucyk7
CisgICAgcmV0dXJuIGNhblVzZUZvclRleHQodGV4dC5jaGFyYWN0ZXJzMTYoKSwgdGV4dC5sZW5n
dGgoKSwgZm9udENhc2NhZGUsIGxpbmVIZWlnaHRDb25zdHJhaW50LCB0ZXh0SXNKdXN0aWZpZWQs
IGluY2x1ZGVSZWFzb25zKTsKK30KKworc3RhdGljIE9wdGlvblNldDxBdm9pZGFuY2VSZWFzb24+
IGNhblVzZUZvckZvbnRBbmRUZXh0KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgSW5jbHVk
ZVJlYXNvbnMgaW5jbHVkZVJlYXNvbnMpCit7CisgICAgT3B0aW9uU2V0PEF2b2lkYW5jZVJlYXNv
bj4gcmVhc29uczsKKyAgICAvLyBXZSBhc3N1bWUgdGhhdCBhbGwgbGluZXMgaGF2ZSBtZXRyaWNz
IGJhc2VkIHB1cmVseSBvbiB0aGUgcHJpbWFyeSBmb250LgorICAgIGNvbnN0IGF1dG8mIHN0eWxl
ID0gZmxvdy5zdHlsZSgpOworICAgIGF1dG8mIGZvbnRDYXNjYWRlID0gc3R5bGUuZm9udENhc2Nh
ZGUoKTsKKyAgICBpZiAoZm9udENhc2NhZGUucHJpbWFyeUZvbnQoKS5pc0ludGVyc3RpdGlhbCgp
KQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc01pc3NpbmdQ
cmltYXJ5Rm9udCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIE9wdGlvbmFsPGZsb2F0
PiBsaW5lSGVpZ2h0Q29uc3RyYWludDsKKyAgICBpZiAoc3R5bGUubGluZUJveENvbnRhaW4oKS5j
b250YWlucyhMaW5lQm94Q29udGFpbjo6R2x5cGhzKSkKKyAgICAgICAgbGluZUhlaWdodENvbnN0
cmFpbnQgPSBmbG93LmxpbmVIZWlnaHQoZmFsc2UsIEhvcml6b250YWxMaW5lLCBQb3NpdGlvbk9m
SW50ZXJpb3JMaW5lQm94ZXMpLnRvRmxvYXQoKTsKKyAgICBib29sIGZsb3dJc0p1c3RpZmllZCA9
IHN0eWxlLnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnk7CisgICAgZm9yIChj
b25zdCBhdXRvJiB0ZXh0UmVuZGVyZXIgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJUZXh0PihmbG93
KSkgeworICAgICAgICAvLyBGSVhNRTogRG8gbm90IHJldHVybiB1bnRpbCBhZnRlciBjaGVja2lu
ZyBhbGwgY2hpbGRyZW4uCisgICAgICAgIGlmICh0ZXh0UmVuZGVyZXIudGV4dCgpLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRJ
c0VtcHR5LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgICAgIGlmICh0ZXh0UmVuZGVy
ZXIuaXNDb21iaW5lVGV4dCgpKQorICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChGbG93VGV4dElzQ29tYmluZVRleHQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsK
KyAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc0NvdW50ZXIoKSkKKyAgICAgICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRJc1JlbmRlckNvdW50ZXIsIHJlYXNv
bnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc1F1b3RlKCkp
CisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dUZXh0SXNS
ZW5kZXJRdW90ZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgICAgICBpZiAodGV4dFJl
bmRlcmVyLmlzVGV4dEZyYWdtZW50KCkpCisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKEZsb3dUZXh0SXNUZXh0RnJhZ21lbnQsIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKKyAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc1NWR0lubGluZVRleHQoKSkKKyAgICAg
ICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRJc1NWR0lubGlu
ZVRleHQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAgICAgaWYgKCF0ZXh0UmVuZGVy
ZXIuY2FuVXNlU2ltcGxlRm9udENvZGVQYXRoKCkpIHsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQg
dG8gY2hlY2sgdGhlIGNvZGUgcGF0aCBhdCB0aGlzIHBvaW50LiBXZSBhbHJlYWR5IGtub3cgaXQg
Y2FuJ3QgYmUgc2ltcGxlLgorICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93SGFzQ29tcGxleEZvbnRDb2RlUGF0aCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVGV4dFJ1biBydW4oU3RyaW5nKHRleHRS
ZW5kZXJlci50ZXh0KCkpKTsKKyAgICAgICAgICAgIHJ1bi5zZXRDaGFyYWN0ZXJTY2FuRm9yQ29k
ZVBhdGgoZmFsc2UpOworICAgICAgICAgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkuY29kZVBh
dGgocnVuKSAhPSBGb250Q2FzY2FkZTo6U2ltcGxlKQorICAgICAgICAgICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0NvbXBsZXhGb250Q29kZVBhdGgsIHJlYXNv
bnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gdGV4dFJlYXNv
bnMgPSBjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlci5zdHJpbmdWaWV3KCksIGZvbnRDYXNjYWRl
LCBsaW5lSGVpZ2h0Q29uc3RyYWludCwgZmxvd0lzSnVzdGlmaWVkLCBpbmNsdWRlUmVhc29ucyk7
CisgICAgICAgIGlmICh0ZXh0UmVhc29ucykKKyAgICAgICAgICAgIEFERF9SRUFTT05TX0FORF9S
RVRVUk5fSUZfTkVFREVEKHRleHRSZWFzb25zLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Cisg
ICAgfQorICAgIHJldHVybiByZWFzb25zOworfQorCitzdGF0aWMgT3B0aW9uU2V0PEF2b2lkYW5j
ZVJlYXNvbj4gY2FuVXNlRm9yU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBJbmNsdWRl
UmVhc29ucyBpbmNsdWRlUmVhc29ucykKK3sKKyAgICBPcHRpb25TZXQ8QXZvaWRhbmNlUmVhc29u
PiByZWFzb25zOworICAgIGlmIChzdHlsZS50ZXh0T3ZlcmZsb3coKSA9PSBUZXh0T3ZlcmZsb3c6
OkVsbGlwc2lzKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dI
YXNUZXh0T3ZlcmZsb3csIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoc3R5bGUu
dGV4dFVuZGVybGluZVBvc2l0aW9uKCkgIT0gVGV4dFVuZGVybGluZVBvc2l0aW9uOjpBdXRvIHx8
ICFzdHlsZS50ZXh0VW5kZXJsaW5lT2Zmc2V0KCkuaXNBdXRvKCkgfHwgIXN0eWxlLnRleHREZWNv
cmF0aW9uVGhpY2tuZXNzKCkuaXNBdXRvKCkpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVS
Tl9JRl9ORUVERUQoRmxvd0hhc1Vuc3VwcG9ydGVkVW5kZXJsaW5lRGVjb3JhdGlvbiwgcmVhc29u
cywgaW5jbHVkZVJlYXNvbnMpOworICAgIC8vIE5vbi12aXNpYmxlIG92ZXJmbG93IHNob3VsZCBi
ZSBwcmV0dHkgZWFzeSB0byBzdXBwb3J0LgorICAgIGlmIChzdHlsZS5vdmVyZmxvd1goKSAhPSBP
dmVyZmxvdzo6VmlzaWJsZSB8fCBzdHlsZS5vdmVyZmxvd1koKSAhPSBPdmVyZmxvdzo6VmlzaWJs
ZSkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzT3ZlcmZs
b3dOb3RWaXNpYmxlLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYgKCFzdHlsZS5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQoRmxvd0lzTm90TFRSLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYg
KCEoc3R5bGUubGluZUJveENvbnRhaW4oKS5jb250YWlucyhMaW5lQm94Q29udGFpbjo6QmxvY2sp
KSkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzTGluZUJv
eENvbnRhaW5Qcm9wZXJ0eSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlmIChzdHls
ZS53cml0aW5nTW9kZSgpICE9IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSkKKyAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNOb3RUb3BUb0JvdHRvbSwgcmVhc29u
cywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlmIChzdHlsZS5saW5lQnJlYWsoKSAhPSBMaW5lQnJl
YWs6OkF1dG8pCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hh
c0xpbmVCcmVhaywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlmIChzdHlsZS51bmlj
b2RlQmlkaSgpICE9IFVCTm9ybWFsKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZf
TkVFREVEKEZsb3dIYXNOb25Ob3JtYWxVbmljb2RlQmlEaSwgcmVhc29ucywgaW5jbHVkZVJlYXNv
bnMpOworICAgIGlmIChzdHlsZS5ydGxPcmRlcmluZygpICE9IE9yZGVyOjpMb2dpY2FsKQorICAg
ICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNSVExPcmRlcmluZywg
cmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlmIChzdHlsZS5saW5lQWxpZ24oKSAhPSBM
aW5lQWxpZ246Ok5vbmUpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
Rmxvd0hhc0xpbmVBbGlnbkVkZ2VzLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYg
KHN0eWxlLmxpbmVTbmFwKCkgIT0gTGluZVNuYXA6Ok5vbmUpCisgICAgICAgIFNFVF9SRUFTT05f
QU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0xpbmVTbmFwLCByZWFzb25zLCBpbmNsdWRlUmVh
c29ucyk7CisgICAgaWYgKHN0eWxlLnRleHRFbXBoYXNpc0ZpbGwoKSAhPSBUZXh0RW1waGFzaXNG
aWxsOjpGaWxsZWQgfHwgc3R5bGUudGV4dEVtcGhhc2lzTWFyaygpICE9IFRleHRFbXBoYXNpc01h
cms6Ok5vbmUpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hh
c1RleHRFbXBoYXNpc0ZpbGxPck1hcmssIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBp
ZiAoc3R5bGUudGV4dFNoYWRvdygpKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZf
TkVFREVEKEZsb3dIYXNUZXh0U2hhZG93LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAg
aWYgKHN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpGaXJzdExpbmUpKQorICAgICAgICBT
RVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNQc2V1ZG9GaXJzdExpbmUsIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNl
dWRvSWQ6OkZpcnN0TGV0dGVyKSkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93SGFzUHNldWRvRmlyc3RMZXR0ZXIsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsK
KyAgICBpZiAoc3R5bGUuaGFzVGV4dENvbWJpbmUoKSkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRf
UkVUVVJOX0lGX05FRURFRChGbG93SGFzVGV4dENvbWJpbmUsIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKKyAgICBpZiAoc3R5bGUuYmFja2dyb3VuZENsaXAoKSA9PSBGaWxsQm94OjpUZXh0KQor
ICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNUZXh0RmlsbEJv
eCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlmIChzdHlsZS5ib3JkZXJGaXQoKSA9
PSBCb3JkZXJGaXQ6OkxpbmVzKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKEZsb3dIYXNCb3JkZXJGaXRMaW5lcywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAg
IGlmIChzdHlsZS5saW5lQnJlYWsoKSAhPSBMaW5lQnJlYWs6OkF1dG8pCisgICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc05vbkF1dG9MaW5lQnJlYWssIHJlYXNv
bnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoc3R5bGUubmJzcE1vZGUoKSAhPSBOQlNQTW9k
ZTo6Tm9ybWFsKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dI
YXNXZWJLaXROQlNQTW9kZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIC8vIFNwZWNp
YWwgaGFuZGxpbmcgb2YgdGV4dC1zZWN1cml0eTpkaXNjIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQg
aW4gdGhlIHNpbXBsZSBsaW5lIGxheW91dCBjb2RlIHBhdGguCisgICAgLy8gU2VlIFJlbmRlckJs
b2NrOjp1cGRhdGVTZWN1cml0eURpc2NDaGFyYWN0ZXJzLgorICAgIGlmIChzdHlsZS50ZXh0U2Vj
dXJpdHkoKSAhPSBUZXh0U2VjdXJpdHk6Ok5vbmUpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JF
VFVSTl9JRl9ORUVERUQoRmxvd0hhc1RleHRTZWN1cml0eSwgcmVhc29ucywgaW5jbHVkZVJlYXNv
bnMpOworICAgIGlmIChzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0bykgeworICAgICAg
ICBhdXRvIHRleHRSZWFzb25zID0gY2FuVXNlRm9yVGV4dChzdHlsZS5oeXBoZW5TdHJpbmcoKSwg
c3R5bGUuZm9udENhc2NhZGUoKSwgV1RGOjpudWxsb3B0LCBmYWxzZSwgaW5jbHVkZVJlYXNvbnMp
OworICAgICAgICBpZiAodGV4dFJlYXNvbnMpCisgICAgICAgICAgICBBRERfUkVBU09OU19BTkRf
UkVUVVJOX0lGX05FRURFRCh0ZXh0UmVhc29ucywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwor
ICAgIH0KKyAgICByZXR1cm4gcmVhc29uczsKK30KKworT3B0aW9uU2V0PEF2b2lkYW5jZVJlYXNv
bj4gY2FuVXNlRm9yTGluZUxheW91dFdpdGhSZWFzb24oY29uc3QgUmVuZGVyQmxvY2tGbG93JiBm
bG93LCBJbmNsdWRlUmVhc29ucyBpbmNsdWRlUmVhc29ucykKK3sKKyAgICBPcHRpb25TZXQ8QXZv
aWRhbmNlUmVhc29uPiByZWFzb25zOworICAgIC8vIEZJWE1FOiBGb3IgdGVzdHMgdGhhdCBkaXNh
YmxlIFNMTCBhbmQgZXhwZWN0IHRvIGdldCBDTEwuCisgICAgaWYgKCFmbG93LnNldHRpbmdzKCku
c2ltcGxlTGluZUxheW91dEVuYWJsZWQoKSkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChGZWF0dXJlSXNEaXNhYmxlZCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwor
ICAgIGlmICghZmxvdy5wYXJlbnQoKSkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChGbG93SGFzTm9QYXJlbnQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBp
ZiAoIWZsb3cuZmlyc3RDaGlsZCgpKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZf
TkVFREVEKEZsb3dIYXNOb0NoaWxkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYg
KGZsb3cuZnJhZ21lbnRlZEZsb3dTdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6Tm90SW5zaWRlRnJh
Z21lbnRlZEZsb3cpIHsKKyAgICAgICAgYXV0byogZnJhZ21lbnRlZEZsb3cgPSBmbG93LmVuY2xv
c2luZ0ZyYWdtZW50ZWRGbG93KCk7CisgICAgICAgIGlmICghaXM8UmVuZGVyTXVsdGlDb2x1bW5G
bG93PihmcmFnbWVudGVkRmxvdykpCisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dJc0luc2lkZUFOb25NdWx0aUNvbHVtblRocmVhZCwgcmVhc29ucywgaW5j
bHVkZVJlYXNvbnMpOworICAgICAgICBhdXRvJiBjb2x1bW5UaHJlYWQgPSBkb3duY2FzdDxSZW5k
ZXJNdWx0aUNvbHVtbkZsb3c+KCpmcmFnbWVudGVkRmxvdyk7CisgICAgICAgIGlmIChjb2x1bW5U
aHJlYWQucGFyZW50KCkgIT0gJmZsb3cudmlldygpKQorICAgICAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChNdWx0aUNvbHVtbkZsb3dJc05vdFRvcExldmVsLCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7CisgICAgICAgIGlmIChjb2x1bW5UaHJlYWQuaGFzQ29sdW1uU3Bh
bm5lcigpKQorICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChNdWx0
aUNvbHVtbkZsb3dIYXNDb2x1bW5TcGFubmVyLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Cisg
ICAgICAgIGF1dG8mIHN0eWxlID0gZmxvdy5zdHlsZSgpOworICAgICAgICBpZiAoc3R5bGUudmVy
dGljYWxBbGlnbigpICE9IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lKQorICAgICAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChNdWx0aUNvbHVtbkZsb3dWZXJ0aWNhbEFsaWdu
LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgICAgIGlmIChzdHlsZS5pc0Zsb2F0aW5n
KCkpCisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKE11bHRpQ29s
dW1uRmxvd0lzRmxvYXRpbmcsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICB9CisgICAg
aWYgKCFmbG93LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgICAgIFNFVF9SRUFTT05f
QU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0hvcml6b25hbFdyaXRpbmdNb2RlLCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYgKGZsb3cuaGFzT3V0bGluZSgpKQorICAgICAgICBT
RVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNPdXRsaW5lLCByZWFzb25zLCBp
bmNsdWRlUmVhc29ucyk7CisgICAgaWYgKGZsb3cuaXNSdWJ5VGV4dCgpIHx8IGZsb3cuaXNSdWJ5
QmFzZSgpKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc1J1
YnksIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoIWZsb3cuc3R5bGUoKS5oYW5n
aW5nUHVuY3R1YXRpb24oKS5pc0VtcHR5KCkpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVS
Tl9JRl9ORUVERUQoRmxvd0hhc0hhbmdpbmdQdW5jdHVhdGlvbiwgcmVhc29ucywgaW5jbHVkZVJl
YXNvbnMpOworCisgICAgLy8gUHJpbnRpbmcgZG9lcyBwYWdpbmF0aW9uIHdpdGhvdXQgYSBmbG93
IHRocmVhZC4KKyAgICBpZiAoZmxvdy5kb2N1bWVudCgpLnBhZ2luYXRlZCgpKQorICAgICAgICBT
RVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc1BhZ2luYXRlZCwgcmVhc29ucywg
aW5jbHVkZVJlYXNvbnMpOworICAgIGlmIChmbG93LmZpcnN0TGluZUJsb2NrKCkpCisgICAgICAg
IFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1BzZXVkb0ZpcnN0TGluZSwg
cmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlmIChmbG93LmlzQW5vbnltb3VzQmxvY2so
KSAmJiBmbG93LnBhcmVudCgpLT5zdHlsZSgpLnRleHRPdmVyZmxvdygpID09IFRleHRPdmVyZmxv
dzo6RWxsaXBzaXMpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxv
d0hhc1RleHRPdmVyZmxvdywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlmIChmbG93
LnBhcmVudCgpLT5pc0RlcHJlY2F0ZWRGbGV4aWJsZUJveCgpKQorICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc0RlcHJpY2F0ZWRGbGV4Qm94LCByZWFzb25zLCBp
bmNsdWRlUmVhc29ucyk7CisgICAgLy8gRklYTUU6IFBsYWNlaG9sZGVycyBkbyBzb21ldGhpbmcg
c3RyYW5nZS4KKyAgICBpZiAoaXM8UmVuZGVyVGV4dENvbnRyb2w+KCpmbG93LnBhcmVudCgpKSAm
JiBkb3duY2FzdDxSZW5kZXJUZXh0Q29udHJvbD4oKmZsb3cucGFyZW50KCkpLnRleHRGb3JtQ29u
dHJvbEVsZW1lbnQoKS5wbGFjZWhvbGRlckVsZW1lbnQoKSkKKyAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChGbG93UGFyZW50SXNQbGFjZWhvbGRlckVsZW1lbnQsIHJlYXNv
bnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50YXRpb24gb2Ygd3Jh
cD1oYXJkIGxvb2tzIGludG8gbGluZWJveGVzLgorICAgIGlmIChmbG93LnBhcmVudCgpLT5pc1Rl
eHRBcmVhKCkgJiYgZmxvdy5wYXJlbnQoKS0+ZWxlbWVudCgpLT5oYXNBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6d3JhcEF0dHIpKQorICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dQYXJlbnRJc1RleHRBcmVhV2l0aFdyYXBwaW5nLCBy
ZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgLy8gVGhpcyBjdXJyZW50bHkgY292ZXJzIDxi
bG9ja2Zsb3c+I3RleHQ8L2Jsb2NrZmxvdz4sIDxibG9ja2Zsb3c+I3RleHQ8YnI+PC9ibG9ja2Zs
b3c+IGFuZCBtdXRpcGxlIChzaWJsaW5nKSBSZW5kZXJUZXh0IGNhc2VzLgorICAgIC8vIFRoZSA8
YmxvY2tmbG93PjxpbmxpbmU+I3RleHQ8L2lubGluZT48L2Jsb2NrZmxvdz4gY2FzZSBpcyBhbHNv
IHBvcHVsYXIgYW5kIHNob3VsZCBiZSByZWxhdGl2ZWx5IGVhc3kgdG8gY292ZXIuCisgICAgZm9y
IChjb25zdCBhdXRvKiBjaGlsZCA9IGZsb3cuZmlyc3RDaGlsZCgpOyBjaGlsZDspIHsKKyAgICAg
ICAgaWYgKGNoaWxkLT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0
U3RhdGU6Ok5vbmUpCisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVE
KEZsb3dDaGlsZElzU2VsZWN0ZWQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAgICAg
aWYgKGlzPFJlbmRlclRleHQ+KCpjaGlsZCkpIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHJl
bmRlclRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqY2hpbGQpOworICAgICAgICAgICAgaWYg
KHJlbmRlclRleHQudGV4dE5vZGUoKSAmJiAhcmVuZGVyVGV4dC5kb2N1bWVudCgpLm1hcmtlcnMo
KS5tYXJrZXJzRm9yKCpyZW5kZXJUZXh0LnRleHROb2RlKCkpLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJbmNsdWRlc0RvY3Vt
ZW50TWFya2VycywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgICAgICAgICAgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisgICAgICAgIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KGNoaWxkKSAmJiAhZG93bmNhc3Q8UmVu
ZGVyTGluZUJyZWFrPigqY2hpbGQpLmlzV0JSKCkgJiYgY2hpbGQtPnN0eWxlKCkuY2xlYXIoKSA9
PSBDbGVhcjo6Tm9uZSkgeworICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIFNFVF9SRUFTT05f
QU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc05vblN1cHBvcnRlZENoaWxkLCByZWFzb25zLCBp
bmNsdWRlUmVhc29ucyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBhdXRvIHN0eWxlUmVh
c29ucyA9IGNhblVzZUZvclN0eWxlKGZsb3cuc3R5bGUoKSwgaW5jbHVkZVJlYXNvbnMpOworICAg
IGlmIChzdHlsZVJlYXNvbnMpCisgICAgICAgIEFERF9SRUFTT05TX0FORF9SRVRVUk5fSUZfTkVF
REVEKHN0eWxlUmVhc29ucywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIC8vIFdlIGNh
bid0IHVzZSB0aGUgY29kZSBwYXRoIGlmIGFueSBsaW5lcyB3b3VsZCBuZWVkIHRvIGJlIHNoaWZ0
ZWQgYmVsb3cgZmxvYXRzLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZG9uJ3Qga2VlcCBwZXItbGluZSB5
IGNvb3JkaW5hdGVzLgorICAgIGlmIChmbG93LmNvbnRhaW5zRmxvYXRzKCkpIHsKKyAgICAgICAg
ZmxvYXQgbWluaW11bVdpZHRoTmVlZGVkID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1h
eCgpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRleHRSZW5kZXJlciA6IGNoaWxkcmVuT2ZU
eXBlPFJlbmRlclRleHQ+KGZsb3cpKSB7CisgICAgICAgICAgICBtaW5pbXVtV2lkdGhOZWVkZWQg
PSBzdGQ6Om1pbihtaW5pbXVtV2lkdGhOZWVkZWQsIHRleHRSZW5kZXJlci5taW5Mb2dpY2FsV2lk
dGgoKSk7CisKKyAgICAgICAgICAgIGZvciAoYXV0byYgZmxvYXRpbmdPYmplY3QgOiAqZmxvdy5m
bG9hdGluZ09iamVjdFNldCgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGZsb2F0aW5nT2Jq
ZWN0KTsKKyAgICAgICAgICAgICAgICAvLyBpZiBhIGZsb2F0IGhhcyBhIHNoYXBlLCB3ZSBjYW5u
b3QgdGVsbCBpZiBjb250ZW50IHdpbGwgbmVlZCB0byBiZSBzaGlmdGVkIHVudGlsIGFmdGVyIHdl
IGxheSBpdCBvdXQsCisgICAgICAgICAgICAgICAgLy8gc2luY2UgdGhlIGFtb3VudCBvZiBzcGFj
ZSBpcyBub3QgdW5pZm9ybSBmb3IgdGhlIGhlaWdodCBvZiB0aGUgZmxvYXQuCisgICAgICAgICAg
ICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLnNoYXBlT3V0c2lkZUluZm8oKSkK
KyAgICAgICAgICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93
SGFzVW5zdXBwb3J0ZWRGbG9hdCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgICAgICAg
ICAgICAgIGZsb2F0IGF2YWlsYWJsZVdpZHRoID0gZmxvdy5hdmFpbGFibGVMb2dpY2FsV2lkdGhG
b3JMaW5lKGZsb2F0aW5nT2JqZWN0LT55KCksIERvTm90SW5kZW50VGV4dCk7CisgICAgICAgICAg
ICAgICAgaWYgKGF2YWlsYWJsZVdpZHRoIDwgbWluaW11bVdpZHRoTmVlZGVkKQorICAgICAgICAg
ICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNVbnN1cHBv
cnRlZEZsb2F0LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgYXV0byBmb250QW5kVGV4dFJlYXNvbnMgPSBjYW5Vc2VGb3JGb250
QW5kVGV4dChmbG93LCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYgKGZvbnRBbmRUZXh0UmVhc29u
cykKKyAgICAgICAgQUREX1JFQVNPTlNfQU5EX1JFVFVSTl9JRl9ORUVERUQoZm9udEFuZFRleHRS
ZWFzb25zLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgcmV0dXJuIHJlYXNvbnM7Cit9
CisKK2Jvb2wgY2FuVXNlRm9yTGluZUxheW91dChjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cp
Cit7CisgICAgcmV0dXJuIGNhblVzZUZvckxpbmVMYXlvdXRXaXRoUmVhc29uKGZsb3csIEluY2x1
ZGVSZWFzb25zOjpGaXJzdCkuaXNFbXB0eSgpOworfQorCitib29sIGNhblVzZUZvckxpbmVMYXlv
dXRBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2tDb250YWluZXIs
IFN0eWxlRGlmZmVyZW5jZSBkaWZmKQoreworICAgIHN3aXRjaCAoZGlmZikgeworICAgIGNhc2Ug
U3R5bGVEaWZmZXJlbmNlOjpFcXVhbDoKKyAgICBjYXNlIFN0eWxlRGlmZmVyZW5jZTo6UmVjb21w
b3NpdGVMYXllcjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBTdHlsZURpZmZlcmVu
Y2U6OlJlcGFpbnQ6CisgICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OlJlcGFpbnRJZlRleHRPckJv
cmRlck9yT3V0bGluZToKKyAgICBjYXNlIFN0eWxlRGlmZmVyZW5jZTo6UmVwYWludExheWVyOgor
ICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgZG8gYSBtb3JlIGZvY3VzZWQgc3R5bGUgY2hlY2sg
YnkgbWF0Y2hpbmcgUmVuZGVyZXJTdHlsZTo6Y2hhbmdlUmVxdWlyZXNSZXBhaW50JmNvLgorICAg
ICAgICByZXR1cm4gY2FuVXNlRm9yU3R5bGUoYmxvY2tDb250YWluZXIuc3R5bGUoKSwgSW5jbHVk
ZVJlYXNvbnM6OkZpcnN0KS5pc0VtcHR5KCk7CisgICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6Okxh
eW91dFBvc2l0aW9uZWRNb3ZlbWVudE9ubHk6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNh
c2UgU3R5bGVEaWZmZXJlbmNlOjpTaW1wbGlmaWVkTGF5b3V0OgorICAgIGNhc2UgU3R5bGVEaWZm
ZXJlbmNlOjpTaW1wbGlmaWVkTGF5b3V0QW5kUG9zaXRpb25lZE1vdmVtZW50OgorICAgICAgICBy
ZXR1cm4gY2FuVXNlRm9yU3R5bGUoYmxvY2tDb250YWluZXIuc3R5bGUoKSwgSW5jbHVkZVJlYXNv
bnM6OkZpcnN0KS5pc0VtcHR5KCk7CisgICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OkxheW91dDoK
KyAgICBjYXNlIFN0eWxlRGlmZmVyZW5jZTo6TmV3U3R5bGU6CisgICAgICAgIHJldHVybiBjYW5V
c2VGb3JMaW5lTGF5b3V0KGJsb2NrQ29udGFpbmVyKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIGNhblVzZUZvckxpbmVMYXlvdXQoYmxvY2tDb250YWluZXIp
OworfQorCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yYmVkYzNhNWY4ZGQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRp
b25Db3ZlcmFnZS5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIlJl
bmRlclN0eWxlQ29uc3RhbnRzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVu
ZGVyQmxvY2tGbG93OworCituYW1lc3BhY2UgTGF5b3V0SW50ZWdyYXRpb24geworCitlbnVtIGNs
YXNzIEF2b2lkYW5jZVJlYXNvbiA6IHVpbnQ2NF90IHsKKyAgICBGbG93SXNJbnNpZGVBTm9uTXVs
dGlDb2x1bW5UaHJlYWQgICAgID0gMUxMVSAgPDwgMCwKKyAgICBGbG93SGFzSG9yaXpvbmFsV3Jp
dGluZ01vZGUgICAgICAgICAgID0gMUxMVSAgPDwgMSwKKyAgICBGbG93SGFzT3V0bGluZSAgICAg
ICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMiwKKyAgICBGbG93SXNSdWJ5ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMywKKyAgICBGbG93SXNQYWdpbmF0ZWQgICAg
ICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNCwKKyAgICBGbG93SGFzVGV4dE92ZXJmbG93
ICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNSwKKyAgICBGbG93SXNEZXByaWNhdGVkRmxl
eEJveCAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNiwKKyAgICBGbG93UGFyZW50SXNQbGFjZWhv
bGRlckVsZW1lbnQgICAgICAgID0gMUxMVSAgPDwgNywKKyAgICBGbG93UGFyZW50SXNUZXh0QXJl
YVdpdGhXcmFwcGluZyAgICAgID0gMUxMVSAgPDwgOCwKKyAgICBGbG93SGFzTm9uU3VwcG9ydGVk
Q2hpbGQgICAgICAgICAgICAgID0gMUxMVSAgPDwgOSwKKyAgICBGbG93SGFzVW5zdXBwb3J0ZWRG
bG9hdCAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTAsCisgICAgRmxvd0hhc1Vuc3VwcG9ydGVk
VW5kZXJsaW5lRGVjb3JhdGlvbiA9IDFMTFUgIDw8IDExLAorICAgIEZsb3dIYXNKdXN0aWZpZWRO
b25MYXRpblRleHQgICAgICAgICAgPSAxTExVICA8PCAxMiwKKyAgICBGbG93SGFzT3ZlcmZsb3dO
b3RWaXNpYmxlICAgICAgICAgICAgID0gMUxMVSAgPDwgMTMsCisgICAgRmxvd0hhc1dlYktpdE5C
U1BNb2RlICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDE0LAorICAgIEZsb3dJc05vdExUUiAg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAxNSwKKyAgICBGbG93SGFzTGluZUJv
eENvbnRhaW5Qcm9wZXJ0eSAgICAgICAgID0gMUxMVSAgPDwgMTYsCisgICAgRmxvd0lzTm90VG9w
VG9Cb3R0b20gICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDE3LAorICAgIEZsb3dIYXNMaW5l
QnJlYWsgICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAxOCwKKyAgICBGbG93SGFzTm9u
Tm9ybWFsVW5pY29kZUJpRGkgICAgICAgICAgID0gMUxMVSAgPDwgMTksCisgICAgRmxvd0hhc1JU
TE9yZGVyaW5nICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDIwLAorICAgIEZsb3dIYXNM
aW5lQWxpZ25FZGdlcyAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAyMSwKKyAgICBGbG93SGFz
TGluZVNuYXAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjIsCisgICAgRmxvd0hh
c1RleHRFbXBoYXNpc0ZpbGxPck1hcmsgICAgICAgICA9IDFMTFUgIDw8IDIzLAorICAgIEZsb3dI
YXNUZXh0U2hhZG93ICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAyNCwKKyAgICBGbG93
SGFzUHNldWRvRmlyc3RMaW5lICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjUsCisgICAgRmxv
d0hhc1BzZXVkb0ZpcnN0TGV0dGVyICAgICAgICAgICAgICA9IDFMTFUgIDw8IDI2LAorICAgIEZs
b3dIYXNUZXh0Q29tYmluZSAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAyNywKKyAgICBG
bG93SGFzVGV4dEZpbGxCb3ggICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjgsCisgICAg
Rmxvd0hhc0JvcmRlckZpdExpbmVzICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDI5LAorICAg
IEZsb3dIYXNOb25BdXRvTGluZUJyZWFrICAgICAgICAgICAgICAgPSAxTExVICA8PCAzMCwKKyAg
ICBGbG93SGFzVGV4dFNlY3VyaXR5ICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzEsCisg
ICAgRmxvd0hhc1NWR0ZvbnQgICAgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDMyLAor
ICAgIEZsb3dUZXh0SXNFbXB0eSAgICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAzMywK
KyAgICBGbG93VGV4dEhhc1NvZnRIeXBoZW4gICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzQs
CisgICAgRmxvd1RleHRIYXNEaXJlY3Rpb25DaGFyYWN0ZXIgICAgICAgICA9IDFMTFUgIDw8IDM1
LAorICAgIEZsb3dJc01pc3NpbmdQcmltYXJ5Rm9udCAgICAgICAgICAgICAgPSAxTExVICA8PCAz
NiwKKyAgICBGbG93UHJpbWFyeUZvbnRJc0luc3VmZmljaWVudCAgICAgICAgID0gMUxMVSAgPDwg
MzcsCisgICAgRmxvd1RleHRJc0NvbWJpbmVUZXh0ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8
IDM4LAorICAgIEZsb3dUZXh0SXNSZW5kZXJDb3VudGVyICAgICAgICAgICAgICAgPSAxTExVICA8
PCAzOSwKKyAgICBGbG93VGV4dElzUmVuZGVyUXVvdGUgICAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgNDAsCisgICAgRmxvd1RleHRJc1RleHRGcmFnbWVudCAgICAgICAgICAgICAgICA9IDFMTFUg
IDw8IDQxLAorICAgIEZsb3dUZXh0SXNTVkdJbmxpbmVUZXh0ICAgICAgICAgICAgICAgPSAxTExV
ICA8PCA0MiwKKyAgICBGbG93SGFzQ29tcGxleEZvbnRDb2RlUGF0aCAgICAgICAgICAgID0gMUxM
VSAgPDwgNDMsCisgICAgRmVhdHVyZUlzRGlzYWJsZWQgICAgICAgICAgICAgICAgICAgICA9IDFM
TFUgIDw8IDQ0LAorICAgIEZsb3dIYXNOb1BhcmVudCAgICAgICAgICAgICAgICAgICAgICAgPSAx
TExVICA8PCA0NSwKKyAgICBGbG93SGFzTm9DaGlsZCAgICAgICAgICAgICAgICAgICAgICAgID0g
MUxMVSAgPDwgNDYsCisgICAgRmxvd0NoaWxkSXNTZWxlY3RlZCAgICAgICAgICAgICAgICAgICA9
IDFMTFUgIDw8IDQ3LAorICAgIEZsb3dIYXNIYW5naW5nUHVuY3R1YXRpb24gICAgICAgICAgICAg
PSAxTExVICA8PCA0OCwKKyAgICBGbG93Rm9udEhhc092ZXJmbG93R2x5cGggICAgICAgICAgICAg
ID0gMUxMVSAgPDwgNDksCisgICAgRmxvd1RleHRIYXNTdXJyb2dhdGVQYWlyICAgICAgICAgICAg
ICA9IDFMTFUgIDw8IDUwLAorICAgIE11bHRpQ29sdW1uRmxvd0lzTm90VG9wTGV2ZWwgICAgICAg
ICAgPSAxTExVICA8PCA1MSwKKyAgICBNdWx0aUNvbHVtbkZsb3dIYXNDb2x1bW5TcGFubmVyICAg
ICAgID0gMUxMVSAgPDwgNTIsCisgICAgTXVsdGlDb2x1bW5GbG93VmVydGljYWxBbGlnbiAgICAg
ICAgICA9IDFMTFUgIDw8IDUzLAorICAgIE11bHRpQ29sdW1uRmxvd0lzRmxvYXRpbmcgICAgICAg
ICAgICAgPSAxTExVICA8PCA1NCwKKyAgICBGbG93SW5jbHVkZXNEb2N1bWVudE1hcmtlcnMgICAg
ICAgICAgID0gMUxMVSAgPDwgNTUsCisgICAgRW5kT2ZSZWFzb25zICAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDFMTFUgIDw8IDU2Cit9OworCitib29sIGNhblVzZUZvckxpbmVMYXlvdXQoY29u
c3QgUmVuZGVyQmxvY2tGbG93Jik7Citib29sIGNhblVzZUZvckxpbmVMYXlvdXRBZnRlclN0eWxl
Q2hhbmdlKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYsIFN0eWxlRGlmZmVyZW5jZSk7CisKK2VudW0g
Y2xhc3MgSW5jbHVkZVJlYXNvbnMgeyBGaXJzdCAsIEFsbCB9OworT3B0aW9uU2V0PEF2b2lkYW5j
ZVJlYXNvbj4gY2FuVXNlRm9yTGluZUxheW91dFdpdGhSZWFzb24oY29uc3QgUmVuZGVyQmxvY2tG
bG93JiwgSW5jbHVkZVJlYXNvbnMpOworCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRp
b25MaW5lTGF5b3V0LmNwcAppbmRleCAyMTk4NTE4NTA4YTQuLmYyOTk4N2QyNDM1NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9u
TGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xh
eW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRl
ICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbnZhbGlkYXRpb25TdGF0ZS5o
IgogI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdy
YXRpb25Db3ZlcmFnZS5oIgogI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5o
IgogI2luY2x1ZGUgIkxheW91dFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgi
CkBAIC02NSwyMyArNjYsMjMgQEAgTGluZUxheW91dDo6TGluZUxheW91dChjb25zdCBSZW5kZXJC
bG9ja0Zsb3cmIGZsb3cpCiAKIExpbmVMYXlvdXQ6On5MaW5lTGF5b3V0KCkgPSBkZWZhdWx0Owog
Ci1ib29sIExpbmVMYXlvdXQ6OmNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cs
IE9wdGlvbmFsPGJvb2w+IGNvdWxkVXNlU2ltcGxlTGluZUxheW91dCkKK2Jvb2wgTGluZUxheW91
dDo6aXNFbmFibGVkKCkKIHsKLSAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkubGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFi
bGVkKCk7Cit9CiAKLSAgICAvLyBJbml0aWFsbHkgb25seSBhIHN1YnNldCBvZiBTTEwgZmVhdHVy
ZXMgaXMgc3VwcG9ydGVkLgotICAgIGF1dG8gcGFzc2VzU2ltcGxlTGluZUxheW91dFRlc3QgPSB2
YWx1ZU9yQ29tcHV0ZShjb3VsZFVzZVNpbXBsZUxpbmVMYXlvdXQsIFsmXSB7Ci0gICAgICAgIHJl
dHVybiBTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VGb3IoZmxvdyk7Ci0gICAgfSk7Citib29sIExp
bmVMYXlvdXQ6OmNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCit7CisgICAg
aWYgKCFpc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHBh
c3Nlc1NpbXBsZUxpbmVMYXlvdXRUZXN0OworICAgIHJldHVybiBjYW5Vc2VGb3JMaW5lTGF5b3V0
KGZsb3cpOwogfQogCiBib29sIExpbmVMYXlvdXQ6OmNhblVzZUZvckFmdGVyU3R5bGVDaGFuZ2Uo
Y29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBTdHlsZURpZmZlcmVuY2UgZGlmZikKIHsKLSAg
ICBBU1NFUlQoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5sYXlvdXRG
b3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCgpKTsKLSAgICByZXR1cm4gU2ltcGxl
TGluZUxheW91dDo6Y2FuVXNlRm9yQWZ0ZXJTdHlsZUNoYW5nZShmbG93LCBkaWZmKTsKKyAgICBB
U1NFUlQoaXNFbmFibGVkKCkpOworICAgIHJldHVybiBjYW5Vc2VGb3JMaW5lTGF5b3V0QWZ0ZXJT
dHlsZUNoYW5nZShmbG93LCBkaWZmKTsKIH0KIAogdm9pZCBMaW5lTGF5b3V0Ojp1cGRhdGVTdHls
ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0
SW50ZWdyYXRpb25MaW5lTGF5b3V0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRp
b24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgKaW5kZXggNTEzZWQ0ZDdmY2ViLi45ZGNh
MDEyNzkyNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgKQEAgLTU1LDcgKzU1LDgg
QEAgcHVibGljOgogICAgIExpbmVMYXlvdXQoY29uc3QgUmVuZGVyQmxvY2tGbG93Jik7CiAgICAg
fkxpbmVMYXlvdXQoKTsKIAotICAgIHN0YXRpYyBib29sIGNhblVzZUZvcihjb25zdCBSZW5kZXJC
bG9ja0Zsb3cmLCBPcHRpb25hbDxib29sPiBjb3VsZFVzZVNpbXBsZUxpbmVMYXlvdXQgPSB7IH0p
OworICAgIHN0YXRpYyBib29sIGlzRW5hYmxlZCgpOworICAgIHN0YXRpYyBib29sIGNhblVzZUZv
cihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmKTsKICAgICBzdGF0aWMgYm9vbCBjYW5Vc2VGb3JBZnRl
clN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYsIFN0eWxlRGlmZmVyZW5jZSk7CiAK
ICAgICB2b2lkIHVwZGF0ZVN0eWxlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGQxMGU5OWYxNDdiZC4uODE5YTI0MjAwNDY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtNjY5LDEyICs2
NjksMTEgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm9vbCBy
ZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiBtYXgKIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojps
YXlvdXRJbmxpbmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJl
cGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRvbSkKIHsKICAg
ICBhdXRvIGNvbXB1dGVMaW5lTGF5b3V0UGF0aCA9IFsmXSB7Ci0gICAgICAgIGJvb2wgY2FuVXNl
U2ltcGxlTGluZXMgPSBTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VGb3IoKnRoaXMpOwogI2lmIEVO
QUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotICAgICAgICBpZiAoTGF5b3V0SW50ZWdy
YXRpb246OkxpbmVMYXlvdXQ6OmNhblVzZUZvcigqdGhpcywgY2FuVXNlU2ltcGxlTGluZXMpKQor
ICAgICAgICBpZiAoTGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNhblVzZUZvcigqdGhp
cykpCiAgICAgICAgICAgICByZXR1cm4gTGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRQYXRoOwogI2Vu
ZGlmCi0gICAgICAgIGlmIChjYW5Vc2VTaW1wbGVMaW5lcykKKyAgICAgICAgaWYgKCFMYXlvdXRJ
bnRlZ3JhdGlvbjo6TGluZUxheW91dDo6aXNFbmFibGVkKCkgJiYgU2ltcGxlTGluZUxheW91dDo6
Y2FuVXNlRm9yKCp0aGlzKSkKICAgICAgICAgICAgIHJldHVybiBTaW1wbGVMaW5lc1BhdGg7CiAK
ICAgICAgICAgcmV0dXJuIExpbmVCb3hlc1BhdGg7Cg==
</data>
<flag name="review"
          id="425171"
          type_id="1"
          status="+"
          setter="zalan"
    />
    <flag name="commit-queue"
          id="425172"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409455</attachid>
            <date>2020-09-23 02:37:00 -0700</date>
            <delta_ts>2020-09-23 04:07:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>lfc-canuse-2.patch</filename>
            <type>text/plain</type>
            <size>37535</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0ZWEwZWUxMzJhMWUuLjA4NzdhNjYxOGRkNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDM1IEBACisyMDIwLTA5LTIzICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gQWRkIGNhblVzZUZvciBmdW5jdGlvbnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjg2OQor
CisgICAgICAgIFJldmlld2VkIGJ5IFphbGFuIEJ1anRhcy4KKworICAgICAgICBDb3B5IHRoZSBT
TEwgY2FuVXNlRm9yIGNvZGUuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dEludGVncmF0aW9uOjpjYW5Vc2VGb3JDaGFyYWN0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmNhblVzZUZvclRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmNhblVzZUZvckZvbnRBbmRUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpjYW5Vc2VGb3JTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6Y2FuVXNlRm9yTGluZUxheW91dFdpdGhSZWFzb24p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmNhblVzZUZvckxpbmVMYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmNhblVzZUZvckxpbmVM
YXlvdXRBZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5oOiBBZGRlZC4KKworICAgICAgICBBbHNvIHN3aXRjaCB0
byBPcHRpb25TZXQuCisKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdy
YXRpb25MaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9u
OjpMaW5lTGF5b3V0Ojppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246OkxpbmVMYXlvdXQ6OmNhblVzZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJ
bnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y2FuVXNlRm9yQWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAg
ICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNhblVzZUZv
cik6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dElubGluZUNoaWxkcmVuKToK
KwogMjAyMC0wOS0yMiAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAg
ICAgV2ViIEluc3BlY3RvcjogQ2hhbmdlIGBJbnNwZWN0b3JBbmltYXRpb25BZ2VudC0+c3RhcnRU
cmFja2luZ2AgdG8gbm90IGVycm9yIG9uIHJlcGVhdGVkIGNhbGxzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4
IDE4ZWQxNzNkODk0Ni4uYTQzZmI5NzFjMDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTQ1NSw2ICsx
NDU1LDcgQEAgbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCiBs
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHAKIGxheW91dC9pbmxpbmVm
b3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwCiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50
ZWdyYXRpb25Cb3hUcmVlLmNwcAorbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9u
Q292ZXJhZ2UuY3BwCiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5
b3V0LmNwcAogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5j
cHAKIGxheW91dC9pbnZhbGlkYXRpb24vSW52YWxpZGF0aW9uQ29udGV4dC5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3Zjg3
MzU4MzUyYmUuLjgxYzYxMDM3YjIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDk3NSw2ICs0OTc1LDggQEAKIAkJRTNGQTM4
NjQxRDcxODEyRDAwQUE1OTUwIC8qIFBlbmRpbmdTY3JpcHRDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzRkEzODYxMUQ3MTZFNzYwMEFBNTk1
MCAvKiBQZW5kaW5nU2NyaXB0Q2xpZW50LmggKi87IH07CiAJCUU0MDFDMjc1MTdDRTUzRUMwMEM0
MUEzNSAvKiBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDAxQzI3NDE3Q0U1M0VDMDBDNDFBMzUgLyogRWxl
bWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUU0MDFFMEE0MUMzQzBCODMwMEYzNEQxMCAvKiBTdHlsZUNoYW5n
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQwMUUw
QTMxQzNDMEI4MzAwRjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTQwM0I3QTIyNTFCMTE5MzAwMTlFODAwIC8q
IExheW91dEludGVncmF0aW9uQ292ZXJhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0MDNCN0ExMjUxQjExOTMwMDE5RTgwMCAvKiBMYXlvdXRJbnRl
Z3JhdGlvbkNvdmVyYWdlLmggKi87IH07CisJCUU0MDNCN0EzMjUxQjExQzEwMDE5RTgwMCAvKiBM
YXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0MzEyQUI3MjRCMzI2NTYwMDY3ODM0OSAvKiBMYXlvdXRJbnRl
Z3JhdGlvblBhZ2luYXRpb24uaCAqLzsgfTsKIAkJRTQxODAyNTUyM0Q0NTQ5QjAwRkZCMDcxIC8q
IExheW91dEludGVncmF0aW9uQm94VHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTQxODAyNTMyM0Q0NTQ5QTAwRkZCMDcxIC8qIExheW91dEludGVn
cmF0aW9uQm94VHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUU0MTkwNDFGMUNDNjQ4NkIwMEMzNUY1RCAvKiBGb250U2VsZWN0b3JDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MTkwNDFF
MUNDNjQ4NkIwMEMzNUY1RCAvKiBGb250U2VsZWN0b3JDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDIwNTAxNzIxNDE5MDFCMDA2NkVG
M0IgLyogUHJvY2Vzc1dhcm1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0MjA1MDE0MjE0MTkwMUEwMDY2RUYzQiAvKiBQcm9jZXNzV2FybWluZy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNTgx
NCw2ICsxNTgxNiw4IEBACiAJCUU0MDFDMjc0MTdDRTUzRUMwMEM0MUEzNSAvKiBFbGVtZW50SXRl
cmF0b3JBc3NlcnRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1l
bnRJdGVyYXRvckFzc2VydGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQw
MUUwQTMxQzNDMEI4MzAwRjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN0eWxlQ2hhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0MDFFMEE1MUMzQzBDRjcwMEYzNEQxMCAvKiBTdHlsZUNoYW5nZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUNoYW5nZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUU0MDNCNzlGMjUxQjExOEIwMDE5RTgwMCAvKiBMYXlvdXRJbnRl
Z3JhdGlvbkNvdmVyYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dEludGVncmF0aW9u
Q292ZXJhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDAzQjdBMTI1MUIx
MTkzMDAxOUU4MDAgLyogTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MDZGM0ZCMTE5ODMwN0QwMDlENTlENiAvKiBDb2xvckRh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ29sb3JEYXRhLmNw
cDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvQ29sb3JEYXRhLmNwcDsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJRTQxODAyNTMyM0Q0NTQ5QTAwRkZCMDcxIC8q
IExheW91dEludGVncmF0aW9uQm94VHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTQxODAyNTYyM0Q0NTRCNTAwRkZCMDcxIC8qIExheW91dEludGVncmF0aW9uQm94VHJl
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg0NDMsMTIgKzI4NDQ3LDE0IEBACiAJCUU0
RkI0QjFFMjM5NTM1NkYwMDNDMzM2QSAvKiBpbnRlZ3JhdGlvbiAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJRTQzMTJBQjUyNEIzMjY1NjAwNjc4MzQ5IC8q
IExheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHAgKi8sCi0JCQkJRTQzMTJBQjcyNEIzMjY1
NjAwNjc4MzQ5IC8qIExheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5oICovLAogCQkJCUU0MTgw
MjU2MjNENDU0QjUwMEZGQjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuY3BwICovLAog
CQkJCUU0MTgwMjUzMjNENDU0OUEwMEZGQjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUu
aCAqLywKKwkJCQlFNDAzQjc5RjI1MUIxMThCMDAxOUU4MDAgLyogTGF5b3V0SW50ZWdyYXRpb25D
b3ZlcmFnZS5jcHAgKi8sCisJCQkJRTQwM0I3QTEyNTFCMTE5MzAwMTlFODAwIC8qIExheW91dElu
dGVncmF0aW9uQ292ZXJhZ2UuaCAqLywKIAkJCQlFNEFCQUJERTIzNjA4OTNEMDBGQTQzNDUgLyog
TGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcCAqLywKIAkJCQlFNEFCQUJEQjIzNjA4OEZE
MDBGQTQzNDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmggKi8sCisJCQkJRTQzMTJB
QjUyNEIzMjY1NjAwNjc4MzQ5IC8qIExheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHAgKi8s
CisJCQkJRTQzMTJBQjcyNEIzMjY1NjAwNjc4MzQ5IC8qIExheW91dEludGVncmF0aW9uUGFnaW5h
dGlvbi5oICovLAogCQkJKTsKIAkJCXBhdGggPSBpbnRlZ3JhdGlvbjsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CkBAIC0zMjc4Myw2ICszMjc4OSw3IEBACiAJCQkJQjIyMjc5NjUwRDAwQkYy
MjAwNzFCNzgyIC8qIExpbmVhckdyYWRpZW50QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQUIzMUM5MUUxMEFFMUI4RTAwMEM3QjkyIC8qIExpbmVDbGFtcFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRkVGQUIyQTE4MzgwREEwMDA1MTQ1MzQgLyogTGluZUxheW91dFN0YXRlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlFNDAzQjdBMjI1MUIxMTkzMDAxOUU4MDAgLyogTGF5b3V0SW50
ZWdyYXRpb25Db3ZlcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ4NEEzM0UyMzA1NTMyNTAw
OUFERTZBIC8qIExpbmVMYXlvdXRUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MzQz
RDI1MjM5Mjc3OTAwMEVCQkI2NiAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsQ29tcGxleFBhdGguaCBp
biBIZWFkZXJzICovLAogCQkJCUU0NTFDNjI4MjM5MjkzRUMwMDk5MzE5MCAvKiBMaW5lTGF5b3V0
VHJhdmVyc2FsRGlzcGxheVJ1blBhdGguaCBpbiBIZWFkZXJzICovLApAQCAtMzM2NTEsNiArMzM2
NTgsNyBAQAogCQkJCTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDBEN0E4MTcxMzZFQTcwMDc3Q0UwNSAvKiBTY3JpcHRX
cmFwcGFibGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhBRTM0RjEyRUEwOTZBMDBF
QjNBRTYgLyogU2Nyb2xsYWJsZUFyZWEuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0MDNCN0EzMjUx
QjExQzEwMDE5RTgwMCAvKiBMYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVEOTI1QjY4MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmlt
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNzc0ODAxMzc4Qjc3MjAwOURBNzZBIC8qIFNj
cm9sbEFuaW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjcwMzk2NDY5MGE3
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmNwcApAQCAtMCwwICsxLDM3NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9u
Q292ZXJhZ2UuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgorI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgorI2luY2x1ZGUgIlJlbmRlck11bHRpQ29s
dW1uRmxvdy5oIgorI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCisjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRl
ICJTZXR0aW5ncy5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisK
KyNpZm5kZWYgTkRFQlVHCisjZGVmaW5lIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
cmVhc29uLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucykgeyBcCisgICAgICAgIHJlYXNvbnMuYWRk
KEF2b2lkYW5jZVJlYXNvbjo6cmVhc29uKTsgXAorICAgICAgICBpZiAoaW5jbHVkZVJlYXNvbnMg
PT0gSW5jbHVkZVJlYXNvbnM6OkZpcnN0KSBcCisgICAgICAgICAgICByZXR1cm4gcmVhc29uczsg
XAorICAgIH0KKyNlbHNlCisjZGVmaW5lIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
cmVhc29uLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucykgeyBcCisgICAgICAgIEFTU0VSVF9VTlVT
RUQoaW5jbHVkZVJlYXNvbnMsIGluY2x1ZGVSZWFzb25zID09IEluY2x1ZGVSZWFzb25zOjpGaXJz
dCk7IFwKKyAgICAgICAgcmVhc29ucy5hZGQoQXZvaWRhbmNlUmVhc29uOjpyZWFzb24pOyBcCisg
ICAgICAgIHJldHVybiByZWFzb25zOyBcCisgICAgfQorI2VuZGlmCisKKyNpZm5kZWYgTkRFQlVH
CisjZGVmaW5lIEFERF9SRUFTT05TX0FORF9SRVRVUk5fSUZfTkVFREVEKG5ld1JlYXNvbnMsIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKSB7IFwKKyAgICAgICAgcmVhc29ucy5hZGQobmV3UmVhc29u
cyk7IFwKKyAgICAgICAgaWYgKGluY2x1ZGVSZWFzb25zID09IEluY2x1ZGVSZWFzb25zOjpGaXJz
dCkgXAorICAgICAgICAgICAgcmV0dXJuIHJlYXNvbnM7IFwKKyAgICB9CisjZWxzZQorI2RlZmlu
ZSBBRERfUkVBU09OU19BTkRfUkVUVVJOX0lGX05FRURFRChuZXdSZWFzb25zLCByZWFzb25zLCBp
bmNsdWRlUmVhc29ucykgeyBcCisgICAgICAgIEFTU0VSVF9VTlVTRUQoaW5jbHVkZVJlYXNvbnMs
IGluY2x1ZGVSZWFzb25zID09IEluY2x1ZGVSZWFzb25zOjpGaXJzdCk7IFwKKyAgICAgICAgcmVh
c29ucy5hZGQobmV3UmVhc29ucyk7IFwKKyAgICAgICAgcmV0dXJuIHJlYXNvbnM7IFwKKyAgICB9
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dEludGVncmF0
aW9uIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvblNldDxBdm9p
ZGFuY2VSZWFzb24+IGNhblVzZUZvckNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlLCBib29sIHRleHRJ
c0p1c3RpZmllZCwgSW5jbHVkZVJlYXNvbnMpOworCit0ZW1wbGF0ZTw+IE9wdGlvblNldDxBdm9p
ZGFuY2VSZWFzb24+IGNhblVzZUZvckNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIsIGJvb2wgdGV4
dElzSnVzdGlmaWVkLCBJbmNsdWRlUmVhc29ucyBpbmNsdWRlUmVhc29ucykKK3sKKyAgICBPcHRp
b25TZXQ8QXZvaWRhbmNlUmVhc29uPiByZWFzb25zOworICAgIGlmICh0ZXh0SXNKdXN0aWZpZWQp
IHsKKyAgICAgICAgLy8gSW5jbHVkZSBjaGFyYWN0ZXJzIHVwIHRvIExhdGluIEV4dGVuZGVkLUIg
YW5kIHNvbWUgcHVuY3R1YXRpb24gcmFuZ2Ugd2hlbiB0ZXh0IGlzIGp1c3RpZmllZC4KKyAgICAg
ICAgYm9vbCBpc0xhdGluSW5jbHVkaW5nRXh0ZW5kZWRCID0gY2hhcmFjdGVyIDw9IDB4MDFGRjsK
KyAgICAgICAgYm9vbCBpc1B1bmN0dWF0aW9uUmFuZ2UgPSBjaGFyYWN0ZXIgPj0gMHgyMDEwICYm
IGNoYXJhY3RlciA8PSAweDIwMjc7CisgICAgICAgIGlmICghKGlzTGF0aW5JbmNsdWRpbmdFeHRl
bmRlZEIgfHwgaXNQdW5jdHVhdGlvblJhbmdlKSkKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5E
X1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0p1c3RpZmllZE5vbkxhdGluVGV4dCwgcmVhc29ucywg
aW5jbHVkZVJlYXNvbnMpOworICAgIH0KKworICAgIGlmIChVMTZfSVNfU1VSUk9HQVRFKGNoYXJh
Y3RlcikpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRI
YXNTdXJyb2dhdGVQYWlyLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisKKyAgICBVQ2hhckRp
cmVjdGlvbiBkaXJlY3Rpb24gPSB1X2NoYXJEaXJlY3Rpb24oY2hhcmFjdGVyKTsKKyAgICBpZiAo
ZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVCB8fCBkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19M
RUZUX0FSQUJJQworICAgICAgICB8fCBkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX0VNQkVE
RElORyB8fCBkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFCisgICAgICAgIHx8
IGRpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HIHx8IGRpcmVjdGlvbiA9PSBV
X0xFRlRfVE9fUklHSFRfT1ZFUlJJREUKKyAgICAgICAgfHwgZGlyZWN0aW9uID09IFVfUE9QX0RJ
UkVDVElPTkFMX0ZPUk1BVCB8fCBkaXJlY3Rpb24gPT0gVV9CT1VOREFSWV9ORVVUUkFMKQorICAg
ICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dUZXh0SGFzRGlyZWN0aW9u
Q2hhcmFjdGVyLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisKKyAgICByZXR1cm4gcmVhc29u
czsKK30KKwordGVtcGxhdGU8PiBPcHRpb25TZXQ8QXZvaWRhbmNlUmVhc29uPiBjYW5Vc2VGb3JD
aGFyYWN0ZXIoTENoYXIsIGJvb2wsIEluY2x1ZGVSZWFzb25zKQoreworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIE9wdGlvblNl
dDxBdm9pZGFuY2VSZWFzb24+IGNhblVzZUZvclRleHQoY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4
dCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUsIE9wdGlv
bmFsPGZsb2F0PiBsaW5lSGVpZ2h0Q29uc3RyYWludCwKKyAgICBib29sIHRleHRJc0p1c3RpZmll
ZCwgSW5jbHVkZVJlYXNvbnMgaW5jbHVkZVJlYXNvbnMpCit7CisgICAgT3B0aW9uU2V0PEF2b2lk
YW5jZVJlYXNvbj4gcmVhc29uczsKKyAgICBhdXRvJiBwcmltYXJ5Rm9udCA9IGZvbnRDYXNjYWRl
LnByaW1hcnlGb250KCk7CisgICAgYXV0byYgZm9udE1ldHJpY3MgPSBwcmltYXJ5Rm9udC5mb250
TWV0cmljcygpOworICAgIGF1dG8gYXZhaWxhYmxlU3BhY2VGb3JHbHlwaEFzY2VudCA9IGZvbnRN
ZXRyaWNzLmFzY2VudCgpOworICAgIGF1dG8gYXZhaWxhYmxlU3BhY2VGb3JHbHlwaERlc2NlbnQg
PSBmb250TWV0cmljcy5kZXNjZW50KCk7CisgICAgaWYgKGxpbmVIZWlnaHRDb25zdHJhaW50KSB7
CisgICAgICAgIGF1dG8gbGluZUhlaWdodFBhZGRpbmcgPSAqbGluZUhlaWdodENvbnN0cmFpbnQg
LSBmb250TWV0cmljcy5oZWlnaHQoKTsKKyAgICAgICAgYXZhaWxhYmxlU3BhY2VGb3JHbHlwaEFz
Y2VudCArPSBsaW5lSGVpZ2h0UGFkZGluZyAvIDI7CisgICAgICAgIGF2YWlsYWJsZVNwYWNlRm9y
R2x5cGhEZXNjZW50ICs9IGxpbmVIZWlnaHRQYWRkaW5nIC8gMjsKKyAgICB9CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byBjaGFyYWN0
ZXIgPSB0ZXh0W2ldOworICAgICAgICBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaGFy
YWN0ZXIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9
PSBzb2Z0SHlwaGVuKQorICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURF
RChGbG93VGV4dEhhc1NvZnRIeXBoZW4sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKworICAg
ICAgICBhdXRvIGNoYXJhY3RlclJlYXNvbnMgPSBjYW5Vc2VGb3JDaGFyYWN0ZXIoY2hhcmFjdGVy
LCB0ZXh0SXNKdXN0aWZpZWQsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAgICAgaWYgKGNoYXJhY3Rl
clJlYXNvbnMpCisgICAgICAgICAgICBBRERfUkVBU09OU19BTkRfUkVUVVJOX0lGX05FRURFRChj
aGFyYWN0ZXJSZWFzb25zLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisKKyAgICAgICAgYXV0
byBnbHlwaERhdGEgPSBmb250Q2FzY2FkZS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVy
LCBmYWxzZSk7CisgICAgICAgIGlmICghZ2x5cGhEYXRhLmlzVmFsaWQoKSB8fCBnbHlwaERhdGEu
Zm9udCAhPSAmcHJpbWFyeUZvbnQpCisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dQcmltYXJ5Rm9udElzSW5zdWZmaWNpZW50LCByZWFzb25zLCBpbmNsdWRl
UmVhc29ucyk7CisKKyAgICAgICAgaWYgKGxpbmVIZWlnaHRDb25zdHJhaW50KSB7CisgICAgICAg
ICAgICBhdXRvIGJvdW5kcyA9IHByaW1hcnlGb250LmJvdW5kc0ZvckdseXBoKGdseXBoRGF0YS5n
bHlwaCk7CisgICAgICAgICAgICBpZiAoY2VpbGYoLWJvdW5kcy55KCkpID4gYXZhaWxhYmxlU3Bh
Y2VGb3JHbHlwaEFzY2VudCB8fCBjZWlsZihib3VuZHMubWF4WSgpKSA+IGF2YWlsYWJsZVNwYWNl
Rm9yR2x5cGhEZXNjZW50KQorICAgICAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQoRmxvd0ZvbnRIYXNPdmVyZmxvd0dseXBoLCByZWFzb25zLCBpbmNsdWRlUmVhc29u
cyk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlYXNvbnM7Cit9CisKK3N0YXRpYyBP
cHRpb25TZXQ8QXZvaWRhbmNlUmVhc29uPiBjYW5Vc2VGb3JUZXh0KFN0cmluZ1ZpZXcgdGV4dCwg
Y29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBPcHRpb25hbDxmbG9hdD4gbGluZUhlaWdo
dENvbnN0cmFpbnQsIGJvb2wgdGV4dElzSnVzdGlmaWVkLCBJbmNsdWRlUmVhc29ucyBpbmNsdWRl
UmVhc29ucykKK3sKKyAgICBpZiAodGV4dC5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGNhblVz
ZUZvclRleHQodGV4dC5jaGFyYWN0ZXJzOCgpLCB0ZXh0Lmxlbmd0aCgpLCBmb250Q2FzY2FkZSwg
bGluZUhlaWdodENvbnN0cmFpbnQsIHRleHRJc0p1c3RpZmllZCwgaW5jbHVkZVJlYXNvbnMpOwor
ICAgIHJldHVybiBjYW5Vc2VGb3JUZXh0KHRleHQuY2hhcmFjdGVyczE2KCksIHRleHQubGVuZ3Ro
KCksIGZvbnRDYXNjYWRlLCBsaW5lSGVpZ2h0Q29uc3RyYWludCwgdGV4dElzSnVzdGlmaWVkLCBp
bmNsdWRlUmVhc29ucyk7Cit9CisKK3N0YXRpYyBPcHRpb25TZXQ8QXZvaWRhbmNlUmVhc29uPiBj
YW5Vc2VGb3JGb250QW5kVGV4dChjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIEluY2x1ZGVS
ZWFzb25zIGluY2x1ZGVSZWFzb25zKQoreworICAgIE9wdGlvblNldDxBdm9pZGFuY2VSZWFzb24+
IHJlYXNvbnM7CisgICAgLy8gV2UgYXNzdW1lIHRoYXQgYWxsIGxpbmVzIGhhdmUgbWV0cmljcyBi
YXNlZCBwdXJlbHkgb24gdGhlIHByaW1hcnkgZm9udC4KKyAgICBjb25zdCBhdXRvJiBzdHlsZSA9
IGZsb3cuc3R5bGUoKTsKKyAgICBhdXRvJiBmb250Q2FzY2FkZSA9IHN0eWxlLmZvbnRDYXNjYWRl
KCk7CisgICAgaWYgKGZvbnRDYXNjYWRlLnByaW1hcnlGb250KCkuaXNJbnRlcnN0aXRpYWwoKSkK
KyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNNaXNzaW5nUHJp
bWFyeUZvbnQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBPcHRpb25hbDxmbG9hdD4g
bGluZUhlaWdodENvbnN0cmFpbnQ7CisgICAgaWYgKHN0eWxlLmxpbmVCb3hDb250YWluKCkuY29u
dGFpbnMoTGluZUJveENvbnRhaW46OkdseXBocykpCisgICAgICAgIGxpbmVIZWlnaHRDb25zdHJh
aW50ID0gZmxvdy5saW5lSGVpZ2h0KGZhbHNlLCBIb3Jpem9udGFsTGluZSwgUG9zaXRpb25PZklu
dGVyaW9yTGluZUJveGVzKS50b0Zsb2F0KCk7CisgICAgYm9vbCBmbG93SXNKdXN0aWZpZWQgPSBz
dHlsZS50ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OworICAgIGZvciAoY29u
c3QgYXV0byYgdGV4dFJlbmRlcmVyIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyVGV4dD4oZmxvdykp
IHsKKyAgICAgICAgLy8gRklYTUU6IERvIG5vdCByZXR1cm4gdW50aWwgYWZ0ZXIgY2hlY2tpbmcg
YWxsIGNoaWxkcmVuLgorICAgICAgICBpZiAodGV4dFJlbmRlcmVyLnRleHQoKS5pc0VtcHR5KCkp
CisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dUZXh0SXNF
bXB0eSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgICAgICBpZiAodGV4dFJlbmRlcmVy
LmlzQ29tYmluZVRleHQoKSkKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQoRmxvd1RleHRJc0NvbWJpbmVUZXh0LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Cisg
ICAgICAgIGlmICh0ZXh0UmVuZGVyZXIuaXNDb3VudGVyKCkpCisgICAgICAgICAgICBTRVRfUkVB
U09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dUZXh0SXNSZW5kZXJDb3VudGVyLCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7CisgICAgICAgIGlmICh0ZXh0UmVuZGVyZXIuaXNRdW90ZSgpKQor
ICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93VGV4dElzUmVu
ZGVyUXVvdGUsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAgICAgaWYgKHRleHRSZW5k
ZXJlci5pc1RleHRGcmFnbWVudCgpKQorICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChGbG93VGV4dElzVGV4dEZyYWdtZW50LCByZWFzb25zLCBpbmNsdWRlUmVhc29u
cyk7CisgICAgICAgIGlmICh0ZXh0UmVuZGVyZXIuaXNTVkdJbmxpbmVUZXh0KCkpCisgICAgICAg
ICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dUZXh0SXNTVkdJbmxpbmVU
ZXh0LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgICAgIGlmICghdGV4dFJlbmRlcmVy
LmNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCgpKSB7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRv
IGNoZWNrIHRoZSBjb2RlIHBhdGggYXQgdGhpcyBwb2ludC4gV2UgYWxyZWFkeSBrbm93IGl0IGNh
bid0IGJlIHNpbXBsZS4KKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVE
RUQoRmxvd0hhc0NvbXBsZXhGb250Q29kZVBhdGgsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFRleHRSdW4gcnVuKFN0cmluZyh0ZXh0UmVu
ZGVyZXIudGV4dCgpKSk7CisgICAgICAgICAgICBydW4uc2V0Q2hhcmFjdGVyU2NhbkZvckNvZGVQ
YXRoKGZhbHNlKTsKKyAgICAgICAgICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLmNvZGVQYXRo
KHJ1bikgIT0gRm9udENhc2NhZGU6OlNpbXBsZSkKKyAgICAgICAgICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNDb21wbGV4Rm9udENvZGVQYXRoLCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHRleHRSZWFzb25z
ID0gY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIuc3RyaW5nVmlldygpLCBmb250Q2FzY2FkZSwg
bGluZUhlaWdodENvbnN0cmFpbnQsIGZsb3dJc0p1c3RpZmllZCwgaW5jbHVkZVJlYXNvbnMpOwor
ICAgICAgICBpZiAodGV4dFJlYXNvbnMpCisgICAgICAgICAgICBBRERfUkVBU09OU19BTkRfUkVU
VVJOX0lGX05FRURFRCh0ZXh0UmVhc29ucywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAg
IH0KKyAgICByZXR1cm4gcmVhc29uczsKK30KKworc3RhdGljIE9wdGlvblNldDxBdm9pZGFuY2VS
ZWFzb24+IGNhblVzZUZvclN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgSW5jbHVkZVJl
YXNvbnMgaW5jbHVkZVJlYXNvbnMpCit7CisgICAgT3B0aW9uU2V0PEF2b2lkYW5jZVJlYXNvbj4g
cmVhc29uczsKKyAgICBpZiAoc3R5bGUudGV4dE92ZXJmbG93KCkgPT0gVGV4dE92ZXJmbG93OjpF
bGxpcHNpcykKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFz
VGV4dE92ZXJmbG93LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYgKHN0eWxlLnRl
eHRVbmRlcmxpbmVQb3NpdGlvbigpICE9IFRleHRVbmRlcmxpbmVQb3NpdGlvbjo6QXV0byB8fCAh
c3R5bGUudGV4dFVuZGVybGluZU9mZnNldCgpLmlzQXV0bygpIHx8ICFzdHlsZS50ZXh0RGVjb3Jh
dGlvblRoaWNrbmVzcygpLmlzQXV0bygpKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dIYXNVbnN1cHBvcnRlZFVuZGVybGluZURlY29yYXRpb24sIHJlYXNvbnMs
IGluY2x1ZGVSZWFzb25zKTsKKyAgICAvLyBOb24tdmlzaWJsZSBvdmVyZmxvdyBzaG91bGQgYmUg
cHJldHR5IGVhc3kgdG8gc3VwcG9ydC4KKyAgICBpZiAoc3R5bGUub3ZlcmZsb3dYKCkgIT0gT3Zl
cmZsb3c6OlZpc2libGUgfHwgc3R5bGUub3ZlcmZsb3dZKCkgIT0gT3ZlcmZsb3c6OlZpc2libGUp
CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc092ZXJmbG93
Tm90VmlzaWJsZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlmICghc3R5bGUuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZf
TkVFREVEKEZsb3dJc05vdExUUiwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlmICgh
KHN0eWxlLmxpbmVCb3hDb250YWluKCkuY29udGFpbnMoTGluZUJveENvbnRhaW46OkJsb2NrKSkp
CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0xpbmVCb3hD
b250YWluUHJvcGVydHksIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoc3R5bGUu
d3JpdGluZ01vZGUoKSAhPSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20pCisgICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0lzTm90VG9wVG9Cb3R0b20sIHJlYXNvbnMs
IGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoc3R5bGUubGluZUJyZWFrKCkgIT0gTGluZUJyZWFr
OjpBdXRvKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNM
aW5lQnJlYWssIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoc3R5bGUudW5pY29k
ZUJpZGkoKSAhPSBVQk5vcm1hbCkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93SGFzTm9uTm9ybWFsVW5pY29kZUJpRGksIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25z
KTsKKyAgICBpZiAoc3R5bGUucnRsT3JkZXJpbmcoKSAhPSBPcmRlcjo6TG9naWNhbCkKKyAgICAg
ICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzUlRMT3JkZXJpbmcsIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoc3R5bGUubGluZUFsaWduKCkgIT0gTGlu
ZUFsaWduOjpOb25lKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZs
b3dIYXNMaW5lQWxpZ25FZGdlcywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlmIChz
dHlsZS5saW5lU25hcCgpICE9IExpbmVTbmFwOjpOb25lKQorICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNMaW5lU25hcCwgcmVhc29ucywgaW5jbHVkZVJlYXNv
bnMpOworICAgIGlmIChzdHlsZS50ZXh0RW1waGFzaXNGaWxsKCkgIT0gVGV4dEVtcGhhc2lzRmls
bDo6RmlsbGVkIHx8IHN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJr
OjpOb25lKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNU
ZXh0RW1waGFzaXNGaWxsT3JNYXJrLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYg
KHN0eWxlLnRleHRTaGFkb3coKSkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93SGFzVGV4dFNoYWRvdywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlm
IChzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6Rmlyc3RMaW5lKSkKKyAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzUHNldWRvRmlyc3RMaW5lLCByZWFz
b25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYgKHN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVk
b0lkOjpGaXJzdExldHRlcikpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVE
RUQoRmxvd0hhc1BzZXVkb0ZpcnN0TGV0dGVyLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Cisg
ICAgaWYgKHN0eWxlLmhhc1RleHRDb21iaW5lKCkpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JF
VFVSTl9JRl9ORUVERUQoRmxvd0hhc1RleHRDb21iaW5lLCByZWFzb25zLCBpbmNsdWRlUmVhc29u
cyk7CisgICAgaWYgKHN0eWxlLmJhY2tncm91bmRDbGlwKCkgPT0gRmlsbEJveDo6VGV4dCkKKyAg
ICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzVGV4dEZpbGxCb3gs
IHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoc3R5bGUuYm9yZGVyRml0KCkgPT0g
Qm9yZGVyRml0OjpMaW5lcykKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURF
RChGbG93SGFzQm9yZGVyRml0TGluZXMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBp
ZiAoc3R5bGUubGluZUJyZWFrKCkgIT0gTGluZUJyZWFrOjpBdXRvKQorICAgICAgICBTRVRfUkVB
U09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNOb25BdXRvTGluZUJyZWFrLCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYgKHN0eWxlLm5ic3BNb2RlKCkgIT0gTkJTUE1vZGU6
Ok5vcm1hbCkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFz
V2ViS2l0TkJTUE1vZGUsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAvLyBTcGVjaWFs
IGhhbmRsaW5nIG9mIHRleHQtc2VjdXJpdHk6ZGlzYyBpcyBub3QgeWV0IGltcGxlbWVudGVkIGlu
IHRoZSBzaW1wbGUgbGluZSBsYXlvdXQgY29kZSBwYXRoLgorICAgIC8vIFNlZSBSZW5kZXJCbG9j
azo6dXBkYXRlU2VjdXJpdHlEaXNjQ2hhcmFjdGVycy4KKyAgICBpZiAoc3R5bGUudGV4dFNlY3Vy
aXR5KCkgIT0gVGV4dFNlY3VyaXR5OjpOb25lKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKEZsb3dIYXNUZXh0U2VjdXJpdHksIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25z
KTsKKyAgICBpZiAoc3R5bGUuaHlwaGVucygpID09IEh5cGhlbnM6OkF1dG8pIHsKKyAgICAgICAg
YXV0byB0ZXh0UmVhc29ucyA9IGNhblVzZUZvclRleHQoc3R5bGUuaHlwaGVuU3RyaW5nKCksIHN0
eWxlLmZvbnRDYXNjYWRlKCksIFdURjo6bnVsbG9wdCwgZmFsc2UsIGluY2x1ZGVSZWFzb25zKTsK
KyAgICAgICAgaWYgKHRleHRSZWFzb25zKQorICAgICAgICAgICAgQUREX1JFQVNPTlNfQU5EX1JF
VFVSTl9JRl9ORUVERUQodGV4dFJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAg
ICB9CisgICAgcmV0dXJuIHJlYXNvbnM7Cit9CisKK09wdGlvblNldDxBdm9pZGFuY2VSZWFzb24+
IGNhblVzZUZvckxpbmVMYXlvdXRXaXRoUmVhc29uKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxv
dywgSW5jbHVkZVJlYXNvbnMgaW5jbHVkZVJlYXNvbnMpCit7CisgICAgT3B0aW9uU2V0PEF2b2lk
YW5jZVJlYXNvbj4gcmVhc29uczsKKyAgICAvLyBGSVhNRTogRm9yIHRlc3RzIHRoYXQgZGlzYWJs
ZSBTTEwgYW5kIGV4cGVjdCB0byBnZXQgQ0xMLgorICAgIGlmICghZmxvdy5zZXR0aW5ncygpLnNp
bXBsZUxpbmVMYXlvdXRFbmFibGVkKCkpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQoRmVhdHVyZUlzRGlzYWJsZWQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAg
ICBpZiAoIWZsb3cucGFyZW50KCkpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQoRmxvd0hhc05vUGFyZW50LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYg
KCFmbG93LmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93SGFzTm9DaGlsZCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlmIChm
bG93LmZyYWdtZW50ZWRGbG93U3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6Ok5vdEluc2lkZUZyYWdt
ZW50ZWRGbG93KSB7CisgICAgICAgIGF1dG8qIGZyYWdtZW50ZWRGbG93ID0gZmxvdy5lbmNsb3Np
bmdGcmFnbWVudGVkRmxvdygpOworICAgICAgICBpZiAoIWlzPFJlbmRlck11bHRpQ29sdW1uRmxv
dz4oZnJhZ21lbnRlZEZsb3cpKQorICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChGbG93SXNJbnNpZGVBTm9uTXVsdGlDb2x1bW5UaHJlYWQsIHJlYXNvbnMsIGluY2x1
ZGVSZWFzb25zKTsKKyAgICAgICAgYXV0byYgY29sdW1uVGhyZWFkID0gZG93bmNhc3Q8UmVuZGVy
TXVsdGlDb2x1bW5GbG93PigqZnJhZ21lbnRlZEZsb3cpOworICAgICAgICBpZiAoY29sdW1uVGhy
ZWFkLnBhcmVudCgpICE9ICZmbG93LnZpZXcoKSkKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5E
X1JFVFVSTl9JRl9ORUVERUQoTXVsdGlDb2x1bW5GbG93SXNOb3RUb3BMZXZlbCwgcmVhc29ucywg
aW5jbHVkZVJlYXNvbnMpOworICAgICAgICBpZiAoY29sdW1uVGhyZWFkLmhhc0NvbHVtblNwYW5u
ZXIoKSkKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoTXVsdGlD
b2x1bW5GbG93SGFzQ29sdW1uU3Bhbm5lciwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAg
ICAgICBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKKyAgICAgICAgaWYgKHN0eWxlLnZlcnRp
Y2FsQWxpZ24oKSAhPSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZSkKKyAgICAgICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoTXVsdGlDb2x1bW5GbG93VmVydGljYWxBbGlnbiwg
cmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgICAgICBpZiAoc3R5bGUuaXNGbG9hdGluZygp
KQorICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChNdWx0aUNvbHVt
bkZsb3dJc0Zsb2F0aW5nLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgfQorICAgIGlm
ICghZmxvdy5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNIb3Jpem9uYWxXcml0aW5nTW9kZSwgcmVhc29ucywg
aW5jbHVkZVJlYXNvbnMpOworICAgIGlmIChmbG93Lmhhc091dGxpbmUoKSkKKyAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzT3V0bGluZSwgcmVhc29ucywgaW5j
bHVkZVJlYXNvbnMpOworICAgIGlmIChmbG93LmlzUnVieVRleHQoKSB8fCBmbG93LmlzUnVieUJh
c2UoKSkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNSdWJ5
LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYgKCFmbG93LnN0eWxlKCkuaGFuZ2lu
Z1B1bmN0dWF0aW9uKCkuaXNFbXB0eSgpKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dIYXNIYW5naW5nUHVuY3R1YXRpb24sIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKKworICAgIC8vIFByaW50aW5nIGRvZXMgcGFnaW5hdGlvbiB3aXRob3V0IGEgZmxvdyB0
aHJlYWQuCisgICAgaWYgKGZsb3cuZG9jdW1lbnQoKS5wYWdpbmF0ZWQoKSkKKyAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNQYWdpbmF0ZWQsIHJlYXNvbnMsIGlu
Y2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoZmxvdy5maXJzdExpbmVCbG9jaygpKQorICAgICAgICBT
RVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNQc2V1ZG9GaXJzdExpbmUsIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoZmxvdy5pc0Fub255bW91c0Jsb2NrKCkg
JiYgZmxvdy5wYXJlbnQoKS0+c3R5bGUoKS50ZXh0T3ZlcmZsb3coKSA9PSBUZXh0T3ZlcmZsb3c6
OkVsbGlwc2lzKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dI
YXNUZXh0T3ZlcmZsb3csIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoZmxvdy5w
YXJlbnQoKS0+aXNEZXByZWNhdGVkRmxleGlibGVCb3goKSkKKyAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNEZXByaWNhdGVkRmxleEJveCwgcmVhc29ucywgaW5j
bHVkZVJlYXNvbnMpOworICAgIC8vIEZJWE1FOiBQbGFjZWhvbGRlcnMgZG8gc29tZXRoaW5nIHN0
cmFuZ2UuCisgICAgaWYgKGlzPFJlbmRlclRleHRDb250cm9sPigqZmxvdy5wYXJlbnQoKSkgJiYg
ZG93bmNhc3Q8UmVuZGVyVGV4dENvbnRyb2w+KCpmbG93LnBhcmVudCgpKS50ZXh0Rm9ybUNvbnRy
b2xFbGVtZW50KCkucGxhY2Vob2xkZXJFbGVtZW50KCkpCisgICAgICAgIFNFVF9SRUFTT05fQU5E
X1JFVFVSTl9JRl9ORUVERUQoRmxvd1BhcmVudElzUGxhY2Vob2xkZXJFbGVtZW50LCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudGF0aW9uIG9mIHdyYXA9
aGFyZCBsb29rcyBpbnRvIGxpbmVib3hlcy4KKyAgICBpZiAoZmxvdy5wYXJlbnQoKS0+aXNUZXh0
QXJlYSgpICYmIGZsb3cucGFyZW50KCktPmVsZW1lbnQoKS0+aGFzQXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OndyYXBBdHRyKSkKKyAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChGbG93UGFyZW50SXNUZXh0QXJlYVdpdGhXcmFwcGluZywgcmVh
c29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIC8vIFRoaXMgY3VycmVudGx5IGNvdmVycyA8Ymxv
Y2tmbG93PiN0ZXh0PC9ibG9ja2Zsb3c+LCA8YmxvY2tmbG93PiN0ZXh0PGJyPjwvYmxvY2tmbG93
PiBhbmQgbXV0aXBsZSAoc2libGluZykgUmVuZGVyVGV4dCBjYXNlcy4KKyAgICAvLyBUaGUgPGJs
b2NrZmxvdz48aW5saW5lPiN0ZXh0PC9pbmxpbmU+PC9ibG9ja2Zsb3c+IGNhc2UgaXMgYWxzbyBw
b3B1bGFyIGFuZCBzaG91bGQgYmUgcmVsYXRpdmVseSBlYXN5IHRvIGNvdmVyLgorICAgIGZvciAo
Y29uc3QgYXV0byogY2hpbGQgPSBmbG93LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7KSB7CisgICAgICAg
IGlmIChjaGlsZC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0
YXRlOjpOb25lKQorICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChG
bG93Q2hpbGRJc1NlbGVjdGVkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgICAgIGlm
IChpczxSZW5kZXJUZXh0PigqY2hpbGQpKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiByZW5k
ZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmNoaWxkKTsKKyAgICAgICAgICAgIGlmIChy
ZW5kZXJUZXh0LnRleHROb2RlKCkgJiYgIXJlbmRlclRleHQuZG9jdW1lbnQoKS5tYXJrZXJzKCku
bWFya2Vyc0ZvcigqcmVuZGVyVGV4dC50ZXh0Tm9kZSgpKS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SW5jbHVkZXNEb2N1bWVu
dE1hcmtlcnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAgICAgICAgIGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihjaGlsZCkgJiYgIWRvd25jYXN0PFJlbmRl
ckxpbmVCcmVhaz4oKmNoaWxkKS5pc1dCUigpICYmIGNoaWxkLT5zdHlsZSgpLmNsZWFyKCkgPT0g
Q2xlYXI6Ok5vbmUpIHsKKyAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNOb25TdXBwb3J0ZWRDaGlsZCwgcmVhc29ucywgaW5j
bHVkZVJlYXNvbnMpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgYXV0byBzdHlsZVJlYXNv
bnMgPSBjYW5Vc2VGb3JTdHlsZShmbG93LnN0eWxlKCksIGluY2x1ZGVSZWFzb25zKTsKKyAgICBp
ZiAoc3R5bGVSZWFzb25zKQorICAgICAgICBBRERfUkVBU09OU19BTkRfUkVUVVJOX0lGX05FRURF
RChzdHlsZVJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAvLyBXZSBjYW4n
dCB1c2UgdGhlIGNvZGUgcGF0aCBpZiBhbnkgbGluZXMgd291bGQgbmVlZCB0byBiZSBzaGlmdGVk
IGJlbG93IGZsb2F0cy4gVGhpcyBpcyBiZWNhdXNlIHdlIGRvbid0IGtlZXAgcGVyLWxpbmUgeSBj
b29yZGluYXRlcy4KKyAgICBpZiAoZmxvdy5jb250YWluc0Zsb2F0cygpKSB7CisgICAgICAgIGZs
b2F0IG1pbmltdW1XaWR0aE5lZWRlZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgo
KTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0ZXh0UmVuZGVyZXIgOiBjaGlsZHJlbk9mVHlw
ZTxSZW5kZXJUZXh0PihmbG93KSkgeworICAgICAgICAgICAgbWluaW11bVdpZHRoTmVlZGVkID0g
c3RkOjptaW4obWluaW11bVdpZHRoTmVlZGVkLCB0ZXh0UmVuZGVyZXIubWluTG9naWNhbFdpZHRo
KCkpOworCisgICAgICAgICAgICBmb3IgKGF1dG8mIGZsb2F0aW5nT2JqZWN0IDogKmZsb3cuZmxv
YXRpbmdPYmplY3RTZXQoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChmbG9hdGluZ09iamVj
dCk7CisgICAgICAgICAgICAgICAgLy8gaWYgYSBmbG9hdCBoYXMgYSBzaGFwZSwgd2UgY2Fubm90
IHRlbGwgaWYgY29udGVudCB3aWxsIG5lZWQgdG8gYmUgc2hpZnRlZCB1bnRpbCBhZnRlciB3ZSBs
YXkgaXQgb3V0LAorICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBhbW91bnQgb2Ygc3BhY2Ug
aXMgbm90IHVuaWZvcm0gZm9yIHRoZSBoZWlnaHQgb2YgdGhlIGZsb2F0LgorICAgICAgICAgICAg
ICAgIGlmIChmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS5zaGFwZU91dHNpZGVJbmZvKCkpCisg
ICAgICAgICAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hh
c1Vuc3VwcG9ydGVkRmxvYXQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAgICAgICAg
ICAgICBmbG9hdCBhdmFpbGFibGVXaWR0aCA9IGZsb3cuYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9y
TGluZShmbG9hdGluZ09iamVjdC0+eSgpLCBEb05vdEluZGVudFRleHQpOworICAgICAgICAgICAg
ICAgIGlmIChhdmFpbGFibGVXaWR0aCA8IG1pbmltdW1XaWR0aE5lZWRlZCkKKyAgICAgICAgICAg
ICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzVW5zdXBwb3J0
ZWRGbG9hdCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGF1dG8gZm9udEFuZFRleHRSZWFzb25zID0gY2FuVXNlRm9yRm9udEFu
ZFRleHQoZmxvdywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlmIChmb250QW5kVGV4dFJlYXNvbnMp
CisgICAgICAgIEFERF9SRUFTT05TX0FORF9SRVRVUk5fSUZfTkVFREVEKGZvbnRBbmRUZXh0UmVh
c29ucywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIHJldHVybiByZWFzb25zOworfQor
Citib29sIGNhblVzZUZvckxpbmVMYXlvdXQoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQor
eworICAgIHJldHVybiBjYW5Vc2VGb3JMaW5lTGF5b3V0V2l0aFJlYXNvbihmbG93LCBJbmNsdWRl
UmVhc29uczo6Rmlyc3QpLmlzRW1wdHkoKTsKK30KKworYm9vbCBjYW5Vc2VGb3JMaW5lTGF5b3V0
QWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrQ29udGFpbmVyLCBT
dHlsZURpZmZlcmVuY2UgZGlmZikKK3sKKyAgICBzd2l0Y2ggKGRpZmYpIHsKKyAgICBjYXNlIFN0
eWxlRGlmZmVyZW5jZTo6RXF1YWw6CisgICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OlJlY29tcG9z
aXRlTGF5ZXI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNl
OjpSZXBhaW50OgorICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpSZXBhaW50SWZUZXh0T3JCb3Jk
ZXJPck91dGxpbmU6CisgICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OlJlcGFpbnRMYXllcjoKKyAg
ICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGRvIGEgbW9yZSBmb2N1c2VkIHN0eWxlIGNoZWNrIGJ5
IG1hdGNoaW5nIFJlbmRlcmVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzUmVwYWludCZjby4KKyAgICAg
ICAgcmV0dXJuIGNhblVzZUZvclN0eWxlKGJsb2NrQ29udGFpbmVyLnN0eWxlKCksIEluY2x1ZGVS
ZWFzb25zOjpGaXJzdCkuaXNFbXB0eSgpOworICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpMYXlv
dXRQb3NpdGlvbmVkTW92ZW1lbnRPbmx5OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNl
IFN0eWxlRGlmZmVyZW5jZTo6U2ltcGxpZmllZExheW91dDoKKyAgICBjYXNlIFN0eWxlRGlmZmVy
ZW5jZTo6U2ltcGxpZmllZExheW91dEFuZFBvc2l0aW9uZWRNb3ZlbWVudDoKKyAgICAgICAgcmV0
dXJuIGNhblVzZUZvclN0eWxlKGJsb2NrQ29udGFpbmVyLnN0eWxlKCksIEluY2x1ZGVSZWFzb25z
OjpGaXJzdCkuaXNFbXB0eSgpOworICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpMYXlvdXQ6Cisg
ICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6Ok5ld1N0eWxlOgorICAgICAgICByZXR1cm4gY2FuVXNl
Rm9yTGluZUxheW91dChibG9ja0NvbnRhaW5lcik7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBjYW5Vc2VGb3JMaW5lTGF5b3V0KGJsb2NrQ29udGFpbmVyKTsK
K30KKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmJlZGMzYTVmOGRkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9u
Q292ZXJhZ2UuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJSZW5k
ZXJTdHlsZUNvbnN0YW50cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRl
ckJsb2NrRmxvdzsKKworbmFtZXNwYWNlIExheW91dEludGVncmF0aW9uIHsKKworZW51bSBjbGFz
cyBBdm9pZGFuY2VSZWFzb24gOiB1aW50NjRfdCB7CisgICAgRmxvd0lzSW5zaWRlQU5vbk11bHRp
Q29sdW1uVGhyZWFkICAgICA9IDFMTFUgIDw8IDAsCisgICAgRmxvd0hhc0hvcml6b25hbFdyaXRp
bmdNb2RlICAgICAgICAgICA9IDFMTFUgIDw8IDEsCisgICAgRmxvd0hhc091dGxpbmUgICAgICAg
ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDIsCisgICAgRmxvd0lzUnVieSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDMsCisgICAgRmxvd0lzUGFnaW5hdGVkICAgICAg
ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDQsCisgICAgRmxvd0hhc1RleHRPdmVyZmxvdyAg
ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDUsCisgICAgRmxvd0lzRGVwcmljYXRlZEZsZXhC
b3ggICAgICAgICAgICAgICA9IDFMTFUgIDw8IDYsCisgICAgRmxvd1BhcmVudElzUGxhY2Vob2xk
ZXJFbGVtZW50ICAgICAgICA9IDFMTFUgIDw8IDcsCisgICAgRmxvd1BhcmVudElzVGV4dEFyZWFX
aXRoV3JhcHBpbmcgICAgICA9IDFMTFUgIDw8IDgsCisgICAgRmxvd0hhc05vblN1cHBvcnRlZENo
aWxkICAgICAgICAgICAgICA9IDFMTFUgIDw8IDksCisgICAgRmxvd0hhc1Vuc3VwcG9ydGVkRmxv
YXQgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDEwLAorICAgIEZsb3dIYXNVbnN1cHBvcnRlZFVu
ZGVybGluZURlY29yYXRpb24gPSAxTExVICA8PCAxMSwKKyAgICBGbG93SGFzSnVzdGlmaWVkTm9u
TGF0aW5UZXh0ICAgICAgICAgID0gMUxMVSAgPDwgMTIsCisgICAgRmxvd0hhc092ZXJmbG93Tm90
VmlzaWJsZSAgICAgICAgICAgICA9IDFMTFUgIDw8IDEzLAorICAgIEZsb3dIYXNXZWJLaXROQlNQ
TW9kZSAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAxNCwKKyAgICBGbG93SXNOb3RMVFIgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTUsCisgICAgRmxvd0hhc0xpbmVCb3hD
b250YWluUHJvcGVydHkgICAgICAgICA9IDFMTFUgIDw8IDE2LAorICAgIEZsb3dJc05vdFRvcFRv
Qm90dG9tICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAxNywKKyAgICBGbG93SGFzTGluZUJy
ZWFrICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTgsCisgICAgRmxvd0hhc05vbk5v
cm1hbFVuaWNvZGVCaURpICAgICAgICAgICA9IDFMTFUgIDw8IDE5LAorICAgIEZsb3dIYXNSVExP
cmRlcmluZyAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAyMCwKKyAgICBGbG93SGFzTGlu
ZUFsaWduRWRnZXMgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjEsCisgICAgRmxvd0hhc0xp
bmVTbmFwICAgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDIyLAorICAgIEZsb3dIYXNU
ZXh0RW1waGFzaXNGaWxsT3JNYXJrICAgICAgICAgPSAxTExVICA8PCAyMywKKyAgICBGbG93SGFz
VGV4dFNoYWRvdyAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjQsCisgICAgRmxvd0hh
c1BzZXVkb0ZpcnN0TGluZSAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDI1LAorICAgIEZsb3dI
YXNQc2V1ZG9GaXJzdExldHRlciAgICAgICAgICAgICAgPSAxTExVICA8PCAyNiwKKyAgICBGbG93
SGFzVGV4dENvbWJpbmUgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjcsCisgICAgRmxv
d0hhc1RleHRGaWxsQm94ICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDI4LAorICAgIEZs
b3dIYXNCb3JkZXJGaXRMaW5lcyAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAyOSwKKyAgICBG
bG93SGFzTm9uQXV0b0xpbmVCcmVhayAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzAsCisgICAg
Rmxvd0hhc1RleHRTZWN1cml0eSAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDMxLAorICAg
IEZsb3dIYXNTVkdGb250ICAgICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAzMiwKKyAg
ICBGbG93VGV4dElzRW1wdHkgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzMsCisg
ICAgRmxvd1RleHRIYXNTb2Z0SHlwaGVuICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDM0LAor
ICAgIEZsb3dUZXh0SGFzRGlyZWN0aW9uQ2hhcmFjdGVyICAgICAgICAgPSAxTExVICA8PCAzNSwK
KyAgICBGbG93SXNNaXNzaW5nUHJpbWFyeUZvbnQgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzYs
CisgICAgRmxvd1ByaW1hcnlGb250SXNJbnN1ZmZpY2llbnQgICAgICAgICA9IDFMTFUgIDw8IDM3
LAorICAgIEZsb3dUZXh0SXNDb21iaW5lVGV4dCAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAz
OCwKKyAgICBGbG93VGV4dElzUmVuZGVyQ291bnRlciAgICAgICAgICAgICAgID0gMUxMVSAgPDwg
MzksCisgICAgRmxvd1RleHRJc1JlbmRlclF1b3RlICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8
IDQwLAorICAgIEZsb3dUZXh0SXNUZXh0RnJhZ21lbnQgICAgICAgICAgICAgICAgPSAxTExVICA8
PCA0MSwKKyAgICBGbG93VGV4dElzU1ZHSW5saW5lVGV4dCAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgNDIsCisgICAgRmxvd0hhc0NvbXBsZXhGb250Q29kZVBhdGggICAgICAgICAgICA9IDFMTFUg
IDw8IDQzLAorICAgIEZlYXR1cmVJc0Rpc2FibGVkICAgICAgICAgICAgICAgICAgICAgPSAxTExV
ICA8PCA0NCwKKyAgICBGbG93SGFzTm9QYXJlbnQgICAgICAgICAgICAgICAgICAgICAgID0gMUxM
VSAgPDwgNDUsCisgICAgRmxvd0hhc05vQ2hpbGQgICAgICAgICAgICAgICAgICAgICAgICA9IDFM
TFUgIDw8IDQ2LAorICAgIEZsb3dDaGlsZElzU2VsZWN0ZWQgICAgICAgICAgICAgICAgICAgPSAx
TExVICA8PCA0NywKKyAgICBGbG93SGFzSGFuZ2luZ1B1bmN0dWF0aW9uICAgICAgICAgICAgID0g
MUxMVSAgPDwgNDgsCisgICAgRmxvd0ZvbnRIYXNPdmVyZmxvd0dseXBoICAgICAgICAgICAgICA9
IDFMTFUgIDw8IDQ5LAorICAgIEZsb3dUZXh0SGFzU3Vycm9nYXRlUGFpciAgICAgICAgICAgICAg
PSAxTExVICA8PCA1MCwKKyAgICBNdWx0aUNvbHVtbkZsb3dJc05vdFRvcExldmVsICAgICAgICAg
ID0gMUxMVSAgPDwgNTEsCisgICAgTXVsdGlDb2x1bW5GbG93SGFzQ29sdW1uU3Bhbm5lciAgICAg
ICA9IDFMTFUgIDw8IDUyLAorICAgIE11bHRpQ29sdW1uRmxvd1ZlcnRpY2FsQWxpZ24gICAgICAg
ICAgPSAxTExVICA8PCA1MywKKyAgICBNdWx0aUNvbHVtbkZsb3dJc0Zsb2F0aW5nICAgICAgICAg
ICAgID0gMUxMVSAgPDwgNTQsCisgICAgRmxvd0luY2x1ZGVzRG9jdW1lbnRNYXJrZXJzICAgICAg
ICAgICA9IDFMTFUgIDw8IDU1LAorICAgIEVuZE9mUmVhc29ucyAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAxTExVICA8PCA1NgorfTsKKworYm9vbCBjYW5Vc2VGb3JMaW5lTGF5b3V0KGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYpOworYm9vbCBjYW5Vc2VGb3JMaW5lTGF5b3V0QWZ0ZXJTdHlsZUNo
YW5nZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBTdHlsZURpZmZlcmVuY2UpOworCitlbnVtIGNs
YXNzIEluY2x1ZGVSZWFzb25zIHsgRmlyc3QgLCBBbGwgfTsKK09wdGlvblNldDxBdm9pZGFuY2VS
ZWFzb24+IGNhblVzZUZvckxpbmVMYXlvdXRXaXRoUmVhc29uKGNvbnN0IFJlbmRlckJsb2NrRmxv
dyYsIEluY2x1ZGVSZWFzb25zKTsKKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9u
TGluZUxheW91dC5jcHAKaW5kZXggMjE5ODUxODUwOGE0Li5mMjk5ODdkMjQzNTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxp
bmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlv
dXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAi
SW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW52YWxpZGF0aW9uU3RhdGUuaCIK
ICNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0
aW9uQ292ZXJhZ2UuaCIKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCIK
ICNpbmNsdWRlICJMYXlvdXRUcmVlQnVpbGRlci5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgpA
QCAtNjUsMjMgKzY2LDIzIEBAIExpbmVMYXlvdXQ6OkxpbmVMYXlvdXQoY29uc3QgUmVuZGVyQmxv
Y2tGbG93JiBmbG93KQogCiBMaW5lTGF5b3V0Ojp+TGluZUxheW91dCgpID0gZGVmYXVsdDsKIAot
Ym9vbCBMaW5lTGF5b3V0OjpjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBP
cHRpb25hbDxib29sPiBjb3VsZFVzZVNpbXBsZUxpbmVMYXlvdXQpCitib29sIExpbmVMYXlvdXQ6
OmlzRW5hYmxlZCgpCiB7Ci0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxl
ZCgpOworfQogCi0gICAgLy8gSW5pdGlhbGx5IG9ubHkgYSBzdWJzZXQgb2YgU0xMIGZlYXR1cmVz
IGlzIHN1cHBvcnRlZC4KLSAgICBhdXRvIHBhc3Nlc1NpbXBsZUxpbmVMYXlvdXRUZXN0ID0gdmFs
dWVPckNvbXB1dGUoY291bGRVc2VTaW1wbGVMaW5lTGF5b3V0LCBbJl0gewotICAgICAgICByZXR1
cm4gU2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9yKGZsb3cpOwotICAgIH0pOworYm9vbCBMaW5l
TGF5b3V0OjpjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQoreworICAgIGlm
ICghaXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBwYXNz
ZXNTaW1wbGVMaW5lTGF5b3V0VGVzdDsKKyAgICByZXR1cm4gY2FuVXNlRm9yTGluZUxheW91dChm
bG93KTsKIH0KIAogYm9vbCBMaW5lTGF5b3V0OjpjYW5Vc2VGb3JBZnRlclN0eWxlQ2hhbmdlKGNv
bnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgU3R5bGVEaWZmZXJlbmNlIGRpZmYpCiB7Ci0gICAg
QVNTRVJUKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubGF5b3V0Rm9y
bWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQoKSk7Ci0gICAgcmV0dXJuIFNpbXBsZUxp
bmVMYXlvdXQ6OmNhblVzZUZvckFmdGVyU3R5bGVDaGFuZ2UoZmxvdywgZGlmZik7CisgICAgQVNT
RVJUKGlzRW5hYmxlZCgpKTsKKyAgICByZXR1cm4gY2FuVXNlRm9yTGluZUxheW91dEFmdGVyU3R5
bGVDaGFuZ2UoZmxvdywgZGlmZik7CiB9CiAKIHZvaWQgTGluZUxheW91dDo6dXBkYXRlU3R5bGUo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dElu
dGVncmF0aW9uTGluZUxheW91dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oCmluZGV4IDUxM2VkNGQ3ZmNlYi4uOWRjYTAx
Mjc5MjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oCkBAIC01NSw3ICs1NSw4IEBA
IHB1YmxpYzoKICAgICBMaW5lTGF5b3V0KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwogICAgIH5M
aW5lTGF5b3V0KCk7CiAKLSAgICBzdGF0aWMgYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxv
Y2tGbG93JiwgT3B0aW9uYWw8Ym9vbD4gY291bGRVc2VTaW1wbGVMaW5lTGF5b3V0ID0geyB9KTsK
KyAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWQoKTsKKyAgICBzdGF0aWMgYm9vbCBjYW5Vc2VGb3Io
Y29uc3QgUmVuZGVyQmxvY2tGbG93Jik7CiAgICAgc3RhdGljIGJvb2wgY2FuVXNlRm9yQWZ0ZXJT
dHlsZUNoYW5nZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBTdHlsZURpZmZlcmVuY2UpOwogCiAg
ICAgdm9pZCB1cGRhdGVTdHlsZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmNwcAppbmRleCBkMTBlOTlmMTQ3YmQuLjgxOWEyNDIwMDQ2NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTY2OSwxMiArNjY5
LDExIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgbWF4CiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5
b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiByZXBh
aW50TG9naWNhbFRvcCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pCiB7CiAgICAg
YXV0byBjb21wdXRlTGluZUxheW91dFBhdGggPSBbJl0gewotICAgICAgICBib29sIGNhblVzZVNp
bXBsZUxpbmVzID0gU2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9yKCp0aGlzKTsKICNpZiBFTkFC
TEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLSAgICAgICAgaWYgKExheW91dEludGVncmF0
aW9uOjpMaW5lTGF5b3V0OjpjYW5Vc2VGb3IoKnRoaXMsIGNhblVzZVNpbXBsZUxpbmVzKSkKKyAg
ICAgICAgaWYgKExheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0OjpjYW5Vc2VGb3IoKnRoaXMp
KQogICAgICAgICAgICAgcmV0dXJuIExheW91dEZvcm1hdHRpbmdDb250ZXh0UGF0aDsKICNlbmRp
ZgotICAgICAgICBpZiAoY2FuVXNlU2ltcGxlTGluZXMpCisgICAgICAgIGlmICghTGF5b3V0SW50
ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmlzRW5hYmxlZCgpICYmIFNpbXBsZUxpbmVMYXlvdXQ6OmNh
blVzZUZvcigqdGhpcykpCiAgICAgICAgICAgICByZXR1cm4gU2ltcGxlTGluZXNQYXRoOwogCiAg
ICAgICAgIHJldHVybiBMaW5lQm94ZXNQYXRoOwo=
</data>
<flag name="commit-queue"
          id="425174"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409458</attachid>
            <date>2020-09-23 04:07:22 -0700</date>
            <delta_ts>2020-09-23 05:04:02 -0700</delta_ts>
            <desc>patch</desc>
            <filename>lfc-canuse-3.patch</filename>
            <type>text/plain</type>
            <size>37633</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0ZWEwZWUxMzJhMWUuLjA4NzdhNjYxOGRkNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDM1IEBACisyMDIwLTA5LTIzICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gQWRkIGNhblVzZUZvciBmdW5jdGlvbnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjg2OQor
CisgICAgICAgIFJldmlld2VkIGJ5IFphbGFuIEJ1anRhcy4KKworICAgICAgICBDb3B5IHRoZSBT
TEwgY2FuVXNlRm9yIGNvZGUuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dEludGVncmF0aW9uOjpjYW5Vc2VGb3JDaGFyYWN0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmNhblVzZUZvclRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmNhblVzZUZvckZvbnRBbmRUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpjYW5Vc2VGb3JTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6Y2FuVXNlRm9yTGluZUxheW91dFdpdGhSZWFzb24p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmNhblVzZUZvckxpbmVMYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmNhblVzZUZvckxpbmVM
YXlvdXRBZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5oOiBBZGRlZC4KKworICAgICAgICBBbHNvIHN3aXRjaCB0
byBPcHRpb25TZXQuCisKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdy
YXRpb25MaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9u
OjpMaW5lTGF5b3V0Ojppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246OkxpbmVMYXlvdXQ6OmNhblVzZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJ
bnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y2FuVXNlRm9yQWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAg
ICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNhblVzZUZv
cik6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dElubGluZUNoaWxkcmVuKToK
KwogMjAyMC0wOS0yMiAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAg
ICAgV2ViIEluc3BlY3RvcjogQ2hhbmdlIGBJbnNwZWN0b3JBbmltYXRpb25BZ2VudC0+c3RhcnRU
cmFja2luZ2AgdG8gbm90IGVycm9yIG9uIHJlcGVhdGVkIGNhbGxzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4
IDE4ZWQxNzNkODk0Ni4uYTQzZmI5NzFjMDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTQ1NSw2ICsx
NDU1LDcgQEAgbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCiBs
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHAKIGxheW91dC9pbmxpbmVm
b3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwCiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50
ZWdyYXRpb25Cb3hUcmVlLmNwcAorbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9u
Q292ZXJhZ2UuY3BwCiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5
b3V0LmNwcAogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5j
cHAKIGxheW91dC9pbnZhbGlkYXRpb24vSW52YWxpZGF0aW9uQ29udGV4dC5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3Zjg3
MzU4MzUyYmUuLjgxYzYxMDM3YjIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDk3NSw2ICs0OTc1LDggQEAKIAkJRTNGQTM4
NjQxRDcxODEyRDAwQUE1OTUwIC8qIFBlbmRpbmdTY3JpcHRDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzRkEzODYxMUQ3MTZFNzYwMEFBNTk1
MCAvKiBQZW5kaW5nU2NyaXB0Q2xpZW50LmggKi87IH07CiAJCUU0MDFDMjc1MTdDRTUzRUMwMEM0
MUEzNSAvKiBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDAxQzI3NDE3Q0U1M0VDMDBDNDFBMzUgLyogRWxl
bWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUU0MDFFMEE0MUMzQzBCODMwMEYzNEQxMCAvKiBTdHlsZUNoYW5n
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQwMUUw
QTMxQzNDMEI4MzAwRjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTQwM0I3QTIyNTFCMTE5MzAwMTlFODAwIC8q
IExheW91dEludGVncmF0aW9uQ292ZXJhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0MDNCN0ExMjUxQjExOTMwMDE5RTgwMCAvKiBMYXlvdXRJbnRl
Z3JhdGlvbkNvdmVyYWdlLmggKi87IH07CisJCUU0MDNCN0EzMjUxQjExQzEwMDE5RTgwMCAvKiBM
YXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0MzEyQUI3MjRCMzI2NTYwMDY3ODM0OSAvKiBMYXlvdXRJbnRl
Z3JhdGlvblBhZ2luYXRpb24uaCAqLzsgfTsKIAkJRTQxODAyNTUyM0Q0NTQ5QjAwRkZCMDcxIC8q
IExheW91dEludGVncmF0aW9uQm94VHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTQxODAyNTMyM0Q0NTQ5QTAwRkZCMDcxIC8qIExheW91dEludGVn
cmF0aW9uQm94VHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUU0MTkwNDFGMUNDNjQ4NkIwMEMzNUY1RCAvKiBGb250U2VsZWN0b3JDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MTkwNDFF
MUNDNjQ4NkIwMEMzNUY1RCAvKiBGb250U2VsZWN0b3JDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDIwNTAxNzIxNDE5MDFCMDA2NkVG
M0IgLyogUHJvY2Vzc1dhcm1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0MjA1MDE0MjE0MTkwMUEwMDY2RUYzQiAvKiBQcm9jZXNzV2FybWluZy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNTgx
NCw2ICsxNTgxNiw4IEBACiAJCUU0MDFDMjc0MTdDRTUzRUMwMEM0MUEzNSAvKiBFbGVtZW50SXRl
cmF0b3JBc3NlcnRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1l
bnRJdGVyYXRvckFzc2VydGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQw
MUUwQTMxQzNDMEI4MzAwRjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN0eWxlQ2hhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0MDFFMEE1MUMzQzBDRjcwMEYzNEQxMCAvKiBTdHlsZUNoYW5nZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUNoYW5nZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUU0MDNCNzlGMjUxQjExOEIwMDE5RTgwMCAvKiBMYXlvdXRJbnRl
Z3JhdGlvbkNvdmVyYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dEludGVncmF0aW9u
Q292ZXJhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDAzQjdBMTI1MUIx
MTkzMDAxOUU4MDAgLyogTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MDZGM0ZCMTE5ODMwN0QwMDlENTlENiAvKiBDb2xvckRh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ29sb3JEYXRhLmNw
cDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvQ29sb3JEYXRhLmNwcDsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJRTQxODAyNTMyM0Q0NTQ5QTAwRkZCMDcxIC8q
IExheW91dEludGVncmF0aW9uQm94VHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTQxODAyNTYyM0Q0NTRCNTAwRkZCMDcxIC8qIExheW91dEludGVncmF0aW9uQm94VHJl
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg0NDMsMTIgKzI4NDQ3LDE0IEBACiAJCUU0
RkI0QjFFMjM5NTM1NkYwMDNDMzM2QSAvKiBpbnRlZ3JhdGlvbiAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJRTQzMTJBQjUyNEIzMjY1NjAwNjc4MzQ5IC8q
IExheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHAgKi8sCi0JCQkJRTQzMTJBQjcyNEIzMjY1
NjAwNjc4MzQ5IC8qIExheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5oICovLAogCQkJCUU0MTgw
MjU2MjNENDU0QjUwMEZGQjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuY3BwICovLAog
CQkJCUU0MTgwMjUzMjNENDU0OUEwMEZGQjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUu
aCAqLywKKwkJCQlFNDAzQjc5RjI1MUIxMThCMDAxOUU4MDAgLyogTGF5b3V0SW50ZWdyYXRpb25D
b3ZlcmFnZS5jcHAgKi8sCisJCQkJRTQwM0I3QTEyNTFCMTE5MzAwMTlFODAwIC8qIExheW91dElu
dGVncmF0aW9uQ292ZXJhZ2UuaCAqLywKIAkJCQlFNEFCQUJERTIzNjA4OTNEMDBGQTQzNDUgLyog
TGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcCAqLywKIAkJCQlFNEFCQUJEQjIzNjA4OEZE
MDBGQTQzNDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmggKi8sCisJCQkJRTQzMTJB
QjUyNEIzMjY1NjAwNjc4MzQ5IC8qIExheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHAgKi8s
CisJCQkJRTQzMTJBQjcyNEIzMjY1NjAwNjc4MzQ5IC8qIExheW91dEludGVncmF0aW9uUGFnaW5h
dGlvbi5oICovLAogCQkJKTsKIAkJCXBhdGggPSBpbnRlZ3JhdGlvbjsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CkBAIC0zMjc4Myw2ICszMjc4OSw3IEBACiAJCQkJQjIyMjc5NjUwRDAwQkYy
MjAwNzFCNzgyIC8qIExpbmVhckdyYWRpZW50QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQUIzMUM5MUUxMEFFMUI4RTAwMEM3QjkyIC8qIExpbmVDbGFtcFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRkVGQUIyQTE4MzgwREEwMDA1MTQ1MzQgLyogTGluZUxheW91dFN0YXRlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlFNDAzQjdBMjI1MUIxMTkzMDAxOUU4MDAgLyogTGF5b3V0SW50
ZWdyYXRpb25Db3ZlcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ4NEEzM0UyMzA1NTMyNTAw
OUFERTZBIC8qIExpbmVMYXlvdXRUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MzQz
RDI1MjM5Mjc3OTAwMEVCQkI2NiAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsQ29tcGxleFBhdGguaCBp
biBIZWFkZXJzICovLAogCQkJCUU0NTFDNjI4MjM5MjkzRUMwMDk5MzE5MCAvKiBMaW5lTGF5b3V0
VHJhdmVyc2FsRGlzcGxheVJ1blBhdGguaCBpbiBIZWFkZXJzICovLApAQCAtMzM2NTEsNiArMzM2
NTgsNyBAQAogCQkJCTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDBEN0E4MTcxMzZFQTcwMDc3Q0UwNSAvKiBTY3JpcHRX
cmFwcGFibGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhBRTM0RjEyRUEwOTZBMDBF
QjNBRTYgLyogU2Nyb2xsYWJsZUFyZWEuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0MDNCN0EzMjUx
QjExQzEwMDE5RTgwMCAvKiBMYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVEOTI1QjY4MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmlt
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNzc0ODAxMzc4Qjc3MjAwOURBNzZBIC8qIFNj
cm9sbEFuaW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjcwMzk2NDY5MGE3
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmNwcApAQCAtMCwwICsxLDM3NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9u
Q292ZXJhZ2UuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgorI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgorI2luY2x1ZGUgIlJlbmRlck11bHRpQ29s
dW1uRmxvdy5oIgorI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCisjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRl
ICJTZXR0aW5ncy5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisK
KyNpZm5kZWYgTkRFQlVHCisjZGVmaW5lIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
cmVhc29uLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucykgeyBcCisgICAgICAgIHJlYXNvbnMuYWRk
KEF2b2lkYW5jZVJlYXNvbjo6cmVhc29uKTsgXAorICAgICAgICBpZiAoaW5jbHVkZVJlYXNvbnMg
PT0gSW5jbHVkZVJlYXNvbnM6OkZpcnN0KSBcCisgICAgICAgICAgICByZXR1cm4gcmVhc29uczsg
XAorICAgIH0KKyNlbHNlCisjZGVmaW5lIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
cmVhc29uLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucykgeyBcCisgICAgICAgIEFTU0VSVF9VTlVT
RUQoaW5jbHVkZVJlYXNvbnMsIGluY2x1ZGVSZWFzb25zID09IEluY2x1ZGVSZWFzb25zOjpGaXJz
dCk7IFwKKyAgICAgICAgcmVhc29ucy5hZGQoQXZvaWRhbmNlUmVhc29uOjpyZWFzb24pOyBcCisg
ICAgICAgIHJldHVybiByZWFzb25zOyBcCisgICAgfQorI2VuZGlmCisKKyNpZm5kZWYgTkRFQlVH
CisjZGVmaW5lIEFERF9SRUFTT05TX0FORF9SRVRVUk5fSUZfTkVFREVEKG5ld1JlYXNvbnMsIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKSB7IFwKKyAgICAgICAgcmVhc29ucy5hZGQobmV3UmVhc29u
cyk7IFwKKyAgICAgICAgaWYgKGluY2x1ZGVSZWFzb25zID09IEluY2x1ZGVSZWFzb25zOjpGaXJz
dCkgXAorICAgICAgICAgICAgcmV0dXJuIHJlYXNvbnM7IFwKKyAgICB9CisjZWxzZQorI2RlZmlu
ZSBBRERfUkVBU09OU19BTkRfUkVUVVJOX0lGX05FRURFRChuZXdSZWFzb25zLCByZWFzb25zLCBp
bmNsdWRlUmVhc29ucykgeyBcCisgICAgICAgIEFTU0VSVF9VTlVTRUQoaW5jbHVkZVJlYXNvbnMs
IGluY2x1ZGVSZWFzb25zID09IEluY2x1ZGVSZWFzb25zOjpGaXJzdCk7IFwKKyAgICAgICAgcmVh
c29ucy5hZGQobmV3UmVhc29ucyk7IFwKKyAgICAgICAgcmV0dXJuIHJlYXNvbnM7IFwKKyAgICB9
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dEludGVncmF0
aW9uIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvblNldDxBdm9p
ZGFuY2VSZWFzb24+IGNhblVzZUZvckNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlLCBib29sIHRleHRJ
c0p1c3RpZmllZCwgSW5jbHVkZVJlYXNvbnMpOworCit0ZW1wbGF0ZTw+IE9wdGlvblNldDxBdm9p
ZGFuY2VSZWFzb24+IGNhblVzZUZvckNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIsIGJvb2wgdGV4
dElzSnVzdGlmaWVkLCBJbmNsdWRlUmVhc29ucyBpbmNsdWRlUmVhc29ucykKK3sKKyAgICBPcHRp
b25TZXQ8QXZvaWRhbmNlUmVhc29uPiByZWFzb25zOworICAgIGlmICh0ZXh0SXNKdXN0aWZpZWQp
IHsKKyAgICAgICAgLy8gSW5jbHVkZSBjaGFyYWN0ZXJzIHVwIHRvIExhdGluIEV4dGVuZGVkLUIg
YW5kIHNvbWUgcHVuY3R1YXRpb24gcmFuZ2Ugd2hlbiB0ZXh0IGlzIGp1c3RpZmllZC4KKyAgICAg
ICAgYm9vbCBpc0xhdGluSW5jbHVkaW5nRXh0ZW5kZWRCID0gY2hhcmFjdGVyIDw9IDB4MDFGRjsK
KyAgICAgICAgYm9vbCBpc1B1bmN0dWF0aW9uUmFuZ2UgPSBjaGFyYWN0ZXIgPj0gMHgyMDEwICYm
IGNoYXJhY3RlciA8PSAweDIwMjc7CisgICAgICAgIGlmICghKGlzTGF0aW5JbmNsdWRpbmdFeHRl
bmRlZEIgfHwgaXNQdW5jdHVhdGlvblJhbmdlKSkKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5E
X1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0p1c3RpZmllZE5vbkxhdGluVGV4dCwgcmVhc29ucywg
aW5jbHVkZVJlYXNvbnMpOworICAgIH0KKworICAgIGlmIChVMTZfSVNfU1VSUk9HQVRFKGNoYXJh
Y3RlcikpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRI
YXNTdXJyb2dhdGVQYWlyLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisKKyAgICBVQ2hhckRp
cmVjdGlvbiBkaXJlY3Rpb24gPSB1X2NoYXJEaXJlY3Rpb24oY2hhcmFjdGVyKTsKKyAgICBpZiAo
ZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVCB8fCBkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19M
RUZUX0FSQUJJQworICAgICAgICB8fCBkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX0VNQkVE
RElORyB8fCBkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFCisgICAgICAgIHx8
IGRpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HIHx8IGRpcmVjdGlvbiA9PSBV
X0xFRlRfVE9fUklHSFRfT1ZFUlJJREUKKyAgICAgICAgfHwgZGlyZWN0aW9uID09IFVfUE9QX0RJ
UkVDVElPTkFMX0ZPUk1BVCB8fCBkaXJlY3Rpb24gPT0gVV9CT1VOREFSWV9ORVVUUkFMKQorICAg
ICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dUZXh0SGFzRGlyZWN0aW9u
Q2hhcmFjdGVyLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisKKyAgICByZXR1cm4gcmVhc29u
czsKK30KKwordGVtcGxhdGU8PiBPcHRpb25TZXQ8QXZvaWRhbmNlUmVhc29uPiBjYW5Vc2VGb3JD
aGFyYWN0ZXIoTENoYXIsIGJvb2wsIEluY2x1ZGVSZWFzb25zKQoreworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIE9wdGlvblNl
dDxBdm9pZGFuY2VSZWFzb24+IGNhblVzZUZvclRleHQoY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4
dCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUsIE9wdGlv
bmFsPGZsb2F0PiBsaW5lSGVpZ2h0Q29uc3RyYWludCwKKyAgICBib29sIHRleHRJc0p1c3RpZmll
ZCwgSW5jbHVkZVJlYXNvbnMgaW5jbHVkZVJlYXNvbnMpCit7CisgICAgT3B0aW9uU2V0PEF2b2lk
YW5jZVJlYXNvbj4gcmVhc29uczsKKyAgICBhdXRvJiBwcmltYXJ5Rm9udCA9IGZvbnRDYXNjYWRl
LnByaW1hcnlGb250KCk7CisgICAgYXV0byYgZm9udE1ldHJpY3MgPSBwcmltYXJ5Rm9udC5mb250
TWV0cmljcygpOworICAgIGF1dG8gYXZhaWxhYmxlU3BhY2VGb3JHbHlwaEFzY2VudCA9IGZvbnRN
ZXRyaWNzLmFzY2VudCgpOworICAgIGF1dG8gYXZhaWxhYmxlU3BhY2VGb3JHbHlwaERlc2NlbnQg
PSBmb250TWV0cmljcy5kZXNjZW50KCk7CisgICAgaWYgKGxpbmVIZWlnaHRDb25zdHJhaW50KSB7
CisgICAgICAgIGF1dG8gbGluZUhlaWdodFBhZGRpbmcgPSAqbGluZUhlaWdodENvbnN0cmFpbnQg
LSBmb250TWV0cmljcy5oZWlnaHQoKTsKKyAgICAgICAgYXZhaWxhYmxlU3BhY2VGb3JHbHlwaEFz
Y2VudCArPSBsaW5lSGVpZ2h0UGFkZGluZyAvIDI7CisgICAgICAgIGF2YWlsYWJsZVNwYWNlRm9y
R2x5cGhEZXNjZW50ICs9IGxpbmVIZWlnaHRQYWRkaW5nIC8gMjsKKyAgICB9CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byBjaGFyYWN0
ZXIgPSB0ZXh0W2ldOworICAgICAgICBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaGFy
YWN0ZXIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9
PSBzb2Z0SHlwaGVuKQorICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURF
RChGbG93VGV4dEhhc1NvZnRIeXBoZW4sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKworICAg
ICAgICBhdXRvIGNoYXJhY3RlclJlYXNvbnMgPSBjYW5Vc2VGb3JDaGFyYWN0ZXIoY2hhcmFjdGVy
LCB0ZXh0SXNKdXN0aWZpZWQsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAgICAgaWYgKGNoYXJhY3Rl
clJlYXNvbnMpCisgICAgICAgICAgICBBRERfUkVBU09OU19BTkRfUkVUVVJOX0lGX05FRURFRChj
aGFyYWN0ZXJSZWFzb25zLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisKKyAgICAgICAgYXV0
byBnbHlwaERhdGEgPSBmb250Q2FzY2FkZS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVy
LCBmYWxzZSk7CisgICAgICAgIGlmICghZ2x5cGhEYXRhLmlzVmFsaWQoKSB8fCBnbHlwaERhdGEu
Zm9udCAhPSAmcHJpbWFyeUZvbnQpCisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dQcmltYXJ5Rm9udElzSW5zdWZmaWNpZW50LCByZWFzb25zLCBpbmNsdWRl
UmVhc29ucyk7CisKKyAgICAgICAgaWYgKGxpbmVIZWlnaHRDb25zdHJhaW50KSB7CisgICAgICAg
ICAgICBhdXRvIGJvdW5kcyA9IHByaW1hcnlGb250LmJvdW5kc0ZvckdseXBoKGdseXBoRGF0YS5n
bHlwaCk7CisgICAgICAgICAgICBpZiAoY2VpbGYoLWJvdW5kcy55KCkpID4gYXZhaWxhYmxlU3Bh
Y2VGb3JHbHlwaEFzY2VudCB8fCBjZWlsZihib3VuZHMubWF4WSgpKSA+IGF2YWlsYWJsZVNwYWNl
Rm9yR2x5cGhEZXNjZW50KQorICAgICAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQoRmxvd0ZvbnRIYXNPdmVyZmxvd0dseXBoLCByZWFzb25zLCBpbmNsdWRlUmVhc29u
cyk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlYXNvbnM7Cit9CisKK3N0YXRpYyBP
cHRpb25TZXQ8QXZvaWRhbmNlUmVhc29uPiBjYW5Vc2VGb3JUZXh0KFN0cmluZ1ZpZXcgdGV4dCwg
Y29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBPcHRpb25hbDxmbG9hdD4gbGluZUhlaWdo
dENvbnN0cmFpbnQsIGJvb2wgdGV4dElzSnVzdGlmaWVkLCBJbmNsdWRlUmVhc29ucyBpbmNsdWRl
UmVhc29ucykKK3sKKyAgICBpZiAodGV4dC5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGNhblVz
ZUZvclRleHQodGV4dC5jaGFyYWN0ZXJzOCgpLCB0ZXh0Lmxlbmd0aCgpLCBmb250Q2FzY2FkZSwg
bGluZUhlaWdodENvbnN0cmFpbnQsIHRleHRJc0p1c3RpZmllZCwgaW5jbHVkZVJlYXNvbnMpOwor
ICAgIHJldHVybiBjYW5Vc2VGb3JUZXh0KHRleHQuY2hhcmFjdGVyczE2KCksIHRleHQubGVuZ3Ro
KCksIGZvbnRDYXNjYWRlLCBsaW5lSGVpZ2h0Q29uc3RyYWludCwgdGV4dElzSnVzdGlmaWVkLCBp
bmNsdWRlUmVhc29ucyk7Cit9CisKK3N0YXRpYyBPcHRpb25TZXQ8QXZvaWRhbmNlUmVhc29uPiBj
YW5Vc2VGb3JGb250QW5kVGV4dChjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIEluY2x1ZGVS
ZWFzb25zIGluY2x1ZGVSZWFzb25zKQoreworICAgIE9wdGlvblNldDxBdm9pZGFuY2VSZWFzb24+
IHJlYXNvbnM7CisgICAgLy8gV2UgYXNzdW1lIHRoYXQgYWxsIGxpbmVzIGhhdmUgbWV0cmljcyBi
YXNlZCBwdXJlbHkgb24gdGhlIHByaW1hcnkgZm9udC4KKyAgICBjb25zdCBhdXRvJiBzdHlsZSA9
IGZsb3cuc3R5bGUoKTsKKyAgICBhdXRvJiBmb250Q2FzY2FkZSA9IHN0eWxlLmZvbnRDYXNjYWRl
KCk7CisgICAgaWYgKGZvbnRDYXNjYWRlLnByaW1hcnlGb250KCkuaXNJbnRlcnN0aXRpYWwoKSkK
KyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNNaXNzaW5nUHJp
bWFyeUZvbnQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBPcHRpb25hbDxmbG9hdD4g
bGluZUhlaWdodENvbnN0cmFpbnQ7CisgICAgaWYgKHN0eWxlLmxpbmVCb3hDb250YWluKCkuY29u
dGFpbnMoTGluZUJveENvbnRhaW46OkdseXBocykpCisgICAgICAgIGxpbmVIZWlnaHRDb25zdHJh
aW50ID0gZmxvdy5saW5lSGVpZ2h0KGZhbHNlLCBIb3Jpem9udGFsTGluZSwgUG9zaXRpb25PZklu
dGVyaW9yTGluZUJveGVzKS50b0Zsb2F0KCk7CisgICAgYm9vbCBmbG93SXNKdXN0aWZpZWQgPSBz
dHlsZS50ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OworICAgIGZvciAoY29u
c3QgYXV0byYgdGV4dFJlbmRlcmVyIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyVGV4dD4oZmxvdykp
IHsKKyAgICAgICAgLy8gRklYTUU6IERvIG5vdCByZXR1cm4gdW50aWwgYWZ0ZXIgY2hlY2tpbmcg
YWxsIGNoaWxkcmVuLgorICAgICAgICBpZiAodGV4dFJlbmRlcmVyLnRleHQoKS5pc0VtcHR5KCkp
CisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dUZXh0SXNF
bXB0eSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgICAgICBpZiAodGV4dFJlbmRlcmVy
LmlzQ29tYmluZVRleHQoKSkKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQoRmxvd1RleHRJc0NvbWJpbmVUZXh0LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Cisg
ICAgICAgIGlmICh0ZXh0UmVuZGVyZXIuaXNDb3VudGVyKCkpCisgICAgICAgICAgICBTRVRfUkVB
U09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dUZXh0SXNSZW5kZXJDb3VudGVyLCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7CisgICAgICAgIGlmICh0ZXh0UmVuZGVyZXIuaXNRdW90ZSgpKQor
ICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93VGV4dElzUmVu
ZGVyUXVvdGUsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAgICAgaWYgKHRleHRSZW5k
ZXJlci5pc1RleHRGcmFnbWVudCgpKQorICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChGbG93VGV4dElzVGV4dEZyYWdtZW50LCByZWFzb25zLCBpbmNsdWRlUmVhc29u
cyk7CisgICAgICAgIGlmICh0ZXh0UmVuZGVyZXIuaXNTVkdJbmxpbmVUZXh0KCkpCisgICAgICAg
ICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dUZXh0SXNTVkdJbmxpbmVU
ZXh0LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgICAgIGlmICghdGV4dFJlbmRlcmVy
LmNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCgpKSB7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRv
IGNoZWNrIHRoZSBjb2RlIHBhdGggYXQgdGhpcyBwb2ludC4gV2UgYWxyZWFkeSBrbm93IGl0IGNh
bid0IGJlIHNpbXBsZS4KKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVE
RUQoRmxvd0hhc0NvbXBsZXhGb250Q29kZVBhdGgsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFRleHRSdW4gcnVuKFN0cmluZyh0ZXh0UmVu
ZGVyZXIudGV4dCgpKSk7CisgICAgICAgICAgICBydW4uc2V0Q2hhcmFjdGVyU2NhbkZvckNvZGVQ
YXRoKGZhbHNlKTsKKyAgICAgICAgICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLmNvZGVQYXRo
KHJ1bikgIT0gRm9udENhc2NhZGU6OlNpbXBsZSkKKyAgICAgICAgICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNDb21wbGV4Rm9udENvZGVQYXRoLCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHRleHRSZWFzb25z
ID0gY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIuc3RyaW5nVmlldygpLCBmb250Q2FzY2FkZSwg
bGluZUhlaWdodENvbnN0cmFpbnQsIGZsb3dJc0p1c3RpZmllZCwgaW5jbHVkZVJlYXNvbnMpOwor
ICAgICAgICBpZiAodGV4dFJlYXNvbnMpCisgICAgICAgICAgICBBRERfUkVBU09OU19BTkRfUkVU
VVJOX0lGX05FRURFRCh0ZXh0UmVhc29ucywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAg
IH0KKyAgICByZXR1cm4gcmVhc29uczsKK30KKworc3RhdGljIE9wdGlvblNldDxBdm9pZGFuY2VS
ZWFzb24+IGNhblVzZUZvclN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgSW5jbHVkZVJl
YXNvbnMgaW5jbHVkZVJlYXNvbnMpCit7CisgICAgT3B0aW9uU2V0PEF2b2lkYW5jZVJlYXNvbj4g
cmVhc29uczsKKyAgICBpZiAoc3R5bGUudGV4dE92ZXJmbG93KCkgPT0gVGV4dE92ZXJmbG93OjpF
bGxpcHNpcykKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFz
VGV4dE92ZXJmbG93LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYgKHN0eWxlLnRl
eHRVbmRlcmxpbmVQb3NpdGlvbigpICE9IFRleHRVbmRlcmxpbmVQb3NpdGlvbjo6QXV0byB8fCAh
c3R5bGUudGV4dFVuZGVybGluZU9mZnNldCgpLmlzQXV0bygpIHx8ICFzdHlsZS50ZXh0RGVjb3Jh
dGlvblRoaWNrbmVzcygpLmlzQXV0bygpKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dIYXNVbnN1cHBvcnRlZFVuZGVybGluZURlY29yYXRpb24sIHJlYXNvbnMs
IGluY2x1ZGVSZWFzb25zKTsKKyAgICAvLyBOb24tdmlzaWJsZSBvdmVyZmxvdyBzaG91bGQgYmUg
cHJldHR5IGVhc3kgdG8gc3VwcG9ydC4KKyAgICBpZiAoc3R5bGUub3ZlcmZsb3dYKCkgIT0gT3Zl
cmZsb3c6OlZpc2libGUgfHwgc3R5bGUub3ZlcmZsb3dZKCkgIT0gT3ZlcmZsb3c6OlZpc2libGUp
CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc092ZXJmbG93
Tm90VmlzaWJsZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlmICghc3R5bGUuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZf
TkVFREVEKEZsb3dJc05vdExUUiwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlmICgh
KHN0eWxlLmxpbmVCb3hDb250YWluKCkuY29udGFpbnMoTGluZUJveENvbnRhaW46OkJsb2NrKSkp
CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0xpbmVCb3hD
b250YWluUHJvcGVydHksIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoc3R5bGUu
d3JpdGluZ01vZGUoKSAhPSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20pCisgICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0lzTm90VG9wVG9Cb3R0b20sIHJlYXNvbnMs
IGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoc3R5bGUubGluZUJyZWFrKCkgIT0gTGluZUJyZWFr
OjpBdXRvKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNM
aW5lQnJlYWssIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoc3R5bGUudW5pY29k
ZUJpZGkoKSAhPSBVQk5vcm1hbCkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93SGFzTm9uTm9ybWFsVW5pY29kZUJpRGksIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25z
KTsKKyAgICBpZiAoc3R5bGUucnRsT3JkZXJpbmcoKSAhPSBPcmRlcjo6TG9naWNhbCkKKyAgICAg
ICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzUlRMT3JkZXJpbmcsIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoc3R5bGUubGluZUFsaWduKCkgIT0gTGlu
ZUFsaWduOjpOb25lKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZs
b3dIYXNMaW5lQWxpZ25FZGdlcywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlmIChz
dHlsZS5saW5lU25hcCgpICE9IExpbmVTbmFwOjpOb25lKQorICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNMaW5lU25hcCwgcmVhc29ucywgaW5jbHVkZVJlYXNv
bnMpOworICAgIGlmIChzdHlsZS50ZXh0RW1waGFzaXNGaWxsKCkgIT0gVGV4dEVtcGhhc2lzRmls
bDo6RmlsbGVkIHx8IHN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJr
OjpOb25lKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNU
ZXh0RW1waGFzaXNGaWxsT3JNYXJrLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYg
KHN0eWxlLnRleHRTaGFkb3coKSkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93SGFzVGV4dFNoYWRvdywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlm
IChzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6Rmlyc3RMaW5lKSkKKyAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzUHNldWRvRmlyc3RMaW5lLCByZWFz
b25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYgKHN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVk
b0lkOjpGaXJzdExldHRlcikpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVE
RUQoRmxvd0hhc1BzZXVkb0ZpcnN0TGV0dGVyLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Cisg
ICAgaWYgKHN0eWxlLmhhc1RleHRDb21iaW5lKCkpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JF
VFVSTl9JRl9ORUVERUQoRmxvd0hhc1RleHRDb21iaW5lLCByZWFzb25zLCBpbmNsdWRlUmVhc29u
cyk7CisgICAgaWYgKHN0eWxlLmJhY2tncm91bmRDbGlwKCkgPT0gRmlsbEJveDo6VGV4dCkKKyAg
ICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzVGV4dEZpbGxCb3gs
IHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoc3R5bGUuYm9yZGVyRml0KCkgPT0g
Qm9yZGVyRml0OjpMaW5lcykKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURF
RChGbG93SGFzQm9yZGVyRml0TGluZXMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBp
ZiAoc3R5bGUubGluZUJyZWFrKCkgIT0gTGluZUJyZWFrOjpBdXRvKQorICAgICAgICBTRVRfUkVB
U09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNOb25BdXRvTGluZUJyZWFrLCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYgKHN0eWxlLm5ic3BNb2RlKCkgIT0gTkJTUE1vZGU6
Ok5vcm1hbCkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFz
V2ViS2l0TkJTUE1vZGUsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAvLyBTcGVjaWFs
IGhhbmRsaW5nIG9mIHRleHQtc2VjdXJpdHk6ZGlzYyBpcyBub3QgeWV0IGltcGxlbWVudGVkIGlu
IHRoZSBzaW1wbGUgbGluZSBsYXlvdXQgY29kZSBwYXRoLgorICAgIC8vIFNlZSBSZW5kZXJCbG9j
azo6dXBkYXRlU2VjdXJpdHlEaXNjQ2hhcmFjdGVycy4KKyAgICBpZiAoc3R5bGUudGV4dFNlY3Vy
aXR5KCkgIT0gVGV4dFNlY3VyaXR5OjpOb25lKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKEZsb3dIYXNUZXh0U2VjdXJpdHksIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25z
KTsKKyAgICBpZiAoc3R5bGUuaHlwaGVucygpID09IEh5cGhlbnM6OkF1dG8pIHsKKyAgICAgICAg
YXV0byB0ZXh0UmVhc29ucyA9IGNhblVzZUZvclRleHQoc3R5bGUuaHlwaGVuU3RyaW5nKCksIHN0
eWxlLmZvbnRDYXNjYWRlKCksIFdURjo6bnVsbG9wdCwgZmFsc2UsIGluY2x1ZGVSZWFzb25zKTsK
KyAgICAgICAgaWYgKHRleHRSZWFzb25zKQorICAgICAgICAgICAgQUREX1JFQVNPTlNfQU5EX1JF
VFVSTl9JRl9ORUVERUQodGV4dFJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAg
ICB9CisgICAgcmV0dXJuIHJlYXNvbnM7Cit9CisKK09wdGlvblNldDxBdm9pZGFuY2VSZWFzb24+
IGNhblVzZUZvckxpbmVMYXlvdXRXaXRoUmVhc29uKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxv
dywgSW5jbHVkZVJlYXNvbnMgaW5jbHVkZVJlYXNvbnMpCit7CisgICAgT3B0aW9uU2V0PEF2b2lk
YW5jZVJlYXNvbj4gcmVhc29uczsKKyAgICAvLyBGSVhNRTogRm9yIHRlc3RzIHRoYXQgZGlzYWJs
ZSBTTEwgYW5kIGV4cGVjdCB0byBnZXQgQ0xMLgorICAgIGlmICghZmxvdy5zZXR0aW5ncygpLnNp
bXBsZUxpbmVMYXlvdXRFbmFibGVkKCkpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQoRmVhdHVyZUlzRGlzYWJsZWQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAg
ICBpZiAoIWZsb3cucGFyZW50KCkpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQoRmxvd0hhc05vUGFyZW50LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYg
KCFmbG93LmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93SGFzTm9DaGlsZCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlmIChm
bG93LmZyYWdtZW50ZWRGbG93U3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6Ok5vdEluc2lkZUZyYWdt
ZW50ZWRGbG93KSB7CisgICAgICAgIGF1dG8qIGZyYWdtZW50ZWRGbG93ID0gZmxvdy5lbmNsb3Np
bmdGcmFnbWVudGVkRmxvdygpOworICAgICAgICBpZiAoIWlzPFJlbmRlck11bHRpQ29sdW1uRmxv
dz4oZnJhZ21lbnRlZEZsb3cpKQorICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChGbG93SXNJbnNpZGVBTm9uTXVsdGlDb2x1bW5UaHJlYWQsIHJlYXNvbnMsIGluY2x1
ZGVSZWFzb25zKTsKKyAgICAgICAgYXV0byYgY29sdW1uVGhyZWFkID0gZG93bmNhc3Q8UmVuZGVy
TXVsdGlDb2x1bW5GbG93PigqZnJhZ21lbnRlZEZsb3cpOworICAgICAgICBpZiAoY29sdW1uVGhy
ZWFkLnBhcmVudCgpICE9ICZmbG93LnZpZXcoKSkKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5E
X1JFVFVSTl9JRl9ORUVERUQoTXVsdGlDb2x1bW5GbG93SXNOb3RUb3BMZXZlbCwgcmVhc29ucywg
aW5jbHVkZVJlYXNvbnMpOworICAgICAgICBpZiAoY29sdW1uVGhyZWFkLmhhc0NvbHVtblNwYW5u
ZXIoKSkKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoTXVsdGlD
b2x1bW5GbG93SGFzQ29sdW1uU3Bhbm5lciwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAg
ICAgICBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKKyAgICAgICAgaWYgKHN0eWxlLnZlcnRp
Y2FsQWxpZ24oKSAhPSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZSkKKyAgICAgICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoTXVsdGlDb2x1bW5GbG93VmVydGljYWxBbGlnbiwg
cmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgICAgICBpZiAoc3R5bGUuaXNGbG9hdGluZygp
KQorICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChNdWx0aUNvbHVt
bkZsb3dJc0Zsb2F0aW5nLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgfQorICAgIGlm
ICghZmxvdy5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNIb3Jpem9uYWxXcml0aW5nTW9kZSwgcmVhc29ucywg
aW5jbHVkZVJlYXNvbnMpOworICAgIGlmIChmbG93Lmhhc091dGxpbmUoKSkKKyAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzT3V0bGluZSwgcmVhc29ucywgaW5j
bHVkZVJlYXNvbnMpOworICAgIGlmIChmbG93LmlzUnVieVRleHQoKSB8fCBmbG93LmlzUnVieUJh
c2UoKSkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNSdWJ5
LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgaWYgKCFmbG93LnN0eWxlKCkuaGFuZ2lu
Z1B1bmN0dWF0aW9uKCkuaXNFbXB0eSgpKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dIYXNIYW5naW5nUHVuY3R1YXRpb24sIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKKworICAgIC8vIFByaW50aW5nIGRvZXMgcGFnaW5hdGlvbiB3aXRob3V0IGEgZmxvdyB0
aHJlYWQuCisgICAgaWYgKGZsb3cuZG9jdW1lbnQoKS5wYWdpbmF0ZWQoKSkKKyAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNQYWdpbmF0ZWQsIHJlYXNvbnMsIGlu
Y2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoZmxvdy5maXJzdExpbmVCbG9jaygpKQorICAgICAgICBT
RVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNQc2V1ZG9GaXJzdExpbmUsIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoZmxvdy5pc0Fub255bW91c0Jsb2NrKCkg
JiYgZmxvdy5wYXJlbnQoKS0+c3R5bGUoKS50ZXh0T3ZlcmZsb3coKSA9PSBUZXh0T3ZlcmZsb3c6
OkVsbGlwc2lzKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dI
YXNUZXh0T3ZlcmZsb3csIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBpZiAoZmxvdy5w
YXJlbnQoKS0+aXNEZXByZWNhdGVkRmxleGlibGVCb3goKSkKKyAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNEZXByaWNhdGVkRmxleEJveCwgcmVhc29ucywgaW5j
bHVkZVJlYXNvbnMpOworICAgIC8vIEZJWE1FOiBQbGFjZWhvbGRlcnMgZG8gc29tZXRoaW5nIHN0
cmFuZ2UuCisgICAgaWYgKGlzPFJlbmRlclRleHRDb250cm9sPigqZmxvdy5wYXJlbnQoKSkgJiYg
ZG93bmNhc3Q8UmVuZGVyVGV4dENvbnRyb2w+KCpmbG93LnBhcmVudCgpKS50ZXh0Rm9ybUNvbnRy
b2xFbGVtZW50KCkucGxhY2Vob2xkZXJFbGVtZW50KCkpCisgICAgICAgIFNFVF9SRUFTT05fQU5E
X1JFVFVSTl9JRl9ORUVERUQoRmxvd1BhcmVudElzUGxhY2Vob2xkZXJFbGVtZW50LCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudGF0aW9uIG9mIHdyYXA9
aGFyZCBsb29rcyBpbnRvIGxpbmVib3hlcy4KKyAgICBpZiAoZmxvdy5wYXJlbnQoKS0+aXNUZXh0
QXJlYSgpICYmIGZsb3cucGFyZW50KCktPmVsZW1lbnQoKS0+aGFzQXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OndyYXBBdHRyKSkKKyAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChGbG93UGFyZW50SXNUZXh0QXJlYVdpdGhXcmFwcGluZywgcmVh
c29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIC8vIFRoaXMgY3VycmVudGx5IGNvdmVycyA8Ymxv
Y2tmbG93PiN0ZXh0PC9ibG9ja2Zsb3c+LCA8YmxvY2tmbG93PiN0ZXh0PGJyPjwvYmxvY2tmbG93
PiBhbmQgbXV0aXBsZSAoc2libGluZykgUmVuZGVyVGV4dCBjYXNlcy4KKyAgICAvLyBUaGUgPGJs
b2NrZmxvdz48aW5saW5lPiN0ZXh0PC9pbmxpbmU+PC9ibG9ja2Zsb3c+IGNhc2UgaXMgYWxzbyBw
b3B1bGFyIGFuZCBzaG91bGQgYmUgcmVsYXRpdmVseSBlYXN5IHRvIGNvdmVyLgorICAgIGZvciAo
Y29uc3QgYXV0byogY2hpbGQgPSBmbG93LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7KSB7CisgICAgICAg
IGlmIChjaGlsZC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0
YXRlOjpOb25lKQorICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChG
bG93Q2hpbGRJc1NlbGVjdGVkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgICAgIGlm
IChpczxSZW5kZXJUZXh0PigqY2hpbGQpKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiByZW5k
ZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmNoaWxkKTsKKyAgICAgICAgICAgIGlmIChy
ZW5kZXJUZXh0LnRleHROb2RlKCkgJiYgIXJlbmRlclRleHQuZG9jdW1lbnQoKS5tYXJrZXJzKCku
bWFya2Vyc0ZvcigqcmVuZGVyVGV4dC50ZXh0Tm9kZSgpKS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SW5jbHVkZXNEb2N1bWVu
dE1hcmtlcnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAgICAgICAgIGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihjaGlsZCkgJiYgIWRvd25jYXN0PFJlbmRl
ckxpbmVCcmVhaz4oKmNoaWxkKS5pc1dCUigpICYmIGNoaWxkLT5zdHlsZSgpLmNsZWFyKCkgPT0g
Q2xlYXI6Ok5vbmUpIHsKKyAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNOb25TdXBwb3J0ZWRDaGlsZCwgcmVhc29ucywgaW5j
bHVkZVJlYXNvbnMpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgYXV0byBzdHlsZVJlYXNv
bnMgPSBjYW5Vc2VGb3JTdHlsZShmbG93LnN0eWxlKCksIGluY2x1ZGVSZWFzb25zKTsKKyAgICBp
ZiAoc3R5bGVSZWFzb25zKQorICAgICAgICBBRERfUkVBU09OU19BTkRfUkVUVVJOX0lGX05FRURF
RChzdHlsZVJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAvLyBXZSBjYW4n
dCB1c2UgdGhlIGNvZGUgcGF0aCBpZiBhbnkgbGluZXMgd291bGQgbmVlZCB0byBiZSBzaGlmdGVk
IGJlbG93IGZsb2F0cy4gVGhpcyBpcyBiZWNhdXNlIHdlIGRvbid0IGtlZXAgcGVyLWxpbmUgeSBj
b29yZGluYXRlcy4KKyAgICBpZiAoZmxvdy5jb250YWluc0Zsb2F0cygpKSB7CisgICAgICAgIGZs
b2F0IG1pbmltdW1XaWR0aE5lZWRlZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgo
KTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0ZXh0UmVuZGVyZXIgOiBjaGlsZHJlbk9mVHlw
ZTxSZW5kZXJUZXh0PihmbG93KSkgeworICAgICAgICAgICAgbWluaW11bVdpZHRoTmVlZGVkID0g
c3RkOjptaW4obWluaW11bVdpZHRoTmVlZGVkLCB0ZXh0UmVuZGVyZXIubWluTG9naWNhbFdpZHRo
KCkpOworCisgICAgICAgICAgICBmb3IgKGF1dG8mIGZsb2F0aW5nT2JqZWN0IDogKmZsb3cuZmxv
YXRpbmdPYmplY3RTZXQoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChmbG9hdGluZ09iamVj
dCk7CisgICAgICAgICAgICAgICAgLy8gaWYgYSBmbG9hdCBoYXMgYSBzaGFwZSwgd2UgY2Fubm90
IHRlbGwgaWYgY29udGVudCB3aWxsIG5lZWQgdG8gYmUgc2hpZnRlZCB1bnRpbCBhZnRlciB3ZSBs
YXkgaXQgb3V0LAorICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBhbW91bnQgb2Ygc3BhY2Ug
aXMgbm90IHVuaWZvcm0gZm9yIHRoZSBoZWlnaHQgb2YgdGhlIGZsb2F0LgorICAgICAgICAgICAg
ICAgIGlmIChmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS5zaGFwZU91dHNpZGVJbmZvKCkpCisg
ICAgICAgICAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hh
c1Vuc3VwcG9ydGVkRmxvYXQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAgICAgICAg
ICAgICBmbG9hdCBhdmFpbGFibGVXaWR0aCA9IGZsb3cuYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9y
TGluZShmbG9hdGluZ09iamVjdC0+eSgpLCBEb05vdEluZGVudFRleHQpOworICAgICAgICAgICAg
ICAgIGlmIChhdmFpbGFibGVXaWR0aCA8IG1pbmltdW1XaWR0aE5lZWRlZCkKKyAgICAgICAgICAg
ICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzVW5zdXBwb3J0
ZWRGbG9hdCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGF1dG8gZm9udEFuZFRleHRSZWFzb25zID0gY2FuVXNlRm9yRm9udEFu
ZFRleHQoZmxvdywgaW5jbHVkZVJlYXNvbnMpOworICAgIGlmIChmb250QW5kVGV4dFJlYXNvbnMp
CisgICAgICAgIEFERF9SRUFTT05TX0FORF9SRVRVUk5fSUZfTkVFREVEKGZvbnRBbmRUZXh0UmVh
c29ucywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOworICAgIHJldHVybiByZWFzb25zOworfQor
Citib29sIGNhblVzZUZvckxpbmVMYXlvdXQoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQor
eworICAgIHJldHVybiBjYW5Vc2VGb3JMaW5lTGF5b3V0V2l0aFJlYXNvbihmbG93LCBJbmNsdWRl
UmVhc29uczo6Rmlyc3QpLmlzRW1wdHkoKTsKK30KKworYm9vbCBjYW5Vc2VGb3JMaW5lTGF5b3V0
QWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrQ29udGFpbmVyLCBT
dHlsZURpZmZlcmVuY2UgZGlmZikKK3sKKyAgICBzd2l0Y2ggKGRpZmYpIHsKKyAgICBjYXNlIFN0
eWxlRGlmZmVyZW5jZTo6RXF1YWw6CisgICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OlJlY29tcG9z
aXRlTGF5ZXI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNl
OjpSZXBhaW50OgorICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpSZXBhaW50SWZUZXh0T3JCb3Jk
ZXJPck91dGxpbmU6CisgICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OlJlcGFpbnRMYXllcjoKKyAg
ICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGRvIGEgbW9yZSBmb2N1c2VkIHN0eWxlIGNoZWNrIGJ5
IG1hdGNoaW5nIFJlbmRlcmVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzUmVwYWludCZjby4KKyAgICAg
ICAgcmV0dXJuIGNhblVzZUZvclN0eWxlKGJsb2NrQ29udGFpbmVyLnN0eWxlKCksIEluY2x1ZGVS
ZWFzb25zOjpGaXJzdCkuaXNFbXB0eSgpOworICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpMYXlv
dXRQb3NpdGlvbmVkTW92ZW1lbnRPbmx5OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNl
IFN0eWxlRGlmZmVyZW5jZTo6U2ltcGxpZmllZExheW91dDoKKyAgICBjYXNlIFN0eWxlRGlmZmVy
ZW5jZTo6U2ltcGxpZmllZExheW91dEFuZFBvc2l0aW9uZWRNb3ZlbWVudDoKKyAgICAgICAgcmV0
dXJuIGNhblVzZUZvclN0eWxlKGJsb2NrQ29udGFpbmVyLnN0eWxlKCksIEluY2x1ZGVSZWFzb25z
OjpGaXJzdCkuaXNFbXB0eSgpOworICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpMYXlvdXQ6Cisg
ICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6Ok5ld1N0eWxlOgorICAgICAgICByZXR1cm4gY2FuVXNl
Rm9yTGluZUxheW91dChibG9ja0NvbnRhaW5lcik7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBjYW5Vc2VGb3JMaW5lTGF5b3V0KGJsb2NrQ29udGFpbmVyKTsK
K30KKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmJlZGMzYTVmOGRkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9u
Q292ZXJhZ2UuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJSZW5k
ZXJTdHlsZUNvbnN0YW50cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRl
ckJsb2NrRmxvdzsKKworbmFtZXNwYWNlIExheW91dEludGVncmF0aW9uIHsKKworZW51bSBjbGFz
cyBBdm9pZGFuY2VSZWFzb24gOiB1aW50NjRfdCB7CisgICAgRmxvd0lzSW5zaWRlQU5vbk11bHRp
Q29sdW1uVGhyZWFkICAgICA9IDFMTFUgIDw8IDAsCisgICAgRmxvd0hhc0hvcml6b25hbFdyaXRp
bmdNb2RlICAgICAgICAgICA9IDFMTFUgIDw8IDEsCisgICAgRmxvd0hhc091dGxpbmUgICAgICAg
ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDIsCisgICAgRmxvd0lzUnVieSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDMsCisgICAgRmxvd0lzUGFnaW5hdGVkICAgICAg
ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDQsCisgICAgRmxvd0hhc1RleHRPdmVyZmxvdyAg
ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDUsCisgICAgRmxvd0lzRGVwcmljYXRlZEZsZXhC
b3ggICAgICAgICAgICAgICA9IDFMTFUgIDw8IDYsCisgICAgRmxvd1BhcmVudElzUGxhY2Vob2xk
ZXJFbGVtZW50ICAgICAgICA9IDFMTFUgIDw8IDcsCisgICAgRmxvd1BhcmVudElzVGV4dEFyZWFX
aXRoV3JhcHBpbmcgICAgICA9IDFMTFUgIDw8IDgsCisgICAgRmxvd0hhc05vblN1cHBvcnRlZENo
aWxkICAgICAgICAgICAgICA9IDFMTFUgIDw8IDksCisgICAgRmxvd0hhc1Vuc3VwcG9ydGVkRmxv
YXQgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDEwLAorICAgIEZsb3dIYXNVbnN1cHBvcnRlZFVu
ZGVybGluZURlY29yYXRpb24gPSAxTExVICA8PCAxMSwKKyAgICBGbG93SGFzSnVzdGlmaWVkTm9u
TGF0aW5UZXh0ICAgICAgICAgID0gMUxMVSAgPDwgMTIsCisgICAgRmxvd0hhc092ZXJmbG93Tm90
VmlzaWJsZSAgICAgICAgICAgICA9IDFMTFUgIDw8IDEzLAorICAgIEZsb3dIYXNXZWJLaXROQlNQ
TW9kZSAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAxNCwKKyAgICBGbG93SXNOb3RMVFIgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTUsCisgICAgRmxvd0hhc0xpbmVCb3hD
b250YWluUHJvcGVydHkgICAgICAgICA9IDFMTFUgIDw8IDE2LAorICAgIEZsb3dJc05vdFRvcFRv
Qm90dG9tICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAxNywKKyAgICBGbG93SGFzTGluZUJy
ZWFrICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTgsCisgICAgRmxvd0hhc05vbk5v
cm1hbFVuaWNvZGVCaURpICAgICAgICAgICA9IDFMTFUgIDw8IDE5LAorICAgIEZsb3dIYXNSVExP
cmRlcmluZyAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAyMCwKKyAgICBGbG93SGFzTGlu
ZUFsaWduRWRnZXMgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjEsCisgICAgRmxvd0hhc0xp
bmVTbmFwICAgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDIyLAorICAgIEZsb3dIYXNU
ZXh0RW1waGFzaXNGaWxsT3JNYXJrICAgICAgICAgPSAxTExVICA8PCAyMywKKyAgICBGbG93SGFz
VGV4dFNoYWRvdyAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjQsCisgICAgRmxvd0hh
c1BzZXVkb0ZpcnN0TGluZSAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDI1LAorICAgIEZsb3dI
YXNQc2V1ZG9GaXJzdExldHRlciAgICAgICAgICAgICAgPSAxTExVICA8PCAyNiwKKyAgICBGbG93
SGFzVGV4dENvbWJpbmUgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjcsCisgICAgRmxv
d0hhc1RleHRGaWxsQm94ICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDI4LAorICAgIEZs
b3dIYXNCb3JkZXJGaXRMaW5lcyAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAyOSwKKyAgICBG
bG93SGFzTm9uQXV0b0xpbmVCcmVhayAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzAsCisgICAg
Rmxvd0hhc1RleHRTZWN1cml0eSAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDMxLAorICAg
IEZsb3dIYXNTVkdGb250ICAgICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAzMiwKKyAg
ICBGbG93VGV4dElzRW1wdHkgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzMsCisg
ICAgRmxvd1RleHRIYXNTb2Z0SHlwaGVuICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDM0LAor
ICAgIEZsb3dUZXh0SGFzRGlyZWN0aW9uQ2hhcmFjdGVyICAgICAgICAgPSAxTExVICA8PCAzNSwK
KyAgICBGbG93SXNNaXNzaW5nUHJpbWFyeUZvbnQgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzYs
CisgICAgRmxvd1ByaW1hcnlGb250SXNJbnN1ZmZpY2llbnQgICAgICAgICA9IDFMTFUgIDw8IDM3
LAorICAgIEZsb3dUZXh0SXNDb21iaW5lVGV4dCAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAz
OCwKKyAgICBGbG93VGV4dElzUmVuZGVyQ291bnRlciAgICAgICAgICAgICAgID0gMUxMVSAgPDwg
MzksCisgICAgRmxvd1RleHRJc1JlbmRlclF1b3RlICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8
IDQwLAorICAgIEZsb3dUZXh0SXNUZXh0RnJhZ21lbnQgICAgICAgICAgICAgICAgPSAxTExVICA8
PCA0MSwKKyAgICBGbG93VGV4dElzU1ZHSW5saW5lVGV4dCAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgNDIsCisgICAgRmxvd0hhc0NvbXBsZXhGb250Q29kZVBhdGggICAgICAgICAgICA9IDFMTFUg
IDw8IDQzLAorICAgIEZlYXR1cmVJc0Rpc2FibGVkICAgICAgICAgICAgICAgICAgICAgPSAxTExV
ICA8PCA0NCwKKyAgICBGbG93SGFzTm9QYXJlbnQgICAgICAgICAgICAgICAgICAgICAgID0gMUxM
VSAgPDwgNDUsCisgICAgRmxvd0hhc05vQ2hpbGQgICAgICAgICAgICAgICAgICAgICAgICA9IDFM
TFUgIDw8IDQ2LAorICAgIEZsb3dDaGlsZElzU2VsZWN0ZWQgICAgICAgICAgICAgICAgICAgPSAx
TExVICA8PCA0NywKKyAgICBGbG93SGFzSGFuZ2luZ1B1bmN0dWF0aW9uICAgICAgICAgICAgID0g
MUxMVSAgPDwgNDgsCisgICAgRmxvd0ZvbnRIYXNPdmVyZmxvd0dseXBoICAgICAgICAgICAgICA9
IDFMTFUgIDw8IDQ5LAorICAgIEZsb3dUZXh0SGFzU3Vycm9nYXRlUGFpciAgICAgICAgICAgICAg
PSAxTExVICA8PCA1MCwKKyAgICBNdWx0aUNvbHVtbkZsb3dJc05vdFRvcExldmVsICAgICAgICAg
ID0gMUxMVSAgPDwgNTEsCisgICAgTXVsdGlDb2x1bW5GbG93SGFzQ29sdW1uU3Bhbm5lciAgICAg
ICA9IDFMTFUgIDw8IDUyLAorICAgIE11bHRpQ29sdW1uRmxvd1ZlcnRpY2FsQWxpZ24gICAgICAg
ICAgPSAxTExVICA8PCA1MywKKyAgICBNdWx0aUNvbHVtbkZsb3dJc0Zsb2F0aW5nICAgICAgICAg
ICAgID0gMUxMVSAgPDwgNTQsCisgICAgRmxvd0luY2x1ZGVzRG9jdW1lbnRNYXJrZXJzICAgICAg
ICAgICA9IDFMTFUgIDw8IDU1LAorICAgIEVuZE9mUmVhc29ucyAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAxTExVICA8PCA1NgorfTsKKworYm9vbCBjYW5Vc2VGb3JMaW5lTGF5b3V0KGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYpOworYm9vbCBjYW5Vc2VGb3JMaW5lTGF5b3V0QWZ0ZXJTdHlsZUNo
YW5nZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBTdHlsZURpZmZlcmVuY2UpOworCitlbnVtIGNs
YXNzIEluY2x1ZGVSZWFzb25zIHsgRmlyc3QgLCBBbGwgfTsKK09wdGlvblNldDxBdm9pZGFuY2VS
ZWFzb24+IGNhblVzZUZvckxpbmVMYXlvdXRXaXRoUmVhc29uKGNvbnN0IFJlbmRlckJsb2NrRmxv
dyYsIEluY2x1ZGVSZWFzb25zKTsKKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9u
TGluZUxheW91dC5jcHAKaW5kZXggMjE5ODUxODUwOGE0Li5mMjk5ODdkMjQzNTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxp
bmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlv
dXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAi
SW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW52YWxpZGF0aW9uU3RhdGUuaCIK
ICNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0
aW9uQ292ZXJhZ2UuaCIKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCIK
ICNpbmNsdWRlICJMYXlvdXRUcmVlQnVpbGRlci5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgpA
QCAtNjUsMjMgKzY2LDIzIEBAIExpbmVMYXlvdXQ6OkxpbmVMYXlvdXQoY29uc3QgUmVuZGVyQmxv
Y2tGbG93JiBmbG93KQogCiBMaW5lTGF5b3V0Ojp+TGluZUxheW91dCgpID0gZGVmYXVsdDsKIAot
Ym9vbCBMaW5lTGF5b3V0OjpjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBP
cHRpb25hbDxib29sPiBjb3VsZFVzZVNpbXBsZUxpbmVMYXlvdXQpCitib29sIExpbmVMYXlvdXQ6
OmlzRW5hYmxlZCgpCiB7Ci0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxl
ZCgpOworfQogCi0gICAgLy8gSW5pdGlhbGx5IG9ubHkgYSBzdWJzZXQgb2YgU0xMIGZlYXR1cmVz
IGlzIHN1cHBvcnRlZC4KLSAgICBhdXRvIHBhc3Nlc1NpbXBsZUxpbmVMYXlvdXRUZXN0ID0gdmFs
dWVPckNvbXB1dGUoY291bGRVc2VTaW1wbGVMaW5lTGF5b3V0LCBbJl0gewotICAgICAgICByZXR1
cm4gU2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9yKGZsb3cpOwotICAgIH0pOworYm9vbCBMaW5l
TGF5b3V0OjpjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQoreworICAgIGlm
ICghaXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBwYXNz
ZXNTaW1wbGVMaW5lTGF5b3V0VGVzdDsKKyAgICByZXR1cm4gY2FuVXNlRm9yTGluZUxheW91dChm
bG93KTsKIH0KIAogYm9vbCBMaW5lTGF5b3V0OjpjYW5Vc2VGb3JBZnRlclN0eWxlQ2hhbmdlKGNv
bnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgU3R5bGVEaWZmZXJlbmNlIGRpZmYpCiB7Ci0gICAg
QVNTRVJUKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubGF5b3V0Rm9y
bWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQoKSk7Ci0gICAgcmV0dXJuIFNpbXBsZUxp
bmVMYXlvdXQ6OmNhblVzZUZvckFmdGVyU3R5bGVDaGFuZ2UoZmxvdywgZGlmZik7CisgICAgQVNT
RVJUKGlzRW5hYmxlZCgpKTsKKyAgICByZXR1cm4gY2FuVXNlRm9yTGluZUxheW91dEFmdGVyU3R5
bGVDaGFuZ2UoZmxvdywgZGlmZik7CiB9CiAKIHZvaWQgTGluZUxheW91dDo6dXBkYXRlU3R5bGUo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dElu
dGVncmF0aW9uTGluZUxheW91dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oCmluZGV4IDUxM2VkNGQ3ZmNlYi4uOWRjYTAx
Mjc5MjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oCkBAIC01NSw3ICs1NSw4IEBA
IHB1YmxpYzoKICAgICBMaW5lTGF5b3V0KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwogICAgIH5M
aW5lTGF5b3V0KCk7CiAKLSAgICBzdGF0aWMgYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxv
Y2tGbG93JiwgT3B0aW9uYWw8Ym9vbD4gY291bGRVc2VTaW1wbGVMaW5lTGF5b3V0ID0geyB9KTsK
KyAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWQoKTsKKyAgICBzdGF0aWMgYm9vbCBjYW5Vc2VGb3Io
Y29uc3QgUmVuZGVyQmxvY2tGbG93Jik7CiAgICAgc3RhdGljIGJvb2wgY2FuVXNlRm9yQWZ0ZXJT
dHlsZUNoYW5nZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBTdHlsZURpZmZlcmVuY2UpOwogCiAg
ICAgdm9pZCB1cGRhdGVTdHlsZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmNwcAppbmRleCBkMTBlOTlmMTQ3YmQuLmI0MzA3ZDc5NWM3MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTY2OSwxMiArNjY5
LDEzIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgbWF4CiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5
b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiByZXBh
aW50TG9naWNhbFRvcCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pCiB7CiAgICAg
YXV0byBjb21wdXRlTGluZUxheW91dFBhdGggPSBbJl0gewotICAgICAgICBib29sIGNhblVzZVNp
bXBsZUxpbmVzID0gU2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9yKCp0aGlzKTsKKyAgICAgICAg
Ym9vbCBpc0ludGVncmF0aW9uRW5hYmxlZCA9IGZhbHNlOwogI2lmIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQotICAgICAgICBpZiAoTGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlv
dXQ6OmNhblVzZUZvcigqdGhpcywgY2FuVXNlU2ltcGxlTGluZXMpKQorICAgICAgICBpZiAoTGF5
b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNhblVzZUZvcigqdGhpcykpCiAgICAgICAgICAg
ICByZXR1cm4gTGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRQYXRoOworICAgICAgICBpc0ludGVncmF0
aW9uRW5hYmxlZCA9IExheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0Ojppc0VuYWJsZWQoKTsK
ICNlbmRpZgotICAgICAgICBpZiAoY2FuVXNlU2ltcGxlTGluZXMpCisgICAgICAgIGlmICghaXNJ
bnRlZ3JhdGlvbkVuYWJsZWQgJiYgU2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9yKCp0aGlzKSkK
ICAgICAgICAgICAgIHJldHVybiBTaW1wbGVMaW5lc1BhdGg7CiAKICAgICAgICAgcmV0dXJuIExp
bmVCb3hlc1BhdGg7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>