<?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>139917</bug_id>
          
          <creation_ts>2014-12-23 14:33:17 -0800</creation_ts>
          <short_desc>Rename ImmutableDictionary to API::Dictionary and merge MutableDictionary into it</short_desc>
          <delta_ts>2014-12-23 15:07:42 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1057655</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-12-23 14:33:17 -0800</bug_when>
    <thetext>Rename ImmutableDictionary to API::Dictionary and merge MutableDictionary into it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057656</commentid>
    <comment_count>1</comment_count>
      <attachid>243694</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-12-23 14:39:18 -0800</bug_when>
    <thetext>Created attachment 243694
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057658</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-23 14:41:19 -0800</bug_when>
    <thetext>Attachment 243694 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/WebProcessPool.cpp:1329:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/Shared/Cocoa/WKNSDictionary.h:34:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/Shared/API/c/WKSharedAPICast.h:118:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/ChangeLog:12:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/WebKit2/UIProcess/WebProcessPool.h:279:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 5 in 37 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057666</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-12-23 15:07:42 -0800</bug_when>
    <thetext>Committed r177699: &lt;http://trac.webkit.org/changeset/177699&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243694</attachid>
            <date>2014-12-23 14:39:18 -0800</date>
            <delta_ts>2014-12-23 14:42:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139917-20141223143921.patch</filename>
            <type>text/plain</type>
            <size>95422</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NzY5NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE0LTEyLTIzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVuYW1lIEltbXV0YWJsZURpY3Rpb25h
cnkgdG8gQVBJOjpEaWN0aW9uYXJ5IGFuZCBtZXJnZSBNdXRhYmxlRGljdGlvbmFyeSBpbnRvIGl0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk5MTcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIFJlbmFt
ZXMgSW1tdXRhYmxlRGljdGlvbmFyeSAtPiBBUEk6OkRpY3Rpb25hcnkKKyAgICAgICAgLSBNZXJn
ZXMgTXV0YWJsZURpY3Rpb25hcnkgaW50byB0aGUgbmV3IEFQSTo6RGljdGlvbmFyeQorICAgICAg
ICAgICAgKGFzIGEgcmVzdWx0IFdLRGljdGlvbmFyeUlzTXV0YWJsZSgpIG5vdyBhbHdheXMgcmV0
dXJucyB0cnVlKQorCisgICAgICAgICogRmlsZSBsaXN0IGVsaWRlZCAqCisKIDIwMTQtMTItMjMg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGR5
bmFtaWNfb2JqY19jYXN0IHRvIFJldGFpblB0ci5oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvSW1tdXRhYmxlRGljdGlvbmFyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
U2hhcmVkL0ltbXV0YWJsZURpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAxNzc2OTcpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvSW1tdXRhYmxlRGljdGlvbmFyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJJbW11dGFibGVEaWN0aW9uYXJ5LmgiCi0KLSNpbmNsdWRlICJBUElBcnJheS5oIgotI2lu
Y2x1ZGUgIkFQSVN0cmluZy5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUmVmUHRyPEltbXV0
YWJsZURpY3Rpb25hcnk+IEltbXV0YWJsZURpY3Rpb25hcnk6OmNyZWF0ZSgpCi17Ci0gICAgcmV0
dXJuIGNyZWF0ZSh7IH0pOwotfQotCi1SZWZQdHI8SW1tdXRhYmxlRGljdGlvbmFyeT4gSW1tdXRh
YmxlRGljdGlvbmFyeTo6Y3JlYXRlKE1hcFR5cGUgbWFwKQotewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW1tdXRhYmxlRGljdGlvbmFyeShXVEY6Om1vdmUobWFwKSkpOwotfQotCi1JbW11dGFi
bGVEaWN0aW9uYXJ5OjpJbW11dGFibGVEaWN0aW9uYXJ5KE1hcFR5cGUgbWFwKQotICAgIDogbV9t
YXAoV1RGOjptb3ZlKG1hcCkpCi17Ci19Ci0KLUltbXV0YWJsZURpY3Rpb25hcnk6On5JbW11dGFi
bGVEaWN0aW9uYXJ5KCkKLXsKLX0KLQotUGFzc1JlZlB0cjxBUEk6OkFycmF5PiBJbW11dGFibGVE
aWN0aW9uYXJ5OjprZXlzKCkgY29uc3QKLXsKLSAgICBpZiAobV9tYXAuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gQVBJOjpBcnJheTo6Y3JlYXRlKCk7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPEFQ
STo6T2JqZWN0Pj4ga2V5czsKLSAgICBrZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9tYXAu
c2l6ZSgpKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9tYXAua2V5cygpKQotICAg
ICAgICBrZXlzLnVuY2hlY2tlZEFwcGVuZChBUEk6OlN0cmluZzo6Y3JlYXRlKGtleSkpOwotCi0g
ICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0ZShXVEY6Om1vdmUoa2V5cykpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbW11dGFibGVE
aWN0aW9uYXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0ltbXV0YWJs
ZURpY3Rpb25hcnkuaAkocmV2aXNpb24gMTc3Njk3KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVk
L0ltbXV0YWJsZURpY3Rpb25hcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5MyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBJbW11dGFibGVEaWN0aW9uYXJ5X2gKLSNkZWZpbmUgSW1tdXRh
YmxlRGljdGlvbmFyeV9oCi0KLSNpbmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgQVBJIHsKLWNsYXNzIEFycmF5OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotLy8g
SW1tdXRhYmxlRGljdGlvbmFyeSAtIEFuIGltbXV0YWJsZSBkaWN0aW9uYXJ5IHR5cGUgc3VpdGFi
bGUgZm9yIHZlbmRpbmcgdG8gYW4gQVBJLgotCi1jbGFzcyBJbW11dGFibGVEaWN0aW9uYXJ5IDog
cHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6RGljdGlvbmFyeT4gewot
cHVibGljOgotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxBUEk6Ok9iamVjdD4+
IE1hcFR5cGU7Ci0KLSAgICBzdGF0aWMgUmVmUHRyPEltbXV0YWJsZURpY3Rpb25hcnk+IGNyZWF0
ZSgpOwotICAgIHN0YXRpYyBSZWZQdHI8SW1tdXRhYmxlRGljdGlvbmFyeT4gY3JlYXRlKE1hcFR5
cGUpOwotCi0gICAgdmlydHVhbCB+SW1tdXRhYmxlRGljdGlvbmFyeSgpOwotCi0gICAgdmlydHVh
bCBib29sIGlzTXV0YWJsZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgIFQqIGdldChjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIFJlZlB0cjxBUEk6Ok9iamVjdD4gaXRlbSA9IG1fbWFwLmdldChrZXkpOwotICAgICAgICBp
ZiAoIWl0ZW0pCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBpZiAoaXRlbS0+dHlw
ZSgpICE9IFQ6OkFQSVR5cGUpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VCo+KGl0ZW0uZ2V0KCkpOwotICAgIH0KLQotICAgIEFQSTo6T2JqZWN0
KiBnZXQoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9t
YXAuZ2V0KGtleSk7Ci0gICAgfQotCi0gICAgQVBJOjpPYmplY3QqIGdldChjb25zdCBTdHJpbmcm
IGtleSwgYm9vbCYgZXhpc3RzKSBjb25zdAotICAgIHsKLSAgICAgICAgYXV0byBpdCA9IG1fbWFw
LmZpbmQoa2V5KTsKLSAgICAgICAgZXhpc3RzID0gaXQgIT0gbV9tYXAuZW5kKCk7Ci0gICAgICAg
IHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7Ci0gICAgfQotCi0gICAgUGFzc1JlZlB0cjxBUEk6OkFy
cmF5PiBrZXlzKCkgY29uc3Q7Ci0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFwLnNpemUoKTsgfQotCi0gICAgY29uc3QgTWFwVHlwZSYgbWFwKCkgY29uc3QgeyByZXR1cm4g
bV9tYXA7IH0KLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IEltbXV0YWJsZURpY3Rpb25hcnko
TWFwVHlwZSk7Ci0KLSAgICBNYXBUeXBlIG1fbWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBJbW11dGFibGVEaWN0aW9uYXJ5X2gKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9NdXRhYmxlRGljdGlvbmFyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL011dGFibGVEaWN0aW9uYXJ5LmNwcAkocmV2aXNpb24gMTc3Njk3KQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL011dGFibGVEaWN0aW9uYXJ5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIk11dGFibGVEaWN0aW9uYXJ5LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1NdXRh
YmxlRGljdGlvbmFyeTo6TXV0YWJsZURpY3Rpb25hcnkoKQotICAgIDogSW1tdXRhYmxlRGljdGlv
bmFyeSh7IH0pCi17Ci19Ci0KLU11dGFibGVEaWN0aW9uYXJ5Ojp+TXV0YWJsZURpY3Rpb25hcnko
KQotewotfQotCi1ib29sIE11dGFibGVEaWN0aW9uYXJ5OjphZGQoY29uc3QgU3RyaW5nJiBrZXks
IFBhc3NSZWZQdHI8QVBJOjpPYmplY3Q+IGl0ZW0pCi17Ci0gICAgTWFwVHlwZTo6QWRkUmVzdWx0
IHJlc3VsdCA9IG1fbWFwLmFkZChrZXksIGl0ZW0pOwotICAgIHJldHVybiByZXN1bHQuaXNOZXdF
bnRyeTsKLX0KLQotYm9vbCBNdXRhYmxlRGljdGlvbmFyeTo6c2V0KGNvbnN0IFN0cmluZyYga2V5
LCBQYXNzUmVmUHRyPEFQSTo6T2JqZWN0PiBpdGVtKQotewotICAgIE1hcFR5cGU6OkFkZFJlc3Vs
dCByZXN1bHQgPSBtX21hcC5zZXQoa2V5LCBpdGVtKTsKLSAgICByZXR1cm4gcmVzdWx0LmlzTmV3
RW50cnk7Ci19Ci0KLXZvaWQgTXV0YWJsZURpY3Rpb25hcnk6OnJlbW92ZShjb25zdCBTdHJpbmcm
IGtleSkKLXsKLSAgICBtX21hcC5yZW1vdmUoa2V5KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTXV0YWJsZURpY3Rpb25hcnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTXV0YWJsZURpY3Rpb25hcnkuaAkocmV2
aXNpb24gMTc3Njk3KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL011dGFibGVEaWN0aW9uYXJ5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
TXV0YWJsZURpY3Rpb25hcnlfaAotI2RlZmluZSBNdXRhYmxlRGljdGlvbmFyeV9oCi0KLSNpbmNs
dWRlICJJbW11dGFibGVEaWN0aW9uYXJ5LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0vLyBN
dXRhYmxlRGljdGlvbmFyeSAtIEEgbXV0YWJsZSBkaWN0aW9uYXJ5IHR5cGUgc3VpdGFibGUgZm9y
IHZlbmRpbmcgdG8gYW4gQVBJLgotCi1jbGFzcyBNdXRhYmxlRGljdGlvbmFyeSA6IHB1YmxpYyBJ
bW11dGFibGVEaWN0aW9uYXJ5IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNdXRh
YmxlRGljdGlvbmFyeT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTXV0YWJsZURpY3Rpb25hcnkpOwotICAgIH0KLQotICAgIH5NdXRhYmxlRGljdGlvbmFyeSgp
OwotCi0gICAgYm9vbCBhZGQoY29uc3QgU3RyaW5nJiBrZXksIFBhc3NSZWZQdHI8QVBJOjpPYmpl
Y3Q+KTsKLSAgICBib29sIHNldChjb25zdCBTdHJpbmcmIGtleSwgUGFzc1JlZlB0cjxBUEk6Ok9i
amVjdD4pOwotICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFN0cmluZyYga2V5KTsKLQotICAgIHZpcnR1
YWwgYm9vbCBpc011dGFibGUoKSB7IHJldHVybiB0cnVlOyB9Ci0KLXByaXZhdGU6Ci0gICAgTXV0
YWJsZURpY3Rpb25hcnkoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYg
Ly8gTXV0YWJsZURpY3Rpb25hcnlfaApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1VzZXJE
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNlckRhdGEuY3Bw
CShyZXZpc2lvbiAxNzc2OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNlckRhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJBUElBcnJheS5o
IgogI2luY2x1ZGUgIkFQSURhdGEuaCIKKyNpbmNsdWRlICJBUElEaWN0aW9uYXJ5LmgiCiAjaW5j
bHVkZSAiQVBJRXJyb3IuaCIKICNpbmNsdWRlICJBUElGcmFtZUhhbmRsZS5oIgogI2luY2x1ZGUg
IkFQSUdlb21ldHJ5LmgiCkBAIC00MCw3ICs0MSw2IEBACiAjaW5jbHVkZSAiQVBJVVJMUmVzcG9u
c2UuaCIKICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIkFyZ3VtZW50RW5j
b2Rlci5oIgotI2luY2x1ZGUgIk11dGFibGVEaWN0aW9uYXJ5LmgiCiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBib29sIHNob3VsZFRyYW5zZm9ybShjb25z
dCBBUEk6Ok8KICAgICB9CiAKICAgICBpZiAob2JqZWN0LnR5cGUoKSA9PSBBUEk6Ok9iamVjdDo6
VHlwZTo6RGljdGlvbmFyeSkgewotICAgICAgICBjb25zdCBhdXRvJiBkaWN0aW9uYXJ5ID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgSW1tdXRhYmxlRGljdGlvbmFyeSY+KG9iamVjdCk7CisgICAgICAgIGNv
bnN0IGF1dG8mIGRpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxjb25zdCBBUEk6OkRpY3Rpb25hcnkm
PihvYmplY3QpOwogCiAgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWlyIDogZGlj
dGlvbmFyeS5tYXAoKSkgewogICAgICAgICAgICAgaWYgKCFrZXlWYWx1ZVBhaXIudmFsdWUpCkBA
IC0xMDQsMTYgKzEwNCwxNiBAQCBzdGF0aWMgUmVmUHRyPEFQSTo6T2JqZWN0PiB0cmFuc2Zvcm1H
cmFwCiAgICAgfQogCiAgICAgaWYgKG9iamVjdC50eXBlKCkgPT0gQVBJOjpPYmplY3Q6OlR5cGU6
OkRpY3Rpb25hcnkpIHsKLSAgICAgICAgYXV0byYgZGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PElt
bXV0YWJsZURpY3Rpb25hcnkmPihvYmplY3QpOworICAgICAgICBhdXRvJiBkaWN0aW9uYXJ5ID0g
c3RhdGljX2Nhc3Q8QVBJOjpEaWN0aW9uYXJ5Jj4ob2JqZWN0KTsKIAotICAgICAgICBJbW11dGFi
bGVEaWN0aW9uYXJ5OjpNYXBUeXBlIG1hcDsKKyAgICAgICAgQVBJOjpEaWN0aW9uYXJ5OjpNYXBU
eXBlIG1hcDsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBkaWN0aW9u
YXJ5Lm1hcCgpKSB7CiAgICAgICAgICAgICBpZiAoIWtleVZhbHVlUGFpci52YWx1ZSkKICAgICAg
ICAgICAgICAgICBtYXAuYWRkKGtleVZhbHVlUGFpci5rZXksIG51bGxwdHIpOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIG1hcC5hZGQoa2V5VmFsdWVQYWlyLmtleSwgdHJhbnNm
b3JtR3JhcGgoKmtleVZhbHVlUGFpci52YWx1ZSwgdHJhbnNmb3JtZXIpKTsKICAgICAgICAgfQot
ICAgICAgICByZXR1cm4gSW1tdXRhYmxlRGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtYXAp
KTsKKyAgICAgICAgcmV0dXJuIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtYXAp
KTsKICAgICB9CiAKICAgICByZXR1cm4gdHJhbnNmb3JtZXIudHJhbnNmb3JtT2JqZWN0KG9iamVj
dCk7CkBAIC0xNzMsNyArMTczLDcgQEAgdm9pZCBVc2VyRGF0YTo6ZW5jb2RlKElQQzo6QXJndW1l
bnRFbmNvZAogICAgICAgICBicmVhazsKICAgICAKICAgICBjYXNlIEFQSTo6T2JqZWN0OjpUeXBl
OjpEaWN0aW9uYXJ5OiB7Ci0gICAgICAgIGF1dG8mIGRpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxj
b25zdCBJbW11dGFibGVEaWN0aW9uYXJ5Jj4ob2JqZWN0KTsKKyAgICAgICAgYXV0byYgZGljdGlv
bmFyeSA9IHN0YXRpY19jYXN0PGNvbnN0IEFQSTo6RGljdGlvbmFyeSY+KG9iamVjdCk7CiAgICAg
ICAgIGF1dG8mIG1hcCA9IGRpY3Rpb25hcnkubWFwKCk7CiAKICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4obWFwLnNpemUoKSk7CkBAIC0yOTAsNyArMjkwLDcgQEAgYm9v
bCBVc2VyRGF0YTo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZAogICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHNpemUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIElt
bXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGUgbWFwOworICAgICAgICBBUEk6OkRpY3Rpb25hcnk6
Ok1hcFR5cGUgbWFwOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewogICAgICAgICAgICAgU3RyaW5nIGtleTsKICAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoa2V5KSkKQEAgLTMwNCw3ICszMDQsNyBAQCBib29sIFVzZXJEYXRhOjpkZWNvZGUoSVBDOjpB
cmd1bWVudERlY29kCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAK
LSAgICAgICAgcmVzdWx0ID0gSW1tdXRhYmxlRGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZSht
YXApKTsKKyAgICAgICAgcmVzdWx0ID0gQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3Zl
KG1hcCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oCShyZXZpc2lvbiAxNzc2OTcpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElEYXRhLmgiCisj
aW5jbHVkZSAiQVBJRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkFQSUVycm9yLmgiCiAjaW5jbHVk
ZSAiQVBJR2VvbWV0cnkuaCIKICNpbmNsdWRlICJBUElOdW1iZXIuaCIKQEAgLTQwLDcgKzQxLDYg
QEAKICNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudEVuY29k
ZXIuaCIKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiSW1tdXRhYmxlRGlj
dGlvbmFyeS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkNl
cnRpZmljYXRlSW5mby5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgpAQCAt
NTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogLy8gICAtIE51bGwgLT4gTnVsbAog
Ly8gICAtIEFQSTo6QXJyYXkgLT4gQVBJOjpBcnJheQotLy8gICAtIERpY3Rpb25hcnkgLT4gRGlj
dGlvbmFyeQorLy8gICAtIEFQSTo6RGljdGlvbmFyeSAtPiBBUEk6OkRpY3Rpb25hcnkKIC8vICAg
LSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgLT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlCiAvLyAgIC0g
QVBJOjpTdHJpbmcgLT4gQVBJOjpTdHJpbmcKIC8vICAgLSBVc2VyQ29udGVudFVSTFBhdHRlcm4g
LT4gVXNlckNvbnRlbnRVUkxQYXR0ZXJuCkBAIC05MCwxMiArOTAsMTIgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBUEk6Ok9iamVj
dDo6VHlwZTo6RGljdGlvbmFyeTogewotICAgICAgICAgICAgSW1tdXRhYmxlRGljdGlvbmFyeSog
ZGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PEltbXV0YWJsZURpY3Rpb25hcnkqPihtX3Jvb3QpOwot
ICAgICAgICAgICAgY29uc3QgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZSYgbWFwID0gZGlj
dGlvbmFyeS0+bWFwKCk7CisgICAgICAgICAgICBBUEk6OkRpY3Rpb25hcnkqIGRpY3Rpb25hcnkg
PSBzdGF0aWNfY2FzdDxBUEk6OkRpY3Rpb25hcnkqPihtX3Jvb3QpOworICAgICAgICAgICAgY29u
c3QgQVBJOjpEaWN0aW9uYXJ5OjpNYXBUeXBlJiBtYXAgPSBkaWN0aW9uYXJ5LT5tYXAoKTsKICAg
ICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1hcC5zaXplKCkpOwog
Ci0gICAgICAgICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1hcC5iZWdpbigpOwotICAgICAgICAgICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFw
VHlwZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOworICAgICAgICAgICAgQVBJOjpE
aWN0aW9uYXJ5OjpNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOworICAg
ICAgICAgICAgQVBJOjpEaWN0aW9uYXJ5OjpNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
YXAuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
ICAgICAgICAgZW5jb2RlciA8PCBpdC0+a2V5OwogICAgICAgICAgICAgICAgIGVuY29kZXIgPDwg
T3duZXIoY29kZXIsIGl0LT52YWx1ZS5nZXQoKSk7CkBAIC0yOTUsNyArMjk1LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5
cGUgbWFwOworICAgICAgICAgICAgQVBJOjpEaWN0aW9uYXJ5OjpNYXBUeXBlIG1hcDsKICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgU3RyaW5nIGtleTsKICAgICAgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleSkp
CkBAIC0zMDYsMTIgKzMwNiwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShtZXNzYWdlQ29kZXIpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgICAgICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlOjpBZGRS
ZXN1bHQgcmVzdWx0ID0gbWFwLnNldChrZXksIGVsZW1lbnQucmVsZWFzZSgpKTsKKyAgICAgICAg
ICAgICAgICBBUEk6OkRpY3Rpb25hcnk6Ok1hcFR5cGU6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAu
c2V0KGtleSwgZWxlbWVudC5yZWxlYXNlKCkpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgY29kZXIubV9yb290ID0gSW1tdXRhYmxlRGljdGlvbmFyeTo6
Y3JlYXRlKFdURjo6bW92ZShtYXApKTsKKyAgICAgICAgICAgIGNvZGVyLm1fcm9vdCA9IEFQSTo6
RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtYXApKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQVBJOjpPYmplY3Q6OlR5cGU6OlN0cmluZzogewpJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElEaWN0aW9uYXJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSURpY3Rpb25hcnkuY3BwCShyZXZpc2lv
biAxNzc2OTIpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbW11dGFibGVEaWN0aW9uYXJ5
LmNwcDoxNzc2OTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSURpY3Rpb25hcnku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1tdXRhYmxlRGljdGlvbmFyeS5oIgorCisjaW5jbHVk
ZSAiQVBJQXJyYXkuaCIKKyNpbmNsdWRlICJBUElTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1JlZlB0cjxJbW11dGFibGVEaWN0aW9uYXJ5PiBJbW11dGFibGVEaWN0aW9uYXJ5Ojpj
cmVhdGUoKQoreworICAgIHJldHVybiBjcmVhdGUoeyB9KTsKK30KKworUmVmUHRyPEltbXV0YWJs
ZURpY3Rpb25hcnk+IEltbXV0YWJsZURpY3Rpb25hcnk6OmNyZWF0ZShNYXBUeXBlIG1hcCkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltbXV0YWJsZURpY3Rpb25hcnkoV1RGOjptb3ZlKG1h
cCkpKTsKK30KKworSW1tdXRhYmxlRGljdGlvbmFyeTo6SW1tdXRhYmxlRGljdGlvbmFyeShNYXBU
eXBlIG1hcCkKKyAgICA6IG1fbWFwKFdURjo6bW92ZShtYXApKQoreworfQorCitJbW11dGFibGVE
aWN0aW9uYXJ5Ojp+SW1tdXRhYmxlRGljdGlvbmFyeSgpCit7Cit9CisKK1Bhc3NSZWZQdHI8QVBJ
OjpBcnJheT4gSW1tdXRhYmxlRGljdGlvbmFyeTo6a2V5cygpIGNvbnN0Cit7CisgICAgaWYgKG1f
bWFwLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0ZSgpOworCisg
ICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IGtleXM7CisgICAga2V5cy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG1fbWFwLnNpemUoKSk7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6
IG1fbWFwLmtleXMoKSkKKyAgICAgICAga2V5cy51bmNoZWNrZWRBcHBlbmQoQVBJOjpTdHJpbmc6
OmNyZWF0ZShrZXkpKTsKKworICAgIHJldHVybiBBUEk6OkFycmF5OjpjcmVhdGUoV1RGOjptb3Zl
KGtleXMpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQVBJL0FQSURpY3Rpb25hcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9BUEkvQVBJRGljdGlvbmFyeS5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJRGljdGlvbmFyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDMzICsyNCwzMyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJ
bW11dGFibGVEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiQVBJRGljdGlvbmFyeS5oIgogCiAjaW5j
bHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElTdHJpbmcuaCIKIAotbmFtZXNwYWNlIFdl
YktpdCB7CituYW1lc3BhY2UgQVBJIHsKIAotUmVmUHRyPEltbXV0YWJsZURpY3Rpb25hcnk+IElt
bXV0YWJsZURpY3Rpb25hcnk6OmNyZWF0ZSgpCitSZWZQdHI8RGljdGlvbmFyeT4gRGljdGlvbmFy
eTo6Y3JlYXRlKCkKIHsKICAgICByZXR1cm4gY3JlYXRlKHsgfSk7CiB9CiAKLVJlZlB0cjxJbW11
dGFibGVEaWN0aW9uYXJ5PiBJbW11dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUoTWFwVHlwZSBtYXAp
CitSZWZQdHI8RGljdGlvbmFyeT4gRGljdGlvbmFyeTo6Y3JlYXRlKE1hcFR5cGUgbWFwKQogewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1tdXRhYmxlRGljdGlvbmFyeShXVEY6Om1vdmUobWFw
KSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGljdGlvbmFyeShXVEY6Om1vdmUobWFwKSkp
OwogfQogCi1JbW11dGFibGVEaWN0aW9uYXJ5OjpJbW11dGFibGVEaWN0aW9uYXJ5KE1hcFR5cGUg
bWFwKQorRGljdGlvbmFyeTo6RGljdGlvbmFyeShNYXBUeXBlIG1hcCkKICAgICA6IG1fbWFwKFdU
Rjo6bW92ZShtYXApKQogewogfQogCi1JbW11dGFibGVEaWN0aW9uYXJ5Ojp+SW1tdXRhYmxlRGlj
dGlvbmFyeSgpCitEaWN0aW9uYXJ5Ojp+RGljdGlvbmFyeSgpCiB7CiB9CiAKLVBhc3NSZWZQdHI8
QVBJOjpBcnJheT4gSW1tdXRhYmxlRGljdGlvbmFyeTo6a2V5cygpIGNvbnN0CitQYXNzUmVmUHRy
PEFycmF5PiBEaWN0aW9uYXJ5OjprZXlzKCkgY29uc3QKIHsKICAgICBpZiAobV9tYXAuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gQVBJOjpBcnJheTo6Y3JlYXRlKCk7CkBAIC02NCw0ICs2NCwy
MSBAQCBQYXNzUmVmUHRyPEFQSTo6QXJyYXk+IEltbXV0YWJsZURpY3Rpb25hCiAgICAgcmV0dXJu
IEFQSTo6QXJyYXk6OmNyZWF0ZShXVEY6Om1vdmUoa2V5cykpOwogfQogCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKK2Jvb2wgRGljdGlvbmFyeTo6YWRkKGNvbnN0IFdURjo6U3RyaW5nJiBrZXksIFBh
c3NSZWZQdHI8QVBJOjpPYmplY3Q+IGl0ZW0pCit7CisgICAgTWFwVHlwZTo6QWRkUmVzdWx0IHJl
c3VsdCA9IG1fbWFwLmFkZChrZXksIGl0ZW0pOworICAgIHJldHVybiByZXN1bHQuaXNOZXdFbnRy
eTsKK30KKworYm9vbCBEaWN0aW9uYXJ5OjpzZXQoY29uc3QgV1RGOjpTdHJpbmcmIGtleSwgUGFz
c1JlZlB0cjxBUEk6Ok9iamVjdD4gaXRlbSkKK3sKKyAgICBNYXBUeXBlOjpBZGRSZXN1bHQgcmVz
dWx0ID0gbV9tYXAuc2V0KGtleSwgaXRlbSk7CisgICAgcmV0dXJuIHJlc3VsdC5pc05ld0VudHJ5
OworfQorCit2b2lkIERpY3Rpb25hcnk6OnJlbW92ZShjb25zdCBXVEY6OlN0cmluZyYga2V5KQor
eworICAgIG1fbWFwLnJlbW92ZShrZXkpOworfQorCit9IC8vIG5hbWVzcGFjZSBBUEkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJRGljdGlvbmFyeS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJRGljdGlvbmFyeS5oCShyZXZpc2lvbiAxNzc2
OTIpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbW11dGFibGVEaWN0aW9uYXJ5Lmg6MTc3
NjkyKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElEaWN0aW9uYXJ5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1tdXRhYmxl
RGljdGlvbmFyeV9oCisjZGVmaW5lIEltbXV0YWJsZURpY3Rpb25hcnlfaAorCisjaW5jbHVkZSAi
QVBJT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBBcnJheTsKK30K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIEltbXV0YWJsZURpY3Rpb25hcnkgLSBBbiBpbW11
dGFibGUgZGljdGlvbmFyeSB0eXBlIHN1aXRhYmxlIGZvciB2ZW5kaW5nIHRvIGFuIEFQSS4KKwor
Y2xhc3MgSW1tdXRhYmxlRGljdGlvbmFyeSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpP
YmplY3Q6OlR5cGU6OkRpY3Rpb25hcnk+IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8QVBJOjpPYmplY3Q+PiBNYXBUeXBlOworCisgICAgc3RhdGljIFJlZlB0
cjxJbW11dGFibGVEaWN0aW9uYXJ5PiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgUmVmUHRyPEltbXV0
YWJsZURpY3Rpb25hcnk+IGNyZWF0ZShNYXBUeXBlKTsKKworICAgIHZpcnR1YWwgfkltbXV0YWJs
ZURpY3Rpb25hcnkoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc011dGFibGUoKSB7IHJldHVybiBm
YWxzZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBnZXQoY29uc3QgU3Ry
aW5nJiBrZXkpIGNvbnN0CisgICAgeworICAgICAgICBSZWZQdHI8QVBJOjpPYmplY3Q+IGl0ZW0g
PSBtX21hcC5nZXQoa2V5KTsKKyAgICAgICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisKKyAgICAgICAgaWYgKGl0ZW0tPnR5cGUoKSAhPSBUOjpBUElUeXBlKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihpdGVtLmdldCgp
KTsKKyAgICB9CisKKyAgICBBUEk6Ok9iamVjdCogZ2V0KGNvbnN0IFN0cmluZyYga2V5KSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLmdldChrZXkpOworICAgIH0KKworICAgIEFQ
STo6T2JqZWN0KiBnZXQoY29uc3QgU3RyaW5nJiBrZXksIGJvb2wmIGV4aXN0cykgY29uc3QKKyAg
ICB7CisgICAgICAgIGF1dG8gaXQgPSBtX21hcC5maW5kKGtleSk7CisgICAgICAgIGV4aXN0cyA9
IGl0ICE9IG1fbWFwLmVuZCgpOworICAgICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOworICAg
IH0KKworICAgIFBhc3NSZWZQdHI8QVBJOjpBcnJheT4ga2V5cygpIGNvbnN0OworCisgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKworICAgIGNvbnN0IE1h
cFR5cGUmIG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwOyB9CisKK3Byb3RlY3RlZDoKKyAgICBl
eHBsaWNpdCBJbW11dGFibGVEaWN0aW9uYXJ5KE1hcFR5cGUpOworCisgICAgTWFwVHlwZSBtX21h
cDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gSW1tdXRhYmxlRGlj
dGlvbmFyeV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSURpY3Rpb25hcnku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSURpY3Rpb25hcnku
aAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElEaWN0aW9u
YXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEltbXV0YWJsZURpY3Rpb25hcnlfaAot
I2RlZmluZSBJbW11dGFibGVEaWN0aW9uYXJ5X2gKKyNpZm5kZWYgQVBJRGljdGlvbmFyeV9oCisj
ZGVmaW5lIEFQSURpY3Rpb25hcnlfaAogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTMzLDI4ICszMywyMiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgQVBJIHsKLWNsYXNzIEFycmF5OwotfQotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKIAotLy8gSW1tdXRhYmxlRGljdGlvbmFyeSAtIEFuIGltbXV0YWJsZSBk
aWN0aW9uYXJ5IHR5cGUgc3VpdGFibGUgZm9yIHZlbmRpbmcgdG8gYW4gQVBJLgorY2xhc3MgQXJy
YXk7CiAKLWNsYXNzIEltbXV0YWJsZURpY3Rpb25hcnkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBs
PEFQSTo6T2JqZWN0OjpUeXBlOjpEaWN0aW9uYXJ5PiB7CitjbGFzcyBEaWN0aW9uYXJ5IGZpbmFs
IDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpEaWN0aW9uYXJ5PiB7CiBwdWJsaWM6
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEFQSTo6T2JqZWN0Pj4gTWFwVHlw
ZTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8V1RGOjpTdHJpbmcsIFJlZlB0cjxPYmplY3Q+PiBNYXBU
eXBlOwogCi0gICAgc3RhdGljIFJlZlB0cjxJbW11dGFibGVEaWN0aW9uYXJ5PiBjcmVhdGUoKTsK
LSAgICBzdGF0aWMgUmVmUHRyPEltbXV0YWJsZURpY3Rpb25hcnk+IGNyZWF0ZShNYXBUeXBlKTsK
KyAgICBzdGF0aWMgUmVmUHRyPERpY3Rpb25hcnk+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBSZWZQ
dHI8RGljdGlvbmFyeT4gY3JlYXRlKE1hcFR5cGUpOwogCi0gICAgdmlydHVhbCB+SW1tdXRhYmxl
RGljdGlvbmFyeSgpOwotCi0gICAgdmlydHVhbCBib29sIGlzTXV0YWJsZSgpIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCB+RGljdGlvbmFyeSgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICBUKiBnZXQoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CisgICAgVCogZ2V0KGNv
bnN0IFdURjo6U3RyaW5nJiBrZXkpIGNvbnN0CiAgICAgewotICAgICAgICBSZWZQdHI8QVBJOjpP
YmplY3Q+IGl0ZW0gPSBtX21hcC5nZXQoa2V5KTsKKyAgICAgICAgUmVmUHRyPE9iamVjdD4gaXRl
bSA9IG1fbWFwLmdldChrZXkpOwogICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAgICAgICByZXR1
cm4gMDsKIApAQCAtNjQsMzAgKzU4LDM0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFQqPihpdGVtLmdldCgpKTsKICAgICB9CiAKLSAgICBBUEk6Ok9iamVjdCogZ2V0KGNv
bnN0IFN0cmluZyYga2V5KSBjb25zdAorICAgIE9iamVjdCogZ2V0KGNvbnN0IFdURjo6U3RyaW5n
JiBrZXkpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9tYXAuZ2V0KGtleSk7CiAgICAg
fQogCi0gICAgQVBJOjpPYmplY3QqIGdldChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYgZXhpc3Rz
KSBjb25zdAorICAgIE9iamVjdCogZ2V0KGNvbnN0IFdURjo6U3RyaW5nJiBrZXksIGJvb2wmIGV4
aXN0cykgY29uc3QKICAgICB7CiAgICAgICAgIGF1dG8gaXQgPSBtX21hcC5maW5kKGtleSk7CiAg
ICAgICAgIGV4aXN0cyA9IGl0ICE9IG1fbWFwLmVuZCgpOwogICAgICAgICByZXR1cm4gaXQtPnZh
bHVlLmdldCgpOwogICAgIH0KIAotICAgIFBhc3NSZWZQdHI8QVBJOjpBcnJheT4ga2V5cygpIGNv
bnN0OworICAgIFBhc3NSZWZQdHI8QXJyYXk+IGtleXMoKSBjb25zdDsKKworICAgIGJvb2wgYWRk
KGNvbnN0IFdURjo6U3RyaW5nJiBrZXksIFBhc3NSZWZQdHI8T2JqZWN0Pik7CisgICAgYm9vbCBz
ZXQoY29uc3QgV1RGOjpTdHJpbmcmIGtleSwgUGFzc1JlZlB0cjxPYmplY3Q+KTsKKyAgICB2b2lk
IHJlbW92ZShjb25zdCBXVEY6OlN0cmluZyYga2V5KTsKIAogICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CiAKICAgICBjb25zdCBNYXBUeXBlJiBtYXAoKSBj
b25zdCB7IHJldHVybiBtX21hcDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgSW1tdXRh
YmxlRGljdGlvbmFyeShNYXBUeXBlKTsKKyAgICBleHBsaWNpdCBEaWN0aW9uYXJ5KE1hcFR5cGUp
OwogCiAgICAgTWFwVHlwZSBtX21hcDsKIH07CiAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAorfSAv
LyBuYW1lc3BhY2UgQVBJCiAKLSNlbmRpZiAvLyBJbW11dGFibGVEaWN0aW9uYXJ5X2gKKyNlbmRp
ZiAvLyBBUElEaWN0aW9uYXJ5X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29j
b2EvV0tSZW1vdGVPYmplY3RDb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9BUEkvQ29jb2EvV0tSZW1vdGVPYmplY3RDb2Rlci5oCShyZXZpc2lvbiAxNzc2OTcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29hL1dLUmVtb3RlT2JqZWN0Q29kZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsMjEgKzI3LDIxIEBACiAKICNpZiBXS19BUElfRU5BQkxFRAog
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIEltbXV0YWJsZURpY3Rpb25hcnk7CituYW1lc3Bh
Y2UgQVBJIHsKK2NsYXNzIERpY3Rpb25hcnk7CiB9CiAKIEBjbGFzcyBfV0tSZW1vdGVPYmplY3RJ
bnRlcmZhY2U7CiAKIEBpbnRlcmZhY2UgV0tSZW1vdGVPYmplY3RFbmNvZGVyIDogTlNDb2Rlcgog
Ci0tIChXZWJLaXQ6OkltbXV0YWJsZURpY3Rpb25hcnkqKXJvb3RPYmplY3REaWN0aW9uYXJ5Owor
LSAoQVBJOjpEaWN0aW9uYXJ5Kilyb290T2JqZWN0RGljdGlvbmFyeTsKIAogQGVuZAogCiBAaW50
ZXJmYWNlIFdLUmVtb3RlT2JqZWN0RGVjb2RlciA6IE5TQ29kZXIKIAotLSAoaWQpaW5pdFdpdGhJ
bnRlcmZhY2U6KF9XS1JlbW90ZU9iamVjdEludGVyZmFjZSAqKWludGVyZmFjZSByb290T2JqZWN0
RGljdGlvbmFyeTooY29uc3QgV2ViS2l0OjpJbW11dGFibGVEaWN0aW9uYXJ5Kilyb290T2JqZWN0
RGljdGlvbmFyeTsKKy0gKGlkKWluaXRXaXRoSW50ZXJmYWNlOihfV0tSZW1vdGVPYmplY3RJbnRl
cmZhY2UgKilpbnRlcmZhY2Ugcm9vdE9iamVjdERpY3Rpb25hcnk6KGNvbnN0IEFQSTo6RGljdGlv
bmFyeSopcm9vdE9iamVjdERpY3Rpb25hcnk7CiAKIEBlbmQKIApJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL0FQSS9Db2NvYS9XS1JlbW90ZU9iamVjdENvZGVyLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2EvV0tSZW1vdGVPYmplY3RDb2Rlci5tbQko
cmV2aXNpb24gMTc3Njk3KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9Db2NvYS9XS1Jl
bW90ZU9iamVjdENvZGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCw5IEBACiAKICNp
bXBvcnQgIkFQSUFycmF5LmgiCiAjaW1wb3J0ICJBUElEYXRhLmgiCisjaW1wb3J0ICJBUElEaWN0
aW9uYXJ5LmgiCiAjaW1wb3J0ICJBUElOdW1iZXIuaCIKICNpbXBvcnQgIkFQSVN0cmluZy5oIgot
I2ltcG9ydCAiTXV0YWJsZURpY3Rpb25hcnkuaCIKICNpbXBvcnQgIl9XS1JlbW90ZU9iamVjdElu
dGVyZmFjZUludGVybmFsLmgiCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KQEAgLTQ1LDkgKzQ1LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IG9iamVjdFN0cmVhbUtleQogc3RhdGljIE5TU3RyaW5nICogY29uc3Qgc2VsZWN0b3JLZXkgPSBA
InNlbGVjdG9yIjsKIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IHR5cGVTdHJpbmdLZXkgPSBAInR5
cGVTdHJpbmciOwogCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1zdGF0aWMgUGFzc1JlZlB0
cjxJbW11dGFibGVEaWN0aW9uYXJ5PiBjcmVhdGVFbmNvZGVkT2JqZWN0KFdLUmVtb3RlT2JqZWN0
RW5jb2RlciAqLCBpZCk7CitzdGF0aWMgUGFzc1JlZlB0cjxBUEk6OkRpY3Rpb25hcnk+IGNyZWF0
ZUVuY29kZWRPYmplY3QoV0tSZW1vdGVPYmplY3RFbmNvZGVyICosIGlkKTsKIAogQGludGVyZmFj
ZSBOU01ldGhvZFNpZ25hdHVyZSAoRGV0YWlscykKIC0gKE5TU3RyaW5nICopX3R5cGVTdHJpbmc7
CkBAIC01OCwxMCArNTYsMTAgQEAgLSAodm9pZCl2YWxpZGF0ZUNsYXNzU3VwcG9ydHNTZWN1cmVD
b2RpbgogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV0tSZW1vdGVPYmplY3RFbmNvZGVyIHsKLSAg
ICBSZWZQdHI8TXV0YWJsZURpY3Rpb25hcnk+IF9yb290RGljdGlvbmFyeTsKKyAgICBSZWZQdHI8
QVBJOjpEaWN0aW9uYXJ5PiBfcm9vdERpY3Rpb25hcnk7CiAgICAgQVBJOjpBcnJheSogX29iamVj
dFN0cmVhbTsKIAotICAgIE11dGFibGVEaWN0aW9uYXJ5KiBfY3VycmVudERpY3Rpb25hcnk7Cisg
ICAgQVBJOjpEaWN0aW9uYXJ5KiBfY3VycmVudERpY3Rpb25hcnk7CiB9CiAKIC0gKGlkKWluaXQK
QEAgLTY5LDcgKzY3LDcgQEAgLSAoaWQpaW5pdAogICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgX3Jvb3REaWN0aW9uYXJ5ID0gTXV0YWJs
ZURpY3Rpb25hcnk6OmNyZWF0ZSgpOworICAgIF9yb290RGljdGlvbmFyeSA9IEFQSTo6RGljdGlv
bmFyeTo6Y3JlYXRlKCk7CiAgICAgX2N1cnJlbnREaWN0aW9uYXJ5ID0gX3Jvb3REaWN0aW9uYXJ5
LmdldCgpOwogCiAgICAgcmV0dXJuIHNlbGY7CkBAIC04NCw3ICs4Miw3IEBAIC0gKHZvaWQpZGVh
bGxvYwogfQogI2VuZGlmCiAKLS0gKEltbXV0YWJsZURpY3Rpb25hcnkqKXJvb3RPYmplY3REaWN0
aW9uYXJ5CistIChBUEk6OkRpY3Rpb25hcnkqKXJvb3RPYmplY3REaWN0aW9uYXJ5CiB7CiAgICAg
cmV0dXJuIF9yb290RGljdGlvbmFyeS5nZXQoKTsKIH0KQEAgLTEwNyw3ICsxMDUsNyBAQCBzdGF0
aWMgdm9pZCBlbmNvZGVUb09iamVjdFN0cmVhbShXS1JlbW90CiAgICAgc2l6ZV90IHBvc2l0aW9u
ID0gZW5jb2Rlci0+X29iamVjdFN0cmVhbS0+c2l6ZSgpOwogICAgIGVuY29kZXItPl9vYmplY3RT
dHJlYW0tPmVsZW1lbnRzKCkuYXBwZW5kKG51bGxwdHIpOwogCi0gICAgUmVmUHRyPEltbXV0YWJs
ZURpY3Rpb25hcnk+IGVuY29kZWRPYmplY3QgPSBjcmVhdGVFbmNvZGVkT2JqZWN0KGVuY29kZXIs
IHZhbHVlKTsKKyAgICBSZWZQdHI8QVBJOjpEaWN0aW9uYXJ5PiBlbmNvZGVkT2JqZWN0ID0gY3Jl
YXRlRW5jb2RlZE9iamVjdChlbmNvZGVyLCB2YWx1ZSk7CiAgICAgQVNTRVJUKCFlbmNvZGVyLT5f
b2JqZWN0U3RyZWFtLT5lbGVtZW50cygpW3Bvc2l0aW9uXSk7CiAgICAgZW5jb2Rlci0+X29iamVj
dFN0cmVhbS0+ZWxlbWVudHMoKVtwb3NpdGlvbl0gPSBlbmNvZGVkT2JqZWN0LnJlbGVhc2UoKTsK
IH0KQEAgLTI0MCwxMyArMjM4LDEzIEBAIHN0YXRpYyB2b2lkIGVuY29kZU9iamVjdChXS1JlbW90
ZU9iamVjdEUKICAgICBbb2JqZWN0IGVuY29kZVdpdGhDb2RlcjplbmNvZGVyXTsKIH0KIAotc3Rh
dGljIFBhc3NSZWZQdHI8SW1tdXRhYmxlRGljdGlvbmFyeT4gY3JlYXRlRW5jb2RlZE9iamVjdChX
S1JlbW90ZU9iamVjdEVuY29kZXIgKmVuY29kZXIsIGlkIG9iamVjdCkKK3N0YXRpYyBQYXNzUmVm
UHRyPEFQSTo6RGljdGlvbmFyeT4gY3JlYXRlRW5jb2RlZE9iamVjdChXS1JlbW90ZU9iamVjdEVu
Y29kZXIgKmVuY29kZXIsIGlkIG9iamVjdCkKIHsKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAg
cmV0dXJuIG5pbDsKIAotICAgIFJlZlB0cjxNdXRhYmxlRGljdGlvbmFyeT4gZGljdGlvbmFyeSA9
IE11dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUoKTsKLSAgICBUZW1wb3JhcnlDaGFuZ2U8TXV0YWJs
ZURpY3Rpb25hcnkqPiBkaWN0aW9uYXJ5Q2hhbmdlKGVuY29kZXItPl9jdXJyZW50RGljdGlvbmFy
eSwgZGljdGlvbmFyeS5nZXQoKSk7CisgICAgUmVmUHRyPEFQSTo6RGljdGlvbmFyeT4gZGljdGlv
bmFyeSA9IEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKCk7CisgICAgVGVtcG9yYXJ5Q2hhbmdlPEFQ
STo6RGljdGlvbmFyeSo+IGRpY3Rpb25hcnlDaGFuZ2UoZW5jb2Rlci0+X2N1cnJlbnREaWN0aW9u
YXJ5LCBkaWN0aW9uYXJ5LmdldCgpKTsKIAogICAgIGVuY29kZU9iamVjdChlbmNvZGVyLCBvYmpl
Y3QpOwogCkBAIC0zMjksOCArMzI3LDggQEAgLSAoQk9PTClyZXF1aXJlc1NlY3VyZUNvZGluZwog
QGltcGxlbWVudGF0aW9uIFdLUmVtb3RlT2JqZWN0RGVjb2RlciB7CiAgICAgUmV0YWluUHRyPF9X
S1JlbW90ZU9iamVjdEludGVyZmFjZT4gX2ludGVyZmFjZTsKIAotICAgIGNvbnN0IEltbXV0YWJs
ZURpY3Rpb25hcnkqIF9yb290RGljdGlvbmFyeTsKLSAgICBjb25zdCBJbW11dGFibGVEaWN0aW9u
YXJ5KiBfY3VycmVudERpY3Rpb25hcnk7CisgICAgY29uc3QgQVBJOjpEaWN0aW9uYXJ5KiBfcm9v
dERpY3Rpb25hcnk7CisgICAgY29uc3QgQVBJOjpEaWN0aW9uYXJ5KiBfY3VycmVudERpY3Rpb25h
cnk7CiAKICAgICBjb25zdCBBUEk6OkFycmF5KiBfb2JqZWN0U3RyZWFtOwogICAgIHNpemVfdCBf
b2JqZWN0U3RyZWFtUG9zaXRpb247CkBAIC0zMzgsNyArMzM2LDcgQEAgICAgIFJldGFpblB0cjxf
V0tSZW1vdGVPYmplY3RJbnRlcmZhY2U+IAogICAgIE5TU2V0ICpfYWxsb3dlZENsYXNzZXM7CiB9
CiAKLS0gKGlkKWluaXRXaXRoSW50ZXJmYWNlOihfV0tSZW1vdGVPYmplY3RJbnRlcmZhY2UgKilp
bnRlcmZhY2Ugcm9vdE9iamVjdERpY3Rpb25hcnk6KGNvbnN0IFdlYktpdDo6SW1tdXRhYmxlRGlj
dGlvbmFyeSopcm9vdE9iamVjdERpY3Rpb25hcnkKKy0gKGlkKWluaXRXaXRoSW50ZXJmYWNlOihf
V0tSZW1vdGVPYmplY3RJbnRlcmZhY2UgKilpbnRlcmZhY2Ugcm9vdE9iamVjdERpY3Rpb25hcnk6
KGNvbnN0IEFQSTo6RGljdGlvbmFyeSopcm9vdE9iamVjdERpY3Rpb25hcnkKIHsKICAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTM4MSw3ICsz
NzksNyBAQCAtIChpZClkZWNvZGVPYmplY3RGb3JLZXk6KE5TU3RyaW5nICopa2V5CiAgICAgcmV0
dXJuIFtzZWxmIGRlY29kZU9iamVjdE9mQ2xhc3NlczpuaWwgZm9yS2V5OmtleV07CiB9CiAKLXN0
YXRpYyBpZCBkZWNvZGVPYmplY3QoV0tSZW1vdGVPYmplY3REZWNvZGVyICosIGNvbnN0IEltbXV0
YWJsZURpY3Rpb25hcnkqLCBOU1NldCAqYWxsb3dlZENsYXNzZXMpOworc3RhdGljIGlkIGRlY29k
ZU9iamVjdChXS1JlbW90ZU9iamVjdERlY29kZXIgKiwgY29uc3QgQVBJOjpEaWN0aW9uYXJ5Kiwg
TlNTZXQgKmFsbG93ZWRDbGFzc2VzKTsKIAogc3RhdGljIGlkIGRlY29kZU9iamVjdEZyb21PYmpl
Y3RTdHJlYW0oV0tSZW1vdGVPYmplY3REZWNvZGVyICpkZWNvZGVyLCBOU1NldCAqYWxsb3dlZENs
YXNzZXMpCiB7CkBAIC0zOTEsNyArMzg5LDcgQEAgc3RhdGljIGlkIGRlY29kZU9iamVjdEZyb21P
YmplY3RTdHJlYW0oVwogICAgIGlmIChkZWNvZGVyLT5fb2JqZWN0U3RyZWFtUG9zaXRpb24gPT0g
ZGVjb2Rlci0+X29iamVjdFN0cmVhbS0+c2l6ZSgpKQogICAgICAgICByZXR1cm4gbmlsOwogCi0g
ICAgY29uc3QgSW1tdXRhYmxlRGljdGlvbmFyeSogZGljdGlvbmFyeSA9IGRlY29kZXItPl9vYmpl
Y3RTdHJlYW0tPmF0PEltbXV0YWJsZURpY3Rpb25hcnk+KGRlY29kZXItPl9vYmplY3RTdHJlYW1Q
b3NpdGlvbisrKTsKKyAgICBjb25zdCBBUEk6OkRpY3Rpb25hcnkqIGRpY3Rpb25hcnkgPSBkZWNv
ZGVyLT5fb2JqZWN0U3RyZWFtLT5hdDxBUEk6OkRpY3Rpb25hcnk+KGRlY29kZXItPl9vYmplY3RT
dHJlYW1Qb3NpdGlvbisrKTsKIAogICAgIHJldHVybiBkZWNvZGVPYmplY3QoZGVjb2RlciwgZGlj
dGlvbmFyeSwgYWxsb3dlZENsYXNzZXMpOwogfQpAQCAtNTcwLDEyICs1NjgsMTIgQEAgc3RhdGlj
IGlkIGRlY29kZU9iamVjdChXS1JlbW90ZU9iamVjdERlYwogICAgIHJldHVybiBbcmVzdWx0IGF1
dG9yZWxlYXNlXTsKIH0KIAotc3RhdGljIGlkIGRlY29kZU9iamVjdChXS1JlbW90ZU9iamVjdERl
Y29kZXIgKmRlY29kZXIsIGNvbnN0IEltbXV0YWJsZURpY3Rpb25hcnkqIGRpY3Rpb25hcnksIE5T
U2V0ICphbGxvd2VkQ2xhc3NlcykKK3N0YXRpYyBpZCBkZWNvZGVPYmplY3QoV0tSZW1vdGVPYmpl
Y3REZWNvZGVyICpkZWNvZGVyLCBjb25zdCBBUEk6OkRpY3Rpb25hcnkqIGRpY3Rpb25hcnksIE5T
U2V0ICphbGxvd2VkQ2xhc3NlcykKIHsKICAgICBpZiAoIWRpY3Rpb25hcnkpCiAgICAgICAgIHJl
dHVybiBuaWw7CiAKLSAgICBUZW1wb3JhcnlDaGFuZ2U8Y29uc3QgSW1tdXRhYmxlRGljdGlvbmFy
eSo+IGRpY3Rpb25hcnlDaGFuZ2UoZGVjb2Rlci0+X2N1cnJlbnREaWN0aW9uYXJ5LCBkaWN0aW9u
YXJ5KTsKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Y29uc3QgQVBJOjpEaWN0aW9uYXJ5Kj4gZGljdGlv
bmFyeUNoYW5nZShkZWNvZGVyLT5fY3VycmVudERpY3Rpb25hcnksIGRpY3Rpb25hcnkpOwogCiAg
ICAgLy8gSWYgbm8gYWxsb3dlZCBjbGFzc2VzIHdlcmUgbGlzdGVkLCBqdXN0IHVzZSB0aGUgY3Vy
cmVudGx5IGFsbG93ZWQgY2xhc3Nlcy4KICAgICBpZiAoIWFsbG93ZWRDbGFzc2VzKQpAQCAtNjQx
LDcgKzYzOSw3IEBAIC0gKEJPT0wpcmVxdWlyZXNTZWN1cmVDb2RpbmcKIAogLSAoaWQpZGVjb2Rl
T2JqZWN0T2ZDbGFzc2VzOihOU1NldCAqKWNsYXNzZXMgZm9yS2V5OihOU1N0cmluZyAqKWtleQog
ewotICAgIHJldHVybiBkZWNvZGVPYmplY3Qoc2VsZiwgX2N1cnJlbnREaWN0aW9uYXJ5LT5nZXQ8
SW1tdXRhYmxlRGljdGlvbmFyeT4oZXNjYXBlS2V5KGtleSkpLCBjbGFzc2VzKTsKKyAgICByZXR1
cm4gZGVjb2RlT2JqZWN0KHNlbGYsIF9jdXJyZW50RGljdGlvbmFyeS0+Z2V0PEFQSTo6RGljdGlv
bmFyeT4oZXNjYXBlS2V5KGtleSkpLCBjbGFzc2VzKTsKIH0KIAogLSAoTlNTZXQgKilhbGxvd2Vk
Q2xhc3NlcwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9Db2NvYS9fV0tSZW1vdGVP
YmplY3RSZWdpc3RyeS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJ
L0NvY29hL19XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5Lm1tCShyZXZpc2lvbiAxNzc2OTcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29hL19XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw4IEBACiAKICNpZiBXS19BUElfRU5BQkxFRAog
CisjaW1wb3J0ICJBUElEaWN0aW9uYXJ5LmgiCiAjaW1wb3J0ICJDb25uZWN0aW9uLmgiCi0jaW1w
b3J0ICJJbW11dGFibGVEaWN0aW9uYXJ5LmgiCi0jaW1wb3J0ICJNdXRhYmxlRGljdGlvbmFyeS5o
IgogI2ltcG9ydCAiUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCIKICNpbXBvcnQgIlVzZXJEYXRhLmgi
CiAjaW1wb3J0ICJXS0Nvbm5lY3Rpb25SZWYuaCIKQEAgLTEwMyw3ICsxMDIsNyBAQCAtICh2b2lk
KV9zZW5kSW52b2NhdGlvbjooTlNJbnZvY2F0aW9uICopCiAgICAgUmV0YWluUHRyPFdLUmVtb3Rl
T2JqZWN0RW5jb2Rlcj4gZW5jb2RlciA9IGFkb3B0TlMoW1tXS1JlbW90ZU9iamVjdEVuY29kZXIg
YWxsb2NdIGluaXRdKTsKICAgICBbZW5jb2RlciBlbmNvZGVPYmplY3Q6aW52b2NhdGlvbiBmb3JL
ZXk6aW52b2NhdGlvbktleV07CiAKLSAgICBSZWZQdHI8TXV0YWJsZURpY3Rpb25hcnk+IGJvZHkg
PSBNdXRhYmxlRGljdGlvbmFyeTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEFQSTo6RGljdGlvbmFy
eT4gYm9keSA9IEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKCk7CiAgICAgYm9keS0+c2V0KGludGVy
ZmFjZUlkZW50aWZpZXJLZXksIEFQSTo6U3RyaW5nOjpjcmVhdGUoaW50ZXJmYWNlLmlkZW50aWZp
ZXIpKTsKICAgICBib2R5LT5zZXQoZW5jb2RlZEludm9jYXRpb25LZXksIFtlbmNvZGVyIHJvb3RP
YmplY3REaWN0aW9uYXJ5XSk7CiAKQEAgLTEyMywxMyArMTIyLDEzIEBAIC0gKEJPT0wpX2ludm9r
ZU1ldGhvZDooY29uc3QgVXNlckRhdGEmKWkKICAgICBpZiAoIWludm9jYXRpb24ub2JqZWN0KCkg
fHwgaW52b2NhdGlvbi5vYmplY3QoKS0+dHlwZSgpICE9IEFQSTo6T2JqZWN0OjpUeXBlOjpEaWN0
aW9uYXJ5KQogICAgICAgICByZXR1cm4gTk87CiAgICAgCi0gICAgY29uc3QgSW1tdXRhYmxlRGlj
dGlvbmFyeSYgZGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PGNvbnN0IEltbXV0YWJsZURpY3Rpb25h
cnkmPigqaW52b2NhdGlvbi5vYmplY3QoKSk7CisgICAgY29uc3QgQVBJOjpEaWN0aW9uYXJ5JiBk
aWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQVBJOjpEaWN0aW9uYXJ5Jj4oKmludm9jYXRp
b24ub2JqZWN0KCkpOwogCiAgICAgQVBJOjpTdHJpbmcqIGludGVyZmFjZUlkZW50aWZpZXIgPSBk
aWN0aW9uYXJ5LmdldDxBUEk6OlN0cmluZz4oaW50ZXJmYWNlSWRlbnRpZmllcktleSk7CiAgICAg
aWYgKCFpbnRlcmZhY2VJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gTk87CiAKLSAgICBjb25z
dCBJbW11dGFibGVEaWN0aW9uYXJ5KiBlbmNvZGVkSW52b2NhdGlvbiA9IGRpY3Rpb25hcnkuZ2V0
PEltbXV0YWJsZURpY3Rpb25hcnk+KGVuY29kZWRJbnZvY2F0aW9uS2V5KTsKKyAgICBjb25zdCBB
UEk6OkRpY3Rpb25hcnkqIGVuY29kZWRJbnZvY2F0aW9uID0gZGljdGlvbmFyeS5nZXQ8QVBJOjpE
aWN0aW9uYXJ5PihlbmNvZGVkSW52b2NhdGlvbktleSk7CiAgICAgaWYgKCFlbmNvZGVkSW52b2Nh
dGlvbktleSkKICAgICAgICAgcmV0dXJuIE5POwogCkBAIC0xMzgsNyArMTM3LDcgQEAgICAgIFtz
ZWxmIF9pbnZva2VNZXNzYWdlV2l0aEludGVyZmFjZUlkZQogICAgIHJldHVybiBZRVM7CiB9CiAK
LS0gKHZvaWQpX2ludm9rZU1lc3NhZ2VXaXRoSW50ZXJmYWNlSWRlbnRpZmllcjooY29uc3QgU3Ry
aW5nJilpbnRlcmZhY2VJZGVudGlmaWVyIGVuY29kZWRJbnZvY2F0aW9uOihjb25zdCBJbW11dGFi
bGVEaWN0aW9uYXJ5KillbmNvZGVkSW52b2NhdGlvbgorLSAodm9pZClfaW52b2tlTWVzc2FnZVdp
dGhJbnRlcmZhY2VJZGVudGlmaWVyOihjb25zdCBTdHJpbmcmKWludGVyZmFjZUlkZW50aWZpZXIg
ZW5jb2RlZEludm9jYXRpb246KGNvbnN0IEFQSTo6RGljdGlvbmFyeSopZW5jb2RlZEludm9jYXRp
b24KIHsKICAgICBhdXRvIGludGVyZmFjZUFuZE9iamVjdCA9IF9leHBvcnRlZE9iamVjdHMuZ2V0
KGludGVyZmFjZUlkZW50aWZpZXIpOwogICAgIGlmICghaW50ZXJmYWNlQW5kT2JqZWN0LnNlY29u
ZCkgewpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLRGVwcmVjYXRlZEZ1bmN0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLRGVw
cmVjYXRlZEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDE3NzY5NykKKysrIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvYy9XS0RlcHJlY2F0ZWRGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2luY2x1ZGUgIk11dGFi
bGVEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiQVBJRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIldL
QXJyYXkuaCIKICNpbmNsdWRlICJXS011dGFibGVEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiV0tT
aGFyZWRBUElDYXN0LmgiCkBAIC00Myw4ICs0Myw4IEBAIFdLX0VYUE9SVCBib29sIFdLQXJyYXlJ
c011dGFibGUoV0tBcnJheVIKIAogV0tfRVhQT1JUIHZvaWQgV0tQYWdlU2V0VmlzaWJpbGl0eVN0
YXRlKFdLUGFnZVJlZiwgV0tQYWdlVmlzaWJpbGl0eVN0YXRlLCBib29sKTsKIAotV0tfRVhQT1JU
IGJvb2wgV0tEaWN0aW9uYXJ5QWRkSXRlbShXS011dGFibGVEaWN0aW9uYXJ5UmVmIGRpY3Rpb25h
cnksIFdLU3RyaW5nUmVmIGtleSwgV0tUeXBlUmVmIGl0ZW0pOwogV0tfRVhQT1JUIGJvb2wgV0tE
aWN0aW9uYXJ5SXNNdXRhYmxlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5KTsKK1dLX0VYUE9S
VCBib29sIFdLRGljdGlvbmFyeUFkZEl0ZW0oV0tNdXRhYmxlRGljdGlvbmFyeVJlZiBkaWN0aW9u
YXJ5LCBXS1N0cmluZ1JlZiBrZXksIFdLVHlwZVJlZiBpdGVtKTsKIFdLX0VYUE9SVCB2b2lkIFdL
RGljdGlvbmFyeVJlbW92ZUl0ZW0oV0tNdXRhYmxlRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBX
S1N0cmluZ1JlZiBrZXkpOwogCiBXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0UmVnaW9u
QmFzZWRDb2x1bW5zRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpOwpAQCAtNzMs
OSArNzMsOSBAQCB2b2lkIFdLUGFnZVNldFZpc2liaWxpdHlTdGF0ZShXS1BhZ2VSZWYsCiB7CiB9
CiAKLWJvb2wgV0tEaWN0aW9uYXJ5SXNNdXRhYmxlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5
UmVmKQorYm9vbCBXS0RpY3Rpb25hcnlJc011dGFibGUoV0tEaWN0aW9uYXJ5UmVmKQogewotICAg
IHJldHVybiB0b0ltcGwoZGljdGlvbmFyeVJlZiktPmlzTXV0YWJsZSgpOworICAgIHJldHVybiB0
cnVlOwogfQogCiBib29sIFdLRGljdGlvbmFyeUFkZEl0ZW0oV0tNdXRhYmxlRGljdGlvbmFyeVJl
ZiBkaWN0aW9uYXJ5UmVmLCBXS1N0cmluZ1JlZiBrZXlSZWYsIFdLVHlwZVJlZiBpdGVtUmVmKQpJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLRGljdGlvbmFyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLRGljdGlvbmFyeS5jcHAJKHJl
dmlzaW9uIDE3NzY5NykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0RpY3Rpb25h
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyMyArMjcsMjMgQEAKICNpbmNsdWRlICJXS0Rp
Y3Rpb25hcnkuaCIKIAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCi0jaW5jbHVkZSAiSW1tdXRhYmxl
RGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIkFQSURpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJXS0FQ
SUNhc3QuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogV0tUeXBlSUQgV0tEaWN0aW9u
YXJ5R2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEkoSW1tdXRhYmxlRGljdGlvbmFyeTo6
QVBJVHlwZSk7CisgICAgcmV0dXJuIHRvQVBJKEFQSTo6RGljdGlvbmFyeTo6QVBJVHlwZSk7CiB9
CiAKIFdLX0VYUE9SVCBXS0RpY3Rpb25hcnlSZWYgV0tEaWN0aW9uYXJ5Q3JlYXRlKGNvbnN0IFdL
U3RyaW5nUmVmKiBrZXlzLCBjb25zdCBXS1R5cGVSZWYqIHZhbHVlcywgc2l6ZV90IG51bWJlck9m
VmFsdWVzKQogewotICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGUgbWFwOworICAgIEFQ
STo6RGljdGlvbmFyeTo6TWFwVHlwZSBtYXA7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1iZXJPZlZhbHVlczsgKytpKQogICAgICAgICBtYXAuYWRkKHRvSW1wbChrZXlzW2ldKS0+c3Ry
aW5nKCksIHRvSW1wbCh2YWx1ZXNbaV0pKTsKIAotICAgIHJldHVybiB0b0FQSShJbW11dGFibGVE
aWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1hcCkpLnJlbGVhc2UoKS5sZWFrUmVmKCkpOwor
ICAgIHJldHVybiB0b0FQSShBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShXVEY6Om1vdmUobWFwKSku
cmVsZWFzZSgpLmxlYWtSZWYoKSk7CiB9CiAKIFdLVHlwZVJlZiBXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5UmVmLCBXS1N0cmluZ1JlZiBrZXkpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tNdXRhYmxlRGljdGlvbmFyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLTXV0YWJsZURpY3Rp
b25hcnkuY3BwCShyZXZpc2lvbiAxNzc2OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJ
L2MvV0tNdXRhYmxlRGljdGlvbmFyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE1ICsyNiwx
NSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldLTXV0YWJsZURpY3Rpb25hcnku
aCIKIAotI2luY2x1ZGUgIk11dGFibGVEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiQVBJRGljdGlv
bmFyeS5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OwogCiBXS011dGFibGVEaWN0aW9uYXJ5UmVmIFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKQog
ewotICAgIFJlZlB0cjxNdXRhYmxlRGljdGlvbmFyeT4gZGljdGlvbmFyeSA9IE11dGFibGVEaWN0
aW9uYXJ5OjpjcmVhdGUoKTsKLSAgICByZXR1cm4gdG9BUEkoZGljdGlvbmFyeS5yZWxlYXNlKCku
bGVha1JlZigpKTsKKyAgICBSZWZQdHI8QVBJOjpEaWN0aW9uYXJ5PiBkaWN0aW9uYXJ5ID0gQVBJ
OjpEaWN0aW9uYXJ5OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxXS011dGFibGVE
aWN0aW9uYXJ5UmVmPih0b0FQSShkaWN0aW9uYXJ5LnJlbGVhc2UoKS5sZWFrUmVmKCkpKTsKIH0K
IAogYm9vbCBXS0RpY3Rpb25hcnlTZXRJdGVtKFdLTXV0YWJsZURpY3Rpb25hcnlSZWYgZGljdGlv
bmFyeVJlZiwgV0tTdHJpbmdSZWYga2V5UmVmLCBXS1R5cGVSZWYgaXRlbVJlZikKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgJKHJldmlzaW9u
IDE3NzY5NykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQAogCiBuYW1lc3BhY2UgQVBJIHsKIGNs
YXNzIEFycmF5OworY2xhc3MgRGljdGlvbmFyeTsKIGNsYXNzIERhdGE7CiBjbGFzcyBQb2ludDsK
IGNsYXNzIFJlY3Q7CkBAIC03NCw4ICs3NSw2IEBAIGNsYXNzIFdlYkFyY2hpdmVSZXNvdXJjZTsK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIEltbXV0YWJsZURpY3Rpb25hcnk7Ci1jbGFz
cyBNdXRhYmxlRGljdGlvbmFyeTsKIGNsYXNzIE9iakNPYmplY3RHcmFwaDsKIGNsYXNzIFdlYkNl
cnRpZmljYXRlSW5mbzsKIGNsYXNzIFdlYkNvbm5lY3Rpb247CkBAIC05NiwxMiArOTUsMTEgQEAg
V0tfQUREX0FQSV9NQVBQSU5HKFdLQ2VydGlmaWNhdGVJbmZvUmVmLAogV0tfQUREX0FQSV9NQVBQ
SU5HKFdLQ29ubmVjdGlvblJlZiwgV2ViQ29ubmVjdGlvbikKIFdLX0FERF9BUElfTUFQUElORyhX
S0NvbnRleHRNZW51SXRlbVJlZiwgV2ViQ29udGV4dE1lbnVJdGVtKQogV0tfQUREX0FQSV9NQVBQ
SU5HKFdLRGF0YVJlZiwgQVBJOjpEYXRhKQotV0tfQUREX0FQSV9NQVBQSU5HKFdLRGljdGlvbmFy
eVJlZiwgSW1tdXRhYmxlRGljdGlvbmFyeSkKK1dLX0FERF9BUElfTUFQUElORyhXS0RpY3Rpb25h
cnlSZWYsIEFQSTo6RGljdGlvbmFyeSkKIFdLX0FERF9BUElfTUFQUElORyhXS0RvdWJsZVJlZiwg
QVBJOjpEb3VibGUpCiBXS19BRERfQVBJX01BUFBJTkcoV0tFcnJvclJlZiwgQVBJOjpFcnJvcikK
IFdLX0FERF9BUElfTUFQUElORyhXS0dyYXBoaWNzQ29udGV4dFJlZiwgV2ViR3JhcGhpY3NDb250
ZXh0KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLSW1hZ2VSZWYsIFdlYkltYWdlKQotV0tfQUREX0FQ
SV9NQVBQSU5HKFdLTXV0YWJsZURpY3Rpb25hcnlSZWYsIE11dGFibGVEaWN0aW9uYXJ5KQogV0tf
QUREX0FQSV9NQVBQSU5HKFdLUG9pbnRSZWYsIEFQSTo6UG9pbnQpCiBXS19BRERfQVBJX01BUFBJ
TkcoV0tSZWN0UmVmLCBBUEk6OlJlY3QpCiBXS19BRERfQVBJX01BUFBJTkcoV0tTZWN1cml0eU9y
aWdpblJlZiwgQVBJOjpTZWN1cml0eU9yaWdpbikKQEAgLTExNyw2ICsxMTUsNyBAQCBXS19BRERf
QVBJX01BUFBJTkcoV0tVc2VyQ29udGVudFVSTFBhdHRlCiBXS19BRERfQVBJX01BUFBJTkcoV0tT
ZXNzaW9uUmVmLCBBUEk6OlNlc3Npb24pCiAKIHRlbXBsYXRlPD4gc3RydWN0IEFQSVR5cGVJbmZv
PFdLTXV0YWJsZUFycmF5UmVmPiB7IHR5cGVkZWYgQVBJOjpBcnJheSogSW1wbFR5cGU7IH07Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBBUElUeXBlSW5mbzxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiB7IHR5
cGVkZWYgQVBJOjpEaWN0aW9uYXJ5KiBJbXBsVHlwZTsgfTsKIAogI2lmIFBMQVRGT1JNKENPQ09B
KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLV2ViQXJjaGl2ZVJlZiwgQVBJOjpXZWJBcmNoaXZlKQpJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL1dLTlNEaWN0aW9uYXJ5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL1dLTlNEaWN0aW9uYXJ5LmgJKHJl
dmlzaW9uIDE3NzY5NykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9XS05TRGljdGlv
bmFyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMSArMjcsMTEgQEAKIAogI2lmIFdLX0FQSV9F
TkFCTEVECiAKLSNpbXBvcnQgIkltbXV0YWJsZURpY3Rpb25hcnkuaCIKKyNpbXBvcnQgIkFQSURp
Y3Rpb25hcnkuaCIKICNpbXBvcnQgIldLT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewot
aW5saW5lIE5TRGljdGlvbmFyeSAqd3JhcHBlcihJbW11dGFibGVEaWN0aW9uYXJ5JiBkaWN0aW9u
YXJ5KSB7IEFTU0VSVChbZGljdGlvbmFyeS53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpbTlNEaWN0
aW9uYXJ5IGNsYXNzXV0pOyByZXR1cm4gKE5TRGljdGlvbmFyeSAqKWRpY3Rpb25hcnkud3JhcHBl
cigpOyB9CitpbmxpbmUgTlNEaWN0aW9uYXJ5ICp3cmFwcGVyKEFQSTo6RGljdGlvbmFyeSYgZGlj
dGlvbmFyeSkgeyBBU1NFUlQoW2RpY3Rpb25hcnkud3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W05T
RGljdGlvbmFyeSBjbGFzc11dKTsgcmV0dXJuIChOU0RpY3Rpb25hcnkgKilkaWN0aW9uYXJ5Lndy
YXBwZXIoKTsgfQogfQogCiBAaW50ZXJmYWNlIFdLTlNEaWN0aW9uYXJ5IDogTlNEaWN0aW9uYXJ5
IDxXS09iamVjdD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9XS05TRGljdGlv
bmFyeS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29jb2EvV0tOU0Rp
Y3Rpb25hcnkubW0JKHJldmlzaW9uIDE3NzY5NykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b2NvYS9XS05TRGljdGlvbmFyeS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDEyIEBA
CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBAaW1wbGVtZW50YXRpb24gV0tOU0RpY3Rpb25h
cnkgewotICAgIEFQSTo6T2JqZWN0U3RvcmFnZTxJbW11dGFibGVEaWN0aW9uYXJ5PiBfZGljdGlv
bmFyeTsKKyAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpEaWN0aW9uYXJ5PiBfZGljdGlvbmFy
eTsKIH0KIAogLSAodm9pZClkZWFsbG9jCiB7Ci0gICAgX2RpY3Rpb25hcnktPn5JbW11dGFibGVE
aWN0aW9uYXJ5KCk7CisgICAgX2RpY3Rpb25hcnktPn5EaWN0aW9uYXJ5KCk7CiAKICAgICBbc3Vw
ZXIgZGVhbGxvY107CiB9CkBAIC03OCwxMSArNzgsNyBAQCAtIChOU0VudW1lcmF0b3IgKilrZXlF
bnVtZXJhdG9yCiAKIC0gKGlkKWNvcHlXaXRoWm9uZTooTlNab25lICopem9uZQogewotICAgIGlm
ICghX2RpY3Rpb25hcnktPmlzTXV0YWJsZSgpKQotICAgICAgICByZXR1cm4gW3NlbGYgcmV0YWlu
XTsKLQotICAgIGF1dG8gbWFwID0gX2RpY3Rpb25hcnktPm1hcCgpOwotICAgIHJldHVybiBJbW11
dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1hcCkpLnJlbGVhc2UoKS5sZWFrUmVm
KCktPndyYXBwZXIoKTsKKyAgICByZXR1cm4gW3NlbGYgcmV0YWluXTsKIH0KIAogI3ByYWdtYSBt
YXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9QbHVnaW5JbmZvcm1hdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvUGx1Z2luSW5mb3Jt
YXRpb24uY3BwCShyZXZpc2lvbiAxNzc2OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1
Z2lucy9OZXRzY2FwZS9QbHVnaW5JbmZvcm1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
OCw3ICsxMDgsNyBAQCBTdHJpbmcgcGx1Z0luSW5mb3JtYXRpb25SZXBsYWNlbWVudE9ic2N1CiAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiUGx1Z0luSW5mb3JtYXRpb25SZXBsYWNlbWVudE9ic2N1
cmVkIik7CiB9CiAKLXZvaWQgZ2V0UGx1Z2luTW9kdWxlSW5mb3JtYXRpb24oY29uc3QgUGx1Z2lu
TW9kdWxlSW5mbyYgcGx1Z2luLCBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlJiBtYXApCit2
b2lkIGdldFBsdWdpbk1vZHVsZUluZm9ybWF0aW9uKGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mIHBs
dWdpbiwgQVBJOjpEaWN0aW9uYXJ5OjpNYXBUeXBlJiBtYXApCiB7CiAjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCiAgICAgbWFwLnNldChwbHVnaW5JbmZvcm1hdGlvblBhdGhLZXkoKSwg
QVBJOjpTdHJpbmc6OmNyZWF0ZShwbHVnaW4ucGF0aCkpOwpAQCAtMTIyLDE3ICsxMjIsMTcgQEAg
dm9pZCBnZXRQbHVnaW5Nb2R1bGVJbmZvcm1hdGlvbihjb25zdCBQbAogI2VuZGlmCiB9CiAKLVBh
c3NSZWZQdHI8SW1tdXRhYmxlRGljdGlvbmFyeT4gY3JlYXRlUGx1Z2luSW5mb3JtYXRpb25EaWN0
aW9uYXJ5KGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mIHBsdWdpbikKK1Bhc3NSZWZQdHI8QVBJOjpE
aWN0aW9uYXJ5PiBjcmVhdGVQbHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnkoY29uc3QgUGx1Z2lu
TW9kdWxlSW5mbyYgcGx1Z2luKQogewotICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGUg
bWFwOworICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBtYXA7CiAgICAgZ2V0UGx1Z2luTW9k
dWxlSW5mb3JtYXRpb24ocGx1Z2luLCBtYXApOwogCi0gICAgcmV0dXJuIEltbXV0YWJsZURpY3Rp
b25hcnk6OmNyZWF0ZShXVEY6Om1vdmUobWFwKSk7CisgICAgcmV0dXJuIEFQSTo6RGljdGlvbmFy
eTo6Y3JlYXRlKFdURjo6bW92ZShtYXApKTsKIH0KIAotUGFzc1JlZlB0cjxJbW11dGFibGVEaWN0
aW9uYXJ5PiBjcmVhdGVQbHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnkoY29uc3QgUGx1Z2luTW9k
dWxlSW5mbyYgcGx1Z2luLCBjb25zdCBTdHJpbmcmIGZyYW1lVVJMU3RyaW5nLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgcGx1Z2luVVJMU3Ry
aW5nLCBib29sIHJlcGxhY2VtZW50T2JzY3VyZWQpCitQYXNzUmVmUHRyPEFQSTo6RGljdGlvbmFy
eT4gY3JlYXRlUGx1Z2luSW5mb3JtYXRpb25EaWN0aW9uYXJ5KGNvbnN0IFBsdWdpbk1vZHVsZUlu
Zm8mIHBsdWdpbiwgY29uc3QgU3RyaW5nJiBmcmFtZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgU3RyaW5nJiBwYWdlVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIHBsdWdp
bnNwYWdlQXR0cmlidXRlVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIHBsdWdpblVSTFN0cmluZywg
Ym9vbCByZXBsYWNlbWVudE9ic2N1cmVkKQogewotICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1h
cFR5cGUgbWFwOworICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBtYXA7CiAgICAgZ2V0UGx1
Z2luTW9kdWxlSW5mb3JtYXRpb24ocGx1Z2luLCBtYXApOwogCiAgICAgaWYgKCFmcmFtZVVSTFN0
cmluZy5pc0VtcHR5KCkpCkBAIC0xNDcsMTIgKzE0NywxMiBAQCBQYXNzUmVmUHRyPEltbXV0YWJs
ZURpY3Rpb25hcnk+IGNyZWF0ZVBsCiAgICAgICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25Q
bHVnaW5VUkxLZXkoKSwgQVBJOjpVUkw6OmNyZWF0ZShwbHVnaW5VUkxTdHJpbmcpKTsKICAgICBt
YXAuc2V0KHBsdWdJbkluZm9ybWF0aW9uUmVwbGFjZW1lbnRPYnNjdXJlZEtleSgpLCBBUEk6OkJv
b2xlYW46OmNyZWF0ZShyZXBsYWNlbWVudE9ic2N1cmVkKSk7CiAKLSAgICByZXR1cm4gSW1tdXRh
YmxlRGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtYXApKTsKKyAgICByZXR1cm4gQVBJOjpE
aWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1hcCkpOwogfQogCi1QYXNzUmVmUHRyPEltbXV0
YWJsZURpY3Rpb25hcnk+IGNyZWF0ZVBsdWdpbkluZm9ybWF0aW9uRGljdGlvbmFyeShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGZyYW1lVVJMU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHBhZ2VVUkxTdHJpbmcpCitQYXNzUmVmUHRyPEFQSTo6RGljdGlvbmFyeT4gY3JlYXRlUGx1
Z2luSW5mb3JtYXRpb25EaWN0aW9uYXJ5KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0
cmluZyYgZnJhbWVVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgcGFnZVVSTFN0cmluZykKIHsKLSAg
ICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlIG1hcDsKKyAgICBBUEk6OkRpY3Rpb25hcnk6
Ok1hcFR5cGUgbWFwOwogCiAgICAgaWYgKCFmcmFtZVVSTFN0cmluZy5pc0VtcHR5KCkpCiAgICAg
ICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25GcmFtZVVSTEtleSgpLCBBUEk6OlVSTDo6Y3Jl
YXRlKGZyYW1lVVJMU3RyaW5nKSk7CkBAIC0xNjEsMTEgKzE2MSwxMSBAQCBQYXNzUmVmUHRyPElt
bXV0YWJsZURpY3Rpb25hcnk+IGNyZWF0ZVBsCiAgICAgaWYgKCFwYWdlVVJMU3RyaW5nLmlzRW1w
dHkoKSkKICAgICAgICAgbWFwLnNldChwbHVnaW5JbmZvcm1hdGlvblBhZ2VVUkxLZXkoKSwgQVBJ
OjpVUkw6OmNyZWF0ZShwYWdlVVJMU3RyaW5nKSk7CiAKLSAgICByZXR1cm4gSW1tdXRhYmxlRGlj
dGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtYXApKTsKKyAgICByZXR1cm4gQVBJOjpEaWN0aW9u
YXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1hcCkpOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQot
dm9pZCBnZXRQbGF0Zm9ybVBsdWdpbk1vZHVsZUluZm9ybWF0aW9uKGNvbnN0IFBsdWdpbk1vZHVs
ZUluZm8mLCBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlJikKK3ZvaWQgZ2V0UGxhdGZvcm1Q
bHVnaW5Nb2R1bGVJbmZvcm1hdGlvbihjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiwgQVBJOjpEaWN0
aW9uYXJ5OjpNYXBUeXBlJikKIHsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL1BsdWdpbnMvTmV0c2NhcGUvUGx1Z2luSW5mb3JtYXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9QbHVnaW5JbmZvcm1hdGlvbi5o
CShyZXZpc2lvbiAxNzc2OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRz
Y2FwZS9QbHVnaW5JbmZvcm1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBA
CiAjaWZuZGVmIFBsdWdpbkluZm9ybWF0aW9uX2gKICNkZWZpbmUgUGx1Z2luSW5mb3JtYXRpb25f
aAogCi0jaW5jbHVkZSAiSW1tdXRhYmxlRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIkFQSURpY3Rp
b25hcnkuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
QEAgLTUxLDEyICs1MSwxMiBAQCBTdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25QbHVnaW5zcGFnZUF0
dHJpCiBTdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25QbHVnaW5VUkxLZXkoKTsKIFN0cmluZyBwbHVn
SW5JbmZvcm1hdGlvblJlcGxhY2VtZW50T2JzY3VyZWRLZXkoKTsKIAotUGFzc1JlZlB0cjxJbW11
dGFibGVEaWN0aW9uYXJ5PiBjcmVhdGVQbHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnkoY29uc3Qg
UGx1Z2luTW9kdWxlSW5mbyYpOwotUGFzc1JlZlB0cjxJbW11dGFibGVEaWN0aW9uYXJ5PiBjcmVh
dGVQbHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnkoY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYsIGNv
bnN0IFN0cmluZyYgZnJhbWVVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IFN0cmluZyYgcGFnZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBwbHVnaW5zcGFnZUF0dHJpYnV0
ZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBwbHVnaW5VUkxTdHJpbmcsIGJvb2wgcmVwbGFjZW1l
bnRPYnNjdXJlZCA9IGZhbHNlKTsKLVBhc3NSZWZQdHI8SW1tdXRhYmxlRGljdGlvbmFyeT4gY3Jl
YXRlUGx1Z2luSW5mb3JtYXRpb25EaWN0aW9uYXJ5KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNv
bnN0IFN0cmluZyYgZnJhbWVVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgcGFnZVVSTFN0cmluZyk7
CitQYXNzUmVmUHRyPEFQSTo6RGljdGlvbmFyeT4gY3JlYXRlUGx1Z2luSW5mb3JtYXRpb25EaWN0
aW9uYXJ5KGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mKTsKK1Bhc3NSZWZQdHI8QVBJOjpEaWN0aW9u
YXJ5PiBjcmVhdGVQbHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnkoY29uc3QgUGx1Z2luTW9kdWxl
SW5mbyYsIGNvbnN0IFN0cmluZyYgZnJhbWVVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGNvbnN0IFN0cmluZyYgcGFnZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBwbHVnaW5zcGFn
ZUF0dHJpYnV0ZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBwbHVnaW5VUkxTdHJpbmcsIGJvb2wg
cmVwbGFjZW1lbnRPYnNjdXJlZCA9IGZhbHNlKTsKK1Bhc3NSZWZQdHI8QVBJOjpEaWN0aW9uYXJ5
PiBjcmVhdGVQbHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnkoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgY29uc3QgU3RyaW5nJiBmcmFtZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBwYWdlVVJMU3Ry
aW5nKTsKIAotdm9pZCBnZXRQbHVnaW5Nb2R1bGVJbmZvcm1hdGlvbihjb25zdCBQbHVnaW5Nb2R1
bGVJbmZvJiwgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZSYpOwotdm9pZCBnZXRQbGF0Zm9y
bVBsdWdpbk1vZHVsZUluZm9ybWF0aW9uKGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mLCBJbW11dGFi
bGVEaWN0aW9uYXJ5OjpNYXBUeXBlJik7Cit2b2lkIGdldFBsdWdpbk1vZHVsZUluZm9ybWF0aW9u
KGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mLCBBUEk6OkRpY3Rpb25hcnk6Ok1hcFR5cGUmKTsKK3Zv
aWQgZ2V0UGxhdGZvcm1QbHVnaW5Nb2R1bGVJbmZvcm1hdGlvbihjb25zdCBQbHVnaW5Nb2R1bGVJ
bmZvJiwgQVBJOjpEaWN0aW9uYXJ5OjpNYXBUeXBlJik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9tYWMvUGx1
Z2luSW5mb3JtYXRpb25NYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L1BsdWdpbnMvTmV0c2NhcGUvbWFjL1BsdWdpbkluZm9ybWF0aW9uTWFjLm1tCShyZXZpc2lvbiAx
Nzc2OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9tYWMvUGx1
Z2luSW5mb3JtYXRpb25NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQgZ2V0UGxhdGZvcm1QbHVnaW5Nb2R1bGVJbmZvcm1h
dGlvbihjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW4sIEltbXV0YWJsZURpY3Rpb25hcnk6
Ok1hcFR5cGUmIG1hcCkKK3ZvaWQgZ2V0UGxhdGZvcm1QbHVnaW5Nb2R1bGVJbmZvcm1hdGlvbihj
b25zdCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW4sIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSYg
bWFwKQogewogICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25CdW5kbGVJZGVudGlmaWVyS2V5
KCksIEFQSTo6U3RyaW5nOjpjcmVhdGUocGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIpKTsKICAgICBt
YXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlVmVyc2lvbktleSgpLCBBUEk6OlN0cmluZzo6
Y3JlYXRlKHBsdWdpbi52ZXJzaW9uU3RyaW5nKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvU3RhdGlzdGljc1JlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9TdGF0aXN0aWNzUmVxdWVzdC5jcHAJKHJldmlzaW9uIDE3NzY5NykKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdGF0aXN0aWNzUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJTdGF0aXN0aWNzUmVxdWVzdC5oIgogCiAj
aW5jbHVkZSAiQVBJQXJyYXkuaCIKLSNpbmNsdWRlICJNdXRhYmxlRGljdGlvbmFyeS5oIgorI2lu
Y2x1ZGUgIkFQSURpY3Rpb25hcnkuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTUxLDE2
ICs1MSwxNiBAQCB1aW50NjRfdCBTdGF0aXN0aWNzUmVxdWVzdDo6YWRkT3V0c3RhbmRpCiAgICAg
cmV0dXJuIHJlcXVlc3RJRDsKIH0KIAotc3RhdGljIHZvaWQgYWRkVG9EaWN0aW9uYXJ5RnJvbUhh
c2hNYXAoTXV0YWJsZURpY3Rpb25hcnkqIGRpY3Rpb25hcnksIGNvbnN0IEhhc2hNYXA8U3RyaW5n
LCB1aW50NjRfdD4mIG1hcCkKK3N0YXRpYyB2b2lkIGFkZFRvRGljdGlvbmFyeUZyb21IYXNoTWFw
KEFQSTo6RGljdGlvbmFyeSogZGljdGlvbmFyeSwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIHVpbnQ2
NF90PiYgbWFwKQogewogICAgIEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1hcC5lbmQoKTsKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAg
ICAgZGljdGlvbmFyeS0+c2V0KGl0LT5rZXksIFJlZlB0cjxBUEk6OlVJbnQ2ND4oQVBJOjpVSW50
NjQ6OmNyZWF0ZShpdC0+dmFsdWUpKS5nZXQoKSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPE11
dGFibGVEaWN0aW9uYXJ5PiBjcmVhdGVEaWN0aW9uYXJ5RnJvbUhhc2hNYXAoY29uc3QgSGFzaE1h
cDxTdHJpbmcsIHVpbnQ2NF90PiYgbWFwKQorc3RhdGljIFBhc3NSZWZQdHI8QVBJOjpEaWN0aW9u
YXJ5PiBjcmVhdGVEaWN0aW9uYXJ5RnJvbUhhc2hNYXAoY29uc3QgSGFzaE1hcDxTdHJpbmcsIHVp
bnQ2NF90PiYgbWFwKQogewotICAgIFJlZlB0cjxNdXRhYmxlRGljdGlvbmFyeT4gcmVzdWx0ID0g
TXV0YWJsZURpY3Rpb25hcnk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxBUEk6OkRpY3Rpb25hcnk+
IHJlc3VsdCA9IEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKCk7CiAgICAgYWRkVG9EaWN0aW9uYXJ5
RnJvbUhhc2hNYXAocmVzdWx0LmdldCgpLCBtYXApOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBA
IC03MSw3ICs3MSw3IEBAIHZvaWQgU3RhdGlzdGljc1JlcXVlc3Q6OmNvbXBsZXRlZFJlcXVlc3QK
ICAgICBtX291dHN0YW5kaW5nUmVxdWVzdHMucmVtb3ZlKHJlcXVlc3RJRCk7CiAKICAgICBpZiAo
IW1fcmVzcG9uc2VEaWN0aW9uYXJ5KQotICAgICAgICBtX3Jlc3BvbnNlRGljdGlvbmFyeSA9IE11
dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUoKTsKKyAgICAgICAgbV9yZXNwb25zZURpY3Rpb25hcnkg
PSBBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZSgpOwogICAgIAogICAgIC8vIEZJWE1FIChNdWx0aS1X
ZWJQcm9jZXNzKSA8cmRhcjovL3Byb2JsZW0vMTMyMDAwNTk+OiBUaGlzIGNvZGUgb3ZlcndyaXRl
cyBhbnkgcHJldmlvdXMgcmVzcG9uc2UgZGF0YSByZWNlaXZlZC4KICAgICAvLyBXaGVuIGdldHRp
bmcgcmVzcG9uc2VzIGZyb20gbXVsdGlwbGUgV2ViUHJvY2Vzc2VzIHdlIG5lZWQgdG8gY29tYmlu
ZSBpdGVtcyBpbnN0ZWFkIG9mIGNsb2JiZXJpbmcgdGhlbS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9TdGF0aXN0aWNzUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9TdGF0aXN0aWNzUmVxdWVzdC5oCShyZXZpc2lvbiAxNzc2OTcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RhdGlzdGljc1JlcXVlc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RydWN0IFN0YXRpc3Rp
Y3NEYXRhOwogCi10eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxJbW11dGFibGVEaWN0aW9uYXJ5Kj4g
RGljdGlvbmFyeUNhbGxiYWNrOwordHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpEaWN0aW9u
YXJ5Kj4gRGljdGlvbmFyeUNhbGxiYWNrOwogCiBlbnVtIFN0YXRpc3RpY3NSZXF1ZXN0VHlwZSB7
CiAgICAgU3RhdGlzdGljc1JlcXVlc3RUeXBlV2ViQ29udGVudCA9IDB4MDAwMDAwMDEsCkBAIC02
MSw3ICs2MSw3IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDx1aW50NjRfdD4gbV9vdXRzdGFuZGlu
Z1JlcXVlc3RzOwogICAgIFJlZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+IG1fY2FsbGJhY2s7CiAK
LSAgICBSZWZQdHI8TXV0YWJsZURpY3Rpb25hcnk+IG1fcmVzcG9uc2VEaWN0aW9uYXJ5OworICAg
IFJlZlB0cjxBUEk6OkRpY3Rpb25hcnk+IG1fcmVzcG9uc2VEaWN0aW9uYXJ5OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRGF0
YWJhc2VNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDE3NzY5NykKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDggKzI5LDggQEAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCiAj
aW5jbHVkZSAiQVBJQXJyYXkuaCIKKyNpbmNsdWRlICJBUElEaWN0aW9uYXJ5LmgiCiAjaW5jbHVk
ZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJJbW11dGFibGVEaWN0aW9uYXJ5Lmgi
CiAjaW5jbHVkZSAiV2ViRGF0YWJhc2VNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJE
YXRhYmFzZU1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wu
aCIKQEAgLTE5MCw3ICsxOTAsNyBAQCB2b2lkIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpkaWRH
ZXREYXRhCiAgICAgICAgICAgICBpZiAoZGF0YWJhc2VEZXRhaWxzLm1vZGlmaWNhdGlvblRpbWUo
KSkKICAgICAgICAgICAgICAgICBkZXRhaWxzTWFwLnNldChkYXRhYmFzZURldGFpbHNNb2RpZmlj
YXRpb25UaW1lS2V5KCksIEFQSTo6RG91YmxlOjpjcmVhdGUoZGF0YWJhc2VEZXRhaWxzLm1vZGlm
aWNhdGlvblRpbWUoKSkpOwogCi0gICAgICAgICAgICBkYXRhYmFzZXMudW5jaGVja2VkQXBwZW5k
KEltbXV0YWJsZURpY3Rpb25hcnk6OmNyZWF0ZShXVEY6Om1vdmUoZGV0YWlsc01hcCkpKTsKKyAg
ICAgICAgICAgIGRhdGFiYXNlcy51bmNoZWNrZWRBcHBlbmQoQVBJOjpEaWN0aW9uYXJ5OjpjcmVh
dGUoV1RGOjptb3ZlKGRldGFpbHNNYXApKSk7CiAgICAgICAgIH0KIAogICAgICAgICBIYXNoTWFw
PFN0cmluZywgUmVmUHRyPEFQSTo6T2JqZWN0Pj4gb3JpZ2luQW5kRGF0YWJhc2VzTWFwOwpAQCAt
MTk5LDcgKzE5OSw3IEBAIHZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OmRpZEdldERhdGEK
ICAgICAgICAgb3JpZ2luQW5kRGF0YWJhc2VzTWFwLnNldChvcmlnaW5Vc2FnZUtleSgpLCBBUEk6
OlVJbnQ2NDo6Y3JlYXRlKG9yaWdpbkFuZERhdGFiYXNlcy5vcmlnaW5Vc2FnZSkpOwogICAgICAg
ICBvcmlnaW5BbmREYXRhYmFzZXNNYXAuc2V0KGRhdGFiYXNlRGV0YWlsc0tleSgpLCBBUEk6OkFy
cmF5OjpjcmVhdGUoV1RGOjptb3ZlKGRhdGFiYXNlcykpKTsKIAotICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKEltbXV0YWJsZURpY3Rpb25hcnk6OmNyZWF0ZShXVEY6Om1vdmUob3JpZ2lu
QW5kRGF0YWJhc2VzTWFwKSkpOworICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKEFQSTo6
RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShvcmlnaW5BbmREYXRhYmFzZXNNYXApKSk7CiAg
ICAgfQogCiAgICAgY2FsbGJhY2stPnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1ZShBUEk6
OkFycmF5OjpjcmVhdGUoV1RGOjptb3ZlKHJlc3VsdCkpLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViRm9ybUNsaWVudC5jcHAJKHJldmlzaW9uIDE3NzY5NykKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkZv
cm1DbGllbnQuaCIKIAorI2luY2x1ZGUgIkFQSURpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJBUElT
dHJpbmcuaCIKLSNpbmNsdWRlICJJbW11dGFibGVEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiV0tB
UElDYXN0LmgiCiAjaW5jbHVkZSAiV2ViRm9ybVN1Ym1pc3Npb25MaXN0ZW5lclByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCkBAIC00NCwxMCArNDQsMTAgQEAgYm9vbCBXZWJGb3Jt
Q2xpZW50Ojp3aWxsU3VibWl0Rm9ybShXZWJQYQogICAgIGlmICghbV9jbGllbnQud2lsbFN1Ym1p
dEZvcm0pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEltbXV0YWJsZURpY3Rpb25hcnk6
Ok1hcFR5cGUgbWFwOworICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBtYXA7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0ZXh0RmllbGRWYWx1ZXMuc2l6ZSgpOyArK2kpCiAgICAgICAg
IG1hcC5zZXQodGV4dEZpZWxkVmFsdWVzW2ldLmZpcnN0LCBBUEk6OlN0cmluZzo6Y3JlYXRlKHRl
eHRGaWVsZFZhbHVlc1tpXS5zZWNvbmQpKTsKLSAgICBSZWZQdHI8SW1tdXRhYmxlRGljdGlvbmFy
eT4gdGV4dEZpZWxkc01hcCA9IEltbXV0YWJsZURpY3Rpb25hcnk6OmNyZWF0ZShXVEY6Om1vdmUo
bWFwKSk7CisgICAgUmVmUHRyPEFQSTo6RGljdGlvbmFyeT4gdGV4dEZpZWxkc01hcCA9IEFQSTo6
RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtYXApKTsKIAogICAgIG1fY2xpZW50LndpbGxT
dWJtaXRGb3JtKHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIHRvQVBJKHNvdXJjZUZyYW1lKSwg
dG9BUEkodGV4dEZpZWxkc01hcC5nZXQoKSksIHRvQVBJKHVzZXJEYXRhKSwgdG9BUEkobGlzdGVu
ZXIpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIHJldHVybiB0cnVlOwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJLZXlWYWx1ZVN0b3JhZ2VN
YW5hZ2VyLmNwcAkocmV2aXNpb24gMTc3Njk3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyAr
MTE2LDcgQEAgdm9pZCBXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyOjpnZXRTdG9yYQogICAgICAg
ICAgICAgaWYgKG9yaWdpbkRldGFpbHMubW9kaWZpY2F0aW9uVGltZSkKICAgICAgICAgICAgICAg
ICBkZXRhaWxzTWFwLnNldChXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyOjptb2RpZmljYXRpb25U
aW1lS2V5KCksIEFQSTo6RG91YmxlOjpjcmVhdGUob3JpZ2luRGV0YWlscy5tb2RpZmljYXRpb25U
aW1lLnZhbHVlT3IoMCkpKTsKIAotICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChJ
bW11dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKGRldGFpbHNNYXApKSk7CisgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdU
Rjo6bW92ZShkZXRhaWxzTWFwKSkpOwogICAgICAgICB9CiAKICAgICAgICAgY2FsbGJhY2tGdW5j
dGlvbihBUEk6OkFycmF5OjpjcmVhdGUoV1RGOjptb3ZlKHJlc3VsdCkpLmdldCgpLCBDYWxsYmFj
a0Jhc2U6OkVycm9yOjpOb25lKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCShyZXZpc2lvbiAxNzc2OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3Myw3ICsxNjczLDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmZpbmRQbHVnaW4oY29uc3QgU3RyaQogICAgIHBsdWdpbkxvYWRQ
b2xpY3kgPSBQbHVnaW5JbmZvU3RvcmU6OmRlZmF1bHRMb2FkUG9saWN5Rm9yUGx1Z2luKHBsdWdp
bik7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBSZWZQdHI8SW1tdXRhYmxlRGljdGlvbmFy
eT4gcGx1Z2luSW5mb3JtYXRpb24gPSBjcmVhdGVQbHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnko
cGx1Z2luLCBmcmFtZVVSTFN0cmluZywgU3RyaW5nKCksIHBhZ2VVUkxTdHJpbmcsIFN0cmluZygp
LCBTdHJpbmcoKSk7CisgICAgUmVmUHRyPEFQSTo6RGljdGlvbmFyeT4gcGx1Z2luSW5mb3JtYXRp
b24gPSBjcmVhdGVQbHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnkocGx1Z2luLCBmcmFtZVVSTFN0
cmluZywgU3RyaW5nKCksIHBhZ2VVUkxTdHJpbmcsIFN0cmluZygpLCBTdHJpbmcoKSk7CiAgICAg
cGx1Z2luTG9hZFBvbGljeSA9IG1fbG9hZGVyQ2xpZW50LT5wbHVnaW5Mb2FkUG9saWN5KHRoaXMs
IHN0YXRpY19jYXN0PFBsdWdpbk1vZHVsZUxvYWRQb2xpY3k+KHBsdWdpbkxvYWRQb2xpY3kpLCBw
bHVnaW5JbmZvcm1hdGlvbi5nZXQoKSwgdW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbik7CiAjZWxz
ZQogICAgIFVOVVNFRF9QQVJBTShmcmFtZVVSTFN0cmluZyk7CkBAIC0zMjk0LDcgKzMyOTQsNyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6dW5hdmFpbGFibGVQbHVnaW5CdXR0CiAgICAgTUVTU0FHRV9D
SEVDS19VUkwoZnJhbWVVUkxTdHJpbmcpOwogICAgIE1FU1NBR0VfQ0hFQ0tfVVJMKHBhZ2VVUkxT
dHJpbmcpOwogCi0gICAgUmVmUHRyPEltbXV0YWJsZURpY3Rpb25hcnk+IHBsdWdpbkluZm9ybWF0
aW9uOworICAgIFJlZlB0cjxBUEk6OkRpY3Rpb25hcnk+IHBsdWdpbkluZm9ybWF0aW9uOwogICAg
IFN0cmluZyBuZXdNaW1lVHlwZSA9IG1pbWVUeXBlOwogICAgIFBsdWdpbk1vZHVsZUluZm8gcGx1
Z2luID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnBsdWdpbkluZm9TdG9yZSgpLmZpbmRQbHVn
aW4obmV3TWltZVR5cGUsIFVSTChVUkwoKSwgcGx1Z2luVVJMU3RyaW5nKSk7CiAgICAgcGx1Z2lu
SW5mb3JtYXRpb24gPSBjcmVhdGVQbHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnkocGx1Z2luLCBm
cmFtZVVSTFN0cmluZywgbWltZVR5cGUsIHBhZ2VVUkxTdHJpbmcsIHBsdWdpbnNwYWdlQXR0cmli
dXRlVVJMU3RyaW5nLCBwbHVnaW5VUkxTdHJpbmcpOwpAQCAtNDk2Miw3ICs0OTYyLDcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmRpZEZhaWxUb0luaXRpYWxpemVQbAogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6ZGlkQmxvY2tJbnNlY3VyZVBsdWdpblZlcnNpb24oY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Y29uc3QgU3RyaW5nJiBwbHVnaW5VUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVVUkxTdHJp
bmcsIGNvbnN0IFN0cmluZyYgcGFnZVVSTFN0cmluZywgYm9vbCByZXBsYWNlbWVudE9ic2N1cmVk
KQogewotICAgIFJlZlB0cjxJbW11dGFibGVEaWN0aW9uYXJ5PiBwbHVnaW5JbmZvcm1hdGlvbjsK
KyAgICBSZWZQdHI8QVBJOjpEaWN0aW9uYXJ5PiBwbHVnaW5JbmZvcm1hdGlvbjsKIAogI2lmIFBM
QVRGT1JNKENPQ09BKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBTdHJpbmcg
bmV3TWltZVR5cGUgPSBtaW1lVHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmNwcAkocmV2aXNpb24gMTc3Njk3KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NiBAQAogI2luY2x1ZGUgIkRvd25sb2FkUHJveHkuaCIKICNpbmNsdWRlICJEb3dubG9hZFByb3h5
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTXV0YWJsZURpY3Rp
b25hcnkuaCIKICNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiU3RhdGlz
dGljc0RhdGEuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgpAQCAtMTMyNyw3ICsxMzI2LDcg
QEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6aHR0cFBpcGVsaW5pbmdFbmFibAogI2VuZGlmCiB9CiAK
LXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdldFN0YXRpc3RpY3ModWludDMyX3Qgc3RhdGlzdGljc01h
c2ssIHN0ZDo6ZnVuY3Rpb248dm9pZCAoSW1tdXRhYmxlRGljdGlvbmFyeSosIENhbGxiYWNrQmFz
ZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0aW9uKQordm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0U3Rh
dGlzdGljcyh1aW50MzJfdCBzdGF0aXN0aWNzTWFzaywgc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6
OkRpY3Rpb25hcnkqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsK
ICAgICBpZiAoIXN0YXRpc3RpY3NNYXNrKSB7CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24obnVs
bHB0ciwgQ2FsbGJhY2tCYXNlOjpFcnJvcjo6VW5rbm93bik7CkBAIC0xNDE4LDEyICsxNDE3LDEy
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsdWdJbkRpZFJlY2VpdmVVc2UKICAgICBtX3BsdWdJ
bkF1dG9TdGFydFByb3ZpZGVyLmRpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24ocGx1Z0luT3JpZ2lu
SGFzaCwgc2Vzc2lvbklEKTsKIH0KIAotUGFzc1JlZlB0cjxJbW11dGFibGVEaWN0aW9uYXJ5PiBX
ZWJQcm9jZXNzUG9vbDo6cGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzKCkgY29uc3QKK1Bhc3NS
ZWZQdHI8QVBJOjpEaWN0aW9uYXJ5PiBXZWJQcm9jZXNzUG9vbDo6cGx1Z0luQXV0b1N0YXJ0T3Jp
Z2luSGFzaGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wbHVnSW5BdXRvU3RhcnRQcm92aWRl
ci5hdXRvU3RhcnRPcmlnaW5zVGFibGVDb3B5KCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNldFBsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2hlcyhJbW11dGFibGVEaWN0aW9uYXJ5JiBkaWN0
aW9uYXJ5KQordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0UGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFz
aGVzKEFQSTo6RGljdGlvbmFyeSYgZGljdGlvbmFyeSkKIHsKICAgICBtX3BsdWdJbkF1dG9TdGFy
dFByb3ZpZGVyLnNldEF1dG9TdGFydE9yaWdpbnNUYWJsZShkaWN0aW9uYXJ5KTsKIH0KQEAgLTE0
MzMsNyArMTQzMiw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFBsdWdJbkF1dG9TdGFydE8K
ICAgICBtX3BsdWdJbkF1dG9TdGFydFByb3ZpZGVyLnNldEF1dG9TdGFydE9yaWdpbnNBcnJheShh
cnJheSk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFBsdWdJbkF1dG9TdGFydE9yaWdp
bnNGaWx0ZXJpbmdPdXRFbnRyaWVzQWRkZWRBZnRlclRpbWUoSW1tdXRhYmxlRGljdGlvbmFyeSYg
ZGljdGlvbmFyeSwgZG91YmxlIHRpbWUpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRQbHVnSW5B
dXRvU3RhcnRPcmlnaW5zRmlsdGVyaW5nT3V0RW50cmllc0FkZGVkQWZ0ZXJUaW1lKEFQSTo6RGlj
dGlvbmFyeSYgZGljdGlvbmFyeSwgZG91YmxlIHRpbWUpCiB7CiAgICAgbV9wbHVnSW5BdXRvU3Rh
cnRQcm92aWRlci5zZXRBdXRvU3RhcnRPcmlnaW5zRmlsdGVyaW5nT3V0RW50cmllc0FkZGVkQWZ0
ZXJUaW1lKGRpY3Rpb25hcnksIHRpbWUpOwogfQpAQCAtMTQ2Miw3ICsxNDYxLDcgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cGx1Z2luSW5mb1N0b3JlRGlkTAogICAgIHBsdWdpbnMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShwbHVnaW5Nb2R1bGVzLnNpemUoKSk7CiAKICAgICBmb3IgKGNvbnN0IGF1
dG8mIHBsdWdpbk1vZHVsZSA6IHBsdWdpbk1vZHVsZXMpIHsKLSAgICAgICAgSW1tdXRhYmxlRGlj
dGlvbmFyeTo6TWFwVHlwZSBtYXA7CisgICAgICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBt
YXA7CiAgICAgICAgIG1hcC5zZXQoQVNDSUlMaXRlcmFsKCJwYXRoIiksIEFQSTo6U3RyaW5nOjpj
cmVhdGUocGx1Z2luTW9kdWxlLnBhdGgpKTsKICAgICAgICAgbWFwLnNldChBU0NJSUxpdGVyYWwo
Im5hbWUiKSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShwbHVnaW5Nb2R1bGUuaW5mby5uYW1lKSk7CiAg
ICAgICAgIG1hcC5zZXQoQVNDSUlMaXRlcmFsKCJmaWxlIiksIEFQSTo6U3RyaW5nOjpjcmVhdGUo
cGx1Z2luTW9kdWxlLmluZm8uZmlsZSkpOwpAQCAtMTQ3OSw3ICsxNDc4LDcgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGx1Z2luSW5mb1N0b3JlRGlkTAogICAgICAgICBtYXAuc2V0KEFTQ0lJTGl0
ZXJhbCgidmVyc2lvbiIpLCBBUEk6OlN0cmluZzo6Y3JlYXRlKHBsdWdpbk1vZHVsZS52ZXJzaW9u
U3RyaW5nKSk7CiAjZW5kaWYKIAotICAgICAgICBwbHVnaW5zLnVuY2hlY2tlZEFwcGVuZChJbW11
dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1hcCkpKTsKKyAgICAgICAgcGx1Z2lu
cy51bmNoZWNrZWRBcHBlbmQoQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1hcCkp
KTsKICAgICB9CiAKICAgICBtX2NsaWVudC5wbHVnSW5JbmZvcm1hdGlvbkJlY2FtZUF2YWlsYWJs
ZSh0aGlzLCBBUEk6OkFycmF5OjpjcmVhdGUoV1RGOjptb3ZlKHBsdWdpbnMpKS5nZXQoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkocmV2aXNpb24g
MTc3Njk3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxMCBAQAogI2lmbmRlZiBXZWJQcm9jZXNzUG9vbF9o
CiAjZGVmaW5lIFdlYlByb2Nlc3NQb29sX2gKIAorI2luY2x1ZGUgIkFQSURpY3Rpb25hcnkuaCIK
ICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJEb3dubG9hZFByb3h5TWFwLmgiCiAj
aW5jbHVkZSAiR2VuZXJpY0NhbGxiYWNrLmgiCi0jaW5jbHVkZSAiSW1tdXRhYmxlRGljdGlvbmFy
eS5oIgogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VSZWNl
aXZlck1hcC5oIgogI2luY2x1ZGUgIlBsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmgiCkBAIC04NCw3
ICs4NCw3IEBAIHN0cnVjdCBTdGF0aXN0aWNzRGF0YTsKIHN0cnVjdCBXZWJQYWdlQ29uZmlndXJh
dGlvbjsKIHN0cnVjdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogICAgIAotdHlwZWRl
ZiBHZW5lcmljQ2FsbGJhY2s8SW1tdXRhYmxlRGljdGlvbmFyeSo+IERpY3Rpb25hcnlDYWxsYmFj
azsKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6RGljdGlvbmFyeSo+IERpY3Rpb25hcnlD
YWxsYmFjazsKIAogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCiBzdHJ1Y3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7CkBAIC0yNzYsNyArMjc2LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0SFRUUFBpcGVsaW5pbmdFbmFibGVkKGJvb2wpOwogICAgIGJvb2wgaHR0cFBpcGVs
aW5pbmdFbmFibGVkKCkgY29uc3Q7CiAKLSAgICB2b2lkIGdldFN0YXRpc3RpY3ModWludDMyX3Qg
c3RhdGlzdGljc01hc2ssIHN0ZDo6ZnVuY3Rpb248dm9pZCAoSW1tdXRhYmxlRGljdGlvbmFyeSos
IENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CisgICAgdm9pZCBnZXRTdGF0aXN0aWNzKHVpbnQzMl90
IHN0YXRpc3RpY3NNYXNrLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFQSTo6RGljdGlvbmFyeSosIENh
bGxiYWNrQmFzZTo6RXJyb3IpPik7CiAgICAgCiAgICAgdm9pZCBnYXJiYWdlQ29sbGVjdEphdmFT
Y3JpcHRPYmplY3RzKCk7CiAgICAgdm9pZCBzZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRp
bWVyRW5hYmxlZChib29sIGZsYWcpOwpAQCAtMjg5LDEwICsyODksMTAgQEAgcHVibGljOgogCiAg
ICAgdm9pZCB0ZXh0Q2hlY2tlclN0YXRlQ2hhbmdlZCgpOwogCi0gICAgUGFzc1JlZlB0cjxJbW11
dGFibGVEaWN0aW9uYXJ5PiBwbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKSBjb25zdDsKLSAg
ICB2b2lkIHNldFBsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2hlcyhJbW11dGFibGVEaWN0aW9uYXJ5
Jik7CisgICAgUGFzc1JlZlB0cjxBUEk6OkRpY3Rpb25hcnk+IHBsdWdJbkF1dG9TdGFydE9yaWdp
bkhhc2hlcygpIGNvbnN0OworICAgIHZvaWQgc2V0UGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVz
KEFQSTo6RGljdGlvbmFyeSYpOwogICAgIHZvaWQgc2V0UGx1Z0luQXV0b1N0YXJ0T3JpZ2lucyhB
UEk6OkFycmF5Jik7Ci0gICAgdm9pZCBzZXRQbHVnSW5BdXRvU3RhcnRPcmlnaW5zRmlsdGVyaW5n
T3V0RW50cmllc0FkZGVkQWZ0ZXJUaW1lKEltbXV0YWJsZURpY3Rpb25hcnkmLCBkb3VibGUgdGlt
ZSk7CisgICAgdm9pZCBzZXRQbHVnSW5BdXRvU3RhcnRPcmlnaW5zRmlsdGVyaW5nT3V0RW50cmll
c0FkZGVkQWZ0ZXJUaW1lKEFQSTo6RGljdGlvbmFyeSYsIGRvdWJsZSB0aW1lKTsKIAogICAgIC8v
IE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJSZXNvdXJjZUNhY2hlTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5jcHAJKHJl
dmlzaW9uIDE3NzY5NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUNh
Y2hlTWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHku
aCIKIAorI2luY2x1ZGUgIkFQSURpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJBUElTZWN1cml0eU9y
aWdpbi5oIgotI2luY2x1ZGUgIkltbXV0YWJsZURpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbkRhdGEuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1ZGUg
IldlYlJlc291cmNlQ2FjaGVNYW5hZ2VyTWVzc2FnZXMuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQVBJTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9BUElMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gMTc3Njk3KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElMb2FkZXJDbGllbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQCBjbGFzcyBSZXNvdXJjZUVycm9yOwogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk7Ci1jbGFzcyBJ
bW11dGFibGVEaWN0aW9uYXJ5OwogY2xhc3MgUXVpY2tMb29rRG9jdW1lbnREYXRhOwogY2xhc3Mg
V2ViQmFja0ZvcndhcmRMaXN0SXRlbTsKIGNsYXNzIFdlYkZyYW1lUHJveHk7CkBAIC01MCw2ICs0
OSw3IEBAIHN0cnVjdCBXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlOwogCiBuYW1lc3BhY2UgQVBJIHsK
IAorY2xhc3MgRGljdGlvbmFyeTsKIGNsYXNzIE9iamVjdDsKIAogY2xhc3MgTG9hZGVyQ2xpZW50
IHsKQEAgLTEwMyw5ICsxMDMsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0
ZUhpc3RvcnlUaXRsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGNvbnN0IFdURjo6U3RyaW5nJiwg
Y29uc3QgV1RGOjpTdHJpbmcmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IH0KIAogI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHZpcnR1YWwgV2ViS2l0OjpQbHVnaW5Nb2R1
bGVMb2FkUG9saWN5IHBsdWdpbkxvYWRQb2xpY3koV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBXZWJL
aXQ6OlBsdWdpbk1vZHVsZUxvYWRQb2xpY3kgY3VycmVudFBsdWdpbkxvYWRQb2xpY3ksIFdlYktp
dDo6SW1tdXRhYmxlRGljdGlvbmFyeSosIFdURjo6U3RyaW5nJiAvKiB1bmF2YWlsYWJpbGl0eURl
c2NyaXB0aW9uICovKSB7IHJldHVybiBjdXJyZW50UGx1Z2luTG9hZFBvbGljeTsgfQotICAgIHZp
cnR1YWwgdm9pZCBkaWRGYWlsVG9Jbml0aWFsaXplUGx1Z2luKFdlYktpdDo6V2ViUGFnZVByb3h5
KiwgV2ViS2l0OjpJbW11dGFibGVEaWN0aW9uYXJ5KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZEJsb2NrSW5zZWN1cmVQbHVnaW5WZXJzaW9uKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgV2ViS2l0
OjpJbW11dGFibGVEaWN0aW9uYXJ5KikgeyB9CisgICAgdmlydHVhbCBXZWJLaXQ6OlBsdWdpbk1v
ZHVsZUxvYWRQb2xpY3kgcGx1Z2luTG9hZFBvbGljeShXZWJLaXQ6OldlYlBhZ2VQcm94eSosIFdl
YktpdDo6UGx1Z2luTW9kdWxlTG9hZFBvbGljeSBjdXJyZW50UGx1Z2luTG9hZFBvbGljeSwgQVBJ
OjpEaWN0aW9uYXJ5KiwgV1RGOjpTdHJpbmcmIC8qIHVuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb24g
Ki8pIHsgcmV0dXJuIGN1cnJlbnRQbHVnaW5Mb2FkUG9saWN5OyB9CisgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWxUb0luaXRpYWxpemVQbHVnaW4oV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBBUEk6OkRp
Y3Rpb25hcnkqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQmxvY2tJbnNlY3VyZVBsdWdpblZl
cnNpb24oV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBBUEk6OkRpY3Rpb25hcnkqKSB7IH0KICNlbmRp
ZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAogI2lmIEVOQUJMRShXRUJHTCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmgJKHJldmlzaW9u
IDE3NzY5NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNiBAQCBzdHJ1Y3QgV2luZG93RmVhdHVyZXM7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFBy
b3h5OwotY2xhc3MgSW1tdXRhYmxlRGljdGlvbmFyeTsKIGNsYXNzIE5hdGl2ZVdlYktleWJvYXJk
RXZlbnQ7CiBjbGFzcyBOYXRpdmVXZWJXaGVlbEV2ZW50OwogY2xhc3MgTm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3Q7CkBAIC02Miw2ICs2MSw3IEBAIHN0cnVjdCBOYXZpZ2F0aW9uQWN0aW9u
RGF0YTsKIG5hbWVzcGFjZSBBUEkgewogCiBjbGFzcyBEYXRhOworY2xhc3MgRGljdGlvbmFyeTsK
IGNsYXNzIE9iamVjdDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCkBAIC04Nyw3ICs4Nyw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVzVGV4dChXZWJLaXQ6OldlYlBhZ2VQ
cm94eSosIGNvbnN0IFdURjo6U3RyaW5nJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlRGlk
TW92ZU92ZXJFbGVtZW50KFdlYktpdDo6V2ViUGFnZVByb3h5KiwgY29uc3QgV2ViS2l0OjpXZWJI
aXRUZXN0UmVzdWx0OjpEYXRhJiwgV2ViS2l0OjpXZWJFdmVudDo6TW9kaWZpZXJzLCBBUEk6Ok9i
amVjdCopIHsgfQogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHZpcnR1YWwg
dm9pZCB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQoV2ViS2l0OjpXZWJQYWdlUHJveHkq
LCBXS1BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uLCBXZWJLaXQ6OkltbXV0YWJsZURpY3Rpb25h
cnkqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2Vk
KFdlYktpdDo6V2ViUGFnZVByb3h5KiwgV0tQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiwgQVBJ
OjpEaWN0aW9uYXJ5KikgeyB9CiAjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0RpZE5vdEhhbmRsZUtleUV2ZW50KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS1BhZ2UuY3BwCShyZXZpc2lvbiAxNzc2OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDEzIEBACiAK
ICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQSURhdGEuaCIKKyNpbmNsdWRlICJB
UElEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiQVBJRmluZENsaWVudC5oIgogI2luY2x1ZGUgIkFQ
SUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkFQSVBvbGljeUNsaWVudC5oIgogI2luY2x1ZGUg
IkFQSVNlc3Npb25TdGF0ZS5oIgogI2luY2x1ZGUgIkFQSVVJQ2xpZW50LmgiCiAjaW5jbHVkZSAi
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgotI2luY2x1ZGUgIkltbXV0YWJsZURpY3Rp
b25hcnkuaCIKICNpbmNsdWRlICJMZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuaCIKICNpbmNsdWRl
ICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVu
dC5oIgpAQCAtMTAyMyw3ICsxMDIzLDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlTG9hZGVyQ2xpZW50
KFdLUGFnZVJlZgogICAgICAgICB9CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxUb0luaXRpYWxpemVQbHVnaW4oV2ViUGFnZVBy
b3h5KiBwYWdlLCBJbW11dGFibGVEaWN0aW9uYXJ5KiBwbHVnaW5JbmZvcm1hdGlvbikgb3ZlcnJp
ZGUKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxUb0luaXRpYWxpemVQbHVnaW4oV2ViUGFn
ZVByb3h5KiBwYWdlLCBBUEk6OkRpY3Rpb25hcnkqIHBsdWdpbkluZm9ybWF0aW9uKSBvdmVycmlk
ZQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9jbGllbnQuZGlkRmFpbFRvSW5pdGlhbGl6
ZVBsdWdpbl9kZXByZWNhdGVkRm9yVXNlV2l0aFYwKQogICAgICAgICAgICAgICAgIG1fY2xpZW50
LmRpZEZhaWxUb0luaXRpYWxpemVQbHVnaW5fZGVwcmVjYXRlZEZvclVzZVdpdGhWMCh0b0FQSShw
YWdlKSwgdG9BUEkocGx1Z2luSW5mb3JtYXRpb24tPmdldDxBUEk6OlN0cmluZz4ocGx1Z2luSW5m
b3JtYXRpb25NSU1FVHlwZUtleSgpKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CkBAIC0x
MDM1LDcgKzEwMzUsNyBAQCB2b2lkIFdLUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQoV0tQYWdlUmVm
CiAgICAgICAgICAgICAgICAgbV9jbGllbnQucGx1Z2luRGlkRmFpbCh0b0FQSShwYWdlKSwga1dL
RXJyb3JDb2RlQ2Fubm90TG9hZFBsdWdJbiwgdG9BUEkocGx1Z2luSW5mb3JtYXRpb24pLCBtX2Ns
aWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lk
IGRpZEJsb2NrSW5zZWN1cmVQbHVnaW5WZXJzaW9uKFdlYlBhZ2VQcm94eSogcGFnZSwgSW1tdXRh
YmxlRGljdGlvbmFyeSogcGx1Z2luSW5mb3JtYXRpb24pIG92ZXJyaWRlCisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRCbG9ja0luc2VjdXJlUGx1Z2luVmVyc2lvbihXZWJQYWdlUHJveHkqIHBhZ2Us
IEFQSTo6RGljdGlvbmFyeSogcGx1Z2luSW5mb3JtYXRpb24pIG92ZXJyaWRlCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmIChtX2NsaWVudC5wbHVnaW5EaWRGYWlsX2RlcHJlY2F0ZWRGb3JVc2VX
aXRoVjEpCiAgICAgICAgICAgICAgICAgbV9jbGllbnQucGx1Z2luRGlkRmFpbF9kZXByZWNhdGVk
Rm9yVXNlV2l0aFYxKHRvQVBJKHBhZ2UpLCBrV0tFcnJvckNvZGVJbnNlY3VyZVBsdWdJblZlcnNp
b24sIHRvQVBJKHBsdWdpbkluZm9ybWF0aW9uLT5nZXQ8QVBJOjpTdHJpbmc+KHBsdWdpbkluZm9y
bWF0aW9uTUlNRVR5cGVLZXkoKSkpLCB0b0FQSShwbHVnaW5JbmZvcm1hdGlvbi0+Z2V0PEFQSTo6
U3RyaW5nPihwbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZUlkZW50aWZpZXJLZXkoKSkpLCB0b0FQSShw
bHVnaW5JbmZvcm1hdGlvbi0+Z2V0PEFQSTo6U3RyaW5nPihwbHVnaW5JbmZvcm1hdGlvbkJ1bmRs
ZVZlcnNpb25LZXkoKSkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwpAQCAtMTA0NCw3ICsx
MDQ0LDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlTG9hZGVyQ2xpZW50KFdLUGFnZVJlZgogICAgICAg
ICAgICAgICAgIG1fY2xpZW50LnBsdWdpbkRpZEZhaWwodG9BUEkocGFnZSksIGtXS0Vycm9yQ29k
ZUluc2VjdXJlUGx1Z0luVmVyc2lvbiwgdG9BUEkocGx1Z2luSW5mb3JtYXRpb24pLCBtX2NsaWVu
dC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCBQbHVnaW5N
b2R1bGVMb2FkUG9saWN5IHBsdWdpbkxvYWRQb2xpY3koV2ViUGFnZVByb3h5KiBwYWdlLCBQbHVn
aW5Nb2R1bGVMb2FkUG9saWN5IGN1cnJlbnRQbHVnaW5Mb2FkUG9saWN5LCBJbW11dGFibGVEaWN0
aW9uYXJ5KiBwbHVnaW5JbmZvcm1hdGlvbiwgU3RyaW5nJiB1bmF2YWlsYWJpbGl0eURlc2NyaXB0
aW9uKSBvdmVycmlkZQorICAgICAgICB2aXJ0dWFsIFBsdWdpbk1vZHVsZUxvYWRQb2xpY3kgcGx1
Z2luTG9hZFBvbGljeShXZWJQYWdlUHJveHkqIHBhZ2UsIFBsdWdpbk1vZHVsZUxvYWRQb2xpY3kg
Y3VycmVudFBsdWdpbkxvYWRQb2xpY3ksIEFQSTo6RGljdGlvbmFyeSogcGx1Z2luSW5mb3JtYXRp
b24sIFN0cmluZyYgdW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbikgb3ZlcnJpZGUKICAgICAgICAg
ewogICAgICAgICAgICAgV0tTdHJpbmdSZWYgdW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbk91dCA9
IDA7CiAgICAgICAgICAgICBQbHVnaW5Nb2R1bGVMb2FkUG9saWN5IGxvYWRQb2xpY3kgPSBjdXJy
ZW50UGx1Z2luTG9hZFBvbGljeTsKQEAgLTExOTIsNyArMTE5Miw3IEBAIHZvaWQgV0tQYWdlU2V0
UGFnZVVJQ2xpZW50KFdLUGFnZVJlZiBwYWcKICAgICAgICAgICAgIGlmIChtX2NsaWVudC5iYXNl
LnZlcnNpb24gPiAwICYmICFtX2NsaWVudC5jcmVhdGVOZXdQYWdlKQogICAgICAgICAgICAgICAg
IHJldHVybiAwOwogCi0gICAgICAgICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlIG1h
cDsKKyAgICAgICAgICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBtYXA7CiAgICAgICAgICAg
ICBpZiAod2luZG93RmVhdHVyZXMueFNldCkKICAgICAgICAgICAgICAgICBtYXAuc2V0KCJ4Iiwg
QVBJOjpEb3VibGU6OmNyZWF0ZSh3aW5kb3dGZWF0dXJlcy54KSk7CiAgICAgICAgICAgICBpZiAo
d2luZG93RmVhdHVyZXMueVNldCkKQEAgLTEyMDksNyArMTIwOSw3IEBAIHZvaWQgV0tQYWdlU2V0
UGFnZVVJQ2xpZW50KFdLUGFnZVJlZiBwYWcKICAgICAgICAgICAgIG1hcC5zZXQoInJlc2l6YWJs
ZSIsIEFQSTo6Qm9vbGVhbjo6Y3JlYXRlKHdpbmRvd0ZlYXR1cmVzLnJlc2l6YWJsZSkpOwogICAg
ICAgICAgICAgbWFwLnNldCgiZnVsbHNjcmVlbiIsIEFQSTo6Qm9vbGVhbjo6Y3JlYXRlKHdpbmRv
d0ZlYXR1cmVzLmZ1bGxzY3JlZW4pKTsKICAgICAgICAgICAgIG1hcC5zZXQoImRpYWxvZyIsIEFQ
STo6Qm9vbGVhbjo6Y3JlYXRlKHdpbmRvd0ZlYXR1cmVzLmRpYWxvZykpOwotICAgICAgICAgICAg
UmVmUHRyPEltbXV0YWJsZURpY3Rpb25hcnk+IGZlYXR1cmVzTWFwID0gSW1tdXRhYmxlRGljdGlv
bmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtYXApKTsKKyAgICAgICAgICAgIFJlZlB0cjxBUEk6OkRp
Y3Rpb25hcnk+IGZlYXR1cmVzTWFwID0gQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3Zl
KG1hcCkpOwogCiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmJhc2UudmVyc2lvbikKICAgICAg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYodG9JbXBsKG1fY2xpZW50LmNyZWF0ZU5ld1BhZ2Vf
ZGVwcmVjYXRlZEZvclVzZVdpdGhWMCh0b0FQSShwYWdlKSwgdG9BUEkoZmVhdHVyZXNNYXAuZ2V0
KCkpLCB0b0FQSShuYXZpZ2F0aW9uQWN0aW9uRGF0YS5tb2RpZmllcnMpLCB0b0FQSShuYXZpZ2F0
aW9uQWN0aW9uRGF0YS5tb3VzZUJ1dHRvbiksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbykpKTsK
QEAgLTEzMjIsNyArMTMyMiw3IEBAIHZvaWQgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KFdLUGFnZVJl
ZiBwYWcKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQoV2ViUGFnZVBy
b3h5KiBwYWdlLCBXS1BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uIHBsdWdpblVuYXZhaWxhYmls
aXR5UmVhc29uLCBJbW11dGFibGVEaWN0aW9uYXJ5KiBwbHVnaW5JbmZvcm1hdGlvbikgb3ZlcnJp
ZGUKKyAgICAgICAgdmlydHVhbCB2b2lkIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChX
ZWJQYWdlUHJveHkqIHBhZ2UsIFdLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24gcGx1Z2luVW5h
dmFpbGFiaWxpdHlSZWFzb24sIEFQSTo6RGljdGlvbmFyeSogcGx1Z2luSW5mb3JtYXRpb24pIG92
ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChwbHVnaW5VbmF2YWlsYWJpbGl0eVJl
YXNvbiA9PSBrV0tQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvblBsdWdpbk1pc3NpbmcpIHsKICAg
ICAgICAgICAgICAgICBpZiAobV9jbGllbnQubWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNrZWRfZGVw
cmVjYXRlZEZvclVzZVdpdGhWMCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9tYWMvV0tDb250ZXh0UHJpdmF0ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvbWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW0JKHJldmlzaW9uIDE3
NzY5NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9tYWMvV0tDb250ZXh0UHJp
dmF0ZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsOSBAQAogI2ltcG9ydCAiV0tD
b250ZXh0UHJpdmF0ZU1hYy5oIgogCiAjaW1wb3J0ICJBUElBcnJheS5oIgorI2ltcG9ydCAiQVBJ
RGljdGlvbmFyeS5oIgogI2ltcG9ydCAiQVBJTnVtYmVyLmgiCiAjaW1wb3J0ICJBUElTdHJpbmcu
aCIKLSNpbXBvcnQgIkltbXV0YWJsZURpY3Rpb25hcnkuaCIKICNpbXBvcnQgIlBsdWdpbkluZm9T
dG9yZS5oIgogI2ltcG9ydCAiUGx1Z2luSW5mb3JtYXRpb24uaCIKICNpbXBvcnQgIlN0cmluZ1V0
aWxpdGllcy5oIgpAQCAtNTksNyArNTksNyBAQCBXS0RpY3Rpb25hcnlSZWYgV0tDb250ZXh0Q29w
eVBsdWdJbkluZm9GCiAgICAgaWYgKHBsdWdpbi5wYXRoLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIFJlZlB0cjxJbW11dGFibGVEaWN0aW9uYXJ5PiBkaWN0aW9uYXJ5ID0gY3Jl
YXRlUGx1Z2luSW5mb3JtYXRpb25EaWN0aW9uYXJ5KHBsdWdpbik7CisgICAgUmVmUHRyPEFQSTo6
RGljdGlvbmFyeT4gZGljdGlvbmFyeSA9IGNyZWF0ZVBsdWdpbkluZm9ybWF0aW9uRGljdGlvbmFy
eShwbHVnaW4pOwogICAgIHJldHVybiB0b0FQSShkaWN0aW9uYXJ5LnJlbGVhc2UoKS5sZWFrUmVm
KCkpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0
aW9uTWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24gMTc3Njk3KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgIldlYk5vdGlmaWNhdGlv
bk1hbmFnZXJQcm94eS5oIgogCiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKKyNpbmNsdWRlICJBUElE
aWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJJ
bW11dGFibGVEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiV2ViTm90aWZpY2F0aW9uLmgiCiAjaW5j
bHVkZSAiV2ViTm90aWZpY2F0aW9uTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5LmgiCkBAIC04NSw3ICs4NSw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFuYWdlclBy
b3h5OjpkZXJlZlcKIAogdm9pZCBXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk6OnBvcHVsYXRl
Q29weU9mTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoSGFzaE1hcDxTdHJpbmcsIGJvb2w+JiBwZXJt
aXNzaW9ucykKIHsKLSAgICBSZWZQdHI8SW1tdXRhYmxlRGljdGlvbmFyeT4ga25vd25QZXJtaXNz
aW9ucyA9IG1fcHJvdmlkZXIubm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKTsKKyAgICBSZWZQdHI8
QVBJOjpEaWN0aW9uYXJ5PiBrbm93blBlcm1pc3Npb25zID0gbV9wcm92aWRlci5ub3RpZmljYXRp
b25QZXJtaXNzaW9ucygpOwogCiAgICAgaWYgKCFrbm93blBlcm1pc3Npb25zKQogICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJO
b3RpZmljYXRpb25Qcm92aWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwCShyZXZpc2lv
biAxNzc2OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJO
b3RpZmljYXRpb25Qcm92aWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDkgQEAK
ICNpbmNsdWRlICJXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oIgogCiAjaW5jbHVkZSAiQVBJQXJy
YXkuaCIKKyNpbmNsdWRlICJBUElEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiQVBJTnVtYmVyLmgi
CiAjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJJbW11dGFibGVEaWN0
aW9uYXJ5LmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCiAjaW5jbHVkZSAiV2ViTm90aWZpY2F0
aW9uLmgiCiAjaW5jbHVkZSAiV2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5LmgiCkBAIC05MSwx
MCArOTEsMTAgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25Qcm92aWRlcjo6cmVtb3ZlTm90aQogICAg
IG1fY2xpZW50LnJlbW92ZU5vdGlmaWNhdGlvbk1hbmFnZXIodG9BUEkobWFuYWdlciksIG1fY2xp
ZW50LmJhc2UuY2xpZW50SW5mbyk7CiB9CiAKLVBhc3NSZWZQdHI8SW1tdXRhYmxlRGljdGlvbmFy
eT4gV2ViTm90aWZpY2F0aW9uUHJvdmlkZXI6Om5vdGlmaWNhdGlvblBlcm1pc3Npb25zKCkKK1Bh
c3NSZWZQdHI8QVBJOjpEaWN0aW9uYXJ5PiBXZWJOb3RpZmljYXRpb25Qcm92aWRlcjo6bm90aWZp
Y2F0aW9uUGVybWlzc2lvbnMoKQogewogICAgIGlmICghbV9jbGllbnQubm90aWZpY2F0aW9uUGVy
bWlzc2lvbnMpCi0gICAgICAgIHJldHVybiBJbW11dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUoKTsK
KyAgICAgICAgcmV0dXJuIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKCk7CiAKICAgICByZXR1cm4g
YWRvcHRSZWYodG9JbXBsKG1fY2xpZW50Lm5vdGlmaWNhdGlvblBlcm1pc3Npb25zKG1fY2xpZW50
LmJhc2UuY2xpZW50SW5mbykpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9O
b3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uUHJvdmlk
ZXIuaAkocmV2aXNpb24gMTc3Njk3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05vdGlm
aWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsOSBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEFQSSB7CisK
K2NsYXNzIERpY3Rpb25hcnk7CisKIHRlbXBsYXRlPD4gc3RydWN0IENsaWVudFRyYWl0czxXS05v
dGlmaWNhdGlvblByb3ZpZGVyQmFzZT4gewogICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxXS05vdGlm
aWNhdGlvblByb3ZpZGVyVjA+IFZlcnNpb25zOwogfTsKQEAgLTM5LDcgKzQyLDYgQEAgdGVtcGxh
dGU8PiBzdHJ1Y3QgQ2xpZW50VHJhaXRzPFdLTm90aWZpYwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAotY2xhc3MgSW1tdXRhYmxlRGljdGlvbmFyeTsKIGNsYXNzIFdlYk5vdGlmaWNhdGlvbjsKIGNs
YXNzIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKQEAg
LTU0LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkTm90aWZpY2F0aW9uTWFuYWdlcihX
ZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHkqKTsKICAgICB2b2lkIHJlbW92ZU5vdGlmaWNhdGlv
bk1hbmFnZXIoV2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5Kik7CiAgICAgCi0gICAgUGFzc1Jl
ZlB0cjxJbW11dGFibGVEaWN0aW9uYXJ5PiBub3RpZmljYXRpb25QZXJtaXNzaW9ucygpOworICAg
IFBhc3NSZWZQdHI8QVBJOjpEaWN0aW9uYXJ5PiBub3RpZmljYXRpb25QZXJtaXNzaW9ucygpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvUGx1Z2lucy9QbHVnSW5BdXRvU3RhcnRQcm92aWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuY3Bw
CShyZXZpc2lvbiAxNzc2OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9Q
bHVnSW5BdXRvU3RhcnRQcm92aWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKICNpbmNsdWRlICJQbHVnSW5BdXRvU3RhcnRQcm92aWRlci5oIgogCiAjaW5jbHVkZSAiQVBJ
QXJyYXkuaCIKLSNpbmNsdWRlICJJbW11dGFibGVEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiQVBJ
RGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRDbGllbnQuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgpAQCAtODcs
MzIgKzg3LDMyIEBAIFNlc3Npb25QbHVnSW5BdXRvU3RhcnRPcmlnaW5NYXAgUGx1Z0luQXUKICAg
ICByZXR1cm4gc2Vzc2lvbk1hcDsKIH0KIAotUGFzc1JlZlB0cjxJbW11dGFibGVEaWN0aW9uYXJ5
PiBQbHVnSW5BdXRvU3RhcnRQcm92aWRlcjo6YXV0b1N0YXJ0T3JpZ2luc1RhYmxlQ29weSgpIGNv
bnN0CitQYXNzUmVmUHRyPEFQSTo6RGljdGlvbmFyeT4gUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI6
OmF1dG9TdGFydE9yaWdpbnNUYWJsZUNvcHkoKSBjb25zdAogewotICAgIEltbXV0YWJsZURpY3Rp
b25hcnk6Ok1hcFR5cGUgbWFwOworICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBtYXA7CiAK
ICAgICBkb3VibGUgbm93ID0gY3VycmVudFRpbWUoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0
cmluZ09yaWdpbkhhc2ggOiBtX2F1dG9TdGFydFRhYmxlLmdldChTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSkpIHsKLSAgICAgICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZSBoYXNo
TWFwOworICAgICAgICBBUEk6OkRpY3Rpb25hcnk6Ok1hcFR5cGUgaGFzaE1hcDsKICAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiBvcmlnaW5IYXNoIDogc3RyaW5nT3JpZ2luSGFzaC52YWx1ZSkgewog
ICAgICAgICAgICAgaWYgKG5vdyA8PSBvcmlnaW5IYXNoLnZhbHVlKQogICAgICAgICAgICAgICAg
IGhhc2hNYXAuc2V0KFN0cmluZzo6bnVtYmVyKG9yaWdpbkhhc2gua2V5KSwgQVBJOjpEb3VibGU6
OmNyZWF0ZShvcmlnaW5IYXNoLnZhbHVlKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGhhc2hN
YXAuc2l6ZSgpKQotICAgICAgICAgICAgbWFwLnNldChzdHJpbmdPcmlnaW5IYXNoLmtleSwgSW1t
dXRhYmxlRGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShoYXNoTWFwKSkpOworICAgICAgICAg
ICAgbWFwLnNldChzdHJpbmdPcmlnaW5IYXNoLmtleSwgQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUo
V1RGOjptb3ZlKGhhc2hNYXApKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEltbXV0YWJsZURpY3Rp
b25hcnk6OmNyZWF0ZShXVEY6Om1vdmUobWFwKSk7CisgICAgcmV0dXJuIEFQSTo6RGljdGlvbmFy
eTo6Y3JlYXRlKFdURjo6bW92ZShtYXApKTsKIH0KIAotdm9pZCBQbHVnSW5BdXRvU3RhcnRQcm92
aWRlcjo6c2V0QXV0b1N0YXJ0T3JpZ2luc1RhYmxlKEltbXV0YWJsZURpY3Rpb25hcnkmIHRhYmxl
KQordm9pZCBQbHVnSW5BdXRvU3RhcnRQcm92aWRlcjo6c2V0QXV0b1N0YXJ0T3JpZ2luc1RhYmxl
KEFQSTo6RGljdGlvbmFyeSYgdGFibGUpCiB7CiAgICAgc2V0QXV0b1N0YXJ0T3JpZ2luc1RhYmxl
V2l0aEl0ZW1zUGFzc2luZ1Rlc3QodGFibGUsIFtdKGRvdWJsZSkgewogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKIH0KIAotdm9pZCBQbHVnSW5BdXRvU3RhcnRQcm92aWRlcjo6c2V0QXV0
b1N0YXJ0T3JpZ2luc0ZpbHRlcmluZ091dEVudHJpZXNBZGRlZEFmdGVyVGltZShJbW11dGFibGVE
aWN0aW9uYXJ5JiB0YWJsZSwgZG91YmxlIHRpbWUpCit2b2lkIFBsdWdJbkF1dG9TdGFydFByb3Zp
ZGVyOjpzZXRBdXRvU3RhcnRPcmlnaW5zRmlsdGVyaW5nT3V0RW50cmllc0FkZGVkQWZ0ZXJUaW1l
KEFQSTo6RGljdGlvbmFyeSYgdGFibGUsIGRvdWJsZSB0aW1lKQogewogICAgIGRvdWJsZSBhZGp1
c3RlZFRpbWVzdGFtcCA9IHRpbWUgKyBwbHVnSW5BdXRvU3RhcnRFeHBpcmF0aW9uVGltZVRocmVz
aG9sZDsKICAgICBzZXRBdXRvU3RhcnRPcmlnaW5zVGFibGVXaXRoSXRlbXNQYXNzaW5nVGVzdCh0
YWJsZSwgW2FkanVzdGVkVGltZXN0YW1wXShkb3VibGUgZXhwaXJhdGlvblRpbWVzdGFtcCkgewpA
QCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI6OnNldEF1dG9T
dGEKICAgICB9KTsKIH0KIAotdm9pZCBQbHVnSW5BdXRvU3RhcnRQcm92aWRlcjo6c2V0QXV0b1N0
YXJ0T3JpZ2luc1RhYmxlV2l0aEl0ZW1zUGFzc2luZ1Rlc3QoSW1tdXRhYmxlRGljdGlvbmFyeSYg
dGFibGUsIHN0ZDo6ZnVuY3Rpb248Ym9vbChkb3VibGUgZXhwaXJhdGlvblRpbWVzdGFtcCk+IGlz
RXhwaXJhdGlvblRpbWVBY2NlcHRhYmxlKQordm9pZCBQbHVnSW5BdXRvU3RhcnRQcm92aWRlcjo6
c2V0QXV0b1N0YXJ0T3JpZ2luc1RhYmxlV2l0aEl0ZW1zUGFzc2luZ1Rlc3QoQVBJOjpEaWN0aW9u
YXJ5JiB0YWJsZSwgc3RkOjpmdW5jdGlvbjxib29sKGRvdWJsZSBleHBpcmF0aW9uVGltZXN0YW1w
KT4gaXNFeHBpcmF0aW9uVGltZUFjY2VwdGFibGUpCiB7CiAgICAgQVNTRVJUKGlzRXhwaXJhdGlv
blRpbWVBY2NlcHRhYmxlKTsKIApAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgUGx1Z0luQXV0b1N0
YXJ0UHJvdmlkZXI6OnNldEF1dG9TdGEKIAogICAgIGZvciAoYXV0byYgc3RyRGljdCA6IHRhYmxl
Lm1hcCgpKSB7CiAgICAgICAgIFBsdWdJbkF1dG9TdGFydE9yaWdpbk1hcCBoYXNoZXM7Ci0gICAg
ICAgIGZvciAoYXV0byYgaGFzaFRpbWUgOiBzdGF0aWNfY2FzdDxJbW11dGFibGVEaWN0aW9uYXJ5
Kj4oc3RyRGljdC52YWx1ZS5nZXQoKSktPm1hcCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgaGFz
aFRpbWUgOiBzdGF0aWNfY2FzdDxBUEk6OkRpY3Rpb25hcnkqPihzdHJEaWN0LnZhbHVlLmdldCgp
KS0+bWFwKCkpIHsKICAgICAgICAgICAgIGJvb2wgb2s7CiAgICAgICAgICAgICB1bnNpZ25lZCBo
YXNoID0gaGFzaFRpbWUua2V5LnRvVUludCgmb2spOwogICAgICAgICAgICAgaWYgKCFvaykKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdJbkF1dG9TdGFydFByb3Zp
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1
Z0luQXV0b1N0YXJ0UHJvdmlkZXIuaAkocmV2aXNpb24gMTc3Njk3KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsMTEgKzM3LDExIEBACiAKIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgQXJyYXk7
CitjbGFzcyBEaWN0aW9uYXJ5OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgSW1t
dXRhYmxlRGljdGlvbmFyeTsKIGNsYXNzIFdlYlByb2Nlc3NQb29sOwogCiB0eXBlZGVmIEhhc2hN
YXA8dW5zaWduZWQsIGRvdWJsZT4gUGx1Z0luQXV0b1N0YXJ0T3JpZ2luTWFwOwpAQCAtNTYsOSAr
NTYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRBdXRvU3RhcnRPcmlnaW5IYXNoKGNvbnN0IFN0
cmluZyYgcGFnZU9yaWdpbiwgdW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCwgV2ViQ29yZTo6U2Vz
c2lvbklEKTsKICAgICB2b2lkIGRpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24odW5zaWduZWQgcGx1
Z0luT3JpZ2luSGFzaCwgV2ViQ29yZTo6U2Vzc2lvbklEKTsKIAotICAgIFBhc3NSZWZQdHI8SW1t
dXRhYmxlRGljdGlvbmFyeT4gYXV0b1N0YXJ0T3JpZ2luc1RhYmxlQ29weSgpIGNvbnN0OwotICAg
IHZvaWQgc2V0QXV0b1N0YXJ0T3JpZ2luc1RhYmxlKEltbXV0YWJsZURpY3Rpb25hcnkmKTsKLSAg
ICB2b2lkIHNldEF1dG9TdGFydE9yaWdpbnNGaWx0ZXJpbmdPdXRFbnRyaWVzQWRkZWRBZnRlclRp
bWUoSW1tdXRhYmxlRGljdGlvbmFyeSYsIGRvdWJsZSB0aW1lKTsKKyAgICBQYXNzUmVmUHRyPEFQ
STo6RGljdGlvbmFyeT4gYXV0b1N0YXJ0T3JpZ2luc1RhYmxlQ29weSgpIGNvbnN0OworICAgIHZv
aWQgc2V0QXV0b1N0YXJ0T3JpZ2luc1RhYmxlKEFQSTo6RGljdGlvbmFyeSYpOworICAgIHZvaWQg
c2V0QXV0b1N0YXJ0T3JpZ2luc0ZpbHRlcmluZ091dEVudHJpZXNBZGRlZEFmdGVyVGltZShBUEk6
OkRpY3Rpb25hcnkmLCBkb3VibGUgdGltZSk7CiAgICAgdm9pZCBzZXRBdXRvU3RhcnRPcmlnaW5z
QXJyYXkoQVBJOjpBcnJheSYpOwogCiAgICAgU2Vzc2lvblBsdWdJbkF1dG9TdGFydE9yaWdpbk1h
cCBhdXRvU3RhcnRPcmlnaW5IYXNoZXNDb3B5KCkgY29uc3Q7CkBAIC02Nyw3ICs2Nyw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViUHJvY2Vzc1Bvb2wqIG1fcHJvY2Vzc1Bvb2w7CiAKLSAg
ICB2b2lkIHNldEF1dG9TdGFydE9yaWdpbnNUYWJsZVdpdGhJdGVtc1Bhc3NpbmdUZXN0KEltbXV0
YWJsZURpY3Rpb25hcnkmLCBzdGQ6OmZ1bmN0aW9uPGJvb2woZG91YmxlIGV4cGlyYXRpb25UaW1l
c3RhbXApPik7CisgICAgdm9pZCBzZXRBdXRvU3RhcnRPcmlnaW5zVGFibGVXaXRoSXRlbXNQYXNz
aW5nVGVzdChBUEk6OkRpY3Rpb25hcnkmLCBzdGQ6OmZ1bmN0aW9uPGJvb2woZG91YmxlIGV4cGly
YXRpb25UaW1lc3RhbXApPik7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBQbHVnSW5B
dXRvU3RhcnRPcmlnaW5NYXAsIENhc2VGb2xkaW5nSGFzaD4gQXV0b1N0YXJ0VGFibGU7CiAgICAg
dHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OlNlc3Npb25JRCwgQXV0b1N0YXJ0VGFibGU+IFNlc3Np
b25BdXRvU3RhcnRUYWJsZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3NzY5NykKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTA0Niw2ICsxMDQ2LDggQEAKIAkJN0MxMzVBQTgxNzNCMEJDQTAwNTg2QUUyIC8qIFdLUGx1Z2lu
SW5mb3JtYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MxMzVBQTYxNzNCMEJDQTAwNTg2QUUyIC8qIFdLUGx1Z2luSW5mb3JtYXRpb24uY3Bw
ICovOyB9OwogCQk3QzEzNUFBOTE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MxMzVB
QTcxNzNCMEJDQTAwNTg2QUUyIC8qIFdLUGx1Z2luSW5mb3JtYXRpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzEzNUFBQzE3M0IwQ0ZGMDA1
ODZBRTIgLyogUGx1Z2luSW5mb3JtYXRpb25NYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzEzNUFBQTE3M0IwQ0ZGMDA1ODZBRTIgLyogUGx1Z2lu
SW5mb3JtYXRpb25NYWMubW0gKi87IH07CisJCTdDMUJBMzNEMUE0QTBFNjAwMDQzRTI0OSAvKiBB
UElEaWN0aW9uYXJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDMUJBMzNCMUE0QTBFNjAwMDQzRTI0OSAvKiBBUElEaWN0aW9uYXJ5LmNwcCAqLzsg
fTsKKwkJN0MxQkEzM0UxQTRBMEU2MDAwNDNFMjQ5IC8qIEFQSURpY3Rpb25hcnkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMUJBMzNDMUE0QTBFNjAw
MDQzRTI0OSAvKiBBUElEaWN0aW9uYXJ5LmggKi87IH07CiAJCTdDMzYxRDcyMTkyN0ZBMzYwMDM2
QTU5RCAvKiBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzM2MUQ2RjE5MjdGQTM2MDAzNkE1OUQgLyogV2Vi
U2NyaXB0TWVzc2FnZUhhbmRsZXIuY3BwICovOyB9OwogCQk3QzM2MUQ3MzE5MjdGQTM2MDAzNkE1
OUQgLyogV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMzYxRDcwMTkyN0ZBMzYwMDM2QTU5RCAvKiBXZWJTY3Jp
cHRNZXNzYWdlSGFuZGxlci5oICovOyB9OwogCQk3QzM2MUQ3ODE5MjgwM0JEMDAzNkE1OUQgLyog
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzNjFENzYxOTI4MDNCRDAw
MzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCAqLzsgfTsKQEAgLTE0NDQsOCArMTQ0Niw2IEBACiAJCUJDQUYzNjFGMTZDQTI4Q0QwMEQ0RTlG
QyAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDM0RFNDY4MTVBOTE3NjMwMDhEMjZGQyAvKiBGb3VuZGF0aW9u
LmZyYW1ld29yayAqLzsgfTsKIAkJQkNBRjM2MjAxNkNBMjhENjAwRDRFOUZDIC8qIEZvdW5kYXRp
b24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkMzREU0NjgxNUE5MTc2MzAwOEQyNkZDIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICov
OyB9OwogCQlCQ0FGMzYyMjE2Q0EyOTJCMDBENEU5RkMgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsg
aW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzNERTQ2
ODE1QTkxNzYzMDA4RDI2RkMgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07Ci0JCUJDQjBB
RUU5MTIyRjUzRTMwMEIxMzQxRSAvKiBNdXRhYmxlRGljdGlvbmFyeS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCMEFFRTcxMjJGNTNFMzAwQjEzNDFF
IC8qIE11dGFibGVEaWN0aW9uYXJ5LmggKi87IH07Ci0JCUJDQjBBRUVBMTIyRjUzRTMwMEIxMzQx
RSAvKiBNdXRhYmxlRGljdGlvbmFyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0IwQUVFODEyMkY1M0UzMDBCMTM0MUUgLyogTXV0YWJsZURpY3Rp
b25hcnkuY3BwICovOyB9OwogCQlCQ0IwQjBEQzEyMzA1QTI1MDBCMTM0MUUgLyogV2ViQ29udGV4
dFVzZXJNZXNzYWdlQ29kZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0IwQjBEQjEyMzA1QTI1MDBCMTM0MUUgLyogV2ViQ29udGV4dFVzZXJNZXNz
YWdlQ29kZXJzLmggKi87IH07CiAJCUJDQjBCMERFMTIzMDVBOEMwMEIxMzQxRSAvKiBJbmplY3Rl
ZEJ1bmRsZVVzZXJNZXNzYWdlQ29kZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0IwQjBERDEyMzA1QThDMDBCMTM0MUUgLyogSW5qZWN0ZWRCdW5k
bGVVc2VyTWVzc2FnZUNvZGVycy5oICovOyB9OwogCQlCQ0IwQjBFMDEyMzA1QUIxMDBCMTM0MUUg
LyogVXNlck1lc3NhZ2VDb2RlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDQjBCMERGMTIzMDVBQjEwMEIxMzQxRSAvKiBVc2VyTWVzc2FnZUNvZGVy
cy5oICovOyB9OwpAQCAtMTQ2Niw4ICsxNDY2LDYgQEAKIAkJQkNCQUFDRjUxNDUyMzI0RjAwNTNG
ODJGIC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXAubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0JBQUNFRjE0NTIzMjQ0MDA1M0Y4MkYgLyogV0tCcm93
c2luZ0NvbnRleHRHcm91cC5tbSAqLzsgfTsKIAkJQkNCQUFDRjYxNDUyMzI0RjAwNTNGODJGIC8q
IFdLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0JBQUNGMDE0NTIzMjQ4MDA1M0Y4MkYgLyogV0tCcm93
c2luZ0NvbnRleHRHcm91cFByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlCQ0JBQUQwQjE0NTYwQTQzMDA1M0Y4MkYgLyogV0tCcm93c2lu
Z0NvbnRleHRMb2FkRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDQkFBRDBBMTQ1NjBBNDMwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4
dExvYWREZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCUJDQkNCMENCMTIxNUUzMjEwMERFNTlDQSAvKiBJbW11dGFibGVEaWN0aW9uYXJ5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0JDQjBD
QTEyMTVFMzIxMDBERTU5Q0EgLyogSW1tdXRhYmxlRGljdGlvbmFyeS5oICovOyB9OwotCQlCQ0JD
QjBDRDEyMTVFMzNBMDBERTU5Q0EgLyogSW1tdXRhYmxlRGljdGlvbmFyeS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0JDQjBDQzEyMTVFMzNBMDBE
RTU5Q0EgLyogSW1tdXRhYmxlRGljdGlvbmFyeS5jcHAgKi87IH07CiAJCUJDQkQzOTE0MTI1QkIx
QTgwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCRDM5MTIxMjVCQjFBODAwRDJD
MjlGIC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCUJDQkQzOTE1
MTI1QkIxQTgwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCRDM5MTMxMjVCQjFBODAwRDJDMjlG
IC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VzLmggKi87IH07CiAJCUJDQkVDREU3MTZCNjQxNjgwMDA0
N0ExQSAvKiBYUENTZXJ2aWNlRW50cnlQb2ludC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkVDREU1MTZCNjQxNjcwMDA0N0ExQSAvKiBYUENTZXJ2
aWNlRW50cnlQb2ludC5tbSAqLzsgfTsKQEAgLTMxMzksNiArMzEzNyw4IEBACiAJCTdDMTM1QUE2
MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLUGx1Z2luSW5mb3JtYXRpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEzNUFBNzE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVn
aW5JbmZvcm1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1BsdWdp
bkluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMTM1QUFBMTcz
QjBDRkYwMDU4NkFFMiAvKiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsdWdpbkluZm9ybWF0aW9uTWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3QzFCQTMzQjFBNEEwRTYwMDA0M0UyNDkgLyogQVBJRGlj
dGlvbmFyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBUElEaWN0
aW9uYXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MxQkEzM0MxQTRBMEU2
MDAwNDNFMjQ5IC8qIEFQSURpY3Rpb25hcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQVBJRGljdGlvbmFyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzM2
MUQ2RjE5MjdGQTM2MDAzNkE1OUQgLyogV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzM2MUQ3MDE5MjdGQTM2MDAzNkE1
OUQgLyogV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0MzNjFENzUxOTI4MDI4QjAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU2NCw4ICszNTY0
LDYgQEAKIAkJQkNBQ0M0NDAxNkIyNENBQTAwQjZFMDkyIC8qIEluZm8tT1NYLnBsaXN0ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5wbGlzdC54bWw7IHBhdGggPSAiSW5mby1PU1gucGxpc3QiOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQ0FDQzQ0MzE2QjI0Q0FBMDBCNkUwOTIgLyogSW5mby1PU1gu
cGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDsgcGF0aCA9ICJJbmZvLU9TWC5wbGlzdCI7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQUU5REU5MTYwQzA5NzQwMEEzMzIxNyAv
KiBjb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQuRGV2ZWxvcG1lbnQueHBjICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmNmYnVuZGxlOyBp
bmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBjb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQuRGV2
ZWxvcG1lbnQueHBjOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQlCQ0Iw
QUVFNzEyMkY1M0UzMDBCMTM0MUUgLyogTXV0YWJsZURpY3Rpb25hcnkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTXV0YWJsZURpY3Rpb25hcnkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQkNCMEFFRTgxMjJGNTNFMzAwQjEzNDFFIC8qIE11dGFibGVEaWN0aW9u
YXJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE11dGFibGVEaWN0
aW9uYXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNCMEIwREIxMjMwNUEy
NTAwQjEzNDFFIC8qIFdlYkNvbnRleHRVc2VyTWVzc2FnZUNvZGVycy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb250ZXh0VXNlck1lc3NhZ2VDb2RlcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNCMEIwREQxMjMwNUE4QzAwQjEzNDFFIC8qIEluamVj
dGVkQnVuZGxlVXNlck1lc3NhZ2VDb2RlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUNvZGVycy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQ0IwQjBERjEyMzA1QUIxMDBCMTM0MUUgLyogVXNlck1lc3NhZ2VDb2Rl
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlck1lc3NhZ2VDb2RlcnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1ODcsOCArMzU4NSw2IEBACiAJCUJD
QkFBQ0VGMTQ1MjMyNDQwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tCcm93c2luZ0NvbnRleHRHcm91
cC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNCQUFDRjAxNDUyMzI0ODAwNTNG
ODJGIC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQkFBRDBBMTQ1NjBBNDMwMDUzRjgyRiAvKiBXS0Jyb3dz
aW5nQ29udGV4dExvYWREZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCQ0JDQjBDQTEyMTVFMzIxMDBERTU5Q0EgLyogSW1tdXRhYmxlRGljdGlvbmFyeS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbW11dGFibGVEaWN0aW9uYXJ5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDQkNCMENDMTIxNUUzM0EwMERFNTlDQSAv
KiBJbW11dGFibGVEaWN0aW9uYXJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEltbXV0YWJsZURpY3Rpb25hcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQ0JEMzhGQTEyNUJBQjlBMDBEMkMyOUYgLyogV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmlu
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNCRDM5MTIxMjVCQjFBODAwRDJDMjlGIC8qIFdlYlBh
Z2VQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJQYWdlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQ0JEMzkxMzEyNUJCMUE4MDBEMkMyOUYgLyogV2ViUGFnZVByb3h5TWVz
c2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZVByb3h5TWVz
c2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0OTksMTQgKzQ0OTUsMTAg
QEAKIAkJCQk3NjJCNzQ4MTEyMEJCQTAxMDA4MTkzMzkgLyogRm9udFNtb290aGluZ0xldmVsLmgg
Ki8sCiAJCQkJRjYzODk1NEYxMzNCRUYzODAwODk0MUQ1IC8qIEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kuaCAqLywKIAkJCQlCQ0NGNkIyMzEyQzkzRTdBMDA4RjlDMzUgLyogSW1hZ2VPcHRpb25zLmgg
Ki8sCi0JCQkJQkNCQ0IwQ0MxMjE1RTMzQTAwREU1OUNBIC8qIEltbXV0YWJsZURpY3Rpb25hcnku
Y3BwICovLAotCQkJCUJDQkNCMENBMTIxNUUzMjEwMERFNTlDQSAvKiBJbW11dGFibGVEaWN0aW9u
YXJ5LmggKi8sCiAJCQkJQzU4Q0RGMkIxODg3NjA5RjAwODcxNTM2IC8qIEludGVyYWN0aW9uSW5m
b3JtYXRpb25BdFBvc2l0aW9uLmNwcCAqLywKIAkJCQlDNThDREYyQzE4ODc2MDlGMDA4NzE1MzYg
LyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCAqLywKIAkJCQkxQTkyREMxMjEy
RjhCQUI5MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5jcHAgKi8sCiAJCQkJMUE5MkRDMTAx
MkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCAqLywKLQkJCQlCQ0IwQUVFODEy
MkY1M0UzMDBCMTM0MUUgLyogTXV0YWJsZURpY3Rpb25hcnkuY3BwICovLAotCQkJCUJDQjBBRUU3
MTIyRjUzRTMwMEIxMzQxRSAvKiBNdXRhYmxlRGljdGlvbmFyeS5oICovLAogCQkJCUMwMkJGRjE1
MTI1MTRGRDgwMDlDQ0JFQSAvKiBOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmggKi8sCiAJCQkJMzFF
QTI1RDMxMzRGNzhENjAwNUIxNDUyIC8qIE5hdGl2ZVdlYk1vdXNlRXZlbnQuaCAqLywKIAkJCQky
NjMxNzJDRTE4QjQ2OTQ5MDA2NUI5QzMgLyogTmF0aXZlV2ViVG91Y2hFdmVudC5oICovLApAQCAt
Njc2OSw2ICs2NzYxLDggQEAKIAkJCQkxQTNERDIwNTEyNUU1QTJGMDA0NTE1RTYgLyogQVBJQ2xp
ZW50LmggKi8sCiAJCQkJMUFBQjAzN0IxODVGOTlEODAwRURGNTAxIC8qIEFQSURhdGEuY3BwICov
LAogCQkJCTUxNTc4QjgyMTIwOUVDRUYwMEEzN0M0QSAvKiBBUElEYXRhLmggKi8sCisJCQkJN0Mx
QkEzM0IxQTRBMEU2MDAwNDNFMjQ5IC8qIEFQSURpY3Rpb25hcnkuY3BwICovLAorCQkJCTdDMUJB
MzNDMUE0QTBFNjAwMDQzRTI0OSAvKiBBUElEaWN0aW9uYXJ5LmggKi8sCiAJCQkJQkM1NzU2MTIx
MjZFMDEzODAwNkYwRjEyIC8qIEFQSUVycm9yLmNwcCAqLywKIAkJCQk1MTZBNEE1QjEyMEEyQ0NE
MDBDMDVCN0YgLyogQVBJRXJyb3IuaCAqLywKIAkJCQkxQUMxMzM2RjE4NTY2QzdDMDBGM0VDMDUg
LyogQVBJRnJhbWVIYW5kbGUuY3BwICovLApAQCAtNzI3MSw2ICs3MjY1LDcgQEAKIAkJCQkxQUVG
RDI3OTExRDE2QzgxMDA4MjE5RDMgLyogQXJndW1lbnRDb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUFFRkQyRjcxMUQxODA3QjAwODIxOUQzIC8qIEFyZ3VtZW50Q29kZXJzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQUFGMEM0QTEyQjE2MzM0MDA4RTQ5RTIgLyogQXJndW1lbnRDb2RlcnNDRi5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0MxQkEzM0UxQTRBMEU2MDAwNDNFMjQ5IC8qIEFQSURpY3Rp
b25hcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNzlGRDlDMTM0RDM4MDYwMDE1Qjg4MyAvKiBB
cmd1bWVudENvZGVyc01hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJEQTYxMEY0MzdEMTAw
NThDMTVBIC8qIEFyZ3VtZW50RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJEQTgx
MEY0MzdEMTAwNThDMTVBIC8qIEFyZ3VtZW50RW5jb2Rlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03
MzUwLDcgKzczNDUsNiBAQAogCQkJCTUxODM1M0RCMTg4NUJGOEMwMEQ5RkU0NCAvKiBJREJTZXJp
YWxpemF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUUzNTFDQjE4MEYyQ0NDMDBFNTNCRTkg
LyogSURCVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGNkIyNTEyQzkzRTdBMDA4
RjlDMzUgLyogSW1hZ2VPcHRpb25zLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQ0JDQjBDQjEyMTVF
MzIxMDBERTU5Q0EgLyogSW1tdXRhYmxlRGljdGlvbmFyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUExRUM2OUUxODcyMDkyMTAwQjk1MUYwIC8qIEltcG9ydGFuY2VBc3NlcnRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMjA0RUUzMTFDODNFOTgwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRsZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1RUVCQTIxMjc3NjFEMDAwMzMyMkI4IC8qIEluamVjdGVk
QnVuZGxlQmFja0ZvcndhcmRMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTczOTQsNyArNzM4OCw2
IEBACiAJCQkJMUEzRUVEMEYxNjFBNTM1NDAwQUVCNEY1IC8qIE1lc3NhZ2VSZWNlaXZlck1hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBQjAzN0ExODVBN0M2QTAwRURGNTAxIC8qIE1lc3NhZ2VT
ZW5kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMwRTNBQTdDMTIwOUU4M0MwMEE0OUQwMSAvKiBN
b2R1bGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDQjBBRUU5MTIyRjUzRTMwMEIxMzQxRSAvKiBN
dXRhYmxlRGljdGlvbmFyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjYzMTcyQ0YxOEI0Njk0OTAw
NjVCOUMzIC8qIE5hdGl2ZVdlYlRvdWNoRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRENC
ODZCMTg5ODMxQjMwMDIyRUU1QSAvKiBOYXZpZ2F0aW9uQWN0aW9uRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUFCQzNERjYxODk5RTQzNzAwNEYwNjI2IC8qIE5hdmlnYXRpb25TdGF0ZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC05MDM0LDcgKzkwMjcsNiBAQAogCQkJCTJEQTA0OUI3MTgwQ0NEMEEw
MEFBRkE5RSAvKiBHcmFwaGljc0xheWVyQ0FSZW1vdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTE4MzUzREExODg1QkY4QzAwRDlGRTQ0IC8qIElEQlNlcmlhbGl6YXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFFMzUxQ0ExODBGMkNDQzAwRTUzQkU5IC8qIElEQlV0aWxpdGllcy5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlCQ0JDQjBDRDEyMTVFMzNBMDBERTU5Q0EgLyogSW1tdXRhYmxl
RGljdGlvbmFyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzIwNEVFMjExQzgzRTk4MDA4RjMz
NzUgLyogSW5qZWN0ZWRCdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1RUVCQTExMjc3
NjFDQzAwMzMyMkI4IC8qIEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzNUVFQkEzMTI3NzYxRDMwMDMzMjJCOCAvKiBJbmplY3RlZEJ1bmRsZUJh
Y2tGb3J3YXJkTGlzdEl0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MDc5LDcgKzkwNzEsNiBA
QAogCQkJCTFBQUIwMzc5MTg1QTdDNkEwMEVERjUwMSAvKiBNZXNzYWdlU2VuZGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUMwRTNBQTdCMTIwOUU4MzUwMEE0OUQwMSAvKiBNb2R1bGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQzBFM0FBN0ExMjA5RTgzMDAwQTQ5RDAxIC8qIE1vZHVsZUNGLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUJDQjBBRUVBMTIyRjUzRTMwMEIxMzQxRSAvKiBNdXRhYmxl
RGljdGlvbmFyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREE5NDQ5RTE4ODRFNEYwMDBFRDg2
REIgLyogTmF0aXZlV2ViS2V5Ym9hcmRFdmVudElPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMw
MkJGRjFFMTI1MTUwMkUwMDlDQ0JFQSAvKiBOYXRpdmVXZWJLZXlib2FyZEV2ZW50TWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMzFFQTI1RDIxMzRGNzhDMDAwNUIxNDUyIC8qIE5hdGl2ZVdlYk1v
dXNlRXZlbnRNYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTkyNDcsNiArOTIzOCw3IEBACiAJCQkJ
MUE0NEI5NUIxNkI3M0Y5RjAwQjdCQkQ4IC8qIFN0b3JhZ2VNYW5hZ2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBQjMxQTk2MTZCQzY4ODEwMEY2REJDOSAvKiBTdG9yYWdlTWFuYWdlck1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTQ0Qjk1NzE2QjczN0FBMDBCN0JC
RDggLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0MxQkEz
M0QxQTRBMEU2MDAwNDNFMjQ5IC8qIEFQSURpY3Rpb25hcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUFFMDBENkIxODMyN0MxMjAwMDg3REQ3IC8qIFN0cmluZ1JlZmVyZW5jZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyOTZCRDg1RTE1MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0aWVz
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMVpaNDE3RUYxMkMwMEQ4NzAwMkJFNjdCIC8qIFRleHRD
aGVja2VyQ29tcGxldGlvbi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50LmNwcAkocmV2aXNpb24gMTc3Njk3KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2VGb3JtQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1
ZGUgIkluamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQuaCIKIAogI2luY2x1ZGUgIkFQSUFycmF5
LmgiCi0jaW5jbHVkZSAiSW1tdXRhYmxlRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIkFQSURpY3Rp
b25hcnkuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuaCIKICNpbmNsdWRl
ICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKQEAgLTEzMywxMCAr
MTMzLDEwIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudDo6d2lsbFMKIAogICAg
IFJlZlB0cjxJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+IG5vZGVIYW5kbGUgPSBJbmplY3RlZEJ1
bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKGZvcm1FbGVtZW50KTsKIAotICAgIEltbXV0YWJs
ZURpY3Rpb25hcnk6Ok1hcFR5cGUgbWFwOworICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBt
YXA7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCiAgICAg
ICAgIG1hcC5zZXQodmFsdWVzW2ldLmZpcnN0LCBBUEk6OlN0cmluZzo6Y3JlYXRlKHZhbHVlc1tp
XS5zZWNvbmQpKTsKLSAgICBhdXRvIHRleHRGaWVsZHNNYXAgPSBJbW11dGFibGVEaWN0aW9uYXJ5
OjpjcmVhdGUoV1RGOjptb3ZlKG1hcCkpOworICAgIGF1dG8gdGV4dEZpZWxkc01hcCA9IEFQSTo6
RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtYXApKTsKIAogICAgIG1fY2xpZW50LndpbGxT
ZW5kU3VibWl0RXZlbnQodG9BUEkocGFnZSksIHRvQVBJKG5vZGVIYW5kbGUuZ2V0KCkpLCB0b0FQ
SShmcmFtZSksIHRvQVBJKHNvdXJjZUZyYW1lKSwgdG9BUEkodGV4dEZpZWxkc01hcC5nZXQoKSks
IG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiB9CkBAIC0xNDgsMTAgKzE0OCwxMCBAQCB2b2lk
IEluamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQ6OndpbGxTCiAKICAgICBSZWZQdHI8SW5qZWN0
ZWRCdW5kbGVOb2RlSGFuZGxlPiBub2RlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxl
OjpnZXRPckNyZWF0ZShmb3JtRWxlbWVudCk7CiAKLSAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpN
YXBUeXBlIG1hcDsKKyAgICBBUEk6OkRpY3Rpb25hcnk6Ok1hcFR5cGUgbWFwOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQogICAgICAgICBtYXAuc2V0KHZh
bHVlc1tpXS5maXJzdCwgQVBJOjpTdHJpbmc6OmNyZWF0ZSh2YWx1ZXNbaV0uc2Vjb25kKSk7Ci0g
ICAgYXV0byB0ZXh0RmllbGRzTWFwID0gSW1tdXRhYmxlRGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6
bW92ZShtYXApKTsKKyAgICBhdXRvIHRleHRGaWVsZHNNYXAgPSBBUEk6OkRpY3Rpb25hcnk6OmNy
ZWF0ZShXVEY6Om1vdmUobWFwKSk7CiAKICAgICBXS1R5cGVSZWYgdXNlckRhdGFUb1Bhc3MgPSAw
OwogICAgIG1fY2xpZW50LndpbGxTdWJtaXRGb3JtKHRvQVBJKHBhZ2UpLCB0b0FQSShub2RlSGFu
ZGxlLmdldCgpKSwgdG9BUEkoZnJhbWUpLCB0b0FQSShzb3VyY2VGcmFtZSksIHRvQVBJKHRleHRG
aWVsZHNNYXAuZ2V0KCkpLCAmdXNlckRhdGFUb1Bhc3MsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5m
byk7Cg==
</data>
<flag name="review"
          id="268609"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>