<?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>124729</bug_id>
          
          <creation_ts>2013-11-21 11:32:44 -0800</creation_ts>
          <short_desc>Only generate isObservable() when IDL specifies GenerateIsReachable</short_desc>
          <delta_ts>2013-11-21 15:17:09 -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>Bindings</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="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>alecflett</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jsbell</cc>
    
    <cc>kondapallykalyan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>953193</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-11-21 11:32:44 -0800</bug_when>
    <thetext>We should only generate the static inline function isObservable when an IDL specifies GenerateIsReachable. Otherwise, this function is unused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953197</commentid>
    <comment_count>1</comment_count>
      <attachid>217589</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-11-21 11:35:36 -0800</bug_when>
    <thetext>Created attachment 217589
Patch and test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953200</commentid>
    <comment_count>2</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-11-21 11:39:03 -0800</bug_when>
    <thetext>Note, I also added a space character to the right hand side of the first disjunct operator in the following line in CodeGeneratorJS.pm:

if ((!$hasParent &amp;&amp; !GetCustomIsReachable($interface))|| GetGenerateIsReachable($interface) || $codeGenerator-&gt;InheritsExtendedAttribute($interface, &quot;ActiveDOMObject&quot;)) {
        if (GetGenerateIsReachable($interface)) {

So that it would read:

if ((!$hasParent &amp;&amp; !GetCustomIsReachable($interface)) || GetGenerateIsReachable($interface) || $codeGenerator-&gt;InheritsExtendedAttribute($interface, &quot;ActiveDOMObject&quot;)) {
        if (GetGenerateIsReachable($interface)) {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953201</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-21 11:39:16 -0800</bug_when>
    <thetext>Attachment 217589 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGeneratorJS.pm&apos;, u&apos;Source/WebCore/bindings/scripts/test/CPP/WebDOMTestGenerateIsReachable.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/CPP/WebDOMTestGenerateIsReachable.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestGenerateIsReachable.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestGenerateIsReachable.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestGenerateIsReachablePrivate.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp&apos;, u&apos;Source/WebCore/bindings/scripts/test/ObjC/DOMTestGenerateIsReachable.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/ObjC/DOMTestGenerateIsReachable.mm&apos;, u&apos;Source/WebCore/bindings/scripts/test/ObjC/DOMTestGenerateIsReachableInternal.h&apos;, u&apos;Source/WebCore/bindings/scripts/test/TestGenerateIsReachable.idl&apos;]&quot; exit_code: 1
Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:158:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 13 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>953202</commentid>
    <comment_count>4</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-11-21 11:40:26 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Note, I also added a space character to the right hand side of the first disjunct operator in the following line in CodeGeneratorJS.pm:

*left hand side of the first disjunct</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953219</commentid>
    <comment_count>5</comment_count>
      <attachid>217589</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-11-21 12:13:54 -0800</bug_when>
    <thetext>Comment on attachment 217589
Patch and test

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953314</commentid>
    <comment_count>6</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-11-21 15:17:09 -0800</bug_when>
    <thetext>Committed r159648: &lt;http://trac.webkit.org/changeset/159648&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217589</attachid>
            <date>2013-11-21 11:35:36 -0800</date>
            <delta_ts>2013-11-21 12:13:53 -0800</delta_ts>
            <desc>Patch and test</desc>
            <filename>bug-124729-20131121113530.patch</filename>
            <type>text/plain</type>
            <size>58081</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5NjE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDI0YzM1ODEwOGQ0NTQ2
YzA0NTI3MjIyMWQyZGE2ZjIwNmQwZWE0NC4uNWQzZjQ4YWQ0YTc5MDk2ZmQ1OGVmYzEwMDRkZWMy
YTU4MzcwNGJjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEzLTExLTIxICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBPbmx5IGdlbmVyYXRlIGlz
T2JzZXJ2YWJsZSgpIHdoZW4gSURMIHNwZWNpZmllcyBHZW5lcmF0ZUlzUmVhY2hhYmxlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ3MjkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBzaG91bGQgb25s
eSBnZW5lcmF0ZSB0aGUgc3RhdGljIGlubGluZSBmdW5jdGlvbiBpc09ic2VydmFibGUoKSB3aGVu
IHRoZSBJREwKKyAgICAgICAgc3BlY2lmaWVzIEdlbmVyYXRlSXNSZWFjaGFibGUuIE90aGVyd2lz
ZSwgdGhpcyBmdW5jdGlvbiBpcyB1bnVzZWQuCisKKyAgICAgICAgQWRkZWQgYSBuZXcgdGVzdCBJ
REwgVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaWRsIGFuZCBleHBlY3RlZCByZXN1bHRzIHRvIHRl
c3QgdGhhdAorICAgICAgICB3ZSBnZW5lcmF0ZSBpc09ic2VydmFibGUoKSB3aGVuIGFuIElETCBz
cGVjaWZpZXMgR2VuZXJhdGVJc1JlYWNoYWJsZS4gQWRkaXRpb25hbGx5LAorICAgICAgICByZWJh
c2VkIGV4aXN0aW5nIHRlc3QgcmVzdWx0cy4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAv
V2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaDogQWRkZWQuCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVBy
aXZhdGUuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEFjdGl2ZURPTU9iamVjdC5jcHA6IFJlbW92ZWQgdW51c2VkIGZ1bmN0aW9uIGlzT2JzZXJ2YWJs
ZSgpLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1l
ZEdldHRlci5jcHA6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcDogRGl0dG8uCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHA6IERpdHRvLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNw
cDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGUuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEludGVyZmFjZS5jcHA6IFJlbW92ZWQgdW51c2VkIGZ1bmN0aW9uIGlzT2JzZXJ2
YWJsZSgpLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmNwcDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwOiBEaXR0by4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDogRGl0dG8uCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwOiBE
aXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcDogRGl0dG8uCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcDogRGl0dG8uCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuY3BwOiBEaXR0by4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZS5tbTogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaWRsOiBB
ZGRlZC4KKwogMjAxMy0xMS0yMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gQ2Fubm90IHNjcm9sbCBpbiBvcHRpb24gbWVudSB3aGVu
IGl0IGxhcmdlciB0aGFuIHRoZSBzY3JlZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggY2Q3MWExODU0NWI1MmI5MjgwYWEw
ZjZjZjJhNDc0ZDgxN2IyNjA4Yy4uNzQwZGFmMDFkNjFhYTAzNjZlNmEwZTYwNTZkNjM3MmJhMjZj
NzhiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KQEAgLTI1NDUsMTcgKzI1NDUsMTkgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICgoISRoYXNQYXJlbnQgJiYgIUdldEN1
c3RvbUlzUmVhY2hhYmxlKCRpbnRlcmZhY2UpKXx8IEdldEdlbmVyYXRlSXNSZWFjaGFibGUoJGlu
dGVyZmFjZSkgfHwgJGNvZGVHZW5lcmF0b3ItPkluaGVyaXRzRXh0ZW5kZWRBdHRyaWJ1dGUoJGlu
dGVyZmFjZSwgIkFjdGl2ZURPTU9iamVjdCIpKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAic3RhdGljIGlubGluZSBib29sIGlzT2JzZXJ2YWJsZShKUyR7aW50ZXJmYWNlTmFtZX0qIGpz
JHtpbnRlcmZhY2VOYW1lfSlcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIp
OwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoanMke2ludGVyZmFjZU5hbWV9
LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKCkpXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7Ci0gICAgICAgIGlmICgkZXZlbnRUYXJnZXQpIHsK
LSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChqcyR7aW50ZXJmYWNlTmFt
ZX0tPmltcGwoKS5oYXNFdmVudExpc3RlbmVycygpKVxuIik7CisgICAgaWYgKCghJGhhc1BhcmVu
dCAmJiAhR2V0Q3VzdG9tSXNSZWFjaGFibGUoJGludGVyZmFjZSkpIHx8IEdldEdlbmVyYXRlSXNS
ZWFjaGFibGUoJGludGVyZmFjZSkgfHwgJGNvZGVHZW5lcmF0b3ItPkluaGVyaXRzRXh0ZW5kZWRB
dHRyaWJ1dGUoJGludGVyZmFjZSwgIkFjdGl2ZURPTU9iamVjdCIpKSB7CisgICAgICAgIGlmIChH
ZXRHZW5lcmF0ZUlzUmVhY2hhYmxlKCRpbnRlcmZhY2UpKSB7CisgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgYm9vbCBpc09ic2VydmFibGUoSlMke2ludGVyZmFj
ZU5hbWV9KiBqcyR7aW50ZXJmYWNlTmFtZX0pXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAo
anMke2ludGVyZmFjZU5hbWV9LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKCkpXG4iKTsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOworICAgICAg
ICAgICAgaWYgKCRldmVudFRhcmdldCkgeworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGlmIChqcyR7aW50ZXJmYWNlTmFtZX0tPmltcGwoKS5oYXNFdmVudExpc3RlbmVy
cygpKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJl
dHVybiB0cnVlO1xuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICByZXR1cm4gZmFsc2U7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKICAgICAgICAgfQotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gZmFsc2U7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIp
OwogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCBKUyR7aW50ZXJmYWNlTmFtZX1P
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOwogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIntcbiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmQxMjUyYjI0MDI5OTM3MWNkZjIyZWVjZWY4
NDY2ZjI5YWI4NDgzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKQEAgLTAs
MCArMSw4MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgorCisjaW5jbHVkZSAiVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGUuaCIKKyNpbmNsdWRlICJXZWJFeGNlcHRpb25IYW5kbGVyLmgiCisj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworc3RydWN0
IFdlYkRPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpXZWJET01UZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZVByaXZhdGUgeworICAgIFdlYkRPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJpdmF0ZShX
ZWJDb3JlOjpUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogb2JqZWN0ID0gMCkKKyAgICAgICAgOiBp
bXBsKG9iamVjdCkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlPiBpbXBsOworfTsKKworV2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGU6OldlYkRPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKCkKKyAgICA6IFdlYkRPTU9iamVjdCgp
CisgICAgLCBtX2ltcGwoMCkKK3sKK30KKworV2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6
OldlYkRPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKFdlYkNvcmU6OlRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlKiBpbXBsKQorICAgIDogV2ViRE9NT2JqZWN0KCkKKyAgICAsIG1faW1wbChuZXcgV2Vi
RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcml2YXRlKGltcGwpKQoreworfQorCitXZWJET01U
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6V2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUoY29u
c3QgV2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUmIGNvcHkpCisgICAgOiBXZWJET01PYmpl
Y3QoKQoreworICAgIG1faW1wbCA9IGNvcHkuaW1wbCgpID8gbmV3IFdlYkRPTVRlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlUHJpdmF0ZShjb3B5LmltcGwoKSkgOiAwOworfQorCitXZWJET01UZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZSYgV2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6Om9wZXJhdG9y
PShjb25zdCBXZWJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSYgY29weSkKK3sKKyAgICBkZWxl
dGUgbV9pbXBsOworICAgIG1faW1wbCA9IGNvcHkuaW1wbCgpID8gbmV3IFdlYkRPTVRlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlUHJpdmF0ZShjb3B5LmltcGwoKSkgOiAwOworICAgIHJldHVybiAqdGhp
czsKK30KKworV2ViQ29yZTo6VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUqIFdlYkRPTVRlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlOjppbXBsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsID8gV1RG
OjpnZXRQdHIobV9pbXBsLT5pbXBsKSA6IDA7Cit9CisKK1dlYkRPTVRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlOjp+V2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUoKQoreworICAgIGRlbGV0ZSBt
X2ltcGw7CisgICAgbV9pbXBsID0gMDsKK30KKworV2ViQ29yZTo6VGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUqIHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSYgd3Jh
cHBlcikKK3sKKyAgICByZXR1cm4gd3JhcHBlci5pbXBsKCk7Cit9CisKK1dlYkRPTVRlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
KiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gV2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUodmFs
dWUpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0NQUC9XZWJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjhkNGI4ZTViNGQ2MzQ3NzY0NTFkNGQ3NjY5YTZlYTczZjQwYWYyYTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVfaAorI2RlZmluZSBXZWJET01UZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZV9oCisKKyNpbmNsdWRlIDxXZWJET01PYmplY3QuaD4KKyNpbmNs
dWRlIDxXZWJET01TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGU7Cit9OworCisKK2NsYXNzIFdlYkRPTVRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlIDogcHVibGljIFdlYkRPTU9iamVjdCB7CitwdWJsaWM6CisgICAgV2ViRE9NVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGUoKTsKKyAgICBleHBsaWNpdCBXZWJET01UZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZShXZWJDb3JlOjpUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSopOworICAgIFdlYkRPTVRl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlKGNvbnN0IFdlYkRPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
Jik7CisgICAgV2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUmIG9wZXJhdG9yPShjb25zdCBX
ZWJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSYpOworICAgIHZpcnR1YWwgfldlYkRPTVRlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlKCk7CisKKworICAgIFdlYkNvcmU6OlRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlKiBpbXBsKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBzdHJ1Y3QgV2ViRE9NVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGVQcml2YXRlOworICAgIFdlYkRPTVRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlUHJpdmF0ZSogbV9pbXBsOworfTsKKworV2ViQ29yZTo6VGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUqIHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSYpOwor
V2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUgdG9XZWJLaXQoV2ViQ29yZTo6VGVzdEdlbmVy
YXRlSXNSZWFjaGFibGUqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzg1ODdlYzQx
ZGY5ZGRlMGQwMWI2ZTAxMWNkYTU1NDkwNTQ1MGVlYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlLmNwcApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTVRl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgiCisKKyNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCisj
aW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGVQcml2YXRlLmgiCisjaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9V
VEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFX0dF
VF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX1RZ
UEVfRE9NX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFLCBXZWJLaXRET01UZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZVByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZVByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZT4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGVQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUqIGtpdChXZWJDb3JlOjpUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogb2JqKQor
eworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciBy
ZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9N
X1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFKHJldCk7CisKKyAgICByZXR1cm4gd3JhcFRlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlKG9iaik7Cit9CisKK1dlYkNvcmU6OlRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlKiBjb3JlKFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKiByZXF1ZXN0KQor
eworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAw
OworfQorCitXZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogd3JhcFRlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlKFdlYkNvcmU6OlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKiBjb3JlT2JqZWN0
KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNU
X0dFTkVSQVRFX0lTX1JFQUNIQUJMRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1Rf
R0VORVJBVEVfSVNfUkVBQ0hBQkxFLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVRl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlLCB3ZWJraXRfZG9tX3Rlc3RfZ2VuZXJhdGVfaXNfcmVhY2hh
YmxlLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3RfZ2VuZXJhdGVfaXNfcmVhY2hhYmxlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBXZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAg
ICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7
CisKKyAgICBwcml2LT5+V2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcml2YXRlKCk7
CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2dlbmVyYXRlX2lzX3JlYWNoYWJs
ZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgR09iamVjdCog
d2Via2l0X2RvbV90ZXN0X2dlbmVyYXRlX2lzX3JlYWNoYWJsZV9jb25zdHJ1Y3RvcihHVHlwZSB0
eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJh
bSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfZ2VuZXJhdGVfaXNfcmVhY2hhYmxlX3BhcmVudF9jbGFz
cyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0
UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByaXZh
dGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFX0dFVF9QUklW
QVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29y
ZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmpl
Y3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3Rlc3RfZ2VuZXJhdGVfaXNfcmVhY2hhYmxlX2NsYXNzX2luaXQoV2ViS2l0
RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0
RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5j
b25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdGVzdF9nZW5lcmF0ZV9pc19yZWFjaGFibGVfY29uc3Ry
dWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9nZW5l
cmF0ZV9pc19yZWFjaGFibGVfZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGVzdF9nZW5lcmF0ZV9pc19yZWFjaGFibGVfaW5pdChXZWJLaXRET01UZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZSogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFX0dF
VF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGVQcml2YXRlKCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiNTYwZjNjYTQ2NTcw
Yjc3MzMzMWFlNjhhM2UzNTlkMDEwOGQ4NmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChC
VUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2Fu
IGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTVRlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGVfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMu
aD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0RPTV9URVNUX0dFTkVS
QVRFX0lTX1JFQUNIQUJMRSAgICAgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZ2VuZXJhdGVfaXNf
cmVhY2hhYmxlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVTVF9HRU5FUkFURV9J
U19SRUFDSEFCTEUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgo
b2JqKSwgV0VCS0lUX1RZUEVfRE9NX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFLCBXZWJLaXRE
T01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVTVF9HRU5F
UkFURV9JU19SRUFDSEFCTEVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FT
VCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFLCBX
ZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9N
X0lTX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0RPTV9URVNUX0dFTkVSQVRFX0lTX1JF
QUNIQUJMRSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9HRU5FUkFURV9JU19SRUFDSEFC
TEVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lU
X1RZUEVfRE9NX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9URVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJMRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9ET01fVEVTVF9HRU5FUkFURV9JU19S
RUFDSEFCTEUsIFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ2xhc3MpKQorCitzdHJ1
Y3QgX1dlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIHsKKyAgICBXZWJLaXRET01PYmpl
Y3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01UZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZUNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7
Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3Rlc3RfZ2VuZXJhdGVfaXNfcmVh
Y2hhYmxlX2dldF90eXBlICh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktp
dERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYmI0ZDVjYzVjYTRhNTlhYWI2ODg2M2I4YjA4NzM1MjJjMTRlZDkxMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGVQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGVQcml2YXRlX2gKKworI2luY2x1ZGUgIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
LmgiCisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGUqIHdyYXBUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZShXZWJDb3JlOjpUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZSopOworV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUqIGtpdChXZWJDb3Jl
OjpUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSopOworV2ViQ29yZTo6VGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUqIGNvcmUoV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUqKTsKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGVQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXggZjBj
OWZiMGZjYzE5ZDYwMTQzOTc5M2Q5OTIzYmQyYjI3Y2M1NDcxOS4uNGMyMmM4NTkyZDJiMzc3MDU4
YWI0ZjFhNTExNDNlNGRlMmVlZGJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5j
cHAKQEAgLTE5MSwxMyArMTkxLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlKEUKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgaXNPYnNlcnZhYmxlKEpTVGVzdEFjdGl2ZURPTU9iamVjdCoganNUZXN0QWN0aXZlRE9NT2Jq
ZWN0KQotewotICAgIGlmIChqc1Rlc3RBY3RpdmVET01PYmplY3QtPmhhc0N1c3RvbVByb3BlcnRp
ZXMoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBib29s
IEpTVGVzdEFjdGl2ZURPTU9iamVjdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21O
YW1lZEdldHRlci5jcHAKaW5kZXggNDdjM2M5Yzc2MDFkMjZjZWIyNmExNWYyZTAzNDlkYjg3MWFm
YWUxNC4uMjE4NmVjZGQ2Y2I1YjhkY2IzMDhmYmM0MDA3MTdjMWU5NGE5MzhmYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCkBAIC0xNzIsMTMgKzE3Miw2IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVG
dW5jdGlvbkFub3RoZXJGdW5jCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlzT2JzZXJ2YWJsZShKU1Rlc3RDdXN0b21O
YW1lZEdldHRlcioganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIpCi17Ci0gICAgaWYgKGpzVGVzdEN1
c3RvbU5hbWVkR2V0dGVyLT5oYXNDdXN0b21Qcm9wZXJ0aWVzKCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBKU1Rlc3RDdXN0b21OYW1lZEdldHRl
ck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9Q
QVJBTShoYW5kbGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCmluZGV4IGVi
NDgwNjc5ZTZiZTEyZmRjYzRkYmUwODAyNDJkZjg2M2VkZjUyN2EuLjY5MDhmYWUzOWYxY2Q2MDY3
ODJhM2U5OGIwNjI2MDQ3NTNkMzFlZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ci5jcHAKQEAgLTE5OCwxMyArMTk4LDYgQEAgSlNWYWx1ZSBKU1Rlc3RFdmVudENvbnN0cnVjdG9y
OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKICAgICBy
ZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9y
Pih2bSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBpc09ic2VydmFibGUoSlNUZXN0RXZlbnRDb25zdHJ1Y3RvcioganNU
ZXN0RXZlbnRDb25zdHJ1Y3RvcikKLXsKLSAgICBpZiAoanNUZXN0RXZlbnRDb25zdHJ1Y3Rvci0+
aGFzQ3VzdG9tUHJvcGVydGllcygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KIGJvb2wgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvck93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2
ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFdmVudFRhcmdldC5jcHAKaW5kZXggZjhhZDNkODg5YTE1ZWM2M2I2NGQ1YjVjOTZlNDU0
NjdhZGEzZGM1NC4uNDZhNTFhODRkNjdmOGI4MTVkMTM3ZThmNzdmMzM5NGFhNTkzNjFkMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2
ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCkBAIC0yNzksMTUgKzI3OSw2IEBAIEpTVmFsdWUgSlNU
ZXN0RXZlbnRUYXJnZXQ6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90
QmFzZSwgdW5zaWduCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+Z2xvYmFsT2JqZWN0
KCksIHRoaXNPYmotPmltcGwoKS5pdGVtKGluZGV4KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9v
bCBpc09ic2VydmFibGUoSlNUZXN0RXZlbnRUYXJnZXQqIGpzVGVzdEV2ZW50VGFyZ2V0KQotewot
ICAgIGlmIChqc1Rlc3RFdmVudFRhcmdldC0+aGFzQ3VzdG9tUHJvcGVydGllcygpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoanNUZXN0RXZlbnRUYXJnZXQtPmltcGwoKS5oYXNFdmVu
dExpc3RlbmVycygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KIGJvb2wgSlNUZXN0RXZlbnRUYXJnZXRPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBKU1Rlc3RFdmVudFRhcmdldCoganNUZXN0RXZlbnRUYXJnZXQgPSBq
c0Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXQqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2Vw
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RXhjZXB0aW9uLmNwcAppbmRleCAyODkxZWIzMmUyZDMyNWM1NGU2MjY0ZDJhNjFlYjA0MTdiYmUz
NDZkLi44MDU5OTBhZGYyNGQ1MTYzZDM4ZmM5YmZkZjIyOGFmZDg0N2M1MzYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RXhjZXB0aW9uLmNwcApAQCAtMTQxLDEzICsxNDEsNiBAQCBKU1ZhbHVlIEpTVGVzdEV4Y2VwdGlv
bjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcj4o
dm0sIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgaXNPYnNlcnZhYmxlKEpTVGVzdEV4Y2VwdGlvbioganNUZXN0RXhjZXB0
aW9uKQotewotICAgIGlmIChqc1Rlc3RFeGNlcHRpb24tPmhhc0N1c3RvbVByb3BlcnRpZXMoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBib29sIEpTVGVz
dEV4Y2VwdGlvbk93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFVOVVNFRF9QQVJBTShoYW5kbGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmUzNzg3NTk4MTFiMTQ4YzU2ZTNiOWIwZTE2OWYyYjZkZjE4NzM2
MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKQEAgLTAsMCArMSwxOTcgQEAKKy8q
CisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpT
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaCIKKworI2luY2x1ZGUgIlRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlND
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8qIEhhc2ggdGFibGUgKi8KKworc3RhdGljIGNv
bnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVUYWJsZVZhbHVlc1td
ID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIERvbnRFbnVtIHwgUmVhZE9ubHksIE5vSW50cmlu
c2ljLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpz
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkwIH0sCisgICAg
eyAwLCAwLCBOb0ludHJpbnNpYywgMCwgMCB9Cit9OworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxl
IEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVUYWJsZSA9IHsgMiwgMSwgSlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZVRhYmxlVmFsdWVzLCAwIH07CisvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3Rv
ciAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZUNvbnN0cnVjdG9yVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAwLCAwLCBOb0ludHJpbnNp
YywgMCwgMCB9Cit9OworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGVDb25zdHJ1Y3RvclRhYmxlID0geyAxLCAwLCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlQ29uc3RydWN0b3JUYWJsZVZhbHVlcywgMCB9OworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGVDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlQ29uc3RydWN0b3JUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IpIH07CisKK0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGVDb25zdHJ1Y3Rvcjo6SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDog
RE9NQ29uc3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7Cit9CisKK3Zv
aWQgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKKyAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZVByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNO
dW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKK30KKworYm9vbCBK
U1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90
PEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvciwgSlNET01XcmFwcGVyPihleGVj
LCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3JUYWJsZSwganNDYXN0PEpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFtZSwg
c2xvdCk7Cit9CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29u
c3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZVRhYmxl
VmFsdWVzW10gPQoreworICAgIHsgMCwgMCwgTm9JbnRyaW5zaWMsIDAsIDAgfQorfTsKKworc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlVGFi
bGUgPSB7IDEsIDAsIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGVUYWJsZVZhbHVl
cywgMCB9OworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5
cGU6OnNfaW5mbyA9IHsgIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlIiwgJkJhc2U6
OnNfaW5mbywgJkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGVUYWJsZSwgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKSB9Owor
CitKU09iamVjdCogSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZTo6c2VsZihWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVBy
b3RvdHlwZTxKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30K
KworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OnNfaW5mbyA9IHsg
IlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGVUYWJsZSwgMCAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZSkgfTsKKworSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6SlNUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUGFzc1JlZlB0cjxUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZT4gaW1wbCkKKyAg
ICA6IEpTRE9NV3JhcHBlcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKKyAgICAsIG1faW1wbChp
bXBsLmxlYWtSZWYoKSkKK3sKK30KKwordm9pZCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGU6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90
b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LT5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCit2b2lkIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGU6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGUqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjp+
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSgpOworfQorCitKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlOjp+SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSgpCit7CisgICAgcmVsZWFzZUltcGxJZk5v
dE51bGwoKTsKK30KKworYm9vbCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
Kj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlLCBCYXNlPihleGVjLCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlVGFibGUsIHRoaXNP
YmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK0pTVmFsdWUganNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwg
UHJvcGVydHlOYW1lKQoreworICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUqIGRvbU9iamVj
dCA9IGpzQ2FzdDxKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKj4oYXNPYmplY3Qoc2xvdEJhc2Up
KTsKKyAgICByZXR1cm4gSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6Z2V0Q29uc3RydWN0b3Io
ZXhlYy0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7Cit9CisKK0pTVmFsdWUgSlNU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3I+KHZtLCBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzT2JzZXJ2
YWJsZShKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKiBqc1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
KQoreworICAgIGlmIChqc1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLT5oYXNDdXN0b21Qcm9wZXJ0
aWVzKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSoganNUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZSA9IGpzQ2FzdDxKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKj4oaGFuZGxl
LmdldCgpLmFzQ2VsbCgpKTsKKyAgICBpZiAoIWlzT2JzZXJ2YWJsZShqc1Rlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlKiByb290ID0gJmpzVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUtPmltcGwoKTsKKyAgICBy
ZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdCk7Cit9CisKK3ZvaWQgSlNUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZU93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlKiBqc1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlID0ganNDYXN0PEpTVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGUqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOworICAgIERPTVdyYXBwZXJXb3JsZCYg
d29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAgdW5j
YWNoZVdyYXBwZXIod29ybGQsICZqc1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLT5pbXBsKCksIGpz
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUpOworICAgIGpzVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUt
PnJlbGVhc2VJbXBsKCk7Cit9CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisjaWYg
UExBVEZPUk0oV0lOKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ0ODMpCitleHRlcm4gIkMi
IHsgZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2lkZW50aWZpZXIoIj8/XzdUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZUBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4dGVy
biB2b2lkKiBfWlRWTjdXZWJDb3JlMjNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUVbXTsgfQorI2Vu
ZGlmCisjZW5kaWYKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogaW1w
bCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBpZiAo
SlNWYWx1ZSByZXN1bHQgPSBnZXRFeGlzdGluZ1dyYXBwZXI8SlNUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZT4oZXhlYywgaW1wbCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyNpZiBFTkFCTEUo
QklORElOR19JTlRFR1JJVFkpCisgICAgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9ICoocmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KGltcGwpKTsKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9p
ZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX19pZGVu
dGlmaWVyKCI/P183VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVAV2ViQ29yZUBANkJAIikpOworI2Vs
c2UKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pUVk43V2ViQ29yZTIzVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGVFWzJdOworI2lmIENPTVBJTEVSKENMQU5HKQorICAgIC8vIElm
IHRoaXMgZmFpbHMgVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUgZG9lcyBub3QgaGF2ZSBhIHZ0YWJs
ZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFi
bGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAgIENPTVBJTEVfQVNT
RVJUKF9faXNfcG9seW1vcnBoaWMoVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUpLCBUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZV9pc19ub3RfcG9seW1vcnBoaWMpOworI2VuZGlmCisjZW5kaWYKKyAgICAv
LyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBhZnRlciBm
cmVlIGJ1Zywgb3IKKyAgICAvLyBUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSBoYXMgc3ViY2xhc3Nl
cy4gSWYgVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUgaGFzIHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFz
c2VkCisgICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlIHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisgICAgLy8gYnkg
YWRkaW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFj
ZSBJREwgZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIg
PT0gZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgorICAgIFJlcG9ydE1lbW9yeUNvc3Q8
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+OjpyZXBvcnRNZW1vcnlDb3N0KGV4ZWMsIGltcGwpOwor
ICAgIHJldHVybiBjcmVhdGVOZXdXcmFwcGVyPEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+KGV4
ZWMsIGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKiB0
b1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gdmFsdWUuaW5oZXJpdHMoSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6aW5mbygpKSA/ICZq
c0Nhc3Q8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSo+KGFzT2JqZWN0KHZhbHVlKSktPmltcGwo
KSA6IDA7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmYxMWY5OTc3Mjk1NGI1NWEyMWE4MjRjNTk4YmYyODJhNzZiYzRhZDAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZS5oCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpZm5kZWYgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZV9oCisjZGVmaW5lIEpT
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVfaAorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisj
aW5jbHVkZSAiVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pT
R2xvYmFsT2JqZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSA6IHB1YmxpYyBKU0RPTVdyYXBwZXIgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNET01XcmFwcGVyIEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGUqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlPiBpbXBsKQorICAgIHsKKyAgICAgICAgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSog
cHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGUoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQor
CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlND
OjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7Cisg
ICAgfkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUoKTsKKyAgICBERUNMQVJFX0lORk87CisKKyAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29u
c3RydWN0b3IoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZSYgaW1wbCgpIGNvbnN0IHsgcmV0dXJuICptX2ltcGw7IH0KKyAgICB2b2lk
IHJlbGVhc2VJbXBsKCkgeyBtX2ltcGwtPmRlcmVmKCk7IG1faW1wbCA9IDA7IH0KKworICAgIHZv
aWQgcmVsZWFzZUltcGxJZk5vdE51bGwoKQorICAgIHsKKyAgICAgICAgaWYgKG1faW1wbCkgewor
ICAgICAgICAgICAgbV9pbXBsLT5kZXJlZigpOworICAgICAgICAgICAgbV9pbXBsID0gMDsKKyAg
ICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSog
bV9pbXBsOworcHJvdGVjdGVkOgorICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8VGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGU+KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworfTsKKworY2xhc3Mg
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZU93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93
bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90Vmlz
aXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK2lubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciog
d3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKikK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVPd25l
ciwganNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZU93bmVyLCAoKSk7CisgICAgcmV0dXJuICZqc1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlT3duZXI7Cit9CisKK2lubGluZSB2b2lkKiB3cmFwcGVyQ29u
dGV4dChET01XcmFwcGVyV29ybGQmIHdvcmxkLCBUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSopCit7
CisgICAgcmV0dXJuICZ3b3JsZDsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKik7CitUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZSogdG9UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZShKU0M6OkpTVmFs
dWUpOworCitjbGFzcyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlIDogcHVibGlj
IEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9u
RmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZN
JiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU1Rlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAg
IEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZT4odm0u
aGVhcCkpIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAg
IHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90
b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KK3By
b3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFnczsKK307CisKK2NsYXNzIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVD
b25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAg
IEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JP
YmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVj
dG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAg
ICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpT
Qzo6UHJvcGVydHlTbG90Jik7CisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRz
SGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7Cit9Owor
CisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZS5jcHAKaW5kZXggMTAwYjVkYmU1ZGQ2Yzk4NmU5ZmJhZDA3Mzc1MTI0ZDM2M2JmM2IxMC4uOGY0
M2Q5NTQ0MjJkYTdjMGU1NmI1YTcxMDZkOTJkMTZjMzM1MmI0YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZS5jcHAKQEAgLTcwMCwxMyArNzAwLDYgQEAgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTVVBQTEVN
RU5UQUxDT05TVEFOVDIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBQcm9wZXJ0eU4KIH0KIAog
I2VuZGlmCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNPYnNlcnZhYmxlKEpTVGVzdEludGVyZmFjZSog
anNUZXN0SW50ZXJmYWNlKQotewotICAgIGlmIChqc1Rlc3RJbnRlcmZhY2UtPmhhc0N1c3RvbVBy
b3BlcnRpZXMoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
CiBib29sIEpTVGVzdEludGVyZmFjZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEpTVGVzdEludGVyZmFjZSoganNUZXN0SW50ZXJmYWNlID0ganNDYXN0PEpT
VGVzdEludGVyZmFjZSo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKaW5kZXggMzYyZTZhYmZjOTc2M2I4OWVjMWE2
NDIxNjkzZGNiODYzNDQ0ZDllMy4uOTgyYTI5MzM2NTdjM2JmYWIzZjc0OTBhMTAyY2ZiNTg3OTZh
NzEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApA
QCAtMTU2LDEzICsxNTYsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVGdW5jdGlvbk1ldGhvZAogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBp
c09ic2VydmFibGUoSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcioganNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcikKLXsKLSAgICBpZiAoanNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci0+
aGFzQ3VzdG9tUHJvcGVydGllcygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KIGJvb2wgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lck93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJBTShoYW5kbGUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCmluZGV4IGQ5NmEzOWYwYWY0Y2Rl
NzZmOWNiZjUwZDk5ZWFiOTM3YmE4ZDhjZjEuLmM5YTVhZmEzODg3YTA1MmMxYmJkY2YyYTk3NzUz
ZjIzNDZkYTVhMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKQEAgLTE4
MCwxMyArMTgwLDYgQEAgSlNWYWx1ZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXROYW1lZENv
bnN0cnVjdG9yKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2IKICAgICByZXR1cm4gZ2V0RE9N
Q29uc3RydWN0b3I8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I+KHZtLCBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIGlzT2JzZXJ2YWJsZShKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKiBqc1Rlc3ROYW1l
ZENvbnN0cnVjdG9yKQotewotICAgIGlmIChqc1Rlc3ROYW1lZENvbnN0cnVjdG9yLT5oYXNDdXN0
b21Qcm9wZXJ0aWVzKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQogYm9vbCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvcioganNUZXN0TmFt
ZWRDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKj4oaGFuZGxlLmdl
dCgpLmFzQ2VsbCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggZjZjMThjYmFkNWNlYTNhYmFmYTA4NTE3MWRh
NzM2MzQxMWY2ZjYzMC4uNTExYTYxZGI3ODRmNTdiMmI1NDQ2ZDVlNmU5OWVjY2ZkMWYwY2Y3YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5jcHAKQEAgLTMzMDYsMTMgKzMzMDYsNiBAQCBKU1ZhbHVlIGpzVGVzdE9ialJlYWRv
bmx5KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKQogICAgIHJldHVybiBq
c051bWJlcihzdGF0aWNfY2FzdDxpbnQ+KDApKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlz
T2JzZXJ2YWJsZShKU1Rlc3RPYmoqIGpzVGVzdE9iaikKLXsKLSAgICBpZiAoanNUZXN0T2JqLT5o
YXNDdXN0b21Qcm9wZXJ0aWVzKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQogYm9vbCBKU1Rlc3RPYmpPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAppbmRleCBjYzBhNTIyMWI4YjM0NzVmOWM1MTQx
NThjZTlmMjcwOTkwYjc5YzE2Li5mZDc3Nzk0YjcyYzQwMTI5Nzg3MmNlNWYzNDgwZWE5Y2VhMjc2
NWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCkBA
IC0yMDMsMTMgKzIwMyw2IEBAIEpTVmFsdWUgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6
Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvCiAgICAgcmV0dXJuIGdl
dERPTUNvbnN0cnVjdG9yPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcj4o
dm0sIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgaXNPYnNlcnZhYmxlKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMq
IGpzVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMpCi17Ci0gICAgaWYgKGpzVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMtPmhhc0N1c3RvbVByb3BlcnRpZXMoKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBib29sIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVT
RURfUEFSQU0oaGFuZGxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5kZXggNzU2MmQ2OTZhZDJjODk1ZTBmYjZlOGNjZThm
N2U1ZGZkM2Q3M2Q2Ni4uZTI5ZTNlYzgxZDAwZjAxNDM1Nzk2ZDFkYWQ4NTNjZmMxN2FhM2E0ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5jcHAKQEAgLTIzOCwxMyArMjM4LDYgQEAgdm9pZCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXQKICAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jYWNoZWRSZWFkb25seVZhbHVlKTsKIH0K
IAotc3RhdGljIGlubGluZSBib29sIGlzT2JzZXJ2YWJsZShKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UqIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSkKLXsK
LSAgICBpZiAoanNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLT5oYXNDdXN0b21Q
cm9wZXJ0aWVzKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQogYm9vbCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VPd25lcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZv
aWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RUeXBlZGVmcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0VHlwZWRlZnMuY3BwCmluZGV4IDVmZTQxNGVkMWJmYTMwNmE0ZmJiNzcwMzVlOGJiZTI1
OTQyZmY5ZDIuLjIyZTExODIyMmNlMzA0ZTZkODYxN2NmZmNkM2QwYmRlZWIxOWZhODYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBl
ZGVmcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFR5cGVkZWZzLmNwcApAQCAtNTU5LDEzICs1NTksNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0
aW9uKAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBpc09ic2VydmFibGUoSlNUZXN0VHlwZWRlZnMqIGpzVGVzdFR5cGVk
ZWZzKQotewotICAgIGlmIChqc1Rlc3RUeXBlZGVmcy0+aGFzQ3VzdG9tUHJvcGVydGllcygpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGJvb2wgSlNUZXN0
VHlwZWRlZnNPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBV
TlVTRURfUEFSQU0oaGFuZGxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwCmluZGV4IDM4NDY5YTBhOGJhZmUxNGUw
NTllYzFiMzczYmRjM2E4NmRiY2Y4N2UuLjZmOTRlMjQ4ZDc4Mzk0OGVjMWEzNjJjMTA3NjllN2Vh
MDExMDFiZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU2F0dHJpYnV0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcApAQCAtMTQxLDEzICsxNDEsNiBAQCBKU1ZhbHVlIEpT
YXR0cmlidXRlOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTYXR0cmlidXRlQ29uc3RydWN0
b3I+KHZtLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAot
c3RhdGljIGlubGluZSBib29sIGlzT2JzZXJ2YWJsZShKU2F0dHJpYnV0ZSoganNhdHRyaWJ1dGUp
Ci17Ci0gICAgaWYgKGpzYXR0cmlidXRlLT5oYXNDdXN0b21Qcm9wZXJ0aWVzKCkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBKU2F0dHJpYnV0ZU93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJB
TShoYW5kbGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTcmVhZG9ubHkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTcmVhZG9ubHkuY3BwCmluZGV4IDRjNGZlMjE0YzVjZTkxYjFmMjIyZTE1OTE5ODJl
MTdjNGE4NDQzMTEuLmNkOTkyMTViMjY0YjQyYTY1NzFiMDZlYjEzZmE0MmU2MzA1M2U1Y2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRv
bmx5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNy
ZWFkb25seS5jcHAKQEAgLTEyOCwxMyArMTI4LDYgQEAgSlNWYWx1ZSBKU3JlYWRvbmx5OjpnZXRD
b25zdHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgcmV0
dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTcmVhZG9ubHlDb25zdHJ1Y3Rvcj4odm0sIGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgaXNPYnNlcnZhYmxlKEpTcmVhZG9ubHkqIGpzcmVhZG9ubHkpCi17Ci0gICAgaWYgKGpzcmVh
ZG9ubHktPmhhc0N1c3RvbVByb3BlcnRpZXMoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCiBib29sIEpTcmVhZG9ubHlPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmOTY3YTRjMDBh
Yjc2MTIzMmQ2ZTliNWYzNGVmNTFkYTllZDc2MGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZS5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29t
PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTU9iamVjdC5oPgorCisjaWYgV0VCS0lUX1ZF
UlNJT05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNUCisKK0BpbnRlcmZhY2Ug
RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUgOiBET01PYmplY3QKK0BlbmQKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01U
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQy
Mjc4YTFlYWQxYzBhNWY5NzMyM2RjY2Q2MTQ2ZDE3MDZhZjU3ZTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZS5tbQpAQCAtMCwwICsxLDgyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJET01JbnRlcm5hbC5oIgorCisjaW1w
b3J0ICJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgorCisjaW1wb3J0ICJET01Ob2RlSW50
ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgiCisjaW1wb3J0ICJKU01haW5UaHJlYWRFeGVj
U3RhdGUuaCIKKyNpbXBvcnQgIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgiCisjaW1wb3J0ICJU
aHJlYWRDaGVjay5oIgorI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQgIldl
YlNjcmlwdE9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPHd0Zi9HZXRQdHIuaD4KKworI2RlZmlu
ZSBJTVBMIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUq
PihfaW50ZXJuYWwpCisKK0BpbXBsZW1lbnRhdGlvbiBET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBpZiAoV2ViQ29yZU9iakNTY2hlZHVsZURlYWxs
b2NhdGVPbk1haW5UaHJlYWQoW0RPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIGNsYXNzXSwgc2Vs
ZikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChfaW50ZXJuYWwpCisgICAgICAgIElNUEwt
PmRlcmVmKCk7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKWZpbmFsaXplCit7
CisgICAgaWYgKF9pbnRlcm5hbCkKKyAgICAgICAgSU1QTC0+ZGVyZWYoKTsKKyAgICBbc3VwZXIg
ZmluYWxpemVdOworfQorCitAZW5kCisKK1dlYkNvcmU6OlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
KiBjb3JlKERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlICp3cmFwcGVyKQoreworICAgIHJldHVy
biB3cmFwcGVyID8gcmVpbnRlcnByZXRfY2FzdDxXZWJDb3JlOjpUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZSo+KHdyYXBwZXItPl9pbnRlcm5hbCkgOiAwOworfQorCitET01UZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZSAqa2l0KFdlYkNvcmU6OlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKiB2YWx1ZSkKK3sK
KyAgICB7IERPTV9BU1NFUlRfTUFJTl9USFJFQUQoKTsgV2ViQ29yZVRocmVhZFZpb2xhdGlvbkNo
ZWNrUm91bmRPbmUoKTsgfTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIGlmIChET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSAqd3JhcHBlciA9IGdldERPTVdyYXBw
ZXIodmFsdWUpKQorICAgICAgICByZXR1cm4gW1t3cmFwcGVyIHJldGFpbl0gYXV0b3JlbGVhc2Vd
OworICAgIERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlICp3cmFwcGVyID0gW1tET01UZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZSBhbGxvY10gX2luaXRdOworICAgIHdyYXBwZXItPl9pbnRlcm5hbCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8RE9NT2JqZWN0SW50ZXJuYWwqPih2YWx1ZSk7CisgICAgdmFsdWUt
PnJlZigpOworICAgIGFkZERPTVdyYXBwZXIod3JhcHBlciwgdmFsdWUpOworICAgIHJldHVybiBb
d3JhcHBlciBhdXRvcmVsZWFzZV07Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUludGVybmFs
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZUludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQ5MTc2YTc1YmIwYWFhNDI4
NGRmMTc4NGMyMDExYWZiN2IwNjYwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlSW50
ZXJuYWwuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lt
cG9ydCA8V2ViQ29yZS9ET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oPgorCisjaWYgV0VCS0lU
X1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNUCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOworfQorCitXZWJDb3Jl
OjpUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogY29yZShET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZSAqKTsKK0RPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlICpraXQoV2ViQ29yZTo6VGVzdEdlbmVy
YXRlSXNSZWFjaGFibGUqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaWRsIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmlk
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wOTQ1ODA4ZWRkNDg3MzMzZjc2OTNjMThmODQyOGM4MzgzYWNkNzE2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmlkbApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKK1sKKyAgICBHZW5lcmF0ZUlzUmVhY2hh
YmxlPUltcGwsCitdIGludGVyZmFjZSBUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSB7Cit9OworCg==
</data>
<flag name="review"
          id="240755"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>