<?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>24355</bug_id>
          
          <creation_ts>2009-03-04 08:33:55 -0800</creation_ts>
          <short_desc>Refactor InspectorController to use IDL</short_desc>
          <delta_ts>2009-03-05 14:59:40 -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>Web Inspector (Deprecated)</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>24376</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>112201</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-04 08:33:55 -0800</bug_when>
    <thetext>Creating an IDL for the InspectorController and utilizing generated bindings would greatly improve readability and reduce jamalayainess of InspectorController.cpp.

I think I am going to take a stab at this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112202</commentid>
    <comment_count>1</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-04 08:34:51 -0800</bug_when>
    <thetext>I mean to say &quot;Jambalayainess&quot;, not that other made-up word.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112317</commentid>
    <comment_count>2</comment_count>
      <attachid>28293</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-04 16:35:13 -0800</bug_when>
    <thetext>Created attachment 28293
first stab at idl

 WebCore/inspector/InspectorController.idl |   90 +++++++++++++++++++++++++++++
 1 files changed, 90 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112318</commentid>
    <comment_count>3</comment_count>
      <attachid>28294</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-04 16:36:42 -0800</bug_when>
    <thetext>Created attachment 28294
first pass at writing custom bindings.

 WebCore/DerivedSources.make                        |    1 +
 WebCore/WebCore.xcodeproj/project.pbxproj          |   46 +
 .../bindings/js/JSInspectorControllerCustom.cpp    |  336 +++++++
 WebCore/inspector/ConsoleMessage.cpp               |  117 +++
 WebCore/inspector/ConsoleMessage.h                 |   70 ++
 WebCore/inspector/InspectorController.cpp          | 1024 +-------------------
 WebCore/inspector/InspectorController.h            |   16 +-
 WebCore/inspector/InspectorController.idl          |   91 ++
 WebCore/inspector/InspectorDOMStorageResource.cpp  |   69 ++
 WebCore/inspector/InspectorDOMStorageResource.h    |   72 ++
 WebCore/inspector/InspectorDatabaseResource.cpp    |   67 ++
 WebCore/inspector/InspectorDatabaseResource.h      |   71 ++
 WebCore/inspector/InspectorResource.cpp            |  178 ++++
 WebCore/inspector/InspectorResource.h              |  110 +++
 WebCore/page/Page.h                                |    2 +-
 15 files changed, 1255 insertions(+), 1015 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112319</commentid>
    <comment_count>4</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-04 16:41:14 -0800</bug_when>
    <thetext>Timothy, here&apos;s the first pass. This already works (Mac-only, sorry), but still needs a lot of cleaning up and straightening-out. Oh, and testing.

Let me know what you think. Any comments are appreciated.

It may kinda-sorta look like I rewrote the world, but it&apos;s only because I couldn&apos;t stop. Just look how much prettier the bindings look compared to the old code, and I am sure you&apos;ll feel the same way :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112320</commentid>
    <comment_count>5</comment_count>
      <attachid>28294</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-04 16:42:35 -0800</bug_when>
    <thetext>Comment on attachment 28294
first pass at writing custom bindings.

As I mentioned, not requesting a formal review, just comments/feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112323</commentid>
    <comment_count>6</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-03-04 17:03:51 -0800</bug_when>
    <thetext>I think this looks great so far! Some clean up and I think it is ready. I would be good to split out the classes into files as a first pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112326</commentid>
    <comment_count>7</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-04 17:17:54 -0800</bug_when>
    <thetext>Thanks, I&apos;ll split this up into smaller patches, launder, then submit for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112452</commentid>
    <comment_count>8</comment_count>
      <attachid>28326</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-05 14:32:17 -0800</bug_when>
    <thetext>Created attachment 28326
Add InspectorController.idl, custom bindings, v1.

 WebCore/ChangeLog                                  |   32 +
 WebCore/DerivedSources.make                        |    1 +
 WebCore/GNUmakefile.am                             |    2 +
 WebCore/WebCore.pro                                |    2 +
 WebCore/WebCore.vcproj/WebCore.vcproj              |   12 +
 WebCore/WebCore.xcodeproj/project.pbxproj          |   78 ++-
 WebCore/WebCoreSources.bkl                         |    2 +
 .../bindings/js/JSInspectorControllerCustom.cpp    |  333 ++++++++++
 WebCore/bindings/scripts/CodeGeneratorJS.pm        |    2 +-
 WebCore/inspector/InspectorController.cpp          |  681 +-------------------
 WebCore/inspector/InspectorController.h            |   16 +-
 WebCore/inspector/InspectorController.idl          |   91 +++
 WebCore/page/Page.h                                |    2 +-
 13 files changed, 544 insertions(+), 710 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112457</commentid>
    <comment_count>9</comment_count>
      <attachid>28326</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-03-05 14:43:57 -0800</bug_when>
    <thetext>Comment on attachment 28326
Add InspectorController.idl, custom bindings, v1.

&gt;      History \
&gt;      ImageData \
&gt; +	InspectorController \
&gt;      KeyboardEvent \
&gt;      Location \

That should be spaces instead of a tab to match the other items in the list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112462</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-05 14:59:40 -0800</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/41462.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28293</attachid>
            <date>2009-03-04 16:35:13 -0800</date>
            <delta_ts>2009-03-04 16:37:09 -0800</delta_ts>
            <desc>first stab at idl</desc>
            <filename>first-stab-at-idl.patch</filename>
            <type>text/plain</type>
            <size>4602</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZTZjZjA0NWRhYWE3MmZjMTFiNTQ4NGUxMWY1NjlhZDAxYmZmODg2NwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5pZGwgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5iYmUyZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5pZGwKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggTWF0dCBMaWxlayA8d2Via2l0QG1hdHRsaWxlay5jb20+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworIAorbW9kdWxlIGNvcmUgeworICAg
IGludGVyZmFjZSBJbnNwZWN0b3JDb250cm9sbGVyIHsKKyAgICAgICAgW0ltcGxlbWVudGF0aW9u
RnVuY3Rpb249aGlkZUhpZ2hsaWdodF0gdm9pZCBoaWRlRE9NTm9kZUhpZ2hsaWdodCgpOworICAg
ICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1oaWdsaWdodF0gdm9pZCBoaWdobGlnaHRET01O
b2RlKGluIE5vZGUgbm9kZSk7CisgICAgICAgIFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPXNjcmlw
dE9iamVjdFJlYWR5XSB2b2lkIGxvYWRlZCgpOworICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5j
dGlvbj1jbG9zZV0gdm9pZCB3aW5kb3dVbmxvYWRpbmcoKTsKKyAgICAgICAgW0ltcGxlbWVudGF0
aW9uRnVuY3Rpb249YXR0YWNoV2luZG93XSB2b2lkIGF0dGFjaCgpOworICAgICAgICBbSW1wbGVt
ZW50YXRpb25GdW5jdGlvbj1kZXRhY2hXaW5kb3ddIHZvaWQgZGV0YWNoKCk7CisvLyBkZWJ1Z2dl
cgorICAgICAgICB2b2lkIGVuYWJsZURlYnVnZ2VyKCk7CisgICAgICAgIHZvaWQgZGlzYWJsZURl
YnVnZ2VyKCk7CisgICAgICAgIHZvaWQgcGF1c2VJbkRlYnVnZ2VyKCk7CisgICAgICAgIHZvaWQg
cmVzdW1lRGVidWdnZXIoKTsKKyAgICAgICAgdm9pZCBzdGVwT3ZlclN0YXRlbWVudEluRGVidWdn
ZXIoKTsKKyAgICAgICAgdm9pZCBzdGVwSW50b1N0YXRlbWVudEluRGVidWdnZXIoKTsKKyAgICAg
ICAgdm9pZCBzdGVwT3V0T2ZGdW5jdGlvbkluRGVidWdnZXIoKTsKKworICAgICAgICB2b2lkIGNs
b3NlV2luZG93KCk7CisgICAgICAgIFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPWNsZWFyQ29uc29s
ZU1lc3NhZ2VzXSB2b2lkIGNsZWFyTWVzc2FnZXMoKTsKKyAgICAgICAgW0ltcGxlbWVudGF0aW9u
RnVuY3Rpb249c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nXSB2b2lkIHN0YXJ0UHJvZmlsaW5n
KCk7CisgICAgICAgIFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPXN0b3BVc2VySW5pdGlhdGVkUHJv
ZmlsaW5nXSB2b2lkIHN0b3BQcm9maWxpbmcoKTsKKyAgICAgICAgdm9pZCBlbmFibGVQcm9maWxl
cigpOworICAgICAgICB2b2lkIGRpc2FibGVQcm9maWxlcigpOworICAgICAgICBbSW1wbGVtZW50
YXRpb25GdW5jdGlvbj10b2dnbGVTZWFyY2hGb3JOb2RlSW5QYWdlXSB2b2lkIHRvZ2dsZU5vZGVT
ZWFyY2goKTsKKy8vIGRlYnVnZ2VyCisgICAgICAgIGJvb2wgZGVidWdnZXJFbmFibGVkKCk7Cisg
ICAgICAgIGJvb2wgcGF1c2VPbkV4Y2VwdGlvbnMoKTsKKworICAgICAgICBib29sIHByb2ZpbGVy
RW5hYmxlZCgpOworICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj13aW5kb3dWaXNpYmxl
XSBib29sIGlzV2luZG93VmlzaWJsZSgpOworICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlv
bj1zZWFyY2hpbmdGb3JOb2RlSW5QYWdlXSBib29sIHNlYXJjaGluZ0Zvck5vZGUoKTsKKworICAg
ICAgICB2b2lkIGFkZFJlc291cmNlU291cmNlVG9GcmFtZShpbiB1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGluIE5vZGUgZnJhbWUpOworICAgICAgICB2b2lkIGFkZFNvdXJjZVRvRnJhbWUoaW4g
RE9NU3RyaW5nIG1pbWVUeXBlLCBpbiBET01TdHJpbmcgc291cmNlVmFsdWUsIGluIE5vZGUgZnJh
bWUpOworICAgICAgICBOb2RlIGdldFJlc291cmNlRG9jdW1lbnROb2RlKGluIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllcik7CisgICAgICAgIHZvaWQgaGlnaGxnaHRET01Ob2RlKGluIE5vZGUgbm9k
ZSk7CisgICAgICAgIHZvaWQgc2VhcmNoKGluIE5vZGUgbm9kZSwgaW4gRE9NU3RyaW5nIHF1ZXJ5
KTsKKy8vIGRhdGFiYXNlCisgICAgICAgIEFycmF5IGRhdGFiYXNlTmFtZVRhYmxlcyhpbiBEYXRh
YmFzZSBkYXRhYmFzZSk7CisKKyAgICAgICAgRE9NT2JqZWN0IHNldHRpbmcoaW4gRE9NU3RyaW5n
IGtleSk7CisgICAgICAgIHNldFNldHRpbmcoaW4gRE9NU3RyaW5nIGtleSwgaW4gRE9NT2JqZWN0
IHZhbHVlKTsKKyAgICAgICAgV2luZG93IGluc3BlY3RlZFdpbmRvdygpOworICAgICAgICBET01T
dHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOworICAgICAgICBET01TdHJpbmcgaGlkZGVuUGFu
ZWxzKCk7CisgICAgICAgIERPTVN0cmluZyBwbGF0Zm9ybSgpOworICAgICAgICB2b2lkIG1vdmVC
eVVucmVzdHJpY3RlZChpbiBmbG9hdCB4LCBpbiBmbG9hdCB5KTsKKyAgICAgICAgdm9pZCBzZXRB
dHRhY2hlZFdpbmRvd0hlaWdodChpbiB1bnNpZ25lZCBoZWlnaHQpOworICAgICAgICBET01PYmpl
Y3Qgd3JhcENhbGxiYWNrKGluIERPTU9iamVjdCk7CisvLyBkZWJ1Z2dlcgorICAgICAgICBET01P
YmplY3QgY3VycmVudENhbGxGcmFtZSgpOworICAgICAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRp
b25zKGluIGJvb2xlYW4gcGF1c2VPbkV4Y2VwdGlvbnMpOworICAgICAgICB2b2lkIGFkZEJyZWFr
cG9pbnQoaW4gdW5zaWduZWQgbG9uZyBzb3VyY2VJRCwgaW4gdW5zaWduZWQgbG9uZyBsaW5lTnVt
YmVyKTsKKyAgICAgICAgcmVtb3ZlQnJlYWtwb2ludChpbiB1bnNpZ25lZCBsb25nIHNvdXJjZUlE
LCBpbiB1bnNpZ25lZCBsb25nIGxpbmVOdW1iZXIpOworICAgICAgICAKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIEFycmF5IHByb2ZpbGVzOworICAgICB9OworIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28294</attachid>
            <date>2009-03-04 16:36:42 -0800</date>
            <delta_ts>2009-03-04 17:18:10 -0800</delta_ts>
            <desc>first pass at writing custom bindings.</desc>
            <filename>first-pass-at-writing-custom-bindings..patch</filename>
            <type>text/plain</type>
            <size>100902</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">MWFiMjgwNzI5MTUyZTQ4N2I3ZDFmZTgzMzViODVlNjY2MjY5NmNjOApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmlu
ZGV4IGFlMDEzZDAuLmNjZjYxZTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQorKysgYi9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTE2Myw2ICsxNjMsNyBA
QCBET01fQ0xBU1NFUyA9IFwKICAgICBIVE1MVmlkZW9FbGVtZW50IFwKICAgICBIaXN0b3J5IFwK
ICAgICBJbWFnZURhdGEgXAorCUluc3BlY3RvckNvbnRyb2xsZXIgXAogICAgIEtleWJvYXJkRXZl
bnQgXAogICAgIExvY2F0aW9uIFwKICAgICBNZWRpYUVycm9yIFwKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYWMwNTM5Yy4uMjcwZGNkMyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYzNyw2ICs2MzcsMTcgQEAK
IAkJNDFDNzYwQjEwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUM3NjBCMDBFREUwM0QzMDBDMTY1
NUYgLyogU2NyaXB0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk0MUQwMTVDQTBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRDAxNUM4MEY0
QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5oICovOyB9OwogCQk0MUQwMTVDQjBGNEI1Qzcx
MDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBl
LmNwcCAqLzsgfTsKKwkJNDFGMDYwQ0QwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MUYwNjBDQjBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JDb250cm9sbGVyLmNwcCAq
LzsgfTsKKwkJNDFGMDYwQ0UwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYw
Q0MwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQ29udHJvbGxlci5oICovOyB9OworCQk0
MUYwNjE2QTBGNUVGQkREMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2MTY5
MEY1RUZCREQwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwICovOyB9
OworCQk0MUYwNjE3NDBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291
cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYw
NjE3MjBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmggKi87
IH07CisJCTQxRjA2MTc1MEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVz
b3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDFGMDYxNzMwRjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5j
cHAgKi87IH07CisJCTQxRjA2MThFMEY1RjA2OTgwMEEwN0VBQyAvKiBDb25zb2xlTWVzc2FnZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYxOEMw
RjVGMDY5ODAwQTA3RUFDIC8qIENvbnNvbGVNZXNzYWdlLmggKi87IH07CisJCTQxRjA2MThGMEY1
RjA2OTgwMEEwN0VBQyAvKiBDb25zb2xlTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjE4RDBGNUYwNjk4MDBBMDdFQUMgLyogQ29u
c29sZU1lc3NhZ2UuY3BwICovOyB9OworCQk0MUYwNjIwMTBGNUYwQjY2MDBBMDdFQUMgLyogSW5z
cGVjdG9yUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxRjA2MUZGMEY1RjBCNjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJjZS5oICov
OyB9OworCQk0MUYwNjIwMjBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYyMDAw
RjVGMEI2NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmNwcCAqLzsgfTsKKwkJNDFGMDYy
MTQwRjVGMTkyNjAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2MjEyMEY1RjE5MjYw
MEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggKi87IH07CisJCTQxRjA2MjE1
MEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2MjEzMEY1RjE5MjYw
MEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCAqLzsgfTsKIAkJNDFGMUQy
MUYwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1lRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMUQyMUQwRUYzNUMyQTAwREE4
NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1lRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxRjFEMjIwMEVGMzVDMkEwMERBODc1MyAvKiBTY3Jp
cHRDYWNoZWRGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDFGMUQyMUUwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1l
RGF0YS5jcHAgKi87IH07CiAJCTQ0MTUyOTJFMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0NDE1MjkyQzBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5o
ICovOyB9OwpAQCAtNTU2OSw2ICs1NTgwLDE4IEBACiAJCTQxQzc2MEIwMEVERTAzRDMwMEMxNjU1
RiAvKiBTY3JpcHRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3Jp
cHRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUQwMTVDODBGNEI1Qzcx
MDA0QTY2MkYgLyogQ29udGVudFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29udGVudFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFEMDE1Qzkw
RjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENvbnRlbnRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDFGMDYwQUEwRjVFRThCQjAwQTA3RUFDIC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEluc3BlY3RvckNvbnRyb2xsZXIuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0MUYwNjBDQjBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTSW5zcGVjdG9yQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTQxRjA2MENDMEY1RUVCMkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnNwZWN0b3JDb250cm9sbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxRjA2MTY5MEY1RUZCREQwMEEwN0VBQyAvKiBK
U0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDFGMDYxNzIwRjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3RvckRP
TVN0b3JhZ2VSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NDFGMDYxNzMwRjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JET01TdG9y
YWdlUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUYwNjE4QzBG
NUYwNjk4MDBBMDdFQUMgLyogQ29uc29sZU1lc3NhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29uc29sZU1lc3NhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNDFGMDYxOEQwRjVGMDY5ODAwQTA3RUFDIC8qIENvbnNvbGVNZXNzYWdlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnNvbGVNZXNzYWdlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFGMDYxRkYwRjVGMEI2NjAwQTA3RUFDIC8qIEluc3Bl
Y3RvclJlc291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3Rv
clJlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxRjA2MjAwMEY1RjBC
NjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JSZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQxRjA2MjEyMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFz
ZVJlc291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckRh
dGFiYXNlUmVzb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFGMDYyMTMw
RjVGMTkyNjAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjFEMjFEMEVGMzVDMkEwMERBODc1
MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQxRjFEMjFFMEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURhdGEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q2FjaGVkRnJhbWVE
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5MkMwRTFBRThBMDAw
QzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtOTY4Niw2ICs5NzA5LDggQEAKIAkJMUM1RkFFQ0EwRENGRDhDOTAwRDU4Rjc4
IC8qIEluc3BlY3RvciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJNDFGMDYwQ0IwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAgKi8sCisJCQkJNDFGMDYwQ0MwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQ29udHJv
bGxlci5oICovLAogCQkJCTFDNUZBRUNGMERDRkQ5MDEwMEQ1OEY3OCAvKiBKU0phdmFTY3JpcHRD
YWxsRnJhbWUuY3BwICovLAogCQkJCTFDNUZBRUQwMERDRkQ5MDEwMEQ1OEY3OCAvKiBKU0phdmFT
Y3JpcHRDYWxsRnJhbWUuaCAqLywKIAkJCSk7CkBAIC05Njk2LDkgKzk3MjEsMTggQEAKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMUM4MUI5NTkwRTk3MzMwODAwMjY2
RTA3IC8qIGZyb250LWVuZCAqLywKKwkJCQk0MUYwNjE4RDBGNUYwNjk4MDBBMDdFQUMgLyogQ29u
c29sZU1lc3NhZ2UuY3BwICovLAorCQkJCTQxRjA2MThDMEY1RjA2OTgwMEEwN0VBQyAvKiBDb25z
b2xlTWVzc2FnZS5oICovLAorCQkJCTQxRjA2MjEzMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0
b3JEYXRhYmFzZVJlc291cmNlLmNwcCAqLywKKwkJCQk0MUYwNjIxMjBGNUYxOTI2MDBBMDdFQUMg
LyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oICovLAorCQkJCTQxRjA2MTczMEY1RjAwQUMw
MEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwICovLAorCQkJCTQxRjA2
MTcyMEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCAqLywK
IAkJCQkxQzgxQjk1ODBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ2xpZW50LmggKi8sCiAJ
CQkJMUM4MUI5NTcwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwICov
LAogCQkJCTFDODFCOTU2MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmgg
Ki8sCisJCQkJNDFGMDYwQUEwRjVFRThCQjAwQTA3RUFDIC8qIEluc3BlY3RvckNvbnRyb2xsZXIu
aWRsICovLAorCQkJCTQxRjA2MjAwMEY1RjBCNjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJj
ZS5jcHAgKi8sCisJCQkJNDFGMDYxRkYwRjVGMEI2NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291
cmNlLmggKi8sCiAJCQkJMUM4MUJBMDMwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxs
RnJhbWUuY3BwICovLAogCQkJCTFDODFCQTA0MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0
Q2FsbEZyYW1lLmggKi8sCiAJCQkJMUM4MUJBMDUwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3Jp
cHRDYWxsRnJhbWUuaWRsICovLApAQCAtMTM0OTEsNiArMTM1MjUsNyBAQAogCQkJCUFCNENCNEVB
MEI4QkRBM0QwMDlGNDBCMCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmggKi8sCiAJCQkJ
QkNFN0IxOTIwRDRFODY5NjAwNzVBNTM5IC8qIEpTSGlzdG9yeUN1c3RvbS5jcHAgKi8sCiAJCQkJ
QTdEMDMxOEQwRTkzNTQwMzAwRTI0QUNEIC8qIEpTSW1hZ2VEYXRhQ3VzdG9tLmNwcCAqLywKKwkJ
CQk0MUYwNjE2OTBGNUVGQkREMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9t
LmNwcCAqLywKIAkJCQkxQzVGQUVFNjBEQ0ZEQTY4MDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lQ3VzdG9tLmNwcCAqLywKIAkJCQlCQ0UxQzQzRjBEOTgzMEY0MDAzQjAyRjIgLyogSlNM
b2NhdGlvbkN1c3RvbS5jcHAgKi8sCiAJCQkJRTFBNUY5OUEwRTdFQUEyNTAwQUY4NUVBIC8qIEpT
TWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwICovLApAQCAtMTY4MDUsNiArMTY4NDAsMTEgQEAKIAkJ
CQkxQTU2OUQyNTBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9yb290LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzMwOUUxRTA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNFNDk0QUIwRjRGNUU5RTAwODRFMzE5IC8qIEdlb2xvY2F0aW9uU2Vy
dmljZU1hYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDFGMDYwQ0UwRjVFRUIyQjAwQTA3RUFDIC8q
IEpTSW5zcGVjdG9yQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDFGMDYxNzQwRjVG
MDBBQzAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNDFGMDYxOEUwRjVGMDY5ODAwQTA3RUFDIC8qIENvbnNvbGVNZXNzYWdlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk0MUYwNjIwMTBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVz
b3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxRjA2MjE0MEY1RjE5MjYwMEEwN0VBQyAvKiBJ
bnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4NzkzLDYgKzE4
ODMzLDEyIEBACiAJCQkJMUE1NjlEMjQwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfcm9vdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxRDA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJs
ZV91bml0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0U0OTRBQzBGNEY1RTlFMDA4NEUzMTkg
LyogR2VvbG9jYXRpb25TZXJ2aWNlTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNDFGMDYwQ0Qw
RjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0MUYwNjE2QTBGNUVGQkREMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JDb250cm9sbGVy
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQxRjA2MTc1MEY1RjAwQUMwMEEwN0VBQyAv
KiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDFG
MDYxOEYwRjVGMDY5ODAwQTA3RUFDIC8qIENvbnNvbGVNZXNzYWdlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTQxRjA2MjAyMEY1RjBCNjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJjZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk0MUYwNjIxNTBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9y
RGF0YWJhc2VSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi42MWY2NzAyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCkBAIC0wLDAgKzEsMzM2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0
dGxpbGVrLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0luc3BlY3RvckNvbnRyb2xs
ZXIuaCIKKworI2luY2x1ZGUgIkNvbnNvbGUuaCIKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisjaW5j
bHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJKU0RhdGFiYXNlLmgiCisjZW5kaWYKKyNpbmNs
dWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVPd25l
ckVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0UHJvZmlsZS5oIgorI2lu
Y2x1ZGUgIkpTRE9NV2luZG93LmgiCisjaW5jbHVkZSAiSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVy
LmgiCisjaW5jbHVkZSAiSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuaCIKKyNpbmNsdWRlICJK
U05vZGUuaCIKKyNpbmNsdWRlICJKU1JhbmdlLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5o
IgorI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgorI2luY2x1ZGUgPHByb2ZpbGVyL1Byb2Zp
bGUuaD4KKyNpbmNsdWRlIDxwcm9maWxlci9Qcm9maWxlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisjaW5jbHVkZSAiSmF2
YVNjcmlwdENhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkphdmFTY3JpcHREZWJ1Z1NlcnZlci5oIgor
I2luY2x1ZGUgIkpTSmF2YVNjcmlwdENhbGxGcmFtZS5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVz
cGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSlNWYWx1ZVB0ciBKU0luc3BlY3Rv
ckNvbnRyb2xsZXI6OnByb2ZpbGVzKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICBKU0xv
Y2sgbG9jayhmYWxzZSk7CisgICAgQXJnTGlzdCByZXN1bHQ7CisgICAgY29uc3QgVmVjdG9yPFJl
ZlB0cjxQcm9maWxlPiA+JiBwcm9maWxlcyA9IGltcGwoKS0+cHJvZmlsZXMoKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZmlsZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3Vs
dC5hcHBlbmQodG9KUyhleGVjLCBwcm9maWxlc1tpXS5nZXQoKSkpOworCisgICAgcmV0dXJuIGNv
bnN0cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Cit9CisKK0pTVmFsdWVQdHIgSlNJbnNwZWN0b3JD
b250cm9sbGVyOjpoaWdobGlnaHRET01Ob2RlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBK
U0M6OkFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlciog
d3JhcHBlciA9IEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjphc1dyYXBwZXIoYXJncy5hdChl
eGVjLCAwKSk7CisgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKworICAgIE5vZGUqIG5vZGUgPSB0b05vZGUod3JhcHBlci0+dW53cmFwcGVkT2JqZWN0KCkp
OworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBp
bXBsKCktPmhpZ2hsaWdodChub2RlKTsKKworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQor
CitKU1ZhbHVlUHRyIEpTSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUmVzb3VyY2VTb3VyY2VUb0Zy
YW1lKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBpZiAoYXJn
cy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIGJvb2wg
b2sgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBpZGVudGlmaWVyID0gYXJncy5hdChleGVjLCAwKS50
b1VJbnQzMihleGVjLCBvayk7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+IHJlc291cmNlID0gaW1wbCgp
LT5yZXNvdXJjZXMoKS5nZXQoaWRlbnRpZmllcik7CisgICAgQVNTRVJUKHJlc291cmNlKTsKKyAg
ICBpZiAoIXJlc291cmNlKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIFN0
cmluZyBzb3VyY2VTdHJpbmcgPSByZXNvdXJjZS0+c291cmNlU3RyaW5nKCk7CisgICAgaWYgKHNv
dXJjZVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisg
ICAgcmV0dXJuIGpzQm9vbGVhbihpbXBsKCktPmFkZFNvdXJjZVRvRnJhbWUocmVzb3VyY2UtPm1p
bWVUeXBlLCBzb3VyY2VTdHJpbmcsIHRvTm9kZShhcmdzLmF0KGV4ZWMsIDEpKSkpOworfQorCitK
U1ZhbHVlUHRyIEpTSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkU291cmNlVG9GcmFtZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwg
MykKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBTdHJpbmcgbWltZVR5cGUg
PSBhcmdzLmF0KGV4ZWMsIDApLnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBTdHJpbmcgc291
cmNlU3RyaW5nID0gYXJncy5hdChleGVjLCAxKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAg
cmV0dXJuIGpzQm9vbGVhbihpbXBsKCktPmFkZFNvdXJjZVRvRnJhbWUobWltZVR5cGUsIHNvdXJj
ZVN0cmluZywgdG9Ob2RlKGFyZ3MuYXQoZXhlYywgMSkpKSk7Cit9CisKK0pTVmFsdWVQdHIgSlNJ
bnNwZWN0b3JDb250cm9sbGVyOjpnZXRSZXNvdXJjZURvY3VtZW50Tm9kZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBib29sIG9rID0gZmFsc2U7CisgICAg
dW5zaWduZWQgaWRlbnRpZmllciA9IGFyZ3MuYXQoZXhlYywgMCkudG9VSW50MzIoZXhlYywgb2sp
OworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgUmVm
UHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9IGltcGwoKS0+cmVzb3VyY2VzKCkuZ2V0
KGlkZW50aWZpZXIpOworICAgIEFTU0VSVChyZXNvdXJjZSk7CisgICAgaWYgKCFyZXNvdXJjZSkK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBGcmFtZSogZnJhbWUgPSByZXNv
dXJjZS0+ZnJhbWUuZ2V0KCk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3Vt
ZW50KCk7CisKKyAgICBpZiAoZG9jdW1lbnQtPmlzUGx1Z2luRG9jdW1lbnQoKSB8fCBkb2N1bWVu
dC0+aXNJbWFnZURvY3VtZW50KCkgfHwgZG9jdW1lbnQtPmlzTWVkaWFEb2N1bWVudCgpKQorICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIC8vIEZJWE1FOiBJIGFtIG5vdCBzdXJl
IGlmIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkLiBDYW4gd2UganVzdCB1c2UgZXhlYz8KKyAgICBF
eGVjU3RhdGUqIHJlc291cmNlRXhlYyA9IHRvSlNET01XaW5kb3dTaGVsbChyZXNvdXJjZS0+ZnJh
bWUuZ2V0KCkpLT53aW5kb3coKS0+Z2xvYmFsRXhlYygpOworCisgICAgSlNMb2NrIGxvY2soZmFs
c2UpOworICAgIHJldHVybiBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OndyYXAocmVzb3VyY2VF
eGVjLCB0b0pTKHJlc291cmNlRXhlYywgZG9jdW1lbnQpKTsKK30KKworSlNWYWx1ZVB0ciBKU0lu
c3BlY3RvckNvbnRyb2xsZXI6OnNlYXJjaChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisKKyAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGFyZ3MuYXQoZXhlYywgMCkpOwor
ICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBTdHJp
bmcgdGFyZ2V0ID0gYXJncy5hdChleGVjLCAxKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAg
QXJnTGlzdCByZXN1bHQ7CisgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShyYW5nZU9mQ29u
dGVudHMobm9kZSkpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZG8geworICAg
ICAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlKGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2Uu
Z2V0KCksIHRhcmdldCwgdHJ1ZSwgZmFsc2UpKTsKKyAgICAgICAgaWYgKHJlc3VsdFJhbmdlLT5j
b2xsYXBzZWQoZWMpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gQSBub24tY29s
bGFwc2VkIHJlc3VsdCByYW5nZSBjYW4gaW4gc29tZSBmdW5reSB3aGl0ZXNwYWNlIGNhc2VzIHN0
aWxsIG5vdAorICAgICAgICAvLyBhZHZhbmNlIHRoZSByYW5nZSdzIHN0YXJ0IHBvc2l0aW9uICg0
NTA5MzI4KS4gQnJlYWsgdG8gYXZvaWQgaW5maW5pdGUgbG9vcC4KKyAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIG5ld1N0YXJ0ID0gZW5kVmlzaWJsZVBvc2l0aW9uKHJlc3VsdFJhbmdlLmdldCgpLCBE
T1dOU1RSRUFNKTsKKyAgICAgICAgaWYgKG5ld1N0YXJ0ID09IHN0YXJ0VmlzaWJsZVBvc2l0aW9u
KHNlYXJjaFJhbmdlLmdldCgpLCBET1dOU1RSRUFNKSkKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIHJlc3VsdC5hcHBlbmQodG9KUyhleGVjLCByZXN1bHRSYW5nZS5nZXQoKSkpOworCisg
ICAgICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBuZXdTdGFydCk7CisgICAgfSB3aGls
ZSAodHJ1ZSk7CisKKyAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgcmVzdWx0KTsKK30K
KworI2lmIEVOQUJMRShEQVRBQkFTRSkKK0pTVmFsdWVQdHIgSlNJbnNwZWN0b3JDb250cm9sbGVy
OjpkYXRhYmFzZU5hbWVUYWJsZXMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQoreworICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworCisgICAgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBKU1F1YXJh
bnRpbmVkT2JqZWN0V3JhcHBlcjo6YXNXcmFwcGVyKGFyZ3MuYXQoZXhlYywgMCkpOworICAgIGlm
ICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBEYXRhYmFz
ZSogZGF0YWJhc2UgPSB0b0RhdGFiYXNlKHdyYXBwZXItPnVud3JhcHBlZE9iamVjdCgpKTsKKyAg
ICBpZiAoIWRhdGFiYXNlKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIEFy
Z0xpc3QgcmVzdWx0OworCisgICAgVmVjdG9yPFN0cmluZz4gdGFibGVOYW1lcyA9IGRhdGFiYXNl
LT50YWJsZU5hbWVzKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gdGFibGVOYW1lcy5zaXplKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICByZXN1
bHQuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIHRhYmxlTmFtZXNbaV0pKTsKKworICAgIHJldHVybiBj
b25zdHJ1Y3RBcnJheShleGVjLCByZXN1bHQpOworfQorI2VuZGlmCisKK0pTVmFsdWVQdHIgSlNJ
bnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRXaW5kb3coRXhlY1N0YXRlKiwgY29uc3QgQXJn
TGlzdCYpCit7CisgICAgSlNET01XaW5kb3cqIGluc3BlY3RlZFdpbmRvdyA9IHRvSlNET01XaW5k
b3coaW1wbCgpLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpKTsKKyAgICByZXR1cm4gSlNJ
bnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFwKGluc3BlY3RlZFdpbmRvdy0+Z2xvYmFsRXhlYygp
LCBpbnNwZWN0ZWRXaW5kb3cpOworfQorCitKU1ZhbHVlUHRyIEpTSW5zcGVjdG9yQ29udHJvbGxl
cjo6c2V0dGluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAg
aWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAg
ICBTdHJpbmcga2V5ID0gYXJncy5hdChleGVjLCAwKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisg
ICAgY29uc3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZyYgc2V0dGluZyA9IGltcGwoKS0+
c2V0dGluZyhrZXkpOworCisgICAgc3dpdGNoIChzZXR0aW5nLnR5cGUoKSkgeworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6Ok5vVHlw
ZToKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICBjYXNlIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OlNldHRpbmc6OlN0cmluZ1R5cGU6CisgICAgICAgICAgICByZXR1cm4g
anNTdHJpbmcoZXhlYywgc2V0dGluZy5zdHJpbmcoKSk7CisgICAgICAgIGNhc2UgSW5zcGVjdG9y
Q29udHJvbGxlcjo6U2V0dGluZzo6RG91YmxlVHlwZToKKyAgICAgICAgICAgIHJldHVybiBqc051
bWJlcihleGVjLCBzZXR0aW5nLmRvdWJsZVZhbHVlKCkpOworICAgICAgICBjYXNlIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OlNldHRpbmc6OkludGVnZXJUeXBlOgorICAgICAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGV4ZWMsIHNldHRpbmcuaW50ZWdlclZhbHVlKCkpOworICAgICAgICBjYXNlIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OlNldHRpbmc6OkJvb2xlYW5UeXBlOgorICAgICAgICAgICAgcmV0dXJu
IGpzQm9vbGVhbihzZXR0aW5nLmJvb2xlYW5WYWx1ZSgpKTsKKyAgICAgICAgY2FzZSBJbnNwZWN0
b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdWZWN0b3JUeXBlOiB7CisgICAgICAgICAgICBB
cmdMaXN0IHN0cmluZ3NBcnJheTsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBz
dHJpbmdzID0gc2V0dGluZy5zdHJpbmdWZWN0b3IoKTsKKyAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGxlbmd0aCA9IHN0cmluZ3Muc2l6ZSgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIHN0cmluZ3NBcnJheS5hcHBl
bmQoanNTdHJpbmcoZXhlYywgc3RyaW5nc1tpXSkpOworICAgICAgICAgICAgcmV0dXJuIGNvbnN0
cnVjdEFycmF5KGV4ZWMsIHN0cmluZ3NBcnJheSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0pT
VmFsdWVQdHIgSlNJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZXR0aW5nKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBpZiAoYXJncy5zaXplKCkgPCAyKQorICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIFN0cmluZyBrZXkgPSBhcmdzLmF0KGV4
ZWMsIDApLnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpT
ZXR0aW5nIHNldHRpbmc7CisKKyAgICBKU1ZhbHVlUHRyIHZhbHVlID0gYXJncy5hdChleGVjLCAw
KTsKKyAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQoKSB8fCB2YWx1ZS5pc051bGwoKSkgeworICAg
ICAgICAvLyBEbyBub3RoaW5nLiBUaGUgc2V0dGluZyBpcyBhbHJlYWR5IE5vVHlwZS4KKyAgICAg
ICAgQVNTRVJUKHNldHRpbmcudHlwZSgpID09IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6
Ok5vVHlwZSk7CisgICAgfSBlbHNlIGlmICh2YWx1ZS5pc1N0cmluZygpKQorICAgICAgICBzZXR0
aW5nLnNldCh2YWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgZWxzZSBpZiAodmFsdWUuaXNOdW1i
ZXIoKSkKKyAgICAgICAgc2V0dGluZy5zZXQodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgIGVs
c2UgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS50b0Jv
b2xlYW4oZXhlYykpOworICAgIGVsc2UgeworICAgICAgICBKU0FycmF5KiBqc0FycmF5ID0gYXNB
cnJheSh2YWx1ZSk7CisgICAgICAgIGlmICghanNBcnJheSkKKyAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdHJpbmdzOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwganNBcnJheS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAg
ICAgICAgU3RyaW5nIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSkudG9TdHJpbmcoZXhlYyk7
CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBzdHJpbmdzLmFwcGVuZChpdGVtKTsK
KyAgICAgICAgfQorICAgICAgICBzZXR0aW5nLnNldChzdHJpbmdzKTsKKyAgICB9CisKKyAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
CisgICAgaW1wbCgpLT5zZXRTZXR0aW5nKGtleSwgc2V0dGluZyk7CisKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKK30KKworSlNWYWx1ZVB0ciBKU0luc3BlY3RvckNvbnRyb2xsZXI6OndyYXBD
YWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYg
KGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBy
ZXR1cm4gSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXI6OndyYXAoZXhlYywgYXJncy5hdChleGVj
LCAwKSk7Cit9CisKK0pTVmFsdWVQdHIgSlNJbnNwZWN0b3JDb250cm9sbGVyOjpjdXJyZW50Q2Fs
bEZyYW1lKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCit7CisgICAgSmF2YVNjcmlw
dENhbGxGcmFtZSogY2FsbEZyYW1lID0gaW1wbCgpLT5jdXJyZW50Q2FsbEZyYW1lKCk7CisgICAg
aWYgKCFjYWxsRnJhbWUgfHwgIWNhbGxGcmFtZS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKworICAgIC8vIEZJWE1FOiBJIGFtIG5vdCBzdXJlIGlmIHRoaXMgaXMg
YWN0dWFsbHkgbmVlZGVkLiBDYW4gd2UganVzdCB1c2UgZXhlYz8KKyAgICBFeGVjU3RhdGUqIGds
b2JhbEV4ZWMgPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKKworICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICByZXR1cm4gSlNJbnNwZWN0
ZWRPYmplY3RXcmFwcGVyOjp3cmFwKGdsb2JhbEV4ZWMsIHRvSlMoZXhlYywgY2FsbEZyYW1lKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZThkODU4Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCkBAIC0wLDAg
KzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJr
aXRAbWF0dGxpbGVrLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb25zb2xlTWVzc2Fn
ZS5oIgorCisjaW5jbHVkZSAiSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmgiCisjaW5jbHVkZSAi
U2NyaXB0U3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCisjaW5jbHVkZSAi
U2NyaXB0Q2FsbEZyYW1lLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNMb2NrLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworQ29uc29sZU1lc3NhZ2U6OkNvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UgcywgTWVz
c2FnZUxldmVsIGwsIGNvbnN0IFN0cmluZyYgbSwgdW5zaWduZWQgbGksIGNvbnN0IFN0cmluZyYg
dSwgdW5zaWduZWQgZykKKyAgICA6IHNvdXJjZShzKQorICAgICwgbGV2ZWwobCkKKyAgICAsIG1l
c3NhZ2UobSkKKyAgICAsIGxpbmUobGkpCisgICAgLCB1cmwodSkKKyAgICAsIGdyb3VwTGV2ZWwo
ZykKKyAgICAsIHJlcGVhdENvdW50KDEpCit7Cit9CisKK0NvbnNvbGVNZXNzYWdlOjpDb25zb2xl
TWVzc2FnZShNZXNzYWdlU291cmNlIHMsIE1lc3NhZ2VMZXZlbCBsLCBTY3JpcHRDYWxsU3RhY2sq
IGNhbGxTdGFjaywgdW5zaWduZWQgZywgYm9vbCBzdG9yZVRyYWNlKQorICAgIDogc291cmNlKHMp
CisgICAgLCBsZXZlbChsKQorICAgICwgd3JhcHBlZEFyZ3VtZW50cyhjYWxsU3RhY2stPmF0KDAp
LmFyZ3VtZW50Q291bnQoKSkKKyAgICAsIGZyYW1lcyhzdG9yZVRyYWNlID8gY2FsbFN0YWNrLT5z
aXplKCkgOiAwKQorICAgICwgZ3JvdXBMZXZlbChnKQorICAgICwgcmVwZWF0Q291bnQoMSkKK3sK
KyAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGxhc3RDYWxsZXIgPSBjYWxsU3RhY2stPmF0KDAp
OworICAgIGxpbmUgPSBsYXN0Q2FsbGVyLmxpbmVOdW1iZXIoKTsKKyAgICB1cmwgPSBsYXN0Q2Fs
bGVyLnNvdXJjZVVSTCgpLnN0cmluZygpOworCisgICAgLy8gRklYTUU6IEZvciBub3csIGp1c3Qg
c3RvcmUgZnVuY3Rpb24gbmFtZXMgYXMgc3RyaW5ncy4KKyAgICAvLyBBcyBTY3JpcHRDYWxsU3Rh
Y2sgc3RhcnQgc3RvcmluZyBsaW5lIG51bWJlciBhbmQgc291cmNlIFVSTCBmb3IgYWxsCisgICAg
Ly8gZnJhbWVzLCByZWZhY3RvciB0byB1c2UgdGhhdCwgYXMgd2VsbC4KKyAgICBpZiAoc3RvcmVU
cmFjZSkgeworICAgICAgICB1bnNpZ25lZCBzdGFja1NpemUgPSBjYWxsU3RhY2stPnNpemUoKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YWNrU2l6ZTsgKytpKQorICAgICAg
ICAgICAgZnJhbWVzW2ldID0gY2FsbFN0YWNrLT5hdChpKS5mdW5jdGlvbk5hbWUoKTsKKyAgICB9
CisKKyAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGFzdENhbGxlci5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgd3JhcHBlZEFyZ3Vt
ZW50c1tpXSA9IEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChjYWxsU3RhY2stPnN0YXRl
KCksIGxhc3RDYWxsZXIuYXJndW1lbnRBdChpKS5qc1ZhbHVlKCkpOworfQorCitib29sIENvbnNv
bGVNZXNzYWdlOjppc0VxdWFsKEV4ZWNTdGF0ZSogZXhlYywgQ29uc29sZU1lc3NhZ2UqIG1zZykg
Y29uc3QKK3sKKyAgICBpZiAobXNnLT53cmFwcGVkQXJndW1lbnRzLnNpemUoKSAhPSB0aGlzLT53
cmFwcGVkQXJndW1lbnRzLnNpemUoKSB8fAorICAgICAgICAoIWV4ZWMgJiYgbXNnLT53cmFwcGVk
QXJndW1lbnRzLnNpemUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbXNnLT53cmFwcGVkQXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIEFTU0VSVF9BUkcoZXhlYywgZXhlYyk7CisgICAgICAgIGlmICghSlNWYWx1ZUlzRXF1YWwo
dG9SZWYoZXhlYyksIHRvUmVmKG1zZy0+d3JhcHBlZEFyZ3VtZW50c1tpXS5nZXQoKSksIHRvUmVm
KHRoaXMtPndyYXBwZWRBcmd1bWVudHNbaV0uZ2V0KCkpLCAwKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBzaXplX3QgZnJhbWVDb3VudCA9IG1zZy0+ZnJhbWVzLnNp
emUoKTsKKyAgICBpZiAoZnJhbWVDb3VudCAhPSB0aGlzLT5mcmFtZXMuc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lQ291bnQ7
ICsraSkgeworICAgICAgICBjb25zdCBTY3JpcHRTdHJpbmcmIG15RnJhbWVGdW5jdGlvbk5hbWUg
PSB0aGlzLT5mcmFtZXNbaV07CisgICAgICAgIGlmIChteUZyYW1lRnVuY3Rpb25OYW1lICE9IG1z
Zy0+ZnJhbWVzW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiBtc2ctPnNvdXJjZSA9PSB0aGlzLT5zb3VyY2UKKyAgICAmJiBtc2ctPmxldmVsID09IHRo
aXMtPmxldmVsCisgICAgJiYgbXNnLT5tZXNzYWdlID09IHRoaXMtPm1lc3NhZ2UKKyAgICAmJiBt
c2ctPmxpbmUgPT0gdGhpcy0+bGluZQorICAgICYmIG1zZy0+dXJsID09IHRoaXMtPnVybAorICAg
ICYmIG1zZy0+Z3JvdXBMZXZlbCA9PSB0aGlzLT5ncm91cExldmVsOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2Fn
ZS5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5lZGI3YmRkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29u
c29sZU1lc3NhZ2VfaAorI2RlZmluZSBDb25zb2xlTWVzc2FnZV9oCisKKyNpbmNsdWRlICJDb25z
b2xlLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Qcm90ZWN0Lmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKyAgICBjbGFzcyBFeGVjU3RhdGU7Cit9
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFNjcmlwdENhbGxTdGFjazsKKyAg
ICBjbGFzcyBTY3JpcHRTdHJpbmc7CisKKyAgICBjbGFzcyBDb25zb2xlTWVzc2FnZSB7CisgICAg
cHVibGljOgorICAgICAgICBDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2
ZWwsIGNvbnN0IFN0cmluZyYgbSwgdW5zaWduZWQgbGksIGNvbnN0IFN0cmluZyYgdSwgdW5zaWdu
ZWQgZyk7ICAgICAgICAKKyAgICAgICAgQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVz
c2FnZUxldmVsLCBTY3JpcHRDYWxsU3RhY2sqLCB1bnNpZ25lZCBnLCBib29sIHN0b3JlVHJhY2Ug
PSBmYWxzZSk7CisKKyAgICAgICAgYm9vbCBpc0VxdWFsKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBD
b25zb2xlTWVzc2FnZSogbXNnKSBjb25zdDsKKworICAgICAgICBNZXNzYWdlU291cmNlIHNvdXJj
ZTsKKyAgICAgICAgTWVzc2FnZUxldmVsIGxldmVsOworICAgICAgICBTdHJpbmcgbWVzc2FnZTsK
KyAgICAgICAgVmVjdG9yPEpTQzo6UHJvdGVjdGVkSlNWYWx1ZVB0cj4gd3JhcHBlZEFyZ3VtZW50
czsKKyAgICAgICAgVmVjdG9yPFNjcmlwdFN0cmluZz4gZnJhbWVzOworICAgICAgICB1bnNpZ25l
ZCBsaW5lOworICAgICAgICBTdHJpbmcgdXJsOworICAgICAgICB1bnNpZ25lZCBncm91cExldmVs
OworICAgICAgICB1bnNpZ25lZCByZXBlYXRDb3VudDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDb25zb2xlTWVzc2FnZV9oCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGU2NGUwMzUuLmE2Yjk3YTUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCiAjaW5jbHVk
ZSAiQ29uc29sZS5oIgorI2luY2x1ZGUgIkNvbnNvbGVNZXNzYWdlLmgiCiAjaW5jbHVkZSAiRE9N
V2luZG93LmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
QEAgLTQ5LDkgKzUwLDEzIEBACiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgor
I2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5oIgog
I2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSlNJbnNwZWN0ZWRPYmplY3RXcmFw
cGVyLmgiCiAjaW5jbHVkZSAiSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuaCIKKyNpbmNsdWRl
ICJKU0luc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRl
ICJKU1JhbmdlLmgiCiAjaW5jbHVkZSAiSmF2YVNjcmlwdFByb2ZpbGUuaCIKQEAgLTE2NiwzOTUg
KzE3MSwxMCBAQCBKU1ZhbHVlUmVmIEluc3BlY3RvckNvbnRyb2xsZXI6OmNhbGxGdW5jdGlvbihK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLS8vIENvbnNvbGVNZXNzYWdlIFN0cnVjdAotCi1zdHJ1Y3QgQ29uc29sZU1lc3NhZ2Ugewot
ICAgIENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UgcywgTWVzc2FnZUxldmVsIGwsIGNvbnN0
IFN0cmluZyYgbSwgdW5zaWduZWQgbGksIGNvbnN0IFN0cmluZyYgdSwgdW5zaWduZWQgZykKLSAg
ICAgICAgOiBzb3VyY2UocykKLSAgICAgICAgLCBsZXZlbChsKQotICAgICAgICAsIG1lc3NhZ2Uo
bSkKLSAgICAgICAgLCBsaW5lKGxpKQotICAgICAgICAsIHVybCh1KQotICAgICAgICAsIGdyb3Vw
TGV2ZWwoZykKLSAgICAgICAgLCByZXBlYXRDb3VudCgxKQotICAgIHsKLSAgICB9Ci0KLSAgICBD
b25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHMsIE1lc3NhZ2VMZXZlbCBsLCBTY3JpcHRDYWxs
U3RhY2sqIGNhbGxTdGFjaywgdW5zaWduZWQgZywgYm9vbCBzdG9yZVRyYWNlID0gZmFsc2UpCi0g
ICAgICAgIDogc291cmNlKHMpCi0gICAgICAgICwgbGV2ZWwobCkKLSAgICAgICAgLCB3cmFwcGVk
QXJndW1lbnRzKGNhbGxTdGFjay0+YXQoMCkuYXJndW1lbnRDb3VudCgpKQotICAgICAgICAsIGZy
YW1lcyhzdG9yZVRyYWNlID8gY2FsbFN0YWNrLT5zaXplKCkgOiAwKQotICAgICAgICAsIGdyb3Vw
TGV2ZWwoZykKLSAgICAgICAgLCByZXBlYXRDb3VudCgxKQotICAgIHsKLSAgICAgICAgY29uc3Qg
U2NyaXB0Q2FsbEZyYW1lJiBsYXN0Q2FsbGVyID0gY2FsbFN0YWNrLT5hdCgwKTsKLSAgICAgICAg
bGluZSA9IGxhc3RDYWxsZXIubGluZU51bWJlcigpOwotICAgICAgICB1cmwgPSBsYXN0Q2FsbGVy
LnNvdXJjZVVSTCgpLnN0cmluZygpOwotCi0gICAgICAgIC8vIEZJWE1FOiBGb3Igbm93LCBqdXN0
IHN0b3JlIGZ1bmN0aW9uIG5hbWVzIGFzIHN0cmluZ3MuCi0gICAgICAgIC8vIEFzIFNjcmlwdENh
bGxTdGFjayBzdGFydCBzdG9yaW5nIGxpbmUgbnVtYmVyIGFuZCBzb3VyY2UgVVJMIGZvciBhbGwK
LSAgICAgICAgLy8gZnJhbWVzLCByZWZhY3RvciB0byB1c2UgdGhhdCwgYXMgd2VsbC4KLSAgICAg
ICAgaWYgKHN0b3JlVHJhY2UpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrU2l6ZSA9IGNh
bGxTdGFjay0+c2l6ZSgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0
YWNrU2l6ZTsgKytpKQotICAgICAgICAgICAgICAgIGZyYW1lc1tpXSA9IGNhbGxTdGFjay0+YXQo
aSkuZnVuY3Rpb25OYW1lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBKU0xvY2sgbG9jayhmYWxz
ZSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxhc3RDYWxsZXIuYXJndW1l
bnRDb3VudCgpOyArK2kpCi0gICAgICAgICAgICB3cmFwcGVkQXJndW1lbnRzW2ldID0gSlNJbnNw
ZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFwKGNhbGxTdGFjay0+c3RhdGUoKSwgbGFzdENhbGxlci5h
cmd1bWVudEF0KGkpLmpzVmFsdWUoKSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNFcXVhbChF
eGVjU3RhdGUqIGV4ZWMsIENvbnNvbGVNZXNzYWdlKiBtc2cpIGNvbnN0Ci0gICAgewotICAgICAg
ICBpZiAobXNnLT53cmFwcGVkQXJndW1lbnRzLnNpemUoKSAhPSB0aGlzLT53cmFwcGVkQXJndW1l
bnRzLnNpemUoKSB8fAotICAgICAgICAgICAoIWV4ZWMgJiYgbXNnLT53cmFwcGVkQXJndW1lbnRz
LnNpemUoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtc2ctPndyYXBwZWRBcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIEFTU0VSVF9BUkcoZXhlYywgZXhlYyk7Ci0gICAgICAgICAgICBpZiAoIUpTVmFsdWVJ
c0VxdWFsKHRvUmVmKGV4ZWMpLCB0b1JlZihtc2ctPndyYXBwZWRBcmd1bWVudHNbaV0uZ2V0KCkp
LCB0b1JlZih0aGlzLT53cmFwcGVkQXJndW1lbnRzW2ldLmdldCgpKSwgMCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgc2l6ZV90IGZyYW1lQ291
bnQgPSBtc2ctPmZyYW1lcy5zaXplKCk7Ci0gICAgICAgIGlmIChmcmFtZUNvdW50ICE9IHRoaXMt
PmZyYW1lcy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lQ291bnQ7ICsraSkgewotICAgICAgICAg
ICAgY29uc3QgU2NyaXB0U3RyaW5nJiBteUZyYW1lRnVuY3Rpb25OYW1lID0gdGhpcy0+ZnJhbWVz
W2ldOwotICAgICAgICAgICAgaWYgKG15RnJhbWVGdW5jdGlvbk5hbWUgIT0gbXNnLT5mcmFtZXNb
aV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgCi0gICAg
ICAgIHJldHVybiBtc2ctPnNvdXJjZSA9PSB0aGlzLT5zb3VyY2UKLSAgICAgICAgICAgICYmIG1z
Zy0+bGV2ZWwgPT0gdGhpcy0+bGV2ZWwKLSAgICAgICAgICAgICYmIG1zZy0+bWVzc2FnZSA9PSB0
aGlzLT5tZXNzYWdlCi0gICAgICAgICAgICAmJiBtc2ctPmxpbmUgPT0gdGhpcy0+bGluZQotICAg
ICAgICAgICAgJiYgbXNnLT51cmwgPT0gdGhpcy0+dXJsCi0gICAgICAgICAgICAmJiBtc2ctPmdy
b3VwTGV2ZWwgPT0gdGhpcy0+Z3JvdXBMZXZlbDsKLSAgICB9Ci0KLSAgICBNZXNzYWdlU291cmNl
IHNvdXJjZTsKLSAgICBNZXNzYWdlTGV2ZWwgbGV2ZWw7Ci0gICAgU3RyaW5nIG1lc3NhZ2U7Ci0g
ICAgVmVjdG9yPFByb3RlY3RlZEpTVmFsdWVQdHI+IHdyYXBwZWRBcmd1bWVudHM7Ci0gICAgVmVj
dG9yPFNjcmlwdFN0cmluZz4gZnJhbWVzOwotICAgIHVuc2lnbmVkIGxpbmU7Ci0gICAgU3RyaW5n
IHVybDsKLSAgICB1bnNpZ25lZCBncm91cExldmVsOwotICAgIHVuc2lnbmVkIHJlcGVhdENvdW50
OwotfTsKLQotLy8gWE1MSHR0cFJlcXVlc3RSZXNvdXJjZSBDbGFzcwotCi1zdHJ1Y3QgWE1MSHR0
cFJlcXVlc3RSZXNvdXJjZSB7Ci0gICAgWE1MSHR0cFJlcXVlc3RSZXNvdXJjZShjb25zdCBKU0M6
OlVTdHJpbmcmIHNvdXJjZVN0cmluZykKLSAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrIGxvY2so
ZmFsc2UpOwotICAgICAgICB0aGlzLT5zb3VyY2VTdHJpbmcgPSBzb3VyY2VTdHJpbmcucmVwKCk7
Ci0gICAgfQotCi0gICAgflhNTEh0dHBSZXF1ZXN0UmVzb3VyY2UoKQotICAgIHsKLSAgICAgICAg
SlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgICAgIHNvdXJjZVN0cmluZy5jbGVhcigpOwot
ICAgIH0KLQotICAgIFJlZlB0cjxKU0M6OlVTdHJpbmc6OlJlcD4gc291cmNlU3RyaW5nOwotfTsK
LQotLy8gSW5zcGVjdG9yUmVzb3VyY2UgU3RydWN0Ci0KLXN0cnVjdCBJbnNwZWN0b3JSZXNvdXJj
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvclJlc291cmNlPiB7Ci0gICAgLy8gS2VlcCB0
aGVzZSBpbiBzeW5jIHdpdGggV2ViSW5zcGVjdG9yLlJlc291cmNlLlR5cGUKLSAgICBlbnVtIFR5
cGUgewotICAgICAgICBEb2MsCi0gICAgICAgIFN0eWxlc2hlZXQsCi0gICAgICAgIEltYWdlLAot
ICAgICAgICBGb250LAotICAgICAgICBTY3JpcHQsCi0gICAgICAgIFhIUiwKLSAgICAgICAgTWVk
aWEsCi0gICAgICAgIE90aGVyCi0gICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3RvclJlc291cmNlPiBjcmVhdGUobG9uZyBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVy
KiBkb2N1bWVudExvYWRlciwgRnJhbWUqIGZyYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJbnNwZWN0b3JSZXNvdXJjZShpZGVudGlmaWVyLCBkb2N1bWVudExvYWRlciwg
ZnJhbWUpKTsKLSAgICB9Ci0gICAgCi0gICAgfkluc3BlY3RvclJlc291cmNlKCkKLSAgICB7Ci0g
ICAgICAgIHNldFNjcmlwdE9iamVjdCgwLCAwKTsKLSAgICB9Ci0KLSAgICBUeXBlIHR5cGUoKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0UmVzb3VyY2UpCi0gICAgICAg
ICAgICByZXR1cm4gWEhSOwotCi0gICAgICAgIGlmIChyZXF1ZXN0VVJMID09IGxvYWRlci0+cmVx
dWVzdFVSTCgpKQotICAgICAgICAgICAgcmV0dXJuIERvYzsKLQotICAgICAgICBpZiAobG9hZGVy
LT5mcmFtZUxvYWRlcigpICYmIHJlcXVlc3RVUkwgPT0gbG9hZGVyLT5mcmFtZUxvYWRlcigpLT5p
Y29uVVJMKCkpCi0gICAgICAgICAgICByZXR1cm4gSW1hZ2U7Ci0KLSAgICAgICAgQ2FjaGVkUmVz
b3VyY2UqIGNhY2hlZFJlc291cmNlID0gZnJhbWUtPmRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5j
YWNoZWRSZXNvdXJjZShyZXF1ZXN0VVJMLnN0cmluZygpKTsKLSAgICAgICAgaWYgKCFjYWNoZWRS
ZXNvdXJjZSkKLSAgICAgICAgICAgIHJldHVybiBPdGhlcjsKLQotICAgICAgICBzd2l0Y2ggKGNh
Y2hlZFJlc291cmNlLT50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkltYWdlUmVzb3VyY2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEltYWdlOwotICAgICAgICAg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgotICAgICAgICAgICAgICAgIHJl
dHVybiBGb250OwotICAgICAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVl
dDoKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhT
TFN0eWxlU2hlZXQ6Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICByZXR1cm4gU3R5bGVzaGVldDsK
LSAgICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gU2NyaXB0OwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gT3RoZXI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIHNldFNjcmlwdE9iamVj
dChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgbmV3U2NyaXB0T2JqZWN0KQotICAg
IHsKLSAgICAgICAgaWYgKHNjcmlwdENvbnRleHQgJiYgc2NyaXB0T2JqZWN0KQotICAgICAgICAg
ICAgSlNWYWx1ZVVucHJvdGVjdChzY3JpcHRDb250ZXh0LCBzY3JpcHRPYmplY3QpOwotCi0gICAg
ICAgIHNjcmlwdE9iamVjdCA9IG5ld1NjcmlwdE9iamVjdDsKLSAgICAgICAgc2NyaXB0Q29udGV4
dCA9IGNvbnRleHQ7Ci0KLSAgICAgICAgQVNTRVJUKChjb250ZXh0ICYmIG5ld1NjcmlwdE9iamVj
dCkgfHwgKCFjb250ZXh0ICYmICFuZXdTY3JpcHRPYmplY3QpKTsKLSAgICAgICAgaWYgKGNvbnRl
eHQgJiYgbmV3U2NyaXB0T2JqZWN0KQotICAgICAgICAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4
dCwgbmV3U2NyaXB0T2JqZWN0KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFhNTEh0dHBSZXF1ZXN0
UHJvcGVydGllcyhjb25zdCBKU0M6OlVTdHJpbmcmIGRhdGEpCi0gICAgewotICAgICAgICB4bWxI
dHRwUmVxdWVzdFJlc291cmNlLnNldChuZXcgWE1MSHR0cFJlcXVlc3RSZXNvdXJjZShkYXRhKSk7
Ci0gICAgfQotICAgIAotICAgIFN0cmluZyBzb3VyY2VTdHJpbmcoKSBjb25zdAotICAgICB7Ci0g
ICAgICAgICBpZiAoeG1sSHR0cFJlcXVlc3RSZXNvdXJjZSkKLSAgICAgICAgICAgIHJldHVybiBK
U0M6OlVTdHJpbmcoeG1sSHR0cFJlcXVlc3RSZXNvdXJjZS0+c291cmNlU3RyaW5nKTsKLQotICAg
ICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXI7Ci0gICAgICAgIFN0cmluZyB0ZXh0RW5j
b2RpbmdOYW1lOwotCi0gICAgICAgIGlmIChyZXF1ZXN0VVJMID09IGxvYWRlci0+cmVxdWVzdFVS
TCgpKSB7Ci0gICAgICAgICAgICBidWZmZXIgPSBsb2FkZXItPm1haW5SZXNvdXJjZURhdGEoKTsK
LSAgICAgICAgICAgIHRleHRFbmNvZGluZ05hbWUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+aW5wdXRF
bmNvZGluZygpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2Uq
IGNhY2hlZFJlc291cmNlID0gZnJhbWUtPmRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5jYWNoZWRS
ZXNvdXJjZShyZXF1ZXN0VVJMLnN0cmluZygpKTsKLSAgICAgICAgICAgIGlmICghY2FjaGVkUmVz
b3VyY2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgICAgICAgICBp
ZiAoY2FjaGVkUmVzb3VyY2UtPmlzUHVyZ2VhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGUgcmVzb3VyY2UgaXMgcHVyZ2VhYmxlIHRoZW4gbWFrZSBpdCB1bnB1cmdlYWJsZSB0byBn
ZXQKLSAgICAgICAgICAgICAgICAvLyBnZXQgaXRzIGRhdGEuIFRoaXMgbWlnaHQgZmFpbCwgaW4g
d2hpY2ggY2FzZSB3ZSByZXR1cm4gYW4KLSAgICAgICAgICAgICAgICAvLyBlbXB0eSBTdHJpbmcu
Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCB3ZSBkbyBzb21ldGhpbmcgZWxzZSBp
biB0aGUgY2FzZSBvZiBhIHB1cmdlZAotICAgICAgICAgICAgICAgIC8vIHJlc291cmNlIHRoYXQg
aW5mb3JtcyB0aGUgdXNlciB3aHkgdGhlcmUgaXMgbm8gZGF0YSBpbiB0aGUKLSAgICAgICAgICAg
ICAgICAvLyBpbnNwZWN0b3I/Ci0gICAgICAgICAgICAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZS0+
bWFrZVB1cmdlYWJsZShmYWxzZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYnVmZmVyID0gY2FjaGVkUmVzb3VyY2Ut
PmRhdGEoKTsKLSAgICAgICAgICAgIHRleHRFbmNvZGluZ05hbWUgPSBjYWNoZWRSZXNvdXJjZS0+
ZW5jb2RpbmcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghYnVmZmVyKQotICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyh0ZXh0
RW5jb2RpbmdOYW1lKTsKLSAgICAgICAgaWYgKCFlbmNvZGluZy5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICBlbmNvZGluZyA9IFdpbmRvd3NMYXRpbjFFbmNvZGluZygpOwotICAgICAgICByZXR1cm4g
ZW5jb2RpbmcuZGVjb2RlKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7Ci0gICAgIH0K
LQotICAgIGxvbmcgbG9uZyBpZGVudGlmaWVyOwotICAgIFJlZlB0cjxEb2N1bWVudExvYWRlcj4g
bG9hZGVyOwotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWU7Ci0gICAgT3duUHRyPFhNTEh0dHBSZXF1
ZXN0UmVzb3VyY2U+IHhtbEh0dHBSZXF1ZXN0UmVzb3VyY2U7Ci0gICAgS1VSTCByZXF1ZXN0VVJM
OwotICAgIEhUVFBIZWFkZXJNYXAgcmVxdWVzdEhlYWRlckZpZWxkczsKLSAgICBIVFRQSGVhZGVy
TWFwIHJlc3BvbnNlSGVhZGVyRmllbGRzOwotICAgIFN0cmluZyBtaW1lVHlwZTsKLSAgICBTdHJp
bmcgc3VnZ2VzdGVkRmlsZW5hbWU7Ci0gICAgSlNDb250ZXh0UmVmIHNjcmlwdENvbnRleHQ7Ci0g
ICAgSlNPYmplY3RSZWYgc2NyaXB0T2JqZWN0OwotICAgIGxvbmcgbG9uZyBleHBlY3RlZENvbnRl
bnRMZW5ndGg7Ci0gICAgYm9vbCBjYWNoZWQ7Ci0gICAgYm9vbCBmaW5pc2hlZDsKLSAgICBib29s
IGZhaWxlZDsKLSAgICBpbnQgbGVuZ3RoOwotICAgIGludCByZXNwb25zZVN0YXR1c0NvZGU7Ci0g
ICAgZG91YmxlIHN0YXJ0VGltZTsKLSAgICBkb3VibGUgcmVzcG9uc2VSZWNlaXZlZFRpbWU7Ci0g
ICAgZG91YmxlIGVuZFRpbWU7Ci0KLXByb3RlY3RlZDoKLSAgICBJbnNwZWN0b3JSZXNvdXJjZShs
b25nIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyLCBGcmFt
ZSogZnJhbWUpCi0gICAgICAgIDogaWRlbnRpZmllcihpZGVudGlmaWVyKQotICAgICAgICAsIGxv
YWRlcihkb2N1bWVudExvYWRlcikKLSAgICAgICAgLCBmcmFtZShmcmFtZSkKLSAgICAgICAgLCB4
bWxIdHRwUmVxdWVzdFJlc291cmNlKDApCi0gICAgICAgICwgc2NyaXB0Q29udGV4dCgwKQotICAg
ICAgICAsIHNjcmlwdE9iamVjdCgwKQotICAgICAgICAsIGV4cGVjdGVkQ29udGVudExlbmd0aCgw
KQotICAgICAgICAsIGNhY2hlZChmYWxzZSkKLSAgICAgICAgLCBmaW5pc2hlZChmYWxzZSkKLSAg
ICAgICAgLCBmYWlsZWQoZmFsc2UpCi0gICAgICAgICwgbGVuZ3RoKDApCi0gICAgICAgICwgcmVz
cG9uc2VTdGF0dXNDb2RlKDApCi0gICAgICAgICwgc3RhcnRUaW1lKC0xLjApCi0gICAgICAgICwg
cmVzcG9uc2VSZWNlaXZlZFRpbWUoLTEuMCkKLSAgICAgICAgLCBlbmRUaW1lKC0xLjApCi0gICAg
ewotICAgIH0KLX07Ci0KLS8vIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UgU3RydWN0Ci0KLSNp
ZiBFTkFCTEUoREFUQUJBU0UpCi1zdHJ1Y3QgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSA6IHB1
YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+IHsKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiBjcmVhdGUoRGF0YWJhc2UqIGRh
dGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZlcnNpb24pCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3Bl
Y3RvckRhdGFiYXNlUmVzb3VyY2UoZGF0YWJhc2UsIGRvbWFpbiwgbmFtZSwgdmVyc2lvbikpOwot
ICAgIH0KLQotICAgIHZvaWQgc2V0U2NyaXB0T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBuZXdTY3JpcHRPYmplY3QpCi0gICAgewotICAgICAgICBpZiAoc2NyaXB0Q29u
dGV4dCAmJiBzY3JpcHRPYmplY3QpCi0gICAgICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KHNjcmlw
dENvbnRleHQsIHNjcmlwdE9iamVjdCk7Ci0KLSAgICAgICAgc2NyaXB0T2JqZWN0ID0gbmV3U2Ny
aXB0T2JqZWN0OwotICAgICAgICBzY3JpcHRDb250ZXh0ID0gY29udGV4dDsKLQotICAgICAgICBB
U1NFUlQoKGNvbnRleHQgJiYgbmV3U2NyaXB0T2JqZWN0KSB8fCAoIWNvbnRleHQgJiYgIW5ld1Nj
cmlwdE9iamVjdCkpOwotICAgICAgICBpZiAoY29udGV4dCAmJiBuZXdTY3JpcHRPYmplY3QpCi0g
ICAgICAgICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBuZXdTY3JpcHRPYmplY3QpOwotICAg
IH0KLQotICAgIFJlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2U7Ci0gICAgU3RyaW5nIGRvbWFpbjsK
LSAgICBTdHJpbmcgbmFtZTsKLSAgICBTdHJpbmcgdmVyc2lvbjsKLSAgICBKU0NvbnRleHRSZWYg
c2NyaXB0Q29udGV4dDsKLSAgICBKU09iamVjdFJlZiBzY3JpcHRPYmplY3Q7Ci0gICAgCi1wcml2
YXRlOgotICAgIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UoRGF0YWJhc2UqIGRhdGFiYXNlLCBj
b25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZl
cnNpb24pCi0gICAgICAgIDogZGF0YWJhc2UoZGF0YWJhc2UpCi0gICAgICAgICwgZG9tYWluKGRv
bWFpbikKLSAgICAgICAgLCBuYW1lKG5hbWUpCi0gICAgICAgICwgdmVyc2lvbih2ZXJzaW9uKQot
ICAgICAgICAsIHNjcmlwdENvbnRleHQoMCkKLSAgICAgICAgLCBzY3JpcHRPYmplY3QoMCkKLSAg
ICB7Ci0gICAgfQotfTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotc3RydWN0
IEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3Rv
ckRPTVN0b3JhZ2VSZXNvdXJjZT4gewotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRP
TVN0b3JhZ2VSZXNvdXJjZT4gY3JlYXRlKFN0b3JhZ2UqIGRvbVN0b3JhZ2UsIGJvb2wgaXNMb2Nh
bFN0b3JhZ2UsIEZyYW1lKiBmcmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKGRvbVN0b3JhZ2UsIGlzTG9jYWxTdG9yYWdl
LCBmcmFtZSkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0U2NyaXB0T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBuZXdTY3JpcHRPYmplY3QpCi0gICAgewotICAgICAgICBp
ZiAoc2NyaXB0Q29udGV4dCAmJiBzY3JpcHRPYmplY3QpCi0gICAgICAgICAgICBKU1ZhbHVlVW5w
cm90ZWN0KHNjcmlwdENvbnRleHQsIHNjcmlwdE9iamVjdCk7Ci0KLSAgICAgICAgc2NyaXB0T2Jq
ZWN0ID0gbmV3U2NyaXB0T2JqZWN0OwotICAgICAgICBzY3JpcHRDb250ZXh0ID0gY29udGV4dDsK
LQotICAgICAgICBBU1NFUlQoKGNvbnRleHQgJiYgbmV3U2NyaXB0T2JqZWN0KSB8fCAoIWNvbnRl
eHQgJiYgIW5ld1NjcmlwdE9iamVjdCkpOwotICAgICAgICBpZiAoY29udGV4dCAmJiBuZXdTY3Jp
cHRPYmplY3QpCi0gICAgICAgICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBuZXdTY3JpcHRP
YmplY3QpOwotICAgIH0KLQotICAgIFJlZlB0cjxTdG9yYWdlPiBkb21TdG9yYWdlOwotICAgIGJv
b2wgaXNMb2NhbFN0b3JhZ2U7Ci0gICAgUmVmUHRyPEZyYW1lPiBmcmFtZTsKLSAgICBKU0NvbnRl
eHRSZWYgc2NyaXB0Q29udGV4dDsKLSAgICBKU09iamVjdFJlZiBzY3JpcHRPYmplY3Q7Ci0gICAg
Ci1wcml2YXRlOgotICAgIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZShTdG9yYWdlKiBkb21T
dG9yYWdlLCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSogZnJhbWUpCi0gICAgICAgIDogZG9t
U3RvcmFnZShkb21TdG9yYWdlKQotICAgICAgICAsIGlzTG9jYWxTdG9yYWdlKGlzTG9jYWxTdG9y
YWdlKQotICAgICAgICAsIGZyYW1lKGZyYW1lKQotICAgICAgICAsIHNjcmlwdENvbnRleHQoMCkK
LSAgICAgICAgLCBzY3JpcHRPYmplY3QoMCkKLSAgICB7Ci0gICAgfQotfTsKLSNlbmRpZgotCi0v
LyBKYXZhU2NyaXB0IENhbGxiYWNrcwotCi0jZGVmaW5lIFNJTVBMRV9JTlNQRUNUT1JfQ0FMTEJB
Q0soanNGdW5jdGlvbiwgaW5zcGVjdG9yQ29udHJvbGxlck1ldGhvZCkgXAotc3RhdGljIEpTVmFs
dWVSZWYganNGdW5jdGlvbihKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10sIEpTVmFsdWVSZWYqKSBc
Ci17IFwKLSAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8SW5zcGVjdG9yQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSkpIFwKLSAgICAgICAgY29udHJvbGxlci0+aW5zcGVjdG9yQ29udHJvbGxlck1ldGhvZCgp
OyBcCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7IFwKLX0KLQotU0lNUExF
X0lOU1BFQ1RPUl9DQUxMQkFDSyhoaWRlRE9NTm9kZUhpZ2hsaWdodCwgaGlkZUhpZ2hsaWdodCk7
Ci1TSU1QTEVfSU5TUEVDVE9SX0NBTExCQUNLKGxvYWRlZCwgc2NyaXB0T2JqZWN0UmVhZHkpOwot
U0lNUExFX0lOU1BFQ1RPUl9DQUxMQkFDSyh1bmxvYWRpbmcsIGNsb3NlKTsKLVNJTVBMRV9JTlNQ
RUNUT1JfQ0FMTEJBQ0soYXR0YWNoLCBhdHRhY2hXaW5kb3cpOwotU0lNUExFX0lOU1BFQ1RPUl9D
QUxMQkFDSyhkZXRhY2gsIGRldGFjaFdpbmRvdyk7Ci0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCi1TSU1QTEVfSU5TUEVDVE9SX0NBTExCQUNLKGVuYWJsZURlYnVnZ2VyLCBlbmFibGVE
ZWJ1Z2dlcik7Ci1TSU1QTEVfSU5TUEVDVE9SX0NBTExCQUNLKGRpc2FibGVEZWJ1Z2dlciwgZGlz
YWJsZURlYnVnZ2VyKTsKLVNJTVBMRV9JTlNQRUNUT1JfQ0FMTEJBQ0socGF1c2VJbkRlYnVnZ2Vy
LCBwYXVzZUluRGVidWdnZXIpOwotU0lNUExFX0lOU1BFQ1RPUl9DQUxMQkFDSyhyZXN1bWVEZWJ1
Z2dlciwgcmVzdW1lRGVidWdnZXIpOwotU0lNUExFX0lOU1BFQ1RPUl9DQUxMQkFDSyhzdGVwT3Zl
clN0YXRlbWVudEluRGVidWdnZXIsIHN0ZXBPdmVyU3RhdGVtZW50SW5EZWJ1Z2dlcik7Ci1TSU1Q
TEVfSU5TUEVDVE9SX0NBTExCQUNLKHN0ZXBJbnRvU3RhdGVtZW50SW5EZWJ1Z2dlciwgc3RlcElu
dG9TdGF0ZW1lbnRJbkRlYnVnZ2VyKTsKLVNJTVBMRV9JTlNQRUNUT1JfQ0FMTEJBQ0soc3RlcE91
dE9mRnVuY3Rpb25JbkRlYnVnZ2VyLCBzdGVwT3V0T2ZGdW5jdGlvbkluRGVidWdnZXIpOwotI2Vu
ZGlmCi1TSU1QTEVfSU5TUEVDVE9SX0NBTExCQUNLKGNsb3NlV2luZG93LCBjbG9zZVdpbmRvdyk7
Ci1TSU1QTEVfSU5TUEVDVE9SX0NBTExCQUNLKGNsZWFyTWVzc2FnZXMsIGNsZWFyQ29uc29sZU1l
c3NhZ2VzKTsKLVNJTVBMRV9JTlNQRUNUT1JfQ0FMTEJBQ0soc3RhcnRQcm9maWxpbmcsIHN0YXJ0
VXNlckluaXRpYXRlZFByb2ZpbGluZ1Nvb24pOwotU0lNUExFX0lOU1BFQ1RPUl9DQUxMQkFDSyhz
dG9wUHJvZmlsaW5nLCBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZyk7Ci1TSU1QTEVfSU5TUEVD
VE9SX0NBTExCQUNLKGVuYWJsZVByb2ZpbGVyLCBlbmFibGVQcm9maWxlcik7Ci1TSU1QTEVfSU5T
UEVDVE9SX0NBTExCQUNLKGRpc2FibGVQcm9maWxlciwgZGlzYWJsZVByb2ZpbGVyKTsKLVNJTVBM
RV9JTlNQRUNUT1JfQ0FMTEJBQ0sodG9nZ2xlTm9kZVNlYXJjaCwgdG9nZ2xlU2VhcmNoRm9yTm9k
ZUluUGFnZSk7Ci0KLSNkZWZpbmUgQk9PTF9JTlNQRUNUT1JfQ0FMTEJBQ0soanNGdW5jdGlvbiwg
aW5zcGVjdG9yQ29udHJvbGxlck1ldGhvZCkgXAotc3RhdGljIEpTVmFsdWVSZWYganNGdW5jdGlv
bihKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10sIEpTVmFsdWVSZWYqKSBcCi17IFwKLSAgICBpZiAo
SW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SW5zcGVj
dG9yQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSkpIFwKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjdHgsIGNvbnRyb2xsZXItPmluc3BlY3RvckNv
bnRyb2xsZXJNZXRob2QoKSk7IFwKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4
KTsgXAotfQotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi1CT09MX0lOU1BFQ1RP
Ul9DQUxMQkFDSyhkZWJ1Z2dlckVuYWJsZWQsIGRlYnVnZ2VyRW5hYmxlZCk7Ci1CT09MX0lOU1BF
Q1RPUl9DQUxMQkFDSyhwYXVzZU9uRXhjZXB0aW9ucywgcGF1c2VPbkV4Y2VwdGlvbnMpOwotI2Vu
ZGlmCi1CT09MX0lOU1BFQ1RPUl9DQUxMQkFDSyhwcm9maWxlckVuYWJsZWQsIHByb2ZpbGVyRW5h
YmxlZCk7Ci1CT09MX0lOU1BFQ1RPUl9DQUxMQkFDSyhpc1dpbmRvd1Zpc2libGUsIHdpbmRvd1Zp
c2libGUpOwotQk9PTF9JTlNQRUNUT1JfQ0FMTEJBQ0soc2VhcmNoaW5nRm9yTm9kZSwgc2VhcmNo
aW5nRm9yTm9kZUluUGFnZSk7Ci0KLXN0YXRpYyBib29sIGFkZFNvdXJjZVRvRnJhbWUoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIE5vZGUqIGZyYW1lTm9kZSkK
K2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkU291cmNlVG9GcmFtZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgTm9kZSogZnJhbWVOb2RlKQogewogICAg
IEFTU0VSVF9BUkcoZnJhbWVOb2RlLCBmcmFtZU5vZGUpOwotCisgICAgCiAgICAgaWYgKCFmcmFt
ZU5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNTg3LDM3MyArMjA3LDcgQEAgc3Rh
dGljIGJvb2wgYWRkU291cmNlVG9GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBT
dHJpbmcmIHNvdXJjZSwgTm9kZSoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIEpTVmFs
dWVSZWYgYWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmIC8qZnVuY3Rpb24qLywgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKLXsKLSAgICBKU1ZhbHVlUmVmIHVuZGVmaW5lZCA9IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0
eCk7Ci0KLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRf
Y2FzdDxJbnNwZWN0b3JDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDIgfHwgIWNvbnRyb2xsZXIpCi0gICAgICAgIHJl
dHVybiB1bmRlZmluZWQ7Ci0KLSAgICBKU1ZhbHVlUmVmIGlkZW50aWZpZXJWYWx1ZSA9IGFyZ3Vt
ZW50c1swXTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjdHgsIGlkZW50aWZpZXJWYWx1ZSkp
Ci0gICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0KLSAgICBsb25nIGxvbmcgaWRlbnRpZmllciA9
IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oSlNWYWx1ZVRvTnVtYmVyKGN0eCwgaWRlbnRpZmllclZh
bHVlLCBleGNlcHRpb24pKTsKLSAgICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRpb24pCi0gICAg
ICAgIHJldHVybiB1bmRlZmluZWQ7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+IHJl
c291cmNlID0gY29udHJvbGxlci0+cmVzb3VyY2VzKCkuZ2V0KGlkZW50aWZpZXIpOwotICAgIEFT
U0VSVChyZXNvdXJjZSk7Ci0gICAgaWYgKCFyZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHVuZGVm
aW5lZDsKLQotICAgIFN0cmluZyBzb3VyY2VTdHJpbmcgPSByZXNvdXJjZS0+c291cmNlU3RyaW5n
KCk7Ci0gICAgaWYgKHNvdXJjZVN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB1bmRl
ZmluZWQ7Ci0KLSAgICBib29sIHN1Y2Nlc3NmdWxseUFkZGVkU291cmNlID0gYWRkU291cmNlVG9G
cmFtZShyZXNvdXJjZS0+bWltZVR5cGUsIHNvdXJjZVN0cmluZywgdG9Ob2RlKHRvSlMoYXJndW1l
bnRzWzFdKSkpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY3R4LCBzdWNjZXNzZnVs
bHlBZGRlZFNvdXJjZSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGFkZFNvdXJjZVRvRnJhbWUo
SlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgLypmdW5jdGlvbiovLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIEpTVmFsdWVSZWYgdW5kZWZpbmVk
ID0gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIEluc3BlY3RvckNvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PEluc3BlY3RvckNvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGlmIChhcmd1bWVudENvdW50IDwgMyB8
fCAhY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLQotICAgIEpTVmFsdWVS
ZWYgbWltZVR5cGVWYWx1ZSA9IGFyZ3VtZW50c1swXTsKLSAgICBpZiAoIUpTVmFsdWVJc1N0cmlu
ZyhjdHgsIG1pbWVUeXBlVmFsdWUpKQotICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotCi0gICAg
SlNWYWx1ZVJlZiBzb3VyY2VWYWx1ZSA9IGFyZ3VtZW50c1sxXTsKLSAgICBpZiAoIUpTVmFsdWVJ
c1N0cmluZyhjdHgsIHNvdXJjZVZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLQot
ICAgIFN0cmluZyBtaW1lVHlwZSA9IHRvU3RyaW5nKGN0eCwgbWltZVR5cGVWYWx1ZSwgZXhjZXB0
aW9uKTsKLSAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdW5kZWZp
bmVkOwotCi0gICAgU3RyaW5nIHNvdXJjZSA9IHRvU3RyaW5nKGN0eCwgc291cmNlVmFsdWUsIGV4
Y2VwdGlvbik7Ci0gICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB1bmRl
ZmluZWQ7Ci0KLSAgICBib29sIHN1Y2Nlc3NmdWxseUFkZGVkU291cmNlID0gYWRkU291cmNlVG9G
cmFtZShtaW1lVHlwZSwgc291cmNlLCB0b05vZGUodG9KUyhhcmd1bWVudHNbMl0pKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjdHgsIHN1Y2Nlc3NmdWxseUFkZGVkU291cmNlKTsK
LX0KLQotc3RhdGljIEpTVmFsdWVSZWYgZ2V0UmVzb3VyY2VEb2N1bWVudE5vZGUoSlNDb250ZXh0
UmVmIGN0eCwgSlNPYmplY3RSZWYgLypmdW5jdGlvbiovLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIEpTVmFsdWVSZWYgdW5kZWZpbmVkID0gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSByZWludGVycHJldF9jYXN0PEluc3BlY3RvckNvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwotICAgIGlmICghYXJndW1lbnRDb3VudCB8fCBhcmd1bWVudENv
dW50ID4gMSB8fCAhY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLQotICAg
IEpTVmFsdWVSZWYgaWRlbnRpZmllclZhbHVlID0gYXJndW1lbnRzWzBdOwotICAgIGlmICghSlNW
YWx1ZUlzTnVtYmVyKGN0eCwgaWRlbnRpZmllclZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHVuZGVm
aW5lZDsKLQotICAgIGxvbmcgbG9uZyBpZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25n
PihKU1ZhbHVlVG9OdW1iZXIoY3R4LCBpZGVudGlmaWVyVmFsdWUsIGV4Y2VwdGlvbikpOwotICAg
IGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsK
LQotICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gcmVzb3VyY2UgPSBjb250cm9sbGVyLT5y
ZXNvdXJjZXMoKS5nZXQoaWRlbnRpZmllcik7Ci0gICAgQVNTRVJUKHJlc291cmNlKTsKLSAgICBp
ZiAoIXJlc291cmNlKQotICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotCi0gICAgRnJhbWUqIGZy
YW1lID0gcmVzb3VyY2UtPmZyYW1lLmdldCgpOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
ZnJhbWUtPmRvY3VtZW50KCk7Ci0KLSAgICBpZiAoZG9jdW1lbnQtPmlzUGx1Z2luRG9jdW1lbnQo
KSB8fCBkb2N1bWVudC0+aXNJbWFnZURvY3VtZW50KCkgfHwgZG9jdW1lbnQtPmlzTWVkaWFEb2N1
bWVudCgpKQotICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotCi0gICAgRXhlY1N0YXRlKiBleGVj
ID0gdG9KU0RPTVdpbmRvd1NoZWxsKHJlc291cmNlLT5mcmFtZS5nZXQoKSktPndpbmRvdygpLT5n
bG9iYWxFeGVjKCk7Ci0KLSAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICBKU1ZhbHVl
UmVmIGRvY3VtZW50VmFsdWUgPSB0b1JlZihKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OndyYXAo
ZXhlYywgdG9KUyhleGVjLCBkb2N1bWVudCkpKTsKLSAgICByZXR1cm4gZG9jdW1lbnRWYWx1ZTsK
LX0KLQotc3RhdGljIEpTVmFsdWVSZWYgaGlnaGxpZ2h0RE9NTm9kZShKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgLypmdW5jdGlvbiovLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogLypleGNlcHRpb24qLykKLXsKLSAgICBKU1ZhbHVlUmVmIHVuZGVmaW5lZCA9IEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogY29u
dHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SW5zcGVjdG9yQ29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxIHx8ICFj
b250cm9sbGVyKQotICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotCi0gICAgSlNRdWFyYW50aW5l
ZE9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6YXNX
cmFwcGVyKHRvSlMoYXJndW1lbnRzWzBdKSk7Ci0gICAgaWYgKCF3cmFwcGVyKQotICAgICAgICBy
ZXR1cm4gdW5kZWZpbmVkOwotICAgIE5vZGUqIG5vZGUgPSB0b05vZGUod3JhcHBlci0+dW53cmFw
cGVkT2JqZWN0KCkpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsK
LQotICAgIGNvbnRyb2xsZXItPmhpZ2hsaWdodChub2RlKTsKLQotICAgIHJldHVybiB1bmRlZmlu
ZWQ7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNlYXJjaChKU0NvbnRleHRSZWYgY3R4LCBKU09i
amVjdFJlZiAvKmZ1bmN0aW9uKi8sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCi17Ci0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8SW5zcGVjdG9yQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7Ci0gICAgaWYgKCFjb250cm9sbGVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY3R4KTsKLQotICAgIGlmIChhcmd1bWVudENvdW50IDwgMiB8fCAhSlNWYWx1ZUlz
U3RyaW5nKGN0eCwgYXJndW1lbnRzWzFdKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGN0eCk7Ci0KLSAgICBOb2RlKiBub2RlID0gdG9Ob2RlKHRvSlMoYXJndW1lbnRzWzBd
KSk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y3R4KTsKLQotICAgIFN0cmluZyB0YXJnZXQgPSB0b1N0cmluZyhjdHgsIGFyZ3VtZW50c1sxXSwg
ZXhjZXB0aW9uKTsKLQotICAgIEpTT2JqZWN0UmVmIGdsb2JhbCA9IEpTQ29udGV4dEdldEdsb2Jh
bE9iamVjdChjdHgpOwotCi0gICAgSlNWYWx1ZVJlZiBhcnJheVByb3BlcnR5ID0gSlNPYmplY3RH
ZXRQcm9wZXJ0eShjdHgsIGdsb2JhbCwganNTdHJpbmdSZWYoIkFycmF5IikuZ2V0KCksIGV4Y2Vw
dGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIEpTT2JqZWN0UmVmIGFycmF5Q29uc3Ry
dWN0b3IgPSBKU1ZhbHVlVG9PYmplY3QoY3R4LCBhcnJheVByb3BlcnR5LCBleGNlcHRpb24pOwot
ICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBKU09iamVjdFJlZiByZXN1bHQgPSBKU09iamVjdENh
bGxBc0NvbnN0cnVjdG9yKGN0eCwgYXJyYXlDb25zdHJ1Y3RvciwgMCwgMCwgZXhjZXB0aW9uKTsK
LSAgICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRpb24pCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgSlNWYWx1ZVJlZiBwdXNoUHJvcGVydHkgPSBKU09i
amVjdEdldFByb3BlcnR5KGN0eCwgcmVzdWx0LCBqc1N0cmluZ1JlZigicHVzaCIpLmdldCgpLCBl
eGNlcHRpb24pOwotICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBKU09iamVjdFJlZiBwdXNoRnVu
Y3Rpb24gPSBKU1ZhbHVlVG9PYmplY3QoY3R4LCBwdXNoUHJvcGVydHksIGV4Y2VwdGlvbik7Ci0g
ICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY3R4KTsKLQotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VP
ZkNvbnRlbnRzKG5vZGUpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGRvIHsK
LSAgICAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KHNlYXJjaFJh
bmdlLmdldCgpLCB0YXJnZXQsIHRydWUsIGZhbHNlKSk7Ci0gICAgICAgIGlmIChyZXN1bHRSYW5n
ZS0+Y29sbGFwc2VkKGVjKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEEgbm9u
LWNvbGxhcHNlZCByZXN1bHQgcmFuZ2UgY2FuIGluIHNvbWUgZnVua3kgd2hpdGVzcGFjZSBjYXNl
cyBzdGlsbCBub3QKLSAgICAgICAgLy8gYWR2YW5jZSB0aGUgcmFuZ2UncyBzdGFydCBwb3NpdGlv
biAoNDUwOTMyOCkuIEJyZWFrIHRvIGF2b2lkIGluZmluaXRlIGxvb3AuCi0gICAgICAgIFZpc2li
bGVQb3NpdGlvbiBuZXdTdGFydCA9IGVuZFZpc2libGVQb3NpdGlvbihyZXN1bHRSYW5nZS5nZXQo
KSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIGlmIChuZXdTdGFydCA9PSBzdGFydFZpc2libGVQb3Np
dGlvbihzZWFyY2hSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpCi0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICAgICAgSlNWYWx1ZVJlZiBh
cmcwID0gdG9SZWYodG9KUyh0b0pTKGN0eCksIHJlc3VsdFJhbmdlLmdldCgpKSk7Ci0gICAgICAg
IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY3R4LCBwdXNoRnVuY3Rpb24sIHJlc3VsdCwgMSwgJmFy
ZzAsIGV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgICAgIHNl
dFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBuZXdTdGFydCk7Ci0gICAgfSB3aGlsZSAodHJ1ZSk7
Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotc3RhdGlj
IEpTVmFsdWVSZWYgZGF0YWJhc2VUYWJsZU5hbWVzKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmIC8qZnVuY3Rpb24qLywgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKLXsKLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRf
Y2FzdDxJbnNwZWN0b3JDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKLSAgICBpZiAoIWNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjdHgpOwotCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIEpTUXVhcmFudGluZWRPYmplY3RXcmFw
cGVyKiB3cmFwcGVyID0gSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmFzV3JhcHBlcih0b0pT
KGFyZ3VtZW50c1swXSkpOwotICAgIGlmICghd3JhcHBlcikKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSB0b0RhdGFi
YXNlKHdyYXBwZXItPnVud3JhcHBlZE9iamVjdCgpKTsKLSAgICBpZiAoIWRhdGFiYXNlKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIEpTT2JqZWN0UmVm
IGdsb2JhbCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjdHgpOwotCi0gICAgSlNWYWx1ZVJl
ZiBhcnJheVByb3BlcnR5ID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjdHgsIGdsb2JhbCwganNTdHJp
bmdSZWYoIkFycmF5IikuZ2V0KCksIGV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbiAmJiAq
ZXhjZXB0aW9uKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQot
ICAgIEpTT2JqZWN0UmVmIGFycmF5Q29uc3RydWN0b3IgPSBKU1ZhbHVlVG9PYmplY3QoY3R4LCBh
cnJheVByb3BlcnR5LCBleGNlcHRpb24pOwotICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlv
bikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBKU09i
amVjdFJlZiByZXN1bHQgPSBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yKGN0eCwgYXJyYXlDb25z
dHJ1Y3RvciwgMCwgMCwgZXhjZXB0aW9uKTsKLSAgICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRp
b24pCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgSlNW
YWx1ZVJlZiBwdXNoUHJvcGVydHkgPSBKU09iamVjdEdldFByb3BlcnR5KGN0eCwgcmVzdWx0LCBq
c1N0cmluZ1JlZigicHVzaCIpLmdldCgpLCBleGNlcHRpb24pOwotICAgIGlmIChleGNlcHRpb24g
JiYgKmV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7
Ci0KLSAgICBKU09iamVjdFJlZiBwdXNoRnVuY3Rpb24gPSBKU1ZhbHVlVG9PYmplY3QoY3R4LCBw
dXNoUHJvcGVydHksIGV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9u
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIFZlY3Rv
cjxTdHJpbmc+IHRhYmxlTmFtZXMgPSBkYXRhYmFzZS0+dGFibGVOYW1lcygpOwotICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHRhYmxlTmFtZXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBTdHJpbmcgdGFibGVOYW1lID0gdGFibGVOYW1l
c1tpXTsKLSAgICAgICAgSlNWYWx1ZVJlZiB0YWJsZU5hbWVWYWx1ZSA9IEpTVmFsdWVNYWtlU3Ry
aW5nKGN0eCwganNTdHJpbmdSZWYodGFibGVOYW1lKS5nZXQoKSk7Ci0KLSAgICAgICAgSlNWYWx1
ZVJlZiBwdXNoQXJndW1lbnRzW10gPSB7IHRhYmxlTmFtZVZhbHVlIH07Ci0gICAgICAgIEpTT2Jq
ZWN0Q2FsbEFzRnVuY3Rpb24oY3R4LCBwdXNoRnVuY3Rpb24sIHJlc3VsdCwgMSwgcHVzaEFyZ3Vt
ZW50cywgZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgSlNWYWx1ZVJlZiBpbnNwZWN0
ZWRXaW5kb3coSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgLypmdW5jdGlvbiovLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgLyphcmd1bWVudENvdW50Ki8sIGNvbnN0IEpTVmFs
dWVSZWZbXSAvKmFyZ3VtZW50c1tdKi8sIEpTVmFsdWVSZWYqIC8qZXhjZXB0aW9uKi8pCi17Ci0g
ICAgSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SW5z
cGVjdG9yQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAg
aWYgKCFjb250cm9sbGVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4
KTsKLQotICAgIEpTRE9NV2luZG93KiBpbnNwZWN0ZWRXaW5kb3cgPSB0b0pTRE9NV2luZG93KGNv
bnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCkpOwotICAgIEpTTG9jayBsb2Nr
KGZhbHNlKTsKLSAgICByZXR1cm4gdG9SZWYoSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFw
KGluc3BlY3RlZFdpbmRvdy0+Z2xvYmFsRXhlYygpLCBpbnNwZWN0ZWRXaW5kb3cpKTsKLX0KLQot
c3RhdGljIEpTVmFsdWVSZWYgc2V0dGluZyhKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiAv
KmZ1bmN0aW9uKi8sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCAvKmFyZ3VtZW50Q291
bnQqLywgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQotewotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9j
YXN0PEluc3BlY3RvckNvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwotICAgIGlmICghY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGN0eCk7Ci0KLSAgICBKU1ZhbHVlUmVmIGtleVZhbHVlID0gYXJndW1lbnRzWzBdOwotICAg
IGlmICghSlNWYWx1ZUlzU3RyaW5nKGN0eCwga2V5VmFsdWUpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6
OlNldHRpbmcmIHNldHRpbmcgPSBjb250cm9sbGVyLT5zZXR0aW5nKHRvU3RyaW5nKGN0eCwga2V5
VmFsdWUsIGV4Y2VwdGlvbikpOwotCi0gICAgc3dpdGNoIChzZXR0aW5nLnR5cGUoKSkgewotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6
Ok5vVHlwZToKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwot
ICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6OlN0cmluZ1R5cGU6Ci0g
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY3R4LCBqc1N0cmluZ1JlZihzZXR0
aW5nLnN0cmluZygpKS5nZXQoKSk7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6
U2V0dGluZzo6RG91YmxlVHlwZToKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJl
cihjdHgsIHNldHRpbmcuZG91YmxlVmFsdWUoKSk7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6U2V0dGluZzo6SW50ZWdlclR5cGU6Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VOdW1iZXIoY3R4LCBzZXR0aW5nLmludGVnZXJWYWx1ZSgpKTsKLSAgICAgICAgY2FzZSBJ
bnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpCb29sZWFuVHlwZToKLSAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY3R4LCBzZXR0aW5nLmJvb2xlYW5WYWx1ZSgpKTsKLSAg
ICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdWZWN0b3JUeXBl
OiB7Ci0gICAgICAgICAgICBWZWN0b3I8SlNWYWx1ZVJlZj4gc3RyaW5nVmFsdWVzOwotICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0cmluZ3MgPSBzZXR0aW5nLnN0cmluZ1ZlY3Rv
cigpOwotICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5ncy5zaXplKCk7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAg
ICAgICAgICAgICAgc3RyaW5nVmFsdWVzLmFwcGVuZChKU1ZhbHVlTWFrZVN0cmluZyhjdHgsIGpz
U3RyaW5nUmVmKHN0cmluZ3NbaV0pLmdldCgpKSk7Ci0KLSAgICAgICAgICAgIEpTT2JqZWN0UmVm
IHN0cmluZ3NBcnJheSA9IEpTT2JqZWN0TWFrZUFycmF5KGN0eCwgc3RyaW5nVmFsdWVzLnNpemUo
KSwgc3RyaW5nVmFsdWVzLmRhdGEoKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAgIGlmIChleGNl
cHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY3R4KTsKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmdzQXJyYXk7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFNldHRpbmcoSlNDb250ZXh0UmVm
IGN0eCwgSlNPYmplY3RSZWYgLypmdW5jdGlvbiovLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgLyphcmd1bWVudENvdW50Ki8sIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9s
bGVyID0gcmVpbnRlcnByZXRfY2FzdDxJbnNwZWN0b3JDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBpZiAoIWNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgSlNWYWx1ZVJlZiBrZXlWYWx1ZSA9
IGFyZ3VtZW50c1swXTsKLSAgICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjdHgsIGtleVZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBJbnNwZWN0
b3JDb250cm9sbGVyOjpTZXR0aW5nIHNldHRpbmc7Ci0KLSAgICBKU1ZhbHVlUmVmIHZhbHVlID0g
YXJndW1lbnRzWzFdOwotICAgIHN3aXRjaCAoSlNWYWx1ZUdldFR5cGUoY3R4LCB2YWx1ZSkpIHsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgY2FzZSBrSlNUeXBlVW5kZWZpbmVkOgotICAgICAg
ICBjYXNlIGtKU1R5cGVOdWxsOgotICAgICAgICAgICAgLy8gRG8gbm90aGluZy4gVGhlIHNldHRp
bmcgaXMgYWxyZWFkeSBOb1R5cGUuCi0gICAgICAgICAgICBBU1NFUlQoc2V0dGluZy50eXBlKCkg
PT0gSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6Tm9UeXBlKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIGtKU1R5cGVTdHJpbmc6Ci0gICAgICAgICAgICBzZXR0aW5nLnNl
dCh0b1N0cmluZyhjdHgsIHZhbHVlLCBleGNlcHRpb24pKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIGtKU1R5cGVOdW1iZXI6Ci0gICAgICAgICAgICBzZXR0aW5nLnNldChKU1Zh
bHVlVG9OdW1iZXIoY3R4LCB2YWx1ZSwgZXhjZXB0aW9uKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBrSlNUeXBlQm9vbGVhbjoKLSAgICAgICAgICAgIHNldHRpbmcuc2V0KEpT
VmFsdWVUb0Jvb2xlYW4oY3R4LCB2YWx1ZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2Uga0pTVHlwZU9iamVjdDogewotICAgICAgICAgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0g
SlNWYWx1ZVRvT2JqZWN0KGN0eCwgdmFsdWUsIDApOwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBs
ZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY3R4LCBvYmplY3QsIGpzU3RyaW5nUmVm
KCJsZW5ndGgiKS5nZXQoKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAgIGlmIChleGNlcHRpb24g
JiYgKmV4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY3R4KTsKLQotICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gc3RyaW5nczsKLSAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGxlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1ZhbHVl
VG9OdW1iZXIoY3R4LCBsZW5ndGhWYWx1ZSwgMCkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZiBp
dGVtVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjdHgsIG9iamVjdCwgaSwgZXhj
ZXB0aW9uKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRpb24pCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotICAg
ICAgICAgICAgICAgIHN0cmluZ3MuYXBwZW5kKHRvU3RyaW5nKGN0eCwgaXRlbVZhbHVlLCBleGNl
cHRpb24pKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRpb24pCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBzZXR0aW5nLnNldChzdHJpbmdzKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhj
ZXB0aW9uKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAg
IGNvbnRyb2xsZXItPnNldFNldHRpbmcodG9TdHJpbmcoY3R4LCBrZXlWYWx1ZSwgZXhjZXB0aW9u
KSwgc2V0dGluZyk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLX0K
LQotc3RhdGljIEpTVmFsdWVSZWYgbG9jYWxpemVkU3RyaW5ncyhKU0NvbnRleHRSZWYgY3R4LCBK
U09iamVjdFJlZiAvKmZ1bmN0aW9uKi8sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCAv
KmFyZ3VtZW50Q291bnQqLywgY29uc3QgSlNWYWx1ZVJlZltdIC8qYXJndW1lbnRzW10qLywgSlNW
YWx1ZVJlZiogLypleGNlcHRpb24qLykKLXsKLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBjb250
cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxJbnNwZWN0b3JDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBpZiAoIWNvbnRyb2xsZXIpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgU3RyaW5nIHVybCA9IGNvbnRy
b2xsZXItPmxvY2FsaXplZFN0cmluZ3NVUkwoKTsKLSAgICBpZiAodXJsLmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdWxsKGN0eCk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1h
a2VTdHJpbmcoY3R4LCBqc1N0cmluZ1JlZih1cmwpLmdldCgpKTsKLX0KLQotc3RhdGljIEpTVmFs
dWVSZWYgaGlkZGVuUGFuZWxzKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIC8qZnVuY3Rp
b24qLywgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IC8qYXJndW1lbnRDb3VudCovLCBj
b25zdCBKU1ZhbHVlUmVmW10gLyphcmd1bWVudHNbXSovLCBKU1ZhbHVlUmVmKiAvKmV4Y2VwdGlv
biovKQotewotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJl
dF9jYXN0PEluc3BlY3RvckNvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwotICAgIGlmICghY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGN0eCk7Ci0KLSAgICBTdHJpbmcgaGlkZGVuUGFuZWxzID0gY29udHJvbGxlci0+aGlk
ZGVuUGFuZWxzKCk7Ci0gICAgaWYgKGhpZGRlblBhbmVscy5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlTnVsbChjdHgpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5n
KGN0eCwganNTdHJpbmdSZWYoaGlkZGVuUGFuZWxzKS5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBKU1Zh
bHVlUmVmIHBsYXRmb3JtKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIC8qZnVuY3Rpb24q
LywgSlNPYmplY3RSZWYgLyp0aGlzT2JqZWN0Ki8sIHNpemVfdCAvKmFyZ3VtZW50Q291bnQqLywg
Y29uc3QgSlNWYWx1ZVJlZltdIC8qYXJndW1lbnRzW10qLywgSlNWYWx1ZVJlZiogLypleGNlcHRp
b24qLykKK2NvbnN0IFN0cmluZyYgSW5zcGVjdG9yQ29udHJvbGxlcjo6cGxhdGZvcm0oKSBjb25z
dAogewogI2lmIFBMQVRGT1JNKE1BQykKICNpZmRlZiBCVUlMRElOR19PTl9USUdFUgpAQCAtOTcz
LDE4NCArMjI3LDkgQEAgc3RhdGljIEpTVmFsdWVSZWYgcGxhdGZvcm0oSlNDb250ZXh0UmVmIGN0
eCwgSlNPYmplY3RSZWYgLypmdW5jdGlvbiovLCBKU09iamVjdFIKICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgcGxhdGZvcm0sICgidW5rbm93biIpKTsKICNlbmRpZgogCi0g
ICAgSlNWYWx1ZVJlZiBwbGF0Zm9ybVZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcoY3R4LCBqc1N0
cmluZ1JlZihwbGF0Zm9ybSkuZ2V0KCkpOwotCi0gICAgcmV0dXJuIHBsYXRmb3JtVmFsdWU7Cisg
ICAgcmV0dXJuIHBsYXRmb3JtOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBtb3ZlQnlVbnJlc3Ry
aWN0ZWQoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgLypmdW5jdGlvbiovLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIEluc3BlY3RvckNvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PEluc3BlY3RvckNvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGlmICghY29udHJvbGxlcikK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IDIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgp
OwotCi0gICAgZG91YmxlIHggPSBKU1ZhbHVlVG9OdW1iZXIoY3R4LCBhcmd1bWVudHNbMF0sIGV4
Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIGRvdWJsZSB5ID0gSlNWYWx1ZVRv
TnVtYmVyKGN0eCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pOwotICAgIGlmIChleGNlcHRpb24g
JiYgKmV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7
Ci0KLSAgICBjb250cm9sbGVyLT5tb3ZlV2luZG93QnkobmFycm93UHJlY2lzaW9uVG9GbG9hdCh4
KSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdCh5KSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY3R4KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgLypmdW5jdGlvbiovLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIEluc3BlY3RvckNvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PEluc3BlY3RvckNvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGlmICghY29udHJvbGxlcikK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgp
OwotCi0gICAgdW5zaWduZWQgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVU
b051bWJlcihjdHgsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgaWYgKGV4Y2VwdGlv
biAmJiAqZXhjZXB0aW9uKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4
KTsKLQotICAgIGNvbnRyb2xsZXItPnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCk7Ci0K
LSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLX0KLQotc3RhdGljIEpTVmFs
dWVSZWYgd3JhcENhbGxiYWNrKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIC8qZnVuY3Rp
b24qLywgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIC8qZXhjZXB0aW9uKi8pCi17Ci0g
ICAgSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SW5z
cGVjdG9yQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAg
aWYgKCFjb250cm9sbGVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4
KTsKLQotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgcmV0dXJu
IHRvUmVmKEpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyOjp3cmFwKHRvSlMoY3R4KSwgdG9KUyhh
cmd1bWVudHNbMF0pKSk7Ci19Ci0KLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLXN0
YXRpYyBKU1ZhbHVlUmVmIGN1cnJlbnRDYWxsRnJhbWUoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmpl
Y3RSZWYgLypmdW5jdGlvbiovLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgLyphcmd1
bWVudENvdW50Ki8sIGNvbnN0IEpTVmFsdWVSZWZbXSAvKmFyZ3VtZW50cyovLCBKU1ZhbHVlUmVm
KiAvKmV4Y2VwdGlvbiovKQotewotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSByZWludGVycHJldF9jYXN0PEluc3BlY3RvckNvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwotICAgIGlmICghY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBKYXZhU2NyaXB0Q2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBjb250cm9sbGVyLT5jdXJyZW50Q2FsbEZyYW1lKCk7Ci0gICAgaWYgKCFjYWxsRnJh
bWUgfHwgIWNhbGxGcmFtZS0+aXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VO
dWxsKGN0eCk7Ci0KLSAgICBFeGVjU3RhdGUqIGdsb2JhbEV4ZWMgPSBjYWxsRnJhbWUtPnNjb3Bl
Q2hhaW4oKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLQotICAgIEpTTG9jayBsb2Nr
KGZhbHNlKTsKLSAgICByZXR1cm4gdG9SZWYoSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFw
KGdsb2JhbEV4ZWMsIHRvSlModG9KUyhjdHgpLCBjYWxsRnJhbWUpKSk7Ci19Ci0KLXN0YXRpYyBK
U1ZhbHVlUmVmIHNldFBhdXNlT25FeGNlcHRpb25zKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmIC8qZnVuY3Rpb24qLywgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIC8qZXhjZXB0
aW9uKi8pCi17Ci0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8SW5zcGVjdG9yQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7Ci0gICAgaWYgKCFjb250cm9sbGVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY3R4KTsKLQotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBjb250cm9sbGVyLT5zZXRQYXVz
ZU9uRXhjZXB0aW9ucyhKU1ZhbHVlVG9Cb29sZWFuKGN0eCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLX0KLQotc3RhdGljIEpTVmFsdWVS
ZWYgYWRkQnJlYWtwb2ludChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiAvKmZ1bmN0aW9u
Ki8sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgSW5z
cGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SW5zcGVjdG9y
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgaWYgKCFj
b250cm9sbGVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQot
ICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGN0eCk7Ci0KLSAgICBkb3VibGUgc291cmNlSUQgPSBKU1ZhbHVlVG9OdW1iZXIoY3R4
LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0
aW9uKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIGRv
dWJsZSBsaW5lTnVtYmVyID0gSlNWYWx1ZVRvTnVtYmVyKGN0eCwgYXJndW1lbnRzWzFdLCBleGNl
cHRpb24pOwotICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBjb250cm9sbGVyLT5hZGRCcmVha3Bv
aW50KHN0YXRpY19jYXN0PGludD4oc291cmNlSUQpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGlu
ZU51bWJlcikpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci19Ci0K
LXN0YXRpYyBKU1ZhbHVlUmVmIHJlbW92ZUJyZWFrcG9pbnQoSlNDb250ZXh0UmVmIGN0eCwgSlNP
YmplY3RSZWYgLypmdW5jdGlvbiovLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQotewotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVy
cHJldF9jYXN0PEluc3BlY3RvckNvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwotICAgIGlmICghY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDIpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgZG91YmxlIHNvdXJjZUlEID0g
SlNWYWx1ZVRvTnVtYmVyKGN0eCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwotICAgIGlmIChl
eGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGN0eCk7Ci0KLSAgICBkb3VibGUgbGluZU51bWJlciA9IEpTVmFsdWVUb051bWJlcihjdHgs
IGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKTsKLSAgICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRp
b24pCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgY29u
dHJvbGxlci0+cmVtb3ZlQnJlYWtwb2ludChzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUlEKSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGxpbmVOdW1iZXIpKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjdHgpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBKU1ZhbHVlUmVmIHByb2ZpbGVz
KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIC8qZnVuY3Rpb24qLywgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IC8qYXJndW1lbnRDb3VudCovLCBjb25zdCBKU1ZhbHVlUmVmW10g
Lyphcmd1bWVudHMqLywgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIEluc3BlY3RvckNv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PEluc3BlY3RvckNvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGlmICghY29udHJvbGxl
cikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBKU0xv
Y2sgbG9jayhmYWxzZSk7Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFByb2ZpbGU+ID4mIHBy
b2ZpbGVzID0gY29udHJvbGxlci0+cHJvZmlsZXMoKTsKLQotICAgIEpTT2JqZWN0UmVmIGdsb2Jh
bCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjdHgpOwotCi0gICAgSlNWYWx1ZVJlZiBhcnJh
eVByb3BlcnR5ID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjdHgsIGdsb2JhbCwganNTdHJpbmdSZWYo
IkFycmF5IikuZ2V0KCksIGV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0
aW9uKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIEpT
T2JqZWN0UmVmIGFycmF5Q29uc3RydWN0b3IgPSBKU1ZhbHVlVG9PYmplY3QoY3R4LCBhcnJheVBy
b3BlcnR5LCBleGNlcHRpb24pOwotICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBKU09iamVjdFJl
ZiByZXN1bHQgPSBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yKGN0eCwgYXJyYXlDb25zdHJ1Y3Rv
ciwgMCwgMCwgZXhjZXB0aW9uKTsKLSAgICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRpb24pCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgSlNWYWx1ZVJl
ZiBwdXNoUHJvcGVydHkgPSBKU09iamVjdEdldFByb3BlcnR5KGN0eCwgcmVzdWx0LCBqc1N0cmlu
Z1JlZigicHVzaCIpLmdldCgpLCBleGNlcHRpb24pOwotICAgIGlmIChleGNlcHRpb24gJiYgKmV4
Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAg
ICBKU09iamVjdFJlZiBwdXNoRnVuY3Rpb24gPSBKU1ZhbHVlVG9PYmplY3QoY3R4LCBwdXNoUHJv
cGVydHksIGV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcHJvZmlsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZVJlZiBh
cmcwID0gdG9SZWYodG9KUyh0b0pTKGN0eCksIHByb2ZpbGVzW2ldLmdldCgpKSk7Ci0gICAgICAg
IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY3R4LCBwdXNoRnVuY3Rpb24sIHJlc3VsdCwgMSwgJmFy
ZzAsIGV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotICAgIH0KLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIEluc3BlY3RvckNvbnRyb2xsZXIgQ2xhc3MKLQogc3Rh
dGljIHVuc2lnbmVkIHNfaW5zcGVjdG9yQ29udHJvbGxlckNvdW50Owogc3RhdGljIEhhc2hNYXA8
U3RyaW5nLCBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nKj4qIHNfc2V0dGluZ0NhY2hlOwog
CkBAIC0xNTg1LDg0ICs2NjQsMTMgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aW5kb3dT
Y3JpcHRPYmplY3RBdmFpbGFibGUoKQogICAgIGlmICghbV9wYWdlIHx8ICFlbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fc2NyaXB0Q29udGV4dCA9IHRvUmVmKG1fcGFnZS0+bWFp
bkZyYW1lKCktPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKLQotICAg
IEpTT2JqZWN0UmVmIGdsb2JhbCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChtX3NjcmlwdENv
bnRleHQpOwotICAgIEFTU0VSVChnbG9iYWwpOwotCi0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rp
b24gc3RhdGljRnVuY3Rpb25zW10gPSB7Ci0gICAgICAgIC8vIFNJTVBMRV9JTlNQRUNUT1JfQ0FM
TEJBQ0sKLSAgICAgICAgeyAiaGlkZURPTU5vZGVIaWdobGlnaHQiLCBXZWJDb3JlOjpoaWRlRE9N
Tm9kZUhpZ2hsaWdodCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0gICAgICAgIHsgImxv
YWRlZCIsIFdlYkNvcmU6OmxvYWRlZCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0gICAg
ICAgIHsgIndpbmRvd1VubG9hZGluZyIsIFdlYkNvcmU6OnVubG9hZGluZywga0pTUHJvcGVydHlB
dHRyaWJ1dGVOb25lIH0sCi0gICAgICAgIHsgImF0dGFjaCIsIFdlYkNvcmU6OmF0dGFjaCwga0pT
UHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0gICAgICAgIHsgImRldGFjaCIsIFdlYkNvcmU6OmRl
dGFjaCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCi0gICAgICAgIHsgImVuYWJsZURlYnVnZ2VyIiwgV2ViQ29yZTo6ZW5hYmxlRGVi
dWdnZXIsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgICAgICB7ICJkaXNhYmxlRGVi
dWdnZXIiLCBXZWJDb3JlOjpkaXNhYmxlRGVidWdnZXIsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9u
ZSB9LAotICAgICAgICB7ICJwYXVzZUluRGVidWdnZXIiLCBXZWJDb3JlOjpwYXVzZUluRGVidWdn
ZXIsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgICAgICB7ICJyZXN1bWVEZWJ1Z2dl
ciIsIFdlYkNvcmU6OnJlc3VtZURlYnVnZ2VyLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwK
LSAgICAgICAgeyAic3RlcE92ZXJTdGF0ZW1lbnRJbkRlYnVnZ2VyIiwgV2ViQ29yZTo6c3RlcE92
ZXJTdGF0ZW1lbnRJbkRlYnVnZ2VyLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSAgICAg
ICAgeyAic3RlcEludG9TdGF0ZW1lbnRJbkRlYnVnZ2VyIiwgV2ViQ29yZTo6c3RlcEludG9TdGF0
ZW1lbnRJbkRlYnVnZ2VyLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSAgICAgICAgeyAi
c3RlcE91dE9mRnVuY3Rpb25JbkRlYnVnZ2VyIiwgV2ViQ29yZTo6c3RlcE91dE9mRnVuY3Rpb25J
bkRlYnVnZ2VyLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSNlbmRpZgotICAgICAgICB7
ICJjbG9zZVdpbmRvdyIsIFdlYkNvcmU6OmNsb3NlV2luZG93LCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZU5vbmUgfSwKLSAgICAgICAgeyAiY2xlYXJNZXNzYWdlcyIsIFdlYkNvcmU6OmNsZWFyTWVzc2Fn
ZXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgICAgICB7ICJzdGFydFByb2ZpbGlu
ZyIsIFdlYkNvcmU6OnN0YXJ0UHJvZmlsaW5nLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwK
LSAgICAgICAgeyAic3RvcFByb2ZpbGluZyIsIFdlYkNvcmU6OnN0b3BQcm9maWxpbmcsIGtKU1By
b3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgICAgICB7ICJlbmFibGVQcm9maWxlciIsIFdlYkNv
cmU6OmVuYWJsZVByb2ZpbGVyLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSAgICAgICAg
eyAiZGlzYWJsZVByb2ZpbGVyIiwgV2ViQ29yZTo6ZGlzYWJsZVByb2ZpbGVyLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZU5vbmUgfSwKLSAgICAgICAgeyAidG9nZ2xlTm9kZVNlYXJjaCIsIFdlYkNvcmU6
OnRvZ2dsZU5vZGVTZWFyY2gsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotCi0gICAgICAg
IC8vIEJPT0xfSU5TUEVDVE9SX0NBTExCQUNLCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCi0gICAgICAgIHsgImRlYnVnZ2VyRW5hYmxlZCIsIFdlYkNvcmU6OmRlYnVnZ2VyRW5hYmxl
ZCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0gICAgICAgIHsgInBhdXNlT25FeGNlcHRp
b25zIiwgV2ViQ29yZTo6cGF1c2VPbkV4Y2VwdGlvbnMsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9u
ZSB9LAotI2VuZGlmCi0gICAgICAgIHsgInByb2ZpbGVyRW5hYmxlZCIsIFdlYkNvcmU6OnByb2Zp
bGVyRW5hYmxlZCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0gICAgICAgIHsgImlzV2lu
ZG93VmlzaWJsZSIsIFdlYkNvcmU6OmlzV2luZG93VmlzaWJsZSwga0pTUHJvcGVydHlBdHRyaWJ1
dGVOb25lIH0sCi0gICAgICAgIHsgInNlYXJjaGluZ0Zvck5vZGUiLCBXZWJDb3JlOjpzZWFyY2hp
bmdGb3JOb2RlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLQotICAgICAgICAvLyBDdXN0
b20gY2FsbGJhY2tzCi0gICAgICAgIHsgImFkZFJlc291cmNlU291cmNlVG9GcmFtZSIsIFdlYkNv
cmU6OmFkZFJlc291cmNlU291cmNlVG9GcmFtZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0s
Ci0gICAgICAgIHsgImFkZFNvdXJjZVRvRnJhbWUiLCBXZWJDb3JlOjphZGRTb3VyY2VUb0ZyYW1l
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSAgICAgICAgeyAiZ2V0UmVzb3VyY2VEb2N1
bWVudE5vZGUiLCBXZWJDb3JlOjpnZXRSZXNvdXJjZURvY3VtZW50Tm9kZSwga0pTUHJvcGVydHlB
dHRyaWJ1dGVOb25lIH0sCi0gICAgICAgIHsgImhpZ2hsaWdodERPTU5vZGUiLCBXZWJDb3JlOjpo
aWdobGlnaHRET01Ob2RlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSAgICAgICAgeyAi
c2VhcmNoIiwgV2ViQ29yZTo6c2VhcmNoLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSNp
ZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgICAgIHsgImRhdGFiYXNlVGFibGVOYW1lcyIsIFdlYkNv
cmU6OmRhdGFiYXNlVGFibGVOYW1lcywga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0jZW5k
aWYKLSAgICAgICAgeyAic2V0dGluZyIsIFdlYkNvcmU6OnNldHRpbmcsIGtKU1Byb3BlcnR5QXR0
cmlidXRlTm9uZSB9LAotICAgICAgICB7ICJzZXRTZXR0aW5nIiwgV2ViQ29yZTo6c2V0U2V0dGlu
Zywga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0gICAgICAgIHsgImluc3BlY3RlZFdpbmRv
dyIsIFdlYkNvcmU6Omluc3BlY3RlZFdpbmRvdywga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0s
Ci0gICAgICAgIHsgImxvY2FsaXplZFN0cmluZ3NVUkwiLCBXZWJDb3JlOjpsb2NhbGl6ZWRTdHJp
bmdzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSAgICAgICAgeyAiaGlkZGVuUGFuZWxz
IiwgV2ViQ29yZTo6aGlkZGVuUGFuZWxzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSAg
ICAgICAgeyAicGxhdGZvcm0iLCBXZWJDb3JlOjpwbGF0Zm9ybSwga0pTUHJvcGVydHlBdHRyaWJ1
dGVOb25lIH0sCi0gICAgICAgIHsgIm1vdmVCeVVucmVzdHJpY3RlZCIsIFdlYkNvcmU6Om1vdmVC
eVVucmVzdHJpY3RlZCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0gICAgICAgIHsgInNl
dEF0dGFjaGVkV2luZG93SGVpZ2h0IiwgV2ViQ29yZTo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQs
IGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgICAgICB7ICJ3cmFwQ2FsbGJhY2siLCBX
ZWJDb3JlOjp3cmFwQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgICAgICB7ICJjdXJyZW50Q2FsbEZyYW1lIiwg
V2ViQ29yZTo6Y3VycmVudENhbGxGcmFtZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0g
ICAgICAgIHsgInNldFBhdXNlT25FeGNlcHRpb25zIiwgV2ViQ29yZTo6c2V0UGF1c2VPbkV4Y2Vw
dGlvbnMsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgICAgICB7ICJhZGRCcmVha3Bv
aW50IiwgV2ViQ29yZTo6YWRkQnJlYWtwb2ludCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0s
Ci0gICAgICAgIHsgInJlbW92ZUJyZWFrcG9pbnQiLCBXZWJDb3JlOjpyZW1vdmVCcmVha3BvaW50
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSNlbmRpZgotICAgICAgICB7ICJwcm9maWxl
cyIsIFdlYkNvcmU6OnByb2ZpbGVzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSAgICAg
ICAgeyAwLCAwLCAwIH0KLSAgICB9OwotCi0gICAgSlNDbGFzc0RlZmluaXRpb24gaW5zcGVjdG9y
Q29udHJvbGxlckRlZmluaXRpb24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9u
ZSwgIkluc3BlY3RvckNvbnRyb2xsZXIiLCAwLCAwLCBzdGF0aWNGdW5jdGlvbnMsCi0gICAgICAg
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKLSAgICB9OwotCi0gICAgSlNDbGFzc1Jl
ZiBjb250cm9sbGVyQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZpbnNwZWN0b3JDb250cm9sbGVyRGVm
aW5pdGlvbik7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXJDbGFzcyk7Ci0KLSAgICBtX2NvbnRyb2xs
ZXJTY3JpcHRPYmplY3QgPSBKU09iamVjdE1ha2UobV9zY3JpcHRDb250ZXh0LCBjb250cm9sbGVy
Q2xhc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRoaXMpKTsKLSAgICBBU1NFUlQobV9jb250
cm9sbGVyU2NyaXB0T2JqZWN0KTsKLQotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9zY3JpcHRD
b250ZXh0LCBnbG9iYWwsIGpzU3RyaW5nUmVmKCJJbnNwZWN0b3JDb250cm9sbGVyIikuZ2V0KCks
IG1fY29udHJvbGxlclNjcmlwdE9iamVjdCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCAwKTsK
KyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgY2xlYW5lZCB1cC4gQVBJIE1peC11cC4KKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+c2Ny
aXB0KCktPmdsb2JhbE9iamVjdCgpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpOworICAgIG1fc2NyaXB0Q29udGV4dCA9IHRvUmVmKGV4ZWMpOworICAg
IEpTVmFsdWVQdHIganNJbnNwZWN0b3IgPSB0b0pTKGV4ZWMsIHRoaXMpOworICAgIG1fY29udHJv
bGxlclNjcmlwdE9iamVjdCA9IHRvUmVmKGFzT2JqZWN0KGpzSW5zcGVjdG9yKSk7CisgICAgZ2xv
YmFsT2JqZWN0LT5wdXREaXJlY3QoSWRlbnRpZmllcihleGVjLCAiSW5zcGVjdG9yQ29udHJvbGxl
ciIpLCBqc0luc3BlY3Rvcik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0
T2JqZWN0UmVhZHkoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4
IDAxMTkwODYuLmEyNWYwZWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRS
ZWYuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
ICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKQEAgLTY2LDE0ICs2NywxNCBAQCBjbGFz
cyBSZXNvdXJjZUVycm9yOwogY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwogY2xhc3MgU2hhcmVkQnVm
ZmVyOwogCi1zdHJ1Y3QgQ29uc29sZU1lc3NhZ2U7Ci1zdHJ1Y3QgSW5zcGVjdG9yRGF0YWJhc2VS
ZXNvdXJjZTsKLXN0cnVjdCBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U7Ci1zdHJ1Y3QgSW5z
cGVjdG9yUmVzb3VyY2U7CitjbGFzcyBDb25zb2xlTWVzc2FnZTsKK2NsYXNzIEluc3BlY3RvckRh
dGFiYXNlUmVzb3VyY2U7CitjbGFzcyBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U7CitjbGFz
cyBJbnNwZWN0b3JSZXNvdXJjZTsKIAotY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcgorY2xhc3Mg
SW5zcGVjdG9yQ29udHJvbGxlciA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckNvbnRyb2xs
ZXI+CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIDogSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCBKYXZhU2NyaXB0RGVidWdMaXN0ZW5lcgogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogcHVibGljOgpAQCAtMTY1LDYgKzE2
Niw3IEBAIHB1YmxpYzoKICAgICBib29sIHdpbmRvd1Zpc2libGUoKTsKICAgICB2b2lkIHNldFdp
bmRvd1Zpc2libGUoYm9vbCB2aXNpYmxlID0gdHJ1ZSwgYm9vbCBhdHRhY2hlZCA9IGZhbHNlKTsK
IAorICAgIGJvb2wgYWRkU291cmNlVG9GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25z
dCBTdHJpbmcmIHNvdXJjZSwgTm9kZSopOwogICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShN
ZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIFNjcmlwdENhbGxTdGFjayopOwogICAgIHZvaWQg
YWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCk7CiAgICAgdm9pZCBjbGVhckNvbnNvbGVNZXNzYWdlcygpOwpAQCAtMjUzLDYgKzI1NSw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0R3JvdXAoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIFNjcmlw
dENhbGxTdGFjayogY2FsbEZyYW1lKTsKICAgICB2b2lkIGVuZEdyb3VwKE1lc3NhZ2VTb3VyY2Ug
c291cmNlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAK
KyAgICBjb25zdCBTdHJpbmcmIHBsYXRmb3JtKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgdm9p
ZCBmb2N1c05vZGUoKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmlk
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGMxZDkyCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5pZGwKQEAgLTAs
MCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWF0dCBMaWxlayA8d2Vi
a2l0QG1hdHRsaWxlay5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCittb2R1bGUgY29yZSB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgR2Vu
ZXJhdGVDb25zdHJ1Y3RvcgorICAgIF0gSW5zcGVjdG9yQ29udHJvbGxlciB7CisgICAgICAgIFtJ
bXBsZW1lbnRhdGlvbkZ1bmN0aW9uPWhpZGVIaWdobGlnaHRdIHZvaWQgaGlkZURPTU5vZGVIaWdo
bGlnaHQoKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBoaWdobGlnaHRET01Ob2RlKGluIE5vZGUg
bm9kZSk7CisgICAgICAgIFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPXNjcmlwdE9iamVjdFJlYWR5
XSB2b2lkIGxvYWRlZCgpOworICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1jbG9zZV0g
dm9pZCB3aW5kb3dVbmxvYWRpbmcoKTsKKyAgICAgICAgW0ltcGxlbWVudGF0aW9uRnVuY3Rpb249
YXR0YWNoV2luZG93XSB2b2lkIGF0dGFjaCgpOworICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5j
dGlvbj1kZXRhY2hXaW5kb3ddIHZvaWQgZGV0YWNoKCk7CisvLyBkZWJ1Z2dlcgorICAgICAgICB2
b2lkIGVuYWJsZURlYnVnZ2VyKCk7CisgICAgICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKCk7Cisg
ICAgICAgIHZvaWQgcGF1c2VJbkRlYnVnZ2VyKCk7CisgICAgICAgIHZvaWQgcmVzdW1lRGVidWdn
ZXIoKTsKKyAgICAgICAgdm9pZCBzdGVwT3ZlclN0YXRlbWVudEluRGVidWdnZXIoKTsKKyAgICAg
ICAgdm9pZCBzdGVwSW50b1N0YXRlbWVudEluRGVidWdnZXIoKTsKKyAgICAgICAgdm9pZCBzdGVw
T3V0T2ZGdW5jdGlvbkluRGVidWdnZXIoKTsKKworICAgICAgICB2b2lkIGNsb3NlV2luZG93KCk7
CisgICAgICAgIFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPWNsZWFyQ29uc29sZU1lc3NhZ2VzXSB2
b2lkIGNsZWFyTWVzc2FnZXMoKTsKKyAgICAgICAgW0ltcGxlbWVudGF0aW9uRnVuY3Rpb249c3Rh
cnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nXSB2b2lkIHN0YXJ0UHJvZmlsaW5nKCk7CisgICAgICAg
IFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPXN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nXSB2b2lk
IHN0b3BQcm9maWxpbmcoKTsKKyAgICAgICAgdm9pZCBlbmFibGVQcm9maWxlcigpOworICAgICAg
ICB2b2lkIGRpc2FibGVQcm9maWxlcigpOworICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlv
bj10b2dnbGVTZWFyY2hGb3JOb2RlSW5QYWdlXSB2b2lkIHRvZ2dsZU5vZGVTZWFyY2goKTsKKy8v
IGRlYnVnZ2VyCisgICAgICAgIGJvb2xlYW4gZGVidWdnZXJFbmFibGVkKCk7CisgICAgICAgIGJv
b2xlYW4gcGF1c2VPbkV4Y2VwdGlvbnMoKTsKKworICAgICAgICBib29sZWFuIHByb2ZpbGVyRW5h
YmxlZCgpOworICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj13aW5kb3dWaXNpYmxlXSBi
b29sZWFuIGlzV2luZG93VmlzaWJsZSgpOworICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlv
bj1zZWFyY2hpbmdGb3JOb2RlSW5QYWdlXSBib29sZWFuIHNlYXJjaGluZ0Zvck5vZGUoKTsKKwor
ICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZFJlc291cmNlU291cmNlVG9GcmFtZShpbiB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGluIE5vZGUgZnJhbWUpOworICAgICAgICBbQ3VzdG9tXSB2b2lk
IGFkZFNvdXJjZVRvRnJhbWUoaW4gRE9NU3RyaW5nIG1pbWVUeXBlLCBpbiBET01TdHJpbmcgc291
cmNlVmFsdWUsIGluIE5vZGUgZnJhbWUpOworICAgICAgICBbQ3VzdG9tXSBOb2RlIGdldFJlc291
cmNlRG9jdW1lbnROb2RlKGluIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAgICAgIFtD
dXN0b21dIHZvaWQgc2VhcmNoKGluIE5vZGUgbm9kZSwgaW4gRE9NU3RyaW5nIHF1ZXJ5KTsKKy8v
IGRhdGFiYXNlCisgICAgICAgIFtDdXN0b21dIERPTU9iamVjdCBkYXRhYmFzZU5hbWVUYWJsZXMo
aW4gRGF0YWJhc2UgZGF0YWJhc2UpOworCisgICAgICAgIFtDdXN0b21dIERPTU9iamVjdCBzZXR0
aW5nKGluIERPTVN0cmluZyBrZXkpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHNldFNldHRpbmco
aW4gRE9NU3RyaW5nIGtleSwgaW4gRE9NT2JqZWN0ICB2YWx1ZSk7CisgICAgICAgIFtDdXN0b21d
IERPTVdpbmRvdyBpbnNwZWN0ZWRXaW5kb3coKTsKKyAgICAgICAgRE9NU3RyaW5nIGxvY2FsaXpl
ZFN0cmluZ3NVUkwoKTsKKyAgICAgICAgRE9NU3RyaW5nIGhpZGRlblBhbmVscygpOworICAgICAg
ICBET01TdHJpbmcgcGxhdGZvcm0oKTsKKyAgICAgICAgW0ltcGxlbWVudGF0aW9uRnVuY3Rpb249
bW92ZVdpbmRvd0J5XSB2b2lkIG1vdmVCeVVucmVzdHJpY3RlZChpbiBmbG9hdCB4LCBpbiBmbG9h
dCB5KTsKKyAgICAgICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodChpbiB1bnNpZ25lZCBs
b25nIGhlaWdodCk7CisgICAgICAgIFtDdXN0b21dIERPTU9iamVjdCB3cmFwQ2FsbGJhY2soaW4g
RE9NT2JqZWN0IGNhbGxiYWNrKTsKKy8vIGRlYnVnZ2VyCisgICAgICAgIFtDdXN0b21dIERPTU9i
amVjdCBjdXJyZW50Q2FsbEZyYW1lKCk7CisgICAgICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlv
bnMoaW4gYm9vbGVhbiBwYXVzZU9uRXhjZXB0aW9ucyk7CisgICAgICAgIHZvaWQgYWRkQnJlYWtw
b2ludChpbiB1bnNpZ25lZCBsb25nIHNvdXJjZUlELCBpbiB1bnNpZ25lZCBsb25nIGxpbmVOdW1i
ZXIpOworICAgICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoaW4gdW5zaWduZWQgbG9uZyBzb3Vy
Y2VJRCwgaW4gdW5zaWduZWQgbG9uZyBsaW5lTnVtYmVyKTsKKworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgW0N1c3RvbUdldHRlcl0gQXJyYXkgcHJvZmlsZXM7CisgICAgIH07CisgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUzOTBhMgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAKQEAg
LTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWF0dCBMaWxlayA8
d2Via2l0QG1hdHRsaWxlay5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKERPTV9TVE9S
QUdFKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgiCisKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlN0b3JhZ2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U6
Okluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZShTdG9yYWdlKiBkb21TdG9yYWdlLCBib29sIGlz
TG9jYWxTdG9yYWdlLCBGcmFtZSogZnJhbWUpCisgICAgOiBkb21TdG9yYWdlKGRvbVN0b3JhZ2Up
CisgICAgLCBpc0xvY2FsU3RvcmFnZShpc0xvY2FsU3RvcmFnZSkKKyAgICAsIGZyYW1lKGZyYW1l
KQorICAgICwgc2NyaXB0Q29udGV4dCgwKQorICAgICwgc2NyaXB0T2JqZWN0KDApCit7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOjpzZXRTY3JpcHRPYmplY3QoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG5ld1NjcmlwdE9iamVjdCkKK3sKKyAgICBpZiAo
c2NyaXB0Q29udGV4dCAmJiBzY3JpcHRPYmplY3QpCisgICAgICAgIEpTVmFsdWVVbnByb3RlY3Qo
c2NyaXB0Q29udGV4dCwgc2NyaXB0T2JqZWN0KTsKKworICAgIHNjcmlwdE9iamVjdCA9IG5ld1Nj
cmlwdE9iamVjdDsKKyAgICBzY3JpcHRDb250ZXh0ID0gY29udGV4dDsKKworICAgIEFTU0VSVCgo
Y29udGV4dCAmJiBuZXdTY3JpcHRPYmplY3QpIHx8ICghY29udGV4dCAmJiAhbmV3U2NyaXB0T2Jq
ZWN0KSk7CisgICAgaWYgKGNvbnRleHQgJiYgbmV3U2NyaXB0T2JqZWN0KQorICAgICAgICBKU1Zh
bHVlUHJvdGVjdChjb250ZXh0LCBuZXdTY3JpcHRPYmplY3QpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NU3RvcmFnZVJlc291cmNlLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01T
dG9yYWdlUmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjk1
OGE4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3Rv
cmFnZVJlc291cmNlLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggTWF0dCBMaWxlayA8d2Via2l0QG1hdHRsaWxlay5jb20+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvckRPTVN0
b3JhZ2VSZXNvdXJjZV9oCisjZGVmaW5lIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZV9oCisK
KyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworICAgIGNsYXNzIFN0b3JhZ2U7CisgICAgY2xhc3MgRnJhbWU7CisKKyAgICBjbGFz
cyBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2U+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gY3JlYXRlKFN0b3JhZ2UqIGRvbVN0
b3JhZ2UsIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1lKiBmcmFtZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2Uo
ZG9tU3RvcmFnZSwgaXNMb2NhbFN0b3JhZ2UsIGZyYW1lKSk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIHNldFNjcmlwdE9iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmKTsKKworICAg
ICAgICBSZWZQdHI8U3RvcmFnZT4gZG9tU3RvcmFnZTsKKyAgICAgICAgYm9vbCBpc0xvY2FsU3Rv
cmFnZTsKKyAgICAgICAgUmVmUHRyPEZyYW1lPiBmcmFtZTsKKyAgICAgICAgSlNDb250ZXh0UmVm
IHNjcmlwdENvbnRleHQ7CisgICAgICAgIEpTT2JqZWN0UmVmIHNjcmlwdE9iamVjdDsKKworICAg
IHByaXZhdGU6CisgICAgICAgIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZShTdG9yYWdlKiwg
Ym9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqKTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3Vy
Y2UuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFmYTJjOQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwCkBA
IC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hdHQgTGlsZWsg
PHdlYmtpdEBtYXR0bGlsZWsuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJMRShEQVRBQkFT
RSkKKworI2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCIKKworI2luY2x1ZGUg
IkRhdGFiYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIEluc3BlY3RvckRhdGFi
YXNlUmVzb3VyY2U6Okluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UoRGF0YWJhc2UqIGRhdGFiYXNl
LCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZlcnNpb24pCisgICAgICAgIDogZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwgZG9tYWlu
KGRvbWFpbikKKyAgICAgICAgLCBuYW1lKG5hbWUpCisgICAgICAgICwgdmVyc2lvbih2ZXJzaW9u
KQorICAgICAgICAsIHNjcmlwdENvbnRleHQoMCkKKyAgICAgICAgLCBzY3JpcHRPYmplY3QoMCkK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjpzZXRT
Y3JpcHRPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG5ld1NjcmlwdE9i
amVjdCkKKyAgICB7CisgICAgICAgIGlmIChzY3JpcHRDb250ZXh0ICYmIHNjcmlwdE9iamVjdCkK
KyAgICAgICAgICAgIEpTVmFsdWVVbnByb3RlY3Qoc2NyaXB0Q29udGV4dCwgc2NyaXB0T2JqZWN0
KTsKKworICAgICAgICBzY3JpcHRPYmplY3QgPSBuZXdTY3JpcHRPYmplY3Q7CisgICAgICAgIHNj
cmlwdENvbnRleHQgPSBjb250ZXh0OworCisgICAgICAgIEFTU0VSVCgoY29udGV4dCAmJiBuZXdT
Y3JpcHRPYmplY3QpIHx8ICghY29udGV4dCAmJiAhbmV3U2NyaXB0T2JqZWN0KSk7CisgICAgICAg
IGlmIChjb250ZXh0ICYmIG5ld1NjcmlwdE9iamVjdCkKKyAgICAgICAgICAgIEpTVmFsdWVQcm90
ZWN0KGNvbnRleHQsIG5ld1NjcmlwdE9iamVjdCk7CisgICAgfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNzRhOGE5NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5z
cGVjdG9yRGF0YWJhc2VSZXNvdXJjZV9oCisjZGVmaW5lIEluc3BlY3RvckRhdGFiYXNlUmVzb3Vy
Y2VfaAorCisjaWYgRU5BQkxFKERBVEFCQVNFKQorCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEluc3BlY3RvckRh
dGFiYXNlUmVzb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JE
YXRhYmFzZVJlc291cmNlPiBjcmVhdGUoRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcm
IGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VS
ZXNvdXJjZShkYXRhYmFzZSwgZG9tYWluLCBuYW1lLCB2ZXJzaW9uKSk7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIHNldFNjcmlwdE9iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmKTsK
KworICAgICAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlOworICAgICAgICBTdHJpbmcgZG9t
YWluOworICAgICAgICBTdHJpbmcgbmFtZTsKKyAgICAgICAgU3RyaW5nIHZlcnNpb247CisgICAg
ICAgIEpTQ29udGV4dFJlZiBzY3JpcHRDb250ZXh0OworICAgICAgICBKU09iamVjdFJlZiBzY3Jp
cHRPYmplY3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBJbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlKERhdGFiYXNlKiwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJl
c291cmNlLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWUwZWM4Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCkBAIC0wLDAgKzEsMTc4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0
dGxpbGVrLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5o
IgorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJEb2NMb2FkZXIuaCIK
KyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiVGV4dEVuY29kaW5nLmgiCisKKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIFhNTEh0dHBSZXF1ZXN0UmVzb3VyY2UgQ2xhc3MKKworc3Ry
dWN0IFhNTEh0dHBSZXF1ZXN0UmVzb3VyY2UgeworICAgIFhNTEh0dHBSZXF1ZXN0UmVzb3VyY2Uo
Y29uc3QgSlNDOjpVU3RyaW5nJiBzb3VyY2VTdHJpbmcpCisgICAgeworICAgICAgICBKU0M6OkpT
TG9jayBsb2NrKGZhbHNlKTsKKyAgICAgICAgdGhpcy0+c291cmNlU3RyaW5nID0gc291cmNlU3Ry
aW5nLnJlcCgpOworICAgIH0KKworICAgIH5YTUxIdHRwUmVxdWVzdFJlc291cmNlKCkKKyAgICB7
CisgICAgICAgIEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOworICAgICAgICBzb3VyY2VTdHJpbmcu
Y2xlYXIoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SlNDOjpVU3RyaW5nOjpSZXA+IHNvdXJjZVN0
cmluZzsKK307CisKKyAgICBJbnNwZWN0b3JSZXNvdXJjZTo6SW5zcGVjdG9yUmVzb3VyY2UobG9u
ZyBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciwgRnJhbWUq
IGZyYW1lKQorICAgIDogaWRlbnRpZmllcihpZGVudGlmaWVyKQorICAgICwgbG9hZGVyKGRvY3Vt
ZW50TG9hZGVyKQorICAgICwgZnJhbWUoZnJhbWUpCisgICAgLCBzY3JpcHRDb250ZXh0KDApCisg
ICAgLCBzY3JpcHRPYmplY3QoMCkKKyAgICAsIGV4cGVjdGVkQ29udGVudExlbmd0aCgwKQorICAg
ICwgY2FjaGVkKGZhbHNlKQorICAgICwgZmluaXNoZWQoZmFsc2UpCisgICAgLCBmYWlsZWQoZmFs
c2UpCisgICAgLCBsZW5ndGgoMCkKKyAgICAsIHJlc3BvbnNlU3RhdHVzQ29kZSgwKQorICAgICwg
c3RhcnRUaW1lKC0xLjApCisgICAgLCByZXNwb25zZVJlY2VpdmVkVGltZSgtMS4wKQorICAgICwg
ZW5kVGltZSgtMS4wKQorICAgICwgeG1sSHR0cFJlcXVlc3RSZXNvdXJjZSgwKQorICAgIHsKKyAg
ICB9CisgICAgCitJbnNwZWN0b3JSZXNvdXJjZTo6fkluc3BlY3RvclJlc291cmNlKCkKK3sKKyAg
ICBzZXRTY3JpcHRPYmplY3QoMCwgMCk7Cit9CisKK0luc3BlY3RvclJlc291cmNlOjpUeXBlIElu
c3BlY3RvclJlc291cmNlOjp0eXBlKCkgY29uc3QKK3sKKyAgICBpZiAoeG1sSHR0cFJlcXVlc3RS
ZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIFhIUjsKKworICAgIGlmIChyZXF1ZXN0VVJMID09IGxv
YWRlci0+cmVxdWVzdFVSTCgpKQorICAgICAgICByZXR1cm4gRG9jOworCisgICAgaWYgKGxvYWRl
ci0+ZnJhbWVMb2FkZXIoKSAmJiByZXF1ZXN0VVJMID09IGxvYWRlci0+ZnJhbWVMb2FkZXIoKS0+
aWNvblVSTCgpKQorICAgICAgICByZXR1cm4gSW1hZ2U7CisKKyAgICBDYWNoZWRSZXNvdXJjZSog
Y2FjaGVkUmVzb3VyY2UgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPmNhY2hlZFJl
c291cmNlKHJlcXVlc3RVUkwuc3RyaW5nKCkpOworICAgIGlmICghY2FjaGVkUmVzb3VyY2UpCisg
ICAgICAgIHJldHVybiBPdGhlcjsKKworICAgIHN3aXRjaCAoY2FjaGVkUmVzb3VyY2UtPnR5cGUo
KSkgeworICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgorICAgICAg
ICAgICAgcmV0dXJuIEltYWdlOworICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVz
b3VyY2U6CisgICAgICAgICAgICByZXR1cm4gRm9udDsKKyAgICAgICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6Q1NTU3R5bGVTaGVldDoKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICAgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIFN0
eWxlc2hlZXQ7CisgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKKyAgICAgICAg
ICAgIHJldHVybiBTY3JpcHQ7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
T3RoZXI7CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvclJlc291cmNlOjpzZXRTY3JpcHRPYmpl
Y3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG5ld1NjcmlwdE9iamVjdCkKK3sK
KyAgICBpZiAoc2NyaXB0Q29udGV4dCAmJiBzY3JpcHRPYmplY3QpCisgICAgICAgIEpTVmFsdWVV
bnByb3RlY3Qoc2NyaXB0Q29udGV4dCwgc2NyaXB0T2JqZWN0KTsKKworICAgIHNjcmlwdE9iamVj
dCA9IG5ld1NjcmlwdE9iamVjdDsKKyAgICBzY3JpcHRDb250ZXh0ID0gY29udGV4dDsKKworICAg
IEFTU0VSVCgoY29udGV4dCAmJiBuZXdTY3JpcHRPYmplY3QpIHx8ICghY29udGV4dCAmJiAhbmV3
U2NyaXB0T2JqZWN0KSk7CisgICAgaWYgKGNvbnRleHQgJiYgbmV3U2NyaXB0T2JqZWN0KQorICAg
ICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBuZXdTY3JpcHRPYmplY3QpOworfQorCit2b2lk
IEluc3BlY3RvclJlc291cmNlOjpzZXRYTUxIdHRwUmVxdWVzdFByb3BlcnRpZXMoY29uc3QgSlND
OjpVU3RyaW5nJiBkYXRhKQoreworICAgIHhtbEh0dHBSZXF1ZXN0UmVzb3VyY2Uuc2V0KG5ldyBY
TUxIdHRwUmVxdWVzdFJlc291cmNlKGRhdGEpKTsKK30KKworU3RyaW5nIEluc3BlY3RvclJlc291
cmNlOjpzb3VyY2VTdHJpbmcoKSBjb25zdAoreworICAgIGlmICh4bWxIdHRwUmVxdWVzdFJlc291
cmNlKQorICAgICAgICByZXR1cm4gSlNDOjpVU3RyaW5nKHhtbEh0dHBSZXF1ZXN0UmVzb3VyY2Ut
PnNvdXJjZVN0cmluZyk7CisKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXI7CisgICAg
U3RyaW5nIHRleHRFbmNvZGluZ05hbWU7CisKKyAgICBpZiAocmVxdWVzdFVSTCA9PSBsb2FkZXIt
PnJlcXVlc3RVUkwoKSkgeworICAgICAgICBidWZmZXIgPSBsb2FkZXItPm1haW5SZXNvdXJjZURh
dGEoKTsKKyAgICAgICAgdGV4dEVuY29kaW5nTmFtZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5pbnB1
dEVuY29kaW5nKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hl
ZFJlc291cmNlID0gZnJhbWUtPmRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5jYWNoZWRSZXNvdXJj
ZShyZXF1ZXN0VVJMLnN0cmluZygpKTsKKyAgICAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZSkKKyAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgICAgICBpZiAoY2FjaGVkUmVzb3VyY2Ut
PmlzUHVyZ2VhYmxlKCkpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSByZXNvdXJjZSBpcyBwdXJn
ZWFibGUgdGhlbiBtYWtlIGl0IHVucHVyZ2VhYmxlIHRvIGdldAorICAgICAgICAgICAgLy8gZ2V0
IGl0cyBkYXRhLiBUaGlzIG1pZ2h0IGZhaWwsIGluIHdoaWNoIGNhc2Ugd2UgcmV0dXJuIGFuCisg
ICAgICAgICAgICAvLyBlbXB0eSBTdHJpbmcuCisgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxk
IHdlIGRvIHNvbWV0aGluZyBlbHNlIGluIHRoZSBjYXNlIG9mIGEgcHVyZ2VkCisgICAgICAgICAg
ICAvLyByZXNvdXJjZSB0aGF0IGluZm9ybXMgdGhlIHVzZXIgd2h5IHRoZXJlIGlzIG5vIGRhdGEg
aW4gdGhlCisgICAgICAgICAgICAvLyBpbnNwZWN0b3I/CisgICAgICAgICAgICBpZiAoIWNhY2hl
ZFJlc291cmNlLT5tYWtlUHVyZ2VhYmxlKGZhbHNlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBidWZmZXIgPSBjYWNoZWRSZXNvdXJjZS0+
ZGF0YSgpOworICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lID0gY2FjaGVkUmVzb3VyY2UtPmVuY29k
aW5nKCk7CisgICAgfQorCisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKworICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyh0ZXh0RW5jb2RpbmdOYW1lKTsKKyAgICBp
ZiAoIWVuY29kaW5nLmlzVmFsaWQoKSkKKyAgICAgICAgZW5jb2RpbmcgPSBXaW5kb3dzTGF0aW4x
RW5jb2RpbmcoKTsKKyAgICByZXR1cm4gZW5jb2RpbmcuZGVjb2RlKGJ1ZmZlci0+ZGF0YSgpLCBi
dWZmZXItPnNpemUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmggYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JSZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmFmNGQxMGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXNvdXJjZS5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9yUmVzb3VyY2Vf
aAorI2RlZmluZSBJbnNwZWN0b3JSZXNvdXJjZV9oCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0NvbnRleHRSZWYuaD4KKworI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKKyNpbmNsdWRl
ICJLVVJMLmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisgICAgY2xhc3MgVVN0cmluZzsKK30KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworICAgIGNsYXNzIERvY3VtZW50TG9hZGVyOworICAgIGNsYXNzIEZyYW1l
OworICAgIHN0cnVjdCBYTUxIdHRwUmVxdWVzdFJlc291cmNlOworCisgICAgY2xhc3MgSW5zcGVj
dG9yUmVzb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JSZXNvdXJjZT4geworICAg
IHB1YmxpYzoKKworICAgICAgICAvLyBLZWVwIHRoZXNlIGluIHN5bmMgd2l0aCBXZWJJbnNwZWN0
b3IuUmVzb3VyY2UuVHlwZQorICAgICAgICBlbnVtIFR5cGUgeworICAgICAgICAgICAgRG9jLAor
ICAgICAgICAgICAgU3R5bGVzaGVldCwKKyAgICAgICAgICAgIEltYWdlLAorICAgICAgICAgICAg
Rm9udCwKKyAgICAgICAgICAgIFNjcmlwdCwKKyAgICAgICAgICAgIFhIUiwKKyAgICAgICAgICAg
IE1lZGlhLAorICAgICAgICAgICAgT3RoZXIKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiBjcmVhdGUobG9uZyBsb25nIGlk
ZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciwgRnJhbWUqIGZyYW1lKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclJlc291
cmNlKGlkZW50aWZpZXIsIGRvY3VtZW50TG9hZGVyLCBmcmFtZSkpOworICAgICAgICB9CisKKyAg
ICAgICAgfkluc3BlY3RvclJlc291cmNlKCk7CisgICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0Owor
ICAgICAgICB2b2lkIHNldFNjcmlwdE9iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmKTsK
KyAgICAgICAgdm9pZCBzZXRYTUxIdHRwUmVxdWVzdFByb3BlcnRpZXMoY29uc3QgSlNDOjpVU3Ry
aW5nJiBkYXRhKTsKKworICAgICAgICBTdHJpbmcgc291cmNlU3RyaW5nKCkgY29uc3Q7CisKKyAg
ICAgICAgbG9uZyBsb25nIGlkZW50aWZpZXI7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudExvYWRl
cj4gbG9hZGVyOworICAgICAgICBSZWZQdHI8RnJhbWU+IGZyYW1lOworICAgICAgICBLVVJMIHJl
cXVlc3RVUkw7CisgICAgICAgIEhUVFBIZWFkZXJNYXAgcmVxdWVzdEhlYWRlckZpZWxkczsKKyAg
ICAgICAgSFRUUEhlYWRlck1hcCByZXNwb25zZUhlYWRlckZpZWxkczsKKyAgICAgICAgU3RyaW5n
IG1pbWVUeXBlOworICAgICAgICBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWU7CisgICAgICAgIEpT
Q29udGV4dFJlZiBzY3JpcHRDb250ZXh0OworICAgICAgICBKU09iamVjdFJlZiBzY3JpcHRPYmpl
Y3Q7CisgICAgICAgIGxvbmcgbG9uZyBleHBlY3RlZENvbnRlbnRMZW5ndGg7CisgICAgICAgIGJv
b2wgY2FjaGVkOworICAgICAgICBib29sIGZpbmlzaGVkOworICAgICAgICBib29sIGZhaWxlZDsK
KyAgICAgICAgaW50IGxlbmd0aDsKKyAgICAgICAgaW50IHJlc3BvbnNlU3RhdHVzQ29kZTsKKyAg
ICAgICAgZG91YmxlIHN0YXJ0VGltZTsKKyAgICAgICAgZG91YmxlIHJlc3BvbnNlUmVjZWl2ZWRU
aW1lOworICAgICAgICBkb3VibGUgZW5kVGltZTsKKworICAgIHByaXZhdGU6CisgICAgICAgIElu
c3BlY3RvclJlc291cmNlKGxvbmcgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIEZy
YW1lKik7CisKKyAgICAgICAgT3duUHRyPFhNTEh0dHBSZXF1ZXN0UmVzb3VyY2U+IHhtbEh0dHBS
ZXF1ZXN0UmVzb3VyY2U7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gSW5zcGVjdG9yUmVzb3VyY2VfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1BhZ2Uu
aCBiL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggOWFhYmE4My4uNTc2NDNmNSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC0yMTEs
NyArMjExLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBPd25QdHI8RHJhZ0NvbnRy
b2xsZXI+IG1fZHJhZ0NvbnRyb2xsZXI7CiAgICAgICAgIE93blB0cjxGb2N1c0NvbnRyb2xsZXI+
IG1fZm9jdXNDb250cm9sbGVyOwogICAgICAgICBPd25QdHI8Q29udGV4dE1lbnVDb250cm9sbGVy
PiBtX2NvbnRleHRNZW51Q29udHJvbGxlcjsKLSAgICAgICAgT3duUHRyPEluc3BlY3RvckNvbnRy
b2xsZXI+IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckNv
bnRyb2xsZXI+IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKICAgICAgICAgT3duUHRyPFNldHRpbmdz
PiBtX3NldHRpbmdzOwogICAgICAgICBPd25QdHI8UHJvZ3Jlc3NUcmFja2VyPiBtX3Byb2dyZXNz
OwogICAgICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28326</attachid>
            <date>2009-03-05 14:32:17 -0800</date>
            <delta_ts>2009-03-05 14:43:57 -0800</delta_ts>
            <desc>Add InspectorController.idl, custom bindings, v1.</desc>
            <filename>Add-InspectorController.idl-custom-bindings-v1..patch</filename>
            <type>text/plain</type>
            <size>71784</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">M2U1NjBkOTAxN2U3NTBkYWVkODJiNDcxZDg2MzJhYWRhNTdlMDE3MgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkYTE1ZTEwLi45NWYxY2Fl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSw1ICsxLDM3IEBACiAyMDA5LTAzLTA1ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0MzU1CisgICAg
ICAgIEFkZCBJbnNwZWN0b3JDb250cm9sbGVyLmlkbCBhbmQgY29udmVydCBJbnNwZWN0b3JDb250
cm9sbGVyLmNwcCB0byB1c2UKKyAgICAgICAgSlNDIGJpbmRpbmdzLgorCisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9t
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckNvbnRyb2xsZXI6OnBy
b2ZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQ29udHJvbGxlcjo6aGlnaGxp
Z2h0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckNvbnRyb2xsZXI6OmFk
ZFJlc291cmNlU291cmNlVG9GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckNv
bnRyb2xsZXI6OmFkZFNvdXJjZVRvRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNwZWN0
b3JDb250cm9sbGVyOjpnZXRSZXNvdXJjZURvY3VtZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0luc3BlY3RvckNvbnRyb2xsZXI6OnNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpKU0lu
c3BlY3RvckNvbnRyb2xsZXI6OmRhdGFiYXNlVGFibGVOYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0luc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFdpbmRvdyk6CisgICAgICAgIChXZWJD
b3JlOjpKU0luc3BlY3RvckNvbnRyb2xsZXI6OnNldHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SlNJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZXR0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
SW5zcGVjdG9yQ29udHJvbGxlcjo6d3JhcENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
SW5zcGVjdG9yQ29udHJvbGxlcjo6Y3VycmVudENhbGxGcmFtZSk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6YWRkU291cmNlVG9GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpwbGF0Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp3
aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aWRsOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKworMjAwOS0wMy0wNSAgRGltaXRy
aSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIEdUSyBCdWlsZCBm
aXguCiAKICAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaDogVXNlIHByb3BlciBo
ZWFkZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggYWUwMTNkMC4uY2NmNjFlMiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQpAQCAtMTYzLDYgKzE2Myw3IEBAIERPTV9DTEFTU0VTID0gXAogICAgIEhUTUxWaWRlb0Vs
ZW1lbnQgXAogICAgIEhpc3RvcnkgXAogICAgIEltYWdlRGF0YSBcCisJSW5zcGVjdG9yQ29udHJv
bGxlciBcCiAgICAgS2V5Ym9hcmRFdmVudCBcCiAgICAgTG9jYXRpb24gXAogICAgIE1lZGlhRXJy
b3IgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFr
ZWZpbGUuYW0KaW5kZXggYzdjNzhmOC4uMzk4YWIyMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0yMTIsNiArMjEyLDcg
QEAgSURMX0JJTkRJTkdTICs9IFwKIAlXZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmlkbCBcCiAJV2Vi
Q29yZS9odG1sL1RleHRNZXRyaWNzLmlkbCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlw
dENhbGxGcmFtZS5pZGwgXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aWRsIFwKIAlXZWJDb3JlL3BhZ2UvQmFySW5mby5pZGwgXAogCVdlYkNvcmUvcGFnZS9Db25zb2xl
LmlkbCBcCiAJV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5pZGwgXApAQCAtMzEyLDYgKzMxMyw3
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3Rl
ZE9iamVjdFdyYXBwZXIuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxi
YWNrV3JhcHBlci5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFj
a1dyYXBwZXIuaCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckNvbnRyb2xsZXJD
dXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1
c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAgXAog
CVdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5oIFwKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGRiYmE3MjEuLmNi
YmVhMTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJD
b3JlLnBybwpAQCAtMzc2LDYgKzM3Niw3IEBAIElETF9CSU5ESU5HUyArPSBcCiAgICAgaHRtbC9J
bWFnZURhdGEuaWRsIFwKICAgICBodG1sL1RleHRNZXRyaWNzLmlkbCBcCiAgICAgaW5zcGVjdG9y
L0phdmFTY3JpcHRDYWxsRnJhbWUuaWRsIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5pZGwgXAogICAgIHBhZ2UvQmFySW5mby5pZGwgXAogICAgIHBhZ2UvQ29uc29sZS5pZGwg
XAogICAgIHBhZ2UvRE9NU2VsZWN0aW9uLmlkbCBcCkBAIC00NTAsNiArNDUxLDcgQEAgU09VUkNF
UyArPSBcCiAgICAgYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwIFwKICAgICBiaW5k
aW5ncy9qcy9KU0luc3BlY3RlZE9iamVjdFdyYXBwZXIuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9K
U0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5jcHAgXAorICAgIGJpbmRpbmdzL2pzL0pTSW5zcGVj
dG9yQ29udHJvbGxlckN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0
b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU05hbWVkTm9kZU1hcEN1c3RvbS5jcHAgXAogICAg
IGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwICBcCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBlNDM5MDY3Li5lODc2ZWQxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTk5Miw2ICs5OTIsMTQgQEAKIAkJCQk+DQogCQkJ
PC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIp
XG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
JChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU0lu
c3BlY3RvckNvbnRyb2xsZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJ
CQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVy
aXZlZFNvdXJjZXNcSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+
DQpAQCAtMTQxNDksNiArMTQxNTcsMTAgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxG
aWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTSW5zcGVjdG9yQ29udHJv
bGxlckN1c3RvbS5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9t
LmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggMmMwZWZlZi4uYjUwZWI4MCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYzNywxNCArNjM3LDE3IEBACiAJCTQxQzc2
MEIxMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFDNzYwQjAwRURFMDNEMzAwQzE2NTVGIC8qIFNj
cmlwdFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDFEMDE1Q0EwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUQwMTVDODBGNEI1QzcxMDA0
QTY2MkYgLyogQ29udGVudFR5cGUuaCAqLzsgfTsKIAkJNDFEMDE1Q0IwRjRCNUM3MTAwNEE2NjJG
IC8qIENvbnRlbnRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQxRDAxNUM5MEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5jcHAgKi87
IH07Ci0JCTQxRjA2M0VDMEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
RjA2M0U2MEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCAq
LzsgfTsKLQkJNDFGMDYzRUQwRjVGOUEwMDAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVz
b3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
RjA2M0U3MEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggKi87
IH07Ci0JCTQxRjA2M0VFMEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVz
b3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDFGMDYzRTgwRjVGOUEwMDAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5j
cHAgKi87IH07Ci0JCTQxRjA2M0VGMEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9y
YWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxRjA2M0U5MEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3Vy
Y2UuaCAqLzsgfTsKLQkJNDFGMDYzRjAwRjVGOUEwMDAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291
cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
RjA2M0VBMEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJjZS5jcHAgKi87IH07Ci0J
CTQxRjA2M0YxMEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJjZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYzRUIwRjVGOUEwMDAw
QTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmggKi87IH07Ci0JCTQxRjA2M0Y0MEY1RjlBMEQw
MEEwN0VBQyAvKiBDb25zb2xlTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjNGMjBGNUY5QTBEMDBBMDdFQUMgLyogQ29uc29sZU1l
c3NhZ2UuY3BwICovOyB9OwotCQk0MUYwNjNGNTBGNUY5QTBEMDBBMDdFQUMgLyogQ29uc29sZU1l
c3NhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
RjA2M0YzMEY1RjlBMEQwMEEwN0VBQyAvKiBDb25zb2xlTWVzc2FnZS5oICovOyB9OworCQk0MUYw
NjBDRDBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2MENCMEY1RUVCMkIw
MEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuY3BwICovOyB9OworCQk0MUYwNjBDRTBG
NUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjBDQzBGNUVFQjJCMDBBMDdFQUMg
LyogSlNJbnNwZWN0b3JDb250cm9sbGVyLmggKi87IH07CisJCTQxRjA2MTZBMEY1RUZCREQwMEEw
N0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYxNjkwRjVFRkJERDAwQTA3RUFDIC8q
IEpTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAgKi87IH07CisJCTQxRjA2MTc0MEY1RjAw
QUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2MTcyMEY1RjAwQUMwMEEwN0VB
QyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCAqLzsgfTsKKwkJNDFGMDYxNzUwRjVG
MDBBQzAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjE3MzBGNUYwMEFDMDBB
MDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCAqLzsgfTsKKwkJNDFGMDYx
OEUwRjVGMDY5ODAwQTA3RUFDIC8qIENvbnNvbGVNZXNzYWdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjE4QzBGNUYwNjk4MDBBMDdFQUMgLyog
Q29uc29sZU1lc3NhZ2UuaCAqLzsgfTsKKwkJNDFGMDYxOEYwRjVGMDY5ODAwQTA3RUFDIC8qIENv
bnNvbGVNZXNzYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxRjA2MThEMEY1RjA2OTgwMEEwN0VBQyAvKiBDb25zb2xlTWVzc2FnZS5jcHAgKi87
IH07CisJCTQxRjA2MjAxMEY1RjBCNjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYxRkYwRjVG
MEI2NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmggKi87IH07CisJCTQxRjA2MjAyMEY1
RjBCNjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjIwMDBGNUYwQjY2MDBBMDdFQUMgLyog
SW5zcGVjdG9yUmVzb3VyY2UuY3BwICovOyB9OworCQk0MUYwNjIxNDBGNUYxOTI2MDBBMDdFQUMg
LyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYyMTIwRjVGMTkyNjAwQTA3RUFDIC8qIEluc3BlY3Rv
ckRhdGFiYXNlUmVzb3VyY2UuaCAqLzsgfTsKKwkJNDFGMDYyMTUwRjVGMTkyNjAwQTA3RUFDIC8q
IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYyMTMwRjVGMTkyNjAwQTA3RUFDIC8qIEluc3BlY3Rv
ckRhdGFiYXNlUmVzb3VyY2UuY3BwICovOyB9OwogCQk0MUYxRDIxRjBFRjM1QzJBMDBEQTg3NTMg
LyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MUYxRDIxRDBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVk
RnJhbWVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDFGMUQyMjAwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1lRGF0YS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYxRDIx
RTBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcCAqLzsgfTsKIAkJ
NDQxNTI5MkUwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MTUyOTJDMEUxQUU4
QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmggKi87IH07CkBAIC01NTc3LDE0
ICs1NTgwLDE4IEBACiAJCTQxQzc2MEIwMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRTdGF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVu
dFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udGVudFR5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8q
IENvbnRlbnRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENv
bnRlbnRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDFGMDYzRTYwRjVG
OUEwMDAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxRjA2M0U3MEY1RjlBMDAwMEEwN0VBQyAv
KiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNDFGMDYzRTgwRjVGOUEwMDAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VS
ZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0
MUYwNjNFOTBGNUY5QTAwMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckRPTVN0b3JhZ2VSZXNv
dXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MUYwNjNFQTBGNUY5QTAwMDBB
MDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5zcGVjdG9yUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk0MUYwNjNFQjBGNUY5QTAwMDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yUmVzb3VyY2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDFGMDYzRjIwRjVGOUEwRDAwQTA3RUFDIC8qIENv
bnNvbGVNZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENv
bnNvbGVNZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDFGMDYzRjMw
RjVGOUEwRDAwQTA3RUFDIC8qIENvbnNvbGVNZXNzYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENvbnNvbGVNZXNzYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTQxRjA2MEFBMEY1RUU4QkIwMEEwN0VBQyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJbnNwZWN0b3JDb250cm9sbGVyLmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFGMDYwQ0IwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
MUYwNjBDQzBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JDb250cm9sbGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW5zcGVjdG9yQ29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUYwNjE2OTBGNUVGQkREMDBBMDdFQUMgLyogSlNJ
bnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQxRjA2MTcyMEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01T
dG9yYWdlUmVzb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVj
dG9yRE9NU3RvcmFnZVJlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQx
RjA2MTczMEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yRE9NU3RvcmFn
ZVJlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFGMDYxOEMwRjVG
MDY5ODAwQTA3RUFDIC8qIENvbnNvbGVNZXNzYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbnNvbGVNZXNzYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTQxRjA2MThEMEY1RjA2OTgwMEEwN0VBQyAvKiBDb25zb2xlTWVzc2FnZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25zb2xlTWVzc2FnZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxRjA2MUZGMEY1RjBCNjYwMEEwN0VBQyAvKiBJbnNwZWN0
b3JSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JS
ZXNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUYwNjIwMDBGNUYwQjY2
MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0MUYwNjIxMjBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VS
ZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxRjA2MjEzMEY1
RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUYxRDIxRDBFRjM1QzJBMDBEQTg3NTMg
LyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNjcmlwdENhY2hlZEZyYW1lRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0MUYxRDIxRTBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdENhY2hlZEZyYW1lRGF0
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0MTUyOTJDMEUxQUU4QTAwMEM0
QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTk3MDIsNiArOTcwOSw4IEBACiAJCTFDNUZBRUNBMERDRkQ4QzkwMEQ1OEY3OCAv
KiBJbnNwZWN0b3IgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCTQxRjA2MENCMEY1RUVCMkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
ICovLAorCQkJCTQxRjA2MENDMEY1RUVCMkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xs
ZXIuaCAqLywKIAkJCQkxQzVGQUVDRjBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lLmNwcCAqLywKIAkJCQkxQzVGQUVEMDBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmggKi8sCiAJCQkpOwpAQCAtOTcxMSwxOCArOTcyMCwxOSBAQAogCQkxQzgx
Qjk0RDBFOTczMkQ5MDAyNjZFMDcgLyogaW5zcGVjdG9yICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk0MUYwNjNGMjBGNUY5QTBEMDBBMDdFQUMgLyogQ29u
c29sZU1lc3NhZ2UuY3BwICovLAotCQkJCTQxRjA2M0YzMEY1RjlBMEQwMEEwN0VBQyAvKiBDb25z
b2xlTWVzc2FnZS5oICovLAogCQkJCTFDODFCOTU5MEU5NzMzMDgwMDI2NkUwNyAvKiBmcm9udC1l
bmQgKi8sCi0JCQkJNDFGMDYzRTYwRjVGOUEwMDAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNl
UmVzb3VyY2UuY3BwICovLAotCQkJCTQxRjA2M0U3MEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0
b3JEYXRhYmFzZVJlc291cmNlLmggKi8sCi0JCQkJNDFGMDYzRTgwRjVGOUEwMDAwQTA3RUFDIC8q
IEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAgKi8sCi0JCQkJNDFGMDYzRTkwRjVGOUEw
MDAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oICovLAorCQkJCTQxRjA2
MThEMEY1RjA2OTgwMEEwN0VBQyAvKiBDb25zb2xlTWVzc2FnZS5jcHAgKi8sCisJCQkJNDFGMDYx
OEMwRjVGMDY5ODAwQTA3RUFDIC8qIENvbnNvbGVNZXNzYWdlLmggKi8sCisJCQkJNDFGMDYyMTMw
RjVGMTkyNjAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwICovLAorCQkJ
CTQxRjA2MjEyMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgg
Ki8sCisJCQkJNDFGMDYxNzMwRjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VS
ZXNvdXJjZS5jcHAgKi8sCisJCQkJNDFGMDYxNzIwRjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3Rv
ckRPTVN0b3JhZ2VSZXNvdXJjZS5oICovLAogCQkJCTFDODFCOTU4MEU5NzMzMDgwMDI2NkUwNyAv
KiBJbnNwZWN0b3JDbGllbnQuaCAqLywKIAkJCQkxQzgxQjk1NzBFOTczMzA4MDAyNjZFMDcgLyog
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJMUM4MUI5NTYwRTk3MzMwODAwMjY2RTA3
IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCAqLywKLQkJCQk0MUYwNjNFQTBGNUY5QTAwMDBBMDdF
QUMgLyogSW5zcGVjdG9yUmVzb3VyY2UuY3BwICovLAotCQkJCTQxRjA2M0VCMEY1RjlBMDAwMEEw
N0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJjZS5oICovLAorCQkJCTQxRjA2MEFBMEY1RUU4QkIwMEEw
N0VBQyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmlkbCAqLywKKwkJCQk0MUYwNjIwMDBGNUYwQjY2
MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2UuY3BwICovLAorCQkJCTQxRjA2MUZGMEY1RjBC
NjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJjZS5oICovLAogCQkJCTFDODFCQTAzMEU5NzM0
ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCAqLywKIAkJCQkxQzgxQkEwNDBF
OTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oICovLAogCQkJCTFDODFCQTA1
MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmlkbCAqLywKQEAgLTEzNTE1
LDYgKzEzNTI1LDcgQEAKIAkJCQlBQjRDQjRFQTBCOEJEQTNEMDA5RjQwQjAgLyogSlNIVE1MU2Vs
ZWN0RWxlbWVudEN1c3RvbS5oICovLAogCQkJCUJDRTdCMTkyMEQ0RTg2OTYwMDc1QTUzOSAvKiBK
U0hpc3RvcnlDdXN0b20uY3BwICovLAogCQkJCUE3RDAzMThEMEU5MzU0MDMwMEUyNEFDRCAvKiBK
U0ltYWdlRGF0YUN1c3RvbS5jcHAgKi8sCisJCQkJNDFGMDYxNjkwRjVFRkJERDAwQTA3RUFDIC8q
IEpTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAgKi8sCiAJCQkJMUM1RkFFRTYwRENGREE2
ODAwRDU4Rjc4IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAgKi8sCiAJCQkJQkNF
MUM0M0YwRDk4MzBGNDAwM0IwMkYyIC8qIEpTTG9jYXRpb25DdXN0b20uY3BwICovLAogCQkJCUUx
QTVGOTlBMEU3RUFBMjUwMEFGODVFQSAvKiBKU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcCAqLywK
QEAgLTE2ODI5LDEwICsxNjg0MCwxMSBAQAogCQkJCTFBNTY5RDI1MEQ3RTJCODIwMDdDMzk4MyAv
KiBydW50aW1lX3Jvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTFFMDk5RTY0OTIwMDU2
RTU4MSAvKiB2aXNpYmxlX3VuaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U0OTRBQjBGNEY1
RTlFMDA4NEUzMTkgLyogR2VvbG9jYXRpb25TZXJ2aWNlTWFjLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk0MUYwNjNFRDBGNUY5QTAwMDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJNDFGMDYzRUYwRjVGOUEwMDAwQTA3RUFDIC8qIEluc3BlY3Rv
ckRPTVN0b3JhZ2VSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDFGMDYzRjEwRjVGOUEw
MDAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MUYw
NjNGNTBGNUY5QTBEMDBBMDdFQUMgLyogQ29uc29sZU1lc3NhZ2UuaCBpbiBIZWFkZXJzICovLAor
CQkJCTQxRjA2MENFMEY1RUVCMkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTQxRjA2MTc0MEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JE
T01TdG9yYWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxRjA2MThFMEY1RjA2OTgw
MEEwN0VBQyAvKiBDb25zb2xlTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDFGMDYyMDEw
RjVGMEI2NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk0MUYwNjIxNDBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC0xNzIyOCw3ICsxNzI0MCw2IEBACiAJCQkJMzE2RkUxMTUwRTZF
MURBNzAwQkY2MDg4IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MzMwOUREQzA5OUU2NDkyMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkMwQjM2QTQwQ0QzQzY3QzAwQUM3RUI1IC8qIENvbnNvbGUuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJNDFGMDYzRjQwRjVGOUEwRDAwQTA3RUFDIC8qIENvbnNvbGVN
ZXNzYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MTg3MjFGMDk3N0QzQzAwMDU4MjZEOSAv
KiBDb250YWluZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUVCOTgwMEU4MjA3MjUw
MEIyNTk2NSAvKiBDb250ZW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUQwMTVDQjBG
NEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNzc0
NywxMCArMTc3NTgsNyBAQAogCQkJCTkzMzA5REVEMDk5RTY0OTIwMDU2RTU4MSAvKiBJbnNlcnRO
b2RlQmVmb3JlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOURFRjA5OUU2NDky
MDA1NkU1ODEgLyogSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5MzMwOURGMTA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0VGV4dENvbW1hbmQu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDFGMDYzRUMwRjVGOUEwMDAwQTA3RUFDIC8qIEluc3Bl
Y3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDFGMDYzRUUwRjVG
OUEwMDAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQzgxQjk1QjBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0MUYwNjNGMDBGNUY5QTAwMDBBMDdFQUMgLyogSW5z
cGVjdG9yUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NjAwQjA1MzgxNDAw
MkNFNjRGIC8qIEludFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1N0MwQjA1
MzgxNDAwMkNFNjRGIC8qIEludFBvaW50TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1
NzMwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNzky
NCw2ICsxNzkzMiw4IEBACiAJCQkJQTdEMDMxOEUwRTkzNTQwMzAwRTI0QUNEIC8qIEpTSW1hZ2VE
YXRhQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMwOTE1ODhBMERCNDIwOTIwMEU1NUFG
NCAvKiBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzA5
MTU4OEMwREI0MjA5MjAwRTU1QUY0IC8qIEpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTQxRjA2MENEMEY1RUVCMkIwMEEwN0VBQyAvKiBKU0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDFGMDYxNkEwRjVFRkJERDAwQTA3
RUFDIC8qIEpTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQzVGQUVEMTBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFDNUZBRUU3MERDRkRBNjgwMEQ1OEY3OCAvKiBKU0phdmFTY3Jp
cHRDYWxsRnJhbWVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg2NjI5RDQwOURBMkI0
ODAwOTYzM0E1IC8qIEpTS2V5Ym9hcmRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE4ODI1
LDYgKzE4ODM1LDEwIEBACiAJCQkJMUE1NjlEMjQwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVf
cm9vdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxRDA5OUU2NDkyMDA1NkU1ODEgLyog
dmlzaWJsZV91bml0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0U0OTRBQzBGNEY1RTlFMDA4
NEUzMTkgLyogR2VvbG9jYXRpb25TZXJ2aWNlTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNDFG
MDYxNzUwRjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk0MUYwNjE4RjBGNUYwNjk4MDBBMDdFQUMgLyogQ29uc29sZU1l
c3NhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDFGMDYyMDIwRjVGMEI2NjAwQTA3RUFDIC8q
IEluc3BlY3RvclJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQxRjA2MjE1MEY1RjE5
MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wgYi9XZWJDb3JlL1dlYkNv
cmVTb3VyY2VzLmJrbAppbmRleCAzYzE0MmFiLi5iMzQxNzNhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmVTb3VyY2VzLmJrbAorKysgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbApAQCAt
ODMsNiArODMsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlZGVk
IHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9t
LmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9KU0luc3BlY3RlZE9iamVjdFdyYXBwZXIuY3BwCiAg
ICAgICAgIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmNwcAorICAgICAg
ICBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCiAgICAgICAgIGJp
bmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAKICAgICAgICAgYmluZGlu
Z3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKICAgICAgICAgYmluZGluZ3MvanMvSlNNZXNzYWdl
Q2hhbm5lbENvbnN0cnVjdG9yLmNwcApAQCAtMzE5LDYgKzMyMCw3IEBAIFRoaXMgZmlsZSBjb250
YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWVkZWQgdG8gYnVpbGQgV2ViQ29yZS4KICAgICAgICAg
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxVTGlzdEVsZW1lbnQuY3BwCiAgICAgICAgIERl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIaXN0b3J5LmNwcAogICAgICAgICBEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTSW1hZ2VEYXRhLmNwcAorICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNLZXlib2FyZEV2ZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
TG9jYXRpb24uY3BwCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9y
Q29udHJvbGxlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29u
dHJvbGxlckN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlj
NjljOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JD
b250cm9sbGVyQ3VzdG9tLmNwcApAQCAtMCwwICsxLDMzMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggTWF0dCBMaWxlayA8d2Via2l0QG1hdHRsaWxlay5jb20+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNJbnNwZWN0b3JDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJDb25z
b2xlLmgiCisjaWYgRU5BQkxFKERBVEFCQVNFKQorI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5j
bHVkZSAiSlNEYXRhYmFzZS5oIgorI2VuZGlmCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgor
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKKyNp
bmNsdWRlICJKYXZhU2NyaXB0UHJvZmlsZS5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCisj
aW5jbHVkZSAiSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNJbnNwZWN0
b3JDYWxsYmFja1dyYXBwZXIuaCIKKyNpbmNsdWRlICJKU05vZGUuaCIKKyNpbmNsdWRlICJKU1Jh
bmdlLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJU
ZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKKyNpbmNsdWRlIDxw
cm9maWxlci9Qcm9maWxlLmg+CisjaW5jbHVkZSA8cHJvZmlsZXIvUHJvZmlsZXIuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0pTQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQor
I2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0RGVi
dWdTZXJ2ZXIuaCIKKyNpbmNsdWRlICJKU0phdmFTY3JpcHRDYWxsRnJhbWUuaCIKKyNlbmRpZgor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTVmFsdWVQ
dHIgSlNJbnNwZWN0b3JDb250cm9sbGVyOjpwcm9maWxlcyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSlNDOjpBcmdMaXN0JikKK3sKKyAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgQXJn
TGlzdCByZXN1bHQ7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxQcm9maWxlPiA+JiBwcm9maWxl
cyA9IGltcGwoKS0+cHJvZmlsZXMoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJv
ZmlsZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5hcHBlbmQodG9KUyhleGVjLCBwcm9m
aWxlc1tpXS5nZXQoKSkpOworCisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHJlc3Vs
dCk7Cit9CisKK0pTVmFsdWVQdHIgSlNJbnNwZWN0b3JDb250cm9sbGVyOjpoaWdobGlnaHRET01O
b2RlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCit7Cisg
ICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisK
KyAgICBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlciogd3JhcHBlciA9IEpTUXVhcmFudGluZWRP
YmplY3RXcmFwcGVyOjphc1dyYXBwZXIoYXJncy5hdChleGVjLCAwKSk7CisgICAgaWYgKCF3cmFw
cGVyKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIE5vZGUqIG5vZGUgPSB0
b05vZGUod3JhcHBlci0+dW53cmFwcGVkT2JqZWN0KCkpOworICAgIGlmICghbm9kZSkKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBpbXBsKCktPmhpZ2hsaWdodChub2RlKTsK
KworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlUHRyIEpTSW5zcGVjdG9y
Q29udHJvbGxlcjo6YWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBpZiAoYXJncy5zaXplKCkgPCAyKQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICB1bnNpZ25l
ZCBpZGVudGlmaWVyID0gYXJncy5hdChleGVjLCAwKS50b1VJbnQzMihleGVjLCBvayk7CisgICAg
aWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBSZWZQdHI8SW5z
cGVjdG9yUmVzb3VyY2U+IHJlc291cmNlID0gaW1wbCgpLT5yZXNvdXJjZXMoKS5nZXQoaWRlbnRp
Zmllcik7CisgICAgQVNTRVJUKHJlc291cmNlKTsKKyAgICBpZiAoIXJlc291cmNlKQorICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIFN0cmluZyBzb3VyY2VTdHJpbmcgPSByZXNv
dXJjZS0+c291cmNlU3RyaW5nKCk7CisgICAgaWYgKHNvdXJjZVN0cmluZy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgcmV0dXJuIGpzQm9vbGVhbihpbXBs
KCktPmFkZFNvdXJjZVRvRnJhbWUocmVzb3VyY2UtPm1pbWVUeXBlLCBzb3VyY2VTdHJpbmcsIHRv
Tm9kZShhcmdzLmF0KGV4ZWMsIDEpKSkpOworfQorCitKU1ZhbHVlUHRyIEpTSW5zcGVjdG9yQ29u
dHJvbGxlcjo6YWRkU291cmNlVG9GcmFtZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMykKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisKKyAgICBTdHJpbmcgbWltZVR5cGUgPSBhcmdzLmF0KGV4ZWMsIDApLnRvU3Ry
aW5nKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisKKyAgICBTdHJpbmcgc291cmNlU3RyaW5nID0gYXJncy5hdChleGVj
LCAxKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgcmV0dXJuIGpzQm9vbGVhbihpbXBsKCkt
PmFkZFNvdXJjZVRvRnJhbWUobWltZVR5cGUsIHNvdXJjZVN0cmluZywgdG9Ob2RlKGFyZ3MuYXQo
ZXhlYywgMSkpKSk7Cit9CisKK0pTVmFsdWVQdHIgSlNJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRS
ZXNvdXJjZURvY3VtZW50Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
Cit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisKKyAgICBib29sIG9rID0gZmFsc2U7CisgICAgdW5zaWduZWQgaWRlbnRpZmllciA9IGFy
Z3MuYXQoZXhlYywgMCkudG9VSW50MzIoZXhlYywgb2spOworICAgIGlmICghb2spCisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiBy
ZXNvdXJjZSA9IGltcGwoKS0+cmVzb3VyY2VzKCkuZ2V0KGlkZW50aWZpZXIpOworICAgIEFTU0VS
VChyZXNvdXJjZSk7CisgICAgaWYgKCFyZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisKKyAgICBGcmFtZSogZnJhbWUgPSByZXNvdXJjZS0+ZnJhbWUuZ2V0KCk7CisgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisKKyAgICBpZiAoZG9jdW1l
bnQtPmlzUGx1Z2luRG9jdW1lbnQoKSB8fCBkb2N1bWVudC0+aXNJbWFnZURvY3VtZW50KCkgfHwg
ZG9jdW1lbnQtPmlzTWVkaWFEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKworICAgIC8vIEZJWE1FOiBJIGFtIG5vdCBzdXJlIGlmIHRoaXMgaXMgYWN0dWFsbHkgbmVl
ZGVkLiBDYW4gd2UganVzdCB1c2UgZXhlYz8KKyAgICBFeGVjU3RhdGUqIHJlc291cmNlRXhlYyA9
IHRvSlNET01XaW5kb3dTaGVsbChyZXNvdXJjZS0+ZnJhbWUuZ2V0KCkpLT53aW5kb3coKS0+Z2xv
YmFsRXhlYygpOworCisgICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIHJldHVybiBKU0luc3Bl
Y3RlZE9iamVjdFdyYXBwZXI6OndyYXAocmVzb3VyY2VFeGVjLCB0b0pTKHJlc291cmNlRXhlYywg
ZG9jdW1lbnQpKTsKK30KKworSlNWYWx1ZVB0ciBKU0luc3BlY3RvckNvbnRyb2xsZXI6OnNlYXJj
aChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Mu
c2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBOb2RlKiBu
b2RlID0gdG9Ob2RlKGFyZ3MuYXQoZXhlYywgMCkpOworICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBTdHJpbmcgdGFyZ2V0ID0gYXJncy5hdChleGVj
LCAxKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgQXJnTGlzdCByZXN1bHQ7CisgICAgUmVm
UHRyPFJhbmdlPiBzZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMobm9kZSkpOworCisgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZG8geworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlc3Vs
dFJhbmdlKGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgdHJ1ZSwgZmFs
c2UpKTsKKyAgICAgICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoZWMpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgLy8gQSBub24tY29sbGFwc2VkIHJlc3VsdCByYW5nZSBjYW4g
aW4gc29tZSBmdW5reSB3aGl0ZXNwYWNlIGNhc2VzIHN0aWxsIG5vdAorICAgICAgICAvLyBhZHZh
bmNlIHRoZSByYW5nZSdzIHN0YXJ0IHBvc2l0aW9uICg0NTA5MzI4KS4gQnJlYWsgdG8gYXZvaWQg
aW5maW5pdGUgbG9vcC4KKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0ID0gZW5kVmlz
aWJsZVBvc2l0aW9uKHJlc3VsdFJhbmdlLmdldCgpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgaWYg
KG5ld1N0YXJ0ID09IHN0YXJ0VmlzaWJsZVBvc2l0aW9uKHNlYXJjaFJhbmdlLmdldCgpLCBET1dO
U1RSRUFNKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHJlc3VsdC5hcHBlbmQodG9K
UyhleGVjLCByZXN1bHRSYW5nZS5nZXQoKSkpOworCisgICAgICAgIHNldFN0YXJ0KHNlYXJjaFJh
bmdlLmdldCgpLCBuZXdTdGFydCk7CisgICAgfSB3aGlsZSAodHJ1ZSk7CisKKyAgICByZXR1cm4g
Y29uc3RydWN0QXJyYXkoZXhlYywgcmVzdWx0KTsKK30KKworI2lmIEVOQUJMRShEQVRBQkFTRSkK
K0pTVmFsdWVQdHIgSlNJbnNwZWN0b3JDb250cm9sbGVyOjpkYXRhYmFzZVRhYmxlTmFtZXMoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGlmIChhcmdzLnNpemUo
KSA8IDEpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgSlNRdWFyYW50aW5l
ZE9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6YXNX
cmFwcGVyKGFyZ3MuYXQoZXhlYywgMCkpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSB0b0RhdGFiYXNl
KHdyYXBwZXItPnVud3JhcHBlZE9iamVjdCgpKTsKKyAgICBpZiAoIWRhdGFiYXNlKQorICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIEFyZ0xpc3QgcmVzdWx0OworCisgICAgVmVj
dG9yPFN0cmluZz4gdGFibGVOYW1lcyA9IGRhdGFiYXNlLT50YWJsZU5hbWVzKCk7CisgICAgdW5z
aWduZWQgbGVuZ3RoID0gdGFibGVOYW1lcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICByZXN1bHQuYXBwZW5kKGpzU3RyaW5nKGV4ZWMs
IHRhYmxlTmFtZXNbaV0pKTsKKworICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCByZXN1
bHQpOworfQorI2VuZGlmCisKK0pTVmFsdWVQdHIgSlNJbnNwZWN0b3JDb250cm9sbGVyOjppbnNw
ZWN0ZWRXaW5kb3coRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpCit7CisgICAgSlNET01XaW5k
b3cqIGluc3BlY3RlZFdpbmRvdyA9IHRvSlNET01XaW5kb3coaW1wbCgpLT5pbnNwZWN0ZWRQYWdl
KCktPm1haW5GcmFtZSgpKTsKKyAgICByZXR1cm4gSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3
cmFwKGluc3BlY3RlZFdpbmRvdy0+Z2xvYmFsRXhlYygpLCBpbnNwZWN0ZWRXaW5kb3cpOworfQor
CitKU1ZhbHVlUHRyIEpTSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0dGluZyhFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBTdHJpbmcga2V5ID0gYXJncy5hdChl
eGVjLCAwKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgY29uc3QgSW5zcGVjdG9yQ29udHJv
bGxlcjo6U2V0dGluZyYgc2V0dGluZyA9IGltcGwoKS0+c2V0dGluZyhrZXkpOworCisgICAgc3dp
dGNoIChzZXR0aW5nLnR5cGUoKSkgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIElu
c3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6Ok5vVHlwZToKKyAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6
OlN0cmluZ1R5cGU6CisgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgc2V0dGluZy5z
dHJpbmcoKSk7CisgICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6RG91
YmxlVHlwZToKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBzZXR0aW5nLmRvdWJs
ZVZhbHVlKCkpOworICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6Oklu
dGVnZXJUeXBlOgorICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHNldHRpbmcuaW50
ZWdlclZhbHVlKCkpOworICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6
OkJvb2xlYW5UeXBlOgorICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihzZXR0aW5nLmJvb2xl
YW5WYWx1ZSgpKTsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpT
dHJpbmdWZWN0b3JUeXBlOiB7CisgICAgICAgICAgICBBcmdMaXN0IHN0cmluZ3NBcnJheTsKKyAg
ICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdHJpbmdzID0gc2V0dGluZy5zdHJpbmdW
ZWN0b3IoKTsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZ3Muc2l6
ZSgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQor
ICAgICAgICAgICAgICAgIHN0cmluZ3NBcnJheS5hcHBlbmQoanNTdHJpbmcoZXhlYywgc3RyaW5n
c1tpXSkpOworICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0cmluZ3NB
cnJheSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0pTVmFsdWVQdHIgSlNJbnNwZWN0b3JDb250
cm9sbGVyOjpzZXRTZXR0aW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
K3sKKyAgICBpZiAoYXJncy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKworICAgIFN0cmluZyBrZXkgPSBhcmdzLmF0KGV4ZWMsIDApLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nIHNldHRpbmc7CisKKyAgICBK
U1ZhbHVlUHRyIHZhbHVlID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWQoKSB8fCB2YWx1ZS5pc051bGwoKSkgeworICAgICAgICAvLyBEbyBub3RoaW5nLiBUaGUg
c2V0dGluZyBpcyBhbHJlYWR5IE5vVHlwZS4KKyAgICAgICAgQVNTRVJUKHNldHRpbmcudHlwZSgp
ID09IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6Ok5vVHlwZSk7CisgICAgfSBlbHNlIGlm
ICh2YWx1ZS5pc1N0cmluZygpKQorICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS50b1N0cmluZyhl
eGVjKSk7CisgICAgZWxzZSBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgc2V0dGluZy5z
ZXQodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgIGVsc2UgaWYgKHZhbHVlLmlzQm9vbGVhbigp
KQorICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworICAgIGVsc2Ug
eworICAgICAgICBKU0FycmF5KiBqc0FycmF5ID0gYXNBcnJheSh2YWx1ZSk7CisgICAgICAgIGlm
ICghanNBcnJheSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBzdHJpbmdzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
anNBcnJheS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIGl0ZW0gPSBqc0Fy
cmF5LT5nZXQoZXhlYywgaSkudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgICAgICAgICBzdHJpbmdzLmFwcGVuZChpdGVtKTsKKyAgICAgICAgfQorICAgICAgICBzZXR0
aW5nLnNldChzdHJpbmdzKTsKKyAgICB9CisKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgaW1wbCgpLT5zZXRTZXR0aW5n
KGtleSwgc2V0dGluZyk7CisKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1
ZVB0ciBKU0luc3BlY3RvckNvbnRyb2xsZXI6OndyYXBDYWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICByZXR1cm4gSlNJbnNwZWN0b3JDYWxsYmFj
a1dyYXBwZXI6OndyYXAoZXhlYywgYXJncy5hdChleGVjLCAwKSk7Cit9CisKK0pTVmFsdWVQdHIg
SlNJbnNwZWN0b3JDb250cm9sbGVyOjpjdXJyZW50Q2FsbEZyYW1lKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYpCit7CisgICAgSmF2YVNjcmlwdENhbGxGcmFtZSogY2FsbEZyYW1lID0g
aW1wbCgpLT5jdXJyZW50Q2FsbEZyYW1lKCk7CisgICAgaWYgKCFjYWxsRnJhbWUgfHwgIWNhbGxG
cmFtZS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIC8v
IEZJWE1FOiBJIGFtIG5vdCBzdXJlIGlmIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkLiBDYW4gd2Ug
anVzdCB1c2UgZXhlYz8KKyAgICBFeGVjU3RhdGUqIGdsb2JhbEV4ZWMgPSBjYWxsRnJhbWUtPnNj
b3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKworICAgIEpTTG9jayBs
b2NrKGZhbHNlKTsKKyAgICByZXR1cm4gSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFwKGds
b2JhbEV4ZWMsIHRvSlMoZXhlYywgY2FsbEZyYW1lKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4
IDkzMGQwMGMuLmFiMDQ3M2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQpAQCAtMTc0LDcgKzE3NCw3IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclR5cGUKICAg
ICAjIFdoZW4gd2UncmUgZmluaXNoZWQgd2l0aCB0aGUgb25lLWZpbGUtcGVyLWNsYXNzCiAgICAg
IyByZW9yZ2FuaXphdGlvbiwgd2Ugd29uJ3QgbmVlZCB0aGVzZSBzcGVjaWFsIGNhc2VzLgogICAg
IGlmICgkY29kZUdlbmVyYXRvci0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKSBvciBBdm9pZEluY2x1
c2lvbk9mVHlwZSgkdHlwZSkKLSAgICAgICAgb3IgJHR5cGUgZXEgIkRPTVN0cmluZyIgb3IgJHR5
cGUgZXEgIkRPTU9iamVjdCIgb3IgJHR5cGUgZXEgIlJHQkNvbG9yIikgeworICAgICAgICBvciAk
dHlwZSBlcSAiRE9NU3RyaW5nIiBvciAkdHlwZSBlcSAiRE9NT2JqZWN0IiBvciAkdHlwZSBlcSAi
UkdCQ29sb3IiIG9yICR0eXBlIGVxICJBcnJheSIpIHsKICAgICB9IGVsc2lmICgkdHlwZSA9fiAv
U1ZHUGF0aFNlZy8pIHsKICAgICAgICAgJGpvaW5lZE5hbWUgPSAkdHlwZTsKICAgICAgICAgJGpv
aW5lZE5hbWUgPX4gcy9BYnN8UmVsLy87CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCmluZGV4IGZhMWE1YWMuLjgxMTkwNTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSAiSlNET01X
aW5kb3cuaCIKICNpbmNsdWRlICJKU0luc3BlY3RlZE9iamVjdFdyYXBwZXIuaCIKICNpbmNsdWRl
ICJKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5oIgorI2luY2x1ZGUgIkpTSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIkpTUmFuZ2UuaCIKICNp
bmNsdWRlICJKYXZhU2NyaXB0UHJvZmlsZS5oIgpAQCAtMTcwLDU1ICsxNzEsNyBAQCBKU1ZhbHVl
UmVmIEluc3BlY3RvckNvbnRyb2xsZXI6OmNhbGxGdW5jdGlvbihKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLS8vIEphdmFTY3JpcHQg
Q2FsbGJhY2tzCi0KLSNkZWZpbmUgU0lNUExFX0lOU1BFQ1RPUl9DQUxMQkFDSyhqc0Z1bmN0aW9u
LCBpbnNwZWN0b3JDb250cm9sbGVyTWV0aG9kKSBcCi1zdGF0aWMgSlNWYWx1ZVJlZiBqc0Z1bmN0
aW9uKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiopIFwKLXsgXAotICAgIGlm
IChJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxJbnNw
ZWN0b3JDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKSkgXAotICAg
ICAgICBjb250cm9sbGVyLT5pbnNwZWN0b3JDb250cm9sbGVyTWV0aG9kKCk7IFwKLSAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsgXAotfQotCi1TSU1QTEVfSU5TUEVDVE9SX0NB
TExCQUNLKGhpZGVET01Ob2RlSGlnaGxpZ2h0LCBoaWRlSGlnaGxpZ2h0KTsKLVNJTVBMRV9JTlNQ
RUNUT1JfQ0FMTEJBQ0sobG9hZGVkLCBzY3JpcHRPYmplY3RSZWFkeSk7Ci1TSU1QTEVfSU5TUEVD
VE9SX0NBTExCQUNLKHVubG9hZGluZywgY2xvc2UpOwotU0lNUExFX0lOU1BFQ1RPUl9DQUxMQkFD
SyhhdHRhY2gsIGF0dGFjaFdpbmRvdyk7Ci1TSU1QTEVfSU5TUEVDVE9SX0NBTExCQUNLKGRldGFj
aCwgZGV0YWNoV2luZG93KTsKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLVNJTVBM
RV9JTlNQRUNUT1JfQ0FMTEJBQ0soZW5hYmxlRGVidWdnZXIsIGVuYWJsZURlYnVnZ2VyKTsKLVNJ
TVBMRV9JTlNQRUNUT1JfQ0FMTEJBQ0soZGlzYWJsZURlYnVnZ2VyLCBkaXNhYmxlRGVidWdnZXIp
OwotU0lNUExFX0lOU1BFQ1RPUl9DQUxMQkFDSyhwYXVzZUluRGVidWdnZXIsIHBhdXNlSW5EZWJ1
Z2dlcik7Ci1TSU1QTEVfSU5TUEVDVE9SX0NBTExCQUNLKHJlc3VtZURlYnVnZ2VyLCByZXN1bWVE
ZWJ1Z2dlcik7Ci1TSU1QTEVfSU5TUEVDVE9SX0NBTExCQUNLKHN0ZXBPdmVyU3RhdGVtZW50SW5E
ZWJ1Z2dlciwgc3RlcE92ZXJTdGF0ZW1lbnRJbkRlYnVnZ2VyKTsKLVNJTVBMRV9JTlNQRUNUT1Jf
Q0FMTEJBQ0soc3RlcEludG9TdGF0ZW1lbnRJbkRlYnVnZ2VyLCBzdGVwSW50b1N0YXRlbWVudElu
RGVidWdnZXIpOwotU0lNUExFX0lOU1BFQ1RPUl9DQUxMQkFDSyhzdGVwT3V0T2ZGdW5jdGlvbklu
RGVidWdnZXIsIHN0ZXBPdXRPZkZ1bmN0aW9uSW5EZWJ1Z2dlcik7Ci0jZW5kaWYKLVNJTVBMRV9J
TlNQRUNUT1JfQ0FMTEJBQ0soY2xvc2VXaW5kb3csIGNsb3NlV2luZG93KTsKLVNJTVBMRV9JTlNQ
RUNUT1JfQ0FMTEJBQ0soY2xlYXJNZXNzYWdlcywgY2xlYXJDb25zb2xlTWVzc2FnZXMpOwotU0lN
UExFX0lOU1BFQ1RPUl9DQUxMQkFDSyhzdGFydFByb2ZpbGluZywgc3RhcnRVc2VySW5pdGlhdGVk
UHJvZmlsaW5nU29vbik7Ci1TSU1QTEVfSU5TUEVDVE9SX0NBTExCQUNLKHN0b3BQcm9maWxpbmcs
IHN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKTsKLVNJTVBMRV9JTlNQRUNUT1JfQ0FMTEJBQ0so
ZW5hYmxlUHJvZmlsZXIsIGVuYWJsZVByb2ZpbGVyKTsKLVNJTVBMRV9JTlNQRUNUT1JfQ0FMTEJB
Q0soZGlzYWJsZVByb2ZpbGVyLCBkaXNhYmxlUHJvZmlsZXIpOwotU0lNUExFX0lOU1BFQ1RPUl9D
QUxMQkFDSyh0b2dnbGVOb2RlU2VhcmNoLCB0b2dnbGVTZWFyY2hGb3JOb2RlSW5QYWdlKTsKLQot
I2RlZmluZSBCT09MX0lOU1BFQ1RPUl9DQUxMQkFDSyhqc0Z1bmN0aW9uLCBpbnNwZWN0b3JDb250
cm9sbGVyTWV0aG9kKSBcCi1zdGF0aWMgSlNWYWx1ZVJlZiBqc0Z1bmN0aW9uKEpTQ29udGV4dFJl
ZiBjdHgsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QsIGNvbnN0
IEpTVmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiopIFwKLXsgXAotICAgIGlmIChJbnNwZWN0b3JDb250
cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxJbnNwZWN0b3JDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKSkgXAotICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VCb29sZWFuKGN0eCwgY29udHJvbGxlci0+aW5zcGVjdG9yQ29udHJvbGxlck1ldGhv
ZCgpKTsgXAotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOyBcCi19Ci0KLSNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLUJPT0xfSU5TUEVDVE9SX0NBTExCQUNLKGRl
YnVnZ2VyRW5hYmxlZCwgZGVidWdnZXJFbmFibGVkKTsKLUJPT0xfSU5TUEVDVE9SX0NBTExCQUNL
KHBhdXNlT25FeGNlcHRpb25zLCBwYXVzZU9uRXhjZXB0aW9ucyk7Ci0jZW5kaWYKLUJPT0xfSU5T
UEVDVE9SX0NBTExCQUNLKHByb2ZpbGVyRW5hYmxlZCwgcHJvZmlsZXJFbmFibGVkKTsKLUJPT0xf
SU5TUEVDVE9SX0NBTExCQUNLKGlzV2luZG93VmlzaWJsZSwgd2luZG93VmlzaWJsZSk7Ci1CT09M
X0lOU1BFQ1RPUl9DQUxMQkFDSyhzZWFyY2hpbmdGb3JOb2RlLCBzZWFyY2hpbmdGb3JOb2RlSW5Q
YWdlKTsKLQotc3RhdGljIGJvb2wgYWRkU291cmNlVG9GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgTm9kZSogZnJhbWVOb2RlKQorYm9vbCBJbnNwZWN0
b3JDb250cm9sbGVyOjphZGRTb3VyY2VUb0ZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNv
bnN0IFN0cmluZyYgc291cmNlLCBOb2RlKiBmcmFtZU5vZGUpCiB7CiAgICAgQVNTRVJUX0FSRyhm
cmFtZU5vZGUsIGZyYW1lTm9kZSk7CiAKQEAgLTI1NCwzNzMgKzIwNyw3IEBAIHN0YXRpYyBib29s
IGFkZFNvdXJjZVRvRnJhbWUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBz
b3VyY2UsIE5vZGUqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIGFk
ZFJlc291cmNlU291cmNlVG9GcmFtZShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiAvKmZ1
bmN0aW9uKi8sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0g
ICAgSlNWYWx1ZVJlZiB1bmRlZmluZWQgPSBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0g
ICAgSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SW5z
cGVjdG9yQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAg
aWYgKGFyZ3VtZW50Q291bnQgPCAyIHx8ICFjb250cm9sbGVyKQotICAgICAgICByZXR1cm4gdW5k
ZWZpbmVkOwotCi0gICAgSlNWYWx1ZVJlZiBpZGVudGlmaWVyVmFsdWUgPSBhcmd1bWVudHNbMF07
Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY3R4LCBpZGVudGlmaWVyVmFsdWUpKQotICAgICAg
ICByZXR1cm4gdW5kZWZpbmVkOwotCi0gICAgbG9uZyBsb25nIGlkZW50aWZpZXIgPSBzdGF0aWNf
Y2FzdDxsb25nIGxvbmc+KEpTVmFsdWVUb051bWJlcihjdHgsIGlkZW50aWZpZXJWYWx1ZSwgZXhj
ZXB0aW9uKSk7Ci0gICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQotICAgICAgICByZXR1
cm4gdW5kZWZpbmVkOwotCi0gICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9
IGNvbnRyb2xsZXItPnJlc291cmNlcygpLmdldChpZGVudGlmaWVyKTsKLSAgICBBU1NFUlQocmVz
b3VyY2UpOwotICAgIGlmICghcmVzb3VyY2UpCi0gICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0K
LSAgICBTdHJpbmcgc291cmNlU3RyaW5nID0gcmVzb3VyY2UtPnNvdXJjZVN0cmluZygpOwotICAg
IGlmIChzb3VyY2VTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwot
Ci0gICAgYm9vbCBzdWNjZXNzZnVsbHlBZGRlZFNvdXJjZSA9IGFkZFNvdXJjZVRvRnJhbWUocmVz
b3VyY2UtPm1pbWVUeXBlLCBzb3VyY2VTdHJpbmcsIHRvTm9kZSh0b0pTKGFyZ3VtZW50c1sxXSkp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGN0eCwgc3VjY2Vzc2Z1bGx5QWRkZWRT
b3VyY2UpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBhZGRTb3VyY2VUb0ZyYW1lKEpTQ29udGV4
dFJlZiBjdHgsIEpTT2JqZWN0UmVmIC8qZnVuY3Rpb24qLywgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBKU1ZhbHVlUmVmIHVuZGVmaW5lZCA9IEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9s
bGVyID0gcmVpbnRlcnByZXRfY2FzdDxJbnNwZWN0b3JDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDMgfHwgIWNvbnRy
b2xsZXIpCi0gICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0KLSAgICBKU1ZhbHVlUmVmIG1pbWVU
eXBlVmFsdWUgPSBhcmd1bWVudHNbMF07Ci0gICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY3R4LCBt
aW1lVHlwZVZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLQotICAgIEpTVmFsdWVS
ZWYgc291cmNlVmFsdWUgPSBhcmd1bWVudHNbMV07Ci0gICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmco
Y3R4LCBzb3VyY2VWYWx1ZSkpCi0gICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0KLSAgICBTdHJp
bmcgbWltZVR5cGUgPSB0b1N0cmluZyhjdHgsIG1pbWVUeXBlVmFsdWUsIGV4Y2VwdGlvbik7Ci0g
ICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLQot
ICAgIFN0cmluZyBzb3VyY2UgPSB0b1N0cmluZyhjdHgsIHNvdXJjZVZhbHVlLCBleGNlcHRpb24p
OwotICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwot
Ci0gICAgYm9vbCBzdWNjZXNzZnVsbHlBZGRlZFNvdXJjZSA9IGFkZFNvdXJjZVRvRnJhbWUobWlt
ZVR5cGUsIHNvdXJjZSwgdG9Ob2RlKHRvSlMoYXJndW1lbnRzWzJdKSkpOwotICAgIHJldHVybiBK
U1ZhbHVlTWFrZUJvb2xlYW4oY3R4LCBzdWNjZXNzZnVsbHlBZGRlZFNvdXJjZSk7Ci19Ci0KLXN0
YXRpYyBKU1ZhbHVlUmVmIGdldFJlc291cmNlRG9jdW1lbnROb2RlKEpTQ29udGV4dFJlZiBjdHgs
IEpTT2JqZWN0UmVmIC8qZnVuY3Rpb24qLywgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKLXsKLSAgICBKU1ZhbHVlUmVmIHVuZGVmaW5lZCA9IEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGN0eCk7Ci0KLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVp
bnRlcnByZXRfY2FzdDxJbnNwZWN0b3JDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKLSAgICBpZiAoIWFyZ3VtZW50Q291bnQgfHwgYXJndW1lbnRDb3VudCA+IDEg
fHwgIWNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0KLSAgICBKU1ZhbHVl
UmVmIGlkZW50aWZpZXJWYWx1ZSA9IGFyZ3VtZW50c1swXTsKLSAgICBpZiAoIUpTVmFsdWVJc051
bWJlcihjdHgsIGlkZW50aWZpZXJWYWx1ZSkpCi0gICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0K
LSAgICBsb25nIGxvbmcgaWRlbnRpZmllciA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oSlNWYWx1
ZVRvTnVtYmVyKGN0eCwgaWRlbnRpZmllclZhbHVlLCBleGNlcHRpb24pKTsKLSAgICBpZiAoZXhj
ZXB0aW9uICYmICpleGNlcHRpb24pCi0gICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0KLSAgICBS
ZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+IHJlc291cmNlID0gY29udHJvbGxlci0+cmVzb3VyY2Vz
KCkuZ2V0KGlkZW50aWZpZXIpOwotICAgIEFTU0VSVChyZXNvdXJjZSk7Ci0gICAgaWYgKCFyZXNv
dXJjZSkKLSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLQotICAgIEZyYW1lKiBmcmFtZSA9IHJl
c291cmNlLT5mcmFtZS5nZXQoKTsKLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5k
b2N1bWVudCgpOwotCi0gICAgaWYgKGRvY3VtZW50LT5pc1BsdWdpbkRvY3VtZW50KCkgfHwgZG9j
dW1lbnQtPmlzSW1hZ2VEb2N1bWVudCgpIHx8IGRvY3VtZW50LT5pc01lZGlhRG9jdW1lbnQoKSkK
LSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlNE
T01XaW5kb3dTaGVsbChyZXNvdXJjZS0+ZnJhbWUuZ2V0KCkpLT53aW5kb3coKS0+Z2xvYmFsRXhl
YygpOwotCi0gICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgSlNWYWx1ZVJlZiBkb2N1
bWVudFZhbHVlID0gdG9SZWYoSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFwKGV4ZWMsIHRv
SlMoZXhlYywgZG9jdW1lbnQpKSk7Ci0gICAgcmV0dXJuIGRvY3VtZW50VmFsdWU7Ci19Ci0KLXN0
YXRpYyBKU1ZhbHVlUmVmIGhpZ2hsaWdodERPTU5vZGUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIC8qZnVuY3Rpb24qLywgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIC8q
ZXhjZXB0aW9uKi8pCi17Ci0gICAgSlNWYWx1ZVJlZiB1bmRlZmluZWQgPSBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSByZWludGVycHJldF9jYXN0PEluc3BlY3RvckNvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSB8fCAhY29udHJvbGxl
cikKLSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLQotICAgIEpTUXVhcmFudGluZWRPYmplY3RX
cmFwcGVyKiB3cmFwcGVyID0gSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmFzV3JhcHBlcih0
b0pTKGFyZ3VtZW50c1swXSkpOwotICAgIGlmICghd3JhcHBlcikKLSAgICAgICAgcmV0dXJuIHVu
ZGVmaW5lZDsKLSAgICBOb2RlKiBub2RlID0gdG9Ob2RlKHdyYXBwZXItPnVud3JhcHBlZE9iamVj
dCgpKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0KLSAgICBj
b250cm9sbGVyLT5oaWdobGlnaHQobm9kZSk7Ci0KLSAgICByZXR1cm4gdW5kZWZpbmVkOwotfQot
Ci1zdGF0aWMgSlNWYWx1ZVJlZiBzZWFyY2goSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYg
LypmdW5jdGlvbiovLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQot
ewotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0
PEluc3BlY3RvckNvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwot
ICAgIGlmICghY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGN0eCk7Ci0KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDIgfHwgIUpTVmFsdWVJc1N0cmluZyhj
dHgsIGFyZ3VtZW50c1sxXSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
dHgpOwotCi0gICAgTm9kZSogbm9kZSA9IHRvTm9kZSh0b0pTKGFyZ3VtZW50c1swXSkpOwotICAg
IGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0K
LSAgICBTdHJpbmcgdGFyZ2V0ID0gdG9TdHJpbmcoY3R4LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlv
bik7Ci0KLSAgICBKU09iamVjdFJlZiBnbG9iYWwgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3Qo
Y3R4KTsKLQotICAgIEpTVmFsdWVSZWYgYXJyYXlQcm9wZXJ0eSA9IEpTT2JqZWN0R2V0UHJvcGVy
dHkoY3R4LCBnbG9iYWwsIGpzU3RyaW5nUmVmKCJBcnJheSIpLmdldCgpLCBleGNlcHRpb24pOwot
ICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBKU09iamVjdFJlZiBhcnJheUNvbnN0cnVjdG9yID0g
SlNWYWx1ZVRvT2JqZWN0KGN0eCwgYXJyYXlQcm9wZXJ0eSwgZXhjZXB0aW9uKTsKLSAgICBpZiAo
ZXhjZXB0aW9uICYmICpleGNlcHRpb24pCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjdHgpOwotCi0gICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNDb25z
dHJ1Y3RvcihjdHgsIGFycmF5Q29uc3RydWN0b3IsIDAsIDAsIGV4Y2VwdGlvbik7Ci0gICAgaWYg
KGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY3R4KTsKLQotICAgIEpTVmFsdWVSZWYgcHVzaFByb3BlcnR5ID0gSlNPYmplY3RHZXRQ
cm9wZXJ0eShjdHgsIHJlc3VsdCwganNTdHJpbmdSZWYoInB1c2giKS5nZXQoKSwgZXhjZXB0aW9u
KTsKLSAgICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRpb24pCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgSlNPYmplY3RSZWYgcHVzaEZ1bmN0aW9uID0g
SlNWYWx1ZVRvT2JqZWN0KGN0eCwgcHVzaFByb3BlcnR5LCBleGNlcHRpb24pOwotICAgIGlmIChl
eGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGN0eCk7Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKHJhbmdlT2ZDb250ZW50
cyhub2RlKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBkbyB7Ci0gICAgICAg
IFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UoZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQo
KSwgdGFyZ2V0LCB0cnVlLCBmYWxzZSkpOwotICAgICAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxh
cHNlZChlYykpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBBIG5vbi1jb2xsYXBz
ZWQgcmVzdWx0IHJhbmdlIGNhbiBpbiBzb21lIGZ1bmt5IHdoaXRlc3BhY2UgY2FzZXMgc3RpbGwg
bm90Ci0gICAgICAgIC8vIGFkdmFuY2UgdGhlIHJhbmdlJ3Mgc3RhcnQgcG9zaXRpb24gKDQ1MDkz
MjgpLiBCcmVhayB0byBhdm9pZCBpbmZpbml0ZSBsb29wLgotICAgICAgICBWaXNpYmxlUG9zaXRp
b24gbmV3U3RhcnQgPSBlbmRWaXNpYmxlUG9zaXRpb24ocmVzdWx0UmFuZ2UuZ2V0KCksIERPV05T
VFJFQU0pOwotICAgICAgICBpZiAobmV3U3RhcnQgPT0gc3RhcnRWaXNpYmxlUG9zaXRpb24oc2Vh
cmNoUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgICAgIEpTVmFsdWVSZWYgYXJnMCA9IHRv
UmVmKHRvSlModG9KUyhjdHgpLCByZXN1bHRSYW5nZS5nZXQoKSkpOwotICAgICAgICBKU09iamVj
dENhbGxBc0Z1bmN0aW9uKGN0eCwgcHVzaEZ1bmN0aW9uLCByZXN1bHQsIDEsICZhcmcwLCBleGNl
cHRpb24pOwotICAgICAgICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRpb24pCi0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgICAgICBzZXRTdGFydChz
ZWFyY2hSYW5nZS5nZXQoKSwgbmV3U3RhcnQpOwotICAgIH0gd2hpbGUgKHRydWUpOwotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotI2lmIEVOQUJMRShEQVRBQkFTRSkKLXN0YXRpYyBKU1ZhbHVl
UmVmIGRhdGFiYXNlVGFibGVOYW1lcyhKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiAvKmZ1
bmN0aW9uKi8sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0g
ICAgSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SW5z
cGVjdG9yQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAg
aWYgKCFjb250cm9sbGVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4
KTsKLQotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlciogd3Jh
cHBlciA9IEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjphc1dyYXBwZXIodG9KUyhhcmd1bWVu
dHNbMF0pKTsKLSAgICBpZiAoIXdyYXBwZXIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjdHgpOwotCi0gICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gdG9EYXRhYmFzZSh3cmFw
cGVyLT51bndyYXBwZWRPYmplY3QoKSk7Ci0gICAgaWYgKCFkYXRhYmFzZSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBKU09iamVjdFJlZiBnbG9iYWwg
PSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY3R4KTsKLQotICAgIEpTVmFsdWVSZWYgYXJyYXlQ
cm9wZXJ0eSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY3R4LCBnbG9iYWwsIGpzU3RyaW5nUmVmKCJB
cnJheSIpLmdldCgpLCBleGNlcHRpb24pOwotICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlv
bikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBKU09i
amVjdFJlZiBhcnJheUNvbnN0cnVjdG9yID0gSlNWYWx1ZVRvT2JqZWN0KGN0eCwgYXJyYXlQcm9w
ZXJ0eSwgZXhjZXB0aW9uKTsKLSAgICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRpb24pCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgSlNPYmplY3RSZWYg
cmVzdWx0ID0gSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvcihjdHgsIGFycmF5Q29uc3RydWN0b3Is
IDAsIDAsIGV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIEpTVmFsdWVSZWYg
cHVzaFByb3BlcnR5ID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjdHgsIHJlc3VsdCwganNTdHJpbmdS
ZWYoInB1c2giKS5nZXQoKSwgZXhjZXB0aW9uKTsKLSAgICBpZiAoZXhjZXB0aW9uICYmICpleGNl
cHRpb24pCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAg
SlNPYmplY3RSZWYgcHVzaEZ1bmN0aW9uID0gSlNWYWx1ZVRvT2JqZWN0KGN0eCwgcHVzaFByb3Bl
cnR5LCBleGNlcHRpb24pOwotICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBWZWN0b3I8U3RyaW5n
PiB0YWJsZU5hbWVzID0gZGF0YWJhc2UtPnRhYmxlTmFtZXMoKTsKLSAgICB1bnNpZ25lZCBsZW5n
dGggPSB0YWJsZU5hbWVzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSA9IHRhYmxlTmFtZXNbaV07Ci0g
ICAgICAgIEpTVmFsdWVSZWYgdGFibGVOYW1lVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhjdHgs
IGpzU3RyaW5nUmVmKHRhYmxlTmFtZSkuZ2V0KCkpOwotCi0gICAgICAgIEpTVmFsdWVSZWYgcHVz
aEFyZ3VtZW50c1tdID0geyB0YWJsZU5hbWVWYWx1ZSB9OwotICAgICAgICBKU09iamVjdENhbGxB
c0Z1bmN0aW9uKGN0eCwgcHVzaEZ1bmN0aW9uLCByZXN1bHQsIDEsIHB1c2hBcmd1bWVudHMsIGV4
Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotICAgIH0KLQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0jZW5kaWYKLQotc3RhdGljIEpTVmFsdWVSZWYgaW5zcGVjdGVkV2luZG93
KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIC8qZnVuY3Rpb24qLywgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IC8qYXJndW1lbnRDb3VudCovLCBjb25zdCBKU1ZhbHVlUmVmW10g
Lyphcmd1bWVudHNbXSovLCBKU1ZhbHVlUmVmKiAvKmV4Y2VwdGlvbiovKQotewotICAgIEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PEluc3BlY3RvckNv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGlmICghY29u
dHJvbGxlcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAg
ICBKU0RPTVdpbmRvdyogaW5zcGVjdGVkV2luZG93ID0gdG9KU0RPTVdpbmRvdyhjb250cm9sbGVy
LT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpKTsKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7
Ci0gICAgcmV0dXJuIHRvUmVmKEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChpbnNwZWN0
ZWRXaW5kb3ctPmdsb2JhbEV4ZWMoKSwgaW5zcGVjdGVkV2luZG93KSk7Ci19Ci0KLXN0YXRpYyBK
U1ZhbHVlUmVmIHNldHRpbmcoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgLypmdW5jdGlv
biovLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgLyphcmd1bWVudENvdW50Ki8sIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAg
ICBJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxJbnNw
ZWN0b3JDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBp
ZiAoIWNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgp
OwotCi0gICAgSlNWYWx1ZVJlZiBrZXlWYWx1ZSA9IGFyZ3VtZW50c1swXTsKLSAgICBpZiAoIUpT
VmFsdWVJc1N0cmluZyhjdHgsIGtleVZhbHVlKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5n
JiBzZXR0aW5nID0gY29udHJvbGxlci0+c2V0dGluZyh0b1N0cmluZyhjdHgsIGtleVZhbHVlLCBl
eGNlcHRpb24pKTsKLQotICAgIHN3aXRjaCAoc2V0dGluZy50eXBlKCkpIHsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpOb1R5cGU6
Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLSAgICAgICAg
Y2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdUeXBlOgotICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGN0eCwganNTdHJpbmdSZWYoc2V0dGluZy5zdHJp
bmcoKSkuZ2V0KCkpOwotICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6
OkRvdWJsZVR5cGU6Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY3R4LCBz
ZXR0aW5nLmRvdWJsZVZhbHVlKCkpOwotICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6
OlNldHRpbmc6OkludGVnZXJUeXBlOgotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVt
YmVyKGN0eCwgc2V0dGluZy5pbnRlZ2VyVmFsdWUoKSk7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9y
Q29udHJvbGxlcjo6U2V0dGluZzo6Qm9vbGVhblR5cGU6Ci0gICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VCb29sZWFuKGN0eCwgc2V0dGluZy5ib29sZWFuVmFsdWUoKSk7Ci0gICAgICAgIGNh
c2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6U3RyaW5nVmVjdG9yVHlwZTogewotICAg
ICAgICAgICAgVmVjdG9yPEpTVmFsdWVSZWY+IHN0cmluZ1ZhbHVlczsKLSAgICAgICAgICAgIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBzdHJpbmdzID0gc2V0dGluZy5zdHJpbmdWZWN0b3IoKTsKLSAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZ3Muc2l6ZSgpOwotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAg
ICAgIHN0cmluZ1ZhbHVlcy5hcHBlbmQoSlNWYWx1ZU1ha2VTdHJpbmcoY3R4LCBqc1N0cmluZ1Jl
ZihzdHJpbmdzW2ldKS5nZXQoKSkpOwotCi0gICAgICAgICAgICBKU09iamVjdFJlZiBzdHJpbmdz
QXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShjdHgsIHN0cmluZ1ZhbHVlcy5zaXplKCksIHN0cmlu
Z1ZhbHVlcy5kYXRhKCksIGV4Y2VwdGlvbik7Ci0gICAgICAgICAgICBpZiAoZXhjZXB0aW9uICYm
ICpleGNlcHRpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGN0eCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RyaW5nc0FycmF5OwotICAgICAgICB9Ci0gICAg
fQotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRTZXR0aW5nKEpTQ29udGV4dFJlZiBjdHgsIEpT
T2JqZWN0UmVmIC8qZnVuY3Rpb24qLywgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IC8q
YXJndW1lbnRDb3VudCovLCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCi17Ci0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8SW5zcGVjdG9yQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7Ci0gICAgaWYgKCFjb250cm9sbGVyKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIEpTVmFsdWVSZWYga2V5VmFsdWUgPSBhcmd1bWVu
dHNbMF07Ci0gICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY3R4LCBrZXlWYWx1ZSkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgSW5zcGVjdG9yQ29udHJv
bGxlcjo6U2V0dGluZyBzZXR0aW5nOwotCi0gICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IGFyZ3VtZW50
c1sxXTsKLSAgICBzd2l0Y2ggKEpTVmFsdWVHZXRUeXBlKGN0eCwgdmFsdWUpKSB7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGNhc2Uga0pTVHlwZVVuZGVmaW5lZDoKLSAgICAgICAgY2FzZSBr
SlNUeXBlTnVsbDoKLSAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuIFRoZSBzZXR0aW5nIGlzIGFs
cmVhZHkgTm9UeXBlLgotICAgICAgICAgICAgQVNTRVJUKHNldHRpbmcudHlwZSgpID09IEluc3Bl
Y3RvckNvbnRyb2xsZXI6OlNldHRpbmc6Ok5vVHlwZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBrSlNUeXBlU3RyaW5nOgotICAgICAgICAgICAgc2V0dGluZy5zZXQodG9TdHJp
bmcoY3R4LCB2YWx1ZSwgZXhjZXB0aW9uKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBrSlNUeXBlTnVtYmVyOgotICAgICAgICAgICAgc2V0dGluZy5zZXQoSlNWYWx1ZVRvTnVt
YmVyKGN0eCwgdmFsdWUsIGV4Y2VwdGlvbikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2Uga0pTVHlwZUJvb2xlYW46Ci0gICAgICAgICAgICBzZXR0aW5nLnNldChKU1ZhbHVlVG9C
b29sZWFuKGN0eCwgdmFsdWUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGtK
U1R5cGVPYmplY3Q6IHsKLSAgICAgICAgICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVU
b09iamVjdChjdHgsIHZhbHVlLCAwKTsKLSAgICAgICAgICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFs
dWUgPSBKU09iamVjdEdldFByb3BlcnR5KGN0eCwgb2JqZWN0LCBqc1N0cmluZ1JlZigibGVuZ3Ro
IikuZ2V0KCksIGV4Y2VwdGlvbik7Ci0gICAgICAgICAgICBpZiAoZXhjZXB0aW9uICYmICpleGNl
cHRpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7
Ci0KLSAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHN0cmluZ3M7Ci0gICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBsZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVy
KGN0eCwgbGVuZ3RoVmFsdWUsIDApKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYgaXRlbVZhbHVl
ID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY3R4LCBvYmplY3QsIGksIGV4Y2VwdGlvbik7
Ci0gICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLSAgICAgICAgICAg
ICAgICBzdHJpbmdzLmFwcGVuZCh0b1N0cmluZyhjdHgsIGl0ZW1WYWx1ZSwgZXhjZXB0aW9uKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgc2V0dGluZy5zZXQoc3RyaW5ncyk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBjb250cm9s
bGVyLT5zZXRTZXR0aW5nKHRvU3RyaW5nKGN0eCwga2V5VmFsdWUsIGV4Y2VwdGlvbiksIHNldHRp
bmcpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci19Ci0KLXN0YXRp
YyBKU1ZhbHVlUmVmIGxvY2FsaXplZFN0cmluZ3MoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RS
ZWYgLypmdW5jdGlvbiovLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgLyphcmd1bWVu
dENvdW50Ki8sIGNvbnN0IEpTVmFsdWVSZWZbXSAvKmFyZ3VtZW50c1tdKi8sIEpTVmFsdWVSZWYq
IC8qZXhjZXB0aW9uKi8pCi17Ci0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8SW5zcGVjdG9yQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7Ci0gICAgaWYgKCFjb250cm9sbGVyKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIFN0cmluZyB1cmwgPSBjb250cm9sbGVyLT5s
b2NhbGl6ZWRTdHJpbmdzVVJMKCk7Ci0gICAgaWYgKHVybC5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlTnVsbChjdHgpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5n
KGN0eCwganNTdHJpbmdSZWYodXJsKS5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGhp
ZGRlblBhbmVscyhKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiAvKmZ1bmN0aW9uKi8sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCAvKmFyZ3VtZW50Q291bnQqLywgY29uc3QgSlNW
YWx1ZVJlZltdIC8qYXJndW1lbnRzW10qLywgSlNWYWx1ZVJlZiogLypleGNlcHRpb24qLykKLXsK
LSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxJ
bnNwZWN0b3JDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAg
ICBpZiAoIWNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
dHgpOwotCi0gICAgU3RyaW5nIGhpZGRlblBhbmVscyA9IGNvbnRyb2xsZXItPmhpZGRlblBhbmVs
cygpOwotICAgIGlmIChoaWRkZW5QYW5lbHMuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZU51bGwoY3R4KTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjdHgsIGpz
U3RyaW5nUmVmKGhpZGRlblBhbmVscykuZ2V0KCkpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBw
bGF0Zm9ybShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiAvKmZ1bmN0aW9uKi8sIEpTT2Jq
ZWN0UmVmIC8qdGhpc09iamVjdCovLCBzaXplX3QgLyphcmd1bWVudENvdW50Ki8sIGNvbnN0IEpT
VmFsdWVSZWZbXSAvKmFyZ3VtZW50c1tdKi8sIEpTVmFsdWVSZWYqIC8qZXhjZXB0aW9uKi8pCitj
b25zdCBTdHJpbmcmIEluc3BlY3RvckNvbnRyb2xsZXI6OnBsYXRmb3JtKCkgY29uc3QKIHsKICNp
ZiBQTEFURk9STShNQUMpCiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKQEAgLTY0MCwxODQgKzIy
Nyw5IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHBsYXRmb3JtKEpTQ29udGV4dFJlZiBjdHgsIEpTT2Jq
ZWN0UmVmIC8qZnVuY3Rpb24qLywgSlNPYmplY3RSCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoInVua25vd24iKSk7CiAjZW5kaWYKIAotICAgIEpTVmFs
dWVSZWYgcGxhdGZvcm1WYWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5nKGN0eCwganNTdHJpbmdSZWYo
cGxhdGZvcm0pLmdldCgpKTsKLQotICAgIHJldHVybiBwbGF0Zm9ybVZhbHVlOwotfQotCi1zdGF0
aWMgSlNWYWx1ZVJlZiBtb3ZlQnlVbnJlc3RyaWN0ZWQoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmpl
Y3RSZWYgLypmdW5jdGlvbiovLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQotewotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJl
dF9jYXN0PEluc3BlY3RvckNvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwotICAgIGlmICghY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGN0eCk7Ci0KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDIpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgZG91YmxlIHggPSBKU1ZhbHVlVG9O
dW1iZXIoY3R4LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbiAm
JiAqZXhjZXB0aW9uKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsK
LQotICAgIGRvdWJsZSB5ID0gSlNWYWx1ZVRvTnVtYmVyKGN0eCwgYXJndW1lbnRzWzFdLCBleGNl
cHRpb24pOwotICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBjb250cm9sbGVyLT5tb3ZlV2luZG93
QnkobmFycm93UHJlY2lzaW9uVG9GbG9hdCh4KSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdCh5KSk7
Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLX0KLQotc3RhdGljIEpT
VmFsdWVSZWYgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmpl
Y3RSZWYgLypmdW5jdGlvbiovLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQotewotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJl
dF9jYXN0PEluc3BlY3RvckNvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwotICAgIGlmICghY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGN0eCk7Ci0KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgdW5zaWduZWQgaGVpZ2h0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjdHgsIGFyZ3VtZW50c1swXSwgZXhj
ZXB0aW9uKSk7Ci0gICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIGNvbnRyb2xsZXItPnNldEF0dGFj
aGVkV2luZG93SGVpZ2h0KGhlaWdodCk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY3R4KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgd3JhcENhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjdHgsIEpTT2JqZWN0UmVmIC8qZnVuY3Rpb24qLywgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIC8qZXhjZXB0aW9uKi8pCi17Ci0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJv
bGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SW5zcGVjdG9yQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgaWYgKCFjb250cm9sbGVyKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIGlmIChhcmd1bWVudENvdW50IDwg
MSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBKU0xv
Y2sgbG9jayhmYWxzZSk7Ci0gICAgcmV0dXJuIHRvUmVmKEpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFw
cGVyOjp3cmFwKHRvSlMoY3R4KSwgdG9KUyhhcmd1bWVudHNbMF0pKSk7Ci19Ci0KLSNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLXN0YXRpYyBKU1ZhbHVlUmVmIGN1cnJlbnRDYWxsRnJh
bWUoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgLypmdW5jdGlvbiovLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgLyphcmd1bWVudENvdW50Ki8sIGNvbnN0IEpTVmFsdWVSZWZb
XSAvKmFyZ3VtZW50cyovLCBKU1ZhbHVlUmVmKiAvKmV4Y2VwdGlvbiovKQotewotICAgIEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PEluc3BlY3RvckNv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGlmICghY29u
dHJvbGxlcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAg
ICBKYXZhU2NyaXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250cm9sbGVyLT5jdXJyZW50Q2Fs
bEZyYW1lKCk7Ci0gICAgaWYgKCFjYWxsRnJhbWUgfHwgIWNhbGxGcmFtZS0+aXNWYWxpZCgpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdWxsKGN0eCk7Ci0KLSAgICBFeGVjU3RhdGUqIGds
b2JhbEV4ZWMgPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKLQotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICByZXR1cm4gdG9SZWYoSlNJ
bnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFwKGdsb2JhbEV4ZWMsIHRvSlModG9KUyhjdHgpLCBj
YWxsRnJhbWUpKSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFBhdXNlT25FeGNlcHRpb25z
KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIC8qZnVuY3Rpb24qLywgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIC8qZXhjZXB0aW9uKi8pCi17Ci0gICAgSW5zcGVjdG9yQ29udHJv
bGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SW5zcGVjdG9yQ29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgaWYgKCFjb250cm9sbGVyKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIGlmIChhcmd1
bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7
Ci0KLSAgICBjb250cm9sbGVyLT5zZXRQYXVzZU9uRXhjZXB0aW9ucyhKU1ZhbHVlVG9Cb29sZWFu
KGN0eCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y3R4KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgYWRkQnJlYWtwb2ludChKU0NvbnRleHRSZWYg
Y3R4LCBKU09iamVjdFJlZiAvKmZ1bmN0aW9uKi8sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCi17Ci0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8SW5zcGVjdG9yQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7Ci0gICAgaWYgKCFjb250cm9sbGVyKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBkb3VibGUgc291
cmNlSUQgPSBKU1ZhbHVlVG9OdW1iZXIoY3R4LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7Ci0g
ICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY3R4KTsKLQotICAgIGRvdWJsZSBsaW5lTnVtYmVyID0gSlNWYWx1ZVRvTnVt
YmVyKGN0eCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pOwotICAgIGlmIChleGNlcHRpb24gJiYg
KmV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0K
LSAgICBjb250cm9sbGVyLT5hZGRCcmVha3BvaW50KHN0YXRpY19jYXN0PGludD4oc291cmNlSUQp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGluZU51bWJlcikpOwotCi0gICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHJlbW92ZUJyZWFr
cG9pbnQoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgLypmdW5jdGlvbiovLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIEluc3BlY3RvckNvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PEluc3BlY3RvckNvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGlmICghY29udHJvbGxlcikK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IDIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgp
OwotCi0gICAgZG91YmxlIHNvdXJjZUlEID0gSlNWYWx1ZVRvTnVtYmVyKGN0eCwgYXJndW1lbnRz
WzBdLCBleGNlcHRpb24pOwotICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBkb3VibGUgbGluZU51
bWJlciA9IEpTVmFsdWVUb051bWJlcihjdHgsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKTsKLSAg
ICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRpb24pCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjdHgpOwotCi0gICAgY29udHJvbGxlci0+cmVtb3ZlQnJlYWtwb2ludChzdGF0
aWNfY2FzdDxpbnQ+KHNvdXJjZUlEKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxpbmVOdW1iZXIp
KTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotfQotI2VuZGlmCi0K
LXN0YXRpYyBKU1ZhbHVlUmVmIHByb2ZpbGVzKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVm
IC8qZnVuY3Rpb24qLywgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IC8qYXJndW1lbnRD
b3VudCovLCBjb25zdCBKU1ZhbHVlUmVmW10gLyphcmd1bWVudHMqLywgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQotewotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVy
cHJldF9jYXN0PEluc3BlY3RvckNvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwotICAgIGlmICghY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7Ci0KLSAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPFByb2ZpbGU+ID4mIHByb2ZpbGVzID0gY29udHJvbGxlci0+cHJvZmlsZXMo
KTsKLQotICAgIEpTT2JqZWN0UmVmIGdsb2JhbCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChj
dHgpOwotCi0gICAgSlNWYWx1ZVJlZiBhcnJheVByb3BlcnR5ID0gSlNPYmplY3RHZXRQcm9wZXJ0
eShjdHgsIGdsb2JhbCwganNTdHJpbmdSZWYoIkFycmF5IikuZ2V0KCksIGV4Y2VwdGlvbik7Ci0g
ICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY3R4KTsKLQotICAgIEpTT2JqZWN0UmVmIGFycmF5Q29uc3RydWN0b3IgPSBK
U1ZhbHVlVG9PYmplY3QoY3R4LCBhcnJheVByb3BlcnR5LCBleGNlcHRpb24pOwotICAgIGlmIChl
eGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGN0eCk7Ci0KLSAgICBKU09iamVjdFJlZiByZXN1bHQgPSBKU09iamVjdENhbGxBc0NvbnN0
cnVjdG9yKGN0eCwgYXJyYXlDb25zdHJ1Y3RvciwgMCwgMCwgZXhjZXB0aW9uKTsKLSAgICBpZiAo
ZXhjZXB0aW9uICYmICpleGNlcHRpb24pCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjdHgpOwotCi0gICAgSlNWYWx1ZVJlZiBwdXNoUHJvcGVydHkgPSBKU09iamVjdEdldFBy
b3BlcnR5KGN0eCwgcmVzdWx0LCBqc1N0cmluZ1JlZigicHVzaCIpLmdldCgpLCBleGNlcHRpb24p
OwotICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBKU09iamVjdFJlZiBwdXNoRnVuY3Rpb24gPSBK
U1ZhbHVlVG9PYmplY3QoY3R4LCBwdXNoUHJvcGVydHksIGV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4
Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY3R4KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZmlsZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgSlNWYWx1ZVJlZiBhcmcwID0gdG9SZWYodG9KUyh0b0pTKGN0eCksIHBy
b2ZpbGVzW2ldLmdldCgpKSk7Ci0gICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY3R4LCBw
dXNoRnVuY3Rpb24sIHJlc3VsdCwgMSwgJmFyZzAsIGV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChl
eGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjdHgpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHBs
YXRmb3JtOwogfQogCi0vLyBJbnNwZWN0b3JDb250cm9sbGVyIENsYXNzCi0KIHN0YXRpYyB1bnNp
Z25lZCBzX2luc3BlY3RvckNvbnRyb2xsZXJDb3VudDsKIHN0YXRpYyBIYXNoTWFwPFN0cmluZywg
SW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZyo+KiBzX3NldHRpbmdDYWNoZTsKIApAQCAtMTI1
Miw4NCArNjY0LDEzIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2luZG93U2NyaXB0T2Jq
ZWN0QXZhaWxhYmxlKCkKICAgICBpZiAoIW1fcGFnZSB8fCAhZW5hYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX3NjcmlwdENvbnRleHQgPSB0b1JlZihtX3BhZ2UtPm1haW5GcmFtZSgp
LT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7Ci0KLSAgICBKU09iamVj
dFJlZiBnbG9iYWwgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QobV9zY3JpcHRDb250ZXh0KTsK
LSAgICBBU1NFUlQoZ2xvYmFsKTsKLQotICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRp
Y0Z1bmN0aW9uc1tdID0gewotICAgICAgICAvLyBTSU1QTEVfSU5TUEVDVE9SX0NBTExCQUNLCi0g
ICAgICAgIHsgImhpZGVET01Ob2RlSGlnaGxpZ2h0IiwgV2ViQ29yZTo6aGlkZURPTU5vZGVIaWdo
bGlnaHQsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgICAgICB7ICJsb2FkZWQiLCBX
ZWJDb3JlOjpsb2FkZWQsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgICAgICB7ICJ3
aW5kb3dVbmxvYWRpbmciLCBXZWJDb3JlOjp1bmxvYWRpbmcsIGtKU1Byb3BlcnR5QXR0cmlidXRl
Tm9uZSB9LAotICAgICAgICB7ICJhdHRhY2giLCBXZWJDb3JlOjphdHRhY2gsIGtKU1Byb3BlcnR5
QXR0cmlidXRlTm9uZSB9LAotICAgICAgICB7ICJkZXRhY2giLCBXZWJDb3JlOjpkZXRhY2gsIGtK
U1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQotICAgICAgICB7ICJlbmFibGVEZWJ1Z2dlciIsIFdlYkNvcmU6OmVuYWJsZURlYnVnZ2VyLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSAgICAgICAgeyAiZGlzYWJsZURlYnVnZ2VyIiwg
V2ViQ29yZTo6ZGlzYWJsZURlYnVnZ2VyLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSAg
ICAgICAgeyAicGF1c2VJbkRlYnVnZ2VyIiwgV2ViQ29yZTo6cGF1c2VJbkRlYnVnZ2VyLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSAgICAgICAgeyAicmVzdW1lRGVidWdnZXIiLCBXZWJD
b3JlOjpyZXN1bWVEZWJ1Z2dlciwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0gICAgICAg
IHsgInN0ZXBPdmVyU3RhdGVtZW50SW5EZWJ1Z2dlciIsIFdlYkNvcmU6OnN0ZXBPdmVyU3RhdGVt
ZW50SW5EZWJ1Z2dlciwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0gICAgICAgIHsgInN0
ZXBJbnRvU3RhdGVtZW50SW5EZWJ1Z2dlciIsIFdlYkNvcmU6OnN0ZXBJbnRvU3RhdGVtZW50SW5E
ZWJ1Z2dlciwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0gICAgICAgIHsgInN0ZXBPdXRP
ZkZ1bmN0aW9uSW5EZWJ1Z2dlciIsIFdlYkNvcmU6OnN0ZXBPdXRPZkZ1bmN0aW9uSW5EZWJ1Z2dl
ciwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0jZW5kaWYKLSAgICAgICAgeyAiY2xvc2VX
aW5kb3ciLCBXZWJDb3JlOjpjbG9zZVdpbmRvdywga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0s
Ci0gICAgICAgIHsgImNsZWFyTWVzc2FnZXMiLCBXZWJDb3JlOjpjbGVhck1lc3NhZ2VzLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSAgICAgICAgeyAic3RhcnRQcm9maWxpbmciLCBXZWJD
b3JlOjpzdGFydFByb2ZpbGluZywga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0gICAgICAg
IHsgInN0b3BQcm9maWxpbmciLCBXZWJDb3JlOjpzdG9wUHJvZmlsaW5nLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZU5vbmUgfSwKLSAgICAgICAgeyAiZW5hYmxlUHJvZmlsZXIiLCBXZWJDb3JlOjplbmFi
bGVQcm9maWxlciwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0gICAgICAgIHsgImRpc2Fi
bGVQcm9maWxlciIsIFdlYkNvcmU6OmRpc2FibGVQcm9maWxlciwga0pTUHJvcGVydHlBdHRyaWJ1
dGVOb25lIH0sCi0gICAgICAgIHsgInRvZ2dsZU5vZGVTZWFyY2giLCBXZWJDb3JlOjp0b2dnbGVO
b2RlU2VhcmNoLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLQotICAgICAgICAvLyBCT09M
X0lOU1BFQ1RPUl9DQUxMQkFDSwotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAg
ICAgICB7ICJkZWJ1Z2dlckVuYWJsZWQiLCBXZWJDb3JlOjpkZWJ1Z2dlckVuYWJsZWQsIGtKU1By
b3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgICAgICB7ICJwYXVzZU9uRXhjZXB0aW9ucyIsIFdl
YkNvcmU6OnBhdXNlT25FeGNlcHRpb25zLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSNl
bmRpZgotICAgICAgICB7ICJwcm9maWxlckVuYWJsZWQiLCBXZWJDb3JlOjpwcm9maWxlckVuYWJs
ZWQsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgICAgICB7ICJpc1dpbmRvd1Zpc2li
bGUiLCBXZWJDb3JlOjppc1dpbmRvd1Zpc2libGUsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9
LAotICAgICAgICB7ICJzZWFyY2hpbmdGb3JOb2RlIiwgV2ViQ29yZTo6c2VhcmNoaW5nRm9yTm9k
ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0KLSAgICAgICAgLy8gQ3VzdG9tIGNhbGxi
YWNrcwotICAgICAgICB7ICJhZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUiLCBXZWJDb3JlOjphZGRS
ZXNvdXJjZVNvdXJjZVRvRnJhbWUsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgICAg
ICB7ICJhZGRTb3VyY2VUb0ZyYW1lIiwgV2ViQ29yZTo6YWRkU291cmNlVG9GcmFtZSwga0pTUHJv
cGVydHlBdHRyaWJ1dGVOb25lIH0sCi0gICAgICAgIHsgImdldFJlc291cmNlRG9jdW1lbnROb2Rl
IiwgV2ViQ29yZTo6Z2V0UmVzb3VyY2VEb2N1bWVudE5vZGUsIGtKU1Byb3BlcnR5QXR0cmlidXRl
Tm9uZSB9LAotICAgICAgICB7ICJoaWdobGlnaHRET01Ob2RlIiwgV2ViQ29yZTo6aGlnaGxpZ2h0
RE9NTm9kZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0gICAgICAgIHsgInNlYXJjaCIs
IFdlYkNvcmU6OnNlYXJjaCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0jaWYgRU5BQkxF
KERBVEFCQVNFKQotICAgICAgICB7ICJkYXRhYmFzZVRhYmxlTmFtZXMiLCBXZWJDb3JlOjpkYXRh
YmFzZVRhYmxlTmFtZXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotI2VuZGlmCi0gICAg
ICAgIHsgInNldHRpbmciLCBXZWJDb3JlOjpzZXR0aW5nLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5v
bmUgfSwKLSAgICAgICAgeyAic2V0U2V0dGluZyIsIFdlYkNvcmU6OnNldFNldHRpbmcsIGtKU1By
b3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgICAgICB7ICJpbnNwZWN0ZWRXaW5kb3ciLCBXZWJD
b3JlOjppbnNwZWN0ZWRXaW5kb3csIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgICAg
ICB7ICJsb2NhbGl6ZWRTdHJpbmdzVVJMIiwgV2ViQ29yZTo6bG9jYWxpemVkU3RyaW5ncywga0pT
UHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0gICAgICAgIHsgImhpZGRlblBhbmVscyIsIFdlYkNv
cmU6OmhpZGRlblBhbmVscywga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0gICAgICAgIHsg
InBsYXRmb3JtIiwgV2ViQ29yZTo6cGxhdGZvcm0sIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9
LAotICAgICAgICB7ICJtb3ZlQnlVbnJlc3RyaWN0ZWQiLCBXZWJDb3JlOjptb3ZlQnlVbnJlc3Ry
aWN0ZWQsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgICAgICB7ICJzZXRBdHRhY2hl
ZFdpbmRvd0hlaWdodCIsIFdlYkNvcmU6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0LCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSAgICAgICAgeyAid3JhcENhbGxiYWNrIiwgV2ViQ29yZTo6
d3JhcENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKLSAgICAgICAgeyAiY3VycmVudENhbGxGcmFtZSIsIFdlYkNvcmU6
OmN1cnJlbnRDYWxsRnJhbWUsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgICAgICB7
ICJzZXRQYXVzZU9uRXhjZXB0aW9ucyIsIFdlYkNvcmU6OnNldFBhdXNlT25FeGNlcHRpb25zLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSAgICAgICAgeyAiYWRkQnJlYWtwb2ludCIsIFdl
YkNvcmU6OmFkZEJyZWFrcG9pbnQsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgICAg
ICB7ICJyZW1vdmVCcmVha3BvaW50IiwgV2ViQ29yZTo6cmVtb3ZlQnJlYWtwb2ludCwga0pTUHJv
cGVydHlBdHRyaWJ1dGVOb25lIH0sCi0jZW5kaWYKLSAgICAgICAgeyAicHJvZmlsZXMiLCBXZWJD
b3JlOjpwcm9maWxlcywga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0gICAgICAgIHsgMCwg
MCwgMCB9Ci0gICAgfTsKLQotICAgIEpTQ2xhc3NEZWZpbml0aW9uIGluc3BlY3RvckNvbnRyb2xs
ZXJEZWZpbml0aW9uID0gewotICAgICAgICAwLCBrSlNDbGFzc0F0dHJpYnV0ZU5vbmUsICJJbnNw
ZWN0b3JDb250cm9sbGVyIiwgMCwgMCwgc3RhdGljRnVuY3Rpb25zLAotICAgICAgICAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCi0gICAgfTsKLQotICAgIEpTQ2xhc3NSZWYgY29udHJv
bGxlckNsYXNzID0gSlNDbGFzc0NyZWF0ZSgmaW5zcGVjdG9yQ29udHJvbGxlckRlZmluaXRpb24p
OwotICAgIEFTU0VSVChjb250cm9sbGVyQ2xhc3MpOwotCi0gICAgbV9jb250cm9sbGVyU2NyaXB0
T2JqZWN0ID0gSlNPYmplY3RNYWtlKG1fc2NyaXB0Q29udGV4dCwgY29udHJvbGxlckNsYXNzLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPih0aGlzKSk7Ci0gICAgQVNTRVJUKG1fY29udHJvbGxlclNj
cmlwdE9iamVjdCk7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KG1fc2NyaXB0Q29udGV4dCwg
Z2xvYmFsLCBqc1N0cmluZ1JlZigiSW5zcGVjdG9yQ29udHJvbGxlciIpLmdldCgpLCBtX2NvbnRy
b2xsZXJTY3JpcHRPYmplY3QsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgMCk7CisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIGNsZWFuZWQgdXAuIEFQSSBNaXgtdXAuCisgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnNjcmlwdCgpLT5n
bG9iYWxPYmplY3QoKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKKyAgICBtX3NjcmlwdENvbnRleHQgPSB0b1JlZihleGVjKTsKKyAgICBKU1ZhbHVl
UHRyIGpzSW5zcGVjdG9yID0gdG9KUyhleGVjLCB0aGlzKTsKKyAgICBtX2NvbnRyb2xsZXJTY3Jp
cHRPYmplY3QgPSB0b1JlZihhc09iamVjdChqc0luc3BlY3RvcikpOworICAgIGdsb2JhbE9iamVj
dC0+cHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIkluc3BlY3RvckNvbnRyb2xsZXIiKSwganNJ
bnNwZWN0b3IpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNjcmlwdE9iamVjdFJl
YWR5KCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCAwMTE5MDg2
Li5hMjVmMGVkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCkBAIC02NiwxNCArNjcsMTQgQEAgY2xhc3MgUmVzb3Vy
Y2VFcnJvcjsKIGNsYXNzIFNjcmlwdENhbGxTdGFjazsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAot
c3RydWN0IENvbnNvbGVNZXNzYWdlOwotc3RydWN0IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U7
Ci1zdHJ1Y3QgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOwotc3RydWN0IEluc3BlY3RvclJl
c291cmNlOworY2xhc3MgQ29uc29sZU1lc3NhZ2U7CitjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZVJl
c291cmNlOworY2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOworY2xhc3MgSW5zcGVj
dG9yUmVzb3VyY2U7CiAKLWNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXIKK2NsYXNzIEluc3BlY3Rv
ckNvbnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JDb250cm9sbGVyPgogI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgICAgICAgICAgICAgICAgICAgICAgICA6
IEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICwgSmF2
YVNjcmlwdERlYnVnTGlzdGVuZXIKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKIHB1YmxpYzoKQEAgLTE2NSw2ICsxNjYsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCB3aW5kb3dWaXNpYmxlKCk7CiAgICAgdm9pZCBzZXRXaW5kb3dWaXNp
YmxlKGJvb2wgdmlzaWJsZSA9IHRydWUsIGJvb2wgYXR0YWNoZWQgPSBmYWxzZSk7CiAKKyAgICBi
b29sIGFkZFNvdXJjZVRvRnJhbWUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5n
JiBzb3VyY2UsIE5vZGUqKTsKICAgICB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNv
dXJjZSwgTWVzc2FnZUxldmVsLCBTY3JpcHRDYWxsU3RhY2sqKTsKICAgICB2b2lkIGFkZE1lc3Nh
Z2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpOwogICAg
IHZvaWQgY2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKQEAgLTI1Myw2ICsyNTUsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzdGFydEdyb3VwKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBTY3JpcHRDYWxsU3Rh
Y2sqIGNhbGxGcmFtZSk7CiAgICAgdm9pZCBlbmRHcm91cChNZXNzYWdlU291cmNlIHNvdXJjZSwg
dW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogCisgICAgY29u
c3QgU3RyaW5nJiBwbGF0Zm9ybSgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIHZvaWQgZm9jdXNO
b2RlKCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5pZGwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE2NjIzZQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaWRsCkBAIC0wLDAgKzEsOTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hdHQgTGlsZWsgPHdlYmtpdEBtYXR0
bGlsZWsuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworbW9kdWxlIGNvcmUgeworICAgIGludGVyZmFjZSBbCisgICAgICAgIEdlbmVyYXRlQ29u
c3RydWN0b3IKKyAgICBdIEluc3BlY3RvckNvbnRyb2xsZXIgeworICAgICAgICBbSW1wbGVtZW50
YXRpb25GdW5jdGlvbj1oaWRlSGlnaGxpZ2h0XSB2b2lkIGhpZGVET01Ob2RlSGlnaGxpZ2h0KCk7
CisgICAgICAgIFtDdXN0b21dIHZvaWQgaGlnaGxpZ2h0RE9NTm9kZShpbiBOb2RlIG5vZGUpOwor
ICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1zY3JpcHRPYmplY3RSZWFkeV0gdm9pZCBs
b2FkZWQoKTsKKyAgICAgICAgW0ltcGxlbWVudGF0aW9uRnVuY3Rpb249Y2xvc2VdIHZvaWQgd2lu
ZG93VW5sb2FkaW5nKCk7CisgICAgICAgIFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPWF0dGFjaFdp
bmRvd10gdm9pZCBhdHRhY2goKTsKKyAgICAgICAgW0ltcGxlbWVudGF0aW9uRnVuY3Rpb249ZGV0
YWNoV2luZG93XSB2b2lkIGRldGFjaCgpOworCisgICAgICAgIHZvaWQgZW5hYmxlRGVidWdnZXIo
KTsKKyAgICAgICAgdm9pZCBkaXNhYmxlRGVidWdnZXIoKTsKKyAgICAgICAgdm9pZCBwYXVzZUlu
RGVidWdnZXIoKTsKKyAgICAgICAgdm9pZCByZXN1bWVEZWJ1Z2dlcigpOworICAgICAgICB2b2lk
IHN0ZXBPdmVyU3RhdGVtZW50SW5EZWJ1Z2dlcigpOworICAgICAgICB2b2lkIHN0ZXBJbnRvU3Rh
dGVtZW50SW5EZWJ1Z2dlcigpOworICAgICAgICB2b2lkIHN0ZXBPdXRPZkZ1bmN0aW9uSW5EZWJ1
Z2dlcigpOworCisgICAgICAgIHZvaWQgY2xvc2VXaW5kb3coKTsKKyAgICAgICAgW0ltcGxlbWVu
dGF0aW9uRnVuY3Rpb249Y2xlYXJDb25zb2xlTWVzc2FnZXNdIHZvaWQgY2xlYXJNZXNzYWdlcygp
OworICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1zdGFydFVzZXJJbml0aWF0ZWRQcm9m
aWxpbmddIHZvaWQgc3RhcnRQcm9maWxpbmcoKTsKKyAgICAgICAgW0ltcGxlbWVudGF0aW9uRnVu
Y3Rpb249c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmddIHZvaWQgc3RvcFByb2ZpbGluZygpOwor
ICAgICAgICB2b2lkIGVuYWJsZVByb2ZpbGVyKCk7CisgICAgICAgIHZvaWQgZGlzYWJsZVByb2Zp
bGVyKCk7CisgICAgICAgIFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPXRvZ2dsZVNlYXJjaEZvck5v
ZGVJblBhZ2VdIHZvaWQgdG9nZ2xlTm9kZVNlYXJjaCgpOworCisgICAgICAgIGJvb2xlYW4gZGVi
dWdnZXJFbmFibGVkKCk7CisgICAgICAgIGJvb2xlYW4gcGF1c2VPbkV4Y2VwdGlvbnMoKTsKKwor
ICAgICAgICBib29sZWFuIHByb2ZpbGVyRW5hYmxlZCgpOworICAgICAgICBbSW1wbGVtZW50YXRp
b25GdW5jdGlvbj13aW5kb3dWaXNpYmxlXSBib29sZWFuIGlzV2luZG93VmlzaWJsZSgpOworICAg
ICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1zZWFyY2hpbmdGb3JOb2RlSW5QYWdlXSBib29s
ZWFuIHNlYXJjaGluZ0Zvck5vZGUoKTsKKworICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZFJlc291
cmNlU291cmNlVG9GcmFtZShpbiB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGluIE5vZGUgZnJh
bWUpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZFNvdXJjZVRvRnJhbWUoaW4gRE9NU3RyaW5n
IG1pbWVUeXBlLCBpbiBET01TdHJpbmcgc291cmNlVmFsdWUsIGluIE5vZGUgZnJhbWUpOworICAg
ICAgICBbQ3VzdG9tXSBOb2RlIGdldFJlc291cmNlRG9jdW1lbnROb2RlKGluIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllcik7CisgICAgICAgIFtDdXN0b21dIHZvaWQgc2VhcmNoKGluIE5vZGUgbm9k
ZSwgaW4gRE9NU3RyaW5nIHF1ZXJ5KTsKKworICAgICAgICBbQ3VzdG9tXSBET01PYmplY3QgZGF0
YWJhc2VUYWJsZU5hbWVzKGluIERhdGFiYXNlIGRhdGFiYXNlKTsKKworICAgICAgICBbQ3VzdG9t
XSBET01PYmplY3Qgc2V0dGluZyhpbiBET01TdHJpbmcga2V5KTsKKyAgICAgICAgW0N1c3RvbV0g
dm9pZCBzZXRTZXR0aW5nKGluIERPTVN0cmluZyBrZXksIGluIERPTU9iamVjdCAgdmFsdWUpOwor
ICAgICAgICBbQ3VzdG9tXSBET01XaW5kb3cgaW5zcGVjdGVkV2luZG93KCk7CisgICAgICAgIERP
TVN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7CisgICAgICAgIERPTVN0cmluZyBoaWRkZW5Q
YW5lbHMoKTsKKyAgICAgICAgRE9NU3RyaW5nIHBsYXRmb3JtKCk7CisgICAgICAgIFtJbXBsZW1l
bnRhdGlvbkZ1bmN0aW9uPW1vdmVXaW5kb3dCeV0gdm9pZCBtb3ZlQnlVbnJlc3RyaWN0ZWQoaW4g
ZmxvYXQgeCwgaW4gZmxvYXQgeSk7CisgICAgICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWln
aHQoaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgICAgICBbQ3VzdG9tXSBET01PYmplY3Qg
d3JhcENhbGxiYWNrKGluIERPTU9iamVjdCBjYWxsYmFjayk7CisKKyAgICAgICAgW0N1c3RvbV0g
RE9NT2JqZWN0IGN1cnJlbnRDYWxsRnJhbWUoKTsKKyAgICAgICAgdm9pZCBzZXRQYXVzZU9uRXhj
ZXB0aW9ucyhpbiBib29sZWFuIHBhdXNlT25FeGNlcHRpb25zKTsKKyAgICAgICAgdm9pZCBhZGRC
cmVha3BvaW50KGluIHVuc2lnbmVkIGxvbmcgc291cmNlSUQsIGluIHVuc2lnbmVkIGxvbmcgbGlu
ZU51bWJlcik7CisgICAgICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChpbiB1bnNpZ25lZCBsb25n
IHNvdXJjZUlELCBpbiB1bnNpZ25lZCBsb25nIGxpbmVOdW1iZXIpOworCisgICAgICAgIFtDdXN0
b21dIEFycmF5IHByb2ZpbGVzKCk7CisgICAgIH07CisgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
YWdlL1BhZ2UuaCBiL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggOWFhYmE4My4uNTc2NDNmNSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5o
CkBAIC0yMTEsNyArMjExLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBPd25QdHI8
RHJhZ0NvbnRyb2xsZXI+IG1fZHJhZ0NvbnRyb2xsZXI7CiAgICAgICAgIE93blB0cjxGb2N1c0Nv
bnRyb2xsZXI+IG1fZm9jdXNDb250cm9sbGVyOwogICAgICAgICBPd25QdHI8Q29udGV4dE1lbnVD
b250cm9sbGVyPiBtX2NvbnRleHRNZW51Q29udHJvbGxlcjsKLSAgICAgICAgT3duUHRyPEluc3Bl
Y3RvckNvbnRyb2xsZXI+IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKKyAgICAgICAgUmVmUHRyPElu
c3BlY3RvckNvbnRyb2xsZXI+IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKICAgICAgICAgT3duUHRy
PFNldHRpbmdzPiBtX3NldHRpbmdzOwogICAgICAgICBPd25QdHI8UHJvZ3Jlc3NUcmFja2VyPiBt
X3Byb2dyZXNzOwogICAgICAgICAK
</data>
<flag name="review"
          id="13868"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>