<?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>33899</bug_id>
          
          <creation_ts>2010-01-20 07:01:16 -0800</creation_ts>
          <short_desc>WebCore/bridge/jni/jni_runtime.[cpp|h] should be renamed</short_desc>
          <delta_ts>2010-02-02 08:21:03 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>33914</dependson>
          <blocked>33712</blocked>
    
    <blocked>33958</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Steve Block">steveblock</assigned_to>
          <cc>android-webkit-unforking</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>182779</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-20 07:01:16 -0800</bug_when>
    <thetext>WebCore/bridge/jni/jni_runtime.[cpp|h] should be renamed.

This is analogous to Bug 33801, which renamed WebCore/bridge/runtime to WebCore/bridge/Bridge

This is part of the renaming of numerous files in WebCore/bridge. See Bug 33712, which this bug blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182797</commentid>
    <comment_count>1</comment_count>
      <attachid>47033</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-20 07:47:19 -0800</bug_when>
    <thetext>Created attachment 47033
Patch 1 for Bug 33899</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182868</commentid>
    <comment_count>2</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-20 11:15:17 -0800</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/53557

Have opened Bug 33914 to fix style in moved code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183143</commentid>
    <comment_count>3</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-21 02:27:48 -0800</bug_when>
    <thetext>Style is now fixed.

Closing bug as resolved.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47033</attachid>
            <date>2010-01-20 07:47:19 -0800</date>
            <delta_ts>2010-01-20 09:58:07 -0800</delta_ts>
            <desc>Patch 1 for Bug 33899</desc>
            <filename>jniRuntimeToJniBridge.txt</filename>
            <type>text/plain</type>
            <size>63746</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzU0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMDEtMjAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbmFtZXMgam5pX3J1bnRpbWUuW2NwcHxoXSB0byBKTklCcmlkZ2UuW2NwcHxoXQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM4OTkKKworICAgICAg
ICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiBBbmRyb2lkLmpz
Y2JpbmRpbmdzLm1rOiBNb2RpZmllZC4gUmVtb3ZlcyBqbmlfcnVudGltZS5jcHAgYW5kIGFkZHMg
Sk5JQnJpZGdlLmNwcAorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBNb2RpZmllZC4gUmVtb3Zl
cyBqbmlfcnVudGltZS5oIGFuZCBhZGRzIEpOSUJyaWRnZS5oCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBNb2RpZmllZC4gUmVtb3ZlcyBqbmlfcnVudGltZS5b
Y3BwfGhdIGFuZCBhZGRzIEpOSUJyaWRnZS5bY3BwfGhdCisgICAgICAgICogYnJpZGdlL2puaS9K
TklCcmlkZ2UuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3J1bnRpbWUu
Y3BwLgorICAgICAgICAqIGJyaWRnZS9qbmkvSk5JQnJpZGdlLmg6IENvcGllZCBmcm9tIFdlYkNv
cmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5oLgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX2pz
b2JqZWN0Lm1tOiBNb2RpZmllZC4gVXBkYXRlZCB0byBpbmNsdWRlIEpOSUJyaWRnZS5oCisgICAg
ICAgICogYnJpZGdlL2puaS9qbmlfcnVudGltZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYnJp
ZGdlL2puaS9qbmlfcnVudGltZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9qbmkvanNj
L0pOSVV0aWxpdHlQcml2YXRlLmNwcDogTW9kaWZpZWQuIFVwZGF0ZWQgdG8gaW5jbHVkZSBKTklC
cmlkZ2UuaAorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5jcHA6IE1vZGlm
aWVkLiBSZW1vdmVkIHN1cGVyZmx1b3VzIGluY2x1ZGUKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pz
Yy9KYXZhQ2xhc3NKU0MuaDogTW9kaWZpZWQuIFVwZGF0ZWQgdG8gaW5jbHVkZSBKTklCcmlkZ2Uu
aAorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHA6IE1vZGlmaWVk
LiBVcGRhdGVkIHRvIGluY2x1ZGUgSk5JQnJpZGdlLmgKKwogMjAxMC0wMS0yMCAgVG9yIEFybmUg
VmVzdGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQuanNjYmluZGluZ3MubWsK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9BbmRyb2lkLmpzY2JpbmRpbmdzLm1rCShyZXZpc2lvbiA1
MzU0MSkKKysrIFdlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5tawkod29ya2luZyBjb3B5KQpA
QCAtMTg0LDggKzE4NCw4IEBAIExPQ0FMX1NSQ19GSUxFUyArPSBcCiAJYnJpZGdlL2MvY19pbnN0
YW5jZS5jcHAgXAogCWJyaWRnZS9jL2NfcnVudGltZS5jcHAgXAogCWJyaWRnZS9jL2NfdXRpbGl0
eS5jcHAgXAorCWJyaWRnZS9qbmkvSk5JQnJpZGdlLmNwcCBcCiAJYnJpZGdlL2puaS9KTklVdGls
aXR5LmNwcCBcCi0JYnJpZGdlL2puaS9qbmlfcnVudGltZS5jcHAgXAogCWJyaWRnZS9qbmkvanNj
L0pOSVV0aWxpdHlQcml2YXRlLmNwcCBcCiAJYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNw
cCBcCiAJYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcCBcCkluZGV4OiBXZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJl
dmlzaW9uIDUzNTQxKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpA
QCAtNTEyLDkgKzUxMiw5IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9icmlkZ2Uv
Yy9jX3J1bnRpbWUuaCBcCiAJV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwIFwKIAlXZWJD
b3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5oIFwKKwlXZWJDb3JlL2JyaWRnZS9qbmkvSk5JQnJpZGdl
LmggXAogCVdlYkNvcmUvYnJpZGdlL2puaS9KTklVdGlsaXR5LmggXAogCVdlYkNvcmUvYnJpZGdl
L2puaS9qbmlfanNvYmplY3QuaCBcCi0JV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmgg
XAogCVdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmggXAogCVdlYkNvcmUvYnJp
ZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmggXAogCVdlYkNvcmUvYnJpZGdlL25wYXBpLmgg
XApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDUzNTQxKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTMxMCw4ICszMTAsNiBAQAogCQkxQTU2OUQwMzBEN0UyQjgyMDA3
QzM5ODMgLyogam5pX2pzb2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE1NjlDRDMwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9qc29iamVjdC5t
bSAqLzsgfTsKIAkJMUE1NjlEMDQwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9qc29iamVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1NjlDRDQwRDdF
MkI4MjAwN0MzOTgzIC8qIGpuaV9qc29iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBNTY5RDA1MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlf
b2JqYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
NTY5Q0Q1MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfb2JqYy5tbSAqLzsgfTsKLQkJMUE1NjlEMDYw
RDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9ydW50aW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0Q2MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlf
cnVudGltZS5jcHAgKi87IH07Ci0JCTFBNTY5RDA3MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfcnVu
dGltZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1
NjlDRDcwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9ydW50aW1lLmggKi87IH07CiAJCTFBNTY5RDBB
MEQ3RTJCODIwMDdDMzk4MyAvKiBOUF9qc29iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNEQTBEN0UyQjgyMDA3QzM5ODMgLyogTlBf
anNvYmplY3QuY3BwICovOyB9OwogCQkxQTU2OUQwQjBEN0UyQjgyMDA3QzM5ODMgLyogTlBfanNv
YmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
NTY5Q0RCMEQ3RTJCODIwMDdDMzk4MyAvKiBOUF9qc29iamVjdC5oICovOyB9OwogCQkxQTU2OUQw
QzBEN0UyQjgyMDA3QzM5ODMgLyogbnBhcGkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0RDMEQ3RTJCODIwMDdDMzk4MyAvKiBucGFwaS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTA5LDYg
KzExMDcsOCBAQAogCQk1NEM1MEY3QjBFODAxREYzMDA5ODMyQTAgLyogWE1MVG9rZW5pemVyTGli
eG1sMi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
NEM1MEY3QTBFODAxREYzMDA5ODMyQTAgLyogWE1MVG9rZW5pemVyTGlieG1sMi5jcHAgKi87IH07
CiAJCTU1MEEwQkM5MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MEEwQkM3MDg1RjYwMzkw
MDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLzsgfTsKIAkJNTUwQTBCQ0EwODVGNjAzOTAw
NzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU1MEEwQkM4MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1l
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTkx
Mzk1M0IxMTA3NTg0NTAwODNFQzU1IC8qIEpOSUJyaWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTkxMzk1M0ExMTA3NTg0NTAwODNFQzU1IC8qIEpO
SUJyaWRnZS5oICovOyB9OworCQk1OTEzOTUzRDExMDc1ODRFMDA4M0VDNTUgLyogSk5JQnJpZGdl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5MTM5
NTNDMTEwNzU4NEUwMDgzRUM1NSAvKiBKTklCcmlkZ2UuY3BwICovOyB9OwogCQk1OTlFNzU5MDEx
MDU1QTFGMDBEOTA0RkEgLyogQnJpZGdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1OTlFNzU4RjExMDU1QTFGMDBEOTA0RkEgLyogQnJpZGdlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTk5RTc1OTIx
MTA1NUEyQTAwRDkwNEZBIC8qIEJyaWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1OTlFNzU5MTExMDU1QTJBMDBEOTA0RkEgLyogQnJpZGdlLmNw
cCAqLzsgfTsKIAkJNTlBOUU3QjAxMTA0NzU4ODAwREZCNEMxIC8qIEphdmFJbnN0YW5jZUpTQy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OUE5RTdB
RjExMDQ3NTg4MDBERkI0QzEgLyogSmF2YUluc3RhbmNlSlNDLmNwcCAqLzsgfTsKQEAgLTU1Njgs
OCArNTU2OCw2IEBACiAJCTFBNTY5Q0QzMEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfanNvYmplY3Qu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBqbmlfanNvYmplY3Qu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNTY5Q0Q0MEQ3RTJCODIwMDdDMzk4
MyAvKiBqbmlfanNvYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gam5p
X2pzb2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNTY5Q0Q1MEQ3RTJC
ODIwMDdDMzk4MyAvKiBqbmlfb2JqYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IGpuaV9vYmpjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTU2
OUNENjBEN0UyQjgyMDA3QzM5ODMgLyogam5pX3J1bnRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gam5pX3J1bnRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkxQTU2OUNENzBEN0UyQjgyMDA3QzM5ODMgLyogam5pX3J1bnRpbWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gam5pX3J1bnRpbWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUE1NjlDREEwRDdFMkI4MjAwN0MzOTgzIC8qIE5QX2pzb2JqZWN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5QX2pzb2JqZWN0LmNw
cDsgcGF0aCA9IGJyaWRnZS9OUF9qc29iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFBNTY5Q0RCMEQ3RTJCODIwMDdDMzk4MyAvKiBOUF9qc29iamVjdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOUF9qc29iamVjdC5oOyBwYXRoID0gYnJpZGdlL05Q
X2pzb2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNTY5Q0RDMEQ3RTJC
ODIwMDdDMzk4MyAvKiBucGFwaS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBu
cGFwaS5oOyBwYXRoID0gYnJpZGdlL25wYXBpLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC02NDczLDYgKzY0NzEsOCBAQAogCQk1NEM1MEY3QTBFODAxREYzMDA5ODMyQTAgLyogWE1M
VG9rZW5pemVyTGlieG1sMi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBYTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVhbGlmaWVkTmFt
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwogCQk1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZWRO
YW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OworCQk1OTEzOTUzQTExMDc1ODQ1MDA4M0VDNTUgLyogSk5JQnJpZGdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpOSUJyaWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1OTEzOTUzQzExMDc1ODRFMDA4M0VDNTUgLyogSk5JQnJpZGdlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpOSUJyaWRnZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU5OUU3NThGMTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQnJpZGdlLmg7IHBhdGggPSBicmlk
Z2UvQnJpZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU5OUU3NTkxMTEwNTVB
MkEwMEQ5MDRGQSAvKiBCcmlkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQnJpZGdlLmNwcDsgcGF0aCA9IGJyaWRnZS9CcmlkZ2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1OUE5RTdBRjExMDQ3NTg4MDBERkI0QzEgLyogSmF2YUluc3RhbmNl
SlNDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEphdmFJbnN0YW5j
ZUpTQy5jcHA7IHBhdGggPSBqc2MvSmF2YUluc3RhbmNlSlNDLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwMzY3LDE0ICsxMDM2NywxNCBAQAogCQkxQTU2OUNDRTBEN0UyQjgy
MDA3QzM5ODMgLyogam5pICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQk1OTEzOTUzQzExMDc1ODRFMDA4M0VDNTUgLyogSk5JQnJpZGdlLmNwcCAqLywKKwkJ
CQk1OTEzOTUzQTExMDc1ODQ1MDA4M0VDNTUgLyogSk5JQnJpZGdlLmggKi8sCiAJCQkJNTlFRTEy
MzExMTA2MDgyOTAwODg1MTE2IC8qIEpOSVV0aWxpdHkuaCAqLywKIAkJCQk1OUVFMTIyRjExMDYw
ODFGMDA4ODUxMTYgLyogSk5JVXRpbGl0eS5jcHAgKi8sCiAJCQkJNTk5RDFFMkYxMEM5N0Q0QzAw
RTBFRjEyIC8qIGpzYyAqLywKIAkJCQkxQTU2OUNENDBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pz
b2JqZWN0LmggKi8sCiAJCQkJMUE1NjlDRDMwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9qc29iamVj
dC5tbSAqLywKIAkJCQkxQTU2OUNENTBEN0UyQjgyMDA3QzM5ODMgLyogam5pX29iamMubW0gKi8s
Ci0JCQkJMUE1NjlDRDYwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9ydW50aW1lLmNwcCAqLywKLQkJ
CQkxQTU2OUNENzBEN0UyQjgyMDA3QzM5ODMgLyogam5pX3J1bnRpbWUuaCAqLywKIAkJCSk7CiAJ
CQluYW1lID0gam5pOwogCQkJcGF0aCA9IGJyaWRnZS9qbmk7CkBAIC0xNzE4Myw3ICsxNzE4Myw2
IEBACiAJCQkJMUM4MUJBMDEwRTk3MzNDQjAwMjY2RTA3IC8qIEphdmFTY3JpcHRQcm9maWxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQzgxQjlGRjBFOTczM0NCMDAyNjZFMDcgLyogSmF2YVNjcmlw
dFByb2ZpbGVOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQwNDBEN0UyQjgyMDA3QzM5
ODMgLyogam5pX2pzb2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTU2OUQwNzBEN0UyQjgy
MDA3QzM5ODMgLyogam5pX3J1bnRpbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5REY0MDk5
RTY0OTIwMDU2RTU4MSAvKiBKb2luVGV4dE5vZGVzQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDE4Rjg4MDUwRkY5NTdBRjAwODBGMDQ1IC8qIEpTQWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTY1REYzMURCMDlEMUMxMjMwMDBCRTMyNSAvKiBKU0F0dHIuaCBpbiBIZWFk
ZXJzICovLApAQCAtMTgzOTcsNiArMTgzOTYsNyBAQAogCQkJCTc2Q0REMkYzMTEwM0RBNjYwMDY4
MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTc2Q0RE
MkY1MTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzZDREQyRjcxMTAzREE2NjAwNjgwNTIxIC8qIEFjY2Vzc2liaWxpdHlN
ZW51TGlzdE9wdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTkxMzk1M0IxMTA3NTg0NTAwODNF
QzU1IC8qIEpOSUJyaWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xOTM2NCw3ICsxOTM2NCw2IEBA
CiAJCQkJMUM4MUJBMDAwRTk3MzNDQjAwMjY2RTA3IC8qIEphdmFTY3JpcHRQcm9maWxlTm9kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTU2OUQwMzBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pz
b2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE1NjlEMDUwRDdFMkI4MjAwN0MzOTgzIC8q
IGpuaV9vYmpjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMUE1NjlEMDYwRDdFMkI4MjAwN0MzOTgz
IC8qIGpuaV9ydW50aW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REYzMDk5RTY0OTIw
MDU2RTU4MSAvKiBKb2luVGV4dE5vZGVzQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
MThGODgwNDBGRjk1N0FFMDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0MTVCN0M1NzBGRjU5OEU2MDA2NzcwRjcgLyogSlNBYnN0cmFjdFdvcmtlckN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIwNTY3LDYgKzIwNTY2LDcgQEAKIAkJCQk3NkNE
RDJGMjExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTc2Q0REMkY0MTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVu
dUxpc3RQb3B1cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NkNERDJGNjExMDNEQTY2MDA2ODA1
MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTU5MTM5NTNEMTEwNzU4NEUwMDgzRUM1NSAvKiBKTklCcmlkZ2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvSk5JQnJpZGdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JyaWRnZS9qbmkvSk5JQnJpZGdlLmNwcAkocmV2aXNpb24gNTM1NDEpCShmcm9tIFdl
YkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5jcHA6NTM1NDEpCisrKyBXZWJDb3JlL2JyaWRn
ZS9qbmkvSk5JQnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGpuaV9ydW50
aW1lLmg+CisKKyNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQorCisjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgorI2luY2x1ZGUgIkpOSVV0aWxpdHkuaCIKKyNpbmNsdWRlICJKTklVdGlsaXR5UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKKyNpbmNsdWRlICJydW50aW1lX2FycmF5
LmgiCisjaW5jbHVkZSAicnVudGltZV9vYmplY3QuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3Qu
aCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0xvY2su
aD4KKworI2lmZGVmIE5ERUJVRworI2RlZmluZSBKU19MT0coZm9ybWF0QW5kQXJncy4uLikgKCh2
b2lkKTApCisjZWxzZQorI2RlZmluZSBKU19MT0coZm9ybWF0QW5kQXJncy4uLikgeyBcCisgICAg
ZnByaW50ZiAoc3RkZXJyLCAiJXM6JWQgLS0gJXM6ICAiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9f
RlVOQ1RJT05fXyk7IFwKKyAgICBmcHJpbnRmKHN0ZGVyciwgZm9ybWF0QW5kQXJncyk7IFwKK30K
KyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwordXNpbmcgbmFtZXNwYWNlIEpTQzo6Qmlu
ZGluZ3M7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworCitKYXZhUGFyYW1ldGVyOjpKYXZh
UGFyYW1ldGVyIChKTklFbnYgKmVudiwganN0cmluZyB0eXBlKQoreworICAgIF90eXBlID0gSmF2
YVN0cmluZyAoZW52LCB0eXBlKTsKKyAgICBfSk5JVHlwZSA9IEpOSVR5cGVGcm9tQ2xhc3NOYW1l
IChfdHlwZS5VVEY4U3RyaW5nKCkpOworfQorCitKYXZhRmllbGQ6OkphdmFGaWVsZCAoSk5JRW52
ICplbnYsIGpvYmplY3QgYUZpZWxkKQoreworICAgIC8vIEdldCBmaWVsZCB0eXBlCisgICAgam9i
amVjdCBmaWVsZFR5cGUgPSBjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFGaWVsZCwgImdldFR5cGUi
LCAiKClMamF2YS9sYW5nL0NsYXNzOyIpOworICAgIGpzdHJpbmcgZmllbGRUeXBlTmFtZSA9IChq
c3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVjdD4oZmllbGRUeXBlLCAiZ2V0TmFtZSIsICIoKUxq
YXZhL2xhbmcvU3RyaW5nOyIpOworICAgIF90eXBlID0gSmF2YVN0cmluZyhlbnYsIGZpZWxkVHlw
ZU5hbWUpOworICAgIF9KTklUeXBlID0gSk5JVHlwZUZyb21DbGFzc05hbWUgKF90eXBlLlVURjhT
dHJpbmcoKSk7CisKKyAgICAvLyBHZXQgZmllbGQgbmFtZQorICAgIGpzdHJpbmcgZmllbGROYW1l
ID0gKGpzdHJpbmcpY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhRmllbGQsICJnZXROYW1lIiwgIigp
TGphdmEvbGFuZy9TdHJpbmc7Iik7CisgICAgX25hbWUgPSBKYXZhU3RyaW5nKGVudiwgZmllbGRO
YW1lKTsKKworICAgIF9maWVsZCA9IG5ldyBKT2JqZWN0V3JhcHBlcihhRmllbGQpOworfQorCitK
U1ZhbHVlIEphdmFBcnJheTo6Y29udmVydEpPYmplY3RUb0FycmF5KEV4ZWNTdGF0ZSogZXhlYywg
am9iamVjdCBhbk9iamVjdCwgY29uc3QgY2hhciogdHlwZSwgUGFzc1JlZlB0cjxSb290T2JqZWN0
PiByb290T2JqZWN0KQoreworICAgIGlmICh0eXBlWzBdICE9ICdbJykKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisKKyAgICByZXR1cm4gbmV3IChleGVjKSBSdW50aW1lQXJyYXkoZXhl
YywgbmV3IEphdmFBcnJheSgoam9iamVjdClhbk9iamVjdCwgdHlwZSwgcm9vdE9iamVjdCkpOwor
fQorCitqdmFsdWUgSmF2YUZpZWxkOjpkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSmF2YUluc3RhbmNlICppbnN0YW5jZSwgY29uc3QgY2hhciAqbmFtZSwg
Y29uc3QgY2hhciAqc2lnLCBKTklUeXBlIHJldHVyblR5cGUpIGNvbnN0Cit7CisgICAgam9iamVj
dCBqaW5zdGFuY2UgPSBpbnN0YW5jZS0+amF2YUluc3RhbmNlKCk7CisgICAgam9iamVjdCBmaWVs
ZEpJbnN0YW5jZSA9IF9maWVsZC0+bV9pbnN0YW5jZTsKKyAgICBKTklFbnYgKmVudiA9IGdldEpO
SUVudigpOworICAgIGp2YWx1ZSByZXN1bHQ7CisKKyAgICBiemVybyAoJnJlc3VsdCwgc2l6ZW9m
KGp2YWx1ZSkpOworICAgIGpjbGFzcyBjbHMgPSBlbnYtPkdldE9iamVjdENsYXNzKGZpZWxkSklu
c3RhbmNlKTsKKyAgICBpZiAoIGNscyAhPSBOVUxMICkgeworICAgICAgICBqbWV0aG9kSUQgbWlk
ID0gZW52LT5HZXRNZXRob2RJRChjbHMsIG5hbWUsIHNpZyk7CisgICAgICAgIGlmICggbWlkICE9
IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0g
aW5zdGFuY2UtPnJvb3RPYmplY3QoKTsKKyAgICAgICAgICAgIGlmIChyb290T2JqZWN0ICYmIHJv
b3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgpKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBleGNl
cHRpb25EZXNjcmlwdGlvbjsKKyAgICAgICAgICAgICAgICBqdmFsdWUgYXJnc1sxXTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhcmdzWzBdLmwgPSBqaW5zdGFuY2U7CisgICAg
ICAgICAgICAgICAgZGlzcGF0Y2hKTklDYWxsKGV4ZWMsIHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRs
ZSgpLCBmaWVsZEpJbnN0YW5jZSwgZmFsc2UsIHJldHVyblR5cGUsIG1pZCwgYXJncywgcmVzdWx0
LCAwLCBleGNlcHRpb25EZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlv
bkRlc2NyaXB0aW9uKQorICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVy
YWxFcnJvciwgZXhjZXB0aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYykpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pTVmFsdWUg
SmF2YUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3Rh
bmNlKiBpKSBjb25zdCAKK3sKKyAgICBjb25zdCBKYXZhSW5zdGFuY2UgKmluc3RhbmNlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgSmF2YUluc3RhbmNlICo+KGkpOworCisgICAgSlNWYWx1ZSBqc3Jlc3Vs
dCA9IGpzVW5kZWZpbmVkKCk7CisgICAgCisgICAgc3dpdGNoIChfSk5JVHlwZSkgeworICAgICAg
ICBjYXNlIGFycmF5X3R5cGU6CisgICAgICAgIGNhc2Ugb2JqZWN0X3R5cGU6IHsKKyAgICAgICAg
ICAgIGp2YWx1ZSByZXN1bHQgPSBkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlIChleGVjLCBpbnN0
YW5jZSwgImdldCIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIsIG9i
amVjdF90eXBlKTsKKyAgICAgICAgICAgIGpvYmplY3QgYW5PYmplY3QgPSByZXN1bHQubDsKKwor
ICAgICAgICAgICAgY29uc3QgY2hhciAqYXJyYXlUeXBlID0gdHlwZSgpOworICAgICAgICAgICAg
aWYgKGFycmF5VHlwZVswXSA9PSAnWycpIHsKKyAgICAgICAgICAgICAgICBqc3Jlc3VsdCA9IEph
dmFBcnJheTo6Y29udmVydEpPYmplY3RUb0FycmF5KGV4ZWMsIGFuT2JqZWN0LCBhcnJheVR5cGUs
IGluc3RhbmNlLT5yb290T2JqZWN0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAoYW5PYmplY3QgIT0gMCl7CisgICAgICAgICAgICAgICAganNyZXN1bHQgPSBKYXZhSW5z
dGFuY2U6OmNyZWF0ZShhbk9iamVjdCwgaW5zdGFuY2UtPnJvb3RPYmplY3QoKSktPmNyZWF0ZVJ1
bnRpbWVPYmplY3QoZXhlYyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBib29sZWFuX3R5cGU6CisgICAgICAgICAg
ICBqc3Jlc3VsdCA9IGpzQm9vbGVhbihkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKGV4ZWMsIGlu
c3RhbmNlLCAiZ2V0Qm9vbGVhbiIsICIoTGphdmEvbGFuZy9PYmplY3Q7KVoiLCBib29sZWFuX3R5
cGUpLnopOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBi
eXRlX3R5cGU6CisgICAgICAgIGNhc2UgY2hhcl90eXBlOgorICAgICAgICBjYXNlIHNob3J0X3R5
cGU6CisgICAgICAgIAorICAgICAgICBjYXNlIGludF90eXBlOiB7CisgICAgICAgICAgICBqaW50
IHZhbHVlOworICAgICAgICAgICAganZhbHVlIHJlc3VsdCA9IGRpc3BhdGNoVmFsdWVGcm9tSW5z
dGFuY2UgKGV4ZWMsIGluc3RhbmNlLCAiZ2V0SW50IiwgIihMamF2YS9sYW5nL09iamVjdDspSSIs
IGludF90eXBlKTsKKyAgICAgICAgICAgIHZhbHVlID0gcmVzdWx0Lmk7CisgICAgICAgICAgICBq
c3Jlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIChpbnQpdmFsdWUpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgbG9uZ190eXBlOgorICAgICAgICBjYXNlIGZsb2F0X3R5
cGU6CisgICAgICAgIGNhc2UgZG91YmxlX3R5cGU6IHsKKyAgICAgICAgICAgIGpkb3VibGUgdmFs
dWU7CisgICAgICAgICAgICBqdmFsdWUgcmVzdWx0ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5j
ZSAoZXhlYywgaW5zdGFuY2UsICJnZXREb3VibGUiLCAiKExqYXZhL2xhbmcvT2JqZWN0OylEIiwg
ZG91YmxlX3R5cGUpOworICAgICAgICAgICAgdmFsdWUgPSByZXN1bHQuaTsKKyAgICAgICAgICAg
IGpzcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgKGRvdWJsZSl2YWx1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIEpTX0xPRyAoImdldHRpbmcgJXMgPSAlc1xuIiwgVVN0cmluZyhuYW1lKCkpLlVURjhTdHJp
bmcoKS5jX3N0cigpLCBqc3Jlc3VsdC50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKKyAgICAKKyAg
ICByZXR1cm4ganNyZXN1bHQ7Cit9CisKK3ZvaWQgSmF2YUZpZWxkOjpkaXNwYXRjaFNldFZhbHVl
VG9JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEphdmFJbnN0YW5jZSAqaW5zdGFuY2Us
IGp2YWx1ZSBqYXZhVmFsdWUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZykgY29u
c3QKK3sKKyAgICBqb2JqZWN0IGppbnN0YW5jZSA9IGluc3RhbmNlLT5qYXZhSW5zdGFuY2UoKTsK
KyAgICBqb2JqZWN0IGZpZWxkSkluc3RhbmNlID0gX2ZpZWxkLT5tX2luc3RhbmNlOworICAgIEpO
SUVudiAqZW52ID0gZ2V0Sk5JRW52KCk7CisKKyAgICBqY2xhc3MgY2xzID0gZW52LT5HZXRPYmpl
Y3RDbGFzcyhmaWVsZEpJbnN0YW5jZSk7CisgICAgaWYgKCBjbHMgIT0gTlVMTCApIHsKKyAgICAg
ICAgam1ldGhvZElEIG1pZCA9IGVudi0+R2V0TWV0aG9kSUQoY2xzLCBuYW1lLCBzaWcpOworICAg
ICAgICBpZiAoIG1pZCAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgUm9vdE9iamVj
dCogcm9vdE9iamVjdCA9IGluc3RhbmNlLT5yb290T2JqZWN0KCk7CisgICAgICAgICAgICBpZiAo
cm9vdE9iamVjdCAmJiByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSkgeworICAgICAgICAgICAg
ICAgIEpTVmFsdWUgZXhjZXB0aW9uRGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAganZhbHVl
IGFyZ3NbMl07CisgICAgICAgICAgICAgICAganZhbHVlIHJlc3VsdDsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBhcmdzWzBdLmwgPSBqaW5zdGFuY2U7CisgICAgICAgICAgICAg
ICAgYXJnc1sxXSA9IGphdmFWYWx1ZTsKKyAgICAgICAgICAgICAgICBkaXNwYXRjaEpOSUNhbGwo
ZXhlYywgcm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCksIGZpZWxkSkluc3RhbmNlLCBmYWxzZSwg
dm9pZF90eXBlLCBtaWQsIGFyZ3MsIHJlc3VsdCwgMCwgZXhjZXB0aW9uRGVzY3JpcHRpb24pOwor
ICAgICAgICAgICAgICAgIGlmIChleGNlcHRpb25EZXNjcmlwdGlvbikKKyAgICAgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsIGV4Y2VwdGlvbkRlc2NyaXB0aW9u
LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBKYXZhRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEluc3RhbmNlKiBpLCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3QKK3sKKyAgICBjb25zdCBKYXZhSW5z
dGFuY2UgKmluc3RhbmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgSmF2YUluc3RhbmNlICo+KGkpOwor
ICAgIGp2YWx1ZSBqYXZhVmFsdWUgPSBjb252ZXJ0VmFsdWVUb0pWYWx1ZSAoZXhlYywgYVZhbHVl
LCBfSk5JVHlwZSwgdHlwZSgpKTsKKworICAgIEpTX0xPRyAoInNldHRpbmcgdmFsdWUgJXMgdG8g
JXNcbiIsIFVTdHJpbmcobmFtZSgpKS5VVEY4U3RyaW5nKCkuY19zdHIoKSwgYVZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLmFzY2lpKCkpOworCisgICAgc3dpdGNoIChfSk5JVHlwZSkgeworICAgICAgICBj
YXNlIGFycmF5X3R5cGU6CisgICAgICAgIGNhc2Ugb2JqZWN0X3R5cGU6IHsKKyAgICAgICAgICAg
IGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlIChleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAi
c2V0IiwgIihMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspViIpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgYm9vbGVhbl90
eXBlOiB7CisgICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZSAoZXhlYywgaW5z
dGFuY2UsIGphdmFWYWx1ZSwgInNldEJvb2xlYW4iLCAiKExqYXZhL2xhbmcvT2JqZWN0O1opViIp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
Ynl0ZV90eXBlOiB7CisgICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZSAoZXhl
YywgaW5zdGFuY2UsIGphdmFWYWx1ZSwgInNldEJ5dGUiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0Ip
ViIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2hhcl90eXBl
OiB7CisgICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZSAoZXhlYywgaW5zdGFu
Y2UsIGphdmFWYWx1ZSwgInNldENoYXIiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0MpViIpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ugc2hvcnRfdHlwZTogeworICAg
ICAgICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UgKGV4ZWMsIGluc3RhbmNlLCBqYXZh
VmFsdWUsICJzZXRTaG9ydCIsICIoTGphdmEvbGFuZy9PYmplY3Q7UylWIik7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBpbnRfdHlwZTogeworICAgICAgICAgICAg
ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UgKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJz
ZXRJbnQiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0kpViIpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgbG9uZ190eXBlOiB7CisgICAgICAgICAgICBkaXNwYXRjaFNl
dFZhbHVlVG9JbnN0YW5jZSAoZXhlYywgaW5zdGFuY2UsIGphdmFWYWx1ZSwgInNldExvbmciLCAi
KExqYXZhL2xhbmcvT2JqZWN0O0opViIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgZmxvYXRfdHlwZTogeworICAgICAgICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRv
SW5zdGFuY2UgKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRGbG9hdCIsICIoTGphdmEv
bGFuZy9PYmplY3Q7RilWIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBkb3VibGVfdHlwZTogeworICAgICAgICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFu
Y2UgKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXREb3VibGUiLCAiKExqYXZhL2xhbmcv
T2JqZWN0O0QpViIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0phdmFNZXRob2Q6OkphdmFNZXRob2QgKEpO
SUVudiAqZW52LCBqb2JqZWN0IGFNZXRob2QpCit7CisgICAgLy8gR2V0IHJldHVybiB0eXBlCisg
ICAgam9iamVjdCByZXR1cm5UeXBlID0gY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhTWV0aG9kLCAi
Z2V0UmV0dXJuVHlwZSIsICIoKUxqYXZhL2xhbmcvQ2xhc3M7Iik7CisgICAganN0cmluZyByZXR1
cm5UeXBlTmFtZSA9IChqc3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVjdD4ocmV0dXJuVHlwZSwg
ImdldE5hbWUiLCAiKClMamF2YS9sYW5nL1N0cmluZzsiKTsKKyAgICBfcmV0dXJuVHlwZSA9SmF2
YVN0cmluZyAoZW52LCByZXR1cm5UeXBlTmFtZSk7CisgICAgX0pOSVJldHVyblR5cGUgPSBKTklU
eXBlRnJvbUNsYXNzTmFtZSAoX3JldHVyblR5cGUuVVRGOFN0cmluZygpKTsKKyAgICBlbnYtPkRl
bGV0ZUxvY2FsUmVmIChyZXR1cm5UeXBlKTsKKyAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmIChyZXR1
cm5UeXBlTmFtZSk7CisKKyAgICAvLyBHZXQgbWV0aG9kIG5hbWUKKyAgICBqc3RyaW5nIG1ldGhv
ZE5hbWUgPSAoanN0cmluZyljYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFNZXRob2QsICJnZXROYW1l
IiwgIigpTGphdmEvbGFuZy9TdHJpbmc7Iik7CisgICAgX25hbWUgPSBKYXZhU3RyaW5nIChlbnYs
IG1ldGhvZE5hbWUpOworICAgIGVudi0+RGVsZXRlTG9jYWxSZWYgKG1ldGhvZE5hbWUpOworCisg
ICAgLy8gR2V0IHBhcmFtZXRlcnMKKyAgICBqYXJyYXkganBhcmFtZXRlcnMgPSAoamFycmF5KWNh
bGxKTklNZXRob2Q8am9iamVjdD4oYU1ldGhvZCwgImdldFBhcmFtZXRlclR5cGVzIiwgIigpW0xq
YXZhL2xhbmcvQ2xhc3M7Iik7CisgICAgX251bVBhcmFtZXRlcnMgPSBlbnYtPkdldEFycmF5TGVu
Z3RoIChqcGFyYW1ldGVycyk7CisgICAgX3BhcmFtZXRlcnMgPSBuZXcgSmF2YVBhcmFtZXRlcltf
bnVtUGFyYW1ldGVyc107CisgICAgCisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IF9u
dW1QYXJhbWV0ZXJzOyBpKyspIHsKKyAgICAgICAgam9iamVjdCBhUGFyYW1ldGVyID0gZW52LT5H
ZXRPYmplY3RBcnJheUVsZW1lbnQgKChqb2JqZWN0QXJyYXkpanBhcmFtZXRlcnMsIGkpOworICAg
ICAgICBqc3RyaW5nIHBhcmFtZXRlck5hbWUgPSAoanN0cmluZyljYWxsSk5JTWV0aG9kPGpvYmpl
Y3Q+KGFQYXJhbWV0ZXIsICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7Iik7CisgICAg
ICAgIF9wYXJhbWV0ZXJzW2ldID0gSmF2YVBhcmFtZXRlcihlbnYsIHBhcmFtZXRlck5hbWUpOwor
ICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmIChhUGFyYW1ldGVyKTsKKyAgICAgICAgZW52LT5E
ZWxldGVMb2NhbFJlZiAocGFyYW1ldGVyTmFtZSk7CisgICAgfQorICAgIGVudi0+RGVsZXRlTG9j
YWxSZWYgKGpwYXJhbWV0ZXJzKTsKKworICAgIC8vIENyZWF0ZWQgbGF6aWx5LgorICAgIF9zaWdu
YXR1cmUgPSAwOworICAgIF9tZXRob2RJRCA9IDA7CisgICAgCisgICAgamNsYXNzIG1vZGlmaWVy
Q2xhc3MgPSBlbnYtPkZpbmRDbGFzcygiamF2YS9sYW5nL3JlZmxlY3QvTW9kaWZpZXIiKTsKKyAg
ICBpbnQgbW9kaWZpZXJzID0gY2FsbEpOSU1ldGhvZDxqaW50PihhTWV0aG9kLCAiZ2V0TW9kaWZp
ZXJzIiwgIigpSSIpOworICAgIF9pc1N0YXRpYyA9IChib29sKWNhbGxKTklTdGF0aWNNZXRob2Q8
amJvb2xlYW4+KG1vZGlmaWVyQ2xhc3MsICJpc1N0YXRpYyIsICIoSSlaIiwgbW9kaWZpZXJzKTsK
KyAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKG1vZGlmaWVyQ2xhc3MpOworfQorCitKYXZhTWV0aG9k
Ojp+SmF2YU1ldGhvZCgpIAoreworICAgIGlmIChfc2lnbmF0dXJlKQorICAgICAgICBmcmVlKF9z
aWduYXR1cmUpOworICAgIGRlbGV0ZSBbXSBfcGFyYW1ldGVyczsKK307CisKKy8vIEpOSSBtZXRo
b2Qgc2lnbmF0dXJlcyB1c2UgJy8nIGJldHdlZW4gY29tcG9uZW50cyBvZiBhIGNsYXNzIG5hbWUs
IGJ1dAorLy8gd2UgZ2V0ICcuJyBiZXR3ZWVuIGNvbXBvbmVudHMgZnJvbSB0aGUgcmVmbGVjdGlv
biBBUEkuCitzdGF0aWMgdm9pZCBhcHBlbmRDbGFzc05hbWUoU3RyaW5nQnVpbGRlciYgYnVpbGRl
ciwgY29uc3QgY2hhciogY2xhc3NOYW1lKQoreworICAgIEFTU0VSVChKU0xvY2s6OmxvY2tDb3Vu
dCgpID4gMCk7CisgICAgCisgICAgY2hhciAqcmVzdWx0LCAqY3AgPSBzdHJkdXAoY2xhc3NOYW1l
KTsKKyAgICAKKyAgICByZXN1bHQgPSBjcDsKKyAgICB3aGlsZSAoKmNwKSB7CisgICAgICAgIGlm
ICgqY3AgPT0gJy4nKQorICAgICAgICAgICAgKmNwID0gJy8nOworICAgICAgICBjcCsrOworICAg
IH0KKyAgICAgICAgCisgICAgYnVpbGRlci5hcHBlbmQocmVzdWx0KTsKKworICAgIGZyZWUocmVz
dWx0KTsKK30KKworY29uc3QgY2hhciAqSmF2YU1ldGhvZDo6c2lnbmF0dXJlKCkgY29uc3QgCit7
CisgICAgaWYgKCFfc2lnbmF0dXJlKSB7CisgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisKKyAgICAgICAgU3RyaW5nQnVpbGRlciBzaWduYXR1cmVCdWlsZGVyOwor
ICAgICAgICBzaWduYXR1cmVCdWlsZGVyLmFwcGVuZCgiKCIpOworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IF9udW1QYXJhbWV0ZXJzOyBpKyspIHsKKyAgICAgICAgICAgIEphdmFQYXJhbWV0
ZXIqIGFQYXJhbWV0ZXIgPSBwYXJhbWV0ZXJBdChpKTsKKyAgICAgICAgICAgIEpOSVR5cGUgX0pO
SVR5cGUgPSBhUGFyYW1ldGVyLT5nZXRKTklUeXBlKCk7CisgICAgICAgICAgICBpZiAoX0pOSVR5
cGUgPT0gYXJyYXlfdHlwZSkKKyAgICAgICAgICAgICAgICBhcHBlbmRDbGFzc05hbWUoc2lnbmF0
dXJlQnVpbGRlciwgYVBhcmFtZXRlci0+dHlwZSgpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIHNpZ25hdHVyZUJ1aWxkZXIuYXBwZW5kKHNpZ25hdHVyZUZyb21QcmltaXRp
dmVUeXBlKF9KTklUeXBlKSk7CisgICAgICAgICAgICAgICAgaWYgKF9KTklUeXBlID09IG9iamVj
dF90eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENsYXNzTmFtZShzaWduYXR1cmVC
dWlsZGVyLCBhUGFyYW1ldGVyLT50eXBlKCkpOworICAgICAgICAgICAgICAgICAgICBzaWduYXR1
cmVCdWlsZGVyLmFwcGVuZCgiOyIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBzaWduYXR1cmVCdWlsZGVyLmFwcGVuZCgiKSIpOworICAgICAg
ICAKKyAgICAgICAgY29uc3QgY2hhciAqcmV0dXJuVHlwZSA9IF9yZXR1cm5UeXBlLlVURjhTdHJp
bmcoKTsKKyAgICAgICAgaWYgKF9KTklSZXR1cm5UeXBlID09IGFycmF5X3R5cGUpIHsKKyAgICAg
ICAgICAgIGFwcGVuZENsYXNzTmFtZShzaWduYXR1cmVCdWlsZGVyLCByZXR1cm5UeXBlKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNpZ25hdHVyZUJ1aWxkZXIuYXBwZW5kKHNpZ25h
dHVyZUZyb21QcmltaXRpdmVUeXBlKF9KTklSZXR1cm5UeXBlKSk7CisgICAgICAgICAgICBpZiAo
X0pOSVJldHVyblR5cGUgPT0gb2JqZWN0X3R5cGUpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRD
bGFzc05hbWUoc2lnbmF0dXJlQnVpbGRlciwgcmV0dXJuVHlwZSk7CisgICAgICAgICAgICAgICAg
c2lnbmF0dXJlQnVpbGRlci5hcHBlbmQoIjsiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgU3RyaW5nIHNpZ25hdHVyZVN0cmluZyA9IHNpZ25hdHVyZUJ1aWxk
ZXIudG9TdHJpbmcoKTsKKyAgICAgICAgX3NpZ25hdHVyZSA9IHN0cmR1cChzaWduYXR1cmVTdHJp
bmcudXRmOCgpLmRhdGEoKSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBfc2lnbmF0dXJlOwor
fQorCitKTklUeXBlIEphdmFNZXRob2Q6OkpOSVJldHVyblR5cGUoKSBjb25zdAoreworICAgIHJl
dHVybiBfSk5JUmV0dXJuVHlwZTsKK30KKworam1ldGhvZElEIEphdmFNZXRob2Q6Om1ldGhvZElE
IChqb2JqZWN0IG9iaikgY29uc3QKK3sKKyAgICBpZiAoX21ldGhvZElEID09IDApIHsKKyAgICAg
ICAgX21ldGhvZElEID0gZ2V0TWV0aG9kSUQgKG9iaiwgX25hbWUuVVRGOFN0cmluZygpLCBzaWdu
YXR1cmUoKSk7CisgICAgfQorICAgIHJldHVybiBfbWV0aG9kSUQ7Cit9CisKKworSmF2YUFycmF5
OjpKYXZhQXJyYXkoam9iamVjdCBhcnJheSwgY29uc3QgY2hhciogdHlwZSwgUGFzc1JlZlB0cjxS
b290T2JqZWN0PiByb290T2JqZWN0KQorICAgIDogQXJyYXkocm9vdE9iamVjdCkKK3sKKyAgICBf
YXJyYXkgPSBuZXcgSk9iamVjdFdyYXBwZXIoYXJyYXkpOworICAgIC8vIEphdmEgYXJyYXkgYXJl
IGZpeGVkIGxlbmd0aCwgc28gd2UgY2FuIGNhY2hlIGxlbmd0aC4KKyAgICBKTklFbnYgKmVudiA9
IGdldEpOSUVudigpOworICAgIF9sZW5ndGggPSBlbnYtPkdldEFycmF5TGVuZ3RoKChqYXJyYXkp
X2FycmF5LT5tX2luc3RhbmNlKTsKKyAgICBfdHlwZSA9IHN0cmR1cCh0eXBlKTsKKyAgICBtX3Jv
b3RPYmplY3QgPSByb290T2JqZWN0OworfQorCitKYXZhQXJyYXk6On5KYXZhQXJyYXkgKCkgCit7
CisgICAgZnJlZSAoKHZvaWQgKilfdHlwZSk7Cit9CisKK1Jvb3RPYmplY3QqIEphdmFBcnJheTo6
cm9vdE9iamVjdCgpIGNvbnN0IAoreyAKKyAgICByZXR1cm4gbV9yb290T2JqZWN0ICYmIG1fcm9v
dE9iamVjdC0+aXNWYWxpZCgpID8gbV9yb290T2JqZWN0LmdldCgpIDogMDsKK30KKwordm9pZCBK
YXZhQXJyYXk6OnNldFZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNW
YWx1ZSBhVmFsdWUpIGNvbnN0Cit7CisgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKKyAg
ICBjaGFyICpqYXZhQ2xhc3NOYW1lID0gMDsKKyAgICAKKyAgICBKTklUeXBlIGFycmF5VHlwZSA9
IEpOSVR5cGVGcm9tUHJpbWl0aXZlVHlwZShfdHlwZVsxXSk7CisgICAgaWYgKF90eXBlWzFdID09
ICdMJyl7CisgICAgICAgIC8vIFRoZSB0eXBlIG9mIHRoZSBhcnJheSB3aWxsIGJlIHNvbWV0aGlu
ZyBsaWtlOgorICAgICAgICAvLyAiW0xqYXZhLmxhbmcuc3RyaW5nOyIuICBUaGlzIGlzIGd1YXJh
bnRlZWQsIHNvIG5vIG5lZWQKKyAgICAgICAgLy8gZm9yIGV4dHJhIHNhbml0eSBjaGVja3MuCisg
ICAgICAgIGphdmFDbGFzc05hbWUgPSBzdHJkdXAoJl90eXBlWzJdKTsKKyAgICAgICAgamF2YUNs
YXNzTmFtZVtzdHJjaHIoamF2YUNsYXNzTmFtZSwgJzsnKS1qYXZhQ2xhc3NOYW1lXSA9IDA7Cisg
ICAgfQorICAgIGp2YWx1ZSBhSlZhbHVlID0gY29udmVydFZhbHVlVG9KVmFsdWUgKGV4ZWMsIGFW
YWx1ZSwgYXJyYXlUeXBlLCBqYXZhQ2xhc3NOYW1lKTsKKyAgICAKKyAgICBzd2l0Y2ggKGFycmF5
VHlwZSkgeworICAgICAgICBjYXNlIG9iamVjdF90eXBlOiB7CisgICAgICAgICAgICBlbnYtPlNl
dE9iamVjdEFycmF5RWxlbWVudCgoam9iamVjdEFycmF5KWphdmFBcnJheSgpLCBpbmRleCwgYUpW
YWx1ZS5sKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBib29sZWFuX3R5cGU6IHsKKyAgICAgICAgICAgIGVudi0+U2V0Qm9vbGVhbkFy
cmF5UmVnaW9uKChqYm9vbGVhbkFycmF5KWphdmFBcnJheSgpLCBpbmRleCwgMSwgJmFKVmFsdWUu
eik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgYnl0ZV90eXBlOiB7CisgICAgICAgICAgICBlbnYtPlNldEJ5dGVBcnJheVJlZ2lvbigo
amJ5dGVBcnJheSlqYXZhQXJyYXkoKSwgaW5kZXgsIDEsICZhSlZhbHVlLmIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIGNoYXJfdHlw
ZTogeworICAgICAgICAgICAgZW52LT5TZXRDaGFyQXJyYXlSZWdpb24oKGpjaGFyQXJyYXkpamF2
YUFycmF5KCksIGluZGV4LCAxLCAmYUpWYWx1ZS5jKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBzaG9ydF90eXBlOiB7CisgICAgICAg
ICAgICBlbnYtPlNldFNob3J0QXJyYXlSZWdpb24oKGpzaG9ydEFycmF5KWphdmFBcnJheSgpLCBp
bmRleCwgMSwgJmFKVmFsdWUucyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgaW50X3R5cGU6IHsKKyAgICAgICAgICAgIGVudi0+U2V0
SW50QXJyYXlSZWdpb24oKGppbnRBcnJheSlqYXZhQXJyYXkoKSwgaW5kZXgsIDEsICZhSlZhbHVl
LmkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIGxvbmdfdHlwZTogeworICAgICAgICAgICAgZW52LT5TZXRMb25nQXJyYXlSZWdpb24o
KGpsb25nQXJyYXkpamF2YUFycmF5KCksIGluZGV4LCAxLCAmYUpWYWx1ZS5qKTsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgZmxvYXRfdHlwZTogeworICAgICAgICAgICAg
ZW52LT5TZXRGbG9hdEFycmF5UmVnaW9uKChqZmxvYXRBcnJheSlqYXZhQXJyYXkoKSwgaW5kZXgs
IDEsICZhSlZhbHVlLmYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIGRvdWJsZV90eXBlOiB7CisgICAgICAgICAgICBlbnYtPlNldERv
dWJsZUFycmF5UmVnaW9uKChqZG91YmxlQXJyYXkpamF2YUFycmF5KCksIGluZGV4LCAxLCAmYUpW
YWx1ZS5kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBpZiAoamF2YUNsYXNzTmFtZSkKKyAg
ICAgICAgZnJlZSAoKHZvaWQgKilqYXZhQ2xhc3NOYW1lKTsKK30KKworCitKU1ZhbHVlIEphdmFB
cnJheTo6dmFsdWVBdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4KSBjb25zdAorewor
ICAgIEpOSUVudiAqZW52ID0gZ2V0Sk5JRW52KCk7CisgICAgSk5JVHlwZSBhcnJheVR5cGUgPSBK
TklUeXBlRnJvbVByaW1pdGl2ZVR5cGUoX3R5cGVbMV0pOworICAgIHN3aXRjaCAoYXJyYXlUeXBl
KSB7CisgICAgICAgIGNhc2Ugb2JqZWN0X3R5cGU6IHsKKyAgICAgICAgICAgIGpvYmplY3RBcnJh
eSBvYmplY3RBcnJheSA9IChqb2JqZWN0QXJyYXkpamF2YUFycmF5KCk7CisgICAgICAgICAgICBq
b2JqZWN0IGFuT2JqZWN0OworICAgICAgICAgICAgYW5PYmplY3QgPSBlbnYtPkdldE9iamVjdEFy
cmF5RWxlbWVudChvYmplY3RBcnJheSwgaW5kZXgpOworCisgICAgICAgICAgICAvLyBObyBvYmpl
Y3Q/CisgICAgICAgICAgICBpZiAoIWFuT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBO
ZXN0ZWQgYXJyYXk/CisgICAgICAgICAgICBpZiAoX3R5cGVbMV0gPT0gJ1snKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEphdmFBcnJheTo6Y29udmVydEpPYmplY3RUb0FycmF5KGV4ZWMsIGFu
T2JqZWN0LCBfdHlwZSsxLCByb290T2JqZWN0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gb3IgYXJyYXkgb2Ygb3RoZXIgb2JqZWN0IHR5cGU/CisgICAgICAgICAgICByZXR1cm4g
SmF2YUluc3RhbmNlOjpjcmVhdGUoYW5PYmplY3QsIHJvb3RPYmplY3QoKSktPmNyZWF0ZVJ1bnRp
bWVPYmplY3QoZXhlYyk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIGJv
b2xlYW5fdHlwZTogeworICAgICAgICAgICAgamJvb2xlYW5BcnJheSBib29sZWFuQXJyYXkgPSAo
amJvb2xlYW5BcnJheSlqYXZhQXJyYXkoKTsKKyAgICAgICAgICAgIGpib29sZWFuIGFCb29sZWFu
OworICAgICAgICAgICAgZW52LT5HZXRCb29sZWFuQXJyYXlSZWdpb24oYm9vbGVhbkFycmF5LCBp
bmRleCwgMSwgJmFCb29sZWFuKTsKKyAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oYUJvb2xl
YW4pOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBieXRlX3R5cGU6IHsK
KyAgICAgICAgICAgIGpieXRlQXJyYXkgYnl0ZUFycmF5ID0gKGpieXRlQXJyYXkpamF2YUFycmF5
KCk7CisgICAgICAgICAgICBqYnl0ZSBhQnl0ZTsKKyAgICAgICAgICAgIGVudi0+R2V0Qnl0ZUFy
cmF5UmVnaW9uKGJ5dGVBcnJheSwgaW5kZXgsIDEsICZhQnl0ZSk7CisgICAgICAgICAgICByZXR1
cm4ganNOdW1iZXIoZXhlYywgYUJ5dGUpOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBjaGFyX3R5cGU6IHsKKyAgICAgICAgICAgIGpjaGFyQXJyYXkgY2hhckFycmF5ID0g
KGpjaGFyQXJyYXkpamF2YUFycmF5KCk7CisgICAgICAgICAgICBqY2hhciBhQ2hhcjsKKyAgICAg
ICAgICAgIGVudi0+R2V0Q2hhckFycmF5UmVnaW9uKGNoYXJBcnJheSwgaW5kZXgsIDEsICZhQ2hh
cik7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgYUNoYXIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIHNob3J0X3R5
cGU6IHsKKyAgICAgICAgICAgIGpzaG9ydEFycmF5IHNob3J0QXJyYXkgPSAoanNob3J0QXJyYXkp
amF2YUFycmF5KCk7CisgICAgICAgICAgICBqc2hvcnQgYVNob3J0OworICAgICAgICAgICAgZW52
LT5HZXRTaG9ydEFycmF5UmVnaW9uKHNob3J0QXJyYXksIGluZGV4LCAxLCAmYVNob3J0KTsKKyAg
ICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBhU2hvcnQpOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBpbnRfdHlwZTogeworICAgICAgICAgICAgamludEFycmF5
IGludEFycmF5ID0gKGppbnRBcnJheSlqYXZhQXJyYXkoKTsKKyAgICAgICAgICAgIGppbnQgYW5J
bnQ7CisgICAgICAgICAgICBlbnYtPkdldEludEFycmF5UmVnaW9uKGludEFycmF5LCBpbmRleCwg
MSwgJmFuSW50KTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBhbkludCk7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIGxvbmdfdHlwZTogeworICAgICAg
ICAgICAgamxvbmdBcnJheSBsb25nQXJyYXkgPSAoamxvbmdBcnJheSlqYXZhQXJyYXkoKTsKKyAg
ICAgICAgICAgIGpsb25nIGFMb25nOworICAgICAgICAgICAgZW52LT5HZXRMb25nQXJyYXlSZWdp
b24obG9uZ0FycmF5LCBpbmRleCwgMSwgJmFMb25nKTsKKyAgICAgICAgICAgIHJldHVybiBqc051
bWJlcihleGVjLCBhTG9uZyk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IGZsb2F0X3R5cGU6IHsKKyAgICAgICAgICAgIGpmbG9hdEFycmF5IGZsb2F0QXJyYXkgPSAoamZs
b2F0QXJyYXkpamF2YUFycmF5KCk7CisgICAgICAgICAgICBqZmxvYXQgYUZsb2F0OworICAgICAg
ICAgICAgZW52LT5HZXRGbG9hdEFycmF5UmVnaW9uKGZsb2F0QXJyYXksIGluZGV4LCAxLCAmYUZs
b2F0KTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBhRmxvYXQpOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBkb3VibGVfdHlwZTogeworICAgICAgICAg
ICAgamRvdWJsZUFycmF5IGRvdWJsZUFycmF5ID0gKGpkb3VibGVBcnJheSlqYXZhQXJyYXkoKTsK
KyAgICAgICAgICAgIGpkb3VibGUgYURvdWJsZTsKKyAgICAgICAgICAgIGVudi0+R2V0RG91Ymxl
QXJyYXlSZWdpb24oZG91YmxlQXJyYXksIGluZGV4LCAxLCAmYURvdWJsZSk7CisgICAgICAgICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgYURvdWJsZSk7CisgICAgICAgIH0KKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
fQorCit1bnNpZ25lZCBpbnQgSmF2YUFycmF5OjpnZXRMZW5ndGgoKSBjb25zdAoreworICAgIHJl
dHVybiBfbGVuZ3RoOworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKSW5k
ZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9KTklCcmlkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYnJpZGdlL2puaS9KTklCcmlkZ2UuY3BwCShyZXZpc2lvbiA1MzU0MSkKKysrIFdlYkNvcmUv
YnJpZGdlL2puaS9KTklCcmlkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBA
CiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGpuaV9ydW50aW1lLmg+Cisj
aW5jbHVkZSAiSk5JQnJpZGdlLmgiCiAKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQogCklu
ZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvSk5JQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5oCShyZXZpc2lvbiA1MzU0MSkJKGZyb20gV2ViQ29yZS9i
cmlkZ2Uvam5pL2puaV9ydW50aW1lLmg6NTM1NDEpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvSk5J
QnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgX0pOSV9SVU5USU1FX0hfCisjZGVmaW5lIF9KTklfUlVOVElNRV9IXwor
CisjaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKKworI2luY2x1ZGUgIkpOSVV0aWxpdHkuaCIK
KyNpbmNsdWRlICJKYXZhSW5zdGFuY2VKU0MuaCIKKworI2lmIFVTRShKU0MpCisjaW5jbHVkZSAi
SmF2YVN0cmluZ0pTQy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBKU0MKK3sKKworbmFtZXNwYWNl
IEJpbmRpbmdzCit7CisKK3R5cGVkZWYgY29uc3QgY2hhciogUnVudGltZVR5cGU7CisKK2NsYXNz
IEphdmFTdHJpbmcKK3sKK3B1YmxpYzoKKyAgICBKYXZhU3RyaW5nKCkKKyAgICB7CisgICAgICAg
IG1faW1wbC5pbml0KCk7CisgICAgfQorCisgICAgSmF2YVN0cmluZyhKTklFbnYqIGUsIGpzdHJp
bmcgcykKKyAgICB7CisgICAgICAgIG1faW1wbC5pbml0KGUsIHMpOworICAgIH0KKworICAgIEph
dmFTdHJpbmcoanN0cmluZyBzKQorICAgIHsKKyAgICAgICAgbV9pbXBsLmluaXQoZ2V0Sk5JRW52
KCksIHMpOworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIFVURjhTdHJpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2ltcGwuVVRGOFN0cmluZygpOyB9CisgICAgY29uc3QgamNoYXIqIHVjaGFycygpIGNv
bnN0IHsgcmV0dXJuIG1faW1wbC51Y2hhcnMoKTsgfQorICAgIGludCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX2ltcGwubGVuZ3RoKCk7IH0KKyNpZiBVU0UoSlNDKQorICAgIG9wZXJhdG9yIFVT
dHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2ltcGwudVN0cmluZygpOyB9CisjZW5kaWYKKworcHJp
dmF0ZToKKyAgICBKYXZhU3RyaW5nSW1wbCBtX2ltcGw7Cit9OworCitjbGFzcyBKYXZhUGFyYW1l
dGVyCit7CitwdWJsaWM6CisgICAgSmF2YVBhcmFtZXRlciAoKSA6IF9KTklUeXBlKGludmFsaWRf
dHlwZSkge307CisgICAgSmF2YVBhcmFtZXRlciAoSk5JRW52ICplbnYsIGpzdHJpbmcgdHlwZSk7
CisgICAgdmlydHVhbCB+SmF2YVBhcmFtZXRlcigpIHsgfQorCisgICAgUnVudGltZVR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIF90eXBlLlVURjhTdHJpbmcoKTsgfQorICAgIEpOSVR5cGUgZ2V0
Sk5JVHlwZSgpIGNvbnN0IHsgcmV0dXJuIF9KTklUeXBlOyB9CisgICAgCitwcml2YXRlOgorICAg
IEphdmFTdHJpbmcgX3R5cGU7CisgICAgSk5JVHlwZSBfSk5JVHlwZTsKK307CisKKworY2xhc3Mg
SmF2YUZpZWxkIDogcHVibGljIEZpZWxkCit7CitwdWJsaWM6CisgICAgSmF2YUZpZWxkIChKTklF
bnYgKmVudiwgam9iamVjdCBhRmllbGQpOworCisgICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlRnJv
bUluc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSW5zdGFuY2UgKmluc3RhbmNlLCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3Q7CisgICAgCisg
ICAgY29uc3QgSmF2YVN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIF9uYW1lOyB9CisgICAg
dmlydHVhbCBSdW50aW1lVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gX3R5cGUuVVRGOFN0cmlu
ZygpOyB9CisKKyAgICBKTklUeXBlIGdldEpOSVR5cGUoKSBjb25zdCB7IHJldHVybiBfSk5JVHlw
ZTsgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNl
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSmF2YUluc3RhbmNlICppbnN0YW5jZSwganZhbHVlIGph
dmFWYWx1ZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnKSBjb25zdDsKKyAgICBq
dmFsdWUgZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEph
dmFJbnN0YW5jZSAqaW5zdGFuY2UsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywg
Sk5JVHlwZSByZXR1cm5UeXBlKSBjb25zdDsKKworICAgIEphdmFTdHJpbmcgX25hbWU7CisgICAg
SmF2YVN0cmluZyBfdHlwZTsKKyAgICBKTklUeXBlIF9KTklUeXBlOworICAgIFJlZlB0cjxKT2Jq
ZWN0V3JhcHBlcj4gX2ZpZWxkOworfTsKKworCitjbGFzcyBKYXZhTWV0aG9kIDogcHVibGljIE1l
dGhvZAoreworcHVibGljOgorICAgIEphdmFNZXRob2QoSk5JRW52KiBlbnYsIGpvYmplY3QgYU1l
dGhvZCk7CisgICAgfkphdmFNZXRob2QoKTsKKworICAgIGNvbnN0IEphdmFTdHJpbmcmIG5hbWUo
KSBjb25zdCB7IHJldHVybiBfbmFtZTsgfQorICAgIFJ1bnRpbWVUeXBlIHJldHVyblR5cGUoKSBj
b25zdCB7IHJldHVybiBfcmV0dXJuVHlwZS5VVEY4U3RyaW5nKCk7IH07CisgICAgSmF2YVBhcmFt
ZXRlciogcGFyYW1ldGVyQXQoaW50IGkpIGNvbnN0IHsgcmV0dXJuICZfcGFyYW1ldGVyc1tpXTsg
fTsKKyAgICBpbnQgbnVtUGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIF9udW1QYXJhbWV0ZXJz
OyB9OworICAgIAorICAgIGNvbnN0IGNoYXIgKnNpZ25hdHVyZSgpIGNvbnN0OworICAgIEpOSVR5
cGUgSk5JUmV0dXJuVHlwZSgpIGNvbnN0OworCisgICAgam1ldGhvZElEIG1ldGhvZElEIChqb2Jq
ZWN0IG9iaikgY29uc3Q7CisgICAgCisgICAgYm9vbCBpc1N0YXRpYygpIGNvbnN0IHsgcmV0dXJu
IF9pc1N0YXRpYzsgfQorCitwcml2YXRlOgorICAgIEphdmFQYXJhbWV0ZXIqIF9wYXJhbWV0ZXJz
OworICAgIGludCBfbnVtUGFyYW1ldGVyczsKKyAgICBKYXZhU3RyaW5nIF9uYW1lOworICAgIG11
dGFibGUgY2hhciogX3NpZ25hdHVyZTsKKyAgICBKYXZhU3RyaW5nIF9yZXR1cm5UeXBlOworICAg
IEpOSVR5cGUgX0pOSVJldHVyblR5cGU7CisgICAgbXV0YWJsZSBqbWV0aG9kSUQgX21ldGhvZElE
OworICAgIGJvb2wgX2lzU3RhdGljOworfTsKKworY2xhc3MgSmF2YUFycmF5IDogcHVibGljIEFy
cmF5Cit7CitwdWJsaWM6CisgICAgSmF2YUFycmF5KGpvYmplY3QgYXJyYXksIGNvbnN0IGNoYXIq
IHR5cGUsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4pOworICAgIHZpcnR1YWwgfkphdmFBcnJheSgp
OworCisgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCgpIGNvbnN0OworCisgICAgdmlydHVhbCB2
b2lkIHNldFZhbHVlQXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgsIEpTVmFs
dWUgYVZhbHVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVBdChFeGVjU3RhdGUg
KmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0TGVuZ3RoKCkgY29uc3Q7CisgICAgCisgICAgam9iamVjdCBqYXZhQXJyYXkoKSBjb25z
dCB7IHJldHVybiBfYXJyYXktPm1faW5zdGFuY2U7IH0KKworICAgIHN0YXRpYyBKU1ZhbHVlIGNv
bnZlcnRKT2JqZWN0VG9BcnJheSAoRXhlY1N0YXRlKiBleGVjLCBqb2JqZWN0IGFuT2JqZWN0LCBj
b25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KTsKKworcHJpdmF0ZToKKyAg
ICBSZWZQdHI8Sk9iamVjdFdyYXBwZXI+IF9hcnJheTsKKyAgICB1bnNpZ25lZCBpbnQgX2xlbmd0
aDsKKyAgICBjb25zdCBjaGFyICpfdHlwZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEJpbmRpbmdz
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKE1BQ19KQVZBX0JSSURH
RSkKKworI2VuZGlmIC8vIF9KTklfUlVOVElNRV9IXwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5p
L0pOSUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9KTklCcmlkZ2Uu
aAkocmV2aXNpb24gNTM1NDEpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvSk5JQnJpZGdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNp
Zm5kZWYgX0pOSV9SVU5USU1FX0hfCi0jZGVmaW5lIF9KTklfUlVOVElNRV9IXworI2lmbmRlZiBK
TklCcmlkZ2VfaAorI2RlZmluZSBKTklCcmlkZ2VfaAogCiAjaWYgRU5BQkxFKE1BQ19KQVZBX0JS
SURHRSkKIApAQCAtMTY5LDQgKzE2OSw0IEBAIHByaXZhdGU6CiAKICNlbmRpZiAvLyBFTkFCTEUo
TUFDX0pBVkFfQlJJREdFKQogCi0jZW5kaWYgLy8gX0pOSV9SVU5USU1FX0hfCisjZW5kaWYgLy8g
Sk5JQnJpZGdlX2gKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQkocmV2aXNpb24g
NTM1NDEpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSwxMyArMjksMTMgQEAKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQogCiAj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJKTklCcmlkZ2UuaCIKICNpbmNsdWRlICJKTklV
dGlsaXR5LmgiCiAjaW5jbHVkZSAiSk5JVXRpbGl0eVByaXZhdGUuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU3Ry
aW5nU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlRnJhbWVWaWV3LmgiCi0jaW5j
bHVkZSAiam5pX3J1bnRpbWUuaCIKICNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgogI2luY2x1
ZGUgInJ1bnRpbWVfcm9vdC5oIgogI2luY2x1ZGUgPGludGVycHJldGVyL0NhbGxGcmFtZS5oPgpJ
bmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JyaWRnZS9qbmkvam5pX3J1bnRpbWUuY3BwCShyZXZpc2lvbiA1MzU0MSkKKysrIFdl
YkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTUz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlIDxqbmlfcnVudGltZS5oPgotCi0jaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKLQotI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKLSNpbmNsdWRlICJKTklVdGlsaXR5LmgiCi0jaW5jbHVkZSAiSk5J
VXRpbGl0eVByaXZhdGUuaCIKLSNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCi0jaW5jbHVkZSAi
cnVudGltZV9hcnJheS5oIgotI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCi0jaW5jbHVkZSAi
cnVudGltZV9yb290LmgiCi0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvSlNMb2NrLmg+Ci0KLSNpZmRlZiBOREVCVUcKLSNkZWZpbmUgSlNfTE9HKGZvcm1hdEFu
ZEFyZ3MuLi4pICgodm9pZCkwKQotI2Vsc2UKLSNkZWZpbmUgSlNfTE9HKGZvcm1hdEFuZEFyZ3Mu
Li4pIHsgXAotICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiVkIC0tICVzOiAgIiwgX19GSUxFX18s
IF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOyBcCi0gICAgZnByaW50ZihzdGRlcnIsIGZvcm1hdEFu
ZEFyZ3MpOyBcCi19Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLXVzaW5nIG5hbWVz
cGFjZSBKU0M6OkJpbmRpbmdzOwotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLQotSmF2YVBh
cmFtZXRlcjo6SmF2YVBhcmFtZXRlciAoSk5JRW52ICplbnYsIGpzdHJpbmcgdHlwZSkKLXsKLSAg
ICBfdHlwZSA9IEphdmFTdHJpbmcgKGVudiwgdHlwZSk7Ci0gICAgX0pOSVR5cGUgPSBKTklUeXBl
RnJvbUNsYXNzTmFtZSAoX3R5cGUuVVRGOFN0cmluZygpKTsKLX0KLQotSmF2YUZpZWxkOjpKYXZh
RmllbGQgKEpOSUVudiAqZW52LCBqb2JqZWN0IGFGaWVsZCkKLXsKLSAgICAvLyBHZXQgZmllbGQg
dHlwZQotICAgIGpvYmplY3QgZmllbGRUeXBlID0gY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhRmll
bGQsICJnZXRUeXBlIiwgIigpTGphdmEvbGFuZy9DbGFzczsiKTsKLSAgICBqc3RyaW5nIGZpZWxk
VHlwZU5hbWUgPSAoanN0cmluZyljYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGZpZWxkVHlwZSwgImdl
dE5hbWUiLCAiKClMamF2YS9sYW5nL1N0cmluZzsiKTsKLSAgICBfdHlwZSA9IEphdmFTdHJpbmco
ZW52LCBmaWVsZFR5cGVOYW1lKTsKLSAgICBfSk5JVHlwZSA9IEpOSVR5cGVGcm9tQ2xhc3NOYW1l
IChfdHlwZS5VVEY4U3RyaW5nKCkpOwotCi0gICAgLy8gR2V0IGZpZWxkIG5hbWUKLSAgICBqc3Ry
aW5nIGZpZWxkTmFtZSA9IChqc3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVjdD4oYUZpZWxkLCAi
Z2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOwotICAgIF9uYW1lID0gSmF2YVN0cmlu
ZyhlbnYsIGZpZWxkTmFtZSk7Ci0KLSAgICBfZmllbGQgPSBuZXcgSk9iamVjdFdyYXBwZXIoYUZp
ZWxkKTsKLX0KLQotSlNWYWx1ZSBKYXZhQXJyYXk6OmNvbnZlcnRKT2JqZWN0VG9BcnJheShFeGVj
U3RhdGUqIGV4ZWMsIGpvYmplY3QgYW5PYmplY3QsIGNvbnN0IGNoYXIqIHR5cGUsIFBhc3NSZWZQ
dHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCkKLXsKLSAgICBpZiAodHlwZVswXSAhPSAnWycpCi0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgcmV0dXJuIG5ldyAoZXhlYykgUnVu
dGltZUFycmF5KGV4ZWMsIG5ldyBKYXZhQXJyYXkoKGpvYmplY3QpYW5PYmplY3QsIHR5cGUsIHJv
b3RPYmplY3QpKTsKLX0KLQotanZhbHVlIEphdmFGaWVsZDo6ZGlzcGF0Y2hWYWx1ZUZyb21JbnN0
YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEphdmFJbnN0YW5jZSAqaW5zdGFuY2UsIGNvbnN0
IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywgSk5JVHlwZSByZXR1cm5UeXBlKSBjb25zdAot
ewotICAgIGpvYmplY3Qgamluc3RhbmNlID0gaW5zdGFuY2UtPmphdmFJbnN0YW5jZSgpOwotICAg
IGpvYmplY3QgZmllbGRKSW5zdGFuY2UgPSBfZmllbGQtPm1faW5zdGFuY2U7Ci0gICAgSk5JRW52
ICplbnYgPSBnZXRKTklFbnYoKTsKLSAgICBqdmFsdWUgcmVzdWx0OwotCi0gICAgYnplcm8gKCZy
ZXN1bHQsIHNpemVvZihqdmFsdWUpKTsKLSAgICBqY2xhc3MgY2xzID0gZW52LT5HZXRPYmplY3RD
bGFzcyhmaWVsZEpJbnN0YW5jZSk7Ci0gICAgaWYgKCBjbHMgIT0gTlVMTCApIHsKLSAgICAgICAg
am1ldGhvZElEIG1pZCA9IGVudi0+R2V0TWV0aG9kSUQoY2xzLCBuYW1lLCBzaWcpOwotICAgICAg
ICBpZiAoIG1pZCAhPSBOVUxMICkKLSAgICAgICAgewotICAgICAgICAgICAgUm9vdE9iamVjdCog
cm9vdE9iamVjdCA9IGluc3RhbmNlLT5yb290T2JqZWN0KCk7Ci0gICAgICAgICAgICBpZiAocm9v
dE9iamVjdCAmJiByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSkgewotICAgICAgICAgICAgICAg
IEpTVmFsdWUgZXhjZXB0aW9uRGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAganZhbHVlIGFy
Z3NbMV07Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYXJnc1swXS5sID0gamlu
c3RhbmNlOwotICAgICAgICAgICAgICAgIGRpc3BhdGNoSk5JQ2FsbChleGVjLCByb290T2JqZWN0
LT5uYXRpdmVIYW5kbGUoKSwgZmllbGRKSW5zdGFuY2UsIGZhbHNlLCByZXR1cm5UeXBlLCBtaWQs
IGFyZ3MsIHJlc3VsdCwgMCwgZXhjZXB0aW9uRGVzY3JpcHRpb24pOwotICAgICAgICAgICAgICAg
IGlmIChleGNlcHRpb25EZXNjcmlwdGlvbikKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
cihleGVjLCBHZW5lcmFsRXJyb3IsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1KU1ZhbHVlIEphdmFGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJbnN0YW5jZSogaSkgY29uc3QgCi17Ci0gICAgY29uc3QgSmF2YUluc3RhbmNlICpp
bnN0YW5jZSA9IHN0YXRpY19jYXN0PGNvbnN0IEphdmFJbnN0YW5jZSAqPihpKTsKLQotICAgIEpT
VmFsdWUganNyZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgIAotICAgIHN3aXRjaCAoX0pOSVR5
cGUpIHsKLSAgICAgICAgY2FzZSBhcnJheV90eXBlOgotICAgICAgICBjYXNlIG9iamVjdF90eXBl
OiB7Ci0gICAgICAgICAgICBqdmFsdWUgcmVzdWx0ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5j
ZSAoZXhlYywgaW5zdGFuY2UsICJnZXQiLCAiKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5n
L09iamVjdDsiLCBvYmplY3RfdHlwZSk7Ci0gICAgICAgICAgICBqb2JqZWN0IGFuT2JqZWN0ID0g
cmVzdWx0Lmw7Ci0KLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFycmF5VHlwZSA9IHR5cGUoKTsK
LSAgICAgICAgICAgIGlmIChhcnJheVR5cGVbMF0gPT0gJ1snKSB7Ci0gICAgICAgICAgICAgICAg
anNyZXN1bHQgPSBKYXZhQXJyYXk6OmNvbnZlcnRKT2JqZWN0VG9BcnJheShleGVjLCBhbk9iamVj
dCwgYXJyYXlUeXBlLCBpbnN0YW5jZS0+cm9vdE9iamVjdCgpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKGFuT2JqZWN0ICE9IDApewotICAgICAgICAgICAgICAgIGpzcmVz
dWx0ID0gSmF2YUluc3RhbmNlOjpjcmVhdGUoYW5PYmplY3QsIGluc3RhbmNlLT5yb290T2JqZWN0
KCkpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgYm9vbGVhbl90eXBl
OgotICAgICAgICAgICAganNyZXN1bHQgPSBqc0Jvb2xlYW4oZGlzcGF0Y2hWYWx1ZUZyb21JbnN0
YW5jZShleGVjLCBpbnN0YW5jZSwgImdldEJvb2xlYW4iLCAiKExqYXZhL2xhbmcvT2JqZWN0Oyla
IiwgYm9vbGVhbl90eXBlKS56KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgYnl0ZV90eXBlOgotICAgICAgICBjYXNlIGNoYXJfdHlwZToKLSAgICAgICAg
Y2FzZSBzaG9ydF90eXBlOgotICAgICAgICAKLSAgICAgICAgY2FzZSBpbnRfdHlwZTogewotICAg
ICAgICAgICAgamludCB2YWx1ZTsKLSAgICAgICAgICAgIGp2YWx1ZSByZXN1bHQgPSBkaXNwYXRj
aFZhbHVlRnJvbUluc3RhbmNlIChleGVjLCBpbnN0YW5jZSwgImdldEludCIsICIoTGphdmEvbGFu
Zy9PYmplY3Q7KUkiLCBpbnRfdHlwZSk7Ci0gICAgICAgICAgICB2YWx1ZSA9IHJlc3VsdC5pOwot
ICAgICAgICAgICAganNyZXN1bHQgPSBqc051bWJlcihleGVjLCAoaW50KXZhbHVlKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGxvbmdfdHlwZToKLSAgICAgICAg
Y2FzZSBmbG9hdF90eXBlOgotICAgICAgICBjYXNlIGRvdWJsZV90eXBlOiB7Ci0gICAgICAgICAg
ICBqZG91YmxlIHZhbHVlOwotICAgICAgICAgICAganZhbHVlIHJlc3VsdCA9IGRpc3BhdGNoVmFs
dWVGcm9tSW5zdGFuY2UgKGV4ZWMsIGluc3RhbmNlLCAiZ2V0RG91YmxlIiwgIihMamF2YS9sYW5n
L09iamVjdDspRCIsIGRvdWJsZV90eXBlKTsKLSAgICAgICAgICAgIHZhbHVlID0gcmVzdWx0Lmk7
Ci0gICAgICAgICAgICBqc3Jlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIChkb3VibGUpdmFsdWUpOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBKU19MT0cgKCJnZXR0aW5nICVzID0gJXNcbiIsIFVTdHJpbmcobmFt
ZSgpKS5VVEY4U3RyaW5nKCkuY19zdHIoKSwganNyZXN1bHQudG9TdHJpbmcoZXhlYykuYXNjaWko
KSk7Ci0gICAgCi0gICAgcmV0dXJuIGpzcmVzdWx0OwotfQotCi12b2lkIEphdmFGaWVsZDo6ZGlz
cGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBKYXZhSW5zdGFu
Y2UgKmluc3RhbmNlLCBqdmFsdWUgamF2YVZhbHVlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBj
aGFyICpzaWcpIGNvbnN0Ci17Ci0gICAgam9iamVjdCBqaW5zdGFuY2UgPSBpbnN0YW5jZS0+amF2
YUluc3RhbmNlKCk7Ci0gICAgam9iamVjdCBmaWVsZEpJbnN0YW5jZSA9IF9maWVsZC0+bV9pbnN0
YW5jZTsKLSAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigpOwotCi0gICAgamNsYXNzIGNscyA9
IGVudi0+R2V0T2JqZWN0Q2xhc3MoZmllbGRKSW5zdGFuY2UpOwotICAgIGlmICggY2xzICE9IE5V
TEwgKSB7Ci0gICAgICAgIGptZXRob2RJRCBtaWQgPSBlbnYtPkdldE1ldGhvZElEKGNscywgbmFt
ZSwgc2lnKTsKLSAgICAgICAgaWYgKCBtaWQgIT0gTlVMTCApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBpbnN0YW5jZS0+cm9vdE9iamVjdCgpOwotICAg
ICAgICAgICAgaWYgKHJvb3RPYmplY3QgJiYgcm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCkpIHsK
LSAgICAgICAgICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbkRlc2NyaXB0aW9uOwotICAgICAgICAg
ICAgICAgIGp2YWx1ZSBhcmdzWzJdOwotICAgICAgICAgICAgICAgIGp2YWx1ZSByZXN1bHQ7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYXJnc1swXS5sID0gamluc3RhbmNlOwot
ICAgICAgICAgICAgICAgIGFyZ3NbMV0gPSBqYXZhVmFsdWU7Ci0gICAgICAgICAgICAgICAgZGlz
cGF0Y2hKTklDYWxsKGV4ZWMsIHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgpLCBmaWVsZEpJbnN0
YW5jZSwgZmFsc2UsIHZvaWRfdHlwZSwgbWlkLCBhcmdzLCByZXN1bHQsIDAsIGV4Y2VwdGlvbkRl
c2NyaXB0aW9uKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uRGVzY3JpcHRpb24pCi0g
ICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgR2VuZXJhbEVycm9yLCBleGNlcHRp
b25EZXNjcmlwdGlvbi50b1N0cmluZyhleGVjKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgSmF2YUZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJbnN0YW5jZSogaSwgSlNWYWx1ZSBhVmFsdWUpIGNvbnN0Ci17Ci0gICAg
Y29uc3QgSmF2YUluc3RhbmNlICppbnN0YW5jZSA9IHN0YXRpY19jYXN0PGNvbnN0IEphdmFJbnN0
YW5jZSAqPihpKTsKLSAgICBqdmFsdWUgamF2YVZhbHVlID0gY29udmVydFZhbHVlVG9KVmFsdWUg
KGV4ZWMsIGFWYWx1ZSwgX0pOSVR5cGUsIHR5cGUoKSk7Ci0KLSAgICBKU19MT0cgKCJzZXR0aW5n
IHZhbHVlICVzIHRvICVzXG4iLCBVU3RyaW5nKG5hbWUoKSkuVVRGOFN0cmluZygpLmNfc3RyKCks
IGFWYWx1ZS50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKLQotICAgIHN3aXRjaCAoX0pOSVR5cGUp
IHsKLSAgICAgICAgY2FzZSBhcnJheV90eXBlOgotICAgICAgICBjYXNlIG9iamVjdF90eXBlOiB7
Ci0gICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZSAoZXhlYywgaW5zdGFuY2Us
IGphdmFWYWx1ZSwgInNldCIsICIoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7
KVYiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIGJvb2xlYW5fdHlwZTogewotICAgICAgICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFu
Y2UgKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRCb29sZWFuIiwgIihMamF2YS9sYW5n
L09iamVjdDtaKVYiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIGJ5dGVfdHlwZTogewotICAgICAgICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRv
SW5zdGFuY2UgKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRCeXRlIiwgIihMamF2YS9s
YW5nL09iamVjdDtCKVYiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgICBj
YXNlIGNoYXJfdHlwZTogewotICAgICAgICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2Ug
KGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRDaGFyIiwgIihMamF2YS9sYW5nL09iamVj
dDtDKVYiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIHNob3J0
X3R5cGU6IHsKLSAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlIChleGVjLCBp
bnN0YW5jZSwgamF2YVZhbHVlLCAic2V0U2hvcnQiLCAiKExqYXZhL2xhbmcvT2JqZWN0O1MpViIp
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgaW50X3R5cGU6IHsK
LSAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlIChleGVjLCBpbnN0YW5jZSwg
amF2YVZhbHVlLCAic2V0SW50IiwgIihMamF2YS9sYW5nL09iamVjdDtJKVYiKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGxvbmdfdHlwZTogewotICAgICAgICAg
ICAgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UgKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUs
ICJzZXRMb25nIiwgIihMamF2YS9sYW5nL09iamVjdDtKKVYiKTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLQotICAgICAgICBjYXNlIGZsb2F0X3R5cGU6IHsKLSAgICAgICAgICAgIGRpc3Bh
dGNoU2V0VmFsdWVUb0luc3RhbmNlIChleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0Rmxv
YXQiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0YpViIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGNhc2UgZG91YmxlX3R5cGU6IHsKLSAgICAgICAgICAgIGRpc3BhdGNoU2V0
VmFsdWVUb0luc3RhbmNlIChleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0RG91YmxlIiwg
IihMamF2YS9sYW5nL09iamVjdDtEKVYiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1KYXZhTWV0aG9kOjpK
YXZhTWV0aG9kIChKTklFbnYgKmVudiwgam9iamVjdCBhTWV0aG9kKQotewotICAgIC8vIEdldCBy
ZXR1cm4gdHlwZQotICAgIGpvYmplY3QgcmV0dXJuVHlwZSA9IGNhbGxKTklNZXRob2Q8am9iamVj
dD4oYU1ldGhvZCwgImdldFJldHVyblR5cGUiLCAiKClMamF2YS9sYW5nL0NsYXNzOyIpOwotICAg
IGpzdHJpbmcgcmV0dXJuVHlwZU5hbWUgPSAoanN0cmluZyljYWxsSk5JTWV0aG9kPGpvYmplY3Q+
KHJldHVyblR5cGUsICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7Iik7Ci0gICAgX3Jl
dHVyblR5cGUgPUphdmFTdHJpbmcgKGVudiwgcmV0dXJuVHlwZU5hbWUpOwotICAgIF9KTklSZXR1
cm5UeXBlID0gSk5JVHlwZUZyb21DbGFzc05hbWUgKF9yZXR1cm5UeXBlLlVURjhTdHJpbmcoKSk7
Ci0gICAgZW52LT5EZWxldGVMb2NhbFJlZiAocmV0dXJuVHlwZSk7Ci0gICAgZW52LT5EZWxldGVM
b2NhbFJlZiAocmV0dXJuVHlwZU5hbWUpOwotCi0gICAgLy8gR2V0IG1ldGhvZCBuYW1lCi0gICAg
anN0cmluZyBtZXRob2ROYW1lID0gKGpzdHJpbmcpY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhTWV0
aG9kLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOwotICAgIF9uYW1lID0gSmF2
YVN0cmluZyAoZW52LCBtZXRob2ROYW1lKTsKLSAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmIChtZXRo
b2ROYW1lKTsKLQotICAgIC8vIEdldCBwYXJhbWV0ZXJzCi0gICAgamFycmF5IGpwYXJhbWV0ZXJz
ID0gKGphcnJheSljYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFNZXRob2QsICJnZXRQYXJhbWV0ZXJU
eXBlcyIsICIoKVtMamF2YS9sYW5nL0NsYXNzOyIpOwotICAgIF9udW1QYXJhbWV0ZXJzID0gZW52
LT5HZXRBcnJheUxlbmd0aCAoanBhcmFtZXRlcnMpOwotICAgIF9wYXJhbWV0ZXJzID0gbmV3IEph
dmFQYXJhbWV0ZXJbX251bVBhcmFtZXRlcnNdOwotICAgIAotICAgIGludCBpOwotICAgIGZvciAo
aSA9IDA7IGkgPCBfbnVtUGFyYW1ldGVyczsgaSsrKSB7Ci0gICAgICAgIGpvYmplY3QgYVBhcmFt
ZXRlciA9IGVudi0+R2V0T2JqZWN0QXJyYXlFbGVtZW50ICgoam9iamVjdEFycmF5KWpwYXJhbWV0
ZXJzLCBpKTsKLSAgICAgICAganN0cmluZyBwYXJhbWV0ZXJOYW1lID0gKGpzdHJpbmcpY2FsbEpO
SU1ldGhvZDxqb2JqZWN0PihhUGFyYW1ldGVyLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3Ry
aW5nOyIpOwotICAgICAgICBfcGFyYW1ldGVyc1tpXSA9IEphdmFQYXJhbWV0ZXIoZW52LCBwYXJh
bWV0ZXJOYW1lKTsKLSAgICAgICAgZW52LT5EZWxldGVMb2NhbFJlZiAoYVBhcmFtZXRlcik7Ci0g
ICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYgKHBhcmFtZXRlck5hbWUpOwotICAgIH0KLSAgICBl
bnYtPkRlbGV0ZUxvY2FsUmVmIChqcGFyYW1ldGVycyk7Ci0KLSAgICAvLyBDcmVhdGVkIGxhemls
eS4KLSAgICBfc2lnbmF0dXJlID0gMDsKLSAgICBfbWV0aG9kSUQgPSAwOwotICAgIAotICAgIGpj
bGFzcyBtb2RpZmllckNsYXNzID0gZW52LT5GaW5kQ2xhc3MoImphdmEvbGFuZy9yZWZsZWN0L01v
ZGlmaWVyIik7Ci0gICAgaW50IG1vZGlmaWVycyA9IGNhbGxKTklNZXRob2Q8amludD4oYU1ldGhv
ZCwgImdldE1vZGlmaWVycyIsICIoKUkiKTsKLSAgICBfaXNTdGF0aWMgPSAoYm9vbCljYWxsSk5J
U3RhdGljTWV0aG9kPGpib29sZWFuPihtb2RpZmllckNsYXNzLCAiaXNTdGF0aWMiLCAiKEkpWiIs
IG1vZGlmaWVycyk7Ci0gICAgZW52LT5EZWxldGVMb2NhbFJlZihtb2RpZmllckNsYXNzKTsKLX0K
LQotSmF2YU1ldGhvZDo6fkphdmFNZXRob2QoKSAKLXsKLSAgICBpZiAoX3NpZ25hdHVyZSkKLSAg
ICAgICAgZnJlZShfc2lnbmF0dXJlKTsKLSAgICBkZWxldGUgW10gX3BhcmFtZXRlcnM7Ci19Owot
Ci0vLyBKTkkgbWV0aG9kIHNpZ25hdHVyZXMgdXNlICcvJyBiZXR3ZWVuIGNvbXBvbmVudHMgb2Yg
YSBjbGFzcyBuYW1lLCBidXQKLS8vIHdlIGdldCAnLicgYmV0d2VlbiBjb21wb25lbnRzIGZyb20g
dGhlIHJlZmxlY3Rpb24gQVBJLgotc3RhdGljIHZvaWQgYXBwZW5kQ2xhc3NOYW1lKFN0cmluZ0J1
aWxkZXImIGJ1aWxkZXIsIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSkKLXsKLSAgICBBU1NFUlQoSlNM
b2NrOjpsb2NrQ291bnQoKSA+IDApOwotICAgIAotICAgIGNoYXIgKnJlc3VsdCwgKmNwID0gc3Ry
ZHVwKGNsYXNzTmFtZSk7Ci0gICAgCi0gICAgcmVzdWx0ID0gY3A7Ci0gICAgd2hpbGUgKCpjcCkg
ewotICAgICAgICBpZiAoKmNwID09ICcuJykKLSAgICAgICAgICAgICpjcCA9ICcvJzsKLSAgICAg
ICAgY3ArKzsKLSAgICB9Ci0gICAgICAgIAotICAgIGJ1aWxkZXIuYXBwZW5kKHJlc3VsdCk7Ci0K
LSAgICBmcmVlKHJlc3VsdCk7Ci19Ci0KLWNvbnN0IGNoYXIgKkphdmFNZXRob2Q6OnNpZ25hdHVy
ZSgpIGNvbnN0IAotewotICAgIGlmICghX3NpZ25hdHVyZSkgewotICAgICAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCi0gICAgICAgIFN0cmluZ0J1aWxkZXIgc2lnbmF0
dXJlQnVpbGRlcjsKLSAgICAgICAgc2lnbmF0dXJlQnVpbGRlci5hcHBlbmQoIigiKTsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfbnVtUGFyYW1ldGVyczsgaSsrKSB7Ci0gICAgICAgICAg
ICBKYXZhUGFyYW1ldGVyKiBhUGFyYW1ldGVyID0gcGFyYW1ldGVyQXQoaSk7Ci0gICAgICAgICAg
ICBKTklUeXBlIF9KTklUeXBlID0gYVBhcmFtZXRlci0+Z2V0Sk5JVHlwZSgpOwotICAgICAgICAg
ICAgaWYgKF9KTklUeXBlID09IGFycmF5X3R5cGUpCi0gICAgICAgICAgICAgICAgYXBwZW5kQ2xh
c3NOYW1lKHNpZ25hdHVyZUJ1aWxkZXIsIGFQYXJhbWV0ZXItPnR5cGUoKSk7Ci0gICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzaWduYXR1cmVCdWlsZGVyLmFwcGVuZChzaWduYXR1
cmVGcm9tUHJpbWl0aXZlVHlwZShfSk5JVHlwZSkpOwotICAgICAgICAgICAgICAgIGlmIChfSk5J
VHlwZSA9PSBvYmplY3RfdHlwZSkgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRDbGFzc05h
bWUoc2lnbmF0dXJlQnVpbGRlciwgYVBhcmFtZXRlci0+dHlwZSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgc2lnbmF0dXJlQnVpbGRlci5hcHBlbmQoIjsiKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc2lnbmF0dXJlQnVpbGRlci5hcHBlbmQo
IikiKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IGNoYXIgKnJldHVyblR5cGUgPSBfcmV0dXJu
VHlwZS5VVEY4U3RyaW5nKCk7Ci0gICAgICAgIGlmIChfSk5JUmV0dXJuVHlwZSA9PSBhcnJheV90
eXBlKSB7Ci0gICAgICAgICAgICBhcHBlbmRDbGFzc05hbWUoc2lnbmF0dXJlQnVpbGRlciwgcmV0
dXJuVHlwZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzaWduYXR1cmVCdWlsZGVy
LmFwcGVuZChzaWduYXR1cmVGcm9tUHJpbWl0aXZlVHlwZShfSk5JUmV0dXJuVHlwZSkpOwotICAg
ICAgICAgICAgaWYgKF9KTklSZXR1cm5UeXBlID09IG9iamVjdF90eXBlKSB7Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kQ2xhc3NOYW1lKHNpZ25hdHVyZUJ1aWxkZXIsIHJldHVyblR5cGUpOwotICAg
ICAgICAgICAgICAgIHNpZ25hdHVyZUJ1aWxkZXIuYXBwZW5kKCI7Iik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBzaWduYXR1cmVTdHJpbmcgPSBz
aWduYXR1cmVCdWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgICAgIF9zaWduYXR1cmUgPSBzdHJkdXAo
c2lnbmF0dXJlU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
X3NpZ25hdHVyZTsKLX0KLQotSk5JVHlwZSBKYXZhTWV0aG9kOjpKTklSZXR1cm5UeXBlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gX0pOSVJldHVyblR5cGU7Ci19Ci0KLWptZXRob2RJRCBKYXZhTWV0
aG9kOjptZXRob2RJRCAoam9iamVjdCBvYmopIGNvbnN0Ci17Ci0gICAgaWYgKF9tZXRob2RJRCA9
PSAwKSB7Ci0gICAgICAgIF9tZXRob2RJRCA9IGdldE1ldGhvZElEIChvYmosIF9uYW1lLlVURjhT
dHJpbmcoKSwgc2lnbmF0dXJlKCkpOwotICAgIH0KLSAgICByZXR1cm4gX21ldGhvZElEOwotfQot
Ci0KLUphdmFBcnJheTo6SmF2YUFycmF5KGpvYmplY3QgYXJyYXksIGNvbnN0IGNoYXIqIHR5cGUs
IFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCkKLSAgICA6IEFycmF5KHJvb3RPYmpl
Y3QpCi17Ci0gICAgX2FycmF5ID0gbmV3IEpPYmplY3RXcmFwcGVyKGFycmF5KTsKLSAgICAvLyBK
YXZhIGFycmF5IGFyZSBmaXhlZCBsZW5ndGgsIHNvIHdlIGNhbiBjYWNoZSBsZW5ndGguCi0gICAg
Sk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKLSAgICBfbGVuZ3RoID0gZW52LT5HZXRBcnJheUxl
bmd0aCgoamFycmF5KV9hcnJheS0+bV9pbnN0YW5jZSk7Ci0gICAgX3R5cGUgPSBzdHJkdXAodHlw
ZSk7Ci0gICAgbV9yb290T2JqZWN0ID0gcm9vdE9iamVjdDsKLX0KLQotSmF2YUFycmF5Ojp+SmF2
YUFycmF5ICgpIAotewotICAgIGZyZWUgKCh2b2lkICopX3R5cGUpOwotfQotCi1Sb290T2JqZWN0
KiBKYXZhQXJyYXk6OnJvb3RPYmplY3QoKSBjb25zdCAKLXsgCi0gICAgcmV0dXJuIG1fcm9vdE9i
amVjdCAmJiBtX3Jvb3RPYmplY3QtPmlzVmFsaWQoKSA/IG1fcm9vdE9iamVjdC5nZXQoKSA6IDA7
Ci19Ci0KLXZvaWQgSmF2YUFycmF5OjpzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaW5kZXgsIEpTVmFsdWUgYVZhbHVlKSBjb25zdAotewotICAgIEpOSUVudiAqZW52ID0gZ2V0
Sk5JRW52KCk7Ci0gICAgY2hhciAqamF2YUNsYXNzTmFtZSA9IDA7Ci0gICAgCi0gICAgSk5JVHlw
ZSBhcnJheVR5cGUgPSBKTklUeXBlRnJvbVByaW1pdGl2ZVR5cGUoX3R5cGVbMV0pOwotICAgIGlm
IChfdHlwZVsxXSA9PSAnTCcpewotICAgICAgICAvLyBUaGUgdHlwZSBvZiB0aGUgYXJyYXkgd2ls
bCBiZSBzb21ldGhpbmcgbGlrZToKLSAgICAgICAgLy8gIltMamF2YS5sYW5nLnN0cmluZzsiLiAg
VGhpcyBpcyBndWFyYW50ZWVkLCBzbyBubyBuZWVkCi0gICAgICAgIC8vIGZvciBleHRyYSBzYW5p
dHkgY2hlY2tzLgotICAgICAgICBqYXZhQ2xhc3NOYW1lID0gc3RyZHVwKCZfdHlwZVsyXSk7Ci0g
ICAgICAgIGphdmFDbGFzc05hbWVbc3RyY2hyKGphdmFDbGFzc05hbWUsICc7JyktamF2YUNsYXNz
TmFtZV0gPSAwOwotICAgIH0KLSAgICBqdmFsdWUgYUpWYWx1ZSA9IGNvbnZlcnRWYWx1ZVRvSlZh
bHVlIChleGVjLCBhVmFsdWUsIGFycmF5VHlwZSwgamF2YUNsYXNzTmFtZSk7Ci0gICAgCi0gICAg
c3dpdGNoIChhcnJheVR5cGUpIHsKLSAgICAgICAgY2FzZSBvYmplY3RfdHlwZTogewotICAgICAg
ICAgICAgZW52LT5TZXRPYmplY3RBcnJheUVsZW1lbnQoKGpvYmplY3RBcnJheSlqYXZhQXJyYXko
KSwgaW5kZXgsIGFKVmFsdWUubCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgYm9vbGVhbl90eXBlOiB7Ci0gICAgICAgICAgICBlbnYt
PlNldEJvb2xlYW5BcnJheVJlZ2lvbigoamJvb2xlYW5BcnJheSlqYXZhQXJyYXkoKSwgaW5kZXgs
IDEsICZhSlZhbHVlLnopOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIGJ5dGVfdHlwZTogewotICAgICAgICAgICAgZW52LT5TZXRCeXRl
QXJyYXlSZWdpb24oKGpieXRlQXJyYXkpamF2YUFycmF5KCksIGluZGV4LCAxLCAmYUpWYWx1ZS5i
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBjaGFyX3R5cGU6IHsKLSAgICAgICAgICAgIGVudi0+U2V0Q2hhckFycmF5UmVnaW9uKChq
Y2hhckFycmF5KWphdmFBcnJheSgpLCBpbmRleCwgMSwgJmFKVmFsdWUuYyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugc2hvcnRfdHlw
ZTogewotICAgICAgICAgICAgZW52LT5TZXRTaG9ydEFycmF5UmVnaW9uKChqc2hvcnRBcnJheSlq
YXZhQXJyYXkoKSwgaW5kZXgsIDEsICZhSlZhbHVlLnMpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIGludF90eXBlOiB7Ci0gICAgICAg
ICAgICBlbnYtPlNldEludEFycmF5UmVnaW9uKChqaW50QXJyYXkpamF2YUFycmF5KCksIGluZGV4
LCAxLCAmYUpWYWx1ZS5pKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBsb25nX3R5cGU6IHsKLSAgICAgICAgICAgIGVudi0+U2V0TG9u
Z0FycmF5UmVnaW9uKChqbG9uZ0FycmF5KWphdmFBcnJheSgpLCBpbmRleCwgMSwgJmFKVmFsdWUu
aik7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIGZsb2F0X3R5cGU6IHsK
LSAgICAgICAgICAgIGVudi0+U2V0RmxvYXRBcnJheVJlZ2lvbigoamZsb2F0QXJyYXkpamF2YUFy
cmF5KCksIGluZGV4LCAxLCAmYUpWYWx1ZS5mKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBkb3VibGVfdHlwZTogewotICAgICAgICAg
ICAgZW52LT5TZXREb3VibGVBcnJheVJlZ2lvbigoamRvdWJsZUFycmF5KWphdmFBcnJheSgpLCBp
bmRleCwgMSwgJmFKVmFsdWUuZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGphdmFD
bGFzc05hbWUpCi0gICAgICAgIGZyZWUgKCh2b2lkICopamF2YUNsYXNzTmFtZSk7Ci19Ci0KLQot
SlNWYWx1ZSBKYXZhQXJyYXk6OnZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRl
eCkgY29uc3QKLXsKLSAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigpOwotICAgIEpOSVR5cGUg
YXJyYXlUeXBlID0gSk5JVHlwZUZyb21QcmltaXRpdmVUeXBlKF90eXBlWzFdKTsKLSAgICBzd2l0
Y2ggKGFycmF5VHlwZSkgewotICAgICAgICBjYXNlIG9iamVjdF90eXBlOiB7Ci0gICAgICAgICAg
ICBqb2JqZWN0QXJyYXkgb2JqZWN0QXJyYXkgPSAoam9iamVjdEFycmF5KWphdmFBcnJheSgpOwot
ICAgICAgICAgICAgam9iamVjdCBhbk9iamVjdDsKLSAgICAgICAgICAgIGFuT2JqZWN0ID0gZW52
LT5HZXRPYmplY3RBcnJheUVsZW1lbnQob2JqZWN0QXJyYXksIGluZGV4KTsKLQotICAgICAgICAg
ICAgLy8gTm8gb2JqZWN0PwotICAgICAgICAgICAgaWYgKCFhbk9iamVjdCkgewotICAgICAgICAg
ICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gTmVzdGVkIGFycmF5PwotICAgICAgICAgICAgaWYgKF90eXBlWzFdID09ICdb
JykgewotICAgICAgICAgICAgICAgIHJldHVybiBKYXZhQXJyYXk6OmNvbnZlcnRKT2JqZWN0VG9B
cnJheShleGVjLCBhbk9iamVjdCwgX3R5cGUrMSwgcm9vdE9iamVjdCgpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIC8vIG9yIGFycmF5IG9mIG90aGVyIG9iamVjdCB0eXBlPwotICAgICAg
ICAgICAgcmV0dXJuIEphdmFJbnN0YW5jZTo6Y3JlYXRlKGFuT2JqZWN0LCByb290T2JqZWN0KCkp
LT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBib29sZWFuX3R5cGU6IHsKLSAgICAgICAgICAgIGpib29sZWFuQXJyYXkgYm9v
bGVhbkFycmF5ID0gKGpib29sZWFuQXJyYXkpamF2YUFycmF5KCk7Ci0gICAgICAgICAgICBqYm9v
bGVhbiBhQm9vbGVhbjsKLSAgICAgICAgICAgIGVudi0+R2V0Qm9vbGVhbkFycmF5UmVnaW9uKGJv
b2xlYW5BcnJheSwgaW5kZXgsIDEsICZhQm9vbGVhbik7Ci0gICAgICAgICAgICByZXR1cm4ganNC
b29sZWFuKGFCb29sZWFuKTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
Ynl0ZV90eXBlOiB7Ci0gICAgICAgICAgICBqYnl0ZUFycmF5IGJ5dGVBcnJheSA9IChqYnl0ZUFy
cmF5KWphdmFBcnJheSgpOwotICAgICAgICAgICAgamJ5dGUgYUJ5dGU7Ci0gICAgICAgICAgICBl
bnYtPkdldEJ5dGVBcnJheVJlZ2lvbihieXRlQXJyYXksIGluZGV4LCAxLCAmYUJ5dGUpOwotICAg
ICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGFCeXRlKTsKLSAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgY2hhcl90eXBlOiB7Ci0gICAgICAgICAgICBqY2hhckFycmF5
IGNoYXJBcnJheSA9IChqY2hhckFycmF5KWphdmFBcnJheSgpOwotICAgICAgICAgICAgamNoYXIg
YUNoYXI7Ci0gICAgICAgICAgICBlbnYtPkdldENoYXJBcnJheVJlZ2lvbihjaGFyQXJyYXksIGlu
ZGV4LCAxLCAmYUNoYXIpOwotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGFDaGFy
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBzaG9ydF90eXBlOiB7Ci0gICAgICAgICAgICBqc2hvcnRBcnJheSBzaG9ydEFycmF5ID0g
KGpzaG9ydEFycmF5KWphdmFBcnJheSgpOwotICAgICAgICAgICAganNob3J0IGFTaG9ydDsKLSAg
ICAgICAgICAgIGVudi0+R2V0U2hvcnRBcnJheVJlZ2lvbihzaG9ydEFycmF5LCBpbmRleCwgMSwg
JmFTaG9ydCk7Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgYVNob3J0KTsKLSAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgaW50X3R5cGU6IHsKLSAgICAgICAg
ICAgIGppbnRBcnJheSBpbnRBcnJheSA9IChqaW50QXJyYXkpamF2YUFycmF5KCk7Ci0gICAgICAg
ICAgICBqaW50IGFuSW50OwotICAgICAgICAgICAgZW52LT5HZXRJbnRBcnJheVJlZ2lvbihpbnRB
cnJheSwgaW5kZXgsIDEsICZhbkludCk7Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhl
YywgYW5JbnQpOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBsb25nX3R5
cGU6IHsKLSAgICAgICAgICAgIGpsb25nQXJyYXkgbG9uZ0FycmF5ID0gKGpsb25nQXJyYXkpamF2
YUFycmF5KCk7Ci0gICAgICAgICAgICBqbG9uZyBhTG9uZzsKLSAgICAgICAgICAgIGVudi0+R2V0
TG9uZ0FycmF5UmVnaW9uKGxvbmdBcnJheSwgaW5kZXgsIDEsICZhTG9uZyk7Ci0gICAgICAgICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgYUxvbmcpOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBmbG9hdF90eXBlOiB7Ci0gICAgICAgICAgICBqZmxvYXRBcnJheSBmbG9h
dEFycmF5ID0gKGpmbG9hdEFycmF5KWphdmFBcnJheSgpOwotICAgICAgICAgICAgamZsb2F0IGFG
bG9hdDsKLSAgICAgICAgICAgIGVudi0+R2V0RmxvYXRBcnJheVJlZ2lvbihmbG9hdEFycmF5LCBp
bmRleCwgMSwgJmFGbG9hdCk7Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgYUZs
b2F0KTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgZG91YmxlX3R5cGU6
IHsKLSAgICAgICAgICAgIGpkb3VibGVBcnJheSBkb3VibGVBcnJheSA9IChqZG91YmxlQXJyYXkp
amF2YUFycmF5KCk7Ci0gICAgICAgICAgICBqZG91YmxlIGFEb3VibGU7Ci0gICAgICAgICAgICBl
bnYtPkdldERvdWJsZUFycmF5UmVnaW9uKGRvdWJsZUFycmF5LCBpbmRleCwgMSwgJmFEb3VibGUp
OwotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGFEb3VibGUpOwotICAgICAgICB9
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLX0KLQotdW5zaWduZWQgaW50IEphdmFBcnJheTo6Z2V0TGVuZ3RoKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gX2xlbmd0aDsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShNQUNfSkFW
QV9CUklER0UpCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3J1bnRpbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3J1bnRpbWUuaAkocmV2aXNpb24gNTM1NDEp
CisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSwxNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBfSk5JX1JVTlRJTUVf
SF8KLSNkZWZpbmUgX0pOSV9SVU5USU1FX0hfCi0KLSNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdF
KQotCi0jaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgotI2luY2x1ZGUgIkphdmFJbnN0YW5jZUpTQy5o
IgotCi0jaWYgVVNFKEpTQykKLSNpbmNsdWRlICJKYXZhU3RyaW5nSlNDLmgiCi0jZW5kaWYKLQot
bmFtZXNwYWNlIEpTQwotewotCi1uYW1lc3BhY2UgQmluZGluZ3MKLXsKLQotdHlwZWRlZiBjb25z
dCBjaGFyKiBSdW50aW1lVHlwZTsKLQotY2xhc3MgSmF2YVN0cmluZwotewotcHVibGljOgotICAg
IEphdmFTdHJpbmcoKQotICAgIHsKLSAgICAgICAgbV9pbXBsLmluaXQoKTsKLSAgICB9Ci0KLSAg
ICBKYXZhU3RyaW5nKEpOSUVudiogZSwganN0cmluZyBzKQotICAgIHsKLSAgICAgICAgbV9pbXBs
LmluaXQoZSwgcyk7Ci0gICAgfQotCi0gICAgSmF2YVN0cmluZyhqc3RyaW5nIHMpCi0gICAgewot
ICAgICAgICBtX2ltcGwuaW5pdChnZXRKTklFbnYoKSwgcyk7Ci0gICAgfQotCi0gICAgY29uc3Qg
Y2hhciogVVRGOFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5VVEY4U3RyaW5nKCk7IH0K
LSAgICBjb25zdCBqY2hhciogdWNoYXJzKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLnVjaGFycygp
OyB9Ci0gICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5sZW5ndGgoKTsgfQot
I2lmIFVTRShKU0MpCi0gICAgb3BlcmF0b3IgVVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1faW1w
bC51U3RyaW5nKCk7IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIEphdmFTdHJpbmdJbXBsIG1f
aW1wbDsKLX07Ci0KLWNsYXNzIEphdmFQYXJhbWV0ZXIKLXsKLXB1YmxpYzoKLSAgICBKYXZhUGFy
YW1ldGVyICgpIDogX0pOSVR5cGUoaW52YWxpZF90eXBlKSB7fTsKLSAgICBKYXZhUGFyYW1ldGVy
IChKTklFbnYgKmVudiwganN0cmluZyB0eXBlKTsKLSAgICB2aXJ0dWFsIH5KYXZhUGFyYW1ldGVy
KCkgeyB9Ci0KLSAgICBSdW50aW1lVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gX3R5cGUuVVRG
OFN0cmluZygpOyB9Ci0gICAgSk5JVHlwZSBnZXRKTklUeXBlKCkgY29uc3QgeyByZXR1cm4gX0pO
SVR5cGU7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgSmF2YVN0cmluZyBfdHlwZTsKLSAgICBKTklU
eXBlIF9KTklUeXBlOwotfTsKLQotCi1jbGFzcyBKYXZhRmllbGQgOiBwdWJsaWMgRmllbGQKLXsK
LXB1YmxpYzoKLSAgICBKYXZhRmllbGQgKEpOSUVudiAqZW52LCBqb2JqZWN0IGFGaWVsZCk7Ci0K
LSAgICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJbnN0YW5jZSAqaW5zdGFuY2UpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1
ZVRvSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaW5zdGFuY2UsIEpT
VmFsdWUgYVZhbHVlKSBjb25zdDsKLSAgICAKLSAgICBjb25zdCBKYXZhU3RyaW5nJiBuYW1lKCkg
Y29uc3QgeyByZXR1cm4gX25hbWU7IH0KLSAgICB2aXJ0dWFsIFJ1bnRpbWVUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBfdHlwZS5VVEY4U3RyaW5nKCk7IH0KLQotICAgIEpOSVR5cGUgZ2V0Sk5J
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIF9KTklUeXBlOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIHZv
aWQgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBKYXZh
SW5zdGFuY2UgKmluc3RhbmNlLCBqdmFsdWUgamF2YVZhbHVlLCBjb25zdCBjaGFyICpuYW1lLCBj
b25zdCBjaGFyICpzaWcpIGNvbnN0OwotICAgIGp2YWx1ZSBkaXNwYXRjaFZhbHVlRnJvbUluc3Rh
bmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSmF2YUluc3RhbmNlICppbnN0YW5jZSwgY29uc3Qg
Y2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBKTklUeXBlIHJldHVyblR5cGUpIGNvbnN0Owot
Ci0gICAgSmF2YVN0cmluZyBfbmFtZTsKLSAgICBKYXZhU3RyaW5nIF90eXBlOwotICAgIEpOSVR5
cGUgX0pOSVR5cGU7Ci0gICAgUmVmUHRyPEpPYmplY3RXcmFwcGVyPiBfZmllbGQ7Ci19OwotCi0K
LWNsYXNzIEphdmFNZXRob2QgOiBwdWJsaWMgTWV0aG9kCi17Ci1wdWJsaWM6Ci0gICAgSmF2YU1l
dGhvZChKTklFbnYqIGVudiwgam9iamVjdCBhTWV0aG9kKTsKLSAgICB+SmF2YU1ldGhvZCgpOwot
Ci0gICAgY29uc3QgSmF2YVN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIF9uYW1lOyB9Ci0g
ICAgUnVudGltZVR5cGUgcmV0dXJuVHlwZSgpIGNvbnN0IHsgcmV0dXJuIF9yZXR1cm5UeXBlLlVU
RjhTdHJpbmcoKTsgfTsKLSAgICBKYXZhUGFyYW1ldGVyKiBwYXJhbWV0ZXJBdChpbnQgaSkgY29u
c3QgeyByZXR1cm4gJl9wYXJhbWV0ZXJzW2ldOyB9OwotICAgIGludCBudW1QYXJhbWV0ZXJzKCkg
Y29uc3QgeyByZXR1cm4gX251bVBhcmFtZXRlcnM7IH07Ci0gICAgCi0gICAgY29uc3QgY2hhciAq
c2lnbmF0dXJlKCkgY29uc3Q7Ci0gICAgSk5JVHlwZSBKTklSZXR1cm5UeXBlKCkgY29uc3Q7Ci0K
LSAgICBqbWV0aG9kSUQgbWV0aG9kSUQgKGpvYmplY3Qgb2JqKSBjb25zdDsKLSAgICAKLSAgICBi
b29sIGlzU3RhdGljKCkgY29uc3QgeyByZXR1cm4gX2lzU3RhdGljOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgSmF2YVBhcmFtZXRlciogX3BhcmFtZXRlcnM7Ci0gICAgaW50IF9udW1QYXJhbWV0ZXJzOwot
ICAgIEphdmFTdHJpbmcgX25hbWU7Ci0gICAgbXV0YWJsZSBjaGFyKiBfc2lnbmF0dXJlOwotICAg
IEphdmFTdHJpbmcgX3JldHVyblR5cGU7Ci0gICAgSk5JVHlwZSBfSk5JUmV0dXJuVHlwZTsKLSAg
ICBtdXRhYmxlIGptZXRob2RJRCBfbWV0aG9kSUQ7Ci0gICAgYm9vbCBfaXNTdGF0aWM7Ci19Owot
Ci1jbGFzcyBKYXZhQXJyYXkgOiBwdWJsaWMgQXJyYXkKLXsKLXB1YmxpYzoKLSAgICBKYXZhQXJy
YXkoam9iamVjdCBhcnJheSwgY29uc3QgY2hhciogdHlwZSwgUGFzc1JlZlB0cjxSb290T2JqZWN0
Pik7Ci0gICAgdmlydHVhbCB+SmF2YUFycmF5KCk7Ci0KLSAgICBSb290T2JqZWN0KiByb290T2Jq
ZWN0KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBdChFeGVjU3RhdGUgKmV4
ZWMsIHVuc2lnbmVkIGludCBpbmRleCwgSlNWYWx1ZSBhVmFsdWUpIGNvbnN0OwotICAgIHZpcnR1
YWwgSlNWYWx1ZSB2YWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4KSBj
b25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRMZW5ndGgoKSBjb25zdDsKLSAgICAK
LSAgICBqb2JqZWN0IGphdmFBcnJheSgpIGNvbnN0IHsgcmV0dXJuIF9hcnJheS0+bV9pbnN0YW5j
ZTsgfQotCi0gICAgc3RhdGljIEpTVmFsdWUgY29udmVydEpPYmplY3RUb0FycmF5IChFeGVjU3Rh
dGUqIGV4ZWMsIGpvYmplY3QgYW5PYmplY3QsIGNvbnN0IGNoYXIqIHR5cGUsIFBhc3NSZWZQdHI8
Um9vdE9iamVjdD4pOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxKT2JqZWN0V3JhcHBlcj4gX2Fy
cmF5OwotICAgIHVuc2lnbmVkIGludCBfbGVuZ3RoOwotICAgIGNvbnN0IGNoYXIgKl90eXBlOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgQmluZGluZ3MKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNl
bmRpZiAvLyBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQotCi0jZW5kaWYgLy8gX0pOSV9SVU5USU1F
X0hfCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNw
cAkocmV2aXNpb24gNTM1NDEpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQ
cml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiAjaWYgRU5BQkxF
KE1BQ19KQVZBX0JSSURHRSkKIAotI2luY2x1ZGUgImpuaV9ydW50aW1lLmgiCisjaW5jbHVkZSAi
Sk5JQnJpZGdlLmgiCiAjaW5jbHVkZSAicnVudGltZV9hcnJheS5oIgogI2luY2x1ZGUgInJ1bnRp
bWVfb2JqZWN0LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CkluZGV4OiBXZWJDb3Jl
L2JyaWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
cmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCShyZXZpc2lvbiA1MzU0MSkKKysrIFdlYkNv
cmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNiBAQAogCiAjaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgogI2luY2x1ZGUgIkpTRE9NV2lu
ZG93LmgiCi0jaW5jbHVkZSAiam5pX3J1bnRpbWUuaCIKICNpbmNsdWRlIDxydW50aW1lL0lkZW50
aWZpZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCkluZGV4OiBXZWJDb3JlL2Jy
aWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdl
L2puaS9qc2MvSmF2YUNsYXNzSlNDLmgJKHJldmlzaW9uIDUzNTQxKQorKysgV2ViQ29yZS9icmlk
Z2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBA
QAogCiAjaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKIAotI2luY2x1ZGUgImpuaV9ydW50aW1l
LmgiCisjaW5jbHVkZSAiSk5JQnJpZGdlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5j
ZUpTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFu
Y2VKU0MuY3BwCShyZXZpc2lvbiA1MzU0MSkKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2
YUluc3RhbmNlSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBACiAKICNp
ZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQogCisjaW5jbHVkZSAiSk5JQnJpZGdlLmgiCiAjaW5j
bHVkZSAiSk5JVXRpbGl0eS5oIgogI2luY2x1ZGUgIkpOSVV0aWxpdHlQcml2YXRlLmgiCiAjaW5j
bHVkZSAiSmF2YUNsYXNzSlNDLmgiCi0jaW5jbHVkZSAiam5pX3J1bnRpbWUuaCIKICNpbmNsdWRl
ICJydW50aW1lX29iamVjdC5oIgogI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgogI2luY2x1ZGUg
PHJ1bnRpbWUvQXJnTGlzdC5oPgo=
</data>
<flag name="review"
          id="29387"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>