<?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>48027</bug_id>
          
          <creation_ts>2010-10-20 16:42:23 -0700</creation_ts>
          <short_desc>Add ability to test injected bundle API using TestWebKitAPI</short_desc>
          <delta_ts>2010-10-20 17:22:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>297127</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-20 16:42:23 -0700</bug_when>
    <thetext>Add ability to test injected bundle API using TestWebKitAPI</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297130</commentid>
    <comment_count>1</comment_count>
      <attachid>71361</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-20 16:42:54 -0700</bug_when>
    <thetext>Created attachment 71361
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297142</commentid>
    <comment_count>2</comment_count>
      <attachid>71366</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-20 16:56:28 -0700</bug_when>
    <thetext>Created attachment 71366
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297151</commentid>
    <comment_count>3</comment_count>
      <attachid>71366</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-10-20 17:10:18 -0700</bug_when>
    <thetext>Comment on attachment 71366
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=71366&amp;action=review

&gt; WebKitTools/TestWebKitAPI/InjectedBundleMain.cpp:33
&gt; +#if defined(WIN32) || defined(_WIN32)
&gt; +extern &quot;C&quot; __declspec(dllexport) 
&gt; +#else
&gt; +extern &quot;C&quot;
&gt; +#endif

Maybe WKBundleInitialize.h should define a macro that clients can use to do this correctly.

&gt; WebKitTools/TestWebKitAPI/InjectedBundleTest.h:41
&gt; +    virtual void didCreatePage(WKBundleRef bundle, WKBundlePageRef page) { }
&gt; +    virtual void willDestroyPage(WKBundleRef bundle, WKBundlePageRef page) { }
&gt; +    virtual void didReceiveMessage(WKBundleRef bundle, WKStringRef messageName, WKTypeRef messageBody) { }

There are some unnecessary parameter names in here.

&gt; WebKitTools/TestWebKitAPI/InjectedBundleTest.h:43
&gt; +    std::string name() const { return m_identifier; }

Could use const std::string&amp;.

&gt; WebKitTools/TestWebKitAPI/InjectedBundleTest.h:45
&gt; +    template&lt;typename TestClassTy&gt; class Register {

Registrar seems more accurate than Register. Does &quot;Ty&quot; really make the template parameter clearer?

&gt; WebKitTools/TestWebKitAPI/PlatformUtilities.h:42
&gt; +WKContextRef createContextForInjectedBundleTest(const std::string&amp;);
&gt; +
&gt; +WKStringRef createInjectedBundlePath();
&gt;  WKURLRef createURLForResource(const char* resource, const char* extension);
&gt;  WKURLRef URLForNonExistentResource();

It would be nice to make these return WKRetainPtrs someday.

&gt; WebKitTools/TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic_Bundle.cpp:47
&gt; +static InjectedBundleTest::Register&lt;InjectedBundleBasicTest&gt; injectedBundleBasicTestRegistrar(&quot;InjectedBundleBasicTest&quot;);

This variable could just be called &quot;registrar&quot;.

&gt; WebKitTools/TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic_Bundle.cpp:50
&gt; +} // namespace TestWebKitAPI
&gt;  \ No newline at end of file

Please add a newline.

&gt; WebKitTools/TestWebKitAPI/win/PlatformUtilitiesWin.cpp:65
&gt; +WKStringRef createInjectedBundlePath()
&gt; +{
&gt; +    RetainPtr&lt;CFURLRef&gt; executableURL(AdoptCF, CFBundleCopyExecutableURL(CFBundleGetMainBundle()));
&gt; +    RetainPtr&lt;CFURLRef&gt; executableContainerURL(AdoptCF, CFURLCreateCopyDeletingLastPathComponent(0, executableURL.get()));
&gt; +    RetainPtr&lt;CFStringRef&gt; executableContainerPath(AdoptCF, CFURLCopyFileSystemPath(executableContainerURL.get(), kCFURLWindowsPathStyle));
&gt; +    RetainPtr&lt;CFMutableStringRef&gt; bundlePath(AdoptCF, CFStringCreateMutableCopy(0, 0, executableContainerPath.get()));
&gt; +    CFStringAppendCString(bundlePath.get(), injectedBundleDLL, kCFStringEncodingWindowsLatin1);
&gt; +    return WKStringCreateWithCFString(bundlePath.get());
&gt; +}

Using CFURLCreateCopyAppendingPathComponent would be nicer than using a mutable string. This could also be done with Win32 API calls instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297164</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-20 17:22:28 -0700</bug_when>
    <thetext>Landed in r70194.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71361</attachid>
            <date>2010-10-20 16:42:54 -0700</date>
            <delta_ts>2010-10-20 16:56:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>yup.diff</filename>
            <type>text/plain</type>
            <size>39696</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDcwMTg5KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTAtMTAtMjAgIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgwMjcKKyAgICAg
ICAgQWRkIGFiaWxpdHkgdG8gdGVzdCBpbmplY3RlZCBidW5kbGUgQVBJIHVzaW5nIFRlc3RXZWJL
aXRBUEkKKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVy
LmNwcDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZUNvbnRy
b2xsZXIuaDogQWRkZWQuCisgICAgICAgIFNoYXJlZCBtYWluIG9iamVjdCBmb3IgYnVuZGxlIGZ1
bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlTWFp
bi5jcHA6IEFkZGVkLgorICAgICAgICBCdW5kbGUgZW50cnkgcG9pbnQuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlVGVzdC5oOiBBZGRlZC4KKyAgICAgICAgQmFzZSBj
bGFzcyBmb3Igd2hpY2ggdGhlIGJ1bmRsZSBwb3J0aW9uIG9mIGEgdGVzdCBkZXJpdmVzIGZyb20u
IAorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVV0aWxpdGllcy5oOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvbWFjL1BsYXRmb3JtVXRpbGl0aWVzTWFjLm1tOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VXRpbDo6Y3JlYXRlSW5qZWN0ZWRCdW5kbGVQYXRoKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlV0aWw6OmNyZWF0ZVVSTEZvclJlc291cmNlKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlV0aWw6OlVSTEZvck5vbkV4aXN0ZW50UmVzb3VyY2UpOgorICAgICAgICBB
ZGQgaGVscGVyIHRvIGNyZWF0ZSBhIGNvbnRleHQgd2l0aCB0aGUgc2hhcmVkIGluamVjdGVkIGJ1
bmRsZSwKKyAgICAgICAgYW5kIHNlbmQgdGhlIGluaXRpYWwgbWVzc2FnZSB0byBzZXQgdXAgdGhl
IHRlc3QuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NvbmZpZ3VyYXRpb25zL0luamVjdGVk
QnVuZGxlLnhjY29uZmlnOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0luamVjdGVk
QnVuZGxlLUluZm8ucGxpc3Q6IEFkZGVkLgorICAgICAgICBBZGQgbWFjIGNvbmZpZ3VyYXRpb24g
ZmlsZXMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIHRoZSBuZXcgZmlsZXMuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvSW5qZWN0ZWRCdW5kbGVCYXNpYy5jcHA6IEFk
ZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9JbmplY3RlZEJ1bmRs
ZUJhc2ljX0J1bmRsZS5jcHA6IEFkZGVkLgorICAgICAgICBBZGQgYSBzaW1wbGUgaW5pdGlhbCBi
dW5kbGUgdGVzdC4KKwogMjAxMC0xMC0xOSAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+
CiAKICAgICAgICAgR2VudGx5IG51ZGdlIG9sZC1ydW4td2Via2l0LXRlc3RzIHRvd2FyZCB3b3Jr
aW5nIHdpdGggV2luMzIgUGVybApJbmRleDogV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9Jbmpl
Y3RlZEJ1bmRsZS1JbmZvLnBsaXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RXZWJL
aXRBUEkvSW5qZWN0ZWRCdW5kbGUtSW5mby5wbGlzdAkocmV2aXNpb24gMCkKKysrIFdlYktpdFRv
b2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGUtSW5mby5wbGlzdAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4K
KzwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0
dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgorPHBsaXN0IHZl
cnNpb249IjEuMCI+Cis8ZGljdD4KKwk8a2V5PkNGQnVuZGxlRGV2ZWxvcG1lbnRSZWdpb248L2tl
eT4KKwk8c3RyaW5nPkVuZ2xpc2g8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlRXhlY3V0YWJsZTwv
a2V5PgorCTxzdHJpbmc+JHtFWEVDVVRBQkxFX05BTUV9PC9zdHJpbmc+CisJPGtleT5DRkJ1bmRs
ZUlkZW50aWZpZXI8L2tleT4KKwk8c3RyaW5nPmNvbS55b3VyY29tcGFueS4ke1BST0RVQ1RfTkFN
RTpyZmMxMDM0aWRlbnRpZmllcn08L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlSW5mb0RpY3Rpb25h
cnlWZXJzaW9uPC9rZXk+CisJPHN0cmluZz42LjA8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlUGFj
a2FnZVR5cGU8L2tleT4KKwk8c3RyaW5nPkJOREw8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlU2hv
cnRWZXJzaW9uU3RyaW5nPC9rZXk+CisJPHN0cmluZz4xLjA8L3N0cmluZz4KKwk8a2V5PkNGQnVu
ZGxlU2lnbmF0dXJlPC9rZXk+CisJPHN0cmluZz4/Pz8/PC9zdHJpbmc+CisJPGtleT5DRkJ1bmRs
ZVZlcnNpb248L2tleT4KKwk8c3RyaW5nPjE8L3N0cmluZz4KKzwvZGljdD4KKzwvcGxpc3Q+Cklu
ZGV4OiBXZWJLaXRUb29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlQ29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRs
ZUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQ
SS9JbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEx
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuaCIK
KworI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlVGVzdC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CisjaW5jbHVkZSA8YWxnb3Jp
dGhtPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisK
K0luamVjdGVkQnVuZGxlQ29udHJvbGxlciYgSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaGFy
ZWQoKQoreworICAgIHN0YXRpYyBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXImIHNoYXJlZCA9ICpu
ZXcgSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOworICAgIHJldHVybiBzaGFyZWQ7Cit9CisKK0lu
amVjdGVkQnVuZGxlQ29udHJvbGxlcjo6SW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyKCkKKyAgICA6
IG1fYnVuZGxlKDApCisgICAgLCBtX2N1cnJlbnRUZXN0KDApCit7Cit9CisKK3ZvaWQgSW5qZWN0
ZWRCdW5kbGVDb250cm9sbGVyOjppbml0aWFsaXplKFdLQnVuZGxlUmVmIGJ1bmRsZSkKK3sKKyAg
ICBtX2J1bmRsZSA9IGJ1bmRsZTsKKworICAgIFdLQnVuZGxlQ2xpZW50IGNsaWVudCA9IHsKKyAg
ICAgICAgMCwKKyAgICAgICAgdGhpcywKKyAgICAgICAgZGlkQ3JlYXRlUGFnZSwKKyAgICAgICAg
d2lsbERlc3Ryb3lQYWdlLAorICAgICAgICBkaWRSZWNlaXZlTWVzc2FnZQorICAgIH07CisgICAg
V0tCdW5kbGVTZXRDbGllbnQobV9idW5kbGUsICZjbGllbnQpOworfQorCit2b2lkIEluamVjdGVk
QnVuZGxlQ29udHJvbGxlcjo6ZGlkQ3JlYXRlUGFnZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLQnVu
ZGxlUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEluamVjdGVk
QnVuZGxlQ29udHJvbGxlciogc2VsZiA9IHN0YXRpY19jYXN0PEluamVjdGVkQnVuZGxlQ29udHJv
bGxlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICBhc3NlcnQoc2VsZi0+
bV9jdXJyZW50VGVzdCk7CisgICAgc2VsZi0+bV9jdXJyZW50VGVzdC0+ZGlkQ3JlYXRlUGFnZShi
dW5kbGUsIHBhZ2UpOworfQorCit2b2lkIEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6d2lsbERl
c3Ryb3lQYWdlKFdLQnVuZGxlUmVmIGJ1bmRsZSwgV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyKiBzZWxm
ID0gc3RhdGljX2Nhc3Q8SW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyKj4oY29uc3RfY2FzdDx2b2lk
Kj4oY2xpZW50SW5mbykpOworICAgIGFzc2VydChzZWxmLT5tX2N1cnJlbnRUZXN0KTsKKyAgICBz
ZWxmLT5tX2N1cnJlbnRUZXN0LT53aWxsRGVzdHJveVBhZ2UoYnVuZGxlLCBwYWdlKTsKK30KKwor
dm9pZCBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6OmRpZFJlY2VpdmVNZXNzYWdlKFdLQnVuZGxl
UmVmIGJ1bmRsZSwgV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9k
eSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBJbmplY3RlZEJ1bmRsZUNvbnRyb2xs
ZXIqIHNlbGYgPSBzdGF0aWNfY2FzdDxJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIqPihjb25zdF9j
YXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkJ1bmRsZVRlc3RJbnN0YW50aWF0b3IiKSkgeworICAgICAg
ICBhc3NlcnQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkp
OworICAgICAgICBXS1N0cmluZ1JlZiBtZXNzYWdlQm9keVN0cmluZyA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisKKyAgICAgICAgc2VsZi0+aW5pdGlhbGl6ZVRlc3RO
YW1lZChVdGlsOjp0b1NURChtZXNzYWdlQm9keVN0cmluZykpOworCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBhc3NlcnQoc2VsZi0+bV9jdXJyZW50VGVzdCk7CisgICAgc2VsZi0+bV9j
dXJyZW50VGVzdC0+ZGlkUmVjZWl2ZU1lc3NhZ2UoYnVuZGxlLCBtZXNzYWdlTmFtZSwgbWVzc2Fn
ZUJvZHkpOworfQorCit2b2lkIEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6ZHVtcFRlc3ROYW1l
cygpCit7CisgICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIENyZWF0ZUluamVjdGVkQnVuZGxlVGVz
dEZ1bmN0aW9uPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NyZWF0ZUluamVjdGVkQnVuZGxlVGVz
dEZ1bmN0aW9ucy5iZWdpbigpOworICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBDcmVhdGVJbmpl
Y3RlZEJ1bmRsZVRlc3RGdW5jdGlvbj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY3JlYXRlSW5q
ZWN0ZWRCdW5kbGVUZXN0RnVuY3Rpb25zLmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsr
aXQpCisgICAgICAgIHByaW50ZigiJXNcbiIsICgqaXQpLmZpcnN0LmNfc3RyKCkpOworfQorCit2
b2lkIEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6aW5pdGlhbGl6ZVRlc3ROYW1lZChjb25zdCBz
dGQ6OnN0cmluZyYgaWRlbnRpZmllcikKK3sKKyAgICBDcmVhdGVJbmplY3RlZEJ1bmRsZVRlc3RG
dW5jdGlvbiBjcmVhdGVUZXN0RnVuY3Rpb24gPSBtX2NyZWF0ZUluamVjdGVkQnVuZGxlVGVzdEZ1
bmN0aW9uc1tpZGVudGlmaWVyXTsKKyAgICBpZiAoIWNyZWF0ZVRlc3RGdW5jdGlvbikgeworICAg
ICAgICBwcmludGYoIkVSUk9SOiBJbmplY3RlZEJ1bmRsZSB0ZXN0IG5vdCBmb3VuZCAtICVzXG4i
LCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIG1f
Y3VycmVudFRlc3QgPSBjcmVhdGVUZXN0RnVuY3Rpb24oaWRlbnRpZmllcik7CisgICAgbV9jdXJy
ZW50VGVzdC0+aW5pdGlhbGl6ZSgpOworfQorCit2b2lkIEluamVjdGVkQnVuZGxlQ29udHJvbGxl
cjo6cmVnaXN0ZXJDcmVhdGVJbmplY3RlZEJ1bmRsZVRlc3RGdW5jdGlvbihjb25zdCBzdGQ6OnN0
cmluZyYgaWRlbnRpZmllciwgQ3JlYXRlSW5qZWN0ZWRCdW5kbGVUZXN0RnVuY3Rpb24gZnVuY3Rp
b24pCit7CisgICAgbV9jcmVhdGVJbmplY3RlZEJ1bmRsZVRlc3RGdW5jdGlvbnNbaWRlbnRpZmll
cl0gPSBmdW5jdGlvbjsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpJbmRleDog
V2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlQ29udHJv
bGxlci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3Rl
ZEJ1bmRsZUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyX2gKKyNkZWZpbmUgSW5qZWN0
ZWRCdW5kbGVDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5kbGUuaD4KKyNp
bmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SSB7CisKK2NsYXNzIEluamVjdGVkQnVuZGxlVGVzdDsKKworY2xhc3MgSW5qZWN0ZWRCdW5kbGVD
b250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVy
JiBzaGFyZWQoKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZShXS0J1bmRsZVJlZik7CisKKyAgICB2
b2lkIGR1bXBUZXN0TmFtZXMoKTsKKyAgICB2b2lkIGluaXRpYWxpemVUZXN0TmFtZWQoY29uc3Qg
c3RkOjpzdHJpbmcmKTsKKworICAgIHR5cGVkZWYgSW5qZWN0ZWRCdW5kbGVUZXN0KiAoKkNyZWF0
ZUluamVjdGVkQnVuZGxlVGVzdEZ1bmN0aW9uKShjb25zdCBzdGQ6OnN0cmluZyYpOworICAgIHZv
aWQgcmVnaXN0ZXJDcmVhdGVJbmplY3RlZEJ1bmRsZVRlc3RGdW5jdGlvbihjb25zdCBzdGQ6OnN0
cmluZyYsIENyZWF0ZUluamVjdGVkQnVuZGxlVGVzdEZ1bmN0aW9uKTsKKworcHJpdmF0ZToKKyAg
ICBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIoKTsKKyAgICB+SW5qZWN0ZWRCdW5kbGVDb250cm9s
bGVyKCk7CisKKyAgICBzdGF0aWMgdm9pZCBkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUmVmIGJ1bmRs
ZSwgV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0
YXRpYyB2b2lkIHdpbGxEZXN0cm95UGFnZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLQnVuZGxlUGFn
ZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRS
ZWNlaXZlTWVzc2FnZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1l
LCBXS1R5cGVSZWYgbWVzc2FnZUJvZHksIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCisgICAg
c3RkOjptYXA8c3RkOjpzdHJpbmcsIENyZWF0ZUluamVjdGVkQnVuZGxlVGVzdEZ1bmN0aW9uPiBt
X2NyZWF0ZUluamVjdGVkQnVuZGxlVGVzdEZ1bmN0aW9uczsKKyAgICBXS0J1bmRsZVJlZiBtX2J1
bmRsZTsKKyAgICBJbmplY3RlZEJ1bmRsZVRlc3QqIG1fY3VycmVudFRlc3Q7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBJbmplY3RlZEJ1bmRsZUNvbnRy
b2xsZXJfaApJbmRleDogV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZU1h
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRC
dW5kbGVNYWluLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1Rlc3RXZWJLaXRBUEkv
SW5qZWN0ZWRCdW5kbGVNYWluLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
IDxXZWJLaXQyL1dLQnVuZGxlSW5pdGlhbGl6ZS5oPgorCisjaWYgZGVmaW5lZChXSU4zMikgfHwg
ZGVmaW5lZChfV0lOMzIpCitleHRlcm4gIkMiIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSAKKyNlbHNl
CitleHRlcm4gIkMiCisjZW5kaWYKK3ZvaWQgV0tCdW5kbGVJbml0aWFsaXplKFdLQnVuZGxlUmVm
IGJ1bmRsZSkKK3sKKyAgICBUZXN0V2ViS2l0QVBJOjpJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6
OnNoYXJlZCgpLmluaXRpYWxpemUoYnVuZGxlKTsKK30KSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVUZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
VGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZVRlc3QuaAkocmV2aXNpb24gMCkKKysrIFdlYktp
dFRvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVUZXN0LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluamVjdGVkQnVuZGxlVGVzdF9o
CisjZGVmaW5lIEluamVjdGVkQnVuZGxlVGVzdF9oCisKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRs
ZUNvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBJbmpl
Y3RlZEJ1bmRsZVRlc3QgeworcHVibGljOgorICAgIHZpcnR1YWwgfkluamVjdGVkQnVuZGxlVGVz
dCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKSB7IH0KKworICAgIHZpcnR1
YWwgdm9pZCBkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUmVmIGJ1bmRsZSwgV0tCdW5kbGVQYWdlUmVm
IHBhZ2UpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsRGVzdHJveVBhZ2UoV0tCdW5kbGVSZWYg
YnVuZGxlLCBXS0J1bmRsZVBhZ2VSZWYgcGFnZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVNZXNzYWdlKFdLQnVuZGxlUmVmIGJ1bmRsZSwgV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUs
IFdLVHlwZVJlZiBtZXNzYWdlQm9keSkgeyB9CisKKyAgICBzdGQ6OnN0cmluZyBuYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VGVzdENsYXNzVHk+IGNsYXNzIFJlZ2lzdGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlZ2lz
dGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBJbmpl
Y3RlZEJ1bmRsZUNvbnRyb2xsZXI6OnNoYXJlZCgpLnJlZ2lzdGVyQ3JlYXRlSW5qZWN0ZWRCdW5k
bGVUZXN0RnVuY3Rpb24odGVzdCwgUmVnaXN0ZXI6OmNyZWF0ZSk7CisgICAgICAgIH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIHN0YXRpYyBJbmplY3RlZEJ1bmRsZVRlc3QqIGNyZWF0ZShjb25z
dCBzdGQ6OnN0cmluZyYgaWRlbnRpZmllcikgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgVGVzdENsYXNzVHkoaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworCitwcm90
ZWN0ZWQ6CisgICAgSW5qZWN0ZWRCdW5kbGVUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBpZGVudGlm
aWVyKQorICAgICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQorICAgIHsKKyAgICB9CisK
KyAgICBzdGQ6OnN0cmluZyBtX2lkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBJbmplY3RlZEJ1bmRsZVRlc3RfaApJbmRleDogV2ViS2l0
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1VdGlsaXRpZXMuaAkocmV2aXNpb24gNzAx
ODUpCisrKyBXZWJLaXRUb29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtVXRpbGl0aWVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiw4IEBACiAjaWZuZGVmIFBsYXRmb3JtVXRpbGl0aWVz
X2gKICNkZWZpbmUgUGxhdGZvcm1VdGlsaXRpZXNfaAogCi0jaW5jbHVkZSA8V2ViS2l0Mi9XS1N0
cmluZy5oPgorI2luY2x1ZGUgPFdlYktpdDIvV2ViS2l0Mi5oPgogI2luY2x1ZGUgPHN0cmluZz4K
LSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093bkFycmF5
UHRyLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIG5hbWVzcGFjZSBVdGlsIHsKQEAg
LTM3LDE4ICszNSwxNSBAQCBuYW1lc3BhY2UgVXRpbCB7CiAvLyBSdW5zIGEgcGxhdGZvcm0gcnVu
bG9vcCB1bnRpbCB0aGUgJ2RvbmUnIGlzIHRydWUuIAogdm9pZCBydW4oYm9vbCogZG9uZSk7CiAK
K1dLQ29udGV4dFJlZiBjcmVhdGVDb250ZXh0Rm9ySW5qZWN0ZWRCdW5kbGVUZXN0KGNvbnN0IHN0
ZDo6c3RyaW5nJik7CisKK1dLU3RyaW5nUmVmIGNyZWF0ZUluamVjdGVkQnVuZGxlUGF0aCgpOwog
V0tVUkxSZWYgY3JlYXRlVVJMRm9yUmVzb3VyY2UoY29uc3QgY2hhciogcmVzb3VyY2UsIGNvbnN0
IGNoYXIqIGV4dGVuc2lvbik7CiBXS1VSTFJlZiBVUkxGb3JOb25FeGlzdGVudFJlc291cmNlKCk7
CiAKIGJvb2wgaXNLZXlEb3duKFdLTmF0aXZlRXZlbnRQdHIpOwogCi1pbmxpbmUgc3RkOjpzdHJp
bmcgdG9TVEQoV0tTdHJpbmdSZWYgc3RyaW5nKQotewotICAgIHNpemVfdCBidWZmZXJTaXplID0g
V0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHN0cmluZyk7Ci0gICAgT3duQXJyYXlQ
dHI8Y2hhcj4gYnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltidWZmZXJTaXplXSk7Ci0g
ICAgc2l6ZV90IHN0cmluZ0xlbmd0aCA9IFdLU3RyaW5nR2V0VVRGOENTdHJpbmcoc3RyaW5nLCBi
dWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOwotICAgIHJldHVybiBzdGQ6OnN0cmluZyhidWZmZXIu
Z2V0KCksIHN0cmluZ0xlbmd0aCAtIDEpOwotfQorc3RkOjpzdHJpbmcgdG9TVEQoV0tTdHJpbmdS
ZWYgc3RyaW5nKTsKIAogfSAvLyBuYW1lc3BhY2UgVXRpbAogfSAvLyBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSQpJbmRleDogV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9Db25maWd1cmF0aW9ucy9J
bmplY3RlZEJ1bmRsZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0V2Vi
S2l0QVBJL0NvbmZpZ3VyYXRpb25zL0luamVjdGVkQnVuZGxlLnhjY29uZmlnCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9Db25maWd1cmF0aW9ucy9JbmplY3RlZEJ1
bmRsZS54Y2NvbmZpZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNCBAQAorLy8gQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworLy8gYXJlIG1ldDoKKy8vIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisv
LyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLy8gICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vCisv
LyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisvLyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKy8vIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisvLyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKy8vIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKy8vIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorLy8gUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorLy8gT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorCitQUk9EVUNUX05BTUUgPSBJbmplY3RlZEJ1bmRsZQpJ
bmRleDogV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDcwMTg1KQor
KysgV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyLDYgKzEyLDE2IEBACiAJCUJDMTMxODg1
MTE3MTE0QjYwMEI2OTcyNyAvKiBQbGF0Zm9ybVV0aWxpdGllc01hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTMxODg0MTE3MTE0QjYwMEI2OTcy
NyAvKiBQbGF0Zm9ybVV0aWxpdGllc01hYy5tbSAqLzsgfTsKIAkJQkMxMzFBOUIxMTcxMzE2OTAw
QjY5NzI3IC8qIG1haW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzEzMUE5QTExNzEzMTY5MDBCNjk3MjcgLyogbWFpbi5tbSAqLzsgfTsKIAkJQkMx
MzFBQTkxMTcxMzFGQzAwQjY5NzI3IC8qIFRlc3RzQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzEzMUFBODExNzEzMUZDMDBCNjk3
MjcgLyogVGVzdHNDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJQkM1NzVBOTAxMjZFNzREMzAwNkYw
RjEyIC8qIENvY29hLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDQjlFOUYwMTEyMzVCREUwMEExMzdFMCAvKiBDb2NvYS5mcmFtZXdv
cmsgKi87IH07CisJCUJDNTc1QTkxMTI2RTc0RDMwMDZGMEYxMiAvKiBXZWJLaXQyLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTYx
REI0MTE3MDBFRkQwMDQ2MEQxRSAvKiBXZWJLaXQyLmZyYW1ld29yayAqLzsgfTsKKwkJQkM1NzVB
OTIxMjZFNzREMzAwNkYwRjEyIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdv
cmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOTA5NjREMTI1NTYyMEMw
MDA4Mzc1NiAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCUJDNTc1QTk3MTI2
RTc0RjEwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRsZU1haW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1NzU5NDYxMjZFNzM1MTAwNkYwRjEyIC8q
IEluamVjdGVkQnVuZGxlTWFpbi5jcHAgKi87IH07CisJCUJDNTc1QUEyMTI2RTc2NjAwMDZGMEYx
MiAvKiBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1NzVBQTAxMjZFNzY1NzAwNkYwRjEyIC8qIEluamVj
dGVkQnVuZGxlQ29udHJvbGxlci5jcHAgKi87IH07CisJCUJDNTc1QUFEMTI2RTgzQjkwMDZGMEYx
MiAvKiBJbmplY3RlZEJ1bmRsZUJhc2ljLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTc1QUFDMTI2RTgzQjkwMDZGMEYxMiAvKiBJbmplY3RlZEJ1
bmRsZUJhc2ljLmNwcCAqLzsgfTsKKwkJQkM1NzVBQjAxMjZFODNDODAwNkYwRjEyIC8qIEluamVj
dGVkQnVuZGxlQmFzaWNfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDNTc1QUFGMTI2RTgzQzgwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRs
ZUJhc2ljX0J1bmRsZS5jcHAgKi87IH07CisJCUJDNTc1QkMwMTI2RjU3NTIwMDZGMEYxMiAvKiBQ
bGF0Zm9ybVV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzU3NUJCRjEyNkY1NzUyMDA2RjBGMTIgLyogUGxhdGZvcm1VdGlsaXRpZXMu
Y3BwICovOyB9OworCQlCQzU3NUJEOTEyNkY1OEUyMDA2RjBGMTIgLyogUGxhdGZvcm1VdGlsaXRp
ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1
NzVCQkYxMjZGNTc1MjAwNkYwRjEyIC8qIFBsYXRmb3JtVXRpbGl0aWVzLmNwcCAqLzsgfTsKKwkJ
QkM1NzVCRTAxMjZGNTkwRDAwNkYwRjEyIC8qIFBsYXRmb3JtVXRpbGl0aWVzTWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxMzE4ODQxMTcxMTRC
NjAwQjY5NzI3IC8qIFBsYXRmb3JtVXRpbGl0aWVzTWFjLm1tICovOyB9OwogCQlCQzkwOTU1RDEy
NTU0OEFBMDAwODM3NTYgLyogUGxhdGZvcm1XZWJWaWV3TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5MDk1NUMxMjU1NDhBQTAwMDgzNzU2IC8q
IFBsYXRmb3JtV2ViVmlld01hYy5tbSAqLzsgfTsKIAkJQkM5MDk2NEMxMjU1NjFCRjAwMDgzNzU2
IC8qIFZlY3RvckJhc2ljLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDOTA5NjRCMTI1NTYxQkYwMDA4Mzc1NiAvKiBWZWN0b3JCYXNpYy5jcHAgKi87
IH07CiAJCUJDOTA5NjRFMTI1NTYyMEMwMDA4Mzc1NiAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdv
cmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzkw
OTY0RDEyNTU2MjBDMDAwODM3NTYgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OwpA
QCAtMzAsNiArNDAsMTYgQEAKIAkJQzAyQjc4NTQxMjY2MTNBRTAwMjZCRjBGIC8qIENhcmJvbi5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMDJCNzg1MzEyNjYxM0FFMDAyNkJGMEYgLyogQ2FyYm9uLmZyYW1ld29yayAqLzsgfTsKIC8q
IEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCisvKiBCZWdpbiBQQlhDb250YWluZXJJdGVt
UHJveHkgc2VjdGlvbiAqLworCQlCQzU3NUE5NTEyNkU3NEU3MDA2RjBGMTIgLyogUEJYQ29udGFp
bmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJ
Y29udGFpbmVyUG9ydGFsID0gMDhGQjc3OTNGRTg0MTU1REMwMkFBQzA3IC8qIFByb2plY3Qgb2Jq
ZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gQkM1
NzU5N0YxMjZFNzRBRjAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlICovOworCQkJcmVtb3RlSW5m
byA9IEluamVjdGVkQnVuZGxlOworCQl9OworLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBz
ZWN0aW9uICovCisKIC8qIEJlZ2luIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwog
CQk4REQ3NkY5RTA0ODZBQTc2MDBEOTZCNUUgLyogQ29weUZpbGVzICovID0gewogCQkJaXNhID0g
UEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKQEAgLTY1LDYgKzg1LDE2IEBACiAJCUJDMTMxQTlBMTE3
MTMxNjkwMEI2OTcyNyAvKiBtYWluLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gbWFpbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxMzFBOUUx
MTcxMzE3QzAwQjY5NzI3IC8qIFRlc3RXZWJLaXRBUElQcmVmaXguaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGVzdFdlYktpdEFQSVByZWZpeC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQzEzMUFBODExNzEzMUZDMDBCNjk3MjcgLyogVGVzdHNDb250cm9sbGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVGVzdHNDb250cm9sbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM1NzU5NDYxMjZFNzM1MTAwNkYw
RjEyIC8qIEluamVjdGVkQnVuZGxlTWFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZU1haW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzU3NTk4MDEyNkU3NEFGMDA2RjBGMTIgLyogSW5qZWN0ZWRCdW5kbGUuYnVuZGxl
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVy
LmNmYnVuZGxlOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZS5idW5k
bGU7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUJDNTc1OTgxMTI2RTc0
QUYwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRsZS1JbmZvLnBsaXN0ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC54bWw7IHBhdGggPSAi
SW5qZWN0ZWRCdW5kbGUtSW5mby5wbGlzdCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUJDNTc1QTlFMTI2RTc1RkIwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRsZVRlc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVUZXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDNTc1QTlGMTI2RTc2NTcwMDZGMEYxMiAvKiBJbmplY3Rl
ZEJ1bmRsZUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5q
ZWN0ZWRCdW5kbGVDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJD
NTc1QUEwMTI2RTc2NTcwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVDb250cm9s
bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM1NzVBQUMxMjZFODNCOTAw
NkYwRjEyIC8qIEluamVjdGVkQnVuZGxlQmFzaWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVCYXNpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJDNTc1QUFGMTI2RTgzQzgwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRsZUJh
c2ljX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmpl
Y3RlZEJ1bmRsZUJhc2ljX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUJDNTc1QUUyMTI2RTg4QjEwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRsZS54Y2NvbmZpZyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBJbmplY3RlZEJ1bmRsZS54Y2NvbmZpZzsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM1NzVCQkYxMjZGNTc1MjAwNkYwRjEyIC8qIFBs
YXRmb3JtVXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFBsYXRmb3JtVXRpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM5
MDk1MUIxMjU1MzNENzAwMDgzNzU2IC8qIFBsYXRmb3JtV2ViVmlldy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVdlYlZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkM5MDk1NUMxMjU1NDhBQTAwMDgzNzU2IC8qIFBsYXRmb3JtV2ViVmlld01h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXRmb3JtV2Vi
Vmlld01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM5MDk1N0UxMjU1NENG
OTAwMDgzNzU2IC8qIEJhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRo
ID0gQmFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMSw2ICsx
MzEsMTYgQEAKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKKwkJQkM1NzU5N0UxMjZFNzRBRjAwNkYwRjEyIC8qIEZyYW1ld29ya3MgKi8gPSB7
CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQlCQzU3NUE5MDEyNkU3NEQzMDA2RjBGMTIg
LyogQ29jb2EuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJQkM1NzVBOTExMjZFNzRE
MzAwNkYwRjEyIC8qIFdlYktpdDIuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJQkM1
NzVBOTIxMjZFNzREMzAwNkYwRjEyIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOworCQl9OwogLyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAog
LyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLwpAQCAtMTEyLDYgKzE1Miw3IEBACiAJCQkJQkM5
MDk1N0QxMjU1NENFQTAwMDgzNzU2IC8qIENvbmZpZ3VyYXRpb25zICovLAogCQkJCTA4RkI3NzlE
RkU4NDE1NURDMDJBQUMwNyAvKiBFeHRlcm5hbCBGcmFtZXdvcmtzIGFuZCBMaWJyYXJpZXMgKi8s
CiAJCQkJMUFCNjc0QURGRTlENTRCNTExQ0EyQ0JCIC8qIFByb2R1Y3RzICovLAorCQkJCUJDNTc1
OTgxMTI2RTc0QUYwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRsZS1JbmZvLnBsaXN0ICovLAogCQkJ
KTsKIAkJCW5hbWUgPSBUZXN0V2ViS2l0QVBJOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTEyMCw3ICsxNjEsOSBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
IAkJCQlCQ0E2MUMzQTExNzAwQjk0MDA0NjBEMUUgLyogbWFjICovLAorCQkJCUJDNTc1OTQ0MTI2
RTczM0MwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRsZSAqLywKIAkJCQlCQzEzMUE5RTExNzEzMTdD
MDBCNjk3MjcgLyogVGVzdFdlYktpdEFQSVByZWZpeC5oICovLAorCQkJCUJDNTc1QkJGMTI2RjU3
NTIwMDZGMEYxMiAvKiBQbGF0Zm9ybVV0aWxpdGllcy5jcHAgKi8sCiAJCQkJQkMxMzE4ODMxMTcx
MTRBODAwQjY5NzI3IC8qIFBsYXRmb3JtVXRpbGl0aWVzLmggKi8sCiAJCQkJQkM5MDk1MUIxMjU1
MzNENzAwMDgzNzU2IC8qIFBsYXRmb3JtV2ViVmlldy5oICovLAogCQkJCUJDQjlFN0ZBMTEyMzU5
QTMwMEExMzdFMCAvKiBUZXN0LmggKi8sCkBAIC0xNDUsMTUgKzE4OCwyOCBAQAogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUg
LyogVGVzdFdlYktpdEFQSSAqLywKKwkJCQlCQzU3NTk4MDEyNkU3NEFGMDA2RjBGMTIgLyogSW5q
ZWN0ZWRCdW5kbGUuYnVuZGxlICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUJDNTc1OTQ0MTI2RTczM0MwMDZGMEYxMiAv
KiBJbmplY3RlZEJ1bmRsZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4g
PSAoCisJCQkJQkM1NzU5NDYxMjZFNzM1MTAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlTWFpbi5j
cHAgKi8sCisJCQkJQkM1NzVBOUUxMjZFNzVGQjAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlVGVz
dC5oICovLAorCQkJCUJDNTc1QTlGMTI2RTc2NTcwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRsZUNv
bnRyb2xsZXIuaCAqLywKKwkJCQlCQzU3NUFBMDEyNkU3NjU3MDA2RjBGMTIgLyogSW5qZWN0ZWRC
dW5kbGVDb250cm9sbGVyLmNwcCAqLywKKwkJCSk7CisJCQluYW1lID0gSW5qZWN0ZWRCdW5kbGU7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCQzkwOTU3RDEyNTU0Q0VBMDAw
ODM3NTYgLyogQ29uZmlndXJhdGlvbnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAogCQkJCUJDOTA5NTdFMTI1NTRDRjkwMDA4Mzc1NiAvKiBCYXNlLnhjY29uZmln
ICovLAogCQkJCUJDOTA5NTdGMTI1NTRDRjkwMDA4Mzc1NiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25m
aWcgKi8sCisJCQkJQkM1NzVBRTIxMjZFODhCMTAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlLnhj
Y29uZmlnICovLAogCQkJCUJDOTA5NTgwMTI1NTRDRjkwMDA4Mzc1NiAvKiBUZXN0V2ViS2l0QVBJ
LnhjY29uZmlnICovLAogCQkJKTsKIAkJCXBhdGggPSBDb25maWd1cmF0aW9uczsKQEAgLTE3MSw2
ICsyMjcsOCBAQAogCQkJCUJDOTA5OTVEMTI1NjdCQzEwMDA4Mzc1NiAvKiBXS1N0cmluZy5jcHAg
Ki8sCiAJCQkJQkM5MDk5OTMxMjU2QUNGMTAwMDgzNzU2IC8qIFdLU3RyaW5nSlNTdHJpbmcuY3Bw
ICovLAogCQkJCUJDQzhCOTVBMTI2MTFGNDcwMERFNDZBNCAvKiBGYWlsZWRMb2FkLmNwcCAqLywK
KwkJCQlCQzU3NUFBQzEyNkU4M0I5MDA2RjBGMTIgLyogSW5qZWN0ZWRCdW5kbGVCYXNpYy5jcHAg
Ki8sCisJCQkJQkM1NzVBQUYxMjZFODNDODAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlQmFzaWNf
QnVuZGxlLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gV2ViS2l0MjsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CkBAIC0yMjgsNiArMjg2LDcgQEAKIAkJCWJ1aWxkUnVsZXMgPSAoCiAJCQkp
OwogCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCUJDNTc1QTk2MTI2RTc0RTcwMDZGMEYxMiAvKiBQ
QlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJKTsKIAkJCW5hbWUgPSBUZXN0V2ViS2l0QVBJOwog
CQkJcHJvZHVjdEluc3RhbGxQYXRoID0gIiQoSE9NRSkvYmluIjsKQEAgLTIzNSw2ICsyOTQsMjMg
QEAKIAkJCXByb2R1Y3RSZWZlcmVuY2UgPSA4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUgLyogVGVz
dFdlYktpdEFQSSAqLzsKIAkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUu
dG9vbCI7CiAJCX07CisJCUJDNTc1OTdGMTI2RTc0QUYwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRs
ZSAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlv
bkxpc3QgPSBCQzU3NTk4NjEyNkU3NEFGMDA2RjBGMTIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBs
aXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkluamVjdGVkQnVuZGxlIiAqLzsKKwkJCWJ1aWxkUGhh
c2VzID0gKAorCQkJCUJDNTc1OTdDMTI2RTc0QUYwMDZGMEYxMiAvKiBSZXNvdXJjZXMgKi8sCisJ
CQkJQkM1NzU5N0QxMjZFNzRBRjAwNkYwRjEyIC8qIFNvdXJjZXMgKi8sCisJCQkJQkM1NzU5N0Ux
MjZFNzRBRjAwNkYwRjEyIC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9
ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9IEluamVjdGVk
QnVuZGxlOworCQkJcHJvZHVjdE5hbWUgPSBJbmplY3RlZEJ1bmRsZTsKKwkJCXByb2R1Y3RSZWZl
cmVuY2UgPSBCQzU3NTk4MDEyNkU3NEFGMDA2RjBGMTIgLyogSW5qZWN0ZWRCdW5kbGUuYnVuZGxl
ICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5idW5kbGUiOwor
CQl9OwogLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFBy
b2plY3Qgc2VjdGlvbiAqLwpAQCAtMjU1LDEwICszMzEsMjEgQEAKIAkJCXByb2plY3RSb290ID0g
IiI7CiAJCQl0YXJnZXRzID0gKAogCQkJCThERDc2Rjk2MDQ4NkFBNzYwMEQ5NkI1RSAvKiBUZXN0
V2ViS2l0QVBJICovLAorCQkJCUJDNTc1OTdGMTI2RTc0QUYwMDZGMEYxMiAvKiBJbmplY3RlZEJ1
bmRsZSAqLywKIAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCiAKKy8q
IEJlZ2luIFBCWFJlc291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQlCQzU3NTk3QzEyNkU3
NEFGMDA2RjBGMTIgLyogUmVzb3VyY2VzICovID0geworCQkJaXNhID0gUEJYUmVzb3VyY2VzQnVp
bGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgK
KwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsK
Ky8qIEVuZCBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwogLyogQmVnaW4gUEJY
U291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCQk4REQ3NkY5OTA0ODZBQTc2MDBEOTZCNUUg
LyogU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwpAQCAtMjc3
LDExICszNjQsMzMgQEAKIAkJCQkxQTAyQzg0RjEyNUQ0QTg0MDBFM0Y0QkQgLyogRmluZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQ0M4Qjk1QjEyNjExRjQ3MDBERTQ2QTQgLyogRmFpbGVkTG9h
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMDJCNzdGMjEyNjYxMjE0MDAyNkJGMEYgLyogU3Bh
Y2ViYXJTY3JvbGxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkM1NzVBQUQxMjZFODNCOTAw
NkYwRjEyIC8qIEluamVjdGVkQnVuZGxlQmFzaWMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkM1
NzVCQzAxMjZGNTc1MjAwNkYwRjEyIC8qIFBsYXRmb3JtVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwor
CQl9OworCQlCQzU3NTk3RDEyNkU3NEFGMDA2RjBGMTIgLyogU291cmNlcyAqLyA9IHsKKwkJCWlz
YSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0
NzsKKwkJCWZpbGVzID0gKAorCQkJCUJDNTc1QTk3MTI2RTc0RjEwMDZGMEYxMiAvKiBJbmplY3Rl
ZEJ1bmRsZU1haW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkM1NzVBQTIxMjZFNzY2MDAwNkYw
RjEyIC8qIEluamVjdGVkQnVuZGxlQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlC
QzU3NUFCMDEyNkU4M0M4MDA2RjBGMTIgLyogSW5qZWN0ZWRCdW5kbGVCYXNpY19CdW5kbGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQkM1NzVCRDkxMjZGNThFMjAwNkYwRjEyIC8qIFBsYXRmb3Jt
VXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJDNTc1QkUwMTI2RjU5MEQwMDZGMEYx
MiAvKiBQbGF0Zm9ybVV0aWxpdGllc01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwogLyogRW5kIFBCWFNv
dXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAorLyogQmVnaW4gUEJYVGFyZ2V0RGVwZW5kZW5j
eSBzZWN0aW9uICovCisJCUJDNTc1QTk2MTI2RTc0RTcwMDZGMEYxMiAvKiBQQlhUYXJnZXREZXBl
bmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9
IEJDNTc1OTdGMTI2RTc0QUYwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRsZSAqLzsKKwkJCXRhcmdl
dFByb3h5ID0gQkM1NzVBOTUxMjZFNzRFNzAwNkYwRjEyIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94
eSAqLzsKKwkJfTsKKy8qIEVuZCBQQlhUYXJnZXREZXBlbmRlbmN5IHNlY3Rpb24gKi8KKwogLyog
QmVnaW4gWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwogCQkxREVCOTI3NTA4NzMzREQ0
MDAxMEU5Q0QgLyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsK
QEAgLTMxNCw2ICs0MjMsMjAgQEAKIAkJCX07CiAJCQluYW1lID0gUmVsZWFzZTsKIAkJfTsKKwkJ
QkM1NzU5ODQxMjZFNzRBRjAwNkYwRjEyIC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWls
ZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDNTc1QUUy
MTI2RTg4QjEwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxk
U2V0dGluZ3MgPSB7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQlCQzU3NTk4NTEy
NkU3NEFGMDA2RjBGMTIgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1
cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzU3NUFFMjEyNkU4OEIx
MDA2RjBGMTIgLyogSW5qZWN0ZWRCdW5kbGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdz
ID0geworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OwogLyogRW5kIFhDQnVpbGRDb25m
aWd1cmF0aW9uIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBzZWN0
aW9uICovCkBAIC0zMzUsNiArNDU4LDE1IEBACiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlz
aWJsZSA9IDA7CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOwogCQl9Owor
CQlCQzU3NTk4NjEyNkU3NEFGMDA2RjBGMTIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZv
ciBQQlhOYXRpdmVUYXJnZXQgIkluamVjdGVkQnVuZGxlIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29u
ZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUJDNTc1OTg0
MTI2RTc0QUYwMDZGMEYxMiAvKiBEZWJ1ZyAqLywKKwkJCQlCQzU3NTk4NTEyNkU3NEFGMDA2RjBG
MTIgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJs
ZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9OwogLyog
RW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwogCX07CiAJcm9vdE9iamVjdCA9IDA4
RkI3NzkzRkU4NDE1NURDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKSW5kZXg6IFdlYktp
dFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9JbmplY3RlZEJ1bmRsZUJhc2ljLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIv
SW5qZWN0ZWRCdW5kbGVCYXNpYy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvSW5qZWN0ZWRCdW5kbGVCYXNpYy5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiVGVzdC5oIgorCisj
aW5jbHVkZSAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcu
aCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dlYktpdDIuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0
YWluUHRyLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworc3RhdGljIGJvb2wgZG9u
ZTsKK3N0YXRpYyBib29sIGxvYWREb25lOworc3RhdGljIGJvb2wgbWVzc2FnZVJlY2VpdmVkOwor
Cit2b2lkIGRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLQ29udGV4dFJlZiBj
b250ZXh0LCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5LCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIG1lc3NhZ2VSZWNlaXZlZCA9IHRydWU7Cisg
ICAgaWYgKGxvYWREb25lKQorICAgICAgICBkb25lID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQg
ZGlkRmluaXNoTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBX
S1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgbG9hZERv
bmUgPSB0cnVlOworICAgIGlmIChtZXNzYWdlUmVjZWl2ZWQpCisgICAgICAgIGRvbmUgPSB0cnVl
OworfQorCitURVNUKFdlYktpdDIsIEluamVjdGVkQnVuZGxlQmFzaWMpCit7CisgICAgV0tSZXRh
aW5QdHI8V0tDb250ZXh0UmVmPiBjb250ZXh0KEFkb3B0V0ssIFV0aWw6OmNyZWF0ZUNvbnRleHRG
b3JJbmplY3RlZEJ1bmRsZVRlc3QoIkluamVjdGVkQnVuZGxlQmFzaWNUZXN0IikpOworICAgIFdL
UmV0YWluUHRyPFdLUGFnZU5hbWVzcGFjZVJlZj4gcGFnZU5hbWVzcGFjZShBZG9wdFdLLCBXS1Bh
Z2VOYW1lc3BhY2VDcmVhdGUoY29udGV4dC5nZXQoKSkpOworCisgICAgV0tDb250ZXh0SW5qZWN0
ZWRCdW5kbGVDbGllbnQgaW5qZWN0ZWRCdW5kbGVDbGllbnQ7CisgICAgbWVtc2V0KCZpbmplY3Rl
ZEJ1bmRsZUNsaWVudCwgMCwgc2l6ZW9mKGluamVjdGVkQnVuZGxlQ2xpZW50KSk7CisgICAgaW5q
ZWN0ZWRCdW5kbGVDbGllbnQudmVyc2lvbiA9IDA7CisgICAgaW5qZWN0ZWRCdW5kbGVDbGllbnQu
Y2xpZW50SW5mbyA9IDA7CisgICAgaW5qZWN0ZWRCdW5kbGVDbGllbnQuZGlkUmVjZWl2ZU1lc3Nh
Z2VGcm9tSW5qZWN0ZWRCdW5kbGUgPSBkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRs
ZTsKKyAgICBXS0NvbnRleHRTZXRJbmplY3RlZEJ1bmRsZUNsaWVudChjb250ZXh0LmdldCgpLCAm
aW5qZWN0ZWRCdW5kbGVDbGllbnQpOworIAorICAgIFBsYXRmb3JtV2ViVmlldyB3ZWJWaWV3KHBh
Z2VOYW1lc3BhY2UuZ2V0KCkpOworCisgICAgV0tQYWdlTG9hZGVyQ2xpZW50IGxvYWRlckNsaWVu
dDsKKyAgICBtZW1zZXQoJmxvYWRlckNsaWVudCwgMCwgc2l6ZW9mKGxvYWRlckNsaWVudCkpOwor
ICAgIGxvYWRlckNsaWVudC52ZXJzaW9uID0gMDsKKyAgICBsb2FkZXJDbGllbnQuY2xpZW50SW5m
byA9IDA7CisgICAgbG9hZGVyQ2xpZW50LmRpZEZpbmlzaExvYWRGb3JGcmFtZSA9IGRpZEZpbmlz
aExvYWRGb3JGcmFtZTsKKyAgICBXS1BhZ2VTZXRQYWdlTG9hZGVyQ2xpZW50KHdlYlZpZXcucGFn
ZSgpLCAmbG9hZGVyQ2xpZW50KTsKKworICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwoQWRv
cHRXSywgVXRpbDo6Y3JlYXRlVVJMRm9yUmVzb3VyY2UoInNpbXBsZSIsICJodG1sIikpOworICAg
IFdLUGFnZUxvYWRVUkwod2ViVmlldy5wYWdlKCksIHVybC5nZXQoKSk7CisKKyAgICBVdGlsOjpy
dW4oJmRvbmUpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBXZWJL
aXRUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvSW5qZWN0ZWRCdW5kbGVCYXNpY19C
dW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mi9JbmplY3RlZEJ1bmRsZUJhc2ljX0J1bmRsZS5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJLaXRUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvSW5qZWN0ZWRCdW5kbGVCYXNp
Y19CdW5kbGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgIkluamVjdGVkQnVuZGxlVGVzdC5oIgorI2luY2x1ZGUgPFdlYktpdDIvV2ViS2l0
Mi5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkgeworCitjbGFzcyBJbmplY3RlZEJ1bmRsZUJhc2ljVGVzdCA6IHB1YmxpYyBJbmpl
Y3RlZEJ1bmRsZVRlc3QgeworcHVibGljOgorICAgIEluamVjdGVkQnVuZGxlQmFzaWNUZXN0KGNv
bnN0IHN0ZDo6c3RyaW5nJiBpZGVudGlmaWVyKQorICAgICAgICA6IEluamVjdGVkQnVuZGxlVGVz
dChpZGVudGlmaWVyKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRl
UGFnZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLQnVuZGxlUGFnZVJlZiBwYWdlKQorICAgIHsKKyAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRvbmVNZXNzYWdlTmFtZShBZG9wdFdLLCBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRG9uZU1lc3NhZ2VOYW1lIikpOworICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZG9uZU1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEb25lTWVzc2FnZUJvZHkiKSk7CisgICAgICAgIFdL
QnVuZGxlUG9zdE1lc3NhZ2UoYnVuZGxlLCBkb25lTWVzc2FnZU5hbWUuZ2V0KCksIGRvbmVNZXNz
YWdlQm9keS5nZXQoKSk7CisgICAgfQorfTsKKworc3RhdGljIEluamVjdGVkQnVuZGxlVGVzdDo6
UmVnaXN0ZXI8SW5qZWN0ZWRCdW5kbGVCYXNpY1Rlc3Q+IGluamVjdGVkQnVuZGxlQmFzaWNUZXN0
UmVnaXN0cmFyKCJJbmplY3RlZEJ1bmRsZUJhc2ljVGVzdCIpOworCit9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogV2ViS2l0VG9v
bHMvVGVzdFdlYktpdEFQSS9tYWMvUGxhdGZvcm1VdGlsaXRpZXNNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvUGxhdGZvcm1VdGlsaXRpZXNNYWMubW0J
KHJldmlzaW9uIDcwMTg1KQorKysgV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvUGxhdGZv
cm1VdGlsaXRpZXNNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDEwIEBACiAKICNp
bmNsdWRlICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogCisjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFp
blB0ci5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmdDRi5oPgogI2luY2x1ZGUgPFdlYktp
dDIvV0tVUkxDRi5oPgorI2luY2x1ZGUgPFdlYktpdDIvV2ViS2l0Mi5oPgogCiBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CiBuYW1lc3BhY2UgVXRpbCB7CkBAIC0zNywxNSArMzksMjEgQEAgdm9p
ZCBydW4oYm9vbCogZG9uZSkKICAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHJ1
bk1vZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRpc3RhbnRGdXR1
cmVdXTsKIH0KIAorV0tTdHJpbmdSZWYgY3JlYXRlSW5qZWN0ZWRCdW5kbGVQYXRoKCkKK3sKKyAg
ICBOU1N0cmluZyAqbnNTdHJpbmcgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVQYXRo
XSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJJbmplY3RlZEJ1bmRsZS5idW5kbGUi
XTsKKyAgICByZXR1cm4gV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKW5z
U3RyaW5nKTsKK30KKwogV0tVUkxSZWYgY3JlYXRlVVJMRm9yUmVzb3VyY2UoY29uc3QgY2hhciog
cmVzb3VyY2UsIGNvbnN0IGNoYXIqIGV4dGVuc2lvbikKIHsKLSAgICBOU1VSTCogbnNVUkwgPSBb
W05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOltOU1N0cmluZyBzdHJpbmdXaXRo
VVRGOFN0cmluZzpyZXNvdXJjZV0gd2l0aEV4dGVuc2lvbjpbTlNTdHJpbmcgc3RyaW5nV2l0aFVU
RjhTdHJpbmc6ZXh0ZW5zaW9uXV07CisgICAgTlNVUkwgKm5zVVJMID0gW1tOU0J1bmRsZSBtYWlu
QnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6cmVz
b3VyY2VdIHdpdGhFeHRlbnNpb246W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmV4dGVu
c2lvbl1dOwogICAgIHJldHVybiBXS1VSTENyZWF0ZVdpdGhDRlVSTCgoQ0ZVUkxSZWYpbnNVUkwp
OwogfQogCiBXS1VSTFJlZiBVUkxGb3JOb25FeGlzdGVudFJlc291cmNlKCkKIHsKLSAgICBOU1VS
TCogbnNVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpAImZpbGU6Ly8vZG9lcy1ub3QtZXhpc3Qu
aHRtbCJdOworICAgIE5TVVJMICpuc1VSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiZmlsZTov
Ly9kb2VzLW5vdC1leGlzdC5odG1sIl07CiAgICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aENGVVJM
KChDRlVSTFJlZiluc1VSTCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71366</attachid>
            <date>2010-10-20 16:56:28 -0700</date>
            <delta_ts>2010-10-20 17:10:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>yup.diff</filename>
            <type>text/plain</type>
            <size>44869</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDcwMTkxKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTAtMTAtMjAgIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgwMjcKKyAgICAg
ICAgQWRkIGFiaWxpdHkgdG8gdGVzdCBpbmplY3RlZCBidW5kbGUgQVBJIHVzaW5nIFRlc3RXZWJL
aXRBUEkKKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVy
LmNwcDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZUNvbnRy
b2xsZXIuaDogQWRkZWQuCisgICAgICAgIFNoYXJlZCBtYWluIG9iamVjdCBmb3IgYnVuZGxlIGZ1
bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlTWFp
bi5jcHA6IEFkZGVkLgorICAgICAgICBCdW5kbGUgZW50cnkgcG9pbnQuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlVGVzdC5oOiBBZGRlZC4KKyAgICAgICAgQmFzZSBj
bGFzcyBmb3Igd2hpY2ggdGhlIGJ1bmRsZSBwb3J0aW9uIG9mIGEgdGVzdCBkZXJpdmVzIGZyb20u
IAorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVV0aWxpdGllcy5oOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1VdGlsaXRpZXMuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL21hYy9QbGF0Zm9ybVV0aWxpdGllc01hYy5tbToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL3dpbi9QbGF0Zm9ybVV0aWxpdGllc1dpbi5jcHA6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpVdGlsOjpjcmVhdGVJbmplY3RlZEJ1bmRsZVBhdGgpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VXRpbDo6Y3JlYXRlVVJMRm9yUmVzb3VyY2UpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VXRpbDo6VVJMRm9yTm9uRXhpc3RlbnRSZXNvdXJjZSk6CisgICAgICAgIEFkZCBo
ZWxwZXIgdG8gY3JlYXRlIGEgY29udGV4dCB3aXRoIHRoZSBzaGFyZWQgaW5qZWN0ZWQgYnVuZGxl
LAorICAgICAgICBhbmQgc2VuZCB0aGUgaW5pdGlhbCBtZXNzYWdlIHRvIHNldCB1cCB0aGUgdGVz
dC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ29uZmlndXJhdGlvbnMvSW5qZWN0ZWRCdW5k
bGUueGNjb25maWc6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5k
bGUtSW5mby5wbGlzdDogQWRkZWQuCisgICAgICAgIEFkZCBtYWMgY29uZmlndXJhdGlvbiBmaWxl
cy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgdGhlIG5ldyBmaWxlcy4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9JbmplY3RlZEJ1bmRsZUJhc2ljLmNwcDogQWRkZWQu
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0luamVjdGVkQnVuZGxlQmFz
aWNfQnVuZGxlLmNwcDogQWRkZWQuCisgICAgICAgIEFkZCBhIHNpbXBsZSBpbml0aWFsIGJ1bmRs
ZSB0ZXN0LgorCiAyMDEwLTEwLTE0ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBUZXN0IHRoYXQgcGFzc2luZyBhIGRpZmZlcmVudCBOUFAgc3RydWN0IGJhY2sgdG8g
dGhlIGJyb3dzZXIgZG9lc24ndApJbmRleDogV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9Jbmpl
Y3RlZEJ1bmRsZS1JbmZvLnBsaXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RXZWJL
aXRBUEkvSW5qZWN0ZWRCdW5kbGUtSW5mby5wbGlzdAkocmV2aXNpb24gMCkKKysrIFdlYktpdFRv
b2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGUtSW5mby5wbGlzdAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4K
KzwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0
dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgorPHBsaXN0IHZl
cnNpb249IjEuMCI+Cis8ZGljdD4KKwk8a2V5PkNGQnVuZGxlRGV2ZWxvcG1lbnRSZWdpb248L2tl
eT4KKwk8c3RyaW5nPkVuZ2xpc2g8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlRXhlY3V0YWJsZTwv
a2V5PgorCTxzdHJpbmc+JHtFWEVDVVRBQkxFX05BTUV9PC9zdHJpbmc+CisJPGtleT5DRkJ1bmRs
ZUlkZW50aWZpZXI8L2tleT4KKwk8c3RyaW5nPmNvbS55b3VyY29tcGFueS4ke1BST0RVQ1RfTkFN
RTpyZmMxMDM0aWRlbnRpZmllcn08L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlSW5mb0RpY3Rpb25h
cnlWZXJzaW9uPC9rZXk+CisJPHN0cmluZz42LjA8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlUGFj
a2FnZVR5cGU8L2tleT4KKwk8c3RyaW5nPkJOREw8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlU2hv
cnRWZXJzaW9uU3RyaW5nPC9rZXk+CisJPHN0cmluZz4xLjA8L3N0cmluZz4KKwk8a2V5PkNGQnVu
ZGxlU2lnbmF0dXJlPC9rZXk+CisJPHN0cmluZz4/Pz8/PC9zdHJpbmc+CisJPGtleT5DRkJ1bmRs
ZVZlcnNpb248L2tleT4KKwk8c3RyaW5nPjE8L3N0cmluZz4KKzwvZGljdD4KKzwvcGxpc3Q+Cklu
ZGV4OiBXZWJLaXRUb29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlQ29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRs
ZUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQ
SS9JbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEx
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuaCIK
KworI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlVGVzdC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CisjaW5jbHVkZSA8YWxnb3Jp
dGhtPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisK
K0luamVjdGVkQnVuZGxlQ29udHJvbGxlciYgSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaGFy
ZWQoKQoreworICAgIHN0YXRpYyBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXImIHNoYXJlZCA9ICpu
ZXcgSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOworICAgIHJldHVybiBzaGFyZWQ7Cit9CisKK0lu
amVjdGVkQnVuZGxlQ29udHJvbGxlcjo6SW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyKCkKKyAgICA6
IG1fYnVuZGxlKDApCisgICAgLCBtX2N1cnJlbnRUZXN0KDApCit7Cit9CisKK3ZvaWQgSW5qZWN0
ZWRCdW5kbGVDb250cm9sbGVyOjppbml0aWFsaXplKFdLQnVuZGxlUmVmIGJ1bmRsZSkKK3sKKyAg
ICBtX2J1bmRsZSA9IGJ1bmRsZTsKKworICAgIFdLQnVuZGxlQ2xpZW50IGNsaWVudCA9IHsKKyAg
ICAgICAgMCwKKyAgICAgICAgdGhpcywKKyAgICAgICAgZGlkQ3JlYXRlUGFnZSwKKyAgICAgICAg
d2lsbERlc3Ryb3lQYWdlLAorICAgICAgICBkaWRSZWNlaXZlTWVzc2FnZQorICAgIH07CisgICAg
V0tCdW5kbGVTZXRDbGllbnQobV9idW5kbGUsICZjbGllbnQpOworfQorCit2b2lkIEluamVjdGVk
QnVuZGxlQ29udHJvbGxlcjo6ZGlkQ3JlYXRlUGFnZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLQnVu
ZGxlUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEluamVjdGVk
QnVuZGxlQ29udHJvbGxlciogc2VsZiA9IHN0YXRpY19jYXN0PEluamVjdGVkQnVuZGxlQ29udHJv
bGxlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICBhc3NlcnQoc2VsZi0+
bV9jdXJyZW50VGVzdCk7CisgICAgc2VsZi0+bV9jdXJyZW50VGVzdC0+ZGlkQ3JlYXRlUGFnZShi
dW5kbGUsIHBhZ2UpOworfQorCit2b2lkIEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6d2lsbERl
c3Ryb3lQYWdlKFdLQnVuZGxlUmVmIGJ1bmRsZSwgV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyKiBzZWxm
ID0gc3RhdGljX2Nhc3Q8SW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyKj4oY29uc3RfY2FzdDx2b2lk
Kj4oY2xpZW50SW5mbykpOworICAgIGFzc2VydChzZWxmLT5tX2N1cnJlbnRUZXN0KTsKKyAgICBz
ZWxmLT5tX2N1cnJlbnRUZXN0LT53aWxsRGVzdHJveVBhZ2UoYnVuZGxlLCBwYWdlKTsKK30KKwor
dm9pZCBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6OmRpZFJlY2VpdmVNZXNzYWdlKFdLQnVuZGxl
UmVmIGJ1bmRsZSwgV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9k
eSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBJbmplY3RlZEJ1bmRsZUNvbnRyb2xs
ZXIqIHNlbGYgPSBzdGF0aWNfY2FzdDxJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIqPihjb25zdF9j
YXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkJ1bmRsZVRlc3RJbnN0YW50aWF0b3IiKSkgeworICAgICAg
ICBhc3NlcnQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkp
OworICAgICAgICBXS1N0cmluZ1JlZiBtZXNzYWdlQm9keVN0cmluZyA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisKKyAgICAgICAgc2VsZi0+aW5pdGlhbGl6ZVRlc3RO
YW1lZChVdGlsOjp0b1NURChtZXNzYWdlQm9keVN0cmluZykpOworCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBhc3NlcnQoc2VsZi0+bV9jdXJyZW50VGVzdCk7CisgICAgc2VsZi0+bV9j
dXJyZW50VGVzdC0+ZGlkUmVjZWl2ZU1lc3NhZ2UoYnVuZGxlLCBtZXNzYWdlTmFtZSwgbWVzc2Fn
ZUJvZHkpOworfQorCit2b2lkIEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6ZHVtcFRlc3ROYW1l
cygpCit7CisgICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIENyZWF0ZUluamVjdGVkQnVuZGxlVGVz
dEZ1bmN0aW9uPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NyZWF0ZUluamVjdGVkQnVuZGxlVGVz
dEZ1bmN0aW9ucy5iZWdpbigpOworICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBDcmVhdGVJbmpl
Y3RlZEJ1bmRsZVRlc3RGdW5jdGlvbj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY3JlYXRlSW5q
ZWN0ZWRCdW5kbGVUZXN0RnVuY3Rpb25zLmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsr
aXQpCisgICAgICAgIHByaW50ZigiJXNcbiIsICgqaXQpLmZpcnN0LmNfc3RyKCkpOworfQorCit2
b2lkIEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6aW5pdGlhbGl6ZVRlc3ROYW1lZChjb25zdCBz
dGQ6OnN0cmluZyYgaWRlbnRpZmllcikKK3sKKyAgICBDcmVhdGVJbmplY3RlZEJ1bmRsZVRlc3RG
dW5jdGlvbiBjcmVhdGVUZXN0RnVuY3Rpb24gPSBtX2NyZWF0ZUluamVjdGVkQnVuZGxlVGVzdEZ1
bmN0aW9uc1tpZGVudGlmaWVyXTsKKyAgICBpZiAoIWNyZWF0ZVRlc3RGdW5jdGlvbikgeworICAg
ICAgICBwcmludGYoIkVSUk9SOiBJbmplY3RlZEJ1bmRsZSB0ZXN0IG5vdCBmb3VuZCAtICVzXG4i
LCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIG1f
Y3VycmVudFRlc3QgPSBjcmVhdGVUZXN0RnVuY3Rpb24oaWRlbnRpZmllcik7CisgICAgbV9jdXJy
ZW50VGVzdC0+aW5pdGlhbGl6ZSgpOworfQorCit2b2lkIEluamVjdGVkQnVuZGxlQ29udHJvbGxl
cjo6cmVnaXN0ZXJDcmVhdGVJbmplY3RlZEJ1bmRsZVRlc3RGdW5jdGlvbihjb25zdCBzdGQ6OnN0
cmluZyYgaWRlbnRpZmllciwgQ3JlYXRlSW5qZWN0ZWRCdW5kbGVUZXN0RnVuY3Rpb24gZnVuY3Rp
b24pCit7CisgICAgbV9jcmVhdGVJbmplY3RlZEJ1bmRsZVRlc3RGdW5jdGlvbnNbaWRlbnRpZmll
cl0gPSBmdW5jdGlvbjsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpJbmRleDog
V2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlQ29udHJv
bGxlci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3Rl
ZEJ1bmRsZUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyX2gKKyNkZWZpbmUgSW5qZWN0
ZWRCdW5kbGVDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5kbGUuaD4KKyNp
bmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SSB7CisKK2NsYXNzIEluamVjdGVkQnVuZGxlVGVzdDsKKworY2xhc3MgSW5qZWN0ZWRCdW5kbGVD
b250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVy
JiBzaGFyZWQoKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZShXS0J1bmRsZVJlZik7CisKKyAgICB2
b2lkIGR1bXBUZXN0TmFtZXMoKTsKKyAgICB2b2lkIGluaXRpYWxpemVUZXN0TmFtZWQoY29uc3Qg
c3RkOjpzdHJpbmcmKTsKKworICAgIHR5cGVkZWYgSW5qZWN0ZWRCdW5kbGVUZXN0KiAoKkNyZWF0
ZUluamVjdGVkQnVuZGxlVGVzdEZ1bmN0aW9uKShjb25zdCBzdGQ6OnN0cmluZyYpOworICAgIHZv
aWQgcmVnaXN0ZXJDcmVhdGVJbmplY3RlZEJ1bmRsZVRlc3RGdW5jdGlvbihjb25zdCBzdGQ6OnN0
cmluZyYsIENyZWF0ZUluamVjdGVkQnVuZGxlVGVzdEZ1bmN0aW9uKTsKKworcHJpdmF0ZToKKyAg
ICBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIoKTsKKyAgICB+SW5qZWN0ZWRCdW5kbGVDb250cm9s
bGVyKCk7CisKKyAgICBzdGF0aWMgdm9pZCBkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUmVmIGJ1bmRs
ZSwgV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0
YXRpYyB2b2lkIHdpbGxEZXN0cm95UGFnZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLQnVuZGxlUGFn
ZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRS
ZWNlaXZlTWVzc2FnZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1l
LCBXS1R5cGVSZWYgbWVzc2FnZUJvZHksIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCisgICAg
c3RkOjptYXA8c3RkOjpzdHJpbmcsIENyZWF0ZUluamVjdGVkQnVuZGxlVGVzdEZ1bmN0aW9uPiBt
X2NyZWF0ZUluamVjdGVkQnVuZGxlVGVzdEZ1bmN0aW9uczsKKyAgICBXS0J1bmRsZVJlZiBtX2J1
bmRsZTsKKyAgICBJbmplY3RlZEJ1bmRsZVRlc3QqIG1fY3VycmVudFRlc3Q7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBJbmplY3RlZEJ1bmRsZUNvbnRy
b2xsZXJfaApJbmRleDogV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZU1h
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRC
dW5kbGVNYWluLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1Rlc3RXZWJLaXRBUEkv
SW5qZWN0ZWRCdW5kbGVNYWluLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
IDxXZWJLaXQyL1dLQnVuZGxlSW5pdGlhbGl6ZS5oPgorCisjaWYgZGVmaW5lZChXSU4zMikgfHwg
ZGVmaW5lZChfV0lOMzIpCitleHRlcm4gIkMiIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSAKKyNlbHNl
CitleHRlcm4gIkMiCisjZW5kaWYKK3ZvaWQgV0tCdW5kbGVJbml0aWFsaXplKFdLQnVuZGxlUmVm
IGJ1bmRsZSkKK3sKKyAgICBUZXN0V2ViS2l0QVBJOjpJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6
OnNoYXJlZCgpLmluaXRpYWxpemUoYnVuZGxlKTsKK30KSW5kZXg6IFdlYktpdFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVUZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
VGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZVRlc3QuaAkocmV2aXNpb24gMCkKKysrIFdlYktp
dFRvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVUZXN0LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluamVjdGVkQnVuZGxlVGVzdF9o
CisjZGVmaW5lIEluamVjdGVkQnVuZGxlVGVzdF9oCisKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRs
ZUNvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBJbmpl
Y3RlZEJ1bmRsZVRlc3QgeworcHVibGljOgorICAgIHZpcnR1YWwgfkluamVjdGVkQnVuZGxlVGVz
dCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKSB7IH0KKworICAgIHZpcnR1
YWwgdm9pZCBkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUmVmIGJ1bmRsZSwgV0tCdW5kbGVQYWdlUmVm
IHBhZ2UpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsRGVzdHJveVBhZ2UoV0tCdW5kbGVSZWYg
YnVuZGxlLCBXS0J1bmRsZVBhZ2VSZWYgcGFnZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVNZXNzYWdlKFdLQnVuZGxlUmVmIGJ1bmRsZSwgV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUs
IFdLVHlwZVJlZiBtZXNzYWdlQm9keSkgeyB9CisKKyAgICBzdGQ6OnN0cmluZyBuYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VGVzdENsYXNzVHk+IGNsYXNzIFJlZ2lzdGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlZ2lz
dGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBJbmpl
Y3RlZEJ1bmRsZUNvbnRyb2xsZXI6OnNoYXJlZCgpLnJlZ2lzdGVyQ3JlYXRlSW5qZWN0ZWRCdW5k
bGVUZXN0RnVuY3Rpb24odGVzdCwgUmVnaXN0ZXI6OmNyZWF0ZSk7CisgICAgICAgIH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIHN0YXRpYyBJbmplY3RlZEJ1bmRsZVRlc3QqIGNyZWF0ZShjb25z
dCBzdGQ6OnN0cmluZyYgaWRlbnRpZmllcikgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgVGVzdENsYXNzVHkoaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworCitwcm90
ZWN0ZWQ6CisgICAgSW5qZWN0ZWRCdW5kbGVUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBpZGVudGlm
aWVyKQorICAgICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQorICAgIHsKKyAgICB9CisK
KyAgICBzdGQ6OnN0cmluZyBtX2lkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBJbmplY3RlZEJ1bmRsZVRlc3RfaApJbmRleDogV2ViS2l0
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVV0aWxpdGllcy5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJLaXRUb29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtVXRpbGl0aWVzLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJQbGF0
Zm9ybVV0aWxpdGllcy5oIgorCisjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgorI2lu
Y2x1ZGUgPFdlYktpdDIvV2ViS2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkgeworbmFtZXNwYWNlIFV0aWwgeworCitXS0NvbnRleHRSZWYgY3JlYXRlQ29udGV4dEZvcklu
amVjdGVkQnVuZGxlVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgdGVzdE5hbWUpCit7CisgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGluamVjdGVkQnVuZGxlUGF0aChBZG9wdFdLLCBjcmVhdGVJ
bmplY3RlZEJ1bmRsZVBhdGgoKSk7CisgICAgV0tDb250ZXh0UmVmIGNvbnRleHQgPSBXS0NvbnRl
eHRDcmVhdGVXaXRoSW5qZWN0ZWRCdW5kbGVQYXRoKGluamVjdGVkQnVuZGxlUGF0aC5nZXQoKSk7
CisgICAgCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ss
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdW5kbGVUZXN0SW5zdGFudGlhdG9yIikp
OworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh0ZXN0TmFtZS5jX3N0cigpKSk7CisKKyAgICAvLyBF
bnF1ZXVlIG1lc3NhZ2UgdG8gaW5zdGFudGlhdGUgdGhlIGJ1bmRsZSB0ZXN0LiAKKyAgICBXS0Nv
bnRleHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoY29udGV4dCwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICAKKyAgICByZXR1cm4gY29udGV4dDsKK30KKwor
c3RkOjpzdHJpbmcgdG9TVEQoV0tTdHJpbmdSZWYgc3RyaW5nKQoreworICAgIHNpemVfdCBidWZm
ZXJTaXplID0gV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHN0cmluZyk7CisgICAg
T3duQXJyYXlQdHI8Y2hhcj4gYnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltidWZmZXJT
aXplXSk7CisgICAgc2l6ZV90IHN0cmluZ0xlbmd0aCA9IFdLU3RyaW5nR2V0VVRGOENTdHJpbmco
c3RyaW5nLCBidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOworICAgIHJldHVybiBzdGQ6OnN0cmlu
ZyhidWZmZXIuZ2V0KCksIHN0cmluZ0xlbmd0aCAtIDEpOworfQorCit9IC8vIG5hbWVzcGFjZSBV
dGlsCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBXZWJLaXRUb29scy9UZXN0
V2ViS2l0QVBJL1BsYXRmb3JtVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
VGVzdFdlYktpdEFQSS9QbGF0Zm9ybVV0aWxpdGllcy5oCShyZXZpc2lvbiA3MDE4NSkKKysrIFdl
YktpdFRvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1VdGlsaXRpZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMTAgKzI2LDggQEAKICNpZm5kZWYgUGxhdGZvcm1VdGlsaXRpZXNfaAogI2RlZmlu
ZSBQbGF0Zm9ybVV0aWxpdGllc19oCiAKLSNpbmNsdWRlIDxXZWJLaXQyL1dLU3RyaW5nLmg+Cisj
aW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CiAjaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUg
PHd0Zi9Pd25BcnJheVB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KIAog
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogbmFtZXNwYWNlIFV0aWwgewpAQCAtMzcsMTggKzM1
LDE1IEBAIG5hbWVzcGFjZSBVdGlsIHsKIC8vIFJ1bnMgYSBwbGF0Zm9ybSBydW5sb29wIHVudGls
IHRoZSAnZG9uZScgaXMgdHJ1ZS4gCiB2b2lkIHJ1bihib29sKiBkb25lKTsKIAorV0tDb250ZXh0
UmVmIGNyZWF0ZUNvbnRleHRGb3JJbmplY3RlZEJ1bmRsZVRlc3QoY29uc3Qgc3RkOjpzdHJpbmcm
KTsKKworV0tTdHJpbmdSZWYgY3JlYXRlSW5qZWN0ZWRCdW5kbGVQYXRoKCk7CiBXS1VSTFJlZiBj
cmVhdGVVUkxGb3JSZXNvdXJjZShjb25zdCBjaGFyKiByZXNvdXJjZSwgY29uc3QgY2hhciogZXh0
ZW5zaW9uKTsKIFdLVVJMUmVmIFVSTEZvck5vbkV4aXN0ZW50UmVzb3VyY2UoKTsKIAogYm9vbCBp
c0tleURvd24oV0tOYXRpdmVFdmVudFB0cik7CiAKLWlubGluZSBzdGQ6OnN0cmluZyB0b1NURChX
S1N0cmluZ1JlZiBzdHJpbmcpCi17Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBXS1N0cmluZ0dl
dE1heGltdW1VVEY4Q1N0cmluZ1NpemUoc3RyaW5nKTsKLSAgICBPd25BcnJheVB0cjxjaGFyPiBi
dWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW2J1ZmZlclNpemVdKTsKLSAgICBzaXplX3Qg
c3RyaW5nTGVuZ3RoID0gV0tTdHJpbmdHZXRVVEY4Q1N0cmluZyhzdHJpbmcsIGJ1ZmZlci5nZXQo
KSwgYnVmZmVyU2l6ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6c3RyaW5nKGJ1ZmZlci5nZXQoKSwgc3Ry
aW5nTGVuZ3RoIC0gMSk7Ci19CitzdGQ6OnN0cmluZyB0b1NURChXS1N0cmluZ1JlZiBzdHJpbmcp
OwogCiB9IC8vIG5hbWVzcGFjZSBVdGlsCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCklu
ZGV4OiBXZWJLaXRUb29scy9UZXN0V2ViS2l0QVBJL0NvbmZpZ3VyYXRpb25zL0luamVjdGVkQnVu
ZGxlLnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ29u
ZmlndXJhdGlvbnMvSW5qZWN0ZWRCdW5kbGUueGNjb25maWcJKHJldmlzaW9uIDApCisrKyBXZWJL
aXRUb29scy9UZXN0V2ViS2l0QVBJL0NvbmZpZ3VyYXRpb25zL0luamVjdGVkQnVuZGxlLnhjY29u
ZmlnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisvLyBhcmUgbWV0OgorLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisvLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8KKy8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorLy8gRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKy8vIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKy8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorLy8gRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
Ly8gUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisvLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisvLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisKK1BST0RVQ1RfTkFNRSA9IEluamVjdGVkQnVuZGxlCkluZGV4OiBXZWJL
aXRUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzAxODUpCisrKyBXZWJLaXRU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTIsNiArMTIsMTYgQEAKIAkJQkMxMzE4ODUxMTcxMTRCNjAw
QjY5NzI3IC8qIFBsYXRmb3JtVXRpbGl0aWVzTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxMzE4ODQxMTcxMTRCNjAwQjY5NzI3IC8qIFBsYXRm
b3JtVXRpbGl0aWVzTWFjLm1tICovOyB9OwogCQlCQzEzMUE5QjExNzEzMTY5MDBCNjk3MjcgLyog
bWFpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
MTMxQTlBMTE3MTMxNjkwMEI2OTcyNyAvKiBtYWluLm1tICovOyB9OwogCQlCQzEzMUFBOTExNzEz
MUZDMDBCNjk3MjcgLyogVGVzdHNDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTMxQUE4MTE3MTMxRkMwMEI2OTcyNyAvKiBUZXN0
c0NvbnRyb2xsZXIuY3BwICovOyB9OworCQlCQzU3NUE5MDEyNkU3NEQzMDA2RjBGMTIgLyogQ29j
b2EuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNCOUU5RjAxMTIzNUJERTAwQTEzN0UwIC8qIENvY29hLmZyYW1ld29yayAqLzsgfTsK
KwkJQkM1NzVBOTExMjZFNzREMzAwNkYwRjEyIC8qIFdlYktpdDIuZnJhbWV3b3JrIGluIEZyYW1l
d29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBNjFEQjQxMTcwMEVG
RDAwNDYwRDFFIC8qIFdlYktpdDIuZnJhbWV3b3JrICovOyB9OworCQlCQzU3NUE5MjEyNkU3NEQz
MDA2RjBGMTIgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5MDk2NEQxMjU1NjIwQzAwMDgzNzU2IC8q
IEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKKwkJQkM1NzVBOTcxMjZFNzRGMTAwNkYw
RjEyIC8qIEluamVjdGVkQnVuZGxlTWFpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU3NTk0NjEyNkU3MzUxMDA2RjBGMTIgLyogSW5qZWN0ZWRC
dW5kbGVNYWluLmNwcCAqLzsgfTsKKwkJQkM1NzVBQTIxMjZFNzY2MDAwNkYwRjEyIC8qIEluamVj
dGVkQnVuZGxlQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzU3NUFBMDEyNkU3NjU3MDA2RjBGMTIgLyogSW5qZWN0ZWRCdW5kbGVD
b250cm9sbGVyLmNwcCAqLzsgfTsKKwkJQkM1NzVBQUQxMjZFODNCOTAwNkYwRjEyIC8qIEluamVj
dGVkQnVuZGxlQmFzaWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkM1NzVBQUMxMjZFODNCOTAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlQmFzaWMu
Y3BwICovOyB9OworCQlCQzU3NUFCMDEyNkU4M0M4MDA2RjBGMTIgLyogSW5qZWN0ZWRCdW5kbGVC
YXNpY19CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkM1NzVBQUYxMjZFODNDODAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlQmFzaWNfQnVu
ZGxlLmNwcCAqLzsgfTsKKwkJQkM1NzVCQzAxMjZGNTc1MjAwNkYwRjEyIC8qIFBsYXRmb3JtVXRp
bGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDNTc1QkJGMTI2RjU3NTIwMDZGMEYxMiAvKiBQbGF0Zm9ybVV0aWxpdGllcy5jcHAgKi87IH07
CisJCUJDNTc1QkQ5MTI2RjU4RTIwMDZGMEYxMiAvKiBQbGF0Zm9ybVV0aWxpdGllcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU3NUJCRjEyNkY1
NzUyMDA2RjBGMTIgLyogUGxhdGZvcm1VdGlsaXRpZXMuY3BwICovOyB9OworCQlCQzU3NUJFMDEy
NkY1OTBEMDA2RjBGMTIgLyogUGxhdGZvcm1VdGlsaXRpZXNNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzEzMTg4NDExNzExNEI2MDBCNjk3Mjcg
LyogUGxhdGZvcm1VdGlsaXRpZXNNYWMubW0gKi87IH07CiAJCUJDOTA5NTVEMTI1NTQ4QUEwMDA4
Mzc1NiAvKiBQbGF0Zm9ybVdlYlZpZXdNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzkwOTU1QzEyNTU0OEFBMDAwODM3NTYgLyogUGxhdGZvcm1X
ZWJWaWV3TWFjLm1tICovOyB9OwogCQlCQzkwOTY0QzEyNTU2MUJGMDAwODM3NTYgLyogVmVjdG9y
QmFzaWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkM5MDk2NEIxMjU1NjFCRjAwMDgzNzU2IC8qIFZlY3RvckJhc2ljLmNwcCAqLzsgfTsKIAkJQkM5
MDk2NEUxMjU1NjIwQzAwMDgzNzU2IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOTA5NjREMTI1NTYy
MEMwMDA4Mzc1NiAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CkBAIC0zMCw2ICs0
MCwxNiBAQAogCQlDMDJCNzg1NDEyNjYxM0FFMDAyNkJGMEYgLyogQ2FyYm9uLmZyYW1ld29yayBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwMkI3ODUz
MTI2NjEzQUUwMDI2QkYwRiAvKiBDYXJib24uZnJhbWV3b3JrICovOyB9OwogLyogRW5kIFBCWEJ1
aWxkRmlsZSBzZWN0aW9uICovCiAKKy8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0
aW9uICovCisJCUJDNTc1QTk1MTI2RTc0RTcwMDZGMEYxMiAvKiBQQlhDb250YWluZXJJdGVtUHJv
eHkgKi8gPSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQ
b3J0YWwgPSAwOEZCNzc5M0ZFODQxNTVEQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CisJ
CQlwcm94eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSBCQzU3NTk3RjEyNkU3
NEFGMDA2RjBGMTIgLyogSW5qZWN0ZWRCdW5kbGUgKi87CisJCQlyZW1vdGVJbmZvID0gSW5qZWN0
ZWRCdW5kbGU7CisJCX07CisvKiBFbmQgUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8K
KwogLyogQmVnaW4gUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAJCThERDc2RjlF
MDQ4NkFBNzYwMEQ5NkI1RSAvKiBDb3B5RmlsZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb3B5Rmls
ZXNCdWlsZFBoYXNlOwpAQCAtNjUsNiArODUsMTYgQEAKIAkJQkMxMzFBOUExMTcxMzE2OTAwQjY5
NzI3IC8qIG1haW4ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBt
YWluLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzEzMUE5RTExNzEzMTdDMDBC
Njk3MjcgLyogVGVzdFdlYktpdEFQSVByZWZpeC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZXN0V2ViS2l0QVBJUHJlZml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDMTMxQUE4MTE3MTMxRkMwMEI2OTcyNyAvKiBUZXN0c0NvbnRyb2xsZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBUZXN0c0NvbnRyb2xsZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzU3NTk0NjEyNkU3MzUxMDA2RjBGMTIgLyogSW5q
ZWN0ZWRCdW5kbGVNYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEluamVjdGVkQnVuZGxlTWFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJD
NTc1OTgwMTI2RTc0QUYwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRsZS5idW5kbGUgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHdyYXBwZXIuY2ZidW5kbGU7
IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IEluamVjdGVkQnVuZGxlLmJ1bmRsZTsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJQkM1NzU5ODExMjZFNzRBRjAwNkYwRjEy
IC8qIEluamVjdGVkQnVuZGxlLUluZm8ucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDsgcGF0aCA9ICJJbmplY3RlZEJ1
bmRsZS1JbmZvLnBsaXN0Ijsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM1NzVBOUUx
MjZFNzVGQjAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlVGVzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZVRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQkM1NzVBOUYxMjZFNzY1NzAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlQ29u
dHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRs
ZUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM1NzVBQTAxMjZF
NzY1NzAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzU3NUFBQzEyNkU4M0I5MDA2RjBGMTIgLyog
SW5qZWN0ZWRCdW5kbGVCYXNpYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbmplY3RlZEJ1bmRsZUJhc2ljLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQkM1NzVBQUYxMjZFODNDODAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlQmFzaWNfQnVuZGxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxl
QmFzaWNfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM1NzVBRTIx
MjZFODhCMTAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlLnhjY29uZmlnICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC54Y2NvbmZpZzsgcGF0aCA9IEluamVjdGVkQnVuZGxlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCQzU3NUJCRjEyNkY1NzUyMDA2RjBGMTIgLyogUGxhdGZvcm1VdGls
aXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZvcm1V
dGlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzkwOTUxQjEyNTUz
M0Q3MDAwODM3NTYgLyogUGxhdGZvcm1XZWJWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBsYXRmb3JtV2ViVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzkwOTU1QzEyNTU0OEFBMDAwODM3NTYgLyogUGxhdGZvcm1XZWJWaWV3TWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxhdGZvcm1XZWJWaWV3TWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzkwOTU3RTEyNTU0Q0Y5MDAwODM3NTYg
LyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNlLnhj
Y29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAxLDYgKzEzMSwxNiBAQAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9Owor
CQlCQzU3NTk3RTEyNkU3NEFGMDA2RjBGMTIgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9
IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0
NzsKKwkJCWZpbGVzID0gKAorCQkJCUJDNTc1QTkwMTI2RTc0RDMwMDZGMEYxMiAvKiBDb2NvYS5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQlCQzU3NUE5MTEyNkU3NEQzMDA2RjBGMTIg
LyogV2ViS2l0Mi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQlCQzU3NUE5MjEyNkU3
NEQzMDA2RjBGMTIgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8s
CisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07
CiAvKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQ
QlhHcm91cCBzZWN0aW9uICovCkBAIC0xMTIsNiArMTUyLDcgQEAKIAkJCQlCQzkwOTU3RDEyNTU0
Q0VBMDAwODM3NTYgLyogQ29uZmlndXJhdGlvbnMgKi8sCiAJCQkJMDhGQjc3OURGRTg0MTU1REMw
MkFBQzA3IC8qIEV4dGVybmFsIEZyYW1ld29ya3MgYW5kIExpYnJhcmllcyAqLywKIAkJCQkxQUI2
NzRBREZFOUQ1NEI1MTFDQTJDQkIgLyogUHJvZHVjdHMgKi8sCisJCQkJQkM1NzU5ODExMjZFNzRB
RjAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlLUluZm8ucGxpc3QgKi8sCiAJCQkpOwogCQkJbmFt
ZSA9IFRlc3RXZWJLaXRBUEk7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTIwLDcg
KzE2MSw5IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUJDQTYx
QzNBMTE3MDBCOTQwMDQ2MEQxRSAvKiBtYWMgKi8sCisJCQkJQkM1NzU5NDQxMjZFNzMzQzAwNkYw
RjEyIC8qIEluamVjdGVkQnVuZGxlICovLAogCQkJCUJDMTMxQTlFMTE3MTMxN0MwMEI2OTcyNyAv
KiBUZXN0V2ViS2l0QVBJUHJlZml4LmggKi8sCisJCQkJQkM1NzVCQkYxMjZGNTc1MjAwNkYwRjEy
IC8qIFBsYXRmb3JtVXRpbGl0aWVzLmNwcCAqLywKIAkJCQlCQzEzMTg4MzExNzExNEE4MDBCNjk3
MjcgLyogUGxhdGZvcm1VdGlsaXRpZXMuaCAqLywKIAkJCQlCQzkwOTUxQjEyNTUzM0Q3MDAwODM3
NTYgLyogUGxhdGZvcm1XZWJWaWV3LmggKi8sCiAJCQkJQkNCOUU3RkExMTIzNTlBMzAwQTEzN0Uw
IC8qIFRlc3QuaCAqLywKQEAgLTE0NSwxNSArMTg4LDI4IEBACiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAogCQkJCThERDc2RkExMDQ4NkFBNzYwMEQ5NkI1RSAvKiBUZXN0V2Vi
S2l0QVBJICovLAorCQkJCUJDNTc1OTgwMTI2RTc0QUYwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRs
ZS5idW5kbGUgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQkM1NzU5NDQxMjZFNzMzQzAwNkYwRjEyIC8qIEluamVjdGVk
QnVuZGxlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlC
QzU3NTk0NjEyNkU3MzUxMDA2RjBGMTIgLyogSW5qZWN0ZWRCdW5kbGVNYWluLmNwcCAqLywKKwkJ
CQlCQzU3NUE5RTEyNkU3NUZCMDA2RjBGMTIgLyogSW5qZWN0ZWRCdW5kbGVUZXN0LmggKi8sCisJ
CQkJQkM1NzVBOUYxMjZFNzY1NzAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlQ29udHJvbGxlci5o
ICovLAorCQkJCUJDNTc1QUEwMTI2RTc2NTcwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRsZUNvbnRy
b2xsZXIuY3BwICovLAorCQkJKTsKKwkJCW5hbWUgPSBJbmplY3RlZEJ1bmRsZTsKKwkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUJDOTA5NTdEMTI1NTRDRUEwMDA4Mzc1NiAvKiBD
b25maWd1cmF0aW9ucyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CiAJCQkJQkM5MDk1N0UxMjU1NENGOTAwMDgzNzU2IC8qIEJhc2UueGNjb25maWcgKi8sCiAJCQkJ
QkM5MDk1N0YxMjU1NENGOTAwMDgzNzU2IC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLywKKwkJ
CQlCQzU3NUFFMjEyNkU4OEIxMDA2RjBGMTIgLyogSW5qZWN0ZWRCdW5kbGUueGNjb25maWcgKi8s
CiAJCQkJQkM5MDk1ODAxMjU1NENGOTAwMDgzNzU2IC8qIFRlc3RXZWJLaXRBUEkueGNjb25maWcg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IENvbmZpZ3VyYXRpb25zOwpAQCAtMTcxLDYgKzIyNyw4IEBA
CiAJCQkJQkM5MDk5NUQxMjU2N0JDMTAwMDgzNzU2IC8qIFdLU3RyaW5nLmNwcCAqLywKIAkJCQlC
QzkwOTk5MzEyNTZBQ0YxMDAwODM3NTYgLyogV0tTdHJpbmdKU1N0cmluZy5jcHAgKi8sCiAJCQkJ
QkNDOEI5NUExMjYxMUY0NzAwREU0NkE0IC8qIEZhaWxlZExvYWQuY3BwICovLAorCQkJCUJDNTc1
QUFDMTI2RTgzQjkwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRsZUJhc2ljLmNwcCAqLywKKwkJCQlC
QzU3NUFBRjEyNkU4M0M4MDA2RjBGMTIgLyogSW5qZWN0ZWRCdW5kbGVCYXNpY19CdW5kbGUuY3Bw
ICovLAogCQkJKTsKIAkJCXBhdGggPSBXZWJLaXQyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKQEAgLTIyOCw2ICsyODYsNyBAQAogCQkJYnVpbGRSdWxlcyA9ICgKIAkJCSk7CiAJCQlkZXBl
bmRlbmNpZXMgPSAoCisJCQkJQkM1NzVBOTYxMjZFNzRFNzAwNkYwRjEyIC8qIFBCWFRhcmdldERl
cGVuZGVuY3kgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFRlc3RXZWJLaXRBUEk7CiAJCQlwcm9kdWN0
SW5zdGFsbFBhdGggPSAiJChIT01FKS9iaW4iOwpAQCAtMjM1LDYgKzI5NCwyMyBAQAogCQkJcHJv
ZHVjdFJlZmVyZW5jZSA9IDhERDc2RkExMDQ4NkFBNzYwMEQ5NkI1RSAvKiBUZXN0V2ViS2l0QVBJ
ICovOwogCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsKIAkJ
fTsKKwkJQkM1NzU5N0YxMjZFNzRBRjAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlICovID0gewor
CQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEJD
NTc1OTg2MTI2RTc0QUYwMDZGMEYxMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAiSW5qZWN0ZWRCdW5kbGUiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJ
CQkJQkM1NzU5N0MxMjZFNzRBRjAwNkYwRjEyIC8qIFJlc291cmNlcyAqLywKKwkJCQlCQzU3NTk3
RDEyNkU3NEFGMDA2RjBGMTIgLyogU291cmNlcyAqLywKKwkJCQlCQzU3NTk3RTEyNkU3NEFGMDA2
RjBGMTIgLyogRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVzID0gKAorCQkJKTsK
KwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCSk7CisJCQluYW1lID0gSW5qZWN0ZWRCdW5kbGU7CisJ
CQlwcm9kdWN0TmFtZSA9IEluamVjdGVkQnVuZGxlOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IEJD
NTc1OTgwMTI2RTc0QUYwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRsZS5idW5kbGUgKi87CisJCQlw
cm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmJ1bmRsZSI7CisJCX07CiAvKiBF
bmQgUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYUHJvamVjdCBzZWN0
aW9uICovCkBAIC0yNTUsMTAgKzMzMSwyMSBAQAogCQkJcHJvamVjdFJvb3QgPSAiIjsKIAkJCXRh
cmdldHMgPSAoCiAJCQkJOERENzZGOTYwNDg2QUE3NjAwRDk2QjVFIC8qIFRlc3RXZWJLaXRBUEkg
Ki8sCisJCQkJQkM1NzU5N0YxMjZFNzRBRjAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlICovLAog
CQkJKTsKIAkJfTsKIC8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KIAorLyogQmVnaW4gUEJY
UmVzb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUJDNTc1OTdDMTI2RTc0QUYwMDZGMEYx
MiAvKiBSZXNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlOwor
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBC
WFJlc291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCiAvKiBCZWdpbiBQQlhTb3VyY2VzQnVp
bGRQaGFzZSBzZWN0aW9uICovCiAJCThERDc2Rjk5MDQ4NkFBNzYwMEQ5NkI1RSAvKiBTb3VyY2Vz
ICovID0gewogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CkBAIC0yNzcsMTEgKzM2NCwz
MyBAQAogCQkJCTFBMDJDODRGMTI1RDRBODQwMEUzRjRCRCAvKiBGaW5kLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDQzhCOTVCMTI2MTFGNDcwMERFNDZBNCAvKiBGYWlsZWRMb2FkLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUMwMkI3N0YyMTI2NjEyMTQwMDI2QkYwRiAvKiBTcGFjZWJhclNjcm9s
bGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzU3NUFBRDEyNkU4M0I5MDA2RjBGMTIgLyog
SW5qZWN0ZWRCdW5kbGVCYXNpYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzU3NUJDMDEyNkY1
NzUyMDA2RjBGMTIgLyogUGxhdGZvcm1VdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkp
OworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCUJD
NTc1OTdEMTI2RTc0QUYwMDZGMEYxMiAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291
cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmls
ZXMgPSAoCisJCQkJQkM1NzVBOTcxMjZFNzRGMTAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlTWFp
bi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzU3NUFBMjEyNkU3NjYwMDA2RjBGMTIgLyogSW5q
ZWN0ZWRCdW5kbGVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJDNTc1QUIwMTI2
RTgzQzgwMDZGMEYxMiAvKiBJbmplY3RlZEJ1bmRsZUJhc2ljX0J1bmRsZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlCQzU3NUJEOTEyNkY1OEUyMDA2RjBGMTIgLyogUGxhdGZvcm1VdGlsaXRpZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkM1NzVCRTAxMjZGNTkwRDAwNkYwRjEyIC8qIFBsYXRm
b3JtVXRpbGl0aWVzTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CiAvKiBFbmQgUEJYU291cmNlc0J1aWxk
UGhhc2Ugc2VjdGlvbiAqLwogCisvKiBCZWdpbiBQQlhUYXJnZXREZXBlbmRlbmN5IHNlY3Rpb24g
Ki8KKwkJQkM1NzVBOTYxMjZFNzRFNzAwNkYwRjEyIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8g
PSB7CisJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0gQkM1NzU5N0Yx
MjZFNzRBRjAwNkYwRjEyIC8qIEluamVjdGVkQnVuZGxlICovOworCQkJdGFyZ2V0UHJveHkgPSBC
QzU3NUE5NTEyNkU3NEU3MDA2RjBGMTIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOworCQl9
OworLyogRW5kIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAqLworCiAvKiBCZWdpbiBYQ0J1
aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCiAJCTFERUI5Mjc1MDg3MzNERDQwMDEwRTlDRCAv
KiBEZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwpAQCAtMzE0LDYg
KzQyMywyMCBAQAogCQkJfTsKIAkJCW5hbWUgPSBSZWxlYXNlOwogCQl9OworCQlCQzU3NTk4NDEy
NkU3NEFGMDA2RjBGMTIgLyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJh
dGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkM1NzVBRTIxMjZFODhCMTAw
NkYwRjEyIC8qIEluamVjdGVkQnVuZGxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9
IHsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCUJDNTc1OTg1MTI2RTc0QUYwMDZG
MEYxMiAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJ
CQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDNTc1QUUyMTI2RTg4QjEwMDZGMEYxMiAv
KiBJbmplY3RlZEJ1bmRsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQl9
OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CiAvKiBFbmQgWENCdWlsZENvbmZpZ3VyYXRpb24g
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KQEAg
LTMzNSw2ICs0NTgsMTUgQEAKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsK
IAkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CiAJCX07CisJCUJDNTc1OTg2
MTI2RTc0QUYwMDZGMEYxMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2
ZVRhcmdldCAiSW5qZWN0ZWRCdW5kbGUiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9u
TGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJQkM1NzU5ODQxMjZFNzRBRjAw
NkYwRjEyIC8qIERlYnVnICovLAorCQkJCUJDNTc1OTg1MTI2RTc0QUYwMDZGMEYxMiAvKiBSZWxl
YXNlICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJ
CWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CisJCX07CiAvKiBFbmQgWENDb25m
aWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCiAJfTsKIAlyb290T2JqZWN0ID0gMDhGQjc3OTNGRTg0
MTU1REMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOwpJbmRleDogV2ViS2l0VG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0luamVjdGVkQnVuZGxlQmFzaWMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9JbmplY3RlZEJ1
bmRsZUJhc2ljLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mi9JbmplY3RlZEJ1bmRsZUJhc2ljLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJUZXN0LmgiCisKKyNpbmNsdWRlICJQ
bGF0Zm9ybVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgorI2luY2x1
ZGUgPFdlYktpdDIvV2ViS2l0Mi5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4K
KworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitzdGF0aWMgYm9vbCBkb25lOworc3RhdGlj
IGJvb2wgbG9hZERvbmU7CitzdGF0aWMgYm9vbCBtZXNzYWdlUmVjZWl2ZWQ7CisKK3ZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdL
U3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHksIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCit7CisgICAgbWVzc2FnZVJlY2VpdmVkID0gdHJ1ZTsKKyAgICBpZiAobG9h
ZERvbmUpCisgICAgICAgIGRvbmUgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBkaWRGaW5pc2hM
b2FkRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJlZiB1
c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBsb2FkRG9uZSA9IHRydWU7
CisgICAgaWYgKG1lc3NhZ2VSZWNlaXZlZCkKKyAgICAgICAgZG9uZSA9IHRydWU7Cit9CisKK1RF
U1QoV2ViS2l0MiwgSW5qZWN0ZWRCdW5kbGVCYXNpYykKK3sKKyAgICBXS1JldGFpblB0cjxXS0Nv
bnRleHRSZWY+IGNvbnRleHQoQWRvcHRXSywgVXRpbDo6Y3JlYXRlQ29udGV4dEZvckluamVjdGVk
QnVuZGxlVGVzdCgiSW5qZWN0ZWRCdW5kbGVCYXNpY1Rlc3QiKSk7CisgICAgV0tSZXRhaW5QdHI8
V0tQYWdlTmFtZXNwYWNlUmVmPiBwYWdlTmFtZXNwYWNlKEFkb3B0V0ssIFdLUGFnZU5hbWVzcGFj
ZUNyZWF0ZShjb250ZXh0LmdldCgpKSk7CisKKyAgICBXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNs
aWVudCBpbmplY3RlZEJ1bmRsZUNsaWVudDsKKyAgICBtZW1zZXQoJmluamVjdGVkQnVuZGxlQ2xp
ZW50LCAwLCBzaXplb2YoaW5qZWN0ZWRCdW5kbGVDbGllbnQpKTsKKyAgICBpbmplY3RlZEJ1bmRs
ZUNsaWVudC52ZXJzaW9uID0gMDsKKyAgICBpbmplY3RlZEJ1bmRsZUNsaWVudC5jbGllbnRJbmZv
ID0gMDsKKyAgICBpbmplY3RlZEJ1bmRsZUNsaWVudC5kaWRSZWNlaXZlTWVzc2FnZUZyb21Jbmpl
Y3RlZEJ1bmRsZSA9IGRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlOworICAgIFdL
Q29udGV4dFNldEluamVjdGVkQnVuZGxlQ2xpZW50KGNvbnRleHQuZ2V0KCksICZpbmplY3RlZEJ1
bmRsZUNsaWVudCk7CisgCisgICAgUGxhdGZvcm1XZWJWaWV3IHdlYlZpZXcocGFnZU5hbWVzcGFj
ZS5nZXQoKSk7CisKKyAgICBXS1BhZ2VMb2FkZXJDbGllbnQgbG9hZGVyQ2xpZW50OworICAgIG1l
bXNldCgmbG9hZGVyQ2xpZW50LCAwLCBzaXplb2YobG9hZGVyQ2xpZW50KSk7CisgICAgbG9hZGVy
Q2xpZW50LnZlcnNpb24gPSAwOworICAgIGxvYWRlckNsaWVudC5jbGllbnRJbmZvID0gMDsKKyAg
ICBsb2FkZXJDbGllbnQuZGlkRmluaXNoTG9hZEZvckZyYW1lID0gZGlkRmluaXNoTG9hZEZvckZy
YW1lOworICAgIFdLUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQod2ViVmlldy5wYWdlKCksICZsb2Fk
ZXJDbGllbnQpOworCisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybChBZG9wdFdLLCBVdGls
OjpjcmVhdGVVUkxGb3JSZXNvdXJjZSgic2ltcGxlIiwgImh0bWwiKSk7CisgICAgV0tQYWdlTG9h
ZFVSTCh3ZWJWaWV3LnBhZ2UoKSwgdXJsLmdldCgpKTsKKworICAgIFV0aWw6OnJ1bigmZG9uZSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKSW5kZXg6IFdlYktpdFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9JbmplY3RlZEJ1bmRsZUJhc2ljX0J1bmRsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0lu
amVjdGVkQnVuZGxlQmFzaWNfQnVuZGxlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9JbmplY3RlZEJ1bmRsZUJhc2ljX0J1bmRsZS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
SW5qZWN0ZWRCdW5kbGVUZXN0LmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CisjaW5j
bHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7
CisKK2NsYXNzIEluamVjdGVkQnVuZGxlQmFzaWNUZXN0IDogcHVibGljIEluamVjdGVkQnVuZGxl
VGVzdCB7CitwdWJsaWM6CisgICAgSW5qZWN0ZWRCdW5kbGVCYXNpY1Rlc3QoY29uc3Qgc3RkOjpz
dHJpbmcmIGlkZW50aWZpZXIpCisgICAgICAgIDogSW5qZWN0ZWRCdW5kbGVUZXN0KGlkZW50aWZp
ZXIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVQYWdlKFdLQnVu
ZGxlUmVmIGJ1bmRsZSwgV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCisgICAgeworICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gZG9uZU1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJEb25lTWVzc2FnZU5hbWUiKSk7CisgICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBkb25lTWVzc2FnZUJvZHkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkRvbmVNZXNzYWdlQm9keSIpKTsKKyAgICAgICAgV0tCdW5kbGVQb3N0
TWVzc2FnZShidW5kbGUsIGRvbmVNZXNzYWdlTmFtZS5nZXQoKSwgZG9uZU1lc3NhZ2VCb2R5Lmdl
dCgpKTsKKyAgICB9Cit9OworCitzdGF0aWMgSW5qZWN0ZWRCdW5kbGVUZXN0OjpSZWdpc3RlcjxJ
bmplY3RlZEJ1bmRsZUJhc2ljVGVzdD4gaW5qZWN0ZWRCdW5kbGVCYXNpY1Rlc3RSZWdpc3RyYXIo
IkluamVjdGVkQnVuZGxlQmFzaWNUZXN0Iik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBXZWJLaXRUb29scy9UZXN0V2Vi
S2l0QVBJL21hYy9QbGF0Zm9ybVV0aWxpdGllc01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9UZXN0V2ViS2l0QVBJL21hYy9QbGF0Zm9ybVV0aWxpdGllc01hYy5tbQkocmV2aXNpb24g
NzAxODUpCisrKyBXZWJLaXRUb29scy9UZXN0V2ViS2l0QVBJL21hYy9QbGF0Zm9ybVV0aWxpdGll
c01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTAgQEAKIAogI2luY2x1ZGUgIlBs
YXRmb3JtVXRpbGl0aWVzLmgiCiAKKyNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CiAj
aW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmluZ0NGLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1VSTENG
Lmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJIHsKIG5hbWVzcGFjZSBVdGlsIHsKQEAgLTM3LDE1ICszOSwyMSBAQCB2b2lkIHJ1bihib29s
KiBkb25lKQogICAgICAgICBbW05TUnVuTG9vcCBjdXJyZW50UnVuTG9vcF0gcnVuTW9kZTpOU0Rl
ZmF1bHRSdW5Mb29wTW9kZSBiZWZvcmVEYXRlOltOU0RhdGUgZGlzdGFudEZ1dHVyZV1dOwogfQog
CitXS1N0cmluZ1JlZiBjcmVhdGVJbmplY3RlZEJ1bmRsZVBhdGgoKQoreworICAgIE5TU3RyaW5n
ICpuc1N0cmluZyA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZVBhdGhdIHN0cmluZ0J5
QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkluamVjdGVkQnVuZGxlLmJ1bmRsZSJdOworICAgIHJl
dHVybiBXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpbnNTdHJpbmcpOwor
fQorCiBXS1VSTFJlZiBjcmVhdGVVUkxGb3JSZXNvdXJjZShjb25zdCBjaGFyKiByZXNvdXJjZSwg
Y29uc3QgY2hhciogZXh0ZW5zaW9uKQogewotICAgIE5TVVJMKiBuc1VSTCA9IFtbTlNCdW5kbGUg
bWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5n
OnJlc291cmNlXSB3aXRoRXh0ZW5zaW9uOltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpl
eHRlbnNpb25dXTsKKyAgICBOU1VSTCAqbnNVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVS
TEZvclJlc291cmNlOltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpyZXNvdXJjZV0gd2l0
aEV4dGVuc2lvbjpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6ZXh0ZW5zaW9uXV07CiAg
ICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aENGVVJMKChDRlVSTFJlZiluc1VSTCk7CiB9CiAKIFdL
VVJMUmVmIFVSTEZvck5vbkV4aXN0ZW50UmVzb3VyY2UoKQogewotICAgIE5TVVJMKiBuc1VSTCA9
IFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiZmlsZTovLy9kb2VzLW5vdC1leGlzdC5odG1sIl07Cisg
ICAgTlNVUkwgKm5zVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJmaWxlOi8vL2RvZXMtbm90
LWV4aXN0Lmh0bWwiXTsKICAgICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoQ0ZVUkwoKENGVVJMUmVm
KW5zVVJMKTsKIH0KIApJbmRleDogV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS93aW4vUGxhdGZv
cm1VdGlsaXRpZXNXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Rlc3RXZWJLaXRB
UEkvd2luL1BsYXRmb3JtVXRpbGl0aWVzV2luLmNwcAkocmV2aXNpb24gNzAxODUpCisrKyBXZWJL
aXRUb29scy9UZXN0V2ViS2l0QVBJL3dpbi9QbGF0Zm9ybVV0aWxpdGllc1dpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDEyIEBACiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiBu
YW1lc3BhY2UgVXRpbCB7CiAKKyNpZiAhZGVmaW5lZChOREVCVUcpICYmICghZGVmaW5lZChERUJV
R19JTlRFUk5BTCkgfHwgZGVmaW5lZChERUJVR19BTEwpKQorY29uc3QgY2hhciogaW5qZWN0ZWRC
dW5kbGVETEwgPSAiXFxJbmplY3RlZEJ1bmRsZV9kZWJ1Zy5kbGwiOworI2Vsc2UKK2NvbnN0IGNo
YXIqIGluamVjdGVkQnVuZGxlRExMID0gIlxcSW5qZWN0ZWRCdW5kbGUuZGxsIjsKKyNlbmRpZgor
CiB2b2lkIHJ1bihib29sKiBkb25lKQogewogICAgIHdoaWxlICghKmRvbmUpIHsKQEAgLTQ4LDYg
KzU0LDE2IEBAIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2YoY29uc3QgY2hhciogdXQKICAgICBy
ZXR1cm4gUmV0YWluUHRyPENGU3RyaW5nUmVmPihBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhD
U3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHV0ZjhTdHJpbmcsIGtDRlN0cmluZ0VuY29kaW5n
VVRGOCkpOwogfQogCitXS1N0cmluZ1JlZiBjcmVhdGVJbmplY3RlZEJ1bmRsZVBhdGgoKQorewor
ICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZXhlY3V0YWJsZVVSTChBZG9wdENGLCBDRkJ1bmRsZUNv
cHlFeGVjdXRhYmxlVVJMKENGQnVuZGxlR2V0TWFpbkJ1bmRsZSgpKSk7CisgICAgUmV0YWluUHRy
PENGVVJMUmVmPiBleGVjdXRhYmxlQ29udGFpbmVyVVJMKEFkb3B0Q0YsIENGVVJMQ3JlYXRlQ29w
eURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnQoMCwgZXhlY3V0YWJsZVVSTC5nZXQoKSkpOworICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZXhlY3V0YWJsZUNvbnRhaW5lclBhdGgoQWRvcHRDRiwg
Q0ZVUkxDb3B5RmlsZVN5c3RlbVBhdGgoZXhlY3V0YWJsZUNvbnRhaW5lclVSTC5nZXQoKSwga0NG
VVJMV2luZG93c1BhdGhTdHlsZSkpOworICAgIFJldGFpblB0cjxDRk11dGFibGVTdHJpbmdSZWY+
IGJ1bmRsZVBhdGgoQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVNdXRhYmxlQ29weSgwLCAwLCBleGVj
dXRhYmxlQ29udGFpbmVyUGF0aC5nZXQoKSkpOworICAgIENGU3RyaW5nQXBwZW5kQ1N0cmluZyhi
dW5kbGVQYXRoLmdldCgpLCBpbmplY3RlZEJ1bmRsZURMTCwga0NGU3RyaW5nRW5jb2RpbmdXaW5k
b3dzTGF0aW4xKTsKKyAgICByZXR1cm4gV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoYnVuZGxl
UGF0aC5nZXQoKSk7Cit9CisKIFdLVVJMUmVmIGNyZWF0ZVVSTEZvclJlc291cmNlKGNvbnN0IGNo
YXIqIHJlc291cmNlLCBjb25zdCBjaGFyKiBleHRlbnNpb24pCiB7CiAgICAgUmV0YWluUHRyPENG
VVJMUmVmPiB1cmwoQWRvcHRDRiwgQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoQ0ZCdW5kbGVHZXRN
YWluQnVuZGxlKCksIGNmKHJlc291cmNlKS5nZXQoKSwgY2YoZXh0ZW5zaW9uKS5nZXQoKSwgMCkp
OwpJbmRleDogV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS93aW4vVGVzdFdlYktpdEFQSS52Y3By
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQSS93aW4vVGVzdFdlYktp
dEFQSS52Y3Byb2oJKHJldmlzaW9uIDcwMTg1KQorKysgV2ViS2l0VG9vbHMvVGVzdFdlYktpdEFQ
SS93aW4vVGVzdFdlYktpdEFQSS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ4Myw2ICs0ODMs
MTAgQEAKIAkJCTwvRmlsdGVyPg0KIAkJPC9GaWx0ZXI+DQogCQk8RmlsZQ0KKwkJCVJlbGF0aXZl
UGF0aD0iLi5cUGxhdGZvcm1VdGlsaXRpZXMuY3BwIg0KKwkJCT4NCisJCTwvRmlsZT4NCisJCTxG
aWxlDQogCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0Zm9ybVV0aWxpdGllcy5oIg0KIAkJCT4NCiAJ
CTwvRmlsZT4NCg==
</data>
<flag name="review"
          id="61399"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>