<?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>144833</bug_id>
          
          <creation_ts>2015-05-09 15:50:16 -0700</creation_ts>
          <short_desc>[Content Extensions] Support domain-specific rules and exceptions</short_desc>
          <delta_ts>2015-05-26 14:31:51 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>japhet</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1093452</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-09 15:50:16 -0700</bug_when>
    <thetext>Domain-specific rules are needed.  Someone might want to block something on every page except one page where something looking like something that needs to be blocked actually needs to be let through for the page to function properly.  Someone might also want to block something common-looking that would break many websites but on one specific website it really needs to be blocked.

I added domain-specific whitelists and blacklists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093455</commentid>
    <comment_count>1</comment_count>
      <attachid>252787</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-09 16:03:09 -0700</bug_when>
    <thetext>Created attachment 252787
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093504</commentid>
    <comment_count>2</comment_count>
      <attachid>252805</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-09 23:04:24 -0700</bug_when>
    <thetext>Created attachment 252805
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093778</commentid>
    <comment_count>3</comment_count>
      <attachid>252805</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-11 09:39:16 -0700</bug_when>
    <thetext>Comment on attachment 252805
Patch

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

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:136
&gt; +    prependDot.append(canonicalDotStar);

uncheckedAppend

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:137
&gt; +    prependDot.append(Term(&apos;.&apos;, true));

uncheckedAppend; the boolean here is ugly

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:142
&gt; +        prependDot.append(Term(domain[i], true));

uncheckedAppend; the boolean here is ugly

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:143
&gt; +        prependBeginningOfLine.append(Term(domain[i], true));

uncheckedAppend

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:145
&gt; +    prependDot.append(Term::EndOfLineAssertionTerm);

uncheckedAppend

&gt; Source/WebCore/contentextensions/CombinedURLFilters.cpp:146
&gt; +    prependBeginningOfLine.append(Term::EndOfLineAssertionTerm);

uncheckedAppend

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:59
&gt; +        // FIXME: JSObject::getIndex should be marked as const.

Seems like a strange place for this FIXME.

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:61
&gt; +        if (exec.hadException() || !value || !value.isString())

Do we really need to check !value here? I don’t think getIndex can return that unless it raises an exception.

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:65
&gt; +        String domain = value.toWTFString(&amp;exec);

The code above already checked value.isString, so this should use JSString::value, not JSValue::toWTFString.

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:72
&gt; +        for (unsigned i = 0; i &lt; domain.length(); ++i) {
&gt; +            UChar c = domain.at(i);
&gt; +            if (!isASCII(domain[i]) || isASCIIUpper(c))
&gt; +                return ContentExtensionError::JSONDomainNotLowerCaseASCII;
&gt; +        }

I think this can be done much more efficiently. One obvious mistake here is that this does domain[i] twice and puts one into a local variable. I suggest putting containsOnlyASCIIWithNoUppercase into a helper function rather than having the loop in line in this function.

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:141
&gt; +    if (ifDomain &amp;&amp; !exec.hadException() &amp;&amp; ifDomain.isObject()) {

No need to null check ifDomain; it can’t return null unless there is an exception.

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:142
&gt; +        auto ifDomainError = getDomainList(exec, ifDomain.toObject(&amp;exec), trigger.domains);

Should use asObject rather than toObject since we already checked isObject.

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:152
&gt; +    if (unlessDomain &amp;&amp; !exec.hadException() &amp;&amp; unlessDomain.isObject()) {

No need to null check unlessDomain; it can’t return null unless there is an exception.

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:155
&gt; +        auto unlessDomainError = getDomainList(exec, unlessDomain.toObject(&amp;exec), trigger.domains);

Should use asObject rather than toObject since we already checked isObject.

&gt; Source/WebCore/contentextensions/ContentExtensionRule.h:49
&gt; +    bool ifDomain { false }; // If this is false, that means domains is a list of unless-domains if it is not empty.

The name &quot;if domain&quot; is really confusing. Can we find a way to express this in idiomatic English? Maybe “applies only if domain matches” but I guess that’s not what it means (see the confusion?). Maybe an enum?

&gt; Source/WebCore/contentextensions/ContentExtensionsBackend.cpp:150
&gt;              for (auto actionLocation : universalActions) {

Should be auto&amp;, not auto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093845</commentid>
    <comment_count>4</comment_count>
      <attachid>252805</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-11 12:05:10 -0700</bug_when>
    <thetext>Comment on attachment 252805
Patch

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

Addressed comments.  Uploading patch for landing.

&gt;&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:59
&gt;&gt; +        // FIXME: JSObject::getIndex should be marked as const.
&gt; 
&gt; Seems like a strange place for this FIXME.

I didn&apos;t want to touch JavaScriptCore to make this patch easier to land/merge.  I&apos;ll look into this in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093846</commentid>
    <comment_count>5</comment_count>
      <attachid>252881</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-11 12:06:21 -0700</bug_when>
    <thetext>Created attachment 252881
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093863</commentid>
    <comment_count>6</comment_count>
      <attachid>252881</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-11 12:55:41 -0700</bug_when>
    <thetext>Comment on attachment 252881
Patch

Clearing flags on attachment: 252881

Committed r184116: &lt;http://trac.webkit.org/changeset/184116&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093864</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-11 12:55:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093890</commentid>
    <comment_count>8</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-05-11 14:16:13 -0700</bug_when>
    <thetext>Build fix in r184121</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097451</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-26 14:31:51 -0700</bug_when>
    <thetext>rdar://problem/20822592</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252787</attachid>
            <date>2015-05-09 16:03:09 -0700</date>
            <delta_ts>2015-05-09 23:04:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144833-20150509160148.patch</filename>
            <type>text/plain</type>
            <size>84468</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDA0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE1LTA1LTA5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gU3VwcG9ydCBkb21haW4tc3BlY2lmaWMgcnVsZXMgYW5kIGV4Y2VwdGlvbnMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ4MzMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBo
dHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2RvbWFpbi1ydWxlcy5odG1sCisKKyAgICAgICAg
VGhpcyBwYXRjaCBhZGRzIGlmLWRvbWFpbiBhbmQgdW5sZXNzLWRvbWFpbiB0byB0aGUgdHJpZ2dl
ciBpbiB0aGUgSlNPTiBmb3JtYXQuCisgICAgICAgIGlmLWRvbWFpbiBtYWtlcyB0aGUgcnVsZSBh
cHBseSBvbmx5IHRvIGRvbWFpbnMgaW4gdGhlIGxpc3QuCisgICAgICAgIHVubGVzcy1kb21haW4g
bWFrZXMgdGhlIHJ1bGUgYXBwbHkgdG8gZG9tYWlucyB0aGF0IGFyZSBub3QgaW4gdGhlIGxpc3Qu
CisgICAgICAgIAorICAgICAgICBBbGwgcnVsZXMgd2l0aCBkb21haW5zIGFyZSBjb21waWxlZCBp
bnRvIG9uZSBzZXQgb2YgREZBcy4gIAorICAgICAgICBUaGUgZG9tYWlucyBhcmUgYWxzbyBjb21w
aWxlZCBpbnRvIGFub3RoZXIgc2V0IG9mIERGQXMuCisgICAgICAgIEluIHRoZSBiZXN0IGNhc2Us
IHRoZSBVUkwgd2lsbCBiZSBydW4gdGhyb3VnaCBmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29k
ZSBhbmQgbm90IG1hdGNoIGFueXRoaW5nLgorICAgICAgICBJbiB0aGUgd29yc3QgY2FzZSwgaWYg
dGhlcmUgYXJlIG1hdGNoZXMgdGhlbiB0aGUgdXJsIHdpbGwgYmUgcnVuIHRocm91Z2ggZG9tYWlu
RmlsdGVyc0J5dGVjb2RlCisgICAgICAgIGFuZCBhbnkgbWF0Y2hpbmcgcnVsZXMgd2lsbCBiZSBh
ZGRlZCB0aHJvdWdoIHNldCBvcGVyYXRpb25zLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29tYmluZWRVUkxGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpDb21iaW5lZFVSTEZpbHRlcnM6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6OkNvbWJpbmVkVVJMRmlsdGVyczo6YWRkRG9tYWluKToKKyAgICAg
ICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuaDoKKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Z2xv
YmFsRGlzcGxheU5vbmVTZWxlY3RvcnMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0Nv
bXBpbGVkQ29udGVudEV4dGVuc2lvbi5oOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0Nv
bnRlbnRFeHRlbnNpb25Db21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6c2VyaWFsaXplQWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaDoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OmNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5KToKKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaDoKKyAgICAgICAgKiBjb250ZW50ZXh0
ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpnZXREb21haW5MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpsb2FkVHJpZ2dlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6bG9hZEVuY29kZWRSdWxlcyk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvblJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpUcmlnZ2VyOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6YWN0aW9uc0ZvclJlc291cmNlTG9h
ZCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjppbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRz
KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVy
OjplbWl0QXBwZW5kQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjpj
b21waWxlTm9kZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21w
aWxlci5oOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2Rl
SW50ZXJwcmV0ZXI6OmludGVycHJldEFwcGVuZEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0VGVzdEZs
YWdzQW5kQXBwZW5kQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpERkFCeXRlY29kZUludGVycHJldGVyOjphY3Rpb25zRnJvbURGQVJvb3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVy
cHJldCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRl
ci5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRJbmZvLmg6CisKIDIwMTUtMDUtMDkg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBJbnZhbGlkYXRlIHRo
ZSBGb250Q2FjaGUgb24gV2ViUHJvY2VzcyBzdXNwZW5zaW9uIC8gY3JpdGljYWwgbWVtb3J5IHBy
ZXNzdXJlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVS
TEZpbHRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHAJKHJldmlzaW9uIDE4Mzg4MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNSwxMSArMTE1LDQwIEBAIENvbWJpbmVkVVJMRmlsdGVyczo6fkNvbWJpbmVk
VVJMRmlsdGVycygKIHsKIH0KIAotYm9vbCBDb21iaW5lZFVSTEZpbHRlcnM6OmlzRW1wdHkoKQor
Ym9vbCBDb21iaW5lZFVSTEZpbHRlcnM6OmlzRW1wdHkoKSBjb25zdAogewogICAgIHJldHVybiBt
X3ByZWZpeFRyZWVSb290LT5lZGdlcy5pc0VtcHR5KCk7CiB9CiAKK3ZvaWQgQ29tYmluZWRVUkxG
aWx0ZXJzOjphZGREb21haW4odWludDY0X3QgYWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgZG9tYWlu
KQoreworICAgIC8vIFRoaXMgaXMgbGlrZSBhZGRpbmcgKC58Xilkb21haW4kIGJ5IGFkZGluZyB0
d28gVmVjdG9yPFRlcm0+J3MsCisgICAgLy8gYnV0IGludGVycHJldGluZyBkb21haW4gYXMgYSBz
ZXJpZXMgb2YgY2hhcmFjdGVycywgbm90IGEgcmVndWxhciBleHByZXNzaW9uLgorICAgIC8vIFRo
aXMgd2F5IGEgZG9tYWluIG9mICJ3ZWJraXQub3JnIiB3aWxsIG1hdGNoICJidWdzLndlYmtpdC5v
cmciIGFuZCAid2Via2l0Lm9yZyIuCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBtYXRj
aGluZyBvbmx5IHN1YmRvbWFpbnMgb3Igbm8gc3ViZG9tYWlucy4KKyAgICBWZWN0b3I8VGVybT4g
cHJlcGVuZERvdDsKKyAgICBWZWN0b3I8VGVybT4gcHJlcGVuZEJlZ2lubmluZ09mTGluZTsKKyAg
ICBwcmVwZW5kRG90LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZG9tYWluLmxlbmd0aCgpICsgMyk7
CisgICAgcHJlcGVuZEJlZ2lubmluZ09mTGluZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRvbWFp
bi5sZW5ndGgoKSArIDEpOyAvLyBUaGlzIGlzIGp1c3Qgbm8gLiogYXQgdGhlIGJlZ2lubmluZy4K
KyAgICAKKyAgICBUZXJtIGNhbm9uaWNhbERvdFN0YXIoVGVybTo6VW5pdmVyc2FsVHJhbnNpdGlv
bik7CisgICAgY2Fub25pY2FsRG90U3Rhci5xdWFudGlmeShBdG9tUXVhbnRpZmllcjo6WmVyb09y
TW9yZSk7CisgICAgcHJlcGVuZERvdC5hcHBlbmQoY2Fub25pY2FsRG90U3Rhcik7CisgICAgcHJl
cGVuZERvdC5hcHBlbmQoVGVybSgnLicsIHRydWUpKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZG9tYWluLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgQVNTRVJUKGlzQVND
SUkoZG9tYWluW2ldKSk7CisgICAgICAgIEFTU0VSVCghaXNBU0NJSVVwcGVyKGRvbWFpbltpXSkp
OworICAgICAgICBwcmVwZW5kRG90LmFwcGVuZChUZXJtKGRvbWFpbltpXSwgdHJ1ZSkpOworICAg
ICAgICBwcmVwZW5kQmVnaW5uaW5nT2ZMaW5lLmFwcGVuZChUZXJtKGRvbWFpbltpXSwgdHJ1ZSkp
OworICAgIH0KKyAgICBwcmVwZW5kRG90LmFwcGVuZChUZXJtOjpFbmRPZkxpbmVBc3NlcnRpb25U
ZXJtKTsKKyAgICBwcmVwZW5kQmVnaW5uaW5nT2ZMaW5lLmFwcGVuZChUZXJtOjpFbmRPZkxpbmVB
c3NlcnRpb25UZXJtKTsKKyAgICAKKyAgICBhZGRQYXR0ZXJuKGFjdGlvbklkLCBwcmVwZW5kRG90
KTsKKyAgICBhZGRQYXR0ZXJuKGFjdGlvbklkLCBwcmVwZW5kQmVnaW5uaW5nT2ZMaW5lKTsKK30K
Kwogdm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OmFkZFBhdHRlcm4odWludDY0X3QgYWN0aW9uSWQs
IGNvbnN0IFZlY3RvcjxUZXJtPiYgcGF0dGVybikKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KCFwYXR0ZXJuLmlzRW1wdHkoKSwgIlRoZSBwYXJzZXIgc2hvdWxkIGhhdmUgZXhjbHVkZWQgZW1w
dHkgcGF0dGVybnMgYmVmb3JlIHJlYWNoaW5nIENvbWJpbmVkVVJMRmlsdGVycy4iKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJM
RmlsdGVycy5oCShyZXZpc2lvbiAxODM4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaCIKICNpbmNsdWRl
ICJORkEuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDQsMTAgKzQ1LDExIEBAIHB1YmxpYzoKICAg
ICBDb21iaW5lZFVSTEZpbHRlcnMoKTsKICAgICB+Q29tYmluZWRVUkxGaWx0ZXJzKCk7CiAKLSAg
ICB2b2lkIGFkZFBhdHRlcm4odWludDY0X3QgcGF0dGVybklkLCBjb25zdCBWZWN0b3I8VGVybT4m
IHBhdHRlcm4pOworICAgIHZvaWQgYWRkUGF0dGVybih1aW50NjRfdCBhY3Rpb25JZCwgY29uc3Qg
VmVjdG9yPFRlcm0+JiBwYXR0ZXJuKTsKKyAgICB2b2lkIGFkZERvbWFpbih1aW50NjRfdCBhY3Rp
b25JZCwgY29uc3QgU3RyaW5nJiBkb21haW4pOwogCiAgICAgdm9pZCBwcm9jZXNzTkZBcyhzaXpl
X3QgbWF4TkZBU2l6ZSwgc3RkOjpmdW5jdGlvbjx2b2lkKE5GQSYmKT4gaGFuZGxlcik7Ci0gICAg
Ym9vbCBpc0VtcHR5KCk7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAKICNpZiBDT05URU5U
X0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCiAgICAgc2l6ZV90IG1lbW9yeVVzZWQo
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbXBpbGVk
Q29udGVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcAkocmV2aXNpb24gMTgzODgw
KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBDb21waWxlZENvbnRl
bnRFeHRlbnNpb246On5Db21waWxlZENvbnRlCiAKIFZlY3RvcjxTdHJpbmc+IENvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbjo6Z2xvYmFsRGlzcGxheU5vbmVTZWxlY3RvcnMoVmVjdG9yPGJvb2w+JiBw
YWdlc1VzZWQpCiB7Ci0gICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihieXRl
Y29kZSgpLCBieXRlY29kZUxlbmd0aCgpLCBwYWdlc1VzZWQpOworICAgIERGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXIgaW50ZXJwcmV0ZXIoZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGUoKSwgZmls
dGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVMZW5ndGgoKSwgcGFnZXNVc2VkKTsKICAgICBERkFC
eXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIGFjdGlvbkxvY2F0aW9ucyA9IGludGVycHJldGVy
LmFjdGlvbnNGcm9tREZBUm9vdCgpOwogICAgIAogICAgIFZlY3RvcjxBY3Rpb24+IGdsb2JhbEFj
dGlvbnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENv
bnRlbnRFeHRlbnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uaAkocmV2aXNpb24gMTgzODgwKQorKysg
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDEyIEBAIGNsYXNzIFdFQkNPUkVfRVhQT1JU
IENvbXBpbGVkQ29udGVudEV4dGUKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Db21waWxlZENvbnRl
bnRFeHRlbnNpb24oKTsKIAotICAgIHZpcnR1YWwgY29uc3QgREZBQnl0ZWNvZGUqIGJ5dGVjb2Rl
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZWNvZGVMZW5ndGgoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBERkFCeXRlY29kZSogZmlsdGVyc1dpdGhvdXREb21h
aW5zQnl0ZWNvZGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBmaWx0ZXJzV2l0
aG91dERvbWFpbnNCeXRlY29kZUxlbmd0aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0
IERGQUJ5dGVjb2RlKiBmaWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZSgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlTGVuZ3RoKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgREZBQnl0ZWNvZGUqIGRvbWFpbkZpbHRlcnNCeXRl
Y29kZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGRvbWFpbkZpbHRlcnNCeXRl
Y29kZUxlbmd0aCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IFNlcmlhbGl6ZWRBY3Rp
b25CeXRlKiBhY3Rpb25zKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgYWN0aW9u
c0xlbmd0aCgpIGNvbnN0ID0gMDsKICAgICBWZWN0b3I8U3RyaW5nPiBnbG9iYWxEaXNwbGF5Tm9u
ZVNlbGVjdG9ycyhWZWN0b3I8Ym9vbD4mIHBhZ2VzVXNlZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25D
b21waWxlci5jcHAJKHJldmlzaW9uIDE4Mzg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk2LDggKzk2LDEwIEBAIHN0YXRpYyBWZWN0b3I8dW5zaWduZWQ+IHNlcmlhbGl6ZUFjdGlvbnMK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBJ
ZGVudGljYWwgc2VxdWVudGlhbCBhY3Rpb25zIHNob3VsZCBub3QgYmUgcmV3cml0dGVuLgotICAg
ICAgICBpZiAocnVsZUluZGV4ICYmIHJ1bGUuYWN0aW9uKCkgPT0gcnVsZUxpc3RbcnVsZUluZGV4
IC0gMV0uYWN0aW9uKCkpIHsKKyAgICAgICAgLy8gSWRlbnRpY2FsIHNlcXVlbnRpYWwgYWN0aW9u
cyBzaG91bGQgbm90IGJlIHJld3JpdHRlbiB1bmxlc3MgdGhlcmUgYXJlIGRvbWFpbnMgaW4gdGhl
IHRyaWdnZXIuCisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBkb21haW5zIGluIHRoZSB0cmlnZ2Vy
LCB3ZSBuZWVkIHRvIGRpc3Rpbmd1aXNoIHRoZSBhY3Rpb25zIGJ5IGluZGV4IHRvIHRlbGwgaWYg
d2UgbmVlZCB0byBhcHBseSBpdAorICAgICAgICAvLyBieSBjb21wYXJpbmcgdGhlIG91dHB1dCBv
ZiB0aGUgZmlsdGVycyB3aXRoIGRvbWFpbnMgYW5kIHRoZSBkb21haW4gZmlsdGVycy4KKyAgICAg
ICAgaWYgKHJ1bGVJbmRleCAmJiBydWxlLmFjdGlvbigpID09IHJ1bGVMaXN0W3J1bGVJbmRleCAt
IDFdLmFjdGlvbigpICYmIHJ1bGUudHJpZ2dlcigpLmRvbWFpbnMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgICAgICBhY3Rpb25Mb2NhdGlvbnMuYXBwZW5kKGFjdGlvbkxvY2F0aW9uc1tydWxlSW5kZXgg
LSAxXSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtMTU2LDggKzE1OCwx
MyBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAKICAgICBVbml2
ZXJzYWxBY3Rpb25Mb2NhdGlvbnNTZXQgdW5pdmVyc2FsQWN0aW9uTG9jYXRpb25zOwogCi0gICAg
Q29tYmluZWRVUkxGaWx0ZXJzIGNvbWJpbmVkVVJMRmlsdGVyczsKLSAgICBVUkxGaWx0ZXJQYXJz
ZXIgdXJsRmlsdGVyUGFyc2VyKGNvbWJpbmVkVVJMRmlsdGVycyk7CisgICAgLy8gRklYTUU6IFRo
ZXNlIGRvbid0IGFsbCBuZWVkIHRvIGJlIGluIG1lbW9yeSBhdCB0aGUgc2FtZSB0aW1lLgorICAg
IENvbWJpbmVkVVJMRmlsdGVycyBmaWx0ZXJzV2l0aG91dERvbWFpbnM7CisgICAgQ29tYmluZWRV
UkxGaWx0ZXJzIGZpbHRlcnNXaXRoRG9tYWluczsKKyAgICBDb21iaW5lZFVSTEZpbHRlcnMgZG9t
YWluRmlsdGVyczsKKyAgICBVUkxGaWx0ZXJQYXJzZXIgZmlsdGVyc1dpdGhvdXREb21haW5QYXJz
ZXIoZmlsdGVyc1dpdGhvdXREb21haW5zKTsKKyAgICBVUkxGaWx0ZXJQYXJzZXIgZmlsdGVyc1dp
dGhEb21haW5QYXJzZXIoZmlsdGVyc1dpdGhEb21haW5zKTsKKyAgICAKICAgICBib29sIGlnbm9y
ZVByZXZpb3VzUnVsZXNTZWVuID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBydWxlSW5kZXgg
PSAwOyBydWxlSW5kZXggPCBwYXJzZWRSdWxlTGlzdC5zaXplKCk7ICsrcnVsZUluZGV4KSB7CiAg
ICAgICAgIGNvbnN0IENvbnRlbnRFeHRlbnNpb25SdWxlJiBjb250ZW50RXh0ZW5zaW9uUnVsZSA9
IHBhcnNlZFJ1bGVMaXN0W3J1bGVJbmRleF07CkBAIC0xNjYsMTggKzE3MywzNiBAQCBzdGQ6OmVy
cm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAKICAgICAgICAgLy8gSGlnaCBiaXRz
IGFyZSB1c2VkIGZvciBmbGFncy4gVGhpcyBzaG91bGQgbWF0Y2ggaG93IHRoZXkgYXJlIHVzZWQg
aW4gREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUuCiAgICAgICAgIHVpbnQ2NF90IGFj
dGlvbkxvY2F0aW9uQW5kRmxhZ3MgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRyaWdnZXIuZmxh
Z3MpIDw8IDMyKSB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihhY3Rpb25Mb2NhdGlvbnNbcnVsZUlu
ZGV4XSk7Ci0gICAgICAgIFVSTEZpbHRlclBhcnNlcjo6UGFyc2VTdGF0dXMgc3RhdHVzID0gdXJs
RmlsdGVyUGFyc2VyLmFkZFBhdHRlcm4odHJpZ2dlci51cmxGaWx0ZXIsIHRyaWdnZXIudXJsRmls
dGVySXNDYXNlU2Vuc2l0aXZlLCBhY3Rpb25Mb2NhdGlvbkFuZEZsYWdzKTsKLQotICAgICAgICBp
ZiAoc3RhdHVzID09IFVSTEZpbHRlclBhcnNlcjo6TWF0Y2hlc0V2ZXJ5dGhpbmcpIHsKLSAgICAg
ICAgICAgIGlmIChpZ25vcmVQcmV2aW91c1J1bGVzU2VlbikKLSAgICAgICAgICAgICAgICByZXR1
cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpSZWdleE1hdGNoZXNFdmVyeXRoaW5nQWZ0ZXJJZ25v
cmVQcmV2aW91c1J1bGVzOwotICAgICAgICAgICAgdW5pdmVyc2FsQWN0aW9uTG9jYXRpb25zLmFk
ZChhY3Rpb25Mb2NhdGlvbkFuZEZsYWdzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdGF0
dXMgIT0gVVJMRmlsdGVyUGFyc2VyOjpPayAmJiBzdGF0dXMgIT0gVVJMRmlsdGVyUGFyc2VyOjpN
YXRjaGVzRXZlcnl0aGluZykgewotICAgICAgICAgICAgZGF0YUxvZ0YoIkVycm9yIHdoaWxlIHBh
cnNpbmcgJXM6ICVzXG4iLCB0cmlnZ2VyLnVybEZpbHRlci51dGY4KCkuZGF0YSgpLCBVUkxGaWx0
ZXJQYXJzZXI6OnN0YXR1c1N0cmluZyhzdGF0dXMpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRSZWdleDsKKyAgICAg
ICAgVVJMRmlsdGVyUGFyc2VyOjpQYXJzZVN0YXR1cyBzdGF0dXMgPSBVUkxGaWx0ZXJQYXJzZXI6
Ok9rOworICAgICAgICBpZiAodHJpZ2dlci5kb21haW5zLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgc3RhdHVzID0gZmlsdGVyc1dpdGhvdXREb21haW5QYXJzZXIuYWRkUGF0dGVybih0cmlnZ2Vy
LnVybEZpbHRlciwgdHJpZ2dlci51cmxGaWx0ZXJJc0Nhc2VTZW5zaXRpdmUsIGFjdGlvbkxvY2F0
aW9uQW5kRmxhZ3MpOworICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBVUkxGaWx0ZXJQYXJzZXI6
Ok1hdGNoZXNFdmVyeXRoaW5nKSB7CisgICAgICAgICAgICAgICAgaWYgKGlnbm9yZVByZXZpb3Vz
UnVsZXNTZWVuKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVy
cm9yOjpSZWdleE1hdGNoZXNFdmVyeXRoaW5nQWZ0ZXJJZ25vcmVQcmV2aW91c1J1bGVzOworICAg
ICAgICAgICAgICAgIHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9ucy5hZGQoYWN0aW9uTG9jYXRpb25B
bmRGbGFncyk7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gVVJMRmlsdGVyUGFyc2VyOjpPazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gVVJMRmlsdGVyUGFyc2Vy
OjpPaykgeworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJFcnJvciB3aGlsZSBwYXJzaW5nICVz
OiAlc1xuIiwgdHJpZ2dlci51cmxGaWx0ZXIudXRmOCgpLmRhdGEoKSwgVVJMRmlsdGVyUGFyc2Vy
OjpzdGF0dXNTdHJpbmcoc3RhdHVzKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFJlZ2V4OworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHRyaWdnZXIuaWZEb21haW4p
CisgICAgICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25BbmRGbGFncyB8PSBJZkRvbWFpbkZsYWc7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQVNTRVJUKCEoYWN0aW9uTG9jYXRp
b25BbmRGbGFncyAmIElmRG9tYWluRmxhZykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBz
dGF0dXMgPSBmaWx0ZXJzV2l0aERvbWFpblBhcnNlci5hZGRQYXR0ZXJuKHRyaWdnZXIudXJsRmls
dGVyLCB0cmlnZ2VyLnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSwgYWN0aW9uTG9jYXRpb25BbmRG
bGFncyk7CisgICAgICAgICAgICBpZiAoc3RhdHVzID09IFVSTEZpbHRlclBhcnNlcjo6TWF0Y2hl
c0V2ZXJ5dGhpbmcpCisgICAgICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJv
cjo6UmVnZXhNYXRjaGVzRXZlcnl0aGluZ1dpdGhEb21haW5zOworICAgICAgICAgICAgaWYgKHN0
YXR1cyAhPSBVUkxGaWx0ZXJQYXJzZXI6Ok9rKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0Yo
IkVycm9yIHdoaWxlIHBhcnNpbmcgJXM6ICVzXG4iLCB0cmlnZ2VyLnVybEZpbHRlci51dGY4KCku
ZGF0YSgpLCBVUkxGaWx0ZXJQYXJzZXI6OnN0YXR1c1N0cmluZyhzdGF0dXMpLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05J
bnZhbGlkUmVnZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGNvbnN0IFN0cmlu
ZyYgZG9tYWluIDogdHJpZ2dlci5kb21haW5zKQorICAgICAgICAgICAgICAgIGRvbWFpbkZpbHRl
cnMuYWRkRG9tYWluKGFjdGlvbkxvY2F0aW9uQW5kRmxhZ3MsIGRvbWFpbik7CiAgICAgICAgIH0K
KyAgICAgICAgQVNTRVJUKHN0YXR1cyA9PSBVUkxGaWx0ZXJQYXJzZXI6Ok9rKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChjb250ZW50RXh0ZW5zaW9uUnVsZS5hY3Rpb24oKS50eXBlKCkgPT0gQWN0
aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlcykKICAgICAgICAgICAgIGlnbm9yZVByZXZpb3Vz
UnVsZXNTZWVuID0gdHJ1ZTsKQEAgLTE5Miw3ICsyMTcsOSBAQCBzdGQ6OmVycm9yX2NvZGUgY29t
cGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAgICAgZGF0YUxvZ0YoIiAgICBUaW1lIHNwZW50IHBhcnRp
dGlvbmluZyB0aGUgcnVsZXMgaW50byBncm91cHM6ICVmXG4iLCAocGF0dGVyblBhcnRpdGlvbmlu
Z0VuZCAtIHBhdHRlcm5QYXJ0aXRpb25pbmdTdGFydCkpOwogI2VuZGlmCiAKLSAgICBMT0dfTEFS
R0VfU1RSVUNUVVJFUyhjb21iaW5lZFVSTEZpbHRlcnMsIGNvbWJpbmVkVVJMRmlsdGVycy5tZW1v
cnlVc2VkKCkpOworICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKGZpbHRlcnNXaXRob3V0RG9tYWlu
cywgZmlsdGVyc1dpdGhvdXREb21haW5zLm1lbW9yeVVzZWQoKSk7CisgICAgTE9HX0xBUkdFX1NU
UlVDVFVSRVMoZmlsdGVyc1dpdGhEb21haW5zLCBmaWx0ZXJzV2l0aERvbWFpbnMubWVtb3J5VXNl
ZCgpKTsKKyAgICBMT0dfTEFSR0VfU1RSVUNUVVJFUyhkb21haW5GaWx0ZXJzLCBkb21haW5GaWx0
ZXJzLm1lbW9yeVVzZWQoKSk7CiAKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0Vf
UkVQT1JUSU5HCiAgICAgZG91YmxlIHRvdGFsTkZBVG9CeXRlQ29kZUJ1aWxkVGltZVN0YXJ0ID0g
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CkBAIC0yMDMsOCArMjMwLDkgQEAgc3RkOjpl
cnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogICAgIAogICAgIGJvb2wgZmlyc3RO
RkFTZWVuID0gZmFsc2U7CiAgICAgLy8gRklYTUU6IENvbWJpbmUgc21hbGwgTkZBcyB0byByZWR1
Y2UgdGhlIG51bWJlciBvZiBORkFzLgotICAgIGNvbWJpbmVkVVJMRmlsdGVycy5wcm9jZXNzTkZB
cyhtYXhORkFTaXplLCBbJl0oTkZBJiYgbmZhKSB7CisgICAgZmlsdGVyc1dpdGhvdXREb21haW5z
LnByb2Nlc3NORkFzKG1heE5GQVNpemUsIFsmXShORkEmJiBuZmEpIHsKICNpZiBDT05URU5UX0VY
VEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJVR0dJTkcKKyAgICAgICAgZGF0YUxvZ0YoImZpbHRl
cnNXaXRob3V0RG9tYWlucyBORkFcbiIpOwogICAgICAgICBuZmEuZGVidWdQcmludERvdCgpOwog
I2VuZGlmCiAKQEAgLTIxNiw3ICsyNDQsNyBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVM
aXN0KENvbnRlbnRFCiAgICAgICAgIGRmYS5taW5pbWl6ZSgpOwogCiAjaWYgQ09OVEVOVF9FWFRF
TlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCi0gICAgICAgIFdURkxvZ0Fsd2F5cygiREZB
Iik7CisgICAgICAgIGRhdGFMb2dGKCJmaWx0ZXJzV2l0aG91dERvbWFpbnMgREZBXG4iKTsKICAg
ICAgICAgZGZhLmRlYnVnUHJpbnREb3QoKTsKICNlbmRpZgogICAgICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKCFkZmEubm9kZXNbZGZhLnJvb3RdLmhhc0FjdGlvbnMoKSwgIkFsbCBhY3Rpb25zIG9u
IHRoZSBERkEgcm9vdCBzaG91bGQgY29tZSBmcm9tIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCBt
YXRjaCBldmVyeXRoaW5nLiIpOwpAQCAtMjMwLDExICsyNTgsMTEgQEAgc3RkOjplcnJvcl9jb2Rl
IGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogICAgICAgICBERkFCeXRlY29kZUNvbXBpbGVyIGNv
bXBpbGVyKGRmYSwgYnl0ZWNvZGUpOwogICAgICAgICBjb21waWxlci5jb21waWxlKCk7CiAgICAg
ICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKGJ5dGVjb2RlLCBieXRlY29kZS5jYXBhY2l0eSgpICog
c2l6ZW9mKHVpbnQ4X3QpKTsKLSAgICAgICAgY2xpZW50LndyaXRlQnl0ZWNvZGUoV1RGOjptb3Zl
KGJ5dGVjb2RlKSk7CisgICAgICAgIGNsaWVudC53cml0ZUZpbHRlcnNXaXRob3V0RG9tYWluc0J5
dGVjb2RlKFdURjo6bW92ZShieXRlY29kZSkpOwogCiAgICAgICAgIGZpcnN0TkZBU2VlbiA9IHRy
dWU7CiAgICAgfSk7Ci0gICAgQVNTRVJUKGNvbWJpbmVkVVJMRmlsdGVycy5pc0VtcHR5KCkpOwor
ICAgIEFTU0VSVChmaWx0ZXJzV2l0aG91dERvbWFpbnMuaXNFbXB0eSgpKTsKIAogICAgIGlmICgh
Zmlyc3RORkFTZWVuKSB7CiAgICAgICAgIC8vIE91ciBieXRlY29kZSBpbnRlcnByZXRlciBleHBl
Y3RzIHRvIGhhdmUgYXQgbGVhc3Qgb25lIERGQSwgc28gaWYgd2UgaGF2ZW4ndCBzZWVuIGFueQpA
QCAtMjQ5LDEyICsyNzcsNjIgQEAgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250
ZW50RQogICAgICAgICBERkFCeXRlY29kZUNvbXBpbGVyIGNvbXBpbGVyKGR1bW15REZBLCBieXRl
Y29kZSk7CiAgICAgICAgIGNvbXBpbGVyLmNvbXBpbGUoKTsKICAgICAgICAgTE9HX0xBUkdFX1NU
UlVDVFVSRVMoYnl0ZWNvZGUsIGJ5dGVjb2RlLmNhcGFjaXR5KCkgKiBzaXplb2YodWludDhfdCkp
OwotICAgICAgICBjbGllbnQud3JpdGVCeXRlY29kZShXVEY6Om1vdmUoYnl0ZWNvZGUpKTsKKyAg
ICAgICAgY2xpZW50LndyaXRlRmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGUoV1RGOjptb3Zl
KGJ5dGVjb2RlKSk7CiAgICAgfQotCiAgICAgTE9HX0xBUkdFX1NUUlVDVFVSRVModW5pdmVyc2Fs
QWN0aW9uTG9jYXRpb25zLCB1bml2ZXJzYWxBY3Rpb25Mb2NhdGlvbnMuY2FwYWNpdHkoKSAqIHNp
emVvZih1bnNpZ25lZCkpOwogICAgIHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9ucy5jbGVhcigpOwor
ICAgIAorICAgIGZpbHRlcnNXaXRoRG9tYWlucy5wcm9jZXNzTkZBcyhtYXhORkFTaXplLCBbJl0o
TkZBJiYgbmZhKSB7CisjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdH
SU5HCisgICAgICAgIGRhdGFMb2dGKCJmaWx0ZXJzV2l0aERvbWFpbnMgTkZBXG4iKTsKKyAgICAg
ICAgbmZhLmRlYnVnUHJpbnREb3QoKTsKKyNlbmRpZgorICAgICAgICBMT0dfTEFSR0VfU1RSVUNU
VVJFUyhuZmEsIG5mYS5tZW1vcnlVc2VkKCkpOworICAgICAgICBERkEgZGZhID0gTkZBVG9ERkE6
OmNvbnZlcnQobmZhKTsKKyNpZiBDT05URU5UX0VYVEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJV
R0dJTkcKKyAgICAgICAgZGF0YUxvZ0YoImZpbHRlcnNXaXRoRG9tYWlucyBQUkUgTUlOSU1JWklO
RyBERkFcbiIpOworICAgICAgICBkZmEuZGVidWdQcmludERvdCgpOworI2VuZGlmCisgICAgICAg
IExPR19MQVJHRV9TVFJVQ1RVUkVTKGRmYSwgZGZhLm1lbW9yeVVzZWQoKSk7CisgICAgICAgIC8v
IE1pbmltaXppbmcgdGhpcyBERkEgd291bGQgbm90IGJlIGVmZmVjdGl2ZSBiZWNhdXNlIGFsbCBh
Y3Rpb25zIHdpdGggZG9tYWlucyBhcmUgdW5pcXVlLgorI2lmIENPTlRFTlRfRVhURU5TSU9OU19T
VEFURV9NQUNISU5FX0RFQlVHR0lORworICAgICAgICBkYXRhTG9nRigiZmlsdGVyc1dpdGhEb21h
aW5zIFBPU1QgTUlOSU1JWklORyBERkFcbiIpOworICAgICAgICBkZmEuZGVidWdQcmludERvdCgp
OworI2VuZGlmCisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWRmYS5ub2Rlc1tkZmEucm9v
dF0uaGFzQWN0aW9ucygpLCAiRmlsdGVycyB3aXRoIGRvbWFpbnMgdGhhdCBtYXRjaCBldmVyeXRo
aW5nIGFyZSBub3QgYWxsb3dlZCByaWdodCBub3cuIik7CisgICAgICAgIAorICAgICAgICBWZWN0
b3I8REZBQnl0ZWNvZGU+IGJ5dGVjb2RlOworICAgICAgICBERkFCeXRlY29kZUNvbXBpbGVyIGNv
bXBpbGVyKGRmYSwgYnl0ZWNvZGUpOworICAgICAgICBjb21waWxlci5jb21waWxlKCk7CisgICAg
ICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKGJ5dGVjb2RlLCBieXRlY29kZS5jYXBhY2l0eSgpICog
c2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgY2xpZW50LndyaXRlRmlsdGVyc1dpdGhEb21haW5z
Qnl0ZWNvZGUoV1RGOjptb3ZlKGJ5dGVjb2RlKSk7CisgICAgfSk7CisgICAgQVNTRVJUKGZpbHRl
cnNXaXRoRG9tYWlucy5pc0VtcHR5KCkpOwogCisgICAgZG9tYWluRmlsdGVycy5wcm9jZXNzTkZB
cyhtYXhORkFTaXplLCBbJl0oTkZBJiYgbmZhKSB7CisjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NU
QVRFX01BQ0hJTkVfREVCVUdHSU5HCisgICAgICAgIGRhdGFMb2dGKCJkb21haW5GaWx0ZXJzIE5G
QVxuIik7CisgICAgICAgIG5mYS5kZWJ1Z1ByaW50RG90KCk7CisjZW5kaWYKKyAgICAgICAgTE9H
X0xBUkdFX1NUUlVDVFVSRVMobmZhLCBuZmEubWVtb3J5VXNlZCgpKTsKKyAgICAgICAgREZBIGRm
YSA9IE5GQVRvREZBOjpjb252ZXJ0KG5mYSk7CisjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRF
X01BQ0hJTkVfREVCVUdHSU5HCisgICAgICAgIGRhdGFMb2dGKCJkb21haW5GaWx0ZXJzIERGQVxu
Iik7CisgICAgICAgIGRmYS5kZWJ1Z1ByaW50RG90KCk7CisjZW5kaWYKKyAgICAgICAgTE9HX0xB
UkdFX1NUUlVDVFVSRVMoZGZhLCBkZmEubWVtb3J5VXNlZCgpKTsKKyAgICAgICAgLy8gTWluaW1p
emluZyB0aGlzIERGQSB3b3VsZCBub3QgYmUgZWZmZWN0aXZlIGJlY2F1c2UgYWxsIGFjdGlvbnMg
YXJlIHVuaXF1ZQorICAgICAgICAvLyBhbmQgYmVjYXVzZSBvZiB0aGUgdHJlZS1saWtlIHN0cnVj
dHVyZSBvZiB0aGlzIERGQS4KKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZGZhLm5vZGVz
W2RmYS5yb290XS5oYXNBY3Rpb25zKCksICJUaGVyZSBzaG91bGQgbm90IGJlIGFueSBkb21haW5z
IHRoYXQgbWF0Y2ggZXZlcnl0aGluZy4iKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxERkFC
eXRlY29kZT4gYnl0ZWNvZGU7CisgICAgICAgIERGQUJ5dGVjb2RlQ29tcGlsZXIgY29tcGlsZXIo
ZGZhLCBieXRlY29kZSk7CisgICAgICAgIGNvbXBpbGVyLmNvbXBpbGUoKTsKKyAgICAgICAgTE9H
X0xBUkdFX1NUUlVDVFVSRVMoYnl0ZWNvZGUsIGJ5dGVjb2RlLmNhcGFjaXR5KCkgKiBzaXplb2Yo
dWludDhfdCkpOworICAgICAgICBjbGllbnQud3JpdGVEb21haW5GaWx0ZXJzQnl0ZWNvZGUoV1RG
Ojptb3ZlKGJ5dGVjb2RlKSk7CisgICAgfSk7CisgICAgQVNTRVJUKGRvbWFpbkZpbHRlcnMuaXNF
bXB0eSgpKTsgICAgCisgICAgCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JF
UE9SVElORwogICAgIGRvdWJsZSB0b3RhbE5GQVRvQnl0ZUNvZGVCdWlsZFRpbWVFbmQgPSBtb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKICAgICBkYXRhTG9nRigiICAgIFRpbWUgc3BlbnQg
YnVpbGRpbmcgYW5kIGNvbXBpbGluZyB0aGUgREZBczogJWZcbiIsICh0b3RhbE5GQVRvQnl0ZUNv
ZGVCdWlsZFRpbWVFbmQgLSB0b3RhbE5GQVRvQnl0ZUNvZGVCdWlsZFRpbWVTdGFydCkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBp
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvbkNvbXBpbGVyLmgJKHJldmlzaW9uIDE4Mzg4MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiwxNyArMzYsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFj
ZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKLXN0cnVjdCBDb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhIHsKLSAgICBWZWN0b3I8REZBQnl0ZWNvZGU+IGJ5dGVjb2RlOwotICAgIFZlY3RvcjxTZXJp
YWxpemVkQWN0aW9uQnl0ZT4gYWN0aW9uczsKLX07Ci0KIGNsYXNzIENvbnRlbnRFeHRlbnNpb25D
b21waWxhdGlvbkNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q29udGVudEV4dGVuc2lv
bkNvbXBpbGF0aW9uQ2xpZW50KCkgeyB9CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHdyaXRlQnl0
ZWNvZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYmKSA9IDA7CisgICAgLy8gRnVuY3Rpb25zIHNob3Vs
ZCBiZSBjYWxsZWQgaW4gdGhpcyBvcmRlci4gQWxsIGV4Y2VwdCB3cml0ZUFjdGlvbnMgYW5kIGZp
bmFsaXplIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIHRob3VnaC4KICAgICB2aXJ0dWFs
IHZvaWQgd3JpdGVBY3Rpb25zKFZlY3RvcjxTZXJpYWxpemVkQWN0aW9uQnl0ZT4mJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB3cml0ZUZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlKFZlY3Rv
cjxERkFCeXRlY29kZT4mJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUZpbHRlcnNXaXRo
RG9tYWluc0J5dGVjb2RlKFZlY3RvcjxERkFCeXRlY29kZT4mJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB3cml0ZURvbWFpbkZpbHRlcnNCeXRlY29kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoKSA9IDA7CiB9OwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNp
b25FcnJvci5jcHAJKHJldmlzaW9uIDE4Mzg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDYgKzc3LDE0IEBAIGNvbnN0IHN0ZDo6ZXJyb3JfY2F0ZWdvcnkmIGNvbnRlbnRFeHRlbnMKICAg
ICAgICAgICAgICAgICByZXR1cm4gIkludmFsaWQgb3IgdW5zdXBwb3J0ZWQgcmVndWxhciBleHBy
ZXNzaW9uLiI7CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6UmVnZXhN
YXRjaGVzRXZlcnl0aGluZ0FmdGVySWdub3JlUHJldmlvdXNSdWxlczoKICAgICAgICAgICAgICAg
ICByZXR1cm4gIlJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCBtYXRjaCBldmVyeXRoaW5nIGFyZSBv
bmx5IGFsbG93ZWQgYmVmb3JlIHRoZSBmaXJzdCBpZ25vcmUtcHJldmlvdXMtcnVsZXMuIjsKKyAg
ICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpSZWdleE1hdGNoZXNFdmVyeXRo
aW5nV2l0aERvbWFpbnM6CisgICAgICAgICAgICAgICAgcmV0dXJuICJSZWd1bGFyIGV4cHJlc3Np
b25zIHRoYXQgbWF0Y2ggZXZlcnl0aGluZyBhcmUgbm90IGFsbG93ZWQgd2l0aCB1bmxlc3MtIG9y
IGlmLWRvbWFpbi4iOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpT
T05JbnZhbGlkRG9tYWluTGlzdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkludmFsaWQgZG9t
YWluIGxpc3QuIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09O
RG9tYWluTm90TG93ZXJDYXNlQVNDSUk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJEb21haW5z
IG11c3QgYmUgbG93ZXIgY2FzZSBBU0NJSS4gIFVzZSBwdW55Y29kZSB0byBlbmNvZGUgbm9uLUFT
Q0lJIGNoYXJhY3RlcnMuIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9y
OjpKU09OVW5sZXNzQW5kSWZEb21haW46CisgICAgICAgICAgICAgICAgcmV0dXJuICJBIHRyaWdn
ZXIgY2Fubm90IGhhdmUgYm90aCB1bmxlc3MtIGFuZCBpZi1kb21haW4uIjsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJy
b3IuaAkocmV2aXNpb24gMTgzODgwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDkg
QEAgZW51bSBjbGFzcyBDb250ZW50RXh0ZW5zaW9uRXJyb3IgewogICAgIEpTT05JbnZhbGlkVHJp
Z2dlckZsYWdzQXJyYXksCiAgICAgSlNPTkludmFsaWRPYmplY3RJblRyaWdnZXJGbGFnc0FycmF5
LAogICAgIEpTT05JbnZhbGlkU3RyaW5nSW5UcmlnZ2VyRmxhZ3NBcnJheSwKKyAgICBKU09OSW52
YWxpZERvbWFpbkxpc3QsCisgICAgSlNPTkRvbWFpbk5vdExvd2VyQ2FzZUFTQ0lJLAorICAgIEpT
T05Vbmxlc3NBbmRJZkRvbWFpbiwKICAgICAKICAgICBKU09OSW52YWxpZEFjdGlvbiwKICAgICBK
U09OSW52YWxpZEFjdGlvblR5cGUsCkBAIC01Niw5ICs1OSwxMCBAQCBlbnVtIGNsYXNzIENvbnRl
bnRFeHRlbnNpb25FcnJvciB7CiAgICAgSlNPTkludmFsaWRSZWdleCwKICAgICAKICAgICBSZWdl
eE1hdGNoZXNFdmVyeXRoaW5nQWZ0ZXJJZ25vcmVQcmV2aW91c1J1bGVzLAorICAgIFJlZ2V4TWF0
Y2hlc0V2ZXJ5dGhpbmdXaXRoRG9tYWlucywKIH07CiAKLWNvbnN0IHN0ZDo6ZXJyb3JfY2F0ZWdv
cnkmIGNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5KCk7CitXRUJDT1JFX0VYUE9SVCBjb25z
dCBzdGQ6OmVycm9yX2NhdGVnb3J5JiBjb250ZW50RXh0ZW5zaW9uRXJyb3JDYXRlZ29yeSgpOwog
CiBpbmxpbmUgc3RkOjplcnJvcl9jb2RlIG1ha2VfZXJyb3JfY29kZShDb250ZW50RXh0ZW5zaW9u
RXJyb3IgZXJyb3IpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkocmV2aXNpb24gMTgz
ODgwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
blBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDM0IEBAIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5z
aW9ucyB7CisgICAgCitzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGdldERvbWFpbkxpc3QoRXhlY1N0
YXRlJiBleGVjLCBKU09iamVjdCogYXJyYXlPYmplY3QsIFZlY3RvcjxTdHJpbmc+JiB2ZWN0b3Ip
Cit7CisgICAgQVNTRVJUKHZlY3Rvci5pc0VtcHR5KCkpOworICAgIGlmICghYXJyYXlPYmplY3Qg
fHwgIWlzSlNBcnJheShhcnJheU9iamVjdCkpCisgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdDsKKyAgICBKU0FycmF5KiBhcnJheSA9IGpz
Q2FzdDxKU0FycmF5Kj4oYXJyYXlPYmplY3QpOworICAgIAorICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGFycmF5LT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgLy8gRklYTUU6IEpTT2JqZWN0OjpnZXRJbmRleCBzaG91bGQgYmUgbWFy
a2VkIGFzIGNvbnN0LgorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYXJyYXktPmdldEluZGV4KCZl
eGVjLCBpKTsKKyAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXZhbHVlIHx8ICF2
YWx1ZS5pc1N0cmluZygpKQorICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJv
cjo6SlNPTkludmFsaWREb21haW5MaXN0OworICAgICAgICAKKyAgICAgICAgLy8gRG9tYWlucyBz
aG91bGQgYmUgcHVueWNvZGUgZW5jb2RlZCBsb3dlciBjYXNlLgorICAgICAgICBTdHJpbmcgZG9t
YWluID0gdmFsdWUudG9XVEZTdHJpbmcoJmV4ZWMpOworICAgICAgICBpZiAoZG9tYWluLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZh
bGlkRG9tYWluTGlzdDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRvbWFpbi5s
ZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBVQ2hhciBjID0gZG9tYWluLmF0KGkpOworICAg
ICAgICAgICAgaWYgKCFpc0FTQ0lJKGRvbWFpbltpXSkgfHwgaXNBU0NJSVVwcGVyKGMpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Eb21haW5Ob3RM
b3dlckNhc2VBU0NJSTsKKyAgICAgICAgfQorICAgICAgICB2ZWN0b3IuYXBwZW5kKGRvbWFpbik7
CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CiAKIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgZ2V0
VHlwZUZsYWdzKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgdHlwZVZhbHVlLCBSZXNv
dXJjZUZsYWdzJiBmbGFncywgdWludDE2X3QgKCpzdHJpbmdUb1R5cGUpKGNvbnN0IFN0cmluZyYp
KQogewpAQCAtMTA4LDYgKzEzNiwyOSBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRUcmln
Z2VyKEV4ZWNTCiAgICAgICAgIGlmICh0eXBlRmxhZ3NFcnJvcikKICAgICAgICAgICAgIHJldHVy
biB0eXBlRmxhZ3NFcnJvcjsKICAgICB9CisgICAgCisgICAgSlNWYWx1ZSBpZkRvbWFpbiA9IHRy
aWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAiaWYt
ZG9tYWluIikpOworICAgIGlmIChpZkRvbWFpbiAmJiAhZXhlYy5oYWRFeGNlcHRpb24oKSAmJiBp
ZkRvbWFpbi5pc09iamVjdCgpKSB7CisgICAgICAgIGF1dG8gaWZEb21haW5FcnJvciA9IGdldERv
bWFpbkxpc3QoZXhlYywgaWZEb21haW4udG9PYmplY3QoJmV4ZWMpLCB0cmlnZ2VyLmRvbWFpbnMp
OworICAgICAgICBpZiAoaWZEb21haW5FcnJvcikKKyAgICAgICAgICAgIHJldHVybiBpZkRvbWFp
bkVycm9yOworICAgICAgICBpZiAodHJpZ2dlci5kb21haW5zLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdDsK
KyAgICAgICAgQVNTRVJUKCF0cmlnZ2VyLmlmRG9tYWluKTsKKyAgICAgICAgdHJpZ2dlci5pZkRv
bWFpbiA9IHRydWU7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgdW5sZXNzRG9tYWluID0gdHJp
Z2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ1bmxl
c3MtZG9tYWluIikpOworICAgIGlmICh1bmxlc3NEb21haW4gJiYgIWV4ZWMuaGFkRXhjZXB0aW9u
KCkgJiYgdW5sZXNzRG9tYWluLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKHRyaWdnZXIuaWZE
b21haW4pCisgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OVW5s
ZXNzQW5kSWZEb21haW47CisgICAgICAgIGF1dG8gdW5sZXNzRG9tYWluRXJyb3IgPSBnZXREb21h
aW5MaXN0KGV4ZWMsIHVubGVzc0RvbWFpbi50b09iamVjdCgmZXhlYyksIHRyaWdnZXIuZG9tYWlu
cyk7CisgICAgICAgIGlmICh1bmxlc3NEb21haW5FcnJvcikKKyAgICAgICAgICAgIHJldHVybiB1
bmxlc3NEb21haW5FcnJvcjsKKyAgICAgICAgaWYgKHRyaWdnZXIuZG9tYWlucy5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZERv
bWFpbkxpc3Q7CisgICAgICAgIEFTU0VSVCghdHJpZ2dlci5pZkRvbWFpbik7CisgICAgfQogCiAg
ICAgcmV0dXJuIHsgfTsKIH0KQEAgLTE2MCw2ICsyMTEsNyBAQCBzdGF0aWMgc3RkOjplcnJvcl9j
b2RlIGxvYWRSdWxlKEV4ZWNTdGF0CiAKIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZEVuY29k
ZWRSdWxlcyhFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IFN0cmluZyYgcnVsZXMsIFZlY3RvcjxDb250
ZW50RXh0ZW5zaW9uUnVsZT4mIHJ1bGVMaXN0KQogeworICAgIC8vIEZJWE1FOiBKU09OUGFyc2Ug
c2hvdWxkIHJlcXVpcmUgY2FsbGJhY2tzIGluc3RlYWQgb2YgYW4gRXhlY1N0YXRlLgogICAgIEpT
VmFsdWUgZGVjb2RlZFJ1bGVzID0gSlNPTlBhcnNlKCZleGVjLCBydWxlcyk7CiAKICAgICBpZiAo
ZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhZGVjb2RlZFJ1bGVzKQpJbmRleDogU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5o
CShyZXZpc2lvbiAxODM4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMSArNDUsMTYgQEAg
c3RydWN0IFRyaWdnZXIgewogICAgIFN0cmluZyB1cmxGaWx0ZXI7CiAgICAgYm9vbCB1cmxGaWx0
ZXJJc0Nhc2VTZW5zaXRpdmUgeyBmYWxzZSB9OwogICAgIFJlc291cmNlRmxhZ3MgZmxhZ3MgeyAw
IH07CisgICAgVmVjdG9yPFN0cmluZz4gZG9tYWluczsKKyAgICBib29sIGlmRG9tYWluIHsgZmFs
c2UgfTsgLy8gSWYgdGhpcyBpcyBmYWxzZSwgdGhhdCBtZWFucyBkb21haW5zIGlzIGEgbGlzdCBv
ZiB1bmxlc3MtZG9tYWlucyBpZiBpdCBpcyBub3QgZW1wdHkuCisgICAgCiAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFRyaWdnZXImIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJu
IHVybEZpbHRlciA9PSBvdGhlci51cmxGaWx0ZXIKICAgICAgICAgICAgICYmIHVybEZpbHRlcklz
Q2FzZVNlbnNpdGl2ZSA9PSBvdGhlci51cmxGaWx0ZXJJc0Nhc2VTZW5zaXRpdmUKLSAgICAgICAg
ICAgICYmIGZsYWdzID09IG90aGVyLmZsYWdzOworICAgICAgICAgICAgJiYgZmxhZ3MgPT0gb3Ro
ZXIuZmxhZ3MKKyAgICAgICAgICAgICYmIGRvbWFpbnMgPT0gb3RoZXIuZG9tYWlucworICAgICAg
ICAgICAgJiYgaWZEb21haW4gPT0gb3RoZXIuaWZEb21haW47CiAgICAgfQogfTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFj
a2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkocmV2aXNpb24gMTgzODgwKQorKysgU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODgsOCArODgsNDAgQEAgVmVjdG9yPEFjdGlvbj4gQ29udGVudEV4
dGVuc2lvbnNCYWNrZW5kOgogICAgIGZvciAoYXV0byYgY29udGVudEV4dGVuc2lvbiA6IG1fY29u
dGVudEV4dGVuc2lvbnMudmFsdWVzKCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29udGVu
dEV4dGVuc2lvbik7CiAgICAgICAgIGNvbnN0IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbiYgY29t
cGlsZWRFeHRlbnNpb24gPSBjb250ZW50RXh0ZW5zaW9uLT5jb21waWxlZEV4dGVuc2lvbigpOwot
ICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyIGludGVycHJldGVyKGNvbXBpbGVkRXh0ZW5z
aW9uLmJ5dGVjb2RlKCksIGNvbXBpbGVkRXh0ZW5zaW9uLmJ5dGVjb2RlTGVuZ3RoKCksIGNvbnRl
bnRFeHRlbnNpb24tPm1fcGFnZXNVc2VkKTsKLSAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRl
cjo6QWN0aW9ucyB0cmlnZ2VyZWRBY3Rpb25zID0gaW50ZXJwcmV0ZXIuaW50ZXJwcmV0KHVybENT
dHJpbmcsIGZsYWdzKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQg
dXNlIGEgZGlmZmVyZW50IFZlY3Rvcjxib29sPiB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIG1lbW9y
eSBwYWdlcyBhcmUgdXNlZCB3aGVuIGRvaW5nIG1lbW9yeSByZXBvcnRpbmcuIE9yIGp1c3QgcmVt
b3ZlIHRoZSBtZW1vcnkgcmVwb3J0aW5nIGNvbXBsZXRlbHkuCisgICAgICAgIERGQUJ5dGVjb2Rl
SW50ZXJwcmV0ZXIgd2l0aG91dERvbWFpbnNJbnRlcnByZXRlcihjb21waWxlZEV4dGVuc2lvbi5m
aWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZSgpLCBjb21waWxlZEV4dGVuc2lvbi5maWx0ZXJz
V2l0aG91dERvbWFpbnNCeXRlY29kZUxlbmd0aCgpLCBjb250ZW50RXh0ZW5zaW9uLT5tX3BhZ2Vz
VXNlZCk7CisgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgdHJpZ2dlcmVk
QWN0aW9ucyA9IHdpdGhvdXREb21haW5zSW50ZXJwcmV0ZXIuaW50ZXJwcmV0KHVybENTdHJpbmcs
IGZsYWdzKTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUg
YW55IGFjdGlvbnMgdHJpZ2dlcmVkIHdpdGggaWYtIG9yIHVubGVzcy1kb21haW4gYW5kIGNoZWNr
IHRoZSBkb21haW4gaWYgdGhlcmUgYXJlLgorICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVy
IHdpdGhEb21haW5zSW50ZXJwcmV0ZXIoY29tcGlsZWRFeHRlbnNpb24uZmlsdGVyc1dpdGhEb21h
aW5zQnl0ZWNvZGUoKSwgY29tcGlsZWRFeHRlbnNpb24uZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNv
ZGVMZW5ndGgoKSwgY29udGVudEV4dGVuc2lvbi0+bV9wYWdlc1VzZWQpOworICAgICAgICAKKyAg
ICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyB3aXRoRG9tYWluc1Bvc3NpYmxl
QWN0aW9ucyA9IHdpdGhEb21haW5zSW50ZXJwcmV0ZXIuaW50ZXJwcmV0KHVybENTdHJpbmcsIGZs
YWdzKTsKKyAgICAgICAgaWYgKCF3aXRoRG9tYWluc1Bvc3NpYmxlQWN0aW9ucy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgZG9tYWluc0ludGVycHJldGVy
KGNvbXBpbGVkRXh0ZW5zaW9uLmRvbWFpbkZpbHRlcnNCeXRlY29kZSgpLCBjb21waWxlZEV4dGVu
c2lvbi5kb21haW5GaWx0ZXJzQnl0ZWNvZGVMZW5ndGgoKSwgY29udGVudEV4dGVuc2lvbi0+bV9w
YWdlc1VzZWQpOworICAgICAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBk
b21haW5zQWN0aW9ucyA9IGRvbWFpbnNJbnRlcnByZXRlci5pbnRlcnByZXQocmVzb3VyY2VMb2Fk
SW5mby5tYWluRG9jdW1lbnRVUkwuaG9zdCgpLnV0ZjgoKSwgZmxhZ3MpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIGlmRG9tYWluQWN0
aW9uczsKKyAgICAgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgdW5sZXNz
RG9tYWluQWN0aW9uczsKKyAgICAgICAgICAgIGZvciAodWludDY0X3QgYWN0aW9uIDogZG9tYWlu
c0FjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aW9uICYgSWZEb21haW5GbGFnKQor
ICAgICAgICAgICAgICAgICAgICBpZkRvbWFpbkFjdGlvbnMuYWRkKGFjdGlvbik7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB1bmxlc3NEb21haW5BY3Rpb25zLmFk
ZChhY3Rpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3Ig
KHVpbnQ2NF90IGFjdGlvbiA6IHdpdGhEb21haW5zUG9zc2libGVBY3Rpb25zKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGlmRG9tYWluQWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIElmIGFuIGlmLWRvbWFpbiB0cmlnZ2VyIG1hdGNoZXMsIGFkZCB0aGUg
YWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYWN0aW9uICYgSWZEb21haW5GbGFn
KTsKKyAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkQWN0aW9ucy5hZGQoYWN0aW9uICYgfklm
RG9tYWluRmxhZyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghKGFjdGlvbiAmIElmRG9t
YWluRmxhZykgJiYgIXVubGVzc0RvbWFpbkFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGFjdGlvbiBkaWQgbm90IG5lZWQgYW4gaWYtZG9t
YWluLCBpdCBtdXN0IGhhdmUgYmVlbiBhbiB1bmxlc3MtZG9tYWluIHJ1bGUuCisgICAgICAgICAg
ICAgICAgICAgIC8vIEFkZCB0aGUgYWN0aW9uIHVubGVzcyBpdCBtYXRjaGVkIGFuIHVubGVzcy1k
b21haW4gdHJpZ2dlci4KKyAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkQWN0aW9ucy5hZGQo
YWN0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGNvbnN0IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zID0gY29t
cGlsZWRFeHRlbnNpb24uYWN0aW9ucygpOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBhY3Rpb25z
TGVuZ3RoID0gY29tcGlsZWRFeHRlbnNpb24uYWN0aW9uc0xlbmd0aCgpOwpAQCAtMTE0LDggKzE0
Niw5IEBAIFZlY3RvcjxBY3Rpb24+IENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDoKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoIXNhd0lnbm9yZVByZXZpb3VzUnVsZXMpIHsK
LSAgICAgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgdW5pdmVyc2FsQWN0
aW9ucyA9IGludGVycHJldGVyLmFjdGlvbnNGcm9tREZBUm9vdCgpOworICAgICAgICAgICAgREZB
Qnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyB1bml2ZXJzYWxBY3Rpb25zID0gd2l0aG91dERv
bWFpbnNJbnRlcnByZXRlci5hY3Rpb25zRnJvbURGQVJvb3QoKTsKICAgICAgICAgICAgIGZvciAo
YXV0byBhY3Rpb25Mb2NhdGlvbiA6IHVuaXZlcnNhbEFjdGlvbnMpIHsKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGRlc2VyaWFsaXplIGFuIGFjdGlvbiBhbGwgdGhlIHdh
eSBpZiBpdCBpcyBhIGNzcy1kaXNwbGF5LW5vbmUgc2VsZWN0b3IuCiAgICAgICAgICAgICAgICAg
QWN0aW9uIGFjdGlvbiA9IEFjdGlvbjo6ZGVzZXJpYWxpemUoYWN0aW9ucywgYWN0aW9uc0xlbmd0
aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFjdGlvbkxvY2F0aW9uKSk7CiAgICAgICAgICAgICAg
ICAgYWN0aW9uLnNldEV4dGVuc2lvbklkZW50aWZpZXIoY29udGVudEV4dGVuc2lvbi0+aWRlbnRp
ZmllcigpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0
ZWNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9E
RkFCeXRlY29kZS5oCShyZXZpc2lvbiAxODM4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMSArNTIsMTMg
QEAgZW51bSBjbGFzcyBERkFCeXRlY29kZUluc3RydWN0aW9uIDogdWludAogICAgIC8vIEFwcGVu
ZEFjdGlvbiBoYXMgb25lIGFyZ3VtZW50OgogICAgIC8vIFRoZSBhY3Rpb24gdG8gYXBwZW5kICg0
IGJ5dGVzKS4KICAgICBBcHBlbmRBY3Rpb24sCisgICAgQXBwZW5kQWN0aW9uV2l0aElmRG9tYWlu
LAogICAgIAogICAgIC8vIFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbiBoYXMgdHdvIGFyZ3VtZW50
czoKLSAgICAvLyBUaGUgZmxhZ3MgdG8gY2hlY2sgYmVmb3JlIGFwcGVuZGluZyAoMiBieXRlcyks
Ci0gICAgLy8gVGhlIGFjdGlvbiB0byBhcHBlbmQgKDRieXRlcykuCisgICAgLy8gVGhlIGZsYWdz
IHRvIGNoZWNrIGJlZm9yZSBhcHBlbmRpbmcgKDIgYnl0ZXMpLgorICAgIC8vIFRoZSBhY3Rpb24g
dG8gYXBwZW5kICg0IGJ5dGVzKS4KICAgICBUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24sCisgICAg
VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uV2l0aElmRG9tYWluLAogCiAgICAgLy8gVGVybWluYXRl
IGhhcyBubyBhcmd1bWVudHMuCiAgICAgVGVybWluYXRlLApAQCAtNzYsOCArNzgsMTAgQEAgc3Rh
dGljIGlubGluZSBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplV2l0aAogICAgIGNhc2UgREZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZVJhbmdlQ2FzZUluc2Vuc2l0aXZlOgogICAgICAgICBy
ZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQ4X3QpICsg
c2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKHVuc2lnbmVkKTsKICAgICBjYXNlIERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbjoKKyAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbjoKICAgICAgICAgcmV0dXJuIHNpemVvZihERkFC
eXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1bnNpZ25lZCk7CiAgICAgY2FzZSBERkFCeXRl
Y29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb246CisgICAgY2FzZSBERkFC
eXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW46
CiAgICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2Yo
dWludDE2X3QpICsgc2l6ZW9mKHVuc2lnbmVkKTsKICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246OlRlcm1pbmF0ZToKICAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3Ry
dWN0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVj
b2RlQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODM4ODApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgsMTYgKzQ4LDIyIEBAIGlubGluZSB2b2lkIHNldDMyQml0cyhWZWN0
b3I8REZBQnl0ZWNvZGUKICAgICAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KCZieXRlY29k
ZVtpbmRleF0pID0gdmFsdWU7CiB9CiAKLXZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdEFw
cGVuZEFjdGlvbih1bnNpZ25lZCBhY3Rpb24pCit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVt
aXRBcHBlbmRBY3Rpb24odW5zaWduZWQgYWN0aW9uLCBib29sIGlmRG9tYWluKQogewotICAgIGFw
cGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3Ry
dWN0aW9uOjpBcHBlbmRBY3Rpb24pOworICAgIGlmIChpZkRvbWFpbikKKyAgICAgICAgYXBwZW5k
PERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbik7CisgICAgZWxzZQorICAgICAgICBhcHBlbmQ8
REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlv
bjo6QXBwZW5kQWN0aW9uKTsKICAgICBhcHBlbmQ8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIGFjdGlv
bik7CiB9CiAKLXZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdFRlc3RGbGFnc0FuZEFwcGVu
ZEFjdGlvbih1aW50MTZfdCBmbGFncywgdW5zaWduZWQgYWN0aW9uKQordm9pZCBERkFCeXRlY29k
ZUNvbXBpbGVyOjplbWl0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHVpbnQxNl90IGZsYWdzLCB1
bnNpZ25lZCBhY3Rpb24sIGJvb2wgaWZEb21haW4pCiB7CiAgICAgQVNTRVJUKGZsYWdzKTsKLSAg
ICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKTsKKyAgICBpZiAoaWZEb21haW4p
CisgICAgICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFC
eXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4p
OworICAgIGVsc2UKKyAgICAgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0
ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbik7
CiAgICAgYXBwZW5kPHVpbnQxNl90PihtX2J5dGVjb2RlLCBmbGFncyk7CiAgICAgYXBwZW5kPHVu
c2lnbmVkPihtX2J5dGVjb2RlLCBhY3Rpb24pOwogfQpAQCAtMTA2LDExICsxMTIsMTEgQEAgdm9p
ZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZSh1bgogICAgICAgICBtX25vZGVTdGFy
dE9mZnNldHNbaW5kZXhdID0gbV9ieXRlY29kZS5zaXplKCk7CiAKICAgICBmb3IgKHVpbnQ2NF90
IGFjdGlvbiA6IG5vZGUuYWN0aW9ucyhtX2RmYSkpIHsKLSAgICAgICAgLy8gSGlnaCBiaXRzIGFy
ZSB1c2VkIHRvIHN0b3JlIGZsYWdzLiBTZWUgY29tcGlsZVJ1bGVMaXN0LgorICAgICAgICAvLyBI
aWdoIGJpdHMgYXJlIHVzZWQgdG8gc3RvcmUgZmxhZ3MuIEEgYm9vbGVhbiBpcyBzdG9yZWQgaW4g
dGhlIDQ4dGggYml0LiBTZWUgY29tcGlsZVJ1bGVMaXN0LgogICAgICAgICBpZiAoYWN0aW9uICYg
MHhGRkZGMDAwMDAwMDApCi0gICAgICAgICAgICBlbWl0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9u
KHN0YXRpY19jYXN0PHVpbnQxNl90PihhY3Rpb24gPj4gMzIpLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oYWN0aW9uKSk7CisgICAgICAgICAgICBlbWl0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHN0
YXRpY19jYXN0PHVpbnQxNl90PihhY3Rpb24gPj4gMzIpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
YWN0aW9uKSwgYWN0aW9uICYgSWZEb21haW5GbGFnKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgZW1pdEFwcGVuZEFjdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0aW9uKSk7CisgICAg
ICAgICAgICBlbWl0QXBwZW5kQWN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihhY3Rpb24pLCBh
Y3Rpb24gJiBJZkRvbWFpbkZsYWcpOwogICAgIH0KICAgICAKICAgICAvLyBJZiB3ZSBqdW1wIHRv
IHRoZSByb290LCB3ZSBkb24ndCB3YW50IHRvIHJlLWFkZCBpdHMgYWN0aW9ucyB0byBhIEhhc2hT
ZXQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNv
bXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
REZBQnl0ZWNvZGVDb21waWxlci5oCShyZXZpc2lvbiAxODM4ODApCisrKyBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY2LDggKzY2LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVOb2RlVHJhbnNpdGlv
bnMoY29uc3QgREZBTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZUNoZWNrRm9yUmFuZ2UoY29uc3Qg
UmFuZ2UmKTsKIAotICAgIHZvaWQgZW1pdEFwcGVuZEFjdGlvbih1bnNpZ25lZCk7Ci0gICAgdm9p
ZCBlbWl0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHVpbnQxNl90IGZsYWdzLCB1bnNpZ25lZCk7
CisgICAgdm9pZCBlbWl0QXBwZW5kQWN0aW9uKHVuc2lnbmVkLCBib29sIGlmRG9tYWluKTsKKyAg
ICB2b2lkIGVtaXRUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24odWludDE2X3QgZmxhZ3MsIHVuc2ln
bmVkLCBib29sIGlmRG9tYWluKTsKICAgICB2b2lkIGVtaXRKdW1wKHVuc2lnbmVkIGRlc3RpbmF0
aW9uTm9kZUluZGV4KTsKICAgICB2b2lkIGVtaXRDaGVja1ZhbHVlKHVpbnQ4X3QgdmFsdWUsIHVu
c2lnbmVkIGRlc3RpbmF0aW9uTm9kZUluZGV4LCBib29sIGNhc2VTZW5zaXRpdmUpOwogICAgIHZv
aWQgZW1pdENoZWNrVmFsdWVSYW5nZSh1aW50OF90IGxvd1ZhbHVlLCB1aW50OF90IGhpZ2hWYWx1
ZSwgdW5zaWduZWQgZGVzdGluYXRpb25Ob2RlSW5kZXgsIGJvb2wgY2FzZVNlbnNpdGl2ZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJl
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9E
RkFCeXRlY29kZUludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTgzODgwKQorKysgU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDE4ICs1MCwyMCBAQCBzdGF0aWMgaW5saW5lIEludFR5cGUgZ2V0Qml0
cyhjb25zdCBERkFCCiAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IEludFR5cGUq
PigmYnl0ZWNvZGVbaW5kZXhdKTsKIH0KICAgICAKLXZvaWQgREZBQnl0ZWNvZGVJbnRlcnByZXRl
cjo6aW50ZXJwcmV0QXBwZW5kQWN0aW9uKHVuc2lnbmVkJiBwcm9ncmFtQ291bnRlciwgQWN0aW9u
cyYgYWN0aW9ucykKK3ZvaWQgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0QXBwZW5k
QWN0aW9uKHVuc2lnbmVkJiBwcm9ncmFtQ291bnRlciwgQWN0aW9ucyYgYWN0aW9ucywgYm9vbCBp
ZkRvbWFpbikKIHsKLSAgICBBU1NFUlQoZ2V0Qml0czxERkFCeXRlY29kZUluc3RydWN0aW9uPiht
X2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciwgbV9wYWdlc1VzZWQp
ID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7Ci0gICAgYWN0aW9ucy5h
ZGQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1f
Ynl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSwgbV9w
YWdlc1VzZWQpKSk7CisgICAgQVNTRVJUKGdldEJpdHM8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4o
bV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNVc2Vk
KSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24KKyAgICAgICAgfHwgZ2V0
Qml0czxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3Ro
LCBwcm9ncmFtQ291bnRlciwgbV9wYWdlc1VzZWQpID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbik7CisgICAgYWN0aW9ucy5hZGQoKGlmRG9tYWluID8g
SWZEb21haW5GbGFnIDogMCkgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZ2V0Qml0czx1bnNpZ25l
ZD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2Yo
REZBQnl0ZWNvZGUpLCBtX3BhZ2VzVXNlZCkpKTsKICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0
cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFj
dGlvbik7CiB9CiAKLXZvaWQgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0VGVzdEZs
YWdzQW5kQXBwZW5kQWN0aW9uKHVuc2lnbmVkJiBwcm9ncmFtQ291bnRlciwgdWludDE2X3QgZmxh
Z3MsIEFjdGlvbnMmIGFjdGlvbnMpCit2b2lkIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVy
cHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbih1bnNpZ25lZCYgcHJvZ3JhbUNvdW50ZXIsIHVp
bnQxNl90IGZsYWdzLCBBY3Rpb25zJiBhY3Rpb25zLCBib29sIGlmRG9tYWluKQogewotICAgIEFT
U0VSVChnZXRCaXRzPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCkgPT0gREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKTsKKyAgICBBU1NFUlQoZ2V0Qml0czxE
RkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9n
cmFtQ291bnRlciwgbV9wYWdlc1VzZWQpID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RG
bGFnc0FuZEFwcGVuZEFjdGlvbgorICAgICAgICB8fCBnZXRCaXRzPERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb24+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3Bh
Z2VzVXNlZCkgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0
aW9uV2l0aElmRG9tYWluKTsKICAgICBpZiAoZmxhZ3MgJiBnZXRCaXRzPHVpbnQxNl90PihtX2J5
dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRl
Y29kZSksIG1fcGFnZXNVc2VkKSkKLSAgICAgICAgYWN0aW9ucy5hZGQoc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHBy
b2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSArIHNpemVvZih1aW50MTZfdCksIG1f
cGFnZXNVc2VkKSkpOworICAgICAgICBhY3Rpb25zLmFkZCgoaWZEb21haW4gPyBJZkRvbWFpbkZs
YWcgOiAwKSB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVj
b2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29k
ZSkgKyBzaXplb2YodWludDE2X3QpLCBtX3BhZ2VzVXNlZCkpKTsKICAgICBwcm9ncmFtQ291bnRl
ciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbik7CiB9CiAKQEAgLTc2LDcgKzc4LDcgQEAgREZBQnl0
ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlYwogICAgIHdoaWxlIChwcm9ncmFtQ291
bnRlciA8IGRmYUJ5dGVjb2RlTGVuZ3RoKSB7CiAgICAgICAgIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b24gaW5zdHJ1Y3Rpb24gPSBzdGF0aWNfY2FzdDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5
dGVjb2RlW3Byb2dyYW1Db3VudGVyXSk7CiAgICAgICAgIGlmIChpbnN0cnVjdGlvbiA9PSBERkFC
eXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pCi0gICAgICAgICAgICBpbnRlcnByZXRB
cHBlbmRBY3Rpb24ocHJvZ3JhbUNvdW50ZXIsIGFjdGlvbnMpOworICAgICAgICAgICAgaW50ZXJw
cmV0QXBwZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBhY3Rpb25zLCBmYWxzZSk7CiAgICAgICAg
IGVsc2UgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFn
c0FuZEFwcGVuZEFjdGlvbikKICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0
aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5k
QXBwZW5kQWN0aW9uKTsKICAgICAgICAgZWxzZQpAQCAtMTA3LDcgKzEwOSw3IEBAIERGQUJ5dGVj
b2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMKICAgICAgICAgICAgICAgICBpZiAoaW5z
dHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKQogICAgICAg
ICAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1l
bnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CiAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZs
YWdzQW5kQXBwZW5kQWN0aW9uKQotICAgICAgICAgICAgICAgICAgICBpbnRlcnByZXRUZXN0Rmxh
Z3NBbmRBcHBlbmRBY3Rpb24ocHJvZ3JhbUNvdW50ZXIsIGZsYWdzLCBhY3Rpb25zKTsKKyAgICAg
ICAgICAgICAgICAgICAgaW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHByb2dyYW1D
b3VudGVyLCBmbGFncywgYWN0aW9ucywgZmFsc2UpOwogICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yMDMsMTEgKzIwNSwx
OSBAQCBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBERkFC
eXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb246Ci0gICAgICAgICAgICAgICAgaW50ZXJw
cmV0QXBwZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBhY3Rpb25zKTsKKyAgICAgICAgICAgICAg
ICBpbnRlcnByZXRBcHBlbmRBY3Rpb24ocHJvZ3JhbUNvdW50ZXIsIGFjdGlvbnMsIGZhbHNlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbjoK
KyAgICAgICAgICAgICAgICBpbnRlcnByZXRBcHBlbmRBY3Rpb24ocHJvZ3JhbUNvdW50ZXIsIGFj
dGlvbnMsIHRydWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5k
QXBwZW5kQWN0aW9uOgotICAgICAgICAgICAgICAgIGludGVycHJldFRlc3RGbGFnc0FuZEFwcGVu
ZEFjdGlvbihwcm9ncmFtQ291bnRlciwgZmxhZ3MsIGFjdGlvbnMpOworICAgICAgICAgICAgICAg
IGludGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbihwcm9ncmFtQ291bnRlciwgZmxhZ3Ms
IGFjdGlvbnMsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBl
bmRBY3Rpb25XaXRoSWZEb21haW46CisgICAgICAgICAgICAgICAgaW50ZXJwcmV0VGVzdEZsYWdz
QW5kQXBwZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBmbGFncywgYWN0aW9ucywgdHJ1ZSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVj
b2RlSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmgJKHJldmlzaW9uIDE4Mzg4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNjMsOCArNjMsOCBAQCBwdWJsaWM6CiAgICAgQWN0aW9ucyBhY3Rp
b25zRnJvbURGQVJvb3QoKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGludGVycHJldEFwcGVuZEFj
dGlvbih1bnNpZ25lZCYgcHJvZ3JhbUNvdW50ZXIsIEFjdGlvbnMmKTsKLSAgICB2b2lkIGludGVy
cHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbih1bnNpZ25lZCYgcHJvZ3JhbUNvdW50ZXIsIHVp
bnQxNl90IGZsYWdzLCBBY3Rpb25zJik7CisgICAgdm9pZCBpbnRlcnByZXRBcHBlbmRBY3Rpb24o
dW5zaWduZWQmIHByb2dyYW1Db3VudGVyLCBBY3Rpb25zJiwgYm9vbCBpZkRvbWFpbik7CisgICAg
dm9pZCBpbnRlcnByZXRUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24odW5zaWduZWQmIHByb2dyYW1D
b3VudGVyLCB1aW50MTZfdCBmbGFncywgQWN0aW9ucyYsIGJvb2wgaWZEb21haW4pOwogICAgIGNv
bnN0IERGQUJ5dGVjb2RlKiBtX2J5dGVjb2RlOwogICAgIGNvbnN0IHVuc2lnbmVkIG1fYnl0ZWNv
ZGVMZW5ndGg7CiAgICAgVmVjdG9yPGJvb2w+JiBtX3BhZ2VzVXNlZDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZEluZm8uaAkocmV2aXNpb24gMTgzODgwKQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
NTMsNiArNTMsMTIgQEAgZW51bSBjbGFzcyBMb2FkVHlwZSA6IHVpbnQxNl90IHsKIAogdHlwZWRl
ZiB1aW50MTZfdCBSZXNvdXJjZUZsYWdzOwogCisvLyBUaGUgZmlyc3QgMzIgYml0cyBvZiBhIHVp
bnQ2NF90IGFjdGlvbiBhcmUgdXNlZCBmb3IgdGhlIGFjdGlvbiBsb2NhdGlvbi4KKy8vIFRoZSBu
ZXh0IDE2IGJpdHMgYXJlIHVzZWQgZm9yIHRoZSBmbGFncyAoUmVzb3VyY2VUeXBlIGFuZCBMb2Fk
VHlwZSkuCisvLyBUaGUgbmV4dCBiaXQgaXMgdXNlZCB0byBtYXJrIGFjdGlvbnMgdGhhdCBhcmUg
ZnJvbSBhIHJ1bGUgd2l0aCBhbiBpZi1kb21haW4gY29uZGl0aW9uLgorLy8gVGhlIHZhbHVlcyAt
MSBhbmQgLTIgYXJlIHVzZWQgZm9yIHJlbW92ZWQgYW5kIGVtcHR5IHZhbHVlcyBpbiBIYXNoVGFi
bGVzLgorY29uc3QgdWludDY0X3QgSWZEb21haW5GbGFnID0gMHgwMDAxMDAwMDAwMDAwMDAwOwor
CiBSZXNvdXJjZVR5cGUgdG9SZXNvdXJjZVR5cGUoQ2FjaGVkUmVzb3VyY2U6OlR5cGUpOwogdWlu
dDE2X3QgcmVhZFJlc291cmNlVHlwZShjb25zdCBTdHJpbmcmKTsKIHVpbnQxNl90IHJlYWRMb2Fk
VHlwZShjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDA0MSkKKysr
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDE1LTA1LTA5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gU3VwcG9ydCBkb21haW4tc3BlY2lmaWMg
cnVsZXMgYW5kIGV4Y2VwdGlvbnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDQ4MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFNoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmZpbHRlcnNXaXRo
b3V0RG9tYWluc0J5dGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uOjpmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZUxlbmd0aCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6ZmlsdGVyc1dpdGhEb21haW5z
Qnl0ZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246
OmZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlTGVuZ3RoKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpkb21haW5GaWx0ZXJzQnl0ZWNvZGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmRvbWFpbkZpbHRlcnNCeXRl
Y29kZUxlbmd0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bjo6Ynl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb246OmJ5dGVjb2RlTGVuZ3RoKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQv
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmg6CisgICAgICAgICogU2hhcmVkL1dlYkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbkRhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb25EYXRhOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmg6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbkRhdGE6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5j
cHA6CisgICAgICAgIChBUEk6OkNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YTo6ZmlsZVNpemUpOgor
ICAgICAgICAoQVBJOjplbmNvZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEpOgorICAgICAgICAo
QVBJOjpkZWNvZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEpOgorICAgICAgICAoQVBJOjpjb21w
aWxlZFRvRmlsZSk6CisgICAgICAgIChBUEk6OmNyZWF0ZUV4dGVuc2lvbik6CisKIDIwMTUtMDUt
MDkgIFlvYXYgV2Vpc3MgIDx5b2F2QHlvYXYud3M+CiAKICAgICAgICAgUmVtb3ZlIHRoZSBQSUNU
VVJFX1NJWkVTIGJ1aWxkIGZsYWcKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwCShyZXZpc2lvbiAxODM4ODApCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsMTQgKzQ0LDM0IEBAIFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbjo6fldlYkNvbXBpbGUKIHsKIH0KIAotY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkRGQUJ5dGVjb2RlKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmJ5dGVjb2RlKCkg
Y29uc3QKK2NvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSogV2Vi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpERkFCeXRlY29kZSo+KG1fZGF0YS5kYXRhLT5kYXRhKCkpICsgbV9kYXRhLmJ5
dGVjb2RlT2Zmc2V0OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqPihtX2RhdGEuZGF0YS0+ZGF0YSgpKSArIG1fZGF0
YS5maWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZU9mZnNldDsKIH0KIAotdW5zaWduZWQgV2Vi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpieXRlY29kZUxlbmd0aCgpIGNvbnN0Cit1bnNpZ25l
ZCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVj
b2RlTGVuZ3RoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLmJ5dGVjb2RlU2l6ZTsKKyAg
ICByZXR1cm4gbV9kYXRhLmZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlU2l6ZTsKK30KKwor
Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb246OmZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OkRGQUJ5dGVjb2RlKj4obV9kYXRhLmRhdGEtPmRhdGEoKSkgKyBtX2RhdGEuZmlsdGVyc1dpdGhE
b21haW5zQnl0ZWNvZGVPZmZzZXQ7Cit9CisKK3Vuc2lnbmVkIFdlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbjo6ZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGVMZW5ndGgoKSBjb25zdAoreworICAg
IHJldHVybiBtX2RhdGEuZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGVTaXplOworfQorCitjb25z
dCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqIFdlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbjo6ZG9tYWluRmlsdGVyc0J5dGVjb2RlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVj
b2RlKj4obV9kYXRhLmRhdGEtPmRhdGEoKSkgKyBtX2RhdGEuZG9tYWluRmlsdGVyc0J5dGVjb2Rl
T2Zmc2V0OworfQorCit1bnNpZ25lZCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmRvbWFp
bkZpbHRlcnNCeXRlY29kZUxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS5kb21h
aW5GaWx0ZXJzQnl0ZWNvZGVTaXplOwogfQogCiBjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6U2VyaWFsaXplZEFjdGlvbkJ5dGUqIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6
YWN0aW9ucygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oCShyZXZpc2lvbiAxODM4ODApCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDggKzQ0LDEzIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uKFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmJik7CiAKLSAg
ICB2aXJ0dWFsIGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSog
Ynl0ZWNvZGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVjb2Rl
TGVuZ3RoKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBjb25zdCBXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqIGZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2Rl
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB1bnNpZ25lZCBmaWx0ZXJzV2l0aG91dERv
bWFpbnNCeXRlY29kZUxlbmd0aCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgY29uc3Qg
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBmaWx0ZXJzV2l0aERvbWFp
bnNCeXRlY29kZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdW5zaWduZWQgZmlsdGVy
c1dpdGhEb21haW5zQnl0ZWNvZGVMZW5ndGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSogZG9tYWluRmls
dGVyc0J5dGVjb2RlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB1bnNpZ25lZCBkb21h
aW5GaWx0ZXJzQnl0ZWNvZGVMZW5ndGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKICAgICB2aXJ0
dWFsIGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0
ZSogYWN0aW9ucygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdW5zaWduZWQgYWN0aW9u
c0xlbmd0aCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmNwcAko
cmV2aXNpb24gMTgzODgwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCwxMiBAQCB2
b2lkIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE6OmVuCiAKICAgICBlbmNvZGVyIDw8
IGFjdGlvbnNPZmZzZXQ7CiAgICAgZW5jb2RlciA8PCBhY3Rpb25zU2l6ZTsKLSAgICBlbmNvZGVy
IDw8IGJ5dGVjb2RlT2Zmc2V0OwotICAgIGVuY29kZXIgPDwgYnl0ZWNvZGVTaXplOworICAgIGVu
Y29kZXIgPDwgZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVPZmZzZXQ7CisgICAgZW5jb2Rl
ciA8PCBmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZVNpemU7CisgICAgZW5jb2RlciA8PCBm
aWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZU9mZnNldDsKKyAgICBlbmNvZGVyIDw8IGZpbHRlcnNX
aXRoRG9tYWluc0J5dGVjb2RlU2l6ZTsKKyAgICBlbmNvZGVyIDw8IGRvbWFpbkZpbHRlcnNCeXRl
Y29kZU9mZnNldDsKKyAgICBlbmNvZGVyIDw8IGRvbWFpbkZpbHRlcnNCeXRlY29kZVNpemU7CiB9
CiAKIGJvb2wgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YTo6ZGVjb2RlKElQQzo6QXJn
dW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiBj
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKQpAQCAtNTUsOSArNTksMTcgQEAgYm9vbCBXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjpkZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmFjdGlv
bnNTaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
Y29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5ieXRlY29kZU9mZnNldCkpCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmZpbHRlcnNXaXRob3V0
RG9tYWluc0J5dGVjb2RlT2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5ieXRlY29kZVNpemUp
KQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5m
aWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZVNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmZp
bHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlT2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5maWx0
ZXJzV2l0aERvbWFpbnNCeXRlY29kZVNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmRvbWFpbkZp
bHRlcnNCeXRlY29kZU9mZnNldCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuZG9tYWluRmlsdGVyc0J5
dGVjb2RlU2l6ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YS5oCShyZXZpc2lvbiAxODM4ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NSwxMyArNDUsMTcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgV2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YShSZWZQdHI8U2hhcmVkTWVtb3J5PiYmIGRhdGEsIE5l
dHdvcmtDYWNoZTo6RGF0YSBmaWxlRGF0YSwgdW5zaWduZWQgYWN0aW9uc09mZnNldCwgdW5zaWdu
ZWQgYWN0aW9uc1NpemUsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCBieXRlY29k
ZVNpemUpCisgICAgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YShSZWZQdHI8U2hhcmVk
TWVtb3J5PiYmIGRhdGEsIE5ldHdvcmtDYWNoZTo6RGF0YSBmaWxlRGF0YSwgdW5zaWduZWQgYWN0
aW9uc09mZnNldCwgdW5zaWduZWQgYWN0aW9uc1NpemUsIHVuc2lnbmVkIGZpbHRlcnNXaXRob3V0
RG9tYWluc0J5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCBmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRl
Y29kZVNpemUsIHVuc2lnbmVkIGZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlT2Zmc2V0LCB1bnNp
Z25lZCBmaWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZVNpemUsIHVuc2lnbmVkIGRvbWFpbkZpbHRl
cnNCeXRlY29kZU9mZnNldCwgdW5zaWduZWQgZG9tYWluRmlsdGVyc0J5dGVjb2RlU2l6ZSkKICAg
ICAgICAgOiBkYXRhKFdURjo6bW92ZShkYXRhKSkKICAgICAgICAgLCBmaWxlRGF0YShmaWxlRGF0
YSkKICAgICAgICAgLCBhY3Rpb25zT2Zmc2V0KGFjdGlvbnNPZmZzZXQpCiAgICAgICAgICwgYWN0
aW9uc1NpemUoYWN0aW9uc1NpemUpCi0gICAgICAgICwgYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQpCi0gICAgICAgICwgYnl0ZWNvZGVTaXplKGJ5dGVjb2RlU2l6ZSkKKyAgICAgICAgLCBm
aWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZU9mZnNldChmaWx0ZXJzV2l0aG91dERvbWFpbnNC
eXRlY29kZU9mZnNldCkKKyAgICAgICAgLCBmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZVNp
emUoZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVTaXplKQorICAgICAgICAsIGZpbHRlcnNX
aXRoRG9tYWluc0J5dGVjb2RlT2Zmc2V0KGZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlT2Zmc2V0
KQorICAgICAgICAsIGZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlU2l6ZShmaWx0ZXJzV2l0aERv
bWFpbnNCeXRlY29kZVNpemUpCisgICAgICAgICwgZG9tYWluRmlsdGVyc0J5dGVjb2RlT2Zmc2V0
KGRvbWFpbkZpbHRlcnNCeXRlY29kZU9mZnNldCkKKyAgICAgICAgLCBkb21haW5GaWx0ZXJzQnl0
ZWNvZGVTaXplKGRvbWFpbkZpbHRlcnNCeXRlY29kZVNpemUpCiAgICAgewogICAgIH0KIApAQCAt
NjIsOCArNjYsMTIgQEAgcHVibGljOgogICAgIE5ldHdvcmtDYWNoZTo6RGF0YSBmaWxlRGF0YTsK
ICAgICB1bnNpZ25lZCBhY3Rpb25zT2Zmc2V0IHsgMCB9OwogICAgIHVuc2lnbmVkIGFjdGlvbnNT
aXplIHsgMCB9OwotICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0IHsgMCB9OwotICAgIHVuc2ln
bmVkIGJ5dGVjb2RlU2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBmaWx0ZXJzV2l0aG91dERvbWFp
bnNCeXRlY29kZU9mZnNldCB7IDAgfTsKKyAgICB1bnNpZ25lZCBmaWx0ZXJzV2l0aG91dERvbWFp
bnNCeXRlY29kZVNpemUgeyAwIH07CisgICAgdW5zaWduZWQgZmlsdGVyc1dpdGhEb21haW5zQnl0
ZWNvZGVPZmZzZXQgeyAwIH07CisgICAgdW5zaWduZWQgZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNv
ZGVTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIGRvbWFpbkZpbHRlcnNCeXRlY29kZU9mZnNldCB7
IDAgfTsKKyAgICB1bnNpZ25lZCBkb21haW5GaWx0ZXJzQnl0ZWNvZGVTaXplIHsgMCB9OwogfTsK
IAogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCShyZXZpc2lvbiAxODM4ODApCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxMSArNzQsMjIgQEAgc3RhdGljIFN0cmluZyBj
b25zdHJ1Y3RlZFBhdGgoY29uc3QgU3RyaQogICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQoYmFzZSwgIkNvbnRlbnRFeHRlbnNpb24tIiArIFdlYkNvcmU6OmVuY29k
ZUZvckZpbGVOYW1lKGlkZW50aWZpZXIpKTsKIH0KIAotY29uc3Qgc2l6ZV90IENvbnRlbnRFeHRl
bnNpb25GaWxlSGVhZGVyU2l6ZSA9IHNpemVvZih1aW50MzJfdCkgKyAyICogc2l6ZW9mKHVpbnQ2
NF90KTsKK2NvbnN0IHNpemVfdCBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUgPSBzaXpl
b2YodWludDMyX3QpICsgNCAqIHNpemVvZih1aW50NjRfdCk7CiBzdHJ1Y3QgQ29udGVudEV4dGVu
c2lvbk1ldGFEYXRhIHsKLSAgICB1aW50MzJfdCB2ZXJzaW9uIHsgMSB9OworICAgIHVpbnQzMl90
IHZlcnNpb24geyAyIH07CiAgICAgdWludDY0X3QgYWN0aW9uc1NpemUgeyAwIH07Ci0gICAgdWlu
dDY0X3QgYnl0ZWNvZGVTaXplIHsgMCB9OworICAgIHVpbnQ2NF90IGZpbHRlcnNXaXRob3V0RG9t
YWluc0J5dGVjb2RlU2l6ZSB7IDAgfTsKKyAgICB1aW50NjRfdCBmaWx0ZXJzV2l0aERvbWFpbkJ5
dGVjb2RlU2l6ZSB7IDAgfTsKKyAgICB1aW50NjRfdCBkb21haW5GaWx0ZXJzQnl0ZWNvZGVTaXpl
IHsgMCB9OworICAgIAorICAgIHNpemVfdCBmaWxlU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplCisgICAgICAgICAgICArIGFj
dGlvbnNTaXplCisgICAgICAgICAgICArIGZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlU2l6
ZQorICAgICAgICAgICAgKyBmaWx0ZXJzV2l0aERvbWFpbkJ5dGVjb2RlU2l6ZQorICAgICAgICAg
ICAgKyBkb21haW5GaWx0ZXJzQnl0ZWNvZGVTaXplOworICAgIH0KIH07CiAKIHN0YXRpYyBEYXRh
IGVuY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShjb25zdCBDb250ZW50RXh0ZW5zaW9uTWV0
YURhdGEmIG1ldGFEYXRhKQpAQCAtODcsNyArOTgsOSBAQCBzdGF0aWMgRGF0YSBlbmNvZGVDb250
ZW50RXh0ZW5zaW9uTWV0YURhCiAKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLnZlcnNpb247CiAg
ICAgZW5jb2RlciA8PCBtZXRhRGF0YS5hY3Rpb25zU2l6ZTsKLSAgICBlbmNvZGVyIDw8IG1ldGFE
YXRhLmJ5dGVjb2RlU2l6ZTsKKyAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0
RG9tYWluc0J5dGVjb2RlU2l6ZTsKKyAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmZpbHRlcnNXaXRo
RG9tYWluQnl0ZWNvZGVTaXplOworICAgIGVuY29kZXIgPDwgbWV0YURhdGEuZG9tYWluRmlsdGVy
c0J5dGVjb2RlU2l6ZTsKIAogICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlclNpemUoKSA9PSBDb250
ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUpOwogICAgIHJldHVybiBEYXRhKGVuY29kZXIuYnVm
ZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKQEAgLTEwNyw3ICsxMjAsMTEgQEAgc3RhdGlj
IGJvb2wgZGVjb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmFjdGlvbnNTaXplKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSht
ZXRhRGF0YS5ieXRlY29kZVNpemUpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFE
YXRhLmZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlU2l6ZSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuZmlsdGVyc1dp
dGhEb21haW5CeXRlY29kZVNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmRvbWFpbkZpbHRlcnNCeXRlY29kZVNpemUp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTYzLDM5ICsxODAsNjIgQEAgc3RhdGljIHN0ZDo6ZXJy
b3JfY29kZSBjb21waWxlZFRvRmlsZShTdAogICAgICAgICAgICAgOiBtX2ZpbGVIYW5kbGUoZmls
ZUhhbmRsZSkKICAgICAgICAgICAgICwgbV9tZXRhRGF0YShtZXRhRGF0YSkKICAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5hY3Rpb25zU2l6ZSk7CisgICAgICAgICAgICBB
U1NFUlQoIW1ldGFEYXRhLmZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlU2l6ZSk7CisgICAg
ICAgICAgICBBU1NFUlQoIW1ldGFEYXRhLmZpbHRlcnNXaXRoRG9tYWluQnl0ZWNvZGVTaXplKTsK
KyAgICAgICAgICAgIEFTU0VSVCghbWV0YURhdGEuZG9tYWluRmlsdGVyc0J5dGVjb2RlU2l6ZSk7
CiAgICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVCeXRlY29kZShWZWN0b3I8
REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUpIG92ZXJyaWRlCisgICAgICAgIAorICAgICAgICB2aXJ0
dWFsIHZvaWQgd3JpdGVGaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZShWZWN0b3I8REZBQnl0
ZWNvZGU+JiYgYnl0ZWNvZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9maWx0
ZXJzV2l0aERvbWFpbkJ5dGVjb2RlV3JpdHRlbik7CisgICAgICAgICAgICBBU1NFUlQoIW1fZG9t
YWluRmlsdGVyc0J5dGVjb2RlV3JpdHRlbik7CisgICAgICAgICAgICBtX2ZpbHRlcnNXaXRob3V0
RG9tYWluc0J5dGVjb2RlV3JpdHRlbiArPSBieXRlY29kZS5zaXplKCk7CisgICAgICAgICAgICB3
cml0ZVRvRmlsZShEYXRhKGJ5dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZUZpbHRlcnNXaXRoRG9t
YWluc0J5dGVjb2RlKFZlY3RvcjxERkFCeXRlY29kZT4mJiBieXRlY29kZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKCFtX2RvbWFpbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4pOworICAg
ICAgICAgICAgbV9maWx0ZXJzV2l0aERvbWFpbkJ5dGVjb2RlV3JpdHRlbiArPSBieXRlY29kZS5z
aXplKCk7CisgICAgICAgICAgICB3cml0ZVRvRmlsZShEYXRhKGJ5dGVjb2RlLmRhdGEoKSwgYnl0
ZWNvZGUuc2l6ZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZURvbWFpbkZpbHRlcnNCeXRlY29kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYgYnl0ZWNv
ZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fYnl0ZWNvZGVXcml0dGVuICs9IGJ5dGVjb2Rl
LnNpemUoKTsKLSAgICAgICAgICAgIHdyaXRlKERhdGEoYnl0ZWNvZGUuZGF0YSgpLCBieXRlY29k
ZS5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fZG9tYWluRmlsdGVyc0J5dGVjb2RlV3JpdHRlbiAr
PSBieXRlY29kZS5zaXplKCk7CisgICAgICAgICAgICB3cml0ZVRvRmlsZShEYXRhKGJ5dGVjb2Rl
LmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFs
IHZvaWQgd3JpdGVBY3Rpb25zKFZlY3RvcjxTZXJpYWxpemVkQWN0aW9uQnl0ZT4mJiBhY3Rpb25z
KSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVXcml0
dGVuKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9maWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29k
ZVdyaXR0ZW4pOworICAgICAgICAgICAgQVNTRVJUKCFtX2ZpbHRlcnNXaXRoRG9tYWluQnl0ZWNv
ZGVXcml0dGVuKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9kb21haW5GaWx0ZXJzQnl0ZWNvZGVX
cml0dGVuKTsKICAgICAgICAgICAgIEFTU0VSVCghbV9hY3Rpb25zV3JpdHRlbik7CiAgICAgICAg
ICAgICBtX2FjdGlvbnNXcml0dGVuICs9IGFjdGlvbnMuc2l6ZSgpOwotICAgICAgICAgICAgd3Jp
dGUoRGF0YShhY3Rpb25zLmRhdGEoKSwgYWN0aW9ucy5zaXplKCkpKTsKKyAgICAgICAgICAgIHdy
aXRlVG9GaWxlKERhdGEoYWN0aW9ucy5kYXRhKCksIGFjdGlvbnMuc2l6ZSgpKSk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZSgpIG92ZXJyaWRlCiAg
ICAgICAgIHsKICAgICAgICAgICAgIG1fbWV0YURhdGEuYWN0aW9uc1NpemUgPSBtX2FjdGlvbnNX
cml0dGVuOwotICAgICAgICAgICAgbV9tZXRhRGF0YS5ieXRlY29kZVNpemUgPSBtX2J5dGVjb2Rl
V3JpdHRlbjsKKyAgICAgICAgICAgIG1fbWV0YURhdGEuZmlsdGVyc1dpdGhvdXREb21haW5zQnl0
ZWNvZGVTaXplID0gbV9maWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZVdyaXR0ZW47CisgICAg
ICAgICAgICBtX21ldGFEYXRhLmZpbHRlcnNXaXRoRG9tYWluQnl0ZWNvZGVTaXplID0gbV9maWx0
ZXJzV2l0aERvbWFpbkJ5dGVjb2RlV3JpdHRlbjsKKyAgICAgICAgICAgIG1fbWV0YURhdGEuZG9t
YWluRmlsdGVyc0J5dGVjb2RlU2l6ZSA9IG1fZG9tYWluRmlsdGVyc0J5dGVjb2RlV3JpdHRlbjsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgRGF0YSBoZWFkZXIgPSBlbmNvZGVDb250ZW50RXh0
ZW5zaW9uTWV0YURhdGEobV9tZXRhRGF0YSk7CiAgICAgICAgICAgICBpZiAoIW1fZmlsZUVycm9y
ICYmIFdlYkNvcmU6OnNlZWtGaWxlKG1fZmlsZUhhbmRsZSwgMGxsLCBXZWJDb3JlOjpGaWxlU2Vl
a09yaWdpbjo6U2Vla0Zyb21CZWdpbm5pbmcpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgV2Vi
Q29yZTo6Y2xvc2VGaWxlKG1fZmlsZUhhbmRsZSk7CiAgICAgICAgICAgICAgICAgbV9maWxlRXJy
b3IgPSB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgd3JpdGUoaGVhZGVyKTsKKyAg
ICAgICAgICAgIHdyaXRlVG9GaWxlKGhlYWRlcik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGJvb2wgaGFkRXJyb3JXaGlsZVdyaXRpbmdUb0ZpbGUoKSB7IHJldHVybiBtX2ZpbGVFcnJv
cjsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCB3cml0ZShjb25zdCBEYXRhJiBkYXRh
KQorICAgICAgICB2b2lkIHdyaXRlVG9GaWxlKGNvbnN0IERhdGEmIGRhdGEpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmICghbV9maWxlRXJyb3IgJiYgIXdyaXRlRGF0YVRvRmlsZShkYXRhLCBt
X2ZpbGVIYW5kbGUpKSB7CiAgICAgICAgICAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKG1fZmls
ZUhhbmRsZSk7CkBAIC0yMDUsNyArMjQ1LDkgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBjb21w
aWxlZFRvRmlsZShTdAogICAgICAgICAKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFu
ZGxlIG1fZmlsZUhhbmRsZTsKICAgICAgICAgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtX21l
dGFEYXRhOwotICAgICAgICBzaXplX3QgbV9ieXRlY29kZVdyaXR0ZW4geyAwIH07CisgICAgICAg
IHNpemVfdCBtX2ZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlV3JpdHRlbiB7IDAgfTsKKyAg
ICAgICAgc2l6ZV90IG1fZmlsdGVyc1dpdGhEb21haW5CeXRlY29kZVdyaXR0ZW4geyAwIH07Cisg
ICAgICAgIHNpemVfdCBtX2RvbWFpbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4geyAwIH07CiAgICAg
ICAgIHNpemVfdCBtX2FjdGlvbnNXcml0dGVuIHsgMCB9OwogICAgICAgICBib29sIG1fZmlsZUVy
cm9yIHsgZmFsc2UgfTsKICAgICB9OwpAQCAtMjI4LDcgKzI3MCw3IEBAIHN0YXRpYyBzdGQ6OmVy
cm9yX2NvZGUgY29tcGlsZWRUb0ZpbGUoU3QKICAgICBpZiAoY29tcGlsYXRpb25DbGllbnQuaGFk
RXJyb3JXaGlsZVdyaXRpbmdUb0ZpbGUoKSkKICAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOwogICAgIAotICAgIG1hcHBlZERhdGEg
PSBtYXBGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUsIDAsIENvbnRlbnRFeHRlbnNpb25GaWxlSGVh
ZGVyU2l6ZSArIG1ldGFEYXRhLmFjdGlvbnNTaXplICsgbWV0YURhdGEuYnl0ZWNvZGVTaXplKTsK
KyAgICBtYXBwZWREYXRhID0gbWFwRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlLCAwLCBtZXRhRGF0
YS5maWxlU2l6ZSgpKTsKICAgICBXZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRs
ZSk7CiAKICAgICBpZiAobWFwcGVkRGF0YS5pc051bGwoKSkKQEAgLTI0OCw4ICsyOTAsMTggQEAg
c3RhdGljIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPgogICAgICAgICBmaWxlRGF0
YSwKICAgICAgICAgQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplLAogICAgICAgICBtZXRh
RGF0YS5hY3Rpb25zU2l6ZSwKLSAgICAgICAgQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXpl
ICsgbWV0YURhdGEuYWN0aW9uc1NpemUsCi0gICAgICAgIG1ldGFEYXRhLmJ5dGVjb2RlU2l6ZQor
ICAgICAgICBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUKKyAgICAgICAgICAgICsgbWV0
YURhdGEuYWN0aW9uc1NpemUsCisgICAgICAgIG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0RG9tYWlu
c0J5dGVjb2RlU2l6ZSwKKyAgICAgICAgQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplCisg
ICAgICAgICAgICArIG1ldGFEYXRhLmFjdGlvbnNTaXplCisgICAgICAgICAgICArIG1ldGFEYXRh
LmZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlU2l6ZSwKKyAgICAgICAgbWV0YURhdGEuZmls
dGVyc1dpdGhEb21haW5CeXRlY29kZVNpemUsCisgICAgICAgIENvbnRlbnRFeHRlbnNpb25GaWxl
SGVhZGVyU2l6ZQorICAgICAgICAgICAgKyBtZXRhRGF0YS5hY3Rpb25zU2l6ZQorICAgICAgICAg
ICAgKyBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZVNpemUKKyAgICAgICAg
ICAgICsgbWV0YURhdGEuZmlsdGVyc1dpdGhEb21haW5CeXRlY29kZVNpemUsCisgICAgICAgIG1l
dGFEYXRhLmRvbWFpbkZpbHRlcnNCeXRlY29kZVNpemUKICAgICApOwogICAgIGF1dG8gY29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uID0gV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246
OmNyZWF0ZShXVEY6Om1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSkpOwogICAgIHJl
dHVybiBBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoaWRlbnRpZmllciwgV1RGOjpt
b3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg0MDQxKQorKysgVG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTUtMDUtMDkgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBbQ29u
dGVudCBFeHRlbnNpb25zXSBTdXBwb3J0IGRvbWFpbi1zcGVjaWZpYyBydWxlcyBhbmQgZXhjZXB0
aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NDgzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcDoKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OkluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVh
dGVGcm9tRmlsdGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkluTWVtb3J5Q29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uOjpjcmVhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SW5NZW1v
cnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OkluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Om1haW5Eb2N1bWVudFJlcXVlc3QpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6c3ViUmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjaGVja0NvbXBpbGVy
RXJyb3IpOgorCiAyMDE1LTA1LTA5ICBZb2F2IFdlaXNzICA8eW9hdkB5b2F2LndzPgogCiAgICAg
ICAgIFJlbW92ZSB0aGUgUElDVFVSRV9TSVpFUyBidWlsZCBmbGFnCkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5j
cHAJKHJldmlzaW9uIDE4Mzg4MikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDI1ICs4MCw1MyBA
QCBwdWJsaWM6CiAgICAgfQogfTsKIAotY2xhc3MgSW5NZW1vcnlDb250ZW50RXh0ZW5zaW9uQ29t
cGlsYXRpb25DbGllbnQgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OkNvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCB7CitzdHJ1Y3QgQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YSB7CisgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxp
emVkQWN0aW9uQnl0ZT4gYWN0aW9uczsKKyAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkRG
QUJ5dGVjb2RlPiBmaWx0ZXJzV2l0aG91dERvbWFpbnM7CisgICAgVmVjdG9yPENvbnRlbnRFeHRl
bnNpb25zOjpERkFCeXRlY29kZT4gZmlsdGVyc1dpdGhEb21haW5zOworICAgIFZlY3RvcjxDb250
ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGU+IGRvbWFpbkZpbHRlcnM7Cit9OworCitjbGFzcyBJ
bk1lbW9yeUNvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCBmaW5hbCA6IHB1YmxpYyBD
b250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50IHsKIHB1
YmxpYzoKLSAgICBJbk1lbW9yeUNvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYgZGF0
YSkKKyAgICBJbk1lbW9yeUNvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudChDb21waWxl
ZENvbnRlbnRFeHRlbnNpb25EYXRhJiBkYXRhKQogICAgICAgICA6IG1fZGF0YShkYXRhKQogICAg
IHsKLSAgICAgICAgRVhQRUNUX0VRKGRhdGEuYnl0ZWNvZGUuc2l6ZSgpLCAwdWxsKTsKICAgICAg
ICAgRVhQRUNUX0VRKGRhdGEuYWN0aW9ucy5zaXplKCksIDB1bGwpOworICAgICAgICBFWFBFQ1Rf
RVEoZGF0YS5maWx0ZXJzV2l0aG91dERvbWFpbnMuc2l6ZSgpLCAwdWxsKTsKKyAgICAgICAgRVhQ
RUNUX0VRKGRhdGEuZmlsdGVyc1dpdGhEb21haW5zLnNpemUoKSwgMHVsbCk7CisgICAgICAgIEVY
UEVDVF9FUShkYXRhLmRvbWFpbkZpbHRlcnMuc2l6ZSgpLCAwdWxsKTsKICAgICB9CiAKLSAgICB2
aXJ0dWFsIHZvaWQgd3JpdGVCeXRlY29kZShWZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkRGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlKSBvdmVycmlkZQorICAgIHZpcnR1YWwgdm9pZCB3
cml0ZUFjdGlvbnMoVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0
ZT4mJiBhY3Rpb25zKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgRVhQRUNUX0ZBTFNFKGZpbmFs
aXplZCk7Ci0gICAgICAgIG1fZGF0YS5ieXRlY29kZS5hcHBlbmRWZWN0b3IoYnl0ZWNvZGUpOwor
ICAgICAgICBFWFBFQ1RfRVEobV9kYXRhLmFjdGlvbnMuc2l6ZSgpLCAwdWxsKTsKKyAgICAgICAg
RVhQRUNUX0VRKG1fZGF0YS5maWx0ZXJzV2l0aG91dERvbWFpbnMuc2l6ZSgpLCAwdWxsKTsKKyAg
ICAgICAgRVhQRUNUX0VRKG1fZGF0YS5maWx0ZXJzV2l0aERvbWFpbnMuc2l6ZSgpLCAwdWxsKTsK
KyAgICAgICAgRVhQRUNUX0VRKG1fZGF0YS5kb21haW5GaWx0ZXJzLnNpemUoKSwgMHVsbCk7Cisg
ICAgICAgIG1fZGF0YS5hY3Rpb25zLmFwcGVuZFZlY3RvcihhY3Rpb25zKTsKICAgICB9CiAgICAg
Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRlQWN0aW9ucyhWZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25CeXRlPiYmIGFjdGlvbnMpIG92ZXJyaWRlCisgICAg
dmlydHVhbCB2b2lkIHdyaXRlRmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGUoVmVjdG9yPENv
bnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZT4mJiBieXRlY29kZSkgb3ZlcnJpZGUKICAgICB7
CiAgICAgICAgIEVYUEVDVF9GQUxTRShmaW5hbGl6ZWQpOwotICAgICAgICBtX2RhdGEuYWN0aW9u
cy5hcHBlbmRWZWN0b3IoYWN0aW9ucyk7CisgICAgICAgIEVYUEVDVF9FUShtX2RhdGEuZmlsdGVy
c1dpdGhEb21haW5zLnNpemUoKSwgMHVsbCk7CisgICAgICAgIEVYUEVDVF9FUShtX2RhdGEuZG9t
YWluRmlsdGVycy5zaXplKCksIDB1bGwpOworICAgICAgICBtX2RhdGEuZmlsdGVyc1dpdGhvdXRE
b21haW5zLmFwcGVuZFZlY3RvcihieXRlY29kZSk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwg
dm9pZCB3cml0ZUZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlKFZlY3RvcjxDb250ZW50RXh0ZW5z
aW9uczo6REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBF
WFBFQ1RfRkFMU0UoZmluYWxpemVkKTsKKyAgICAgICAgRVhQRUNUX0VRKG1fZGF0YS5kb21haW5G
aWx0ZXJzLnNpemUoKSwgMHVsbCk7CisgICAgICAgIG1fZGF0YS5maWx0ZXJzV2l0aERvbWFpbnMu
YXBwZW5kVmVjdG9yKGJ5dGVjb2RlKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIHdy
aXRlRG9tYWluRmlsdGVyc0J5dGVjb2RlKFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0
ZWNvZGU+JiYgYnl0ZWNvZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBFWFBFQ1RfRkFMU0Uo
ZmluYWxpemVkKTsKKyAgICAgICAgbV9kYXRhLmRvbWFpbkZpbHRlcnMuYXBwZW5kVmVjdG9yKGJ5
dGVjb2RlKTsKICAgICB9CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKCkgb3ZlcnJp
ZGUKQEAgLTEwNyw3ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiBt
X2RhdGE7CisgICAgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYgbV9kYXRhOwogICAgIGJv
b2wgZmluYWxpemVkIHsgZmFsc2UgfTsKIH07CiAKQEAgLTExNSwxNiArMTQzLDE5IEBAIGNsYXNz
IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIDoKIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmUHRyPEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGVGcm9tRmlsdGVy
KFN0cmluZyYmIGZpbHRlcikKICAgICB7Ci0gICAgICAgIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGV4dGVuc2lvbkRhdGE7CisgICAgICAg
IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgZXh0ZW5zaW9uRGF0YTsKICAgICAgICAgSW5N
ZW1vcnlDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQgY2xpZW50KGV4dGVuc2lvbkRh
dGEpOwogICAgICAgICBhdXRvIGNvbXBpbGVyRXJyb3IgPSBDb250ZW50RXh0ZW5zaW9uczo6Y29t
cGlsZVJ1bGVMaXN0KGNsaWVudCwgV1RGOjptb3ZlKGZpbHRlcikpOwotICAgICAgICBpZiAoY29t
cGlsZXJFcnJvcikKKyAgICAgICAgaWYgKGNvbXBpbGVyRXJyb3IpIHsKKyAgICAgICAgICAgIC8v
IENvbXBpbGluZyBzaG91bGQgYWx3YXlzIHN1Y2NlZWQgaGVyZS4gV2UgaGF2ZSBvdGhlciB0ZXN0
cyBmb3IgY29tcGlsZSBmYWlsdXJlcy4KKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGZhbHNlKTsK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CiAKICAgICAgICAgcmV0dXJu
IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGOjptb3ZlKGV4dGVu
c2lvbkRhdGEpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPEluTWVtb3J5Q29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uPiBjcmVhdGUoQ29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbkRhdGEmJiBkYXRhKQorICAgIHN0YXRpYyBSZWZQdHI8SW5NZW1vcnlDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24+IGNyZWF0ZShDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiYg
ZGF0YSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5NZW1vcnlDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24oV1RGOjptb3ZlKGRhdGEpKSk7CiAgICAgfQpAQCAtMTMzLDE4ICsx
NjQsMjIgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IENvbnRl
bnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSogYnl0ZWNvZGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2RhdGEuYnl0ZWNvZGUuZGF0YSgpOyB9Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBieXRl
Y29kZUxlbmd0aCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGF0YS5ieXRlY29kZS5zaXpl
KCk7IH0KICAgICB2aXJ0dWFsIGNvbnN0IENvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0
aW9uQnl0ZSogYWN0aW9ucygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGF0YS5hY3Rpb25z
LmRhdGEoKTsgfQogICAgIHZpcnR1YWwgdW5zaWduZWQgYWN0aW9uc0xlbmd0aCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fZGF0YS5hY3Rpb25zLnNpemUoKTsgfQorICAgIHZpcnR1YWwgY29u
c3QgQ29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBmaWx0ZXJzV2l0aG91dERvbWFpbnNC
eXRlY29kZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGF0YS5maWx0ZXJzV2l0aG91dERv
bWFpbnMuZGF0YSgpOyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBmaWx0ZXJzV2l0aG91dERvbWFp
bnNCeXRlY29kZUxlbmd0aCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGF0YS5maWx0ZXJz
V2l0aG91dERvbWFpbnMuc2l6ZSgpOyB9CisgICAgdmlydHVhbCBjb25zdCBDb250ZW50RXh0ZW5z
aW9uczo6REZBQnl0ZWNvZGUqIGZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9kYXRhLmZpbHRlcnNXaXRoRG9tYWlucy5kYXRhKCk7IH0KKyAgICB2
aXJ0dWFsIHVuc2lnbmVkIGZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlTGVuZ3RoKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9kYXRhLmZpbHRlcnNXaXRoRG9tYWlucy5zaXplKCk7IH0KKyAg
ICB2aXJ0dWFsIGNvbnN0IENvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSogZG9tYWluRmls
dGVyc0J5dGVjb2RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kYXRhLmRvbWFpbkZpbHRl
cnMuZGF0YSgpOyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBkb21haW5GaWx0ZXJzQnl0ZWNvZGVM
ZW5ndGgoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2RhdGEuZG9tYWluRmlsdGVycy5zaXpl
KCk7IH0KIAogcHJpdmF0ZToKLSAgICBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbihD
b250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYmIGRhdGEpCisg
ICAgSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb24oQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uRGF0YSYmIGRhdGEpCiAgICAgICAgIDogbV9kYXRhKFdURjo6bW92ZShkYXRhKSkKICAgICB7
CiAgICAgfQogCi0gICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bkRhdGEgbV9kYXRhOworICAgIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgbV9kYXRhOwog
fTsKIAogdm9pZCBzdGF0aWMgdGVzdFJlcXVlc3QoQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRF
eHRlbnNpb25zQmFja2VuZCBjb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQsIGNvbnN0IFJlc291cmNl
TG9hZEluZm8mIHJlc291cmNlTG9hZEluZm8sIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZT4gZXhwZWN0ZWRBY3Rpb25zLCBib29sIGlnbm9yZVByZXZpb3VzUnVsZXMgPSBmYWxz
ZSkKQEAgLTE2NCwxMSArMTk5LDE2IEBAIHZvaWQgc3RhdGljIHRlc3RSZXF1ZXN0KENvbnRlbnRF
eHRlbnNpb24KICAgICAgICAgRVhQRUNUX0VRKGFjdGlvbnNbYWN0aW9ucy5zaXplKCkgLSAxXS50
eXBlKCksIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVN0eWxl
U2hlZXQpOwogfQogCi1SZXNvdXJjZUxvYWRJbmZvIG1haW5Eb2N1bWVudFJlcXVlc3QoY29uc3Qg
Y2hhciogdXJsLCBSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlID0gUmVzb3VyY2VUeXBlOjpEb2N1
bWVudCkKK3N0YXRpYyBSZXNvdXJjZUxvYWRJbmZvIG1haW5Eb2N1bWVudFJlcXVlc3QoY29uc3Qg
Y2hhciogdXJsLCBSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlID0gUmVzb3VyY2VUeXBlOjpEb2N1
bWVudCkKIHsKICAgICByZXR1cm4geyBVUkwoVVJMKCksIHVybCksIFVSTChVUkwoKSwgdXJsKSwg
cmVzb3VyY2VUeXBlIH07CiB9CiAKK3N0YXRpYyBSZXNvdXJjZUxvYWRJbmZvIHN1YlJlc291cmNl
UmVxdWVzdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIG1haW5Eb2N1bWVudFVSTCwgUmVz
b3VyY2VUeXBlIHJlc291cmNlVHlwZSA9IFJlc291cmNlVHlwZTo6RG9jdW1lbnQpCit7CisgICAg
cmV0dXJuIHsgVVJMKFVSTCgpLCB1cmwpLCBVUkwoVVJMKCksIG1haW5Eb2N1bWVudFVSTCksIHJl
c291cmNlVHlwZSB9OworfQorCiBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNC
YWNrZW5kIG1ha2VCYWNrZW5kKGNvbnN0IGNoYXIqIGpzb24pCiB7CiAgICAgYXV0byBleHRlbnNp
b24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlRnJvbUZpbHRlcihq
c29uKTsKQEAgLTM2Miw2ICs0MDIsNzkgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBE
dXBsaWNhdGVkTQogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Imh0dHBzOi8vcG9zdC5vcmcvcG9zdCIpLCB7IH0pOwogfQogCitURVNUX0YoQ29udGVudEV4dGVu
c2lvblRlc3QsIERvbWFpblRyaWdnZXJzKQoreworICAgIGF1dG8gaWZEb21haW5CYWNrZW5kID0g
bWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJc
Ijp7XCJ1cmwtZmlsdGVyXCI6XCJ0ZXN0XFxcXC5odG1sXCIsIFwiaWYtZG9tYWluXCI6W1wid2Vi
a2l0Lm9yZ1wiXX19XSIpOworICAgIHRlc3RSZXF1ZXN0KGlmRG9tYWluQmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvdGVzdC5odG0iKSwgeyB9KTsKKyAgICB0
ZXN0UmVxdWVzdChpZkRvbWFpbkJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvdGVzdC5odG0iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChpZkRvbWFp
bkJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL3Rlc3QuaHRt
bCIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAg
dGVzdFJlcXVlc3QoaWZEb21haW5CYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8v
YnVncy53ZWJraXQub3JnL3Rlc3QuaHRtbCIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoaWZEb21haW5CYWNrZW5kLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vbm90X3dlYmtpdC5vcmcvdGVzdC5odG0iKSwgeyB9KTsK
KyAgICB0ZXN0UmVxdWVzdChpZkRvbWFpbkJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0
dHA6Ly93ZWJraXQub3JnYW5pemF0aW9uL3Rlc3QuaHRtIiksIHsgfSk7CisgICAgdGVzdFJlcXVl
c3QoaWZEb21haW5CYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vbm90X3dlYmtp
dC5vcmcvdGVzdC5odG1sIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoaWZEb21haW5CYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZ2FuaXphdGlvbi90ZXN0Lmh0
bWwiKSwgeyB9KTsKKyAgICAKKyAgICBhdXRvIHVubGVzc0RvbWFpbkJhY2tlbmQgPSBtYWtlQmFj
a2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcInRlc3RcXFxcLmh0bWxcIiwgXCJ1bmxlc3MtZG9tYWluXCI6W1wid2Via2l0
Lm9yZ1wiXX19XSIpOworICAgIHRlc3RSZXF1ZXN0KHVubGVzc0RvbWFpbkJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL3Rlc3QuaHRtIiksIHsgfSk7CisgICAg
dGVzdFJlcXVlc3QodW5sZXNzRG9tYWluQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0
cDovL2J1Z3Mud2Via2l0Lm9yZy90ZXN0Lmh0bSIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHVu
bGVzc0RvbWFpbkJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3Jn
L3Rlc3QuaHRtbCIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHVubGVzc0RvbWFpbkJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9idWdzLndlYmtpdC5vcmcvdGVzdC5odG1sIiks
IHsgfSk7CisgICAgdGVzdFJlcXVlc3QodW5sZXNzRG9tYWluQmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgiaHR0cDovL25vdF93ZWJraXQub3JnL3Rlc3QuaHRtIiksIHsgfSk7CisgICAgdGVz
dFJlcXVlc3QodW5sZXNzRG9tYWluQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDov
L3dlYmtpdC5vcmdhbml6YXRpb24vdGVzdC5odG0iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdCh1
bmxlc3NEb21haW5CYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vbm90X3dlYmtp
dC5vcmcvdGVzdC5odG1sIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2Nr
TG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdCh1bmxlc3NEb21haW5CYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZ2FuaXphdGlvbi90ZXN0Lmh0bWwiKSwgeyBDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworCisgICAgYXV0byBjb21i
aW5lZEJhY2tlbmQxID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9j
a1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ0ZXN0X2Jsb2NrX2xvYWRcIiwgXCJp
Zi1kb21haW5cIjpbXCJ3ZWJraXQub3JnXCJdfX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwiYmxvY2stY29va2llc1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ0
ZXN0X2Jsb2NrX2Nvb2tpZXNcIiwgXCJ1bmxlc3MtZG9tYWluXCI6W1wid2Via2l0Lm9yZ1wiXX19
XSIpOworICAgIHRlc3RSZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDEsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImh0dHA6Ly93ZWJraXQub3JnIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoY29tYmluZWRC
YWNrZW5kMSwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL25vdF93ZWJraXQub3JnIiksIHsg
fSk7CisgICAgdGVzdFJlcXVlc3QoY29tYmluZWRCYWNrZW5kMSwgbWFpbkRvY3VtZW50UmVxdWVz
dCgiaHR0cDovL3dlYmtpdC5vcmcvdGVzdF9ibG9ja19sb2FkLmh0bWwiKSwgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGNvbWJp
bmVkQmFja2VuZDEsIHN1YlJlc291cmNlUmVxdWVzdCgiaHR0cDovL3doYXR3Zy5vcmcvdGVzdF9i
bG9ja19sb2FkLmh0bWwiLCAiaHR0cDovL3dlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJh
Y2tlbmQxLCBzdWJSZXNvdXJjZVJlcXVlc3QoImh0dHA6Ly93aGF0d2cub3JnL3Nob3VsZG50X21h
dGNoLmh0bWwiLCAiaHR0cDovL3dlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qo
Y29tYmluZWRCYWNrZW5kMSwgc3ViUmVzb3VyY2VSZXF1ZXN0KCJodHRwOi8vd2hhdHdnLm9yZy90
ZXN0X2Jsb2NrX2xvYWQuaHRtbCIsICJodHRwOi8vbm90X3dlYmtpdC5vcmcvIiksIHsgfSk7Cisg
ICAgdGVzdFJlcXVlc3QoY29tYmluZWRCYWNrZW5kMSwgc3ViUmVzb3VyY2VSZXF1ZXN0KCJodHRw
Oi8vd2hhdHdnLm9yZy9zaG91bGRudF9tYXRjaC5odG1sIiwgImh0dHA6Ly9ub3Rfd2Via2l0Lm9y
Zy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQxLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy90ZXN0X2Jsb2NrX2Nvb2tpZXMuaHRtbCIpLCB7
IH0pOworICAgIHRlc3RSZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDEsIHN1YlJlc291cmNlUmVxdWVz
dCgiaHR0cDovL3doYXR3Zy5vcmcvdGVzdF9ibG9ja19jb29raWVzLmh0bWwiLCAiaHR0cDovL3dl
YmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoY29tYmluZWRCYWNrZW5kMSwgc3Vi
UmVzb3VyY2VSZXF1ZXN0KCJodHRwOi8vd2hhdHdnLm9yZy9zaG91bGRudF9tYXRjaC5odG1sIiwg
Imh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGNvbWJpbmVkQmFj
a2VuZDEsIHN1YlJlc291cmNlUmVxdWVzdCgiaHR0cDovL3doYXR3Zy5vcmcvdGVzdF9ibG9ja19j
b29raWVzLmh0bWwiLCAiaHR0cDovL25vdF93ZWJraXQub3JnL3BhdGgvdG8vbWFpbi9kb2N1bWVu
dC5odG1sIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrQ29va2llcyB9
KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQxLCBzdWJSZXNvdXJjZVJlcXVlc3Qo
Imh0dHA6Ly93aGF0d2cub3JnL3Nob3VsZG50X21hdGNoLmh0bWwiLCAiaHR0cDovL25vdF93ZWJr
aXQub3JnLyIpLCB7IH0pOworICAgIAorICAgIGF1dG8gY29tYmluZWRCYWNrZW5kMiA9IG1ha2VC
YWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwidGVzdF9ibG9ja19sb2FkXFxcXC5odG1sXCIsIFwiaWYtZG9tYWluXCI6
W1wid2Via2l0Lm9yZ1wiXX19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJs
b2NrLWNvb2tpZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwidGVzdF9ibG9ja19j
b29raWVzXFxcXC5odG1sXCIsIFwidW5sZXNzLWRvbWFpblwiOltcInczYy5vcmdcIl19fSwiCisg
ICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxl
Y3RvclwiOlwiLmhpZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ0ZXN0X2Nz
c1xcXFwuaHRtbFwifX1dIik7CisgICAgdGVzdFJlcXVlc3QoY29tYmluZWRCYWNrZW5kMiwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvdGVzdF9jc3MuaHRtbCIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOwor
ICAgIHRlc3RSZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDIsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0
dHA6Ly93ZWJraXQub3JnL3Rlc3RfY3NzLmh0bSIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGNv
bWJpbmVkQmFja2VuZDIsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL3Rl
c3RfYmxvY2tfbG9hZC5odG1sIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJs
b2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQyLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJodHRwOi8vbm90X3dlYmtpdC5vcmcvdGVzdF9ibG9ja19sb2FkLmh0bWwiKSwg
eyB9KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQyLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJodHRwOi8vbm90X3dlYmtpdC5vcmcvdGVzdF9jc3MuaHRtbCIpLCB7IENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RS
ZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDIsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJr
aXQub3JnL1RFU1RfQ1NTLmhUbUwvdGVzdF9ibG9ja19sb2FkLmh0bWwiKSwgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZH0pOworICAgIHRlc3RSZXF1ZXN0KGNvbWJpbmVk
QmFja2VuZDIsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93M2Mub3JnL3Rlc3RfY3NzLmh0
bWwiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxl
Y3RvciB9KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQyLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJodHRwOi8vdzNjLm9yZy90ZXN0X2Jsb2NrX2xvYWQuaHRtbCIpLCB7IH0pOworICAg
IHRlc3RSZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDIsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6
Ly93M2Mub3JnL3Rlc3RfYmxvY2tfY29va2llcy5odG1sIiksIHsgfSk7CisgICAgdGVzdFJlcXVl
c3QoY29tYmluZWRCYWNrZW5kMiwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3czYy5vcmcv
dGVzdF9jc3MuaHRtbC90ZXN0X2Jsb2NrX2Nvb2tpZXMuaHRtbCIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1
ZXN0KGNvbWJpbmVkQmFja2VuZDIsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9ub3RfdzNj
Lm9yZy90ZXN0X2Jsb2NrX2Nvb2tpZXMuaHRtbCIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpCbG9ja0Nvb2tpZXMgfSk7CisgICAgdGVzdFJlcXVlc3QoY29tYmluZWRCYWNrZW5k
MiwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL25vdF93M2Mub3JnL3Rlc3RfY3NzLmh0bWwv
dGVzdF9ibG9ja19jb29raWVzLmh0bWwiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
OkJsb2NrQ29va2llcyB9KTsKKworICAgIGF1dG8gaWZEb21haW5XaXRoRmxhZ3NCYWNrZW5kID0g
bWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJc
Ijp7XCJ1cmwtZmlsdGVyXCI6XCJ0ZXN0XCIsIFwiaWYtZG9tYWluXCI6W1wid2Via2l0Lm9yZ1wi
XSxcInJlc291cmNlLXR5cGVcIjpbXCJpbWFnZVwiXX19XSIpOworICAgIHRlc3RSZXF1ZXN0KGlm
RG9tYWluV2l0aEZsYWdzQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtp
dC5vcmcvdGVzdC5odG1sIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoaWZEb21haW5XaXRoRmxh
Z3NCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy90ZXN0LnBu
ZyIsIFJlc291cmNlVHlwZTo6SW1hZ2UpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoaWZEb21haW5XaXRoRmxhZ3NCYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vbm90X3dlYmtpdC5vcmcvdGVzdC5odG1sIiks
IHsgfSk7CisgICAgdGVzdFJlcXVlc3QoaWZEb21haW5XaXRoRmxhZ3NCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJodHRwOi8vbm90X3dlYmtpdC5vcmcvdGVzdC5wbmciLCBSZXNvdXJjZVR5
cGU6OkltYWdlKSwgeyB9KTsKKworICAgIGF1dG8gdW5sZXNzRG9tYWluV2l0aEZsYWdzQmFja2Vu
ZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwidGVzdFwiLCBcInVubGVzcy1kb21haW5cIjpbXCJ3ZWJr
aXQub3JnXCJdLFwicmVzb3VyY2UtdHlwZVwiOltcImltYWdlXCJdfX1dIik7CisgICAgdGVzdFJl
cXVlc3QodW5sZXNzRG9tYWluV2l0aEZsYWdzQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
aHR0cDovL3dlYmtpdC5vcmcvdGVzdC5odG1sIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QodW5s
ZXNzRG9tYWluV2l0aEZsYWdzQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dl
YmtpdC5vcmcvdGVzdC5wbmciLCBSZXNvdXJjZVR5cGU6OkltYWdlKSwgeyB9KTsKKyAgICB0ZXN0
UmVxdWVzdCh1bmxlc3NEb21haW5XaXRoRmxhZ3NCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJodHRwOi8vbm90X3dlYmtpdC5vcmcvdGVzdC5odG1sIiksIHsgfSk7CisgICAgdGVzdFJlcXVl
c3QodW5sZXNzRG9tYWluV2l0aEZsYWdzQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0
cDovL25vdF93ZWJraXQub3JnL3Rlc3QucG5nIiwgUmVzb3VyY2VUeXBlOjpJbWFnZSksIHsgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKworICAgIC8vIERvbWFp
bnMgc2hvdWxkIG5vdCBiZSBpbnRlcmVwdGVkIGFzIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisgICAg
YXV0byBkb21haW5SZWdleEJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5
cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcInRlc3RcXFxcLmh0
bWxcIiwgXCJpZi1kb21haW5cIjpbXCJ3ZT9ia2l0Lm9yZ1wiXX19XSIpOworICAgIHRlc3RSZXF1
ZXN0KGRvbWFpblJlZ2V4QmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtp
dC5vcmcvdGVzdC5odG1sIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoZG9tYWluUmVnZXhCYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2JraXQub3JnL3Rlc3QuaHRtbCIpLCB7
IH0pOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQgYW5kIHRlc3QgZG9tYWluLXNwZWNpZmljIHBv
cHVwLW9ubHkgYmxvY2tpbmcgKHdpdGggbGF5b3V0IHRlc3RzKS4KK30KKyAgICAKIFRFU1RfRihD
b250ZW50RXh0ZW5zaW9uVGVzdCwgVGVybXNLbm93blRvTWF0Y2hBbnl0aGluZykKIHsKICAgICBh
dXRvIGJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2Nr
XCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5wcmUxLipwb3N0MSRcIn19LCIKQEAg
LTU3NywxMiArNjkwLDE0IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgRGVlcE5GQSkK
ICAgICBFWFBFQ1RfRVEoMXVsLCBjcmVhdGVORkFzKGNvbWJpbmVkVVJMRmlsdGVycykuc2l6ZSgp
KTsKIH0KIAotdm9pZCBjaGVja0NvbXBpbGVyRXJyb3IoY29uc3QgY2hhcioganNvbiwgQ29udGVu
dEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvciBleHBlY3RlZEVycm9yKQordm9pZCBj
aGVja0NvbXBpbGVyRXJyb3IoY29uc3QgY2hhcioganNvbiwgc3RkOjplcnJvcl9jb2RlIGV4cGVj
dGVkRXJyb3IpCiB7Ci0gICAgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGEgZXh0ZW5zaW9uRGF0YTsKKyAgICBDb21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhIGV4dGVuc2lvbkRhdGE7CiAgICAgSW5NZW1vcnlDb250ZW50RXh0ZW5zaW9uQ29t
cGlsYXRpb25DbGllbnQgY2xpZW50KGV4dGVuc2lvbkRhdGEpOwogICAgIHN0ZDo6ZXJyb3JfY29k
ZSBjb21waWxlckVycm9yID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChjbGll
bnQsIGpzb24pOwotICAgIEVYUEVDVF9FUShjb21waWxlckVycm9yLnZhbHVlKCksIHN0YXRpY19j
YXN0PGludD4oZXhwZWN0ZWRFcnJvcikpOworICAgIEVYUEVDVF9FUShjb21waWxlckVycm9yLnZh
bHVlKCksIGV4cGVjdGVkRXJyb3IudmFsdWUoKSk7CisgICAgaWYgKGNvbXBpbGVyRXJyb3IudmFs
dWUoKSkKKyAgICAgICAgRVhQRUNUX1NUUkVRKGNvbXBpbGVyRXJyb3IuY2F0ZWdvcnkoKS5uYW1l
KCksIGV4cGVjdGVkRXJyb3IuY2F0ZWdvcnkoKS5uYW1lKCkpOwogfQogCiBURVNUX0YoQ29udGVu
dEV4dGVuc2lvblRlc3QsIEludmFsaWRKU09OKQpAQCAtNjA1LDEwICs3MjAsMzcgQEAgVEVTVF9G
KENvbnRlbnRFeHRlbnNpb25UZXN0LCBJbnZhbGlkSlNPTgogICAgICAgICBDb250ZW50RXh0ZW5z
aW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXJGbGFnc0FycmF5
KTsKICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9j
a1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCIsXCJsb2FkLXR5
cGVcIjpbXCJpbnZhbGlkXCJdfX1dIiwKICAgICAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRl
bnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRTdHJpbmdJblRyaWdnZXJGbGFnc0FycmF5KTsK
KyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wi
fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCIsXCJsb2FkLXR5cGVc
IjpbNV19fV0iLAorICAgICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVy
cm9yOjpKU09OSW52YWxpZFN0cmluZ0luVHJpZ2dlckZsYWdzQXJyYXkpOwogICAgIGNoZWNrQ29t
cGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIixcInJlc291cmNlLXR5cGVcIjp7fX19XSIs
CiAgICAgICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05J
bnZhbGlkVHJpZ2dlckZsYWdzQXJyYXkpOwogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFj
dGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpc
IndlYmtpdC5vcmdcIixcInJlc291cmNlLXR5cGVcIjpbXCJpbnZhbGlkXCJdfX1dIiwKICAgICAg
ICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRT
dHJpbmdJblRyaWdnZXJGbGFnc0FycmF5KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJ3ZWJraXQub3JnXCIsXCJyZXNvdXJjZS10eXBlXCI6WzVdfX1dIiwKKyAgICAgICAgQ29udGVu
dEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRTdHJpbmdJblRy
aWdnZXJGbGFnc0FycmF5KTsKKyAgICAKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rp
b25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3
ZWJraXQub3JnXCIsXCJpZi1kb21haW5cIjp7fX19XSIsIENvbnRlbnRFeHRlbnNpb25zOjpDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdCk7CisgICAgY2hlY2tDb21w
aWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wiLFwiaWYtZG9tYWluXCI6WzVdfX1dIiwgQ29u
dGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWREb21haW5M
aXN0KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJi
bG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCIsXCJpZi1k
b21haW5cIjpbXCJhXCJdfX1dIiwgeyB9KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJ3ZWJraXQub3JnXCIsXCJ1bmxlc3MtZG9tYWluXCI6e319fV0iLCBDb250ZW50RXh0ZW5zaW9u
czo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZERvbWFpbkxpc3QpOworICAgIGNo
ZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIixcInVubGVzcy1kb21haW5cIjpb
NV19fV0iLCBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52
YWxpZERvbWFpbkxpc3QpOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntc
InR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5v
cmdcIixcInVubGVzcy1kb21haW5cIjpbXCJcIl19fV0iLCBDb250ZW50RXh0ZW5zaW9uczo6Q29u
dGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZERvbWFpbkxpc3QpOworICAgIGNoZWNrQ29t
cGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIixcInVubGVzcy1kb21haW5cIjpbXCJBXCJd
fX1dIiwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkRvbWFp
bk5vdExvd2VyQ2FzZUFTQ0lJKTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJr
aXQub3JnXCIsXCJ1bmxlc3MtZG9tYWluXCI6W1wiXFx1MDBEQ1wiXX19XSIsIENvbnRlbnRFeHRl
bnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Eb21haW5Ob3RMb3dlckNhc2VBU0NJ
SSk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxv
Y2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wiLFwidW5sZXNz
LWRvbWFpblwiOltcIjBcIl19fV0iLCB7IH0pOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tc
ImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIndlYmtpdC5vcmdcIixcInVubGVzcy1kb21haW5cIjpbXCJhXCJdfX1dIiwgeyB9KTsKKwor
ICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9
LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIixcImlmLWRvbWFpblwi
OltdLFwidW5sZXNzLWRvbWFpblwiOltcImFcIl19fV0iLCBDb250ZW50RXh0ZW5zaW9uczo6Q29u
dGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZERvbWFpbkxpc3QpOworICAgIGNoZWNrQ29t
cGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIixcInVubGVzcy1kb21haW5cIjpbXX19XSIs
IENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkRG9t
YWluTGlzdCk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwi
OlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wiLFwi
aWYtZG9tYWluXCI6NX19XSIsIHsgfSk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0
aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
d2Via2l0Lm9yZ1wiLFwidW5sZXNzLWRvbWFpblwiOjV9fV0iLCB7IH0pOworICAgIGNoZWNrQ29t
cGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIixcImlmLWRvbWFpblwiOjUsXCJ1bmxlc3Mt
ZG9tYWluXCI6NX19XSIsIHsgfSk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9u
XCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Vi
a2l0Lm9yZ1wiLFwiaWYtZG9tYWluXCI6W119fV0iLCBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVu
dEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZERvbWFpbkxpc3QpOworICAgIAorICAgIGNoZWNr
Q29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dl
clwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIixcImlmLWRvbWFpblwiOltcImFcIl0s
XCJ1bmxlc3MtZG9tYWluXCI6W119fV0iLCBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVu
c2lvbkVycm9yOjpKU09OVW5sZXNzQW5kSWZEb21haW4pOworICAgIGNoZWNrQ29tcGlsZXJFcnJv
cigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcIndlYmtpdC5vcmdcIixcImlmLWRvbWFpblwiOltcImFcIl0sXCJ1bmxlc3MtZG9t
YWluXCI6W1wiYVwiXX19XSIsIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJy
b3I6OkpTT05Vbmxlc3NBbmRJZkRvbWFpbik7CisKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7
XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCJ3ZWJraXQub3JnXCIsIFwidW5leHBlY3RlZC1pZGVudGlmaWVyLXNob3VsZC1iZS1pZ25v
cmVkXCI6NX19XSIsIHsgfSk7CiAKICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25c
Ijo1LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsCiAgICAg
ICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlk
QWN0aW9uKTsKQEAgLTYyMCw2ICs3NjIsOCBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3Qs
IEludmFsaWRKU09OCiAgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlw
ZVwiOlwiaWdub3JlLXByZXZpb3VzLXJ1bGVzXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIndlYmtpdC5vcmdcIn19LCIKICAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImNz
cy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIi4qXCJ9fV0iLAogICAgICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29u
dGVudEV4dGVuc2lvbkVycm9yOjpSZWdleE1hdGNoZXNFdmVyeXRoaW5nQWZ0ZXJJZ25vcmVQcmV2
aW91c1J1bGVzKTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKlwiLFwiaWYtZG9t
YWluXCI6W1wiYVwiXX19XSIsIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJy
b3I6OlJlZ2V4TWF0Y2hlc0V2ZXJ5dGhpbmdXaXRoRG9tYWlucyk7CisgICAgY2hlY2tDb21waWxl
ckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiLipcIixcInVubGVzcy1kb21haW5cIjpbXCJhXCJdfX1dIiwgQ29udGVu
dEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6UmVnZXhNYXRjaGVzRXZlcnl0aGlu
Z1dpdGhEb21haW5zKTsKICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbXCJ9fV0iLAog
ICAgICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52
YWxpZFJlZ2V4KTsKIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDA0MSkKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE1LTA1LTA5ICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0Nv
bnRlbnQgRXh0ZW5zaW9uc10gU3VwcG9ydCBkb21haW4tc3BlY2lmaWMgcnVsZXMgYW5kIGV4Y2Vw
dGlvbnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDQ4MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGh0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvZG9tYWluLXJ1bGVzLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9kb21haW4tcnVs
ZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9k
b21haW4tcnVsZXMuaHRtbC5qc29uOiBBZGRlZC4KKwogMjAxNS0wNS0wOCAgWGFiaWVyIFJvZHJp
Z3VleiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEuY29tPiBhbmQgWW91ZW5uIEZhYmxldCA8eW91
ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAgc3RyZWFtcy9yZWZlcmVuY2UtaW1w
bGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLXJlYWRlci5odG1sIGFuZCBzdHJlYW1zL3JlZmVy
ZW5jZS1pbXBsZW1lbnRhdGlvbi9iYWQtdW5kZXJseWluZy1zb3VyY2VzLmh0bWwgYXJlIGZsYWt5
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2RvbWFpbi1y
dWxlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9j
b250ZW50ZXh0ZW5zaW9ucy9kb21haW4tcnVsZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9kb21haW4tcnVsZXMt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUgQEAKK2xheWVyIGF0ICgw
LDApIHNpemUgODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5
ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBz
aXplIDgwMHg2MDAKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODQK
KyAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDIwMHgxOAorICAgICAgICB0
ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAyMDA6ICJUaGUgaW1hZ2VzIGJlbG93IHNob3VsZCBsb2Fk
LiIKKyAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDE5OSwxNCkgc2l6ZSAxeDAKKyAgICAgIFJlbmRl
ckltYWdlIHtJTUd9IGF0ICgwLDE4KSBzaXplIDEwMHgxMDAKKyAgICAgIFJlbmRlckJSIHtCUn0g
YXQgKDEwMCwxMTgpIHNpemUgMHgwCisgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMTE4
KSBzaXplIDI0MngxOAorICAgICAgICB0ZXh0IHJ1biBhdCAoMCwxMTgpIHdpZHRoIDI0MjogIlRo
ZSBpbWFnZXMgYmVsb3cgc2hvdWxkIGJlIGJsb2NrZWQuIgorICAgICAgUmVuZGVyQlIge0JSfSBh
dCAoMjQxLDEzMikgc2l6ZSAxeDAKKyAgICAgIFJlbmRlckltYWdlIHtJTUd9IGF0ICgwLDEzNikg
c2l6ZSAweDAKKyAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDAsMTM2KSBzaXplIDB4MApJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9kb21haW4tcnVsZXMuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25z
L2RvbWFpbi1ydWxlcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9jb250ZW50ZXh0ZW5zaW9ucy9kb21haW4tcnVsZXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYgQEAKKzxib2R5PgorVGhlIGltYWdlcyBiZWxvdyBzaG91bGQgbG9hZC48YnI+Cis8
aW1nIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo4MDAwL3Jlc291cmNlcy9zcXVhcmUxMDAucG5nP3No
b3VsZF9ub3RfYmVfYmxvY2tlZCI+PGJyPgorVGhlIGltYWdlcyBiZWxvdyBzaG91bGQgYmUgYmxv
Y2tlZC48YnI+Cis8aW1nIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo4MDAwL3Jlc291cmNlcy9zcXVh
cmUxMDAucG5nP3Nob3VsZF9iZV9ibG9ja2VkIj48YnI+Cis8L2JvZHk+CkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2RvbWFpbi1ydWxlcy5odG1sLmpzb24K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9k
b21haW4tcnVsZXMuaHRtbC5qc29uCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9kb21haW4tcnVsZXMuaHRtbC5qc29uCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTEgQEAKK1sKKyAgICB7CisgICAgICAgICJhY3Rpb24iOiB7CisgICAg
ICAgICAgICAidHlwZSI6ICJibG9jayIKKyAgICAgICAgfSwKKyAgICAgICAgInRyaWdnZXIiOiB7
CisgICAgICAgICAgICAidXJsLWZpbHRlciI6ICJzaG91bGRfYmVfYmxvY2tlZCIsCisgICAgICAg
ICAgICAiaWYtZG9tYWluIjogIjEyNy4wLjAuMSIKKyAgICAgICAgfQorICAgIH0KK10K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252805</attachid>
            <date>2015-05-09 23:04:24 -0700</date>
            <delta_ts>2015-05-11 12:06:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144833-20150509230304.patch</filename>
            <type>text/plain</type>
            <size>87285</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDA0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBACisyMDE1LTA1LTA5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gU3VwcG9ydCBkb21haW4tc3BlY2lmaWMgcnVsZXMgYW5kIGV4Y2VwdGlvbnMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ4MzMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBo
dHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2RvbWFpbi1ydWxlcy5odG1sCisgICAgICAgIChB
bmQgbG90cyBvZiBBUEkgdGVzdHMpCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGlmLWRvbWFp
biBhbmQgdW5sZXNzLWRvbWFpbiB0byB0aGUgdHJpZ2dlciBpbiB0aGUgSlNPTiBmb3JtYXQuCisg
ICAgICAgIGlmLWRvbWFpbiBtYWtlcyB0aGUgcnVsZSBhcHBseSBvbmx5IHRvIGRvbWFpbnMgaW4g
dGhlIGxpc3QuCisgICAgICAgIHVubGVzcy1kb21haW4gbWFrZXMgdGhlIHJ1bGUgYXBwbHkgdG8g
ZG9tYWlucyB0aGF0IGFyZSBub3QgaW4gdGhlIGxpc3QuCisgICAgICAgIAorICAgICAgICBBbGwg
cnVsZXMgd2l0aG91dCBpZi1kb21haW4gb3IgdW5sZXNzLWRvbWFpbiBhcmUgY29tcGlsZWQgaW50
byBhIHNldCBvZiBERkFzLiAgVGhpcyBiZWhhdmlvciBpcyB1bmNoYW5nZWQuCisgICAgICAgIEFs
bCBydWxlcyB3aXRoIGlmLWRvbWFpbiBvciB1bmxlc3MtZG9tYWluIGFyZSBjb21waWxlZCBpbnRv
IGEgc2VwYXJhdGUgc2V0IG9mIERGQXMuCisgICAgICAgIFRoZSBkb21haW5zIGFyZSBhbHNvIGNv
bXBpbGVkIGludG8gYW5vdGhlciBzZXQgb2YgREZBcy4gIFRoaXMgbWFrZXMgMyBhcnJheXMgb2Yg
REZBIGJ5dGVjb2RlIGluc3RlYWQgb2YgMS4KKyAgICAgICAgCisgICAgICAgIElmIHRoZXJlIGFy
ZSBubyBkb21haW4gc3BlY2lmaWMgcnVsZXMsIHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBiZWhhdmlv
ci4KKyAgICAgICAgSWYgdGhlcmUgYXJlIGRvbWFpbiBzcGVjaWZpYyBydWxlcywgdGhlIFVSTCB3
aWxsIGJlIGNoZWNrZWQgZm9yIG1hdGNoZXMgaW4gYm90aAorICAgICAgICBmaWx0ZXJzV2l0aG91
dERvbWFpbnNCeXRlY29kZSBhbmQgZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGUuICBJZiB0aGVy
ZSBhcmUgbWF0Y2hlcyBmcm9tIAorICAgICAgICBmaWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZSB0
aGVuIHRoZSBkb21haW4gb2YgdGhlIG1haW4gZG9jdW1lbnQgd2lsbCBiZSBjaGVja2VkIHdpdGgg
CisgICAgICAgIGRvbWFpbkZpbHRlcnNCeXRlY29kZSB0byBzZWUgd2hpY2ggb2YgdGhlIG1hdGNo
ZXMgYXBwbGllcyB0byB0aGlzIGRvbWFpbi4KKworICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25z
L0NvbWJpbmVkVVJMRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpDb21iaW5lZFVSTEZpbHRlcnM6OmFkZERvbWFpbik6CisgICAgICAg
ICogY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmg6CisgICAgICAgIEFkZGVk
IGFkZERvbWFpbiwgd2hpY2ggYWRkcyBjaGFyYWN0ZXJzIGZyb20gYSBkb21haW4gdG8gdGhlIHBy
ZWZpeCB0cmVlIGRpcmVjdGx5IHdpdGhvdXQgdXNpbmcgWUFSUi4KKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Z2xvYmFsRGlz
cGxheU5vbmVTZWxlY3RvcnMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbXBpbGVk
Q29udGVudEV4dGVuc2lvbi5oOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25Db21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6c2VyaWFsaXplQWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6Y29tcGlsZVJ1bGVMaXN0KToKKyAgICAgICAgU2VwYXJhdGUgdGhlIHJ1bGVzIGludG8gcnVs
ZXMgd2l0aCBkb21haW5zIGFuZCBydWxlcyB3aXRob3V0IGRvbWFpbnMgYW5kIGNvbXBpbGUgdG8g
Ynl0ZWNvZGUuCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNv
bXBpbGVyLmg6CisgICAgICAgIFVwZGF0ZWQgY29tcGlsZXIgaW50ZXJmYWNlIHRvIHJlZmxlY3Qg
dGhlIHNsaWdodGx5IG1vcmUgY29tcGxpY2F0ZWQgc3RydWN0dXJlLgorICAgICAgICAqIGNvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6Y29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnkpOgorICAg
ICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oOgorICAgICAg
ICBBZGRlZCBuZXcgcGFyc2luZyBlcnJvcnMuCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvblBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6Z2V0RG9tYWluTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6bG9hZFRyaWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OmxvYWRFbmNvZGVkUnVsZXMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25SdWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VHJp
Z2dlcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIFBhcnNlIHRoZSBuZXcgZG9tYWluIHN0cnVjdHVy
ZXMgZnJvbSBKU09OIGludG8gdGhlIFRyaWdnZXIgc3RydWN0dXJlLgorICAgICAgICAqIGNvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjphY3Rpb25z
Rm9yUmVzb3VyY2VMb2FkKToKKyAgICAgICAgSW50ZXJwcmV0IGFzIG11Y2ggYnl0ZWNvZGUgYXMg
bmVjZXNzYXJ5IHRvIGRldGVybWluZSB3aGljaCBydWxlcyBhcHBseSB0byB0aGlzIFVSTCBhbmQg
ZG9tYWluLgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6aW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3Vt
ZW50cyk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21w
aWxlcjo6ZW1pdEFwcGVuZEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxl
cjo6Y29tcGlsZU5vZGUpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2Rl
Q29tcGlsZXIuaDoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVy
cHJldGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRl
Y29kZUludGVycHJldGVyOjppbnRlcnByZXRBcHBlbmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldFRl
c3RGbGFnc0FuZEFwcGVuZEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6YWN0aW9uc0Zyb21ERkFSb290KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjpp
bnRlcnByZXQpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJw
cmV0ZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkSW5mby5oOgorICAgICAgICBL
ZWVwIHRyYWNrIG9mIHdoaWNoIGFjdGlvbnMgaGF2ZSBhbiBpZi1kb21haW4gdHJpZ2dlci4gIElm
IGFuIGFjdGlvbiBpcyBpbiB0aGUgCisgICAgICAgIGZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2Rl
LCB0aGVuIGl0IGVpdGhlciBoYXMgYW4gaWYtZG9tYWluIG9yIGFuIHVubGVzcy1kb21haW4gaW4g
aXRzIHRyaWdnZXIuCisgICAgICAgIFRoaXMgcmVxdWlyZXMgYWRkaXRpb25hbCBpbmZvcm1hdGlv
biBpbiB0aGUgYnl0ZWNvZGUsIHNvIHRoZXJlIGFyZSB0d28gbmV3IGJ5dGVjb2RlIHR5cGVzLgor
CiAyMDE1LTA1LTA5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
SW52YWxpZGF0ZSB0aGUgRm9udENhY2hlIG9uIFdlYlByb2Nlc3Mgc3VzcGVuc2lvbiAvIGNyaXRp
Y2FsIG1lbW9yeSBwcmVzc3VyZQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29tYmluZWRVUkxGaWx0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuY3BwCShyZXZpc2lvbiAxODM4ODAp
CisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTEgKzExNSw0MCBAQCBDb21iaW5lZFVSTEZpbHRl
cnM6On5Db21iaW5lZFVSTEZpbHRlcnMoCiB7CiB9CiAKLWJvb2wgQ29tYmluZWRVUkxGaWx0ZXJz
Ojppc0VtcHR5KCkKK2Jvb2wgQ29tYmluZWRVUkxGaWx0ZXJzOjppc0VtcHR5KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9wcmVmaXhUcmVlUm9vdC0+ZWRnZXMuaXNFbXB0eSgpOwogfQogCit2b2lk
IENvbWJpbmVkVVJMRmlsdGVyczo6YWRkRG9tYWluKHVpbnQ2NF90IGFjdGlvbklkLCBjb25zdCBT
dHJpbmcmIGRvbWFpbikKK3sKKyAgICAvLyBUaGlzIGlzIGxpa2UgYWRkaW5nICgufF4pZG9tYWlu
JCBieSBhZGRpbmcgdHdvIFZlY3RvcjxUZXJtPidzLAorICAgIC8vIGJ1dCBpbnRlcnByZXRpbmcg
ZG9tYWluIGFzIGEgc2VyaWVzIG9mIGNoYXJhY3RlcnMsIG5vdCBhIHJlZ3VsYXIgZXhwcmVzc2lv
bi4KKyAgICAvLyBUaGlzIHdheSBhIGRvbWFpbiBvZiAid2Via2l0Lm9yZyIgd2lsbCBtYXRjaCAi
YnVncy53ZWJraXQub3JnIiBhbmQgIndlYmtpdC5vcmciLgorICAgIC8vIEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3IgbWF0Y2hpbmcgb25seSBzdWJkb21haW5zIG9yIG5vIHN1YmRvbWFpbnMuCisgICAg
VmVjdG9yPFRlcm0+IHByZXBlbmREb3Q7CisgICAgVmVjdG9yPFRlcm0+IHByZXBlbmRCZWdpbm5p
bmdPZkxpbmU7CisgICAgcHJlcGVuZERvdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRvbWFpbi5s
ZW5ndGgoKSArIDMpOworICAgIHByZXBlbmRCZWdpbm5pbmdPZkxpbmUucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShkb21haW4ubGVuZ3RoKCkgKyAxKTsgLy8gVGhpcyBpcyBqdXN0IG5vIC4qIGF0IHRo
ZSBiZWdpbm5pbmcuCisgICAgCisgICAgVGVybSBjYW5vbmljYWxEb3RTdGFyKFRlcm06OlVuaXZl
cnNhbFRyYW5zaXRpb24pOworICAgIGNhbm9uaWNhbERvdFN0YXIucXVhbnRpZnkoQXRvbVF1YW50
aWZpZXI6Olplcm9Pck1vcmUpOworICAgIHByZXBlbmREb3QuYXBwZW5kKGNhbm9uaWNhbERvdFN0
YXIpOworICAgIHByZXBlbmREb3QuYXBwZW5kKFRlcm0oJy4nLCB0cnVlKSk7CisgICAgCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRvbWFpbi5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAg
IEFTU0VSVChpc0FTQ0lJKGRvbWFpbltpXSkpOworICAgICAgICBBU1NFUlQoIWlzQVNDSUlVcHBl
cihkb21haW5baV0pKTsKKyAgICAgICAgcHJlcGVuZERvdC5hcHBlbmQoVGVybShkb21haW5baV0s
IHRydWUpKTsKKyAgICAgICAgcHJlcGVuZEJlZ2lubmluZ09mTGluZS5hcHBlbmQoVGVybShkb21h
aW5baV0sIHRydWUpKTsKKyAgICB9CisgICAgcHJlcGVuZERvdC5hcHBlbmQoVGVybTo6RW5kT2ZM
aW5lQXNzZXJ0aW9uVGVybSk7CisgICAgcHJlcGVuZEJlZ2lubmluZ09mTGluZS5hcHBlbmQoVGVy
bTo6RW5kT2ZMaW5lQXNzZXJ0aW9uVGVybSk7CisgICAgCisgICAgYWRkUGF0dGVybihhY3Rpb25J
ZCwgcHJlcGVuZERvdCk7CisgICAgYWRkUGF0dGVybihhY3Rpb25JZCwgcHJlcGVuZEJlZ2lubmlu
Z09mTGluZSk7Cit9CisKIHZvaWQgQ29tYmluZWRVUkxGaWx0ZXJzOjphZGRQYXR0ZXJuKHVpbnQ2
NF90IGFjdGlvbklkLCBjb25zdCBWZWN0b3I8VGVybT4mIHBhdHRlcm4pCiB7CiAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRSghcGF0dGVybi5pc0VtcHR5KCksICJUaGUgcGFyc2VyIHNob3VsZCBoYXZl
IGV4Y2x1ZGVkIGVtcHR5IHBhdHRlcm5zIGJlZm9yZSByZWFjaGluZyBDb21iaW5lZFVSTEZpbHRl
cnMuIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVS
TEZpbHRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9Db21iaW5lZFVSTEZpbHRlcnMuaAkocmV2aXNpb24gMTgzODgwKQorKysgU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5n
LmgiCiAjaW5jbHVkZSAiTkZBLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0LDEwICs0NSwxMSBA
QCBwdWJsaWM6CiAgICAgQ29tYmluZWRVUkxGaWx0ZXJzKCk7CiAgICAgfkNvbWJpbmVkVVJMRmls
dGVycygpOwogCi0gICAgdm9pZCBhZGRQYXR0ZXJuKHVpbnQ2NF90IHBhdHRlcm5JZCwgY29uc3Qg
VmVjdG9yPFRlcm0+JiBwYXR0ZXJuKTsKKyAgICB2b2lkIGFkZFBhdHRlcm4odWludDY0X3QgYWN0
aW9uSWQsIGNvbnN0IFZlY3RvcjxUZXJtPiYgcGF0dGVybik7CisgICAgdm9pZCBhZGREb21haW4o
dWludDY0X3QgYWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgZG9tYWluKTsKIAogICAgIHZvaWQgcHJv
Y2Vzc05GQXMoc2l6ZV90IG1heE5GQVNpemUsIHN0ZDo6ZnVuY3Rpb248dm9pZChORkEmJik+IGhh
bmRsZXIpOwotICAgIGJvb2wgaXNFbXB0eSgpOworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0Owog
CiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9SVElORwogICAgIHNpemVf
dCBtZW1vcnlVc2VkKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAJKHJl
dmlzaW9uIDE4Mzg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbXBp
bGVkQ29udGVudEV4dGVuc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAg
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjp+Q29tcGlsZWRDb250ZQogCiBWZWN0b3I8U3RyaW5n
PiBDb21waWxlZENvbnRlbnRFeHRlbnNpb246Omdsb2JhbERpc3BsYXlOb25lU2VsZWN0b3JzKFZl
Y3Rvcjxib29sPiYgcGFnZXNVc2VkKQogewotICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgaW50
ZXJwcmV0ZXIoYnl0ZWNvZGUoKSwgYnl0ZWNvZGVMZW5ndGgoKSwgcGFnZXNVc2VkKTsKKyAgICBE
RkFCeXRlY29kZUludGVycHJldGVyIGludGVycHJldGVyKGZpbHRlcnNXaXRob3V0RG9tYWluc0J5
dGVjb2RlKCksIGZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlTGVuZ3RoKCksIHBhZ2VzVXNl
ZCk7CiAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBhY3Rpb25Mb2NhdGlvbnMg
PSBpbnRlcnByZXRlci5hY3Rpb25zRnJvbURGQVJvb3QoKTsKICAgICAKICAgICBWZWN0b3I8QWN0
aW9uPiBnbG9iYWxBY3Rpb25zOwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgJKHJldmlzaW9u
IDE4Mzg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCwxMiBAQCBjbGFzcyBX
RUJDT1JFX0VYUE9SVCBDb21waWxlZENvbnRlbnRFeHRlCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKCk7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IERGQUJ5dGVj
b2RlKiBieXRlY29kZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVjb2Rl
TGVuZ3RoKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgREZBQnl0ZWNvZGUqIGZpbHRl
cnNXaXRob3V0RG9tYWluc0J5dGVjb2RlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWdu
ZWQgZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVMZW5ndGgoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBjb25zdCBERkFCeXRlY29kZSogZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGUoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBmaWx0ZXJzV2l0aERvbWFpbnNCeXRlY29k
ZUxlbmd0aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IERGQUJ5dGVjb2RlKiBkb21h
aW5GaWx0ZXJzQnl0ZWNvZGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBkb21h
aW5GaWx0ZXJzQnl0ZWNvZGVMZW5ndGgoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBjb25zdCBT
ZXJpYWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucygpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHVu
c2lnbmVkIGFjdGlvbnNMZW5ndGgoKSBjb25zdCA9IDA7CiAgICAgVmVjdG9yPFN0cmluZz4gZ2xv
YmFsRGlzcGxheU5vbmVTZWxlY3RvcnMoVmVjdG9yPGJvb2w+JiBwYWdlc1VzZWQpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODM4ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Niw4ICs5NiwxMCBAQCBzdGF0aWMgVmVjdG9yPHVuc2lnbmVkPiBzZXJp
YWxpemVBY3Rpb25zCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgLy8gSWRlbnRpY2FsIHNlcXVlbnRpYWwgYWN0aW9ucyBzaG91bGQgbm90IGJlIHJl
d3JpdHRlbi4KLSAgICAgICAgaWYgKHJ1bGVJbmRleCAmJiBydWxlLmFjdGlvbigpID09IHJ1bGVM
aXN0W3J1bGVJbmRleCAtIDFdLmFjdGlvbigpKSB7CisgICAgICAgIC8vIElkZW50aWNhbCBzZXF1
ZW50aWFsIGFjdGlvbnMgc2hvdWxkIG5vdCBiZSByZXdyaXR0ZW4gdW5sZXNzIHRoZXJlIGFyZSBk
b21haW5zIGluIHRoZSB0cmlnZ2VyLgorICAgICAgICAvLyBJZiB0aGVyZSBhcmUgZG9tYWlucyBp
biB0aGUgdHJpZ2dlciwgd2UgbmVlZCB0byBkaXN0aW5ndWlzaCB0aGUgYWN0aW9ucyBieSBpbmRl
eCB0byB0ZWxsIGlmIHdlIG5lZWQgdG8gYXBwbHkgaXQKKyAgICAgICAgLy8gYnkgY29tcGFyaW5n
IHRoZSBvdXRwdXQgb2YgdGhlIGZpbHRlcnMgd2l0aCBkb21haW5zIGFuZCB0aGUgZG9tYWluIGZp
bHRlcnMuCisgICAgICAgIGlmIChydWxlSW5kZXggJiYgcnVsZS5hY3Rpb24oKSA9PSBydWxlTGlz
dFtydWxlSW5kZXggLSAxXS5hY3Rpb24oKSAmJiBydWxlLnRyaWdnZXIoKS5kb21haW5zLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25zLmFwcGVuZChhY3Rpb25Mb2NhdGlv
bnNbcnVsZUluZGV4IC0gMV0pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAg
LTE1Niw4ICsxNTgsMTMgQEAgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50
RQogCiAgICAgVW5pdmVyc2FsQWN0aW9uTG9jYXRpb25zU2V0IHVuaXZlcnNhbEFjdGlvbkxvY2F0
aW9uczsKIAotICAgIENvbWJpbmVkVVJMRmlsdGVycyBjb21iaW5lZFVSTEZpbHRlcnM7Ci0gICAg
VVJMRmlsdGVyUGFyc2VyIHVybEZpbHRlclBhcnNlcihjb21iaW5lZFVSTEZpbHRlcnMpOworICAg
IC8vIEZJWE1FOiBUaGVzZSBkb24ndCBhbGwgbmVlZCB0byBiZSBpbiBtZW1vcnkgYXQgdGhlIHNh
bWUgdGltZS4KKyAgICBDb21iaW5lZFVSTEZpbHRlcnMgZmlsdGVyc1dpdGhvdXREb21haW5zOwor
ICAgIENvbWJpbmVkVVJMRmlsdGVycyBmaWx0ZXJzV2l0aERvbWFpbnM7CisgICAgQ29tYmluZWRV
UkxGaWx0ZXJzIGRvbWFpbkZpbHRlcnM7CisgICAgVVJMRmlsdGVyUGFyc2VyIGZpbHRlcnNXaXRo
b3V0RG9tYWluUGFyc2VyKGZpbHRlcnNXaXRob3V0RG9tYWlucyk7CisgICAgVVJMRmlsdGVyUGFy
c2VyIGZpbHRlcnNXaXRoRG9tYWluUGFyc2VyKGZpbHRlcnNXaXRoRG9tYWlucyk7CisgICAgCiAg
ICAgYm9vbCBpZ25vcmVQcmV2aW91c1J1bGVzU2VlbiA9IGZhbHNlOwogICAgIGZvciAodW5zaWdu
ZWQgcnVsZUluZGV4ID0gMDsgcnVsZUluZGV4IDwgcGFyc2VkUnVsZUxpc3Quc2l6ZSgpOyArK3J1
bGVJbmRleCkgewogICAgICAgICBjb25zdCBDb250ZW50RXh0ZW5zaW9uUnVsZSYgY29udGVudEV4
dGVuc2lvblJ1bGUgPSBwYXJzZWRSdWxlTGlzdFtydWxlSW5kZXhdOwpAQCAtMTY2LDE4ICsxNzMs
MzYgQEAgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogCiAgICAgICAg
IC8vIEhpZ2ggYml0cyBhcmUgdXNlZCBmb3IgZmxhZ3MuIFRoaXMgc2hvdWxkIG1hdGNoIGhvdyB0
aGV5IGFyZSB1c2VkIGluIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlLgogICAgICAg
ICB1aW50NjRfdCBhY3Rpb25Mb2NhdGlvbkFuZEZsYWdzID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90
Pih0cmlnZ2VyLmZsYWdzKSA8PCAzMikgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYWN0aW9uTG9j
YXRpb25zW3J1bGVJbmRleF0pOwotICAgICAgICBVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVz
IHN0YXR1cyA9IHVybEZpbHRlclBhcnNlci5hZGRQYXR0ZXJuKHRyaWdnZXIudXJsRmlsdGVyLCB0
cmlnZ2VyLnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSwgYWN0aW9uTG9jYXRpb25BbmRGbGFncyk7
Ci0KLSAgICAgICAgaWYgKHN0YXR1cyA9PSBVUkxGaWx0ZXJQYXJzZXI6Ok1hdGNoZXNFdmVyeXRo
aW5nKSB7Ci0gICAgICAgICAgICBpZiAoaWdub3JlUHJldmlvdXNSdWxlc1NlZW4pCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6UmVnZXhNYXRjaGVzRXZlcnl0
aGluZ0FmdGVySWdub3JlUHJldmlvdXNSdWxlczsKLSAgICAgICAgICAgIHVuaXZlcnNhbEFjdGlv
bkxvY2F0aW9ucy5hZGQoYWN0aW9uTG9jYXRpb25BbmRGbGFncyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoc3RhdHVzICE9IFVSTEZpbHRlclBhcnNlcjo6T2sgJiYgc3RhdHVzICE9IFVSTEZp
bHRlclBhcnNlcjo6TWF0Y2hlc0V2ZXJ5dGhpbmcpIHsKLSAgICAgICAgICAgIGRhdGFMb2dGKCJF
cnJvciB3aGlsZSBwYXJzaW5nICVzOiAlc1xuIiwgdHJpZ2dlci51cmxGaWx0ZXIudXRmOCgpLmRh
dGEoKSwgVVJMRmlsdGVyUGFyc2VyOjpzdGF0dXNTdHJpbmcoc3RhdHVzKS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlk
UmVnZXg7CisgICAgICAgIFVSTEZpbHRlclBhcnNlcjo6UGFyc2VTdGF0dXMgc3RhdHVzID0gVVJM
RmlsdGVyUGFyc2VyOjpPazsKKyAgICAgICAgaWYgKHRyaWdnZXIuZG9tYWlucy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIHN0YXR1cyA9IGZpbHRlcnNXaXRob3V0RG9tYWluUGFyc2VyLmFkZFBh
dHRlcm4odHJpZ2dlci51cmxGaWx0ZXIsIHRyaWdnZXIudXJsRmlsdGVySXNDYXNlU2Vuc2l0aXZl
LCBhY3Rpb25Mb2NhdGlvbkFuZEZsYWdzKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gVVJM
RmlsdGVyUGFyc2VyOjpNYXRjaGVzRXZlcnl0aGluZykgeworICAgICAgICAgICAgICAgIGlmIChp
Z25vcmVQcmV2aW91c1J1bGVzU2VlbikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnRl
bnRFeHRlbnNpb25FcnJvcjo6UmVnZXhNYXRjaGVzRXZlcnl0aGluZ0FmdGVySWdub3JlUHJldmlv
dXNSdWxlczsKKyAgICAgICAgICAgICAgICB1bml2ZXJzYWxBY3Rpb25Mb2NhdGlvbnMuYWRkKGFj
dGlvbkxvY2F0aW9uQW5kRmxhZ3MpOworICAgICAgICAgICAgICAgIHN0YXR1cyA9IFVSTEZpbHRl
clBhcnNlcjo6T2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IFVS
TEZpbHRlclBhcnNlcjo6T2spIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiRXJyb3Igd2hp
bGUgcGFyc2luZyAlczogJXNcbiIsIHRyaWdnZXIudXJsRmlsdGVyLnV0ZjgoKS5kYXRhKCksIFVS
TEZpbHRlclBhcnNlcjo6c3RhdHVzU3RyaW5nKHN0YXR1cykudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRSZWdl
eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0cmln
Z2VyLmlmRG9tYWluKQorICAgICAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9uQW5kRmxhZ3MgfD0g
SWZEb21haW5GbGFnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEFTU0VSVCgh
KGFjdGlvbkxvY2F0aW9uQW5kRmxhZ3MgJiBJZkRvbWFpbkZsYWcpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgc3RhdHVzID0gZmlsdGVyc1dpdGhEb21haW5QYXJzZXIuYWRkUGF0dGVybih0
cmlnZ2VyLnVybEZpbHRlciwgdHJpZ2dlci51cmxGaWx0ZXJJc0Nhc2VTZW5zaXRpdmUsIGFjdGlv
bkxvY2F0aW9uQW5kRmxhZ3MpOworICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBVUkxGaWx0ZXJQ
YXJzZXI6Ok1hdGNoZXNFdmVyeXRoaW5nKQorICAgICAgICAgICAgICAgIHJldHVybiBDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OlJlZ2V4TWF0Y2hlc0V2ZXJ5dGhpbmdXaXRoRG9tYWluczsKKyAgICAg
ICAgICAgIGlmIChzdGF0dXMgIT0gVVJMRmlsdGVyUGFyc2VyOjpPaykgeworICAgICAgICAgICAg
ICAgIGRhdGFMb2dGKCJFcnJvciB3aGlsZSBwYXJzaW5nICVzOiAlc1xuIiwgdHJpZ2dlci51cmxG
aWx0ZXIudXRmOCgpLmRhdGEoKSwgVVJMRmlsdGVyUGFyc2VyOjpzdGF0dXNTdHJpbmcoc3RhdHVz
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OSW52YWxpZFJlZ2V4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9y
IChjb25zdCBTdHJpbmcmIGRvbWFpbiA6IHRyaWdnZXIuZG9tYWlucykKKyAgICAgICAgICAgICAg
ICBkb21haW5GaWx0ZXJzLmFkZERvbWFpbihhY3Rpb25Mb2NhdGlvbkFuZEZsYWdzLCBkb21haW4p
OwogICAgICAgICB9CisgICAgICAgIEFTU0VSVChzdGF0dXMgPT0gVVJMRmlsdGVyUGFyc2VyOjpP
ayk7CiAgICAgICAgIAogICAgICAgICBpZiAoY29udGVudEV4dGVuc2lvblJ1bGUuYWN0aW9uKCku
dHlwZSgpID09IEFjdGlvblR5cGU6Oklnbm9yZVByZXZpb3VzUnVsZXMpCiAgICAgICAgICAgICBp
Z25vcmVQcmV2aW91c1J1bGVzU2VlbiA9IHRydWU7CkBAIC0xOTIsNyArMjE3LDkgQEAgc3RkOjpl
cnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogICAgIGRhdGFMb2dGKCIgICAgVGlt
ZSBzcGVudCBwYXJ0aXRpb25pbmcgdGhlIHJ1bGVzIGludG8gZ3JvdXBzOiAlZlxuIiwgKHBhdHRl
cm5QYXJ0aXRpb25pbmdFbmQgLSBwYXR0ZXJuUGFydGl0aW9uaW5nU3RhcnQpKTsKICNlbmRpZgog
Ci0gICAgTE9HX0xBUkdFX1NUUlVDVFVSRVMoY29tYmluZWRVUkxGaWx0ZXJzLCBjb21iaW5lZFVS
TEZpbHRlcnMubWVtb3J5VXNlZCgpKTsKKyAgICBMT0dfTEFSR0VfU1RSVUNUVVJFUyhmaWx0ZXJz
V2l0aG91dERvbWFpbnMsIGZpbHRlcnNXaXRob3V0RG9tYWlucy5tZW1vcnlVc2VkKCkpOworICAg
IExPR19MQVJHRV9TVFJVQ1RVUkVTKGZpbHRlcnNXaXRoRG9tYWlucywgZmlsdGVyc1dpdGhEb21h
aW5zLm1lbW9yeVVzZWQoKSk7CisgICAgTE9HX0xBUkdFX1NUUlVDVFVSRVMoZG9tYWluRmlsdGVy
cywgZG9tYWluRmlsdGVycy5tZW1vcnlVc2VkKCkpOwogCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05T
X1BFUkZPUk1BTkNFX1JFUE9SVElORwogICAgIGRvdWJsZSB0b3RhbE5GQVRvQnl0ZUNvZGVCdWls
ZFRpbWVTdGFydCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwpAQCAtMjAzLDggKzIz
MCw5IEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEUKICAgICAKICAg
ICBib29sIGZpcnN0TkZBU2VlbiA9IGZhbHNlOwogICAgIC8vIEZJWE1FOiBDb21iaW5lIHNtYWxs
IE5GQXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgTkZBcy4KLSAgICBjb21iaW5lZFVSTEZpbHRl
cnMucHJvY2Vzc05GQXMobWF4TkZBU2l6ZSwgWyZdKE5GQSYmIG5mYSkgeworICAgIGZpbHRlcnNX
aXRob3V0RG9tYWlucy5wcm9jZXNzTkZBcyhtYXhORkFTaXplLCBbJl0oTkZBJiYgbmZhKSB7CiAj
aWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCisgICAgICAgIGRh
dGFMb2dGKCJmaWx0ZXJzV2l0aG91dERvbWFpbnMgTkZBXG4iKTsKICAgICAgICAgbmZhLmRlYnVn
UHJpbnREb3QoKTsKICNlbmRpZgogCkBAIC0yMTYsNyArMjQ0LDcgQEAgc3RkOjplcnJvcl9jb2Rl
IGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogICAgICAgICBkZmEubWluaW1pemUoKTsKIAogI2lm
IENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwotICAgICAgICBXVEZM
b2dBbHdheXMoIkRGQSIpOworICAgICAgICBkYXRhTG9nRigiZmlsdGVyc1dpdGhvdXREb21haW5z
IERGQVxuIik7CiAgICAgICAgIGRmYS5kZWJ1Z1ByaW50RG90KCk7CiAjZW5kaWYKICAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRSghZGZhLm5vZGVzW2RmYS5yb290XS5oYXNBY3Rpb25zKCksICJB
bGwgYWN0aW9ucyBvbiB0aGUgREZBIHJvb3Qgc2hvdWxkIGNvbWUgZnJvbSByZWd1bGFyIGV4cHJl
c3Npb25zIHRoYXQgbWF0Y2ggZXZlcnl0aGluZy4iKTsKQEAgLTIzMCwxMSArMjU4LDExIEBAIHN0
ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEUKICAgICAgICAgREZBQnl0ZWNv
ZGVDb21waWxlciBjb21waWxlcihkZmEsIGJ5dGVjb2RlKTsKICAgICAgICAgY29tcGlsZXIuY29t
cGlsZSgpOwogICAgICAgICBMT0dfTEFSR0VfU1RSVUNUVVJFUyhieXRlY29kZSwgYnl0ZWNvZGUu
Y2FwYWNpdHkoKSAqIHNpemVvZih1aW50OF90KSk7Ci0gICAgICAgIGNsaWVudC53cml0ZUJ5dGVj
b2RlKFdURjo6bW92ZShieXRlY29kZSkpOworICAgICAgICBjbGllbnQud3JpdGVGaWx0ZXJzV2l0
aG91dERvbWFpbnNCeXRlY29kZShXVEY6Om1vdmUoYnl0ZWNvZGUpKTsKIAogICAgICAgICBmaXJz
dE5GQVNlZW4gPSB0cnVlOwogICAgIH0pOwotICAgIEFTU0VSVChjb21iaW5lZFVSTEZpbHRlcnMu
aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoZmlsdGVyc1dpdGhvdXREb21haW5zLmlzRW1wdHkoKSk7
CiAKICAgICBpZiAoIWZpcnN0TkZBU2VlbikgewogICAgICAgICAvLyBPdXIgYnl0ZWNvZGUgaW50
ZXJwcmV0ZXIgZXhwZWN0cyB0byBoYXZlIGF0IGxlYXN0IG9uZSBERkEsIHNvIGlmIHdlIGhhdmVu
J3Qgc2VlbiBhbnkKQEAgLTI0OSwxMiArMjc3LDYyIEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxl
UnVsZUxpc3QoQ29udGVudEUKICAgICAgICAgREZBQnl0ZWNvZGVDb21waWxlciBjb21waWxlcihk
dW1teURGQSwgYnl0ZWNvZGUpOwogICAgICAgICBjb21waWxlci5jb21waWxlKCk7CiAgICAgICAg
IExPR19MQVJHRV9TVFJVQ1RVUkVTKGJ5dGVjb2RlLCBieXRlY29kZS5jYXBhY2l0eSgpICogc2l6
ZW9mKHVpbnQ4X3QpKTsKLSAgICAgICAgY2xpZW50LndyaXRlQnl0ZWNvZGUoV1RGOjptb3ZlKGJ5
dGVjb2RlKSk7CisgICAgICAgIGNsaWVudC53cml0ZUZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVj
b2RlKFdURjo6bW92ZShieXRlY29kZSkpOwogICAgIH0KLQogICAgIExPR19MQVJHRV9TVFJVQ1RV
UkVTKHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9ucywgdW5pdmVyc2FsQWN0aW9uTG9jYXRpb25zLmNh
cGFjaXR5KCkgKiBzaXplb2YodW5zaWduZWQpKTsKICAgICB1bml2ZXJzYWxBY3Rpb25Mb2NhdGlv
bnMuY2xlYXIoKTsKKyAgICAKKyAgICBmaWx0ZXJzV2l0aERvbWFpbnMucHJvY2Vzc05GQXMobWF4
TkZBU2l6ZSwgWyZdKE5GQSYmIG5mYSkgeworI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9N
QUNISU5FX0RFQlVHR0lORworICAgICAgICBkYXRhTG9nRigiZmlsdGVyc1dpdGhEb21haW5zIE5G
QVxuIik7CisgICAgICAgIG5mYS5kZWJ1Z1ByaW50RG90KCk7CisjZW5kaWYKKyAgICAgICAgTE9H
X0xBUkdFX1NUUlVDVFVSRVMobmZhLCBuZmEubWVtb3J5VXNlZCgpKTsKKyAgICAgICAgREZBIGRm
YSA9IE5GQVRvREZBOjpjb252ZXJ0KG5mYSk7CisjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRF
X01BQ0hJTkVfREVCVUdHSU5HCisgICAgICAgIGRhdGFMb2dGKCJmaWx0ZXJzV2l0aERvbWFpbnMg
UFJFIE1JTklNSVpJTkcgREZBXG4iKTsKKyAgICAgICAgZGZhLmRlYnVnUHJpbnREb3QoKTsKKyNl
bmRpZgorICAgICAgICBMT0dfTEFSR0VfU1RSVUNUVVJFUyhkZmEsIGRmYS5tZW1vcnlVc2VkKCkp
OworICAgICAgICAvLyBNaW5pbWl6aW5nIHRoaXMgREZBIHdvdWxkIG5vdCBiZSBlZmZlY3RpdmUg
YmVjYXVzZSBhbGwgYWN0aW9ucyB3aXRoIGRvbWFpbnMgYXJlIHVuaXF1ZS4KKyNpZiBDT05URU5U
X0VYVEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJVR0dJTkcKKyAgICAgICAgZGF0YUxvZ0YoImZp
bHRlcnNXaXRoRG9tYWlucyBQT1NUIE1JTklNSVpJTkcgREZBXG4iKTsKKyAgICAgICAgZGZhLmRl
YnVnUHJpbnREb3QoKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFkZmEu
bm9kZXNbZGZhLnJvb3RdLmhhc0FjdGlvbnMoKSwgIkZpbHRlcnMgd2l0aCBkb21haW5zIHRoYXQg
bWF0Y2ggZXZlcnl0aGluZyBhcmUgbm90IGFsbG93ZWQgcmlnaHQgbm93LiIpOworICAgICAgICAK
KyAgICAgICAgVmVjdG9yPERGQUJ5dGVjb2RlPiBieXRlY29kZTsKKyAgICAgICAgREZBQnl0ZWNv
ZGVDb21waWxlciBjb21waWxlcihkZmEsIGJ5dGVjb2RlKTsKKyAgICAgICAgY29tcGlsZXIuY29t
cGlsZSgpOworICAgICAgICBMT0dfTEFSR0VfU1RSVUNUVVJFUyhieXRlY29kZSwgYnl0ZWNvZGUu
Y2FwYWNpdHkoKSAqIHNpemVvZih1aW50OF90KSk7CisgICAgICAgIGNsaWVudC53cml0ZUZpbHRl
cnNXaXRoRG9tYWluc0J5dGVjb2RlKFdURjo6bW92ZShieXRlY29kZSkpOworICAgIH0pOworICAg
IEFTU0VSVChmaWx0ZXJzV2l0aERvbWFpbnMuaXNFbXB0eSgpKTsKIAorICAgIGRvbWFpbkZpbHRl
cnMucHJvY2Vzc05GQXMobWF4TkZBU2l6ZSwgWyZdKE5GQSYmIG5mYSkgeworI2lmIENPTlRFTlRf
RVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORworICAgICAgICBkYXRhTG9nRigiZG9t
YWluRmlsdGVycyBORkFcbiIpOworICAgICAgICBuZmEuZGVidWdQcmludERvdCgpOworI2VuZGlm
CisgICAgICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKG5mYSwgbmZhLm1lbW9yeVVzZWQoKSk7Cisg
ICAgICAgIERGQSBkZmEgPSBORkFUb0RGQTo6Y29udmVydChuZmEpOworI2lmIENPTlRFTlRfRVhU
RU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORworICAgICAgICBkYXRhTG9nRigiZG9tYWlu
RmlsdGVycyBERkFcbiIpOworICAgICAgICBkZmEuZGVidWdQcmludERvdCgpOworI2VuZGlmCisg
ICAgICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKGRmYSwgZGZhLm1lbW9yeVVzZWQoKSk7CisgICAg
ICAgIC8vIE1pbmltaXppbmcgdGhpcyBERkEgd291bGQgbm90IGJlIGVmZmVjdGl2ZSBiZWNhdXNl
IGFsbCBhY3Rpb25zIGFyZSB1bmlxdWUKKyAgICAgICAgLy8gYW5kIGJlY2F1c2Ugb2YgdGhlIHRy
ZWUtbGlrZSBzdHJ1Y3R1cmUgb2YgdGhpcyBERkEuCisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UoIWRmYS5ub2Rlc1tkZmEucm9vdF0uaGFzQWN0aW9ucygpLCAiVGhlcmUgc2hvdWxkIG5vdCBi
ZSBhbnkgZG9tYWlucyB0aGF0IG1hdGNoIGV2ZXJ5dGhpbmcuIik7CisgICAgICAgIAorICAgICAg
ICBWZWN0b3I8REZBQnl0ZWNvZGU+IGJ5dGVjb2RlOworICAgICAgICBERkFCeXRlY29kZUNvbXBp
bGVyIGNvbXBpbGVyKGRmYSwgYnl0ZWNvZGUpOworICAgICAgICBjb21waWxlci5jb21waWxlKCk7
CisgICAgICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKGJ5dGVjb2RlLCBieXRlY29kZS5jYXBhY2l0
eSgpICogc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgY2xpZW50LndyaXRlRG9tYWluRmlsdGVy
c0J5dGVjb2RlKFdURjo6bW92ZShieXRlY29kZSkpOworICAgIH0pOworICAgIEFTU0VSVChkb21h
aW5GaWx0ZXJzLmlzRW1wdHkoKSk7ICAgIAorICAgIAogI2lmIENPTlRFTlRfRVhURU5TSU9OU19Q
RVJGT1JNQU5DRV9SRVBPUlRJTkcKICAgICBkb3VibGUgdG90YWxORkFUb0J5dGVDb2RlQnVpbGRU
aW1lRW5kID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgZGF0YUxvZ0YoIiAg
ICBUaW1lIHNwZW50IGJ1aWxkaW5nIGFuZCBjb21waWxpbmcgdGhlIERGQXM6ICVmXG4iLCAodG90
YWxORkFUb0J5dGVDb2RlQnVpbGRUaW1lRW5kIC0gdG90YWxORkFUb0J5dGVDb2RlQnVpbGRUaW1l
U3RhcnQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25Db21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oCShyZXZpc2lvbiAxODM4ODApCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGls
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTcgKzM2LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewogCi1zdHJ1Y3QgQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YSB7Ci0gICAgVmVjdG9yPERGQUJ5dGVjb2RlPiBieXRlY29kZTsKLSAg
ICBWZWN0b3I8U2VyaWFsaXplZEFjdGlvbkJ5dGU+IGFjdGlvbnM7Ci19OwotCiBjbGFzcyBDb250
ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkNv
bnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCgpIHsgfQogICAgIAotICAgIHZpcnR1YWwg
dm9pZCB3cml0ZUJ5dGVjb2RlKFZlY3RvcjxERkFCeXRlY29kZT4mJikgPSAwOworICAgIC8vIEZ1
bmN0aW9ucyBzaG91bGQgYmUgY2FsbGVkIGluIHRoaXMgb3JkZXIuIEFsbCBleGNlcHQgd3JpdGVB
Y3Rpb25zIGFuZCBmaW5hbGl6ZSBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLCB0aG91Z2gu
CiAgICAgdmlydHVhbCB2b2lkIHdyaXRlQWN0aW9ucyhWZWN0b3I8U2VyaWFsaXplZEFjdGlvbkJ5
dGU+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVGaWx0ZXJzV2l0aG91dERvbWFpbnNC
eXRlY29kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgd3Jp
dGVGaWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVEb21haW5GaWx0ZXJzQnl0ZWNvZGUoVmVjdG9yPERGQUJ5
dGVjb2RlPiYmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKCkgPSAwOwogfTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkVy
cm9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCShyZXZpc2lvbiAxODM4ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw2ICs3NywxNCBAQCBjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiBjb250
ZW50RXh0ZW5zCiAgICAgICAgICAgICAgICAgcmV0dXJuICJJbnZhbGlkIG9yIHVuc3VwcG9ydGVk
IHJlZ3VsYXIgZXhwcmVzc2lvbi4iOwogICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9u
RXJyb3I6OlJlZ2V4TWF0Y2hlc0V2ZXJ5dGhpbmdBZnRlcklnbm9yZVByZXZpb3VzUnVsZXM6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuICJSZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgbWF0Y2ggZXZl
cnl0aGluZyBhcmUgb25seSBhbGxvd2VkIGJlZm9yZSB0aGUgZmlyc3QgaWdub3JlLXByZXZpb3Vz
LXJ1bGVzLiI7CisgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6UmVnZXhN
YXRjaGVzRXZlcnl0aGluZ1dpdGhEb21haW5zOgorICAgICAgICAgICAgICAgIHJldHVybiAiUmVn
dWxhciBleHByZXNzaW9ucyB0aGF0IG1hdGNoIGV2ZXJ5dGhpbmcgYXJlIG5vdCBhbGxvd2VkIHdp
dGggdW5sZXNzLSBvciBpZi1kb21haW4uIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVu
c2lvbkVycm9yOjpKU09OSW52YWxpZERvbWFpbkxpc3Q6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICJJbnZhbGlkIGRvbWFpbiBsaXN0LiI7CisgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNp
b25FcnJvcjo6SlNPTkRvbWFpbk5vdExvd2VyQ2FzZUFTQ0lJOgorICAgICAgICAgICAgICAgIHJl
dHVybiAiRG9tYWlucyBtdXN0IGJlIGxvd2VyIGNhc2UgQVNDSUkuICBVc2UgcHVueWNvZGUgdG8g
ZW5jb2RlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLiI7CisgICAgICAgICAgICBjYXNlIENvbnRlbnRF
eHRlbnNpb25FcnJvcjo6SlNPTlVubGVzc0FuZElmRG9tYWluOgorICAgICAgICAgICAgICAgIHJl
dHVybiAiQSB0cmlnZ2VyIGNhbm5vdCBoYXZlIGJvdGggdW5sZXNzLSBhbmQgaWYtZG9tYWluLiI7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbkVycm9yLmgJKHJldmlzaW9uIDE4Mzg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw2ICs0OSw5IEBAIGVudW0gY2xhc3MgQ29udGVudEV4dGVuc2lvbkVycm9yIHsKICAgICBK
U09OSW52YWxpZFRyaWdnZXJGbGFnc0FycmF5LAogICAgIEpTT05JbnZhbGlkT2JqZWN0SW5Ucmln
Z2VyRmxhZ3NBcnJheSwKICAgICBKU09OSW52YWxpZFN0cmluZ0luVHJpZ2dlckZsYWdzQXJyYXks
CisgICAgSlNPTkludmFsaWREb21haW5MaXN0LAorICAgIEpTT05Eb21haW5Ob3RMb3dlckNhc2VB
U0NJSSwKKyAgICBKU09OVW5sZXNzQW5kSWZEb21haW4sCiAgICAgCiAgICAgSlNPTkludmFsaWRB
Y3Rpb24sCiAgICAgSlNPTkludmFsaWRBY3Rpb25UeXBlLApAQCAtNTYsOSArNTksMTAgQEAgZW51
bSBjbGFzcyBDb250ZW50RXh0ZW5zaW9uRXJyb3IgewogICAgIEpTT05JbnZhbGlkUmVnZXgsCiAg
ICAgCiAgICAgUmVnZXhNYXRjaGVzRXZlcnl0aGluZ0FmdGVySWdub3JlUHJldmlvdXNSdWxlcywK
KyAgICBSZWdleE1hdGNoZXNFdmVyeXRoaW5nV2l0aERvbWFpbnMsCiB9OwogCi1jb25zdCBzdGQ6
OmVycm9yX2NhdGVnb3J5JiBjb250ZW50RXh0ZW5zaW9uRXJyb3JDYXRlZ29yeSgpOworV0VCQ09S
RV9FWFBPUlQgY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgY29udGVudEV4dGVuc2lvbkVycm9y
Q2F0ZWdvcnkoKTsKIAogaW5saW5lIHN0ZDo6ZXJyb3JfY29kZSBtYWtlX2Vycm9yX2NvZGUoQ29u
dGVudEV4dGVuc2lvbkVycm9yIGVycm9yKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJ
KHJldmlzaW9uIDE4Mzg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0Nv
bnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwzNCBA
QCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2Ug
Q29udGVudEV4dGVuc2lvbnMgeworICAgIAorc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXREb21h
aW5MaXN0KEV4ZWNTdGF0ZSYgZXhlYywgSlNPYmplY3QqIGFycmF5T2JqZWN0LCBWZWN0b3I8U3Ry
aW5nPiYgdmVjdG9yKQoreworICAgIEFTU0VSVCh2ZWN0b3IuaXNFbXB0eSgpKTsKKyAgICBpZiAo
IWFycmF5T2JqZWN0IHx8ICFpc0pTQXJyYXkoYXJyYXlPYmplY3QpKQorICAgICAgICByZXR1cm4g
Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZERvbWFpbkxpc3Q7CisgICAgSlNBcnJh
eSogYXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KGFycmF5T2JqZWN0KTsKKyAgICAKKyAgICB1bnNp
Z25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIC8vIEZJWE1FOiBKU09iamVjdDo6Z2V0SW5kZXgg
c2hvdWxkIGJlIG1hcmtlZCBhcyBjb25zdC4KKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGFycmF5
LT5nZXRJbmRleCgmZXhlYywgaSk7CisgICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpIHx8
ICF2YWx1ZSB8fCAhdmFsdWUuaXNTdHJpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdDsKKyAgICAgICAgCisgICAgICAg
IC8vIERvbWFpbnMgc2hvdWxkIGJlIHB1bnljb2RlIGVuY29kZWQgbG93ZXIgY2FzZS4KKyAgICAg
ICAgU3RyaW5nIGRvbWFpbiA9IHZhbHVlLnRvV1RGU3RyaW5nKCZleGVjKTsKKyAgICAgICAgaWYg
KGRvbWFpbi5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVy
cm9yOjpKU09OSW52YWxpZERvbWFpbkxpc3Q7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkb21haW4ubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgVUNoYXIgYyA9IGRvbWFp
bi5hdChpKTsKKyAgICAgICAgICAgIGlmICghaXNBU0NJSShkb21haW5baV0pIHx8IGlzQVNDSUlV
cHBlcihjKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpK
U09ORG9tYWluTm90TG93ZXJDYXNlQVNDSUk7CisgICAgICAgIH0KKyAgICAgICAgdmVjdG9yLmFw
cGVuZChkb21haW4pOworICAgIH0KKyAgICByZXR1cm4geyB9OworfQogCiBzdGF0aWMgc3RkOjpl
cnJvcl9jb2RlIGdldFR5cGVGbGFncyhFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IEpTVmFsdWUmIHR5
cGVWYWx1ZSwgUmVzb3VyY2VGbGFncyYgZmxhZ3MsIHVpbnQxNl90ICgqc3RyaW5nVG9UeXBlKShj
b25zdCBTdHJpbmcmKSkKIHsKQEAgLTEwOSw2ICsxMzcsMjkgQEAgc3RhdGljIHN0ZDo6ZXJyb3Jf
Y29kZSBsb2FkVHJpZ2dlcihFeGVjUwogICAgICAgICAgICAgcmV0dXJuIHR5cGVGbGFnc0Vycm9y
OwogICAgIH0KIAorICAgIEpTVmFsdWUgaWZEb21haW4gPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImlmLWRvbWFpbiIpKTsKKyAgICBpZiAo
aWZEb21haW4gJiYgIWV4ZWMuaGFkRXhjZXB0aW9uKCkgJiYgaWZEb21haW4uaXNPYmplY3QoKSkg
eworICAgICAgICBhdXRvIGlmRG9tYWluRXJyb3IgPSBnZXREb21haW5MaXN0KGV4ZWMsIGlmRG9t
YWluLnRvT2JqZWN0KCZleGVjKSwgdHJpZ2dlci5kb21haW5zKTsKKyAgICAgICAgaWYgKGlmRG9t
YWluRXJyb3IpCisgICAgICAgICAgICByZXR1cm4gaWZEb21haW5FcnJvcjsKKyAgICAgICAgaWYg
KHRyaWdnZXIuZG9tYWlucy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4
dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZERvbWFpbkxpc3Q7CisgICAgICAgIEFTU0VSVCghdHJp
Z2dlci5pZkRvbWFpbik7CisgICAgICAgIHRyaWdnZXIuaWZEb21haW4gPSB0cnVlOworICAgIH0K
KyAgICAKKyAgICBKU1ZhbHVlIHVubGVzc0RvbWFpbiA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVj
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAidW5sZXNzLWRvbWFpbiIpKTsKKyAgICBp
ZiAodW5sZXNzRG9tYWluICYmICFleGVjLmhhZEV4Y2VwdGlvbigpICYmIHVubGVzc0RvbWFpbi5p
c09iamVjdCgpKSB7CisgICAgICAgIGlmICh0cmlnZ2VyLmlmRG9tYWluKQorICAgICAgICAgICAg
cmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlVubGVzc0FuZElmRG9tYWluOworICAg
ICAgICBhdXRvIHVubGVzc0RvbWFpbkVycm9yID0gZ2V0RG9tYWluTGlzdChleGVjLCB1bmxlc3NE
b21haW4udG9PYmplY3QoJmV4ZWMpLCB0cmlnZ2VyLmRvbWFpbnMpOworICAgICAgICBpZiAodW5s
ZXNzRG9tYWluRXJyb3IpCisgICAgICAgICAgICByZXR1cm4gdW5sZXNzRG9tYWluRXJyb3I7Cisg
ICAgICAgIGlmICh0cmlnZ2VyLmRvbWFpbnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
IENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWREb21haW5MaXN0OworICAgICAgICBB
U1NFUlQoIXRyaWdnZXIuaWZEb21haW4pOworICAgIH0KKwogICAgIHJldHVybiB7IH07CiB9CiAK
QEAgLTE2MCw2ICsyMTEsNyBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRSdWxlKEV4ZWNT
dGF0CiAKIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZEVuY29kZWRSdWxlcyhFeGVjU3RhdGUm
IGV4ZWMsIGNvbnN0IFN0cmluZyYgcnVsZXMsIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4m
IHJ1bGVMaXN0KQogeworICAgIC8vIEZJWE1FOiBKU09OUGFyc2Ugc2hvdWxkIHJlcXVpcmUgY2Fs
bGJhY2tzIGluc3RlYWQgb2YgYW4gRXhlY1N0YXRlLgogICAgIEpTVmFsdWUgZGVjb2RlZFJ1bGVz
ID0gSlNPTlBhcnNlKCZleGVjLCBydWxlcyk7CiAKICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24o
KSB8fCAhZGVjb2RlZFJ1bGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCShyZXZpc2lvbiAxODM4ODAp
CisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMSArNDUsMTYgQEAgc3RydWN0IFRyaWdnZXIgewog
ICAgIFN0cmluZyB1cmxGaWx0ZXI7CiAgICAgYm9vbCB1cmxGaWx0ZXJJc0Nhc2VTZW5zaXRpdmUg
eyBmYWxzZSB9OwogICAgIFJlc291cmNlRmxhZ3MgZmxhZ3MgeyAwIH07CisgICAgVmVjdG9yPFN0
cmluZz4gZG9tYWluczsKKyAgICBib29sIGlmRG9tYWluIHsgZmFsc2UgfTsgLy8gSWYgdGhpcyBp
cyBmYWxzZSwgdGhhdCBtZWFucyBkb21haW5zIGlzIGEgbGlzdCBvZiB1bmxlc3MtZG9tYWlucyBp
ZiBpdCBpcyBub3QgZW1wdHkuCisgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyaWdn
ZXImIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHVybEZpbHRlciA9PSBvdGhl
ci51cmxGaWx0ZXIKICAgICAgICAgICAgICYmIHVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSA9PSBv
dGhlci51cmxGaWx0ZXJJc0Nhc2VTZW5zaXRpdmUKLSAgICAgICAgICAgICYmIGZsYWdzID09IG90
aGVyLmZsYWdzOworICAgICAgICAgICAgJiYgZmxhZ3MgPT0gb3RoZXIuZmxhZ3MKKyAgICAgICAg
ICAgICYmIGRvbWFpbnMgPT0gb3RoZXIuZG9tYWlucworICAgICAgICAgICAgJiYgaWZEb21haW4g
PT0gb3RoZXIuaWZEb21haW47CiAgICAgfQogfTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNC
YWNrZW5kLmNwcAkocmV2aXNpb24gMTgzODgwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODgsOCArODgsNDAgQEAgVmVjdG9yPEFjdGlvbj4gQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kOgog
ICAgIGZvciAoYXV0byYgY29udGVudEV4dGVuc2lvbiA6IG1fY29udGVudEV4dGVuc2lvbnMudmFs
dWVzKCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29udGVudEV4dGVuc2lvbik7CiAgICAg
ICAgIGNvbnN0IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbiYgY29tcGlsZWRFeHRlbnNpb24gPSBj
b250ZW50RXh0ZW5zaW9uLT5jb21waWxlZEV4dGVuc2lvbigpOwotICAgICAgICBERkFCeXRlY29k
ZUludGVycHJldGVyIGludGVycHJldGVyKGNvbXBpbGVkRXh0ZW5zaW9uLmJ5dGVjb2RlKCksIGNv
bXBpbGVkRXh0ZW5zaW9uLmJ5dGVjb2RlTGVuZ3RoKCksIGNvbnRlbnRFeHRlbnNpb24tPm1fcGFn
ZXNVc2VkKTsKLSAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyB0cmlnZ2Vy
ZWRBY3Rpb25zID0gaW50ZXJwcmV0ZXIuaW50ZXJwcmV0KHVybENTdHJpbmcsIGZsYWdzKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgdXNlIGEgZGlmZmVyZW50IFZl
Y3Rvcjxib29sPiB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIG1lbW9yeSBwYWdlcyBhcmUgdXNlZCB3
aGVuIGRvaW5nIG1lbW9yeSByZXBvcnRpbmcuIE9yIGp1c3QgcmVtb3ZlIHRoZSBtZW1vcnkgcmVw
b3J0aW5nIGNvbXBsZXRlbHkuCisgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgd2l0aG91
dERvbWFpbnNJbnRlcnByZXRlcihjb21waWxlZEV4dGVuc2lvbi5maWx0ZXJzV2l0aG91dERvbWFp
bnNCeXRlY29kZSgpLCBjb21waWxlZEV4dGVuc2lvbi5maWx0ZXJzV2l0aG91dERvbWFpbnNCeXRl
Y29kZUxlbmd0aCgpLCBjb250ZW50RXh0ZW5zaW9uLT5tX3BhZ2VzVXNlZCk7CisgICAgICAgIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgdHJpZ2dlcmVkQWN0aW9ucyA9IHdpdGhvdXRE
b21haW5zSW50ZXJwcmV0ZXIuaW50ZXJwcmV0KHVybENTdHJpbmcsIGZsYWdzKTsKKyAgICAgICAg
CisgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGFjdGlvbnMgdHJpZ2dl
cmVkIHdpdGggaWYtIG9yIHVubGVzcy1kb21haW4gYW5kIGNoZWNrIHRoZSBkb21haW4gaWYgdGhl
cmUgYXJlLgorICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyIHdpdGhEb21haW5zSW50ZXJw
cmV0ZXIoY29tcGlsZWRFeHRlbnNpb24uZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGUoKSwgY29t
cGlsZWRFeHRlbnNpb24uZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGVMZW5ndGgoKSwgY29udGVu
dEV4dGVuc2lvbi0+bV9wYWdlc1VzZWQpOworICAgICAgICAKKyAgICAgICAgREZBQnl0ZWNvZGVJ
bnRlcnByZXRlcjo6QWN0aW9ucyB3aXRoRG9tYWluc1Bvc3NpYmxlQWN0aW9ucyA9IHdpdGhEb21h
aW5zSW50ZXJwcmV0ZXIuaW50ZXJwcmV0KHVybENTdHJpbmcsIGZsYWdzKTsKKyAgICAgICAgaWYg
KCF3aXRoRG9tYWluc1Bvc3NpYmxlQWN0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXIgZG9tYWluc0ludGVycHJldGVyKGNvbXBpbGVkRXh0ZW5zaW9u
LmRvbWFpbkZpbHRlcnNCeXRlY29kZSgpLCBjb21waWxlZEV4dGVuc2lvbi5kb21haW5GaWx0ZXJz
Qnl0ZWNvZGVMZW5ndGgoKSwgY29udGVudEV4dGVuc2lvbi0+bV9wYWdlc1VzZWQpOworICAgICAg
ICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBkb21haW5zQWN0aW9ucyA9IGRv
bWFpbnNJbnRlcnByZXRlci5pbnRlcnByZXQocmVzb3VyY2VMb2FkSW5mby5tYWluRG9jdW1lbnRV
UkwuaG9zdCgpLnV0ZjgoKSwgZmxhZ3MpOworICAgICAgICAgICAgCisgICAgICAgICAgICBERkFC
eXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIGlmRG9tYWluQWN0aW9uczsKKyAgICAgICAgICAg
IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgdW5sZXNzRG9tYWluQWN0aW9uczsKKyAg
ICAgICAgICAgIGZvciAodWludDY0X3QgYWN0aW9uIDogZG9tYWluc0FjdGlvbnMpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYWN0aW9uICYgSWZEb21haW5GbGFnKQorICAgICAgICAgICAgICAgICAg
ICBpZkRvbWFpbkFjdGlvbnMuYWRkKGFjdGlvbik7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICB1bmxlc3NEb21haW5BY3Rpb25zLmFkZChhY3Rpb24pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbiA6
IHdpdGhEb21haW5zUG9zc2libGVBY3Rpb25zKSB7CisgICAgICAgICAgICAgICAgaWYgKGlmRG9t
YWluQWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElm
IGFuIGlmLWRvbWFpbiB0cmlnZ2VyIG1hdGNoZXMsIGFkZCB0aGUgYWN0aW9uLgorICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoYWN0aW9uICYgSWZEb21haW5GbGFnKTsKKyAgICAgICAgICAgICAg
ICAgICAgdHJpZ2dlcmVkQWN0aW9ucy5hZGQoYWN0aW9uICYgfklmRG9tYWluRmxhZyk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICghKGFjdGlvbiAmIElmRG9tYWluRmxhZykgJiYgIXVubGVz
c0RvbWFpbkFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICAv
LyBJZiB0aGlzIGFjdGlvbiBkaWQgbm90IG5lZWQgYW4gaWYtZG9tYWluLCBpdCBtdXN0IGhhdmUg
YmVlbiBhbiB1bmxlc3MtZG9tYWluIHJ1bGUuCisgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0
aGUgYWN0aW9uIHVubGVzcyBpdCBtYXRjaGVkIGFuIHVubGVzcy1kb21haW4gdHJpZ2dlci4KKyAg
ICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkQWN0aW9ucy5hZGQoYWN0aW9uKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNv
bnN0IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zID0gY29tcGlsZWRFeHRlbnNpb24uYWN0
aW9ucygpOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBhY3Rpb25zTGVuZ3RoID0gY29tcGlsZWRF
eHRlbnNpb24uYWN0aW9uc0xlbmd0aCgpOwpAQCAtMTE0LDggKzE0Niw5IEBAIFZlY3RvcjxBY3Rp
b24+IENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDoKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICBpZiAoIXNhd0lnbm9yZVByZXZpb3VzUnVsZXMpIHsKLSAgICAgICAgICAgIERGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgdW5pdmVyc2FsQWN0aW9ucyA9IGludGVycHJldGVy
LmFjdGlvbnNGcm9tREZBUm9vdCgpOworICAgICAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRl
cjo6QWN0aW9ucyB1bml2ZXJzYWxBY3Rpb25zID0gd2l0aG91dERvbWFpbnNJbnRlcnByZXRlci5h
Y3Rpb25zRnJvbURGQVJvb3QoKTsKICAgICAgICAgICAgIGZvciAoYXV0byBhY3Rpb25Mb2NhdGlv
biA6IHVuaXZlcnNhbEFjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkbid0IGRlc2VyaWFsaXplIGFuIGFjdGlvbiBhbGwgdGhlIHdheSBpZiBpdCBpcyBhIGNzcy1k
aXNwbGF5LW5vbmUgc2VsZWN0b3IuCiAgICAgICAgICAgICAgICAgQWN0aW9uIGFjdGlvbiA9IEFj
dGlvbjo6ZGVzZXJpYWxpemUoYWN0aW9ucywgYWN0aW9uc0xlbmd0aCwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGFjdGlvbkxvY2F0aW9uKSk7CiAgICAgICAgICAgICAgICAgYWN0aW9uLnNldEV4dGVu
c2lvbklkZW50aWZpZXIoY29udGVudEV4dGVuc2lvbi0+aWRlbnRpZmllcigpKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCShyZXZp
c2lvbiAxODM4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMSArNTIsMTMgQEAgZW51bSBjbGFzcyBERkFC
eXRlY29kZUluc3RydWN0aW9uIDogdWludAogICAgIC8vIEFwcGVuZEFjdGlvbiBoYXMgb25lIGFy
Z3VtZW50OgogICAgIC8vIFRoZSBhY3Rpb24gdG8gYXBwZW5kICg0IGJ5dGVzKS4KICAgICBBcHBl
bmRBY3Rpb24sCisgICAgQXBwZW5kQWN0aW9uV2l0aElmRG9tYWluLAogICAgIAogICAgIC8vIFRl
c3RGbGFnc0FuZEFwcGVuZEFjdGlvbiBoYXMgdHdvIGFyZ3VtZW50czoKLSAgICAvLyBUaGUgZmxh
Z3MgdG8gY2hlY2sgYmVmb3JlIGFwcGVuZGluZyAoMiBieXRlcyksCi0gICAgLy8gVGhlIGFjdGlv
biB0byBhcHBlbmQgKDRieXRlcykuCisgICAgLy8gVGhlIGZsYWdzIHRvIGNoZWNrIGJlZm9yZSBh
cHBlbmRpbmcgKDIgYnl0ZXMpLgorICAgIC8vIFRoZSBhY3Rpb24gdG8gYXBwZW5kICg0IGJ5dGVz
KS4KICAgICBUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24sCisgICAgVGVzdEZsYWdzQW5kQXBwZW5k
QWN0aW9uV2l0aElmRG9tYWluLAogCiAgICAgLy8gVGVybWluYXRlIGhhcyBubyBhcmd1bWVudHMu
CiAgICAgVGVybWluYXRlLApAQCAtNzYsOCArNzgsMTAgQEAgc3RhdGljIGlubGluZSBzaXplX3Qg
aW5zdHJ1Y3Rpb25TaXplV2l0aAogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hl
Y2tWYWx1ZVJhbmdlQ2FzZUluc2Vuc2l0aXZlOgogICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKHVpbnQ4X3QpICsg
c2l6ZW9mKHVuc2lnbmVkKTsKICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVu
ZEFjdGlvbjoKKyAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldp
dGhJZkRvbWFpbjoKICAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9u
KSArIHNpemVvZih1bnNpZ25lZCk7CiAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpU
ZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb246CisgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9u
OjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW46CiAgICAgICAgIHJldHVybiBz
aXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodWludDE2X3QpICsgc2l6ZW9m
KHVuc2lnbmVkKTsKICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlcm1pbmF0ZToK
ICAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2Rl
Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODM4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgs
MTYgKzQ4LDIyIEBAIGlubGluZSB2b2lkIHNldDMyQml0cyhWZWN0b3I8REZBQnl0ZWNvZGUKICAg
ICAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KCZieXRlY29kZVtpbmRleF0pID0gdmFsdWU7
CiB9CiAKLXZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdEFwcGVuZEFjdGlvbih1bnNpZ25l
ZCBhY3Rpb24pCit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRBcHBlbmRBY3Rpb24odW5z
aWduZWQgYWN0aW9uLCBib29sIGlmRG9tYWluKQogewotICAgIGFwcGVuZDxERkFCeXRlY29kZUlu
c3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rp
b24pOworICAgIGlmIChpZkRvbWFpbikKKyAgICAgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldp
dGhJZkRvbWFpbik7CisgICAgZWxzZQorICAgICAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVj
dGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKTsK
ICAgICBhcHBlbmQ8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIGFjdGlvbik7CiB9CiAKLXZvaWQgREZB
Qnl0ZWNvZGVDb21waWxlcjo6ZW1pdFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbih1aW50MTZfdCBm
bGFncywgdW5zaWduZWQgYWN0aW9uKQordm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0VGVz
dEZsYWdzQW5kQXBwZW5kQWN0aW9uKHVpbnQxNl90IGZsYWdzLCB1bnNpZ25lZCBhY3Rpb24sIGJv
b2wgaWZEb21haW4pCiB7CiAgICAgQVNTRVJUKGZsYWdzKTsKLSAgICBhcHBlbmQ8REZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZs
YWdzQW5kQXBwZW5kQWN0aW9uKTsKKyAgICBpZiAoaWZEb21haW4pCisgICAgICAgIGFwcGVuZDxE
RkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9u
OjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pOworICAgIGVsc2UKKyAgICAg
ICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbik7CiAgICAgYXBwZW5kPHVpbnQx
Nl90PihtX2J5dGVjb2RlLCBmbGFncyk7CiAgICAgYXBwZW5kPHVuc2lnbmVkPihtX2J5dGVjb2Rl
LCBhY3Rpb24pOwogfQpAQCAtMTA2LDExICsxMTIsMTEgQEAgdm9pZCBERkFCeXRlY29kZUNvbXBp
bGVyOjpjb21waWxlTm9kZSh1bgogICAgICAgICBtX25vZGVTdGFydE9mZnNldHNbaW5kZXhdID0g
bV9ieXRlY29kZS5zaXplKCk7CiAKICAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbiA6IG5vZGUuYWN0
aW9ucyhtX2RmYSkpIHsKLSAgICAgICAgLy8gSGlnaCBiaXRzIGFyZSB1c2VkIHRvIHN0b3JlIGZs
YWdzLiBTZWUgY29tcGlsZVJ1bGVMaXN0LgorICAgICAgICAvLyBIaWdoIGJpdHMgYXJlIHVzZWQg
dG8gc3RvcmUgZmxhZ3MuIEEgYm9vbGVhbiBpcyBzdG9yZWQgaW4gdGhlIDQ4dGggYml0LiBTZWUg
Y29tcGlsZVJ1bGVMaXN0LgogICAgICAgICBpZiAoYWN0aW9uICYgMHhGRkZGMDAwMDAwMDApCi0g
ICAgICAgICAgICBlbWl0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHN0YXRpY19jYXN0PHVpbnQx
Nl90PihhY3Rpb24gPj4gMzIpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0aW9uKSk7CisgICAg
ICAgICAgICBlbWl0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHN0YXRpY19jYXN0PHVpbnQxNl90
PihhY3Rpb24gPj4gMzIpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0aW9uKSwgYWN0aW9uICYg
SWZEb21haW5GbGFnKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZW1pdEFwcGVuZEFjdGlv
bihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0aW9uKSk7CisgICAgICAgICAgICBlbWl0QXBwZW5k
QWN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihhY3Rpb24pLCBhY3Rpb24gJiBJZkRvbWFpbkZs
YWcpOwogICAgIH0KICAgICAKICAgICAvLyBJZiB3ZSBqdW1wIHRvIHRoZSByb290LCB3ZSBkb24n
dCB3YW50IHRvIHJlLWFkZCBpdHMgYWN0aW9ucyB0byBhIEhhc2hTZXQuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxl
ci5oCShyZXZpc2lvbiAxODM4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9ERkFCeXRlY29kZUNvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDggKzY2LDggQEAg
cHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVOb2RlVHJhbnNpdGlvbnMoY29uc3QgREZBTm9kZSYp
OwogICAgIHZvaWQgY29tcGlsZUNoZWNrRm9yUmFuZ2UoY29uc3QgUmFuZ2UmKTsKIAotICAgIHZv
aWQgZW1pdEFwcGVuZEFjdGlvbih1bnNpZ25lZCk7Ci0gICAgdm9pZCBlbWl0VGVzdEZsYWdzQW5k
QXBwZW5kQWN0aW9uKHVpbnQxNl90IGZsYWdzLCB1bnNpZ25lZCk7CisgICAgdm9pZCBlbWl0QXBw
ZW5kQWN0aW9uKHVuc2lnbmVkLCBib29sIGlmRG9tYWluKTsKKyAgICB2b2lkIGVtaXRUZXN0Rmxh
Z3NBbmRBcHBlbmRBY3Rpb24odWludDE2X3QgZmxhZ3MsIHVuc2lnbmVkLCBib29sIGlmRG9tYWlu
KTsKICAgICB2b2lkIGVtaXRKdW1wKHVuc2lnbmVkIGRlc3RpbmF0aW9uTm9kZUluZGV4KTsKICAg
ICB2b2lkIGVtaXRDaGVja1ZhbHVlKHVpbnQ4X3QgdmFsdWUsIHVuc2lnbmVkIGRlc3RpbmF0aW9u
Tm9kZUluZGV4LCBib29sIGNhc2VTZW5zaXRpdmUpOwogICAgIHZvaWQgZW1pdENoZWNrVmFsdWVS
YW5nZSh1aW50OF90IGxvd1ZhbHVlLCB1aW50OF90IGhpZ2hWYWx1ZSwgdW5zaWduZWQgZGVzdGlu
YXRpb25Ob2RlSW5kZXgsIGJvb2wgY2FzZVNlbnNpdGl2ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJl
dGVyLmNwcAkocmV2aXNpb24gMTgzODgwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE4
ICs1MCwyMCBAQCBzdGF0aWMgaW5saW5lIEludFR5cGUgZ2V0Qml0cyhjb25zdCBERkFCCiAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IEludFR5cGUqPigmYnl0ZWNvZGVbaW5kZXhd
KTsKIH0KICAgICAKLXZvaWQgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0QXBwZW5k
QWN0aW9uKHVuc2lnbmVkJiBwcm9ncmFtQ291bnRlciwgQWN0aW9ucyYgYWN0aW9ucykKK3ZvaWQg
REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0QXBwZW5kQWN0aW9uKHVuc2lnbmVkJiBw
cm9ncmFtQ291bnRlciwgQWN0aW9ucyYgYWN0aW9ucywgYm9vbCBpZkRvbWFpbikKIHsKLSAgICBB
U1NFUlQoZ2V0Qml0czxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBtX2J5dGVj
b2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciwgbV9wYWdlc1VzZWQpID09IERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7Ci0gICAgYWN0aW9ucy5hZGQoc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHBy
b2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSwgbV9wYWdlc1VzZWQpKSk7CisgICAg
QVNTRVJUKGdldEJpdHM8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgbV9ieXRl
Y29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNVc2VkKSA9PSBERkFCeXRlY29kZUlu
c3RydWN0aW9uOjpBcHBlbmRBY3Rpb24KKyAgICAgICAgfHwgZ2V0Qml0czxERkFCeXRlY29kZUlu
c3RydWN0aW9uPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciwg
bV9wYWdlc1VzZWQpID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJ
ZkRvbWFpbik7CisgICAgYWN0aW9ucy5hZGQoKGlmRG9tYWluID8gSWZEb21haW5GbGFnIDogMCkg
fCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9i
eXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpLCBtX3Bh
Z2VzVXNlZCkpKTsKICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJn
dW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CiB9CiAKLXZvaWQg
REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9u
KHVuc2lnbmVkJiBwcm9ncmFtQ291bnRlciwgdWludDE2X3QgZmxhZ3MsIEFjdGlvbnMmIGFjdGlv
bnMpCit2b2lkIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldFRlc3RGbGFnc0FuZEFw
cGVuZEFjdGlvbih1bnNpZ25lZCYgcHJvZ3JhbUNvdW50ZXIsIHVpbnQxNl90IGZsYWdzLCBBY3Rp
b25zJiBhY3Rpb25zLCBib29sIGlmRG9tYWluKQogewotICAgIEFTU0VSVChnZXRCaXRzPERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1D
b3VudGVyLCBtX3BhZ2VzVXNlZCkgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdz
QW5kQXBwZW5kQWN0aW9uKTsKKyAgICBBU1NFUlQoZ2V0Qml0czxERkFCeXRlY29kZUluc3RydWN0
aW9uPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciwgbV9wYWdl
c1VzZWQpID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlv
bgorICAgICAgICB8fCBnZXRCaXRzPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUs
IG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCkgPT0gREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKTsK
ICAgICBpZiAoZmxhZ3MgJiBnZXRCaXRzPHVpbnQxNl90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2Rl
TGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSksIG1fcGFnZXNVc2Vk
KSkKLSAgICAgICAgYWN0aW9ucy5hZGQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdldEJpdHM8dW5z
aWduZWQ+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6
ZW9mKERGQUJ5dGVjb2RlKSArIHNpemVvZih1aW50MTZfdCksIG1fcGFnZXNVc2VkKSkpOworICAg
ICAgICBhY3Rpb25zLmFkZCgoaWZEb21haW4gPyBJZkRvbWFpbkZsYWcgOiAwKSB8IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVu
Z3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkgKyBzaXplb2YodWludDE2
X3QpLCBtX3BhZ2VzVXNlZCkpKTsKICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNp
emVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVu
ZEFjdGlvbik7CiB9CiAKQEAgLTc2LDcgKzc4LDcgQEAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6
QWN0aW9ucyBERkFCeXRlYwogICAgIHdoaWxlIChwcm9ncmFtQ291bnRlciA8IGRmYUJ5dGVjb2Rl
TGVuZ3RoKSB7CiAgICAgICAgIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBz
dGF0aWNfY2FzdDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlW3Byb2dyYW1Db3Vu
dGVyXSk7CiAgICAgICAgIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUluc3RydWN0aW9u
OjpBcHBlbmRBY3Rpb24pCi0gICAgICAgICAgICBpbnRlcnByZXRBcHBlbmRBY3Rpb24ocHJvZ3Jh
bUNvdW50ZXIsIGFjdGlvbnMpOworICAgICAgICAgICAgaW50ZXJwcmV0QXBwZW5kQWN0aW9uKHBy
b2dyYW1Db3VudGVyLCBhY3Rpb25zLCBmYWxzZSk7CiAgICAgICAgIGVsc2UgaWYgKGluc3RydWN0
aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbikK
ICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVu
dHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKTsKICAg
ICAgICAgZWxzZQpAQCAtMTA3LDcgKzEwOSw3IEBAIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFj
dGlvbnMgREZBQnl0ZWMKICAgICAgICAgICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKQogICAgICAgICAgICAgICAgICAgICBwcm9n
cmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5zdHJ1
Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9u
KQotICAgICAgICAgICAgICAgICAgICBpbnRlcnByZXRUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24o
cHJvZ3JhbUNvdW50ZXIsIGZsYWdzLCBhY3Rpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgaW50
ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBmbGFncywgYWN0
aW9ucywgZmFsc2UpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yMDMsMTEgKzIwNSwxOSBAQCBERkFCeXRlY29kZUlu
dGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9u
OjpBcHBlbmRBY3Rpb246Ci0gICAgICAgICAgICAgICAgaW50ZXJwcmV0QXBwZW5kQWN0aW9uKHBy
b2dyYW1Db3VudGVyLCBhY3Rpb25zKTsKKyAgICAgICAgICAgICAgICBpbnRlcnByZXRBcHBlbmRB
Y3Rpb24ocHJvZ3JhbUNvdW50ZXIsIGFjdGlvbnMsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbjoKKyAgICAgICAgICAgICAgICBp
bnRlcnByZXRBcHBlbmRBY3Rpb24ocHJvZ3JhbUNvdW50ZXIsIGFjdGlvbnMsIHRydWUpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uOgotICAg
ICAgICAgICAgICAgIGludGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbihwcm9ncmFtQ291
bnRlciwgZmxhZ3MsIGFjdGlvbnMpOworICAgICAgICAgICAgICAgIGludGVycHJldFRlc3RGbGFn
c0FuZEFwcGVuZEFjdGlvbihwcm9ncmFtQ291bnRlciwgZmxhZ3MsIGFjdGlvbnMsIGZhbHNlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBE
RkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21h
aW46CisgICAgICAgICAgICAgICAgaW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHBy
b2dyYW1Db3VudGVyLCBmbGFncywgYWN0aW9ucywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29k
ZUludGVycHJldGVyLmgJKHJldmlzaW9uIDE4Mzg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NjMsOCArNjMsOCBAQCBwdWJsaWM6CiAgICAgQWN0aW9ucyBhY3Rpb25zRnJvbURGQVJvb3QoKTsK
IAogcHJpdmF0ZToKLSAgICB2b2lkIGludGVycHJldEFwcGVuZEFjdGlvbih1bnNpZ25lZCYgcHJv
Z3JhbUNvdW50ZXIsIEFjdGlvbnMmKTsKLSAgICB2b2lkIGludGVycHJldFRlc3RGbGFnc0FuZEFw
cGVuZEFjdGlvbih1bnNpZ25lZCYgcHJvZ3JhbUNvdW50ZXIsIHVpbnQxNl90IGZsYWdzLCBBY3Rp
b25zJik7CisgICAgdm9pZCBpbnRlcnByZXRBcHBlbmRBY3Rpb24odW5zaWduZWQmIHByb2dyYW1D
b3VudGVyLCBBY3Rpb25zJiwgYm9vbCBpZkRvbWFpbik7CisgICAgdm9pZCBpbnRlcnByZXRUZXN0
RmxhZ3NBbmRBcHBlbmRBY3Rpb24odW5zaWduZWQmIHByb2dyYW1Db3VudGVyLCB1aW50MTZfdCBm
bGFncywgQWN0aW9ucyYsIGJvb2wgaWZEb21haW4pOwogICAgIGNvbnN0IERGQUJ5dGVjb2RlKiBt
X2J5dGVjb2RlOwogICAgIGNvbnN0IHVuc2lnbmVkIG1fYnl0ZWNvZGVMZW5ndGg7CiAgICAgVmVj
dG9yPGJvb2w+JiBtX3BhZ2VzVXNlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZEluZm8uaAkocmV2aXNpb24gMTgzODgwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsMTIgQEAgZW51
bSBjbGFzcyBMb2FkVHlwZSA6IHVpbnQxNl90IHsKIAogdHlwZWRlZiB1aW50MTZfdCBSZXNvdXJj
ZUZsYWdzOwogCisvLyBUaGUgZmlyc3QgMzIgYml0cyBvZiBhIHVpbnQ2NF90IGFjdGlvbiBhcmUg
dXNlZCBmb3IgdGhlIGFjdGlvbiBsb2NhdGlvbi4KKy8vIFRoZSBuZXh0IDE2IGJpdHMgYXJlIHVz
ZWQgZm9yIHRoZSBmbGFncyAoUmVzb3VyY2VUeXBlIGFuZCBMb2FkVHlwZSkuCisvLyBUaGUgbmV4
dCBiaXQgaXMgdXNlZCB0byBtYXJrIGFjdGlvbnMgdGhhdCBhcmUgZnJvbSBhIHJ1bGUgd2l0aCBh
biBpZi1kb21haW4gY29uZGl0aW9uLgorLy8gVGhlIHZhbHVlcyAtMSBhbmQgLTIgYXJlIHVzZWQg
Zm9yIHJlbW92ZWQgYW5kIGVtcHR5IHZhbHVlcyBpbiBIYXNoVGFibGVzLgorY29uc3QgdWludDY0
X3QgSWZEb21haW5GbGFnID0gMHgwMDAxMDAwMDAwMDAwMDAwOworCiBSZXNvdXJjZVR5cGUgdG9S
ZXNvdXJjZVR5cGUoQ2FjaGVkUmVzb3VyY2U6OlR5cGUpOwogdWludDE2X3QgcmVhZFJlc291cmNl
VHlwZShjb25zdCBTdHJpbmcmKTsKIHVpbnQxNl90IHJlYWRMb2FkVHlwZShjb25zdCBTdHJpbmcm
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDA0MSkKKysrIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE1LTA1LTA5ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRl
bnQgRXh0ZW5zaW9uc10gU3VwcG9ydCBkb21haW4tc3BlY2lmaWMgcnVsZXMgYW5kIGV4Y2VwdGlv
bnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ4
MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNo
YXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpmaWx0ZXJz
V2l0aG91dERvbWFpbnNCeXRlY29kZUxlbmd0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbjo6ZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmZpbHRlcnNXaXRoRG9tYWlu
c0J5dGVjb2RlTGVuZ3RoKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uOjpkb21haW5GaWx0ZXJzQnl0ZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb246OmRvbWFpbkZpbHRlcnNCeXRlY29kZUxlbmd0aCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Ynl0ZWNvZGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmJ5dGVj
b2RlTGVuZ3RoKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uLmg6CisgICAgICAgICogU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bkRhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhLmg6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bkRhdGE6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHA6CisgICAgICAgIChBUEk6
OkNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YTo6ZmlsZVNpemUpOgorICAgICAgICAoQVBJOjplbmNv
ZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEpOgorICAgICAgICAoQVBJOjpkZWNvZGVDb250ZW50
RXh0ZW5zaW9uTWV0YURhdGEpOgorICAgICAgICAoQVBJOjpjb21waWxlZFRvRmlsZSk6CisgICAg
ICAgIChBUEk6OmNyZWF0ZUV4dGVuc2lvbik6CisgICAgICAgIEtlZXAgdHJhY2sgb2YgMyBkaWZm
ZXJlbnQgdHlwZXMgb2YgYnl0ZWNvZGUgdG8gYmUgYWJsZSB0byBoYW5kbGUgZG9tYWluLXNwZWNp
ZmljIHJ1bGVzLgorCiAyMDE1LTA1LTA5ICBZb2F2IFdlaXNzICA8eW9hdkB5b2F2LndzPgogCiAg
ICAgICAgIFJlbW92ZSB0aGUgUElDVFVSRV9TSVpFUyBidWlsZCBmbGFnCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNw
cAkocmV2aXNpb24gMTgzODgwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE0ICs0NCwzNCBAQCBX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246On5XZWJDb21waWxlCiB7CiB9CiAKLWNvbnN0IFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSogV2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uOjpieXRlY29kZSgpIGNvbnN0Citjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6REZBQnl0ZWNvZGUqIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6ZmlsdGVyc1dp
dGhvdXREb21haW5zQnl0ZWNvZGUoKSBjb25zdAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqPihtX2RhdGEuZGF0
YS0+ZGF0YSgpKSArIG1fZGF0YS5ieXRlY29kZU9mZnNldDsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKj4obV9kYXRh
LmRhdGEtPmRhdGEoKSkgKyBtX2RhdGEuZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVPZmZz
ZXQ7CiB9CiAKLXVuc2lnbmVkIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Ynl0ZWNvZGVM
ZW5ndGgoKSBjb25zdAordW5zaWduZWQgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpmaWx0
ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZUxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
ZGF0YS5ieXRlY29kZVNpemU7CisgICAgcmV0dXJuIG1fZGF0YS5maWx0ZXJzV2l0aG91dERvbWFp
bnNCeXRlY29kZVNpemU7Cit9CisKK2NvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpE
RkFCeXRlY29kZSogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpmaWx0ZXJzV2l0aERvbWFp
bnNCeXRlY29kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSo+KG1fZGF0YS5kYXRhLT5kYXRhKCkp
ICsgbV9kYXRhLmZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlT2Zmc2V0OworfQorCit1bnNpZ25l
ZCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2Rl
TGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLmZpbHRlcnNXaXRoRG9tYWluc0J5
dGVjb2RlU2l6ZTsKK30KKworY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5
dGVjb2RlKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmRvbWFpbkZpbHRlcnNCeXRlY29k
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSo+KG1fZGF0YS5kYXRhLT5kYXRhKCkpICsgbV9kYXRh
LmRvbWFpbkZpbHRlcnNCeXRlY29kZU9mZnNldDsKK30KKwordW5zaWduZWQgV2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uOjpkb21haW5GaWx0ZXJzQnl0ZWNvZGVMZW5ndGgoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2RhdGEuZG9tYWluRmlsdGVyc0J5dGVjb2RlU2l6ZTsKIH0KIAogY29uc3Qg
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb246OmFjdGlvbnMoKSBjb25zdApJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaAkocmV2aXNp
b24gMTgzODgwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCwxMyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbihXZWJDb21waWxlZENvbnRlbnRF
eHRlbnNpb25EYXRhJiYpOwogCi0gICAgdmlydHVhbCBjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6REZBQnl0ZWNvZGUqIGJ5dGVjb2RlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB1bnNpZ25lZCBieXRlY29kZUxlbmd0aCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBmaWx0ZXJz
V2l0aG91dERvbWFpbnNCeXRlY29kZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdW5z
aWduZWQgZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVMZW5ndGgoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRl
Y29kZSogZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHVuc2lnbmVkIGZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlTGVuZ3RoKCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
REZBQnl0ZWNvZGUqIGRvbWFpbkZpbHRlcnNCeXRlY29kZSgpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdW5zaWduZWQgZG9tYWluRmlsdGVyc0J5dGVjb2RlTGVuZ3RoKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgCiAgICAgdmlydHVhbCBjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6U2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMoKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGFjdGlvbnNMZW5ndGgoKSBjb25zdCBvdmVycmlkZTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YS5jcHAJKHJldmlzaW9uIDE4Mzg4MCkKKysrIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsOCArNDAsMTIgQEAgdm9pZCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRh
OjplbgogCiAgICAgZW5jb2RlciA8PCBhY3Rpb25zT2Zmc2V0OwogICAgIGVuY29kZXIgPDwgYWN0
aW9uc1NpemU7Ci0gICAgZW5jb2RlciA8PCBieXRlY29kZU9mZnNldDsKLSAgICBlbmNvZGVyIDw8
IGJ5dGVjb2RlU2l6ZTsKKyAgICBlbmNvZGVyIDw8IGZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVj
b2RlT2Zmc2V0OworICAgIGVuY29kZXIgPDwgZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVT
aXplOworICAgIGVuY29kZXIgPDwgZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGVPZmZzZXQ7Cisg
ICAgZW5jb2RlciA8PCBmaWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZVNpemU7CisgICAgZW5jb2Rl
ciA8PCBkb21haW5GaWx0ZXJzQnl0ZWNvZGVPZmZzZXQ7CisgICAgZW5jb2RlciA8PCBkb21haW5G
aWx0ZXJzQnl0ZWNvZGVTaXplOwogfQogCiBib29sIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bkRhdGE6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uRGF0YSYgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSkKQEAgLTU1
LDkgKzU5LDE3IEBAIGJvb2wgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YTo6ZGUKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YS5hY3Rpb25zU2l6ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuYnl0ZWNv
ZGVPZmZzZXQpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uRGF0YS5maWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZU9mZnNldCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGEuYnl0ZWNvZGVTaXplKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGEuZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVTaXplKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uRGF0YS5maWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZU9mZnNldCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGEuZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGVTaXplKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uRGF0YS5kb21haW5GaWx0ZXJzQnl0ZWNvZGVPZmZzZXQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhLmRvbWFpbkZpbHRlcnNCeXRlY29kZVNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuaAkocmV2aXNpb24gMTgzODgw
KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTMgKzQ1LDE3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogICAgIAotICAgIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEoUmVmUHRyPFNo
YXJlZE1lbW9yeT4mJiBkYXRhLCBOZXR3b3JrQ2FjaGU6OkRhdGEgZmlsZURhdGEsIHVuc2lnbmVk
IGFjdGlvbnNPZmZzZXQsIHVuc2lnbmVkIGFjdGlvbnNTaXplLCB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCwgdW5zaWduZWQgYnl0ZWNvZGVTaXplKQorICAgIFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGEoUmVmUHRyPFNoYXJlZE1lbW9yeT4mJiBkYXRhLCBOZXR3b3JrQ2FjaGU6OkRhdGEg
ZmlsZURhdGEsIHVuc2lnbmVkIGFjdGlvbnNPZmZzZXQsIHVuc2lnbmVkIGFjdGlvbnNTaXplLCB1
bnNpZ25lZCBmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZU9mZnNldCwgdW5zaWduZWQgZmls
dGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVTaXplLCB1bnNpZ25lZCBmaWx0ZXJzV2l0aERvbWFp
bnNCeXRlY29kZU9mZnNldCwgdW5zaWduZWQgZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGVTaXpl
LCB1bnNpZ25lZCBkb21haW5GaWx0ZXJzQnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIGRvbWFpbkZp
bHRlcnNCeXRlY29kZVNpemUpCiAgICAgICAgIDogZGF0YShXVEY6Om1vdmUoZGF0YSkpCiAgICAg
ICAgICwgZmlsZURhdGEoZmlsZURhdGEpCiAgICAgICAgICwgYWN0aW9uc09mZnNldChhY3Rpb25z
T2Zmc2V0KQogICAgICAgICAsIGFjdGlvbnNTaXplKGFjdGlvbnNTaXplKQotICAgICAgICAsIGJ5
dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICAsIGJ5dGVjb2RlU2l6ZShieXRl
Y29kZVNpemUpCisgICAgICAgICwgZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVPZmZzZXQo
ZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICwgZmlsdGVyc1dp
dGhvdXREb21haW5zQnl0ZWNvZGVTaXplKGZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlU2l6
ZSkKKyAgICAgICAgLCBmaWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZU9mZnNldChmaWx0ZXJzV2l0
aERvbWFpbnNCeXRlY29kZU9mZnNldCkKKyAgICAgICAgLCBmaWx0ZXJzV2l0aERvbWFpbnNCeXRl
Y29kZVNpemUoZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGVTaXplKQorICAgICAgICAsIGRvbWFp
bkZpbHRlcnNCeXRlY29kZU9mZnNldChkb21haW5GaWx0ZXJzQnl0ZWNvZGVPZmZzZXQpCisgICAg
ICAgICwgZG9tYWluRmlsdGVyc0J5dGVjb2RlU2l6ZShkb21haW5GaWx0ZXJzQnl0ZWNvZGVTaXpl
KQogICAgIHsKICAgICB9CiAKQEAgLTYyLDggKzY2LDEyIEBAIHB1YmxpYzoKICAgICBOZXR3b3Jr
Q2FjaGU6OkRhdGEgZmlsZURhdGE7CiAgICAgdW5zaWduZWQgYWN0aW9uc09mZnNldCB7IDAgfTsK
ICAgICB1bnNpZ25lZCBhY3Rpb25zU2l6ZSB7IDAgfTsKLSAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCB7IDAgfTsKLSAgICB1bnNpZ25lZCBieXRlY29kZVNpemUgeyAwIH07CisgICAgdW5zaWdu
ZWQgZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVPZmZzZXQgeyAwIH07CisgICAgdW5zaWdu
ZWQgZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVTaXplIHsgMCB9OworICAgIHVuc2lnbmVk
IGZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlT2Zmc2V0IHsgMCB9OworICAgIHVuc2lnbmVkIGZp
bHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlU2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBkb21haW5G
aWx0ZXJzQnl0ZWNvZGVPZmZzZXQgeyAwIH07CisgICAgdW5zaWduZWQgZG9tYWluRmlsdGVyc0J5
dGVjb2RlU2l6ZSB7IDAgfTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNw
cAkocmV2aXNpb24gMTgzODgwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTEgKzc0
LDIyIEBAIHN0YXRpYyBTdHJpbmcgY29uc3RydWN0ZWRQYXRoKGNvbnN0IFN0cmkKICAgICByZXR1
cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2UsICJDb250ZW50RXh0ZW5z
aW9uLSIgKyBXZWJDb3JlOjplbmNvZGVGb3JGaWxlTmFtZShpZGVudGlmaWVyKSk7CiB9CiAKLWNv
bnN0IHNpemVfdCBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUgPSBzaXplb2YodWludDMy
X3QpICsgMiAqIHNpemVvZih1aW50NjRfdCk7Citjb25zdCBzaXplX3QgQ29udGVudEV4dGVuc2lv
bkZpbGVIZWFkZXJTaXplID0gc2l6ZW9mKHVpbnQzMl90KSArIDQgKiBzaXplb2YodWludDY0X3Qp
Owogc3RydWN0IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSB7Ci0gICAgdWludDMyX3QgdmVyc2lv
biB7IDEgfTsKKyAgICB1aW50MzJfdCB2ZXJzaW9uIHsgMiB9OwogICAgIHVpbnQ2NF90IGFjdGlv
bnNTaXplIHsgMCB9OwotICAgIHVpbnQ2NF90IGJ5dGVjb2RlU2l6ZSB7IDAgfTsKKyAgICB1aW50
NjRfdCBmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZVNpemUgeyAwIH07CisgICAgdWludDY0
X3QgZmlsdGVyc1dpdGhEb21haW5CeXRlY29kZVNpemUgeyAwIH07CisgICAgdWludDY0X3QgZG9t
YWluRmlsdGVyc0J5dGVjb2RlU2l6ZSB7IDAgfTsKKyAgICAKKyAgICBzaXplX3QgZmlsZVNpemUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVy
U2l6ZQorICAgICAgICAgICAgKyBhY3Rpb25zU2l6ZQorICAgICAgICAgICAgKyBmaWx0ZXJzV2l0
aG91dERvbWFpbnNCeXRlY29kZVNpemUKKyAgICAgICAgICAgICsgZmlsdGVyc1dpdGhEb21haW5C
eXRlY29kZVNpemUKKyAgICAgICAgICAgICsgZG9tYWluRmlsdGVyc0J5dGVjb2RlU2l6ZTsKKyAg
ICB9CiB9OwogCiBzdGF0aWMgRGF0YSBlbmNvZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEoY29u
c3QgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSkKQEAgLTg3LDcgKzk4LDkgQEAg
c3RhdGljIERhdGEgZW5jb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYQogCiAgICAgZW5jb2RlciA8
PCBtZXRhRGF0YS52ZXJzaW9uOwogICAgIGVuY29kZXIgPDwgbWV0YURhdGEuYWN0aW9uc1NpemU7
Ci0gICAgZW5jb2RlciA8PCBtZXRhRGF0YS5ieXRlY29kZVNpemU7CisgICAgZW5jb2RlciA8PCBt
ZXRhRGF0YS5maWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZVNpemU7CisgICAgZW5jb2RlciA8
PCBtZXRhRGF0YS5maWx0ZXJzV2l0aERvbWFpbkJ5dGVjb2RlU2l6ZTsKKyAgICBlbmNvZGVyIDw8
IG1ldGFEYXRhLmRvbWFpbkZpbHRlcnNCeXRlY29kZVNpemU7CiAKICAgICBBU1NFUlQoZW5jb2Rl
ci5idWZmZXJTaXplKCkgPT0gQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplKTsKICAgICBy
ZXR1cm4gRGF0YShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CkBAIC0x
MDcsNyArMTIwLDExIEBAIHN0YXRpYyBib29sIGRlY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGEK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSht
ZXRhRGF0YS5hY3Rpb25zU2l6ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuYnl0ZWNvZGVTaXplKSkKKyAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5maWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZVNp
emUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKG1ldGFEYXRhLmZpbHRlcnNXaXRoRG9tYWluQnl0ZWNvZGVTaXplKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5kb21h
aW5GaWx0ZXJzQnl0ZWNvZGVTaXplKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgc3VjY2VzcyA9IHRydWU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2MywzOSArMTgw
LDYyIEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZWRUb0ZpbGUoU3QKICAgICAgICAg
ICAgIDogbV9maWxlSGFuZGxlKGZpbGVIYW5kbGUpCiAgICAgICAgICAgICAsIG1fbWV0YURhdGEo
bWV0YURhdGEpCiAgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbWV0YURhdGEuYWN0aW9u
c1NpemUpOworICAgICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5maWx0ZXJzV2l0aG91dERvbWFp
bnNCeXRlY29kZVNpemUpOworICAgICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5maWx0ZXJzV2l0
aERvbWFpbkJ5dGVjb2RlU2l6ZSk7CisgICAgICAgICAgICBBU1NFUlQoIW1ldGFEYXRhLmRvbWFp
bkZpbHRlcnNCeXRlY29kZVNpemUpOwogICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lk
IHdyaXRlQnl0ZWNvZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlKSBvdmVycmlkZQor
ICAgICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlRmlsdGVyc1dpdGhvdXREb21haW5z
Qnl0ZWNvZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlKQorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQoIW1fZmlsdGVyc1dpdGhEb21haW5CeXRlY29kZVdyaXR0ZW4pOworICAg
ICAgICAgICAgQVNTRVJUKCFtX2RvbWFpbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4pOworICAgICAg
ICAgICAgbV9maWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZVdyaXR0ZW4gKz0gYnl0ZWNvZGUu
c2l6ZSgpOworICAgICAgICAgICAgd3JpdGVUb0ZpbGUoRGF0YShieXRlY29kZS5kYXRhKCksIGJ5
dGVjb2RlLnNpemUoKSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZv
aWQgd3JpdGVGaWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYg
Ynl0ZWNvZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9kb21haW5GaWx0ZXJz
Qnl0ZWNvZGVXcml0dGVuKTsKKyAgICAgICAgICAgIG1fZmlsdGVyc1dpdGhEb21haW5CeXRlY29k
ZVdyaXR0ZW4gKz0gYnl0ZWNvZGUuc2l6ZSgpOworICAgICAgICAgICAgd3JpdGVUb0ZpbGUoRGF0
YShieXRlY29kZS5kYXRhKCksIGJ5dGVjb2RlLnNpemUoKSkpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVEb21haW5GaWx0ZXJzQnl0ZWNvZGUoVmVjdG9y
PERGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2J5dGVj
b2RlV3JpdHRlbiArPSBieXRlY29kZS5zaXplKCk7Ci0gICAgICAgICAgICB3cml0ZShEYXRhKGJ5
dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKSk7CisgICAgICAgICAgICBtX2RvbWFpbkZp
bHRlcnNCeXRlY29kZVdyaXR0ZW4gKz0gYnl0ZWNvZGUuc2l6ZSgpOworICAgICAgICAgICAgd3Jp
dGVUb0ZpbGUoRGF0YShieXRlY29kZS5kYXRhKCksIGJ5dGVjb2RlLnNpemUoKSkpOwogICAgICAg
ICB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlQWN0aW9ucyhWZWN0b3I8U2VyaWFsaXpl
ZEFjdGlvbkJ5dGU+JiYgYWN0aW9ucykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKCFtX2J5dGVjb2RlV3JpdHRlbik7CisgICAgICAgICAgICBBU1NFUlQoIW1fZmlsdGVy
c1dpdGhvdXREb21haW5zQnl0ZWNvZGVXcml0dGVuKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9m
aWx0ZXJzV2l0aERvbWFpbkJ5dGVjb2RlV3JpdHRlbik7CisgICAgICAgICAgICBBU1NFUlQoIW1f
ZG9tYWluRmlsdGVyc0J5dGVjb2RlV3JpdHRlbik7CiAgICAgICAgICAgICBBU1NFUlQoIW1fYWN0
aW9uc1dyaXR0ZW4pOwogICAgICAgICAgICAgbV9hY3Rpb25zV3JpdHRlbiArPSBhY3Rpb25zLnNp
emUoKTsKLSAgICAgICAgICAgIHdyaXRlKERhdGEoYWN0aW9ucy5kYXRhKCksIGFjdGlvbnMuc2l6
ZSgpKSk7CisgICAgICAgICAgICB3cml0ZVRvRmlsZShEYXRhKGFjdGlvbnMuZGF0YSgpLCBhY3Rp
b25zLnNpemUoKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZmluYWxpemUoKSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAgICBtX21ldGFEYXRhLmFj
dGlvbnNTaXplID0gbV9hY3Rpb25zV3JpdHRlbjsKLSAgICAgICAgICAgIG1fbWV0YURhdGEuYnl0
ZWNvZGVTaXplID0gbV9ieXRlY29kZVdyaXR0ZW47CisgICAgICAgICAgICBtX21ldGFEYXRhLmZp
bHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlU2l6ZSA9IG1fZmlsdGVyc1dpdGhvdXREb21haW5z
Qnl0ZWNvZGVXcml0dGVuOworICAgICAgICAgICAgbV9tZXRhRGF0YS5maWx0ZXJzV2l0aERvbWFp
bkJ5dGVjb2RlU2l6ZSA9IG1fZmlsdGVyc1dpdGhEb21haW5CeXRlY29kZVdyaXR0ZW47CisgICAg
ICAgICAgICBtX21ldGFEYXRhLmRvbWFpbkZpbHRlcnNCeXRlY29kZVNpemUgPSBtX2RvbWFpbkZp
bHRlcnNCeXRlY29kZVdyaXR0ZW47CiAgICAgICAgICAgICAKICAgICAgICAgICAgIERhdGEgaGVh
ZGVyID0gZW5jb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKG1fbWV0YURhdGEpOwogICAgICAg
ICAgICAgaWYgKCFtX2ZpbGVFcnJvciAmJiBXZWJDb3JlOjpzZWVrRmlsZShtX2ZpbGVIYW5kbGUs
IDBsbCwgV2ViQ29yZTo6RmlsZVNlZWtPcmlnaW46OlNlZWtGcm9tQmVnaW5uaW5nKSA9PSAtMSkg
ewogICAgICAgICAgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZShtX2ZpbGVIYW5kbGUpOwogICAg
ICAgICAgICAgICAgIG1fZmlsZUVycm9yID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHdyaXRlKGhlYWRlcik7CisgICAgICAgICAgICB3cml0ZVRvRmlsZShoZWFkZXIpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGhhZEVycm9yV2hpbGVXcml0aW5nVG9GaWxl
KCkgeyByZXR1cm4gbV9maWxlRXJyb3I7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQg
d3JpdGUoY29uc3QgRGF0YSYgZGF0YSkKKyAgICAgICAgdm9pZCB3cml0ZVRvRmlsZShjb25zdCBE
YXRhJiBkYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fZmlsZUVycm9yICYmICF3
cml0ZURhdGFUb0ZpbGUoZGF0YSwgbV9maWxlSGFuZGxlKSkgewogICAgICAgICAgICAgICAgIFdl
YkNvcmU6OmNsb3NlRmlsZShtX2ZpbGVIYW5kbGUpOwpAQCAtMjA1LDcgKzI0NSw5IEBAIHN0YXRp
YyBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZWRUb0ZpbGUoU3QKICAgICAgICAgCiAgICAgICAgIFdl
YkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2ZpbGVIYW5kbGU7CiAgICAgICAgIENvbnRlbnRF
eHRlbnNpb25NZXRhRGF0YSYgbV9tZXRhRGF0YTsKLSAgICAgICAgc2l6ZV90IG1fYnl0ZWNvZGVX
cml0dGVuIHsgMCB9OworICAgICAgICBzaXplX3QgbV9maWx0ZXJzV2l0aG91dERvbWFpbnNCeXRl
Y29kZVdyaXR0ZW4geyAwIH07CisgICAgICAgIHNpemVfdCBtX2ZpbHRlcnNXaXRoRG9tYWluQnl0
ZWNvZGVXcml0dGVuIHsgMCB9OworICAgICAgICBzaXplX3QgbV9kb21haW5GaWx0ZXJzQnl0ZWNv
ZGVXcml0dGVuIHsgMCB9OwogICAgICAgICBzaXplX3QgbV9hY3Rpb25zV3JpdHRlbiB7IDAgfTsK
ICAgICAgICAgYm9vbCBtX2ZpbGVFcnJvciB7IGZhbHNlIH07CiAgICAgfTsKQEAgLTIyOCw3ICsy
NzAsNyBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVkVG9GaWxlKFN0CiAgICAgaWYg
KGNvbXBpbGF0aW9uQ2xpZW50LmhhZEVycm9yV2hpbGVXcml0aW5nVG9GaWxlKCkpCiAgICAgICAg
IHJldHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsK
ICAgICAKLSAgICBtYXBwZWREYXRhID0gbWFwRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlLCAwLCBD
b250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUgKyBtZXRhRGF0YS5hY3Rpb25zU2l6ZSArIG1l
dGFEYXRhLmJ5dGVjb2RlU2l6ZSk7CisgICAgbWFwcGVkRGF0YSA9IG1hcEZpbGUodGVtcG9yYXJ5
RmlsZUhhbmRsZSwgMCwgbWV0YURhdGEuZmlsZVNpemUoKSk7CiAgICAgV2ViQ29yZTo6Y2xvc2VG
aWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUpOwogCiAgICAgaWYgKG1hcHBlZERhdGEuaXNOdWxsKCkp
CkBAIC0yNDgsOCArMjkwLDE4IEBAIHN0YXRpYyBSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVu
c2lvbj4KICAgICAgICAgZmlsZURhdGEsCiAgICAgICAgIENvbnRlbnRFeHRlbnNpb25GaWxlSGVh
ZGVyU2l6ZSwKICAgICAgICAgbWV0YURhdGEuYWN0aW9uc1NpemUsCi0gICAgICAgIENvbnRlbnRF
eHRlbnNpb25GaWxlSGVhZGVyU2l6ZSArIG1ldGFEYXRhLmFjdGlvbnNTaXplLAotICAgICAgICBt
ZXRhRGF0YS5ieXRlY29kZVNpemUKKyAgICAgICAgQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJT
aXplCisgICAgICAgICAgICArIG1ldGFEYXRhLmFjdGlvbnNTaXplLAorICAgICAgICBtZXRhRGF0
YS5maWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZVNpemUsCisgICAgICAgIENvbnRlbnRFeHRl
bnNpb25GaWxlSGVhZGVyU2l6ZQorICAgICAgICAgICAgKyBtZXRhRGF0YS5hY3Rpb25zU2l6ZQor
ICAgICAgICAgICAgKyBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZVNpemUs
CisgICAgICAgIG1ldGFEYXRhLmZpbHRlcnNXaXRoRG9tYWluQnl0ZWNvZGVTaXplLAorICAgICAg
ICBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUKKyAgICAgICAgICAgICsgbWV0YURhdGEu
YWN0aW9uc1NpemUKKyAgICAgICAgICAgICsgbWV0YURhdGEuZmlsdGVyc1dpdGhvdXREb21haW5z
Qnl0ZWNvZGVTaXplCisgICAgICAgICAgICArIG1ldGFEYXRhLmZpbHRlcnNXaXRoRG9tYWluQnl0
ZWNvZGVTaXplLAorICAgICAgICBtZXRhRGF0YS5kb21haW5GaWx0ZXJzQnl0ZWNvZGVTaXplCiAg
ICAgKTsKICAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IFdlYktpdDo6V2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGOjptb3ZlKGNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbkRhdGEpKTsKICAgICByZXR1cm4gQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbjo6Y3Jl
YXRlKGlkZW50aWZpZXIsIFdURjo6bW92ZShjb21waWxlZENvbnRlbnRFeHRlbnNpb24pKTsKSW5k
ZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE4NDA0MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDIxIEBACisyMDE1LTA1LTA5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gU3VwcG9ydCBkb21haW4tc3Bl
Y2lmaWMgcnVsZXMgYW5kIGV4Y2VwdGlvbnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ4MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50
RXh0ZW5zaW9ucy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpJbk1lbW9yeUNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbjo6Y3JlYXRlRnJvbUZpbHRlcik6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpJbk1lbW9y
eUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIE1vdmVkIENvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbkRhdGEgZnJvbSBDb250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaCBiZWNhdXNlIGl0
IGlzIG9ubHkgdXNlZCBmb3IgdGVzdGluZy4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Om1haW5E
b2N1bWVudFJlcXVlc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6c3ViUmVzb3VyY2VSZXF1
ZXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpjaGVja0NvbXBpbGVyRXJyb3IpOgorICAgICAgICBBZGRlZCB0ZXN0cyBmb3IgcGFy
c2luZyBhbmQgZnVuY3Rpb25hbGl0eSBvZiBpZi1kb21haW4gYW5kIHVubGVzcy1kb21haW4uCisK
IDIwMTUtMDUtMDkgIFlvYXYgV2Vpc3MgIDx5b2F2QHlvYXYud3M+CiAKICAgICAgICAgUmVtb3Zl
IHRoZSBQSUNUVVJFX1NJWkVTIGJ1aWxkIGZsYWcKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAkocmV2aXNp
b24gMTgzODgyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRF
eHRlbnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMjUgKzgwLDUzIEBAIHB1YmxpYzoK
ICAgICB9CiB9OwogCi1jbGFzcyBJbk1lbW9yeUNvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNs
aWVudCBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4
dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50IHsKK3N0cnVjdCBDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhIHsKKyAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25C
eXRlPiBhY3Rpb25zOworICAgIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGU+
IGZpbHRlcnNXaXRob3V0RG9tYWluczsKKyAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkRG
QUJ5dGVjb2RlPiBmaWx0ZXJzV2l0aERvbWFpbnM7CisgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNp
b25zOjpERkFCeXRlY29kZT4gZG9tYWluRmlsdGVyczsKK307CisKK2NsYXNzIEluTWVtb3J5Q29u
dGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50IGZpbmFsIDogcHVibGljIENvbnRlbnRFeHRl
bnNpb25zOjpDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQgewogcHVibGljOgotICAg
IEluTWVtb3J5Q29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50KFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiBkYXRhKQorICAgIElu
TWVtb3J5Q29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50KENvbXBpbGVkQ29udGVudEV4
dGVuc2lvbkRhdGEmIGRhdGEpCiAgICAgICAgIDogbV9kYXRhKGRhdGEpCiAgICAgewotICAgICAg
ICBFWFBFQ1RfRVEoZGF0YS5ieXRlY29kZS5zaXplKCksIDB1bGwpOwogICAgICAgICBFWFBFQ1Rf
RVEoZGF0YS5hY3Rpb25zLnNpemUoKSwgMHVsbCk7CisgICAgICAgIEVYUEVDVF9FUShkYXRhLmZp
bHRlcnNXaXRob3V0RG9tYWlucy5zaXplKCksIDB1bGwpOworICAgICAgICBFWFBFQ1RfRVEoZGF0
YS5maWx0ZXJzV2l0aERvbWFpbnMuc2l6ZSgpLCAwdWxsKTsKKyAgICAgICAgRVhQRUNUX0VRKGRh
dGEuZG9tYWluRmlsdGVycy5zaXplKCksIDB1bGwpOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZUJ5dGVjb2RlKFZlY3RvcjxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0
ZWNvZGU+JiYgYnl0ZWNvZGUpIG92ZXJyaWRlCisgICAgdmlydHVhbCB2b2lkIHdyaXRlQWN0aW9u
cyhWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25CeXRlPiYmIGFjdGlv
bnMpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBFWFBFQ1RfRkFMU0UoZmluYWxpemVkKTsKLSAg
ICAgICAgbV9kYXRhLmJ5dGVjb2RlLmFwcGVuZFZlY3RvcihieXRlY29kZSk7CisgICAgICAgIEVY
UEVDVF9FUShtX2RhdGEuYWN0aW9ucy5zaXplKCksIDB1bGwpOworICAgICAgICBFWFBFQ1RfRVEo
bV9kYXRhLmZpbHRlcnNXaXRob3V0RG9tYWlucy5zaXplKCksIDB1bGwpOworICAgICAgICBFWFBF
Q1RfRVEobV9kYXRhLmZpbHRlcnNXaXRoRG9tYWlucy5zaXplKCksIDB1bGwpOworICAgICAgICBF
WFBFQ1RfRVEobV9kYXRhLmRvbWFpbkZpbHRlcnMuc2l6ZSgpLCAwdWxsKTsKKyAgICAgICAgbV9k
YXRhLmFjdGlvbnMuYXBwZW5kVmVjdG9yKGFjdGlvbnMpOwogICAgIH0KICAgICAKLSAgICB2aXJ0
dWFsIHZvaWQgd3JpdGVBY3Rpb25zKFZlY3RvcjxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
U2VyaWFsaXplZEFjdGlvbkJ5dGU+JiYgYWN0aW9ucykgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIHZv
aWQgd3JpdGVGaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZShWZWN0b3I8Q29udGVudEV4dGVu
c2lvbnM6OkRGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlKSBvdmVycmlkZQogICAgIHsKICAgICAgICAg
RVhQRUNUX0ZBTFNFKGZpbmFsaXplZCk7Ci0gICAgICAgIG1fZGF0YS5hY3Rpb25zLmFwcGVuZFZl
Y3RvcihhY3Rpb25zKTsKKyAgICAgICAgRVhQRUNUX0VRKG1fZGF0YS5maWx0ZXJzV2l0aERvbWFp
bnMuc2l6ZSgpLCAwdWxsKTsKKyAgICAgICAgRVhQRUNUX0VRKG1fZGF0YS5kb21haW5GaWx0ZXJz
LnNpemUoKSwgMHVsbCk7CisgICAgICAgIG1fZGF0YS5maWx0ZXJzV2l0aG91dERvbWFpbnMuYXBw
ZW5kVmVjdG9yKGJ5dGVjb2RlKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIHdyaXRl
RmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGUoVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpERkFC
eXRlY29kZT4mJiBieXRlY29kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEVYUEVDVF9GQUxT
RShmaW5hbGl6ZWQpOworICAgICAgICBFWFBFQ1RfRVEobV9kYXRhLmRvbWFpbkZpbHRlcnMuc2l6
ZSgpLCAwdWxsKTsKKyAgICAgICAgbV9kYXRhLmZpbHRlcnNXaXRoRG9tYWlucy5hcHBlbmRWZWN0
b3IoYnl0ZWNvZGUpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVEb21haW5G
aWx0ZXJzQnl0ZWNvZGUoVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZT4mJiBi
eXRlY29kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEVYUEVDVF9GQUxTRShmaW5hbGl6ZWQp
OworICAgICAgICBtX2RhdGEuZG9tYWluRmlsdGVycy5hcHBlbmRWZWN0b3IoYnl0ZWNvZGUpOwog
ICAgIH0KICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoKSBvdmVycmlkZQpAQCAtMTA3
LDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmIG1fZGF0YTsKKyAg
ICBDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiBtX2RhdGE7CiAgICAgYm9vbCBmaW5hbGl6
ZWQgeyBmYWxzZSB9OwogfTsKIApAQCAtMTE1LDE2ICsxNDMsMTkgQEAgY2xhc3MgSW5NZW1vcnlD
b21waWxlZENvbnRlbnRFeHRlbnNpb24gOgogcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8SW5N
ZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IGNyZWF0ZUZyb21GaWx0ZXIoU3RyaW5nJiYg
ZmlsdGVyKQogICAgIHsKLSAgICAgICAgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbkRhdGEgZXh0ZW5zaW9uRGF0YTsKKyAgICAgICAgQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uRGF0YSBleHRlbnNpb25EYXRhOwogICAgICAgICBJbk1lbW9yeUNvbnRl
bnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCBjbGllbnQoZXh0ZW5zaW9uRGF0YSk7CiAgICAg
ICAgIGF1dG8gY29tcGlsZXJFcnJvciA9IENvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxp
c3QoY2xpZW50LCBXVEY6Om1vdmUoZmlsdGVyKSk7Ci0gICAgICAgIGlmIChjb21waWxlckVycm9y
KQorICAgICAgICBpZiAoY29tcGlsZXJFcnJvcikgeworICAgICAgICAgICAgLy8gQ29tcGlsaW5n
IHNob3VsZCBhbHdheXMgc3VjY2VlZCBoZXJlLiBXZSBoYXZlIG90aGVyIHRlc3RzIGZvciBjb21w
aWxlIGZhaWx1cmVzLgorICAgICAgICAgICAgRVhQRUNUX1RSVUUoZmFsc2UpOwogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gSW5NZW1vcnlD
b21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEY6Om1vdmUoZXh0ZW5zaW9uRGF0YSkp
OwogICAgIH0KIAotICAgIHN0YXRpYyBSZWZQdHI8SW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRl
bnNpb24+IGNyZWF0ZShDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YSYmIGRhdGEpCisgICAgc3RhdGljIFJlZlB0cjxJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbj4gY3JlYXRlKENvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmJiBkYXRhKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbihXVEY6Om1vdmUoZGF0YSkpKTsKICAgICB9CkBAIC0xMzMsMTggKzE2NCwyMiBAQCBw
dWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHZpcnR1YWwgY29uc3QgQ29udGVudEV4dGVuc2lv
bnM6OkRGQUJ5dGVjb2RlKiBieXRlY29kZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGF0
YS5ieXRlY29kZS5kYXRhKCk7IH0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVjb2RlTGVuZ3Ro
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kYXRhLmJ5dGVjb2RlLnNpemUoKTsgfQogICAg
IHZpcnR1YWwgY29uc3QgQ29udGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBh
Y3Rpb25zKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kYXRhLmFjdGlvbnMuZGF0YSgpOyB9
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBhY3Rpb25zTGVuZ3RoKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9kYXRhLmFjdGlvbnMuc2l6ZSgpOyB9CisgICAgdmlydHVhbCBjb25zdCBDb250ZW50
RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqIGZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kYXRhLmZpbHRlcnNXaXRob3V0RG9tYWlucy5kYXRh
KCk7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2Rl
TGVuZ3RoKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kYXRhLmZpbHRlcnNXaXRob3V0RG9t
YWlucy5zaXplKCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IENvbnRlbnRFeHRlbnNpb25zOjpERkFC
eXRlY29kZSogZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2RhdGEuZmlsdGVyc1dpdGhEb21haW5zLmRhdGEoKTsgfQorICAgIHZpcnR1YWwgdW5z
aWduZWQgZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGVMZW5ndGgoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX2RhdGEuZmlsdGVyc1dpdGhEb21haW5zLnNpemUoKTsgfQorICAgIHZpcnR1YWwg
Y29uc3QgQ29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBkb21haW5GaWx0ZXJzQnl0ZWNv
ZGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2RhdGEuZG9tYWluRmlsdGVycy5kYXRhKCk7
IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGRvbWFpbkZpbHRlcnNCeXRlY29kZUxlbmd0aCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGF0YS5kb21haW5GaWx0ZXJzLnNpemUoKTsgfQogCiBw
cml2YXRlOgotICAgIEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKENvbnRlbnRFeHRl
bnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiYgZGF0YSkKKyAgICBJbk1lbW9y
eUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbihDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiYg
ZGF0YSkKICAgICAgICAgOiBtX2RhdGEoV1RGOjptb3ZlKGRhdGEpKQogICAgIHsKICAgICB9CiAK
LSAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBtX2Rh
dGE7CisgICAgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBtX2RhdGE7CiB9OwogCiB2b2lk
IHN0YXRpYyB0ZXN0UmVxdWVzdChDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNC
YWNrZW5kIGNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCwgY29uc3QgUmVzb3VyY2VMb2FkSW5mbyYg
cmVzb3VyY2VMb2FkSW5mbywgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlPiBl
eHBlY3RlZEFjdGlvbnMsIGJvb2wgaWdub3JlUHJldmlvdXNSdWxlcyA9IGZhbHNlKQpAQCAtMTY0
LDExICsxOTksMTYgQEAgdm9pZCBzdGF0aWMgdGVzdFJlcXVlc3QoQ29udGVudEV4dGVuc2lvbgog
ICAgICAgICBFWFBFQ1RfRVEoYWN0aW9uc1thY3Rpb25zLnNpemUoKSAtIDFdLnR5cGUoKSwgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU3R5bGVTaGVldCk7CiB9
CiAKLVJlc291cmNlTG9hZEluZm8gbWFpbkRvY3VtZW50UmVxdWVzdChjb25zdCBjaGFyKiB1cmws
IFJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUgPSBSZXNvdXJjZVR5cGU6OkRvY3VtZW50KQorc3Rh
dGljIFJlc291cmNlTG9hZEluZm8gbWFpbkRvY3VtZW50UmVxdWVzdChjb25zdCBjaGFyKiB1cmws
IFJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUgPSBSZXNvdXJjZVR5cGU6OkRvY3VtZW50KQogewog
ICAgIHJldHVybiB7IFVSTChVUkwoKSwgdXJsKSwgVVJMKFVSTCgpLCB1cmwpLCByZXNvdXJjZVR5
cGUgfTsKIH0KIAorc3RhdGljIFJlc291cmNlTG9hZEluZm8gc3ViUmVzb3VyY2VSZXF1ZXN0KGNv
bnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogbWFpbkRvY3VtZW50VVJMLCBSZXNvdXJjZVR5cGUg
cmVzb3VyY2VUeXBlID0gUmVzb3VyY2VUeXBlOjpEb2N1bWVudCkKK3sKKyAgICByZXR1cm4geyBV
UkwoVVJMKCksIHVybCksIFVSTChVUkwoKSwgbWFpbkRvY3VtZW50VVJMKSwgcmVzb3VyY2VUeXBl
IH07Cit9CisKIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgbWFr
ZUJhY2tlbmQoY29uc3QgY2hhcioganNvbikKIHsKICAgICBhdXRvIGV4dGVuc2lvbiA9IEluTWVt
b3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGVGcm9tRmlsdGVyKGpzb24pOwpAQCAt
MzYyLDYgKzQwMiw3OSBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIER1cGxpY2F0ZWRN
CiAgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cHM6Ly9w
b3N0Lm9yZy9wb3N0IiksIHsgfSk7CiB9CiAKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwg
RG9tYWluVHJpZ2dlcnMpCit7CisgICAgYXV0byBpZkRvbWFpbkJhY2tlbmQgPSBtYWtlQmFja2Vu
ZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcInRlc3RcXFxcLmh0bWxcIiwgXCJpZi1kb21haW5cIjpbXCJ3ZWJraXQub3JnXCJd
fX1dIik7CisgICAgdGVzdFJlcXVlc3QoaWZEb21haW5CYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy90ZXN0Lmh0bSIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0
KGlmRG9tYWluQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2J1Z3Mud2Via2l0
Lm9yZy90ZXN0Lmh0bSIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGlmRG9tYWluQmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvdGVzdC5odG1sIiksIHsgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVz
dChpZkRvbWFpbkJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvdGVzdC5odG1sIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2Nr
TG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChpZkRvbWFpbkJhY2tlbmQsIG1haW5Eb2N1bWVudFJl
cXVlc3QoImh0dHA6Ly9ub3Rfd2Via2l0Lm9yZy90ZXN0Lmh0bSIpLCB7IH0pOworICAgIHRlc3RS
ZXF1ZXN0KGlmRG9tYWluQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtp
dC5vcmdhbml6YXRpb24vdGVzdC5odG0iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChpZkRvbWFp
bkJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9ub3Rfd2Via2l0Lm9yZy90ZXN0
Lmh0bWwiKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChpZkRvbWFpbkJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnYW5pemF0aW9uL3Rlc3QuaHRtbCIpLCB7IH0p
OworICAgIAorICAgIGF1dG8gdW5sZXNzRG9tYWluQmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wi
YWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
OlwidGVzdFxcXFwuaHRtbFwiLCBcInVubGVzcy1kb21haW5cIjpbXCJ3ZWJraXQub3JnXCJdfX1d
Iik7CisgICAgdGVzdFJlcXVlc3QodW5sZXNzRG9tYWluQmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvdGVzdC5odG0iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVz
dCh1bmxlc3NEb21haW5CYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vYnVncy53
ZWJraXQub3JnL3Rlc3QuaHRtIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QodW5sZXNzRG9tYWlu
QmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvdGVzdC5odG1s
IiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QodW5sZXNzRG9tYWluQmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgiaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy90ZXN0Lmh0bWwiKSwgeyB9KTsKKyAg
ICB0ZXN0UmVxdWVzdCh1bmxlc3NEb21haW5CYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJo
dHRwOi8vbm90X3dlYmtpdC5vcmcvdGVzdC5odG0iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdCh1
bmxlc3NEb21haW5CYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9y
Z2FuaXphdGlvbi90ZXN0Lmh0bSIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHVubGVzc0RvbWFp
bkJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9ub3Rfd2Via2l0Lm9yZy90ZXN0
Lmh0bWwiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwor
ICAgIHRlc3RSZXF1ZXN0KHVubGVzc0RvbWFpbkJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Imh0dHA6Ly93ZWJraXQub3JnYW5pemF0aW9uL3Rlc3QuaHRtbCIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisKKyAgICBhdXRvIGNvbWJpbmVkQmFja2Vu
ZDEgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcInRlc3RfYmxvY2tfbG9hZFwiLCBcImlmLWRvbWFpblwi
OltcIndlYmtpdC5vcmdcIl19fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJi
bG9jay1jb29raWVzXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcInRlc3RfYmxvY2tf
Y29va2llc1wiLCBcInVubGVzcy1kb21haW5cIjpbXCJ3ZWJraXQub3JnXCJdfX1dIik7CisgICAg
dGVzdFJlcXVlc3QoY29tYmluZWRCYWNrZW5kMSwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDov
L3dlYmtpdC5vcmciKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQxLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vbm90X3dlYmtpdC5vcmciKSwgeyB9KTsKKyAgICB0
ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQxLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8v
d2Via2l0Lm9yZy90ZXN0X2Jsb2NrX2xvYWQuaHRtbCIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoY29tYmluZWRCYWNrZW5k
MSwgc3ViUmVzb3VyY2VSZXF1ZXN0KCJodHRwOi8vd2hhdHdnLm9yZy90ZXN0X2Jsb2NrX2xvYWQu
aHRtbCIsICJodHRwOi8vd2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDEsIHN1
YlJlc291cmNlUmVxdWVzdCgiaHR0cDovL3doYXR3Zy5vcmcvc2hvdWxkbnRfbWF0Y2guaHRtbCIs
ICJodHRwOi8vd2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJh
Y2tlbmQxLCBzdWJSZXNvdXJjZVJlcXVlc3QoImh0dHA6Ly93aGF0d2cub3JnL3Rlc3RfYmxvY2tf
bG9hZC5odG1sIiwgImh0dHA6Ly9ub3Rfd2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVx
dWVzdChjb21iaW5lZEJhY2tlbmQxLCBzdWJSZXNvdXJjZVJlcXVlc3QoImh0dHA6Ly93aGF0d2cu
b3JnL3Nob3VsZG50X21hdGNoLmh0bWwiLCAiaHR0cDovL25vdF93ZWJraXQub3JnLyIpLCB7IH0p
OworICAgIHRlc3RSZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDEsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Imh0dHA6Ly93ZWJraXQub3JnL3Rlc3RfYmxvY2tfY29va2llcy5odG1sIiksIHsgfSk7CisgICAg
dGVzdFJlcXVlc3QoY29tYmluZWRCYWNrZW5kMSwgc3ViUmVzb3VyY2VSZXF1ZXN0KCJodHRwOi8v
d2hhdHdnLm9yZy90ZXN0X2Jsb2NrX2Nvb2tpZXMuaHRtbCIsICJodHRwOi8vd2Via2l0Lm9yZy8i
KSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQxLCBzdWJSZXNvdXJjZVJl
cXVlc3QoImh0dHA6Ly93aGF0d2cub3JnL3Nob3VsZG50X21hdGNoLmh0bWwiLCAiaHR0cDovL3dl
YmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoY29tYmluZWRCYWNrZW5kMSwgc3Vi
UmVzb3VyY2VSZXF1ZXN0KCJodHRwOi8vd2hhdHdnLm9yZy90ZXN0X2Jsb2NrX2Nvb2tpZXMuaHRt
bCIsICJodHRwOi8vbm90X3dlYmtpdC5vcmcvcGF0aC90by9tYWluL2RvY3VtZW50Lmh0bWwiKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29raWVzIH0pOworICAgIHRl
c3RSZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDEsIHN1YlJlc291cmNlUmVxdWVzdCgiaHR0cDovL3do
YXR3Zy5vcmcvc2hvdWxkbnRfbWF0Y2guaHRtbCIsICJodHRwOi8vbm90X3dlYmtpdC5vcmcvIiks
IHsgfSk7CisgICAgCisgICAgYXV0byBjb21iaW5lZEJhY2tlbmQyID0gbWFrZUJhY2tlbmQoIlt7
XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCJ0ZXN0X2Jsb2NrX2xvYWRcXFxcLmh0bWxcIiwgXCJpZi1kb21haW5cIjpbXCJ3ZWJraXQu
b3JnXCJdfX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2stY29va2ll
c1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ0ZXN0X2Jsb2NrX2Nvb2tpZXNcXFxc
Lmh0bWxcIiwgXCJ1bmxlc3MtZG9tYWluXCI6W1widzNjLm9yZ1wiXX19LCIKKyAgICAgICAgIntc
ImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIu
aGlkZGVuXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcInRlc3RfY3NzXFxcXC5odG1s
XCJ9fV0iKTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQyLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy90ZXN0X2Nzcy5odG1sIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJl
cXVlc3QoY29tYmluZWRCYWNrZW5kMiwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtp
dC5vcmcvdGVzdF9jc3MuaHRtIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoY29tYmluZWRCYWNr
ZW5kMiwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvdGVzdF9ibG9ja19s
b2FkLmh0bWwiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0p
OworICAgIHRlc3RSZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDIsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Imh0dHA6Ly9ub3Rfd2Via2l0Lm9yZy90ZXN0X2Jsb2NrX2xvYWQuaHRtbCIpLCB7IH0pOworICAg
IHRlc3RSZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDIsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6
Ly9ub3Rfd2Via2l0Lm9yZy90ZXN0X2Nzcy5odG1sIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3QoY29t
YmluZWRCYWNrZW5kMiwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvVEVT
VF9DU1MuaFRtTC90ZXN0X2Jsb2NrX2xvYWQuaHRtbCIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkfSk7CisgICAgdGVzdFJlcXVlc3QoY29tYmluZWRCYWNrZW5kMiwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3czYy5vcmcvdGVzdF9jc3MuaHRtbCIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOwor
ICAgIHRlc3RSZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDIsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0
dHA6Ly93M2Mub3JnL3Rlc3RfYmxvY2tfbG9hZC5odG1sIiksIHsgfSk7CisgICAgdGVzdFJlcXVl
c3QoY29tYmluZWRCYWNrZW5kMiwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3czYy5vcmcv
dGVzdF9ibG9ja19jb29raWVzLmh0bWwiKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5l
ZEJhY2tlbmQyLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vdzNjLm9yZy90ZXN0X2Nzcy5o
dG1sL3Rlc3RfYmxvY2tfY29va2llcy5odG1sIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3QoY29tYmlu
ZWRCYWNrZW5kMiwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL25vdF93M2Mub3JnL3Rlc3Rf
YmxvY2tfY29va2llcy5odG1sIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJs
b2NrQ29va2llcyB9KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQyLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJodHRwOi8vbm90X3czYy5vcmcvdGVzdF9jc3MuaHRtbC90ZXN0X2Jsb2Nr
X2Nvb2tpZXMuaHRtbCIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNw
bGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29r
aWVzIH0pOworCisgICAgYXV0byBpZkRvbWFpbldpdGhGbGFnc0JhY2tlbmQgPSBtYWtlQmFja2Vu
ZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcInRlc3RcIiwgXCJpZi1kb21haW5cIjpbXCJ3ZWJraXQub3JnXCJdLFwicmVzb3Vy
Y2UtdHlwZVwiOltcImltYWdlXCJdfX1dIik7CisgICAgdGVzdFJlcXVlc3QoaWZEb21haW5XaXRo
RmxhZ3NCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy90ZXN0
Lmh0bWwiKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChpZkRvbWFpbldpdGhGbGFnc0JhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL3Rlc3QucG5nIiwgUmVzb3Vy
Y2VUeXBlOjpJbWFnZSksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9h
ZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChpZkRvbWFpbldpdGhGbGFnc0JhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImh0dHA6Ly9ub3Rfd2Via2l0Lm9yZy90ZXN0Lmh0bWwiKSwgeyB9KTsKKyAg
ICB0ZXN0UmVxdWVzdChpZkRvbWFpbldpdGhGbGFnc0JhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImh0dHA6Ly9ub3Rfd2Via2l0Lm9yZy90ZXN0LnBuZyIsIFJlc291cmNlVHlwZTo6SW1hZ2Up
LCB7IH0pOworCisgICAgYXV0byB1bmxlc3NEb21haW5XaXRoRmxhZ3NCYWNrZW5kID0gbWFrZUJh
Y2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCJ0ZXN0XCIsIFwidW5sZXNzLWRvbWFpblwiOltcIndlYmtpdC5vcmdcIl0s
XCJyZXNvdXJjZS10eXBlXCI6W1wiaW1hZ2VcIl19fV0iKTsKKyAgICB0ZXN0UmVxdWVzdCh1bmxl
c3NEb21haW5XaXRoRmxhZ3NCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Vi
a2l0Lm9yZy90ZXN0Lmh0bWwiKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdCh1bmxlc3NEb21haW5X
aXRoRmxhZ3NCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy90
ZXN0LnBuZyIsIFJlc291cmNlVHlwZTo6SW1hZ2UpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHVu
bGVzc0RvbWFpbldpdGhGbGFnc0JhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9u
b3Rfd2Via2l0Lm9yZy90ZXN0Lmh0bWwiKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdCh1bmxlc3NE
b21haW5XaXRoRmxhZ3NCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vbm90X3dl
YmtpdC5vcmcvdGVzdC5wbmciLCBSZXNvdXJjZVR5cGU6OkltYWdlKSwgeyBDb250ZW50RXh0ZW5z
aW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworCisgICAgLy8gRG9tYWlucyBzaG91bGQg
bm90IGJlIGludGVyZXB0ZWQgYXMgcmVndWxhciBleHByZXNzaW9ucy4KKyAgICBhdXRvIGRvbWFp
blJlZ2V4QmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxv
Y2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwidGVzdFxcXFwuaHRtbFwiLCBcImlm
LWRvbWFpblwiOltcIndlP2JraXQub3JnXCJdfX1dIik7CisgICAgdGVzdFJlcXVlc3QoZG9tYWlu
UmVnZXhCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy90ZXN0
Lmh0bWwiKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChkb21haW5SZWdleEJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImh0dHA6Ly93YmtpdC5vcmcvdGVzdC5odG1sIiksIHsgfSk7CisgICAg
CisgICAgLy8gRklYTUU6IEFkZCBhbmQgdGVzdCBkb21haW4tc3BlY2lmaWMgcG9wdXAtb25seSBi
bG9ja2luZyAod2l0aCBsYXlvdXQgdGVzdHMpLgorfQorICAgIAogVEVTVF9GKENvbnRlbnRFeHRl
bnNpb25UZXN0LCBUZXJtc0tub3duVG9NYXRjaEFueXRoaW5nKQogewogICAgIGF1dG8gYmFja2Vu
ZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiXnByZTEuKnBvc3QxJFwifX0sIgpAQCAtNTc3LDEyICs2
OTAsMTQgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBEZWVwTkZBKQogICAgIEVYUEVD
VF9FUSgxdWwsIGNyZWF0ZU5GQXMoY29tYmluZWRVUkxGaWx0ZXJzKS5zaXplKCkpOwogfQogCi12
b2lkIGNoZWNrQ29tcGlsZXJFcnJvcihjb25zdCBjaGFyKiBqc29uLCBDb250ZW50RXh0ZW5zaW9u
czo6Q29udGVudEV4dGVuc2lvbkVycm9yIGV4cGVjdGVkRXJyb3IpCit2b2lkIGNoZWNrQ29tcGls
ZXJFcnJvcihjb25zdCBjaGFyKiBqc29uLCBzdGQ6OmVycm9yX2NvZGUgZXhwZWN0ZWRFcnJvcikK
IHsKLSAgICBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uRGF0YSBleHRlbnNpb25EYXRhOworICAgIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEg
ZXh0ZW5zaW9uRGF0YTsKICAgICBJbk1lbW9yeUNvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNs
aWVudCBjbGllbnQoZXh0ZW5zaW9uRGF0YSk7CiAgICAgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVy
RXJyb3IgPSBDb250ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KGNsaWVudCwganNvbik7
Ci0gICAgRVhQRUNUX0VRKGNvbXBpbGVyRXJyb3IudmFsdWUoKSwgc3RhdGljX2Nhc3Q8aW50Pihl
eHBlY3RlZEVycm9yKSk7CisgICAgRVhQRUNUX0VRKGNvbXBpbGVyRXJyb3IudmFsdWUoKSwgZXhw
ZWN0ZWRFcnJvci52YWx1ZSgpKTsKKyAgICBpZiAoY29tcGlsZXJFcnJvci52YWx1ZSgpKQorICAg
ICAgICBFWFBFQ1RfU1RSRVEoY29tcGlsZXJFcnJvci5jYXRlZ29yeSgpLm5hbWUoKSwgZXhwZWN0
ZWRFcnJvci5jYXRlZ29yeSgpLm5hbWUoKSk7CiB9CiAKIFRFU1RfRihDb250ZW50RXh0ZW5zaW9u
VGVzdCwgSW52YWxpZEpTT04pCkBAIC02MDUsMTAgKzcyMCwzNyBAQCBURVNUX0YoQ29udGVudEV4
dGVuc2lvblRlc3QsIEludmFsaWRKU09OCiAgICAgICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlckZsYWdzQXJyYXkpOwogICAgIGNo
ZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIixcImxvYWQtdHlwZVwiOltcImlu
dmFsaWRcIl19fV0iLAogICAgICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OSW52YWxpZFN0cmluZ0luVHJpZ2dlckZsYWdzQXJyYXkpOworICAgIGNoZWNr
Q29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dl
clwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIixcImxvYWQtdHlwZVwiOls1XX19XSIs
CisgICAgICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05J
bnZhbGlkU3RyaW5nSW5UcmlnZ2VyRmxhZ3NBcnJheSk7CiAgICAgY2hlY2tDb21waWxlckVycm9y
KCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZp
bHRlclwiOlwid2Via2l0Lm9yZ1wiLFwicmVzb3VyY2UtdHlwZVwiOnt9fX1dIiwKICAgICAgICAg
Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRUcmln
Z2VyRmxhZ3NBcnJheSk7CiAgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9y
Z1wiLFwicmVzb3VyY2UtdHlwZVwiOltcImludmFsaWRcIl19fV0iLAogICAgICAgICBDb250ZW50
RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFN0cmluZ0luVHJp
Z2dlckZsYWdzQXJyYXkpOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntc
InR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5v
cmdcIixcInJlc291cmNlLXR5cGVcIjpbNV19fV0iLAorICAgICAgICBDb250ZW50RXh0ZW5zaW9u
czo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFN0cmluZ0luVHJpZ2dlckZsYWdz
QXJyYXkpOworICAgIAorICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5
cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdc
IixcImlmLWRvbWFpblwiOnt9fX1dIiwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNp
b25FcnJvcjo6SlNPTkludmFsaWREb21haW5MaXN0KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3Io
Ilt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJ3ZWJraXQub3JnXCIsXCJpZi1kb21haW5cIjpbNV19fV0iLCBDb250ZW50RXh0ZW5z
aW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZERvbWFpbkxpc3QpOworICAg
IGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwi
dHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIixcImlmLWRvbWFpblwiOltc
ImFcIl19fV0iLCB7IH0pOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntc
InR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5v
cmdcIixcInVubGVzcy1kb21haW5cIjp7fX19XSIsIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdCk7CisgICAgY2hlY2tDb21waWxl
ckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wiLFwidW5sZXNzLWRvbWFpblwiOls1XX19XSIsIENv
bnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWlu
TGlzdCk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
YmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wiLFwidW5s
ZXNzLWRvbWFpblwiOltcIlwiXX19XSIsIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdCk7CisgICAgY2hlY2tDb21waWxlckVycm9y
KCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZp
bHRlclwiOlwid2Via2l0Lm9yZ1wiLFwidW5sZXNzLWRvbWFpblwiOltcIkFcIl19fV0iLCBDb250
ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09ORG9tYWluTm90TG93ZXJD
YXNlQVNDSUkpOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVc
IjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIixc
InVubGVzcy1kb21haW5cIjpbXCJcXHUwMERDXCJdfX1dIiwgQ29udGVudEV4dGVuc2lvbnM6OkNv
bnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkRvbWFpbk5vdExvd2VyQ2FzZUFTQ0lJKTsKKyAgICBj
aGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCIsXCJ1bmxlc3MtZG9tYWluXCI6
W1wiMFwiXX19XSIsIHsgfSk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6
e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0
Lm9yZ1wiLFwidW5sZXNzLWRvbWFpblwiOltcImFcIl19fV0iLCB7IH0pOworCisgICAgY2hlY2tD
b21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wiLFwiaWYtZG9tYWluXCI6W10sXCJ1bmxl
c3MtZG9tYWluXCI6W1wiYVwiXX19XSIsIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdCk7CisgICAgY2hlY2tDb21waWxlckVycm9y
KCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZp
bHRlclwiOlwid2Via2l0Lm9yZ1wiLFwidW5sZXNzLWRvbWFpblwiOltdfX1dIiwgQ29udGVudEV4
dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWREb21haW5MaXN0KTsK
KyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wi
fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCIsXCJpZi1kb21haW5c
Ijo1fX1dIiwgeyB9KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3Jn
XCIsXCJ1bmxlc3MtZG9tYWluXCI6NX19XSIsIHsgfSk7CisgICAgY2hlY2tDb21waWxlckVycm9y
KCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZp
bHRlclwiOlwid2Via2l0Lm9yZ1wiLFwiaWYtZG9tYWluXCI6NSxcInVubGVzcy1kb21haW5cIjo1
fX1dIiwgeyB9KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCIs
XCJpZi1kb21haW5cIjpbXX19XSIsIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9u
RXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdCk7CisgICAgCisgICAgY2hlY2tDb21waWxlckVy
cm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJs
LWZpbHRlclwiOlwid2Via2l0Lm9yZ1wiLFwiaWYtZG9tYWluXCI6W1wiYVwiXSxcInVubGVzcy1k
b21haW5cIjpbXX19XSIsIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJyb3I6
OkpTT05Vbmxlc3NBbmRJZkRvbWFpbik7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0
aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
d2Via2l0Lm9yZ1wiLFwiaWYtZG9tYWluXCI6W1wiYVwiXSxcInVubGVzcy1kb21haW5cIjpbXCJh
XCJdfX1dIiwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlVu
bGVzc0FuZElmRG9tYWluKTsKKworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwi
OntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtp
dC5vcmdcIiwgXCJ1bmV4cGVjdGVkLWlkZW50aWZpZXItc2hvdWxkLWJlLWlnbm9yZWRcIjo1fX1d
IiwgeyB9KTsKIAogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOjUsXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIiwKICAgICAgICAgQ29udGVu
dEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRBY3Rpb24pOwpA
QCAtNjIwLDYgKzc2Miw4IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgSW52YWxpZEpT
T04KICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJpZ25v
cmUtcHJldmlvdXMtcnVsZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0
Lm9yZ1wifX0sIgogICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXkt
bm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwiLipcIn19XSIsCiAgICAgICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OlJlZ2V4TWF0Y2hlc0V2ZXJ5dGhpbmdBZnRlcklnbm9yZVByZXZpb3VzUnVsZXMp
OworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2Nr
XCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qXCIsXCJpZi1kb21haW5cIjpbXCJh
XCJdfX1dIiwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6UmVnZXhN
YXRjaGVzRXZlcnl0aGluZ1dpdGhEb21haW5zKTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7
XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCIuKlwiLFwidW5sZXNzLWRvbWFpblwiOltcImFcIl19fV0iLCBDb250ZW50RXh0ZW5zaW9u
czo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpSZWdleE1hdGNoZXNFdmVyeXRoaW5nV2l0aERvbWFp
bnMpOwogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJs
b2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIltcIn19XSIsCiAgICAgICAgIENv
bnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkUmVnZXgp
OwogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg0MDQxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTUtMDUtMDkgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBbQ29udGVudCBFeHRl
bnNpb25zXSBTdXBwb3J0IGRvbWFpbi1zcGVjaWZpYyBydWxlcyBhbmQgZXhjZXB0aW9ucy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDgzMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0
cy9jb250ZW50ZXh0ZW5zaW9ucy9kb21haW4tcnVsZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2RvbWFpbi1ydWxlcy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2RvbWFpbi1ydWxl
cy5odG1sLmpzb246IEFkZGVkLgorCiAyMDE1LTA1LTA4ICBYYWJpZXIgUm9kcmlndWV6IENhbHZh
ciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4gRmFibGV0IDx5b3Vlbm4uZmFibGV0
QGNyZi5jYW5vbi5mcj4KIAogICAgICAgICBzdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlv
bi9yZWFkYWJsZS1zdHJlYW0tcmVhZGVyLmh0bWwgYW5kIHN0cmVhbXMvcmVmZXJlbmNlLWltcGxl
bWVudGF0aW9uL2JhZC11bmRlcmx5aW5nLXNvdXJjZXMuaHRtbCBhcmUgZmxha3kKSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvZG9tYWluLXJ1bGVzLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRl
bnNpb25zL2RvbWFpbi1ydWxlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2RvbWFpbi1ydWxlcy1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMSBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4
MDB4NjAwCisgIFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCitsYXllciBhdCAoMCww
KSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYw
MAorICAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDU4NAorICAgICAgUmVu
ZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjAweDE4CisgICAgICAgIHRleHQgcnVuIGF0
ICgwLDApIHdpZHRoIDIwMDogIlRoZSBpbWFnZXMgYmVsb3cgc2hvdWxkIGxvYWQuIgorICAgICAg
UmVuZGVyQlIge0JSfSBhdCAoMTk5LDE0KSBzaXplIDF4MAorICAgICAgUmVuZGVySW1hZ2Uge0lN
R30gYXQgKDAsMTgpIHNpemUgMTAweDEwMAorICAgICAgUmVuZGVyQlIge0JSfSBhdCAoMTAwLDEx
OCkgc2l6ZSAweDAKKyAgICAgIFJlbmRlckltYWdlIHtJTUd9IGF0ICgwLDExOCkgc2l6ZSAxMDB4
MTAwCisgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgxMDAsMjE4KSBzaXplIDB4MAorICAgICAgUmVu
ZGVyVGV4dCB7I3RleHR9IGF0ICgwLDIxOCkgc2l6ZSAyNDJ4MTgKKyAgICAgICAgdGV4dCBydW4g
YXQgKDAsMjE4KSB3aWR0aCAyNDI6ICJUaGUgaW1hZ2VzIGJlbG93IHNob3VsZCBiZSBibG9ja2Vk
LiIKKyAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDI0MSwyMzIpIHNpemUgMXgwCisgICAgICBSZW5k
ZXJJbWFnZSB7SU1HfSBhdCAoMCwyMzYpIHNpemUgMHgwCisgICAgICBSZW5kZXJCUiB7QlJ9IGF0
ICgwLDIzNikgc2l6ZSAweDAKKyAgICAgIFJlbmRlckltYWdlIHtJTUd9IGF0ICgwLDIzNikgc2l6
ZSAweDAKKyAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDAsMjM2KSBzaXplIDB4MAorICAgICAgUmVu
ZGVySW1hZ2Uge0lNR30gYXQgKDAsMjM2KSBzaXplIDB4MAorICAgICAgUmVuZGVyQlIge0JSfSBh
dCAoMCwyMzYpIHNpemUgMHgwCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRl
eHRlbnNpb25zL2RvbWFpbi1ydWxlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvZG9tYWluLXJ1bGVzLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2RvbWFpbi1ydWxl
cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOSBAQAorPGJvZHk+CitUaGUgaW1hZ2Vz
IGJlbG93IHNob3VsZCBsb2FkLjxicj4KKzxpbWcgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAv
cmVzb3VyY2VzL3NxdWFyZTEwMC5wbmc/c2hvdWxkX25vdF9iZV9ibG9ja2VkXzEiPjxicj4KKzxp
bWcgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAvcmVzb3VyY2VzL3NxdWFyZTEwMC5wbmc/c2hv
dWxkX25vdF9iZV9ibG9ja2VkXzIiPjxicj4KK1RoZSBpbWFnZXMgYmVsb3cgc2hvdWxkIGJlIGJs
b2NrZWQuPGJyPgorPGltZyBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9yZXNvdXJjZXMvc3F1
YXJlMTAwLnBuZz9zaG91bGRfYmVfYmxvY2tlZF8xIj48YnI+Cis8aW1nIHNyYz0iaHR0cDovLzEy
Ny4wLjAuMTo4MDAwL3Jlc291cmNlcy9zcXVhcmUxMDAucG5nP3Nob3VsZF9iZV9ibG9ja2VkXzIi
Pjxicj4KKzxpbWcgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAvcmVzb3VyY2VzL3NxdWFyZTEw
MC5wbmc/c2hvdWxkX2JlX2Jsb2NrZWRfMyI+PGJyPgorPC9ib2R5PgpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9kb21haW4tcnVsZXMuaHRtbC5qc29uCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvZG9t
YWluLXJ1bGVzLmh0bWwuanNvbgkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvY29udGVudGV4dGVuc2lvbnMvZG9tYWluLXJ1bGVzLmh0bWwuanNvbgkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ2IEBACitbCisgICAgeworICAgICAgICAiYWN0aW9uIjogeworICAgICAg
ICAgICAgInR5cGUiOiAiYmxvY2siCisgICAgICAgIH0sCisgICAgICAgICJ0cmlnZ2VyIjogewor
ICAgICAgICAgICAgInVybC1maWx0ZXIiOiAic2hvdWxkX2JlX2Jsb2NrZWRfMSIKKyAgICAgICAg
fQorICAgIH0sCisgICAgeworICAgICAgICAiYWN0aW9uIjogeworICAgICAgICAgICAgInR5cGUi
OiAiYmxvY2siCisgICAgICAgIH0sCisgICAgICAgICJ0cmlnZ2VyIjogeworICAgICAgICAgICAg
InVybC1maWx0ZXIiOiAic2hvdWxkX2JlX2Jsb2NrZWRfMiIsCisgICAgICAgICAgICAiaWYtZG9t
YWluIjogWyIxMjcuMC4wLjEiXQorICAgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAgICJh
Y3Rpb24iOiB7CisgICAgICAgICAgICAidHlwZSI6ICJibG9jayIKKyAgICAgICAgfSwKKyAgICAg
ICAgInRyaWdnZXIiOiB7CisgICAgICAgICAgICAidXJsLWZpbHRlciI6ICJzaG91bGRfYmVfYmxv
Y2tlZF8zIiwKKyAgICAgICAgICAgICJ1bmxlc3MtZG9tYWluIjogWyJ0aGlzIGRvbWFpbiBzaG91
bGQgbm90IG1hdGNoIl0KKyAgICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgICAiYWN0aW9u
IjogeworICAgICAgICAgICAgInR5cGUiOiAiYmxvY2siCisgICAgICAgIH0sCisgICAgICAgICJ0
cmlnZ2VyIjogeworICAgICAgICAgICAgInVybC1maWx0ZXIiOiAic2hvdWxkX25vdF9iZV9ibG9j
a2VkXzEiLAorICAgICAgICAgICAgImlmLWRvbWFpbiI6IFsidGhpcyBkb21haW4gc2hvdWxkIG5v
dCBtYXRjaCBlaXRoZXIiXQorICAgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAgICJhY3Rp
b24iOiB7CisgICAgICAgICAgICAidHlwZSI6ICJibG9jayIKKyAgICAgICAgfSwKKyAgICAgICAg
InRyaWdnZXIiOiB7CisgICAgICAgICAgICAidXJsLWZpbHRlciI6ICJzaG91bGRfbm90X2JlX2Js
b2NrZWRfMiIsCisgICAgICAgICAgICAidW5sZXNzLWRvbWFpbiI6IFsiMTI3LjAuMC4xIl0KKyAg
ICAgICAgfQorICAgIH0KK10K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252881</attachid>
            <date>2015-05-11 12:06:21 -0700</date>
            <delta_ts>2015-05-11 12:55:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144833-20150511120500.patch</filename>
            <type>text/plain</type>
            <size>88061</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDA0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBACisyMDE1LTA1LTA5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gU3VwcG9ydCBkb21haW4tc3BlY2lmaWMgcnVsZXMgYW5kIGV4Y2VwdGlvbnMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ4MzMK
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBUZXN0OiBodHRw
L3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2RvbWFpbi1ydWxlcy5odG1sCisgICAgICAgIChBbmQg
bG90cyBvZiBBUEkgdGVzdHMpCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGlmLWRvbWFpbiBh
bmQgdW5sZXNzLWRvbWFpbiB0byB0aGUgdHJpZ2dlciBpbiB0aGUgSlNPTiBmb3JtYXQuCisgICAg
ICAgIGlmLWRvbWFpbiBtYWtlcyB0aGUgcnVsZSBhcHBseSBvbmx5IHRvIGRvbWFpbnMgaW4gdGhl
IGxpc3QuCisgICAgICAgIHVubGVzcy1kb21haW4gbWFrZXMgdGhlIHJ1bGUgYXBwbHkgdG8gZG9t
YWlucyB0aGF0IGFyZSBub3QgaW4gdGhlIGxpc3QuCisgICAgICAgIAorICAgICAgICBBbGwgcnVs
ZXMgd2l0aG91dCBpZi1kb21haW4gb3IgdW5sZXNzLWRvbWFpbiBhcmUgY29tcGlsZWQgaW50byBh
IHNldCBvZiBERkFzLiAgVGhpcyBiZWhhdmlvciBpcyB1bmNoYW5nZWQuCisgICAgICAgIEFsbCBy
dWxlcyB3aXRoIGlmLWRvbWFpbiBvciB1bmxlc3MtZG9tYWluIGFyZSBjb21waWxlZCBpbnRvIGEg
c2VwYXJhdGUgc2V0IG9mIERGQXMuCisgICAgICAgIFRoZSBkb21haW5zIGFyZSBhbHNvIGNvbXBp
bGVkIGludG8gYW5vdGhlciBzZXQgb2YgREZBcy4gIFRoaXMgbWFrZXMgMyBhcnJheXMgb2YgREZB
IGJ5dGVjb2RlIGluc3RlYWQgb2YgMS4KKyAgICAgICAgCisgICAgICAgIElmIHRoZXJlIGFyZSBu
byBkb21haW4gc3BlY2lmaWMgcnVsZXMsIHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4K
KyAgICAgICAgSWYgdGhlcmUgYXJlIGRvbWFpbiBzcGVjaWZpYyBydWxlcywgdGhlIFVSTCB3aWxs
IGJlIGNoZWNrZWQgZm9yIG1hdGNoZXMgaW4gYm90aAorICAgICAgICBmaWx0ZXJzV2l0aG91dERv
bWFpbnNCeXRlY29kZSBhbmQgZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGUuICBJZiB0aGVyZSBh
cmUgbWF0Y2hlcyBmcm9tIAorICAgICAgICBmaWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZSB0aGVu
IHRoZSBkb21haW4gb2YgdGhlIG1haW4gZG9jdW1lbnQgd2lsbCBiZSBjaGVja2VkIHdpdGggCisg
ICAgICAgIGRvbWFpbkZpbHRlcnNCeXRlY29kZSB0byBzZWUgd2hpY2ggb2YgdGhlIG1hdGNoZXMg
YXBwbGllcyB0byB0aGlzIGRvbWFpbi4KKworICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0Nv
bWJpbmVkVVJMRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6Q29tYmluZWRVUkxGaWx0ZXJzOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpDb21iaW5lZFVSTEZpbHRlcnM6OmFkZERvbWFpbik6CisgICAgICAgICog
Y29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmg6CisgICAgICAgIEFkZGVkIGFk
ZERvbWFpbiwgd2hpY2ggYWRkcyBjaGFyYWN0ZXJzIGZyb20gYSBkb21haW4gdG8gdGhlIHByZWZp
eCB0cmVlIGRpcmVjdGx5IHdpdGhvdXQgdXNpbmcgWUFSUi4KKyAgICAgICAgKiBjb250ZW50ZXh0
ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Z2xvYmFsRGlzcGxh
eU5vbmVTZWxlY3RvcnMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbi5oOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25Db21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
c2VyaWFsaXplQWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
Y29tcGlsZVJ1bGVMaXN0KToKKyAgICAgICAgU2VwYXJhdGUgdGhlIHJ1bGVzIGludG8gcnVsZXMg
d2l0aCBkb21haW5zIGFuZCBydWxlcyB3aXRob3V0IGRvbWFpbnMgYW5kIGNvbXBpbGUgdG8gYnl0
ZWNvZGUuCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBp
bGVyLmg6CisgICAgICAgIFVwZGF0ZWQgY29tcGlsZXIgaW50ZXJmYWNlIHRvIHJlZmxlY3QgdGhl
IHNsaWdodGx5IG1vcmUgY29tcGxpY2F0ZWQgc3RydWN0dXJlLgorICAgICAgICAqIGNvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6Y29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnkpOgorICAgICAg
ICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oOgorICAgICAgICBB
ZGRlZCBuZXcgcGFyc2luZyBlcnJvcnMuCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvblBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6Z2V0RG9tYWluTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6bG9hZFRyaWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Omxv
YWRFbmNvZGVkUnVsZXMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25SdWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VHJpZ2dl
cjo6b3BlcmF0b3I9PSk6CisgICAgICAgIFBhcnNlIHRoZSBuZXcgZG9tYWluIHN0cnVjdHVyZXMg
ZnJvbSBKU09OIGludG8gdGhlIFRyaWdnZXIgc3RydWN0dXJlLgorICAgICAgICAqIGNvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjphY3Rpb25zRm9y
UmVzb3VyY2VMb2FkKToKKyAgICAgICAgSW50ZXJwcmV0IGFzIG11Y2ggYnl0ZWNvZGUgYXMgbmVj
ZXNzYXJ5IHRvIGRldGVybWluZSB3aGljaCBydWxlcyBhcHBseSB0byB0aGlzIFVSTCBhbmQgZG9t
YWluLgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmg6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6aW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50
cyk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxl
cjo6ZW1pdEFwcGVuZEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6REZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6
Y29tcGlsZU5vZGUpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29t
cGlsZXIuaDoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29k
ZUludGVycHJldGVyOjppbnRlcnByZXRBcHBlbmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldFRlc3RG
bGFnc0FuZEFwcGVuZEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6YWN0aW9uc0Zyb21ERkFSb290KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjppbnRl
cnByZXQpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkSW5mby5oOgorICAgICAgICBLZWVw
IHRyYWNrIG9mIHdoaWNoIGFjdGlvbnMgaGF2ZSBhbiBpZi1kb21haW4gdHJpZ2dlci4gIElmIGFu
IGFjdGlvbiBpcyBpbiB0aGUgCisgICAgICAgIGZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlLCB0
aGVuIGl0IGVpdGhlciBoYXMgYW4gaWYtZG9tYWluIG9yIGFuIHVubGVzcy1kb21haW4gaW4gaXRz
IHRyaWdnZXIuCisgICAgICAgIFRoaXMgcmVxdWlyZXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBp
biB0aGUgYnl0ZWNvZGUsIHNvIHRoZXJlIGFyZSB0d28gbmV3IGJ5dGVjb2RlIHR5cGVzLgorCiAy
MDE1LTA1LTA5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgSW52
YWxpZGF0ZSB0aGUgRm9udENhY2hlIG9uIFdlYlByb2Nlc3Mgc3VzcGVuc2lvbiAvIGNyaXRpY2Fs
IG1lbW9yeSBwcmVzc3VyZQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29tYmluZWRVUkxGaWx0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuY3BwCShyZXZpc2lvbiAxODM4ODApCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTEgKzExNSw0MCBAQCBDb21iaW5lZFVSTEZpbHRlcnM6
On5Db21iaW5lZFVSTEZpbHRlcnMoCiB7CiB9CiAKLWJvb2wgQ29tYmluZWRVUkxGaWx0ZXJzOjpp
c0VtcHR5KCkKK2Jvb2wgQ29tYmluZWRVUkxGaWx0ZXJzOjppc0VtcHR5KCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9wcmVmaXhUcmVlUm9vdC0+ZWRnZXMuaXNFbXB0eSgpOwogfQogCit2b2lkIENv
bWJpbmVkVVJMRmlsdGVyczo6YWRkRG9tYWluKHVpbnQ2NF90IGFjdGlvbklkLCBjb25zdCBTdHJp
bmcmIGRvbWFpbikKK3sKKyAgICAvLyBUaGlzIGlzIGxpa2UgYWRkaW5nICgufF4pZG9tYWluJCBi
eSBhZGRpbmcgdHdvIFZlY3RvcjxUZXJtPidzLAorICAgIC8vIGJ1dCBpbnRlcnByZXRpbmcgZG9t
YWluIGFzIGEgc2VyaWVzIG9mIGNoYXJhY3RlcnMsIG5vdCBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4K
KyAgICAvLyBUaGlzIHdheSBhIGRvbWFpbiBvZiAid2Via2l0Lm9yZyIgd2lsbCBtYXRjaCAiYnVn
cy53ZWJraXQub3JnIiBhbmQgIndlYmtpdC5vcmciLgorICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9y
dCBmb3IgbWF0Y2hpbmcgb25seSBzdWJkb21haW5zIG9yIG5vIHN1YmRvbWFpbnMuCisgICAgVmVj
dG9yPFRlcm0+IHByZXBlbmREb3Q7CisgICAgVmVjdG9yPFRlcm0+IHByZXBlbmRCZWdpbm5pbmdP
ZkxpbmU7CisgICAgcHJlcGVuZERvdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRvbWFpbi5sZW5n
dGgoKSArIDMpOworICAgIHByZXBlbmRCZWdpbm5pbmdPZkxpbmUucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShkb21haW4ubGVuZ3RoKCkgKyAxKTsgLy8gVGhpcyBpcyBqdXN0IG5vIC4qIGF0IHRoZSBi
ZWdpbm5pbmcuCisgICAgCisgICAgVGVybSBjYW5vbmljYWxEb3RTdGFyKFRlcm06OlVuaXZlcnNh
bFRyYW5zaXRpb24pOworICAgIGNhbm9uaWNhbERvdFN0YXIucXVhbnRpZnkoQXRvbVF1YW50aWZp
ZXI6Olplcm9Pck1vcmUpOworICAgIHByZXBlbmREb3QudW5jaGVja2VkQXBwZW5kKGNhbm9uaWNh
bERvdFN0YXIpOworICAgIHByZXBlbmREb3QudW5jaGVja2VkQXBwZW5kKFRlcm0oJy4nLCB0cnVl
KSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRvbWFpbi5sZW5ndGgoKTsg
aSsrKSB7CisgICAgICAgIEFTU0VSVChpc0FTQ0lJKGRvbWFpbltpXSkpOworICAgICAgICBBU1NF
UlQoIWlzQVNDSUlVcHBlcihkb21haW5baV0pKTsKKyAgICAgICAgcHJlcGVuZERvdC51bmNoZWNr
ZWRBcHBlbmQoVGVybShkb21haW5baV0sIHRydWUpKTsKKyAgICAgICAgcHJlcGVuZEJlZ2lubmlu
Z09mTGluZS51bmNoZWNrZWRBcHBlbmQoVGVybShkb21haW5baV0sIHRydWUpKTsKKyAgICB9Cisg
ICAgcHJlcGVuZERvdC51bmNoZWNrZWRBcHBlbmQoVGVybTo6RW5kT2ZMaW5lQXNzZXJ0aW9uVGVy
bSk7CisgICAgcHJlcGVuZEJlZ2lubmluZ09mTGluZS51bmNoZWNrZWRBcHBlbmQoVGVybTo6RW5k
T2ZMaW5lQXNzZXJ0aW9uVGVybSk7CisgICAgCisgICAgYWRkUGF0dGVybihhY3Rpb25JZCwgcHJl
cGVuZERvdCk7CisgICAgYWRkUGF0dGVybihhY3Rpb25JZCwgcHJlcGVuZEJlZ2lubmluZ09mTGlu
ZSk7Cit9CisKIHZvaWQgQ29tYmluZWRVUkxGaWx0ZXJzOjphZGRQYXR0ZXJuKHVpbnQ2NF90IGFj
dGlvbklkLCBjb25zdCBWZWN0b3I8VGVybT4mIHBhdHRlcm4pCiB7CiAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRSghcGF0dGVybi5pc0VtcHR5KCksICJUaGUgcGFyc2VyIHNob3VsZCBoYXZlIGV4Y2x1
ZGVkIGVtcHR5IHBhdHRlcm5zIGJlZm9yZSByZWFjaGluZyBDb21iaW5lZFVSTEZpbHRlcnMuIik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21i
aW5lZFVSTEZpbHRlcnMuaAkocmV2aXNpb24gMTgzODgwKQorKysgU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgiCiAj
aW5jbHVkZSAiTkZBLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0LDEwICs0NSwxMSBAQCBwdWJs
aWM6CiAgICAgQ29tYmluZWRVUkxGaWx0ZXJzKCk7CiAgICAgfkNvbWJpbmVkVVJMRmlsdGVycygp
OwogCi0gICAgdm9pZCBhZGRQYXR0ZXJuKHVpbnQ2NF90IHBhdHRlcm5JZCwgY29uc3QgVmVjdG9y
PFRlcm0+JiBwYXR0ZXJuKTsKKyAgICB2b2lkIGFkZFBhdHRlcm4odWludDY0X3QgYWN0aW9uSWQs
IGNvbnN0IFZlY3RvcjxUZXJtPiYgcGF0dGVybik7CisgICAgdm9pZCBhZGREb21haW4odWludDY0
X3QgYWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgZG9tYWluKTsKIAogICAgIHZvaWQgcHJvY2Vzc05G
QXMoc2l6ZV90IG1heE5GQVNpemUsIHN0ZDo6ZnVuY3Rpb248dm9pZChORkEmJik+IGhhbmRsZXIp
OwotICAgIGJvb2wgaXNFbXB0eSgpOworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogCiAjaWYg
Q09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9SVElORwogICAgIHNpemVfdCBtZW1v
cnlVc2VkKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9u
IDE4Mzg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uOjp+Q29tcGlsZWRDb250ZQogCiBWZWN0b3I8U3RyaW5nPiBDb21w
aWxlZENvbnRlbnRFeHRlbnNpb246Omdsb2JhbERpc3BsYXlOb25lU2VsZWN0b3JzKFZlY3Rvcjxi
b29sPiYgcGFnZXNVc2VkKQogewotICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgaW50ZXJwcmV0
ZXIoYnl0ZWNvZGUoKSwgYnl0ZWNvZGVMZW5ndGgoKSwgcGFnZXNVc2VkKTsKKyAgICBERkFCeXRl
Y29kZUludGVycHJldGVyIGludGVycHJldGVyKGZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2Rl
KCksIGZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlTGVuZ3RoKCksIHBhZ2VzVXNlZCk7CiAg
ICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBhY3Rpb25Mb2NhdGlvbnMgPSBpbnRl
cnByZXRlci5hY3Rpb25zRnJvbURGQVJvb3QoKTsKICAgICAKICAgICBWZWN0b3I8QWN0aW9uPiBn
bG9iYWxBY3Rpb25zOwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDE4Mzg4
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbXBpbGVkQ29udGVudEV4
dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCwxMiBAQCBjbGFzcyBXRUJDT1JF
X0VYUE9SVCBDb21waWxlZENvbnRlbnRFeHRlCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uKCk7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IERGQUJ5dGVjb2RlKiBi
eXRlY29kZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVjb2RlTGVuZ3Ro
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgREZBQnl0ZWNvZGUqIGZpbHRlcnNXaXRo
b3V0RG9tYWluc0J5dGVjb2RlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgZmls
dGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVMZW5ndGgoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBjb25zdCBERkFCeXRlY29kZSogZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGUoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBmaWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZUxlbmd0
aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IERGQUJ5dGVjb2RlKiBkb21haW5GaWx0
ZXJzQnl0ZWNvZGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBkb21haW5GaWx0
ZXJzQnl0ZWNvZGVMZW5ndGgoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBjb25zdCBTZXJpYWxp
emVkQWN0aW9uQnl0ZSogYWN0aW9ucygpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVk
IGFjdGlvbnNMZW5ndGgoKSBjb25zdCA9IDA7CiAgICAgVmVjdG9yPFN0cmluZz4gZ2xvYmFsRGlz
cGxheU5vbmVTZWxlY3RvcnMoVmVjdG9yPGJvb2w+JiBwYWdlc1VzZWQpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODM4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05Niw4ICs5NiwxMCBAQCBzdGF0aWMgVmVjdG9yPHVuc2lnbmVkPiBzZXJpYWxpemVB
Y3Rpb25zCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgLy8gSWRlbnRpY2FsIHNlcXVlbnRpYWwgYWN0aW9ucyBzaG91bGQgbm90IGJlIHJld3JpdHRl
bi4KLSAgICAgICAgaWYgKHJ1bGVJbmRleCAmJiBydWxlLmFjdGlvbigpID09IHJ1bGVMaXN0W3J1
bGVJbmRleCAtIDFdLmFjdGlvbigpKSB7CisgICAgICAgIC8vIElkZW50aWNhbCBzZXF1ZW50aWFs
IGFjdGlvbnMgc2hvdWxkIG5vdCBiZSByZXdyaXR0ZW4gdW5sZXNzIHRoZXJlIGFyZSBkb21haW5z
IGluIHRoZSB0cmlnZ2VyLgorICAgICAgICAvLyBJZiB0aGVyZSBhcmUgZG9tYWlucyBpbiB0aGUg
dHJpZ2dlciwgd2UgbmVlZCB0byBkaXN0aW5ndWlzaCB0aGUgYWN0aW9ucyBieSBpbmRleCB0byB0
ZWxsIGlmIHdlIG5lZWQgdG8gYXBwbHkgaXQKKyAgICAgICAgLy8gYnkgY29tcGFyaW5nIHRoZSBv
dXRwdXQgb2YgdGhlIGZpbHRlcnMgd2l0aCBkb21haW5zIGFuZCB0aGUgZG9tYWluIGZpbHRlcnMu
CisgICAgICAgIGlmIChydWxlSW5kZXggJiYgcnVsZS5hY3Rpb24oKSA9PSBydWxlTGlzdFtydWxl
SW5kZXggLSAxXS5hY3Rpb24oKSAmJiBydWxlLnRyaWdnZXIoKS5kb21haW5zLmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25zLmFwcGVuZChhY3Rpb25Mb2NhdGlvbnNbcnVs
ZUluZGV4IC0gMV0pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTE1Niw4
ICsxNTgsMTMgQEAgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogCiAg
ICAgVW5pdmVyc2FsQWN0aW9uTG9jYXRpb25zU2V0IHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9uczsK
IAotICAgIENvbWJpbmVkVVJMRmlsdGVycyBjb21iaW5lZFVSTEZpbHRlcnM7Ci0gICAgVVJMRmls
dGVyUGFyc2VyIHVybEZpbHRlclBhcnNlcihjb21iaW5lZFVSTEZpbHRlcnMpOworICAgIC8vIEZJ
WE1FOiBUaGVzZSBkb24ndCBhbGwgbmVlZCB0byBiZSBpbiBtZW1vcnkgYXQgdGhlIHNhbWUgdGlt
ZS4KKyAgICBDb21iaW5lZFVSTEZpbHRlcnMgZmlsdGVyc1dpdGhvdXREb21haW5zOworICAgIENv
bWJpbmVkVVJMRmlsdGVycyBmaWx0ZXJzV2l0aERvbWFpbnM7CisgICAgQ29tYmluZWRVUkxGaWx0
ZXJzIGRvbWFpbkZpbHRlcnM7CisgICAgVVJMRmlsdGVyUGFyc2VyIGZpbHRlcnNXaXRob3V0RG9t
YWluUGFyc2VyKGZpbHRlcnNXaXRob3V0RG9tYWlucyk7CisgICAgVVJMRmlsdGVyUGFyc2VyIGZp
bHRlcnNXaXRoRG9tYWluUGFyc2VyKGZpbHRlcnNXaXRoRG9tYWlucyk7CisgICAgCiAgICAgYm9v
bCBpZ25vcmVQcmV2aW91c1J1bGVzU2VlbiA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgcnVs
ZUluZGV4ID0gMDsgcnVsZUluZGV4IDwgcGFyc2VkUnVsZUxpc3Quc2l6ZSgpOyArK3J1bGVJbmRl
eCkgewogICAgICAgICBjb25zdCBDb250ZW50RXh0ZW5zaW9uUnVsZSYgY29udGVudEV4dGVuc2lv
blJ1bGUgPSBwYXJzZWRSdWxlTGlzdFtydWxlSW5kZXhdOwpAQCAtMTY2LDE4ICsxNzMsMzkgQEAg
c3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogCiAgICAgICAgIC8vIEhp
Z2ggYml0cyBhcmUgdXNlZCBmb3IgZmxhZ3MuIFRoaXMgc2hvdWxkIG1hdGNoIGhvdyB0aGV5IGFy
ZSB1c2VkIGluIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlLgogICAgICAgICB1aW50
NjRfdCBhY3Rpb25Mb2NhdGlvbkFuZEZsYWdzID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0cmln
Z2VyLmZsYWdzKSA8PCAzMikgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYWN0aW9uTG9jYXRpb25z
W3J1bGVJbmRleF0pOwotICAgICAgICBVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVzIHN0YXR1
cyA9IHVybEZpbHRlclBhcnNlci5hZGRQYXR0ZXJuKHRyaWdnZXIudXJsRmlsdGVyLCB0cmlnZ2Vy
LnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSwgYWN0aW9uTG9jYXRpb25BbmRGbGFncyk7Ci0KLSAg
ICAgICAgaWYgKHN0YXR1cyA9PSBVUkxGaWx0ZXJQYXJzZXI6Ok1hdGNoZXNFdmVyeXRoaW5nKSB7
Ci0gICAgICAgICAgICBpZiAoaWdub3JlUHJldmlvdXNSdWxlc1NlZW4pCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6UmVnZXhNYXRjaGVzRXZlcnl0aGluZ0Fm
dGVySWdub3JlUHJldmlvdXNSdWxlczsKLSAgICAgICAgICAgIHVuaXZlcnNhbEFjdGlvbkxvY2F0
aW9ucy5hZGQoYWN0aW9uTG9jYXRpb25BbmRGbGFncyk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoc3RhdHVzICE9IFVSTEZpbHRlclBhcnNlcjo6T2sgJiYgc3RhdHVzICE9IFVSTEZpbHRlclBh
cnNlcjo6TWF0Y2hlc0V2ZXJ5dGhpbmcpIHsKLSAgICAgICAgICAgIGRhdGFMb2dGKCJFcnJvciB3
aGlsZSBwYXJzaW5nICVzOiAlc1xuIiwgdHJpZ2dlci51cmxGaWx0ZXIudXRmOCgpLmRhdGEoKSwg
VVJMRmlsdGVyUGFyc2VyOjpzdGF0dXNTdHJpbmcoc3RhdHVzKS51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkUmVnZXg7
CisgICAgICAgIFVSTEZpbHRlclBhcnNlcjo6UGFyc2VTdGF0dXMgc3RhdHVzID0gVVJMRmlsdGVy
UGFyc2VyOjpPazsKKyAgICAgICAgaWYgKHRyaWdnZXIuZG9tYWlucy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVCh0cmlnZ2VyLmRvbWFpbkNvbmRpdGlvbiA9PSBUcmlnZ2VyOjpEb21h
aW5Db25kaXRpb246Ok5vbmUpOworICAgICAgICAgICAgc3RhdHVzID0gZmlsdGVyc1dpdGhvdXRE
b21haW5QYXJzZXIuYWRkUGF0dGVybih0cmlnZ2VyLnVybEZpbHRlciwgdHJpZ2dlci51cmxGaWx0
ZXJJc0Nhc2VTZW5zaXRpdmUsIGFjdGlvbkxvY2F0aW9uQW5kRmxhZ3MpOworICAgICAgICAgICAg
aWYgKHN0YXR1cyA9PSBVUkxGaWx0ZXJQYXJzZXI6Ok1hdGNoZXNFdmVyeXRoaW5nKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGlnbm9yZVByZXZpb3VzUnVsZXNTZWVuKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpSZWdleE1hdGNoZXNFdmVyeXRoaW5n
QWZ0ZXJJZ25vcmVQcmV2aW91c1J1bGVzOworICAgICAgICAgICAgICAgIHVuaXZlcnNhbEFjdGlv
bkxvY2F0aW9ucy5hZGQoYWN0aW9uTG9jYXRpb25BbmRGbGFncyk7CisgICAgICAgICAgICAgICAg
c3RhdHVzID0gVVJMRmlsdGVyUGFyc2VyOjpPazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChzdGF0dXMgIT0gVVJMRmlsdGVyUGFyc2VyOjpPaykgeworICAgICAgICAgICAgICAgIGRh
dGFMb2dGKCJFcnJvciB3aGlsZSBwYXJzaW5nICVzOiAlc1xuIiwgdHJpZ2dlci51cmxGaWx0ZXIu
dXRmOCgpLmRhdGEoKSwgVVJMRmlsdGVyUGFyc2VyOjpzdGF0dXNTdHJpbmcoc3RhdHVzKS51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9y
OjpKU09OSW52YWxpZFJlZ2V4OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaWYgKHRyaWdnZXIuZG9tYWluQ29uZGl0aW9uID09IFRyaWdnZXI6OkRvbWFpbkNv
bmRpdGlvbjo6SWZEb21haW4pCisgICAgICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25BbmRGbGFn
cyB8PSBJZkRvbWFpbkZsYWc7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQodHJpZ2dlci5kb21haW5Db25kaXRpb24gPT0gVHJpZ2dlcjo6RG9tYWluQ29uZGl0aW9u
OjpVbmxlc3NEb21haW4pOworICAgICAgICAgICAgICAgIEFTU0VSVCghKGFjdGlvbkxvY2F0aW9u
QW5kRmxhZ3MgJiBJZkRvbWFpbkZsYWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgc3RhdHVzID0gZmlsdGVyc1dpdGhEb21haW5QYXJzZXIuYWRkUGF0dGVybih0
cmlnZ2VyLnVybEZpbHRlciwgdHJpZ2dlci51cmxGaWx0ZXJJc0Nhc2VTZW5zaXRpdmUsIGFjdGlv
bkxvY2F0aW9uQW5kRmxhZ3MpOworICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBVUkxGaWx0ZXJQ
YXJzZXI6Ok1hdGNoZXNFdmVyeXRoaW5nKQorICAgICAgICAgICAgICAgIHJldHVybiBDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OlJlZ2V4TWF0Y2hlc0V2ZXJ5dGhpbmdXaXRoRG9tYWluczsKKyAgICAg
ICAgICAgIGlmIChzdGF0dXMgIT0gVVJMRmlsdGVyUGFyc2VyOjpPaykgeworICAgICAgICAgICAg
ICAgIGRhdGFMb2dGKCJFcnJvciB3aGlsZSBwYXJzaW5nICVzOiAlc1xuIiwgdHJpZ2dlci51cmxG
aWx0ZXIudXRmOCgpLmRhdGEoKSwgVVJMRmlsdGVyUGFyc2VyOjpzdGF0dXNTdHJpbmcoc3RhdHVz
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OSW52YWxpZFJlZ2V4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9y
IChjb25zdCBTdHJpbmcmIGRvbWFpbiA6IHRyaWdnZXIuZG9tYWlucykKKyAgICAgICAgICAgICAg
ICBkb21haW5GaWx0ZXJzLmFkZERvbWFpbihhY3Rpb25Mb2NhdGlvbkFuZEZsYWdzLCBkb21haW4p
OwogICAgICAgICB9CisgICAgICAgIEFTU0VSVChzdGF0dXMgPT0gVVJMRmlsdGVyUGFyc2VyOjpP
ayk7CiAgICAgICAgIAogICAgICAgICBpZiAoY29udGVudEV4dGVuc2lvblJ1bGUuYWN0aW9uKCku
dHlwZSgpID09IEFjdGlvblR5cGU6Oklnbm9yZVByZXZpb3VzUnVsZXMpCiAgICAgICAgICAgICBp
Z25vcmVQcmV2aW91c1J1bGVzU2VlbiA9IHRydWU7CkBAIC0xOTIsNyArMjIwLDkgQEAgc3RkOjpl
cnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogICAgIGRhdGFMb2dGKCIgICAgVGlt
ZSBzcGVudCBwYXJ0aXRpb25pbmcgdGhlIHJ1bGVzIGludG8gZ3JvdXBzOiAlZlxuIiwgKHBhdHRl
cm5QYXJ0aXRpb25pbmdFbmQgLSBwYXR0ZXJuUGFydGl0aW9uaW5nU3RhcnQpKTsKICNlbmRpZgog
Ci0gICAgTE9HX0xBUkdFX1NUUlVDVFVSRVMoY29tYmluZWRVUkxGaWx0ZXJzLCBjb21iaW5lZFVS
TEZpbHRlcnMubWVtb3J5VXNlZCgpKTsKKyAgICBMT0dfTEFSR0VfU1RSVUNUVVJFUyhmaWx0ZXJz
V2l0aG91dERvbWFpbnMsIGZpbHRlcnNXaXRob3V0RG9tYWlucy5tZW1vcnlVc2VkKCkpOworICAg
IExPR19MQVJHRV9TVFJVQ1RVUkVTKGZpbHRlcnNXaXRoRG9tYWlucywgZmlsdGVyc1dpdGhEb21h
aW5zLm1lbW9yeVVzZWQoKSk7CisgICAgTE9HX0xBUkdFX1NUUlVDVFVSRVMoZG9tYWluRmlsdGVy
cywgZG9tYWluRmlsdGVycy5tZW1vcnlVc2VkKCkpOwogCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05T
X1BFUkZPUk1BTkNFX1JFUE9SVElORwogICAgIGRvdWJsZSB0b3RhbE5GQVRvQnl0ZUNvZGVCdWls
ZFRpbWVTdGFydCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwpAQCAtMjAzLDggKzIz
Myw5IEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEUKICAgICAKICAg
ICBib29sIGZpcnN0TkZBU2VlbiA9IGZhbHNlOwogICAgIC8vIEZJWE1FOiBDb21iaW5lIHNtYWxs
IE5GQXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgTkZBcy4KLSAgICBjb21iaW5lZFVSTEZpbHRl
cnMucHJvY2Vzc05GQXMobWF4TkZBU2l6ZSwgWyZdKE5GQSYmIG5mYSkgeworICAgIGZpbHRlcnNX
aXRob3V0RG9tYWlucy5wcm9jZXNzTkZBcyhtYXhORkFTaXplLCBbJl0oTkZBJiYgbmZhKSB7CiAj
aWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCisgICAgICAgIGRh
dGFMb2dGKCJmaWx0ZXJzV2l0aG91dERvbWFpbnMgTkZBXG4iKTsKICAgICAgICAgbmZhLmRlYnVn
UHJpbnREb3QoKTsKICNlbmRpZgogCkBAIC0yMTYsNyArMjQ3LDcgQEAgc3RkOjplcnJvcl9jb2Rl
IGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogICAgICAgICBkZmEubWluaW1pemUoKTsKIAogI2lm
IENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwotICAgICAgICBXVEZM
b2dBbHdheXMoIkRGQSIpOworICAgICAgICBkYXRhTG9nRigiZmlsdGVyc1dpdGhvdXREb21haW5z
IERGQVxuIik7CiAgICAgICAgIGRmYS5kZWJ1Z1ByaW50RG90KCk7CiAjZW5kaWYKICAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRSghZGZhLm5vZGVzW2RmYS5yb290XS5oYXNBY3Rpb25zKCksICJB
bGwgYWN0aW9ucyBvbiB0aGUgREZBIHJvb3Qgc2hvdWxkIGNvbWUgZnJvbSByZWd1bGFyIGV4cHJl
c3Npb25zIHRoYXQgbWF0Y2ggZXZlcnl0aGluZy4iKTsKQEAgLTIzMCwxMSArMjYxLDExIEBAIHN0
ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEUKICAgICAgICAgREZBQnl0ZWNv
ZGVDb21waWxlciBjb21waWxlcihkZmEsIGJ5dGVjb2RlKTsKICAgICAgICAgY29tcGlsZXIuY29t
cGlsZSgpOwogICAgICAgICBMT0dfTEFSR0VfU1RSVUNUVVJFUyhieXRlY29kZSwgYnl0ZWNvZGUu
Y2FwYWNpdHkoKSAqIHNpemVvZih1aW50OF90KSk7Ci0gICAgICAgIGNsaWVudC53cml0ZUJ5dGVj
b2RlKFdURjo6bW92ZShieXRlY29kZSkpOworICAgICAgICBjbGllbnQud3JpdGVGaWx0ZXJzV2l0
aG91dERvbWFpbnNCeXRlY29kZShXVEY6Om1vdmUoYnl0ZWNvZGUpKTsKIAogICAgICAgICBmaXJz
dE5GQVNlZW4gPSB0cnVlOwogICAgIH0pOwotICAgIEFTU0VSVChjb21iaW5lZFVSTEZpbHRlcnMu
aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoZmlsdGVyc1dpdGhvdXREb21haW5zLmlzRW1wdHkoKSk7
CiAKICAgICBpZiAoIWZpcnN0TkZBU2VlbikgewogICAgICAgICAvLyBPdXIgYnl0ZWNvZGUgaW50
ZXJwcmV0ZXIgZXhwZWN0cyB0byBoYXZlIGF0IGxlYXN0IG9uZSBERkEsIHNvIGlmIHdlIGhhdmVu
J3Qgc2VlbiBhbnkKQEAgLTI0OSwxMiArMjgwLDYyIEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxl
UnVsZUxpc3QoQ29udGVudEUKICAgICAgICAgREZBQnl0ZWNvZGVDb21waWxlciBjb21waWxlcihk
dW1teURGQSwgYnl0ZWNvZGUpOwogICAgICAgICBjb21waWxlci5jb21waWxlKCk7CiAgICAgICAg
IExPR19MQVJHRV9TVFJVQ1RVUkVTKGJ5dGVjb2RlLCBieXRlY29kZS5jYXBhY2l0eSgpICogc2l6
ZW9mKHVpbnQ4X3QpKTsKLSAgICAgICAgY2xpZW50LndyaXRlQnl0ZWNvZGUoV1RGOjptb3ZlKGJ5
dGVjb2RlKSk7CisgICAgICAgIGNsaWVudC53cml0ZUZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVj
b2RlKFdURjo6bW92ZShieXRlY29kZSkpOwogICAgIH0KLQogICAgIExPR19MQVJHRV9TVFJVQ1RV
UkVTKHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9ucywgdW5pdmVyc2FsQWN0aW9uTG9jYXRpb25zLmNh
cGFjaXR5KCkgKiBzaXplb2YodW5zaWduZWQpKTsKICAgICB1bml2ZXJzYWxBY3Rpb25Mb2NhdGlv
bnMuY2xlYXIoKTsKKyAgICAKKyAgICBmaWx0ZXJzV2l0aERvbWFpbnMucHJvY2Vzc05GQXMobWF4
TkZBU2l6ZSwgWyZdKE5GQSYmIG5mYSkgeworI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9N
QUNISU5FX0RFQlVHR0lORworICAgICAgICBkYXRhTG9nRigiZmlsdGVyc1dpdGhEb21haW5zIE5G
QVxuIik7CisgICAgICAgIG5mYS5kZWJ1Z1ByaW50RG90KCk7CisjZW5kaWYKKyAgICAgICAgTE9H
X0xBUkdFX1NUUlVDVFVSRVMobmZhLCBuZmEubWVtb3J5VXNlZCgpKTsKKyAgICAgICAgREZBIGRm
YSA9IE5GQVRvREZBOjpjb252ZXJ0KG5mYSk7CisjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRF
X01BQ0hJTkVfREVCVUdHSU5HCisgICAgICAgIGRhdGFMb2dGKCJmaWx0ZXJzV2l0aERvbWFpbnMg
UFJFIE1JTklNSVpJTkcgREZBXG4iKTsKKyAgICAgICAgZGZhLmRlYnVnUHJpbnREb3QoKTsKKyNl
bmRpZgorICAgICAgICBMT0dfTEFSR0VfU1RSVUNUVVJFUyhkZmEsIGRmYS5tZW1vcnlVc2VkKCkp
OworICAgICAgICAvLyBNaW5pbWl6aW5nIHRoaXMgREZBIHdvdWxkIG5vdCBiZSBlZmZlY3RpdmUg
YmVjYXVzZSBhbGwgYWN0aW9ucyB3aXRoIGRvbWFpbnMgYXJlIHVuaXF1ZS4KKyNpZiBDT05URU5U
X0VYVEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJVR0dJTkcKKyAgICAgICAgZGF0YUxvZ0YoImZp
bHRlcnNXaXRoRG9tYWlucyBQT1NUIE1JTklNSVpJTkcgREZBXG4iKTsKKyAgICAgICAgZGZhLmRl
YnVnUHJpbnREb3QoKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFkZmEu
bm9kZXNbZGZhLnJvb3RdLmhhc0FjdGlvbnMoKSwgIkZpbHRlcnMgd2l0aCBkb21haW5zIHRoYXQg
bWF0Y2ggZXZlcnl0aGluZyBhcmUgbm90IGFsbG93ZWQgcmlnaHQgbm93LiIpOworICAgICAgICAK
KyAgICAgICAgVmVjdG9yPERGQUJ5dGVjb2RlPiBieXRlY29kZTsKKyAgICAgICAgREZBQnl0ZWNv
ZGVDb21waWxlciBjb21waWxlcihkZmEsIGJ5dGVjb2RlKTsKKyAgICAgICAgY29tcGlsZXIuY29t
cGlsZSgpOworICAgICAgICBMT0dfTEFSR0VfU1RSVUNUVVJFUyhieXRlY29kZSwgYnl0ZWNvZGUu
Y2FwYWNpdHkoKSAqIHNpemVvZih1aW50OF90KSk7CisgICAgICAgIGNsaWVudC53cml0ZUZpbHRl
cnNXaXRoRG9tYWluc0J5dGVjb2RlKFdURjo6bW92ZShieXRlY29kZSkpOworICAgIH0pOworICAg
IEFTU0VSVChmaWx0ZXJzV2l0aERvbWFpbnMuaXNFbXB0eSgpKTsKIAorICAgIGRvbWFpbkZpbHRl
cnMucHJvY2Vzc05GQXMobWF4TkZBU2l6ZSwgWyZdKE5GQSYmIG5mYSkgeworI2lmIENPTlRFTlRf
RVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORworICAgICAgICBkYXRhTG9nRigiZG9t
YWluRmlsdGVycyBORkFcbiIpOworICAgICAgICBuZmEuZGVidWdQcmludERvdCgpOworI2VuZGlm
CisgICAgICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKG5mYSwgbmZhLm1lbW9yeVVzZWQoKSk7Cisg
ICAgICAgIERGQSBkZmEgPSBORkFUb0RGQTo6Y29udmVydChuZmEpOworI2lmIENPTlRFTlRfRVhU
RU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORworICAgICAgICBkYXRhTG9nRigiZG9tYWlu
RmlsdGVycyBERkFcbiIpOworICAgICAgICBkZmEuZGVidWdQcmludERvdCgpOworI2VuZGlmCisg
ICAgICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKGRmYSwgZGZhLm1lbW9yeVVzZWQoKSk7CisgICAg
ICAgIC8vIE1pbmltaXppbmcgdGhpcyBERkEgd291bGQgbm90IGJlIGVmZmVjdGl2ZSBiZWNhdXNl
IGFsbCBhY3Rpb25zIGFyZSB1bmlxdWUKKyAgICAgICAgLy8gYW5kIGJlY2F1c2Ugb2YgdGhlIHRy
ZWUtbGlrZSBzdHJ1Y3R1cmUgb2YgdGhpcyBERkEuCisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UoIWRmYS5ub2Rlc1tkZmEucm9vdF0uaGFzQWN0aW9ucygpLCAiVGhlcmUgc2hvdWxkIG5vdCBi
ZSBhbnkgZG9tYWlucyB0aGF0IG1hdGNoIGV2ZXJ5dGhpbmcuIik7CisgICAgICAgIAorICAgICAg
ICBWZWN0b3I8REZBQnl0ZWNvZGU+IGJ5dGVjb2RlOworICAgICAgICBERkFCeXRlY29kZUNvbXBp
bGVyIGNvbXBpbGVyKGRmYSwgYnl0ZWNvZGUpOworICAgICAgICBjb21waWxlci5jb21waWxlKCk7
CisgICAgICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKGJ5dGVjb2RlLCBieXRlY29kZS5jYXBhY2l0
eSgpICogc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgY2xpZW50LndyaXRlRG9tYWluRmlsdGVy
c0J5dGVjb2RlKFdURjo6bW92ZShieXRlY29kZSkpOworICAgIH0pOworICAgIEFTU0VSVChkb21h
aW5GaWx0ZXJzLmlzRW1wdHkoKSk7ICAgIAorICAgIAogI2lmIENPTlRFTlRfRVhURU5TSU9OU19Q
RVJGT1JNQU5DRV9SRVBPUlRJTkcKICAgICBkb3VibGUgdG90YWxORkFUb0J5dGVDb2RlQnVpbGRU
aW1lRW5kID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgZGF0YUxvZ0YoIiAg
ICBUaW1lIHNwZW50IGJ1aWxkaW5nIGFuZCBjb21waWxpbmcgdGhlIERGQXM6ICVmXG4iLCAodG90
YWxORkFUb0J5dGVDb2RlQnVpbGRUaW1lRW5kIC0gdG90YWxORkFUb0J5dGVDb2RlQnVpbGRUaW1l
U3RhcnQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25Db21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oCShyZXZpc2lvbiAxODM4ODApCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGls
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTcgKzM2LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewogCi1zdHJ1Y3QgQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YSB7Ci0gICAgVmVjdG9yPERGQUJ5dGVjb2RlPiBieXRlY29kZTsKLSAg
ICBWZWN0b3I8U2VyaWFsaXplZEFjdGlvbkJ5dGU+IGFjdGlvbnM7Ci19OwotCiBjbGFzcyBDb250
ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkNv
bnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCgpIHsgfQogICAgIAotICAgIHZpcnR1YWwg
dm9pZCB3cml0ZUJ5dGVjb2RlKFZlY3RvcjxERkFCeXRlY29kZT4mJikgPSAwOworICAgIC8vIEZ1
bmN0aW9ucyBzaG91bGQgYmUgY2FsbGVkIGluIHRoaXMgb3JkZXIuIEFsbCBleGNlcHQgd3JpdGVB
Y3Rpb25zIGFuZCBmaW5hbGl6ZSBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLCB0aG91Z2gu
CiAgICAgdmlydHVhbCB2b2lkIHdyaXRlQWN0aW9ucyhWZWN0b3I8U2VyaWFsaXplZEFjdGlvbkJ5
dGU+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVGaWx0ZXJzV2l0aG91dERvbWFpbnNC
eXRlY29kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgd3Jp
dGVGaWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVEb21haW5GaWx0ZXJzQnl0ZWNvZGUoVmVjdG9yPERGQUJ5
dGVjb2RlPiYmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKCkgPSAwOwogfTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkVy
cm9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCShyZXZpc2lvbiAxODM4ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw2ICs3NywxNCBAQCBjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiBjb250
ZW50RXh0ZW5zCiAgICAgICAgICAgICAgICAgcmV0dXJuICJJbnZhbGlkIG9yIHVuc3VwcG9ydGVk
IHJlZ3VsYXIgZXhwcmVzc2lvbi4iOwogICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9u
RXJyb3I6OlJlZ2V4TWF0Y2hlc0V2ZXJ5dGhpbmdBZnRlcklnbm9yZVByZXZpb3VzUnVsZXM6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuICJSZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgbWF0Y2ggZXZl
cnl0aGluZyBhcmUgb25seSBhbGxvd2VkIGJlZm9yZSB0aGUgZmlyc3QgaWdub3JlLXByZXZpb3Vz
LXJ1bGVzLiI7CisgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6UmVnZXhN
YXRjaGVzRXZlcnl0aGluZ1dpdGhEb21haW5zOgorICAgICAgICAgICAgICAgIHJldHVybiAiUmVn
dWxhciBleHByZXNzaW9ucyB0aGF0IG1hdGNoIGV2ZXJ5dGhpbmcgYXJlIG5vdCBhbGxvd2VkIHdp
dGggdW5sZXNzLSBvciBpZi1kb21haW4uIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVu
c2lvbkVycm9yOjpKU09OSW52YWxpZERvbWFpbkxpc3Q6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICJJbnZhbGlkIGRvbWFpbiBsaXN0LiI7CisgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNp
b25FcnJvcjo6SlNPTkRvbWFpbk5vdExvd2VyQ2FzZUFTQ0lJOgorICAgICAgICAgICAgICAgIHJl
dHVybiAiRG9tYWlucyBtdXN0IGJlIGxvd2VyIGNhc2UgQVNDSUkuICBVc2UgcHVueWNvZGUgdG8g
ZW5jb2RlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLiI7CisgICAgICAgICAgICBjYXNlIENvbnRlbnRF
eHRlbnNpb25FcnJvcjo6SlNPTlVubGVzc0FuZElmRG9tYWluOgorICAgICAgICAgICAgICAgIHJl
dHVybiAiQSB0cmlnZ2VyIGNhbm5vdCBoYXZlIGJvdGggdW5sZXNzLSBhbmQgaWYtZG9tYWluLiI7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbkVycm9yLmgJKHJldmlzaW9uIDE4Mzg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw2ICs0OSw5IEBAIGVudW0gY2xhc3MgQ29udGVudEV4dGVuc2lvbkVycm9yIHsKICAgICBK
U09OSW52YWxpZFRyaWdnZXJGbGFnc0FycmF5LAogICAgIEpTT05JbnZhbGlkT2JqZWN0SW5Ucmln
Z2VyRmxhZ3NBcnJheSwKICAgICBKU09OSW52YWxpZFN0cmluZ0luVHJpZ2dlckZsYWdzQXJyYXks
CisgICAgSlNPTkludmFsaWREb21haW5MaXN0LAorICAgIEpTT05Eb21haW5Ob3RMb3dlckNhc2VB
U0NJSSwKKyAgICBKU09OVW5sZXNzQW5kSWZEb21haW4sCiAgICAgCiAgICAgSlNPTkludmFsaWRB
Y3Rpb24sCiAgICAgSlNPTkludmFsaWRBY3Rpb25UeXBlLApAQCAtNTYsOSArNTksMTAgQEAgZW51
bSBjbGFzcyBDb250ZW50RXh0ZW5zaW9uRXJyb3IgewogICAgIEpTT05JbnZhbGlkUmVnZXgsCiAg
ICAgCiAgICAgUmVnZXhNYXRjaGVzRXZlcnl0aGluZ0FmdGVySWdub3JlUHJldmlvdXNSdWxlcywK
KyAgICBSZWdleE1hdGNoZXNFdmVyeXRoaW5nV2l0aERvbWFpbnMsCiB9OwogCi1jb25zdCBzdGQ6
OmVycm9yX2NhdGVnb3J5JiBjb250ZW50RXh0ZW5zaW9uRXJyb3JDYXRlZ29yeSgpOworV0VCQ09S
RV9FWFBPUlQgY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgY29udGVudEV4dGVuc2lvbkVycm9y
Q2F0ZWdvcnkoKTsKIAogaW5saW5lIHN0ZDo6ZXJyb3JfY29kZSBtYWtlX2Vycm9yX2NvZGUoQ29u
dGVudEV4dGVuc2lvbkVycm9yIGVycm9yKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJ
KHJldmlzaW9uIDE4Mzg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0Nv
bnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw0MSBA
QCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2Ug
Q29udGVudEV4dGVuc2lvbnMgeworICAgIAorc3RhdGljIGJvb2wgY29udGFpbnNPbmx5QVNDSUlX
aXRoTm9VcHBlcmNhc2UoY29uc3QgU3RyaW5nJiBkb21haW4pCit7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRvbWFpbi5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFVDaGFyIGMgPSBk
b21haW4uYXQoaSk7CisgICAgICAgIGlmICghaXNBU0NJSShjKSB8fCBpc0FTQ0lJVXBwZXIoYykp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
ICAgIAorc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXREb21haW5MaXN0KEV4ZWNTdGF0ZSYgZXhl
YywgSlNPYmplY3QqIGFycmF5T2JqZWN0LCBWZWN0b3I8U3RyaW5nPiYgdmVjdG9yKQoreworICAg
IEFTU0VSVCh2ZWN0b3IuaXNFbXB0eSgpKTsKKyAgICBpZiAoIWFycmF5T2JqZWN0IHx8ICFpc0pT
QXJyYXkoYXJyYXlPYmplY3QpKQorICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9y
OjpKU09OSW52YWxpZERvbWFpbkxpc3Q7CisgICAgSlNBcnJheSogYXJyYXkgPSBqc0Nhc3Q8SlNB
cnJheSo+KGFycmF5T2JqZWN0KTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+
bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIC8vIEZJWE1FOiBKU09iamVjdDo6Z2V0SW5kZXggc2hvdWxkIGJlIG1hcmtlZCBhcyBj
b25zdC4KKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGFycmF5LT5nZXRJbmRleCgmZXhlYywgaSk7
CisgICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICF2YWx1ZS5pc1N0cmluZygpKQor
ICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWREb21h
aW5MaXN0OworICAgICAgICAKKyAgICAgICAgLy8gRG9tYWlucyBzaG91bGQgYmUgcHVueWNvZGUg
ZW5jb2RlZCBsb3dlciBjYXNlLgorICAgICAgICBjb25zdCBTdHJpbmcmIGRvbWFpbiA9IGpzQ2Fz
dDxKU1N0cmluZyo+KHZhbHVlKS0+dmFsdWUoJmV4ZWMpOworICAgICAgICBpZiAoZG9tYWluLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05J
bnZhbGlkRG9tYWluTGlzdDsKKyAgICAgICAgaWYgKCFjb250YWluc09ubHlBU0NJSVdpdGhOb1Vw
cGVyY2FzZShkb21haW4pKQorICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJv
cjo6SlNPTkRvbWFpbk5vdExvd2VyQ2FzZUFTQ0lJOworICAgICAgICB2ZWN0b3IuYXBwZW5kKGRv
bWFpbik7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CiAKIHN0YXRpYyBzdGQ6OmVycm9yX2Nv
ZGUgZ2V0VHlwZUZsYWdzKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgdHlwZVZhbHVl
LCBSZXNvdXJjZUZsYWdzJiBmbGFncywgdWludDE2X3QgKCpzdHJpbmdUb1R5cGUpKGNvbnN0IFN0
cmluZyYpKQogewpAQCAtMTA5LDYgKzE0NCwyOSBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxv
YWRUcmlnZ2VyKEV4ZWNTCiAgICAgICAgICAgICByZXR1cm4gdHlwZUZsYWdzRXJyb3I7CiAgICAg
fQogCisgICAgSlNWYWx1ZSBpZkRvbWFpbiA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAiaWYtZG9tYWluIikpOworICAgIGlmICghZXhlYy5o
YWRFeGNlcHRpb24oKSAmJiBpZkRvbWFpbi5pc09iamVjdCgpKSB7CisgICAgICAgIGF1dG8gaWZE
b21haW5FcnJvciA9IGdldERvbWFpbkxpc3QoZXhlYywgYXNPYmplY3QoaWZEb21haW4pLCB0cmln
Z2VyLmRvbWFpbnMpOworICAgICAgICBpZiAoaWZEb21haW5FcnJvcikKKyAgICAgICAgICAgIHJl
dHVybiBpZkRvbWFpbkVycm9yOworICAgICAgICBpZiAodHJpZ2dlci5kb21haW5zLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlk
RG9tYWluTGlzdDsKKyAgICAgICAgQVNTRVJUKHRyaWdnZXIuZG9tYWluQ29uZGl0aW9uID09IFRy
aWdnZXI6OkRvbWFpbkNvbmRpdGlvbjo6Tm9uZSk7CisgICAgICAgIHRyaWdnZXIuZG9tYWluQ29u
ZGl0aW9uID0gVHJpZ2dlcjo6RG9tYWluQ29uZGl0aW9uOjpJZkRvbWFpbjsKKyAgICB9CisgICAg
CisgICAgSlNWYWx1ZSB1bmxlc3NEb21haW4gPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInVubGVzcy1kb21haW4iKSk7CisgICAgaWYgKCFl
eGVjLmhhZEV4Y2VwdGlvbigpICYmIHVubGVzc0RvbWFpbi5pc09iamVjdCgpKSB7CisgICAgICAg
IGlmICh0cmlnZ2VyLmRvbWFpbkNvbmRpdGlvbiAhPSBUcmlnZ2VyOjpEb21haW5Db25kaXRpb246
Ok5vbmUpCisgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OVW5s
ZXNzQW5kSWZEb21haW47CisgICAgICAgIGF1dG8gdW5sZXNzRG9tYWluRXJyb3IgPSBnZXREb21h
aW5MaXN0KGV4ZWMsIGFzT2JqZWN0KHVubGVzc0RvbWFpbiksIHRyaWdnZXIuZG9tYWlucyk7Cisg
ICAgICAgIGlmICh1bmxlc3NEb21haW5FcnJvcikKKyAgICAgICAgICAgIHJldHVybiB1bmxlc3NE
b21haW5FcnJvcjsKKyAgICAgICAgaWYgKHRyaWdnZXIuZG9tYWlucy5pc0VtcHR5KCkpCisgICAg
ICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZERvbWFpbkxp
c3Q7CisgICAgICAgIHRyaWdnZXIuZG9tYWluQ29uZGl0aW9uID0gVHJpZ2dlcjo6RG9tYWluQ29u
ZGl0aW9uOjpVbmxlc3NEb21haW47CisgICAgfQorCiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAt
MTYwLDYgKzIxOCw3IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZFJ1bGUoRXhlY1N0YXQK
IAogc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkRW5jb2RlZFJ1bGVzKEV4ZWNTdGF0ZSYgZXhl
YywgY29uc3QgU3RyaW5nJiBydWxlcywgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiYgcnVs
ZUxpc3QpCiB7CisgICAgLy8gRklYTUU6IEpTT05QYXJzZSBzaG91bGQgcmVxdWlyZSBjYWxsYmFj
a3MgaW5zdGVhZCBvZiBhbiBFeGVjU3RhdGUuCiAgICAgSlNWYWx1ZSBkZWNvZGVkUnVsZXMgPSBK
U09OUGFyc2UoJmV4ZWMsIHJ1bGVzKTsKIAogICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpIHx8
ICFkZWNvZGVkUnVsZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmgJKHJldmlzaW9uIDE4Mzg4MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDExICs0NSwyNSBAQCBzdHJ1Y3QgVHJpZ2dlciB7CiAgICAg
U3RyaW5nIHVybEZpbHRlcjsKICAgICBib29sIHVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSB7IGZh
bHNlIH07CiAgICAgUmVzb3VyY2VGbGFncyBmbGFncyB7IDAgfTsKKyAgICBWZWN0b3I8U3RyaW5n
PiBkb21haW5zOworICAgIGVudW0gY2xhc3MgRG9tYWluQ29uZGl0aW9uIHsKKyAgICAgICAgTm9u
ZSwKKyAgICAgICAgSWZEb21haW4sCisgICAgICAgIFVubGVzc0RvbWFpbiwKKyAgICB9IGRvbWFp
bkNvbmRpdGlvbiB7IERvbWFpbkNvbmRpdGlvbjo6Tm9uZSB9OworICAgIAorICAgIH5UcmlnZ2Vy
KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChkb21haW5zLmlzRW1wdHkoKSA9PSAoZG9tYWluQ29u
ZGl0aW9uID09IERvbWFpbkNvbmRpdGlvbjo6Tm9uZSkpOworICAgIH0KKyAgICAKICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgVHJpZ2dlciYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gdXJsRmlsdGVyID09IG90aGVyLnVybEZpbHRlcgogICAgICAgICAgICAgJiYgdXJsRmls
dGVySXNDYXNlU2Vuc2l0aXZlID09IG90aGVyLnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZQotICAg
ICAgICAgICAgJiYgZmxhZ3MgPT0gb3RoZXIuZmxhZ3M7CisgICAgICAgICAgICAmJiBmbGFncyA9
PSBvdGhlci5mbGFncworICAgICAgICAgICAgJiYgZG9tYWlucyA9PSBvdGhlci5kb21haW5zCisg
ICAgICAgICAgICAmJiBkb21haW5Db25kaXRpb24gPT0gb3RoZXIuZG9tYWluQ29uZGl0aW9uOwog
ICAgIH0KIH07CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAJKHJldmlzaW9u
IDE4Mzg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25zQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDggKzg4LDQwIEBAIFZlY3Rv
cjxBY3Rpb24+IENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDoKICAgICBmb3IgKGF1dG8mIGNvbnRl
bnRFeHRlbnNpb24gOiBtX2NvbnRlbnRFeHRlbnNpb25zLnZhbHVlcygpKSB7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNvbnRlbnRFeHRlbnNpb24pOwogICAgICAgICBjb25zdCBDb21waWxlZENv
bnRlbnRFeHRlbnNpb24mIGNvbXBpbGVkRXh0ZW5zaW9uID0gY29udGVudEV4dGVuc2lvbi0+Y29t
cGlsZWRFeHRlbnNpb24oKTsKLSAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciBpbnRlcnBy
ZXRlcihjb21waWxlZEV4dGVuc2lvbi5ieXRlY29kZSgpLCBjb21waWxlZEV4dGVuc2lvbi5ieXRl
Y29kZUxlbmd0aCgpLCBjb250ZW50RXh0ZW5zaW9uLT5tX3BhZ2VzVXNlZCk7Ci0gICAgICAgIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgdHJpZ2dlcmVkQWN0aW9ucyA9IGludGVycHJl
dGVyLmludGVycHJldCh1cmxDU3RyaW5nLCBmbGFncyk7CisgICAgICAgIAorICAgICAgICAvLyBG
SVhNRTogVGhlc2Ugc2hvdWxkIHVzZSBhIGRpZmZlcmVudCBWZWN0b3I8Ym9vbD4gdG8ga2VlcCB0
cmFjayBvZiB3aGljaCBtZW1vcnkgcGFnZXMgYXJlIHVzZWQgd2hlbiBkb2luZyBtZW1vcnkgcmVw
b3J0aW5nLiBPciBqdXN0IHJlbW92ZSB0aGUgbWVtb3J5IHJlcG9ydGluZyBjb21wbGV0ZWx5Lgor
ICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyIHdpdGhvdXREb21haW5zSW50ZXJwcmV0ZXIo
Y29tcGlsZWRFeHRlbnNpb24uZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGUoKSwgY29tcGls
ZWRFeHRlbnNpb24uZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVMZW5ndGgoKSwgY29udGVu
dEV4dGVuc2lvbi0+bV9wYWdlc1VzZWQpOworICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVy
OjpBY3Rpb25zIHRyaWdnZXJlZEFjdGlvbnMgPSB3aXRob3V0RG9tYWluc0ludGVycHJldGVyLmlu
dGVycHJldCh1cmxDU3RyaW5nLCBmbGFncyk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0
byBzZWUgaWYgdGhlcmUgYXJlIGFueSBhY3Rpb25zIHRyaWdnZXJlZCB3aXRoIGlmLSBvciB1bmxl
c3MtZG9tYWluIGFuZCBjaGVjayB0aGUgZG9tYWluIGlmIHRoZXJlIGFyZS4KKyAgICAgICAgREZB
Qnl0ZWNvZGVJbnRlcnByZXRlciB3aXRoRG9tYWluc0ludGVycHJldGVyKGNvbXBpbGVkRXh0ZW5z
aW9uLmZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlKCksIGNvbXBpbGVkRXh0ZW5zaW9uLmZpbHRl
cnNXaXRoRG9tYWluc0J5dGVjb2RlTGVuZ3RoKCksIGNvbnRlbnRFeHRlbnNpb24tPm1fcGFnZXNV
c2VkKTsKKyAgICAgICAgCisgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMg
d2l0aERvbWFpbnNQb3NzaWJsZUFjdGlvbnMgPSB3aXRoRG9tYWluc0ludGVycHJldGVyLmludGVy
cHJldCh1cmxDU3RyaW5nLCBmbGFncyk7CisgICAgICAgIGlmICghd2l0aERvbWFpbnNQb3NzaWJs
ZUFjdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVy
IGRvbWFpbnNJbnRlcnByZXRlcihjb21waWxlZEV4dGVuc2lvbi5kb21haW5GaWx0ZXJzQnl0ZWNv
ZGUoKSwgY29tcGlsZWRFeHRlbnNpb24uZG9tYWluRmlsdGVyc0J5dGVjb2RlTGVuZ3RoKCksIGNv
bnRlbnRFeHRlbnNpb24tPm1fcGFnZXNVc2VkKTsKKyAgICAgICAgICAgIERGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXI6OkFjdGlvbnMgZG9tYWluc0FjdGlvbnMgPSBkb21haW5zSW50ZXJwcmV0ZXIuaW50
ZXJwcmV0KHJlc291cmNlTG9hZEluZm8ubWFpbkRvY3VtZW50VVJMLmhvc3QoKS51dGY4KCksIGZs
YWdzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6
QWN0aW9ucyBpZkRvbWFpbkFjdGlvbnM7CisgICAgICAgICAgICBERkFCeXRlY29kZUludGVycHJl
dGVyOjpBY3Rpb25zIHVubGVzc0RvbWFpbkFjdGlvbnM7CisgICAgICAgICAgICBmb3IgKHVpbnQ2
NF90IGFjdGlvbiA6IGRvbWFpbnNBY3Rpb25zKSB7CisgICAgICAgICAgICAgICAgaWYgKGFjdGlv
biAmIElmRG9tYWluRmxhZykKKyAgICAgICAgICAgICAgICAgICAgaWZEb21haW5BY3Rpb25zLmFk
ZChhY3Rpb24pOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdW5s
ZXNzRG9tYWluQWN0aW9ucy5hZGQoYWN0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZm9yICh1aW50NjRfdCBhY3Rpb24gOiB3aXRoRG9tYWluc1Bvc3NpYmxl
QWN0aW9ucykgeworICAgICAgICAgICAgICAgIGlmIChpZkRvbWFpbkFjdGlvbnMuY29udGFpbnMo
YWN0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiBhbiBpZi1kb21haW4gdHJpZ2dl
ciBtYXRjaGVzLCBhZGQgdGhlIGFjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGFj
dGlvbiAmIElmRG9tYWluRmxhZyk7CisgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJlZEFjdGlv
bnMuYWRkKGFjdGlvbiAmIH5JZkRvbWFpbkZsYWcpOworICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIShhY3Rpb24gJiBJZkRvbWFpbkZsYWcpICYmICF1bmxlc3NEb21haW5BY3Rpb25zLmNvbnRh
aW5zKGFjdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBhY3Rpb24gZGlk
IG5vdCBuZWVkIGFuIGlmLWRvbWFpbiwgaXQgbXVzdCBoYXZlIGJlZW4gYW4gdW5sZXNzLWRvbWFp
biBydWxlLgorICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGFjdGlvbiB1bmxlc3MgaXQg
bWF0Y2hlZCBhbiB1bmxlc3MtZG9tYWluIHRyaWdnZXIuCisgICAgICAgICAgICAgICAgICAgIHRy
aWdnZXJlZEFjdGlvbnMuYWRkKGFjdGlvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBjb25zdCBTZXJpYWxpemVkQWN0aW9u
Qnl0ZSogYWN0aW9ucyA9IGNvbXBpbGVkRXh0ZW5zaW9uLmFjdGlvbnMoKTsKICAgICAgICAgY29u
c3QgdW5zaWduZWQgYWN0aW9uc0xlbmd0aCA9IGNvbXBpbGVkRXh0ZW5zaW9uLmFjdGlvbnNMZW5n
dGgoKTsKQEAgLTExNCw4ICsxNDYsOSBAQCBWZWN0b3I8QWN0aW9uPiBDb250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQ6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFzYXdJZ25v
cmVQcmV2aW91c1J1bGVzKSB7Ci0gICAgICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyOjpB
Y3Rpb25zIHVuaXZlcnNhbEFjdGlvbnMgPSBpbnRlcnByZXRlci5hY3Rpb25zRnJvbURGQVJvb3Qo
KTsKLSAgICAgICAgICAgIGZvciAoYXV0byBhY3Rpb25Mb2NhdGlvbiA6IHVuaXZlcnNhbEFjdGlv
bnMpIHsKKyAgICAgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgdW5pdmVy
c2FsQWN0aW9ucyA9IHdpdGhvdXREb21haW5zSW50ZXJwcmV0ZXIuYWN0aW9uc0Zyb21ERkFSb290
KCk7CisgICAgICAgICAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbkxvY2F0aW9uIDogdW5pdmVyc2Fs
QWN0aW9ucykgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgZGVzZXJp
YWxpemUgYW4gYWN0aW9uIGFsbCB0aGUgd2F5IGlmIGl0IGlzIGEgY3NzLWRpc3BsYXktbm9uZSBz
ZWxlY3Rvci4KICAgICAgICAgICAgICAgICBBY3Rpb24gYWN0aW9uID0gQWN0aW9uOjpkZXNlcmlh
bGl6ZShhY3Rpb25zLCBhY3Rpb25zTGVuZ3RoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0aW9u
TG9jYXRpb24pKTsKICAgICAgICAgICAgICAgICBhY3Rpb24uc2V0RXh0ZW5zaW9uSWRlbnRpZmll
cihjb250ZW50RXh0ZW5zaW9uLT5pZGVudGlmaWVyKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHJldmlzaW9uIDE4Mzg4MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDExICs1MiwxMyBAQCBlbnVtIGNsYXNzIERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb24gOiB1aW50CiAgICAgLy8gQXBwZW5kQWN0aW9uIGhhcyBvbmUgYXJndW1lbnQ6CiAgICAg
Ly8gVGhlIGFjdGlvbiB0byBhcHBlbmQgKDQgYnl0ZXMpLgogICAgIEFwcGVuZEFjdGlvbiwKKyAg
ICBBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4sCiAgICAgCiAgICAgLy8gVGVzdEZsYWdzQW5kQXBw
ZW5kQWN0aW9uIGhhcyB0d28gYXJndW1lbnRzOgotICAgIC8vIFRoZSBmbGFncyB0byBjaGVjayBi
ZWZvcmUgYXBwZW5kaW5nICgyIGJ5dGVzKSwKLSAgICAvLyBUaGUgYWN0aW9uIHRvIGFwcGVuZCAo
NGJ5dGVzKS4KKyAgICAvLyBUaGUgZmxhZ3MgdG8gY2hlY2sgYmVmb3JlIGFwcGVuZGluZyAoMiBi
eXRlcykuCisgICAgLy8gVGhlIGFjdGlvbiB0byBhcHBlbmQgKDQgYnl0ZXMpLgogICAgIFRlc3RG
bGFnc0FuZEFwcGVuZEFjdGlvbiwKKyAgICBUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZE
b21haW4sCiAKICAgICAvLyBUZXJtaW5hdGUgaGFzIG5vIGFyZ3VtZW50cy4KICAgICBUZXJtaW5h
dGUsCkBAIC03Niw4ICs3OCwxMCBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBpbnN0cnVjdGlvblNp
emVXaXRoCiAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlUmFuZ2VD
YXNlSW5zZW5zaXRpdmU6CiAgICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVj
dGlvbikgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodW5zaWdu
ZWQpOwogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uOgorICAg
IGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluOgog
ICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVu
c2lnbmVkKTsKICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFw
cGVuZEFjdGlvbjoKKyAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0Fu
ZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbjoKICAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRl
Y29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50MTZfdCkgKyBzaXplb2YodW5zaWduZWQpOwog
ICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVybWluYXRlOgogICAgICAgICByZXR1
cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAJ
KHJldmlzaW9uIDE4Mzg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RG
QUJ5dGVjb2RlQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNiArNDgsMjIgQEAg
aW5saW5lIHZvaWQgc2V0MzJCaXRzKFZlY3RvcjxERkFCeXRlY29kZQogICAgICpyZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkKj4oJmJ5dGVjb2RlW2luZGV4XSkgPSB2YWx1ZTsKIH0KIAotdm9pZCBE
RkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QXBwZW5kQWN0aW9uKHVuc2lnbmVkIGFjdGlvbikKK3Zv
aWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdEFwcGVuZEFjdGlvbih1bnNpZ25lZCBhY3Rpb24s
IGJvb2wgaWZEb21haW4pCiB7Ci0gICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1f
Ynl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CisgICAgaWYg
KGlmRG9tYWluKQorICAgICAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRl
Y29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKTsK
KyAgICBlbHNlCisgICAgICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVj
b2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pOwogICAgIGFwcGVuZDx1
bnNpZ25lZD4obV9ieXRlY29kZSwgYWN0aW9uKTsKIH0KIAotdm9pZCBERkFCeXRlY29kZUNvbXBp
bGVyOjplbWl0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHVpbnQxNl90IGZsYWdzLCB1bnNpZ25l
ZCBhY3Rpb24pCit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRUZXN0RmxhZ3NBbmRBcHBl
bmRBY3Rpb24odWludDE2X3QgZmxhZ3MsIHVuc2lnbmVkIGFjdGlvbiwgYm9vbCBpZkRvbWFpbikK
IHsKICAgICBBU1NFUlQoZmxhZ3MpOwotICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9u
PihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRB
Y3Rpb24pOworICAgIGlmIChpZkRvbWFpbikKKyAgICAgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0Fu
ZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbik7CisgICAgZWxzZQorICAgICAgICBhcHBlbmQ8REZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6
VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKTsKICAgICBhcHBlbmQ8dWludDE2X3Q+KG1fYnl0ZWNv
ZGUsIGZsYWdzKTsKICAgICBhcHBlbmQ8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIGFjdGlvbik7CiB9
CkBAIC0xMDYsMTEgKzExMiwxMSBAQCB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVO
b2RlKHVuCiAgICAgICAgIG1fbm9kZVN0YXJ0T2Zmc2V0c1tpbmRleF0gPSBtX2J5dGVjb2RlLnNp
emUoKTsKIAogICAgIGZvciAodWludDY0X3QgYWN0aW9uIDogbm9kZS5hY3Rpb25zKG1fZGZhKSkg
ewotICAgICAgICAvLyBIaWdoIGJpdHMgYXJlIHVzZWQgdG8gc3RvcmUgZmxhZ3MuIFNlZSBjb21w
aWxlUnVsZUxpc3QuCisgICAgICAgIC8vIEhpZ2ggYml0cyBhcmUgdXNlZCB0byBzdG9yZSBmbGFn
cy4gQSBib29sZWFuIGlzIHN0b3JlZCBpbiB0aGUgNDh0aCBiaXQuIFNlZSBjb21waWxlUnVsZUxp
c3QuCiAgICAgICAgIGlmIChhY3Rpb24gJiAweEZGRkYwMDAwMDAwMCkKLSAgICAgICAgICAgIGVt
aXRUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24oc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFjdGlvbiA+
PiAzMiksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihhY3Rpb24pKTsKKyAgICAgICAgICAgIGVtaXRU
ZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24oc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFjdGlvbiA+PiAz
MiksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihhY3Rpb24pLCBhY3Rpb24gJiBJZkRvbWFpbkZsYWcp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBlbWl0QXBwZW5kQWN0aW9uKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihhY3Rpb24pKTsKKyAgICAgICAgICAgIGVtaXRBcHBlbmRBY3Rpb24oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGFjdGlvbiksIGFjdGlvbiAmIElmRG9tYWluRmxhZyk7CiAgICAgfQog
ICAgIAogICAgIC8vIElmIHdlIGp1bXAgdG8gdGhlIHJvb3QsIHdlIGRvbid0IHdhbnQgdG8gcmUt
YWRkIGl0cyBhY3Rpb25zIHRvIGEgSGFzaFNldC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgJKHJldmlzaW9u
IDE4Mzg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2Rl
Q29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsOCArNjYsOCBAQCBwcml2YXRlOgogICAg
IHZvaWQgY29tcGlsZU5vZGVUcmFuc2l0aW9ucyhjb25zdCBERkFOb2RlJik7CiAgICAgdm9pZCBj
b21waWxlQ2hlY2tGb3JSYW5nZShjb25zdCBSYW5nZSYpOwogCi0gICAgdm9pZCBlbWl0QXBwZW5k
QWN0aW9uKHVuc2lnbmVkKTsKLSAgICB2b2lkIGVtaXRUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24o
dWludDE2X3QgZmxhZ3MsIHVuc2lnbmVkKTsKKyAgICB2b2lkIGVtaXRBcHBlbmRBY3Rpb24odW5z
aWduZWQsIGJvb2wgaWZEb21haW4pOworICAgIHZvaWQgZW1pdFRlc3RGbGFnc0FuZEFwcGVuZEFj
dGlvbih1aW50MTZfdCBmbGFncywgdW5zaWduZWQsIGJvb2wgaWZEb21haW4pOwogICAgIHZvaWQg
ZW1pdEp1bXAodW5zaWduZWQgZGVzdGluYXRpb25Ob2RlSW5kZXgpOwogICAgIHZvaWQgZW1pdENo
ZWNrVmFsdWUodWludDhfdCB2YWx1ZSwgdW5zaWduZWQgZGVzdGluYXRpb25Ob2RlSW5kZXgsIGJv
b2wgY2FzZVNlbnNpdGl2ZSk7CiAgICAgdm9pZCBlbWl0Q2hlY2tWYWx1ZVJhbmdlKHVpbnQ4X3Qg
bG93VmFsdWUsIHVpbnQ4X3QgaGlnaFZhbHVlLCB1bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRl
eCwgYm9vbCBjYXNlU2Vuc2l0aXZlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCShyZXZp
c2lvbiAxODM4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZUludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTggKzUwLDIwIEBAIHN0
YXRpYyBpbmxpbmUgSW50VHlwZSBnZXRCaXRzKGNvbnN0IERGQUIKICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgSW50VHlwZSo+KCZieXRlY29kZVtpbmRleF0pOwogfQogICAgIAot
dm9pZCBERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRBcHBlbmRBY3Rpb24odW5zaWdu
ZWQmIHByb2dyYW1Db3VudGVyLCBBY3Rpb25zJiBhY3Rpb25zKQordm9pZCBERkFCeXRlY29kZUlu
dGVycHJldGVyOjppbnRlcnByZXRBcHBlbmRBY3Rpb24odW5zaWduZWQmIHByb2dyYW1Db3VudGVy
LCBBY3Rpb25zJiBhY3Rpb25zLCBib29sIGlmRG9tYWluKQogewotICAgIEFTU0VSVChnZXRCaXRz
PERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHBy
b2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCkgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBw
ZW5kQWN0aW9uKTsKLSAgICBhY3Rpb25zLmFkZChzdGF0aWNfY2FzdDx1aW50NjRfdD4oZ2V0Qml0
czx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIg
KyBzaXplb2YoREZBQnl0ZWNvZGUpLCBtX3BhZ2VzVXNlZCkpKTsKKyAgICBBU1NFUlQoZ2V0Qml0
czxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBw
cm9ncmFtQ291bnRlciwgbV9wYWdlc1VzZWQpID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFw
cGVuZEFjdGlvbgorICAgICAgICB8fCBnZXRCaXRzPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1f
Ynl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCkg
PT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKTsKKyAg
ICBhY3Rpb25zLmFkZCgoaWZEb21haW4gPyBJZkRvbWFpbkZsYWcgOiAwKSB8IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3Ro
LCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSksIG1fcGFnZXNVc2VkKSkpOwog
ICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKTsKIH0KIAotdm9pZCBERkFCeXRlY29kZUlu
dGVycHJldGVyOjppbnRlcnByZXRUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24odW5zaWduZWQmIHBy
b2dyYW1Db3VudGVyLCB1aW50MTZfdCBmbGFncywgQWN0aW9ucyYgYWN0aW9ucykKK3ZvaWQgREZB
Qnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHVu
c2lnbmVkJiBwcm9ncmFtQ291bnRlciwgdWludDE2X3QgZmxhZ3MsIEFjdGlvbnMmIGFjdGlvbnMs
IGJvb2wgaWZEb21haW4pCiB7Ci0gICAgQVNTRVJUKGdldEJpdHM8REZBQnl0ZWNvZGVJbnN0cnVj
dGlvbj4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFn
ZXNVc2VkKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rp
b24pOworICAgIEFTU0VSVChnZXRCaXRzPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNv
ZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCkgPT0gREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uCisgICAgICAgIHx8
IGdldEJpdHM8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxl
bmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNVc2VkKSA9PSBERkFCeXRlY29kZUluc3RydWN0
aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pOwogICAgIGlmIChmbGFn
cyAmIGdldEJpdHM8dWludDE2X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dy
YW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSwgbV9wYWdlc1VzZWQpKQotICAgICAgICBh
Y3Rpb25zLmFkZChzdGF0aWNfY2FzdDx1aW50NjRfdD4oZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRl
Y29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNv
ZGUpICsgc2l6ZW9mKHVpbnQxNl90KSwgbV9wYWdlc1VzZWQpKSk7CisgICAgICAgIGFjdGlvbnMu
YWRkKChpZkRvbWFpbiA/IElmRG9tYWluRmxhZyA6IDApIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1D
b3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSArIHNpemVvZih1aW50MTZfdCksIG1fcGFnZXNV
c2VkKSkpOwogICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVu
dHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKTsKIH0K
IApAQCAtNzYsNyArNzgsNyBAQCBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5
dGVjCiAgICAgd2hpbGUgKHByb2dyYW1Db3VudGVyIDwgZGZhQnl0ZWNvZGVMZW5ndGgpIHsKICAg
ICAgICAgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IHN0YXRpY19jYXN0PERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGVbcHJvZ3JhbUNvdW50ZXJdKTsKICAgICAg
ICAgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlv
bikKLSAgICAgICAgICAgIGludGVycHJldEFwcGVuZEFjdGlvbihwcm9ncmFtQ291bnRlciwgYWN0
aW9ucyk7CisgICAgICAgICAgICBpbnRlcnByZXRBcHBlbmRBY3Rpb24ocHJvZ3JhbUNvdW50ZXIs
IGFjdGlvbnMsIGZhbHNlKTsKICAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKQogICAgICAgICAgICAg
cHJvZ3JhbUNvdW50ZXIgKz0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24pOwogICAgICAgICBlbHNlCkBA
IC0xMDcsNyArMTA5LDcgQEAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRl
YwogICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUluc3RydWN0
aW9uOjpBcHBlbmRBY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9
IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBw
ZW5kQWN0aW9uKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbiA9PSBERkFC
eXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24pCi0gICAgICAgICAg
ICAgICAgICAgIGludGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbihwcm9ncmFtQ291bnRl
ciwgZmxhZ3MsIGFjdGlvbnMpOworICAgICAgICAgICAgICAgICAgICBpbnRlcnByZXRUZXN0Rmxh
Z3NBbmRBcHBlbmRBY3Rpb24ocHJvZ3JhbUNvdW50ZXIsIGZsYWdzLCBhY3Rpb25zLCBmYWxzZSk7
CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KQEAgLTIwMywxMSArMjA1LDE5IEBAIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFj
dGlvbnMgREZBQnl0ZWMKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlv
bjoKLSAgICAgICAgICAgICAgICBpbnRlcnByZXRBcHBlbmRBY3Rpb24ocHJvZ3JhbUNvdW50ZXIs
IGFjdGlvbnMpOworICAgICAgICAgICAgICAgIGludGVycHJldEFwcGVuZEFjdGlvbihwcm9ncmFt
Q291bnRlciwgYWN0aW9ucywgZmFsc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6
QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluOgorICAgICAgICAgICAgICAgIGludGVycHJldEFwcGVu
ZEFjdGlvbihwcm9ncmFtQ291bnRlciwgYWN0aW9ucywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb246Ci0gICAgICAgICAgICAgICAg
aW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBmbGFncywg
YWN0aW9ucyk7CisgICAgICAgICAgICAgICAgaW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0
aW9uKHByb2dyYW1Db3VudGVyLCBmbGFncywgYWN0aW9ucywgZmFsc2UpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbjoKKyAgICAgICAg
ICAgICAgICBpbnRlcnByZXRUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24ocHJvZ3JhbUNvdW50ZXIs
IGZsYWdzLCBhY3Rpb25zLCB0cnVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIu
aAkocmV2aXNpb24gMTgzODgwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
REZBQnl0ZWNvZGVJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw4ICs2Myw4IEBA
IHB1YmxpYzoKICAgICBBY3Rpb25zIGFjdGlvbnNGcm9tREZBUm9vdCgpOwogCiBwcml2YXRlOgot
ICAgIHZvaWQgaW50ZXJwcmV0QXBwZW5kQWN0aW9uKHVuc2lnbmVkJiBwcm9ncmFtQ291bnRlciwg
QWN0aW9ucyYpOwotICAgIHZvaWQgaW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHVu
c2lnbmVkJiBwcm9ncmFtQ291bnRlciwgdWludDE2X3QgZmxhZ3MsIEFjdGlvbnMmKTsKKyAgICB2
b2lkIGludGVycHJldEFwcGVuZEFjdGlvbih1bnNpZ25lZCYgcHJvZ3JhbUNvdW50ZXIsIEFjdGlv
bnMmLCBib29sIGlmRG9tYWluKTsKKyAgICB2b2lkIGludGVycHJldFRlc3RGbGFnc0FuZEFwcGVu
ZEFjdGlvbih1bnNpZ25lZCYgcHJvZ3JhbUNvdW50ZXIsIHVpbnQxNl90IGZsYWdzLCBBY3Rpb25z
JiwgYm9vbCBpZkRvbWFpbik7CiAgICAgY29uc3QgREZBQnl0ZWNvZGUqIG1fYnl0ZWNvZGU7CiAg
ICAgY29uc3QgdW5zaWduZWQgbV9ieXRlY29kZUxlbmd0aDsKICAgICBWZWN0b3I8Ym9vbD4mIG1f
cGFnZXNVc2VkOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZEluZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkSW5mby5o
CShyZXZpc2lvbiAxODM4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1MywxMiBAQCBlbnVtIGNsYXNzIExvYWRU
eXBlIDogdWludDE2X3QgewogCiB0eXBlZGVmIHVpbnQxNl90IFJlc291cmNlRmxhZ3M7CiAKKy8v
IFRoZSBmaXJzdCAzMiBiaXRzIG9mIGEgdWludDY0X3QgYWN0aW9uIGFyZSB1c2VkIGZvciB0aGUg
YWN0aW9uIGxvY2F0aW9uLgorLy8gVGhlIG5leHQgMTYgYml0cyBhcmUgdXNlZCBmb3IgdGhlIGZs
YWdzIChSZXNvdXJjZVR5cGUgYW5kIExvYWRUeXBlKS4KKy8vIFRoZSBuZXh0IGJpdCBpcyB1c2Vk
IHRvIG1hcmsgYWN0aW9ucyB0aGF0IGFyZSBmcm9tIGEgcnVsZSB3aXRoIGFuIGlmLWRvbWFpbiBj
b25kaXRpb24uCisvLyBUaGUgdmFsdWVzIC0xIGFuZCAtMiBhcmUgdXNlZCBmb3IgcmVtb3ZlZCBh
bmQgZW1wdHkgdmFsdWVzIGluIEhhc2hUYWJsZXMuCitjb25zdCB1aW50NjRfdCBJZkRvbWFpbkZs
YWcgPSAweDAwMDEwMDAwMDAwMDAwMDA7CisKIFJlc291cmNlVHlwZSB0b1Jlc291cmNlVHlwZShD
YWNoZWRSZXNvdXJjZTo6VHlwZSk7CiB1aW50MTZfdCByZWFkUmVzb3VyY2VUeXBlKGNvbnN0IFN0
cmluZyYpOwogdWludDE2X3QgcmVhZExvYWRUeXBlKGNvbnN0IFN0cmluZyYpOwpJbmRleDogU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTg0MDQxKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTUtMDUtMDkgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBbQ29udGVudCBFeHRlbnNpb25z
XSBTdXBwb3J0IGRvbWFpbi1zcGVjaWZpYyBydWxlcyBhbmQgZXhjZXB0aW9ucy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDgzMworCisgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICogU2hhcmVkL1dlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbjo6ZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmZpbHRlcnNXaXRob3V0RG9tYWluc0J5
dGVjb2RlTGVuZ3RoKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uOjpmaWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbjo6ZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGVMZW5ndGgp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmRvbWFpbkZp
bHRlcnNCeXRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbjo6ZG9tYWluRmlsdGVyc0J5dGVjb2RlTGVuZ3RoKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpieXRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Ynl0ZWNvZGVMZW5ndGgpOiBEZWxl
dGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaDoKKyAg
ICAgICAgKiBTaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE6OmVuY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE6OmRlY29kZSk6
CisgICAgICAgICogU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuaDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YTo6V2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uRGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlLmNwcDoKKyAgICAgICAgKEFQSTo6Q29udGVudEV4dGVuc2lv
bk1ldGFEYXRhOjpmaWxlU2l6ZSk6CisgICAgICAgIChBUEk6OmVuY29kZUNvbnRlbnRFeHRlbnNp
b25NZXRhRGF0YSk6CisgICAgICAgIChBUEk6OmRlY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0
YSk6CisgICAgICAgIChBUEk6OmNvbXBpbGVkVG9GaWxlKToKKyAgICAgICAgKEFQSTo6Y3JlYXRl
RXh0ZW5zaW9uKToKKyAgICAgICAgS2VlcCB0cmFjayBvZiAzIGRpZmZlcmVudCB0eXBlcyBvZiBi
eXRlY29kZSB0byBiZSBhYmxlIHRvIGhhbmRsZSBkb21haW4tc3BlY2lmaWMgcnVsZXMuCisKIDIw
MTUtMDUtMDkgIFlvYXYgV2Vpc3MgIDx5b2F2QHlvYXYud3M+CiAKICAgICAgICAgUmVtb3ZlIHRo
ZSBQSUNUVVJFX1NJWkVTIGJ1aWxkIGZsYWcKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwCShyZXZpc2lvbiAxODM4
ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTQgKzQ0LDM0IEBAIFdlYkNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbjo6fldlYkNvbXBpbGUKIHsKIH0KIAotY29uc3QgV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmJ5dGVj
b2RlKCkgY29uc3QKK2NvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29k
ZSogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRl
Y29kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSo+KG1fZGF0YS5kYXRhLT5kYXRhKCkpICsgbV9k
YXRhLmJ5dGVjb2RlT2Zmc2V0OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqPihtX2RhdGEuZGF0YS0+ZGF0YSgpKSAr
IG1fZGF0YS5maWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZU9mZnNldDsKIH0KIAotdW5zaWdu
ZWQgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpieXRlY29kZUxlbmd0aCgpIGNvbnN0Cit1
bnNpZ25lZCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmZpbHRlcnNXaXRob3V0RG9tYWlu
c0J5dGVjb2RlTGVuZ3RoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLmJ5dGVjb2RlU2l6
ZTsKKyAgICByZXR1cm4gbV9kYXRhLmZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlU2l6ZTsK
K30KKworY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb246OmZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkRGQUJ5dGVjb2RlKj4obV9kYXRhLmRhdGEtPmRhdGEoKSkgKyBtX2RhdGEuZmlsdGVy
c1dpdGhEb21haW5zQnl0ZWNvZGVPZmZzZXQ7Cit9CisKK3Vuc2lnbmVkIFdlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbjo6ZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGVMZW5ndGgoKSBjb25zdAor
eworICAgIHJldHVybiBtX2RhdGEuZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGVTaXplOworfQor
Citjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqIFdlYkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbjo6ZG9tYWluRmlsdGVyc0J5dGVjb2RlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRG
QUJ5dGVjb2RlKj4obV9kYXRhLmRhdGEtPmRhdGEoKSkgKyBtX2RhdGEuZG9tYWluRmlsdGVyc0J5
dGVjb2RlT2Zmc2V0OworfQorCit1bnNpZ25lZCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246
OmRvbWFpbkZpbHRlcnNCeXRlY29kZUxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0
YS5kb21haW5GaWx0ZXJzQnl0ZWNvZGVTaXplOwogfQogCiBjb25zdCBXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6U2VyaWFsaXplZEFjdGlvbkJ5dGUqIFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbjo6YWN0aW9ucygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oCShyZXZpc2lvbiAxODM4ODApCisrKyBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDggKzQ0LDEzIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uKFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmJik7
CiAKLSAgICB2aXJ0dWFsIGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRl
Y29kZSogYnl0ZWNvZGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5
dGVjb2RlTGVuZ3RoKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBjb25zdCBXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqIGZpbHRlcnNXaXRob3V0RG9tYWluc0J5
dGVjb2RlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB1bnNpZ25lZCBmaWx0ZXJzV2l0
aG91dERvbWFpbnNCeXRlY29kZUxlbmd0aCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBmaWx0ZXJzV2l0
aERvbWFpbnNCeXRlY29kZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdW5zaWduZWQg
ZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGVMZW5ndGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSogZG9t
YWluRmlsdGVyc0J5dGVjb2RlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB1bnNpZ25l
ZCBkb21haW5GaWx0ZXJzQnl0ZWNvZGVMZW5ndGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKICAg
ICB2aXJ0dWFsIGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0
aW9uQnl0ZSogYWN0aW9ucygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdW5zaWduZWQg
YWN0aW9uc0xlbmd0aCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIApJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRh
LmNwcAkocmV2aXNpb24gMTgzODgwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCwx
MiBAQCB2b2lkIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE6OmVuCiAKICAgICBlbmNv
ZGVyIDw8IGFjdGlvbnNPZmZzZXQ7CiAgICAgZW5jb2RlciA8PCBhY3Rpb25zU2l6ZTsKLSAgICBl
bmNvZGVyIDw8IGJ5dGVjb2RlT2Zmc2V0OwotICAgIGVuY29kZXIgPDwgYnl0ZWNvZGVTaXplOwor
ICAgIGVuY29kZXIgPDwgZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVPZmZzZXQ7CisgICAg
ZW5jb2RlciA8PCBmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZVNpemU7CisgICAgZW5jb2Rl
ciA8PCBmaWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZU9mZnNldDsKKyAgICBlbmNvZGVyIDw8IGZp
bHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlU2l6ZTsKKyAgICBlbmNvZGVyIDw8IGRvbWFpbkZpbHRl
cnNCeXRlY29kZU9mZnNldDsKKyAgICBlbmNvZGVyIDw8IGRvbWFpbkZpbHRlcnNCeXRlY29kZVNp
emU7CiB9CiAKIGJvb2wgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YTo6ZGVjb2RlKElQ
Qzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhJiBjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKQpAQCAtNTUsOSArNTksMTcgQEAgYm9v
bCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjpkZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRh
LmFjdGlvbnNTaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5ieXRlY29kZU9mZnNldCkpCisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmZpbHRlcnNX
aXRob3V0RG9tYWluc0J5dGVjb2RlT2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5ieXRlY29k
ZVNpemUpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YS5maWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZVNpemUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhLmZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlT2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0
YS5maWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZVNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmRv
bWFpbkZpbHRlcnNCeXRlY29kZU9mZnNldCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuZG9tYWluRmls
dGVyc0J5dGVjb2RlU2l6ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0
cnVlOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oCShyZXZpc2lvbiAxODM4ODApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NSwxMyArNDUsMTcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAg
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YShSZWZQdHI8U2hhcmVkTWVtb3J5PiYmIGRh
dGEsIE5ldHdvcmtDYWNoZTo6RGF0YSBmaWxlRGF0YSwgdW5zaWduZWQgYWN0aW9uc09mZnNldCwg
dW5zaWduZWQgYWN0aW9uc1NpemUsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCBi
eXRlY29kZVNpemUpCisgICAgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YShSZWZQdHI8
U2hhcmVkTWVtb3J5PiYmIGRhdGEsIE5ldHdvcmtDYWNoZTo6RGF0YSBmaWxlRGF0YSwgdW5zaWdu
ZWQgYWN0aW9uc09mZnNldCwgdW5zaWduZWQgYWN0aW9uc1NpemUsIHVuc2lnbmVkIGZpbHRlcnNX
aXRob3V0RG9tYWluc0J5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCBmaWx0ZXJzV2l0aG91dERvbWFp
bnNCeXRlY29kZVNpemUsIHVuc2lnbmVkIGZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlT2Zmc2V0
LCB1bnNpZ25lZCBmaWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZVNpemUsIHVuc2lnbmVkIGRvbWFp
bkZpbHRlcnNCeXRlY29kZU9mZnNldCwgdW5zaWduZWQgZG9tYWluRmlsdGVyc0J5dGVjb2RlU2l6
ZSkKICAgICAgICAgOiBkYXRhKFdURjo6bW92ZShkYXRhKSkKICAgICAgICAgLCBmaWxlRGF0YShm
aWxlRGF0YSkKICAgICAgICAgLCBhY3Rpb25zT2Zmc2V0KGFjdGlvbnNPZmZzZXQpCiAgICAgICAg
ICwgYWN0aW9uc1NpemUoYWN0aW9uc1NpemUpCi0gICAgICAgICwgYnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpCi0gICAgICAgICwgYnl0ZWNvZGVTaXplKGJ5dGVjb2RlU2l6ZSkKKyAgICAg
ICAgLCBmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZU9mZnNldChmaWx0ZXJzV2l0aG91dERv
bWFpbnNCeXRlY29kZU9mZnNldCkKKyAgICAgICAgLCBmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRl
Y29kZVNpemUoZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVTaXplKQorICAgICAgICAsIGZp
bHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlT2Zmc2V0KGZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2Rl
T2Zmc2V0KQorICAgICAgICAsIGZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlU2l6ZShmaWx0ZXJz
V2l0aERvbWFpbnNCeXRlY29kZVNpemUpCisgICAgICAgICwgZG9tYWluRmlsdGVyc0J5dGVjb2Rl
T2Zmc2V0KGRvbWFpbkZpbHRlcnNCeXRlY29kZU9mZnNldCkKKyAgICAgICAgLCBkb21haW5GaWx0
ZXJzQnl0ZWNvZGVTaXplKGRvbWFpbkZpbHRlcnNCeXRlY29kZVNpemUpCiAgICAgewogICAgIH0K
IApAQCAtNjIsOCArNjYsMTIgQEAgcHVibGljOgogICAgIE5ldHdvcmtDYWNoZTo6RGF0YSBmaWxl
RGF0YTsKICAgICB1bnNpZ25lZCBhY3Rpb25zT2Zmc2V0IHsgMCB9OwogICAgIHVuc2lnbmVkIGFj
dGlvbnNTaXplIHsgMCB9OwotICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0IHsgMCB9OwotICAg
IHVuc2lnbmVkIGJ5dGVjb2RlU2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBmaWx0ZXJzV2l0aG91
dERvbWFpbnNCeXRlY29kZU9mZnNldCB7IDAgfTsKKyAgICB1bnNpZ25lZCBmaWx0ZXJzV2l0aG91
dERvbWFpbnNCeXRlY29kZVNpemUgeyAwIH07CisgICAgdW5zaWduZWQgZmlsdGVyc1dpdGhEb21h
aW5zQnl0ZWNvZGVPZmZzZXQgeyAwIH07CisgICAgdW5zaWduZWQgZmlsdGVyc1dpdGhEb21haW5z
Qnl0ZWNvZGVTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIGRvbWFpbkZpbHRlcnNCeXRlY29kZU9m
ZnNldCB7IDAgfTsKKyAgICB1bnNpZ25lZCBkb21haW5GaWx0ZXJzQnl0ZWNvZGVTaXplIHsgMCB9
OwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCShyZXZpc2lvbiAxODM4
ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxMSArNzQsMjIgQEAgc3RhdGljIFN0
cmluZyBjb25zdHJ1Y3RlZFBhdGgoY29uc3QgU3RyaQogICAgIHJldHVybiBXZWJDb3JlOjpwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQoYmFzZSwgIkNvbnRlbnRFeHRlbnNpb24tIiArIFdlYkNvcmU6
OmVuY29kZUZvckZpbGVOYW1lKGlkZW50aWZpZXIpKTsKIH0KIAotY29uc3Qgc2l6ZV90IENvbnRl
bnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZSA9IHNpemVvZih1aW50MzJfdCkgKyAyICogc2l6ZW9m
KHVpbnQ2NF90KTsKK2NvbnN0IHNpemVfdCBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUg
PSBzaXplb2YodWludDMyX3QpICsgNCAqIHNpemVvZih1aW50NjRfdCk7CiBzdHJ1Y3QgQ29udGVu
dEV4dGVuc2lvbk1ldGFEYXRhIHsKLSAgICB1aW50MzJfdCB2ZXJzaW9uIHsgMSB9OworICAgIHVp
bnQzMl90IHZlcnNpb24geyAyIH07CiAgICAgdWludDY0X3QgYWN0aW9uc1NpemUgeyAwIH07Ci0g
ICAgdWludDY0X3QgYnl0ZWNvZGVTaXplIHsgMCB9OworICAgIHVpbnQ2NF90IGZpbHRlcnNXaXRo
b3V0RG9tYWluc0J5dGVjb2RlU2l6ZSB7IDAgfTsKKyAgICB1aW50NjRfdCBmaWx0ZXJzV2l0aERv
bWFpbkJ5dGVjb2RlU2l6ZSB7IDAgfTsKKyAgICB1aW50NjRfdCBkb21haW5GaWx0ZXJzQnl0ZWNv
ZGVTaXplIHsgMCB9OworICAgIAorICAgIHNpemVfdCBmaWxlU2l6ZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplCisgICAgICAgICAg
ICArIGFjdGlvbnNTaXplCisgICAgICAgICAgICArIGZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVj
b2RlU2l6ZQorICAgICAgICAgICAgKyBmaWx0ZXJzV2l0aERvbWFpbkJ5dGVjb2RlU2l6ZQorICAg
ICAgICAgICAgKyBkb21haW5GaWx0ZXJzQnl0ZWNvZGVTaXplOworICAgIH0KIH07CiAKIHN0YXRp
YyBEYXRhIGVuY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShjb25zdCBDb250ZW50RXh0ZW5z
aW9uTWV0YURhdGEmIG1ldGFEYXRhKQpAQCAtODcsNyArOTgsOSBAQCBzdGF0aWMgRGF0YSBlbmNv
ZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhCiAKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLnZlcnNp
b247CiAgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5hY3Rpb25zU2l6ZTsKLSAgICBlbmNvZGVyIDw8
IG1ldGFEYXRhLmJ5dGVjb2RlU2l6ZTsKKyAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmZpbHRlcnNX
aXRob3V0RG9tYWluc0J5dGVjb2RlU2l6ZTsKKyAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmZpbHRl
cnNXaXRoRG9tYWluQnl0ZWNvZGVTaXplOworICAgIGVuY29kZXIgPDwgbWV0YURhdGEuZG9tYWlu
RmlsdGVyc0J5dGVjb2RlU2l6ZTsKIAogICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlclNpemUoKSA9
PSBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUpOwogICAgIHJldHVybiBEYXRhKGVuY29k
ZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKQEAgLTEwNyw3ICsxMjAsMTEgQEAg
c3RhdGljIGJvb2wgZGVjb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmFjdGlvbnNT
aXplKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShtZXRhRGF0YS5ieXRlY29kZVNpemUpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlU2l6ZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuZmls
dGVyc1dpdGhEb21haW5CeXRlY29kZVNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmRvbWFpbkZpbHRlcnNCeXRlY29k
ZVNpemUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBzdWNjZXNzID0gdHJ1
ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTYzLDM5ICsxODAsNjIgQEAgc3RhdGljIHN0
ZDo6ZXJyb3JfY29kZSBjb21waWxlZFRvRmlsZShTdAogICAgICAgICAgICAgOiBtX2ZpbGVIYW5k
bGUoZmlsZUhhbmRsZSkKICAgICAgICAgICAgICwgbV9tZXRhRGF0YShtZXRhRGF0YSkKICAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5hY3Rpb25zU2l6ZSk7CisgICAgICAg
ICAgICBBU1NFUlQoIW1ldGFEYXRhLmZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlU2l6ZSk7
CisgICAgICAgICAgICBBU1NFUlQoIW1ldGFEYXRhLmZpbHRlcnNXaXRoRG9tYWluQnl0ZWNvZGVT
aXplKTsKKyAgICAgICAgICAgIEFTU0VSVCghbWV0YURhdGEuZG9tYWluRmlsdGVyc0J5dGVjb2Rl
U2l6ZSk7CiAgICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVCeXRlY29kZShW
ZWN0b3I8REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUpIG92ZXJyaWRlCisgICAgICAgIAorICAgICAg
ICB2aXJ0dWFsIHZvaWQgd3JpdGVGaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZShWZWN0b3I8
REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCgh
bV9maWx0ZXJzV2l0aERvbWFpbkJ5dGVjb2RlV3JpdHRlbik7CisgICAgICAgICAgICBBU1NFUlQo
IW1fZG9tYWluRmlsdGVyc0J5dGVjb2RlV3JpdHRlbik7CisgICAgICAgICAgICBtX2ZpbHRlcnNX
aXRob3V0RG9tYWluc0J5dGVjb2RlV3JpdHRlbiArPSBieXRlY29kZS5zaXplKCk7CisgICAgICAg
ICAgICB3cml0ZVRvRmlsZShEYXRhKGJ5dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZUZpbHRlcnNX
aXRoRG9tYWluc0J5dGVjb2RlKFZlY3RvcjxERkFCeXRlY29kZT4mJiBieXRlY29kZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKCFtX2RvbWFpbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4p
OworICAgICAgICAgICAgbV9maWx0ZXJzV2l0aERvbWFpbkJ5dGVjb2RlV3JpdHRlbiArPSBieXRl
Y29kZS5zaXplKCk7CisgICAgICAgICAgICB3cml0ZVRvRmlsZShEYXRhKGJ5dGVjb2RlLmRhdGEo
KSwgYnl0ZWNvZGUuc2l6ZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1
YWwgdm9pZCB3cml0ZURvbWFpbkZpbHRlcnNCeXRlY29kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYg
Ynl0ZWNvZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fYnl0ZWNvZGVXcml0dGVuICs9IGJ5
dGVjb2RlLnNpemUoKTsKLSAgICAgICAgICAgIHdyaXRlKERhdGEoYnl0ZWNvZGUuZGF0YSgpLCBi
eXRlY29kZS5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fZG9tYWluRmlsdGVyc0J5dGVjb2RlV3Jp
dHRlbiArPSBieXRlY29kZS5zaXplKCk7CisgICAgICAgICAgICB3cml0ZVRvRmlsZShEYXRhKGJ5
dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2
aXJ0dWFsIHZvaWQgd3JpdGVBY3Rpb25zKFZlY3RvcjxTZXJpYWxpemVkQWN0aW9uQnl0ZT4mJiBh
Y3Rpb25zKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fYnl0ZWNv
ZGVXcml0dGVuKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9maWx0ZXJzV2l0aG91dERvbWFpbnNC
eXRlY29kZVdyaXR0ZW4pOworICAgICAgICAgICAgQVNTRVJUKCFtX2ZpbHRlcnNXaXRoRG9tYWlu
Qnl0ZWNvZGVXcml0dGVuKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9kb21haW5GaWx0ZXJzQnl0
ZWNvZGVXcml0dGVuKTsKICAgICAgICAgICAgIEFTU0VSVCghbV9hY3Rpb25zV3JpdHRlbik7CiAg
ICAgICAgICAgICBtX2FjdGlvbnNXcml0dGVuICs9IGFjdGlvbnMuc2l6ZSgpOwotICAgICAgICAg
ICAgd3JpdGUoRGF0YShhY3Rpb25zLmRhdGEoKSwgYWN0aW9ucy5zaXplKCkpKTsKKyAgICAgICAg
ICAgIHdyaXRlVG9GaWxlKERhdGEoYWN0aW9ucy5kYXRhKCksIGFjdGlvbnMuc2l6ZSgpKSk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZSgpIG92ZXJy
aWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fbWV0YURhdGEuYWN0aW9uc1NpemUgPSBtX2Fj
dGlvbnNXcml0dGVuOwotICAgICAgICAgICAgbV9tZXRhRGF0YS5ieXRlY29kZVNpemUgPSBtX2J5
dGVjb2RlV3JpdHRlbjsKKyAgICAgICAgICAgIG1fbWV0YURhdGEuZmlsdGVyc1dpdGhvdXREb21h
aW5zQnl0ZWNvZGVTaXplID0gbV9maWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZVdyaXR0ZW47
CisgICAgICAgICAgICBtX21ldGFEYXRhLmZpbHRlcnNXaXRoRG9tYWluQnl0ZWNvZGVTaXplID0g
bV9maWx0ZXJzV2l0aERvbWFpbkJ5dGVjb2RlV3JpdHRlbjsKKyAgICAgICAgICAgIG1fbWV0YURh
dGEuZG9tYWluRmlsdGVyc0J5dGVjb2RlU2l6ZSA9IG1fZG9tYWluRmlsdGVyc0J5dGVjb2RlV3Jp
dHRlbjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgRGF0YSBoZWFkZXIgPSBlbmNvZGVDb250
ZW50RXh0ZW5zaW9uTWV0YURhdGEobV9tZXRhRGF0YSk7CiAgICAgICAgICAgICBpZiAoIW1fZmls
ZUVycm9yICYmIFdlYkNvcmU6OnNlZWtGaWxlKG1fZmlsZUhhbmRsZSwgMGxsLCBXZWJDb3JlOjpG
aWxlU2Vla09yaWdpbjo6U2Vla0Zyb21CZWdpbm5pbmcpID09IC0xKSB7CiAgICAgICAgICAgICAg
ICAgV2ViQ29yZTo6Y2xvc2VGaWxlKG1fZmlsZUhhbmRsZSk7CiAgICAgICAgICAgICAgICAgbV9m
aWxlRXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgd3JpdGUoaGVhZGVy
KTsKKyAgICAgICAgICAgIHdyaXRlVG9GaWxlKGhlYWRlcik7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGJvb2wgaGFkRXJyb3JXaGlsZVdyaXRpbmdUb0ZpbGUoKSB7IHJldHVybiBtX2Zp
bGVFcnJvcjsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCB3cml0ZShjb25zdCBEYXRh
JiBkYXRhKQorICAgICAgICB2b2lkIHdyaXRlVG9GaWxlKGNvbnN0IERhdGEmIGRhdGEpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmICghbV9maWxlRXJyb3IgJiYgIXdyaXRlRGF0YVRvRmlsZShk
YXRhLCBtX2ZpbGVIYW5kbGUpKSB7CiAgICAgICAgICAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxl
KG1fZmlsZUhhbmRsZSk7CkBAIC0yMDUsNyArMjQ1LDkgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29k
ZSBjb21waWxlZFRvRmlsZShTdAogICAgICAgICAKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1G
aWxlSGFuZGxlIG1fZmlsZUhhbmRsZTsKICAgICAgICAgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRh
JiBtX21ldGFEYXRhOwotICAgICAgICBzaXplX3QgbV9ieXRlY29kZVdyaXR0ZW4geyAwIH07Cisg
ICAgICAgIHNpemVfdCBtX2ZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlV3JpdHRlbiB7IDAg
fTsKKyAgICAgICAgc2l6ZV90IG1fZmlsdGVyc1dpdGhEb21haW5CeXRlY29kZVdyaXR0ZW4geyAw
IH07CisgICAgICAgIHNpemVfdCBtX2RvbWFpbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4geyAwIH07
CiAgICAgICAgIHNpemVfdCBtX2FjdGlvbnNXcml0dGVuIHsgMCB9OwogICAgICAgICBib29sIG1f
ZmlsZUVycm9yIHsgZmFsc2UgfTsKICAgICB9OwpAQCAtMjI4LDcgKzI3MCw3IEBAIHN0YXRpYyBz
dGQ6OmVycm9yX2NvZGUgY29tcGlsZWRUb0ZpbGUoU3QKICAgICBpZiAoY29tcGlsYXRpb25DbGll
bnQuaGFkRXJyb3JXaGlsZVdyaXRpbmdUb0ZpbGUoKSkKICAgICAgICAgcmV0dXJuIFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOwogICAgIAotICAgIG1hcHBl
ZERhdGEgPSBtYXBGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUsIDAsIENvbnRlbnRFeHRlbnNpb25G
aWxlSGVhZGVyU2l6ZSArIG1ldGFEYXRhLmFjdGlvbnNTaXplICsgbWV0YURhdGEuYnl0ZWNvZGVT
aXplKTsKKyAgICBtYXBwZWREYXRhID0gbWFwRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlLCAwLCBt
ZXRhRGF0YS5maWxlU2l6ZSgpKTsKICAgICBXZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9yYXJ5Rmls
ZUhhbmRsZSk7CiAKICAgICBpZiAobWFwcGVkRGF0YS5pc051bGwoKSkKQEAgLTI0OCw4ICsyOTAs
MTggQEAgc3RhdGljIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPgogICAgICAgICBm
aWxlRGF0YSwKICAgICAgICAgQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplLAogICAgICAg
ICBtZXRhRGF0YS5hY3Rpb25zU2l6ZSwKLSAgICAgICAgQ29udGVudEV4dGVuc2lvbkZpbGVIZWFk
ZXJTaXplICsgbWV0YURhdGEuYWN0aW9uc1NpemUsCi0gICAgICAgIG1ldGFEYXRhLmJ5dGVjb2Rl
U2l6ZQorICAgICAgICBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUKKyAgICAgICAgICAg
ICsgbWV0YURhdGEuYWN0aW9uc1NpemUsCisgICAgICAgIG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0
RG9tYWluc0J5dGVjb2RlU2l6ZSwKKyAgICAgICAgQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJT
aXplCisgICAgICAgICAgICArIG1ldGFEYXRhLmFjdGlvbnNTaXplCisgICAgICAgICAgICArIG1l
dGFEYXRhLmZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlU2l6ZSwKKyAgICAgICAgbWV0YURh
dGEuZmlsdGVyc1dpdGhEb21haW5CeXRlY29kZVNpemUsCisgICAgICAgIENvbnRlbnRFeHRlbnNp
b25GaWxlSGVhZGVyU2l6ZQorICAgICAgICAgICAgKyBtZXRhRGF0YS5hY3Rpb25zU2l6ZQorICAg
ICAgICAgICAgKyBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZVNpemUKKyAg
ICAgICAgICAgICsgbWV0YURhdGEuZmlsdGVyc1dpdGhEb21haW5CeXRlY29kZVNpemUsCisgICAg
ICAgIG1ldGFEYXRhLmRvbWFpbkZpbHRlcnNCeXRlY29kZVNpemUKICAgICApOwogICAgIGF1dG8g
Y29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0gV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb246OmNyZWF0ZShXVEY6Om1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSkpOwog
ICAgIHJldHVybiBBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoaWRlbnRpZmllciwg
V1RGOjptb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikpOwpJbmRleDogVG9vbHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg0MDQxKQorKysg
VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTUtMDUt
MDkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBbQ29udGVudCBFeHRlbnNpb25zXSBTdXBwb3J0IGRvbWFpbi1zcGVjaWZpYyBydWxlcyBhbmQg
ZXhjZXB0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0NDgzMworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcDoKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OkluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpj
cmVhdGVGcm9tRmlsdGVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkluTWVtb3J5Q29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SW5N
ZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OkluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uKToKKyAgICAgICAgTW92ZWQgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBmcm9t
IENvbnRlbnRFeHRlbnNpb25Db21waWxlci5oIGJlY2F1c2UgaXQgaXMgb25seSB1c2VkIGZvciB0
ZXN0aW5nLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6bWFpbkRvY3VtZW50UmVxdWVzdCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpzdWJSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNoZWNrQ29tcGls
ZXJFcnJvcik6CisgICAgICAgIEFkZGVkIHRlc3RzIGZvciBwYXJzaW5nIGFuZCBmdW5jdGlvbmFs
aXR5IG9mIGlmLWRvbWFpbiBhbmQgdW5sZXNzLWRvbWFpbi4KKwogMjAxNS0wNS0wOSAgWW9hdiBX
ZWlzcyAgPHlvYXZAeW9hdi53cz4KIAogICAgICAgICBSZW1vdmUgdGhlIFBJQ1RVUkVfU0laRVMg
YnVpbGQgZmxhZwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRl
bnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiAxODM4ODIpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MCwyNSArODAsNTMgQEAgcHVibGljOgogICAgIH0KIH07CiAKLWNsYXNz
IEluTWVtb3J5Q29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50IGZpbmFsIDogcHVibGlj
IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25D
bGllbnQgeworc3RydWN0IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgeworICAgIFZlY3Rv
cjxDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXplZEFjdGlvbkJ5dGU+IGFjdGlvbnM7CisgICAg
VmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZT4gZmlsdGVyc1dpdGhvdXREb21h
aW5zOworICAgIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGU+IGZpbHRlcnNX
aXRoRG9tYWluczsKKyAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlPiBk
b21haW5GaWx0ZXJzOworfTsKKworY2xhc3MgSW5NZW1vcnlDb250ZW50RXh0ZW5zaW9uQ29tcGls
YXRpb25DbGllbnQgZmluYWwgOiBwdWJsaWMgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRl
bnNpb25Db21waWxhdGlvbkNsaWVudCB7CiBwdWJsaWM6Ci0gICAgSW5NZW1vcnlDb250ZW50RXh0
ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbkRhdGEmIGRhdGEpCisgICAgSW5NZW1vcnlDb250ZW50RXh0ZW5z
aW9uQ29tcGlsYXRpb25DbGllbnQoQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYgZGF0YSkK
ICAgICAgICAgOiBtX2RhdGEoZGF0YSkKICAgICB7Ci0gICAgICAgIEVYUEVDVF9FUShkYXRhLmJ5
dGVjb2RlLnNpemUoKSwgMHVsbCk7CiAgICAgICAgIEVYUEVDVF9FUShkYXRhLmFjdGlvbnMuc2l6
ZSgpLCAwdWxsKTsKKyAgICAgICAgRVhQRUNUX0VRKGRhdGEuZmlsdGVyc1dpdGhvdXREb21haW5z
LnNpemUoKSwgMHVsbCk7CisgICAgICAgIEVYUEVDVF9FUShkYXRhLmZpbHRlcnNXaXRoRG9tYWlu
cy5zaXplKCksIDB1bGwpOworICAgICAgICBFWFBFQ1RfRVEoZGF0YS5kb21haW5GaWx0ZXJzLnNp
emUoKSwgMHVsbCk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHdyaXRlQnl0ZWNvZGUoVmVj
dG9yPFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZT4mJiBieXRlY29kZSkg
b3ZlcnJpZGUKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVBY3Rpb25zKFZlY3RvcjxDb250ZW50RXh0
ZW5zaW9uczo6U2VyaWFsaXplZEFjdGlvbkJ5dGU+JiYgYWN0aW9ucykgb3ZlcnJpZGUKICAgICB7
CiAgICAgICAgIEVYUEVDVF9GQUxTRShmaW5hbGl6ZWQpOwotICAgICAgICBtX2RhdGEuYnl0ZWNv
ZGUuYXBwZW5kVmVjdG9yKGJ5dGVjb2RlKTsKKyAgICAgICAgRVhQRUNUX0VRKG1fZGF0YS5hY3Rp
b25zLnNpemUoKSwgMHVsbCk7CisgICAgICAgIEVYUEVDVF9FUShtX2RhdGEuZmlsdGVyc1dpdGhv
dXREb21haW5zLnNpemUoKSwgMHVsbCk7CisgICAgICAgIEVYUEVDVF9FUShtX2RhdGEuZmlsdGVy
c1dpdGhEb21haW5zLnNpemUoKSwgMHVsbCk7CisgICAgICAgIEVYUEVDVF9FUShtX2RhdGEuZG9t
YWluRmlsdGVycy5zaXplKCksIDB1bGwpOworICAgICAgICBtX2RhdGEuYWN0aW9ucy5hcHBlbmRW
ZWN0b3IoYWN0aW9ucyk7CiAgICAgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUFjdGlv
bnMoVmVjdG9yPFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0
ZT4mJiBhY3Rpb25zKSBvdmVycmlkZQorICAgIHZpcnR1YWwgdm9pZCB3cml0ZUZpbHRlcnNXaXRo
b3V0RG9tYWluc0J5dGVjb2RlKFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGU+
JiYgYnl0ZWNvZGUpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBFWFBFQ1RfRkFMU0UoZmluYWxp
emVkKTsKLSAgICAgICAgbV9kYXRhLmFjdGlvbnMuYXBwZW5kVmVjdG9yKGFjdGlvbnMpOworICAg
ICAgICBFWFBFQ1RfRVEobV9kYXRhLmZpbHRlcnNXaXRoRG9tYWlucy5zaXplKCksIDB1bGwpOwor
ICAgICAgICBFWFBFQ1RfRVEobV9kYXRhLmRvbWFpbkZpbHRlcnMuc2l6ZSgpLCAwdWxsKTsKKyAg
ICAgICAgbV9kYXRhLmZpbHRlcnNXaXRob3V0RG9tYWlucy5hcHBlbmRWZWN0b3IoYnl0ZWNvZGUp
OworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVGaWx0ZXJzV2l0aERvbWFpbnNC
eXRlY29kZShWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlPiYmIGJ5dGVjb2Rl
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGZpbmFsaXplZCk7CisgICAg
ICAgIEVYUEVDVF9FUShtX2RhdGEuZG9tYWluRmlsdGVycy5zaXplKCksIDB1bGwpOworICAgICAg
ICBtX2RhdGEuZmlsdGVyc1dpdGhEb21haW5zLmFwcGVuZFZlY3RvcihieXRlY29kZSk7CisgICAg
fQorICAgIAorICAgIHZpcnR1YWwgdm9pZCB3cml0ZURvbWFpbkZpbHRlcnNCeXRlY29kZShWZWN0
b3I8Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGZpbmFsaXplZCk7CisgICAgICAgIG1fZGF0YS5k
b21haW5GaWx0ZXJzLmFwcGVuZFZlY3RvcihieXRlY29kZSk7CiAgICAgfQogICAgIAogICAgIHZp
cnR1YWwgdm9pZCBmaW5hbGl6ZSgpIG92ZXJyaWRlCkBAIC0xMDcsNyArMTM1LDcgQEAgcHVibGlj
OgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYgbV9kYXRhOworICAgIENvbXBpbGVkQ29udGVudEV4
dGVuc2lvbkRhdGEmIG1fZGF0YTsKICAgICBib29sIGZpbmFsaXplZCB7IGZhbHNlIH07CiB9Owog
CkBAIC0xMTUsMTYgKzE0MywxOSBAQCBjbGFzcyBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbiA6CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxJbk1lbW9yeUNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbj4gY3JlYXRlRnJvbUZpbHRlcihTdHJpbmcmJiBmaWx0ZXIpCiAgICAgewotICAg
ICAgICBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YSBleHRlbnNpb25EYXRhOworICAgICAgICBDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRh
IGV4dGVuc2lvbkRhdGE7CiAgICAgICAgIEluTWVtb3J5Q29udGVudEV4dGVuc2lvbkNvbXBpbGF0
aW9uQ2xpZW50IGNsaWVudChleHRlbnNpb25EYXRhKTsKICAgICAgICAgYXV0byBjb21waWxlckVy
cm9yID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChjbGllbnQsIFdURjo6bW92
ZShmaWx0ZXIpKTsKLSAgICAgICAgaWYgKGNvbXBpbGVyRXJyb3IpCisgICAgICAgIGlmIChjb21w
aWxlckVycm9yKSB7CisgICAgICAgICAgICAvLyBDb21waWxpbmcgc2hvdWxkIGFsd2F5cyBzdWNj
ZWVkIGhlcmUuIFdlIGhhdmUgb3RoZXIgdGVzdHMgZm9yIGNvbXBpbGUgZmFpbHVyZXMuCisgICAg
ICAgICAgICBFWFBFQ1RfVFJVRShmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbjo6Y3JlYXRlKFdURjo6bW92ZShleHRlbnNpb25EYXRhKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIFJlZlB0cjxJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4gY3JlYXRlKENvbnRl
bnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiYgZGF0YSkKKyAgICBz
dGF0aWMgUmVmUHRyPEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGUoQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYmIGRhdGEpCiAgICAgewogICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKFdURjo6bW92ZShk
YXRhKSkpOwogICAgIH0KQEAgLTEzMywxOCArMTY0LDIyIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogCi0gICAgdmlydHVhbCBjb25zdCBDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqIGJ5
dGVjb2RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kYXRhLmJ5dGVjb2RlLmRhdGEoKTsg
fQotICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZWNvZGVMZW5ndGgoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX2RhdGEuYnl0ZWNvZGUuc2l6ZSgpOyB9CiAgICAgdmlydHVhbCBjb25zdCBDb250
ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2RhdGEuYWN0aW9ucy5kYXRhKCk7IH0KICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGFjdGlvbnNMZW5ndGgoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2RhdGEuYWN0aW9u
cy5zaXplKCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IENvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRl
Y29kZSogZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2RhdGEuZmlsdGVyc1dpdGhvdXREb21haW5zLmRhdGEoKTsgfQorICAgIHZpcnR1YWwg
dW5zaWduZWQgZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVMZW5ndGgoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2RhdGEuZmlsdGVyc1dpdGhvdXREb21haW5zLnNpemUoKTsgfQorICAg
IHZpcnR1YWwgY29uc3QgQ29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBmaWx0ZXJzV2l0
aERvbWFpbnNCeXRlY29kZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGF0YS5maWx0ZXJz
V2l0aERvbWFpbnMuZGF0YSgpOyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBmaWx0ZXJzV2l0aERv
bWFpbnNCeXRlY29kZUxlbmd0aCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGF0YS5maWx0
ZXJzV2l0aERvbWFpbnMuc2l6ZSgpOyB9CisgICAgdmlydHVhbCBjb25zdCBDb250ZW50RXh0ZW5z
aW9uczo6REZBQnl0ZWNvZGUqIGRvbWFpbkZpbHRlcnNCeXRlY29kZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fZGF0YS5kb21haW5GaWx0ZXJzLmRhdGEoKTsgfQorICAgIHZpcnR1YWwgdW5z
aWduZWQgZG9tYWluRmlsdGVyc0J5dGVjb2RlTGVuZ3RoKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9kYXRhLmRvbWFpbkZpbHRlcnMuc2l6ZSgpOyB9CiAKIHByaXZhdGU6Ci0gICAgSW5NZW1v
cnlDb21waWxlZENvbnRlbnRFeHRlbnNpb24oQ29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGEmJiBkYXRhKQorICAgIEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uKENvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmJiBkYXRhKQogICAgICAgICA6IG1f
ZGF0YShXVEY6Om1vdmUoZGF0YSkpCiAgICAgewogICAgIH0KIAotICAgIENvbnRlbnRFeHRlbnNp
b25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIG1fZGF0YTsKKyAgICBDb21waWxlZENv
bnRlbnRFeHRlbnNpb25EYXRhIG1fZGF0YTsKIH07CiAKIHZvaWQgc3RhdGljIHRlc3RSZXF1ZXN0
KENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgY29udGVudEV4dGVu
c2lvbnNCYWNrZW5kLCBjb25zdCBSZXNvdXJjZUxvYWRJbmZvJiByZXNvdXJjZUxvYWRJbmZvLCBW
ZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU+IGV4cGVjdGVkQWN0aW9ucywgYm9v
bCBpZ25vcmVQcmV2aW91c1J1bGVzID0gZmFsc2UpCkBAIC0xNjQsMTEgKzE5OSwxNiBAQCB2b2lk
IHN0YXRpYyB0ZXN0UmVxdWVzdChDb250ZW50RXh0ZW5zaW9uCiAgICAgICAgIEVYUEVDVF9FUShh
Y3Rpb25zW2FjdGlvbnMuc2l6ZSgpIC0gMV0udHlwZSgpLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTdHlsZVNoZWV0KTsKIH0KIAotUmVzb3VyY2VMb2FkSW5m
byBtYWluRG9jdW1lbnRSZXF1ZXN0KGNvbnN0IGNoYXIqIHVybCwgUmVzb3VyY2VUeXBlIHJlc291
cmNlVHlwZSA9IFJlc291cmNlVHlwZTo6RG9jdW1lbnQpCitzdGF0aWMgUmVzb3VyY2VMb2FkSW5m
byBtYWluRG9jdW1lbnRSZXF1ZXN0KGNvbnN0IGNoYXIqIHVybCwgUmVzb3VyY2VUeXBlIHJlc291
cmNlVHlwZSA9IFJlc291cmNlVHlwZTo6RG9jdW1lbnQpCiB7CiAgICAgcmV0dXJuIHsgVVJMKFVS
TCgpLCB1cmwpLCBVUkwoVVJMKCksIHVybCksIHJlc291cmNlVHlwZSB9OwogfQogCitzdGF0aWMg
UmVzb3VyY2VMb2FkSW5mbyBzdWJSZXNvdXJjZVJlcXVlc3QoY29uc3QgY2hhciogdXJsLCBjb25z
dCBjaGFyKiBtYWluRG9jdW1lbnRVUkwsIFJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUgPSBSZXNv
dXJjZVR5cGU6OkRvY3VtZW50KQoreworICAgIHJldHVybiB7IFVSTChVUkwoKSwgdXJsKSwgVVJM
KFVSTCgpLCBtYWluRG9jdW1lbnRVUkwpLCByZXNvdXJjZVR5cGUgfTsKK30KKwogQ29udGVudEV4
dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBtYWtlQmFja2VuZChjb25zdCBjaGFy
KiBqc29uKQogewogICAgIGF1dG8gZXh0ZW5zaW9uID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRF
eHRlbnNpb246OmNyZWF0ZUZyb21GaWx0ZXIoanNvbik7CkBAIC0zNjIsNiArNDAyLDc5IEBAIFRF
U1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgRHVwbGljYXRlZE0KICAgICB0ZXN0UmVxdWVzdChi
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwczovL3Bvc3Qub3JnL3Bvc3QiKSwgeyB9
KTsKIH0KIAorVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBEb21haW5UcmlnZ2VycykKK3sK
KyAgICBhdXRvIGlmRG9tYWluQmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwidGVzdFxcXFwu
aHRtbFwiLCBcImlmLWRvbWFpblwiOltcIndlYmtpdC5vcmdcIl19fV0iKTsKKyAgICB0ZXN0UmVx
dWVzdChpZkRvbWFpbkJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQu
b3JnL3Rlc3QuaHRtIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoaWZEb21haW5CYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vYnVncy53ZWJraXQub3JnL3Rlc3QuaHRtIiksIHsg
fSk7CisgICAgdGVzdFJlcXVlc3QoaWZEb21haW5CYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJodHRwOi8vd2Via2l0Lm9yZy90ZXN0Lmh0bWwiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGlmRG9tYWluQmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy90ZXN0Lmh0bWwiKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RS
ZXF1ZXN0KGlmRG9tYWluQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL25vdF93
ZWJraXQub3JnL3Rlc3QuaHRtIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoaWZEb21haW5CYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZ2FuaXphdGlvbi90ZXN0
Lmh0bSIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGlmRG9tYWluQmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgiaHR0cDovL25vdF93ZWJraXQub3JnL3Rlc3QuaHRtbCIpLCB7IH0pOworICAg
IHRlc3RSZXF1ZXN0KGlmRG9tYWluQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDov
L3dlYmtpdC5vcmdhbml6YXRpb24vdGVzdC5odG1sIiksIHsgfSk7CisgICAgCisgICAgYXV0byB1
bmxlc3NEb21haW5CYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6
XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ0ZXN0XFxcXC5odG1sXCIs
IFwidW5sZXNzLWRvbWFpblwiOltcIndlYmtpdC5vcmdcIl19fV0iKTsKKyAgICB0ZXN0UmVxdWVz
dCh1bmxlc3NEb21haW5CYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0
Lm9yZy90ZXN0Lmh0bSIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHVubGVzc0RvbWFpbkJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9idWdzLndlYmtpdC5vcmcvdGVzdC5odG0i
KSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdCh1bmxlc3NEb21haW5CYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy90ZXN0Lmh0bWwiKSwgeyB9KTsKKyAgICB0ZXN0
UmVxdWVzdCh1bmxlc3NEb21haW5CYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8v
YnVncy53ZWJraXQub3JnL3Rlc3QuaHRtbCIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHVubGVz
c0RvbWFpbkJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9ub3Rfd2Via2l0Lm9y
Zy90ZXN0Lmh0bSIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHVubGVzc0RvbWFpbkJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnYW5pemF0aW9uL3Rlc3QuaHRt
IiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QodW5sZXNzRG9tYWluQmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgiaHR0cDovL25vdF93ZWJraXQub3JnL3Rlc3QuaHRtbCIpLCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QodW5s
ZXNzRG9tYWluQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmdh
bml6YXRpb24vdGVzdC5odG1sIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJs
b2NrTG9hZCB9KTsKKworICAgIGF1dG8gY29tYmluZWRCYWNrZW5kMSA9IG1ha2VCYWNrZW5kKCJb
e1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwidGVzdF9ibG9ja19sb2FkXCIsIFwiaWYtZG9tYWluXCI6W1wid2Via2l0Lm9yZ1wiXX19
LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrLWNvb2tpZXNcIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwidGVzdF9ibG9ja19jb29raWVzXCIsIFwidW5sZXNz
LWRvbWFpblwiOltcIndlYmtpdC5vcmdcIl19fV0iKTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5l
ZEJhY2tlbmQxLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZyIpLCB7IH0p
OworICAgIHRlc3RSZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDEsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Imh0dHA6Ly9ub3Rfd2Via2l0Lm9yZyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGNvbWJpbmVk
QmFja2VuZDEsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL3Rlc3RfYmxv
Y2tfbG9hZC5odG1sIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9h
ZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQxLCBzdWJSZXNvdXJjZVJlcXVl
c3QoImh0dHA6Ly93aGF0d2cub3JnL3Rlc3RfYmxvY2tfbG9hZC5odG1sIiwgImh0dHA6Ly93ZWJr
aXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
CisgICAgdGVzdFJlcXVlc3QoY29tYmluZWRCYWNrZW5kMSwgc3ViUmVzb3VyY2VSZXF1ZXN0KCJo
dHRwOi8vd2hhdHdnLm9yZy9zaG91bGRudF9tYXRjaC5odG1sIiwgImh0dHA6Ly93ZWJraXQub3Jn
LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDEsIHN1YlJlc291cmNl
UmVxdWVzdCgiaHR0cDovL3doYXR3Zy5vcmcvdGVzdF9ibG9ja19sb2FkLmh0bWwiLCAiaHR0cDov
L25vdF93ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGNvbWJpbmVkQmFja2Vu
ZDEsIHN1YlJlc291cmNlUmVxdWVzdCgiaHR0cDovL3doYXR3Zy5vcmcvc2hvdWxkbnRfbWF0Y2gu
aHRtbCIsICJodHRwOi8vbm90X3dlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qo
Y29tYmluZWRCYWNrZW5kMSwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcv
dGVzdF9ibG9ja19jb29raWVzLmh0bWwiKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5l
ZEJhY2tlbmQxLCBzdWJSZXNvdXJjZVJlcXVlc3QoImh0dHA6Ly93aGF0d2cub3JnL3Rlc3RfYmxv
Y2tfY29va2llcy5odG1sIiwgImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RS
ZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDEsIHN1YlJlc291cmNlUmVxdWVzdCgiaHR0cDovL3doYXR3
Zy5vcmcvc2hvdWxkbnRfbWF0Y2guaHRtbCIsICJodHRwOi8vd2Via2l0Lm9yZy8iKSwgeyB9KTsK
KyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQxLCBzdWJSZXNvdXJjZVJlcXVlc3QoImh0
dHA6Ly93aGF0d2cub3JnL3Rlc3RfYmxvY2tfY29va2llcy5odG1sIiwgImh0dHA6Ly9ub3Rfd2Vi
a2l0Lm9yZy9wYXRoL3RvL21haW4vZG9jdW1lbnQuaHRtbCIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMgfSk7CisgICAgdGVzdFJlcXVlc3QoY29tYmluZWRC
YWNrZW5kMSwgc3ViUmVzb3VyY2VSZXF1ZXN0KCJodHRwOi8vd2hhdHdnLm9yZy9zaG91bGRudF9t
YXRjaC5odG1sIiwgImh0dHA6Ly9ub3Rfd2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICAKKyAgICBh
dXRvIGNvbWJpbmVkQmFja2VuZDIgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVc
IjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcInRlc3RfYmxvY2tfbG9h
ZFxcXFwuaHRtbFwiLCBcImlmLWRvbWFpblwiOltcIndlYmtpdC5vcmdcIl19fSwiCisgICAgICAg
ICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9jay1jb29raWVzXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcInRlc3RfYmxvY2tfY29va2llc1xcXFwuaHRtbFwiLCBcInVubGVzcy1k
b21haW5cIjpbXCJ3M2Mub3JnXCJdfX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwi
OlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwidGVzdF9jc3NcXFxcLmh0bWxcIn19XSIpOworICAgIHRlc3RS
ZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDIsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJr
aXQub3JnL3Rlc3RfY3NzLmh0bWwiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tl
bmQyLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy90ZXN0X2Nzcy5odG0i
KSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQyLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy90ZXN0X2Jsb2NrX2xvYWQuaHRtbCIpLCB7IENvbnRl
bnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qo
Y29tYmluZWRCYWNrZW5kMiwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL25vdF93ZWJraXQu
b3JnL3Rlc3RfYmxvY2tfbG9hZC5odG1sIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoY29tYmlu
ZWRCYWNrZW5kMiwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL25vdF93ZWJraXQub3JnL3Rl
c3RfY3NzLmh0bWwiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxh
eU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQyLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9URVNUX0NTUy5oVG1ML3Rlc3RfYmxv
Y2tfbG9hZC5odG1sIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3Bs
YXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWR9
KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQyLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJodHRwOi8vdzNjLm9yZy90ZXN0X2Nzcy5odG1sIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3QoY29t
YmluZWRCYWNrZW5kMiwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3czYy5vcmcvdGVzdF9i
bG9ja19sb2FkLmh0bWwiKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQy
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vdzNjLm9yZy90ZXN0X2Jsb2NrX2Nvb2tpZXMu
aHRtbCIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDIsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImh0dHA6Ly93M2Mub3JnL3Rlc3RfY3NzLmh0bWwvdGVzdF9ibG9ja19jb29r
aWVzLmh0bWwiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5v
bmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQyLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJodHRwOi8vbm90X3czYy5vcmcvdGVzdF9ibG9ja19jb29raWVzLmh0bWwi
KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29raWVzIH0pOworICAg
IHRlc3RSZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDIsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6
Ly9ub3RfdzNjLm9yZy90ZXN0X2Nzcy5odG1sL3Rlc3RfYmxvY2tfY29va2llcy5odG1sIiksIHsg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMgfSk7CisKKyAgICBhdXRv
IGlmRG9tYWluV2l0aEZsYWdzQmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwidGVzdFwiLCBc
ImlmLWRvbWFpblwiOltcIndlYmtpdC5vcmdcIl0sXCJyZXNvdXJjZS10eXBlXCI6W1wiaW1hZ2Vc
Il19fV0iKTsKKyAgICB0ZXN0UmVxdWVzdChpZkRvbWFpbldpdGhGbGFnc0JhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL3Rlc3QuaHRtbCIpLCB7IH0pOworICAg
IHRlc3RSZXF1ZXN0KGlmRG9tYWluV2l0aEZsYWdzQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgiaHR0cDovL3dlYmtpdC5vcmcvdGVzdC5wbmciLCBSZXNvdXJjZVR5cGU6OkltYWdlKSwgeyBD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1
ZXN0KGlmRG9tYWluV2l0aEZsYWdzQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDov
L25vdF93ZWJraXQub3JnL3Rlc3QuaHRtbCIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGlmRG9t
YWluV2l0aEZsYWdzQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL25vdF93ZWJr
aXQub3JnL3Rlc3QucG5nIiwgUmVzb3VyY2VUeXBlOjpJbWFnZSksIHsgfSk7CisKKyAgICBhdXRv
IHVubGVzc0RvbWFpbldpdGhGbGFnc0JhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwi
OntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcInRlc3Rc
IiwgXCJ1bmxlc3MtZG9tYWluXCI6W1wid2Via2l0Lm9yZ1wiXSxcInJlc291cmNlLXR5cGVcIjpb
XCJpbWFnZVwiXX19XSIpOworICAgIHRlc3RSZXF1ZXN0KHVubGVzc0RvbWFpbldpdGhGbGFnc0Jh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL3Rlc3QuaHRtbCIp
LCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHVubGVzc0RvbWFpbldpdGhGbGFnc0JhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL3Rlc3QucG5nIiwgUmVzb3VyY2VU
eXBlOjpJbWFnZSksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QodW5sZXNzRG9tYWluV2l0aEZsYWdz
QmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL25vdF93ZWJraXQub3JnL3Rlc3Qu
aHRtbCIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHVubGVzc0RvbWFpbldpdGhGbGFnc0JhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9ub3Rfd2Via2l0Lm9yZy90ZXN0LnBuZyIs
IFJlc291cmNlVHlwZTo6SW1hZ2UpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpC
bG9ja0xvYWQgfSk7CisKKyAgICAvLyBEb21haW5zIHNob3VsZCBub3QgYmUgaW50ZXJlcHRlZCBh
cyByZWd1bGFyIGV4cHJlc3Npb25zLgorICAgIGF1dG8gZG9tYWluUmVnZXhCYWNrZW5kID0gbWFr
ZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7
XCJ1cmwtZmlsdGVyXCI6XCJ0ZXN0XFxcXC5odG1sXCIsIFwiaWYtZG9tYWluXCI6W1wid2U/Ymtp
dC5vcmdcIl19fV0iKTsKKyAgICB0ZXN0UmVxdWVzdChkb21haW5SZWdleEJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL3Rlc3QuaHRtbCIpLCB7IH0pOworICAg
IHRlc3RSZXF1ZXN0KGRvbWFpblJlZ2V4QmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0
cDovL3dia2l0Lm9yZy90ZXN0Lmh0bWwiKSwgeyB9KTsKKyAgICAKKyAgICAvLyBGSVhNRTogQWRk
IGFuZCB0ZXN0IGRvbWFpbi1zcGVjaWZpYyBwb3B1cC1vbmx5IGJsb2NraW5nICh3aXRoIGxheW91
dCB0ZXN0cykuCit9CisgICAgCiBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFRlcm1zS25v
d25Ub01hdGNoQW55dGhpbmcpCiB7CiAgICAgYXV0byBiYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7
XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCJecHJlMS4qcG9zdDEkXCJ9fSwiCkBAIC01NzcsMTIgKzY5MCwxNCBAQCBURVNUX0YoQ29u
dGVudEV4dGVuc2lvblRlc3QsIERlZXBORkEpCiAgICAgRVhQRUNUX0VRKDF1bCwgY3JlYXRlTkZB
cyhjb21iaW5lZFVSTEZpbHRlcnMpLnNpemUoKSk7CiB9CiAKLXZvaWQgY2hlY2tDb21waWxlckVy
cm9yKGNvbnN0IGNoYXIqIGpzb24sIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9u
RXJyb3IgZXhwZWN0ZWRFcnJvcikKK3ZvaWQgY2hlY2tDb21waWxlckVycm9yKGNvbnN0IGNoYXIq
IGpzb24sIHN0ZDo6ZXJyb3JfY29kZSBleHBlY3RlZEVycm9yKQogewotICAgIFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGV4dGVuc2lvbkRh
dGE7CisgICAgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBleHRlbnNpb25EYXRhOwogICAg
IEluTWVtb3J5Q29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50IGNsaWVudChleHRlbnNp
b25EYXRhKTsKICAgICBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZXJFcnJvciA9IENvbnRlbnRFeHRl
bnNpb25zOjpjb21waWxlUnVsZUxpc3QoY2xpZW50LCBqc29uKTsKLSAgICBFWFBFQ1RfRVEoY29t
cGlsZXJFcnJvci52YWx1ZSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkRXJyb3IpKTsKKyAg
ICBFWFBFQ1RfRVEoY29tcGlsZXJFcnJvci52YWx1ZSgpLCBleHBlY3RlZEVycm9yLnZhbHVlKCkp
OworICAgIGlmIChjb21waWxlckVycm9yLnZhbHVlKCkpCisgICAgICAgIEVYUEVDVF9TVFJFUShj
b21waWxlckVycm9yLmNhdGVnb3J5KCkubmFtZSgpLCBleHBlY3RlZEVycm9yLmNhdGVnb3J5KCku
bmFtZSgpKTsKIH0KIAogVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBJbnZhbGlkSlNPTikK
QEAgLTYwNSwxMCArNzIwLDM3IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgSW52YWxp
ZEpTT04KICAgICAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTkludmFsaWRUcmlnZ2VyRmxhZ3NBcnJheSk7CiAgICAgY2hlY2tDb21waWxlckVycm9yKCJb
e1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwid2Via2l0Lm9yZ1wiLFwibG9hZC10eXBlXCI6W1wiaW52YWxpZFwiXX19XSIsCiAgICAg
ICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlk
U3RyaW5nSW5UcmlnZ2VyRmxhZ3NBcnJheSk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wi
YWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
Olwid2Via2l0Lm9yZ1wiLFwibG9hZC10eXBlXCI6WzVdfX1dIiwKKyAgICAgICAgQ29udGVudEV4
dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRTdHJpbmdJblRyaWdn
ZXJGbGFnc0FycmF5KTsKICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3Jn
XCIsXCJyZXNvdXJjZS10eXBlXCI6e319fV0iLAogICAgICAgICBDb250ZW50RXh0ZW5zaW9uczo6
Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXJGbGFnc0FycmF5KTsKICAg
ICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxc
InRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCIsXCJyZXNvdXJjZS10eXBl
XCI6W1wiaW52YWxpZFwiXX19XSIsCiAgICAgICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkU3RyaW5nSW5UcmlnZ2VyRmxhZ3NBcnJheSk7Cisg
ICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wiLFwicmVzb3VyY2UtdHlw
ZVwiOls1XX19XSIsCisgICAgICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9u
RXJyb3I6OkpTT05JbnZhbGlkU3RyaW5nSW5UcmlnZ2VyRmxhZ3NBcnJheSk7CisgICAgCisgICAg
Y2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wiLFwiaWYtZG9tYWluXCI6e319
fV0iLCBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxp
ZERvbWFpbkxpc3QpOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5
cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdc
IixcImlmLWRvbWFpblwiOls1XX19XSIsIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdCk7CisgICAgY2hlY2tDb21waWxlckVycm9y
KCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZp
bHRlclwiOlwid2Via2l0Lm9yZ1wiLFwiaWYtZG9tYWluXCI6W1wiYVwiXX19XSIsIHsgfSk7Cisg
ICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wiLFwidW5sZXNzLWRvbWFp
blwiOnt9fX1dIiwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNP
TkludmFsaWREb21haW5MaXN0KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJr
aXQub3JnXCIsXCJ1bmxlc3MtZG9tYWluXCI6WzVdfX1dIiwgQ29udGVudEV4dGVuc2lvbnM6OkNv
bnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWREb21haW5MaXN0KTsKKyAgICBjaGVja0Nv
bXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJc
Ijp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCIsXCJ1bmxlc3MtZG9tYWluXCI6W1wiXCJd
fX1dIiwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFs
aWREb21haW5MaXN0KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3Jn
XCIsXCJ1bmxlc3MtZG9tYWluXCI6W1wiQVwiXX19XSIsIENvbnRlbnRFeHRlbnNpb25zOjpDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Eb21haW5Ob3RMb3dlckNhc2VBU0NJSSk7CisgICAgY2hl
Y2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wiLFwidW5sZXNzLWRvbWFpblwiOltc
IlxcdTAwRENcIl19fV0iLCBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9y
OjpKU09ORG9tYWluTm90TG93ZXJDYXNlQVNDSUkpOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigi
W3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcIndlYmtpdC5vcmdcIixcInVubGVzcy1kb21haW5cIjpbXCIwXCJdfX1dIiwgeyB9KTsK
KyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wi
fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCIsXCJ1bmxlc3MtZG9t
YWluXCI6W1wiYVwiXX19XSIsIHsgfSk7CisKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJ3ZWJraXQub3JnXCIsXCJpZi1kb21haW5cIjpbXSxcInVubGVzcy1kb21haW5cIjpbXCJhXCJd
fX1dIiwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFs
aWREb21haW5MaXN0KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3Jn
XCIsXCJ1bmxlc3MtZG9tYWluXCI6W119fV0iLCBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4
dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZERvbWFpbkxpc3QpOworICAgIGNoZWNrQ29tcGlsZXJF
cnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIixcImlmLWRvbWFpblwiOjV9fV0iLCB7IH0pOworICAg
IGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwi
dHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIixcInVubGVzcy1kb21haW5c
Ijo1fX1dIiwgeyB9KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3Jn
XCIsXCJpZi1kb21haW5cIjo1LFwidW5sZXNzLWRvbWFpblwiOjV9fV0iLCB7IH0pOworICAgIGNo
ZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIixcImlmLWRvbWFpblwiOltdfX1d
IiwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRE
b21haW5MaXN0KTsKKyAgICAKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQu
b3JnXCIsXCJpZi1kb21haW5cIjpbXCJhXCJdLFwidW5sZXNzLWRvbWFpblwiOltdfX1dIiwgQ29u
dGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlVubGVzc0FuZElmRG9t
YWluKTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJi
bG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCIsXCJpZi1k
b21haW5cIjpbXCJhXCJdLFwidW5sZXNzLWRvbWFpblwiOltcImFcIl19fV0iLCBDb250ZW50RXh0
ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OVW5sZXNzQW5kSWZEb21haW4pOwor
CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tc
In0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wiLCBcInVuZXhwZWN0
ZWQtaWRlbnRpZmllci1zaG91bGQtYmUtaWdub3JlZFwiOjV9fV0iLCB7IH0pOwogCiAgICAgY2hl
Y2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6NSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCJ3ZWJraXQub3JnXCJ9fV0iLAogICAgICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVu
dEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZEFjdGlvbik7CkBAIC02MjAsNiArNzYyLDggQEAg
VEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBJbnZhbGlkSlNPTgogICAgIGNoZWNrQ29tcGls
ZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImlnbm9yZS1wcmV2aW91cy1ydWxlc1wi
fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fSwiCiAgICAgICAg
ICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3Rvclwi
OlwiLmhpZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKlwifX1dIiwKICAg
ICAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6UmVnZXhNYXRj
aGVzRXZlcnl0aGluZ0FmdGVySWdub3JlUHJldmlvdXNSdWxlcyk7CisgICAgY2hlY2tDb21waWxl
ckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiLipcIixcImlmLWRvbWFpblwiOltcImFcIl19fV0iLCBDb250ZW50RXh0
ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpSZWdleE1hdGNoZXNFdmVyeXRoaW5nV2l0
aERvbWFpbnMpOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVc
IjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qXCIsXCJ1bmxlc3Mt
ZG9tYWluXCI6W1wiYVwiXX19XSIsIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9u
RXJyb3I6OlJlZ2V4TWF0Y2hlc0V2ZXJ5dGhpbmdXaXRoRG9tYWlucyk7CiAgICAgY2hlY2tDb21w
aWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwiW1wifX1dIiwKICAgICAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNv
bnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRSZWdleCk7CiB9CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxODQwNDEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNCBAQAorMjAxNS0wNS0wOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgorCisgICAgICAgIFtDb250ZW50IEV4dGVuc2lvbnNdIFN1cHBvcnQgZG9t
YWluLXNwZWNpZmljIHJ1bGVzIGFuZCBleGNlcHRpb25zLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0ODMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2Rv
bWFpbi1ydWxlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvY29u
dGVudGV4dGVuc2lvbnMvZG9tYWluLXJ1bGVzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAv
dGVzdHMvY29udGVudGV4dGVuc2lvbnMvZG9tYWluLXJ1bGVzLmh0bWwuanNvbjogQWRkZWQuCisK
IDIwMTUtMDUtMDggIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNv
bT4gYW5kIFlvdWVubiBGYWJsZXQgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAg
ICAgIHN0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0cmVhbS1yZWFk
ZXIuaHRtbCBhbmQgc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vYmFkLXVuZGVybHlp
bmctc291cmNlcy5odG1sIGFyZSBmbGFreQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9j
b250ZW50ZXh0ZW5zaW9ucy9kb21haW4tcnVsZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvZG9tYWluLXJ1bGVzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvY29udGVu
dGV4dGVuc2lvbnMvZG9tYWluLXJ1bGVzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIxIEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyVmlldyBh
dCAoMCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5k
ZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgUmVuZGVyQm9keSB7Qk9E
WX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTg0CisgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAs
MCkgc2l6ZSAyMDB4MTgKKyAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjAwOiAiVGhl
IGltYWdlcyBiZWxvdyBzaG91bGQgbG9hZC4iCisgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgxOTks
MTQpIHNpemUgMXgwCisgICAgICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCwxOCkgc2l6ZSAxMDB4
MTAwCisgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgxMDAsMTE4KSBzaXplIDB4MAorICAgICAgUmVu
ZGVySW1hZ2Uge0lNR30gYXQgKDAsMTE4KSBzaXplIDEwMHgxMDAKKyAgICAgIFJlbmRlckJSIHtC
Un0gYXQgKDEwMCwyMTgpIHNpemUgMHgwCisgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAs
MjE4KSBzaXplIDI0MngxOAorICAgICAgICB0ZXh0IHJ1biBhdCAoMCwyMTgpIHdpZHRoIDI0Mjog
IlRoZSBpbWFnZXMgYmVsb3cgc2hvdWxkIGJlIGJsb2NrZWQuIgorICAgICAgUmVuZGVyQlIge0JS
fSBhdCAoMjQxLDIzMikgc2l6ZSAxeDAKKyAgICAgIFJlbmRlckltYWdlIHtJTUd9IGF0ICgwLDIz
Nikgc2l6ZSAweDAKKyAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDAsMjM2KSBzaXplIDB4MAorICAg
ICAgUmVuZGVySW1hZ2Uge0lNR30gYXQgKDAsMjM2KSBzaXplIDB4MAorICAgICAgUmVuZGVyQlIg
e0JSfSBhdCAoMCwyMzYpIHNpemUgMHgwCisgICAgICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCwy
MzYpIHNpemUgMHgwCisgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgwLDIzNikgc2l6ZSAweDAKSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvZG9tYWluLXJ1bGVz
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5z
aW9ucy9kb21haW4tcnVsZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvY29udGVudGV4dGVuc2lvbnMvZG9tYWluLXJ1bGVzLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw5IEBACis8Ym9keT4KK1RoZSBpbWFnZXMgYmVsb3cgc2hvdWxkIGxvYWQuPGJy
PgorPGltZyBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9yZXNvdXJjZXMvc3F1YXJlMTAwLnBu
Zz9zaG91bGRfbm90X2JlX2Jsb2NrZWRfMSI+PGJyPgorPGltZyBzcmM9Imh0dHA6Ly8xMjcuMC4w
LjE6ODAwMC9yZXNvdXJjZXMvc3F1YXJlMTAwLnBuZz9zaG91bGRfbm90X2JlX2Jsb2NrZWRfMiI+
PGJyPgorVGhlIGltYWdlcyBiZWxvdyBzaG91bGQgYmUgYmxvY2tlZC48YnI+Cis8aW1nIHNyYz0i
aHR0cDovLzEyNy4wLjAuMTo4MDAwL3Jlc291cmNlcy9zcXVhcmUxMDAucG5nP3Nob3VsZF9iZV9i
bG9ja2VkXzEiPjxicj4KKzxpbWcgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAvcmVzb3VyY2Vz
L3NxdWFyZTEwMC5wbmc/c2hvdWxkX2JlX2Jsb2NrZWRfMiI+PGJyPgorPGltZyBzcmM9Imh0dHA6
Ly8xMjcuMC4wLjE6ODAwMC9yZXNvdXJjZXMvc3F1YXJlMTAwLnBuZz9zaG91bGRfYmVfYmxvY2tl
ZF8zIj48YnI+Cis8L2JvZHk+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRl
eHRlbnNpb25zL2RvbWFpbi1ydWxlcy5odG1sLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9kb21haW4tcnVsZXMuaHRtbC5qc29uCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9k
b21haW4tcnVsZXMuaHRtbC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKK1sK
KyAgICB7CisgICAgICAgICJhY3Rpb24iOiB7CisgICAgICAgICAgICAidHlwZSI6ICJibG9jayIK
KyAgICAgICAgfSwKKyAgICAgICAgInRyaWdnZXIiOiB7CisgICAgICAgICAgICAidXJsLWZpbHRl
ciI6ICJzaG91bGRfYmVfYmxvY2tlZF8xIgorICAgICAgICB9CisgICAgfSwKKyAgICB7CisgICAg
ICAgICJhY3Rpb24iOiB7CisgICAgICAgICAgICAidHlwZSI6ICJibG9jayIKKyAgICAgICAgfSwK
KyAgICAgICAgInRyaWdnZXIiOiB7CisgICAgICAgICAgICAidXJsLWZpbHRlciI6ICJzaG91bGRf
YmVfYmxvY2tlZF8yIiwKKyAgICAgICAgICAgICJpZi1kb21haW4iOiBbIjEyNy4wLjAuMSJdCisg
ICAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICAgImFjdGlvbiI6IHsKKyAgICAgICAgICAg
ICJ0eXBlIjogImJsb2NrIgorICAgICAgICB9LAorICAgICAgICAidHJpZ2dlciI6IHsKKyAgICAg
ICAgICAgICJ1cmwtZmlsdGVyIjogInNob3VsZF9iZV9ibG9ja2VkXzMiLAorICAgICAgICAgICAg
InVubGVzcy1kb21haW4iOiBbInRoaXMgZG9tYWluIHNob3VsZCBub3QgbWF0Y2giXQorICAgICAg
ICB9CisgICAgfSwKKyAgICB7CisgICAgICAgICJhY3Rpb24iOiB7CisgICAgICAgICAgICAidHlw
ZSI6ICJibG9jayIKKyAgICAgICAgfSwKKyAgICAgICAgInRyaWdnZXIiOiB7CisgICAgICAgICAg
ICAidXJsLWZpbHRlciI6ICJzaG91bGRfbm90X2JlX2Jsb2NrZWRfMSIsCisgICAgICAgICAgICAi
aWYtZG9tYWluIjogWyJ0aGlzIGRvbWFpbiBzaG91bGQgbm90IG1hdGNoIGVpdGhlciJdCisgICAg
ICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICAgImFjdGlvbiI6IHsKKyAgICAgICAgICAgICJ0
eXBlIjogImJsb2NrIgorICAgICAgICB9LAorICAgICAgICAidHJpZ2dlciI6IHsKKyAgICAgICAg
ICAgICJ1cmwtZmlsdGVyIjogInNob3VsZF9ub3RfYmVfYmxvY2tlZF8yIiwKKyAgICAgICAgICAg
ICJ1bmxlc3MtZG9tYWluIjogWyIxMjcuMC4wLjEiXQorICAgICAgICB9CisgICAgfQorXQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>