<?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>177013</bug_id>
          
          <creation_ts>2017-09-15 10:32:33 -0700</creation_ts>
          <short_desc>Add WKContentRuleList notify action type</short_desc>
          <delta_ts>2017-09-27 22:45:14 -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>New Bugs</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>177460</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ggaren</cc>
    
    <cc>japhet</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1349387</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-15 10:32:33 -0700</bug_when>
    <thetext>Add WKContentRuleList warn action type</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349423</commentid>
    <comment_count>1</comment_count>
      <attachid>320936</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-15 11:42:53 -0700</bug_when>
    <thetext>Created attachment 320936
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349462</commentid>
    <comment_count>2</comment_count>
      <attachid>320936</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-09-15 12:50:36 -0700</bug_when>
    <thetext>Comment on attachment 320936
Patch

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

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListWarning.mm:77
&gt; +    [[WKContentRuleListStore defaultStore] compileContentRuleListForIdentifier:@&quot;testidentifier&quot; encodedContentRuleList:@&quot;[{\&quot;action\&quot;:{\&quot;type\&quot;:\&quot;warn\&quot;},\&quot;trigger\&quot;:{\&quot;url-filter\&quot;:\&quot;match\&quot;}}]&quot; completionHandler:^(WKContentRuleList *list, NSError *error) {

I think we need a more specific name than &quot;warn&quot;, since Safari supports lots of different kinds of warnings, and warning services also provide lots of different kinds of warnings. Maybe &quot;warn-phishing&quot;.

Same comment for the client-level API too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349711</commentid>
    <comment_count>3</comment_count>
      <attachid>320936</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-16 21:48:48 -0700</bug_when>
    <thetext>Comment on attachment 320936
Patch

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

&gt; Source/WebCore/contentextensions/ContentExtensionActions.h:49
&gt; +    Warn,

Warn feels to prescriptive. If all it&apos;s doing is sending a message to the host, I think something like, &quot;message-host&quot; (I hate the word host, so maybe something better than that).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351512</commentid>
    <comment_count>4</comment_count>
      <attachid>321507</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-21 19:38:21 -0700</bug_when>
    <thetext>Created attachment 321507
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351526</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-21 20:34:12 -0700</bug_when>
    <thetext>I changed it to &quot;notify&quot; with a string notification argument.  Since cocoa and WK* don&apos;t have an analog to std::pair, I expose them to the NavigationClient as two arrays, one of the notification arguments, and one of the identifiers of the WKContentRuleList they came from.  What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352020</commentid>
    <comment_count>6</comment_count>
      <attachid>321507</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-23 17:49:18 -0700</bug_when>
    <thetext>Comment on attachment 321507
Patch

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

&gt; Source/WebCore/contentextensions/ContentExtensionActions.h:48
&gt;      BlockLoad,
&gt;      BlockCookies,
&gt;      CSSDisplayNoneSelector,
&gt; -    IgnorePreviousRules = 3,
&gt; -    MakeHTTPS = 4,
&gt; +    Notify,
&gt; +    IgnorePreviousRules,
&gt; +    MakeHTTPS,

These were in alphabetical order before. Maybe keep them that way instead of &quot;almost alphabetical&quot;?

&gt; Source/WebCore/contentextensions/ContentExtensionActions.h:61
&gt; +        break;

I suggest just return false here so we can ASSERT_NOT_REACHED outside the function.

&gt; Source/WebCore/contentextensions/ContentExtensionActions.h:63
&gt; +    return false;

Should have ASSERT_NOT_REACHED here.

&gt; Source/WebCore/contentextensions/ContentExtensionActions.h:70
&gt; +    HashSet&lt;std::pair&lt;String, String&gt;&gt; notifications;

Seems pretty unclear what each of these two strings are.

&gt; Source/WebCore/contentextensions/ContentExtensionActions.h:73
&gt; +WEBCORE_EXPORT void applyBlockedStatusToRequest(const BlockedStatus&amp;, Page*, ResourceRequest&amp;);

Why Page* instead of Page&amp;?

&gt; Source/WebCore/contentextensions/ContentExtensionCompiler.cpp:74
&gt; +    Vector&lt;uint32_t&gt; clientLocations;

Unclear why Vector&lt;uint32_t&gt; is an improvement over Vector&lt;unsigned&gt; in a source file the also uses Vector&lt;unsigned&gt; for the return value of serializeActions, for example.

If &quot;locations&quot; are positions within a String, then &quot;unsigned&quot; is the type we have used for that. I don’t see a good reason to start using uint32_t for it here unless we have plans to make a transition.

&gt; Source/WebCore/contentextensions/ContentExtensionCompiler.cpp:150
&gt; +            const auto existingAction = map.find(std::make_pair(argument, flags));

The const here seems unnecessary.

&gt; Source/WebCore/contentextensions/ContentExtensionError.h:62
&gt;      JSONInvalidActionType,
&gt;      JSONInvalidCSSDisplayNoneActionType,
&gt;      JSONInvalidRegex,
&gt; +    JSONInvalidNotification,

This was in alphabetical order before. But not any more.

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:283
&gt; +        if (!field || scope.exception() || !field.isString())
&gt; +            return makeUnexpected(ContentExtensionError::JSONInvalidNotification);

No need for the &quot;!field&quot; check here. That can’t happen unless there is an exception.

Seems a little peculiar to use isString rather than toString. Not typical JavaScript idiom.

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:284
&gt; +        return { Action(ActionType::Notify, asString(field)-&gt;value(&amp;exec)) };

Wouldn’t &quot;{{&quot; work instead of &quot;{ Action(&quot; ? As used above?

&gt; Source/WebCore/page/ChromeClient.h:373
&gt; +    virtual void contentRuleListNotification(const WebCore::URL&amp;, const HashSet&lt;std::pair&lt;String, String&gt;&gt;&amp;) { };

Is it OK that the rule list is a randomly ordered set? Is there no ordering needed?

&gt; Source/WebKit/UIProcess/API/C/WKPage.cpp:2304
&gt; +            for (const auto&amp; identifier : listIdentifiers)

No need for const here.

&gt; Source/WebKit/UIProcess/API/C/WKPage.cpp:2308
&gt; +            for (const auto&amp; notification : notifications)

Ditto.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp:883
&gt; +    for (const auto&amp; notification : notificationPairs) {

No need for const here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352272</commentid>
    <comment_count>7</comment_count>
      <attachid>321705</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-25 11:15:46 -0700</bug_when>
    <thetext>Created attachment 321705
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352286</commentid>
    <comment_count>8</comment_count>
      <attachid>321711</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-25 11:40:58 -0700</bug_when>
    <thetext>Created attachment 321711
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354032</commentid>
    <comment_count>9</comment_count>
      <attachid>322067</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-27 22:10:29 -0700</bug_when>
    <thetext>Created attachment 322067
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354036</commentid>
    <comment_count>10</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-27 22:43:55 -0700</bug_when>
    <thetext>http://trac.webkit.org/r222602</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354037</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 22:45:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/34706927&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320936</attachid>
            <date>2017-09-15 11:42:53 -0700</date>
            <delta_ts>2017-09-21 19:38:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177013-20170915114252.patch</filename>
            <type>text/plain</type>
            <size>45077</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjAzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE3LTA5LTE1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFdLQ29u
dGVudFJ1bGVMaXN0IHdhcm4gYWN0aW9uIHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzAxMworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzEw
NzM5MzY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2hlbiBzdWNoIGFuIGFjdGlvbiBpcyB0cmlnZ2VyZWQsIGEgbm90aWZpY2F0aW9uIGlzIHNlbnQg
dG8gdGhlIGFwcGxpY2F0aW9uIHRvIGFsbG93IGl0IHRvIGRvCisgICAgICAgIHNvbWV0aGluZyBs
aWtlIHNob3dpbmcgYSB3YXJuaW5nLgorCisgICAgICAgIENvdmVyZWQgYnkgYSBuZXcgQVBJIHRl
c3QuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQWN0aW9u
cy5oOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6c2VyaWFsaXplQWN0
aW9ucyk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6bG9hZEFjdGlvbik6
CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbjo6ZGVzZXJpYWxpemUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbjo6ZGVzZXJpYWxp
emVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb246OnNl
cmlhbGl6ZWRMZW5ndGgpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25zQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9y
TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVu
c2lvbnNCYWNrZW5kOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yUGluZ0xvYWQpOgor
ICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJlc291cmNlKToKKyAgICAg
ICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorCiAyMDE3LTA5LTE0ICBSeWFuIEhhZGRhZCAgPHJ5
YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIy
MjIwMTUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uQWN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmgJKHJldmlzaW9uIDIyMjAzMikKKysrIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDEzIEBACiAKICNpZiBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQogCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0Owor
Y2xhc3MgUGFnZTsKIAogbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIApAQCAtNDIsNiAr
NDYsNyBAQCBlbnVtIGNsYXNzIEFjdGlvblR5cGUgOiB1aW50OF90IHsKICAgICBDU1NEaXNwbGF5
Tm9uZVN0eWxlU2hlZXQsCiAgICAgSWdub3JlUHJldmlvdXNSdWxlcywKICAgICBNYWtlSFRUUFMs
CisgICAgV2FybiwKICAgICBJbnZhbGlkQWN0aW9uLAogfTsKIApAQCAtNDksOSArNTQsMTAgQEAg
c3RydWN0IEJsb2NrZWRTdGF0dXMgewogICAgIGJvb2wgYmxvY2tlZExvYWQgeyBmYWxzZSB9Owog
ICAgIGJvb2wgYmxvY2tlZENvb2tpZXMgeyBmYWxzZSB9OwogICAgIGJvb2wgbWFkZUhUVFBTIHsg
ZmFsc2UgfTsKKyAgICBWZWN0b3I8U3RyaW5nPiB3YXJuaW5nSWRlbnRpZmllcnM7CiB9OwogCi1X
RUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5QmxvY2tlZFN0YXR1c1RvUmVxdWVzdChjb25zdCBCbG9j
a2VkU3RhdHVzJiwgUmVzb3VyY2VSZXF1ZXN0Jik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5
QmxvY2tlZFN0YXR1c1RvUmVxdWVzdChjb25zdCBCbG9ja2VkU3RhdHVzJiwgUGFnZSosIFJlc291
cmNlUmVxdWVzdCYpOwogCiB9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0Nv
bnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHJldmlzaW9uIDIyMjAzMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsNyBAQCBzdGF0aWMgVmVjdG9yPHVuc2lnbmVkPiBz
ZXJpYWxpemVBY3Rpb25zCiAgICAgUGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9uc01hcCBjc3NEaXNw
bGF5Tm9uZUFjdGlvbnNNYXA7CiAgICAgQWN0aW9uTWFwIGlnbm9yZVByZXZpb3VzUnVsZUFjdGlv
bnNNYXA7CiAgICAgQWN0aW9uTWFwIG1ha2VIVFRQU0FjdGlvbnNNYXA7CisgICAgQWN0aW9uTWFw
IHdhcm5BY3Rpb25zTWFwOwogCiAgICAgZm9yICh1bnNpZ25lZCBydWxlSW5kZXggPSAwOyBydWxl
SW5kZXggPCBydWxlTGlzdC5zaXplKCk7ICsrcnVsZUluZGV4KSB7CiAgICAgICAgIGNvbnN0IENv
bnRlbnRFeHRlbnNpb25SdWxlJiBydWxlID0gcnVsZUxpc3RbcnVsZUluZGV4XTsKQEAgLTEyMiw2
ICsxMjMsNyBAQCBzdGF0aWMgVmVjdG9yPHVuc2lnbmVkPiBzZXJpYWxpemVBY3Rpb25zCiAgICAg
ICAgICAgICBibG9ja0Nvb2tpZXNBY3Rpb25zTWFwLmNsZWFyKCk7CiAgICAgICAgICAgICBjc3NE
aXNwbGF5Tm9uZUFjdGlvbnNNYXAuY2xlYXIoKTsKICAgICAgICAgICAgIG1ha2VIVFRQU0FjdGlv
bnNNYXAuY2xlYXIoKTsKKyAgICAgICAgICAgIHdhcm5BY3Rpb25zTWFwLmNsZWFyKCk7CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgaWdub3JlUHJldmlvdXNSdWxlQWN0aW9uc01hcC5jbGVh
cigpOwogCkBAIC0xNzcsNiArMTc5LDkgQEAgc3RhdGljIFZlY3Rvcjx1bnNpZ25lZD4gc2VyaWFs
aXplQWN0aW9ucwogICAgICAgICBjYXNlIEFjdGlvblR5cGU6Ok1ha2VIVFRQUzoKICAgICAgICAg
ICAgIGZpbmRPck1ha2VBY3Rpb25Mb2NhdGlvbihtYWtlSFRUUFNBY3Rpb25zTWFwKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFjdGlvblR5cGU6Oldhcm46CisgICAgICAgICAg
ICBmaW5kT3JNYWtlQWN0aW9uTG9jYXRpb24od2FybkFjdGlvbnNNYXApOworICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBhY3Rpb25Mb2NhdGlvbnMuYXBwZW5kKGFjdGlv
bkxvY2F0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCShyZXZpc2lvbiAyMjIwMzIp
CisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDYgKzI3Nyw4IEBAIHN0YXRpYyBFeHBlY3Rl
ZDxzdGQ6Om9wdGlvbmFsPEFjdGlvbj4sIHMKICAgICB9CiAgICAgaWYgKGFjdGlvblR5cGUgPT0g
Im1ha2UtaHR0cHMiKQogICAgICAgICByZXR1cm4ge3tBY3Rpb25UeXBlOjpNYWtlSFRUUFN9fTsK
KyAgICBpZiAoYWN0aW9uVHlwZSA9PSAid2FybiIpCisgICAgICAgIHJldHVybiB7e0FjdGlvblR5
cGU6Oldhcm59fTsKICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVy
cm9yOjpKU09OSW52YWxpZEFjdGlvblR5cGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuY3Bw
CShyZXZpc2lvbiAyMjIwMzIpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE1ICs0MiwxNCBA
QCBDb250ZW50RXh0ZW5zaW9uUnVsZTo6Q29udGVudEV4dGVuc2lvblJ1CiBBY3Rpb24gQWN0aW9u
OjpkZXNlcmlhbGl6ZShjb25zdCBTZXJpYWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucywgY29uc3Qg
dWludDMyX3QgYWN0aW9uc0xlbmd0aCwgdWludDMyX3QgbG9jYXRpb24pCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQobG9jYXRpb24gPCBhY3Rpb25zTGVuZ3RoKTsKLSAgICBzd2l0Y2ggKHN0YXRpY19j
YXN0PEFjdGlvblR5cGU+KGFjdGlvbnNbbG9jYXRpb25dKSkgeworICAgIGF1dG8gYWN0aW9uVHlw
ZSA9IHN0YXRpY19jYXN0PEFjdGlvblR5cGU+KGFjdGlvbnNbbG9jYXRpb25dKTsKKyAgICBzd2l0
Y2ggKGFjdGlvblR5cGUpIHsKICAgICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrQ29va2llczoKLSAg
ICAgICAgcmV0dXJuIEFjdGlvbihBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMsIGxvY2F0aW9uKTsK
ICAgICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrTG9hZDoKLSAgICAgICAgcmV0dXJuIEFjdGlvbihB
Y3Rpb25UeXBlOjpCbG9ja0xvYWQsIGxvY2F0aW9uKTsKICAgICBjYXNlIEFjdGlvblR5cGU6Okln
bm9yZVByZXZpb3VzUnVsZXM6Ci0gICAgICAgIHJldHVybiBBY3Rpb24oQWN0aW9uVHlwZTo6SWdu
b3JlUHJldmlvdXNSdWxlcywgbG9jYXRpb24pOwogICAgIGNhc2UgQWN0aW9uVHlwZTo6TWFrZUhU
VFBTOgotICAgICAgICByZXR1cm4gQWN0aW9uKEFjdGlvblR5cGU6Ok1ha2VIVFRQUywgbG9jYXRp
b24pOworICAgIGNhc2UgQWN0aW9uVHlwZTo6V2FybjoKKyAgICAgICAgcmV0dXJuIEFjdGlvbihh
Y3Rpb25UeXBlLCBsb2NhdGlvbik7CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9u
ZVNlbGVjdG9yOiB7CiAgICAgICAgIHVpbnQzMl90IGhlYWRlckxlbmd0aCA9IHNpemVvZihBY3Rp
b25UeXBlKSArIHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YoYm9vbCk7CiAgICAgICAgIHVpbnQz
Ml90IHN0cmluZ1N0YXJ0SW5kZXggPSBsb2NhdGlvbiArIGhlYWRlckxlbmd0aDsKQEAgLTY3LDkg
KzY2LDkgQEAgQWN0aW9uIEFjdGlvbjo6ZGVzZXJpYWxpemUoY29uc3QgU2VyaWFsaQogICAgIH0K
ICAgICBjYXNlIEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU3R5bGVTaGVldDoKICAgICBjYXNl
IEFjdGlvblR5cGU6OkludmFsaWRBY3Rpb246Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAgICAgCiBBY3Rpb25UeXBlIEFjdGlvbjo6ZGVz
ZXJpYWxpemVUeXBlKGNvbnN0IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zLCBjb25zdCB1
aW50MzJfdCBhY3Rpb25zTGVuZ3RoLCB1aW50MzJfdCBsb2NhdGlvbikKQEAgLTgyLDEyICs4MSwx
MyBAQCBBY3Rpb25UeXBlIEFjdGlvbjo6ZGVzZXJpYWxpemVUeXBlKGNvbnN0CiAgICAgY2FzZSBB
Y3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzOgogICAgIGNhc2UgQWN0aW9uVHlwZTo6Q1NT
RGlzcGxheU5vbmVTZWxlY3RvcjoKICAgICBjYXNlIEFjdGlvblR5cGU6Ok1ha2VIVFRQUzoKKyAg
ICBjYXNlIEFjdGlvblR5cGU6Oldhcm46CiAgICAgICAgIHJldHVybiB0eXBlOwogICAgIGNhc2Ug
QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTdHlsZVNoZWV0OgogICAgIGNhc2UgQWN0aW9uVHlw
ZTo6SW52YWxpZEFjdGlvbjoKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KICAgICAKIHVpbnQzMl90IEFjdGlvbjo6c2VyaWFsaXplZExlbmd0
aChjb25zdCBTZXJpYWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucywgY29uc3QgdWludDMyX3QgYWN0
aW9uc0xlbmd0aCwgdWludDMyX3QgbG9jYXRpb24pCkBAIC05OCw2ICs5OCw3IEBAIHVpbnQzMl90
IEFjdGlvbjo6c2VyaWFsaXplZExlbmd0aChjb25zdCAKICAgICBjYXNlIEFjdGlvblR5cGU6OkJs
b2NrTG9hZDoKICAgICBjYXNlIEFjdGlvblR5cGU6Oklnbm9yZVByZXZpb3VzUnVsZXM6CiAgICAg
Y2FzZSBBY3Rpb25UeXBlOjpNYWtlSFRUUFM6CisgICAgY2FzZSBBY3Rpb25UeXBlOjpXYXJuOgog
ICAgICAgICByZXR1cm4gc2l6ZW9mKEFjdGlvblR5cGUpOwogICAgIGNhc2UgQWN0aW9uVHlwZTo6
Q1NTRGlzcGxheU5vbmVTZWxlY3RvcjogewogICAgICAgICB1aW50MzJfdCBoZWFkZXJMZW5ndGgg
PSBzaXplb2YoQWN0aW9uVHlwZSkgKyBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mKGJvb2wpOwpA
QCAtMTEyLDkgKzExMyw5IEBAIHVpbnQzMl90IEFjdGlvbjo6c2VyaWFsaXplZExlbmd0aChjb25z
dCAKICAgICB9CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVN0eWxlU2hlZXQ6
CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpJbnZhbGlkQWN0aW9uOgotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwogICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBD
b250ZW50RXh0ZW5zaW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCShyZXZpc2lv
biAyMjIwMzIpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uc0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNp
ZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5j
bHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
LmgiCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIkNvbnRlbnRFeHRl
bnNpb25zRGVidWdnaW5nLmgiCkBAIC0zOCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgor
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRJbmZvLmgiCiAjaW5jbHVk
ZSAiVVJMLmgiCiAjaW5jbHVkZSAiVXNlckNvbnRlbnRDb250cm9sbGVyLmgiCkBAIC0xNjYsMTYg
KzE2OSwyMCBAQCBCbG9ja2VkU3RhdHVzIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6CiAgICAg
fQogCiAgICAgUmVzb3VyY2VMb2FkSW5mbyByZXNvdXJjZUxvYWRJbmZvID0geyB1cmwsIG1haW5E
b2N1bWVudFVSTCwgcmVzb3VyY2VUeXBlIH07Ci0gICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb24+IGFjdGlvbnMgPSBhY3Rpb25zRm9yUmVzb3VyY2VMb2FkKHJlc291cmNlTG9hZElu
Zm8pOworICAgIGF1dG8gYWN0aW9ucyA9IGFjdGlvbnNGb3JSZXNvdXJjZUxvYWQocmVzb3VyY2VM
b2FkSW5mbyk7CiAKICAgICBib29sIHdpbGxCbG9ja0xvYWQgPSBmYWxzZTsKICAgICBib29sIHdp
bGxCbG9ja0Nvb2tpZXMgPSBmYWxzZTsKICAgICBib29sIHdpbGxNYWtlSFRUUFMgPSBmYWxzZTsK
KyAgICBWZWN0b3I8U3RyaW5nPiB3YXJuSWRlbnRpZmllcnM7CiAgICAgZm9yIChjb25zdCBhdXRv
JiBhY3Rpb24gOiBhY3Rpb25zKSB7CiAgICAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUoKSkgewog
ICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQ6CiAg
ICAgICAgICAgICB3aWxsQmxvY2tMb2FkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpXYXJuOgorICAgICAgICAg
ICAgd2FybklkZW50aWZpZXJzLmFwcGVuZChhY3Rpb24uZXh0ZW5zaW9uSWRlbnRpZmllcigpKTsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpCbG9ja0Nvb2tpZXM6CiAgICAgICAgICAgICB3aWxsQmxvY2tDb29raWVzID0gdHJ1
ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjE2LDcgKzIyMyw4IEBAIEJsb2NrZWRTdGF0dXMg
Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjoKICAgICAgICAgaWYgKHdpbGxCbG9ja0xvYWQpCiAg
ICAgICAgICAgICBjdXJyZW50RG9jdW1lbnQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3Vy
Y2U6OkNvbnRlbnRCbG9ja2VyLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIkNvbnRl
bnQgYmxvY2tlciBwcmV2ZW50ZWQgZnJhbWUgZGlzcGxheWluZyAiLCBtYWluRG9jdW1lbnRVUkwu
c3RyaW5nKCksICIgZnJvbSBsb2FkaW5nIGEgcmVzb3VyY2UgZnJvbSAiLCB1cmwuc3RyaW5nKCkp
KTsKICAgICB9Ci0gICAgcmV0dXJuIHsgd2lsbEJsb2NrTG9hZCwgd2lsbEJsb2NrQ29va2llcywg
d2lsbE1ha2VIVFRQUyB9OworCisgICAgcmV0dXJuIHsgd2lsbEJsb2NrTG9hZCwgd2lsbEJsb2Nr
Q29va2llcywgd2lsbE1ha2VIVFRQUywgV1RGTW92ZSh3YXJuSWRlbnRpZmllcnMpIH07CiB9CiAK
IEJsb2NrZWRTdGF0dXMgQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpwcm9jZXNzQ29udGVudEV4
dGVuc2lvblJ1bGVzRm9yUGluZ0xvYWQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgbWFpbkRv
Y3VtZW50VVJMKQpAQCAtMjI1LDExICsyMzMsMTIgQEAgQmxvY2tlZFN0YXR1cyBDb250ZW50RXh0
ZW5zaW9uc0JhY2tlbmQ6OgogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgUmVzb3VyY2VMb2Fk
SW5mbyByZXNvdXJjZUxvYWRJbmZvID0geyB1cmwsIG1haW5Eb2N1bWVudFVSTCwgUmVzb3VyY2VU
eXBlOjpSYXcgfTsKLSAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gYWN0aW9u
cyA9IGFjdGlvbnNGb3JSZXNvdXJjZUxvYWQocmVzb3VyY2VMb2FkSW5mbyk7CisgICAgYXV0byBh
Y3Rpb25zID0gYWN0aW9uc0ZvclJlc291cmNlTG9hZChyZXNvdXJjZUxvYWRJbmZvKTsKIAogICAg
IGJvb2wgd2lsbEJsb2NrTG9hZCA9IGZhbHNlOwogICAgIGJvb2wgd2lsbEJsb2NrQ29va2llcyA9
IGZhbHNlOwogICAgIGJvb2wgd2lsbE1ha2VIVFRQUyA9IGZhbHNlOworICAgIFZlY3RvcjxTdHJp
bmc+IHdhcm5JZGVudGlmaWVyczsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGFjdGlvbiA6IGFjdGlv
bnMpIHsKICAgICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZDoKQEAgLTIzOCw2ICsyNDcsOSBA
QCBCbG9ja2VkU3RhdHVzIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6CiAgICAgICAgIGNhc2Ug
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrQ29va2llczoKICAgICAgICAgICAg
IHdpbGxCbG9ja0Nvb2tpZXMgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6Oldhcm46CisgICAgICAgICAgICB3YXJu
SWRlbnRpZmllcnMuYXBwZW5kKGFjdGlvbi5leHRlbnNpb25JZGVudGlmaWVyKCkpOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
Ok1ha2VIVFRQUzoKICAgICAgICAgICAgIGlmICgodXJsLnByb3RvY29sSXMoImh0dHAiKSB8fCB1
cmwucHJvdG9jb2xJcygid3MiKSkgJiYgKCF1cmwucG9ydCgpIHx8IGlzRGVmYXVsdFBvcnRGb3JQ
cm90b2NvbCh1cmwucG9ydCgpLnZhbHVlKCksIHVybC5wcm90b2NvbCgpKSkpCiAgICAgICAgICAg
ICAgICAgd2lsbE1ha2VIVFRQUyA9IHRydWU7CkBAIC0yNTEsNyArMjYzLDcgQEAgQmxvY2tlZFN0
YXR1cyBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OgogICAgICAgICB9CiAgICAgfQogCi0gICAg
cmV0dXJuIHsgd2lsbEJsb2NrTG9hZCwgd2lsbEJsb2NrQ29va2llcywgd2lsbE1ha2VIVFRQUyB9
OworICAgIHJldHVybiB7IHdpbGxCbG9ja0xvYWQsIHdpbGxCbG9ja0Nvb2tpZXMsIHdpbGxNYWtl
SFRUUFMsIFdURk1vdmUod2FybklkZW50aWZpZXJzKSB9OwogfQogCiBjb25zdCBTdHJpbmcmIENv
bnRlbnRFeHRlbnNpb25zQmFja2VuZDo6ZGlzcGxheU5vbmVDU1NSdWxlKCkKQEAgLTI2MCw4ICsy
NzIsMTEgQEAgY29uc3QgU3RyaW5nJiBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OgogICAgIHJl
dHVybiBydWxlOwogfQogCi12b2lkIGFwcGx5QmxvY2tlZFN0YXR1c1RvUmVxdWVzdChjb25zdCBC
bG9ja2VkU3RhdHVzJiBzdGF0dXMsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3ZvaWQgYXBw
bHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KGNvbnN0IEJsb2NrZWRTdGF0dXMmIHN0YXR1cywgUGFn
ZSogcGFnZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogeworICAgIGlmIChwYWdlICYmICFz
dGF0dXMud2FybmluZ0lkZW50aWZpZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21l
KCkuY2xpZW50KCkuY29udGVudFJ1bGVMaXN0V2FybmluZyhyZXF1ZXN0LnVybCgpLCBzdGF0dXMu
d2FybmluZ0lkZW50aWZpZXJzKTsKKwogICAgIGlmIChzdGF0dXMuYmxvY2tlZENvb2tpZXMpCiAg
ICAgICAgIHJlcXVlc3Quc2V0QWxsb3dDb29raWVzKGZhbHNlKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAyMjIwMzIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODA0LDcgKzI4
MDQsNyBAQCB1bnNpZ25lZCBsb25nIEZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTCiAgICAgICAg
IGlmIChhdXRvKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpIHsKICAgICAgICAgICAgIGlmIChtX2Rv
Y3VtZW50TG9hZGVyKSB7CiAgICAgICAgICAgICAgICAgYXV0byBibG9ja2VkU3RhdHVzID0gcGFn
ZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JM
b2FkKG5ld1JlcXVlc3QudXJsKCksIFJlc291cmNlVHlwZTo6UmF3LCAqbV9kb2N1bWVudExvYWRl
cik7Ci0gICAgICAgICAgICAgICAgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KGJsb2NrZWRT
dGF0dXMsIG5ld1JlcXVlc3QpOworICAgICAgICAgICAgICAgIGFwcGx5QmxvY2tlZFN0YXR1c1Rv
UmVxdWVzdChibG9ja2VkU3RhdHVzLCBwYWdlLCBuZXdSZXF1ZXN0KTsKICAgICAgICAgICAgICAg
ICBpZiAoYmxvY2tlZFN0YXR1cy5ibG9ja2VkTG9hZCkgewogICAgICAgICAgICAgICAgICAgICBu
ZXdSZXF1ZXN0ID0geyB9OwogICAgICAgICAgICAgICAgICAgICBlcnJvciA9IFJlc291cmNlRXJy
b3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgaW5pdGlhbFJlcXVlc3QudXJsKCksIGVt
cHR5U3RyaW5nKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9QaW5nTG9hZGVyLmNwcAkocmV2
aXNpb24gMjIyMDMyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBib29sIHByb2Nlc3NDb250ZW50
RXh0ZW5zaW9uUnVsZXMKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBhdXRvIHN0YXR1cyA9IHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVu
dEV4dGVuc2lvblJ1bGVzRm9yTG9hZChyZXF1ZXN0LnVybCgpLCByZXNvdXJjZVR5cGUsICpkb2N1
bWVudExvYWRlcik7Ci0gICAgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KHN0YXR1cywgcmVx
dWVzdCk7CisgICAgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KHN0YXR1cywgcGFnZSwgcmVx
dWVzdCk7CiAgICAgcmV0dXJuIHN0YXR1cy5ibG9ja2VkTG9hZDsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyMjIwMzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDksNyArMzQ5LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0SW50
ZQogICAgICAgICBQYWdlKiBwYWdlID0gZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS5wYWdlKCk7CiAg
ICAgICAgIGlmIChwYWdlICYmIG1fZG9jdW1lbnRMb2FkZXIpIHsKICAgICAgICAgICAgIGF1dG8g
YmxvY2tlZFN0YXR1cyA9IHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVu
dEV4dGVuc2lvblJ1bGVzRm9yTG9hZChyZXF1ZXN0LnVybCgpLCBtX3Jlc291cmNlVHlwZSwgKm1f
ZG9jdW1lbnRMb2FkZXIpOwotICAgICAgICAgICAgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0
KGJsb2NrZWRTdGF0dXMsIHJlcXVlc3QpOworICAgICAgICAgICAgYXBwbHlCbG9ja2VkU3RhdHVz
VG9SZXF1ZXN0KGJsb2NrZWRTdGF0dXMsIHBhZ2UsIHJlcXVlc3QpOwogICAgICAgICAgICAgaWYg
KGJsb2NrZWRTdGF0dXMuYmxvY2tlZExvYWQpIHsKICAgICAgICAgICAgICAgICByZXF1ZXN0ID0g
eyB9OwogICAgICAgICAgICAgICAgIGRpZEZhaWwoYmxvY2tlZEJ5Q29udGVudEJsb2NrZXJFcnJv
cigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMjIyMDMyKQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzI0LDkgKzcyNCwxMCBAQCBSZXNvdXJjZUVycm9yT3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2Fj
CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIGlmIChmcmFtZSgpICYmIGZy
YW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKSAmJiBtX2RvY3VtZW50TG9hZGVyKSB7CisgICAgICAg
IGF1dG8qIHBhZ2UgPSBmcmFtZSgpLT5tYWluRnJhbWUoKS5wYWdlKCk7CiAgICAgICAgIGNvbnN0
IGF1dG8mIHJlc291cmNlUmVxdWVzdCA9IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAg
ICAgIGF1dG8gYmxvY2tlZFN0YXR1cyA9IGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNl
ckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJl
c291cmNlUmVxdWVzdC51cmwoKSwgdG9SZXNvdXJjZVR5cGUodHlwZSksICptX2RvY3VtZW50TG9h
ZGVyKTsKLSAgICAgICAgcmVxdWVzdC5hcHBseUJsb2NrZWRTdGF0dXMoYmxvY2tlZFN0YXR1cyk7
CisgICAgICAgIGF1dG8gYmxvY2tlZFN0YXR1cyA9IHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIo
KS5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChyZXNvdXJjZVJlcXVlc3QudXJs
KCksIHRvUmVzb3VyY2VUeXBlKHR5cGUpLCAqbV9kb2N1bWVudExvYWRlcik7CisgICAgICAgIHJl
cXVlc3QuYXBwbHlCbG9ja2VkU3RhdHVzKGJsb2NrZWRTdGF0dXMsIHBhZ2UpOwogICAgICAgICBp
ZiAoYmxvY2tlZFN0YXR1cy5ibG9ja2VkTG9hZCkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0df
SUZfQUxMT1dFRCgicmVxdWVzdFJlc291cmNlOiBSZXNvdXJjZSBibG9ja2VkIGJ5IGNvbnRlbnQg
YmxvY2tlciAoZnJhbWUgPSAlcCkiLCBmcmFtZSgpKTsKICAgICAgICAgICAgIGlmICh0eXBlID09
IENhY2hlZFJlc291cmNlOjpUeXBlOjpNYWluUmVzb3VyY2UpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCShy
ZXZpc2lvbiAyMjIwMzIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDkgKzIxMiw5IEBAIHZvaWQg
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpyZW1vdmVGcmFnbWUKIAogI2lmIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCiAKLXZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjphcHBseUJsb2NrZWRT
dGF0dXMoY29uc3QgQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXMmIGJsb2NrZWRTdGF0
dXMpCit2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6YXBwbHlCbG9ja2VkU3RhdHVzKGNvbnN0
IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzJiBibG9ja2VkU3RhdHVzLCBQYWdlKiBw
YWdlKQogewotICAgIENvbnRlbnRFeHRlbnNpb25zOjphcHBseUJsb2NrZWRTdGF0dXNUb1JlcXVl
c3QoYmxvY2tlZFN0YXR1cywgbV9yZXNvdXJjZVJlcXVlc3QpOworICAgIENvbnRlbnRFeHRlbnNp
b25zOjphcHBseUJsb2NrZWRTdGF0dXNUb1JlcXVlc3QoYmxvY2tlZFN0YXR1cywgcGFnZSwgbV9y
ZXNvdXJjZVJlcXVlc3QpOwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgJKHJldmlzaW9uIDIyMjAz
MikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRh
dGVBY2NvcmRpbmdDYWNoZU1vZGUoKTsKICAgICB2b2lkIHJlbW92ZUZyYWdtZW50SWRlbnRpZmll
cklmTmVlZGVkKCk7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICB2b2lkIGFw
cGx5QmxvY2tlZFN0YXR1cyhjb25zdCBDb250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1cyYp
OworICAgIHZvaWQgYXBwbHlCbG9ja2VkU3RhdHVzKGNvbnN0IENvbnRlbnRFeHRlbnNpb25zOjpC
bG9ja2VkU3RhdHVzJiwgUGFnZSopOwogI2VuZGlmCiAgICAgdm9pZCBzZXREb21haW5Gb3JDYWNo
ZVBhcnRpdGlvbihEb2N1bWVudCYpOwogICAgIHZvaWQgc2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRp
b24oY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHJl
dmlzaW9uIDIyMjAzMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0NSw2ICszNDUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKEhUTUxWaWRlb0VsZW1l
bnQmLCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIHsgfQogICAg
IHZpcnR1YWwgYm9vbCByZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgeyByZXR1
cm4gZmFsc2U7IH0gCiAKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudFJ1bGVMaXN0V2FybmluZyhj
b25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpIHsgfTsKKyAgICAKICNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbFNj
cmVlbkZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYsIGJvb2wpIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCYpIHsgfQpJ
bmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjAzMykKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTctMDktMTUgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgV0tDb250ZW50
UnVsZUxpc3Qgd2FybiBhY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MDEzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTA3Mzkz
Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oOgorICAgICAgICAoQVBJOjpOYXZpZ2F0
aW9uQ2xpZW50Ojpjb250ZW50UnVsZUxpc3RXYXJuaW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlTmF2aWdhdGlvbkNsaWVudC5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW06CisgICAgICAgIChXZWJLaXQ6
Ok5hdmlnYXRpb25TdGF0ZTo6c2V0TmF2aWdhdGlvbkRlbGVnYXRlKToKKyAgICAgICAgKFdlYktp
dDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojpjb250ZW50UnVsZUxpc3RXYXJu
aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5Ojpjb250ZW50UnVsZUxpc3RXYXJuaW5nKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Y29udGVu
dFJ1bGVMaXN0V2FybmluZyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaDoKKwogMjAxNy0wOS0xNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJp
c3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBXS1VJRGVsZWdhdGVQcml2YXRlIGVx
dWl2YWxlbnQgb2YgV0tQYWdlVUlDbGllbnQncyBkcmF3SGVhZGVyLCBkcmF3Rm9vdGVyLCBoZWFk
ZXJIZWlnaHQsIGFuZCBmb290ZXJIZWlnaHQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvUGluZ0xvYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvUGluZ0xvYWQuY3BwCShyZXZpc2lvbiAyMjIwMzIpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1BpbmdMb2FkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDcgKzMyNCw3
IEBAIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2sKIENvbnRlbnRFeHRl
bnNpb25zOjpCbG9ja2VkU3RhdHVzIFBpbmdMb2FkOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1
bGVzRm9yTG9hZChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgYXV0byBzdGF0dXMg
PSBjb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQoKS5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVz
Rm9yUGluZ0xvYWQocmVxdWVzdC51cmwoKSwgbV9wYXJhbWV0ZXJzLm1haW5Eb2N1bWVudFVSTCk7
Ci0gICAgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KHN0YXR1cywgcmVxdWVzdCk7CisgICAg
YXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KHN0YXR1cywgbnVsbHB0ciwgcmVxdWVzdCk7CiAg
ICAgcmV0dXJuIHN0YXR1czsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCShyZXZpc2lvbiAyMjIwMzMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTgyLDYgKzY5ODIsMTEgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RQb2ludGVyVW5sb2NrKAogfQogI2VuZGlmCiAKK3Zv
aWQgV2ViUGFnZVByb3h5Ojpjb250ZW50UnVsZUxpc3RXYXJuaW5nKFdlYkNvcmU6OlVSTCYmIHVy
bCwgVmVjdG9yPFN0cmluZz4mJiBpZGVudGlmaWVycykKK3sKKyAgICBtX25hdmlnYXRpb25DbGll
bnQtPmNvbnRlbnRSdWxlTGlzdFdhcm5pbmcoKnRoaXMsIFdURk1vdmUodXJsKSwgV1RGTW92ZShp
ZGVudGlmaWVycykpOworfQorICAgIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFVSTFNjaGVtZUhh
bmRsZXJGb3JTY2hlbWUoUmVmPFdlYlVSTFNjaGVtZUhhbmRsZXI+JiYgaGFuZGxlciwgY29uc3Qg
U3RyaW5nJiBzY2hlbWUpCiB7CiAgICAgYXV0byBjYW5vbmljYWxpemVkU2NoZW1lID0gVVJMUGFy
c2VyOjptYXliZUNhbm9uaWNhbGl6ZVNjaGVtZShzY2hlbWUpOwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDIyMjAzMykKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQ1LDYgKzEy
NDUsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVxdWVzdFBvaW50ZXJVbmxvY2soKTsKICNlbmRp
ZgogCisgICAgdm9pZCBjb250ZW50UnVsZUxpc3RXYXJuaW5nKFdlYkNvcmU6OlVSTCYmLCBWZWN0
b3I8U3RyaW5nPiYmKTsKKwogICAgIHZvaWQgZGlkQ3JlYXRlTWFpbkZyYW1lKHVpbnQ2NF90IGZy
YW1lSUQpOwogICAgIHZvaWQgZGlkQ3JlYXRlU3ViZnJhbWUodWludDY0X3QgZnJhbWVJRCk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4JKHJldmlzaW9uIDIyMjAzMykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNDczLDYgKzQ3Myw4IEBAIG1l
c3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgUmVxdWVzdFBvaW50ZXJVbmxvY2soKQogI2Vu
ZGlmCiAKKyAgICBDb250ZW50UnVsZUxpc3RXYXJuaW5nKFdlYkNvcmU6OlVSTCB1cmwsIFZlY3Rv
cjxTdHJpbmc+IGlkZW50aWZpZXIpCisKICAgICBJbWFnZU9yTWVkaWFEb2N1bWVudFNpemVDaGFu
Z2VkKFdlYkNvcmU6OkludFNpemUgbmV3U2l6ZSkKIAogICAgIFVzZUZpeGVkTGF5b3V0RGlkQ2hh
bmdlKGJvb2wgdXNlRml4ZWRMYXlvdXQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQ2xpZW50LmgJKHJldmlzaW9uIDIyMjAzMikKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg5LDYgKzg5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNz
RGlkQmVjb21lUmVzcG9uc2l2ZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBwcm9jZXNzRGlkQmVjb21lVW5yZXNwb25zaXZlKFdlYktpdDo6V2ViUGFnZVByb3h5
JikgeyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudFJ1bGVMaXN0V2FybmluZyhXZWJLaXQ6
OldlYlBhZ2VQcm94eSYsIFdlYkNvcmU6OlVSTCYmLCBWZWN0b3I8V1RGOjpTdHJpbmc+JiYpIHsg
fQorCiAgICAgdmlydHVhbCBSZWZQdHI8RGF0YT4gd2ViQ3J5cHRvTWFzdGVyS2V5KFdlYktpdDo6
V2ViUGFnZVByb3h5JikgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAjaWYgVVNFKFFVSUNLX0xPT0sp
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHJldmlzaW9u
IDIyMjAzMykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRU
cmFpdHM8V0tQYWdlTG9hCiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRUcmFpdHM8V0tQ
YWdlTmF2aWdhdGlvbkNsaWVudEJhc2U+IHsKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8V0tQYWdl
TmF2aWdhdGlvbkNsaWVudFYwLCBXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50VjE+IFZlcnNpb25zOwor
ICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50VjAsIFdLUGFnZU5h
dmlnYXRpb25DbGllbnRWMSwgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYyPiBWZXJzaW9uczsKIH07
CiAKIHRlbXBsYXRlPD4gc3RydWN0IENsaWVudFRyYWl0czxXS1BhZ2VQb2xpY3lDbGllbnRCYXNl
PiB7CkBAIC0yMjk0LDYgKzIyOTQsMTggQEAgdm9pZCBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNs
aWVudChXS1BhZwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIG1fY2xpZW50
LmRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QodG9BUEkoJnBhZ2UpLCBtX2NsaWVu
dC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjb250ZW50UnVs
ZUxpc3RXYXJuaW5nKFdlYlBhZ2VQcm94eSYgcGFnZSwgVVJMJiYgdXJsLCBWZWN0b3I8U3RyaW5n
PiYmIGxpc3RJZGVudGlmaWVycykgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFt
X2NsaWVudC5jb250ZW50UnVsZUxpc3RXYXJuaW5nKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IGFwaVN0cmluZ3M7Cisg
ICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGlkZW50aWZpZXIgOiBsaXN0SWRlbnRpZmllcnMp
CisgICAgICAgICAgICAgICAgYXBpU3RyaW5ncy5hcHBlbmQoQVBJOjpTdHJpbmc6OmNyZWF0ZShp
ZGVudGlmaWVyKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fY2xpZW50LmNvbnRlbnRS
dWxlTGlzdFdhcm5pbmcodG9BUEkoJnBhZ2UpLCB0b1VSTFJlZih1cmwuc3RyaW5nKCkuaW1wbCgp
KSwgdG9BUEkoQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUoYXBpU3RyaW5ncykpLnB0cigpKSwg
bV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgfQogICAgICAgICAKICNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICAgICAgUGx1Z2luTW9kdWxlTG9hZFBvbGljeSBk
ZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkKFdlYlBhZ2VQcm94eSYgcGFnZSwgUGx1Z2luTW9kdWxl
TG9hZFBvbGljeSBjdXJyZW50UGx1Z2luTG9hZFBvbGljeSwgQVBJOjpEaWN0aW9uYXJ5KiBwbHVn
aW5JbmZvcm1hdGlvbiwgU3RyaW5nJiB1bmF2YWlsYWJpbGl0eURlc2NyaXB0aW9uKSBvdmVycmlk
ZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlTmF2aWdhdGlvbkNs
aWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFn
ZU5hdmlnYXRpb25DbGllbnQuaAkocmV2aXNpb24gMjIyMDMyKQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tQYWdlTmF2aWdhdGlvbkNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04MCw2ICs4MCw4IEBAIHR5cGVkZWYgdm9pZCAoKldLUGFnZU5hdmlnYXRpb25EaWRFbmROYXYK
IAogdHlwZWRlZiB2b2lkICgqV0tQYWdlTmF2aWdhdGlvbkRpZFJlbW92ZU5hdmlnYXRpb25HZXN0
dXJlU25hcHNob3QpKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKIAor
dHlwZWRlZiB2b2lkICgqV0tQYWdlTmF2aWdhdGlvbkNvbnRlbnRSdWxlTGlzdFdhcm5pbmdDYWxs
YmFjaykoV0tQYWdlUmVmLCBXS1VSTFJlZiwgV0tBcnJheVJlZiwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbyk7CisKIAogdHlwZWRlZiBzdHJ1Y3QgV0tQYWdlTmF2aWdhdGlvbkNsaWVudEJhc2Ugewog
ICAgIGludCB2ZXJzaW9uOwpAQCAtMTQzLDYgKzE0NSwzOCBAQCB0eXBlZGVmIHN0cnVjdCBXS1Bh
Z2VOYXZpZ2F0aW9uQ2xpZW50VjEgCiAgICAgV0tQYWdlTmF2aWdhdGlvbldlYlByb2Nlc3NEaWRU
ZXJtaW5hdGVDYWxsYmFjayB3ZWJQcm9jZXNzRGlkVGVybWluYXRlOwogfSBXS1BhZ2VOYXZpZ2F0
aW9uQ2xpZW50VjE7CiAKK3R5cGVkZWYgc3RydWN0IFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMiB7
CisgICAgV0tQYWdlTmF2aWdhdGlvbkNsaWVudEJhc2UgYmFzZTsKKyAgICAKKyAgICAvLyBWZXJz
aW9uIDAuCisgICAgV0tQYWdlTmF2aWdhdGlvbkRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rp
b25DYWxsYmFjayBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOworICAgIFdLUGFnZU5h
dmlnYXRpb25EZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2VDYWxsYmFjayBkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2U7CisgICAgV0tQYWdlTmF2aWdhdGlvbkRlY2lkZVBv
bGljeUZvclBsdWdpbkxvYWRDYWxsYmFjayBkZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkOworICAg
IFdLUGFnZU5hdmlnYXRpb25EaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbkNhbGxiYWNrIGRp
ZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uOworICAgIFdLUGFnZU5hdmlnYXRpb25EaWRSZWNl
aXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb25DYWxsYmFjayBkaWRSZWNl
aXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb247CisgICAgV0tQYWdlTmF2
aWdhdGlvbkRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb25DYWxsYmFjayBkaWRGYWlsUHJvdmlz
aW9uYWxOYXZpZ2F0aW9uOworICAgIFdLUGFnZU5hdmlnYXRpb25EaWRDb21taXROYXZpZ2F0aW9u
Q2FsbGJhY2sgZGlkQ29tbWl0TmF2aWdhdGlvbjsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGlkRmlu
aXNoTmF2aWdhdGlvbkNhbGxiYWNrIGRpZEZpbmlzaE5hdmlnYXRpb247CisgICAgV0tQYWdlTmF2
aWdhdGlvbkRpZEZhaWxOYXZpZ2F0aW9uQ2FsbGJhY2sgZGlkRmFpbE5hdmlnYXRpb247CisgICAg
V0tQYWdlTmF2aWdhdGlvbkRpZEZhaWxQcm92aXNpb25hbExvYWRJblN1YmZyYW1lQ2FsbGJhY2sg
ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEluU3ViZnJhbWU7CisgICAgV0tQYWdlTmF2aWdhdGlvbkRp
ZEZpbmlzaERvY3VtZW50TG9hZENhbGxiYWNrIGRpZEZpbmlzaERvY3VtZW50TG9hZDsKKyAgICBX
S1BhZ2VOYXZpZ2F0aW9uRGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkNhbGxiYWNrIGRpZFNhbWVE
b2N1bWVudE5hdmlnYXRpb247CisgICAgV0tQYWdlTmF2aWdhdGlvblJlbmRlcmluZ1Byb2dyZXNz
RGlkQ2hhbmdlQ2FsbGJhY2sgcmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2U7CisgICAgV0tQYWdl
TmF2aWdhdGlvbkNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VDYWxsYmFjayBj
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlOworICAgIFdLUGFnZU5hdmlnYXRp
b25EaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2VDYWxsYmFjayBkaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2U7CisgICAgV0tQYWdlTmF2aWdhdGlvbldlYlByb2Nlc3NEaWRD
cmFzaENhbGxiYWNrIHdlYlByb2Nlc3NEaWRDcmFzaDsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uQ29w
eVdlYkNyeXB0b01hc3RlcktleUNhbGxiYWNrIGNvcHlXZWJDcnlwdG9NYXN0ZXJLZXk7CisgICAg
V0tQYWdlTmF2aWdhdGlvbkRpZEJlZ2luTmF2aWdhdGlvbkdlc3R1cmUgZGlkQmVnaW5OYXZpZ2F0
aW9uR2VzdHVyZTsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uV2lsbEVuZE5hdmlnYXRpb25HZXN0dXJl
IHdpbGxFbmROYXZpZ2F0aW9uR2VzdHVyZTsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGlkRW5kTmF2
aWdhdGlvbkdlc3R1cmUgZGlkRW5kTmF2aWdhdGlvbkdlc3R1cmU7CisgICAgV0tQYWdlTmF2aWdh
dGlvbkRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QgZGlkUmVtb3ZlTmF2aWdhdGlv
bkdlc3R1cmVTbmFwc2hvdDsKKyAgICAKKyAgICAvLyBWZXJzaW9uIDEuCisgICAgV0tQYWdlTmF2
aWdhdGlvbldlYlByb2Nlc3NEaWRUZXJtaW5hdGVDYWxsYmFjayB3ZWJQcm9jZXNzRGlkVGVybWlu
YXRlOworICAgIAorICAgIC8vIFZlcnNpb24gMi4KKyAgICBXS1BhZ2VOYXZpZ2F0aW9uQ29udGVu
dFJ1bGVMaXN0V2FybmluZ0NhbGxiYWNrIGNvbnRlbnRSdWxlTGlzdFdhcm5pbmc7Cit9IFdLUGFn
ZU5hdmlnYXRpb25DbGllbnRWMjsKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tOYXZpZ2F0aW9uRGVsZWdhdGVQ
cml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oCShyZXZpc2lvbiAyMjIwMzIpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDggQEAgc3RhdGljIGNvbnN0IFdLTmF2aWdh
dGlvblJlc3BvbnNlUG9saWN5IAogLSAodm9pZClfd2ViVmlld0RpZFJlbW92ZU5hdmlnYXRpb25H
ZXN0dXJlU25hcHNob3Q6KFdLV2ViVmlldyAqKXdlYlZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNv
c3goMTAuMTIpLCBpb3MoMTAuMCkpOwogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2Vi
VmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOihXS05hdmlnYXRpb25BY3Rpb24g
KiluYXZpZ2F0aW9uQWN0aW9uIGRlY2lzaW9uSGFuZGxlcjoodm9pZCAoXikoV0tOYXZpZ2F0aW9u
QWN0aW9uUG9saWN5LCBfV0tXZWJzaXRlUG9saWNpZXMgKikpZGVjaXNpb25IYW5kbGVyIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3N4KDEwLjEyLjMpLCBpb3MoMTAuMykpOwogCistICh2b2lkKV93ZWJW
aWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHdhcm5VUkw6KE5TVVJMICopdXJsIGNvbnRlbnRSdWxl
TGlzdElkZW50aWZpZXJzOihOU0FycmF5PE5TU3RyaW5nICo+ICopaWRlbnRpZmllcnMgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKICNpZiBU
QVJHRVRfT1NfSVBIT05FCiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRp
ZFN0YXJ0TG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWVXaXRoRmlsZU5hbWU6KE5T
U3RyaW5nICopZmlsZU5hbWUgdXRpOihOU1N0cmluZyAqKXV0aTsKIC0gKHZvaWQpX3dlYlZpZXc6
KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRmluaXNoTG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5N
YWluRnJhbWU6KE5TRGF0YSAqKWRvY3VtZW50RGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5oCShyZXZpc2lvbiAyMjIwMzIpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSw4IEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgcmVzb2x2
ZVdlYkdMTG9hZFBvbGljeShXZWJQYWdlUHJveHkmLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6V2ViR0xMb2FkUG9saWN5KT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikgY29uc3QgZmluYWw7CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGNvbnRlbnRSdWxlTGlz
dFdhcm5pbmcoV2ViUGFnZVByb3h5JiwgV2ViQ29yZTo6VVJMJiYsIFZlY3RvcjxTdHJpbmc+JiYp
IGZpbmFsOworCiAgICAgICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihX
ZWJQYWdlUHJveHkmLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmLCBSZWY8V2ViRnJhbWVQ
b2xpY3lMaXN0ZW5lclByb3h5PiYmLCBBUEk6Ok9iamVjdCogdXNlckRhdGEpIG92ZXJyaWRlOwog
ICAgICAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZShXZWJQYWdlUHJv
eHkmLCBBUEk6Ok5hdmlnYXRpb25SZXNwb25zZSYsIFJlZjxXZWJGcmFtZVBvbGljeUxpc3RlbmVy
UHJveHk+JiYsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkgb3ZlcnJpZGU7CiAKQEAgLTIwMSw2ICsy
MDMsNyBAQCBwcml2YXRlOgogICAgICAgICBib29sIHdlYlZpZXdEaWRFbmROYXZpZ2F0aW9uR2Vz
dHVyZVdpdGhOYXZpZ2F0aW9uVG9CYWNrRm9yd2FyZExpc3RJdGVtIDogMTsKICAgICAgICAgYm9v
bCB3ZWJWaWV3V2lsbFNuYXBzaG90QmFja0ZvcndhcmRMaXN0SXRlbSA6IDE7CiAgICAgICAgIGJv
b2wgd2ViVmlld05hdmlnYXRpb25HZXN0dXJlU25hcHNob3RXYXNSZW1vdmVkIDogMTsKKyAgICAg
ICAgYm9vbCB3ZWJWaWV3QmxvY2tBbmRXYXJuVVJMQ29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnMg
OiAxOwogI2lmIFVTRShRVUlDS19MT09LKQogICAgICAgICBib29sIHdlYlZpZXdEaWRTdGFydExv
YWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lIDogMTsKICAgICAgICAgYm9vbCB3ZWJW
aWV3RGlkRmluaXNoTG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUgOiAxOwpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5t
bQkocmV2aXNpb24gMjIyMDMyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2
aWdhdGlvblN0YXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNiArMTY4LDcgQEAgdm9pZCBO
YXZpZ2F0aW9uU3RhdGU6OnNldE5hdmlnYXRpb25EZWxlZwogICAgIG1fbmF2aWdhdGlvbkRlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3RGlkRW5kTmF2aWdhdGlvbkdlc3R1cmVXaXRoTmF2aWdhdGlvblRv
QmFja0ZvcndhcmRMaXN0SXRlbSA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKF93ZWJWaWV3RGlkRW5kTmF2aWdhdGlvbkdlc3R1cmU6d2l0aE5hdmlnYXRpb25Ub0JhY2tG
b3J3YXJkTGlzdEl0ZW06KV07CiAgICAgbV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdXaWxsU25hcHNob3RCYWNrRm9yd2FyZExpc3RJdGVtID0gW2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6d2lsbFNuYXBzaG90QmFja0ZvcndhcmRMaXN0SXRl
bTopXTsKICAgICBtX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld05hdmlnYXRpb25H
ZXN0dXJlU25hcHNob3RXYXNSZW1vdmVkID0gW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoX3dlYlZpZXdEaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90OildOwor
ICAgIG1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QmxvY2tBbmRXYXJuVVJMQ29u
dGVudFJ1bGVMaXN0SWRlbnRpZmllcnMgPSBbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihfd2ViVmlldzp3YXJuVVJMOmNvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzOildOwog
I2lmIFVTRShRVUlDS19MT09LKQogICAgIG1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3RGlkU3RhcnRMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZSA9IFtkZWxlZ2F0
ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmRpZFN0YXJ0TG9hZEZvclF1
aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWVXaXRoRmlsZU5hbWU6dXRpOildOwogICAgIG1fbmF2
aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmluaXNoTG9hZEZvclF1aWNrTG9va0Rv
Y3VtZW50SW5NYWluRnJhbWUgPSBbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihfd2ViVmlldzpkaWRGaW5pc2hMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZTop
XTsKQEAgLTQ1NCw2ICs0NTUsMjEgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25D
bGllbnQ6OgogICAgIH0KIH0KIAordm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGll
bnQ6OmNvbnRlbnRSdWxlTGlzdFdhcm5pbmcoV2ViUGFnZVByb3h5JiwgV2ViQ29yZTo6VVJMJiYg
dXJsLCBWZWN0b3I8U3RyaW5nPiYmIGxpc3RJZGVudGlmaWVycykKK3sKKyAgICBpZiAoIW1fbmF2
aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QmxvY2tBbmRX
YXJuVVJMQ29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnMpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9u
RGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGF1dG8gaWRlbnRpZmllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bGlzdElkZW50aWZpZXJzLnNpemUoKV0pOworICAgIGZv
ciAoY29uc3QgYXV0byYgaWRlbnRpZmllciA6IGxpc3RJZGVudGlmaWVycykKKyAgICAgICAgW2lk
ZW50aWZpZXJzIGFkZE9iamVjdDppZGVudGlmaWVyXTsKKyAgICBbKGlkIDxXS05hdmlnYXRpb25E
ZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25T
dGF0ZS5tX3dlYlZpZXcgd2FyblVSTDp1cmwgY29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnM6aWRl
bnRpZmllcnMuZ2V0KCldOworfQorICAgIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRp
b25DbGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZShXZWJQYWdlUHJveHkm
LCBBUEk6Ok5hdmlnYXRpb25SZXNwb25zZSYgbmF2aWdhdGlvblJlc3BvbnNlLCBSZWY8V2ViRnJh
bWVQb2xpY3lMaXN0ZW5lclByb3h5PiYmIGxpc3RlbmVyLCBBUEk6Ok9iamVjdCogdXNlckRhdGEp
CiB7CiAgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZURlY2lzaW9uSGFuZGxl
cikgewpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJldmlzaW9uIDIyMjAzMikKKysrIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MDMsNiArODAzLDEyIEBAIFJlZlB0cjxJY29uPiBXZWJDaHJv
bWVDbGllbnQ6OmNyZWF0ZUljb24KIAogI2VuZGlmCiAKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpj
b250ZW50UnVsZUxpc3RXYXJuaW5nKGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJsLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgaWRlbnRpZmllcnMpCit7CisgICAgaWYgKCFpZGVudGlmaWVycy5pc0VtcHR5
KCkpCisgICAgICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNvbnRlbnRS
dWxlTGlzdFdhcm5pbmcodXJsLCBpZGVudGlmaWVycykpOworfQorCiB2b2lkIFdlYkNocm9tZUNs
aWVudDo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKGNvbnN0IFZlY3RvcjxSZWZQdHI8RWxlbWVu
dD4+JiBlbGVtZW50cykKIHsKICAgICByZXR1cm4gbV9wYWdlLmluamVjdGVkQnVuZGxlRm9ybUNs
aWVudCgpLmRpZEFzc29jaWF0ZUZvcm1Db250cm9scygmbV9wYWdlLCBlbGVtZW50cyk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiAyMjIwMzIpCisrKyBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5Myw2ICsxOTMsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVxdWVzdFBvaW50ZXJVbmxv
Y2soKSBmaW5hbDsKICNlbmRpZgogCisgICAgdm9pZCBjb250ZW50UnVsZUxpc3RXYXJuaW5nKGNv
bnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JikgZmluYWw7CisgICAgCiAg
ICAgdm9pZCBkaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMoY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJD
b3JlOjpFbGVtZW50Pj4mKSBmaW5hbDsKICAgICBib29sIHNob3VsZE5vdGlmeU9uRm9ybUNoYW5n
ZXMoKSBmaW5hbDsKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0NoYW5nZUxvZwkocmV2aXNpb24gMjIyMDk1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTctMDktMTUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgV0tDb250ZW50UnVsZUxpc3Qg
d2FybiBhY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc3MDEzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTA3MzkzNj4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6b3BlcmF0b3I8PCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Db250ZW50UnVsZUxpc3RXYXJuaW5nLm1tOiBB
ZGRlZC4KKyAgICAgICAgKC1bV2FybmluZ05hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzp3YXJu
VVJMOmNvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzOl0pOgorICAgICAgICAoLVtXYXJuaW5nTmF2
aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6c3RhcnRVUkxTY2hlbWVUYXNrOl0pOgorICAgICAgICAo
LVtXYXJuaW5nTmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6c3RvcFVSTFNjaGVtZVRhc2s6XSk6
CisgICAgICAgIChURVNUKToKKwogMjAxNy0wOS0xNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBh
cHBsZS5jb20+CiAKICAgICAgICAgQWRkIGFuIFVSTCBtZXRob2QgdG8gcmVtb3ZlIGJvdGggcXVl
cnkgc3RyaW5nIGFuZCBmcmFnbWVudCBpZGVudGlmaWVyCkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjIyMDMyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw2ICsy
MzcsNyBAQAogCQk1QzlFNTk0MzFEM0VCNUFDMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5k
Yi13YWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUM5RTU5NDAxRDNFQjFERTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGItd2FsICov
OyB9OwogCQk1Q0IxOEJBODFGNTY0NUUzMDBFRTIzQzQgLyogQ2xpY2tBdXRvRmlsbEJ1dHRvbi5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQjE4QkE3
MUY1NjQ1QjIwMEVFMjNDNCAvKiBDbGlja0F1dG9GaWxsQnV0dG9uLm1tICovOyB9OwogCQk1Q0I0
MEI0RTFGNEI5OEQzMDA3REM3QjkgLyogVUlEZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQjQwQjREMUY0Qjk4QkUwMDdEQzdCOSAvKiBV
SURlbGVnYXRlLm1tICovOyB9OworCQk1Q0JFRDgyODFGNkI3MkQ4MDBCMEVGOEMgLyogQ29udGVu
dFJ1bGVMaXN0V2FybmluZy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDQkVEODI3MUY2QjcwRTYwMEIwRUY4QyAvKiBDb250ZW50UnVsZUxpc3RXYXJu
aW5nLm1tICovOyB9OwogCQk1Q0UzNTREOTFFNzBEQTVDMDBCRUZFM0IgLyogV0tDb250ZW50RXh0
ZW5zaW9uU3RvcmUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1Q0UzNTREODFFNzBEOUMzMDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUu
bW0gKi87IH07CiAJCTVFNEIxRDJFMUQ0MDRDNjEwMDA1MzYyMSAvKiBXS1Njcm9sbFZpZXdEZWxl
Z2F0ZUNyYXNoLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUU0QjFEMkMxRDQwNEM2MTAwMDUzNjIxIC8qIFdLU2Nyb2xsVmlld0RlbGVnYXRlQ3Jhc2gu
bW0gKi87IH07CiAJCTYzMUVGRkY2MUU3QjVFOEQwMEQyRUJCOCAvKiBHZW9sb2NhdGlvbi5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzMUVGRkY1MUU3
QjVFOEQwMEQyRUJCOCAvKiBHZW9sb2NhdGlvbi5tbSAqLzsgfTsKQEAgLTEzMzEsNiArMTMzMiw3
IEBACiAJCTVDOUU1OTQwMUQzRUIxREUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiLXdh
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7
IHBhdGggPSAiQXBwbGljYXRpb25DYWNoZS5kYi13YWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1Q0IxOEJBNzFGNTY0NUIyMDBFRTIzQzQgLyogQ2xpY2tBdXRvRmlsbEJ1dHRvbi5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENsaWNrQXV0b0ZpbGxC
dXR0b24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQjQwQjREMUY0Qjk4QkUw
MDdEQzdCOSAvKiBVSURlbGVnYXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gVUlEZWxlZ2F0ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNC
RUQ4MjcxRjZCNzBFNjAwQjBFRjhDIC8qIENvbnRlbnRSdWxlTGlzdFdhcm5pbmcubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb250ZW50UnVsZUxpc3RXYXJuaW5n
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0UzNTREODFFNzBEOUMzMDBCRUZF
M0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUU0QjFEMkMxRDQwNEM2MTAwMDUzNjIxIC8qIFdLU2Nyb2xsVmll
d0RlbGVnYXRlQ3Jhc2gubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBXS1Njcm9sbFZpZXdEZWxlZ2F0ZUNyYXNoLm1tOyBwYXRoID0gLi4vaW9zL1dLU2Nyb2xsVmll
d0RlbGVnYXRlQ3Jhc2gubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYzMUVGRkY1
MUU3QjVFOEQwMEQyRUJCOCAvKiBHZW9sb2NhdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IEdlb2xvY2F0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTkzMSw2ICsxOTMzLDcgQEAKIAkJCQlBMThBQThDQzFDM0ZBMjE4MDA5QjJCOTcg
LyogQ29udGVudEZpbHRlcmluZy5oICovLAogCQkJCUExNEZDNTg2MUI4OTkxQjYwMEQxMDdFQiAv
KiBDb250ZW50RmlsdGVyaW5nLm1tICovLAogCQkJCUExNEZDNTg5MUI4OTkyNzEwMEQxMDdFQiAv
KiBDb250ZW50RmlsdGVyaW5nUGx1Z0luLm1tICovLAorCQkJCTVDQkVEODI3MUY2QjcwRTYwMEIw
RUY4QyAvKiBDb250ZW50UnVsZUxpc3RXYXJuaW5nLm1tICovLAogCQkJCTVDMjkzNjkxMUQ1QkY2
M0UwMERFQUIxRSAvKiBDb29raWVBY2NlcHRQb2xpY3kubW0gKi8sCiAJCQkJOTk5OTEwOEExRjM5
M0M4QjAwOEFENDU1IC8qIENvcHlpbmcubW0gKi8sCiAJCQkJMkRDNENGNzYxRDJEOUREODAwRUND
Qzk0IC8qIERhdGFEZXRlY3Rpb24ubW0gKi8sCkBAIC0zMTQ3LDYgKzMxNTAsNyBAQAogCQkJCTdD
QjE4NEM2MUFBM0YyMTAwMDY2RURGRCAvKiBDb250ZW50RXh0ZW5zaW9ucy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBMTE0NkE4RDFEMkQ3MTE1MDAwRkU3MTAgLyogQ29udGVudEZpbHRlcmluZy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUExNEZDNTg4MUI4OTkxQkYwMEQxMDdFQiAvKiBDb250ZW50
RmlsdGVyaW5nLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNUNCRUQ4MjgxRjZCNzJEODAwQjBFRjhD
IC8qIENvbnRlbnRSdWxlTGlzdFdhcm5pbmcubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VC
ODFBNDExQTdFMDA0NDdDNEMgLyogQ29udGV4dE1lbnVDYW5Db3B5VVJMLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzdGQjcyOTcxREIyRTgyRjAwRTQxQkU0IC8qIENvbnRleHRNZW51RGVmYXVsdEl0
ZW1zSGF2ZVRhZ3MubW0gaW4gU291cmNlcyAqLywKIAkJCQk4MzQ5RDNDMjFEQjk2RERFMDA0QTlG
NjUgLyogQ29udGV4dE1lbnVEb3dubG9hZC5tbSBpbiBTb3VyY2VzICovLApAQCAtMzQ3Myw2ICsz
NDc3LDcgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgK
IAkJCQkzN0U3REQ2NzFFQTA3MUYzMDA5QjM5NkQgLyogQWRkaXRpb25hbFJlYWRBY2Nlc3NBbGxv
d2VkVVJMc1BsdWdpbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCTc1NENFQzgxMUY2NzIyRjIwMEQw
MDM5QSAvKiBBdXRvRmlsbEF2YWlsYWJsZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTM3NEI3QTYx
MURGMzcxQ0YwMEFDQ0I2QyAvKiBCdW5kbGVFZGl0aW5nRGVsZWdhdGVQbHVnSW4ubW0gaW4gU291
cmNlcyAqLywKIAkJCQlBMTNFQkJCMDFCODc0MzZGMDAwOTcxMTAgLyogQnVuZGxlUGFyYW1ldGVy
c1BsdWdJbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTM3QTcwOUFGMUUzRUE5N0UwMENBNTk2OSAv
KiBCdW5kbGVSYW5nZUhhbmRsZVBsdWdJbi5tbSBpbiBTb3VyY2VzICovLApAQCAtMzQ4MSw3ICsz
NDg2LDYgQEAKIAkJCQlBMTRGQzU4QjFCODk5MjcxMDBEMTA3RUIgLyogQ29udGVudEZpbHRlcmlu
Z1BsdWdJbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExM0VCQkFCMUI4NzQzNDYwMDA5NzExMCAv
KiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE0RjgxQ0Yx
QkRGRkQ1MzAwNEU2NzJFIC8qIFJlbW90ZU9iamVjdFJlZ2lzdHJ5UGx1Z0luLm1tIGluIFNvdXJj
ZXMgKi8sCi0JCQkJNzU0Q0VDODExRjY3MjJGMjAwRDAwMzlBIC8qIEF1dG9GaWxsQXZhaWxhYmxl
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEyRERDMDIxRTgzN0MyNDAwQ0Y2Q0FFIC8qIFJlbmRl
cmVkSW1hZ2VXaXRoT3B0aW9uc1BsdWdJbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDODgyRTA5
MUM4MEM2MzAwMDZCRjczMSAvKiBVc2VyQ29udGVudFdvcmxkUGx1Z0luLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0M4M0UwM0QxRDBBNjBENjAwRkVCQ0YzIC8qIFV0aWxpdGllc0NvY29hLm1tIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29u
dGVudEV4dGVuc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAJKHJldmlzaW9uIDIyMjAzMikKKysrIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDggQEAgaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0
b3I8PChzdGQ6Om9zdAogICAgICAgICByZXR1cm4gb3MgPDwgIkFjdGlvblR5cGU6Oklnbm9yZVBy
ZXZpb3VzUnVsZXMiOwogICAgIGNhc2UgQWN0aW9uVHlwZTo6TWFrZUhUVFBTOgogICAgICAgICBy
ZXR1cm4gb3MgPDwgIkFjdGlvblR5cGU6Ok1ha2VIVFRQUyI7CisgICAgY2FzZSBBY3Rpb25UeXBl
OjpXYXJuOgorICAgICAgICByZXR1cm4gb3MgPDwgIkFjdGlvblR5cGU6Oldhcm4iOwogICAgIGNh
c2UgQWN0aW9uVHlwZTo6SW52YWxpZEFjdGlvbjoKICAgICAgICAgcmV0dXJuIG9zIDw8ICJBY3Rp
b25UeXBlOjpJbnZhbGlkQWN0aW9uIjsKICAgICB9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0NvbnRlbnRSdWxlTGlzdFdhcm5pbmcubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Db250ZW50UnVsZUxpc3RX
YXJuaW5nLm1tCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvQ29udGVudFJ1bGVMaXN0V2FybmluZy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgV0tfQVBJ
X0VOQUJMRUQKKworI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgPFdlYktp
dC9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0aW9u
RGVsZWdhdGVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVIYW5kbGVyLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXcuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworc3RhdGljIGJv
b2wgcmVjZWl2ZWRXYXJuaW5nOworc3RhdGljIGJvb2wgcmVjZWl2ZWRBbGVydDsKKworQGludGVy
ZmFjZSBXYXJuaW5nRGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2
YXRlLCBXS1VSTFNjaGVtZUhhbmRsZXIsIFdLVUlEZWxlZ2F0ZT4KK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIFdhcm5pbmdEZWxlZ2F0ZQorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3
ZWJWaWV3IHdhcm5VUkw6KE5TVVJMICopdXJsIGNvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzOihO
U0FycmF5PE5TU3RyaW5nICo+ICopaWRlbnRpZmllcnMKK3sKKyAgICBFWFBFQ1RfU1RSRVEodXJs
LmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcsICJhcGl0ZXN0Oi8vL21hdGNoIik7CisgICAgRVhQ
RUNUX0VRKGlkZW50aWZpZXJzLmNvdW50LCAxdSk7CisgICAgRVhQRUNUX1NUUkVRKFtpZGVudGlm
aWVycyBvYmplY3RBdEluZGV4OjBdLlVURjhTdHJpbmcsICJ0ZXN0aWRlbnRpZmllciIpOworICAg
IHJlY2VpdmVkV2FybmluZyA9IHRydWU7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3
ICopd2ViVmlldyBzdGFydFVSTFNjaGVtZVRhc2s6KGlkIDxXS1VSTFNjaGVtZVRhc2s+KXVybFNj
aGVtZVRhc2sKK3sKKyAgICBbdXJsU2NoZW1lVGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6W1tbTlNV
UkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dXJsU2NoZW1lVGFzay5yZXF1ZXN0LlVSTCBN
SU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOjAgdGV4dEVuY29kaW5n
TmFtZTpuaWxdIGF1dG9yZWxlYXNlXV07CisgICAgW3VybFNjaGVtZVRhc2sgZGlkRmluaXNoXTsK
K30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHN0b3BVUkxTY2hlbWVU
YXNrOihpZCA8V0tVUkxTY2hlbWVUYXNrPil1cmxTY2hlbWVUYXNrCit7Cit9CisKKy0gKHZvaWQp
d2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8g
KilmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRs
ZXIKK3sKKyAgICByZWNlaXZlZEFsZXJ0ID0gdHJ1ZTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcigp
OworfQorCitAZW5kCisKK3N0YXRpYyBSZXRhaW5QdHI8V0tDb250ZW50UnVsZUxpc3Q+IG1ha2VX
YXJuQ29udGVudFJ1bGVMaXN0KCkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZzsK
KyAgICBfX2Jsb2NrIFJldGFpblB0cjxXS0NvbnRlbnRSdWxlTGlzdD4gY29udGVudFJ1bGVMaXN0
OworICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCB0aGlzIHdvcmsgd2l0aG91dCB0aGUgYmxvY2sg
YWN0aW9uPworICAgIFtbV0tDb250ZW50UnVsZUxpc3RTdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBp
bGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOkAidGVzdGlkZW50aWZpZXIiIGVuY29kZWRD
b250ZW50UnVsZUxpc3Q6QCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwid2FyblwifSxcInRyaWdn
ZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJtYXRjaFwifX1dIiBjb21wbGV0aW9uSGFuZGxlcjpeKFdL
Q29udGVudFJ1bGVMaXN0ICpsaXN0LCBOU0Vycm9yICplcnJvcikgeworICAgICAgICBjb250ZW50
UnVsZUxpc3QgPSBsaXN0OworICAgICAgICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsKKyAgICB9XTsK
KyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcpOworICAgIHJldHVy
biBjb250ZW50UnVsZUxpc3Q7Cit9CisKK1RFU1QoV2ViS2l0LCBDb250ZW50UnVsZUxpc3RXYXJu
aW5nTWFpblJlc291cmNlKQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbV2Fybmlu
Z0RlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHRO
UyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBbW2NvbmZpZ3Vy
YXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRDb250ZW50UnVsZUxpc3Q6bWFrZVdhcm5D
b250ZW50UnVsZUxpc3QoKS5nZXQoKV07CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1l
SGFuZGxlcjpkZWxlZ2F0ZS5nZXQoKSBmb3JVUkxTY2hlbWU6QCJhcGl0ZXN0Il07CisgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01h
a2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCld
KTsKKyAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwor
ICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05T
VVJMIFVSTFdpdGhTdHJpbmc6QCJhcGl0ZXN0Oi8vL21hdGNoIl1dXTsKKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkV2FybmluZyk7Cit9CisKK1RFU1QoV2ViS2l0LCBDb250
ZW50UnVsZUxpc3RXYXJuaW5nU3VicmVzb3VyY2UpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFk
b3B0TlMoW1tXYXJuaW5nRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIGNvbmZpZ3Vy
YXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwor
ICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZENvbnRlbnRSdWxl
TGlzdDptYWtlV2FybkNvbnRlbnRSdWxlTGlzdCgpLmdldCgpXTsKKyAgICBbY29uZmlndXJhdGlv
biBzZXRVUkxTY2hlbWVIYW5kbGVyOmRlbGVnYXRlLmdldCgpIGZvclVSTFNjaGVtZTpAImFwaXRl
c3QiXTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxl
Z2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07
CisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6QCI8c2NyaXB0PmZldGNoKCdtYXRjaCcpLnRo
ZW4oZnVuY3Rpb24ocmVzcG9uc2Upe2FsZXJ0KCdmZXRjaCBjb21wbGV0ZScpfSk8L3NjcmlwdD4i
IGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJhcGl0ZXN0Oi8vLyJdXTsKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkQWxlcnQpOworICAgIEVYUEVDVF9UUlVFKHJl
Y2VpdmVkV2FybmluZyk7Cit9CisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321507</attachid>
            <date>2017-09-21 19:38:21 -0700</date>
            <delta_ts>2017-09-25 11:15:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177013-20170921193820.patch</filename>
            <type>text/plain</type>
            <size>68417</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjMzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE3LTA5LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFdLQ29u
dGVudFJ1bGVMaXN0IG5vdGlmeSBhY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MDEzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
MTA3MzkzNj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IG5ldyBBUEkgdGVzdHMuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6Omhhc1N0cmluZ0FyZ3VtZW50KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OnJlc29sdmVQZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpzZXJpYWxpemVBY3Rpb25zKToKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5
KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaDoK
KyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpsb2FkQWN0aW9uKToKKyAgICAg
ICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpkZXNlcmlhbGl6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpkZXNlcmlhbGl6ZVR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbjo6c2VyaWFsaXpl
ZExlbmd0aCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1
bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb246OkFjdGlv
bik6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5z
aW9uc0JhY2tlbmQ6OnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6
OnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JQaW5nTG9hZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6YXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KToKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIGxvYWRlci9QaW5n
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVs
ZXNGb3JMb2FkKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFsKToKKyAg
ICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSk6CisgICAgICAg
ICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmFwcGx5QmxvY2tlZFN0YXR1cyk6CisgICAgICAg
ICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oOgorICAgICAgICAqIHBhZ2Uv
Q2hyb21lQ2xpZW50Lmg6CisKIDIwMTctMDktMjEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggYWxsIGJ1aWxkcyBhZnRlciByMjIyMzI1
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
QWN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmgJKHJldmlzaW9uIDIyMjMzMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDggKzI3LDEyIEBACiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQogCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBQYWdlOwogY2xhc3MgUmVz
b3VyY2VSZXF1ZXN0OwogCiBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewpAQCAtMzksMTcg
KzQzLDM0IEBAIGVudW0gY2xhc3MgQWN0aW9uVHlwZSA6IHVpbnQ4X3QgewogICAgIEJsb2NrTG9h
ZCwKICAgICBCbG9ja0Nvb2tpZXMsCiAgICAgQ1NTRGlzcGxheU5vbmVTZWxlY3RvciwKLSAgICBJ
Z25vcmVQcmV2aW91c1J1bGVzID0gMywKLSAgICBNYWtlSFRUUFMgPSA0LAorICAgIE5vdGlmeSwK
KyAgICBJZ25vcmVQcmV2aW91c1J1bGVzLAorICAgIE1ha2VIVFRQUywKIH07CiAKK3N0YXRpYyBp
bmxpbmUgYm9vbCBoYXNTdHJpbmdBcmd1bWVudChBY3Rpb25UeXBlIGFjdGlvblR5cGUpCit7Cisg
ICAgc3dpdGNoIChhY3Rpb25UeXBlKSB7CisgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5
Tm9uZVNlbGVjdG9yOgorICAgIGNhc2UgQWN0aW9uVHlwZTo6Tm90aWZ5OgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrTG9hZDoKKyAgICBjYXNlIEFjdGlv
blR5cGU6OkJsb2NrQ29va2llczoKKyAgICBjYXNlIEFjdGlvblR5cGU6Oklnbm9yZVByZXZpb3Vz
UnVsZXM6CisgICAgY2FzZSBBY3Rpb25UeXBlOjpNYWtlSFRUUFM6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHN0cnVjdCBCbG9ja2VkU3RhdHVzIHsKICAg
ICBib29sIGJsb2NrZWRMb2FkIHsgZmFsc2UgfTsKICAgICBib29sIGJsb2NrZWRDb29raWVzIHsg
ZmFsc2UgfTsKICAgICBib29sIG1hZGVIVFRQUyB7IGZhbHNlIH07CisgICAgSGFzaFNldDxzdGQ6
OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBub3RpZmljYXRpb25zOwogfTsKIAotV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseUJsb2NrZWRTdGF0dXNUb1JlcXVlc3QoY29uc3QgQmxvY2tlZFN0YXR1cyYs
IFJlc291cmNlUmVxdWVzdCYpOworV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseUJsb2NrZWRTdGF0
dXNUb1JlcXVlc3QoY29uc3QgQmxvY2tlZFN0YXR1cyYsIFBhZ2UqLCBSZXNvdXJjZVJlcXVlc3Qm
KTsKIAogfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKIApJbmRleDogU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMjIzMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OCw0OCArNjgsNDEgQEAgc3RhdGljIHZvaWQgc2VyaWFsaXplU3RyaW5nKFZlY3RvcjxT
ZXJpYQogICAgIH0KIH0KIAorLy8gY3NzLWRpc3BsYXktbm9uZSBjb21iaW5pbmcgaXMgc3BlY2lh
bCBiZWNhdXNlIHdlIGNvbWJpbmUgdGhlIHN0cmluZyBhcmd1bWVudHMgd2l0aCBjb21tYXMgYmVj
YXVzZSB3ZSBrbm93IHRoZXkgYXJlIGNzcyBzZWxlY3RvcnMuCiBzdHJ1Y3QgUGVuZGluZ0Rpc3Bs
YXlOb25lQWN0aW9ucyB7Ci0gICAgVmVjdG9yPFN0cmluZz4gc2VsZWN0b3JzOwotICAgIFZlY3Rv
cjx1bnNpZ25lZD4gY2xpZW50TG9jYXRpb25zOworICAgIFN0cmluZ0J1aWxkZXIgY29tYmluZWRT
ZWxlY3RvcnM7CisgICAgVmVjdG9yPHVpbnQzMl90PiBjbGllbnRMb2NhdGlvbnM7CiB9OworCiB1
c2luZyBQZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25zTWFwID0gSGFzaE1hcDxUcmlnZ2VyLCBQZW5k
aW5nRGlzcGxheU5vbmVBY3Rpb25zLCBUcmlnZ2VySGFzaCwgVHJpZ2dlckhhc2hUcmFpdHM+Owog
Ci1zdGF0aWMgdm9pZCByZXNvbHZlUGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9ucyhWZWN0b3I8U2Vy
aWFsaXplZEFjdGlvbkJ5dGU+JiBhY3Rpb25zLCBWZWN0b3I8dW5zaWduZWQ+JiBhY3Rpb25Mb2Nh
dGlvbnMsIFBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnNNYXAmIHBlbmRpbmdEaXNwbGF5Tm9uZUFj
dGlvbnNNYXApCitzdGF0aWMgdm9pZCByZXNvbHZlUGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9ucyhW
ZWN0b3I8U2VyaWFsaXplZEFjdGlvbkJ5dGU+JiBhY3Rpb25zLCBWZWN0b3I8dWludDMyX3Q+JiBh
Y3Rpb25Mb2NhdGlvbnMsIFBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnNNYXAmIG1hcCkKIHsKLSAg
ICBmb3IgKGF1dG8mIHNsb3QgOiBwZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25zTWFwKSB7Ci0gICAg
ICAgIFBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnMmIHBlbmRpbmdBY3Rpb25zID0gc2xvdC52YWx1
ZTsKLQotICAgICAgICBTdHJpbmdCdWlsZGVyIGNvbWJpbmVkU2VsZWN0b3JzOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGVuZGluZ0FjdGlvbnMuc2VsZWN0b3JzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgICAgICBjb21iaW5lZFNlbGVj
dG9ycy5hcHBlbmQoJywnKTsKLSAgICAgICAgICAgIGNvbWJpbmVkU2VsZWN0b3JzLmFwcGVuZChw
ZW5kaW5nQWN0aW9ucy5zZWxlY3RvcnNbaV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWdu
ZWQgYWN0aW9uTG9jYXRpb24gPSBhY3Rpb25zLnNpemUoKTsKKyAgICBmb3IgKGF1dG8mIHBlbmRp
bmdEaXNwbGF5Tm9uZUFjdGlvbnMgOiBtYXAudmFsdWVzKCkpIHsKKyAgICAgICAgdWludDMyX3Qg
YWN0aW9uTG9jYXRpb24gPSBhY3Rpb25zLnNpemUoKTsKICAgICAgICAgYWN0aW9ucy5hcHBlbmQo
c3RhdGljX2Nhc3Q8U2VyaWFsaXplZEFjdGlvbkJ5dGU+KEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlO
b25lU2VsZWN0b3IpKTsKLSAgICAgICAgc2VyaWFsaXplU3RyaW5nKGFjdGlvbnMsIGNvbWJpbmVk
U2VsZWN0b3JzLnRvU3RyaW5nKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGNsaWVudExvY2F0
aW9uIDogcGVuZGluZ0FjdGlvbnMuY2xpZW50TG9jYXRpb25zKQorICAgICAgICBzZXJpYWxpemVT
dHJpbmcoYWN0aW9ucywgcGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9ucy5jb21iaW5lZFNlbGVjdG9y
cy50b1N0cmluZygpKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBjbGllbnRMb2NhdGlvbiA6IHBl
bmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnMuY2xpZW50TG9jYXRpb25zKQogICAgICAgICAgICAgYWN0
aW9uTG9jYXRpb25zW2NsaWVudExvY2F0aW9uXSA9IGFjdGlvbkxvY2F0aW9uOwogICAgIH0KLSAg
ICBwZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25zTWFwLmNsZWFyKCk7CisgICAgbWFwLmNsZWFyKCk7
CiB9CiAKIHN0YXRpYyBWZWN0b3I8dW5zaWduZWQ+IHNlcmlhbGl6ZUFjdGlvbnMoY29uc3QgVmVj
dG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiYgcnVsZUxpc3QsIFZlY3RvcjxTZXJpYWxpemVkQWN0
aW9uQnl0ZT4mIGFjdGlvbnMpCiB7CiAgICAgQVNTRVJUKCFhY3Rpb25zLnNpemUoKSk7CiAKLSAg
ICBWZWN0b3I8dW5zaWduZWQ+IGFjdGlvbkxvY2F0aW9uczsKKyAgICBWZWN0b3I8dWludDMyX3Q+
IGFjdGlvbkxvY2F0aW9uczsKIAotICAgIC8vIE9yZGVyIG9ubHkgbWF0dGVycyBiZWNhdXNlIG9m
IElnbm9yZVByZXZpb3VzUnVsZXMuIEFsbCBvdGhlciBpZGVudGljYWwgYWN0aW9ucyBjYW4gYmUg
Y29tYmluZWQgYmV0d2VlbiBlYWNoIElnbm9yZVByZXZpb3VzUnVsZXMKLSAgICAvLyBhbmQgQ1NT
RGlzcGxheU5vbmUgc3RyaW5ncyBjYW4gYmUgY29tYmluZWQgaWYgdGhlaXIgdHJpZ2dlcnMgYXJl
IGlkZW50aWNhbC4KICAgICB1c2luZyBBY3Rpb25Mb2NhdGlvbiA9IHVpbnQzMl90OwogICAgIHVz
aW5nIEFjdGlvbk1hcCA9IEhhc2hNYXA8UmVzb3VyY2VGbGFncywgQWN0aW9uTG9jYXRpb24sIERl
ZmF1bHRIYXNoPFJlc291cmNlRmxhZ3M+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlI
YXNoVHJhaXRzPFJlc291cmNlRmxhZ3M+PjsKKyAgICB1c2luZyBTdHJpbmdBY3Rpb25NYXAgPSBI
YXNoTWFwPHN0ZDo6cGFpcjxTdHJpbmcsIFJlc291cmNlRmxhZ3M+LCBBY3Rpb25Mb2NhdGlvbiwg
RGVmYXVsdEhhc2g8c3RkOjpwYWlyPFN0cmluZywgUmVzb3VyY2VGbGFncz4+OjpIYXNoLCBQYWly
SGFzaFRyYWl0czxIYXNoVHJhaXRzPFN0cmluZz4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhh
c2hUcmFpdHM8UmVzb3VyY2VGbGFncz4+PjsKICAgICBBY3Rpb25NYXAgYmxvY2tMb2FkQWN0aW9u
c01hcDsKICAgICBBY3Rpb25NYXAgYmxvY2tDb29raWVzQWN0aW9uc01hcDsKICAgICBQZW5kaW5n
RGlzcGxheU5vbmVBY3Rpb25zTWFwIGNzc0Rpc3BsYXlOb25lQWN0aW9uc01hcDsKICAgICBBY3Rp
b25NYXAgaWdub3JlUHJldmlvdXNSdWxlQWN0aW9uc01hcDsKICAgICBBY3Rpb25NYXAgbWFrZUhU
VFBTQWN0aW9uc01hcDsKKyAgICBTdHJpbmdBY3Rpb25NYXAgbm90aWZ5QWN0aW9uc01hcDsKIAog
ICAgIGZvciAodW5zaWduZWQgcnVsZUluZGV4ID0gMDsgcnVsZUluZGV4IDwgcnVsZUxpc3Quc2l6
ZSgpOyArK3J1bGVJbmRleCkgewogICAgICAgICBjb25zdCBDb250ZW50RXh0ZW5zaW9uUnVsZSYg
cnVsZSA9IHJ1bGVMaXN0W3J1bGVJbmRleF07CkBAIC0xMjIsNiArMTE1LDcgQEAgc3RhdGljIFZl
Y3Rvcjx1bnNpZ25lZD4gc2VyaWFsaXplQWN0aW9ucwogICAgICAgICAgICAgYmxvY2tDb29raWVz
QWN0aW9uc01hcC5jbGVhcigpOwogICAgICAgICAgICAgY3NzRGlzcGxheU5vbmVBY3Rpb25zTWFw
LmNsZWFyKCk7CiAgICAgICAgICAgICBtYWtlSFRUUFNBY3Rpb25zTWFwLmNsZWFyKCk7CisgICAg
ICAgICAgICBub3RpZnlBY3Rpb25zTWFwLmNsZWFyKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgaWdub3JlUHJldmlvdXNSdWxlQWN0aW9uc01hcC5jbGVhcigpOwogCkBAIC0xMzEsMTYg
KzEyNSwxNyBAQCBzdGF0aWMgVmVjdG9yPHVuc2lnbmVkPiBzZXJpYWxpemVBY3Rpb25zCiAgICAg
ICAgICAgICBhY3Rpb25Mb2NhdGlvbnMuYXBwZW5kKGFjdGlvbnMuc2l6ZSgpKTsKIAogICAgICAg
ICAgICAgYWN0aW9ucy5hcHBlbmQoc3RhdGljX2Nhc3Q8U2VyaWFsaXplZEFjdGlvbkJ5dGU+KGFj
dGlvblR5cGUpKTsKLSAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09IEFjdGlvblR5cGU6OkNT
U0Rpc3BsYXlOb25lU2VsZWN0b3IpCisgICAgICAgICAgICBpZiAoaGFzU3RyaW5nQXJndW1lbnQo
YWN0aW9uVHlwZSkpCiAgICAgICAgICAgICAgICAgc2VyaWFsaXplU3RyaW5nKGFjdGlvbnMsIHJ1
bGUuYWN0aW9uKCkuc3RyaW5nQXJndW1lbnQoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgQVNTRVJUKHJ1bGUuYWN0aW9uKCkuc3RyaW5nQXJndW1lbnQoKS5pc051bGwoKSk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIFJlc291cmNlRmxh
Z3MgZmxhZ3MgPSBydWxlLnRyaWdnZXIoKS5mbGFnczsKICAgICAgICAgdW5zaWduZWQgYWN0aW9u
TG9jYXRpb24gPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgICAg
IAotICAgICAgICBhdXRvIGZpbmRPck1ha2VBY3Rpb25Mb2NhdGlvbiA9IFsmXSAoQWN0aW9uTWFw
JiBtYXApIAotICAgICAgICB7CisgICAgICAgIGF1dG8gZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9u
ID0gWyZdIChBY3Rpb25NYXAmIG1hcCkgewogICAgICAgICAgICAgY29uc3QgYXV0byBleGlzdGlu
Z0FjdGlvbiA9IG1hcC5maW5kKGZsYWdzKTsKICAgICAgICAgICAgIGlmIChleGlzdGluZ0FjdGlv
biA9PSBtYXAuZW5kKCkpIHsKICAgICAgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbiA9IGFjdGlv
bnMuc2l6ZSgpOwpAQCAtMTQ5LDEzICsxNDQsMjcgQEAgc3RhdGljIFZlY3Rvcjx1bnNpZ25lZD4g
c2VyaWFsaXplQWN0aW9ucwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgYWN0
aW9uTG9jYXRpb24gPSBleGlzdGluZ0FjdGlvbi0+dmFsdWU7CiAgICAgICAgIH07CisgICAgICAg
IAorICAgICAgICBhdXRvIGZpbmRPck1ha2VTdHJpbmdBY3Rpb25Mb2NhdGlvbiA9IFsmXSAoU3Ry
aW5nQWN0aW9uTWFwJiBtYXApIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgYXJndW1lbnQg
PSBydWxlLmFjdGlvbigpLnN0cmluZ0FyZ3VtZW50KCk7CisgICAgICAgICAgICBjb25zdCBhdXRv
IGV4aXN0aW5nQWN0aW9uID0gbWFwLmZpbmQoc3RkOjptYWtlX3BhaXIoYXJndW1lbnQsIGZsYWdz
KSk7CisgICAgICAgICAgICBpZiAoZXhpc3RpbmdBY3Rpb24gPT0gbWFwLmVuZCgpKSB7CisgICAg
ICAgICAgICAgICAgYWN0aW9uTG9jYXRpb24gPSBhY3Rpb25zLnNpemUoKTsKKyAgICAgICAgICAg
ICAgICBhY3Rpb25zLmFwcGVuZChzdGF0aWNfY2FzdDxTZXJpYWxpemVkQWN0aW9uQnl0ZT4oYWN0
aW9uVHlwZSkpOworICAgICAgICAgICAgICAgIHNlcmlhbGl6ZVN0cmluZyhhY3Rpb25zLCBhcmd1
bWVudCk7CisgICAgICAgICAgICAgICAgbWFwLnNldChzdGQ6Om1ha2VfcGFpcihhcmd1bWVudCwg
ZmxhZ3MpLCBhY3Rpb25Mb2NhdGlvbik7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICBhY3Rpb25Mb2NhdGlvbiA9IGV4aXN0aW5nQWN0aW9uLT52YWx1ZTsKKyAgICAgICAgfTsK
IAogICAgICAgICBzd2l0Y2ggKGFjdGlvblR5cGUpIHsKICAgICAgICAgY2FzZSBBY3Rpb25UeXBl
OjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yOiB7CiAgICAgICAgICAgICBjb25zdCBhdXRvIGFkZFJl
c3VsdCA9IGNzc0Rpc3BsYXlOb25lQWN0aW9uc01hcC5hZGQocnVsZS50cmlnZ2VyKCksIFBlbmRp
bmdEaXNwbGF5Tm9uZUFjdGlvbnMoKSk7Ci0gICAgICAgICAgICBQZW5kaW5nRGlzcGxheU5vbmVB
Y3Rpb25zJiBwZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25zID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKLSAgICAgICAgICAgIHBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnMuc2VsZWN0b3JzLmFw
cGVuZChydWxlLmFjdGlvbigpLnN0cmluZ0FyZ3VtZW50KCkpOwotICAgICAgICAgICAgcGVuZGlu
Z0Rpc3BsYXlOb25lQWN0aW9ucy5jbGllbnRMb2NhdGlvbnMuYXBwZW5kKGFjdGlvbkxvY2F0aW9u
cy5zaXplKCkpOworICAgICAgICAgICAgYXV0byYgcGVuZGluZ1N0cmluZ0FjdGlvbnMgPSBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgaWYgKCFwZW5kaW5nU3RyaW5nQWN0
aW9ucy5jb21iaW5lZFNlbGVjdG9ycy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcGVuZGlu
Z1N0cmluZ0FjdGlvbnMuY29tYmluZWRTZWxlY3RvcnMuYXBwZW5kKCcsJyk7CisgICAgICAgICAg
ICBwZW5kaW5nU3RyaW5nQWN0aW9ucy5jb21iaW5lZFNlbGVjdG9ycy5hcHBlbmQocnVsZS5hY3Rp
b24oKS5zdHJpbmdBcmd1bWVudCgpKTsKKyAgICAgICAgICAgIHBlbmRpbmdTdHJpbmdBY3Rpb25z
LmNsaWVudExvY2F0aW9ucy5hcHBlbmQoYWN0aW9uTG9jYXRpb25zLnNpemUoKSk7CiAKICAgICAg
ICAgICAgIGFjdGlvbkxvY2F0aW9uID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzIsNiArMTgxLDkgQEAgc3RhdGljIFZlY3Rv
cjx1bnNpZ25lZD4gc2VyaWFsaXplQWN0aW9ucwogICAgICAgICBjYXNlIEFjdGlvblR5cGU6Ok1h
a2VIVFRQUzoKICAgICAgICAgICAgIGZpbmRPck1ha2VBY3Rpb25Mb2NhdGlvbihtYWtlSFRUUFNB
Y3Rpb25zTWFwKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFjdGlvblR5cGU6
Ok5vdGlmeToKKyAgICAgICAgICAgIGZpbmRPck1ha2VTdHJpbmdBY3Rpb25Mb2NhdGlvbihub3Rp
ZnlBY3Rpb25zTWFwKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAg
YWN0aW9uTG9jYXRpb25zLmFwcGVuZChhY3Rpb25Mb2NhdGlvbik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25F
cnJvci5jcHAJKHJldmlzaW9uIDIyMjMzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYg
Kzg3LDggQEAgY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgY29udGVudEV4dGVucwogICAgICAg
ICAgICAgICAgIHJldHVybiAiQSB0cmlnZ2VyIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgY29u
ZGl0aW9uIChpZi1kb21haW4sIHVubGVzcy1kb21haW4sIGlmLXRvcC11cmwsIG9yIHVubGVzcy10
b3AtdXJsKSI7CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlRv
cFVSTEFuZERvbWFpbkNvbmRpdGlvbnM6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJBIGxpc3Qg
Y2Fubm90IGhhdmUgaWYtZG9tYWluIGFuZCB1bmxlc3MtZG9tYWluIG1peGVkIHdpdGggaWYtdG9w
LXVybCBhbmQgdW5sZXNzLXRvcC11cmwiOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05JbnZhbGlkTm90aWZpY2F0aW9uOgorICAgICAgICAgICAgICAgIHJldHVy
biAiQSBub3RpZnkgYWN0aW9uIG11c3QgaGF2ZSBhIHN0cmluZyBub3RpZmljYXRpb24iOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25FcnJvci5oCShyZXZpc2lvbiAyMjIzMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTks
NiArNTksNyBAQCBlbnVtIGNsYXNzIENvbnRlbnRFeHRlbnNpb25FcnJvciB7CiAgICAgSlNPTklu
dmFsaWRBY3Rpb25UeXBlLAogICAgIEpTT05JbnZhbGlkQ1NTRGlzcGxheU5vbmVBY3Rpb25UeXBl
LAogICAgIEpTT05JbnZhbGlkUmVnZXgsCisgICAgSlNPTkludmFsaWROb3RpZmljYXRpb24sCiB9
OwogCiBleHRlcm4gY29uc3QgY2hhciogV2ViS2l0Q29udGVudEJsb2NrZXJEb21haW47CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkocmV2aXNpb24gMjIyMzMxKQorKysgU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3Nyw2ICsyNzcsMTIgQEAgc3RhdGljIEV4cGVjdGVkPHN0ZDo6b3B0aW9uYWw8
QWN0aW9uPiwgcwogICAgIH0KICAgICBpZiAoYWN0aW9uVHlwZSA9PSAibWFrZS1odHRwcyIpCiAg
ICAgICAgIHJldHVybiB7eyBBY3Rpb25UeXBlOjpNYWtlSFRUUFMgfX07CisgICAgaWYgKGFjdGlv
blR5cGUgPT0gIm5vdGlmeSIpIHsKKyAgICAgICAgSlNWYWx1ZSBmaWVsZCA9IGFjdGlvbk9iamVj
dC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJub3RpZmljYXRpb24i
KSk7CisgICAgICAgIGlmICghZmllbGQgfHwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWZpZWxkLmlz
U3RyaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVu
c2lvbkVycm9yOjpKU09OSW52YWxpZE5vdGlmaWNhdGlvbik7CisgICAgICAgIHJldHVybiB7IEFj
dGlvbihBY3Rpb25UeXBlOjpOb3RpZnksIGFzU3RyaW5nKGZpZWxkKS0+dmFsdWUoJmV4ZWMpKSB9
OworICAgIH0KICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9y
OjpKU09OSW52YWxpZEFjdGlvblR5cGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuY3BwCShy
ZXZpc2lvbiAyMjIzMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAgQWN0
aW9uIEFjdGlvbjo6ZGVzZXJpYWxpemUoY29uc3QgU2VyaWFsaQogICAgIGNhc2UgQWN0aW9uVHlw
ZTo6TWFrZUhUVFBTOgogICAgICAgICByZXR1cm4gQWN0aW9uKGFjdGlvblR5cGUsIGxvY2F0aW9u
KTsKICAgICBjYXNlIEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3I6CisgICAgY2Fz
ZSBBY3Rpb25UeXBlOjpOb3RpZnk6CiAgICAgICAgIHJldHVybiBBY3Rpb24oYWN0aW9uVHlwZSwg
ZGVzZXJpYWxpemVTdHJpbmcoYWN0aW9ucywgYWN0aW9uc0xlbmd0aCwgbG9jYXRpb24gKyBzaXpl
b2YoQWN0aW9uVHlwZSkpLCBsb2NhdGlvbik7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC03OCw2ICs3OSw3IEBAIEFjdGlvblR5cGUgQWN0aW9uOjpkZXNlcmlh
bGl6ZVR5cGUoY29uc3QKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEFjdGlvblR5cGU6
OkJsb2NrQ29va2llczoKICAgICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrTG9hZDoKKyAgICBjYXNl
IEFjdGlvblR5cGU6Ok5vdGlmeToKICAgICBjYXNlIEFjdGlvblR5cGU6Oklnbm9yZVByZXZpb3Vz
UnVsZXM6CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yOgogICAg
IGNhc2UgQWN0aW9uVHlwZTo6TWFrZUhUVFBTOgpAQCAtOTUsNiArOTcsNyBAQCB1aW50MzJfdCBB
Y3Rpb246OnNlcmlhbGl6ZWRMZW5ndGgoY29uc3QgCiAgICAgY2FzZSBBY3Rpb25UeXBlOjpJZ25v
cmVQcmV2aW91c1J1bGVzOgogICAgIGNhc2UgQWN0aW9uVHlwZTo6TWFrZUhUVFBTOgogICAgICAg
ICByZXR1cm4gc2l6ZW9mKEFjdGlvblR5cGUpOworICAgIGNhc2UgQWN0aW9uVHlwZTo6Tm90aWZ5
OgogICAgIGNhc2UgQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvcjogewogICAgICAg
ICB1aW50MzJfdCBwcmVmaXhMZW5ndGggPSBzaXplb2YoQWN0aW9uVHlwZSkgKyBzaXplb2YodWlu
dDMyX3QpICsgc2l6ZW9mKGJvb2wpOwogICAgICAgICB1aW50MzJfdCBzdHJpbmdTdGFydEluZGV4
ID0gbG9jYXRpb24gKyBwcmVmaXhMZW5ndGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmgJKHJldmlzaW9u
IDIyMjMzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25SdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwxNCArMTM1LDE0IEBAIHN0cnVjdCBB
Y3Rpb24gewogICAgICAgICAsIG1fYWN0aW9uSUQoYWN0aW9uSUQpCiAgICAgICAgICwgbV9zdHJp
bmdBcmd1bWVudChzdHJpbmdBcmd1bWVudCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh0eXBlID09
IEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IpOworICAgICAgICBBU1NFUlQoaGFz
U3RyaW5nQXJndW1lbnQodHlwZSkpOwogICAgIH0KIAogICAgIEFjdGlvbihBY3Rpb25UeXBlIHR5
cGUsIHVpbnQzMl90IGFjdGlvbklEID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpKQogICAgICAgICA6IG1fdHlwZSh0eXBlKQogICAgICAgICAsIG1fYWN0aW9uSUQoYWN0aW9u
SUQpCiAgICAgewotICAgICAgICBBU1NFUlQodHlwZSAhPSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5
Tm9uZVNlbGVjdG9yKTsKKyAgICAgICAgQVNTRVJUKCFoYXNTdHJpbmdBcmd1bWVudCh0eXBlKSk7
CiAgICAgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFjdGlvbiYgb3RoZXIpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAJKHJldmlzaW9uIDIyMjMzMSkKKysrIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCiAKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGll
bnQuaCIKICNpbmNsdWRlICJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKICNpbmNsdWRlICJD
b250ZW50RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcu
aCIKQEAgLTM4LDYgKzQwLDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIlJlc291cmNlTG9hZEluZm8uaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNs
dWRlICJVc2VyQ29udGVudENvbnRyb2xsZXIuaCIKQEAgLTE3MCw2ICsxNzMsNyBAQCBCbG9ja2Vk
U3RhdHVzIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6CiAgICAgYm9vbCB3aWxsQmxvY2tMb2Fk
ID0gZmFsc2U7CiAgICAgYm9vbCB3aWxsQmxvY2tDb29raWVzID0gZmFsc2U7CiAgICAgYm9vbCB3
aWxsTWFrZUhUVFBTID0gZmFsc2U7CisgICAgSGFzaFNldDxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJp
bmc+PiBub3RpZmljYXRpb25zOwogICAgIGZvciAoY29uc3QgYXV0byYgYWN0aW9uIDogYWN0aW9u
cy5maXJzdCkgewogICAgICAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKCkpIHsKICAgICAgICAgY2Fz
ZSBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkOgpAQCAtMTg0LDYgKzE4
OCw5IEBAIEJsb2NrZWRTdGF0dXMgQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjoKICAgICAgICAg
ICAgIGVsc2UgaWYgKGN1cnJlbnREb2N1bWVudCkKICAgICAgICAgICAgICAgICBjdXJyZW50RG9j
dW1lbnQtPmV4dGVuc2lvblN0eWxlU2hlZXRzKCkuYWRkRGlzcGxheU5vbmVTZWxlY3RvcihhY3Rp
b24uZXh0ZW5zaW9uSWRlbnRpZmllcigpLCBhY3Rpb24uc3RyaW5nQXJndW1lbnQoKSwgYWN0aW9u
LmFjdGlvbklEKCkpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGVudEV4
dGVuc2lvbnM6OkFjdGlvblR5cGU6Ok5vdGlmeToKKyAgICAgICAgICAgIG5vdGlmaWNhdGlvbnMu
YWRkKHN0ZDo6bWFrZV9wYWlyKGFjdGlvbi5leHRlbnNpb25JZGVudGlmaWVyKCksIGFjdGlvbi5z
dHJpbmdBcmd1bWVudCgpKSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6TWFrZUhUVFBTOiB7CiAgICAgICAgICAgICBpZiAo
KHVybC5wcm90b2NvbElzKCJodHRwIikgfHwgdXJsLnByb3RvY29sSXMoIndzIikpCiAgICAgICAg
ICAgICAgICAgJiYgKCF1cmwucG9ydCgpIHx8IGlzRGVmYXVsdFBvcnRGb3JQcm90b2NvbCh1cmwu
cG9ydCgpLnZhbHVlKCksIHVybC5wcm90b2NvbCgpKSkpCkBAIC0yMTMsNyArMjIwLDcgQEAgQmxv
Y2tlZFN0YXR1cyBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OgogICAgICAgICBpZiAod2lsbEJs
b2NrTG9hZCkKICAgICAgICAgICAgIGN1cnJlbnREb2N1bWVudC0+YWRkQ29uc29sZU1lc3NhZ2Uo
TWVzc2FnZVNvdXJjZTo6Q29udGVudEJsb2NrZXIsIE1lc3NhZ2VMZXZlbDo6SW5mbywgbWFrZVN0
cmluZygiQ29udGVudCBibG9ja2VyIHByZXZlbnRlZCBmcmFtZSBkaXNwbGF5aW5nICIsIG1haW5E
b2N1bWVudFVSTC5zdHJpbmcoKSwgIiBmcm9tIGxvYWRpbmcgYSByZXNvdXJjZSBmcm9tICIsIHVy
bC5zdHJpbmcoKSkpOwogICAgIH0KLSAgICByZXR1cm4geyB3aWxsQmxvY2tMb2FkLCB3aWxsQmxv
Y2tDb29raWVzLCB3aWxsTWFrZUhUVFBTIH07CisgICAgcmV0dXJuIHsgd2lsbEJsb2NrTG9hZCwg
d2lsbEJsb2NrQ29va2llcywgd2lsbE1ha2VIVFRQUywgV1RGTW92ZShub3RpZmljYXRpb25zKSB9
OwogfQogCiBCbG9ja2VkU3RhdHVzIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6cHJvY2Vzc0Nv
bnRlbnRFeHRlbnNpb25SdWxlc0ZvclBpbmdMb2FkKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwm
IG1haW5Eb2N1bWVudFVSTCkKQEAgLTI0MCwxMyArMjQ3LDE0IEBAIEJsb2NrZWRTdGF0dXMgQ29u
dGVudEV4dGVuc2lvbnNCYWNrZW5kOjoKICAgICAgICAgICAgICAgICB3aWxsTWFrZUhUVFBTID0g
dHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yOgorICAgICAgICBjYXNlIENvbnRl
bnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpOb3RpZnk6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNS
dWxlczoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICByZXR1cm4geyB3aWxsQmxvY2tMb2FkLCB3aWxsQmxvY2tDb29raWVz
LCB3aWxsTWFrZUhUVFBTIH07CisgICAgcmV0dXJuIHsgd2lsbEJsb2NrTG9hZCwgd2lsbEJsb2Nr
Q29va2llcywgd2lsbE1ha2VIVFRQUywgeyB9IH07CiB9CiAKIGNvbnN0IFN0cmluZyYgQ29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kOjpkaXNwbGF5Tm9uZUNTU1J1bGUoKQpAQCAtMjU1LDggKzI2Mywx
MSBAQCBjb25zdCBTdHJpbmcmIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6CiAgICAgcmV0dXJu
IHJ1bGU7CiB9CiAKLXZvaWQgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KGNvbnN0IEJsb2Nr
ZWRTdGF0dXMmIHN0YXR1cywgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQordm9pZCBhcHBseUJs
b2NrZWRTdGF0dXNUb1JlcXVlc3QoY29uc3QgQmxvY2tlZFN0YXR1cyYgc3RhdHVzLCBQYWdlKiBw
YWdlLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CisgICAgaWYgKHBhZ2UgJiYgIXN0YXR1
cy5ub3RpZmljYXRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50
KCkuY29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKHJlcXVlc3QudXJsKCksIHN0YXR1cy5ub3Rp
ZmljYXRpb25zKTsKKwogICAgIGlmIChzdGF0dXMuYmxvY2tlZENvb2tpZXMpCiAgICAgICAgIHJl
cXVlc3Quc2V0QWxsb3dDb29raWVzKGZhbHNlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAyMjIzMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODA0LDcgKzI4MDQsNyBAQCB1
bnNpZ25lZCBsb25nIEZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTCiAgICAgICAgIGlmIChhdXRv
KiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpIHsKICAgICAgICAgICAgIGlmIChtX2RvY3VtZW50TG9h
ZGVyKSB7CiAgICAgICAgICAgICAgICAgYXV0byBibG9ja2VkU3RhdHVzID0gcGFnZS0+dXNlckNv
bnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKG5ld1Jl
cXVlc3QudXJsKCksIFJlc291cmNlVHlwZTo6UmF3LCAqbV9kb2N1bWVudExvYWRlcik7Ci0gICAg
ICAgICAgICAgICAgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KGJsb2NrZWRTdGF0dXMsIG5l
d1JlcXVlc3QpOworICAgICAgICAgICAgICAgIGFwcGx5QmxvY2tlZFN0YXR1c1RvUmVxdWVzdChi
bG9ja2VkU3RhdHVzLCBwYWdlLCBuZXdSZXF1ZXN0KTsKICAgICAgICAgICAgICAgICBpZiAoYmxv
Y2tlZFN0YXR1cy5ibG9ja2VkTG9hZCkgewogICAgICAgICAgICAgICAgICAgICBuZXdSZXF1ZXN0
ID0geyB9OwogICAgICAgICAgICAgICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJyb3JE
b21haW5XZWJLaXRJbnRlcm5hbCwgMCwgaW5pdGlhbFJlcXVlc3QudXJsKCksIGVtcHR5U3RyaW5n
KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9QaW5nTG9hZGVyLmNwcAkocmV2aXNpb24gMjIy
MzMxKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBib29sIHByb2Nlc3NDb250ZW50RXh0ZW5zaW9u
UnVsZXMKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvIHN0
YXR1cyA9IHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVudEV4dGVuc2lv
blJ1bGVzRm9yTG9hZChyZXF1ZXN0LnVybCgpLCByZXNvdXJjZVR5cGUsICpkb2N1bWVudExvYWRl
cik7Ci0gICAgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KHN0YXR1cywgcmVxdWVzdCk7Cisg
ICAgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KHN0YXR1cywgcGFnZSwgcmVxdWVzdCk7CiAg
ICAgcmV0dXJuIHN0YXR1cy5ibG9ja2VkTG9hZDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyMjIzMzEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsMTEg
KzM0NSwxMSBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3RJbnRlCiAgICAg
fQogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBpZiAoZnJhbWVMb2FkZXIo
KSkgeworICAgIGlmICghcmVkaXJlY3RSZXNwb25zZS5pc051bGwoKSAmJiBmcmFtZUxvYWRlcigp
KSB7CiAgICAgICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZUxvYWRlcigpLT5mcmFtZSgpLnBhZ2UoKTsK
ICAgICAgICAgaWYgKHBhZ2UgJiYgbV9kb2N1bWVudExvYWRlcikgewogICAgICAgICAgICAgYXV0
byBibG9ja2VkU3RhdHVzID0gcGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QudXJsKCksIG1fcmVzb3VyY2VUeXBlLCAq
bV9kb2N1bWVudExvYWRlcik7Ci0gICAgICAgICAgICBhcHBseUJsb2NrZWRTdGF0dXNUb1JlcXVl
c3QoYmxvY2tlZFN0YXR1cywgcmVxdWVzdCk7CisgICAgICAgICAgICBhcHBseUJsb2NrZWRTdGF0
dXNUb1JlcXVlc3QoYmxvY2tlZFN0YXR1cywgcGFnZSwgcmVxdWVzdCk7CiAgICAgICAgICAgICBp
ZiAoYmxvY2tlZFN0YXR1cy5ibG9ja2VkTG9hZCkgewogICAgICAgICAgICAgICAgIHJlcXVlc3Qg
PSB7IH07CiAgICAgICAgICAgICAgICAgZGlkRmFpbChibG9ja2VkQnlDb250ZW50QmxvY2tlckVy
cm9yKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyMjIzMzEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MjUsOCArNzI1LDkgQEAgUmVzb3VyY2VFcnJvck9yPENhY2hlZFJlc291cmNlSGFuZGxlPENh
YwogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgaWYgKGZyYW1lKCkgJiYgZnJh
bWUoKS0+bWFpbkZyYW1lKCkucGFnZSgpICYmIG1fZG9jdW1lbnRMb2FkZXIpIHsKICAgICAgICAg
Y29uc3QgYXV0byYgcmVzb3VyY2VSZXF1ZXN0ID0gcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKTsK
LSAgICAgICAgYXV0byBibG9ja2VkU3RhdHVzID0gZnJhbWUoKS0+bWFpbkZyYW1lKCkucGFnZSgp
LT51c2VyQ29udGVudFByb3ZpZGVyKCkucHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0Zvckxv
YWQocmVzb3VyY2VSZXF1ZXN0LnVybCgpLCB0b1Jlc291cmNlVHlwZSh0eXBlKSwgKm1fZG9jdW1l
bnRMb2FkZXIpOwotICAgICAgICByZXF1ZXN0LmFwcGx5QmxvY2tlZFN0YXR1cyhibG9ja2VkU3Rh
dHVzKTsKKyAgICAgICAgYXV0byogcGFnZSA9IGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKTsK
KyAgICAgICAgYXV0byBibG9ja2VkU3RhdHVzID0gcGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigp
LnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlc291cmNlUmVxdWVzdC51cmwo
KSwgdG9SZXNvdXJjZVR5cGUodHlwZSksICptX2RvY3VtZW50TG9hZGVyKTsKKyAgICAgICAgcmVx
dWVzdC5hcHBseUJsb2NrZWRTdGF0dXMoYmxvY2tlZFN0YXR1cywgcGFnZSk7CiAgICAgICAgIGlm
IChibG9ja2VkU3RhdHVzLmJsb2NrZWRMb2FkKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19J
Rl9BTExPV0VEKCJyZXF1ZXN0UmVzb3VyY2U6IFJlc291cmNlIGJsb2NrZWQgYnkgY29udGVudCBi
bG9ja2VyIChmcmFtZSA9ICVwKSIsIGZyYW1lKCkpOwogICAgICAgICAgICAgaWYgKHR5cGUgPT0g
Q2FjaGVkUmVzb3VyY2U6OlR5cGU6Ok1haW5SZXNvdXJjZSkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAJKHJl
dmlzaW9uIDIyMjMzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZVJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsOSArMjEyLDkgQEAgdm9pZCBD
YWNoZWRSZXNvdXJjZVJlcXVlc3Q6OnJlbW92ZUZyYWdtZQogCiAjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKIAotdm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmFwcGx5QmxvY2tlZFN0
YXR1cyhjb25zdCBDb250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1cyYgYmxvY2tlZFN0YXR1
cykKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjphcHBseUJsb2NrZWRTdGF0dXMoY29uc3Qg
Q29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXMmIGJsb2NrZWRTdGF0dXMsIFBhZ2UqIHBh
Z2UpCiB7Ci0gICAgQ29udGVudEV4dGVuc2lvbnM6OmFwcGx5QmxvY2tlZFN0YXR1c1RvUmVxdWVz
dChibG9ja2VkU3RhdHVzLCBtX3Jlc291cmNlUmVxdWVzdCk7CisgICAgQ29udGVudEV4dGVuc2lv
bnM6OmFwcGx5QmxvY2tlZFN0YXR1c1RvUmVxdWVzdChibG9ja2VkU3RhdHVzLCBwYWdlLCBtX3Jl
c291cmNlUmVxdWVzdCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAkocmV2aXNpb24gMjIyMzMx
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0
ZUFjY29yZGluZ0NhY2hlTW9kZSgpOwogICAgIHZvaWQgcmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVy
SWZOZWVkZWQoKTsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIHZvaWQgYXBw
bHlCbG9ja2VkU3RhdHVzKGNvbnN0IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzJik7
CisgICAgdm9pZCBhcHBseUJsb2NrZWRTdGF0dXMoY29uc3QgQ29udGVudEV4dGVuc2lvbnM6OkJs
b2NrZWRTdGF0dXMmLCBQYWdlKik7CiAjZW5kaWYKICAgICB2b2lkIHNldERvbWFpbkZvckNhY2hl
UGFydGl0aW9uKERvY3VtZW50Jik7CiAgICAgdm9pZCBzZXREb21haW5Gb3JDYWNoZVBhcnRpdGlv
bihjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2
aXNpb24gMjIyMzMxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcwLDYgKzM3MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
ZW5hYmxlU3VkZGVuVGVybWluYXRpb24oKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZVN1
ZGRlblRlcm1pbmF0aW9uKCkgeyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudFJ1bGVMaXN0
Tm90aWZpY2F0aW9uKGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IEhhc2hTZXQ8c3RkOjpwYWly
PFN0cmluZywgU3RyaW5nPj4mKSB7IH07CisKICNpZiBQTEFURk9STShXSU4pCiAgICAgdmlydHVh
bCB2b2lkIHNldExhc3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3IoKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIEFYU3RhcnRGcmFtZUxvYWQoKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjIy
MzMxKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwzMSBAQAorMjAxNy0wOS0yMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgorCisgICAgICAgIEFkZCBXS0NvbnRlbnRSdWxlTGlzdCBub3RpZnkgYWN0aW9uIHR5
cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzAx
MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzEwNzM5MzY+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlBpbmdMb2FkOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1
bGVzRm9yTG9hZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQ2xpZW50
Lmg6CisgICAgICAgIChBUEk6Ok5hdmlnYXRpb25DbGllbnQ6OmNvbnRlbnRSdWxlTGlzdE5vdGlm
aWNhdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAgICAg
IChXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZU5hdmlnYXRpb25DbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b2NvYS9OYXZpZ2F0aW9uU3RhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTmF2aWdh
dGlvblN0YXRlLm1tOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6OnNldE5hdmln
YXRpb25EZWxlZ2F0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdh
dGlvbkNsaWVudDo6Y29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpj
b250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50Ojpjb250ZW50UnVsZUxpc3ROb3RpZmlj
YXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lmg6CisKIDIwMTctMDktMjEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMjE0NjUpIFdLV2ViVmlld3Mgd2l0aG91
dCBXZWJHTCBkZWxlZ2F0ZSBjYWxsYmFja3MgY3Jhc2ggd2hlbiBXZWJHTCBjb250ZXh0cyBhcmUg
Y3JlYXRlZApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5jcHAJ
KHJldmlzaW9uIDIyMjMzMSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUGluZ0xv
YWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsNyArMzI0LDcgQEAgQ29udGVudEV4dGVuc2lv
bnM6OkNvbnRlbnRFeHRlbnNpb25zQmFjawogQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0
dXMgUGluZ0xvYWQ6OnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBhdXRvIHN0YXR1cyA9IGNvbnRlbnRFeHRlbnNpb25z
QmFja2VuZCgpLnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JQaW5nTG9hZChyZXF1ZXN0
LnVybCgpLCBtX3BhcmFtZXRlcnMubWFpbkRvY3VtZW50VVJMKTsKLSAgICBhcHBseUJsb2NrZWRT
dGF0dXNUb1JlcXVlc3Qoc3RhdHVzLCByZXF1ZXN0KTsKKyAgICBhcHBseUJsb2NrZWRTdGF0dXNU
b1JlcXVlc3Qoc3RhdHVzLCBudWxscHRyLCByZXF1ZXN0KTsKICAgICByZXR1cm4gc3RhdHVzOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlz
aW9uIDIyMjMzMSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3ODgsNiArMzc4OCwxMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
d2lsbFN1Ym1pdEZvcm0odWludDY0CiAgICAgbV9mb3JtQ2xpZW50LT53aWxsU3VibWl0Rm9ybSgq
dGhpcywgKmZyYW1lLCAqc291cmNlRnJhbWUsIHRleHRGaWVsZFZhbHVlcywgbV9wcm9jZXNzLT50
cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSwgbGlzdGVu
ZXIuZ2V0KCkpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6Y29udGVudFJ1bGVMaXN0Tm90aWZp
Y2F0aW9uKFdlYkNvcmU6OlVSTCYmIHVybCwgVmVjdG9yPFN0cmluZz4mJiBpZGVudGlmaWVycywg
VmVjdG9yPFN0cmluZz4mJiBub3RpZmljYXRpb25zKQoreworICAgIGlmIChtX25hdmlnYXRpb25D
bGllbnQpCisgICAgICAgIG1fbmF2aWdhdGlvbkNsaWVudC0+Y29udGVudFJ1bGVMaXN0Tm90aWZp
Y2F0aW9uKCp0aGlzLCBXVEZNb3ZlKHVybCksIFdURk1vdmUoaWRlbnRpZmllcnMpLCBXVEZNb3Zl
KG5vdGlmaWNhdGlvbnMpKTsKK30KKyAgICAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWROYXZpZ2F0
ZVdpdGhOYXZpZ2F0aW9uRGF0YShjb25zdCBXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlJiBzdG9yZSwg
dWludDY0X3QgZnJhbWVJRCkgCiB7CiAgICAgUGFnZUNsaWVudFByb3RlY3RvciBwcm90ZWN0b3Io
bV9wYWdlQ2xpZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CShyZXZpc2lvbiAyMjIzMzEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTI4Niw2ICsxMjg2LDggQEAgcHJpdmF0ZToKICAgICB2
b2lkIHVuYWJsZVRvSW1wbGVtZW50UG9saWN5KHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBVc2VyRGF0YSYpOwogCiAgICAgdm9pZCB3aWxsU3Vi
bWl0Rm9ybSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBzb3VyY2VGcmFtZUlELCBjb25zdCBW
ZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4mIHRleHRGaWVsZFZhbHVlcywgdWludDY0
X3QgbGlzdGVuZXJJRCwgY29uc3QgVXNlckRhdGEmKTsKKyAgICAgICAgCisgICAgdm9pZCBjb250
ZW50UnVsZUxpc3ROb3RpZmljYXRpb24oV2ViQ29yZTo6VVJMJiYsIFZlY3RvcjxTdHJpbmc+JiYg
aWRlbnRpZmllcnMsIFZlY3RvcjxTdHJpbmc+JiYgbm90aWZpY2F0aW9ucyk7CiAKICAgICAvLyBI
aXN0b3J5IGNsaWVudAogICAgIHZvaWQgZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEoY29u
c3QgV2ViTmF2aWdhdGlvbkRhdGFTdG9yZSYsIHVpbnQ2NF90IGZyYW1lSUQpOwpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2
aXNpb24gMjIyMzMxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC00NTgsNiArNDU4LDcgQEAgbWVzc2FnZXMgLT4g
V2ViUGFnZVByb3h5IHsKICAgICBIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UoU3RyaW5nIG1lc3Nh
Z2VOYW1lLCBXZWJLaXQ6OlVzZXJEYXRhIG1lc3NhZ2VCb2R5KSAtPiAoV2ViS2l0OjpVc2VyRGF0
YSByZXR1cm5EYXRhKSBXYW50c0Nvbm5lY3Rpb24KIAogICAgIEhhbmRsZUF1dG9GaWxsQnV0dG9u
Q2xpY2soV2ViS2l0OjpVc2VyRGF0YSB1c2VyRGF0YSk7CisgICAgQ29udGVudFJ1bGVMaXN0Tm90
aWZpY2F0aW9uKFdlYkNvcmU6OlVSTCB1cmwsIFZlY3RvcjxTdHJpbmc+IGlkZW50aWZpZXJzLCBW
ZWN0b3I8U3RyaW5nPiBub3RpZmljYXRpb25zKQogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlC
QUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKICAgICBBZGRQbGF5YmFja1RhcmdldFBpY2tl
ckNsaWVudCh1aW50NjRfdCBjb250ZXh0SWQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQ2xpZW50LmgJKHJldmlzaW9uIDIyMjMzMSkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNiw2ICsxMDYsOCBAQCBwdWJsaWM6CiAgICAgICAgIGxpc3RlbmVyLT51
c2UoeyB9KTsKICAgICB9CiAgICAgCisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRSdWxlTGlzdE5v
dGlmaWNhdGlvbihXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYkNvcmU6OlVSTCYmLCBWZWN0b3I8
V1RGOjpTdHJpbmc+JiYsIFZlY3RvcjxXVEY6OlN0cmluZz4mJikgeyB9OworICAgIAogI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIHZpcnR1YWwgV2ViS2l0OjpQbHVnaW5Nb2R1
bGVMb2FkUG9saWN5IGRlY2lkZVBvbGljeUZvclBsdWdpbkxvYWQoV2ViS2l0OjpXZWJQYWdlUHJv
eHkmLCBXZWJLaXQ6OlBsdWdpbk1vZHVsZUxvYWRQb2xpY3kgY3VycmVudFBsdWdpbkxvYWRQb2xp
Y3ksIERpY3Rpb25hcnkqLCBXVEY6OlN0cmluZyYpCiAgICAgewpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCShyZXZpc2lvbiAyMjIzMzEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIs
NyArMTAyLDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ2xpZW50VHJhaXRzPFdLUGFnZUxvYQogfTsK
IAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ2xpZW50VHJhaXRzPFdLUGFnZU5hdmlnYXRpb25DbGllbnRC
YXNlPiB7Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMCwg
V0tQYWdlTmF2aWdhdGlvbkNsaWVudFYxPiBWZXJzaW9uczsKKyAgICB0eXBlZGVmIHN0ZDo6dHVw
bGU8V0tQYWdlTmF2aWdhdGlvbkNsaWVudFYwLCBXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50VjEsIFdL
UGFnZU5hdmlnYXRpb25DbGllbnRWMj4gVmVyc2lvbnM7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVj
dCBDbGllbnRUcmFpdHM8V0tQYWdlUG9saWN5Q2xpZW50QmFzZT4gewpAQCAtMjI5NSw2ICsyMjk1
LDIxIEBAIHZvaWQgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQoV0tQYWcKICAgICAgICAg
ICAgIG1fY2xpZW50LmRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QodG9BUEkoJnBh
Z2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAgICAgICAgIAorICAg
ICAgICB2b2lkIGNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihXZWJQYWdlUHJveHkmIHBhZ2Us
IFVSTCYmIHVybCwgVmVjdG9yPFN0cmluZz4mJiBsaXN0SWRlbnRpZmllcnMsIFZlY3RvcjxTdHJp
bmc+JiYgbm90aWZpY2F0aW9ucykgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFt
X2NsaWVudC5jb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24pCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gYXBpTGlzdElk
ZW50aWZpZXJzOworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpZGVudGlmaWVyIDogbGlz
dElkZW50aWZpZXJzKQorICAgICAgICAgICAgICAgIGFwaUxpc3RJZGVudGlmaWVycy5hcHBlbmQo
QVBJOjpTdHJpbmc6OmNyZWF0ZShpZGVudGlmaWVyKSk7CisKKyAgICAgICAgICAgIFZlY3RvcjxS
ZWZQdHI8QVBJOjpPYmplY3Q+PiBhcGlOb3RpZmljYXRpb25zOworICAgICAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBub3RpZmljYXRpb24gOiBub3RpZmljYXRpb25zKQorICAgICAgICAgICAgICAg
IGFwaU5vdGlmaWNhdGlvbnMuYXBwZW5kKEFQSTo6U3RyaW5nOjpjcmVhdGUobm90aWZpY2F0aW9u
KSk7CisKKyAgICAgICAgICAgIG1fY2xpZW50LmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbih0
b0FQSSgmcGFnZSksIHRvVVJMUmVmKHVybC5zdHJpbmcoKS5pbXBsKCkpLCB0b0FQSShBUEk6OkFy
cmF5OjpjcmVhdGUoV1RGTW92ZShhcGlMaXN0SWRlbnRpZmllcnMpKS5wdHIoKSksIHRvQVBJKEFQ
STo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKGFwaU5vdGlmaWNhdGlvbnMpKS5wdHIoKSksIG1fY2xp
ZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIH0KICNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKICAgICAgICAgUGx1Z2luTW9kdWxlTG9hZFBvbGljeSBkZWNpZGVQb2xpY3lGb3JQ
bHVnaW5Mb2FkKFdlYlBhZ2VQcm94eSYgcGFnZSwgUGx1Z2luTW9kdWxlTG9hZFBvbGljeSBjdXJy
ZW50UGx1Z2luTG9hZFBvbGljeSwgQVBJOjpEaWN0aW9uYXJ5KiBwbHVnaW5JbmZvcm1hdGlvbiwg
U3RyaW5nJiB1bmF2YWlsYWJpbGl0eURlc2NyaXB0aW9uKSBvdmVycmlkZQogICAgICAgICB7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlTmF2
aWdhdGlvbkNsaWVudC5oCShyZXZpc2lvbiAyMjIzMzEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgw
LDYgKzgwLDcgQEAgdHlwZWRlZiB2b2lkICgqV0tQYWdlTmF2aWdhdGlvbkRpZEVuZE5hdgogCiB0
eXBlZGVmIHZvaWQgKCpXS1BhZ2VOYXZpZ2F0aW9uRGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVT
bmFwc2hvdCkoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogCit0eXBl
ZGVmIHZvaWQgKCpXS1BhZ2VOYXZpZ2F0aW9uQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uQ2Fs
bGJhY2spKFdLUGFnZVJlZiwgV0tVUkxSZWYsIFdLQXJyYXlSZWYsIFdLQXJyYXlSZWYsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOwogCiB0eXBlZGVmIHN0cnVjdCBXS1BhZ2VOYXZpZ2F0aW9uQ2xp
ZW50QmFzZSB7CiAgICAgaW50IHZlcnNpb247CkBAIC0xNDMsNiArMTQ0LDM5IEBAIHR5cGVkZWYg
c3RydWN0IFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMSAKICAgICBXS1BhZ2VOYXZpZ2F0aW9uV2Vi
UHJvY2Vzc0RpZFRlcm1pbmF0ZUNhbGxiYWNrIHdlYlByb2Nlc3NEaWRUZXJtaW5hdGU7CiB9IFdL
UGFnZU5hdmlnYXRpb25DbGllbnRWMTsKIAordHlwZWRlZiBzdHJ1Y3QgV0tQYWdlTmF2aWdhdGlv
bkNsaWVudFYyIHsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50QmFzZSBiYXNlOworICAgIAor
ICAgIC8vIFZlcnNpb24gMC4KKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbkNhbGxiYWNrIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb247Cisg
ICAgV0tQYWdlTmF2aWdhdGlvbkRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZUNhbGxi
YWNrIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZTsKKyAgICBXS1BhZ2VOYXZpZ2F0
aW9uRGVjaWRlUG9saWN5Rm9yUGx1Z2luTG9hZENhbGxiYWNrIGRlY2lkZVBvbGljeUZvclBsdWdp
bkxvYWQ7CisgICAgV0tQYWdlTmF2aWdhdGlvbkRpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9u
Q2FsbGJhY2sgZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb247CisgICAgV0tQYWdlTmF2aWdh
dGlvbkRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbkNhbGxi
YWNrIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbjsKKyAg
ICBXS1BhZ2VOYXZpZ2F0aW9uRGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbkNhbGxiYWNrIGRp
ZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb247CisgICAgV0tQYWdlTmF2aWdhdGlvbkRpZENvbW1p
dE5hdmlnYXRpb25DYWxsYmFjayBkaWRDb21taXROYXZpZ2F0aW9uOworICAgIFdLUGFnZU5hdmln
YXRpb25EaWRGaW5pc2hOYXZpZ2F0aW9uQ2FsbGJhY2sgZGlkRmluaXNoTmF2aWdhdGlvbjsKKyAg
ICBXS1BhZ2VOYXZpZ2F0aW9uRGlkRmFpbE5hdmlnYXRpb25DYWxsYmFjayBkaWRGYWlsTmF2aWdh
dGlvbjsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGlkRmFpbFByb3Zpc2lvbmFsTG9hZEluU3ViZnJh
bWVDYWxsYmFjayBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZTsKKyAgICBXS1BhZ2VO
YXZpZ2F0aW9uRGlkRmluaXNoRG9jdW1lbnRMb2FkQ2FsbGJhY2sgZGlkRmluaXNoRG9jdW1lbnRM
b2FkOworICAgIFdLUGFnZU5hdmlnYXRpb25EaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uQ2FsbGJh
Y2sgZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbjsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uUmVuZGVy
aW5nUHJvZ3Jlc3NEaWRDaGFuZ2VDYWxsYmFjayByZW5kZXJpbmdQcm9ncmVzc0RpZENoYW5nZTsK
KyAgICBXS1BhZ2VOYXZpZ2F0aW9uQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFj
ZUNhbGxiYWNrIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2U7CisgICAgV0tQ
YWdlTmF2aWdhdGlvbkRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUNhbGxiYWNrIGRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uV2Vi
UHJvY2Vzc0RpZENyYXNoQ2FsbGJhY2sgd2ViUHJvY2Vzc0RpZENyYXNoOworICAgIFdLUGFnZU5h
dmlnYXRpb25Db3B5V2ViQ3J5cHRvTWFzdGVyS2V5Q2FsbGJhY2sgY29weVdlYkNyeXB0b01hc3Rl
cktleTsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGlkQmVnaW5OYXZpZ2F0aW9uR2VzdHVyZSBkaWRC
ZWdpbk5hdmlnYXRpb25HZXN0dXJlOworICAgIFdLUGFnZU5hdmlnYXRpb25XaWxsRW5kTmF2aWdh
dGlvbkdlc3R1cmUgd2lsbEVuZE5hdmlnYXRpb25HZXN0dXJlOworICAgIFdLUGFnZU5hdmlnYXRp
b25EaWRFbmROYXZpZ2F0aW9uR2VzdHVyZSBkaWRFbmROYXZpZ2F0aW9uR2VzdHVyZTsKKyAgICBX
S1BhZ2VOYXZpZ2F0aW9uRGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCBkaWRSZW1v
dmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90OworICAgIAorICAgIC8vIFZlcnNpb24gMS4KKyAg
ICBXS1BhZ2VOYXZpZ2F0aW9uV2ViUHJvY2Vzc0RpZFRlcm1pbmF0ZUNhbGxiYWNrIHdlYlByb2Nl
c3NEaWRUZXJtaW5hdGU7CisKKyAgICAvLyBWZXJzaW9uIDIuCisgICAgV0tQYWdlTmF2aWdhdGlv
bkNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbkNhbGxiYWNrIGNvbnRlbnRSdWxlTGlzdE5vdGlm
aWNhdGlvbjsKK30gV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYyOworCiAjaWZkZWYgX19jcGx1c3Bs
dXMKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
TmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaAkocmV2aXNp
b24gMjIyMzMxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLTmF2aWdh
dGlvbkRlbGVnYXRlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw4IEBAIHN0
YXRpYyBjb25zdCBXS05hdmlnYXRpb25SZXNwb25zZVBvbGljeSAKIC0gKHZvaWQpX3dlYlZpZXdE
aWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdL
X0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEyKSwgaW9zKDEwLjApKTsKIC0gKHZvaWQpX3dlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjoo
V0tOYXZpZ2F0aW9uQWN0aW9uICopbmF2aWdhdGlvbkFjdGlvbiBkZWNpc2lvbkhhbmRsZXI6KHZv
aWQgKF4pKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSwgX1dLV2Vic2l0ZVBvbGljaWVzICopKWRl
Y2lzaW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xMi4zKSwgaW9zKDEwLjMp
KTsKIAorLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBVUkw6KE5TVVJMICop
dXJsIGNvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzOihOU0FycmF5PE5TU3RyaW5nICo+ICopaWRl
bnRpZmllcnMgbm90aWZpY2F0aW9uczooTlNBcnJheTxOU1N0cmluZyAqPiAqKW5vdGlmaWNhdGlv
bnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CisKICNpZiBUQVJHRVRfT1NfSVBIT05FCiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3
ZWJWaWV3IGRpZFN0YXJ0TG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWVXaXRoRmls
ZU5hbWU6KE5TU3RyaW5nICopZmlsZU5hbWUgdXRpOihOU1N0cmluZyAqKXV0aTsKIC0gKHZvaWQp
X3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRmluaXNoTG9hZEZvclF1aWNrTG9va0Rv
Y3VtZW50SW5NYWluRnJhbWU6KE5TRGF0YSAqKWRvY3VtZW50RGF0YTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5oCShyZXZpc2lvbiAy
MjIzMzEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZv
aWQgcmVzb2x2ZVdlYkdMTG9hZFBvbGljeShXZWJQYWdlUHJveHkmLCBjb25zdCBXZWJDb3JlOjpV
UkwmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6V2ViR0xMb2FkUG9saWN5KT4mJiBjb21w
bGV0aW9uSGFuZGxlcikgY29uc3QgZmluYWw7CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGNvbnRl
bnRSdWxlTGlzdE5vdGlmaWNhdGlvbihXZWJQYWdlUHJveHkmLCBXZWJDb3JlOjpVUkwmJiwgVmVj
dG9yPFN0cmluZz4mJiwgVmVjdG9yPFN0cmluZz4mJikgZmluYWw7CiAgICAgICAgIHZvaWQgZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXZWJQYWdlUHJveHkmLCBSZWY8QVBJOjpOYXZp
Z2F0aW9uQWN0aW9uPiYmLCBSZWY8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5PiYmLCBBUEk6
Ok9iamVjdCogdXNlckRhdGEpIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25SZXNwb25zZShXZWJQYWdlUHJveHkmLCBBUEk6Ok5hdmlnYXRpb25SZXNwb25z
ZSYsIFJlZjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+JiYsIEFQSTo6T2JqZWN0KiB1c2Vy
RGF0YSkgb3ZlcnJpZGU7CiAKQEAgLTIwMSw2ICsyMDIsNyBAQCBwcml2YXRlOgogICAgICAgICBi
b29sIHdlYlZpZXdEaWRFbmROYXZpZ2F0aW9uR2VzdHVyZVdpdGhOYXZpZ2F0aW9uVG9CYWNrRm9y
d2FyZExpc3RJdGVtIDogMTsKICAgICAgICAgYm9vbCB3ZWJWaWV3V2lsbFNuYXBzaG90QmFja0Zv
cndhcmRMaXN0SXRlbSA6IDE7CiAgICAgICAgIGJvb2wgd2ViVmlld05hdmlnYXRpb25HZXN0dXJl
U25hcHNob3RXYXNSZW1vdmVkIDogMTsKKyAgICAgICAgYm9vbCB3ZWJWaWV3VVJMQ29udGVudFJ1
bGVMaXN0SWRlbnRpZmllcnNOb3RpZmljYXRpb25zIDogMTsKICNpZiBVU0UoUVVJQ0tfTE9PSykK
ICAgICAgICAgYm9vbCB3ZWJWaWV3RGlkU3RhcnRMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1h
aW5GcmFtZSA6IDE7CiAgICAgICAgIGJvb2wgd2ViVmlld0RpZEZpbmlzaExvYWRGb3JRdWlja0xv
b2tEb2N1bWVudEluTWFpbkZyYW1lIDogMTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0JKHJldmlzaW9uIDIyMjMzMSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTY4LDYgKzE2OCw3IEBAIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpzZXROYXZpZ2F0
aW9uRGVsZWcKICAgICBtX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEVuZE5h
dmlnYXRpb25HZXN0dXJlV2l0aE5hdmlnYXRpb25Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0gPSBbZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlld0RpZEVuZE5hdmlnYXRp
b25HZXN0dXJlOndpdGhOYXZpZ2F0aW9uVG9CYWNrRm9yd2FyZExpc3RJdGVtOildOwogICAgIG1f
bmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2lsbFNuYXBzaG90QmFja0ZvcndhcmRM
aXN0SXRlbSA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3
OndpbGxTbmFwc2hvdEJhY2tGb3J3YXJkTGlzdEl0ZW06KV07CiAgICAgbV9uYXZpZ2F0aW9uRGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90V2FzUmVtb3ZlZCA9
IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3RGlkUmVtb3Zl
TmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdDopXTsKKyAgICBtX25hdmlnYXRpb25EZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld1VSTENvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzTm90aWZpY2F0aW9ucyA9
IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OlVSTDpjb250
ZW50UnVsZUxpc3RJZGVudGlmaWVyczpub3RpZmljYXRpb25zOildOwogI2lmIFVTRShRVUlDS19M
T09LKQogICAgIG1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkU3RhcnRMb2Fk
Rm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZSA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmRpZFN0YXJ0TG9hZEZvclF1aWNrTG9va0RvY3VtZW50
SW5NYWluRnJhbWVXaXRoRmlsZU5hbWU6dXRpOildOwogICAgIG1fbmF2aWdhdGlvbkRlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RGlkRmluaXNoTG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJh
bWUgPSBbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpkaWRG
aW5pc2hMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZTopXTsKQEAgLTQ1OCw2ICs0
NTksMjggQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OgogICAgIH0K
IH0KIAordm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmNvbnRlbnRSdWxl
TGlzdE5vdGlmaWNhdGlvbihXZWJQYWdlUHJveHkmLCBXZWJDb3JlOjpVUkwmJiB1cmwsIFZlY3Rv
cjxTdHJpbmc+JiYgbGlzdElkZW50aWZpZXJzLCBWZWN0b3I8U3RyaW5nPiYmIG5vdGlmaWNhdGlv
bnMpCit7CisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld1VSTENvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzTm90aWZpY2F0aW9ucykK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmln
YXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIW5hdmlnYXRp
b25EZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGxpc3RJZGVudGlmaWVy
cy5zaXplKCkgPT0gbm90aWZpY2F0aW9ucy5zaXplKCkpOworCisgICAgYXV0byBpZGVudGlmaWVy
cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpsaXN0
SWRlbnRpZmllcnMuc2l6ZSgpXSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBpZGVudGlmaWVyIDog
bGlzdElkZW50aWZpZXJzKQorICAgICAgICBbaWRlbnRpZmllcnMgYWRkT2JqZWN0OmlkZW50aWZp
ZXJdOworCisgICAgYXV0byBuc05vdGlmaWNhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bm90aWZpY2F0aW9ucy5zaXplKCldKTsKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIG5vdGlmaWNhdGlvbiA6IG5vdGlmaWNhdGlvbnMpCisgICAgICAgIFtu
c05vdGlmaWNhdGlvbnMgYWRkT2JqZWN0Om5vdGlmaWNhdGlvbl07CisgICAgCisgICAgWyhpZCA8
V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6
bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IFVSTDp1cmwgY29udGVudFJ1bGVMaXN0SWRlbnRp
ZmllcnM6aWRlbnRpZmllcnMuZ2V0KCkgbm90aWZpY2F0aW9uczpuc05vdGlmaWNhdGlvbnMuZ2V0
KCldOworfQorICAgIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZShXZWJQYWdlUHJveHkmLCBBUEk6Ok5hdmln
YXRpb25SZXNwb25zZSYgbmF2aWdhdGlvblJlc3BvbnNlLCBSZWY8V2ViRnJhbWVQb2xpY3lMaXN0
ZW5lclByb3h5PiYmIGxpc3RlbmVyLCBBUEk6Ok9iamVjdCogdXNlckRhdGEpCiB7CiAgICAgaWYg
KCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0Rl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZURlY2lzaW9uSGFuZGxlcikgewpJbmRleDog
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHAJKHJldmlzaW9uIDIyMjMzMSkKKysrIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NzQsNiArODc0LDIwIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzY2hlZHVsZUNv
bXBvc2l0aW4KICAgICAgICAgbV9wYWdlLmRyYXdpbmdBcmVhKCktPnNjaGVkdWxlQ29tcG9zaXRp
bmdMYXllckZsdXNoKCk7CiB9CiAKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpjb250ZW50UnVsZUxp
c3ROb3RpZmljYXRpb24oY29uc3QgVVJMJiB1cmwsIGNvbnN0IEhhc2hTZXQ8c3RkOjpwYWlyPFN0
cmluZywgU3RyaW5nPj4mIG5vdGlmaWNhdGlvblBhaXJzKQoreworICAgIFZlY3RvcjxTdHJpbmc+
IGlkZW50aWZpZXJzOworICAgIFZlY3RvcjxTdHJpbmc+IG5vdGlmaWNhdGlvbnM7CisgICAgaWRl
bnRpZmllcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShub3RpZmljYXRpb25QYWlycy5zaXplKCkp
OworICAgIG5vdGlmaWNhdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShub3RpZmljYXRpb25Q
YWlycy5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgbm90aWZpY2F0aW9uIDogbm90aWZp
Y2F0aW9uUGFpcnMpIHsKKyAgICAgICAgaWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKG5vdGlm
aWNhdGlvbi5maXJzdCk7CisgICAgICAgIG5vdGlmaWNhdGlvbnMudW5jaGVja2VkQXBwZW5kKG5v
dGlmaWNhdGlvbi5zZWNvbmQpOworICAgIH0KKworICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbih1cmwsIGlkZW50aWZpZXJz
LCBub3RpZmljYXRpb25zKSk7Cit9CisKIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjphZGp1c3RMYXll
ckZsdXNoVGhyb3R0bGluZyhMYXllckZsdXNoVGhyb3R0bGVTdGF0ZTo6RmxhZ3MgZmxhZ3MpCiB7
CiAgICAgcmV0dXJuIG1fcGFnZS5kcmF3aW5nQXJlYSgpICYmIG1fcGFnZS5kcmF3aW5nQXJlYSgp
LT5hZGp1c3RMYXllckZsdXNoVGhyb3R0bGluZyhmbGFncyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oCShyZXZpc2lvbiAyMjIzMzEpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw2ICsyMDgs
OCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKSBm
aW5hbDsKICAgICBib29sIGFkanVzdExheWVyRmx1c2hUaHJvdHRsaW5nKFdlYkNvcmU6OkxheWVy
Rmx1c2hUaHJvdHRsZVN0YXRlOjpGbGFncykgZmluYWw7CiAKKyAgICB2b2lkIGNvbnRlbnRSdWxl
TGlzdE5vdGlmaWNhdGlvbihjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBIYXNoU2V0PHN0ZDo6
cGFpcjxTdHJpbmcsIFN0cmluZz4+JikgZmluYWw7CisgICAgCiAjaWYgVVNFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKICAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxh
eVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxh
dGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlmCkluZGV4OiBUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjIzNzYpCisrKyBU
b29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxNy0wOS0y
MSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAg
IEFkZCBXS0NvbnRlbnRSdWxlTGlzdCBub3RpZnkgYWN0aW9uIHR5cGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzAxMworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMzEwNzM5MzY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVu
dEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Om9w
ZXJhdG9yPDwpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SW5NZW1vcnlDb21waWxlZENvbnRl
bnRFeHRlbnNpb246OmNyZWF0ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpJbk1lbW9yeUNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbjo6ZGF0YSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpJ
bk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6SW5NZW1vcnlDb21waWxlZENvbnRlbnRF
eHRlbnNpb24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6bWFrZUJhY2tlbmQpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmFjdGlv
bnNFcXVhbCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpzZXF1ZW5jZUluc3RhbmNlcyk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6
Y3JlYXRlRnJvbUZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpJbk1l
bW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6fkluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0NvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbi5tbTogQWRkZWQuCisgICAgICAgICgtW0Nv
bnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbkRlbGVnYXRlIF93ZWJWaWV3OlVSTDpjb250ZW50UnVs
ZUxpc3RJZGVudGlmaWVyczpub3RpZmljYXRpb25zOl0pOgorICAgICAgICAoLVtDb250ZW50UnVs
ZUxpc3ROb3RpZmljYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3OnN0YXJ0VVJMU2NoZW1lVGFzazpdKToK
KyAgICAgICAgKC1bQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uRGVsZWdhdGUgd2ViVmlldzpz
dG9wVVJMU2NoZW1lVGFzazpdKToKKyAgICAgICAgKC1bQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0
aW9uRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmlu
aXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgIChtYWtlV2FybkNv
bnRlbnRSdWxlTGlzdCk6CisgICAgICAgIChURVNUKToKKwogMjAxNy0wOS0yMSAgSm9zZXBoIFBl
Y29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGFkZCB0
aGUgYWJpbGl0eSB0byBza2lwIGEgdGVzdDI2MiB0ZXN0LgpJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIyMjMzMSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNiAr
MjM2LDcgQEAKIAkJNUM5RTU5NDIxRDNFQjVBQzAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUu
ZGItc2htIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVDOUU1OTNGMUQzRUIxREUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiLXNobSAq
LzsgfTsKIAkJNUM5RTU5NDMxRDNFQjVBQzAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGIt
d2FsIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDOUU1OTQwMUQzRUIxREUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiLXdhbCAqLzsg
fTsKIAkJNUNBMURFQzgxRjcxRjcwMTAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0ExREVDNzFGNzFG
NDA3MDBFNzFCRDMgLyogSFRUUEhlYWRlckZpZWxkLmNwcCAqLzsgfTsKKwkJNUNBMURFRDkxRjc0
QTkxQTAwRTcxQkQzIC8qIENvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbi5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQTFERUQ4MUY3NEE4NzEwMEU3
MUJEMyAvKiBDb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24ubW0gKi87IH07CiAJCTVDQjE4QkE4
MUY1NjQ1RTMwMEVFMjNDNCAvKiBDbGlja0F1dG9GaWxsQnV0dG9uLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCMThCQTcxRjU2NDVCMjAwRUUyM0M0
IC8qIENsaWNrQXV0b0ZpbGxCdXR0b24ubW0gKi87IH07CiAJCTVDQjQwQjRFMUY0Qjk4RDMwMDdE
QzdCOSAvKiBVSURlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUNCNDBCNEQxRjRCOThCRTAwN0RDN0I5IC8qIFVJRGVsZWdhdGUubW0gKi87
IH07CiAJCTVDRTM1NEQ5MUU3MERBNUMwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9y
ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTM1
NEQ4MUU3MEQ5QzMwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLzsgfTsK
QEAgLTEzMzMsNiArMTMzNCw3IEBACiAJCTVDOUU1OTNGMUQzRUIxREUwMEUzQzYyRSAvKiBBcHBs
aWNhdGlvbkNhY2hlLmRiLXNobSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSAiQXBwbGljYXRpb25DYWNoZS5kYi1zaG0iOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzlFNTk0MDFEM0VCMURFMDBFM0M2MkUgLyogQXBw
bGljYXRpb25DYWNoZS5kYi13YWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBmaWxlOyBwYXRoID0gIkFwcGxpY2F0aW9uQ2FjaGUuZGItd2FsIjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNBMURFQzcxRjcxRjQwNzAwRTcxQkQzIC8qIEhU
VFBIZWFkZXJGaWVsZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBI
VFRQSGVhZGVyRmllbGQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0ExREVE
ODFGNzRBODcxMDBFNzFCRDMgLyogQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29udGVudFJ1bGVMaXN0Tm90aWZp
Y2F0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0IxOEJBNzFGNTY0NUIy
MDBFRTIzQzQgLyogQ2xpY2tBdXRvRmlsbEJ1dHRvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IENsaWNrQXV0b0ZpbGxCdXR0b24ubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTVDQjQwQjREMUY0Qjk4QkUwMDdEQzdCOSAvKiBVSURlbGVnYXRlLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVUlEZWxlZ2F0ZS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNFMzU0RDgxRTcwRDlDMzAwQkVGRTNCIC8q
IFdLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xOTM3LDYgKzE5MzksNyBAQAogCQkJCUExOEFBOENDMUMzRkEyMTgwMDlC
MkI5NyAvKiBDb250ZW50RmlsdGVyaW5nLmggKi8sCiAJCQkJQTE0RkM1ODYxQjg5OTFCNjAwRDEw
N0VCIC8qIENvbnRlbnRGaWx0ZXJpbmcubW0gKi8sCiAJCQkJQTE0RkM1ODkxQjg5OTI3MTAwRDEw
N0VCIC8qIENvbnRlbnRGaWx0ZXJpbmdQbHVnSW4ubW0gKi8sCisJCQkJNUNBMURFRDgxRjc0QTg3
MTAwRTcxQkQzIC8qIENvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbi5tbSAqLywKIAkJCQk1QzI5
MzY5MTFENUJGNjNFMDBERUFCMUUgLyogQ29va2llQWNjZXB0UG9saWN5Lm1tICovLAogCQkJCTk5
OTkxMDhBMUYzOTNDOEIwMDhBRDQ1NSAvKiBDb3B5aW5nLm1tICovLAogCQkJCTJEQzRDRjc2MUQy
RDlERDgwMEVDQ0M5NCAvKiBEYXRhRGV0ZWN0aW9uLm1tICovLApAQCAtMzE1Niw2ICszMTU5LDcg
QEAKIAkJCQk3Q0IxODRDNjFBQTNGMjEwMDA2NkVERkQgLyogQ29udGVudEV4dGVuc2lvbnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTExNDZBOEQxRDJENzExNTAwMEZFNzEwIC8qIENvbnRlbnRG
aWx0ZXJpbmcubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTRGQzU4ODFCODk5MUJGMDBEMTA3RUIg
LyogQ29udGVudEZpbHRlcmluZy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTVDQTFERUQ5MUY3NEE5
MUEwMEU3MUJEMyAvKiBDb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24ubW0gaW4gU291cmNlcyAq
LywKIAkJCQk3Q0NFN0VCODFBNDExQTdFMDA0NDdDNEMgLyogQ29udGV4dE1lbnVDYW5Db3B5VVJM
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzdGQjcyOTcxREIyRTgyRjAwRTQxQkU0IC8qIENvbnRl
eHRNZW51RGVmYXVsdEl0ZW1zSGF2ZVRhZ3MubW0gaW4gU291cmNlcyAqLywKIAkJCQk4MzQ5RDND
MjFEQjk2RERFMDA0QTlGNjUgLyogQ29udGV4dE1lbnVEb3dubG9hZC5tbSBpbiBTb3VyY2VzICov
LApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Q29udGVudEV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiAyMjIzMzEpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw2ICs1Niw4IEBAIGlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpv
c3QKICAgICAgICAgcmV0dXJuIG9zIDw8ICJBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMiOwogICAg
IGNhc2UgQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvcjoKICAgICAgICAgcmV0dXJu
IG9zIDw8ICJBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZSI7CisgICAgY2FzZSBBY3Rpb25UeXBl
OjpOb3RpZnk6CisgICAgICAgIHJldHVybiBvcyA8PCAiQWN0aW9uVHlwZTo6Tm90aWZ5IjsKICAg
ICBjYXNlIEFjdGlvblR5cGU6Oklnbm9yZVByZXZpb3VzUnVsZXM6CiAgICAgICAgIHJldHVybiBv
cyA8PCAiQWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlcyI7CiAgICAgY2FzZSBBY3Rpb25U
eXBlOjpNYWtlSFRUUFM6CkBAIC05Nyw2ICs5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgRVhQRUNU
X0VRKGRhdGEudG9wVVJMRmlsdGVycy5zaXplKCksIDB1bGwpOwogICAgIH0KIAorcHJpdmF0ZToK
ICAgICB2b2lkIHdyaXRlU291cmNlKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgfQogCiAgICAgdm9p
ZCB3cml0ZUFjdGlvbnMoVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9u
Qnl0ZT4mJiBhY3Rpb25zLCBib29sIGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbikgZmluYWwK
QEAgLTEzNywzNSArMTQwLDI3IEBAIHB1YmxpYzoKICAgICAgICAgZmluYWxpemVkID0gdHJ1ZTsK
ICAgICB9CiAKLXByaXZhdGU6CiAgICAgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYgbV9k
YXRhOwogICAgIGJvb2wgZmluYWxpemVkIHsgZmFsc2UgfTsKIH07CiAKIGNsYXNzIEluTWVtb3J5
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIDogcHVibGljIENvbnRlbnRFeHRlbnNpb25zOjpDb21w
aWxlZENvbnRlbnRFeHRlbnNpb24gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8SW5NZW1vcnlD
b21waWxlZENvbnRlbnRFeHRlbnNpb24+IGNyZWF0ZUZyb21GaWx0ZXIoU3RyaW5nJiYgZmlsdGVy
KQorICAgIHN0YXRpYyBSZWY8SW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IGNyZWF0
ZShTdHJpbmcmJiBmaWx0ZXIpCiAgICAgewogICAgICAgICBDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhIGV4dGVuc2lvbkRhdGE7CiAgICAgICAgIEluTWVtb3J5Q29udGVudEV4dGVuc2lvbkNv
bXBpbGF0aW9uQ2xpZW50IGNsaWVudChleHRlbnNpb25EYXRhKTsKICAgICAgICAgYXV0byBjb21w
aWxlckVycm9yID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChjbGllbnQsIFdU
Rk1vdmUoZmlsdGVyKSk7Ci0gICAgICAgIGlmIChjb21waWxlckVycm9yKSB7Ci0gICAgICAgICAg
ICAvLyBDb21waWxpbmcgc2hvdWxkIGFsd2F5cyBzdWNjZWVkIGhlcmUuIFdlIGhhdmUgb3RoZXIg
dGVzdHMgZm9yIGNvbXBpbGUgZmFpbHVyZXMuCi0gICAgICAgICAgICBFWFBFQ1RfVFJVRShmYWxz
ZSk7Ci0gICAgICAgIH0KIAotICAgICAgICByZXR1cm4gSW5NZW1vcnlDb21waWxlZENvbnRlbnRF
eHRlbnNpb246OmNyZWF0ZShXVEZNb3ZlKGV4dGVuc2lvbkRhdGEpKTsKLSAgICB9CisgICAgICAg
IC8vIENvbXBpbGluZyBzaG91bGQgYWx3YXlzIHN1Y2NlZWQgaGVyZS4gV2UgaGF2ZSBvdGhlciB0
ZXN0cyBmb3IgY29tcGlsZSBmYWlsdXJlcy4KKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNvbXBpbGVy
RXJyb3IpOwogCi0gICAgc3RhdGljIFJlZjxJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bj4gY3JlYXRlKENvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmJiBkYXRhKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNp
b24oV1RGTW92ZShkYXRhKSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbk1lbW9y
eUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbihXVEZNb3ZlKGV4dGVuc2lvbkRhdGEpKSk7CiAgICAg
fQogCi0gICAgdmlydHVhbCB+SW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb24oKQotICAg
IHsKLSAgICB9CisgICAgY29uc3QgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYgZGF0YSgp
IHsgcmV0dXJuIG1fZGF0YTsgfTsKIAorcHJpdmF0ZToKICAgICBjb25zdCBDb250ZW50RXh0ZW5z
aW9uczo6U2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2RhdGEuYWN0aW9ucy5kYXRhKCk7IH0KICAgICB1bnNpZ25lZCBhY3Rpb25zTGVuZ3RoKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9kYXRhLmFjdGlvbnMuc2l6ZSgpOyB9CiAgICAgY29uc3Qg
Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNC
eXRlY29kZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZGF0YS5maWx0ZXJzV2l0aG91dENvbmRp
dGlvbnMuZGF0YSgpOyB9CkBAIC0xNzYsMTEgKzE3MSw5IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCB0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVMZW5ndGgoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Rh
dGEudG9wVVJMRmlsdGVycy5zaXplKCk7IH0KICAgICBib29sIGNvbmRpdGlvbnNBcHBseU9ubHlU
b0RvbWFpbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZGF0YS5jb25kaXRpb25zQXBwbHlPbmx5
VG9Eb21haW47IH0KIAotcHJpdmF0ZToKICAgICBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbihDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiYgZGF0YSkKICAgICAgICAgOiBtX2Rh
dGEoV1RGTW92ZShkYXRhKSkKLSAgICB7Ci0gICAgfQorICAgIHsgfQogCiAgICAgQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uRGF0YSBtX2RhdGE7CiB9OwpAQCAtMjExLDcgKzIwNCw3IEBAIHN0YXRp
YyBSZXNvdXJjZUxvYWRJbmZvIHN1YlJlc291cmNlUmVxdWUKIENvbnRlbnRFeHRlbnNpb25zOjpD
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgbWFrZUJhY2tlbmQoY29uc3QgY2hhcioganNvbikKIHsK
ICAgICBBdG9taWNTdHJpbmc6OmluaXQoKTsKLSAgICBhdXRvIGV4dGVuc2lvbiA9IEluTWVtb3J5
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGVGcm9tRmlsdGVyKGpzb24pOworICAgIGF1
dG8gZXh0ZW5zaW9uID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShq
c29uKTsKICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIGJh
Y2tlbmQ7CiAgICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJ0ZXN0RmlsdGVyIiwgV1RG
TW92ZShleHRlbnNpb24pKTsKICAgICByZXR1cm4gYmFja2VuZDsKQEAgLTg1Niw4ICs4NDksOCBA
QCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFRvcFVSTCkKIAogVEVTVF9GKENvbnRlbnRF
eHRlbnNpb25UZXN0LCBNdWx0aXBsZUV4dGVuc2lvbnMpCiB7Ci0gICAgYXV0byBleHRlbnNpb24x
ID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZUZyb21GaWx0ZXIoIlt7
XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCJibG9ja19sb2FkXCJ9fV0iKTsKLSAgICBhdXRvIGV4dGVuc2lvbjIgPSBJbk1lbW9yeUNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlRnJvbUZpbHRlcigiW3tcImFjdGlvblwiOntc
InR5cGVcIjpcImJsb2NrLWNvb2tpZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
YmxvY2tfY29va2llc1wifX1dIik7CisgICAgYXV0byBleHRlbnNpb24xID0gSW5NZW1vcnlDb21w
aWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZSgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJs
b2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcImJsb2NrX2xvYWRcIn19XSIpOwor
ICAgIGF1dG8gZXh0ZW5zaW9uMiA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpj
cmVhdGUoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9jay1jb29raWVzXCJ9LFwidHJpZ2dl
clwiOntcInVybC1maWx0ZXJcIjpcImJsb2NrX2Nvb2tpZXNcIn19XSIpOwogICAgIENvbnRlbnRF
eHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFja2VuZDsKICAgICBiYWNrZW5k
LmFkZENvbnRlbnRFeHRlbnNpb24oInRlc3RGaWx0ZXIxIiwgV1RGTW92ZShleHRlbnNpb24xKSk7
CiAgICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJ0ZXN0RmlsdGVyMiIsIFdURk1vdmUo
ZXh0ZW5zaW9uMikpOwpAQCAtODY4LDkgKzg2MSw5IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9u
VGVzdCwgTXVsdGlwbGVFeHQKICAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9ibG9ja19sb2FkL2Jsb2NrX2Nvb2tpZXMuaHRtbCIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMsIENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSwgMik7CiAgICAgdGVzdFJlcXVlc3Qo
YmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvYmxvY2tfY29v
a2llcy9ibG9ja19sb2FkLmh0bWwiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
QmxvY2tDb29raWVzLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0s
IDIpOwogICAgIAotICAgIGF1dG8gaWdub3JlRXh0ZW5zaW9uMSA9IEluTWVtb3J5Q29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uOjpjcmVhdGVGcm9tRmlsdGVyKCJbe1wiYWN0aW9uXCI6e1widHlwZVwi
OlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiYmxvY2tfbG9hZFwifX0s
IgorICAgIGF1dG8gaWdub3JlRXh0ZW5zaW9uMSA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uOjpjcmVhdGUoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdn
ZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJibG9ja19sb2FkXCJ9fSwiCiAgICAgICAgICJ7XCJhY3Rp
b25cIjp7XCJ0eXBlXCI6XCJpZ25vcmUtcHJldmlvdXMtcnVsZXNcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiaWdub3JlMVwifX1dIik7Ci0gICAgYXV0byBpZ25vcmVFeHRlbnNpb24y
ID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZUZyb21GaWx0ZXIoIlt7
XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9jay1jb29raWVzXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcImJsb2NrX2Nvb2tpZXNcIn19LCIKKyAgICBhdXRvIGlnbm9yZUV4dGVuc2lv
bjIgPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKCJbe1wiYWN0aW9u
XCI6e1widHlwZVwiOlwiYmxvY2stY29va2llc1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCJibG9ja19jb29raWVzXCJ9fSwiCiAgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6
XCJpZ25vcmUtcHJldmlvdXMtcnVsZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
aWdub3JlMlwifX1dIik7CiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25z
QmFja2VuZCBiYWNrZW5kV2l0aElnbm9yZTsKICAgICBiYWNrZW5kV2l0aElnbm9yZS5hZGRDb250
ZW50RXh0ZW5zaW9uKCJ0ZXN0RmlsdGVyMSIsIFdURk1vdmUoaWdub3JlRXh0ZW5zaW9uMSkpOwpA
QCAtODg0LDYgKzg3NywxMjEgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBNdWx0aXBs
ZUV4dAogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmRXaXRoSWdub3JlLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9ibG9ja19sb2FkL2Jsb2NrX2Nvb2tpZXMvaWdub3JlMS9p
Z25vcmUyLmh0bWwiKSwgeyB9LCAwKTsKIH0KIAorc3RhdGljIGJvb2wgYWN0aW9uc0VxdWFsKGNv
bnN0IHN0ZDo6cGFpcjxWZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4s
IFZlY3RvcjxTdHJpbmc+PiYgYWN0dWFsLCBWZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkFjdGlvbj4mJiBleHBlY3RlZCwgYm9vbCBpZ25vcmVQcmV2aW91c1J1bGVzID0gZmFsc2Up
Cit7CisgICAgaWYgKGlnbm9yZVByZXZpb3VzUnVsZXMpIHsKKyAgICAgICAgaWYgKGFjdHVhbC5z
ZWNvbmQuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGlmIChhY3R1YWwuc2Vjb25kLnNpemUoKSAhPSAxKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpZiAoYWN0dWFsLnNlY29uZFswXSAhPSAidGVzdEZpbHRlciIpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGFjdHVhbC5maXJzdC5z
aXplKCkgIT0gZXhwZWN0ZWQuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBleHBlY3RlZC5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
YWN0dWFsLmZpcnN0W2ldLnR5cGUoKSAhPSBleHBlY3RlZFtpXS50eXBlKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChhY3R1YWwuZmlyc3RbaV0uc3RyaW5nQXJndW1l
bnQoKSAhPSBleHBlY3RlZFtpXS5zdHJpbmdBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIq
IGpzb25XaXRoU3RyaW5nc1RvQ29tYmluZSA9ICJbIgorICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJub3RpZnlcIixcIm5vdGlmaWNhdGlvblwiOlwiQUFBXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIkFcIn19LCIKKyAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwibm90aWZ5
XCIsXCJub3RpZmljYXRpb25cIjpcIkFBQVwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJBXCJ9fSwiCisgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZp
Y2F0aW9uXCI6XCJCQkJcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiQlwifX0sIgor
ICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3Rv
clwiOlwiQ0NDXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIkNcIn19LCIKKyAgICAi
e1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpc
InNlbGVjdG9yQ29tYmluZWRXaXRoQ1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJD
XCJ9fSwiCisgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixc
InNlbGVjdG9yXCI6XCJERERcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiRFwifX0s
IgorICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJpZ25vcmUtcHJldmlvdXMtcnVsZXNcIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiRVwifX0sIgorICAgICJ7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJGXCJ9fSwi
CisgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6
XCJHR0dcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiR1wifX0sIgorICAgICJ7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJub3RpZnlcIixcIm5vdGlmaWNhdGlvblwiOlwiR0dHXCJ9LFwi
dHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIklcIn19LCIKKyAgICAie1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwibm90aWZ5XCIsXCJub3RpZmljYXRpb25cIjpcIkFBQVwifSxcInRyaWdnZXJcIjp7
XCJ1cmwtZmlsdGVyXCI6XCJKXCJ9fSwiCisgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcIm5v
dGlmeVwiLFwibm90aWZpY2F0aW9uXCI6XCJHR0dcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwiS1wifX0iCisiXSI7CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU3RyaW5n
UGFyYW1ldGVycykKK3sKKyAgICBhdXRvIGJhY2tlbmQxID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rp
b25cIjp7XCJ0eXBlXCI6XCJub3RpZnlcIixcIm5vdGlmaWNhdGlvblwiOlwidGVzdG5vdGlmaWNh
dGlvblwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJtYXRjaGVzXCJ9fV0iKTsKKyAg
ICBBU1NFUlRfVFJVRShhY3Rpb25zRXF1YWwoYmFja2VuZDEuYWN0aW9uc0ZvclJlc291cmNlTG9h
ZChtYWluRG9jdW1lbnRSZXF1ZXN0KCJ0ZXN0Oi8vL21hdGNoZXMiKSksIHt7IENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb25UeXBlOjpOb3RpZnksICJ0ZXN0bm90aWZpY2F0aW9uIiB9fSkpOworCisg
ICAgYXV0byBiYWNrZW5kMiA9IG1ha2VCYWNrZW5kKGpzb25XaXRoU3RyaW5nc1RvQ29tYmluZSk7
CisgICAgQVNTRVJUX1RSVUUoYWN0aW9uc0VxdWFsKGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJj
ZUxvYWQobWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL0EiKSksIHt7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpOb3RpZnksICJBQUEiIH19KSk7CisgICAgQVNTRVJUX1RSVUUoYWN0
aW9uc0VxdWFsKGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQobWFpbkRvY3VtZW50UmVx
dWVzdCgiaHR0cDovL0IiKSksIHt7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpOb3Rp
ZnksICJCQkIiIH19KSk7CisgICAgQVNTRVJUX1RSVUUoYWN0aW9uc0VxdWFsKGJhY2tlbmQyLmFj
dGlvbnNGb3JSZXNvdXJjZUxvYWQobWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL0MiKSksIHt7
IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCAi
Q0NDLHNlbGVjdG9yQ29tYmluZWRXaXRoQyIgfX0pKTsKKyAgICBBU1NFUlRfVFJVRShhY3Rpb25z
RXF1YWwoYmFja2VuZDIuYWN0aW9uc0ZvclJlc291cmNlTG9hZChtYWluRG9jdW1lbnRSZXF1ZXN0
KCJodHRwOi8vRCIpKSwge3sgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3Bs
YXlOb25lU2VsZWN0b3IsICJEREQiIH19KSk7CisgICAgQVNTRVJUX1RSVUUoYWN0aW9uc0VxdWFs
KGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQobWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0
cDovL0UiKSksIHsgfSwgdHJ1ZSkpOworICAgIEFTU0VSVF9UUlVFKGFjdGlvbnNFcXVhbChiYWNr
ZW5kMi5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9G
IikpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSkpOworICAg
IEFTU0VSVF9UUlVFKGFjdGlvbnNFcXVhbChiYWNrZW5kMi5hY3Rpb25zRm9yUmVzb3VyY2VMb2Fk
KG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9HIikpLCB7eyBDb250ZW50RXh0ZW5zaW9uczo6
QWN0aW9uVHlwZTo6Tm90aWZ5LCAiR0dHIiB9fSkpOworICAgIEFTU0VSVF9UUlVFKGFjdGlvbnNF
cXVhbChiYWNrZW5kMi5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKG1haW5Eb2N1bWVudFJlcXVlc3Qo
Imh0dHA6Ly9HSUsiKSksIHt7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpOb3RpZnks
ICJHR0ciIH19KSk7CisgICAgQVNTRVJUX1RSVUUoYWN0aW9uc0VxdWFsKGJhY2tlbmQyLmFjdGlv
bnNGb3JSZXNvdXJjZUxvYWQobWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL0FKIikpLCB7Cisg
ICAgICAgIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6Ok5vdGlmeSwgIkFBQSIgfSwK
KyAgICAgICAgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Tm90aWZ5LCAiQUFBIiB9
IC8vIGlnbm9yZS1wcmV2aW91cy1ydWxlcyBtYWtlcyB0aGUgQUFBIGFjdGlvbnMgbmVlZCB0byBi
ZSB1bmlxdWUuCisgICAgfSkpOworICAgIC8vIEZJWE1FOiBBZGQgYSB0ZXN0IHRoYXQgbWF0Y2hl
cyBhY3Rpb25zIHdpdGggQUFBIHdpdGggaWdub3JlLXByZXZpb3VzLXJ1bGVzIGJldHdlZW4gdGhl
bSBhbmQgbWFrZXMgc3VyZSB3ZSBvbmx5IGdldCBvbmUgbm90aWZpY2F0aW9uLgorICAgIEFTU0VS
VF9UUlVFKGFjdGlvbnNFcXVhbChiYWNrZW5kMi5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKG1haW5E
b2N1bWVudFJlcXVlc3QoImh0dHA6Ly9BRSIpKSwgeyB9LCB0cnVlKSk7CisgICAgQVNTRVJUX1RS
VUUoYWN0aW9uc0VxdWFsKGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQobWFpbkRvY3Vt
ZW50UmVxdWVzdCgiaHR0cDovL0FCQ0RFIikpLCB7IH0sIHRydWUpKTsKKyAgICBBU1NFUlRfVFJV
RShhY3Rpb25zRXF1YWwoYmFja2VuZDIuYWN0aW9uc0ZvclJlc291cmNlTG9hZChtYWluRG9jdW1l
bnRSZXF1ZXN0KCJodHRwOi8vQUJDREVGRyIpKSwgeworICAgICAgICB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpOb3RpZnksICJHR0ciIH0sCisgICAgICAgIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9CisgICAgfSwgdHJ1ZSkpOworICAgIEFTU0VS
VF9UUlVFKGFjdGlvbnNFcXVhbChiYWNrZW5kMi5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKG1haW5E
b2N1bWVudFJlcXVlc3QoImh0dHA6Ly9GRyIpKSwgeworICAgICAgICB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpOb3RpZnksICJHR0ciIH0sCisgICAgICAgIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9CisgICAgfSkpOworICAgIEFTU0VSVF9UUlVF
KGFjdGlvbnNFcXVhbChiYWNrZW5kMi5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKG1haW5Eb2N1bWVu
dFJlcXVlc3QoImh0dHA6Ly9FRkciKSksIHsKKyAgICAgICAgeyBDb250ZW50RXh0ZW5zaW9uczo6
QWN0aW9uVHlwZTo6Tm90aWZ5LCAiR0dHIiB9LAorICAgICAgICB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfQorICAgIH0sIHRydWUpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGNTdHJpbmdMZW5ndGg+CitzdGF0aWMgaW50IHNlcXVlbmNlSW5z
dGFuY2VzKGNvbnN0IFZlY3RvcjxUPiB2ZWN0b3IsIGNvbnN0IGNoYXIgKCZzZXF1ZW5jZSlbY1N0
cmluZ0xlbmd0aF0pCit7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPT0gc2l6ZW9mKGNo
YXIpLCAic2VxdWVuY2VJbnN0YW5jZXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdmFyaW91cyBi
eXRlIHZlY3RvcnMuIik7CisKKyAgICBzaXplX3Qgc2VxdWVuY2VMZW5ndGggPSBjU3RyaW5nTGVu
Z3RoIC0gMTsKKyAgICBzaXplX3QgaW5zdGFuY2VzID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8PSB2ZWN0b3Iuc2l6ZSgpIC0gc2VxdWVuY2VMZW5ndGg7ICsraSkgeworICAgICAgICBm
b3IgKHNpemVfdCBqID0gMDsgaiA8IHNlcXVlbmNlTGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAg
IGlmICh2ZWN0b3JbaSArIGpdICE9IHNlcXVlbmNlW2pdKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgaWYgKGogPT0gc2VxdWVuY2VMZW5ndGggLSAxKQorICAgICAgICAgICAg
ICAgIGluc3RhbmNlcysrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBpbnN0YW5jZXM7
Cit9CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU3RyaW5nQ29tYmluaW5nKQorewor
ICAgIGF1dG8gZXh0ZW5zaW9uID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNy
ZWF0ZShqc29uV2l0aFN0cmluZ3NUb0NvbWJpbmUpOworICAgIGNvbnN0IGF1dG8mIGRhdGEgPSBl
eHRlbnNpb24tPmRhdGEoKTsKKworICAgIEFTU0VSVF9FUShzZXF1ZW5jZUluc3RhbmNlcyhkYXRh
LmFjdGlvbnMsICJBQUEiKSwgMik7CisgICAgQVNTRVJUX0VRKHNlcXVlbmNlSW5zdGFuY2VzKGRh
dGEuYWN0aW9ucywgIkdHRyIpLCAxKTsKKworICAgIEFTU0VSVF9FUShkYXRhLmFjdGlvbnMuc2l6
ZSgpLCA3OHUpOworICAgIEFTU0VSVF9FUShkYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9ucy5z
aXplKCksICAzMTN1KTsKKyAgICBBU1NFUlRfRVEoZGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnMu
c2l6ZSgpLCAgNXUpOworICAgIEFTU0VSVF9FUShkYXRhLnRvcFVSTEZpbHRlcnMuc2l6ZSgpLCAg
NXUpOworICAgIEFTU0VSVF9GQUxTRShkYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbik7
CisKKyAgICBhdXRvIGV4dGVuc2lvbldpdGhGbGFncyA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uOjpjcmVhdGUoIlsiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJu
b3RpZnlcIixcIm5vdGlmaWNhdGlvblwiOlwiQUFBXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcIkFcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwi
LFwibm90aWZpY2F0aW9uXCI6XCJBQUFcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
Q1wifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwibm90aWZ5XCIsXCJub3Rp
ZmljYXRpb25cIjpcIkFBQVwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJBXCIsXCJy
ZXNvdXJjZS10eXBlXCI6W1wiZG9jdW1lbnRcIl19fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJub3RpZnlcIixcIm5vdGlmaWNhdGlvblwiOlwiQUFBXCJ9LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIkFcIixcInJlc291cmNlLXR5cGVcIjpbXCJkb2N1bWVudFwiLFwi
Zm9udFwiXX19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwi
bm90aWZpY2F0aW9uXCI6XCJBQUFcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiQlwi
LFwicmVzb3VyY2UtdHlwZVwiOltcImRvY3VtZW50XCJdfX0iCisgICAgIl0iKTsKKyAgICBBU1NF
UlRfRVEoc2VxdWVuY2VJbnN0YW5jZXMoZXh0ZW5zaW9uV2l0aEZsYWdzLT5kYXRhKCkuYWN0aW9u
cywgIkFBQSIpLCAzKTsgLy8gVGhlcmUgYXJlIDMgc2V0cyBvZiB1bmlxdWUgZmxhZ3MgZm9yIEFB
QSBhY3Rpb25zLgorfQorCiBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFRlcm1zS25vd25U
b01hdGNoQW55dGhpbmcpCiB7CiAgICAgYXV0byBiYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJecHJlMS4qcG9zdDEkXCJ9fSwiCkBAIC0xMzc3LDYgKzE0ODUsMTIgQEAgVEVTVF9GKENvbnRl
bnRFeHRlbnNpb25UZXN0LCBJbnZhbGlkSlNPTgogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tc
ImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIndlYmtpdC5vcmdcIixcInJlc291cmNlLXR5cGVcIjpmYWxzZX19XSIsCiAgICAgICAgIENv
bnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dl
ckZsYWdzQXJyYXkpOwogICAgIAorICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwi
OntcInR5cGVcIjpcIm5vdGlmeVwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKlwi
fX1dIiwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFs
aWROb3RpZmljYXRpb24pOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntc
InR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6NX0sXCJ0cmlnZ2VyXCI6e1widXJs
LWZpbHRlclwiOlwiLipcIn19XSIsIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9u
RXJyb3I6OkpTT05JbnZhbGlkTm90aWZpY2F0aW9uKTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3Io
Ilt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJub3RpZnlcIixcIm5vdGlmaWNhdGlvblwiOltdfSxc
InRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKlwifX1dIiwgQ29udGVudEV4dGVuc2lvbnM6
OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWROb3RpZmljYXRpb24pOworICAgIGNo
ZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90
aWZpY2F0aW9uXCI6XCJoZXJlJ3MgbXkgbm90aWZpY2F0aW9uXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIi4qXCJ9fV0iLCB7IH0pOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tc
ImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6XCJcXHUxMjM0
XCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qXCJ9fV0iLCB7IH0pOworICAgIAog
ICAgIFN0cmluZ0J1aWxkZXIgcnVsZXM7CiAgICAgcnVsZXMuYXBwZW5kKCJbIik7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDQ5OTk5OyArK2kpCkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0NvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbi5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NvbnRlbnRS
dWxlTGlzdE5vdGlmaWNhdGlvbi5tbQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0NvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbi5tbQkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMu
aCIKKyNpbXBvcnQgPFdlYktpdC9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tV
UkxTY2hlbWVIYW5kbGVyLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xs
ZXIuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5Q
dHIuaD4KKworc3RhdGljIGJvb2wgcmVjZWl2ZWROb3RpZmljYXRpb247CitzdGF0aWMgYm9vbCBy
ZWNlaXZlZEFsZXJ0OworCitAaW50ZXJmYWNlIENvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbkRl
bGVnYXRlIDogTlNPYmplY3QgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZSwgV0tVUkxTY2hl
bWVIYW5kbGVyLCBXS1VJRGVsZWdhdGU+CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBDb250ZW50
UnVsZUxpc3ROb3RpZmljYXRpb25EZWxlZ2F0ZQorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZp
ZXcgKil3ZWJWaWV3IFVSTDooTlNVUkwgKil1cmwgY29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnM6
KE5TQXJyYXk8TlNTdHJpbmcgKj4gKilpZGVudGlmaWVycyBub3RpZmljYXRpb25zOihOU0FycmF5
PE5TU3RyaW5nICo+ICopbm90aWZpY2F0aW9ucworeworICAgIEVYUEVDVF9TVFJFUSh1cmwuYWJz
b2x1dGVTdHJpbmcuVVRGOFN0cmluZywgImFwaXRlc3Q6Ly8vbWF0Y2giKTsKKyAgICBFWFBFQ1Rf
RVEoaWRlbnRpZmllcnMuY291bnQsIDF1KTsKKyAgICBFWFBFQ1RfU1RSRVEoW2lkZW50aWZpZXJz
IG9iamVjdEF0SW5kZXg6MF0uVVRGOFN0cmluZywgInRlc3RpZGVudGlmaWVyIik7CisgICAgRVhQ
RUNUX0VRKG5vdGlmaWNhdGlvbnMuY291bnQsIDF1KTsKKyAgICBFWFBFQ1RfU1RSRVEoW25vdGlm
aWNhdGlvbnMgb2JqZWN0QXRJbmRleDowXS5VVEY4U3RyaW5nLCAidGVzdG5vdGlmaWNhdGlvbiIp
OworICAgIHJlY2VpdmVkTm90aWZpY2F0aW9uID0gdHJ1ZTsKK30KKworLSAodm9pZCl3ZWJWaWV3
OihXS1dlYlZpZXcgKil3ZWJWaWV3IHN0YXJ0VVJMU2NoZW1lVGFzazooaWQgPFdLVVJMU2NoZW1l
VGFzaz4pdXJsU2NoZW1lVGFzaworeworICAgIFt1cmxTY2hlbWVUYXNrIGRpZFJlY2VpdmVSZXNw
b25zZTpbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp1cmxTY2hlbWVUYXNrLnJl
cXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6MCB0
ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdXTsKKyAgICBbdXJsU2NoZW1lVGFzayBk
aWRGaW5pc2hdOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc3Rv
cFVSTFNjaGVtZVRhc2s6KGlkIDxXS1VSTFNjaGVtZVRhc2s+KXVybFNjaGVtZVRhc2sKK3sKK30K
KworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVy
dFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOihX
S0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21w
bGV0aW9uSGFuZGxlcgoreworICAgIHJlY2VpdmVkQWxlcnQgPSB0cnVlOworICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7Cit9CisKK0BlbmQKKworc3RhdGljIFJldGFpblB0cjxXS0NvbnRlbnRSdWxl
TGlzdD4gbWFrZVdhcm5Db250ZW50UnVsZUxpc3QoKQoreworICAgIF9fYmxvY2sgYm9vbCBkb25l
Q29tcGlsaW5nID0gZmFsc2U7CisgICAgX19ibG9jayBSZXRhaW5QdHI8V0tDb250ZW50UnVsZUxp
c3Q+IGNvbnRlbnRSdWxlTGlzdDsKKyAgICBbW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVs
dFN0b3JlXSBjb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjpAInRlc3RpZGVudGlm
aWVyIiBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OkAiW3tcImFjdGlvblwiOntcInR5cGVcIjpcIm5v
dGlmeVwiLFwibm90aWZpY2F0aW9uXCI6XCJ0ZXN0bm90aWZpY2F0aW9uXCJ9LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIm1hdGNoXCJ9fV0iIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250
ZW50UnVsZUxpc3QgKmxpc3QsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVDVF9UUlVF
KGxpc3QpOworICAgICAgICBjb250ZW50UnVsZUxpc3QgPSBsaXN0OworICAgICAgICBkb25lQ29t
cGlsaW5nID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRv
bmVDb21waWxpbmcpOworICAgIHJldHVybiBjb250ZW50UnVsZUxpc3Q7Cit9CisKK1RFU1QoV2Vi
S2l0LCBDb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb25NYWluUmVzb3VyY2UpCit7CisgICAgYXV0
byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tDb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb25EZWxlZ2F0
ZSBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dl
YlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgW1tjb25maWd1cmF0aW9uIHVz
ZXJDb250ZW50Q29udHJvbGxlcl0gYWRkQ29udGVudFJ1bGVMaXN0Om1ha2VXYXJuQ29udGVudFJ1
bGVMaXN0KCkuZ2V0KCldOworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6
ZGVsZWdhdGUuZ2V0KCkgZm9yVVJMU2NoZW1lOkAiYXBpdGVzdCJdOworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAg
W3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2Vi
VmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxX
aXRoU3RyaW5nOkAiYXBpdGVzdDovLy9tYXRjaCJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZyZWNlaXZlZE5vdGlmaWNhdGlvbik7Cit9CisKK1RFU1QoV2ViS2l0LCBDb250ZW50
UnVsZUxpc3ROb3RpZmljYXRpb25TdWJyZXNvdXJjZSkKK3sKKyAgICBhdXRvIGRlbGVnYXRlID0g
YWRvcHROUyhbW0NvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0
XSk7CisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250
cm9sbGVyXSBhZGRDb250ZW50UnVsZUxpc3Q6bWFrZVdhcm5Db250ZW50UnVsZUxpc3QoKS5nZXQo
KV07CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpkZWxlZ2F0ZS5nZXQo
KSBmb3JVUkxTY2hlbWU6QCJhcGl0ZXN0Il07CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAw
KSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBbd2ViVmlldyBzZXRO
YXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3IHNldFVJRGVs
ZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOkAiPHNj
cmlwdD5mZXRjaCgnbWF0Y2gnKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKXthbGVydCgnZmV0Y2gg
Y29tcGxldGUnKX0pPC9zY3JpcHQ+IiBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiYXBp
dGVzdDovLy8iXV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZEFsZXJ0
KTsKKyAgICBFWFBFQ1RfVFJVRShyZWNlaXZlZE5vdGlmaWNhdGlvbik7Cit9CisKKyNlbmRpZiAv
LyBXS19BUElfRU5BQkxFRAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321705</attachid>
            <date>2017-09-25 11:15:46 -0700</date>
            <delta_ts>2017-09-25 11:40:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177013-20170925111545.patch</filename>
            <type>text/plain</type>
            <size>70015</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE3LTA5LTI1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFdLQ29u
dGVudFJ1bGVMaXN0IG5vdGlmeSBhY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MDEzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
MTA3MzkzNj4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBD
b3ZlcmVkIGJ5IG5ldyBBUEkgdGVzdHMuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6Omhhc1N0cmluZ0FyZ3VtZW50KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OnJlc29sdmVQZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpzZXJpYWxpemVBY3Rpb25zKToKKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5KToK
KyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaDoKKyAg
ICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpsb2FkQWN0aW9uKToKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpkZXNlcmlhbGl6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpkZXNlcmlhbGl6ZVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbjo6c2VyaWFsaXplZExl
bmd0aCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb246OkFjdGlvbik6
CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQ6OnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnBy
b2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JQaW5nTG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6YXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KToKKyAgICAg
ICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIGxvYWRlci9QaW5nTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNG
b3JMb2FkKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFsKToKKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSk6CisgICAgICAgICog
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmFwcGx5QmxvY2tlZFN0YXR1cyk6CisgICAgICAgICog
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oOgorICAgICAgICAqIHBhZ2UvQ2hy
b21lQ2xpZW50Lmg6CisKIDIwMTctMDktMjUgIE1zMmdlciAgPE1zMmdlckBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFVwZGF0ZSB3YWl0U3luYyBhbmQgdGhlIFRJTUVPVVRfSUdOT1JFRCBjb25zdGFu
dCB0byB1c2Ugc2lnbmVkIGludGVnZXJzLgpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oCShyZXZp
c2lvbiAyMjI0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uQWN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNywxMiBAQAogCiAj
aWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgUGFnZTsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIAogbmFtZXNwYWNlIENvbnRl
bnRFeHRlbnNpb25zIHsKQEAgLTM5LDE3ICs0MywzNSBAQCBlbnVtIGNsYXNzIEFjdGlvblR5cGUg
OiB1aW50OF90IHsKICAgICBCbG9ja0xvYWQsCiAgICAgQmxvY2tDb29raWVzLAogICAgIENTU0Rp
c3BsYXlOb25lU2VsZWN0b3IsCi0gICAgSWdub3JlUHJldmlvdXNSdWxlcyA9IDMsCi0gICAgTWFr
ZUhUVFBTID0gNCwKKyAgICBOb3RpZnksCisgICAgSWdub3JlUHJldmlvdXNSdWxlcywKKyAgICBN
YWtlSFRUUFMsCiB9OwogCitzdGF0aWMgaW5saW5lIGJvb2wgaGFzU3RyaW5nQXJndW1lbnQoQWN0
aW9uVHlwZSBhY3Rpb25UeXBlKQoreworICAgIHN3aXRjaCAoYWN0aW9uVHlwZSkgeworICAgIGNh
c2UgQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvcjoKKyAgICBjYXNlIEFjdGlvblR5
cGU6Ok5vdGlmeToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBBY3Rpb25UeXBlOjpC
bG9ja0xvYWQ6CisgICAgY2FzZSBBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXM6CisgICAgY2FzZSBB
Y3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzOgorICAgIGNhc2UgQWN0aW9uVHlwZTo6TWFr
ZUhUVFBTOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogc3RydWN0IEJsb2NrZWRTdGF0dXMgewog
ICAgIGJvb2wgYmxvY2tlZExvYWQgeyBmYWxzZSB9OwogICAgIGJvb2wgYmxvY2tlZENvb2tpZXMg
eyBmYWxzZSB9OwogICAgIGJvb2wgbWFkZUhUVFBTIHsgZmFsc2UgfTsKKyAgICBIYXNoU2V0PHN0
ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IG5vdGlmaWNhdGlvbnM7CiB9OwogCi1XRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5QmxvY2tlZFN0YXR1c1RvUmVxdWVzdChjb25zdCBCbG9ja2VkU3RhdHVz
JiwgUmVzb3VyY2VSZXF1ZXN0Jik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5QmxvY2tlZFN0
YXR1c1RvUmVxdWVzdChjb25zdCBCbG9ja2VkU3RhdHVzJiwgUGFnZSosIFJlc291cmNlUmVxdWVz
dCYpOwogCiB9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25Db21waWxlci5jcHAJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDQ4ICs2OCw0MSBAQCBzdGF0aWMgdm9pZCBzZXJpYWxpemVTdHJpbmcoVmVjdG9y
PFNlcmlhCiAgICAgfQogfQogCisvLyBjc3MtZGlzcGxheS1ub25lIGNvbWJpbmluZyBpcyBzcGVj
aWFsIGJlY2F1c2Ugd2UgY29tYmluZSB0aGUgc3RyaW5nIGFyZ3VtZW50cyB3aXRoIGNvbW1hcyBi
ZWNhdXNlIHdlIGtub3cgdGhleSBhcmUgY3NzIHNlbGVjdG9ycy4KIHN0cnVjdCBQZW5kaW5nRGlz
cGxheU5vbmVBY3Rpb25zIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBzZWxlY3RvcnM7Ci0gICAgVmVj
dG9yPHVuc2lnbmVkPiBjbGllbnRMb2NhdGlvbnM7CisgICAgU3RyaW5nQnVpbGRlciBjb21iaW5l
ZFNlbGVjdG9yczsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGNsaWVudExvY2F0aW9uczsKIH07CisK
IHVzaW5nIFBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnNNYXAgPSBIYXNoTWFwPFRyaWdnZXIsIFBl
bmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnMsIFRyaWdnZXJIYXNoLCBUcmlnZ2VySGFzaFRyYWl0cz47
CiAKLXN0YXRpYyB2b2lkIHJlc29sdmVQZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25zKFZlY3RvcjxT
ZXJpYWxpemVkQWN0aW9uQnl0ZT4mIGFjdGlvbnMsIFZlY3Rvcjx1bnNpZ25lZD4mIGFjdGlvbkxv
Y2F0aW9ucywgUGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9uc01hcCYgcGVuZGluZ0Rpc3BsYXlOb25l
QWN0aW9uc01hcCkKK3N0YXRpYyB2b2lkIHJlc29sdmVQZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25z
KFZlY3RvcjxTZXJpYWxpemVkQWN0aW9uQnl0ZT4mIGFjdGlvbnMsIFZlY3Rvcjx1aW50MzJfdD4m
IGFjdGlvbkxvY2F0aW9ucywgUGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9uc01hcCYgbWFwKQogewot
ICAgIGZvciAoYXV0byYgc2xvdCA6IHBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnNNYXApIHsKLSAg
ICAgICAgUGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9ucyYgcGVuZGluZ0FjdGlvbnMgPSBzbG90LnZh
bHVlOwotCi0gICAgICAgIFN0cmluZ0J1aWxkZXIgY29tYmluZWRTZWxlY3RvcnM7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwZW5kaW5nQWN0aW9ucy5zZWxlY3RvcnMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChpKQotICAgICAgICAgICAgICAgIGNvbWJpbmVkU2Vs
ZWN0b3JzLmFwcGVuZCgnLCcpOwotICAgICAgICAgICAgY29tYmluZWRTZWxlY3RvcnMuYXBwZW5k
KHBlbmRpbmdBY3Rpb25zLnNlbGVjdG9yc1tpXSk7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNp
Z25lZCBhY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOworICAgIGZvciAoYXV0byYgcGVu
ZGluZ0Rpc3BsYXlOb25lQWN0aW9ucyA6IG1hcC52YWx1ZXMoKSkgeworICAgICAgICB1aW50MzJf
dCBhY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOwogICAgICAgICBhY3Rpb25zLmFwcGVu
ZChzdGF0aWNfY2FzdDxTZXJpYWxpemVkQWN0aW9uQnl0ZT4oQWN0aW9uVHlwZTo6Q1NTRGlzcGxh
eU5vbmVTZWxlY3RvcikpOwotICAgICAgICBzZXJpYWxpemVTdHJpbmcoYWN0aW9ucywgY29tYmlu
ZWRTZWxlY3RvcnMudG9TdHJpbmcoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY2xpZW50TG9j
YXRpb24gOiBwZW5kaW5nQWN0aW9ucy5jbGllbnRMb2NhdGlvbnMpCisgICAgICAgIHNlcmlhbGl6
ZVN0cmluZyhhY3Rpb25zLCBwZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25zLmNvbWJpbmVkU2VsZWN0
b3JzLnRvU3RyaW5nKCkpOworICAgICAgICBmb3IgKHVpbnQzMl90IGNsaWVudExvY2F0aW9uIDog
cGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9ucy5jbGllbnRMb2NhdGlvbnMpCiAgICAgICAgICAgICBh
Y3Rpb25Mb2NhdGlvbnNbY2xpZW50TG9jYXRpb25dID0gYWN0aW9uTG9jYXRpb247CiAgICAgfQot
ICAgIHBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnNNYXAuY2xlYXIoKTsKKyAgICBtYXAuY2xlYXIo
KTsKIH0KIAogc3RhdGljIFZlY3Rvcjx1bnNpZ25lZD4gc2VyaWFsaXplQWN0aW9ucyhjb25zdCBW
ZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+JiBydWxlTGlzdCwgVmVjdG9yPFNlcmlhbGl6ZWRB
Y3Rpb25CeXRlPiYgYWN0aW9ucykKIHsKICAgICBBU1NFUlQoIWFjdGlvbnMuc2l6ZSgpKTsKIAot
ICAgIFZlY3Rvcjx1bnNpZ25lZD4gYWN0aW9uTG9jYXRpb25zOworICAgIFZlY3Rvcjx1aW50MzJf
dD4gYWN0aW9uTG9jYXRpb25zOwogCi0gICAgLy8gT3JkZXIgb25seSBtYXR0ZXJzIGJlY2F1c2Ug
b2YgSWdub3JlUHJldmlvdXNSdWxlcy4gQWxsIG90aGVyIGlkZW50aWNhbCBhY3Rpb25zIGNhbiBi
ZSBjb21iaW5lZCBiZXR3ZWVuIGVhY2ggSWdub3JlUHJldmlvdXNSdWxlcwotICAgIC8vIGFuZCBD
U1NEaXNwbGF5Tm9uZSBzdHJpbmdzIGNhbiBiZSBjb21iaW5lZCBpZiB0aGVpciB0cmlnZ2VycyBh
cmUgaWRlbnRpY2FsLgogICAgIHVzaW5nIEFjdGlvbkxvY2F0aW9uID0gdWludDMyX3Q7CiAgICAg
dXNpbmcgQWN0aW9uTWFwID0gSGFzaE1hcDxSZXNvdXJjZUZsYWdzLCBBY3Rpb25Mb2NhdGlvbiwg
RGVmYXVsdEhhc2g8UmVzb3VyY2VGbGFncz46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8UmVzb3VyY2VGbGFncz4+OworICAgIHVzaW5nIFN0cmluZ0FjdGlvbk1hcCA9
IEhhc2hNYXA8c3RkOjpwYWlyPFN0cmluZywgUmVzb3VyY2VGbGFncz4sIEFjdGlvbkxvY2F0aW9u
LCBEZWZhdWx0SGFzaDxzdGQ6OnBhaXI8U3RyaW5nLCBSZXNvdXJjZUZsYWdzPj46Okhhc2gsIFBh
aXJIYXNoVHJhaXRzPEhhc2hUcmFpdHM8U3RyaW5nPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5
SGFzaFRyYWl0czxSZXNvdXJjZUZsYWdzPj4+OwogICAgIEFjdGlvbk1hcCBibG9ja0xvYWRBY3Rp
b25zTWFwOwogICAgIEFjdGlvbk1hcCBibG9ja0Nvb2tpZXNBY3Rpb25zTWFwOwogICAgIFBlbmRp
bmdEaXNwbGF5Tm9uZUFjdGlvbnNNYXAgY3NzRGlzcGxheU5vbmVBY3Rpb25zTWFwOwogICAgIEFj
dGlvbk1hcCBpZ25vcmVQcmV2aW91c1J1bGVBY3Rpb25zTWFwOwogICAgIEFjdGlvbk1hcCBtYWtl
SFRUUFNBY3Rpb25zTWFwOworICAgIFN0cmluZ0FjdGlvbk1hcCBub3RpZnlBY3Rpb25zTWFwOwog
CiAgICAgZm9yICh1bnNpZ25lZCBydWxlSW5kZXggPSAwOyBydWxlSW5kZXggPCBydWxlTGlzdC5z
aXplKCk7ICsrcnVsZUluZGV4KSB7CiAgICAgICAgIGNvbnN0IENvbnRlbnRFeHRlbnNpb25SdWxl
JiBydWxlID0gcnVsZUxpc3RbcnVsZUluZGV4XTsKQEAgLTEyMiw2ICsxMTUsNyBAQCBzdGF0aWMg
VmVjdG9yPHVuc2lnbmVkPiBzZXJpYWxpemVBY3Rpb25zCiAgICAgICAgICAgICBibG9ja0Nvb2tp
ZXNBY3Rpb25zTWFwLmNsZWFyKCk7CiAgICAgICAgICAgICBjc3NEaXNwbGF5Tm9uZUFjdGlvbnNN
YXAuY2xlYXIoKTsKICAgICAgICAgICAgIG1ha2VIVFRQU0FjdGlvbnNNYXAuY2xlYXIoKTsKKyAg
ICAgICAgICAgIG5vdGlmeUFjdGlvbnNNYXAuY2xlYXIoKTsKICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICBpZ25vcmVQcmV2aW91c1J1bGVBY3Rpb25zTWFwLmNsZWFyKCk7CiAKQEAgLTEzMSwx
NiArMTI1LDE3IEBAIHN0YXRpYyBWZWN0b3I8dW5zaWduZWQ+IHNlcmlhbGl6ZUFjdGlvbnMKICAg
ICAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy5hcHBlbmQoYWN0aW9ucy5zaXplKCkpOwogCiAgICAg
ICAgICAgICBhY3Rpb25zLmFwcGVuZChzdGF0aWNfY2FzdDxTZXJpYWxpemVkQWN0aW9uQnl0ZT4o
YWN0aW9uVHlwZSkpOwotICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT0gQWN0aW9uVHlwZTo6
Q1NTRGlzcGxheU5vbmVTZWxlY3RvcikKKyAgICAgICAgICAgIGlmIChoYXNTdHJpbmdBcmd1bWVu
dChhY3Rpb25UeXBlKSkKICAgICAgICAgICAgICAgICBzZXJpYWxpemVTdHJpbmcoYWN0aW9ucywg
cnVsZS5hY3Rpb24oKS5zdHJpbmdBcmd1bWVudCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBBU1NFUlQocnVsZS5hY3Rpb24oKS5zdHJpbmdBcmd1bWVudCgpLmlzTnVsbCgp
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgUmVzb3VyY2VG
bGFncyBmbGFncyA9IHJ1bGUudHJpZ2dlcigpLmZsYWdzOwogICAgICAgICB1bnNpZ25lZCBhY3Rp
b25Mb2NhdGlvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKICAgICAg
ICAgCi0gICAgICAgIGF1dG8gZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uID0gWyZdIChBY3Rpb25N
YXAmIG1hcCkgCi0gICAgICAgIHsKKyAgICAgICAgYXV0byBmaW5kT3JNYWtlQWN0aW9uTG9jYXRp
b24gPSBbJl0gKEFjdGlvbk1hcCYgbWFwKSB7CiAgICAgICAgICAgICBjb25zdCBhdXRvIGV4aXN0
aW5nQWN0aW9uID0gbWFwLmZpbmQoZmxhZ3MpOwogICAgICAgICAgICAgaWYgKGV4aXN0aW5nQWN0
aW9uID09IG1hcC5lbmQoKSkgewogICAgICAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9uID0gYWN0
aW9ucy5zaXplKCk7CkBAIC0xNDksMTMgKzE0NCwyNyBAQCBzdGF0aWMgVmVjdG9yPHVuc2lnbmVk
PiBzZXJpYWxpemVBY3Rpb25zCiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBh
Y3Rpb25Mb2NhdGlvbiA9IGV4aXN0aW5nQWN0aW9uLT52YWx1ZTsKICAgICAgICAgfTsKKyAgICAg
ICAgCisgICAgICAgIGF1dG8gZmluZE9yTWFrZVN0cmluZ0FjdGlvbkxvY2F0aW9uID0gWyZdIChT
dHJpbmdBY3Rpb25NYXAmIG1hcCkgeworICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBhcmd1bWVu
dCA9IHJ1bGUuYWN0aW9uKCkuc3RyaW5nQXJndW1lbnQoKTsKKyAgICAgICAgICAgIGF1dG8gZXhp
c3RpbmdBY3Rpb24gPSBtYXAuZmluZChzdGQ6Om1ha2VfcGFpcihhcmd1bWVudCwgZmxhZ3MpKTsK
KyAgICAgICAgICAgIGlmIChleGlzdGluZ0FjdGlvbiA9PSBtYXAuZW5kKCkpIHsKKyAgICAgICAg
ICAgICAgICBhY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOworICAgICAgICAgICAgICAg
IGFjdGlvbnMuYXBwZW5kKHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRBY3Rpb25CeXRlPihhY3Rpb25U
eXBlKSk7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplU3RyaW5nKGFjdGlvbnMsIGFyZ3VtZW50
KTsKKyAgICAgICAgICAgICAgICBtYXAuc2V0KHN0ZDo6bWFrZV9wYWlyKGFyZ3VtZW50LCBmbGFn
cyksIGFjdGlvbkxvY2F0aW9uKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IGFjdGlvbkxvY2F0aW9uID0gZXhpc3RpbmdBY3Rpb24tPnZhbHVlOworICAgICAgICB9OwogCiAg
ICAgICAgIHN3aXRjaCAoYWN0aW9uVHlwZSkgewogICAgICAgICBjYXNlIEFjdGlvblR5cGU6OkNT
U0Rpc3BsYXlOb25lU2VsZWN0b3I6IHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8gYWRkUmVzdWx0
ID0gY3NzRGlzcGxheU5vbmVBY3Rpb25zTWFwLmFkZChydWxlLnRyaWdnZXIoKSwgUGVuZGluZ0Rp
c3BsYXlOb25lQWN0aW9ucygpKTsKLSAgICAgICAgICAgIFBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlv
bnMmIHBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnMgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
OwotICAgICAgICAgICAgcGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9ucy5zZWxlY3RvcnMuYXBwZW5k
KHJ1bGUuYWN0aW9uKCkuc3RyaW5nQXJndW1lbnQoKSk7Ci0gICAgICAgICAgICBwZW5kaW5nRGlz
cGxheU5vbmVBY3Rpb25zLmNsaWVudExvY2F0aW9ucy5hcHBlbmQoYWN0aW9uTG9jYXRpb25zLnNp
emUoKSk7CisgICAgICAgICAgICBhdXRvJiBwZW5kaW5nU3RyaW5nQWN0aW9ucyA9IGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoIXBlbmRpbmdTdHJpbmdBY3Rpb25z
LmNvbWJpbmVkU2VsZWN0b3JzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBwZW5kaW5nU3Ry
aW5nQWN0aW9ucy5jb21iaW5lZFNlbGVjdG9ycy5hcHBlbmQoJywnKTsKKyAgICAgICAgICAgIHBl
bmRpbmdTdHJpbmdBY3Rpb25zLmNvbWJpbmVkU2VsZWN0b3JzLmFwcGVuZChydWxlLmFjdGlvbigp
LnN0cmluZ0FyZ3VtZW50KCkpOworICAgICAgICAgICAgcGVuZGluZ1N0cmluZ0FjdGlvbnMuY2xp
ZW50TG9jYXRpb25zLmFwcGVuZChhY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKIAogICAgICAgICAg
ICAgYWN0aW9uTG9jYXRpb24gPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3Miw2ICsxODEsOSBAQCBzdGF0aWMgVmVjdG9yPHVu
c2lnbmVkPiBzZXJpYWxpemVBY3Rpb25zCiAgICAgICAgIGNhc2UgQWN0aW9uVHlwZTo6TWFrZUhU
VFBTOgogICAgICAgICAgICAgZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uKG1ha2VIVFRQU0FjdGlv
bnNNYXApOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWN0aW9uVHlwZTo6Tm90
aWZ5OgorICAgICAgICAgICAgZmluZE9yTWFrZVN0cmluZ0FjdGlvbkxvY2F0aW9uKG5vdGlmeUFj
dGlvbnNNYXApOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBhY3Rp
b25Mb2NhdGlvbnMuYXBwZW5kKGFjdGlvbkxvY2F0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9y
LmNwcAkocmV2aXNpb24gMjIyNDUwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcs
OCBAQCBjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiBjb250ZW50RXh0ZW5zCiAgICAgICAgICAg
ICAgICAgcmV0dXJuICJBIHRyaWdnZXIgY2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBjb25kaXRp
b24gKGlmLWRvbWFpbiwgdW5sZXNzLWRvbWFpbiwgaWYtdG9wLXVybCwgb3IgdW5sZXNzLXRvcC11
cmwpIjsKICAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OVG9wVVJM
QW5kRG9tYWluQ29uZGl0aW9uczoKICAgICAgICAgICAgICAgICByZXR1cm4gIkEgbGlzdCBjYW5u
b3QgaGF2ZSBpZi1kb21haW4gYW5kIHVubGVzcy1kb21haW4gbWl4ZWQgd2l0aCBpZi10b3AtdXJs
IGFuZCB1bmxlc3MtdG9wLXVybCI7CisgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTkludmFsaWROb3RpZmljYXRpb246CisgICAgICAgICAgICAgICAgcmV0dXJuICJB
IG5vdGlmeSBhY3Rpb24gbXVzdCBoYXZlIGEgc3RyaW5nIG5vdGlmaWNhdGlvbiI7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bkVycm9yLmgJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1
OCw3IEBAIGVudW0gY2xhc3MgQ29udGVudEV4dGVuc2lvbkVycm9yIHsKICAgICBKU09OSW52YWxp
ZEFjdGlvbiwKICAgICBKU09OSW52YWxpZEFjdGlvblR5cGUsCiAgICAgSlNPTkludmFsaWRDU1NE
aXNwbGF5Tm9uZUFjdGlvblR5cGUsCisgICAgSlNPTkludmFsaWROb3RpZmljYXRpb24sCiAgICAg
SlNPTkludmFsaWRSZWdleCwKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCShyZXZp
c2lvbiAyMjI0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4LDExICsyNDgsMTEgQEAg
c3RhdGljIEV4cGVjdGVkPHN0ZDo6b3B0aW9uYWw8QWN0aW9uPiwgcwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGNvbnN0IEpTVmFsdWUgYWN0aW9uT2Jq
ZWN0ID0gcnVsZU9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMs
ICJhY3Rpb24iKSk7Ci0gICAgaWYgKCFhY3Rpb25PYmplY3QgfHwgc2NvcGUuZXhjZXB0aW9uKCkg
fHwgIWFjdGlvbk9iamVjdC5pc09iamVjdCgpKQorICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8
fCAhYWN0aW9uT2JqZWN0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQWN0aW9uKTsKIAogICAgIGNvbnN0
IEpTVmFsdWUgdHlwZU9iamVjdCA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJmV4ZWMsICJ0eXBlIikpOwotICAgIGlmICghdHlwZU9iamVjdCB8fCBzY29w
ZS5leGNlcHRpb24oKSB8fCAhdHlwZU9iamVjdC5pc1N0cmluZygpKQorICAgIGlmIChzY29wZS5l
eGNlcHRpb24oKSB8fCAhdHlwZU9iamVjdC5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZEFjdGlvblR5cGUp
OwogCiAgICAgU3RyaW5nIGFjdGlvblR5cGUgPSBhc1N0cmluZyh0eXBlT2JqZWN0KS0+dmFsdWUo
JmV4ZWMpOwpAQCAtMjY1LDcgKzI2NSw3IEBAIHN0YXRpYyBFeHBlY3RlZDxzdGQ6Om9wdGlvbmFs
PEFjdGlvbj4sIHMKICAgICAgICAgcmV0dXJuIHt7IEFjdGlvblR5cGU6OkJsb2NrQ29va2llcyB9
fTsKICAgICBpZiAoYWN0aW9uVHlwZSA9PSAiY3NzLWRpc3BsYXktbm9uZSIpIHsKICAgICAgICAg
SlNWYWx1ZSBzZWxlY3RvciA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJmV4ZWMsICJzZWxlY3RvciIpKTsKLSAgICAgICAgaWYgKCFzZWxlY3RvciB8fCBz
Y29wZS5leGNlcHRpb24oKSB8fCAhc2VsZWN0b3IuaXNTdHJpbmcoKSkKKyAgICAgICAgaWYgKHNj
b3BlLmV4Y2VwdGlvbigpIHx8ICFzZWxlY3Rvci5pc1N0cmluZygpKQogICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRDU1NE
aXNwbGF5Tm9uZUFjdGlvblR5cGUpOwogCiAgICAgICAgIFN0cmluZyBzZWxlY3RvclN0cmluZyA9
IGFzU3RyaW5nKHNlbGVjdG9yKS0+dmFsdWUoJmV4ZWMpOwpAQCAtMjczLDEwICsyNzMsMTYgQEAg
c3RhdGljIEV4cGVjdGVkPHN0ZDo6b3B0aW9uYWw8QWN0aW9uPiwgcwogICAgICAgICAgICAgLy8g
U2tpcCBydWxlcyB3aXRoIGludmFsaWQgc2VsZWN0b3JzIHRvIGJlIGJhY2t3YXJkcy1jb21wYXRp
YmxlLgogICAgICAgICAgICAgcmV0dXJuIHsgc3RkOjpudWxsb3B0IH07CiAgICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHsgQWN0aW9uKEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3Is
IHNlbGVjdG9yU3RyaW5nKSB9OworICAgICAgICByZXR1cm4ge3sgQWN0aW9uVHlwZTo6Q1NTRGlz
cGxheU5vbmVTZWxlY3Rvciwgc2VsZWN0b3JTdHJpbmcgfX07CiAgICAgfQogICAgIGlmIChhY3Rp
b25UeXBlID09ICJtYWtlLWh0dHBzIikKICAgICAgICAgcmV0dXJuIHt7IEFjdGlvblR5cGU6Ok1h
a2VIVFRQUyB9fTsKKyAgICBpZiAoYWN0aW9uVHlwZSA9PSAibm90aWZ5IikgeworICAgICAgICBK
U1ZhbHVlIG5vdGlmaWNhdGlvbiA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJmV4ZWMsICJub3RpZmljYXRpb24iKSk7CisgICAgICAgIGlmIChzY29wZS5l
eGNlcHRpb24oKSB8fCAhbm90aWZpY2F0aW9uLmlzU3RyaW5nKCkpCisgICAgICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZE5vdGlm
aWNhdGlvbik7CisgICAgICAgIHJldHVybiB7eyBBY3Rpb25UeXBlOjpOb3RpZnksIGFzU3RyaW5n
KG5vdGlmaWNhdGlvbiktPnZhbHVlKCZleGVjKSB9fTsKKyAgICB9CiAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRBY3Rpb25UeXBlKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvblJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmNwcAkocmV2aXNpb24gMjIyNDUwKQorKysgU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIEFjdGlvbiBBY3Rpb246OmRlc2VyaWFsaXplKGNv
bnN0IFNlcmlhbGkKICAgICBjYXNlIEFjdGlvblR5cGU6Ok1ha2VIVFRQUzoKICAgICAgICAgcmV0
dXJuIEFjdGlvbihhY3Rpb25UeXBlLCBsb2NhdGlvbik7CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpD
U1NEaXNwbGF5Tm9uZVNlbGVjdG9yOgorICAgIGNhc2UgQWN0aW9uVHlwZTo6Tm90aWZ5OgogICAg
ICAgICByZXR1cm4gQWN0aW9uKGFjdGlvblR5cGUsIGRlc2VyaWFsaXplU3RyaW5nKGFjdGlvbnMs
IGFjdGlvbnNMZW5ndGgsIGxvY2F0aW9uICsgc2l6ZW9mKEFjdGlvblR5cGUpKSwgbG9jYXRpb24p
OwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNzgsNiArNzks
NyBAQCBBY3Rpb25UeXBlIEFjdGlvbjo6ZGVzZXJpYWxpemVUeXBlKGNvbnN0CiAgICAgc3dpdGNo
ICh0eXBlKSB7CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXM6CiAgICAgY2FzZSBB
Y3Rpb25UeXBlOjpCbG9ja0xvYWQ6CisgICAgY2FzZSBBY3Rpb25UeXBlOjpOb3RpZnk6CiAgICAg
Y2FzZSBBY3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzOgogICAgIGNhc2UgQWN0aW9uVHlw
ZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvcjoKICAgICBjYXNlIEFjdGlvblR5cGU6Ok1ha2VIVFRQ
UzoKQEAgLTk1LDYgKzk3LDcgQEAgdWludDMyX3QgQWN0aW9uOjpzZXJpYWxpemVkTGVuZ3RoKGNv
bnN0IAogICAgIGNhc2UgQWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlczoKICAgICBjYXNl
IEFjdGlvblR5cGU6Ok1ha2VIVFRQUzoKICAgICAgICAgcmV0dXJuIHNpemVvZihBY3Rpb25UeXBl
KTsKKyAgICBjYXNlIEFjdGlvblR5cGU6Ok5vdGlmeToKICAgICBjYXNlIEFjdGlvblR5cGU6OkNT
U0Rpc3BsYXlOb25lU2VsZWN0b3I6IHsKICAgICAgICAgdWludDMyX3QgcHJlZml4TGVuZ3RoID0g
c2l6ZW9mKEFjdGlvblR5cGUpICsgc2l6ZW9mKHVpbnQzMl90KSArIHNpemVvZihib29sKTsKICAg
ICAgICAgdWludDMyX3Qgc3RyaW5nU3RhcnRJbmRleCA9IGxvY2F0aW9uICsgcHJlZml4TGVuZ3Ro
OwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
blJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uUnVsZS5oCShyZXZpc2lvbiAyMjI0NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzUsMTQgKzEzNSwxNCBAQCBzdHJ1Y3QgQWN0aW9uIHsKICAgICAgICAgLCBtX2FjdGlv
bklEKGFjdGlvbklEKQogICAgICAgICAsIG1fc3RyaW5nQXJndW1lbnQoc3RyaW5nQXJndW1lbnQp
CiAgICAgewotICAgICAgICBBU1NFUlQodHlwZSA9PSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9u
ZVNlbGVjdG9yKTsKKyAgICAgICAgQVNTRVJUKGhhc1N0cmluZ0FyZ3VtZW50KHR5cGUpKTsKICAg
ICB9CiAKICAgICBBY3Rpb24oQWN0aW9uVHlwZSB0eXBlLCB1aW50MzJfdCBhY3Rpb25JRCA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKICAgICAgICAgOiBtX3R5cGUodHlw
ZSkKICAgICAgICAgLCBtX2FjdGlvbklEKGFjdGlvbklEKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KHR5cGUgIT0gQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3Rvcik7CisgICAgICAgIEFT
U0VSVCghaGFzU3RyaW5nQXJndW1lbnQodHlwZSkpOwogICAgIH0KIAogICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBBY3Rpb24mIG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQuY3BwCShyZXZpc2lvbiAyMjI0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCisjaW5jbHVkZSAi
Q2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1
ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgiCkBAIC0zOCw2ICs0MCw3IEBACiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUg
Ik1haW5GcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRJ
bmZvLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSAiVXNlckNvbnRlbnRDb250cm9sbGVy
LmgiCkBAIC0xNzAsNiArMTczLDcgQEAgQmxvY2tlZFN0YXR1cyBDb250ZW50RXh0ZW5zaW9uc0Jh
Y2tlbmQ6OgogICAgIGJvb2wgd2lsbEJsb2NrTG9hZCA9IGZhbHNlOwogICAgIGJvb2wgd2lsbEJs
b2NrQ29va2llcyA9IGZhbHNlOwogICAgIGJvb2wgd2lsbE1ha2VIVFRQUyA9IGZhbHNlOworICAg
IEhhc2hTZXQ8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gbm90aWZpY2F0aW9uczsKICAgICBm
b3IgKGNvbnN0IGF1dG8mIGFjdGlvbiA6IGFjdGlvbnMuZmlyc3QpIHsKICAgICAgICAgc3dpdGNo
IChhY3Rpb24udHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6OkJsb2NrTG9hZDoKQEAgLTE4NCw2ICsxODgsOSBAQCBCbG9ja2VkU3RhdHVzIENvbnRl
bnRFeHRlbnNpb25zQmFja2VuZDo6CiAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50RG9jdW1l
bnQpCiAgICAgICAgICAgICAgICAgY3VycmVudERvY3VtZW50LT5leHRlbnNpb25TdHlsZVNoZWV0
cygpLmFkZERpc3BsYXlOb25lU2VsZWN0b3IoYWN0aW9uLmV4dGVuc2lvbklkZW50aWZpZXIoKSwg
YWN0aW9uLnN0cmluZ0FyZ3VtZW50KCksIGFjdGlvbi5hY3Rpb25JRCgpKTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpOb3Rp
Znk6CisgICAgICAgICAgICBub3RpZmljYXRpb25zLmFkZChzdGQ6Om1ha2VfcGFpcihhY3Rpb24u
ZXh0ZW5zaW9uSWRlbnRpZmllcigpLCBhY3Rpb24uc3RyaW5nQXJndW1lbnQoKSkpOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
Ok1ha2VIVFRQUzogewogICAgICAgICAgICAgaWYgKCh1cmwucHJvdG9jb2xJcygiaHR0cCIpIHx8
IHVybC5wcm90b2NvbElzKCJ3cyIpKQogICAgICAgICAgICAgICAgICYmICghdXJsLnBvcnQoKSB8
fCBpc0RlZmF1bHRQb3J0Rm9yUHJvdG9jb2wodXJsLnBvcnQoKS52YWx1ZSgpLCB1cmwucHJvdG9j
b2woKSkpKQpAQCAtMjEzLDcgKzIyMCw3IEBAIEJsb2NrZWRTdGF0dXMgQ29udGVudEV4dGVuc2lv
bnNCYWNrZW5kOjoKICAgICAgICAgaWYgKHdpbGxCbG9ja0xvYWQpCiAgICAgICAgICAgICBjdXJy
ZW50RG9jdW1lbnQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkNvbnRlbnRCbG9j
a2VyLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIkNvbnRlbnQgYmxvY2tlciBwcmV2
ZW50ZWQgZnJhbWUgZGlzcGxheWluZyAiLCBtYWluRG9jdW1lbnRVUkwuc3RyaW5nKCksICIgZnJv
bSBsb2FkaW5nIGEgcmVzb3VyY2UgZnJvbSAiLCB1cmwuc3RyaW5nKCkpKTsKICAgICB9Ci0gICAg
cmV0dXJuIHsgd2lsbEJsb2NrTG9hZCwgd2lsbEJsb2NrQ29va2llcywgd2lsbE1ha2VIVFRQUyB9
OworICAgIHJldHVybiB7IHdpbGxCbG9ja0xvYWQsIHdpbGxCbG9ja0Nvb2tpZXMsIHdpbGxNYWtl
SFRUUFMsIFdURk1vdmUobm90aWZpY2F0aW9ucykgfTsKIH0KIAogQmxvY2tlZFN0YXR1cyBDb250
ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JQaW5n
TG9hZChjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBtYWluRG9jdW1lbnRVUkwpCkBAIC0yNDAs
MTMgKzI0NywxNCBAQCBCbG9ja2VkU3RhdHVzIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6CiAg
ICAgICAgICAgICAgICAgd2lsbE1ha2VIVFRQUyA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5v
bmVTZWxlY3RvcjoKKyAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
Tm90aWZ5OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6Oklnbm9yZVByZXZpb3VzUnVsZXM6CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHsg
d2lsbEJsb2NrTG9hZCwgd2lsbEJsb2NrQ29va2llcywgd2lsbE1ha2VIVFRQUyB9OworICAgIHJl
dHVybiB7IHdpbGxCbG9ja0xvYWQsIHdpbGxCbG9ja0Nvb2tpZXMsIHdpbGxNYWtlSFRUUFMsIHsg
fSB9OwogfQogCiBjb25zdCBTdHJpbmcmIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6ZGlzcGxh
eU5vbmVDU1NSdWxlKCkKQEAgLTI1NSw4ICsyNjMsMTEgQEAgY29uc3QgU3RyaW5nJiBDb250ZW50
RXh0ZW5zaW9uc0JhY2tlbmQ6OgogICAgIHJldHVybiBydWxlOwogfQogCi12b2lkIGFwcGx5Qmxv
Y2tlZFN0YXR1c1RvUmVxdWVzdChjb25zdCBCbG9ja2VkU3RhdHVzJiBzdGF0dXMsIFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCkKK3ZvaWQgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KGNvbnN0
IEJsb2NrZWRTdGF0dXMmIHN0YXR1cywgUGFnZSogcGFnZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KQogeworICAgIGlmIChwYWdlICYmICFzdGF0dXMubm90aWZpY2F0aW9ucy5pc0VtcHR5KCkp
CisgICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNh
dGlvbihyZXF1ZXN0LnVybCgpLCBzdGF0dXMubm90aWZpY2F0aW9ucyk7CisKICAgICBpZiAoc3Rh
dHVzLmJsb2NrZWRDb29raWVzKQogICAgICAgICByZXF1ZXN0LnNldEFsbG93Q29va2llcyhmYWxz
ZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24g
MjIyNDUwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgwNCw3ICsyODA0LDcgQEAgdW5zaWduZWQgbG9uZyBGcmFtZUxvYWRlcjo6
bG9hZFJlc291cmNlUwogICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKSB7
CiAgICAgICAgICAgICBpZiAobV9kb2N1bWVudExvYWRlcikgewogICAgICAgICAgICAgICAgIGF1
dG8gYmxvY2tlZFN0YXR1cyA9IHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29u
dGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChuZXdSZXF1ZXN0LnVybCgpLCBSZXNvdXJjZVR5cGU6
OlJhdywgKm1fZG9jdW1lbnRMb2FkZXIpOwotICAgICAgICAgICAgICAgIGFwcGx5QmxvY2tlZFN0
YXR1c1RvUmVxdWVzdChibG9ja2VkU3RhdHVzLCBuZXdSZXF1ZXN0KTsKKyAgICAgICAgICAgICAg
ICBhcHBseUJsb2NrZWRTdGF0dXNUb1JlcXVlc3QoYmxvY2tlZFN0YXR1cywgcGFnZSwgbmV3UmVx
dWVzdCk7CiAgICAgICAgICAgICAgICAgaWYgKGJsb2NrZWRTdGF0dXMuYmxvY2tlZExvYWQpIHsK
ICAgICAgICAgICAgICAgICAgICAgbmV3UmVxdWVzdCA9IHsgfTsKICAgICAgICAgICAgICAgICAg
ICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGlu
aXRpYWxSZXF1ZXN0LnVybCgpLCBlbXB0eVN0cmluZygpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9QaW5nTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUGluZ0xvYWRlci5jcHAJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9QaW5nTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBzdGF0
aWMgYm9vbCBwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzCiAgICAgaWYgKCFwYWdlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXV0byBzdGF0dXMgPSBwYWdlLT51c2VyQ29udGVudFBy
b3ZpZGVyKCkucHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdC51cmwo
KSwgcmVzb3VyY2VUeXBlLCAqZG9jdW1lbnRMb2FkZXIpOwotICAgIGFwcGx5QmxvY2tlZFN0YXR1
c1RvUmVxdWVzdChzdGF0dXMsIHJlcXVlc3QpOworICAgIGFwcGx5QmxvY2tlZFN0YXR1c1RvUmVx
dWVzdChzdGF0dXMsIHBhZ2UsIHJlcXVlc3QpOwogICAgIHJldHVybiBzdGF0dXMuYmxvY2tlZExv
YWQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAko
cmV2aXNpb24gMjIyNDUwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ1LDExICszNDUsMTEgQEAgdm9pZCBSZXNvdXJjZUxv
YWRlcjo6d2lsbFNlbmRSZXF1ZXN0SW50ZQogICAgIH0KIAogI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCi0gICAgaWYgKGZyYW1lTG9hZGVyKCkpIHsKKyAgICBpZiAoIXJlZGlyZWN0UmVz
cG9uc2UuaXNOdWxsKCkgJiYgZnJhbWVMb2FkZXIoKSkgewogICAgICAgICBQYWdlKiBwYWdlID0g
ZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS5wYWdlKCk7CiAgICAgICAgIGlmIChwYWdlICYmIG1fZG9j
dW1lbnRMb2FkZXIpIHsKICAgICAgICAgICAgIGF1dG8gYmxvY2tlZFN0YXR1cyA9IHBhZ2UtPnVz
ZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChy
ZXF1ZXN0LnVybCgpLCBtX3Jlc291cmNlVHlwZSwgKm1fZG9jdW1lbnRMb2FkZXIpOwotICAgICAg
ICAgICAgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KGJsb2NrZWRTdGF0dXMsIHJlcXVlc3Qp
OworICAgICAgICAgICAgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KGJsb2NrZWRTdGF0dXMs
IHBhZ2UsIHJlcXVlc3QpOwogICAgICAgICAgICAgaWYgKGJsb2NrZWRTdGF0dXMuYmxvY2tlZExv
YWQpIHsKICAgICAgICAgICAgICAgICByZXF1ZXN0ID0geyB9OwogICAgICAgICAgICAgICAgIGRp
ZEZhaWwoYmxvY2tlZEJ5Q29udGVudEJsb2NrZXJFcnJvcigpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkocmV2
aXNpb24gMjIyNDUwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI1LDggKzcyNSw5IEBAIFJlc291cmNl
RXJyb3JPcjxDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWMKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRF
TlNJT05TKQogICAgIGlmIChmcmFtZSgpICYmIGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKSAm
JiBtX2RvY3VtZW50TG9hZGVyKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIHJlc291cmNlUmVxdWVz
dCA9IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAgICAgIGF1dG8gYmxvY2tlZFN0YXR1
cyA9IGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnBy
b2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlc291cmNlUmVxdWVzdC51cmwoKSwg
dG9SZXNvdXJjZVR5cGUodHlwZSksICptX2RvY3VtZW50TG9hZGVyKTsKLSAgICAgICAgcmVxdWVz
dC5hcHBseUJsb2NrZWRTdGF0dXMoYmxvY2tlZFN0YXR1cyk7CisgICAgICAgIGF1dG8qIHBhZ2Ug
PSBmcmFtZSgpLT5tYWluRnJhbWUoKS5wYWdlKCk7CisgICAgICAgIGF1dG8gYmxvY2tlZFN0YXR1
cyA9IHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1
bGVzRm9yTG9hZChyZXNvdXJjZVJlcXVlc3QudXJsKCksIHRvUmVzb3VyY2VUeXBlKHR5cGUpLCAq
bV9kb2N1bWVudExvYWRlcik7CisgICAgICAgIHJlcXVlc3QuYXBwbHlCbG9ja2VkU3RhdHVzKGJs
b2NrZWRTdGF0dXMsIHBhZ2UpOwogICAgICAgICBpZiAoYmxvY2tlZFN0YXR1cy5ibG9ja2VkTG9h
ZCkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgicmVxdWVzdFJlc291cmNl
OiBSZXNvdXJjZSBibG9ja2VkIGJ5IGNvbnRlbnQgYmxvY2tlciAoZnJhbWUgPSAlcCkiLCBmcmFt
ZSgpKTsKICAgICAgICAgICAgIGlmICh0eXBlID09IENhY2hlZFJlc291cmNlOjpUeXBlOjpNYWlu
UmVzb3VyY2UpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZVJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCShyZXZpc2lvbiAyMjI0NTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEyLDkgKzIxMiw5IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpyZW1v
dmVGcmFnbWUKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKLXZvaWQgQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0OjphcHBseUJsb2NrZWRTdGF0dXMoY29uc3QgQ29udGVudEV4dGVuc2lv
bnM6OkJsb2NrZWRTdGF0dXMmIGJsb2NrZWRTdGF0dXMpCit2b2lkIENhY2hlZFJlc291cmNlUmVx
dWVzdDo6YXBwbHlCbG9ja2VkU3RhdHVzKGNvbnN0IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2Vk
U3RhdHVzJiBibG9ja2VkU3RhdHVzLCBQYWdlKiBwYWdlKQogewotICAgIENvbnRlbnRFeHRlbnNp
b25zOjphcHBseUJsb2NrZWRTdGF0dXNUb1JlcXVlc3QoYmxvY2tlZFN0YXR1cywgbV9yZXNvdXJj
ZVJlcXVlc3QpOworICAgIENvbnRlbnRFeHRlbnNpb25zOjphcHBseUJsb2NrZWRTdGF0dXNUb1Jl
cXVlc3QoYmxvY2tlZFN0YXR1cywgcGFnZSwgbV9yZXNvdXJjZVJlcXVlc3QpOwogfQogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVl
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0LmgJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyAr
NzYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVBY2NvcmRpbmdDYWNoZU1vZGUoKTsKICAg
ICB2b2lkIHJlbW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVkKCk7CiAjaWYgRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKLSAgICB2b2lkIGFwcGx5QmxvY2tlZFN0YXR1cyhjb25zdCBDb250
ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1cyYpOworICAgIHZvaWQgYXBwbHlCbG9ja2VkU3Rh
dHVzKGNvbnN0IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzJiwgUGFnZSopOwogI2Vu
ZGlmCiAgICAgdm9pZCBzZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbihEb2N1bWVudCYpOwogICAg
IHZvaWQgc2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oY29uc3QgU3RyaW5nJik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3MCw2ICszNzAs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCkg
eyB9CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpIHsgfQogCisg
ICAgdmlydHVhbCB2b2lkIGNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihjb25zdCBXZWJDb3Jl
OjpVUkwmLCBjb25zdCBIYXNoU2V0PHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+JikgeyB9Owor
CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0U2V0Q3Vyc29yVG9D
dXJyZW50Q3Vyc29yKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBBWFN0YXJ0RnJhbWVMb2FkKCkg
PSAwOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTctMDktMjUgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgV0tD
b250ZW50UnVsZUxpc3Qgbm90aWZ5IGFjdGlvbiB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcwMTMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzMxMDczOTM2PgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpQaW5nTG9h
ZDo6cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oOgorICAgICAgICAoQVBJOjpOYXZpZ2F0aW9u
Q2xpZW50Ojpjb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAgICAoV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGll
bnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZh
dGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbToKKyAgICAgICAgKFdlYktp
dDo6TmF2aWdhdGlvblN0YXRlOjpzZXROYXZpZ2F0aW9uRGVsZWdhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmNvbnRlbnRSdWxlTGlzdE5v
dGlmaWNhdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNs
aWVudDo6Y29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDE3LTA5LTI0ICBNaWNoYWVs
IENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBWaWV3cG9ydCBm
aXQgaXMgbm8gbG9uZ2VyIGV4cGVyaW1lbnRhbApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9QaW5nTG9hZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9QaW5nTG9hZC5jcHAJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsNyArMzI0
LDcgQEAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFjawogQ29udGVudEV4
dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXMgUGluZ0xvYWQ6OnByb2Nlc3NDb250ZW50RXh0ZW5zaW9u
UnVsZXNGb3JMb2FkKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBhdXRvIHN0YXR1
cyA9IGNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCgpLnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVs
ZXNGb3JQaW5nTG9hZChyZXF1ZXN0LnVybCgpLCBtX3BhcmFtZXRlcnMubWFpbkRvY3VtZW50VVJM
KTsKLSAgICBhcHBseUJsb2NrZWRTdGF0dXNUb1JlcXVlc3Qoc3RhdHVzLCByZXF1ZXN0KTsKKyAg
ICBhcHBseUJsb2NrZWRTdGF0dXNUb1JlcXVlc3Qoc3RhdHVzLCBudWxscHRyLCByZXF1ZXN0KTsK
ICAgICByZXR1cm4gc3RhdHVzOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3ODcsNiArMzc4NywxMiBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6d2lsbFN1Ym1pdEZvcm0odWludDY0CiAgICAgbV9mb3JtQ2xp
ZW50LT53aWxsU3VibWl0Rm9ybSgqdGhpcywgKmZyYW1lLCAqc291cmNlRnJhbWUsIHRleHRGaWVs
ZFZhbHVlcywgbV9wcm9jZXNzLT50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9i
amVjdCgpKS5nZXQoKSwgbGlzdGVuZXIuZ2V0KCkpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6
Y29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKFdlYkNvcmU6OlVSTCYmIHVybCwgVmVjdG9yPFN0
cmluZz4mJiBpZGVudGlmaWVycywgVmVjdG9yPFN0cmluZz4mJiBub3RpZmljYXRpb25zKQorewor
ICAgIGlmIChtX25hdmlnYXRpb25DbGllbnQpCisgICAgICAgIG1fbmF2aWdhdGlvbkNsaWVudC0+
Y29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKCp0aGlzLCBXVEZNb3ZlKHVybCksIFdURk1vdmUo
aWRlbnRpZmllcnMpLCBXVEZNb3ZlKG5vdGlmaWNhdGlvbnMpKTsKK30KKyAgICAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShjb25zdCBXZWJOYXZpZ2F0
aW9uRGF0YVN0b3JlJiBzdG9yZSwgdWludDY0X3QgZnJhbWVJRCkgCiB7CiAgICAgUGFnZUNsaWVu
dFByb3RlY3RvciBwcm90ZWN0b3IobV9wYWdlQ2xpZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyMjI0NTApCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTI4Niw2ICsxMjg2
LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHVuYWJsZVRvSW1wbGVtZW50UG9saWN5KHVpbnQ2NF90
IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBVc2VyRGF0YSYp
OwogCiAgICAgdm9pZCB3aWxsU3VibWl0Rm9ybSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBz
b3VyY2VGcmFtZUlELCBjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4mIHRl
eHRGaWVsZFZhbHVlcywgdWludDY0X3QgbGlzdGVuZXJJRCwgY29uc3QgVXNlckRhdGEmKTsKKyAg
ICAgICAgCisgICAgdm9pZCBjb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24oV2ViQ29yZTo6VVJM
JiYsIFZlY3RvcjxTdHJpbmc+JiYgaWRlbnRpZmllcnMsIFZlY3RvcjxTdHJpbmc+JiYgbm90aWZp
Y2F0aW9ucyk7CiAKICAgICAvLyBIaXN0b3J5IGNsaWVudAogICAgIHZvaWQgZGlkTmF2aWdhdGVX
aXRoTmF2aWdhdGlvbkRhdGEoY29uc3QgV2ViTmF2aWdhdGlvbkRhdGFTdG9yZSYsIHVpbnQ2NF90
IGZyYW1lSUQpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjIyNDUwKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC00NTgsNiAr
NDU4LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBIYW5kbGVTeW5jaHJvbm91
c01lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VOYW1lLCBXZWJLaXQ6OlVzZXJEYXRhIG1lc3NhZ2VCb2R5
KSAtPiAoV2ViS2l0OjpVc2VyRGF0YSByZXR1cm5EYXRhKSBXYW50c0Nvbm5lY3Rpb24KIAogICAg
IEhhbmRsZUF1dG9GaWxsQnV0dG9uQ2xpY2soV2ViS2l0OjpVc2VyRGF0YSB1c2VyRGF0YSk7Cisg
ICAgQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKFdlYkNvcmU6OlVSTCB1cmwsIFZlY3RvcjxT
dHJpbmc+IGlkZW50aWZpZXJzLCBWZWN0b3I8U3RyaW5nPiBub3RpZmljYXRpb25zKQogCiAjaWYg
RU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKICAgICBB
ZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCh1aW50NjRfdCBjb250ZXh0SWQpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQ2xpZW50LmgJ
KHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZp
Z2F0aW9uQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsOCBAQCBwdWJsaWM6
CiAgICAgICAgIGxpc3RlbmVyLT51c2UoeyB9KTsKICAgICB9CiAgICAgCisgICAgdmlydHVhbCB2
b2lkIGNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdl
YkNvcmU6OlVSTCYmLCBWZWN0b3I8V1RGOjpTdHJpbmc+JiYsIFZlY3RvcjxXVEY6OlN0cmluZz4m
JikgeyB9OworICAgIAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIHZpcnR1
YWwgV2ViS2l0OjpQbHVnaW5Nb2R1bGVMb2FkUG9saWN5IGRlY2lkZVBvbGljeUZvclBsdWdpbkxv
YWQoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OlBsdWdpbk1vZHVsZUxvYWRQb2xpY3kg
Y3VycmVudFBsdWdpbkxvYWRQb2xpY3ksIERpY3Rpb25hcnkqLCBXVEY6OlN0cmluZyYpCiAgICAg
ewpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCShyZXZpc2lv
biAyMjI0NTApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ2xpZW50
VHJhaXRzPFdLUGFnZUxvYQogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ2xpZW50VHJhaXRzPFdL
UGFnZU5hdmlnYXRpb25DbGllbnRCYXNlPiB7Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFdLUGFn
ZU5hdmlnYXRpb25DbGllbnRWMCwgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYxPiBWZXJzaW9uczsK
KyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8V0tQYWdlTmF2aWdhdGlvbkNsaWVudFYwLCBXS1BhZ2VO
YXZpZ2F0aW9uQ2xpZW50VjEsIFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMj4gVmVyc2lvbnM7CiB9
OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRUcmFpdHM8V0tQYWdlUG9saWN5Q2xpZW50QmFz
ZT4gewpAQCAtMjI5NSw2ICsyMjk1LDIxIEBAIHZvaWQgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25D
bGllbnQoV0tQYWcKICAgICAgICAgICAgIG1fY2xpZW50LmRpZFJlbW92ZU5hdmlnYXRpb25HZXN0
dXJlU25hcHNob3QodG9BUEkoJnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAg
ICAgICB9CiAgICAgICAgIAorICAgICAgICB2b2lkIGNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlv
bihXZWJQYWdlUHJveHkmIHBhZ2UsIFVSTCYmIHVybCwgVmVjdG9yPFN0cmluZz4mJiBsaXN0SWRl
bnRpZmllcnMsIFZlY3RvcjxTdHJpbmc+JiYgbm90aWZpY2F0aW9ucykgZmluYWwKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5jb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24p
CisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBWZWN0b3I8UmVmUHRyPEFQ
STo6T2JqZWN0Pj4gYXBpTGlzdElkZW50aWZpZXJzOworICAgICAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBpZGVudGlmaWVyIDogbGlzdElkZW50aWZpZXJzKQorICAgICAgICAgICAgICAgIGFwaUxp
c3RJZGVudGlmaWVycy5hcHBlbmQoQVBJOjpTdHJpbmc6OmNyZWF0ZShpZGVudGlmaWVyKSk7CisK
KyAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiBhcGlOb3RpZmljYXRpb25z
OworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBub3RpZmljYXRpb24gOiBub3RpZmljYXRp
b25zKQorICAgICAgICAgICAgICAgIGFwaU5vdGlmaWNhdGlvbnMuYXBwZW5kKEFQSTo6U3RyaW5n
OjpjcmVhdGUobm90aWZpY2F0aW9uKSk7CisKKyAgICAgICAgICAgIG1fY2xpZW50LmNvbnRlbnRS
dWxlTGlzdE5vdGlmaWNhdGlvbih0b0FQSSgmcGFnZSksIHRvVVJMUmVmKHVybC5zdHJpbmcoKS5p
bXBsKCkpLCB0b0FQSShBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShhcGlMaXN0SWRlbnRpZmll
cnMpKS5wdHIoKSksIHRvQVBJKEFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKGFwaU5vdGlmaWNh
dGlvbnMpKS5wdHIoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIH0KICNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICAgICAgUGx1Z2luTW9kdWxlTG9hZFBv
bGljeSBkZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkKFdlYlBhZ2VQcm94eSYgcGFnZSwgUGx1Z2lu
TW9kdWxlTG9hZFBvbGljeSBjdXJyZW50UGx1Z2luTG9hZFBvbGljeSwgQVBJOjpEaWN0aW9uYXJ5
KiBwbHVnaW5JbmZvcm1hdGlvbiwgU3RyaW5nJiB1bmF2YWlsYWJpbGl0eURlc2NyaXB0aW9uKSBv
dmVycmlkZQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1BhZ2VOYXZpZ2F0aW9uQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlTmF2aWdhdGlvbkNsaWVudC5oCShyZXZpc2lvbiAyMjI0NTApCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgdHlwZWRlZiB2b2lkICgqV0tQYWdlTmF2
aWdhdGlvbkRpZEVuZE5hdgogCiB0eXBlZGVmIHZvaWQgKCpXS1BhZ2VOYXZpZ2F0aW9uRGlkUmVt
b3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCkoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pOwogCit0eXBlZGVmIHZvaWQgKCpXS1BhZ2VOYXZpZ2F0aW9uQ29udGVudFJ1
bGVMaXN0Tm90aWZpY2F0aW9uQ2FsbGJhY2spKFdLUGFnZVJlZiwgV0tVUkxSZWYsIFdLQXJyYXlS
ZWYsIFdLQXJyYXlSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogCiB0eXBlZGVmIHN0cnVj
dCBXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50QmFzZSB7CiAgICAgaW50IHZlcnNpb247CkBAIC0xNDMs
NiArMTQ0LDM5IEBAIHR5cGVkZWYgc3RydWN0IFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMSAKICAg
ICBXS1BhZ2VOYXZpZ2F0aW9uV2ViUHJvY2Vzc0RpZFRlcm1pbmF0ZUNhbGxiYWNrIHdlYlByb2Nl
c3NEaWRUZXJtaW5hdGU7CiB9IFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMTsKIAordHlwZWRlZiBz
dHJ1Y3QgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYyIHsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uQ2xp
ZW50QmFzZSBiYXNlOworICAgIAorICAgIC8vIFZlcnNpb24gMC4KKyAgICBXS1BhZ2VOYXZpZ2F0
aW9uRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbkNhbGxiYWNrIGRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb247CisgICAgV0tQYWdlTmF2aWdhdGlvbkRlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25SZXNwb25zZUNhbGxiYWNrIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25z
ZTsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGVjaWRlUG9saWN5Rm9yUGx1Z2luTG9hZENhbGxiYWNr
IGRlY2lkZVBvbGljeUZvclBsdWdpbkxvYWQ7CisgICAgV0tQYWdlTmF2aWdhdGlvbkRpZFN0YXJ0
UHJvdmlzaW9uYWxOYXZpZ2F0aW9uQ2FsbGJhY2sgZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRp
b247CisgICAgV0tQYWdlTmF2aWdhdGlvbkRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zp
c2lvbmFsTmF2aWdhdGlvbkNhbGxiYWNrIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zp
c2lvbmFsTmF2aWdhdGlvbjsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGlkRmFpbFByb3Zpc2lvbmFs
TmF2aWdhdGlvbkNhbGxiYWNrIGRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb247CisgICAgV0tQ
YWdlTmF2aWdhdGlvbkRpZENvbW1pdE5hdmlnYXRpb25DYWxsYmFjayBkaWRDb21taXROYXZpZ2F0
aW9uOworICAgIFdLUGFnZU5hdmlnYXRpb25EaWRGaW5pc2hOYXZpZ2F0aW9uQ2FsbGJhY2sgZGlk
RmluaXNoTmF2aWdhdGlvbjsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGlkRmFpbE5hdmlnYXRpb25D
YWxsYmFjayBkaWRGYWlsTmF2aWdhdGlvbjsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGlkRmFpbFBy
b3Zpc2lvbmFsTG9hZEluU3ViZnJhbWVDYWxsYmFjayBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5T
dWJmcmFtZTsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGlkRmluaXNoRG9jdW1lbnRMb2FkQ2FsbGJh
Y2sgZGlkRmluaXNoRG9jdW1lbnRMb2FkOworICAgIFdLUGFnZU5hdmlnYXRpb25EaWRTYW1lRG9j
dW1lbnROYXZpZ2F0aW9uQ2FsbGJhY2sgZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbjsKKyAgICBX
S1BhZ2VOYXZpZ2F0aW9uUmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2VDYWxsYmFjayByZW5kZXJp
bmdQcm9ncmVzc0RpZENoYW5nZTsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uQ2FuQXV0aGVudGljYXRl
QWdhaW5zdFByb3RlY3Rpb25TcGFjZUNhbGxiYWNrIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2U7CisgICAgV0tQYWdlTmF2aWdhdGlvbkRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZUNhbGxiYWNrIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKKyAg
ICBXS1BhZ2VOYXZpZ2F0aW9uV2ViUHJvY2Vzc0RpZENyYXNoQ2FsbGJhY2sgd2ViUHJvY2Vzc0Rp
ZENyYXNoOworICAgIFdLUGFnZU5hdmlnYXRpb25Db3B5V2ViQ3J5cHRvTWFzdGVyS2V5Q2FsbGJh
Y2sgY29weVdlYkNyeXB0b01hc3RlcktleTsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGlkQmVnaW5O
YXZpZ2F0aW9uR2VzdHVyZSBkaWRCZWdpbk5hdmlnYXRpb25HZXN0dXJlOworICAgIFdLUGFnZU5h
dmlnYXRpb25XaWxsRW5kTmF2aWdhdGlvbkdlc3R1cmUgd2lsbEVuZE5hdmlnYXRpb25HZXN0dXJl
OworICAgIFdLUGFnZU5hdmlnYXRpb25EaWRFbmROYXZpZ2F0aW9uR2VzdHVyZSBkaWRFbmROYXZp
Z2F0aW9uR2VzdHVyZTsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGlkUmVtb3ZlTmF2aWdhdGlvbkdl
c3R1cmVTbmFwc2hvdCBkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90OworICAgIAor
ICAgIC8vIFZlcnNpb24gMS4KKyAgICBXS1BhZ2VOYXZpZ2F0aW9uV2ViUHJvY2Vzc0RpZFRlcm1p
bmF0ZUNhbGxiYWNrIHdlYlByb2Nlc3NEaWRUZXJtaW5hdGU7CisKKyAgICAvLyBWZXJzaW9uIDIu
CisgICAgV0tQYWdlTmF2aWdhdGlvbkNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbkNhbGxiYWNr
IGNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbjsKK30gV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYy
OworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS05hdmlnYXRpb25EZWxl
Z2F0ZVByaXZhdGUuaAkocmV2aXNpb24gMjIyNDUwKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC03OCw2ICs3OCw4IEBAIHN0YXRpYyBjb25zdCBXS05hdmlnYXRpb25SZXNwb25zZVBvbGlj
eSAKIC0gKHZvaWQpX3dlYlZpZXdEaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90OihX
S1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEyKSwgaW9zKDEw
LjApKTsKIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvbjooV0tOYXZpZ2F0aW9uQWN0aW9uICopbmF2aWdhdGlvbkFjdGlv
biBkZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4pKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSwgX1dL
V2Vic2l0ZVBvbGljaWVzICopKWRlY2lzaW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29z
eCgxMC4xMi4zKSwgaW9zKDEwLjMpKTsKIAorLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICop
d2ViVmlldyBVUkw6KE5TVVJMICopdXJsIGNvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzOihOU0Fy
cmF5PE5TU3RyaW5nICo+ICopaWRlbnRpZmllcnMgbm90aWZpY2F0aW9uczooTlNBcnJheTxOU1N0
cmluZyAqPiAqKW5vdGlmaWNhdGlvbnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7CisKICNpZiBUQVJHRVRfT1NfSVBIT05FCiAtICh2b2lkKV93
ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZFN0YXJ0TG9hZEZvclF1aWNrTG9va0RvY3Vt
ZW50SW5NYWluRnJhbWVXaXRoRmlsZU5hbWU6KE5TU3RyaW5nICopZmlsZU5hbWUgdXRpOihOU1N0
cmluZyAqKXV0aTsKIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRmlu
aXNoTG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWU6KE5TRGF0YSAqKWRvY3VtZW50
RGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRp
b25TdGF0ZS5oCShyZXZpc2lvbiAyMjI0NTApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9OYXZpZ2F0aW9uU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgcmVzb2x2ZVdlYkdMTG9hZFBvbGljeShXZWJQYWdlUHJv
eHkmLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6V2Vi
R0xMb2FkUG9saWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QgZmluYWw7CiAjZW5kaWYK
IAorICAgICAgICB2b2lkIGNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihXZWJQYWdlUHJveHkm
LCBXZWJDb3JlOjpVUkwmJiwgVmVjdG9yPFN0cmluZz4mJiwgVmVjdG9yPFN0cmluZz4mJikgZmlu
YWw7CiAgICAgICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXZWJQYWdl
UHJveHkmLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmLCBSZWY8V2ViRnJhbWVQb2xpY3lM
aXN0ZW5lclByb3h5PiYmLCBBUEk6Ok9iamVjdCogdXNlckRhdGEpIG92ZXJyaWRlOwogICAgICAg
ICB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZShXZWJQYWdlUHJveHkmLCBB
UEk6Ok5hdmlnYXRpb25SZXNwb25zZSYsIFJlZjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+
JiYsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkgb3ZlcnJpZGU7CiAKQEAgLTIwMSw2ICsyMDIsNyBA
QCBwcml2YXRlOgogICAgICAgICBib29sIHdlYlZpZXdEaWRFbmROYXZpZ2F0aW9uR2VzdHVyZVdp
dGhOYXZpZ2F0aW9uVG9CYWNrRm9yd2FyZExpc3RJdGVtIDogMTsKICAgICAgICAgYm9vbCB3ZWJW
aWV3V2lsbFNuYXBzaG90QmFja0ZvcndhcmRMaXN0SXRlbSA6IDE7CiAgICAgICAgIGJvb2wgd2Vi
Vmlld05hdmlnYXRpb25HZXN0dXJlU25hcHNob3RXYXNSZW1vdmVkIDogMTsKKyAgICAgICAgYm9v
bCB3ZWJWaWV3VVJMQ29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnNOb3RpZmljYXRpb25zIDogMTsK
ICNpZiBVU0UoUVVJQ0tfTE9PSykKICAgICAgICAgYm9vbCB3ZWJWaWV3RGlkU3RhcnRMb2FkRm9y
UXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZSA6IDE7CiAgICAgICAgIGJvb2wgd2ViVmlld0Rp
ZEZpbmlzaExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lIDogMTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0JKHJl
dmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRp
b25TdGF0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTY4LDYgKzE2OCw3IEBAIHZvaWQgTmF2aWdh
dGlvblN0YXRlOjpzZXROYXZpZ2F0aW9uRGVsZWcKICAgICBtX25hdmlnYXRpb25EZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld0RpZEVuZE5hdmlnYXRpb25HZXN0dXJlV2l0aE5hdmlnYXRpb25Ub0JhY2tG
b3J3YXJkTGlzdEl0ZW0gPSBbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihf
d2ViVmlld0RpZEVuZE5hdmlnYXRpb25HZXN0dXJlOndpdGhOYXZpZ2F0aW9uVG9CYWNrRm9yd2Fy
ZExpc3RJdGVtOildOwogICAgIG1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ls
bFNuYXBzaG90QmFja0ZvcndhcmRMaXN0SXRlbSA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKF93ZWJWaWV3OndpbGxTbmFwc2hvdEJhY2tGb3J3YXJkTGlzdEl0ZW06KV07
CiAgICAgbV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdOYXZpZ2F0aW9uR2VzdHVy
ZVNuYXBzaG90V2FzUmVtb3ZlZCA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKF93ZWJWaWV3RGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdDopXTsKKyAgICBt
X25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1VSTENvbnRlbnRSdWxlTGlzdElkZW50
aWZpZXJzTm90aWZpY2F0aW9ucyA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKF93ZWJWaWV3OlVSTDpjb250ZW50UnVsZUxpc3RJZGVudGlmaWVyczpub3RpZmljYXRpb25z
OildOwogI2lmIFVTRShRVUlDS19MT09LKQogICAgIG1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3RGlkU3RhcnRMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZSA9IFtk
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmRpZFN0YXJ0TG9h
ZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWVXaXRoRmlsZU5hbWU6dXRpOildOwogICAg
IG1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmluaXNoTG9hZEZvclF1aWNr
TG9va0RvY3VtZW50SW5NYWluRnJhbWUgPSBbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihfd2ViVmlldzpkaWRGaW5pc2hMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5G
cmFtZTopXTsKQEAgLTQ1OCw2ICs0NTksMjggQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmln
YXRpb25DbGllbnQ6OgogICAgIH0KIH0KIAordm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRp
b25DbGllbnQ6OmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihXZWJQYWdlUHJveHkmLCBXZWJD
b3JlOjpVUkwmJiB1cmwsIFZlY3RvcjxTdHJpbmc+JiYgbGlzdElkZW50aWZpZXJzLCBWZWN0b3I8
U3RyaW5nPiYmIG5vdGlmaWNhdGlvbnMpCit7CisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5t
X25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1VSTENvbnRlbnRSdWxlTGlzdElkZW50
aWZpZXJzTm90aWZpY2F0aW9ucykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBuYXZpZ2F0
aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQo
KTsKKyAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUKGxpc3RJZGVudGlmaWVycy5zaXplKCkgPT0gbm90aWZpY2F0aW9ucy5zaXplKCkpOwor
CisgICAgYXV0byBpZGVudGlmaWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdFdpdGhDYXBhY2l0eTpsaXN0SWRlbnRpZmllcnMuc2l6ZSgpXSk7CisgICAgZm9yIChhdXRv
JiBpZGVudGlmaWVyIDogbGlzdElkZW50aWZpZXJzKQorICAgICAgICBbaWRlbnRpZmllcnMgYWRk
T2JqZWN0OmlkZW50aWZpZXJdOworCisgICAgYXV0byBuc05vdGlmaWNhdGlvbnMgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bm90aWZpY2F0aW9ucy5z
aXplKCldKTsKKyAgICBmb3IgKGF1dG8mIG5vdGlmaWNhdGlvbiA6IG5vdGlmaWNhdGlvbnMpCisg
ICAgICAgIFtuc05vdGlmaWNhdGlvbnMgYWRkT2JqZWN0Om5vdGlmaWNhdGlvbl07CisgICAgCisg
ICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUg
X3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IFVSTDp1cmwgY29udGVudFJ1bGVM
aXN0SWRlbnRpZmllcnM6aWRlbnRpZmllcnMuZ2V0KCkgbm90aWZpY2F0aW9uczpuc05vdGlmaWNh
dGlvbnMuZ2V0KCldOworfQorICAgIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25D
bGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZShXZWJQYWdlUHJveHkmLCBB
UEk6Ok5hdmlnYXRpb25SZXNwb25zZSYgbmF2aWdhdGlvblJlc3BvbnNlLCBSZWY8V2ViRnJhbWVQ
b2xpY3lMaXN0ZW5lclByb3h5PiYmIGxpc3RlbmVyLCBBUEk6Ok9iamVjdCogdXNlckRhdGEpCiB7
CiAgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZURlY2lzaW9uSGFuZGxlcikg
ewpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NzQsNiArODc0LDIwIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpz
Y2hlZHVsZUNvbXBvc2l0aW4KICAgICAgICAgbV9wYWdlLmRyYXdpbmdBcmVhKCktPnNjaGVkdWxl
Q29tcG9zaXRpbmdMYXllckZsdXNoKCk7CiB9CiAKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpjb250
ZW50UnVsZUxpc3ROb3RpZmljYXRpb24oY29uc3QgVVJMJiB1cmwsIGNvbnN0IEhhc2hTZXQ8c3Rk
OjpwYWlyPFN0cmluZywgU3RyaW5nPj4mIG5vdGlmaWNhdGlvblBhaXJzKQoreworICAgIFZlY3Rv
cjxTdHJpbmc+IGlkZW50aWZpZXJzOworICAgIFZlY3RvcjxTdHJpbmc+IG5vdGlmaWNhdGlvbnM7
CisgICAgaWRlbnRpZmllcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShub3RpZmljYXRpb25QYWly
cy5zaXplKCkpOworICAgIG5vdGlmaWNhdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShub3Rp
ZmljYXRpb25QYWlycy5zaXplKCkpOworICAgIGZvciAoYXV0byYgbm90aWZpY2F0aW9uIDogbm90
aWZpY2F0aW9uUGFpcnMpIHsKKyAgICAgICAgaWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKG5v
dGlmaWNhdGlvbi5maXJzdCk7CisgICAgICAgIG5vdGlmaWNhdGlvbnMudW5jaGVja2VkQXBwZW5k
KG5vdGlmaWNhdGlvbi5zZWNvbmQpOworICAgIH0KKworICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbih1cmwsIGlkZW50aWZp
ZXJzLCBub3RpZmljYXRpb25zKSk7Cit9CisKIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjphZGp1c3RM
YXllckZsdXNoVGhyb3R0bGluZyhMYXllckZsdXNoVGhyb3R0bGVTdGF0ZTo6RmxhZ3MgZmxhZ3Mp
CiB7CiAgICAgcmV0dXJuIG1fcGFnZS5kcmF3aW5nQXJlYSgpICYmIG1fcGFnZS5kcmF3aW5nQXJl
YSgpLT5hZGp1c3RMYXllckZsdXNoVGhyb3R0bGluZyhmbGFncyk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oCShyZXZpc2lvbiAyMjI0NTApCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw2ICsy
MDgsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2go
KSBmaW5hbDsKICAgICBib29sIGFkanVzdExheWVyRmx1c2hUaHJvdHRsaW5nKFdlYkNvcmU6Okxh
eWVyRmx1c2hUaHJvdHRsZVN0YXRlOjpGbGFncykgZmluYWw7CiAKKyAgICB2b2lkIGNvbnRlbnRS
dWxlTGlzdE5vdGlmaWNhdGlvbihjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBIYXNoU2V0PHN0
ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+JikgZmluYWw7CisgICAgCiAjaWYgVVNFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKICAgICBSZWZQdHI8V2ViQ29yZTo6RGlz
cGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6
UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlmCkluZGV4OiBUb29scy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjI0NTApCisr
KyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxNy0w
OS0yNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAg
ICAgIEFkZCBXS0NvbnRlbnRSdWxlTGlzdCBub3RpZnkgYWN0aW9uIHR5cGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzAxMworICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMzEwNzM5MzY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVu
dEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Om9w
ZXJhdG9yPDwpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SW5NZW1vcnlDb21waWxlZENvbnRl
bnRFeHRlbnNpb246OmNyZWF0ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpJbk1lbW9yeUNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbjo6ZGF0YSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpJ
bk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6SW5NZW1vcnlDb21waWxlZENvbnRlbnRF
eHRlbnNpb24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6bWFrZUJhY2tlbmQpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmFjdGlv
bnNFcXVhbCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpzZXF1ZW5jZUluc3RhbmNlcyk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6
Y3JlYXRlRnJvbUZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpJbk1l
bW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6fkluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0NvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbi5tbTogQWRkZWQuCisgICAgICAgICgtW0Nv
bnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbkRlbGVnYXRlIF93ZWJWaWV3OlVSTDpjb250ZW50UnVs
ZUxpc3RJZGVudGlmaWVyczpub3RpZmljYXRpb25zOl0pOgorICAgICAgICAoLVtDb250ZW50UnVs
ZUxpc3ROb3RpZmljYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3OnN0YXJ0VVJMU2NoZW1lVGFzazpdKToK
KyAgICAgICAgKC1bQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uRGVsZWdhdGUgd2ViVmlldzpz
dG9wVVJMU2NoZW1lVGFzazpdKToKKyAgICAgICAgKC1bQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0
aW9uRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmlu
aXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgIChtYWtlV2FybkNv
bnRlbnRSdWxlTGlzdCk6CisgICAgICAgIChURVNUKToKKwogMjAxNy0wOS0yNSAgQ2FybG9zIEFs
YmVydG8gTG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNT
SU9OKHIyMjIxNjApIFtHVEtdIFtEZWJ1Z10gSW50ZXJuYWwgY29tcGlsZXIgZXJyb3Igb24gdGhl
IGJ1aWxkYm90IChodWdlIG1lbW9yeSB1c2FnZSBieSBHQ0MpCkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjIyNDUwKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw2
ICsyMzYsNyBAQAogCQk1QzlFNTk0MjFEM0VCNUFDMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNo
ZS5kYi1zaG0gaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUM5RTU5M0YxRDNFQjFERTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGItc2ht
ICovOyB9OwogCQk1QzlFNTk0MzFEM0VCNUFDMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5k
Yi13YWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUM5RTU5NDAxRDNFQjFERTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGItd2FsICov
OyB9OwogCQk1Q0ExREVDODFGNzFGNzAxMDBFNzFCRDMgLyogSFRUUEhlYWRlckZpZWxkLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQTFERUM3MUY3
MUY0MDcwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuY3BwICovOyB9OworCQk1Q0ExREVEOTFG
NzRBOTFBMDBFNzFCRDMgLyogQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNBMURFRDgxRjc0QTg3MTAw
RTcxQkQzIC8qIENvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbi5tbSAqLzsgfTsKIAkJNUNCMThC
QTgxRjU2NDVFMzAwRUUyM0M0IC8qIENsaWNrQXV0b0ZpbGxCdXR0b24ubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0IxOEJBNzFGNTY0NUIyMDBFRTIz
QzQgLyogQ2xpY2tBdXRvRmlsbEJ1dHRvbi5tbSAqLzsgfTsKIAkJNUNCNDBCNEUxRjRCOThEMzAw
N0RDN0I5IC8qIFVJRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0I0MEI0RDFGNEI5OEJFMDA3REM3QjkgLyogVUlEZWxlZ2F0ZS5tbSAq
LzsgfTsKIAkJNUNFMzU0RDkxRTcwREE1QzAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvblN0
b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNF
MzU0RDgxRTcwRDlDMzAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovOyB9
OwpAQCAtMTMzMyw2ICsxMzM0LDcgQEAKIAkJNUM5RTU5M0YxRDNFQjFERTAwRTNDNjJFIC8qIEFw
cGxpY2F0aW9uQ2FjaGUuZGItc2htICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9ICJBcHBsaWNhdGlvbkNhY2hlLmRiLXNobSI7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOUU1OTQwMUQzRUIxREUwMEUzQzYyRSAvKiBB
cHBsaWNhdGlvbkNhY2hlLmRiLXdhbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSAiQXBwbGljYXRpb25DYWNoZS5kYi13YWwiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0ExREVDNzFGNzFGNDA3MDBFNzFCRDMgLyog
SFRUUEhlYWRlckZpZWxkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEhUVFBIZWFkZXJGaWVsZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQTFE
RUQ4MUY3NEE4NzEwMEU3MUJEMyAvKiBDb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24ubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb250ZW50UnVsZUxpc3ROb3Rp
ZmljYXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQjE4QkE3MUY1NjQ1
QjIwMEVFMjNDNCAvKiBDbGlja0F1dG9GaWxsQnV0dG9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gQ2xpY2tBdXRvRmlsbEJ1dHRvbi5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUNCNDBCNEQxRjRCOThCRTAwN0RDN0I5IC8qIFVJRGVsZWdhdGUu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVSURlbGVnYXRlLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0UzNTREODFFNzBEOUMzMDBCRUZFM0Ig
LyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE5MzcsNiArMTkzOSw3IEBACiAJCQkJQTE4QUE4Q0MxQzNGQTIxODAw
OUIyQjk3IC8qIENvbnRlbnRGaWx0ZXJpbmcuaCAqLywKIAkJCQlBMTRGQzU4NjFCODk5MUI2MDBE
MTA3RUIgLyogQ29udGVudEZpbHRlcmluZy5tbSAqLywKIAkJCQlBMTRGQzU4OTFCODk5MjcxMDBE
MTA3RUIgLyogQ29udGVudEZpbHRlcmluZ1BsdWdJbi5tbSAqLywKKwkJCQk1Q0ExREVEODFGNzRB
ODcxMDBFNzFCRDMgLyogQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uLm1tICovLAogCQkJCTVD
MjkzNjkxMUQ1QkY2M0UwMERFQUIxRSAvKiBDb29raWVBY2NlcHRQb2xpY3kubW0gKi8sCiAJCQkJ
OTk5OTEwOEExRjM5M0M4QjAwOEFENDU1IC8qIENvcHlpbmcubW0gKi8sCiAJCQkJMkRDNENGNzYx
RDJEOUREODAwRUNDQzk0IC8qIERhdGFEZXRlY3Rpb24ubW0gKi8sCkBAIC0zMTU2LDYgKzMxNTks
NyBAQAogCQkJCTdDQjE4NEM2MUFBM0YyMTAwMDY2RURGRCAvKiBDb250ZW50RXh0ZW5zaW9ucy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTE0NkE4RDFEMkQ3MTE1MDAwRkU3MTAgLyogQ29udGVu
dEZpbHRlcmluZy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExNEZDNTg4MUI4OTkxQkYwMEQxMDdF
QiAvKiBDb250ZW50RmlsdGVyaW5nLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNUNBMURFRDkxRjc0
QTkxQTAwRTcxQkQzIC8qIENvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbi5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDQ0U3RUI4MUE0MTFBN0UwMDQ0N0M0QyAvKiBDb250ZXh0TWVudUNhbkNvcHlV
UkwubW0gaW4gU291cmNlcyAqLywKIAkJCQkzN0ZCNzI5NzFEQjJFODJGMDBFNDFCRTQgLyogQ29u
dGV4dE1lbnVEZWZhdWx0SXRlbXNIYXZlVGFncy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTgzNDlE
M0MyMURCOTZEREUwMDRBOUY2NSAvKiBDb250ZXh0TWVudURvd25sb2FkLm1tIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVu
c2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDYgKzU2LDggQEAgaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6
Om9zdAogICAgICAgICByZXR1cm4gb3MgPDwgIkFjdGlvblR5cGU6OkJsb2NrQ29va2llcyI7CiAg
ICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yOgogICAgICAgICByZXR1
cm4gb3MgPDwgIkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lIjsKKyAgICBjYXNlIEFjdGlvblR5
cGU6Ok5vdGlmeToKKyAgICAgICAgcmV0dXJuIG9zIDw8ICJBY3Rpb25UeXBlOjpOb3RpZnkiOwog
ICAgIGNhc2UgQWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlczoKICAgICAgICAgcmV0dXJu
IG9zIDw8ICJBY3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzIjsKICAgICBjYXNlIEFjdGlv
blR5cGU6Ok1ha2VIVFRQUzoKQEAgLTk3LDYgKzk5LDcgQEAgcHVibGljOgogICAgICAgICBFWFBF
Q1RfRVEoZGF0YS50b3BVUkxGaWx0ZXJzLnNpemUoKSwgMHVsbCk7CiAgICAgfQogCitwcml2YXRl
OgogICAgIHZvaWQgd3JpdGVTb3VyY2UoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9CiAKICAgICB2
b2lkIHdyaXRlQWN0aW9ucyhWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rp
b25CeXRlPiYmIGFjdGlvbnMsIGJvb2wgY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluKSBmaW5h
bApAQCAtMTM3LDM1ICsxNDAsMjcgQEAgcHVibGljOgogICAgICAgICBmaW5hbGl6ZWQgPSB0cnVl
OwogICAgIH0KIAotcHJpdmF0ZToKICAgICBDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiBt
X2RhdGE7CiAgICAgYm9vbCBmaW5hbGl6ZWQgeyBmYWxzZSB9OwogfTsKIAogY2xhc3MgSW5NZW1v
cnlDb21waWxlZENvbnRlbnRFeHRlbnNpb24gOiBwdWJsaWMgQ29udGVudEV4dGVuc2lvbnM6OkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJbk1lbW9y
eUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4gY3JlYXRlRnJvbUZpbHRlcihTdHJpbmcmJiBmaWx0
ZXIpCisgICAgc3RhdGljIFJlZjxJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4gY3Jl
YXRlKFN0cmluZyYmIGZpbHRlcikKICAgICB7CiAgICAgICAgIENvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGEgZXh0ZW5zaW9uRGF0YTsKICAgICAgICAgSW5NZW1vcnlDb250ZW50RXh0ZW5zaW9u
Q29tcGlsYXRpb25DbGllbnQgY2xpZW50KGV4dGVuc2lvbkRhdGEpOwogICAgICAgICBhdXRvIGNv
bXBpbGVyRXJyb3IgPSBDb250ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KGNsaWVudCwg
V1RGTW92ZShmaWx0ZXIpKTsKLSAgICAgICAgaWYgKGNvbXBpbGVyRXJyb3IpIHsKLSAgICAgICAg
ICAgIC8vIENvbXBpbGluZyBzaG91bGQgYWx3YXlzIHN1Y2NlZWQgaGVyZS4gV2UgaGF2ZSBvdGhl
ciB0ZXN0cyBmb3IgY29tcGlsZSBmYWlsdXJlcy4KLSAgICAgICAgICAgIEVYUEVDVF9UUlVFKGZh
bHNlKTsKLSAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBJbk1lbW9yeUNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbjo6Y3JlYXRlKFdURk1vdmUoZXh0ZW5zaW9uRGF0YSkpOwotICAgIH0KKyAgICAg
ICAgLy8gQ29tcGlsaW5nIHNob3VsZCBhbHdheXMgc3VjY2VlZCBoZXJlLiBXZSBoYXZlIG90aGVy
IHRlc3RzIGZvciBjb21waWxlIGZhaWx1cmVzLgorICAgICAgICBFWFBFQ1RfRkFMU0UoY29tcGls
ZXJFcnJvcik7CiAKLSAgICBzdGF0aWMgUmVmPEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uPiBjcmVhdGUoQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYmIGRhdGEpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbihXVEZNb3ZlKGRhdGEpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluTWVt
b3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKFdURk1vdmUoZXh0ZW5zaW9uRGF0YSkpKTsKICAg
ICB9CiAKLSAgICB2aXJ0dWFsIH5Jbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbigpCi0g
ICAgewotICAgIH0KKyAgICBjb25zdCBDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiBkYXRh
KCkgeyByZXR1cm4gbV9kYXRhOyB9OwogCitwcml2YXRlOgogICAgIGNvbnN0IENvbnRlbnRFeHRl
bnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucygpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fZGF0YS5hY3Rpb25zLmRhdGEoKTsgfQogICAgIHVuc2lnbmVkIGFjdGlvbnNMZW5ndGgo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2RhdGEuYWN0aW9ucy5zaXplKCk7IH0KICAgICBjb25z
dCBDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqIGZpbHRlcnNXaXRob3V0Q29uZGl0aW9u
c0J5dGVjb2RlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kYXRhLmZpbHRlcnNXaXRob3V0Q29u
ZGl0aW9ucy5kYXRhKCk7IH0KQEAgLTE3NiwxMSArMTcxLDkgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIHRvcFVSTEZpbHRlcnNCeXRlY29kZUxlbmd0aCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
ZGF0YS50b3BVUkxGaWx0ZXJzLnNpemUoKTsgfQogICAgIGJvb2wgY29uZGl0aW9uc0FwcGx5T25s
eVRvRG9tYWluKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kYXRhLmNvbmRpdGlvbnNBcHBseU9u
bHlUb0RvbWFpbjsgfQogCi1wcml2YXRlOgogICAgIEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uKENvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmJiBkYXRhKQogICAgICAgICA6IG1f
ZGF0YShXVEZNb3ZlKGRhdGEpKQotICAgIHsKLSAgICB9CisgICAgeyB9CiAKICAgICBDb21waWxl
ZENvbnRlbnRFeHRlbnNpb25EYXRhIG1fZGF0YTsKIH07CkBAIC0yMTEsNyArMjA0LDcgQEAgc3Rh
dGljIFJlc291cmNlTG9hZEluZm8gc3ViUmVzb3VyY2VSZXF1ZQogQ29udGVudEV4dGVuc2lvbnM6
OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBtYWtlQmFja2VuZChjb25zdCBjaGFyKiBqc29uKQog
ewogICAgIEF0b21pY1N0cmluZzo6aW5pdCgpOwotICAgIGF1dG8gZXh0ZW5zaW9uID0gSW5NZW1v
cnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZUZyb21GaWx0ZXIoanNvbik7CisgICAg
YXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRl
KGpzb24pOwogICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQg
YmFja2VuZDsKICAgICBiYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24oInRlc3RGaWx0ZXIiLCBX
VEZNb3ZlKGV4dGVuc2lvbikpOwogICAgIHJldHVybiBiYWNrZW5kOwpAQCAtODU2LDggKzg0OSw4
IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgVG9wVVJMKQogCiBURVNUX0YoQ29udGVu
dEV4dGVuc2lvblRlc3QsIE11bHRpcGxlRXh0ZW5zaW9ucykKIHsKLSAgICBhdXRvIGV4dGVuc2lv
bjEgPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlRnJvbUZpbHRlcigi
W3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcImJsb2NrX2xvYWRcIn19XSIpOwotICAgIGF1dG8gZXh0ZW5zaW9uMiA9IEluTWVtb3J5
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGVGcm9tRmlsdGVyKCJbe1wiYWN0aW9uXCI6
e1widHlwZVwiOlwiYmxvY2stY29va2llc1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJibG9ja19jb29raWVzXCJ9fV0iKTsKKyAgICBhdXRvIGV4dGVuc2lvbjEgPSBJbk1lbW9yeUNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
YmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiYmxvY2tfbG9hZFwifX1dIik7
CisgICAgYXV0byBleHRlbnNpb24yID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246
OmNyZWF0ZSgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrLWNvb2tpZXNcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiYmxvY2tfY29va2llc1wifX1dIik7CiAgICAgQ29udGVu
dEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBiYWNrZW5kOwogICAgIGJhY2tl
bmQuYWRkQ29udGVudEV4dGVuc2lvbigidGVzdEZpbHRlcjEiLCBXVEZNb3ZlKGV4dGVuc2lvbjEp
KTsKICAgICBiYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24oInRlc3RGaWx0ZXIyIiwgV1RGTW92
ZShleHRlbnNpb24yKSk7CkBAIC04NjgsOSArODYxLDkgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNp
b25UZXN0LCBNdWx0aXBsZUV4dAogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2Jsb2NrX2xvYWQvYmxvY2tfY29va2llcy5odG1s
IiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrQ29va2llcywgQ29udGVu
dEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9LCAyKTsKICAgICB0ZXN0UmVxdWVz
dChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9ibG9ja19j
b29raWVzL2Jsb2NrX2xvYWQuaHRtbCIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpCbG9ja0Nvb2tpZXMsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQg
fSwgMik7CiAgICAgCi0gICAgYXV0byBpZ25vcmVFeHRlbnNpb24xID0gSW5NZW1vcnlDb21waWxl
ZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZUZyb21GaWx0ZXIoIlt7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJibG9ja19sb2FkXCJ9
fSwiCisgICAgYXV0byBpZ25vcmVFeHRlbnNpb24xID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRF
eHRlbnNpb246OmNyZWF0ZSgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcImJsb2NrX2xvYWRcIn19LCIKICAgICAgICAgIntcImFj
dGlvblwiOntcInR5cGVcIjpcImlnbm9yZS1wcmV2aW91cy1ydWxlc1wifSxcInRyaWdnZXJcIjp7
XCJ1cmwtZmlsdGVyXCI6XCJpZ25vcmUxXCJ9fV0iKTsKLSAgICBhdXRvIGlnbm9yZUV4dGVuc2lv
bjIgPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlRnJvbUZpbHRlcigi
W3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrLWNvb2tpZXNcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiYmxvY2tfY29va2llc1wifX0sIgorICAgIGF1dG8gaWdub3JlRXh0ZW5z
aW9uMiA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoIlt7XCJhY3Rp
b25cIjp7XCJ0eXBlXCI6XCJibG9jay1jb29raWVzXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcImJsb2NrX2Nvb2tpZXNcIn19LCIKICAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVc
IjpcImlnbm9yZS1wcmV2aW91cy1ydWxlc1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJpZ25vcmUyXCJ9fV0iKTsKICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lv
bnNCYWNrZW5kIGJhY2tlbmRXaXRoSWdub3JlOwogICAgIGJhY2tlbmRXaXRoSWdub3JlLmFkZENv
bnRlbnRFeHRlbnNpb24oInRlc3RGaWx0ZXIxIiwgV1RGTW92ZShpZ25vcmVFeHRlbnNpb24xKSk7
CkBAIC04ODQsNiArODc3LDEyMSBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIE11bHRp
cGxlRXh0CiAgICAgdGVzdFJlcXVlc3QoYmFja2VuZFdpdGhJZ25vcmUsIG1haW5Eb2N1bWVudFJl
cXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2Jsb2NrX2xvYWQvYmxvY2tfY29va2llcy9pZ25vcmUx
L2lnbm9yZTIuaHRtbCIpLCB7IH0sIDApOwogfQogCitzdGF0aWMgYm9vbCBhY3Rpb25zRXF1YWwo
Y29uc3Qgc3RkOjpwYWlyPFZlY3RvcjxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
PiwgVmVjdG9yPFN0cmluZz4+JiBhY3R1YWwsIFZlY3RvcjxXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6QWN0aW9uPiYmIGV4cGVjdGVkLCBib29sIGlnbm9yZVByZXZpb3VzUnVsZXMgPSBmYWxz
ZSkKK3sKKyAgICBpZiAoaWdub3JlUHJldmlvdXNSdWxlcykgeworICAgICAgICBpZiAoYWN0dWFs
LnNlY29uZC5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgaWYgKGFjdHVhbC5zZWNvbmQuc2l6ZSgpICE9IDEpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmIChhY3R1YWwuc2Vjb25kWzBdICE9ICJ0ZXN0RmlsdGVyIikK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoYWN0dWFsLmZpcnN0
LnNpemUoKSAhPSBleHBlY3RlZC5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGV4cGVjdGVkLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
IChhY3R1YWwuZmlyc3RbaV0udHlwZSgpICE9IGV4cGVjdGVkW2ldLnR5cGUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGFjdHVhbC5maXJzdFtpXS5zdHJpbmdBcmd1
bWVudCgpICE9IGV4cGVjdGVkW2ldLnN0cmluZ0FyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgY29uc3QgY2hh
cioganNvbldpdGhTdHJpbmdzVG9Db21iaW5lID0gIlsiCisgICAgIntcImFjdGlvblwiOntcInR5
cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6XCJBQUFcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiQVwifX0sIgorICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJub3Rp
ZnlcIixcIm5vdGlmaWNhdGlvblwiOlwiQUFBXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIkFcIn19LCIKKyAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwibm90aWZ5XCIsXCJub3Rp
ZmljYXRpb25cIjpcIkJCQlwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJCXCJ9fSwi
CisgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVj
dG9yXCI6XCJDQ0NcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiQ1wifX0sIgorICAg
ICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3Rvclwi
Olwic2VsZWN0b3JDb21iaW5lZFdpdGhDXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpc
IkNcIn19LCIKKyAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwi
LFwic2VsZWN0b3JcIjpcIkRERFwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJEXCJ9
fSwiCisgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImlnbm9yZS1wcmV2aW91cy1ydWxlc1wi
fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJFXCJ9fSwiCisgICAgIntcImFjdGlvblwi
OntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIkZcIn19
LCIKKyAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwibm90aWZ5XCIsXCJub3RpZmljYXRpb25c
IjpcIkdHR1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJHXCJ9fSwiCisgICAgIntc
ImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6XCJHR0dcIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiSVwifX0sIgorICAgICJ7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJub3RpZnlcIixcIm5vdGlmaWNhdGlvblwiOlwiQUFBXCJ9LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIkpcIn19LCIKKyAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
bm90aWZ5XCIsXCJub3RpZmljYXRpb25cIjpcIkdHR1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJLXCJ9fSIKKyJdIjsKKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBTdHJp
bmdQYXJhbWV0ZXJzKQoreworICAgIGF1dG8gYmFja2VuZDEgPSBtYWtlQmFja2VuZCgiW3tcImFj
dGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6XCJ0ZXN0bm90aWZp
Y2F0aW9uXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIm1hdGNoZXNcIn19XSIpOwor
ICAgIEFTU0VSVF9UUlVFKGFjdGlvbnNFcXVhbChiYWNrZW5kMS5hY3Rpb25zRm9yUmVzb3VyY2VM
b2FkKG1haW5Eb2N1bWVudFJlcXVlc3QoInRlc3Q6Ly8vbWF0Y2hlcyIpKSwge3sgQ29udGVudEV4
dGVuc2lvbnM6OkFjdGlvblR5cGU6Ok5vdGlmeSwgInRlc3Rub3RpZmljYXRpb24iIH19KSk7CisK
KyAgICBhdXRvIGJhY2tlbmQyID0gbWFrZUJhY2tlbmQoanNvbldpdGhTdHJpbmdzVG9Db21iaW5l
KTsKKyAgICBBU1NFUlRfVFJVRShhY3Rpb25zRXF1YWwoYmFja2VuZDIuYWN0aW9uc0ZvclJlc291
cmNlTG9hZChtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vQSIpKSwge3sgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6Ok5vdGlmeSwgIkFBQSIgfX0pKTsKKyAgICBBU1NFUlRfVFJVRShh
Y3Rpb25zRXF1YWwoYmFja2VuZDIuYWN0aW9uc0ZvclJlc291cmNlTG9hZChtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJodHRwOi8vQiIpKSwge3sgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6Ok5v
dGlmeSwgIkJCQiIgfX0pKTsKKyAgICBBU1NFUlRfVFJVRShhY3Rpb25zRXF1YWwoYmFja2VuZDIu
YWN0aW9uc0ZvclJlc291cmNlTG9hZChtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vQyIpKSwg
e3sgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3Is
ICJDQ0Msc2VsZWN0b3JDb21iaW5lZFdpdGhDIiB9fSkpOworICAgIEFTU0VSVF9UUlVFKGFjdGlv
bnNFcXVhbChiYWNrZW5kMi5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKG1haW5Eb2N1bWVudFJlcXVl
c3QoImh0dHA6Ly9EIikpLCB7eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlz
cGxheU5vbmVTZWxlY3RvciwgIkRERCIgfX0pKTsKKyAgICBBU1NFUlRfVFJVRShhY3Rpb25zRXF1
YWwoYmFja2VuZDIuYWN0aW9uc0ZvclJlc291cmNlTG9hZChtYWluRG9jdW1lbnRSZXF1ZXN0KCJo
dHRwOi8vRSIpKSwgeyB9LCB0cnVlKSk7CisgICAgQVNTRVJUX1RSVUUoYWN0aW9uc0VxdWFsKGJh
Y2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQobWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDov
L0YiKSksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KSk7Cisg
ICAgQVNTRVJUX1RSVUUoYWN0aW9uc0VxdWFsKGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJjZUxv
YWQobWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL0ciKSksIHt7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpOb3RpZnksICJHR0ciIH19KSk7CisgICAgQVNTRVJUX1RSVUUoYWN0aW9u
c0VxdWFsKGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQobWFpbkRvY3VtZW50UmVxdWVz
dCgiaHR0cDovL0dJSyIpKSwge3sgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6Ok5vdGlm
eSwgIkdHRyIgfX0pKTsKKyAgICBBU1NFUlRfVFJVRShhY3Rpb25zRXF1YWwoYmFja2VuZDIuYWN0
aW9uc0ZvclJlc291cmNlTG9hZChtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vQUoiKSksIHsK
KyAgICAgICAgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Tm90aWZ5LCAiQUFBIiB9
LAorICAgICAgICB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpOb3RpZnksICJBQUEi
IH0gLy8gaWdub3JlLXByZXZpb3VzLXJ1bGVzIG1ha2VzIHRoZSBBQUEgYWN0aW9ucyBuZWVkIHRv
IGJlIHVuaXF1ZS4KKyAgICB9KSk7CisgICAgLy8gRklYTUU6IEFkZCBhIHRlc3QgdGhhdCBtYXRj
aGVzIGFjdGlvbnMgd2l0aCBBQUEgd2l0aCBpZ25vcmUtcHJldmlvdXMtcnVsZXMgYmV0d2VlbiB0
aGVtIGFuZCBtYWtlcyBzdXJlIHdlIG9ubHkgZ2V0IG9uZSBub3RpZmljYXRpb24uCisgICAgQVNT
RVJUX1RSVUUoYWN0aW9uc0VxdWFsKGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQobWFp
bkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL0FFIikpLCB7IH0sIHRydWUpKTsKKyAgICBBU1NFUlRf
VFJVRShhY3Rpb25zRXF1YWwoYmFja2VuZDIuYWN0aW9uc0ZvclJlc291cmNlTG9hZChtYWluRG9j
dW1lbnRSZXF1ZXN0KCJodHRwOi8vQUJDREUiKSksIHsgfSwgdHJ1ZSkpOworICAgIEFTU0VSVF9U
UlVFKGFjdGlvbnNFcXVhbChiYWNrZW5kMi5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKG1haW5Eb2N1
bWVudFJlcXVlc3QoImh0dHA6Ly9BQkNERUZHIikpLCB7CisgICAgICAgIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6Ok5vdGlmeSwgIkdHRyIgfSwKKyAgICAgICAgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0KKyAgICB9LCB0cnVlKSk7CisgICAgQVNT
RVJUX1RSVUUoYWN0aW9uc0VxdWFsKGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQobWFp
bkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL0ZHIikpLCB7CisgICAgICAgIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6Ok5vdGlmeSwgIkdHRyIgfSwKKyAgICAgICAgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0KKyAgICB9KSk7CisgICAgQVNTRVJUX1RS
VUUoYWN0aW9uc0VxdWFsKGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQobWFpbkRvY3Vt
ZW50UmVxdWVzdCgiaHR0cDovL0VGRyIpKSwgeworICAgICAgICB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpOb3RpZnksICJHR0ciIH0sCisgICAgICAgIHsgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9CisgICAgfSwgdHJ1ZSkpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgY1N0cmluZ0xlbmd0aD4KK3N0YXRpYyBpbnQgc2VxdWVuY2VJ
bnN0YW5jZXMoY29uc3QgVmVjdG9yPFQ+IHZlY3RvciwgY29uc3QgY2hhciAoJnNlcXVlbmNlKVtj
U3RyaW5nTGVuZ3RoXSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKSA9PSBzaXplb2Yo
Y2hhciksICJzZXF1ZW5jZUluc3RhbmNlcyBzaG91bGQgb25seSBiZSB1c2VkIGZvciB2YXJpb3Vz
IGJ5dGUgdmVjdG9ycy4iKTsKKworICAgIHNpemVfdCBzZXF1ZW5jZUxlbmd0aCA9IGNTdHJpbmdM
ZW5ndGggLSAxOworICAgIHNpemVfdCBpbnN0YW5jZXMgPSAwOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDw9IHZlY3Rvci5zaXplKCkgLSBzZXF1ZW5jZUxlbmd0aDsgKytpKSB7CisgICAgICAg
IGZvciAoc2l6ZV90IGogPSAwOyBqIDwgc2VxdWVuY2VMZW5ndGg7IGorKykgeworICAgICAgICAg
ICAgaWYgKHZlY3RvcltpICsgal0gIT0gc2VxdWVuY2Vbal0pCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBpZiAoaiA9PSBzZXF1ZW5jZUxlbmd0aCAtIDEpCisgICAgICAgICAg
ICAgICAgaW5zdGFuY2VzKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGluc3RhbmNl
czsKK30KKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBTdHJpbmdDb21iaW5pbmcpCit7
CisgICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6
Y3JlYXRlKGpzb25XaXRoU3RyaW5nc1RvQ29tYmluZSk7CisgICAgY29uc3QgYXV0byYgZGF0YSA9
IGV4dGVuc2lvbi0+ZGF0YSgpOworCisgICAgQVNTRVJUX0VRKHNlcXVlbmNlSW5zdGFuY2VzKGRh
dGEuYWN0aW9ucywgIkFBQSIpLCAyKTsKKyAgICBBU1NFUlRfRVEoc2VxdWVuY2VJbnN0YW5jZXMo
ZGF0YS5hY3Rpb25zLCAiR0dHIiksIDEpOworCisgICAgQVNTRVJUX0VRKGRhdGEuYWN0aW9ucy5z
aXplKCksIDc4dSk7CisgICAgQVNTRVJUX0VRKGRhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25z
LnNpemUoKSwgIDMxM3UpOworICAgIEFTU0VSVF9FUShkYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9u
cy5zaXplKCksICA1dSk7CisgICAgQVNTRVJUX0VRKGRhdGEudG9wVVJMRmlsdGVycy5zaXplKCks
ICA1dSk7CisgICAgQVNTRVJUX0ZBTFNFKGRhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWlu
KTsKKworICAgIGF1dG8gZXh0ZW5zaW9uV2l0aEZsYWdzID0gSW5NZW1vcnlDb21waWxlZENvbnRl
bnRFeHRlbnNpb246OmNyZWF0ZSgiWyIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpc
Im5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6XCJBQUFcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZp
bHRlclwiOlwiQVwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwibm90aWZ5
XCIsXCJub3RpZmljYXRpb25cIjpcIkFBQVwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJDXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJub3RpZnlcIixcIm5v
dGlmaWNhdGlvblwiOlwiQUFBXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIkFcIixc
InJlc291cmNlLXR5cGVcIjpbXCJkb2N1bWVudFwiXX19LCIKKyAgICAgICAgIntcImFjdGlvblwi
OntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6XCJBQUFcIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwiQVwiLFwicmVzb3VyY2UtdHlwZVwiOltcImRvY3VtZW50XCIs
XCJmb250XCJdfX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwibm90aWZ5XCIs
XCJub3RpZmljYXRpb25cIjpcIkFBQVwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJC
XCIsXCJyZXNvdXJjZS10eXBlXCI6W1wiZG9jdW1lbnRcIl19fSIKKyAgICAiXSIpOworICAgIEFT
U0VSVF9FUShzZXF1ZW5jZUluc3RhbmNlcyhleHRlbnNpb25XaXRoRmxhZ3MtPmRhdGEoKS5hY3Rp
b25zLCAiQUFBIiksIDMpOyAvLyBUaGVyZSBhcmUgMyBzZXRzIG9mIHVuaXF1ZSBmbGFncyBmb3Ig
QUFBIGFjdGlvbnMuCit9CisKIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgVGVybXNLbm93
blRvTWF0Y2hBbnl0aGluZykKIHsKICAgICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tc
ImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIl5wcmUxLipwb3N0MSRcIn19LCIKQEAgLTEzNzcsNiArMTQ4NSwxMiBAQCBURVNUX0YoQ29u
dGVudEV4dGVuc2lvblRlc3QsIEludmFsaWRKU09OCiAgICAgY2hlY2tDb21waWxlckVycm9yKCJb
e1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwid2Via2l0Lm9yZ1wiLFwicmVzb3VyY2UtdHlwZVwiOmZhbHNlfX1dIiwKICAgICAgICAg
Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRUcmln
Z2VyRmxhZ3NBcnJheSk7CiAgICAgCisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9u
XCI6e1widHlwZVwiOlwibm90aWZ5XCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4q
XCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52
YWxpZE5vdGlmaWNhdGlvbik7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6
e1widHlwZVwiOlwibm90aWZ5XCIsXCJub3RpZmljYXRpb25cIjo1fSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCIuKlwifX1dIiwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNp
b25FcnJvcjo6SlNPTkludmFsaWROb3RpZmljYXRpb24pOworICAgIGNoZWNrQ29tcGlsZXJFcnJv
cigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6W119
LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9u
czo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZE5vdGlmaWNhdGlvbik7CisgICAg
Y2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwibm90aWZ5XCIsXCJu
b3RpZmljYXRpb25cIjpcImhlcmUncyBteSBub3RpZmljYXRpb25cIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiLipcIn19XSIsIHsgfSk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJb
e1wiYWN0aW9uXCI6e1widHlwZVwiOlwibm90aWZ5XCIsXCJub3RpZmljYXRpb25cIjpcIlxcdTEy
MzRcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLipcIn19XSIsIHsgfSk7CisgICAg
CiAgICAgU3RyaW5nQnVpbGRlciBydWxlczsKICAgICBydWxlcy5hcHBlbmQoIlsiKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNDk5OTk7ICsraSkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ29udGVu
dFJ1bGVMaXN0Tm90aWZpY2F0aW9uLm1tCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGll
cy5oIgorI2ltcG9ydCA8V2ViS2l0L1dLQ29udGVudFJ1bGVMaXN0U3RvcmUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9X
S1VSTFNjaGVtZUhhbmRsZXIuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJv
bGxlci5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlldy5oPgorI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgorCitzdGF0aWMgYm9vbCByZWNlaXZlZE5vdGlmaWNhdGlvbjsKK3N0YXRpYyBib29s
IHJlY2VpdmVkQWxlcnQ7CisKK0BpbnRlcmZhY2UgQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9u
RGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlLCBXS1VSTFNj
aGVtZUhhbmRsZXIsIFdLVUlEZWxlZ2F0ZT4KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIENvbnRl
bnRSdWxlTGlzdE5vdGlmaWNhdGlvbkRlbGVnYXRlCisKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcgVVJMOihOU1VSTCAqKXVybCBjb250ZW50UnVsZUxpc3RJZGVudGlmaWVy
czooTlNBcnJheTxOU1N0cmluZyAqPiAqKWlkZW50aWZpZXJzIG5vdGlmaWNhdGlvbnM6KE5TQXJy
YXk8TlNTdHJpbmcgKj4gKilub3RpZmljYXRpb25zCit7CisgICAgRVhQRUNUX1NUUkVRKHVybC5h
YnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nLCAiYXBpdGVzdDovLy9tYXRjaCIpOworICAgIEVYUEVD
VF9FUShpZGVudGlmaWVycy5jb3VudCwgMXUpOworICAgIEVYUEVDVF9TVFJFUShbaWRlbnRpZmll
cnMgb2JqZWN0QXRJbmRleDowXS5VVEY4U3RyaW5nLCAidGVzdGlkZW50aWZpZXIiKTsKKyAgICBF
WFBFQ1RfRVEobm90aWZpY2F0aW9ucy5jb3VudCwgMXUpOworICAgIEVYUEVDVF9TVFJFUShbbm90
aWZpY2F0aW9ucyBvYmplY3RBdEluZGV4OjBdLlVURjhTdHJpbmcsICJ0ZXN0bm90aWZpY2F0aW9u
Iik7CisgICAgcmVjZWl2ZWROb3RpZmljYXRpb24gPSB0cnVlOworfQorCistICh2b2lkKXdlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc3RhcnRVUkxTY2hlbWVUYXNrOihpZCA8V0tVUkxTY2hl
bWVUYXNrPil1cmxTY2hlbWVUYXNrCit7CisgICAgW3VybFNjaGVtZVRhc2sgZGlkUmVjZWl2ZVJl
c3BvbnNlOltbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnVybFNjaGVtZVRhc2su
cmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDow
IHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV1dOworICAgIFt1cmxTY2hlbWVUYXNr
IGRpZEZpbmlzaF07Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBz
dG9wVVJMU2NoZW1lVGFzazooaWQgPFdLVVJMU2NoZW1lVGFzaz4pdXJsU2NoZW1lVGFzaworewor
fQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdEFs
ZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6
KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNv
bXBsZXRpb25IYW5kbGVyCit7CisgICAgcmVjZWl2ZWRBbGVydCA9IHRydWU7CisgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKK30KKworQGVuZAorCitzdGF0aWMgUmV0YWluUHRyPFdLQ29udGVudFJ1
bGVMaXN0PiBtYWtlV2FybkNvbnRlbnRSdWxlTGlzdCgpCit7CisgICAgX19ibG9jayBib29sIGRv
bmVDb21waWxpbmcgPSBmYWxzZTsKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxXS0NvbnRlbnRSdWxl
TGlzdD4gY29udGVudFJ1bGVMaXN0OworICAgIFtbV0tDb250ZW50UnVsZUxpc3RTdG9yZSBkZWZh
dWx0U3RvcmVdIGNvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOkAidGVzdGlkZW50
aWZpZXIiIGVuY29kZWRDb250ZW50UnVsZUxpc3Q6QCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
bm90aWZ5XCIsXCJub3RpZmljYXRpb25cIjpcInRlc3Rub3RpZmljYXRpb25cIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwibWF0Y2hcIn19XSIgY29tcGxldGlvbkhhbmRsZXI6XihXS0Nv
bnRlbnRSdWxlTGlzdCAqbGlzdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgRVhQRUNUX1RS
VUUobGlzdCk7CisgICAgICAgIGNvbnRlbnRSdWxlTGlzdCA9IGxpc3Q7CisgICAgICAgIGRvbmVD
b21waWxpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
ZG9uZUNvbXBpbGluZyk7CisgICAgcmV0dXJuIGNvbnRlbnRSdWxlTGlzdDsKK30KKworVEVTVChX
ZWJLaXQsIENvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbk1haW5SZXNvdXJjZSkKK3sKKyAgICBh
dXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW0NvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbkRlbGVn
YXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dL
V2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBbW2NvbmZpZ3VyYXRpb24g
dXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRDb250ZW50UnVsZUxpc3Q6bWFrZVdhcm5Db250ZW50
UnVsZUxpc3QoKS5nZXQoKV07CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxl
cjpkZWxlZ2F0ZS5nZXQoKSBmb3JVUkxTY2hlbWU6QCJhcGl0ZXN0Il07CisgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0
KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAg
ICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3
ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVS
TFdpdGhTdHJpbmc6QCJhcGl0ZXN0Oi8vL21hdGNoIl1dXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJnJlY2VpdmVkTm90aWZpY2F0aW9uKTsKK30KKworVEVTVChXZWJLaXQsIENvbnRl
bnRSdWxlTGlzdE5vdGlmaWNhdGlvblN1YnJlc291cmNlKQoreworICAgIGF1dG8gZGVsZWdhdGUg
PSBhZG9wdE5TKFtbQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uRGVsZWdhdGUgYWxsb2NdIGlu
aXRdKTsKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENv
bnRyb2xsZXJdIGFkZENvbnRlbnRSdWxlTGlzdDptYWtlV2FybkNvbnRlbnRSdWxlTGlzdCgpLmdl
dCgpXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmRlbGVnYXRlLmdl
dCgpIGZvclVSTFNjaGVtZTpAImFwaXRlc3QiXTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2
MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJWaWV3IHNl
dE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcgc2V0VUlE
ZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6QCI8
c2NyaXB0PmZldGNoKCdtYXRjaCcpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2Upe2FsZXJ0KCdmZXRj
aCBjb21wbGV0ZScpfSk8L3NjcmlwdD4iIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJh
cGl0ZXN0Oi8vLyJdXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkQWxl
cnQpOworICAgIEVYUEVDVF9UUlVFKHJlY2VpdmVkTm90aWZpY2F0aW9uKTsKK30KKworI2VuZGlm
IC8vIFdLX0FQSV9FTkFCTEVECg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321711</attachid>
            <date>2017-09-25 11:40:58 -0700</date>
            <delta_ts>2017-09-27 22:10:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177013-20170925114057.patch</filename>
            <type>text/plain</type>
            <size>69739</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE3LTA5LTI1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFdLQ29u
dGVudFJ1bGVMaXN0IG5vdGlmeSBhY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MDEzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
MTA3MzkzNj4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBD
b3ZlcmVkIGJ5IG5ldyBBUEkgdGVzdHMuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6Omhhc1N0cmluZ0FyZ3VtZW50KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OnJlc29sdmVQZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpzZXJpYWxpemVBY3Rpb25zKToKKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5KToK
KyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaDoKKyAg
ICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpsb2FkQWN0aW9uKToKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpkZXNlcmlhbGl6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpkZXNlcmlhbGl6ZVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbjo6c2VyaWFsaXplZExl
bmd0aCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb246OkFjdGlvbik6
CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQ6OnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnBy
b2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JQaW5nTG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6YXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KToKKyAgICAg
ICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIGxvYWRlci9QaW5nTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNG
b3JMb2FkKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFsKToKKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSk6CisgICAgICAgICog
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmFwcGx5QmxvY2tlZFN0YXR1cyk6CisgICAgICAgICog
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oOgorICAgICAgICAqIHBhZ2UvQ2hy
b21lQ2xpZW50Lmg6CisKIDIwMTctMDktMjUgIE1zMmdlciAgPE1zMmdlckBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFVwZGF0ZSB3YWl0U3luYyBhbmQgdGhlIFRJTUVPVVRfSUdOT1JFRCBjb25zdGFu
dCB0byB1c2Ugc2lnbmVkIGludGVnZXJzLgpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oCShyZXZp
c2lvbiAyMjI0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uQWN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNywxMiBAQAogCiAj
aWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgUGFnZTsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIAogbmFtZXNwYWNlIENvbnRl
bnRFeHRlbnNpb25zIHsKQEAgLTM5LDE3ICs0MywzNSBAQCBlbnVtIGNsYXNzIEFjdGlvblR5cGUg
OiB1aW50OF90IHsKICAgICBCbG9ja0xvYWQsCiAgICAgQmxvY2tDb29raWVzLAogICAgIENTU0Rp
c3BsYXlOb25lU2VsZWN0b3IsCi0gICAgSWdub3JlUHJldmlvdXNSdWxlcyA9IDMsCi0gICAgTWFr
ZUhUVFBTID0gNCwKKyAgICBOb3RpZnksCisgICAgSWdub3JlUHJldmlvdXNSdWxlcywKKyAgICBN
YWtlSFRUUFMsCiB9OwogCitzdGF0aWMgaW5saW5lIGJvb2wgaGFzU3RyaW5nQXJndW1lbnQoQWN0
aW9uVHlwZSBhY3Rpb25UeXBlKQoreworICAgIHN3aXRjaCAoYWN0aW9uVHlwZSkgeworICAgIGNh
c2UgQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvcjoKKyAgICBjYXNlIEFjdGlvblR5
cGU6Ok5vdGlmeToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBBY3Rpb25UeXBlOjpC
bG9ja0xvYWQ6CisgICAgY2FzZSBBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXM6CisgICAgY2FzZSBB
Y3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzOgorICAgIGNhc2UgQWN0aW9uVHlwZTo6TWFr
ZUhUVFBTOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogc3RydWN0IEJsb2NrZWRTdGF0dXMgewog
ICAgIGJvb2wgYmxvY2tlZExvYWQgeyBmYWxzZSB9OwogICAgIGJvb2wgYmxvY2tlZENvb2tpZXMg
eyBmYWxzZSB9OwogICAgIGJvb2wgbWFkZUhUVFBTIHsgZmFsc2UgfTsKKyAgICBIYXNoU2V0PHN0
ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IG5vdGlmaWNhdGlvbnM7CiB9OwogCi1XRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5QmxvY2tlZFN0YXR1c1RvUmVxdWVzdChjb25zdCBCbG9ja2VkU3RhdHVz
JiwgUmVzb3VyY2VSZXF1ZXN0Jik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5QmxvY2tlZFN0
YXR1c1RvUmVxdWVzdChjb25zdCBCbG9ja2VkU3RhdHVzJiwgUGFnZSosIFJlc291cmNlUmVxdWVz
dCYpOwogCiB9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25Db21waWxlci5jcHAJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDQ4ICs2OCw0MSBAQCBzdGF0aWMgdm9pZCBzZXJpYWxpemVTdHJpbmcoVmVjdG9y
PFNlcmlhCiAgICAgfQogfQogCisvLyBjc3MtZGlzcGxheS1ub25lIGNvbWJpbmluZyBpcyBzcGVj
aWFsIGJlY2F1c2Ugd2UgY29tYmluZSB0aGUgc3RyaW5nIGFyZ3VtZW50cyB3aXRoIGNvbW1hcyBi
ZWNhdXNlIHdlIGtub3cgdGhleSBhcmUgY3NzIHNlbGVjdG9ycy4KIHN0cnVjdCBQZW5kaW5nRGlz
cGxheU5vbmVBY3Rpb25zIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBzZWxlY3RvcnM7Ci0gICAgVmVj
dG9yPHVuc2lnbmVkPiBjbGllbnRMb2NhdGlvbnM7CisgICAgU3RyaW5nQnVpbGRlciBjb21iaW5l
ZFNlbGVjdG9yczsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGNsaWVudExvY2F0aW9uczsKIH07CisK
IHVzaW5nIFBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnNNYXAgPSBIYXNoTWFwPFRyaWdnZXIsIFBl
bmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnMsIFRyaWdnZXJIYXNoLCBUcmlnZ2VySGFzaFRyYWl0cz47
CiAKLXN0YXRpYyB2b2lkIHJlc29sdmVQZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25zKFZlY3RvcjxT
ZXJpYWxpemVkQWN0aW9uQnl0ZT4mIGFjdGlvbnMsIFZlY3Rvcjx1bnNpZ25lZD4mIGFjdGlvbkxv
Y2F0aW9ucywgUGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9uc01hcCYgcGVuZGluZ0Rpc3BsYXlOb25l
QWN0aW9uc01hcCkKK3N0YXRpYyB2b2lkIHJlc29sdmVQZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25z
KFZlY3RvcjxTZXJpYWxpemVkQWN0aW9uQnl0ZT4mIGFjdGlvbnMsIFZlY3Rvcjx1aW50MzJfdD4m
IGFjdGlvbkxvY2F0aW9ucywgUGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9uc01hcCYgbWFwKQogewot
ICAgIGZvciAoYXV0byYgc2xvdCA6IHBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnNNYXApIHsKLSAg
ICAgICAgUGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9ucyYgcGVuZGluZ0FjdGlvbnMgPSBzbG90LnZh
bHVlOwotCi0gICAgICAgIFN0cmluZ0J1aWxkZXIgY29tYmluZWRTZWxlY3RvcnM7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwZW5kaW5nQWN0aW9ucy5zZWxlY3RvcnMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChpKQotICAgICAgICAgICAgICAgIGNvbWJpbmVkU2Vs
ZWN0b3JzLmFwcGVuZCgnLCcpOwotICAgICAgICAgICAgY29tYmluZWRTZWxlY3RvcnMuYXBwZW5k
KHBlbmRpbmdBY3Rpb25zLnNlbGVjdG9yc1tpXSk7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNp
Z25lZCBhY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOworICAgIGZvciAoYXV0byYgcGVu
ZGluZ0Rpc3BsYXlOb25lQWN0aW9ucyA6IG1hcC52YWx1ZXMoKSkgeworICAgICAgICB1aW50MzJf
dCBhY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOwogICAgICAgICBhY3Rpb25zLmFwcGVu
ZChzdGF0aWNfY2FzdDxTZXJpYWxpemVkQWN0aW9uQnl0ZT4oQWN0aW9uVHlwZTo6Q1NTRGlzcGxh
eU5vbmVTZWxlY3RvcikpOwotICAgICAgICBzZXJpYWxpemVTdHJpbmcoYWN0aW9ucywgY29tYmlu
ZWRTZWxlY3RvcnMudG9TdHJpbmcoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY2xpZW50TG9j
YXRpb24gOiBwZW5kaW5nQWN0aW9ucy5jbGllbnRMb2NhdGlvbnMpCisgICAgICAgIHNlcmlhbGl6
ZVN0cmluZyhhY3Rpb25zLCBwZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25zLmNvbWJpbmVkU2VsZWN0
b3JzLnRvU3RyaW5nKCkpOworICAgICAgICBmb3IgKHVpbnQzMl90IGNsaWVudExvY2F0aW9uIDog
cGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9ucy5jbGllbnRMb2NhdGlvbnMpCiAgICAgICAgICAgICBh
Y3Rpb25Mb2NhdGlvbnNbY2xpZW50TG9jYXRpb25dID0gYWN0aW9uTG9jYXRpb247CiAgICAgfQot
ICAgIHBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnNNYXAuY2xlYXIoKTsKKyAgICBtYXAuY2xlYXIo
KTsKIH0KIAogc3RhdGljIFZlY3Rvcjx1bnNpZ25lZD4gc2VyaWFsaXplQWN0aW9ucyhjb25zdCBW
ZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+JiBydWxlTGlzdCwgVmVjdG9yPFNlcmlhbGl6ZWRB
Y3Rpb25CeXRlPiYgYWN0aW9ucykKIHsKICAgICBBU1NFUlQoIWFjdGlvbnMuc2l6ZSgpKTsKIAot
ICAgIFZlY3Rvcjx1bnNpZ25lZD4gYWN0aW9uTG9jYXRpb25zOworICAgIFZlY3Rvcjx1aW50MzJf
dD4gYWN0aW9uTG9jYXRpb25zOwogCi0gICAgLy8gT3JkZXIgb25seSBtYXR0ZXJzIGJlY2F1c2Ug
b2YgSWdub3JlUHJldmlvdXNSdWxlcy4gQWxsIG90aGVyIGlkZW50aWNhbCBhY3Rpb25zIGNhbiBi
ZSBjb21iaW5lZCBiZXR3ZWVuIGVhY2ggSWdub3JlUHJldmlvdXNSdWxlcwotICAgIC8vIGFuZCBD
U1NEaXNwbGF5Tm9uZSBzdHJpbmdzIGNhbiBiZSBjb21iaW5lZCBpZiB0aGVpciB0cmlnZ2VycyBh
cmUgaWRlbnRpY2FsLgogICAgIHVzaW5nIEFjdGlvbkxvY2F0aW9uID0gdWludDMyX3Q7CiAgICAg
dXNpbmcgQWN0aW9uTWFwID0gSGFzaE1hcDxSZXNvdXJjZUZsYWdzLCBBY3Rpb25Mb2NhdGlvbiwg
RGVmYXVsdEhhc2g8UmVzb3VyY2VGbGFncz46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8UmVzb3VyY2VGbGFncz4+OworICAgIHVzaW5nIFN0cmluZ0FjdGlvbk1hcCA9
IEhhc2hNYXA8c3RkOjpwYWlyPFN0cmluZywgUmVzb3VyY2VGbGFncz4sIEFjdGlvbkxvY2F0aW9u
LCBEZWZhdWx0SGFzaDxzdGQ6OnBhaXI8U3RyaW5nLCBSZXNvdXJjZUZsYWdzPj46Okhhc2gsIFBh
aXJIYXNoVHJhaXRzPEhhc2hUcmFpdHM8U3RyaW5nPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5
SGFzaFRyYWl0czxSZXNvdXJjZUZsYWdzPj4+OwogICAgIEFjdGlvbk1hcCBibG9ja0xvYWRBY3Rp
b25zTWFwOwogICAgIEFjdGlvbk1hcCBibG9ja0Nvb2tpZXNBY3Rpb25zTWFwOwogICAgIFBlbmRp
bmdEaXNwbGF5Tm9uZUFjdGlvbnNNYXAgY3NzRGlzcGxheU5vbmVBY3Rpb25zTWFwOwogICAgIEFj
dGlvbk1hcCBpZ25vcmVQcmV2aW91c1J1bGVBY3Rpb25zTWFwOwogICAgIEFjdGlvbk1hcCBtYWtl
SFRUUFNBY3Rpb25zTWFwOworICAgIFN0cmluZ0FjdGlvbk1hcCBub3RpZnlBY3Rpb25zTWFwOwog
CiAgICAgZm9yICh1bnNpZ25lZCBydWxlSW5kZXggPSAwOyBydWxlSW5kZXggPCBydWxlTGlzdC5z
aXplKCk7ICsrcnVsZUluZGV4KSB7CiAgICAgICAgIGNvbnN0IENvbnRlbnRFeHRlbnNpb25SdWxl
JiBydWxlID0gcnVsZUxpc3RbcnVsZUluZGV4XTsKQEAgLTEyMiw2ICsxMTUsNyBAQCBzdGF0aWMg
VmVjdG9yPHVuc2lnbmVkPiBzZXJpYWxpemVBY3Rpb25zCiAgICAgICAgICAgICBibG9ja0Nvb2tp
ZXNBY3Rpb25zTWFwLmNsZWFyKCk7CiAgICAgICAgICAgICBjc3NEaXNwbGF5Tm9uZUFjdGlvbnNN
YXAuY2xlYXIoKTsKICAgICAgICAgICAgIG1ha2VIVFRQU0FjdGlvbnNNYXAuY2xlYXIoKTsKKyAg
ICAgICAgICAgIG5vdGlmeUFjdGlvbnNNYXAuY2xlYXIoKTsKICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICBpZ25vcmVQcmV2aW91c1J1bGVBY3Rpb25zTWFwLmNsZWFyKCk7CiAKQEAgLTEzMSwx
NiArMTI1LDE3IEBAIHN0YXRpYyBWZWN0b3I8dW5zaWduZWQ+IHNlcmlhbGl6ZUFjdGlvbnMKICAg
ICAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy5hcHBlbmQoYWN0aW9ucy5zaXplKCkpOwogCiAgICAg
ICAgICAgICBhY3Rpb25zLmFwcGVuZChzdGF0aWNfY2FzdDxTZXJpYWxpemVkQWN0aW9uQnl0ZT4o
YWN0aW9uVHlwZSkpOwotICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT0gQWN0aW9uVHlwZTo6
Q1NTRGlzcGxheU5vbmVTZWxlY3RvcikKKyAgICAgICAgICAgIGlmIChoYXNTdHJpbmdBcmd1bWVu
dChhY3Rpb25UeXBlKSkKICAgICAgICAgICAgICAgICBzZXJpYWxpemVTdHJpbmcoYWN0aW9ucywg
cnVsZS5hY3Rpb24oKS5zdHJpbmdBcmd1bWVudCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBBU1NFUlQocnVsZS5hY3Rpb24oKS5zdHJpbmdBcmd1bWVudCgpLmlzTnVsbCgp
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgUmVzb3VyY2VG
bGFncyBmbGFncyA9IHJ1bGUudHJpZ2dlcigpLmZsYWdzOwogICAgICAgICB1bnNpZ25lZCBhY3Rp
b25Mb2NhdGlvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKICAgICAg
ICAgCi0gICAgICAgIGF1dG8gZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uID0gWyZdIChBY3Rpb25N
YXAmIG1hcCkgCi0gICAgICAgIHsKKyAgICAgICAgYXV0byBmaW5kT3JNYWtlQWN0aW9uTG9jYXRp
b24gPSBbJl0gKEFjdGlvbk1hcCYgbWFwKSB7CiAgICAgICAgICAgICBjb25zdCBhdXRvIGV4aXN0
aW5nQWN0aW9uID0gbWFwLmZpbmQoZmxhZ3MpOwogICAgICAgICAgICAgaWYgKGV4aXN0aW5nQWN0
aW9uID09IG1hcC5lbmQoKSkgewogICAgICAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9uID0gYWN0
aW9ucy5zaXplKCk7CkBAIC0xNDksMTMgKzE0NCwyNyBAQCBzdGF0aWMgVmVjdG9yPHVuc2lnbmVk
PiBzZXJpYWxpemVBY3Rpb25zCiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBh
Y3Rpb25Mb2NhdGlvbiA9IGV4aXN0aW5nQWN0aW9uLT52YWx1ZTsKICAgICAgICAgfTsKKyAgICAg
ICAgCisgICAgICAgIGF1dG8gZmluZE9yTWFrZVN0cmluZ0FjdGlvbkxvY2F0aW9uID0gWyZdIChT
dHJpbmdBY3Rpb25NYXAmIG1hcCkgeworICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBhcmd1bWVu
dCA9IHJ1bGUuYWN0aW9uKCkuc3RyaW5nQXJndW1lbnQoKTsKKyAgICAgICAgICAgIGF1dG8gZXhp
c3RpbmdBY3Rpb24gPSBtYXAuZmluZChzdGQ6Om1ha2VfcGFpcihhcmd1bWVudCwgZmxhZ3MpKTsK
KyAgICAgICAgICAgIGlmIChleGlzdGluZ0FjdGlvbiA9PSBtYXAuZW5kKCkpIHsKKyAgICAgICAg
ICAgICAgICBhY3Rpb25Mb2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOworICAgICAgICAgICAgICAg
IGFjdGlvbnMuYXBwZW5kKHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRBY3Rpb25CeXRlPihhY3Rpb25U
eXBlKSk7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplU3RyaW5nKGFjdGlvbnMsIGFyZ3VtZW50
KTsKKyAgICAgICAgICAgICAgICBtYXAuc2V0KHN0ZDo6bWFrZV9wYWlyKGFyZ3VtZW50LCBmbGFn
cyksIGFjdGlvbkxvY2F0aW9uKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IGFjdGlvbkxvY2F0aW9uID0gZXhpc3RpbmdBY3Rpb24tPnZhbHVlOworICAgICAgICB9OwogCiAg
ICAgICAgIHN3aXRjaCAoYWN0aW9uVHlwZSkgewogICAgICAgICBjYXNlIEFjdGlvblR5cGU6OkNT
U0Rpc3BsYXlOb25lU2VsZWN0b3I6IHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8gYWRkUmVzdWx0
ID0gY3NzRGlzcGxheU5vbmVBY3Rpb25zTWFwLmFkZChydWxlLnRyaWdnZXIoKSwgUGVuZGluZ0Rp
c3BsYXlOb25lQWN0aW9ucygpKTsKLSAgICAgICAgICAgIFBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlv
bnMmIHBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnMgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
OwotICAgICAgICAgICAgcGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9ucy5zZWxlY3RvcnMuYXBwZW5k
KHJ1bGUuYWN0aW9uKCkuc3RyaW5nQXJndW1lbnQoKSk7Ci0gICAgICAgICAgICBwZW5kaW5nRGlz
cGxheU5vbmVBY3Rpb25zLmNsaWVudExvY2F0aW9ucy5hcHBlbmQoYWN0aW9uTG9jYXRpb25zLnNp
emUoKSk7CisgICAgICAgICAgICBhdXRvJiBwZW5kaW5nU3RyaW5nQWN0aW9ucyA9IGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoIXBlbmRpbmdTdHJpbmdBY3Rpb25z
LmNvbWJpbmVkU2VsZWN0b3JzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBwZW5kaW5nU3Ry
aW5nQWN0aW9ucy5jb21iaW5lZFNlbGVjdG9ycy5hcHBlbmQoJywnKTsKKyAgICAgICAgICAgIHBl
bmRpbmdTdHJpbmdBY3Rpb25zLmNvbWJpbmVkU2VsZWN0b3JzLmFwcGVuZChydWxlLmFjdGlvbigp
LnN0cmluZ0FyZ3VtZW50KCkpOworICAgICAgICAgICAgcGVuZGluZ1N0cmluZ0FjdGlvbnMuY2xp
ZW50TG9jYXRpb25zLmFwcGVuZChhY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKIAogICAgICAgICAg
ICAgYWN0aW9uTG9jYXRpb24gPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3Miw2ICsxODEsOSBAQCBzdGF0aWMgVmVjdG9yPHVu
c2lnbmVkPiBzZXJpYWxpemVBY3Rpb25zCiAgICAgICAgIGNhc2UgQWN0aW9uVHlwZTo6TWFrZUhU
VFBTOgogICAgICAgICAgICAgZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uKG1ha2VIVFRQU0FjdGlv
bnNNYXApOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWN0aW9uVHlwZTo6Tm90
aWZ5OgorICAgICAgICAgICAgZmluZE9yTWFrZVN0cmluZ0FjdGlvbkxvY2F0aW9uKG5vdGlmeUFj
dGlvbnNNYXApOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBhY3Rp
b25Mb2NhdGlvbnMuYXBwZW5kKGFjdGlvbkxvY2F0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9y
LmNwcAkocmV2aXNpb24gMjIyNDUwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcs
OCBAQCBjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiBjb250ZW50RXh0ZW5zCiAgICAgICAgICAg
ICAgICAgcmV0dXJuICJBIHRyaWdnZXIgY2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBjb25kaXRp
b24gKGlmLWRvbWFpbiwgdW5sZXNzLWRvbWFpbiwgaWYtdG9wLXVybCwgb3IgdW5sZXNzLXRvcC11
cmwpIjsKICAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OVG9wVVJM
QW5kRG9tYWluQ29uZGl0aW9uczoKICAgICAgICAgICAgICAgICByZXR1cm4gIkEgbGlzdCBjYW5u
b3QgaGF2ZSBpZi1kb21haW4gYW5kIHVubGVzcy1kb21haW4gbWl4ZWQgd2l0aCBpZi10b3AtdXJs
IGFuZCB1bmxlc3MtdG9wLXVybCI7CisgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTkludmFsaWROb3RpZmljYXRpb246CisgICAgICAgICAgICAgICAgcmV0dXJuICJB
IG5vdGlmeSBhY3Rpb24gbXVzdCBoYXZlIGEgc3RyaW5nIG5vdGlmaWNhdGlvbiI7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bkVycm9yLmgJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1
OCw3IEBAIGVudW0gY2xhc3MgQ29udGVudEV4dGVuc2lvbkVycm9yIHsKICAgICBKU09OSW52YWxp
ZEFjdGlvbiwKICAgICBKU09OSW52YWxpZEFjdGlvblR5cGUsCiAgICAgSlNPTkludmFsaWRDU1NE
aXNwbGF5Tm9uZUFjdGlvblR5cGUsCisgICAgSlNPTkludmFsaWROb3RpZmljYXRpb24sCiAgICAg
SlNPTkludmFsaWRSZWdleCwKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCShyZXZp
c2lvbiAyMjI0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4LDExICsyNDgsMTEgQEAg
c3RhdGljIEV4cGVjdGVkPHN0ZDo6b3B0aW9uYWw8QWN0aW9uPiwgcwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGNvbnN0IEpTVmFsdWUgYWN0aW9uT2Jq
ZWN0ID0gcnVsZU9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMs
ICJhY3Rpb24iKSk7Ci0gICAgaWYgKCFhY3Rpb25PYmplY3QgfHwgc2NvcGUuZXhjZXB0aW9uKCkg
fHwgIWFjdGlvbk9iamVjdC5pc09iamVjdCgpKQorICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8
fCAhYWN0aW9uT2JqZWN0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQWN0aW9uKTsKIAogICAgIGNvbnN0
IEpTVmFsdWUgdHlwZU9iamVjdCA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJmV4ZWMsICJ0eXBlIikpOwotICAgIGlmICghdHlwZU9iamVjdCB8fCBzY29w
ZS5leGNlcHRpb24oKSB8fCAhdHlwZU9iamVjdC5pc1N0cmluZygpKQorICAgIGlmIChzY29wZS5l
eGNlcHRpb24oKSB8fCAhdHlwZU9iamVjdC5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZEFjdGlvblR5cGUp
OwogCiAgICAgU3RyaW5nIGFjdGlvblR5cGUgPSBhc1N0cmluZyh0eXBlT2JqZWN0KS0+dmFsdWUo
JmV4ZWMpOwpAQCAtMjY1LDcgKzI2NSw3IEBAIHN0YXRpYyBFeHBlY3RlZDxzdGQ6Om9wdGlvbmFs
PEFjdGlvbj4sIHMKICAgICAgICAgcmV0dXJuIHt7IEFjdGlvblR5cGU6OkJsb2NrQ29va2llcyB9
fTsKICAgICBpZiAoYWN0aW9uVHlwZSA9PSAiY3NzLWRpc3BsYXktbm9uZSIpIHsKICAgICAgICAg
SlNWYWx1ZSBzZWxlY3RvciA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJmV4ZWMsICJzZWxlY3RvciIpKTsKLSAgICAgICAgaWYgKCFzZWxlY3RvciB8fCBz
Y29wZS5leGNlcHRpb24oKSB8fCAhc2VsZWN0b3IuaXNTdHJpbmcoKSkKKyAgICAgICAgaWYgKHNj
b3BlLmV4Y2VwdGlvbigpIHx8ICFzZWxlY3Rvci5pc1N0cmluZygpKQogICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRDU1NE
aXNwbGF5Tm9uZUFjdGlvblR5cGUpOwogCiAgICAgICAgIFN0cmluZyBzZWxlY3RvclN0cmluZyA9
IGFzU3RyaW5nKHNlbGVjdG9yKS0+dmFsdWUoJmV4ZWMpOwpAQCAtMjc3LDYgKzI3NywxMiBAQCBz
dGF0aWMgRXhwZWN0ZWQ8c3RkOjpvcHRpb25hbDxBY3Rpb24+LCBzCiAgICAgfQogICAgIGlmIChh
Y3Rpb25UeXBlID09ICJtYWtlLWh0dHBzIikKICAgICAgICAgcmV0dXJuIHt7IEFjdGlvblR5cGU6
Ok1ha2VIVFRQUyB9fTsKKyAgICBpZiAoYWN0aW9uVHlwZSA9PSAibm90aWZ5IikgeworICAgICAg
ICBKU1ZhbHVlIG5vdGlmaWNhdGlvbiA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJub3RpZmljYXRpb24iKSk7CisgICAgICAgIGlmIChzY29w
ZS5leGNlcHRpb24oKSB8fCAhbm90aWZpY2F0aW9uLmlzU3RyaW5nKCkpCisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZE5v
dGlmaWNhdGlvbik7CisgICAgICAgIHJldHVybiB7IEFjdGlvbihBY3Rpb25UeXBlOjpOb3RpZnks
IGFzU3RyaW5nKG5vdGlmaWNhdGlvbiktPnZhbHVlKCZleGVjKSkgfTsKKyAgICB9CiAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRBY3Rp
b25UeXBlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvblJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmNwcAkocmV2aXNpb24gMjIyNDUwKQor
KysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIEFjdGlvbiBBY3Rpb246OmRlc2Vy
aWFsaXplKGNvbnN0IFNlcmlhbGkKICAgICBjYXNlIEFjdGlvblR5cGU6Ok1ha2VIVFRQUzoKICAg
ICAgICAgcmV0dXJuIEFjdGlvbihhY3Rpb25UeXBlLCBsb2NhdGlvbik7CiAgICAgY2FzZSBBY3Rp
b25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yOgorICAgIGNhc2UgQWN0aW9uVHlwZTo6Tm90
aWZ5OgogICAgICAgICByZXR1cm4gQWN0aW9uKGFjdGlvblR5cGUsIGRlc2VyaWFsaXplU3RyaW5n
KGFjdGlvbnMsIGFjdGlvbnNMZW5ndGgsIGxvY2F0aW9uICsgc2l6ZW9mKEFjdGlvblR5cGUpKSwg
bG9jYXRpb24pOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
NzgsNiArNzksNyBAQCBBY3Rpb25UeXBlIEFjdGlvbjo6ZGVzZXJpYWxpemVUeXBlKGNvbnN0CiAg
ICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXM6CiAg
ICAgY2FzZSBBY3Rpb25UeXBlOjpCbG9ja0xvYWQ6CisgICAgY2FzZSBBY3Rpb25UeXBlOjpOb3Rp
Znk6CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzOgogICAgIGNhc2Ug
QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvcjoKICAgICBjYXNlIEFjdGlvblR5cGU6
Ok1ha2VIVFRQUzoKQEAgLTk1LDYgKzk3LDcgQEAgdWludDMyX3QgQWN0aW9uOjpzZXJpYWxpemVk
TGVuZ3RoKGNvbnN0IAogICAgIGNhc2UgQWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlczoK
ICAgICBjYXNlIEFjdGlvblR5cGU6Ok1ha2VIVFRQUzoKICAgICAgICAgcmV0dXJuIHNpemVvZihB
Y3Rpb25UeXBlKTsKKyAgICBjYXNlIEFjdGlvblR5cGU6Ok5vdGlmeToKICAgICBjYXNlIEFjdGlv
blR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3I6IHsKICAgICAgICAgdWludDMyX3QgcHJlZml4
TGVuZ3RoID0gc2l6ZW9mKEFjdGlvblR5cGUpICsgc2l6ZW9mKHVpbnQzMl90KSArIHNpemVvZihi
b29sKTsKICAgICAgICAgdWludDMyX3Qgc3RyaW5nU3RhcnRJbmRleCA9IGxvY2F0aW9uICsgcHJl
Zml4TGVuZ3RoOwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvblJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCShyZXZpc2lvbiAyMjI0NTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzUsMTQgKzEzNSwxNCBAQCBzdHJ1Y3QgQWN0aW9uIHsKICAgICAgICAg
LCBtX2FjdGlvbklEKGFjdGlvbklEKQogICAgICAgICAsIG1fc3RyaW5nQXJndW1lbnQoc3RyaW5n
QXJndW1lbnQpCiAgICAgewotICAgICAgICBBU1NFUlQodHlwZSA9PSBBY3Rpb25UeXBlOjpDU1NE
aXNwbGF5Tm9uZVNlbGVjdG9yKTsKKyAgICAgICAgQVNTRVJUKGhhc1N0cmluZ0FyZ3VtZW50KHR5
cGUpKTsKICAgICB9CiAKICAgICBBY3Rpb24oQWN0aW9uVHlwZSB0eXBlLCB1aW50MzJfdCBhY3Rp
b25JRCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKICAgICAgICAgOiBt
X3R5cGUodHlwZSkKICAgICAgICAgLCBtX2FjdGlvbklEKGFjdGlvbklEKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKHR5cGUgIT0gQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3Rvcik7Cisg
ICAgICAgIEFTU0VSVCghaGFzU3RyaW5nQXJndW1lbnQodHlwZSkpOwogICAgIH0KIAogICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBBY3Rpb24mIG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uc0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyMjI0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCisj
aW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbi5o
IgogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgiCkBAIC0zOCw2ICs0MCw3
IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgog
I2luY2x1ZGUgIk1haW5GcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZXNv
dXJjZUxvYWRJbmZvLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSAiVXNlckNvbnRlbnRD
b250cm9sbGVyLmgiCkBAIC0xNzAsNiArMTczLDcgQEAgQmxvY2tlZFN0YXR1cyBDb250ZW50RXh0
ZW5zaW9uc0JhY2tlbmQ6OgogICAgIGJvb2wgd2lsbEJsb2NrTG9hZCA9IGZhbHNlOwogICAgIGJv
b2wgd2lsbEJsb2NrQ29va2llcyA9IGZhbHNlOwogICAgIGJvb2wgd2lsbE1ha2VIVFRQUyA9IGZh
bHNlOworICAgIEhhc2hTZXQ8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gbm90aWZpY2F0aW9u
czsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGFjdGlvbiA6IGFjdGlvbnMuZmlyc3QpIHsKICAgICAg
ICAgc3dpdGNoIChhY3Rpb24udHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZDoKQEAgLTE4NCw2ICsxODgsOSBAQCBCbG9ja2VkU3Rh
dHVzIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6CiAgICAgICAgICAgICBlbHNlIGlmIChjdXJy
ZW50RG9jdW1lbnQpCiAgICAgICAgICAgICAgICAgY3VycmVudERvY3VtZW50LT5leHRlbnNpb25T
dHlsZVNoZWV0cygpLmFkZERpc3BsYXlOb25lU2VsZWN0b3IoYWN0aW9uLmV4dGVuc2lvbklkZW50
aWZpZXIoKSwgYWN0aW9uLnN0cmluZ0FyZ3VtZW50KCksIGFjdGlvbi5hY3Rpb25JRCgpKTsKICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpOb3RpZnk6CisgICAgICAgICAgICBub3RpZmljYXRpb25zLmFkZChzdGQ6Om1ha2VfcGFp
cihhY3Rpb24uZXh0ZW5zaW9uSWRlbnRpZmllcigpLCBhY3Rpb24uc3RyaW5nQXJndW1lbnQoKSkp
OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6Ok1ha2VIVFRQUzogewogICAgICAgICAgICAgaWYgKCh1cmwucHJvdG9jb2xJcygi
aHR0cCIpIHx8IHVybC5wcm90b2NvbElzKCJ3cyIpKQogICAgICAgICAgICAgICAgICYmICghdXJs
LnBvcnQoKSB8fCBpc0RlZmF1bHRQb3J0Rm9yUHJvdG9jb2wodXJsLnBvcnQoKS52YWx1ZSgpLCB1
cmwucHJvdG9jb2woKSkpKQpAQCAtMjEzLDcgKzIyMCw3IEBAIEJsb2NrZWRTdGF0dXMgQ29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kOjoKICAgICAgICAgaWYgKHdpbGxCbG9ja0xvYWQpCiAgICAgICAg
ICAgICBjdXJyZW50RG9jdW1lbnQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkNv
bnRlbnRCbG9ja2VyLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIkNvbnRlbnQgYmxv
Y2tlciBwcmV2ZW50ZWQgZnJhbWUgZGlzcGxheWluZyAiLCBtYWluRG9jdW1lbnRVUkwuc3RyaW5n
KCksICIgZnJvbSBsb2FkaW5nIGEgcmVzb3VyY2UgZnJvbSAiLCB1cmwuc3RyaW5nKCkpKTsKICAg
ICB9Ci0gICAgcmV0dXJuIHsgd2lsbEJsb2NrTG9hZCwgd2lsbEJsb2NrQ29va2llcywgd2lsbE1h
a2VIVFRQUyB9OworICAgIHJldHVybiB7IHdpbGxCbG9ja0xvYWQsIHdpbGxCbG9ja0Nvb2tpZXMs
IHdpbGxNYWtlSFRUUFMsIFdURk1vdmUobm90aWZpY2F0aW9ucykgfTsKIH0KIAogQmxvY2tlZFN0
YXR1cyBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVs
ZXNGb3JQaW5nTG9hZChjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBtYWluRG9jdW1lbnRVUkwp
CkBAIC0yNDAsMTMgKzI0NywxNCBAQCBCbG9ja2VkU3RhdHVzIENvbnRlbnRFeHRlbnNpb25zQmFj
a2VuZDo6CiAgICAgICAgICAgICAgICAgd2lsbE1ha2VIVFRQUyA9IHRydWU7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NT
RGlzcGxheU5vbmVTZWxlY3RvcjoKKyAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6Tm90aWZ5OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29udGVu
dEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6Oklnbm9yZVByZXZpb3VzUnVsZXM6CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
cmV0dXJuIHsgd2lsbEJsb2NrTG9hZCwgd2lsbEJsb2NrQ29va2llcywgd2lsbE1ha2VIVFRQUyB9
OworICAgIHJldHVybiB7IHdpbGxCbG9ja0xvYWQsIHdpbGxCbG9ja0Nvb2tpZXMsIHdpbGxNYWtl
SFRUUFMsIHsgfSB9OwogfQogCiBjb25zdCBTdHJpbmcmIENvbnRlbnRFeHRlbnNpb25zQmFja2Vu
ZDo6ZGlzcGxheU5vbmVDU1NSdWxlKCkKQEAgLTI1NSw4ICsyNjMsMTEgQEAgY29uc3QgU3RyaW5n
JiBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OgogICAgIHJldHVybiBydWxlOwogfQogCi12b2lk
IGFwcGx5QmxvY2tlZFN0YXR1c1RvUmVxdWVzdChjb25zdCBCbG9ja2VkU3RhdHVzJiBzdGF0dXMs
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3ZvaWQgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1
ZXN0KGNvbnN0IEJsb2NrZWRTdGF0dXMmIHN0YXR1cywgUGFnZSogcGFnZSwgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQogeworICAgIGlmIChwYWdlICYmICFzdGF0dXMubm90aWZpY2F0aW9ucy5p
c0VtcHR5KCkpCisgICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLmNvbnRlbnRSdWxlTGlz
dE5vdGlmaWNhdGlvbihyZXF1ZXN0LnVybCgpLCBzdGF0dXMubm90aWZpY2F0aW9ucyk7CisKICAg
ICBpZiAoc3RhdHVzLmJsb2NrZWRDb29raWVzKQogICAgICAgICByZXF1ZXN0LnNldEFsbG93Q29v
a2llcyhmYWxzZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAko
cmV2aXNpb24gMjIyNDUwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgwNCw3ICsyODA0LDcgQEAgdW5zaWduZWQgbG9uZyBGcmFt
ZUxvYWRlcjo6bG9hZFJlc291cmNlUwogICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUu
cGFnZSgpKSB7CiAgICAgICAgICAgICBpZiAobV9kb2N1bWVudExvYWRlcikgewogICAgICAgICAg
ICAgICAgIGF1dG8gYmxvY2tlZFN0YXR1cyA9IHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5w
cm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChuZXdSZXF1ZXN0LnVybCgpLCBSZXNv
dXJjZVR5cGU6OlJhdywgKm1fZG9jdW1lbnRMb2FkZXIpOwotICAgICAgICAgICAgICAgIGFwcGx5
QmxvY2tlZFN0YXR1c1RvUmVxdWVzdChibG9ja2VkU3RhdHVzLCBuZXdSZXF1ZXN0KTsKKyAgICAg
ICAgICAgICAgICBhcHBseUJsb2NrZWRTdGF0dXNUb1JlcXVlc3QoYmxvY2tlZFN0YXR1cywgcGFn
ZSwgbmV3UmVxdWVzdCk7CiAgICAgICAgICAgICAgICAgaWYgKGJsb2NrZWRTdGF0dXMuYmxvY2tl
ZExvYWQpIHsKICAgICAgICAgICAgICAgICAgICAgbmV3UmVxdWVzdCA9IHsgfTsKICAgICAgICAg
ICAgICAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJu
YWwsIDAsIGluaXRpYWxSZXF1ZXN0LnVybCgpLCBlbXB0eVN0cmluZygpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9QaW5nTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUGluZ0xvYWRlci5jcHAJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9QaW5nTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUs
NyBAQCBzdGF0aWMgYm9vbCBwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzCiAgICAgaWYgKCFw
YWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXV0byBzdGF0dXMgPSBwYWdlLT51c2Vy
Q29udGVudFByb3ZpZGVyKCkucHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVx
dWVzdC51cmwoKSwgcmVzb3VyY2VUeXBlLCAqZG9jdW1lbnRMb2FkZXIpOwotICAgIGFwcGx5Qmxv
Y2tlZFN0YXR1c1RvUmVxdWVzdChzdGF0dXMsIHJlcXVlc3QpOworICAgIGFwcGx5QmxvY2tlZFN0
YXR1c1RvUmVxdWVzdChzdGF0dXMsIHBhZ2UsIHJlcXVlc3QpOwogICAgIHJldHVybiBzdGF0dXMu
YmxvY2tlZExvYWQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9h
ZGVyLmNwcAkocmV2aXNpb24gMjIyNDUwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ1LDExICszNDUsMTEgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0SW50ZQogICAgIH0KIAogI2lmIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCi0gICAgaWYgKGZyYW1lTG9hZGVyKCkpIHsKKyAgICBpZiAoIXJl
ZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkgJiYgZnJhbWVMb2FkZXIoKSkgewogICAgICAgICBQYWdl
KiBwYWdlID0gZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS5wYWdlKCk7CiAgICAgICAgIGlmIChwYWdl
ICYmIG1fZG9jdW1lbnRMb2FkZXIpIHsKICAgICAgICAgICAgIGF1dG8gYmxvY2tlZFN0YXR1cyA9
IHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVz
Rm9yTG9hZChyZXF1ZXN0LnVybCgpLCBtX3Jlc291cmNlVHlwZSwgKm1fZG9jdW1lbnRMb2FkZXIp
OwotICAgICAgICAgICAgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KGJsb2NrZWRTdGF0dXMs
IHJlcXVlc3QpOworICAgICAgICAgICAgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KGJsb2Nr
ZWRTdGF0dXMsIHBhZ2UsIHJlcXVlc3QpOwogICAgICAgICAgICAgaWYgKGJsb2NrZWRTdGF0dXMu
YmxvY2tlZExvYWQpIHsKICAgICAgICAgICAgICAgICByZXF1ZXN0ID0geyB9OwogICAgICAgICAg
ICAgICAgIGRpZEZhaWwoYmxvY2tlZEJ5Q29udGVudEJsb2NrZXJFcnJvcigpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVy
LmNwcAkocmV2aXNpb24gMjIyNDUwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI1LDggKzcyNSw5IEBA
IFJlc291cmNlRXJyb3JPcjxDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWMKICNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQogICAgIGlmIChmcmFtZSgpICYmIGZyYW1lKCktPm1haW5GcmFtZSgp
LnBhZ2UoKSAmJiBtX2RvY3VtZW50TG9hZGVyKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIHJlc291
cmNlUmVxdWVzdCA9IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAgICAgIGF1dG8gYmxv
Y2tlZFN0YXR1cyA9IGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRQcm92
aWRlcigpLnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlc291cmNlUmVxdWVz
dC51cmwoKSwgdG9SZXNvdXJjZVR5cGUodHlwZSksICptX2RvY3VtZW50TG9hZGVyKTsKLSAgICAg
ICAgcmVxdWVzdC5hcHBseUJsb2NrZWRTdGF0dXMoYmxvY2tlZFN0YXR1cyk7CisgICAgICAgIGF1
dG8qIHBhZ2UgPSBmcmFtZSgpLT5tYWluRnJhbWUoKS5wYWdlKCk7CisgICAgICAgIGF1dG8gYmxv
Y2tlZFN0YXR1cyA9IHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVudEV4
dGVuc2lvblJ1bGVzRm9yTG9hZChyZXNvdXJjZVJlcXVlc3QudXJsKCksIHRvUmVzb3VyY2VUeXBl
KHR5cGUpLCAqbV9kb2N1bWVudExvYWRlcik7CisgICAgICAgIHJlcXVlc3QuYXBwbHlCbG9ja2Vk
U3RhdHVzKGJsb2NrZWRTdGF0dXMsIHBhZ2UpOwogICAgICAgICBpZiAoYmxvY2tlZFN0YXR1cy5i
bG9ja2VkTG9hZCkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgicmVxdWVz
dFJlc291cmNlOiBSZXNvdXJjZSBibG9ja2VkIGJ5IGNvbnRlbnQgYmxvY2tlciAoZnJhbWUgPSAl
cCkiLCBmcmFtZSgpKTsKICAgICAgICAgICAgIGlmICh0eXBlID09IENhY2hlZFJlc291cmNlOjpU
eXBlOjpNYWluUmVzb3VyY2UpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCShyZXZpc2lvbiAyMjI0NTApCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEyLDkgKzIxMiw5IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0OjpyZW1vdmVGcmFnbWUKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKLXZv
aWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjphcHBseUJsb2NrZWRTdGF0dXMoY29uc3QgQ29udGVu
dEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXMmIGJsb2NrZWRTdGF0dXMpCit2b2lkIENhY2hlZFJl
c291cmNlUmVxdWVzdDo6YXBwbHlCbG9ja2VkU3RhdHVzKGNvbnN0IENvbnRlbnRFeHRlbnNpb25z
OjpCbG9ja2VkU3RhdHVzJiBibG9ja2VkU3RhdHVzLCBQYWdlKiBwYWdlKQogewotICAgIENvbnRl
bnRFeHRlbnNpb25zOjphcHBseUJsb2NrZWRTdGF0dXNUb1JlcXVlc3QoYmxvY2tlZFN0YXR1cywg
bV9yZXNvdXJjZVJlcXVlc3QpOworICAgIENvbnRlbnRFeHRlbnNpb25zOjphcHBseUJsb2NrZWRT
dGF0dXNUb1JlcXVlc3QoYmxvY2tlZFN0YXR1cywgcGFnZSwgbV9yZXNvdXJjZVJlcXVlc3QpOwog
fQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZVJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVBY2NvcmRpbmdDYWNoZU1v
ZGUoKTsKICAgICB2b2lkIHJlbW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVkKCk7CiAjaWYg
RU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICB2b2lkIGFwcGx5QmxvY2tlZFN0YXR1cyhj
b25zdCBDb250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1cyYpOworICAgIHZvaWQgYXBwbHlC
bG9ja2VkU3RhdHVzKGNvbnN0IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzJiwgUGFn
ZSopOwogI2VuZGlmCiAgICAgdm9pZCBzZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbihEb2N1bWVu
dCYpOwogICAgIHZvaWQgc2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oY29uc3QgU3RyaW5nJik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDIyMjQ1MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
MCw2ICszNzAsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGVuYWJsZVN1ZGRlblRlcm1p
bmF0aW9uKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigp
IHsgfQogCisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihjb25z
dCBXZWJDb3JlOjpVUkwmLCBjb25zdCBIYXNoU2V0PHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+
JikgeyB9OworCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0U2V0
Q3Vyc29yVG9DdXJyZW50Q3Vyc29yKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBBWFN0YXJ0RnJh
bWVMb2FkKCkgPSAwOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTctMDkt
MjUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBBZGQgV0tDb250ZW50UnVsZUxpc3Qgbm90aWZ5IGFjdGlvbiB0eXBlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcwMTMKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzMxMDczOTM2PgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgor
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpQaW5nTG9hZDo6cHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oOgorICAgICAgICAoQVBJOjpO
YXZpZ2F0aW9uQ2xpZW50Ojpjb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24pOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAgICAoV0tQYWdlU2V0UGFnZU5hdmln
YXRpb25DbGllbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VOYXZpZ2F0aW9u
Q2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS05hdmlnYXRpb25EZWxl
Z2F0ZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRl
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbToKKyAgICAg
ICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpzZXROYXZpZ2F0aW9uRGVsZWdhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmNvbnRlbnRS
dWxlTGlzdE5vdGlmaWNhdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y29udGVudFJ1bGVMaXN0Tm90aWZp
Y2F0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNocm9tZUNsaWVudDo6Y29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDE3LTA5LTI0
ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBW
aWV3cG9ydCBmaXQgaXMgbm8gbG9uZ2VyIGV4cGVyaW1lbnRhbApJbmRleDogU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5jcHAJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MjQsNyArMzI0LDcgQEAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFjawog
Q29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXMgUGluZ0xvYWQ6OnByb2Nlc3NDb250ZW50
RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBh
dXRvIHN0YXR1cyA9IGNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCgpLnByb2Nlc3NDb250ZW50RXh0
ZW5zaW9uUnVsZXNGb3JQaW5nTG9hZChyZXF1ZXN0LnVybCgpLCBtX3BhcmFtZXRlcnMubWFpbkRv
Y3VtZW50VVJMKTsKLSAgICBhcHBseUJsb2NrZWRTdGF0dXNUb1JlcXVlc3Qoc3RhdHVzLCByZXF1
ZXN0KTsKKyAgICBhcHBseUJsb2NrZWRTdGF0dXNUb1JlcXVlc3Qoc3RhdHVzLCBudWxscHRyLCBy
ZXF1ZXN0KTsKICAgICByZXR1cm4gc3RhdHVzOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3ODcsNiAr
Mzc4NywxMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6d2lsbFN1Ym1pdEZvcm0odWludDY0CiAgICAg
bV9mb3JtQ2xpZW50LT53aWxsU3VibWl0Rm9ybSgqdGhpcywgKmZyYW1lLCAqc291cmNlRnJhbWUs
IHRleHRGaWVsZFZhbHVlcywgbV9wcm9jZXNzLT50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVz
ZXJEYXRhLm9iamVjdCgpKS5nZXQoKSwgbGlzdGVuZXIuZ2V0KCkpOwogfQogCit2b2lkIFdlYlBh
Z2VQcm94eTo6Y29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKFdlYkNvcmU6OlVSTCYmIHVybCwg
VmVjdG9yPFN0cmluZz4mJiBpZGVudGlmaWVycywgVmVjdG9yPFN0cmluZz4mJiBub3RpZmljYXRp
b25zKQoreworICAgIGlmIChtX25hdmlnYXRpb25DbGllbnQpCisgICAgICAgIG1fbmF2aWdhdGlv
bkNsaWVudC0+Y29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKCp0aGlzLCBXVEZNb3ZlKHVybCks
IFdURk1vdmUoaWRlbnRpZmllcnMpLCBXVEZNb3ZlKG5vdGlmaWNhdGlvbnMpKTsKK30KKyAgICAK
IHZvaWQgV2ViUGFnZVByb3h5OjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShjb25zdCBX
ZWJOYXZpZ2F0aW9uRGF0YVN0b3JlJiBzdG9yZSwgdWludDY0X3QgZnJhbWVJRCkgCiB7CiAgICAg
UGFnZUNsaWVudFByb3RlY3RvciBwcm90ZWN0b3IobV9wYWdlQ2xpZW50KTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyMjI0NTApCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTI4
Niw2ICsxMjg2LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHVuYWJsZVRvSW1wbGVtZW50UG9saWN5
KHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBV
c2VyRGF0YSYpOwogCiAgICAgdm9pZCB3aWxsU3VibWl0Rm9ybSh1aW50NjRfdCBmcmFtZUlELCB1
aW50NjRfdCBzb3VyY2VGcmFtZUlELCBjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3Ry
aW5nPj4mIHRleHRGaWVsZFZhbHVlcywgdWludDY0X3QgbGlzdGVuZXJJRCwgY29uc3QgVXNlckRh
dGEmKTsKKyAgICAgICAgCisgICAgdm9pZCBjb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24oV2Vi
Q29yZTo6VVJMJiYsIFZlY3RvcjxTdHJpbmc+JiYgaWRlbnRpZmllcnMsIFZlY3RvcjxTdHJpbmc+
JiYgbm90aWZpY2F0aW9ucyk7CiAKICAgICAvLyBIaXN0b3J5IGNsaWVudAogICAgIHZvaWQgZGlk
TmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEoY29uc3QgV2ViTmF2aWdhdGlvbkRhdGFTdG9yZSYs
IHVpbnQ2NF90IGZyYW1lSUQpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjIyNDUwKQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBA
IC00NTgsNiArNDU4LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBIYW5kbGVT
eW5jaHJvbm91c01lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VOYW1lLCBXZWJLaXQ6OlVzZXJEYXRhIG1l
c3NhZ2VCb2R5KSAtPiAoV2ViS2l0OjpVc2VyRGF0YSByZXR1cm5EYXRhKSBXYW50c0Nvbm5lY3Rp
b24KIAogICAgIEhhbmRsZUF1dG9GaWxsQnV0dG9uQ2xpY2soV2ViS2l0OjpVc2VyRGF0YSB1c2Vy
RGF0YSk7CisgICAgQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKFdlYkNvcmU6OlVSTCB1cmws
IFZlY3RvcjxTdHJpbmc+IGlkZW50aWZpZXJzLCBWZWN0b3I8U3RyaW5nPiBub3RpZmljYXRpb25z
KQogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElP
UykKICAgICBBZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCh1aW50NjRfdCBjb250ZXh0SWQp
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9u
Q2xpZW50LmgJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElOYXZpZ2F0aW9uQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsOCBA
QCBwdWJsaWM6CiAgICAgICAgIGxpc3RlbmVyLT51c2UoeyB9KTsKICAgICB9CiAgICAgCisgICAg
dmlydHVhbCB2b2lkIGNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihXZWJLaXQ6OldlYlBhZ2VQ
cm94eSYsIFdlYkNvcmU6OlVSTCYmLCBWZWN0b3I8V1RGOjpTdHJpbmc+JiYsIFZlY3RvcjxXVEY6
OlN0cmluZz4mJikgeyB9OworICAgIAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQog
ICAgIHZpcnR1YWwgV2ViS2l0OjpQbHVnaW5Nb2R1bGVMb2FkUG9saWN5IGRlY2lkZVBvbGljeUZv
clBsdWdpbkxvYWQoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OlBsdWdpbk1vZHVsZUxv
YWRQb2xpY3kgY3VycmVudFBsdWdpbkxvYWRQb2xpY3ksIERpY3Rpb25hcnkqLCBXVEY6OlN0cmlu
ZyYpCiAgICAgewpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3Bw
CShyZXZpc2lvbiAyMjI0NTApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1Bh
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgdGVtcGxhdGU8PiBzdHJ1
Y3QgQ2xpZW50VHJhaXRzPFdLUGFnZUxvYQogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ2xpZW50
VHJhaXRzPFdLUGFnZU5hdmlnYXRpb25DbGllbnRCYXNlPiB7Ci0gICAgdHlwZWRlZiBzdGQ6OnR1
cGxlPFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMCwgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYxPiBW
ZXJzaW9uczsKKyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8V0tQYWdlTmF2aWdhdGlvbkNsaWVudFYw
LCBXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50VjEsIFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMj4gVmVy
c2lvbnM7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRUcmFpdHM8V0tQYWdlUG9saWN5
Q2xpZW50QmFzZT4gewpAQCAtMjI5NSw2ICsyMjk1LDIxIEBAIHZvaWQgV0tQYWdlU2V0UGFnZU5h
dmlnYXRpb25DbGllbnQoV0tQYWcKICAgICAgICAgICAgIG1fY2xpZW50LmRpZFJlbW92ZU5hdmln
YXRpb25HZXN0dXJlU25hcHNob3QodG9BUEkoJnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudElu
Zm8pOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICB2b2lkIGNvbnRlbnRSdWxlTGlzdE5v
dGlmaWNhdGlvbihXZWJQYWdlUHJveHkmIHBhZ2UsIFVSTCYmIHVybCwgVmVjdG9yPFN0cmluZz4m
JiBsaXN0SWRlbnRpZmllcnMsIFZlY3RvcjxTdHJpbmc+JiYgbm90aWZpY2F0aW9ucykgZmluYWwK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5jb250ZW50UnVsZUxpc3ROb3Rp
ZmljYXRpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBWZWN0b3I8
UmVmUHRyPEFQSTo6T2JqZWN0Pj4gYXBpTGlzdElkZW50aWZpZXJzOworICAgICAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBpZGVudGlmaWVyIDogbGlzdElkZW50aWZpZXJzKQorICAgICAgICAgICAg
ICAgIGFwaUxpc3RJZGVudGlmaWVycy5hcHBlbmQoQVBJOjpTdHJpbmc6OmNyZWF0ZShpZGVudGlm
aWVyKSk7CisKKyAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiBhcGlOb3Rp
ZmljYXRpb25zOworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBub3RpZmljYXRpb24gOiBu
b3RpZmljYXRpb25zKQorICAgICAgICAgICAgICAgIGFwaU5vdGlmaWNhdGlvbnMuYXBwZW5kKEFQ
STo6U3RyaW5nOjpjcmVhdGUobm90aWZpY2F0aW9uKSk7CisKKyAgICAgICAgICAgIG1fY2xpZW50
LmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbih0b0FQSSgmcGFnZSksIHRvVVJMUmVmKHVybC5z
dHJpbmcoKS5pbXBsKCkpLCB0b0FQSShBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShhcGlMaXN0
SWRlbnRpZmllcnMpKS5wdHIoKSksIHRvQVBJKEFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKGFw
aU5vdGlmaWNhdGlvbnMpKS5wdHIoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAg
ICAgIH0KICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICAgICAgUGx1Z2luTW9k
dWxlTG9hZFBvbGljeSBkZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkKFdlYlBhZ2VQcm94eSYgcGFn
ZSwgUGx1Z2luTW9kdWxlTG9hZFBvbGljeSBjdXJyZW50UGx1Z2luTG9hZFBvbGljeSwgQVBJOjpE
aWN0aW9uYXJ5KiBwbHVnaW5JbmZvcm1hdGlvbiwgU3RyaW5nJiB1bmF2YWlsYWJpbGl0eURlc2Ny
aXB0aW9uKSBvdmVycmlkZQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlTmF2aWdhdGlvbkNsaWVudC5oCShyZXZpc2lvbiAy
MjI0NTApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VOYXZpZ2F0aW9u
Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgdHlwZWRlZiB2b2lkICgq
V0tQYWdlTmF2aWdhdGlvbkRpZEVuZE5hdgogCiB0eXBlZGVmIHZvaWQgKCpXS1BhZ2VOYXZpZ2F0
aW9uRGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCkoV0tQYWdlUmVmIHBhZ2UsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOwogCit0eXBlZGVmIHZvaWQgKCpXS1BhZ2VOYXZpZ2F0aW9u
Q29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uQ2FsbGJhY2spKFdLUGFnZVJlZiwgV0tVUkxSZWYs
IFdLQXJyYXlSZWYsIFdLQXJyYXlSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogCiB0eXBl
ZGVmIHN0cnVjdCBXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50QmFzZSB7CiAgICAgaW50IHZlcnNpb247
CkBAIC0xNDMsNiArMTQ0LDM5IEBAIHR5cGVkZWYgc3RydWN0IFdLUGFnZU5hdmlnYXRpb25DbGll
bnRWMSAKICAgICBXS1BhZ2VOYXZpZ2F0aW9uV2ViUHJvY2Vzc0RpZFRlcm1pbmF0ZUNhbGxiYWNr
IHdlYlByb2Nlc3NEaWRUZXJtaW5hdGU7CiB9IFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMTsKIAor
dHlwZWRlZiBzdHJ1Y3QgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYyIHsKKyAgICBXS1BhZ2VOYXZp
Z2F0aW9uQ2xpZW50QmFzZSBiYXNlOworICAgIAorICAgIC8vIFZlcnNpb24gMC4KKyAgICBXS1Bh
Z2VOYXZpZ2F0aW9uRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbkNhbGxiYWNrIGRlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb247CisgICAgV0tQYWdlTmF2aWdhdGlvbkRlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25SZXNwb25zZUNhbGxiYWNrIGRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25SZXNwb25zZTsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGVjaWRlUG9saWN5Rm9yUGx1Z2luTG9h
ZENhbGxiYWNrIGRlY2lkZVBvbGljeUZvclBsdWdpbkxvYWQ7CisgICAgV0tQYWdlTmF2aWdhdGlv
bkRpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uQ2FsbGJhY2sgZGlkU3RhcnRQcm92aXNpb25h
bE5hdmlnYXRpb247CisgICAgV0tQYWdlTmF2aWdhdGlvbkRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVj
dEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbkNhbGxiYWNrIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVj
dEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbjsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGlkRmFpbFBy
b3Zpc2lvbmFsTmF2aWdhdGlvbkNhbGxiYWNrIGRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb247
CisgICAgV0tQYWdlTmF2aWdhdGlvbkRpZENvbW1pdE5hdmlnYXRpb25DYWxsYmFjayBkaWRDb21t
aXROYXZpZ2F0aW9uOworICAgIFdLUGFnZU5hdmlnYXRpb25EaWRGaW5pc2hOYXZpZ2F0aW9uQ2Fs
bGJhY2sgZGlkRmluaXNoTmF2aWdhdGlvbjsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGlkRmFpbE5h
dmlnYXRpb25DYWxsYmFjayBkaWRGYWlsTmF2aWdhdGlvbjsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9u
RGlkRmFpbFByb3Zpc2lvbmFsTG9hZEluU3ViZnJhbWVDYWxsYmFjayBkaWRGYWlsUHJvdmlzaW9u
YWxMb2FkSW5TdWJmcmFtZTsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGlkRmluaXNoRG9jdW1lbnRM
b2FkQ2FsbGJhY2sgZGlkRmluaXNoRG9jdW1lbnRMb2FkOworICAgIFdLUGFnZU5hdmlnYXRpb25E
aWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uQ2FsbGJhY2sgZGlkU2FtZURvY3VtZW50TmF2aWdhdGlv
bjsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uUmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2VDYWxsYmFj
ayByZW5kZXJpbmdQcm9ncmVzc0RpZENoYW5nZTsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uQ2FuQXV0
aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUNhbGxiYWNrIGNhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2U7CisgICAgV0tQYWdlTmF2aWdhdGlvbkRpZFJlY2VpdmVBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZUNhbGxiYWNrIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uV2ViUHJvY2Vzc0RpZENyYXNoQ2FsbGJhY2sgd2Vi
UHJvY2Vzc0RpZENyYXNoOworICAgIFdLUGFnZU5hdmlnYXRpb25Db3B5V2ViQ3J5cHRvTWFzdGVy
S2V5Q2FsbGJhY2sgY29weVdlYkNyeXB0b01hc3RlcktleTsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9u
RGlkQmVnaW5OYXZpZ2F0aW9uR2VzdHVyZSBkaWRCZWdpbk5hdmlnYXRpb25HZXN0dXJlOworICAg
IFdLUGFnZU5hdmlnYXRpb25XaWxsRW5kTmF2aWdhdGlvbkdlc3R1cmUgd2lsbEVuZE5hdmlnYXRp
b25HZXN0dXJlOworICAgIFdLUGFnZU5hdmlnYXRpb25EaWRFbmROYXZpZ2F0aW9uR2VzdHVyZSBk
aWRFbmROYXZpZ2F0aW9uR2VzdHVyZTsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGlkUmVtb3ZlTmF2
aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCBkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90
OworICAgIAorICAgIC8vIFZlcnNpb24gMS4KKyAgICBXS1BhZ2VOYXZpZ2F0aW9uV2ViUHJvY2Vz
c0RpZFRlcm1pbmF0ZUNhbGxiYWNrIHdlYlByb2Nlc3NEaWRUZXJtaW5hdGU7CisKKyAgICAvLyBW
ZXJzaW9uIDIuCisgICAgV0tQYWdlTmF2aWdhdGlvbkNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlv
bkNhbGxiYWNrIGNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbjsKK30gV0tQYWdlTmF2aWdhdGlv
bkNsaWVudFYyOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS05hdmln
YXRpb25EZWxlZ2F0ZVByaXZhdGUuaAkocmV2aXNpb24gMjIyNDUwKQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OCw2ICs3OCw4IEBAIHN0YXRpYyBjb25zdCBXS05hdmlnYXRpb25SZXNw
b25zZVBvbGljeSAKIC0gKHZvaWQpX3dlYlZpZXdEaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNu
YXBzaG90OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEy
KSwgaW9zKDEwLjApKTsKIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjooV0tOYXZpZ2F0aW9uQWN0aW9uICopbmF2aWdh
dGlvbkFjdGlvbiBkZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4pKFdLTmF2aWdhdGlvbkFjdGlvblBv
bGljeSwgX1dLV2Vic2l0ZVBvbGljaWVzICopKWRlY2lzaW9uSGFuZGxlciBXS19BUElfQVZBSUxB
QkxFKG1hY29zeCgxMC4xMi4zKSwgaW9zKDEwLjMpKTsKIAorLSAodm9pZClfd2ViVmlldzooV0tX
ZWJWaWV3ICopd2ViVmlldyBVUkw6KE5TVVJMICopdXJsIGNvbnRlbnRSdWxlTGlzdElkZW50aWZp
ZXJzOihOU0FycmF5PE5TU3RyaW5nICo+ICopaWRlbnRpZmllcnMgbm90aWZpY2F0aW9uczooTlNB
cnJheTxOU1N0cmluZyAqPiAqKW5vdGlmaWNhdGlvbnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3go
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKICNpZiBUQVJHRVRfT1NfSVBIT05FCiAt
ICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZFN0YXJ0TG9hZEZvclF1aWNr
TG9va0RvY3VtZW50SW5NYWluRnJhbWVXaXRoRmlsZU5hbWU6KE5TU3RyaW5nICopZmlsZU5hbWUg
dXRpOihOU1N0cmluZyAqKXV0aTsKIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZp
ZXcgZGlkRmluaXNoTG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWU6KE5TRGF0YSAq
KWRvY3VtZW50RGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmln
YXRpb25TdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L05hdmlnYXRpb25TdGF0ZS5oCShyZXZpc2lvbiAyMjI0NTApCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYg
KzEyMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgcmVzb2x2ZVdlYkdMTG9hZFBvbGljeShX
ZWJQYWdlUHJveHkmLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoV2Vi
Q29yZTo6V2ViR0xMb2FkUG9saWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QgZmluYWw7
CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihXZWJQ
YWdlUHJveHkmLCBXZWJDb3JlOjpVUkwmJiwgVmVjdG9yPFN0cmluZz4mJiwgVmVjdG9yPFN0cmlu
Zz4mJikgZmluYWw7CiAgICAgICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bihXZWJQYWdlUHJveHkmLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmLCBSZWY8V2ViRnJh
bWVQb2xpY3lMaXN0ZW5lclByb3h5PiYmLCBBUEk6Ok9iamVjdCogdXNlckRhdGEpIG92ZXJyaWRl
OwogICAgICAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZShXZWJQYWdl
UHJveHkmLCBBUEk6Ok5hdmlnYXRpb25SZXNwb25zZSYsIFJlZjxXZWJGcmFtZVBvbGljeUxpc3Rl
bmVyUHJveHk+JiYsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkgb3ZlcnJpZGU7CiAKQEAgLTIwMSw2
ICsyMDIsNyBAQCBwcml2YXRlOgogICAgICAgICBib29sIHdlYlZpZXdEaWRFbmROYXZpZ2F0aW9u
R2VzdHVyZVdpdGhOYXZpZ2F0aW9uVG9CYWNrRm9yd2FyZExpc3RJdGVtIDogMTsKICAgICAgICAg
Ym9vbCB3ZWJWaWV3V2lsbFNuYXBzaG90QmFja0ZvcndhcmRMaXN0SXRlbSA6IDE7CiAgICAgICAg
IGJvb2wgd2ViVmlld05hdmlnYXRpb25HZXN0dXJlU25hcHNob3RXYXNSZW1vdmVkIDogMTsKKyAg
ICAgICAgYm9vbCB3ZWJWaWV3VVJMQ29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnNOb3RpZmljYXRp
b25zIDogMTsKICNpZiBVU0UoUVVJQ0tfTE9PSykKICAgICAgICAgYm9vbCB3ZWJWaWV3RGlkU3Rh
cnRMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZSA6IDE7CiAgICAgICAgIGJvb2wg
d2ViVmlld0RpZEZpbmlzaExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lIDogMTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3Rh
dGUubW0JKHJldmlzaW9uIDIyMjQ1MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L05hdmlnYXRpb25TdGF0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTY4LDYgKzE2OCw3IEBAIHZv
aWQgTmF2aWdhdGlvblN0YXRlOjpzZXROYXZpZ2F0aW9uRGVsZWcKICAgICBtX25hdmlnYXRpb25E
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEVuZE5hdmlnYXRpb25HZXN0dXJlV2l0aE5hdmlnYXRp
b25Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0gPSBbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihfd2ViVmlld0RpZEVuZE5hdmlnYXRpb25HZXN0dXJlOndpdGhOYXZpZ2F0aW9uVG9C
YWNrRm9yd2FyZExpc3RJdGVtOildOwogICAgIG1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53
ZWJWaWV3V2lsbFNuYXBzaG90QmFja0ZvcndhcmRMaXN0SXRlbSA9IFtkZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OndpbGxTbmFwc2hvdEJhY2tGb3J3YXJkTGlz
dEl0ZW06KV07CiAgICAgbV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdOYXZpZ2F0
aW9uR2VzdHVyZVNuYXBzaG90V2FzUmVtb3ZlZCA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKF93ZWJWaWV3RGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdDop
XTsKKyAgICBtX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1VSTENvbnRlbnRSdWxl
TGlzdElkZW50aWZpZXJzTm90aWZpY2F0aW9ucyA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKF93ZWJWaWV3OlVSTDpjb250ZW50UnVsZUxpc3RJZGVudGlmaWVyczpub3Rp
ZmljYXRpb25zOildOwogI2lmIFVTRShRVUlDS19MT09LKQogICAgIG1fbmF2aWdhdGlvbkRlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3RGlkU3RhcnRMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5G
cmFtZSA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmRp
ZFN0YXJ0TG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWVXaXRoRmlsZU5hbWU6dXRp
OildOwogICAgIG1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmluaXNoTG9h
ZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUgPSBbZGVsZWdhdGUgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpkaWRGaW5pc2hMb2FkRm9yUXVpY2tMb29rRG9jdW1l
bnRJbk1haW5GcmFtZTopXTsKQEAgLTQ1OCw2ICs0NTksMjggQEAgdm9pZCBOYXZpZ2F0aW9uU3Rh
dGU6Ok5hdmlnYXRpb25DbGllbnQ6OgogICAgIH0KIH0KIAordm9pZCBOYXZpZ2F0aW9uU3RhdGU6
Ok5hdmlnYXRpb25DbGllbnQ6OmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihXZWJQYWdlUHJv
eHkmLCBXZWJDb3JlOjpVUkwmJiB1cmwsIFZlY3RvcjxTdHJpbmc+JiYgbGlzdElkZW50aWZpZXJz
LCBWZWN0b3I8U3RyaW5nPiYmIG5vdGlmaWNhdGlvbnMpCit7CisgICAgaWYgKCFtX25hdmlnYXRp
b25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1VSTENvbnRlbnRSdWxl
TGlzdElkZW50aWZpZXJzTm90aWZpY2F0aW9ucykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxl
Z2F0ZS5nZXQoKTsKKyAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUKGxpc3RJZGVudGlmaWVycy5zaXplKCkgPT0gbm90aWZpY2F0aW9ucy5z
aXplKCkpOworCisgICAgYXV0byBpZGVudGlmaWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpsaXN0SWRlbnRpZmllcnMuc2l6ZSgpXSk7CisgICAg
Zm9yIChhdXRvJiBpZGVudGlmaWVyIDogbGlzdElkZW50aWZpZXJzKQorICAgICAgICBbaWRlbnRp
ZmllcnMgYWRkT2JqZWN0OmlkZW50aWZpZXJdOworCisgICAgYXV0byBuc05vdGlmaWNhdGlvbnMg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bm90aWZp
Y2F0aW9ucy5zaXplKCldKTsKKyAgICBmb3IgKGF1dG8mIG5vdGlmaWNhdGlvbiA6IG5vdGlmaWNh
dGlvbnMpCisgICAgICAgIFtuc05vdGlmaWNhdGlvbnMgYWRkT2JqZWN0Om5vdGlmaWNhdGlvbl07
CisgICAgCisgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9u
RGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IFVSTDp1cmwgY29u
dGVudFJ1bGVMaXN0SWRlbnRpZmllcnM6aWRlbnRpZmllcnMuZ2V0KCkgbm90aWZpY2F0aW9uczpu
c05vdGlmaWNhdGlvbnMuZ2V0KCldOworfQorICAgIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5h
dmlnYXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZShXZWJQYWdl
UHJveHkmLCBBUEk6Ok5hdmlnYXRpb25SZXNwb25zZSYgbmF2aWdhdGlvblJlc3BvbnNlLCBSZWY8
V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5PiYmIGxpc3RlbmVyLCBBUEk6Ok9iamVjdCogdXNl
ckRhdGEpCiB7CiAgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZURlY2lzaW9u
SGFuZGxlcikgewpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJldmlzaW9uIDIyMjQ1MCkK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzQsNiArODc0LDIwIEBAIHZvaWQgV2ViQ2hyb21l
Q2xpZW50OjpzY2hlZHVsZUNvbXBvc2l0aW4KICAgICAgICAgbV9wYWdlLmRyYXdpbmdBcmVhKCkt
PnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7CiB9CiAKK3ZvaWQgV2ViQ2hyb21lQ2xp
ZW50Ojpjb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24oY29uc3QgVVJMJiB1cmwsIGNvbnN0IEhh
c2hTZXQ8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4mIG5vdGlmaWNhdGlvblBhaXJzKQorewor
ICAgIFZlY3RvcjxTdHJpbmc+IGlkZW50aWZpZXJzOworICAgIFZlY3RvcjxTdHJpbmc+IG5vdGlm
aWNhdGlvbnM7CisgICAgaWRlbnRpZmllcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShub3RpZmlj
YXRpb25QYWlycy5zaXplKCkpOworICAgIG5vdGlmaWNhdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShub3RpZmljYXRpb25QYWlycy5zaXplKCkpOworICAgIGZvciAoYXV0byYgbm90aWZpY2F0
aW9uIDogbm90aWZpY2F0aW9uUGFpcnMpIHsKKyAgICAgICAgaWRlbnRpZmllcnMudW5jaGVja2Vk
QXBwZW5kKG5vdGlmaWNhdGlvbi5maXJzdCk7CisgICAgICAgIG5vdGlmaWNhdGlvbnMudW5jaGVj
a2VkQXBwZW5kKG5vdGlmaWNhdGlvbi5zZWNvbmQpOworICAgIH0KKworICAgIG1fcGFnZS5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbih1cmws
IGlkZW50aWZpZXJzLCBub3RpZmljYXRpb25zKSk7Cit9CisKIGJvb2wgV2ViQ2hyb21lQ2xpZW50
OjphZGp1c3RMYXllckZsdXNoVGhyb3R0bGluZyhMYXllckZsdXNoVGhyb3R0bGVTdGF0ZTo6Rmxh
Z3MgZmxhZ3MpCiB7CiAgICAgcmV0dXJuIG1fcGFnZS5kcmF3aW5nQXJlYSgpICYmIG1fcGFnZS5k
cmF3aW5nQXJlYSgpLT5hZGp1c3RMYXllckZsdXNoVGhyb3R0bGluZyhmbGFncyk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiAyMjI0NTApCisrKyBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTIwOCw2ICsyMDgsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xh
eWVyRmx1c2goKSBmaW5hbDsKICAgICBib29sIGFkanVzdExheWVyRmx1c2hUaHJvdHRsaW5nKFdl
YkNvcmU6OkxheWVyRmx1c2hUaHJvdHRsZVN0YXRlOjpGbGFncykgZmluYWw7CiAKKyAgICB2b2lk
IGNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBI
YXNoU2V0PHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+JikgZmluYWw7CisgICAgCiAjaWYgVVNF
KFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKICAgICBSZWZQdHI8V2Vi
Q29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3Io
V2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlmCkluZGV4OiBU
b29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MjI0NTApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMSBA
QAorMjAxNy0wOS0yNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgorCisgICAgICAgIEFkZCBXS0NvbnRlbnRSdWxlTGlzdCBub3RpZnkgYWN0aW9uIHR5cGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzAxMworICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMzEwNzM5MzY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQ29udGVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6Om9wZXJhdG9yPDwpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SW5NZW1vcnlDb21w
aWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpJ
bk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6ZGF0YSk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6SW5NZW1vcnlDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6bWFrZUJhY2tlbmQp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OmFjdGlvbnNFcXVhbCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpzZXF1ZW5jZUluc3Rh
bmNlcyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbjo6Y3JlYXRlRnJvbUZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6fkluTWVtb3J5Q29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0NvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbi5tbTogQWRkZWQuCisgICAg
ICAgICgtW0NvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbkRlbGVnYXRlIF93ZWJWaWV3OlVSTDpj
b250ZW50UnVsZUxpc3RJZGVudGlmaWVyczpub3RpZmljYXRpb25zOl0pOgorICAgICAgICAoLVtD
b250ZW50UnVsZUxpc3ROb3RpZmljYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3OnN0YXJ0VVJMU2NoZW1l
VGFzazpdKToKKyAgICAgICAgKC1bQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uRGVsZWdhdGUg
d2ViVmlldzpzdG9wVVJMU2NoZW1lVGFzazpdKToKKyAgICAgICAgKC1bQ29udGVudFJ1bGVMaXN0
Tm90aWZpY2F0aW9uRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhN
ZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICht
YWtlV2FybkNvbnRlbnRSdWxlTGlzdCk6CisgICAgICAgIChURVNUKToKKwogMjAxNy0wOS0yNSAg
Q2FybG9zIEFsYmVydG8gTG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBSRUdSRVNTSU9OKHIyMjIxNjApIFtHVEtdIFtEZWJ1Z10gSW50ZXJuYWwgY29tcGlsZXIgZXJy
b3Igb24gdGhlIGJ1aWxkYm90IChodWdlIG1lbW9yeSB1c2FnZSBieSBHQ0MpCkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjIyNDUwKQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTIzNiw2ICsyMzYsNyBAQAogCQk1QzlFNTk0MjFEM0VCNUFDMDBFM0M2MkUgLyogQXBwbGlj
YXRpb25DYWNoZS5kYi1zaG0gaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUM5RTU5M0YxRDNFQjFERTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2Fj
aGUuZGItc2htICovOyB9OwogCQk1QzlFNTk0MzFEM0VCNUFDMDBFM0M2MkUgLyogQXBwbGljYXRp
b25DYWNoZS5kYi13YWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUM5RTU5NDAxRDNFQjFERTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUu
ZGItd2FsICovOyB9OwogCQk1Q0ExREVDODFGNzFGNzAxMDBFNzFCRDMgLyogSFRUUEhlYWRlckZp
ZWxkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
QTFERUM3MUY3MUY0MDcwMEU3MUJEMyAvKiBIVFRQSGVhZGVyRmllbGQuY3BwICovOyB9OworCQk1
Q0ExREVEOTFGNzRBOTFBMDBFNzFCRDMgLyogQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNBMURFRDgx
Rjc0QTg3MTAwRTcxQkQzIC8qIENvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbi5tbSAqLzsgfTsK
IAkJNUNCMThCQTgxRjU2NDVFMzAwRUUyM0M0IC8qIENsaWNrQXV0b0ZpbGxCdXR0b24ubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0IxOEJBNzFGNTY0
NUIyMDBFRTIzQzQgLyogQ2xpY2tBdXRvRmlsbEJ1dHRvbi5tbSAqLzsgfTsKIAkJNUNCNDBCNEUx
RjRCOThEMzAwN0RDN0I5IC8qIFVJRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0I0MEI0RDFGNEI5OEJFMDA3REM3QjkgLyogVUlEZWxl
Z2F0ZS5tbSAqLzsgfTsKIAkJNUNFMzU0RDkxRTcwREE1QzAwQkVGRTNCIC8qIFdLQ29udGVudEV4
dGVuc2lvblN0b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNFMzU0RDgxRTcwRDlDMzAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3Jl
Lm1tICovOyB9OwpAQCAtMTMzMyw2ICsxMzM0LDcgQEAKIAkJNUM5RTU5M0YxRDNFQjFERTAwRTND
NjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGItc2htICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9ICJBcHBsaWNhdGlvbkNhY2hlLmRi
LXNobSI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOUU1OTQwMUQzRUIxREUwMEUz
QzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiLXdhbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSAiQXBwbGljYXRpb25DYWNoZS5k
Yi13YWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0ExREVDNzFGNzFGNDA3MDBF
NzFCRDMgLyogSFRUUEhlYWRlckZpZWxkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEhUVFBIZWFkZXJGaWVsZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTVDQTFERUQ4MUY3NEE4NzEwMEU3MUJEMyAvKiBDb250ZW50UnVsZUxpc3ROb3RpZmljYXRp
b24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb250ZW50UnVs
ZUxpc3ROb3RpZmljYXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQjE4
QkE3MUY1NjQ1QjIwMEVFMjNDNCAvKiBDbGlja0F1dG9GaWxsQnV0dG9uLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ2xpY2tBdXRvRmlsbEJ1dHRvbi5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCNDBCNEQxRjRCOThCRTAwN0RDN0I5IC8qIFVJ
RGVsZWdhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVSURl
bGVnYXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0UzNTREODFFNzBEOUMz
MDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MzcsNiArMTkzOSw3IEBACiAJCQkJQTE4QUE4Q0Mx
QzNGQTIxODAwOUIyQjk3IC8qIENvbnRlbnRGaWx0ZXJpbmcuaCAqLywKIAkJCQlBMTRGQzU4NjFC
ODk5MUI2MDBEMTA3RUIgLyogQ29udGVudEZpbHRlcmluZy5tbSAqLywKIAkJCQlBMTRGQzU4OTFC
ODk5MjcxMDBEMTA3RUIgLyogQ29udGVudEZpbHRlcmluZ1BsdWdJbi5tbSAqLywKKwkJCQk1Q0Ex
REVEODFGNzRBODcxMDBFNzFCRDMgLyogQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uLm1tICov
LAogCQkJCTVDMjkzNjkxMUQ1QkY2M0UwMERFQUIxRSAvKiBDb29raWVBY2NlcHRQb2xpY3kubW0g
Ki8sCiAJCQkJOTk5OTEwOEExRjM5M0M4QjAwOEFENDU1IC8qIENvcHlpbmcubW0gKi8sCiAJCQkJ
MkRDNENGNzYxRDJEOUREODAwRUNDQzk0IC8qIERhdGFEZXRlY3Rpb24ubW0gKi8sCkBAIC0zMTU2
LDYgKzMxNTksNyBAQAogCQkJCTdDQjE4NEM2MUFBM0YyMTAwMDY2RURGRCAvKiBDb250ZW50RXh0
ZW5zaW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTE0NkE4RDFEMkQ3MTE1MDAwRkU3MTAg
LyogQ29udGVudEZpbHRlcmluZy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExNEZDNTg4MUI4OTkx
QkYwMEQxMDdFQiAvKiBDb250ZW50RmlsdGVyaW5nLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNUNB
MURFRDkxRjc0QTkxQTAwRTcxQkQzIC8qIENvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbi5tbSBp
biBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUI4MUE0MTFBN0UwMDQ0N0M0QyAvKiBDb250ZXh0TWVu
dUNhbkNvcHlVUkwubW0gaW4gU291cmNlcyAqLywKIAkJCQkzN0ZCNzI5NzFEQjJFODJGMDBFNDFC
RTQgLyogQ29udGV4dE1lbnVEZWZhdWx0SXRlbXNIYXZlVGFncy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTgzNDlEM0MyMURCOTZEREUwMDRBOUY2NSAvKiBDb250ZXh0TWVudURvd25sb2FkLm1tIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29u
dGVudEV4dGVuc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAJKHJldmlzaW9uIDIyMjQ1MCkKKysrIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDggQEAgaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0
b3I8PChzdGQ6Om9zdAogICAgICAgICByZXR1cm4gb3MgPDwgIkFjdGlvblR5cGU6OkJsb2NrQ29v
a2llcyI7CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yOgogICAg
ICAgICByZXR1cm4gb3MgPDwgIkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lIjsKKyAgICBjYXNl
IEFjdGlvblR5cGU6Ok5vdGlmeToKKyAgICAgICAgcmV0dXJuIG9zIDw8ICJBY3Rpb25UeXBlOjpO
b3RpZnkiOwogICAgIGNhc2UgQWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlczoKICAgICAg
ICAgcmV0dXJuIG9zIDw8ICJBY3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzIjsKICAgICBj
YXNlIEFjdGlvblR5cGU6Ok1ha2VIVFRQUzoKQEAgLTk3LDYgKzk5LDcgQEAgcHVibGljOgogICAg
ICAgICBFWFBFQ1RfRVEoZGF0YS50b3BVUkxGaWx0ZXJzLnNpemUoKSwgMHVsbCk7CiAgICAgfQog
Citwcml2YXRlOgogICAgIHZvaWQgd3JpdGVTb3VyY2UoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9
CiAKICAgICB2b2lkIHdyaXRlQWN0aW9ucyhWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OlNlcmlh
bGl6ZWRBY3Rpb25CeXRlPiYmIGFjdGlvbnMsIGJvb2wgY29uZGl0aW9uc0FwcGx5T25seVRvRG9t
YWluKSBmaW5hbApAQCAtMTM3LDM1ICsxNDAsMjcgQEAgcHVibGljOgogICAgICAgICBmaW5hbGl6
ZWQgPSB0cnVlOwogICAgIH0KIAotcHJpdmF0ZToKICAgICBDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhJiBtX2RhdGE7CiAgICAgYm9vbCBmaW5hbGl6ZWQgeyBmYWxzZSB9OwogfTsKIAogY2xh
c3MgSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb24gOiBwdWJsaWMgQ29udGVudEV4dGVu
c2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4gY3JlYXRlRnJvbUZpbHRlcihTdHJp
bmcmJiBmaWx0ZXIpCisgICAgc3RhdGljIFJlZjxJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbj4gY3JlYXRlKFN0cmluZyYmIGZpbHRlcikKICAgICB7CiAgICAgICAgIENvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGEgZXh0ZW5zaW9uRGF0YTsKICAgICAgICAgSW5NZW1vcnlDb250ZW50
RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQgY2xpZW50KGV4dGVuc2lvbkRhdGEpOwogICAgICAg
ICBhdXRvIGNvbXBpbGVyRXJyb3IgPSBDb250ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0
KGNsaWVudCwgV1RGTW92ZShmaWx0ZXIpKTsKLSAgICAgICAgaWYgKGNvbXBpbGVyRXJyb3IpIHsK
LSAgICAgICAgICAgIC8vIENvbXBpbGluZyBzaG91bGQgYWx3YXlzIHN1Y2NlZWQgaGVyZS4gV2Ug
aGF2ZSBvdGhlciB0ZXN0cyBmb3IgY29tcGlsZSBmYWlsdXJlcy4KLSAgICAgICAgICAgIEVYUEVD
VF9UUlVFKGZhbHNlKTsKLSAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBJbk1lbW9yeUNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURk1vdmUoZXh0ZW5zaW9uRGF0YSkpOwotICAg
IH0KKyAgICAgICAgLy8gQ29tcGlsaW5nIHNob3VsZCBhbHdheXMgc3VjY2VlZCBoZXJlLiBXZSBo
YXZlIG90aGVyIHRlc3RzIGZvciBjb21waWxlIGZhaWx1cmVzLgorICAgICAgICBFWFBFQ1RfRkFM
U0UoY29tcGlsZXJFcnJvcik7CiAKLSAgICBzdGF0aWMgUmVmPEluTWVtb3J5Q29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uPiBjcmVhdGUoQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYmIGRhdGEp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbk1lbW9yeUNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbihXVEZNb3ZlKGRhdGEpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKFdURk1vdmUoZXh0ZW5zaW9uRGF0
YSkpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIH5Jbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbigpCi0gICAgewotICAgIH0KKyAgICBjb25zdCBDb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhJiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9OwogCitwcml2YXRlOgogICAgIGNvbnN0IENv
bnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucygpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fZGF0YS5hY3Rpb25zLmRhdGEoKTsgfQogICAgIHVuc2lnbmVkIGFjdGlv
bnNMZW5ndGgoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2RhdGEuYWN0aW9ucy5zaXplKCk7IH0K
ICAgICBjb25zdCBDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqIGZpbHRlcnNXaXRob3V0
Q29uZGl0aW9uc0J5dGVjb2RlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kYXRhLmZpbHRlcnNX
aXRob3V0Q29uZGl0aW9ucy5kYXRhKCk7IH0KQEAgLTE3NiwxMSArMTcxLDkgQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIHRvcFVSTEZpbHRlcnNCeXRlY29kZUxlbmd0aCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fZGF0YS50b3BVUkxGaWx0ZXJzLnNpemUoKTsgfQogICAgIGJvb2wgY29uZGl0aW9u
c0FwcGx5T25seVRvRG9tYWluKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kYXRhLmNvbmRpdGlv
bnNBcHBseU9ubHlUb0RvbWFpbjsgfQogCi1wcml2YXRlOgogICAgIEluTWVtb3J5Q29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uKENvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmJiBkYXRhKQogICAg
ICAgICA6IG1fZGF0YShXVEZNb3ZlKGRhdGEpKQotICAgIHsKLSAgICB9CisgICAgeyB9CiAKICAg
ICBDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIG1fZGF0YTsKIH07CkBAIC0yMTEsNyArMjA0
LDcgQEAgc3RhdGljIFJlc291cmNlTG9hZEluZm8gc3ViUmVzb3VyY2VSZXF1ZQogQ29udGVudEV4
dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBtYWtlQmFja2VuZChjb25zdCBjaGFy
KiBqc29uKQogewogICAgIEF0b21pY1N0cmluZzo6aW5pdCgpOwotICAgIGF1dG8gZXh0ZW5zaW9u
ID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZUZyb21GaWx0ZXIoanNv
bik7CisgICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bjo6Y3JlYXRlKGpzb24pOwogICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQgYmFja2VuZDsKICAgICBiYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24oInRlc3RG
aWx0ZXIiLCBXVEZNb3ZlKGV4dGVuc2lvbikpOwogICAgIHJldHVybiBiYWNrZW5kOwpAQCAtODU2
LDggKzg0OSw4IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgVG9wVVJMKQogCiBURVNU
X0YoQ29udGVudEV4dGVuc2lvblRlc3QsIE11bHRpcGxlRXh0ZW5zaW9ucykKIHsKLSAgICBhdXRv
IGV4dGVuc2lvbjEgPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlRnJv
bUZpbHRlcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcImJsb2NrX2xvYWRcIn19XSIpOwotICAgIGF1dG8gZXh0ZW5zaW9uMiA9
IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGVGcm9tRmlsdGVyKCJbe1wi
YWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2stY29va2llc1wifSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJibG9ja19jb29raWVzXCJ9fV0iKTsKKyAgICBhdXRvIGV4dGVuc2lvbjEgPSBJ
bk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKCJbe1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiYmxvY2tfbG9h
ZFwifX1dIik7CisgICAgYXV0byBleHRlbnNpb24yID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRF
eHRlbnNpb246OmNyZWF0ZSgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrLWNvb2tpZXNc
In0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiYmxvY2tfY29va2llc1wifX1dIik7CiAg
ICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBiYWNrZW5kOwog
ICAgIGJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbigidGVzdEZpbHRlcjEiLCBXVEZNb3ZlKGV4
dGVuc2lvbjEpKTsKICAgICBiYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24oInRlc3RGaWx0ZXIy
IiwgV1RGTW92ZShleHRlbnNpb24yKSk7CkBAIC04NjgsOSArODYxLDkgQEAgVEVTVF9GKENvbnRl
bnRFeHRlbnNpb25UZXN0LCBNdWx0aXBsZUV4dAogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2Jsb2NrX2xvYWQvYmxvY2tfY29v
a2llcy5odG1sIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrQ29va2ll
cywgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9LCAyKTsKICAgICB0
ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9y
Zy9ibG9ja19jb29raWVzL2Jsb2NrX2xvYWQuaHRtbCIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpC
bG9ja0xvYWQgfSwgMik7CiAgICAgCi0gICAgYXV0byBpZ25vcmVFeHRlbnNpb24xID0gSW5NZW1v
cnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZUZyb21GaWx0ZXIoIlt7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJibG9j
a19sb2FkXCJ9fSwiCisgICAgYXV0byBpZ25vcmVFeHRlbnNpb24xID0gSW5NZW1vcnlDb21waWxl
ZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZSgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2Nr
XCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcImJsb2NrX2xvYWRcIn19LCIKICAgICAg
ICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImlnbm9yZS1wcmV2aW91cy1ydWxlc1wifSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJpZ25vcmUxXCJ9fV0iKTsKLSAgICBhdXRvIGlnbm9y
ZUV4dGVuc2lvbjIgPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlRnJv
bUZpbHRlcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrLWNvb2tpZXNcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiYmxvY2tfY29va2llc1wifX0sIgorICAgIGF1dG8gaWdu
b3JlRXh0ZW5zaW9uMiA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUo
Ilt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9jay1jb29raWVzXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcImJsb2NrX2Nvb2tpZXNcIn19LCIKICAgICAgICAgIntcImFjdGlvblwi
OntcInR5cGVcIjpcImlnbm9yZS1wcmV2aW91cy1ydWxlc1wifSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJpZ25vcmUyXCJ9fV0iKTsKICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmRXaXRoSWdub3JlOwogICAgIGJhY2tlbmRXaXRoSWdu
b3JlLmFkZENvbnRlbnRFeHRlbnNpb24oInRlc3RGaWx0ZXIxIiwgV1RGTW92ZShpZ25vcmVFeHRl
bnNpb24xKSk7CkBAIC04ODQsNiArODc3LDEyMSBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRl
c3QsIE11bHRpcGxlRXh0CiAgICAgdGVzdFJlcXVlc3QoYmFja2VuZFdpdGhJZ25vcmUsIG1haW5E
b2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2Jsb2NrX2xvYWQvYmxvY2tfY29va2ll
cy9pZ25vcmUxL2lnbm9yZTIuaHRtbCIpLCB7IH0sIDApOwogfQogCitzdGF0aWMgYm9vbCBhY3Rp
b25zRXF1YWwoY29uc3Qgc3RkOjpwYWlyPFZlY3RvcjxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6QWN0aW9uPiwgVmVjdG9yPFN0cmluZz4+JiBhY3R1YWwsIFZlY3RvcjxXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uPiYmIGV4cGVjdGVkLCBib29sIGlnbm9yZVByZXZpb3VzUnVs
ZXMgPSBmYWxzZSkKK3sKKyAgICBpZiAoaWdub3JlUHJldmlvdXNSdWxlcykgeworICAgICAgICBp
ZiAoYWN0dWFsLnNlY29uZC5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKGFjdHVhbC5zZWNvbmQuc2l6ZSgpICE9IDEpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChhY3R1YWwuc2Vjb25kWzBdICE9ICJ0ZXN0
RmlsdGVyIikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoYWN0
dWFsLmZpcnN0LnNpemUoKSAhPSBleHBlY3RlZC5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV4cGVjdGVkLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChhY3R1YWwuZmlyc3RbaV0udHlwZSgpICE9IGV4cGVjdGVkW2ldLnR5cGUoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGFjdHVhbC5maXJzdFtpXS5z
dHJpbmdBcmd1bWVudCgpICE9IGV4cGVjdGVkW2ldLnN0cmluZ0FyZ3VtZW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
Y29uc3QgY2hhcioganNvbldpdGhTdHJpbmdzVG9Db21iaW5lID0gIlsiCisgICAgIntcImFjdGlv
blwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6XCJBQUFcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiQVwifX0sIgorICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJub3RpZnlcIixcIm5vdGlmaWNhdGlvblwiOlwiQUFBXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIkFcIn19LCIKKyAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwibm90aWZ5
XCIsXCJub3RpZmljYXRpb25cIjpcIkJCQlwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJCXCJ9fSwiCisgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVc
IixcInNlbGVjdG9yXCI6XCJDQ0NcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiQ1wi
fX0sIgorICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJz
ZWxlY3RvclwiOlwic2VsZWN0b3JDb21iaW5lZFdpdGhDXCJ9LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcIkNcIn19LCIKKyAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3Bs
YXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIkRERFwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCJEXCJ9fSwiCisgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImlnbm9yZS1wcmV2aW91
cy1ydWxlc1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJFXCJ9fSwiCisgICAgIntc
ImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIkZcIn19LCIKKyAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwibm90aWZ5XCIsXCJub3Rp
ZmljYXRpb25cIjpcIkdHR1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJHXCJ9fSwi
CisgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6
XCJHR0dcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiSVwifX0sIgorICAgICJ7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJub3RpZnlcIixcIm5vdGlmaWNhdGlvblwiOlwiQUFBXCJ9LFwi
dHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIkpcIn19LCIKKyAgICAie1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwibm90aWZ5XCIsXCJub3RpZmljYXRpb25cIjpcIkdHR1wifSxcInRyaWdnZXJcIjp7
XCJ1cmwtZmlsdGVyXCI6XCJLXCJ9fSIKKyJdIjsKKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25U
ZXN0LCBTdHJpbmdQYXJhbWV0ZXJzKQoreworICAgIGF1dG8gYmFja2VuZDEgPSBtYWtlQmFja2Vu
ZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6XCJ0
ZXN0bm90aWZpY2F0aW9uXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIm1hdGNoZXNc
In19XSIpOworICAgIEFTU0VSVF9UUlVFKGFjdGlvbnNFcXVhbChiYWNrZW5kMS5hY3Rpb25zRm9y
UmVzb3VyY2VMb2FkKG1haW5Eb2N1bWVudFJlcXVlc3QoInRlc3Q6Ly8vbWF0Y2hlcyIpKSwge3sg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6Ok5vdGlmeSwgInRlc3Rub3RpZmljYXRpb24i
IH19KSk7CisKKyAgICBhdXRvIGJhY2tlbmQyID0gbWFrZUJhY2tlbmQoanNvbldpdGhTdHJpbmdz
VG9Db21iaW5lKTsKKyAgICBBU1NFUlRfVFJVRShhY3Rpb25zRXF1YWwoYmFja2VuZDIuYWN0aW9u
c0ZvclJlc291cmNlTG9hZChtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vQSIpKSwge3sgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6Ok5vdGlmeSwgIkFBQSIgfX0pKTsKKyAgICBBU1NF
UlRfVFJVRShhY3Rpb25zRXF1YWwoYmFja2VuZDIuYWN0aW9uc0ZvclJlc291cmNlTG9hZChtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vQiIpKSwge3sgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6Ok5vdGlmeSwgIkJCQiIgfX0pKTsKKyAgICBBU1NFUlRfVFJVRShhY3Rpb25zRXF1YWwo
YmFja2VuZDIuYWN0aW9uc0ZvclJlc291cmNlTG9hZChtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRw
Oi8vQyIpKSwge3sgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25l
U2VsZWN0b3IsICJDQ0Msc2VsZWN0b3JDb21iaW5lZFdpdGhDIiB9fSkpOworICAgIEFTU0VSVF9U
UlVFKGFjdGlvbnNFcXVhbChiYWNrZW5kMi5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKG1haW5Eb2N1
bWVudFJlcXVlc3QoImh0dHA6Ly9EIikpLCB7eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgIkRERCIgfX0pKTsKKyAgICBBU1NFUlRfVFJVRShh
Y3Rpb25zRXF1YWwoYmFja2VuZDIuYWN0aW9uc0ZvclJlc291cmNlTG9hZChtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJodHRwOi8vRSIpKSwgeyB9LCB0cnVlKSk7CisgICAgQVNTRVJUX1RSVUUoYWN0aW9u
c0VxdWFsKGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQobWFpbkRvY3VtZW50UmVxdWVz
dCgiaHR0cDovL0YiKSksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9h
ZCB9KSk7CisgICAgQVNTRVJUX1RSVUUoYWN0aW9uc0VxdWFsKGJhY2tlbmQyLmFjdGlvbnNGb3JS
ZXNvdXJjZUxvYWQobWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL0ciKSksIHt7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpOb3RpZnksICJHR0ciIH19KSk7CisgICAgQVNTRVJUX1RS
VUUoYWN0aW9uc0VxdWFsKGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQobWFpbkRvY3Vt
ZW50UmVxdWVzdCgiaHR0cDovL0dJSyIpKSwge3sgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6Ok5vdGlmeSwgIkdHRyIgfX0pKTsKKyAgICBBU1NFUlRfVFJVRShhY3Rpb25zRXF1YWwoYmFj
a2VuZDIuYWN0aW9uc0ZvclJlc291cmNlTG9hZChtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8v
QUoiKSksIHsKKyAgICAgICAgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Tm90aWZ5
LCAiQUFBIiB9LAorICAgICAgICB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpOb3Rp
ZnksICJBQUEiIH0gLy8gaWdub3JlLXByZXZpb3VzLXJ1bGVzIG1ha2VzIHRoZSBBQUEgYWN0aW9u
cyBuZWVkIHRvIGJlIHVuaXF1ZS4KKyAgICB9KSk7CisgICAgLy8gRklYTUU6IEFkZCBhIHRlc3Qg
dGhhdCBtYXRjaGVzIGFjdGlvbnMgd2l0aCBBQUEgd2l0aCBpZ25vcmUtcHJldmlvdXMtcnVsZXMg
YmV0d2VlbiB0aGVtIGFuZCBtYWtlcyBzdXJlIHdlIG9ubHkgZ2V0IG9uZSBub3RpZmljYXRpb24u
CisgICAgQVNTRVJUX1RSVUUoYWN0aW9uc0VxdWFsKGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJj
ZUxvYWQobWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL0FFIikpLCB7IH0sIHRydWUpKTsKKyAg
ICBBU1NFUlRfVFJVRShhY3Rpb25zRXF1YWwoYmFja2VuZDIuYWN0aW9uc0ZvclJlc291cmNlTG9h
ZChtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vQUJDREUiKSksIHsgfSwgdHJ1ZSkpOworICAg
IEFTU0VSVF9UUlVFKGFjdGlvbnNFcXVhbChiYWNrZW5kMi5hY3Rpb25zRm9yUmVzb3VyY2VMb2Fk
KG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9BQkNERUZHIikpLCB7CisgICAgICAgIHsgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6Ok5vdGlmeSwgIkdHRyIgfSwKKyAgICAgICAgeyBD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0KKyAgICB9LCB0cnVlKSk7
CisgICAgQVNTRVJUX1RSVUUoYWN0aW9uc0VxdWFsKGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJj
ZUxvYWQobWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL0ZHIikpLCB7CisgICAgICAgIHsgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6Ok5vdGlmeSwgIkdHRyIgfSwKKyAgICAgICAgeyBD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0KKyAgICB9KSk7CisgICAg
QVNTRVJUX1RSVUUoYWN0aW9uc0VxdWFsKGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQo
bWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL0VGRyIpKSwgeworICAgICAgICB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpOb3RpZnksICJHR0ciIH0sCisgICAgICAgIHsgQ29udGVu
dEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9CisgICAgfSwgdHJ1ZSkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgY1N0cmluZ0xlbmd0aD4KK3N0YXRpYyBpbnQg
c2VxdWVuY2VJbnN0YW5jZXMoY29uc3QgVmVjdG9yPFQ+IHZlY3RvciwgY29uc3QgY2hhciAoJnNl
cXVlbmNlKVtjU3RyaW5nTGVuZ3RoXSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKSA9
PSBzaXplb2YoY2hhciksICJzZXF1ZW5jZUluc3RhbmNlcyBzaG91bGQgb25seSBiZSB1c2VkIGZv
ciB2YXJpb3VzIGJ5dGUgdmVjdG9ycy4iKTsKKworICAgIHNpemVfdCBzZXF1ZW5jZUxlbmd0aCA9
IGNTdHJpbmdMZW5ndGggLSAxOworICAgIHNpemVfdCBpbnN0YW5jZXMgPSAwOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDw9IHZlY3Rvci5zaXplKCkgLSBzZXF1ZW5jZUxlbmd0aDsgKytpKSB7
CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgc2VxdWVuY2VMZW5ndGg7IGorKykgewor
ICAgICAgICAgICAgaWYgKHZlY3RvcltpICsgal0gIT0gc2VxdWVuY2Vbal0pCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoaiA9PSBzZXF1ZW5jZUxlbmd0aCAtIDEpCisg
ICAgICAgICAgICAgICAgaW5zdGFuY2VzKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGluc3RhbmNlczsKK30KKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBTdHJpbmdDb21i
aW5pbmcpCit7CisgICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbjo6Y3JlYXRlKGpzb25XaXRoU3RyaW5nc1RvQ29tYmluZSk7CisgICAgY29uc3QgYXV0
byYgZGF0YSA9IGV4dGVuc2lvbi0+ZGF0YSgpOworCisgICAgQVNTRVJUX0VRKHNlcXVlbmNlSW5z
dGFuY2VzKGRhdGEuYWN0aW9ucywgIkFBQSIpLCAyKTsKKyAgICBBU1NFUlRfRVEoc2VxdWVuY2VJ
bnN0YW5jZXMoZGF0YS5hY3Rpb25zLCAiR0dHIiksIDEpOworCisgICAgQVNTRVJUX0VRKGRhdGEu
YWN0aW9ucy5zaXplKCksIDc4dSk7CisgICAgQVNTRVJUX0VRKGRhdGEuZmlsdGVyc1dpdGhvdXRD
b25kaXRpb25zLnNpemUoKSwgIDMxM3UpOworICAgIEFTU0VSVF9FUShkYXRhLmZpbHRlcnNXaXRo
Q29uZGl0aW9ucy5zaXplKCksICA1dSk7CisgICAgQVNTRVJUX0VRKGRhdGEudG9wVVJMRmlsdGVy
cy5zaXplKCksICA1dSk7CisgICAgQVNTRVJUX0ZBTFNFKGRhdGEuY29uZGl0aW9uc0FwcGx5T25s
eVRvRG9tYWluKTsKKworICAgIGF1dG8gZXh0ZW5zaW9uV2l0aEZsYWdzID0gSW5NZW1vcnlDb21w
aWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZSgiWyIKKyAgICAgICAgIntcImFjdGlvblwiOntc
InR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6XCJBQUFcIn0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwiQVwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwi
Olwibm90aWZ5XCIsXCJub3RpZmljYXRpb25cIjpcIkFBQVwifSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJDXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJub3Rp
ZnlcIixcIm5vdGlmaWNhdGlvblwiOlwiQUFBXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIkFcIixcInJlc291cmNlLXR5cGVcIjpbXCJkb2N1bWVudFwiXX19LCIKKyAgICAgICAgIntc
ImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6XCJBQUFcIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiQVwiLFwicmVzb3VyY2UtdHlwZVwiOltcImRv
Y3VtZW50XCIsXCJmb250XCJdfX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
bm90aWZ5XCIsXCJub3RpZmljYXRpb25cIjpcIkFBQVwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJCXCIsXCJyZXNvdXJjZS10eXBlXCI6W1wiZG9jdW1lbnRcIl19fSIKKyAgICAiXSIp
OworICAgIEFTU0VSVF9FUShzZXF1ZW5jZUluc3RhbmNlcyhleHRlbnNpb25XaXRoRmxhZ3MtPmRh
dGEoKS5hY3Rpb25zLCAiQUFBIiksIDMpOyAvLyBUaGVyZSBhcmUgMyBzZXRzIG9mIHVuaXF1ZSBm
bGFncyBmb3IgQUFBIGFjdGlvbnMuCit9CisKIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwg
VGVybXNLbm93blRvTWF0Y2hBbnl0aGluZykKIHsKICAgICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFj
a2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIl5wcmUxLipwb3N0MSRcIn19LCIKQEAgLTEzNzcsNiArMTQ4NSwxMiBAQCBU
RVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEludmFsaWRKU09OCiAgICAgY2hlY2tDb21waWxl
ckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wiLFwicmVzb3VyY2UtdHlwZVwiOmZhbHNlfX1dIiwK
ICAgICAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTklu
dmFsaWRUcmlnZ2VyRmxhZ3NBcnJheSk7CiAgICAgCisgICAgY2hlY2tDb21waWxlckVycm9yKCJb
e1wiYWN0aW9uXCI6e1widHlwZVwiOlwibm90aWZ5XCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcIi4qXCJ9fV0iLCBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9y
OjpKU09OSW52YWxpZE5vdGlmaWNhdGlvbik7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wi
YWN0aW9uXCI6e1widHlwZVwiOlwibm90aWZ5XCIsXCJub3RpZmljYXRpb25cIjo1fSxcInRyaWdn
ZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKlwifX1dIiwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRl
bnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWROb3RpZmljYXRpb24pOworICAgIGNoZWNrQ29t
cGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0
aW9uXCI6W119LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qXCJ9fV0iLCBDb250ZW50
RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZE5vdGlmaWNhdGlv
bik7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwibm90
aWZ5XCIsXCJub3RpZmljYXRpb25cIjpcImhlcmUncyBteSBub3RpZmljYXRpb25cIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiLipcIn19XSIsIHsgfSk7CisgICAgY2hlY2tDb21waWxl
ckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwibm90aWZ5XCIsXCJub3RpZmljYXRpb25c
IjpcIlxcdTEyMzRcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLipcIn19XSIsIHsg
fSk7CisgICAgCiAgICAgU3RyaW5nQnVpbGRlciBydWxlczsKICAgICBydWxlcy5hcHBlbmQoIlsi
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNDk5OTk7ICsraSkKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0
aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uLm1tCShub25leGlzdGVudCkKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0
aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJQbGF0Zm9y
bVV0aWxpdGllcy5oIgorI2ltcG9ydCA8V2ViS2l0L1dLQ29udGVudFJ1bGVMaXN0U3RvcmUuaD4K
KyNpbXBvcnQgPFdlYktpdC9XS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1VSTFNjaGVtZUhhbmRsZXIuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250
ZW50Q29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlldy5oPgorI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorCitzdGF0aWMgYm9vbCByZWNlaXZlZE5vdGlmaWNhdGlvbjsKK3N0
YXRpYyBib29sIHJlY2VpdmVkQWxlcnQ7CisKK0BpbnRlcmZhY2UgQ29udGVudFJ1bGVMaXN0Tm90
aWZpY2F0aW9uRGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
LCBXS1VSTFNjaGVtZUhhbmRsZXIsIFdLVUlEZWxlZ2F0ZT4KK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIENvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbkRlbGVnYXRlCisKKy0gKHZvaWQpX3dlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgVVJMOihOU1VSTCAqKXVybCBjb250ZW50UnVsZUxpc3RJ
ZGVudGlmaWVyczooTlNBcnJheTxOU1N0cmluZyAqPiAqKWlkZW50aWZpZXJzIG5vdGlmaWNhdGlv
bnM6KE5TQXJyYXk8TlNTdHJpbmcgKj4gKilub3RpZmljYXRpb25zCit7CisgICAgRVhQRUNUX1NU
UkVRKHVybC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nLCAiYXBpdGVzdDovLy9tYXRjaCIpOwor
ICAgIEVYUEVDVF9FUShpZGVudGlmaWVycy5jb3VudCwgMXUpOworICAgIEVYUEVDVF9TVFJFUShb
aWRlbnRpZmllcnMgb2JqZWN0QXRJbmRleDowXS5VVEY4U3RyaW5nLCAidGVzdGlkZW50aWZpZXIi
KTsKKyAgICBFWFBFQ1RfRVEobm90aWZpY2F0aW9ucy5jb3VudCwgMXUpOworICAgIEVYUEVDVF9T
VFJFUShbbm90aWZpY2F0aW9ucyBvYmplY3RBdEluZGV4OjBdLlVURjhTdHJpbmcsICJ0ZXN0bm90
aWZpY2F0aW9uIik7CisgICAgcmVjZWl2ZWROb3RpZmljYXRpb24gPSB0cnVlOworfQorCistICh2
b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc3RhcnRVUkxTY2hlbWVUYXNrOihpZCA8
V0tVUkxTY2hlbWVUYXNrPil1cmxTY2hlbWVUYXNrCit7CisgICAgW3VybFNjaGVtZVRhc2sgZGlk
UmVjZWl2ZVJlc3BvbnNlOltbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnVybFNj
aGVtZVRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVu
dExlbmd0aDowIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV1dOworICAgIFt1cmxT
Y2hlbWVUYXNrIGRpZEZpbmlzaF07Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICop
d2ViVmlldyBzdG9wVVJMU2NoZW1lVGFzazooaWQgPFdLVVJMU2NoZW1lVGFzaz4pdXJsU2NoZW1l
VGFzaworeworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2
YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluaXRpYXRl
ZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgcmVjZWl2ZWRBbGVydCA9IHRydWU7Cisg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKK30KKworQGVuZAorCitzdGF0aWMgUmV0YWluUHRyPFdL
Q29udGVudFJ1bGVMaXN0PiBtYWtlV2FybkNvbnRlbnRSdWxlTGlzdCgpCit7CisgICAgX19ibG9j
ayBib29sIGRvbmVDb21waWxpbmcgPSBmYWxzZTsKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxXS0Nv
bnRlbnRSdWxlTGlzdD4gY29udGVudFJ1bGVMaXN0OworICAgIFtbV0tDb250ZW50UnVsZUxpc3RT
dG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOkAi
dGVzdGlkZW50aWZpZXIiIGVuY29kZWRDb250ZW50UnVsZUxpc3Q6QCJbe1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwibm90aWZ5XCIsXCJub3RpZmljYXRpb25cIjpcInRlc3Rub3RpZmljYXRpb25cIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwibWF0Y2hcIn19XSIgY29tcGxldGlvbkhhbmRs
ZXI6XihXS0NvbnRlbnRSdWxlTGlzdCAqbGlzdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAg
RVhQRUNUX1RSVUUobGlzdCk7CisgICAgICAgIGNvbnRlbnRSdWxlTGlzdCA9IGxpc3Q7CisgICAg
ICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7CisgICAgcmV0dXJuIGNvbnRlbnRSdWxlTGlzdDsKK30K
KworVEVTVChXZWJLaXQsIENvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbk1haW5SZXNvdXJjZSkK
K3sKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW0NvbnRlbnRSdWxlTGlzdE5vdGlmaWNh
dGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRv
cHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBbW2NvbmZp
Z3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRDb250ZW50UnVsZUxpc3Q6bWFrZVdh
cm5Db250ZW50UnVsZUxpc3QoKS5nZXQoKV07CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2No
ZW1lSGFuZGxlcjpkZWxlZ2F0ZS5nZXQoKSBmb3JVUkxTY2hlbWU6QCJhcGl0ZXN0Il07CisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0
KCldKTsKKyAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCld
OworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJhcGl0ZXN0Oi8vL21hdGNoIl1dXTsKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkTm90aWZpY2F0aW9uKTsKK30KKworVEVTVChXZWJL
aXQsIENvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvblN1YnJlc291cmNlKQoreworICAgIGF1dG8g
ZGVsZWdhdGUgPSBhZG9wdE5TKFtbQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIFtbY29uZmlndXJhdGlvbiB1c2Vy
Q29udGVudENvbnRyb2xsZXJdIGFkZENvbnRlbnRSdWxlTGlzdDptYWtlV2FybkNvbnRlbnRSdWxl
TGlzdCgpLmdldCgpXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmRl
bGVnYXRlLmdldCgpIGZvclVSTFNjaGVtZTpAImFwaXRlc3QiXTsKKyAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3
ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZp
ZXcgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcgbG9hZEhUTUxT
dHJpbmc6QCI8c2NyaXB0PmZldGNoKCdtYXRjaCcpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2Upe2Fs
ZXJ0KCdmZXRjaCBjb21wbGV0ZScpfSk8L3NjcmlwdD4iIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhT
dHJpbmc6QCJhcGl0ZXN0Oi8vLyJdXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJl
Y2VpdmVkQWxlcnQpOworICAgIEVYUEVDVF9UUlVFKHJlY2VpdmVkTm90aWZpY2F0aW9uKTsKK30K
KworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322067</attachid>
            <date>2017-09-27 22:10:29 -0700</date>
            <delta_ts>2017-09-27 22:17:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177013-20170927221028.patch</filename>
            <type>text/plain</type>
            <size>69542</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjU4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE3LTA5LTI3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFdLQ29u
dGVudFJ1bGVMaXN0IG5vdGlmeSBhY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MDEzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
MTA3MzkzNj4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBD
b3ZlcmVkIGJ5IG5ldyBBUEkgdGVzdHMuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6Omhhc1N0cmluZ0FyZ3VtZW50KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OnJlc29sdmVQZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpzZXJpYWxpemVBY3Rpb25zKToKKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5KToK
KyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaDoKKyAg
ICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpsb2FkQWN0aW9uKToKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpkZXNlcmlhbGl6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpkZXNlcmlhbGl6ZVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbjo6c2VyaWFsaXplZExl
bmd0aCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb246OkFjdGlvbik6
CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQ6OnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnBy
b2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JQaW5nTG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6YXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KToKKyAgICAg
ICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIGxvYWRlci9QaW5nTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNG
b3JMb2FkKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFsKToKKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSk6CisgICAgICAgICog
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmFwcGx5QmxvY2tlZFN0YXR1cyk6CisgICAgICAgICog
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oOgorICAgICAgICAqIHBhZ2UvQ2hy
b21lQ2xpZW50Lmg6CisKIDIwMTctMDktMjcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5z
ZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBbGxvdyBtb2Rlcm4gZGVjb2Rpbmcgb2Ygc3RkOjpv
cHRpb25hbDxUPgpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbkFjdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oCShyZXZpc2lvbiAyMjI1ODMpCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQWN0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNywxMiBAQAogCiAjaWYgRU5BQkxFKENPTlRF
TlRfRVhURU5TSU9OUykKIAorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUGFnZTsK
IGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIAogbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsK
QEAgLTM5LDE3ICs0MywzNSBAQCBlbnVtIGNsYXNzIEFjdGlvblR5cGUgOiB1aW50OF90IHsKICAg
ICBCbG9ja0xvYWQsCiAgICAgQmxvY2tDb29raWVzLAogICAgIENTU0Rpc3BsYXlOb25lU2VsZWN0
b3IsCi0gICAgSWdub3JlUHJldmlvdXNSdWxlcyA9IDMsCi0gICAgTWFrZUhUVFBTID0gNCwKKyAg
ICBOb3RpZnksCisgICAgSWdub3JlUHJldmlvdXNSdWxlcywKKyAgICBNYWtlSFRUUFMsCiB9Owog
CitzdGF0aWMgaW5saW5lIGJvb2wgaGFzU3RyaW5nQXJndW1lbnQoQWN0aW9uVHlwZSBhY3Rpb25U
eXBlKQoreworICAgIHN3aXRjaCAoYWN0aW9uVHlwZSkgeworICAgIGNhc2UgQWN0aW9uVHlwZTo6
Q1NTRGlzcGxheU5vbmVTZWxlY3RvcjoKKyAgICBjYXNlIEFjdGlvblR5cGU6Ok5vdGlmeToKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBBY3Rpb25UeXBlOjpCbG9ja0xvYWQ6CisgICAg
Y2FzZSBBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXM6CisgICAgY2FzZSBBY3Rpb25UeXBlOjpJZ25v
cmVQcmV2aW91c1J1bGVzOgorICAgIGNhc2UgQWN0aW9uVHlwZTo6TWFrZUhUVFBTOgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwogc3RydWN0IEJsb2NrZWRTdGF0dXMgewogICAgIGJvb2wgYmxvY2tl
ZExvYWQgeyBmYWxzZSB9OwogICAgIGJvb2wgYmxvY2tlZENvb2tpZXMgeyBmYWxzZSB9OwogICAg
IGJvb2wgbWFkZUhUVFBTIHsgZmFsc2UgfTsKKyAgICBIYXNoU2V0PHN0ZDo6cGFpcjxTdHJpbmcs
IFN0cmluZz4+IG5vdGlmaWNhdGlvbnM7CiB9OwogCi1XRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5
QmxvY2tlZFN0YXR1c1RvUmVxdWVzdChjb25zdCBCbG9ja2VkU3RhdHVzJiwgUmVzb3VyY2VSZXF1
ZXN0Jik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5QmxvY2tlZFN0YXR1c1RvUmVxdWVzdChj
b25zdCBCbG9ja2VkU3RhdHVzJiwgUGFnZSosIFJlc291cmNlUmVxdWVzdCYpOwogCiB9IC8vIG5h
bWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5j
cHAJKHJldmlzaW9uIDIyMjU4MykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDQ4ICs2
OCw0MSBAQCBzdGF0aWMgdm9pZCBzZXJpYWxpemVTdHJpbmcoVmVjdG9yPFNlcmlhCiAgICAgfQog
fQogCisvLyBjc3MtZGlzcGxheS1ub25lIGNvbWJpbmluZyBpcyBzcGVjaWFsIGJlY2F1c2Ugd2Ug
Y29tYmluZSB0aGUgc3RyaW5nIGFyZ3VtZW50cyB3aXRoIGNvbW1hcyBiZWNhdXNlIHdlIGtub3cg
dGhleSBhcmUgY3NzIHNlbGVjdG9ycy4KIHN0cnVjdCBQZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25z
IHsKLSAgICBWZWN0b3I8U3RyaW5nPiBzZWxlY3RvcnM7Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiBj
bGllbnRMb2NhdGlvbnM7CisgICAgU3RyaW5nQnVpbGRlciBjb21iaW5lZFNlbGVjdG9yczsKKyAg
ICBWZWN0b3I8dWludDMyX3Q+IGNsaWVudExvY2F0aW9uczsKIH07CisKIHVzaW5nIFBlbmRpbmdE
aXNwbGF5Tm9uZUFjdGlvbnNNYXAgPSBIYXNoTWFwPFRyaWdnZXIsIFBlbmRpbmdEaXNwbGF5Tm9u
ZUFjdGlvbnMsIFRyaWdnZXJIYXNoLCBUcmlnZ2VySGFzaFRyYWl0cz47CiAKLXN0YXRpYyB2b2lk
IHJlc29sdmVQZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25zKFZlY3RvcjxTZXJpYWxpemVkQWN0aW9u
Qnl0ZT4mIGFjdGlvbnMsIFZlY3Rvcjx1bnNpZ25lZD4mIGFjdGlvbkxvY2F0aW9ucywgUGVuZGlu
Z0Rpc3BsYXlOb25lQWN0aW9uc01hcCYgcGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9uc01hcCkKK3N0
YXRpYyB2b2lkIHJlc29sdmVQZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25zKFZlY3RvcjxTZXJpYWxp
emVkQWN0aW9uQnl0ZT4mIGFjdGlvbnMsIFZlY3Rvcjx1aW50MzJfdD4mIGFjdGlvbkxvY2F0aW9u
cywgUGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9uc01hcCYgbWFwKQogewotICAgIGZvciAoYXV0byYg
c2xvdCA6IHBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnNNYXApIHsKLSAgICAgICAgUGVuZGluZ0Rp
c3BsYXlOb25lQWN0aW9ucyYgcGVuZGluZ0FjdGlvbnMgPSBzbG90LnZhbHVlOwotCi0gICAgICAg
IFN0cmluZ0J1aWxkZXIgY29tYmluZWRTZWxlY3RvcnM7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwZW5kaW5nQWN0aW9ucy5zZWxlY3RvcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIGlmIChpKQotICAgICAgICAgICAgICAgIGNvbWJpbmVkU2VsZWN0b3JzLmFwcGVuZCgn
LCcpOwotICAgICAgICAgICAgY29tYmluZWRTZWxlY3RvcnMuYXBwZW5kKHBlbmRpbmdBY3Rpb25z
LnNlbGVjdG9yc1tpXSk7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBhY3Rpb25Mb2Nh
dGlvbiA9IGFjdGlvbnMuc2l6ZSgpOworICAgIGZvciAoYXV0byYgcGVuZGluZ0Rpc3BsYXlOb25l
QWN0aW9ucyA6IG1hcC52YWx1ZXMoKSkgeworICAgICAgICB1aW50MzJfdCBhY3Rpb25Mb2NhdGlv
biA9IGFjdGlvbnMuc2l6ZSgpOwogICAgICAgICBhY3Rpb25zLmFwcGVuZChzdGF0aWNfY2FzdDxT
ZXJpYWxpemVkQWN0aW9uQnl0ZT4oQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3Rvcikp
OwotICAgICAgICBzZXJpYWxpemVTdHJpbmcoYWN0aW9ucywgY29tYmluZWRTZWxlY3RvcnMudG9T
dHJpbmcoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY2xpZW50TG9jYXRpb24gOiBwZW5kaW5n
QWN0aW9ucy5jbGllbnRMb2NhdGlvbnMpCisgICAgICAgIHNlcmlhbGl6ZVN0cmluZyhhY3Rpb25z
LCBwZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25zLmNvbWJpbmVkU2VsZWN0b3JzLnRvU3RyaW5nKCkp
OworICAgICAgICBmb3IgKHVpbnQzMl90IGNsaWVudExvY2F0aW9uIDogcGVuZGluZ0Rpc3BsYXlO
b25lQWN0aW9ucy5jbGllbnRMb2NhdGlvbnMpCiAgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbnNb
Y2xpZW50TG9jYXRpb25dID0gYWN0aW9uTG9jYXRpb247CiAgICAgfQotICAgIHBlbmRpbmdEaXNw
bGF5Tm9uZUFjdGlvbnNNYXAuY2xlYXIoKTsKKyAgICBtYXAuY2xlYXIoKTsKIH0KIAogc3RhdGlj
IFZlY3Rvcjx1bnNpZ25lZD4gc2VyaWFsaXplQWN0aW9ucyhjb25zdCBWZWN0b3I8Q29udGVudEV4
dGVuc2lvblJ1bGU+JiBydWxlTGlzdCwgVmVjdG9yPFNlcmlhbGl6ZWRBY3Rpb25CeXRlPiYgYWN0
aW9ucykKIHsKICAgICBBU1NFUlQoIWFjdGlvbnMuc2l6ZSgpKTsKIAotICAgIFZlY3Rvcjx1bnNp
Z25lZD4gYWN0aW9uTG9jYXRpb25zOworICAgIFZlY3Rvcjx1aW50MzJfdD4gYWN0aW9uTG9jYXRp
b25zOwogCi0gICAgLy8gT3JkZXIgb25seSBtYXR0ZXJzIGJlY2F1c2Ugb2YgSWdub3JlUHJldmlv
dXNSdWxlcy4gQWxsIG90aGVyIGlkZW50aWNhbCBhY3Rpb25zIGNhbiBiZSBjb21iaW5lZCBiZXR3
ZWVuIGVhY2ggSWdub3JlUHJldmlvdXNSdWxlcwotICAgIC8vIGFuZCBDU1NEaXNwbGF5Tm9uZSBz
dHJpbmdzIGNhbiBiZSBjb21iaW5lZCBpZiB0aGVpciB0cmlnZ2VycyBhcmUgaWRlbnRpY2FsLgog
ICAgIHVzaW5nIEFjdGlvbkxvY2F0aW9uID0gdWludDMyX3Q7CiAgICAgdXNpbmcgQWN0aW9uTWFw
ID0gSGFzaE1hcDxSZXNvdXJjZUZsYWdzLCBBY3Rpb25Mb2NhdGlvbiwgRGVmYXVsdEhhc2g8UmVz
b3VyY2VGbGFncz46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8UmVz
b3VyY2VGbGFncz4+OworICAgIHVzaW5nIFN0cmluZ0FjdGlvbk1hcCA9IEhhc2hNYXA8c3RkOjpw
YWlyPFN0cmluZywgUmVzb3VyY2VGbGFncz4sIEFjdGlvbkxvY2F0aW9uLCBEZWZhdWx0SGFzaDxz
dGQ6OnBhaXI8U3RyaW5nLCBSZXNvdXJjZUZsYWdzPj46Okhhc2gsIFBhaXJIYXNoVHJhaXRzPEhh
c2hUcmFpdHM8U3RyaW5nPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxSZXNv
dXJjZUZsYWdzPj4+OwogICAgIEFjdGlvbk1hcCBibG9ja0xvYWRBY3Rpb25zTWFwOwogICAgIEFj
dGlvbk1hcCBibG9ja0Nvb2tpZXNBY3Rpb25zTWFwOwogICAgIFBlbmRpbmdEaXNwbGF5Tm9uZUFj
dGlvbnNNYXAgY3NzRGlzcGxheU5vbmVBY3Rpb25zTWFwOwogICAgIEFjdGlvbk1hcCBpZ25vcmVQ
cmV2aW91c1J1bGVBY3Rpb25zTWFwOwogICAgIEFjdGlvbk1hcCBtYWtlSFRUUFNBY3Rpb25zTWFw
OworICAgIFN0cmluZ0FjdGlvbk1hcCBub3RpZnlBY3Rpb25zTWFwOwogCiAgICAgZm9yICh1bnNp
Z25lZCBydWxlSW5kZXggPSAwOyBydWxlSW5kZXggPCBydWxlTGlzdC5zaXplKCk7ICsrcnVsZUlu
ZGV4KSB7CiAgICAgICAgIGNvbnN0IENvbnRlbnRFeHRlbnNpb25SdWxlJiBydWxlID0gcnVsZUxp
c3RbcnVsZUluZGV4XTsKQEAgLTEyMiw2ICsxMTUsNyBAQCBzdGF0aWMgVmVjdG9yPHVuc2lnbmVk
PiBzZXJpYWxpemVBY3Rpb25zCiAgICAgICAgICAgICBibG9ja0Nvb2tpZXNBY3Rpb25zTWFwLmNs
ZWFyKCk7CiAgICAgICAgICAgICBjc3NEaXNwbGF5Tm9uZUFjdGlvbnNNYXAuY2xlYXIoKTsKICAg
ICAgICAgICAgIG1ha2VIVFRQU0FjdGlvbnNNYXAuY2xlYXIoKTsKKyAgICAgICAgICAgIG5vdGlm
eUFjdGlvbnNNYXAuY2xlYXIoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBpZ25vcmVQ
cmV2aW91c1J1bGVBY3Rpb25zTWFwLmNsZWFyKCk7CiAKQEAgLTEzMSwxNiArMTI1LDE3IEBAIHN0
YXRpYyBWZWN0b3I8dW5zaWduZWQ+IHNlcmlhbGl6ZUFjdGlvbnMKICAgICAgICAgICAgIGFjdGlv
bkxvY2F0aW9ucy5hcHBlbmQoYWN0aW9ucy5zaXplKCkpOwogCiAgICAgICAgICAgICBhY3Rpb25z
LmFwcGVuZChzdGF0aWNfY2FzdDxTZXJpYWxpemVkQWN0aW9uQnl0ZT4oYWN0aW9uVHlwZSkpOwot
ICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT0gQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVT
ZWxlY3RvcikKKyAgICAgICAgICAgIGlmIChoYXNTdHJpbmdBcmd1bWVudChhY3Rpb25UeXBlKSkK
ICAgICAgICAgICAgICAgICBzZXJpYWxpemVTdHJpbmcoYWN0aW9ucywgcnVsZS5hY3Rpb24oKS5z
dHJpbmdBcmd1bWVudCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBBU1NF
UlQocnVsZS5hY3Rpb24oKS5zdHJpbmdBcmd1bWVudCgpLmlzTnVsbCgpKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgUmVzb3VyY2VGbGFncyBmbGFncyA9IHJ1
bGUudHJpZ2dlcigpLmZsYWdzOwogICAgICAgICB1bnNpZ25lZCBhY3Rpb25Mb2NhdGlvbiA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKICAgICAgICAgCi0gICAgICAgIGF1
dG8gZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uID0gWyZdIChBY3Rpb25NYXAmIG1hcCkgCi0gICAg
ICAgIHsKKyAgICAgICAgYXV0byBmaW5kT3JNYWtlQWN0aW9uTG9jYXRpb24gPSBbJl0gKEFjdGlv
bk1hcCYgbWFwKSB7CiAgICAgICAgICAgICBjb25zdCBhdXRvIGV4aXN0aW5nQWN0aW9uID0gbWFw
LmZpbmQoZmxhZ3MpOwogICAgICAgICAgICAgaWYgKGV4aXN0aW5nQWN0aW9uID09IG1hcC5lbmQo
KSkgewogICAgICAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9uID0gYWN0aW9ucy5zaXplKCk7CkBA
IC0xNDksMTMgKzE0NCwyNyBAQCBzdGF0aWMgVmVjdG9yPHVuc2lnbmVkPiBzZXJpYWxpemVBY3Rp
b25zCiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbiA9
IGV4aXN0aW5nQWN0aW9uLT52YWx1ZTsKICAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGF1
dG8gZmluZE9yTWFrZVN0cmluZ0FjdGlvbkxvY2F0aW9uID0gWyZdIChTdHJpbmdBY3Rpb25NYXAm
IG1hcCkgeworICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBhcmd1bWVudCA9IHJ1bGUuYWN0aW9u
KCkuc3RyaW5nQXJndW1lbnQoKTsKKyAgICAgICAgICAgIGF1dG8gZXhpc3RpbmdBY3Rpb24gPSBt
YXAuZmluZChzdGQ6Om1ha2VfcGFpcihhcmd1bWVudCwgZmxhZ3MpKTsKKyAgICAgICAgICAgIGlm
IChleGlzdGluZ0FjdGlvbiA9PSBtYXAuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBhY3Rpb25M
b2NhdGlvbiA9IGFjdGlvbnMuc2l6ZSgpOworICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5k
KHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRBY3Rpb25CeXRlPihhY3Rpb25UeXBlKSk7CisgICAgICAg
ICAgICAgICAgc2VyaWFsaXplU3RyaW5nKGFjdGlvbnMsIGFyZ3VtZW50KTsKKyAgICAgICAgICAg
ICAgICBtYXAuc2V0KHN0ZDo6bWFrZV9wYWlyKGFyZ3VtZW50LCBmbGFncyksIGFjdGlvbkxvY2F0
aW9uKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9u
ID0gZXhpc3RpbmdBY3Rpb24tPnZhbHVlOworICAgICAgICB9OwogCiAgICAgICAgIHN3aXRjaCAo
YWN0aW9uVHlwZSkgewogICAgICAgICBjYXNlIEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2Vs
ZWN0b3I6IHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8gYWRkUmVzdWx0ID0gY3NzRGlzcGxheU5v
bmVBY3Rpb25zTWFwLmFkZChydWxlLnRyaWdnZXIoKSwgUGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9u
cygpKTsKLSAgICAgICAgICAgIFBlbmRpbmdEaXNwbGF5Tm9uZUFjdGlvbnMmIHBlbmRpbmdEaXNw
bGF5Tm9uZUFjdGlvbnMgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICAgICAg
cGVuZGluZ0Rpc3BsYXlOb25lQWN0aW9ucy5zZWxlY3RvcnMuYXBwZW5kKHJ1bGUuYWN0aW9uKCku
c3RyaW5nQXJndW1lbnQoKSk7Ci0gICAgICAgICAgICBwZW5kaW5nRGlzcGxheU5vbmVBY3Rpb25z
LmNsaWVudExvY2F0aW9ucy5hcHBlbmQoYWN0aW9uTG9jYXRpb25zLnNpemUoKSk7CisgICAgICAg
ICAgICBhdXRvJiBwZW5kaW5nU3RyaW5nQWN0aW9ucyA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CisgICAgICAgICAgICBpZiAoIXBlbmRpbmdTdHJpbmdBY3Rpb25zLmNvbWJpbmVkU2VsZWN0
b3JzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBwZW5kaW5nU3RyaW5nQWN0aW9ucy5jb21i
aW5lZFNlbGVjdG9ycy5hcHBlbmQoJywnKTsKKyAgICAgICAgICAgIHBlbmRpbmdTdHJpbmdBY3Rp
b25zLmNvbWJpbmVkU2VsZWN0b3JzLmFwcGVuZChydWxlLmFjdGlvbigpLnN0cmluZ0FyZ3VtZW50
KCkpOworICAgICAgICAgICAgcGVuZGluZ1N0cmluZ0FjdGlvbnMuY2xpZW50TG9jYXRpb25zLmFw
cGVuZChhY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKIAogICAgICAgICAgICAgYWN0aW9uTG9jYXRp
b24gPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTE3Miw2ICsxODEsOSBAQCBzdGF0aWMgVmVjdG9yPHVuc2lnbmVkPiBzZXJpYWxp
emVBY3Rpb25zCiAgICAgICAgIGNhc2UgQWN0aW9uVHlwZTo6TWFrZUhUVFBTOgogICAgICAgICAg
ICAgZmluZE9yTWFrZUFjdGlvbkxvY2F0aW9uKG1ha2VIVFRQU0FjdGlvbnNNYXApOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWN0aW9uVHlwZTo6Tm90aWZ5OgorICAgICAgICAg
ICAgZmluZE9yTWFrZVN0cmluZ0FjdGlvbkxvY2F0aW9uKG5vdGlmeUFjdGlvbnNNYXApOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBhY3Rpb25Mb2NhdGlvbnMuYXBw
ZW5kKGFjdGlvbkxvY2F0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmNwcAkocmV2aXNpb24g
MjIyNTgzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbkVycm9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsOCBAQCBjb25zdCBzdGQ6
OmVycm9yX2NhdGVnb3J5JiBjb250ZW50RXh0ZW5zCiAgICAgICAgICAgICAgICAgcmV0dXJuICJB
IHRyaWdnZXIgY2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBjb25kaXRpb24gKGlmLWRvbWFpbiwg
dW5sZXNzLWRvbWFpbiwgaWYtdG9wLXVybCwgb3IgdW5sZXNzLXRvcC11cmwpIjsKICAgICAgICAg
ICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OVG9wVVJMQW5kRG9tYWluQ29uZGl0
aW9uczoKICAgICAgICAgICAgICAgICByZXR1cm4gIkEgbGlzdCBjYW5ub3QgaGF2ZSBpZi1kb21h
aW4gYW5kIHVubGVzcy1kb21haW4gbWl4ZWQgd2l0aCBpZi10b3AtdXJsIGFuZCB1bmxlc3MtdG9w
LXVybCI7CisgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFs
aWROb3RpZmljYXRpb246CisgICAgICAgICAgICAgICAgcmV0dXJuICJBIG5vdGlmeSBhY3Rpb24g
bXVzdCBoYXZlIGEgc3RyaW5nIG5vdGlmaWNhdGlvbiI7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmgJKHJldmlz
aW9uIDIyMjU4MykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25FcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBAIGVudW0gY2xh
c3MgQ29udGVudEV4dGVuc2lvbkVycm9yIHsKICAgICBKU09OSW52YWxpZEFjdGlvbiwKICAgICBK
U09OSW52YWxpZEFjdGlvblR5cGUsCiAgICAgSlNPTkludmFsaWRDU1NEaXNwbGF5Tm9uZUFjdGlv
blR5cGUsCisgICAgSlNPTkludmFsaWROb3RpZmljYXRpb24sCiAgICAgSlNPTkludmFsaWRSZWdl
eCwKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCShyZXZpc2lvbiAyMjI1ODMpCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4LDExICsyNDgsMTEgQEAgc3RhdGljIEV4cGVjdGVk
PHN0ZDo6b3B0aW9uYWw8QWN0aW9uPiwgcwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIGNvbnN0IEpTVmFsdWUgYWN0aW9uT2JqZWN0ID0gcnVsZU9iamVj
dC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJhY3Rpb24iKSk7Ci0g
ICAgaWYgKCFhY3Rpb25PYmplY3QgfHwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWFjdGlvbk9iamVj
dC5pc09iamVjdCgpKQorICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhYWN0aW9uT2JqZWN0
LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05JbnZhbGlkQWN0aW9uKTsKIAogICAgIGNvbnN0IEpTVmFsdWUgdHlwZU9i
amVjdCA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4
ZWMsICJ0eXBlIikpOwotICAgIGlmICghdHlwZU9iamVjdCB8fCBzY29wZS5leGNlcHRpb24oKSB8
fCAhdHlwZU9iamVjdC5pc1N0cmluZygpKQorICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAh
dHlwZU9iamVjdC5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29u
dGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZEFjdGlvblR5cGUpOwogCiAgICAgU3RyaW5n
IGFjdGlvblR5cGUgPSBhc1N0cmluZyh0eXBlT2JqZWN0KS0+dmFsdWUoJmV4ZWMpOwpAQCAtMjY1
LDcgKzI2NSw3IEBAIHN0YXRpYyBFeHBlY3RlZDxzdGQ6Om9wdGlvbmFsPEFjdGlvbj4sIHMKICAg
ICAgICAgcmV0dXJuIHt7IEFjdGlvblR5cGU6OkJsb2NrQ29va2llcyB9fTsKICAgICBpZiAoYWN0
aW9uVHlwZSA9PSAiY3NzLWRpc3BsYXktbm9uZSIpIHsKICAgICAgICAgSlNWYWx1ZSBzZWxlY3Rv
ciA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMs
ICJzZWxlY3RvciIpKTsKLSAgICAgICAgaWYgKCFzZWxlY3RvciB8fCBzY29wZS5leGNlcHRpb24o
KSB8fCAhc2VsZWN0b3IuaXNTdHJpbmcoKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigp
IHx8ICFzZWxlY3Rvci5pc1N0cmluZygpKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRDU1NEaXNwbGF5Tm9uZUFjdGlv
blR5cGUpOwogCiAgICAgICAgIFN0cmluZyBzZWxlY3RvclN0cmluZyA9IGFzU3RyaW5nKHNlbGVj
dG9yKS0+dmFsdWUoJmV4ZWMpOwpAQCAtMjc3LDYgKzI3NywxMiBAQCBzdGF0aWMgRXhwZWN0ZWQ8
c3RkOjpvcHRpb25hbDxBY3Rpb24+LCBzCiAgICAgfQogICAgIGlmIChhY3Rpb25UeXBlID09ICJt
YWtlLWh0dHBzIikKICAgICAgICAgcmV0dXJuIHt7IEFjdGlvblR5cGU6Ok1ha2VIVFRQUyB9fTsK
KyAgICBpZiAoYWN0aW9uVHlwZSA9PSAibm90aWZ5IikgeworICAgICAgICBKU1ZhbHVlIG5vdGlm
aWNhdGlvbiA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JmV4ZWMsICJub3RpZmljYXRpb24iKSk7CisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8
fCAhbm90aWZpY2F0aW9uLmlzU3RyaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZE5vdGlmaWNhdGlvbik7Cisg
ICAgICAgIHJldHVybiB7IEFjdGlvbihBY3Rpb25UeXBlOjpOb3RpZnksIGFzU3RyaW5nKG5vdGlm
aWNhdGlvbiktPnZhbHVlKCZleGVjKSkgfTsKKyAgICB9CiAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRBY3Rpb25UeXBlKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0Nv
bnRlbnRFeHRlbnNpb25SdWxlLmNwcAkocmV2aXNpb24gMjIyNTgzKQorKysgU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw2ICs2Niw3IEBAIEFjdGlvbiBBY3Rpb246OmRlc2VyaWFsaXplKGNvbnN0IFNl
cmlhbGkKICAgICBjYXNlIEFjdGlvblR5cGU6Ok1ha2VIVFRQUzoKICAgICAgICAgcmV0dXJuIEFj
dGlvbihhY3Rpb25UeXBlLCBsb2NhdGlvbik7CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNw
bGF5Tm9uZVNlbGVjdG9yOgorICAgIGNhc2UgQWN0aW9uVHlwZTo6Tm90aWZ5OgogICAgICAgICBy
ZXR1cm4gQWN0aW9uKGFjdGlvblR5cGUsIGRlc2VyaWFsaXplU3RyaW5nKGFjdGlvbnMsIGFjdGlv
bnNMZW5ndGgsIGxvY2F0aW9uICsgc2l6ZW9mKEFjdGlvblR5cGUpKSwgbG9jYXRpb24pOwogICAg
IH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNzgsNiArNzksNyBAQCBB
Y3Rpb25UeXBlIEFjdGlvbjo6ZGVzZXJpYWxpemVUeXBlKGNvbnN0CiAgICAgc3dpdGNoICh0eXBl
KSB7CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXM6CiAgICAgY2FzZSBBY3Rpb25U
eXBlOjpCbG9ja0xvYWQ6CisgICAgY2FzZSBBY3Rpb25UeXBlOjpOb3RpZnk6CiAgICAgY2FzZSBB
Y3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzOgogICAgIGNhc2UgQWN0aW9uVHlwZTo6Q1NT
RGlzcGxheU5vbmVTZWxlY3RvcjoKICAgICBjYXNlIEFjdGlvblR5cGU6Ok1ha2VIVFRQUzoKQEAg
LTk1LDYgKzk3LDcgQEAgdWludDMyX3QgQWN0aW9uOjpzZXJpYWxpemVkTGVuZ3RoKGNvbnN0IAog
ICAgIGNhc2UgQWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlczoKICAgICBjYXNlIEFjdGlv
blR5cGU6Ok1ha2VIVFRQUzoKICAgICAgICAgcmV0dXJuIHNpemVvZihBY3Rpb25UeXBlKTsKKyAg
ICBjYXNlIEFjdGlvblR5cGU6Ok5vdGlmeToKICAgICBjYXNlIEFjdGlvblR5cGU6OkNTU0Rpc3Bs
YXlOb25lU2VsZWN0b3I6IHsKICAgICAgICAgdWludDMyX3QgcHJlZml4TGVuZ3RoID0gc2l6ZW9m
KEFjdGlvblR5cGUpICsgc2l6ZW9mKHVpbnQzMl90KSArIHNpemVvZihib29sKTsKICAgICAgICAg
dWludDMyX3Qgc3RyaW5nU3RhcnRJbmRleCA9IGxvY2F0aW9uICsgcHJlZml4TGVuZ3RoOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uUnVsZS5oCShyZXZpc2lvbiAyMjI1ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzUsMTQgKzEzNSwxNCBAQCBzdHJ1Y3QgQWN0aW9uIHsKICAgICAgICAgLCBtX2FjdGlvbklEKGFj
dGlvbklEKQogICAgICAgICAsIG1fc3RyaW5nQXJndW1lbnQoc3RyaW5nQXJndW1lbnQpCiAgICAg
ewotICAgICAgICBBU1NFUlQodHlwZSA9PSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVj
dG9yKTsKKyAgICAgICAgQVNTRVJUKGhhc1N0cmluZ0FyZ3VtZW50KHR5cGUpKTsKICAgICB9CiAK
ICAgICBBY3Rpb24oQWN0aW9uVHlwZSB0eXBlLCB1aW50MzJfdCBhY3Rpb25JRCA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKICAgICAgICAgOiBtX3R5cGUodHlwZSkKICAg
ICAgICAgLCBtX2FjdGlvbklEKGFjdGlvbklEKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHR5cGUg
IT0gQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3Rvcik7CisgICAgICAgIEFTU0VSVCgh
aGFzU3RyaW5nQXJndW1lbnQodHlwZSkpOwogICAgIH0KIAogICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBBY3Rpb24mIG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3Bw
CShyZXZpc2lvbiAyMjI1ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4
IEBACiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCisjaW5jbHVkZSAiQ2hyb21l
LmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIkNv
bnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgiCkBAIC0zOCw2ICs0MCw3IEBACiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIk1haW5G
cmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRJbmZvLmgi
CiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSAiVXNlckNvbnRlbnRDb250cm9sbGVyLmgiCkBA
IC0xNzAsNiArMTczLDcgQEAgQmxvY2tlZFN0YXR1cyBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6
OgogICAgIGJvb2wgd2lsbEJsb2NrTG9hZCA9IGZhbHNlOwogICAgIGJvb2wgd2lsbEJsb2NrQ29v
a2llcyA9IGZhbHNlOwogICAgIGJvb2wgd2lsbE1ha2VIVFRQUyA9IGZhbHNlOworICAgIEhhc2hT
ZXQ8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gbm90aWZpY2F0aW9uczsKICAgICBmb3IgKGNv
bnN0IGF1dG8mIGFjdGlvbiA6IGFjdGlvbnMuZmlyc3QpIHsKICAgICAgICAgc3dpdGNoIChhY3Rp
b24udHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
OkJsb2NrTG9hZDoKQEAgLTE4NCw2ICsxODgsOSBAQCBCbG9ja2VkU3RhdHVzIENvbnRlbnRFeHRl
bnNpb25zQmFja2VuZDo6CiAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50RG9jdW1lbnQpCiAg
ICAgICAgICAgICAgICAgY3VycmVudERvY3VtZW50LT5leHRlbnNpb25TdHlsZVNoZWV0cygpLmFk
ZERpc3BsYXlOb25lU2VsZWN0b3IoYWN0aW9uLmV4dGVuc2lvbklkZW50aWZpZXIoKSwgYWN0aW9u
LnN0cmluZ0FyZ3VtZW50KCksIGFjdGlvbi5hY3Rpb25JRCgpKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpOb3RpZnk6Cisg
ICAgICAgICAgICBub3RpZmljYXRpb25zLmFkZChzdGQ6Om1ha2VfcGFpcihhY3Rpb24uZXh0ZW5z
aW9uSWRlbnRpZmllcigpLCBhY3Rpb24uc3RyaW5nQXJndW1lbnQoKSkpOworICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6Ok1ha2VI
VFRQUzogewogICAgICAgICAgICAgaWYgKCh1cmwucHJvdG9jb2xJcygiaHR0cCIpIHx8IHVybC5w
cm90b2NvbElzKCJ3cyIpKQogICAgICAgICAgICAgICAgICYmICghdXJsLnBvcnQoKSB8fCBpc0Rl
ZmF1bHRQb3J0Rm9yUHJvdG9jb2wodXJsLnBvcnQoKS52YWx1ZSgpLCB1cmwucHJvdG9jb2woKSkp
KQpAQCAtMjEzLDcgKzIyMCw3IEBAIEJsb2NrZWRTdGF0dXMgQ29udGVudEV4dGVuc2lvbnNCYWNr
ZW5kOjoKICAgICAgICAgaWYgKHdpbGxCbG9ja0xvYWQpCiAgICAgICAgICAgICBjdXJyZW50RG9j
dW1lbnQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkNvbnRlbnRCbG9ja2VyLCBN
ZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIkNvbnRlbnQgYmxvY2tlciBwcmV2ZW50ZWQg
ZnJhbWUgZGlzcGxheWluZyAiLCBtYWluRG9jdW1lbnRVUkwuc3RyaW5nKCksICIgZnJvbSBsb2Fk
aW5nIGEgcmVzb3VyY2UgZnJvbSAiLCB1cmwuc3RyaW5nKCkpKTsKICAgICB9Ci0gICAgcmV0dXJu
IHsgd2lsbEJsb2NrTG9hZCwgd2lsbEJsb2NrQ29va2llcywgd2lsbE1ha2VIVFRQUyB9OworICAg
IHJldHVybiB7IHdpbGxCbG9ja0xvYWQsIHdpbGxCbG9ja0Nvb2tpZXMsIHdpbGxNYWtlSFRUUFMs
IFdURk1vdmUobm90aWZpY2F0aW9ucykgfTsKIH0KIAogQmxvY2tlZFN0YXR1cyBDb250ZW50RXh0
ZW5zaW9uc0JhY2tlbmQ6OnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JQaW5nTG9hZChj
b25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBtYWluRG9jdW1lbnRVUkwpCkBAIC0yNDAsMTMgKzI0
NywxNCBAQCBCbG9ja2VkU3RhdHVzIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6CiAgICAgICAg
ICAgICAgICAgd2lsbE1ha2VIVFRQUyA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxl
Y3RvcjoKKyAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Tm90aWZ5
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6Oklnbm9yZVByZXZpb3VzUnVsZXM6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHsgd2lsbEJs
b2NrTG9hZCwgd2lsbEJsb2NrQ29va2llcywgd2lsbE1ha2VIVFRQUyB9OworICAgIHJldHVybiB7
IHdpbGxCbG9ja0xvYWQsIHdpbGxCbG9ja0Nvb2tpZXMsIHdpbGxNYWtlSFRUUFMsIHsgfSB9Owog
fQogCiBjb25zdCBTdHJpbmcmIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6ZGlzcGxheU5vbmVD
U1NSdWxlKCkKQEAgLTI1NSw4ICsyNjMsMTEgQEAgY29uc3QgU3RyaW5nJiBDb250ZW50RXh0ZW5z
aW9uc0JhY2tlbmQ6OgogICAgIHJldHVybiBydWxlOwogfQogCi12b2lkIGFwcGx5QmxvY2tlZFN0
YXR1c1RvUmVxdWVzdChjb25zdCBCbG9ja2VkU3RhdHVzJiBzdGF0dXMsIFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCkKK3ZvaWQgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KGNvbnN0IEJsb2Nr
ZWRTdGF0dXMmIHN0YXR1cywgUGFnZSogcGFnZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQog
eworICAgIGlmIChwYWdlICYmICFzdGF0dXMubm90aWZpY2F0aW9ucy5pc0VtcHR5KCkpCisgICAg
ICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihy
ZXF1ZXN0LnVybCgpLCBzdGF0dXMubm90aWZpY2F0aW9ucyk7CisKICAgICBpZiAoc3RhdHVzLmJs
b2NrZWRDb29raWVzKQogICAgICAgICByZXF1ZXN0LnNldEFsbG93Q29va2llcyhmYWxzZSk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjIyNTgz
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjc4MSw3ICsyNzgxLDcgQEAgdW5zaWduZWQgbG9uZyBGcmFtZUxvYWRlcjo6bG9hZFJl
c291cmNlUwogICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKSB7CiAgICAg
ICAgICAgICBpZiAobV9kb2N1bWVudExvYWRlcikgewogICAgICAgICAgICAgICAgIGF1dG8gYmxv
Y2tlZFN0YXR1cyA9IHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVudEV4
dGVuc2lvblJ1bGVzRm9yTG9hZChuZXdSZXF1ZXN0LnVybCgpLCBSZXNvdXJjZVR5cGU6OlJhdywg
Km1fZG9jdW1lbnRMb2FkZXIpOwotICAgICAgICAgICAgICAgIGFwcGx5QmxvY2tlZFN0YXR1c1Rv
UmVxdWVzdChibG9ja2VkU3RhdHVzLCBuZXdSZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBhcHBs
eUJsb2NrZWRTdGF0dXNUb1JlcXVlc3QoYmxvY2tlZFN0YXR1cywgcGFnZSwgbmV3UmVxdWVzdCk7
CiAgICAgICAgICAgICAgICAgaWYgKGJsb2NrZWRTdGF0dXMuYmxvY2tlZExvYWQpIHsKICAgICAg
ICAgICAgICAgICAgICAgbmV3UmVxdWVzdCA9IHsgfTsKICAgICAgICAgICAgICAgICAgICAgZXJy
b3IgPSBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGluaXRpYWxS
ZXF1ZXN0LnVybCgpLCBlbXB0eVN0cmluZygpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9QaW5nTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUGlu
Z0xvYWRlci5jcHAJKHJldmlzaW9uIDIyMjU4MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Q
aW5nTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgYm9v
bCBwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzCiAgICAgaWYgKCFwYWdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgYXV0byBzdGF0dXMgPSBwYWdlLT51c2VyQ29udGVudFByb3ZpZGVy
KCkucHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdC51cmwoKSwgcmVz
b3VyY2VUeXBlLCAqZG9jdW1lbnRMb2FkZXIpOwotICAgIGFwcGx5QmxvY2tlZFN0YXR1c1RvUmVx
dWVzdChzdGF0dXMsIHJlcXVlc3QpOworICAgIGFwcGx5QmxvY2tlZFN0YXR1c1RvUmVxdWVzdChz
dGF0dXMsIHBhZ2UsIHJlcXVlc3QpOwogICAgIHJldHVybiBzdGF0dXMuYmxvY2tlZExvYWQ7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNp
b24gMjIyNTgzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQ1LDExICszNDUsMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6
d2lsbFNlbmRSZXF1ZXN0SW50ZQogICAgIH0KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCi0gICAgaWYgKGZyYW1lTG9hZGVyKCkpIHsKKyAgICBpZiAoIXJlZGlyZWN0UmVzcG9uc2Uu
aXNOdWxsKCkgJiYgZnJhbWVMb2FkZXIoKSkgewogICAgICAgICBQYWdlKiBwYWdlID0gZnJhbWVM
b2FkZXIoKS0+ZnJhbWUoKS5wYWdlKCk7CiAgICAgICAgIGlmIChwYWdlICYmIG1fZG9jdW1lbnRM
b2FkZXIpIHsKICAgICAgICAgICAgIGF1dG8gYmxvY2tlZFN0YXR1cyA9IHBhZ2UtPnVzZXJDb250
ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChyZXF1ZXN0
LnVybCgpLCBtX3Jlc291cmNlVHlwZSwgKm1fZG9jdW1lbnRMb2FkZXIpOwotICAgICAgICAgICAg
YXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KGJsb2NrZWRTdGF0dXMsIHJlcXVlc3QpOworICAg
ICAgICAgICAgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KGJsb2NrZWRTdGF0dXMsIHBhZ2Us
IHJlcXVlc3QpOwogICAgICAgICAgICAgaWYgKGJsb2NrZWRTdGF0dXMuYmxvY2tlZExvYWQpIHsK
ICAgICAgICAgICAgICAgICByZXF1ZXN0ID0geyB9OwogICAgICAgICAgICAgICAgIGRpZEZhaWwo
YmxvY2tlZEJ5Q29udGVudEJsb2NrZXJFcnJvcigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24g
MjIyNTgzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI1LDggKzcyNSw5IEBAIFJlc291cmNlRXJyb3JP
cjxDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWMKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQogICAgIGlmIChmcmFtZSgpICYmIGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKSAmJiBtX2Rv
Y3VtZW50TG9hZGVyKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIHJlc291cmNlUmVxdWVzdCA9IHJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAgICAgIGF1dG8gYmxvY2tlZFN0YXR1cyA9IGZy
YW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3ND
b250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlc291cmNlUmVxdWVzdC51cmwoKSwgdG9SZXNv
dXJjZVR5cGUodHlwZSksICptX2RvY3VtZW50TG9hZGVyKTsKLSAgICAgICAgcmVxdWVzdC5hcHBs
eUJsb2NrZWRTdGF0dXMoYmxvY2tlZFN0YXR1cyk7CisgICAgICAgIGF1dG8qIHBhZ2UgPSBmcmFt
ZSgpLT5tYWluRnJhbWUoKS5wYWdlKCk7CisgICAgICAgIGF1dG8gYmxvY2tlZFN0YXR1cyA9IHBh
Z2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9y
TG9hZChyZXNvdXJjZVJlcXVlc3QudXJsKCksIHRvUmVzb3VyY2VUeXBlKHR5cGUpLCAqbV9kb2N1
bWVudExvYWRlcik7CisgICAgICAgIHJlcXVlc3QuYXBwbHlCbG9ja2VkU3RhdHVzKGJsb2NrZWRT
dGF0dXMsIHBhZ2UpOwogICAgICAgICBpZiAoYmxvY2tlZFN0YXR1cy5ibG9ja2VkTG9hZCkgewog
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgicmVxdWVzdFJlc291cmNlOiBSZXNv
dXJjZSBibG9ja2VkIGJ5IGNvbnRlbnQgYmxvY2tlciAoZnJhbWUgPSAlcCkiLCBmcmFtZSgpKTsK
ICAgICAgICAgICAgIGlmICh0eXBlID09IENhY2hlZFJlc291cmNlOjpUeXBlOjpNYWluUmVzb3Vy
Y2UpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJl
cXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZVJlcXVlc3QuY3BwCShyZXZpc2lvbiAyMjI1ODMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjEyLDkgKzIxMiw5IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpyZW1vdmVGcmFn
bWUKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKLXZvaWQgQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0OjphcHBseUJsb2NrZWRTdGF0dXMoY29uc3QgQ29udGVudEV4dGVuc2lvbnM6OkJs
b2NrZWRTdGF0dXMmIGJsb2NrZWRTdGF0dXMpCit2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6
YXBwbHlCbG9ja2VkU3RhdHVzKGNvbnN0IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVz
JiBibG9ja2VkU3RhdHVzLCBQYWdlKiBwYWdlKQogewotICAgIENvbnRlbnRFeHRlbnNpb25zOjph
cHBseUJsb2NrZWRTdGF0dXNUb1JlcXVlc3QoYmxvY2tlZFN0YXR1cywgbV9yZXNvdXJjZVJlcXVl
c3QpOworICAgIENvbnRlbnRFeHRlbnNpb25zOjphcHBseUJsb2NrZWRTdGF0dXNUb1JlcXVlc3Qo
YmxvY2tlZFN0YXR1cywgcGFnZSwgbV9yZXNvdXJjZVJlcXVlc3QpOwogfQogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0LmgJKHJldmlzaW9uIDIyMjU4MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVBY2NvcmRpbmdDYWNoZU1vZGUoKTsKICAgICB2b2lk
IHJlbW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVkKCk7CiAjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKLSAgICB2b2lkIGFwcGx5QmxvY2tlZFN0YXR1cyhjb25zdCBDb250ZW50RXh0
ZW5zaW9uczo6QmxvY2tlZFN0YXR1cyYpOworICAgIHZvaWQgYXBwbHlCbG9ja2VkU3RhdHVzKGNv
bnN0IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2VkU3RhdHVzJiwgUGFnZSopOwogI2VuZGlmCiAg
ICAgdm9pZCBzZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbihEb2N1bWVudCYpOwogICAgIHZvaWQg
c2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDIyMjU4MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3MCw2ICszNzAsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpIHsgfQogCisgICAgdmly
dHVhbCB2b2lkIGNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihjb25zdCBXZWJDb3JlOjpVUkwm
LCBjb25zdCBIYXNoU2V0PHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+JikgeyB9OworCiAjaWYg
UExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0U2V0Q3Vyc29yVG9DdXJyZW50
Q3Vyc29yKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBBWFN0YXJ0RnJhbWVMb2FkKCkgPSAwOwpJ
bmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjYwMCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTctMDktMjcgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgV0tDb250ZW50
UnVsZUxpc3Qgbm90aWZ5IGFjdGlvbiB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcwMTMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxMDcz
OTM2PgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvUGluZ0xvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpQaW5nTG9hZDo6cHJv
Y2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oOgorICAgICAgICAoQVBJOjpOYXZpZ2F0aW9uQ2xpZW50
Ojpjb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS1BhZ2UuY3BwOgorICAgICAgICAoV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6TmF2
aWdhdGlvblN0YXRlOjpzZXROYXZpZ2F0aW9uRGVsZWdhdGUpOgorICAgICAgICAoV2ViS2l0OjpO
YXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNh
dGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6
Y29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDE3LTA5LTI3ICBXZW5zb24gSHNpZWgg
IDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIERyYWcgZXZlbnQgRGF0YVRyYW5z
ZmVyIGhhcyB1bmV4cGVjdGVkIHR5cGVzICJkeW4uYWg2MmQ0Li4uIgpJbmRleDogU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5jcHAJKHJldmlzaW9uIDIyMjU4MykKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjMsNyArMzIzLDcgQEAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFj
awogQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0dXMgUGluZ0xvYWQ6OnByb2Nlc3NDb250
ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAg
ICBhdXRvIHN0YXR1cyA9IGNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCgpLnByb2Nlc3NDb250ZW50
RXh0ZW5zaW9uUnVsZXNGb3JQaW5nTG9hZChyZXF1ZXN0LnVybCgpLCBtX3BhcmFtZXRlcnMubWFp
bkRvY3VtZW50VVJMKTsKLSAgICBhcHBseUJsb2NrZWRTdGF0dXNUb1JlcXVlc3Qoc3RhdHVzLCBy
ZXF1ZXN0KTsKKyAgICBhcHBseUJsb2NrZWRTdGF0dXNUb1JlcXVlc3Qoc3RhdHVzLCBudWxscHRy
LCByZXF1ZXN0KTsKICAgICByZXR1cm4gc3RhdHVzOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDIyMjU4MykKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OTks
NiArMzc5OSwxMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6d2lsbFN1Ym1pdEZvcm0odWludDY0CiAg
ICAgfSk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5Ojpjb250ZW50UnVsZUxpc3ROb3RpZmljYXRp
b24oV2ViQ29yZTo6VVJMJiYgdXJsLCBWZWN0b3I8U3RyaW5nPiYmIGlkZW50aWZpZXJzLCBWZWN0
b3I8U3RyaW5nPiYmIG5vdGlmaWNhdGlvbnMpCit7CisgICAgaWYgKG1fbmF2aWdhdGlvbkNsaWVu
dCkKKyAgICAgICAgbV9uYXZpZ2F0aW9uQ2xpZW50LT5jb250ZW50UnVsZUxpc3ROb3RpZmljYXRp
b24oKnRoaXMsIFdURk1vdmUodXJsKSwgV1RGTW92ZShpZGVudGlmaWVycyksIFdURk1vdmUobm90
aWZpY2F0aW9ucykpOworfQorICAgIAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZE5hdmlnYXRlV2l0
aE5hdmlnYXRpb25EYXRhKGNvbnN0IFdlYk5hdmlnYXRpb25EYXRhU3RvcmUmIHN0b3JlLCB1aW50
NjRfdCBmcmFtZUlEKSAKIHsKICAgICBQYWdlQ2xpZW50UHJvdGVjdG9yIHByb3RlY3RvcihtX3Bh
Z2VDbGllbnQpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJl
dmlzaW9uIDIyMjU4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjkwLDYgKzEyOTAsOCBAQCBwcml2YXRlOgogICAgIHZvaWQg
dW5hYmxlVG9JbXBsZW1lbnRQb2xpY3kodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VFcnJvciYsIGNvbnN0IFVzZXJEYXRhJik7CiAKICAgICB2b2lkIHdpbGxTdWJtaXRG
b3JtKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHNvdXJjZUZyYW1lSUQsIGNvbnN0IFZlY3Rv
cjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiYgdGV4dEZpZWxkVmFsdWVzLCB1aW50NjRfdCBs
aXN0ZW5lcklELCBjb25zdCBVc2VyRGF0YSYpOworICAgICAgICAKKyAgICB2b2lkIGNvbnRlbnRS
dWxlTGlzdE5vdGlmaWNhdGlvbihXZWJDb3JlOjpVUkwmJiwgVmVjdG9yPFN0cmluZz4mJiBpZGVu
dGlmaWVycywgVmVjdG9yPFN0cmluZz4mJiBub3RpZmljYXRpb25zKTsKIAogICAgIC8vIEhpc3Rv
cnkgY2xpZW50CiAgICAgdm9pZCBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShjb25zdCBX
ZWJOYXZpZ2F0aW9uRGF0YVN0b3JlJiwgdWludDY0X3QgZnJhbWVJRCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lv
biAyMjI1ODMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQ1OCw2ICs0NTgsNyBAQCBtZXNzYWdlcyAtPiBXZWJQ
YWdlUHJveHkgewogICAgIEhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShTdHJpbmcgbWVzc2FnZU5h
bWUsIFdlYktpdDo6VXNlckRhdGEgbWVzc2FnZUJvZHkpIC0+IChXZWJLaXQ6OlVzZXJEYXRhIHJl
dHVybkRhdGEpIFdhbnRzQ29ubmVjdGlvbgogCiAgICAgSGFuZGxlQXV0b0ZpbGxCdXR0b25DbGlj
ayhXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRhKTsKKyAgICBDb250ZW50UnVsZUxpc3ROb3RpZmlj
YXRpb24oV2ViQ29yZTo6VVJMIHVybCwgVmVjdG9yPFN0cmluZz4gaWRlbnRpZmllcnMsIFZlY3Rv
cjxTdHJpbmc+IG5vdGlmaWNhdGlvbnMpCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tf
VEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQogICAgIEFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xp
ZW50KHVpbnQ2NF90IGNvbnRleHRJZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElOYXZpZ2F0aW9uQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25DbGllbnQuaAkocmV2aXNpb24gMjIyNTgzKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25DbGllbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA2LDYgKzEwNiw4IEBAIHB1YmxpYzoKICAgICAgICAgbGlzdGVuZXItPnVzZSh7
IH0pOwogICAgIH0KICAgICAKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudFJ1bGVMaXN0Tm90aWZp
Y2F0aW9uKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgV2ViQ29yZTo6VVJMJiYsIFZlY3RvcjxXVEY6
OlN0cmluZz4mJiwgVmVjdG9yPFdURjo6U3RyaW5nPiYmKSB7IH07CisgICAgCiAjaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgdmlydHVhbCBXZWJLaXQ6OlBsdWdpbk1vZHVsZUxv
YWRQb2xpY3kgZGVjaWRlUG9saWN5Rm9yUGx1Z2luTG9hZChXZWJLaXQ6OldlYlBhZ2VQcm94eSYs
IFdlYktpdDo6UGx1Z2luTW9kdWxlTG9hZFBvbGljeSBjdXJyZW50UGx1Z2luTG9hZFBvbGljeSwg
RGljdGlvbmFyeSosIFdURjo6U3RyaW5nJikKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHJldmlzaW9uIDIyMjU4MykKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsx
MDIsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRUcmFpdHM8V0tQYWdlTG9hCiB9OwogCiB0
ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRUcmFpdHM8V0tQYWdlTmF2aWdhdGlvbkNsaWVudEJhc2U+
IHsKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8V0tQYWdlTmF2aWdhdGlvbkNsaWVudFYwLCBXS1Bh
Z2VOYXZpZ2F0aW9uQ2xpZW50VjE+IFZlcnNpb25zOworICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxX
S1BhZ2VOYXZpZ2F0aW9uQ2xpZW50VjAsIFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMSwgV0tQYWdl
TmF2aWdhdGlvbkNsaWVudFYyPiBWZXJzaW9uczsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IENs
aWVudFRyYWl0czxXS1BhZ2VQb2xpY3lDbGllbnRCYXNlPiB7CkBAIC0yMjk1LDYgKzIyOTUsMjEg
QEAgdm9pZCBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudChXS1BhZwogICAgICAgICAgICAg
bV9jbGllbnQuZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCh0b0FQSSgmcGFnZSks
IG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAg
IHZvaWQgY29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKFdlYlBhZ2VQcm94eSYgcGFnZSwgVVJM
JiYgdXJsLCBWZWN0b3I8U3RyaW5nPiYmIGxpc3RJZGVudGlmaWVycywgVmVjdG9yPFN0cmluZz4m
JiBub3RpZmljYXRpb25zKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fY2xp
ZW50LmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiBhcGlMaXN0SWRlbnRp
ZmllcnM7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGlkZW50aWZpZXIgOiBsaXN0SWRl
bnRpZmllcnMpCisgICAgICAgICAgICAgICAgYXBpTGlzdElkZW50aWZpZXJzLmFwcGVuZChBUEk6
OlN0cmluZzo6Y3JlYXRlKGlkZW50aWZpZXIpKTsKKworICAgICAgICAgICAgVmVjdG9yPFJlZlB0
cjxBUEk6Ok9iamVjdD4+IGFwaU5vdGlmaWNhdGlvbnM7CisgICAgICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIG5vdGlmaWNhdGlvbiA6IG5vdGlmaWNhdGlvbnMpCisgICAgICAgICAgICAgICAgYXBp
Tm90aWZpY2F0aW9ucy5hcHBlbmQoQVBJOjpTdHJpbmc6OmNyZWF0ZShub3RpZmljYXRpb24pKTsK
KworICAgICAgICAgICAgbV9jbGllbnQuY29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKHRvQVBJ
KCZwYWdlKSwgdG9VUkxSZWYodXJsLnN0cmluZygpLmltcGwoKSksIHRvQVBJKEFQSTo6QXJyYXk6
OmNyZWF0ZShXVEZNb3ZlKGFwaUxpc3RJZGVudGlmaWVycykpLnB0cigpKSwgdG9BUEkoQVBJOjpB
cnJheTo6Y3JlYXRlKFdURk1vdmUoYXBpTm90aWZpY2F0aW9ucykpLnB0cigpKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgfQogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQogICAgICAgICBQbHVnaW5Nb2R1bGVMb2FkUG9saWN5IGRlY2lkZVBvbGljeUZvclBsdWdp
bkxvYWQoV2ViUGFnZVByb3h5JiBwYWdlLCBQbHVnaW5Nb2R1bGVMb2FkUG9saWN5IGN1cnJlbnRQ
bHVnaW5Mb2FkUG9saWN5LCBBUEk6OkRpY3Rpb25hcnkqIHBsdWdpbkluZm9ybWF0aW9uLCBTdHJp
bmcmIHVuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb24pIG92ZXJyaWRlCiAgICAgICAgIHsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZU5hdmlnYXRpb25DbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VOYXZpZ2F0
aW9uQ2xpZW50LmgJKHJldmlzaW9uIDIyMjU4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLUGFnZU5hdmlnYXRpb25DbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiAr
ODAsNyBAQCB0eXBlZGVmIHZvaWQgKCpXS1BhZ2VOYXZpZ2F0aW9uRGlkRW5kTmF2CiAKIHR5cGVk
ZWYgdm9pZCAoKldLUGFnZU5hdmlnYXRpb25EaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBz
aG90KShXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CiAKK3R5cGVkZWYg
dm9pZCAoKldLUGFnZU5hdmlnYXRpb25Db250ZW50UnVsZUxpc3ROb3RpZmljYXRpb25DYWxsYmFj
aykoV0tQYWdlUmVmLCBXS1VSTFJlZiwgV0tBcnJheVJlZiwgV0tBcnJheVJlZiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbyk7CiAKIHR5cGVkZWYgc3RydWN0IFdLUGFnZU5hdmlnYXRpb25DbGllbnRC
YXNlIHsKICAgICBpbnQgdmVyc2lvbjsKQEAgLTE0Myw2ICsxNDQsMzkgQEAgdHlwZWRlZiBzdHJ1
Y3QgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYxIAogICAgIFdLUGFnZU5hdmlnYXRpb25XZWJQcm9j
ZXNzRGlkVGVybWluYXRlQ2FsbGJhY2sgd2ViUHJvY2Vzc0RpZFRlcm1pbmF0ZTsKIH0gV0tQYWdl
TmF2aWdhdGlvbkNsaWVudFYxOwogCit0eXBlZGVmIHN0cnVjdCBXS1BhZ2VOYXZpZ2F0aW9uQ2xp
ZW50VjIgeworICAgIFdLUGFnZU5hdmlnYXRpb25DbGllbnRCYXNlIGJhc2U7CisgICAgCisgICAg
Ly8gVmVyc2lvbiAwLgorICAgIFdLUGFnZU5hdmlnYXRpb25EZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uQ2FsbGJhY2sgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjsKKyAgICBX
S1BhZ2VOYXZpZ2F0aW9uRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlQ2FsbGJhY2sg
ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlOworICAgIFdLUGFnZU5hdmlnYXRpb25E
ZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkQ2FsbGJhY2sgZGVjaWRlUG9saWN5Rm9yUGx1Z2luTG9h
ZDsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb25DYWxs
YmFjayBkaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbjsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9u
RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uQ2FsbGJhY2sg
ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uOworICAgIFdL
UGFnZU5hdmlnYXRpb25EaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uQ2FsbGJhY2sgZGlkRmFp
bFByb3Zpc2lvbmFsTmF2aWdhdGlvbjsKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uRGlkQ29tbWl0TmF2
aWdhdGlvbkNhbGxiYWNrIGRpZENvbW1pdE5hdmlnYXRpb247CisgICAgV0tQYWdlTmF2aWdhdGlv
bkRpZEZpbmlzaE5hdmlnYXRpb25DYWxsYmFjayBkaWRGaW5pc2hOYXZpZ2F0aW9uOworICAgIFdL
UGFnZU5hdmlnYXRpb25EaWRGYWlsTmF2aWdhdGlvbkNhbGxiYWNrIGRpZEZhaWxOYXZpZ2F0aW9u
OworICAgIFdLUGFnZU5hdmlnYXRpb25EaWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZUNh
bGxiYWNrIGRpZEZhaWxQcm92aXNpb25hbExvYWRJblN1YmZyYW1lOworICAgIFdLUGFnZU5hdmln
YXRpb25EaWRGaW5pc2hEb2N1bWVudExvYWRDYWxsYmFjayBkaWRGaW5pc2hEb2N1bWVudExvYWQ7
CisgICAgV0tQYWdlTmF2aWdhdGlvbkRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25DYWxsYmFjayBk
aWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uOworICAgIFdLUGFnZU5hdmlnYXRpb25SZW5kZXJpbmdQ
cm9ncmVzc0RpZENoYW5nZUNhbGxiYWNrIHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlOworICAg
IFdLUGFnZU5hdmlnYXRpb25DYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQ2Fs
bGJhY2sgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZTsKKyAgICBXS1BhZ2VO
YXZpZ2F0aW9uRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ2FsbGJhY2sgZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIFdLUGFnZU5hdmlnYXRpb25XZWJQcm9j
ZXNzRGlkQ3Jhc2hDYWxsYmFjayB3ZWJQcm9jZXNzRGlkQ3Jhc2g7CisgICAgV0tQYWdlTmF2aWdh
dGlvbkNvcHlXZWJDcnlwdG9NYXN0ZXJLZXlDYWxsYmFjayBjb3B5V2ViQ3J5cHRvTWFzdGVyS2V5
OworICAgIFdLUGFnZU5hdmlnYXRpb25EaWRCZWdpbk5hdmlnYXRpb25HZXN0dXJlIGRpZEJlZ2lu
TmF2aWdhdGlvbkdlc3R1cmU7CisgICAgV0tQYWdlTmF2aWdhdGlvbldpbGxFbmROYXZpZ2F0aW9u
R2VzdHVyZSB3aWxsRW5kTmF2aWdhdGlvbkdlc3R1cmU7CisgICAgV0tQYWdlTmF2aWdhdGlvbkRp
ZEVuZE5hdmlnYXRpb25HZXN0dXJlIGRpZEVuZE5hdmlnYXRpb25HZXN0dXJlOworICAgIFdLUGFn
ZU5hdmlnYXRpb25EaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90IGRpZFJlbW92ZU5h
dmlnYXRpb25HZXN0dXJlU25hcHNob3Q7CisgICAgCisgICAgLy8gVmVyc2lvbiAxLgorICAgIFdL
UGFnZU5hdmlnYXRpb25XZWJQcm9jZXNzRGlkVGVybWluYXRlQ2FsbGJhY2sgd2ViUHJvY2Vzc0Rp
ZFRlcm1pbmF0ZTsKKworICAgIC8vIFZlcnNpb24gMi4KKyAgICBXS1BhZ2VOYXZpZ2F0aW9uQ29u
dGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uQ2FsbGJhY2sgY29udGVudFJ1bGVMaXN0Tm90aWZpY2F0
aW9uOworfSBXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50VjI7CisKICNpZmRlZiBfX2NwbHVzcGx1cwog
fQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tOYXZp
Z2F0aW9uRGVsZWdhdGVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oCShyZXZpc2lvbiAy
MjI1ODMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tOYXZpZ2F0aW9u
RGVsZWdhdGVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDggQEAgc3RhdGlj
IGNvbnN0IFdLTmF2aWdhdGlvblJlc3BvbnNlUG9saWN5IAogLSAodm9pZClfd2ViVmlld0RpZFJl
bW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3Q6KFdLV2ViVmlldyAqKXdlYlZpZXcgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvc3goMTAuMTIpLCBpb3MoMTAuMCkpOwogLSAodm9pZClfd2ViVmlldzoo
V0tXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOihXS05h
dmlnYXRpb25BY3Rpb24gKiluYXZpZ2F0aW9uQWN0aW9uIGRlY2lzaW9uSGFuZGxlcjoodm9pZCAo
XikoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5LCBfV0tXZWJzaXRlUG9saWNpZXMgKikpZGVjaXNp
b25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEyLjMpLCBpb3MoMTAuMykpOwog
CistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFVSTDooTlNVUkwgKil1cmwg
Y29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnM6KE5TQXJyYXk8TlNTdHJpbmcgKj4gKilpZGVudGlm
aWVycyBub3RpZmljYXRpb25zOihOU0FycmF5PE5TU3RyaW5nICo+ICopbm90aWZpY2F0aW9ucyBX
S19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwog
I2lmIFRBUkdFVF9PU19JUEhPTkUKIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZp
ZXcgZGlkU3RhcnRMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZVdpdGhGaWxlTmFt
ZTooTlNTdHJpbmcgKilmaWxlTmFtZSB1dGk6KE5TU3RyaW5nICopdXRpOwogLSAodm9pZClfd2Vi
VmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRGaW5pc2hMb2FkRm9yUXVpY2tMb29rRG9jdW1l
bnRJbk1haW5GcmFtZTooTlNEYXRhICopZG9jdW1lbnREYXRhOwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLmgJKHJldmlzaW9uIDIyMjU4
MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBy
ZXNvbHZlV2ViR0xMb2FkUG9saWN5KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFdlYkNvcmU6OlVSTCYs
IFdURjo6RnVuY3Rpb248dm9pZChXZWJDb3JlOjpXZWJHTExvYWRQb2xpY3kpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCisgICAgICAgIHZvaWQgY29udGVudFJ1
bGVMaXN0Tm90aWZpY2F0aW9uKFdlYlBhZ2VQcm94eSYsIFdlYkNvcmU6OlVSTCYmLCBWZWN0b3I8
U3RyaW5nPiYmLCBWZWN0b3I8U3RyaW5nPiYmKSBmaW5hbDsKICAgICAgICAgdm9pZCBkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdlYlBhZ2VQcm94eSYsIFJlZjxBUEk6Ok5hdmlnYXRp
b25BY3Rpb24+JiYsIFJlZjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+JiYsIEFQSTo6T2Jq
ZWN0KiB1c2VyRGF0YSkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvblJlc3BvbnNlKFdlYlBhZ2VQcm94eSYsIEFQSTo6TmF2aWdhdGlvblJlc3BvbnNlJiwg
UmVmPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4mJiwgQVBJOjpPYmplY3QqIHVzZXJEYXRh
KSBvdmVycmlkZTsKIApAQCAtMjAxLDYgKzIwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wg
d2ViVmlld0RpZEVuZE5hdmlnYXRpb25HZXN0dXJlV2l0aE5hdmlnYXRpb25Ub0JhY2tGb3J3YXJk
TGlzdEl0ZW0gOiAxOwogICAgICAgICBib29sIHdlYlZpZXdXaWxsU25hcHNob3RCYWNrRm9yd2Fy
ZExpc3RJdGVtIDogMTsKICAgICAgICAgYm9vbCB3ZWJWaWV3TmF2aWdhdGlvbkdlc3R1cmVTbmFw
c2hvdFdhc1JlbW92ZWQgOiAxOworICAgICAgICBib29sIHdlYlZpZXdVUkxDb250ZW50UnVsZUxp
c3RJZGVudGlmaWVyc05vdGlmaWNhdGlvbnMgOiAxOwogI2lmIFVTRShRVUlDS19MT09LKQogICAg
ICAgICBib29sIHdlYlZpZXdEaWRTdGFydExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZy
YW1lIDogMTsKICAgICAgICAgYm9vbCB3ZWJWaWV3RGlkRmluaXNoTG9hZEZvclF1aWNrTG9va0Rv
Y3VtZW50SW5NYWluRnJhbWUgOiAxOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvTmF2aWdhdGlvblN0YXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQkocmV2aXNpb24gMjIyNTgzKQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjgsNiArMTY4LDcgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6OnNldE5hdmlnYXRpb25E
ZWxlZwogICAgIG1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRW5kTmF2aWdh
dGlvbkdlc3R1cmVXaXRoTmF2aWdhdGlvblRvQmFja0ZvcndhcmRMaXN0SXRlbSA9IFtkZWxlZ2F0
ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3RGlkRW5kTmF2aWdhdGlvbkdl
c3R1cmU6d2l0aE5hdmlnYXRpb25Ub0JhY2tGb3J3YXJkTGlzdEl0ZW06KV07CiAgICAgbV9uYXZp
Z2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXaWxsU25hcHNob3RCYWNrRm9yd2FyZExpc3RJ
dGVtID0gW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6d2ls
bFNuYXBzaG90QmFja0ZvcndhcmRMaXN0SXRlbTopXTsKICAgICBtX25hdmlnYXRpb25EZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld05hdmlnYXRpb25HZXN0dXJlU25hcHNob3RXYXNSZW1vdmVkID0gW2Rl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXdEaWRSZW1vdmVOYXZp
Z2F0aW9uR2VzdHVyZVNuYXBzaG90OildOworICAgIG1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3VVJMQ29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnNOb3RpZmljYXRpb25zID0gW2Rl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6VVJMOmNvbnRlbnRS
dWxlTGlzdElkZW50aWZpZXJzOm5vdGlmaWNhdGlvbnM6KV07CiAjaWYgVVNFKFFVSUNLX0xPT0sp
CiAgICAgbV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRTdGFydExvYWRGb3JR
dWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lID0gW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoX3dlYlZpZXc6ZGlkU3RhcnRMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1h
aW5GcmFtZVdpdGhGaWxlTmFtZTp1dGk6KV07CiAgICAgbV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdEaWRGaW5pc2hMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZSA9
IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmRpZEZpbmlz
aExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lOildOwpAQCAtNDU4LDYgKzQ1OSwy
OCBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6CiAgICAgfQogfQog
Cit2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6Y29udGVudFJ1bGVMaXN0
Tm90aWZpY2F0aW9uKFdlYlBhZ2VQcm94eSYsIFdlYkNvcmU6OlVSTCYmIHVybCwgVmVjdG9yPFN0
cmluZz4mJiBsaXN0SWRlbnRpZmllcnMsIFZlY3RvcjxTdHJpbmc+JiYgbm90aWZpY2F0aW9ucykK
K3sKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3VVJMQ29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnNOb3RpZmljYXRpb25zKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlv
blN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGlmICghbmF2aWdhdGlvbkRl
bGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobGlzdElkZW50aWZpZXJzLnNp
emUoKSA9PSBub3RpZmljYXRpb25zLnNpemUoKSk7CisKKyAgICBhdXRvIGlkZW50aWZpZXJzID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Omxpc3RJZGVu
dGlmaWVycy5zaXplKCldKTsKKyAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiBsaXN0SWRlbnRp
ZmllcnMpCisgICAgICAgIFtpZGVudGlmaWVycyBhZGRPYmplY3Q6aWRlbnRpZmllcl07CisKKyAg
ICBhdXRvIG5zTm90aWZpY2F0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdFdpdGhDYXBhY2l0eTpub3RpZmljYXRpb25zLnNpemUoKV0pOworICAgIGZvciAoYXV0byYg
bm90aWZpY2F0aW9uIDogbm90aWZpY2F0aW9ucykKKyAgICAgICAgW25zTm90aWZpY2F0aW9ucyBh
ZGRPYmplY3Q6bm90aWZpY2F0aW9uXTsKKyAgICAKKyAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxl
Z2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0
ZS5tX3dlYlZpZXcgVVJMOnVybCBjb250ZW50UnVsZUxpc3RJZGVudGlmaWVyczppZGVudGlmaWVy
cy5nZXQoKSBub3RpZmljYXRpb25zOm5zTm90aWZpY2F0aW9ucy5nZXQoKV07Cit9CisgICAgCiB2
b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvblJlc3BvbnNlKFdlYlBhZ2VQcm94eSYsIEFQSTo6TmF2aWdhdGlvblJlc3BvbnNlJiBu
YXZpZ2F0aW9uUmVzcG9uc2UsIFJlZjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+JiYgbGlz
dGVuZXIsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkKIHsKICAgICBpZiAoIW1fbmF2aWdhdGlvblN0
YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvblJlc3BvbnNlRGVjaXNpb25IYW5kbGVyKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmNwcAkocmV2aXNpb24gMjIyNTgzKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3NCw2ICs4
NzQsMjAgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNjaGVkdWxlQ29tcG9zaXRpbgogICAgICAg
ICBtX3BhZ2UuZHJhd2luZ0FyZWEoKS0+c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsK
IH0KIAordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihj
b25zdCBVUkwmIHVybCwgY29uc3QgSGFzaFNldDxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiYg
bm90aWZpY2F0aW9uUGFpcnMpCit7CisgICAgVmVjdG9yPFN0cmluZz4gaWRlbnRpZmllcnM7Cisg
ICAgVmVjdG9yPFN0cmluZz4gbm90aWZpY2F0aW9uczsKKyAgICBpZGVudGlmaWVycy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG5vdGlmaWNhdGlvblBhaXJzLnNpemUoKSk7CisgICAgbm90aWZpY2F0
aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5vdGlmaWNhdGlvblBhaXJzLnNpemUoKSk7Cisg
ICAgZm9yIChhdXRvJiBub3RpZmljYXRpb24gOiBub3RpZmljYXRpb25QYWlycykgeworICAgICAg
ICBpZGVudGlmaWVycy51bmNoZWNrZWRBcHBlbmQobm90aWZpY2F0aW9uLmZpcnN0KTsKKyAgICAg
ICAgbm90aWZpY2F0aW9ucy51bmNoZWNrZWRBcHBlbmQobm90aWZpY2F0aW9uLnNlY29uZCk7Cisg
ICAgfQorCisgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q29udGVudFJ1
bGVMaXN0Tm90aWZpY2F0aW9uKHVybCwgaWRlbnRpZmllcnMsIG5vdGlmaWNhdGlvbnMpKTsKK30K
KwogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OmFkanVzdExheWVyRmx1c2hUaHJvdHRsaW5nKExheWVy
Rmx1c2hUaHJvdHRsZVN0YXRlOjpGbGFncyBmbGFncykKIHsKICAgICByZXR1cm4gbV9wYWdlLmRy
YXdpbmdBcmVhKCkgJiYgbV9wYWdlLmRyYXdpbmdBcmVhKCktPmFkanVzdExheWVyRmx1c2hUaHJv
dHRsaW5nKGZsYWdzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDIyMjU4MykK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDYgKzIwOCw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpIGZpbmFsOwogICAgIGJvb2wgYWRqdXN0
TGF5ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZs
YWdzKSBmaW5hbDsKIAorICAgIHZvaWQgY29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKGNvbnN0
IFdlYkNvcmU6OlVSTCYsIGNvbnN0IEhhc2hTZXQ8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4m
KSBmaW5hbDsKKyAgICAKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9N
T05JVE9SKQogICAgIFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0
ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3Qg
ZmluYWw7CiAjZW5kaWYKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjU5OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDE3LTA5LTI3ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFdLQ29udGVudFJ1bGVMaXN0
IG5vdGlmeSBhY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc3MDEzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTA3MzkzNj4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6b3BlcmF0b3I8PCk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OkluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpk
YXRhKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uOjpJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjptYWtlQmFja2VuZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0Yp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6YWN0aW9uc0VxdWFsKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OnNlcXVlbmNlSW5zdGFuY2VzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Oklu
TWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGVGcm9tRmlsdGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uOjp+SW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb24pOiBEZWxldGVkLgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ29udGVudFJ1bGVMaXN0Tm90aWZp
Y2F0aW9uLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9u
RGVsZWdhdGUgX3dlYlZpZXc6VVJMOmNvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzOm5vdGlmaWNh
dGlvbnM6XSk6CisgICAgICAgICgtW0NvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbkRlbGVnYXRl
IHdlYlZpZXc6c3RhcnRVUkxTY2hlbWVUYXNrOl0pOgorICAgICAgICAoLVtDb250ZW50UnVsZUxp
c3ROb3RpZmljYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3OnN0b3BVUkxTY2hlbWVUYXNrOl0pOgorICAg
ICAgICAoLVtDb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3OnJ1bkph
dmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9u
SGFuZGxlcjpdKToKKyAgICAgICAgKG1ha2VXYXJuQ29udGVudFJ1bGVMaXN0KToKKyAgICAgICAg
KFRFU1QpOgorCiAyMDE3LTA5LTI3ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUu
Y29tPgogCiAgICAgICAgIERyYWcgZXZlbnQgRGF0YVRyYW5zZmVyIGhhcyB1bmV4cGVjdGVkIHR5
cGVzICJkeW4uYWg2MmQ0Li4uIgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDIyMjU4MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNiArMjM3LDcgQEAKIAkJNUM5
RTU5NDIxRDNFQjVBQzAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGItc2htIGluIENvcHkg
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUU1OTNGMUQz
RUIxREUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiLXNobSAqLzsgfTsKIAkJNUM5RTU5
NDMxRDNFQjVBQzAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGItd2FsIGluIENvcHkgUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUU1OTQwMUQzRUIx
REUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiLXdhbCAqLzsgfTsKIAkJNUNBMURFQzgx
RjcxRjcwMTAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0ExREVDNzFGNzFGNDA3MDBFNzFCRDMgLyog
SFRUUEhlYWRlckZpZWxkLmNwcCAqLzsgfTsKKwkJNUNBMURFRDkxRjc0QTkxQTAwRTcxQkQzIC8q
IENvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQTFERUQ4MUY3NEE4NzEwMEU3MUJEMyAvKiBDb250ZW50
UnVsZUxpc3ROb3RpZmljYXRpb24ubW0gKi87IH07CiAJCTVDQjE4QkE4MUY1NjQ1RTMwMEVFMjND
NCAvKiBDbGlja0F1dG9GaWxsQnV0dG9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUNCMThCQTcxRjU2NDVCMjAwRUUyM0M0IC8qIENsaWNrQXV0b0Zp
bGxCdXR0b24ubW0gKi87IH07CiAJCTVDQjQwQjRFMUY0Qjk4RDMwMDdEQzdCOSAvKiBVSURlbGVn
YXRlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNC
NDBCNEQxRjRCOThCRTAwN0RDN0I5IC8qIFVJRGVsZWdhdGUubW0gKi87IH07CiAJCTVDRTM1NEQ5
MUU3MERBNUMwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTM1NEQ4MUU3MEQ5QzMwMEJF
RkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLzsgfTsKQEAgLTEzMzgsNiArMTMz
OSw3IEBACiAJCTVDOUU1OTNGMUQzRUIxREUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRi
LXNobSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZp
bGU7IHBhdGggPSAiQXBwbGljYXRpb25DYWNoZS5kYi1zaG0iOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1QzlFNTk0MDFEM0VCMURFMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5k
Yi13YWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBm
aWxlOyBwYXRoID0gIkFwcGxpY2F0aW9uQ2FjaGUuZGItd2FsIjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUNBMURFQzcxRjcxRjQwNzAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVFRQSGVhZGVyRmllbGQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0ExREVEODFGNzRBODcxMDBFNzFC
RDMgLyogQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gQ29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0IxOEJBNzFGNTY0NUIyMDBFRTIzQzQgLyogQ2xp
Y2tBdXRvRmlsbEJ1dHRvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IENsaWNrQXV0b0ZpbGxCdXR0b24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVDQjQwQjREMUY0Qjk4QkUwMDdEQzdCOSAvKiBVSURlbGVnYXRlLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVUlEZWxlZ2F0ZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUNFMzU0RDgxRTcwRDlDMzAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVu
c2lvblN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tD
b250ZW50RXh0ZW5zaW9uU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
OTQ0LDYgKzE5NDYsNyBAQAogCQkJCUExOEFBOENDMUMzRkEyMTgwMDlCMkI5NyAvKiBDb250ZW50
RmlsdGVyaW5nLmggKi8sCiAJCQkJQTE0RkM1ODYxQjg5OTFCNjAwRDEwN0VCIC8qIENvbnRlbnRG
aWx0ZXJpbmcubW0gKi8sCiAJCQkJQTE0RkM1ODkxQjg5OTI3MTAwRDEwN0VCIC8qIENvbnRlbnRG
aWx0ZXJpbmdQbHVnSW4ubW0gKi8sCisJCQkJNUNBMURFRDgxRjc0QTg3MTAwRTcxQkQzIC8qIENv
bnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbi5tbSAqLywKIAkJCQk1QzI5MzY5MTFENUJGNjNFMDBE
RUFCMUUgLyogQ29va2llQWNjZXB0UG9saWN5Lm1tICovLAogCQkJCTk5OTkxMDhBMUYzOTNDOEIw
MDhBRDQ1NSAvKiBDb3B5aW5nLm1tICovLAogCQkJCTJEQzRDRjc2MUQyRDlERDgwMEVDQ0M5NCAv
KiBEYXRhRGV0ZWN0aW9uLm1tICovLApAQCAtMzE2Niw2ICszMTY5LDcgQEAKIAkJCQk3Q0IxODRD
NjFBQTNGMjEwMDA2NkVERkQgLyogQ29udGVudEV4dGVuc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTExNDZBOEQxRDJENzExNTAwMEZFNzEwIC8qIENvbnRlbnRGaWx0ZXJpbmcubW0gaW4g
U291cmNlcyAqLywKIAkJCQlBMTRGQzU4ODFCODk5MUJGMDBEMTA3RUIgLyogQ29udGVudEZpbHRl
cmluZy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTVDQTFERUQ5MUY3NEE5MUEwMEU3MUJEMyAvKiBD
b250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VC
ODFBNDExQTdFMDA0NDdDNEMgLyogQ29udGV4dE1lbnVDYW5Db3B5VVJMLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzdGQjcyOTcxREIyRTgyRjAwRTQxQkU0IC8qIENvbnRleHRNZW51RGVmYXVsdEl0
ZW1zSGF2ZVRhZ3MubW0gaW4gU291cmNlcyAqLywKIAkJCQk4MzQ5RDNDMjFEQjk2RERFMDA0QTlG
NjUgLyogQ29udGV4dE1lbnVEb3dubG9hZC5tbSBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lv
bnMuY3BwCShyZXZpc2lvbiAyMjI1ODMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw4
IEBAIGlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3QKICAgICAgICAgcmV0
dXJuIG9zIDw8ICJBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMiOwogICAgIGNhc2UgQWN0aW9uVHlw
ZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvcjoKICAgICAgICAgcmV0dXJuIG9zIDw8ICJBY3Rpb25U
eXBlOjpDU1NEaXNwbGF5Tm9uZSI7CisgICAgY2FzZSBBY3Rpb25UeXBlOjpOb3RpZnk6CisgICAg
ICAgIHJldHVybiBvcyA8PCAiQWN0aW9uVHlwZTo6Tm90aWZ5IjsKICAgICBjYXNlIEFjdGlvblR5
cGU6Oklnbm9yZVByZXZpb3VzUnVsZXM6CiAgICAgICAgIHJldHVybiBvcyA8PCAiQWN0aW9uVHlw
ZTo6SWdub3JlUHJldmlvdXNSdWxlcyI7CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpNYWtlSFRUUFM6
CkBAIC05Nyw2ICs5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgRVhQRUNUX0VRKGRhdGEudG9wVVJM
RmlsdGVycy5zaXplKCksIDB1bGwpOwogICAgIH0KIAorcHJpdmF0ZToKICAgICB2b2lkIHdyaXRl
U291cmNlKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgfQogCiAgICAgdm9pZCB3cml0ZUFjdGlvbnMo
VmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0ZT4mJiBhY3Rpb25z
LCBib29sIGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbikgZmluYWwKQEAgLTEzNywzNSArMTQw
LDI3IEBAIHB1YmxpYzoKICAgICAgICAgZmluYWxpemVkID0gdHJ1ZTsKICAgICB9CiAKLXByaXZh
dGU6CiAgICAgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYgbV9kYXRhOwogICAgIGJvb2wg
ZmluYWxpemVkIHsgZmFsc2UgfTsKIH07CiAKIGNsYXNzIEluTWVtb3J5Q29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uIDogcHVibGljIENvbnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRl
bnNpb24gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8SW5NZW1vcnlDb21waWxlZENvbnRlbnRF
eHRlbnNpb24+IGNyZWF0ZUZyb21GaWx0ZXIoU3RyaW5nJiYgZmlsdGVyKQorICAgIHN0YXRpYyBS
ZWY8SW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IGNyZWF0ZShTdHJpbmcmJiBmaWx0
ZXIpCiAgICAgewogICAgICAgICBDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGV4dGVuc2lv
bkRhdGE7CiAgICAgICAgIEluTWVtb3J5Q29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50
IGNsaWVudChleHRlbnNpb25EYXRhKTsKICAgICAgICAgYXV0byBjb21waWxlckVycm9yID0gQ29u
dGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChjbGllbnQsIFdURk1vdmUoZmlsdGVyKSk7
Ci0gICAgICAgIGlmIChjb21waWxlckVycm9yKSB7Ci0gICAgICAgICAgICAvLyBDb21waWxpbmcg
c2hvdWxkIGFsd2F5cyBzdWNjZWVkIGhlcmUuIFdlIGhhdmUgb3RoZXIgdGVzdHMgZm9yIGNvbXBp
bGUgZmFpbHVyZXMuCi0gICAgICAgICAgICBFWFBFQ1RfVFJVRShmYWxzZSk7Ci0gICAgICAgIH0K
IAotICAgICAgICByZXR1cm4gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0
ZShXVEZNb3ZlKGV4dGVuc2lvbkRhdGEpKTsKLSAgICB9CisgICAgICAgIC8vIENvbXBpbGluZyBz
aG91bGQgYWx3YXlzIHN1Y2NlZWQgaGVyZS4gV2UgaGF2ZSBvdGhlciB0ZXN0cyBmb3IgY29tcGls
ZSBmYWlsdXJlcy4KKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNvbXBpbGVyRXJyb3IpOwogCi0gICAg
c3RhdGljIFJlZjxJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4gY3JlYXRlKENvbXBp
bGVkQ29udGVudEV4dGVuc2lvbkRhdGEmJiBkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb24oV1RGTW92ZShkYXRh
KSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbk1lbW9yeUNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbihXVEZNb3ZlKGV4dGVuc2lvbkRhdGEpKSk7CiAgICAgfQogCi0gICAgdmlydHVh
bCB+SW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb24oKQotICAgIHsKLSAgICB9CisgICAg
Y29uc3QgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYgZGF0YSgpIHsgcmV0dXJuIG1fZGF0
YTsgfTsKIAorcHJpdmF0ZToKICAgICBjb25zdCBDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXpl
ZEFjdGlvbkJ5dGUqIGFjdGlvbnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2RhdGEuYWN0aW9u
cy5kYXRhKCk7IH0KICAgICB1bnNpZ25lZCBhY3Rpb25zTGVuZ3RoKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9kYXRhLmFjdGlvbnMuc2l6ZSgpOyB9CiAgICAgY29uc3QgQ29udGVudEV4dGVuc2lv
bnM6OkRGQUJ5dGVjb2RlKiBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fZGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnMuZGF0YSgpOyB9
CkBAIC0xNzYsMTEgKzE3MSw5IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCB0b3BVUkxGaWx0ZXJz
Qnl0ZWNvZGVMZW5ndGgoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2RhdGEudG9wVVJMRmlsdGVy
cy5zaXplKCk7IH0KICAgICBib29sIGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fZGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47IH0KIAot
cHJpdmF0ZToKICAgICBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbihDb21waWxlZENv
bnRlbnRFeHRlbnNpb25EYXRhJiYgZGF0YSkKICAgICAgICAgOiBtX2RhdGEoV1RGTW92ZShkYXRh
KSkKLSAgICB7Ci0gICAgfQorICAgIHsgfQogCiAgICAgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YSBtX2RhdGE7CiB9OwpAQCAtMjExLDcgKzIwNCw3IEBAIHN0YXRpYyBSZXNvdXJjZUxvYWRJ
bmZvIHN1YlJlc291cmNlUmVxdWUKIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQgbWFrZUJhY2tlbmQoY29uc3QgY2hhcioganNvbikKIHsKICAgICBBdG9taWNTdHJp
bmc6OmluaXQoKTsKLSAgICBhdXRvIGV4dGVuc2lvbiA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uOjpjcmVhdGVGcm9tRmlsdGVyKGpzb24pOworICAgIGF1dG8gZXh0ZW5zaW9uID0g
SW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShqc29uKTsKICAgICBDb250
ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmQ7CiAgICAgYmFj
a2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJ0ZXN0RmlsdGVyIiwgV1RGTW92ZShleHRlbnNpb24p
KTsKICAgICByZXR1cm4gYmFja2VuZDsKQEAgLTg1Niw4ICs4NDksOCBAQCBURVNUX0YoQ29udGVu
dEV4dGVuc2lvblRlc3QsIFRvcFVSTCkKIAogVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBN
dWx0aXBsZUV4dGVuc2lvbnMpCiB7Ci0gICAgYXV0byBleHRlbnNpb24xID0gSW5NZW1vcnlDb21w
aWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZUZyb21GaWx0ZXIoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJibG9ja19sb2Fk
XCJ9fV0iKTsKLSAgICBhdXRvIGV4dGVuc2lvbjIgPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbjo6Y3JlYXRlRnJvbUZpbHRlcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2Nr
LWNvb2tpZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiYmxvY2tfY29va2llc1wi
fX1dIik7CisgICAgYXV0byBleHRlbnNpb24xID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRl
bnNpb246OmNyZWF0ZSgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dl
clwiOntcInVybC1maWx0ZXJcIjpcImJsb2NrX2xvYWRcIn19XSIpOworICAgIGF1dG8gZXh0ZW5z
aW9uMiA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoIlt7XCJhY3Rp
b25cIjp7XCJ0eXBlXCI6XCJibG9jay1jb29raWVzXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcImJsb2NrX2Nvb2tpZXNcIn19XSIpOwogICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250
ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFja2VuZDsKICAgICBiYWNrZW5kLmFkZENvbnRlbnRFeHRl
bnNpb24oInRlc3RGaWx0ZXIxIiwgV1RGTW92ZShleHRlbnNpb24xKSk7CiAgICAgYmFja2VuZC5h
ZGRDb250ZW50RXh0ZW5zaW9uKCJ0ZXN0RmlsdGVyMiIsIFdURk1vdmUoZXh0ZW5zaW9uMikpOwpA
QCAtODY4LDkgKzg2MSw5IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgTXVsdGlwbGVF
eHQKICAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8v
d2Via2l0Lm9yZy9ibG9ja19sb2FkL2Jsb2NrX2Nvb2tpZXMuaHRtbCIpLCB7IENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpCbG9ja0xvYWQgfSwgMik7CiAgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvYmxvY2tfY29va2llcy9ibG9ja19sb2Fk
Lmh0bWwiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29raWVzLCBD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0sIDIpOwogICAgIAotICAg
IGF1dG8gaWdub3JlRXh0ZW5zaW9uMSA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
OjpjcmVhdGVGcm9tRmlsdGVyKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiYmxvY2tfbG9hZFwifX0sIgorICAgIGF1dG8gaWdu
b3JlRXh0ZW5zaW9uMSA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUo
Ilt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJibG9ja19sb2FkXCJ9fSwiCiAgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6
XCJpZ25vcmUtcHJldmlvdXMtcnVsZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
aWdub3JlMVwifX1dIik7Ci0gICAgYXV0byBpZ25vcmVFeHRlbnNpb24yID0gSW5NZW1vcnlDb21w
aWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZUZyb21GaWx0ZXIoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJibG9jay1jb29raWVzXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcImJs
b2NrX2Nvb2tpZXNcIn19LCIKKyAgICBhdXRvIGlnbm9yZUV4dGVuc2lvbjIgPSBJbk1lbW9yeUNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
YmxvY2stY29va2llc1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJibG9ja19jb29r
aWVzXCJ9fSwiCiAgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJpZ25vcmUtcHJldmlv
dXMtcnVsZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiaWdub3JlMlwifX1dIik7
CiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBiYWNrZW5k
V2l0aElnbm9yZTsKICAgICBiYWNrZW5kV2l0aElnbm9yZS5hZGRDb250ZW50RXh0ZW5zaW9uKCJ0
ZXN0RmlsdGVyMSIsIFdURk1vdmUoaWdub3JlRXh0ZW5zaW9uMSkpOwpAQCAtODg0LDYgKzg3Nywx
MjEgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBNdWx0aXBsZUV4dAogICAgIHRlc3RS
ZXF1ZXN0KGJhY2tlbmRXaXRoSWdub3JlLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Vi
a2l0Lm9yZy9ibG9ja19sb2FkL2Jsb2NrX2Nvb2tpZXMvaWdub3JlMS9pZ25vcmUyLmh0bWwiKSwg
eyB9LCAwKTsKIH0KIAorc3RhdGljIGJvb2wgYWN0aW9uc0VxdWFsKGNvbnN0IHN0ZDo6cGFpcjxW
ZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4sIFZlY3RvcjxTdHJpbmc+
PiYgYWN0dWFsLCBWZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4mJiBl
eHBlY3RlZCwgYm9vbCBpZ25vcmVQcmV2aW91c1J1bGVzID0gZmFsc2UpCit7CisgICAgaWYgKGln
bm9yZVByZXZpb3VzUnVsZXMpIHsKKyAgICAgICAgaWYgKGFjdHVhbC5zZWNvbmQuc2l6ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChhY3R1
YWwuc2Vjb25kLnNpemUoKSAhPSAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpZiAoYWN0dWFsLnNlY29uZFswXSAhPSAidGVzdEZpbHRlciIpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGFjdHVhbC5maXJzdC5zaXplKCkgIT0gZXhwZWN0
ZWQuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBleHBlY3RlZC5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoYWN0dWFsLmZpcnN0W2ld
LnR5cGUoKSAhPSBleHBlY3RlZFtpXS50eXBlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmIChhY3R1YWwuZmlyc3RbaV0uc3RyaW5nQXJndW1lbnQoKSAhPSBleHBlY3Rl
ZFtpXS5zdHJpbmdBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIGpzb25XaXRoU3RyaW5n
c1RvQ29tYmluZSA9ICJbIgorICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJub3RpZnlcIixc
Im5vdGlmaWNhdGlvblwiOlwiQUFBXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIkFc
In19LCIKKyAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwibm90aWZ5XCIsXCJub3RpZmljYXRp
b25cIjpcIkFBQVwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJBXCJ9fSwiCisgICAg
IntcImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6XCJCQkJc
In0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiQlwifX0sIgorICAgICJ7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiQ0NDXCJ9LFwi
dHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIkNcIn19LCIKKyAgICAie1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcInNlbGVjdG9yQ29tYmlu
ZWRXaXRoQ1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJDXCJ9fSwiCisgICAgIntc
ImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCJE
RERcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiRFwifX0sIgorICAgICJ7XCJhY3Rp
b25cIjp7XCJ0eXBlXCI6XCJpZ25vcmUtcHJldmlvdXMtcnVsZXNcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiRVwifX0sIgorICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9j
a1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJGXCJ9fSwiCisgICAgIntcImFjdGlv
blwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6XCJHR0dcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiR1wifX0sIgorICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJub3RpZnlcIixcIm5vdGlmaWNhdGlvblwiOlwiR0dHXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIklcIn19LCIKKyAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwibm90aWZ5
XCIsXCJub3RpZmljYXRpb25cIjpcIkFBQVwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJKXCJ9fSwiCisgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZp
Y2F0aW9uXCI6XCJHR0dcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiS1wifX0iCisi
XSI7CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU3RyaW5nUGFyYW1ldGVycykKK3sK
KyAgICBhdXRvIGJhY2tlbmQxID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6
XCJub3RpZnlcIixcIm5vdGlmaWNhdGlvblwiOlwidGVzdG5vdGlmaWNhdGlvblwifSxcInRyaWdn
ZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJtYXRjaGVzXCJ9fV0iKTsKKyAgICBBU1NFUlRfVFJVRShh
Y3Rpb25zRXF1YWwoYmFja2VuZDEuYWN0aW9uc0ZvclJlc291cmNlTG9hZChtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJ0ZXN0Oi8vL21hdGNoZXMiKSksIHt7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpOb3RpZnksICJ0ZXN0bm90aWZpY2F0aW9uIiB9fSkpOworCisgICAgYXV0byBiYWNrZW5k
MiA9IG1ha2VCYWNrZW5kKGpzb25XaXRoU3RyaW5nc1RvQ29tYmluZSk7CisgICAgQVNTRVJUX1RS
VUUoYWN0aW9uc0VxdWFsKGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQobWFpbkRvY3Vt
ZW50UmVxdWVzdCgiaHR0cDovL0EiKSksIHt7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpOb3RpZnksICJBQUEiIH19KSk7CisgICAgQVNTRVJUX1RSVUUoYWN0aW9uc0VxdWFsKGJhY2tl
bmQyLmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQobWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL0Ii
KSksIHt7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpOb3RpZnksICJCQkIiIH19KSk7
CisgICAgQVNTRVJUX1RSVUUoYWN0aW9uc0VxdWFsKGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJj
ZUxvYWQobWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL0MiKSksIHt7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCAiQ0NDLHNlbGVjdG9yQ29t
YmluZWRXaXRoQyIgfX0pKTsKKyAgICBBU1NFUlRfVFJVRShhY3Rpb25zRXF1YWwoYmFja2VuZDIu
YWN0aW9uc0ZvclJlc291cmNlTG9hZChtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vRCIpKSwg
e3sgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3Is
ICJEREQiIH19KSk7CisgICAgQVNTRVJUX1RSVUUoYWN0aW9uc0VxdWFsKGJhY2tlbmQyLmFjdGlv
bnNGb3JSZXNvdXJjZUxvYWQobWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL0UiKSksIHsgfSwg
dHJ1ZSkpOworICAgIEFTU0VSVF9UUlVFKGFjdGlvbnNFcXVhbChiYWNrZW5kMi5hY3Rpb25zRm9y
UmVzb3VyY2VMb2FkKG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9GIikpLCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSkpOworICAgIEFTU0VSVF9UUlVFKGFj
dGlvbnNFcXVhbChiYWNrZW5kMi5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKG1haW5Eb2N1bWVudFJl
cXVlc3QoImh0dHA6Ly9HIikpLCB7eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Tm90
aWZ5LCAiR0dHIiB9fSkpOworICAgIEFTU0VSVF9UUlVFKGFjdGlvbnNFcXVhbChiYWNrZW5kMi5h
Y3Rpb25zRm9yUmVzb3VyY2VMb2FkKG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9HSUsiKSks
IHt7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpOb3RpZnksICJHR0ciIH19KSk7Cisg
ICAgQVNTRVJUX1RSVUUoYWN0aW9uc0VxdWFsKGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJjZUxv
YWQobWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL0FKIikpLCB7CisgICAgICAgIHsgQ29udGVu
dEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6Ok5vdGlmeSwgIkFBQSIgfSwKKyAgICAgICAgeyBDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Tm90aWZ5LCAiQUFBIiB9IC8vIGlnbm9yZS1wcmV2
aW91cy1ydWxlcyBtYWtlcyB0aGUgQUFBIGFjdGlvbnMgbmVlZCB0byBiZSB1bmlxdWUuCisgICAg
fSkpOworICAgIC8vIEZJWE1FOiBBZGQgYSB0ZXN0IHRoYXQgbWF0Y2hlcyBhY3Rpb25zIHdpdGgg
QUFBIHdpdGggaWdub3JlLXByZXZpb3VzLXJ1bGVzIGJldHdlZW4gdGhlbSBhbmQgbWFrZXMgc3Vy
ZSB3ZSBvbmx5IGdldCBvbmUgbm90aWZpY2F0aW9uLgorICAgIEFTU0VSVF9UUlVFKGFjdGlvbnNF
cXVhbChiYWNrZW5kMi5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKG1haW5Eb2N1bWVudFJlcXVlc3Qo
Imh0dHA6Ly9BRSIpKSwgeyB9LCB0cnVlKSk7CisgICAgQVNTRVJUX1RSVUUoYWN0aW9uc0VxdWFs
KGJhY2tlbmQyLmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQobWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0
cDovL0FCQ0RFIikpLCB7IH0sIHRydWUpKTsKKyAgICBBU1NFUlRfVFJVRShhY3Rpb25zRXF1YWwo
YmFja2VuZDIuYWN0aW9uc0ZvclJlc291cmNlTG9hZChtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRw
Oi8vQUJDREVGRyIpKSwgeworICAgICAgICB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpOb3RpZnksICJHR0ciIH0sCisgICAgICAgIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9CisgICAgfSwgdHJ1ZSkpOworICAgIEFTU0VSVF9UUlVFKGFjdGlvbnNF
cXVhbChiYWNrZW5kMi5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKG1haW5Eb2N1bWVudFJlcXVlc3Qo
Imh0dHA6Ly9GRyIpKSwgeworICAgICAgICB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpOb3RpZnksICJHR0ciIH0sCisgICAgICAgIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9CisgICAgfSkpOworICAgIEFTU0VSVF9UUlVFKGFjdGlvbnNFcXVhbChi
YWNrZW5kMi5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6
Ly9FRkciKSksIHsKKyAgICAgICAgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Tm90
aWZ5LCAiR0dHIiB9LAorICAgICAgICB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpC
bG9ja0xvYWQgfQorICAgIH0sIHRydWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGNTdHJpbmdMZW5ndGg+CitzdGF0aWMgaW50IHNlcXVlbmNlSW5zdGFuY2VzKGNvbnN0IFZl
Y3RvcjxUPiB2ZWN0b3IsIGNvbnN0IGNoYXIgKCZzZXF1ZW5jZSlbY1N0cmluZ0xlbmd0aF0pCit7
CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPT0gc2l6ZW9mKGNoYXIpLCAic2VxdWVuY2VJ
bnN0YW5jZXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdmFyaW91cyBieXRlIHZlY3RvcnMuIik7
CisKKyAgICBzaXplX3Qgc2VxdWVuY2VMZW5ndGggPSBjU3RyaW5nTGVuZ3RoIC0gMTsKKyAgICBz
aXplX3QgaW5zdGFuY2VzID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8PSB2ZWN0b3Iu
c2l6ZSgpIC0gc2VxdWVuY2VMZW5ndGg7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBqID0g
MDsgaiA8IHNlcXVlbmNlTGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgIGlmICh2ZWN0b3JbaSAr
IGpdICE9IHNlcXVlbmNlW2pdKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
aWYgKGogPT0gc2VxdWVuY2VMZW5ndGggLSAxKQorICAgICAgICAgICAgICAgIGluc3RhbmNlcysr
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBpbnN0YW5jZXM7Cit9CisKK1RFU1RfRihD
b250ZW50RXh0ZW5zaW9uVGVzdCwgU3RyaW5nQ29tYmluaW5nKQoreworICAgIGF1dG8gZXh0ZW5z
aW9uID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShqc29uV2l0aFN0
cmluZ3NUb0NvbWJpbmUpOworICAgIGNvbnN0IGF1dG8mIGRhdGEgPSBleHRlbnNpb24tPmRhdGEo
KTsKKworICAgIEFTU0VSVF9FUShzZXF1ZW5jZUluc3RhbmNlcyhkYXRhLmFjdGlvbnMsICJBQUEi
KSwgMik7CisgICAgQVNTRVJUX0VRKHNlcXVlbmNlSW5zdGFuY2VzKGRhdGEuYWN0aW9ucywgIkdH
RyIpLCAxKTsKKworICAgIEFTU0VSVF9FUShkYXRhLmFjdGlvbnMuc2l6ZSgpLCA3OHUpOworICAg
IEFTU0VSVF9FUShkYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9ucy5zaXplKCksICAzMTN1KTsK
KyAgICBBU1NFUlRfRVEoZGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnMuc2l6ZSgpLCAgNXUpOwor
ICAgIEFTU0VSVF9FUShkYXRhLnRvcFVSTEZpbHRlcnMuc2l6ZSgpLCAgNXUpOworICAgIEFTU0VS
VF9GQUxTRShkYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbik7CisKKyAgICBhdXRvIGV4
dGVuc2lvbldpdGhGbGFncyA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVh
dGUoIlsiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJub3RpZnlcIixcIm5vdGlm
aWNhdGlvblwiOlwiQUFBXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIkFcIn19LCIK
KyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9u
XCI6XCJBQUFcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiQ1wifX0sIgorICAgICAg
ICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwibm90aWZ5XCIsXCJub3RpZmljYXRpb25cIjpcIkFB
QVwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJBXCIsXCJyZXNvdXJjZS10eXBlXCI6
W1wiZG9jdW1lbnRcIl19fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJub3Rp
ZnlcIixcIm5vdGlmaWNhdGlvblwiOlwiQUFBXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIkFcIixcInJlc291cmNlLXR5cGVcIjpbXCJkb2N1bWVudFwiLFwiZm9udFwiXX19LCIKKyAg
ICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6
XCJBQUFcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiQlwiLFwicmVzb3VyY2UtdHlw
ZVwiOltcImRvY3VtZW50XCJdfX0iCisgICAgIl0iKTsKKyAgICBBU1NFUlRfRVEoc2VxdWVuY2VJ
bnN0YW5jZXMoZXh0ZW5zaW9uV2l0aEZsYWdzLT5kYXRhKCkuYWN0aW9ucywgIkFBQSIpLCAzKTsg
Ly8gVGhlcmUgYXJlIDMgc2V0cyBvZiB1bmlxdWUgZmxhZ3MgZm9yIEFBQSBhY3Rpb25zLgorfQor
CiBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFRlcm1zS25vd25Ub01hdGNoQW55dGhpbmcp
CiB7CiAgICAgYXV0byBiYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJecHJlMS4qcG9zdDEk
XCJ9fSwiCkBAIC0xMzc3LDYgKzE0ODUsMTIgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0
LCBJbnZhbGlkSlNPTgogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5
cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdc
IixcInJlc291cmNlLXR5cGVcIjpmYWxzZX19XSIsCiAgICAgICAgIENvbnRlbnRFeHRlbnNpb25z
OjpDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlckZsYWdzQXJyYXkpOwog
ICAgIAorICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcIm5v
dGlmeVwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKlwifX1dIiwgQ29udGVudEV4
dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWROb3RpZmljYXRpb24p
OworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlm
eVwiLFwibm90aWZpY2F0aW9uXCI6NX0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLipc
In19XSIsIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZh
bGlkTm90aWZpY2F0aW9uKTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJub3RpZnlcIixcIm5vdGlmaWNhdGlvblwiOltdfSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCIuKlwifX1dIiwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNp
b25FcnJvcjo6SlNPTkludmFsaWROb3RpZmljYXRpb24pOworICAgIGNoZWNrQ29tcGlsZXJFcnJv
cigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6XCJo
ZXJlJ3MgbXkgbm90aWZpY2F0aW9uXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4q
XCJ9fV0iLCB7IH0pOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5
cGVcIjpcIm5vdGlmeVwiLFwibm90aWZpY2F0aW9uXCI6XCJcXHUxMjM0XCJ9LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIi4qXCJ9fV0iLCB7IH0pOworICAgIAogICAgIFN0cmluZ0J1aWxk
ZXIgcnVsZXM7CiAgICAgcnVsZXMuYXBwZW5kKCJbIik7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IDQ5OTk5OyArK2kpCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0NvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NvbnRlbnRSdWxlTGlzdE5vdGlmaWNh
dGlvbi5tbQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0NvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgV0tf
QVBJX0VOQUJMRUQKKworI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgPFdl
YktpdC9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0
aW9uRGVsZWdhdGVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVIYW5kbGVy
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXIuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXcuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworc3RhdGlj
IGJvb2wgcmVjZWl2ZWROb3RpZmljYXRpb247CitzdGF0aWMgYm9vbCByZWNlaXZlZEFsZXJ0Owor
CitAaW50ZXJmYWNlIENvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbkRlbGVnYXRlIDogTlNPYmpl
Y3QgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZSwgV0tVUkxTY2hlbWVIYW5kbGVyLCBXS1VJ
RGVsZWdhdGU+CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBDb250ZW50UnVsZUxpc3ROb3RpZmlj
YXRpb25EZWxlZ2F0ZQorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFVS
TDooTlNVUkwgKil1cmwgY29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnM6KE5TQXJyYXk8TlNTdHJp
bmcgKj4gKilpZGVudGlmaWVycyBub3RpZmljYXRpb25zOihOU0FycmF5PE5TU3RyaW5nICo+ICop
bm90aWZpY2F0aW9ucworeworICAgIEVYUEVDVF9TVFJFUSh1cmwuYWJzb2x1dGVTdHJpbmcuVVRG
OFN0cmluZywgImFwaXRlc3Q6Ly8vbWF0Y2giKTsKKyAgICBFWFBFQ1RfRVEoaWRlbnRpZmllcnMu
Y291bnQsIDF1KTsKKyAgICBFWFBFQ1RfU1RSRVEoW2lkZW50aWZpZXJzIG9iamVjdEF0SW5kZXg6
MF0uVVRGOFN0cmluZywgInRlc3RpZGVudGlmaWVyIik7CisgICAgRVhQRUNUX0VRKG5vdGlmaWNh
dGlvbnMuY291bnQsIDF1KTsKKyAgICBFWFBFQ1RfU1RSRVEoW25vdGlmaWNhdGlvbnMgb2JqZWN0
QXRJbmRleDowXS5VVEY4U3RyaW5nLCAidGVzdG5vdGlmaWNhdGlvbiIpOworICAgIHJlY2VpdmVk
Tm90aWZpY2F0aW9uID0gdHJ1ZTsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3
ZWJWaWV3IHN0YXJ0VVJMU2NoZW1lVGFzazooaWQgPFdLVVJMU2NoZW1lVGFzaz4pdXJsU2NoZW1l
VGFzaworeworICAgIFt1cmxTY2hlbWVUYXNrIGRpZFJlY2VpdmVSZXNwb25zZTpbW1tOU1VSTFJl
c3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp1cmxTY2hlbWVUYXNrLnJlcXVlc3QuVVJMIE1JTUVU
eXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1l
Om5pbF0gYXV0b3JlbGVhc2VdXTsKKyAgICBbdXJsU2NoZW1lVGFzayBkaWRGaW5pc2hdOworfQor
CistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc3RvcFVSTFNjaGVtZVRhc2s6
KGlkIDxXS1VSTFNjaGVtZVRhc2s+KXVybFNjaGVtZVRhc2sKK3sKK30KKworLSAodm9pZCl3ZWJW
aWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3Nh
Z2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZy
YW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgor
eworICAgIHJlY2VpdmVkQWxlcnQgPSB0cnVlOworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9
CisKK0BlbmQKKworc3RhdGljIFJldGFpblB0cjxXS0NvbnRlbnRSdWxlTGlzdD4gbWFrZVdhcm5D
b250ZW50UnVsZUxpc3QoKQoreworICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFs
c2U7CisgICAgX19ibG9jayBSZXRhaW5QdHI8V0tDb250ZW50UnVsZUxpc3Q+IGNvbnRlbnRSdWxl
TGlzdDsKKyAgICBbW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxl
Q29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjpAInRlc3RpZGVudGlmaWVyIiBlbmNvZGVkQ29u
dGVudFJ1bGVMaXN0OkAiW3tcImFjdGlvblwiOntcInR5cGVcIjpcIm5vdGlmeVwiLFwibm90aWZp
Y2F0aW9uXCI6XCJ0ZXN0bm90aWZpY2F0aW9uXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIm1hdGNoXCJ9fV0iIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50UnVsZUxpc3QgKmxp
c3QsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKGxpc3QpOworICAgICAg
ICBjb250ZW50UnVsZUxpc3QgPSBsaXN0OworICAgICAgICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsK
KyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcpOwor
ICAgIHJldHVybiBjb250ZW50UnVsZUxpc3Q7Cit9CisKK1RFU1QoV2ViS2l0LCBDb250ZW50UnVs
ZUxpc3ROb3RpZmljYXRpb25NYWluUmVzb3VyY2UpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFk
b3B0TlMoW1tDb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0p
OworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0
aW9uIGFsbG9jXSBpbml0XSk7CisgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJv
bGxlcl0gYWRkQ29udGVudFJ1bGVMaXN0Om1ha2VXYXJuQ29udGVudFJ1bGVMaXN0KCkuZ2V0KCld
OworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6ZGVsZWdhdGUuZ2V0KCkg
Zm9yVVJMU2NoZW1lOkAiYXBpdGVzdCJdOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkg
Y29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgW3dlYlZpZXcgc2V0TmF2
aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiYXBp
dGVzdDovLy9tYXRjaCJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZl
ZE5vdGlmaWNhdGlvbik7Cit9CisKK1RFU1QoV2ViS2l0LCBDb250ZW50UnVsZUxpc3ROb3RpZmlj
YXRpb25TdWJyZXNvdXJjZSkKK3sKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW0NvbnRl
bnRSdWxlTGlzdE5vdGlmaWNhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBj
b25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGlu
aXRdKTsKKyAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRDb250
ZW50UnVsZUxpc3Q6bWFrZVdhcm5Db250ZW50UnVsZUxpc3QoKS5nZXQoKV07CisgICAgW2NvbmZp
Z3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpkZWxlZ2F0ZS5nZXQoKSBmb3JVUkxTY2hlbWU6
QCJhcGl0ZXN0Il07CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdh
dGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3IHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUu
Z2V0KCldOworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOkAiPHNjcmlwdD5mZXRjaCgnbWF0
Y2gnKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKXthbGVydCgnZmV0Y2ggY29tcGxldGUnKX0pPC9z
Y3JpcHQ+IiBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiYXBpdGVzdDovLy8iXV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZEFsZXJ0KTsKKyAgICBFWFBFQ1Rf
VFJVRShyZWNlaXZlZE5vdGlmaWNhdGlvbik7Cit9CisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxF
RAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>