<?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>142422</bug_id>
          
          <creation_ts>2015-03-06 17:46:44 -0800</creation_ts>
          <short_desc>Content extensions need triggers dependent on 3rd party and content type</short_desc>
          <delta_ts>2015-03-11 18:04:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>japhet</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1075176</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-06 17:46:44 -0800</bug_when>
    <thetext>This is one of many ways to implement this.  Some of them are:

1) Prepending non-ascii characters to the url containing the flags.  This is 
2) Putting the flags in the compiled action description.  This would create many false positives that would be filtered out after interpreting.
3) Make many smaller DFAs for each combination of flags.
4) Put the flags in the byte code if needed.  This is similar to 2.

I implemented number 4.  Comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075182</commentid>
    <comment_count>1</comment_count>
      <attachid>248123</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-06 17:50:50 -0800</bug_when>
    <thetext>Created attachment 248123
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075230</commentid>
    <comment_count>2</comment_count>
      <attachid>248123</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-06 21:22:45 -0800</bug_when>
    <thetext>Comment on attachment 248123
Patch

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

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:80
&gt; +    JSValue imagesOnlyObject = triggerObject.get(&amp;exec, Identifier(&amp;exec, &quot;images-only&quot;));
&gt; +    if (imagesOnlyObject &amp;&amp; !exec.hadException() &amp;&amp; imagesOnlyObject.isBoolean())
&gt; +        trigger.imageOnly = imagesOnlyObject.toBoolean(&amp;exec);
&gt; +    
&gt; +    JSValue thirdPartyObject = triggerObject.get(&amp;exec, Identifier(&amp;exec, &quot;third-party&quot;));
&gt; +    if (thirdPartyObject &amp;&amp; !exec.hadException() &amp;&amp; thirdPartyObject.isBoolean())
&gt; +        trigger.thirdPartyOnly = thirdPartyObject.toBoolean(&amp;exec);

I am unconvinced we should handle flags at the top level. Say you have &quot;image-only:true&quot; and &quot;stylesheet-only:true&quot;, what should that match?

Maybe we should have:
    resourceType: [&quot;image&quot;, &quot;stylesheet&quot;, &quot;script&quot;]
    loadType: [&quot;first-party&quot;, &quot;third-party&quot;, &quot;&quot;]

&gt; Source/WebCore/contentextensions/DFABytecode.h:49
&gt; +    // The flags to check before appending (1 byte),

I think we&apos;ll need more than that :)

&gt; Source/WebCore/loader/ResourceLoadInfo.cpp:33
&gt; +ResourceType toResourceType(CachedResource::Type type)

Sam had a clear spec somewhere giving all the types we should expose.

&gt; Source/WebCore/loader/ResourceLoadInfo.cpp:70
&gt; +    // This definition of third party needs to be refined. This is just a proof-of-concept.

My guess is we should the exact same definition we use for cookies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075233</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-06 21:26:28 -0800</bug_when>
    <thetext>Sam, do you know if we defer to some CFNetwork API to know if a request is third party?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075234</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-06 21:34:13 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 248123 [details]
&gt; &gt; Source/WebCore/loader/ResourceLoadInfo.cpp:33
&gt; &gt; +ResourceType toResourceType(CachedResource::Type type)
&gt; 
&gt; Sam had a clear spec somewhere giving all the types we should expose.

https://fetch.spec.whatwg.org/#concept-request-context</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075235</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-06 21:36:36 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Sam, do you know if we defer to some CFNetwork API to know if a request is
&gt; third party?

For third party cookie blocking, yes, but only because that is where cookies are handled. For this, I think we should just do it based on the same origin policy. That means, that if the SecurityOrigin of the resource being requested does not match the SecurityOrigin of the top level frame, it is third party. We can revise the meaning later if necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076425</commentid>
    <comment_count>6</comment_count>
      <attachid>248445</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-11 13:44:47 -0700</bug_when>
    <thetext>Created attachment 248445
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076437</commentid>
    <comment_count>7</comment_count>
      <attachid>248448</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-11 14:26:50 -0700</bug_when>
    <thetext>Created attachment 248448
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076438</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-11 14:28:00 -0700</bug_when>
    <thetext>Rebased patch.  Tests conflicted with http://trac.webkit.org/changeset/181405</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076454</commentid>
    <comment_count>9</comment_count>
      <attachid>248445</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-11 15:00:59 -0700</bug_when>
    <thetext>Comment on attachment 248445
Patch

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

Ok, I may be wrong but from a quick look I think this is incorrect.

Since you are merging the flags into the actions at the machine level, you need to differentiate 2 actions of same type with different conditions.
Say I have 2 rules:
    1) BLock *.swf on thirdparty
    2) Block foobar.pdf always

When you merge the actions in serializeActions(), you must differentiate those two.
Since now you are adding the flags after merging the rules, both filters would be conditional on third-party.

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:49
&gt; +static bool getTypeFlags(ExecState&amp; exec, const JSValue&amp; typeValue, ResourceFlags&amp; flags, uint16_t(*reader)(const String&amp;))

reader -&gt; stringToType?

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:56
&gt; +        WTFLogAlways(&quot;Invalid array&quot;);

We&apos;ll have to improve those error messages. Here is it not clear which array is invalid.

&gt; Source/WebCore/contentextensions/DFABytecode.h:51
&gt; +    AppendConditionalAction,

A bit weird to have &quot;Conditional Action&quot;

AppendActionConditionallyOnFlags
TestFlagsAndAppendAction

?

&gt; Source/WebCore/loader/ResourceLoadInfo.cpp:38
&gt; +    case CachedResource::SVGDocumentResource:

You don&apos;t use the SVGDocument type?

&gt; Source/WebCore/loader/ResourceLoadInfo.cpp:62
&gt; +    case CachedResource::TextTrackResource:
&gt; +        return ResourceType::Media;

Hum, I don&apos;t know if that&apos;s right.

&gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:513
&gt; +    URL mainDocumentURL;
&gt; +    if (frame() &amp;&amp; frame()-&gt;document())
&gt; +        mainDocumentURL = frame()-&gt;document()-&gt;url();

If you are in a embedded frame (e.g. iFrame), shouldn&apos;t mainDocumentURL be the one of the top level frame?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076467</commentid>
    <comment_count>10</comment_count>
      <attachid>248445</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-11 15:48:37 -0700</bug_when>
    <thetext>Comment on attachment 248445
Patch

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

&gt;&gt; Source/WebCore/loader/ResourceLoadInfo.cpp:38
&gt;&gt; +    case CachedResource::SVGDocumentResource:
&gt; 
&gt; You don&apos;t use the SVGDocument type?

Oops.  You&apos;re right.

&gt;&gt; Source/WebCore/loader/ResourceLoadInfo.cpp:62
&gt;&gt; +        return ResourceType::Media;
&gt; 
&gt; Hum, I don&apos;t know if that&apos;s right.

It seems like TextTrackResource would always be related to media, which we would need a separate device to block.

&gt;&gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:513
&gt;&gt; +        mainDocumentURL = frame()-&gt;document()-&gt;url();
&gt; 
&gt; If you are in a embedded frame (e.g. iFrame), shouldn&apos;t mainDocumentURL be the one of the top level frame?

I think so.  Should we also use the mainFrame&apos;s userContentController?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076471</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-11 15:51:02 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Ok, I may be wrong but from a quick look I think this is incorrect.
&gt; 
&gt; Since you are merging the flags into the actions at the machine level, you
&gt; need to differentiate 2 actions of same type with different conditions.
&gt; Say I have 2 rules:
&gt;     1) BLock *.swf on thirdparty
&gt;     2) Block foobar.pdf always
&gt; 
&gt; When you merge the actions in serializeActions(), you must differentiate
&gt; those two.
&gt; Since now you are adding the flags after merging the rules, both filters
&gt; would be conditional on third-party.
The conditionality is in the trigger in the DFA byte code.  In this case it would behave correctly: It would append the block action unconditionally for foobar.pdf and it would append the same block action after testing flags for *.swf.
That is a good test case, though.  I&apos;m including it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076478</commentid>
    <comment_count>12</comment_count>
      <attachid>248460</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-11 15:56:39 -0700</bug_when>
    <thetext>Created attachment 248460
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076516</commentid>
    <comment_count>13</comment_count>
      <attachid>248460</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-11 18:04:14 -0700</bug_when>
    <thetext>Comment on attachment 248460
Patch

Clearing flags on attachment: 248460

Committed r181421: &lt;http://trac.webkit.org/changeset/181421&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076517</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-11 18:04:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248123</attachid>
            <date>2015-03-06 17:50:50 -0800</date>
            <delta_ts>2015-03-11 13:44:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142422-20150306175029.patch</filename>
            <type>text/plain</type>
            <size>30998</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTE5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE1LTAzLTA2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQWRkIDNyZC1wYXJ0eS1vbmx5IGFuZCBpbWFnZS1vbmx5IHRyaWdnZXJzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNDIyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IEFQSSB0
ZXN0cy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oOgorICAg
ICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KToKKyAg
ICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpsb2FkVHJpZ2dlcik6CisgICAgICAg
ICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaDoKKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6YWN0
aW9uc0ZvclJlc291cmNlTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjphY3Rpb25zRm9yVVJMKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaDoKKyAg
ICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6Omluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMpOgorICAg
ICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRB
cHBlbmRDb25kaXRpb25hbEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUpOgorICAgICAgICAqIGNvbnRl
bnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaDoKKyAgICAgICAgKiBjb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXQpOgorICAg
ICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaDoKKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkSW5mby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6dG9SZXNvdXJjZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkSW5mbzo6
aXNUaGlyZFBhcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZEluZm86OmdldEFj
dGlvbkZsYWdzKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkSW5mby5oOiBBZGRlZC4K
KyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSk6CisgICAg
ICAgICogcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VXNlckNvbnRlbnRDb250cm9sbGVyOjphY3Rpb25zRm9yUmVzb3VyY2VMb2FkKToKKyAgICAgICAg
KFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWN0aW9uc0ZvclVSTCk6IERlbGV0ZWQu
CisgICAgICAgICogcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaDoKKwogMjAxNS0wMy0wNiAg
QnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBTZXR0aW5nIHNj
cm9sbC1zbmFwLWRlc2luYXRpb24gdG8gKDEwMCUgMTAwJSkgbG9ja3MgdXAgV2ViS2l0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxODExMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIwNTEsNiArMjA1MSw4IEBACiAJCTUx
RUFDNTY4MTgxNUVEM0UwMDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUVBQzU2NjE4MTVF
RDNFMDA0RjFCQTQgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxRUFDNUIyMTgxNjNGNEUwMDRG
MUJBNCAvKiBJREJSZWNvcmRJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUVBQzVCMDE4MTYzRjRFMDA0RjFCQTQgLyogSURCUmVjb3Jk
SWRlbnRpZmllci5oICovOyB9OwogCQk1MUVDOTI2NTBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0
b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUM5MjVEMENFOTBERDQwMEY5MDMwOCAvKiBKU0N1c3Rv
bVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwICovOyB9OworCQk1MUVFN0IzODFBQTUwQjA1
MDBGOTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFRTdCMzcxQUE1MEIwNTAwRjkyQjIxIC8qIFJlc291cmNl
TG9hZEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk1MUVFN0IzQTFBQTUxMjMxMDBGOTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUVFN0IzOTFBQTUx
MjMxMDBGOTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5jcHAgKi87IH07CiAJCTUxRkEyRDc4MTUy
MTMyQjMwMEMxQkEwQiAvKiBET01XaW5kb3dFeHRlbnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0ZCQTE4MTUxQUE3MUIwMEI1Nzk1OSAvKiBE
T01XaW5kb3dFeHRlbnNpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1MUZCNTUwNDExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZCNTUwMjEx
M0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmggKi87IH07CiAJCTUxRkI1NTA1MTEzRTNF
OTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGQjU1MDMxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VF
dmVudC5jcHAgKi87IH07CkBAIC05MjEwLDYgKzkyMTIsOCBAQAogCQk1MUVBQzU2NjE4MTVFRDNF
MDA0RjFCQTQgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxRUFDNUIwMTgxNjNGNEUwMDRGMUJBNCAvKiBJREJSZWNvcmRJ
ZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlJlY29yZElk
ZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFQzkyNUQwQ0U5MERE
NDAwRjkwMzA4IC8qIEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9y
Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUVFN0IzNzFBQTUw
QjA1MDBGOTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZXNvdXJjZUxvYWRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUxRUU3QjM5MUFBNTEyMzEwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291cmNlTG9hZEluZm8uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUY2QTNENTA2NjNCRjA0MDA0RDI5MTkgLyog
SFRNTENhbnZhc0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTENhbnZhc0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTFGNkEzRDYwNjYz
QkYwNDAwNEQyOTE5IC8qIEhUTUxDYW52YXNFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxDYW52YXNFbGVtZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1MUZC
NTUwMjExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQ2xvc2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjE0MTEsNiArMjE0MTUsOCBAQAogCQkJCTY1NkQzNzI3MEFEQkE1REUwMEE0NTU0RCAv
KiBSZXNvdXJjZUxvYWRlci5oICovLAogCQkJCUQwQTNBNzMwMTQwNUEzOTgwMEZCOEVEMyAvKiBS
ZXNvdXJjZUxvYWRlck9wdGlvbnMuaCAqLywKIAkJCQk1MUFGNTAzNTE2RjEwMEY2MDA5NUIyRTgg
LyogUmVzb3VyY2VMb2FkZXJUeXBlcy5oICovLAorCQkJCTUxRUU3QjM5MUFBNTEyMzEwMEY5MkIy
MSAvKiBSZXNvdXJjZUxvYWRJbmZvLmNwcCAqLywKKwkJCQk1MUVFN0IzNzFBQTUwQjA1MDBGOTJC
MjEgLyogUmVzb3VyY2VMb2FkSW5mby5oICovLAogCQkJCTk3M0UzMjU0MTA4ODNCN0MwMDVCQzQ5
MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5jcHAgKi8sCiAJCQkJOTczRTMyNTUxMDg4M0I3QzAw
NUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmggKi8sCiAJCQkJRDBDRTU4RjYxMjVFNEND
MjAwRjNGMTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgKi8sCkBAIC0yNTA4Miw2ICsy
NTA4OCw3IEBACiAJCQkJMUFFMkFFQzgwQTFEMjk3QjAwQjQyQjI1IC8qIEpTSFRNTFF1b3RlRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMkFCQUQwQTFDRTkwNTAwQjQyQjI1IC8qIEpT
SFRNTFNjcmlwdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRTZFRUE4MEI2MjhEQjMw
MDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUVF
N0IzODFBQTUwQjA1MDBGOTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQUI0Q0I0RUIwQjhCREEzRDAwOUY0MEIwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnRDdXN0
b20uaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDYxNDNDMENENjg5Q0MwMEZBREE3NSAvKiBKU0hU
TUxTb3VyY2VFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzUyRDM4RTE0MTMxMDRCMDAz
MzA1QkQgLyogSlNIVE1MU3BhbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzAwNjUsNiAr
MzAwNzIsNyBAQAogCQkJCUExNDgzMkIxMTg3RjYxRTEwMERBNjNBNiAvKiBXQUtBcHBLaXRTdHVi
cy5tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE0ODMyQjMxODdGNjI5MTAwREE2M0E2IC8qIFdBS0Ns
aXBWaWV3Lm0gaW4gU291cmNlcyAqLywKIAkJCQlBMTQ4MzJCNTE4N0Y2MkZDMDBEQTYzQTYgLyog
V0FLUmVzcG9uZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQk1MUVFN0IzQTFBQTUxMjMxMDBGOTJC
MjEgLyogUmVzb3VyY2VMb2FkSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTQ4MzJCNzE4
N0Y2MzZDMDBEQTYzQTYgLyogV0FLU2Nyb2xsVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUEx
NDgzMkI5MTg3RjYzRDUwMERBNjNBNiAvKiBXQUtWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTE0ODMyQkMxODdGNjQ4RTAwREE2M0E2IC8qIFdBS1dpbmRvdy5tbSBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkFj
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oCShyZXZpc2lvbiAxODExMDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw2ICs0MiwxMSBAQCBlbnVtIGNsYXNzIEFjdGlvblR5cGUgOiB1aW50OF90
IHsKICAgICBJbnZhbGlkQWN0aW9uLAogfTsKIAorZW51bSBjbGFzcyBBY3Rpb25GbGFncyA6IHVp
bnQ4X3QgeworICAgIFRoaXJkUGFydHkgPSAweDEsCisgICAgSW1hZ2UgPSAweDIsCit9OworCiB9
IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbkNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODExMDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGls
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsOSArMTE0LDE1IEBAIFJlZjxDb21waWxlZENv
bnRlbnRFeHRlbnNpb24+IGNvbXBpbGVSdWwKICAgICBmb3IgKHVuc2lnbmVkIHJ1bGVJbmRleCA9
IDA7IHJ1bGVJbmRleCA8IHBhcnNlZFJ1bGVMaXN0LnNpemUoKTsgKytydWxlSW5kZXgpIHsKICAg
ICAgICAgY29uc3QgQ29udGVudEV4dGVuc2lvblJ1bGUmIGNvbnRlbnRFeHRlbnNpb25SdWxlID0g
cGFyc2VkUnVsZUxpc3RbcnVsZUluZGV4XTsKICAgICAgICAgY29uc3QgVHJpZ2dlciYgdHJpZ2dl
ciA9IGNvbnRlbnRFeHRlbnNpb25SdWxlLnRyaWdnZXIoKTsKKyAgICAgICAgdWludDY0X3QgZmxh
Z3MgPSAwOworICAgICAgICBpZiAodHJpZ2dlci5pbWFnZU9ubHkpCisgICAgICAgICAgICBmbGFn
cyB8PSBzdGF0aWNfY2FzdDx1aW50OF90PihBY3Rpb25GbGFnczo6SW1hZ2UpOworICAgICAgICBp
ZiAodHJpZ2dlci50aGlyZFBhcnR5T25seSkKKyAgICAgICAgICAgIGZsYWdzIHw9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KEFjdGlvbkZsYWdzOjpUaGlyZFBhcnR5KTsKICAgICAgICAgQVNTRVJUKHRy
aWdnZXIudXJsRmlsdGVyLmxlbmd0aCgpKTsKIAotICAgICAgICBTdHJpbmcgZXJyb3IgPSB1cmxG
aWx0ZXJQYXJzZXIuYWRkUGF0dGVybih0cmlnZ2VyLnVybEZpbHRlciwgdHJpZ2dlci51cmxGaWx0
ZXJJc0Nhc2VTZW5zaXRpdmUsIGFjdGlvbkxvY2F0aW9uc1tydWxlSW5kZXhdKTsKKyAgICAgICAg
Ly8gSGlnaCBiaXRzIGFyZSB1c2VkIGZvciBmbGFncy4gVGhpcyBzaG91bGQgbWF0Y2ggaG93IHRo
ZXkgYXJlIHVzZWQgaW4gREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUuCisgICAgICAg
IFN0cmluZyBlcnJvciA9IHVybEZpbHRlclBhcnNlci5hZGRQYXR0ZXJuKHRyaWdnZXIudXJsRmls
dGVyLCB0cmlnZ2VyLnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSwgKGZsYWdzIDw8IDMyKSB8IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihhY3Rpb25Mb2NhdGlvbnNbcnVsZUluZGV4XSkpOwogCiAgICAg
ICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2dGKCJFcnJvciB3
aGlsZSBwYXJzaW5nICVzOiAlc1xuIiwgdHJpZ2dlci51cmxGaWx0ZXIudXRmOCgpLmRhdGEoKSwg
ZXJyb3IudXRmOCgpLmRhdGEoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkocmV2aXNp
b24gMTgxMTA5KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvblBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDE0IEBAIHN0YXRp
YyBib29sIGxvYWRUcmlnZ2VyKEV4ZWNTdGF0ZSYgZXhlYywKICAgICBpZiAodXJsRmlsdGVyQ2Fz
ZU9iamVjdCAmJiAhZXhlYy5oYWRFeGNlcHRpb24oKSAmJiB1cmxGaWx0ZXJDYXNlT2JqZWN0Lmlz
Qm9vbGVhbigpKQogICAgICAgICB0cmlnZ2VyLnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSA9IHVy
bEZpbHRlckNhc2VPYmplY3QudG9Cb29sZWFuKCZleGVjKTsKIAorICAgIEpTVmFsdWUgaW1hZ2Vz
T25seU9iamVjdCA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyKCZleGVjLCAi
aW1hZ2VzLW9ubHkiKSk7CisgICAgaWYgKGltYWdlc09ubHlPYmplY3QgJiYgIWV4ZWMuaGFkRXhj
ZXB0aW9uKCkgJiYgaW1hZ2VzT25seU9iamVjdC5pc0Jvb2xlYW4oKSkKKyAgICAgICAgdHJpZ2dl
ci5pbWFnZU9ubHkgPSBpbWFnZXNPbmx5T2JqZWN0LnRvQm9vbGVhbigmZXhlYyk7CisgICAgCisg
ICAgSlNWYWx1ZSB0aGlyZFBhcnR5T2JqZWN0ID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElk
ZW50aWZpZXIoJmV4ZWMsICJ0aGlyZC1wYXJ0eSIpKTsKKyAgICBpZiAodGhpcmRQYXJ0eU9iamVj
dCAmJiAhZXhlYy5oYWRFeGNlcHRpb24oKSAmJiB0aGlyZFBhcnR5T2JqZWN0LmlzQm9vbGVhbigp
KQorICAgICAgICB0cmlnZ2VyLnRoaXJkUGFydHlPbmx5ID0gdGhpcmRQYXJ0eU9iamVjdC50b0Jv
b2xlYW4oJmV4ZWMpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUu
aAkocmV2aXNpb24gMTgxMTA5KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvblJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBu
YW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewogc3RydWN0IFRyaWdnZXIgewogICAgIFN0cmlu
ZyB1cmxGaWx0ZXI7CiAgICAgYm9vbCB1cmxGaWx0ZXJJc0Nhc2VTZW5zaXRpdmUgeyBmYWxzZSB9
OworICAgIGJvb2wgaW1hZ2VPbmx5IHsgZmFsc2UgfTsKKyAgICBib29sIHRoaXJkUGFydHlPbmx5
IHsgZmFsc2UgfTsKIH07CiAgICAgCiBzdHJ1Y3QgQWN0aW9uIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bnNCYWNrZW5kLmNwcAkocmV2aXNpb24gMTgxMTA5KQorKysgU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgi
CiAjaW5jbHVkZSAiREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIlJlc291cmNl
TG9hZEluZm8uaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAKQEAgLTYxLDE2ICs2MiwxNyBAQCB2b2lkIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6
cmVtb3ZlQWxsCiAgICAgbV9jb250ZW50RXh0ZW5zaW9ucy5jbGVhcigpOwogfQogCi1WZWN0b3I8
QWN0aW9uPiBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OmFjdGlvbnNGb3JVUkwoY29uc3QgVVJM
JiB1cmwpCitWZWN0b3I8QWN0aW9uPiBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OmFjdGlvbnNG
b3JSZXNvdXJjZUxvYWQoY29uc3QgUmVzb3VyY2VMb2FkSW5mbyYgcmVzb3VyY2VMb2FkSW5mbykK
IHsKLSAgICBjb25zdCBTdHJpbmcmIHVybFN0cmluZyA9IHVybC5zdHJpbmcoKTsKKyAgICBjb25z
dCBTdHJpbmcmIHVybFN0cmluZyA9IHJlc291cmNlTG9hZEluZm8ucmVzb3VyY2VVUkwuc3RyaW5n
KCk7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSh1cmxTdHJpbmcuY29udGFpbnNPbmx5QVNDSUko
KSwgIkEgZGVjb2RlZCBVUkwgc2hvdWxkIG9ubHkgY29udGFpbiBBU0NJSSBjaGFyYWN0ZXJzLiBU
aGUgbWF0Y2hpbmcgYWxnb3JpdGhtIGFzc3VtZXMgdGhlIGlucHV0IGlzIEFTQ0lJLiIpOwogICAg
IGNvbnN0IENTdHJpbmcmIHVybENTdHJpbmcgPSB1cmxTdHJpbmcudXRmOCgpOwogCiAgICAgVmVj
dG9yPEFjdGlvbj4gYWN0aW9uczsKKyAgICB1aW50OF90IGZsYWdzID0gcmVzb3VyY2VMb2FkSW5m
by5nZXRBY3Rpb25GbGFncygpOwogICAgIGZvciAoYXV0byYgY29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uIDogbV9jb250ZW50RXh0ZW5zaW9ucy52YWx1ZXMoKSkgewogICAgICAgICBERkFCeXRlY29k
ZUludGVycHJldGVyIGludGVycHJldGVyKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi0+Ynl0ZWNv
ZGUoKSk7Ci0gICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgdHJpZ2dlcmVk
QWN0aW9ucyA9IGludGVycHJldGVyLmludGVycHJldCh1cmxDU3RyaW5nKTsKKyAgICAgICAgREZB
Qnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyB0cmlnZ2VyZWRBY3Rpb25zID0gaW50ZXJwcmV0
ZXIuaW50ZXJwcmV0KHVybENTdHJpbmcsIGZsYWdzKTsKICAgICAgICAgCiAgICAgICAgIGlmICgh
dHJpZ2dlcmVkQWN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25l
ZD4gYWN0aW9uTG9jYXRpb25zOwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgJKHJldmlzaW9u
IDE4MTEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25zQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgVVJMOwogCitzdHJ1Y3QgUmVzb3VyY2VMb2FkSW5mbzsKKwog
bmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAogY2xhc3MgQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uOwpAQCAtNTcsNyArNTksNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOwogCiAgICAgLy8gLSBJbnRlcm5hbCBXZWJD
b3JlIEludGVyZmFjZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8QWN0aW9uPiBhY3Rpb25z
Rm9yVVJMKGNvbnN0IFVSTCYpOworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxBY3Rpb24+IGFj
dGlvbnNGb3JSZXNvdXJjZUxvYWQoY29uc3QgUmVzb3VyY2VMb2FkSW5mbyYpOwogCiBwcml2YXRl
OgogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPj4g
bV9jb250ZW50RXh0ZW5zaW9uczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQUJ5dGVjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAkocmV2aXNpb24gMTgxMTA5KQorKysgU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NiArNDQsMTEgQEAgZW51bSBjbGFzcyBERkFCeXRlY29kZUluc3RydWN0aW9uIDogdWludAogICAg
IC8vIEFwcGVuZEFjdGlvbiBoYXMgb25lIGFyZ3VtZW50OgogICAgIC8vIFRoZSBhY3Rpb24gdG8g
YXBwZW5kICg0IGJ5dGVzKS4KICAgICBBcHBlbmRBY3Rpb24sCisgICAgCisgICAgLy8gQXBwZW5k
Q29uZGl0aW9uYWxBY3Rpb24gaGFzIHR3byBhcmd1bWVudHM6CisgICAgLy8gVGhlIGZsYWdzIHRv
IGNoZWNrIGJlZm9yZSBhcHBlbmRpbmcgKDEgYnl0ZSksCisgICAgLy8gVGhlIGFjdGlvbiB0byBh
cHBlbmQgKDRieXRlcykuCisgICAgQXBwZW5kQ29uZGl0aW9uYWxBY3Rpb24sCiAKICAgICAvLyBU
ZXJtaW5hdGUgaGFzIG5vIGFyZ3VtZW50cy4KICAgICBUZXJtaW5hdGUsCkBAIC02MCw2ICs2NSw4
IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGluc3RydWN0aW9uU2l6ZVdpdGgKICAgICAgICAgcmV0
dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50OF90KSArIHNp
emVvZih1bnNpZ25lZCk7CiAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRB
Y3Rpb246CiAgICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBz
aXplb2YodW5zaWduZWQpOworICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5k
Q29uZGl0aW9uYWxBY3Rpb246CisgICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbikgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodW5zaWduZWQpOwogICAgIGNhc2Ug
REZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVybWluYXRlOgogICAgICAgICByZXR1cm4gc2l6ZW9m
KERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pOwogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlv
bjo6SnVtcDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVj
b2RlQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODExMDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTMsNiArNTMsMTQgQEAgdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjpl
bWl0QXBwZW5kQWN0aQogICAgIGFwcGVuZDx1bnNpZ25lZD4obV9ieXRlY29kZSwgYWN0aW9uKTsK
IH0KIAordm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QXBwZW5kQ29uZGl0aW9uYWxBY3Rp
b24odWludDhfdCBmbGFncywgdW5zaWduZWQgYWN0aW9uKQoreworICAgIEFTU0VSVChmbGFncyk7
CisgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb246OkFwcGVuZENvbmRpdGlvbmFsQWN0aW9uKTsKKyAgICBhcHBlbmQ8dWlu
dDhfdD4obV9ieXRlY29kZSwgZmxhZ3MpOworICAgIGFwcGVuZDx1bnNpZ25lZD4obV9ieXRlY29k
ZSwgYWN0aW9uKTsKK30KKwogdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0SnVtcCh1bnNp
Z25lZCBkZXN0aW5hdGlvbk5vZGVJbmRleCkKIHsKICAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0
cnVjdGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcCk7CkBAIC04
MCw4ICs4OCwxMyBAQCB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlKHVuCiAg
ICAgLy8gUmVjb3JkIHN0YXJ0aW5nIGluZGV4IGZvciBsaW5raW5nLgogICAgIG1fbm9kZVN0YXJ0
T2Zmc2V0c1tpbmRleF0gPSBtX2J5dGVjb2RlLnNpemUoKTsKIAotICAgIGZvciAodWludDY0X3Qg
YWN0aW9uIDogbm9kZS5hY3Rpb25zKQotICAgICAgICBlbWl0QXBwZW5kQWN0aW9uKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihhY3Rpb24pKTsKKyAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbiA6IG5vZGUu
YWN0aW9ucykgeworICAgICAgICAvLyBIaWdoIGJpdHMgYXJlIHVzZWQgdG8gc3RvcmUgZmxhZ3Mu
IFNlZSBjb21waWxlUnVsZUxpc3QuCisgICAgICAgIGlmIChhY3Rpb24gJiAweEZGMDAwMDAwMDAp
CisgICAgICAgICAgICBlbWl0QXBwZW5kQ29uZGl0aW9uYWxBY3Rpb24oc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oYWN0aW9uID4+IDMyKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFjdGlvbikpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlbWl0QXBwZW5kQWN0aW9uKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihhY3Rpb24pKTsKKyAgICB9CiAgICAgCiAgICAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2l0
aW9uIDogbm9kZS50cmFuc2l0aW9ucykKICAgICAgICAgZW1pdENoZWNrVmFsdWUodHJhbnNpdGlv
bi5rZXksIHRyYW5zaXRpb24udmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaAkocmV2aXNpb24gMTgx
MTA5KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21w
aWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBjb21waWxlTm9kZSh1bnNpZ25lZCk7CiAKICAgICB2b2lkIGVtaXRBcHBlbmRBY3Rpb24odW5z
aWduZWQpOworICAgIHZvaWQgZW1pdEFwcGVuZENvbmRpdGlvbmFsQWN0aW9uKHVpbnQ4X3QsIHVu
c2lnbmVkKTsKICAgICB2b2lkIGVtaXRKdW1wKHVuc2lnbmVkIGRlc3RpbmF0aW9uTm9kZUluZGV4
KTsKICAgICB2b2lkIGVtaXRDaGVja1ZhbHVlKHVpbnQ4X3QgdmFsdWUsIHVuc2lnbmVkIGRlc3Rp
bmF0aW9uTm9kZUluZGV4KTsKICAgICB2b2lkIGVtaXRUZXJtaW5hdGUoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2Rl
SW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxODExMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNyArNDAsNyBAQCBzdGF0aWMgaW5saW5lIEludFR5cGUgZ2V0Qml0cyhjb25zdCBWZWN0
CiAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IEludFR5cGUqPigmYnl0ZWNvZGVb
aW5kZXhdKTsKIH0KIAotREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlY29k
ZUludGVycHJldGVyOjppbnRlcnByZXQoY29uc3QgQ1N0cmluZyYgdXJsQ1N0cmluZykKK0RGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJw
cmV0KGNvbnN0IENTdHJpbmcmIHVybENTdHJpbmcsIHVpbnQ4X3QgZmxhZ3MpCiB7CiAgICAgY29u
c3QgY2hhciogdXJsID0gdXJsQ1N0cmluZy5kYXRhKCk7CiAgICAgQVNTRVJUKHVybCk7CkBAIC03
Nyw2ICs3NywxMiBAQCBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjCiAg
ICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRz
KERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CiAgICAgICAgICAgICBicmVh
azsKIAorICAgICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZENvbmRpdGlv
bmFsQWN0aW9uOgorICAgICAgICAgICAgaWYgKGZsYWdzICYgZ2V0Qml0czx1aW50OF90PihieXRl
Y29kZSwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpKSkKKyAgICAgICAgICAg
ICAgICBhY3Rpb25zLmFkZChzdGF0aWNfY2FzdDx1aW50NjRfdD4oZ2V0Qml0czx1bnNpZ25lZD4o
Ynl0ZWNvZGUsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSArIHNpemVvZih1
aW50OF90KSkpKTsKKyAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6
ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQ29uZGl0aW9uYWxB
Y3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEludmFsaWQgYnl0ZWNvZGUuCiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVj
b2RlSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmgJKHJldmlzaW9uIDE4MTEwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdHlwZWRl
ZiBIYXNoU2V0PHVpbnQ2NF90LCBEZWZhdWx0SGFzaDx1aW50NjRfdD46Okhhc2gsIFdURjo6VW5z
aWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+PiBBY3Rpb25zOwogICAgIAotICAg
IEFjdGlvbnMgaW50ZXJwcmV0KGNvbnN0IENTdHJpbmcmKTsKKyAgICBBY3Rpb25zIGludGVycHJl
dChjb25zdCBDU3RyaW5nJiwgdWludDhfdCBmbGFncyk7CiAKIHByaXZhdGU6CiAgICAgY29uc3Qg
VmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0ZWNvZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZEluZm8uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkSW5mby5oIgorCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitSZXNvdXJjZVR5cGUgdG9SZXNvdXJjZVR5cGUoQ2FjaGVkUmVz
b3VyY2U6OlR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpNYWluUmVzb3VyY2U6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRG9j
dW1lbnRSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIFJlc291cmNlVHlwZTo6RG9jdW1lbnQ7Cisg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIFJl
c291cmNlVHlwZTo6SW1hZ2U7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVl
dDoKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNo
ZWV0OgorI2VuZGlmCisgICAgICAgIHJldHVybiBSZXNvdXJjZVR5cGU6OlN0eWxlU2hlZXQ7CisK
KyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6CisgICAgICAgIHJldHVybiBSZXNvdXJj
ZVR5cGU6OlNjcmlwdDsKKworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToK
KyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0ZvbnRS
ZXNvdXJjZToKKyNlbmRpZgorICAgICAgICByZXR1cm4gUmVzb3VyY2VUeXBlOjpGb250OworCisg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6CisgICAgICAgIHJldHVybiBSZXNv
dXJjZVR5cGU6OlJhdzsKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpUZXh0VHJhY2tSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIFJlc291cmNlVHlw
ZTo6TWVkaWE7CisjZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9OworfQorICAgIAorYm9vbCBSZXNvdXJjZUxvYWRJbmZvOjppc1RoaXJkUGFy
dHkoKSBjb25zdAoreworICAgIC8vIFRoaXMgZGVmaW5pdGlvbiBvZiB0aGlyZCBwYXJ0eSBuZWVk
cyB0byBiZSByZWZpbmVkLiBUaGlzIGlzIGp1c3QgYSBwcm9vZi1vZi1jb25jZXB0LgorICAgIGlm
ICghbWFpbkRvY3VtZW50VVJMLnN0cmluZygpLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIE5vIG1haW5Eb2N1bWVudFVSTCBwcm9iYWJseSBtZWFucyB3ZSBhcmUgbG9hZGluZyB0
aGUgbWFpbiBkb2N1bWVudCwgd2hpY2ggaXMgbmV2ZXIgdGhpcmQgcGFydHkuCisKKyAgICByZXR1
cm4gcmVzb3VyY2VVUkwucHJvdG9jb2woKSAhPW1haW5Eb2N1bWVudFVSTC5wcm90b2NvbCgpCisg
ICAgICAgIHx8IHJlc291cmNlVVJMLmhvc3QoKSAhPSBtYWluRG9jdW1lbnRVUkwuaG9zdCgpOwor
fQorICAgIAordWludDhfdCBSZXNvdXJjZUxvYWRJbmZvOjpnZXRBY3Rpb25GbGFncygpY29uc3QK
K3sKKyAgICB1aW50OF90IGZsYWdzID0gMDsKKyAgICBpZiAodHlwZSA9PSBSZXNvdXJjZVR5cGU6
OkltYWdlKQorICAgICAgICBmbGFncyB8PSBzdGF0aWNfY2FzdDx1aW50OF90PihDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uRmxhZ3M6OkltYWdlKTsKKyAgICBpZiAoaXNUaGlyZFBhcnR5KCkpCisg
ICAgICAgIGZsYWdzIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25GbGFnczo6VGhpcmRQYXJ0eSk7CisgICAgcmV0dXJuIGZsYWdzOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRJ
bmZvLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFJlc291cmNlTG9hZEluZm9faAorI2RlZmluZSBSZXNvdXJjZUxvYWRJbmZvX2gKKworI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAiVVJMLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworZW51bSBjbGFzcyBSZXNvdXJjZVR5cGUgeworICAgIERvY3VtZW50LAorICAg
IEltYWdlLAorICAgIFN0eWxlU2hlZXQsCisgICAgU2NyaXB0LAorICAgIEZvbnQsCisgICAgUmF3
LAorICAgIFNWR0RvY3VtZW50LAorICAgIE1lZGlhLAorfTsKK1Jlc291cmNlVHlwZSB0b1Jlc291
cmNlVHlwZShDYWNoZWRSZXNvdXJjZTo6VHlwZSk7CisKK3N0cnVjdCBSZXNvdXJjZUxvYWRJbmZv
IHsKKyAgICBVUkwgcmVzb3VyY2VVUkw7CisgICAgVVJMIG1haW5Eb2N1bWVudFVSTDsKKyAgICBS
ZXNvdXJjZVR5cGUgdHlwZTsKKworICAgIGJvb2wgaXNUaGlyZFBhcnR5KCkgY29uc3Q7CisgICAg
dWludDhfdCBnZXRBY3Rpb25GbGFncygpIGNvbnN0OworfTsKKworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBSZXNvdXJjZUxvYWRJbmZvX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkocmV2
aXNpb24gMTgxMTA5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUg
IlBpbmdMb2FkZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKICNpbmNsdWRl
ICJSZW5kZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkSW5mby5oIgogI2luY2x1
ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpAQCAtNDY3LDggKzQ2OCwxNCBAQCBDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gQ2FjCiAjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKICAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gYWN0aW9u
czsKIAorICAgIFVSTCBtYWluRG9jdW1lbnRVUkw7CisgICAgaWYgKGZyYW1lKCkgJiYgZnJhbWUo
KS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgbWFpbkRvY3VtZW50VVJMID0gZnJhbWUoKS0+ZG9jdW1l
bnQoKS0+dXJsKCk7CisgICAgCisgICAgUmVzb3VyY2VMb2FkSW5mbyByZXNvdXJjZUxvYWRJbmZv
ID0geyB1cmwsIG1haW5Eb2N1bWVudFVSTCwgdG9SZXNvdXJjZVR5cGUodHlwZSkgfTsKKyAgICAK
ICAgICBpZiAoZnJhbWUoKSAmJiBmcmFtZSgpLT5wYWdlKCkgJiYgZnJhbWUoKS0+cGFnZSgpLT51
c2VyQ29udGVudENvbnRyb2xsZXIoKSkKLSAgICAgICAgYWN0aW9ucyA9IGZyYW1lKCktPnBhZ2Uo
KS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCktPmFjdGlvbnNGb3JVUkwodXJsKTsKKyAgICAgICAg
YWN0aW9ucyA9IGZyYW1lKCktPnBhZ2UoKS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCktPmFjdGlv
bnNGb3JSZXNvdXJjZUxvYWQocmVzb3VyY2VMb2FkSW5mbyk7CiAKICAgICBmb3IgKGNvbnN0IGF1
dG8mIGFjdGlvbiA6IGFjdGlvbnMpIHsKICAgICAgICAgaWYgKGFjdGlvbi50eXBlKCkgPT0gQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE4MTEwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9h
ZEluZm8uaCIKICNpbmNsdWRlICJVc2VyU2NyaXB0LmgiCiAjaW5jbHVkZSAiVXNlclN0eWxlU2hl
ZXQuaCIKIApAQCAtMjAzLDEyICsyMDQsMTIgQEAgdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6
OnJlbW92ZUFsbFVzZQogICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQtPnJlbW92ZUFsbENv
bnRlbnRFeHRlbnNpb25zKCk7CiB9CiAKLVZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
PiBVc2VyQ29udGVudENvbnRyb2xsZXI6OmFjdGlvbnNGb3JVUkwoY29uc3QgVVJMJiB1cmwpCitW
ZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gVXNlckNvbnRlbnRDb250cm9sbGVyOjph
Y3Rpb25zRm9yUmVzb3VyY2VMb2FkKGNvbnN0IFJlc291cmNlTG9hZEluZm8mIHJlc291cmNlTG9h
ZEluZm8pCiB7CiAgICAgaWYgKCFtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kKQogICAgICAgICBy
ZXR1cm4gVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+KCk7CiAKLSAgICByZXR1cm4g
bV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC0+YWN0aW9uc0ZvclVSTCh1cmwpOworICAgIHJldHVy
biBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLT5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKHJlc291
cmNlTG9hZEluZm8pOwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNl
ckNvbnRlbnRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9V
c2VyQ29udGVudENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTgxMTA5KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiAr
NDUsOCBAQCBjbGFzcyBVc2VyU2NyaXB0OwogY2xhc3MgVXNlclN0eWxlU2hlZXQ7CiBjbGFzcyBV
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yOwogCitzdHJ1Y3QgUmVzb3VyY2VMb2FkSW5mbzsK
KwogbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIGNsYXNzIENvbnRlbnRFeHRlbnNpb25z
QmFja2VuZDsKIHN0cnVjdCBBY3Rpb247CkBAIC04NSw4ICs4Nyw3IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXJDb250ZW50RmlsdGVyKGNvbnN0IFN0cmluZyYg
bmFtZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVBbGxVc2VyQ29udGVudEZpbHRl
cnMoKTsKICAgICAKLSAgICAvLyBGSVhNRTogQ29uc2lkZXIgcHV0dGluZyB0aGlzIChhbmQgb3Ro
ZXIgZnV0dXJlIGNvbnRlbnQgZmlsdGVyIHByZWRpY2F0ZXMpIGluIGl0cyBvd24gY2xhc3MuCi0g
ICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IGFjdGlvbnNGb3JVUkwoY29uc3Qg
VVJMJik7CisgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IGFjdGlvbnNGb3JS
ZXNvdXJjZUxvYWQoY29uc3QgUmVzb3VyY2VMb2FkSW5mbyYpOwogI2VuZGlmCiAKIHByaXZhdGU6
CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxODExOTUpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNCBAQAorMjAxNS0wMy0wNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgorCisgICAgICAgIFtDb250ZW50IEV4dGVuc2lvbnNdIEFkZCAzcmQtcGFydHkt
b25seSBhbmQgaW1hZ2Utb25seSB0cmlnZ2Vycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjQyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRl
bnRGaWx0ZXIuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAg
VXBkYXRlIGFuZCBhZGQgdGVzdHMuCisKIDIwMTUtMDMtMDYgIEJyZW50IEZ1bGdoYW0gIDxiZnVs
Z2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gQ29ycmVjdCBXaW5kb3dzIGJ1aWxkLgpJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRGaWx0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50
RmlsdGVyLmNwcAkocmV2aXNpb24gMTgxMTA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0NvbnRlbnRGaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlTG9hZEluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KQEAgLTY4LDYgKzY5LDggQEAg
cHVibGljOgogfTsKIAogY29uc3QgY2hhciogYmFzaWNGaWx0ZXIgPSAiW3tcImFjdGlvblwiOntc
InR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qd2Via2l0
Lm9yZ1wifX1dIjsKK2NvbnN0IGNoYXIqIGJhc2ljM3JkUGFydHlGaWx0ZXIgPSAiW3tcImFjdGlv
blwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4q
d2Via2l0Lm9yZ1wiLFwidGhpcmQtcGFydHlcIjp0cnVlfX1dIjsKK2NvbnN0IGNoYXIqIGJhc2lj
SW1hZ2VGaWx0ZXIgPSAiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dl
clwiOntcInVybC1maWx0ZXJcIjpcIi4qd2Via2l0Lm9yZ1wiLFwiaW1hZ2VzLW9ubHlcIjp0cnVl
fX1dIjsKIAogVEVTVF9GKENvbnRlbnRGaWx0ZXJUZXN0LCBCYXNpYykKIHsKQEAgLTc1LDEwICs3
OCwzNSBAQCBURVNUX0YoQ29udGVudEZpbHRlclRlc3QsIEJhc2ljKQogCiAgICAgQ29udGVudEV4
dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBiYWNrZW5kOwogICAgIGJhY2tlbmQu
YWRkQ29udGVudEV4dGVuc2lvbigidGVzdEZpbHRlciIsIGV4dGVuc2lvbik7CisKKyAgICBDb250
ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmQzcmRQYXJ0eTsK
KyAgICBiYWNrZW5kM3JkUGFydHkuYWRkQ29udGVudEV4dGVuc2lvbigidGVzdDNyZFBhcnR5Iiwg
Q29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChiYXNpYzNyZFBhcnR5RmlsdGVyKSk7
CisKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tl
bmRJbWFnZTsKKyAgICBiYWNrZW5kSW1hZ2UuYWRkQ29udGVudEV4dGVuc2lvbigidGVzdEltYWdl
IiwgQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChiYXNpY0ltYWdlRmlsdGVyKSk7
CisgICAgCisgICAgUmVzb3VyY2VMb2FkSW5mbyByZXNvdXJjZUxvYWRJbmZvID0geyBVUkwoUGFy
c2VkVVJMU3RyaW5nLCAiaHR0cDovL3dlYmtpdC5vcmcvIiksIFVSTChQYXJzZWRVUkxTdHJpbmcs
ICJodHRwOi8vd2Via2l0Lm9yZy8iKSwgUmVzb3VyY2VUeXBlOjpEb2N1bWVudCB9OworICAgIFJl
c291cmNlTG9hZEluZm8gcmVzb3VyY2VMb2FkSW5mbzNyZFBhcnR5ID0geyBVUkwoUGFyc2VkVVJM
U3RyaW5nLCAiaHR0cDovL3dlYmtpdC5vcmcvIiksIFVSTChQYXJzZWRVUkxTdHJpbmcsICJodHRw
Oi8vbm90X3dlYmtpdC5vcmcvIiksIFJlc291cmNlVHlwZTo6RG9jdW1lbnQgfTsKKyAgICBSZXNv
dXJjZUxvYWRJbmZvIHJlc291cmNlTG9hZEluZm9JbWFnZSA9IHsgVVJMKFBhcnNlZFVSTFN0cmlu
ZywgImh0dHA6Ly93ZWJraXQub3JnL2ltYWdlLnBuZyIpLCBVUkwoUGFyc2VkVVJMU3RyaW5nLCAi
aHR0cDovL3dlYmtpdC5vcmcvIiksIFJlc291cmNlVHlwZTo6SW1hZ2UgfTsKICAgICAKLSAgICBh
dXRvIGFjdGlvbnMgPSBiYWNrZW5kLmFjdGlvbnNGb3JVUkwoVVJMKFBhcnNlZFVSTFN0cmluZywg
Imh0dHA6Ly93ZWJraXQub3JnLyIpKTsKKyAgICBhdXRvIGFjdGlvbnMgPSBiYWNrZW5kLmFjdGlv
bnNGb3JSZXNvdXJjZUxvYWQocmVzb3VyY2VMb2FkSW5mbyk7CisgICAgRVhQRUNUX0VRKDF1LCBh
Y3Rpb25zLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0xvYWQsIGFjdGlvbnNbMF0udHlwZSgpKTsKKworICAgIGFjdGlvbnMgPSBiYWNr
ZW5kM3JkUGFydHkuYWN0aW9uc0ZvclJlc291cmNlTG9hZChyZXNvdXJjZUxvYWRJbmZvM3JkUGFy
dHkpOwogICAgIEVYUEVDVF9FUSgxdSwgYWN0aW9ucy5zaXplKCkpOwogICAgIEVYUEVDVF9FUShD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkLCBhY3Rpb25zWzBdLnR5cGUo
KSk7CisgICAgYWN0aW9ucyA9IGJhY2tlbmQzcmRQYXJ0eS5hY3Rpb25zRm9yUmVzb3VyY2VMb2Fk
KHJlc291cmNlTG9hZEluZm8pOworICAgIEVYUEVDVF9FUSgwdSwgYWN0aW9ucy5zaXplKCkpOwor
CisgICAgYWN0aW9ucyA9IGJhY2tlbmRJbWFnZS5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKHJlc291
cmNlTG9hZEluZm9JbWFnZSk7CisgICAgRVhQRUNUX0VRKDF1LCBhY3Rpb25zLnNpemUoKSk7Cisg
ICAgRVhQRUNUX0VRKENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQsIGFj
dGlvbnNbMF0udHlwZSgpKTsKKyAgICBhY3Rpb25zID0gYmFja2VuZEltYWdlLmFjdGlvbnNGb3JS
ZXNvdXJjZUxvYWQocmVzb3VyY2VMb2FkSW5mbzNyZFBhcnR5KTsKKyAgICBFWFBFQ1RfRVEoMHUs
IGFjdGlvbnMuc2l6ZSgpKTsKKyAgICBhY3Rpb25zID0gYmFja2VuZEltYWdlLmFjdGlvbnNGb3JS
ZXNvdXJjZUxvYWQocmVzb3VyY2VMb2FkSW5mbyk7CisgICAgRVhQRUNUX0VRKDB1LCBhY3Rpb25z
LnNpemUoKSk7CisKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248445</attachid>
            <date>2015-03-11 13:44:47 -0700</date>
            <delta_ts>2015-03-11 15:56:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142422-20150311134423.patch</filename>
            <type>text/plain</type>
            <size>39652</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE1LTAzLTExICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQWRkIHJlc291cmNlIHR5cGUgYW5kIGxvYWQgdHlwZSB0cmlnZ2Vycy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjQyMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyBBUEkgdGVz
dHMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QpOgorICAg
ICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmdldFR5cGVGbGFncyk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6bG9hZFRyaWdnZXIpOgorICAgICAgICAqIGNv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmg6CisgICAgICAgICogY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OmFjdGlvbnNG
b3JSZXNvdXJjZUxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNv
bnRlbnRFeHRlbnNpb25zQmFja2VuZDo6YWN0aW9uc0ZvclVSTCk6IERlbGV0ZWQuCisgICAgICAg
ICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmg6CisgICAgICAg
ICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjppbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKToKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QXBwZW5k
Q29uZGl0aW9uYWxBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKiBjb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0KToKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmg6CisgICAgICAgICog
bG9hZGVyL1Jlc291cmNlTG9hZEluZm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRv
UmVzb3VyY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRSZXNvdXJjZVR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVhZExvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
TG9hZEluZm86OmlzVGhpcmRQYXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRJ
bmZvOjpnZXRSZXNvdXJjZUZsYWdzKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkSW5m
by5oOiBBZGRlZC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNv
dXJjZSk6CisgICAgICAgICogcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyOjphY3Rpb25zRm9yUmVzb3VyY2VMb2Fk
KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWN0aW9uc0ZvclVS
TCk6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaDoKKwog
MjAxNS0wMy0xMSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBb
TWFjXSBVcGRhdGUgZnVsbHNjcmVlbiBwbGFjZWhvbGRlciBVSSB0byB1c2UgVmlicmFuY3kuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxODE0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIwNTMsNiArMjA1Myw4IEBACiAJ
CTUxRUFDNTY4MTgxNUVEM0UwMDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUVBQzU2NjE4
MTVFRDNFMDA0RjFCQTQgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxRUFDNUIyMTgxNjNGNEUw
MDRGMUJBNCAvKiBJREJSZWNvcmRJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUVBQzVCMDE4MTYzRjRFMDA0RjFCQTQgLyogSURCUmVj
b3JkSWRlbnRpZmllci5oICovOyB9OwogCQk1MUVDOTI2NTBDRTkwREQ0MDBGOTAzMDggLyogSlND
dXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUM5MjVEMENFOTBERDQwMEY5MDMwOCAvKiBKU0N1
c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwICovOyB9OworCQk1MUVFN0IzODFBQTUw
QjA1MDBGOTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFRTdCMzcxQUE1MEIwNTAwRjkyQjIxIC8qIFJlc291
cmNlTG9hZEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk1MUVFN0IzQTFBQTUxMjMxMDBGOTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUVFN0IzOTFB
QTUxMjMxMDBGOTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5jcHAgKi87IH07CiAJCTUxRkEyRDc4
MTUyMTMyQjMwMEMxQkEwQiAvKiBET01XaW5kb3dFeHRlbnNpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0ZCQTE4MTUxQUE3MUIwMEI1Nzk1OSAv
KiBET01XaW5kb3dFeHRlbnNpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1MUZCNTUwNDExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZCNTUw
MjExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmggKi87IH07CiAJCTUxRkI1NTA1MTEz
RTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGQjU1MDMxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xv
c2VFdmVudC5jcHAgKi87IH07CkBAIC05MjI0LDYgKzkyMjYsOCBAQAogCQk1MUVBQzU2NjE4MTVF
RDNFMDA0RjFCQTQgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRUFDNUIwMTgxNjNGNEUwMDRGMUJBNCAvKiBJREJSZWNv
cmRJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlJlY29y
ZElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFQzkyNUQwQ0U5
MERENDAwRjkwMzA4IC8qIEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0N1c3RvbVNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUVFN0IzNzFB
QTUwQjA1MDBGOTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZXNvdXJjZUxvYWRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUxRUU3QjM5MUFBNTEyMzEwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291cmNlTG9hZEluZm8uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUY2QTNENTA2NjNCRjA0MDA0RDI5MTkg
LyogSFRNTENhbnZhc0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTENhbnZhc0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTFGNkEzRDYw
NjYzQkYwNDAwNEQyOTE5IC8qIEhUTUxDYW52YXNFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxDYW52YXNFbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1
MUZCNTUwMjExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2xvc2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjE0NDcsNiArMjE0NTEsOCBAQAogCQkJCTY1NkQzNzI3MEFEQkE1REUwMEE0NTU0
RCAvKiBSZXNvdXJjZUxvYWRlci5oICovLAogCQkJCUQwQTNBNzMwMTQwNUEzOTgwMEZCOEVEMyAv
KiBSZXNvdXJjZUxvYWRlck9wdGlvbnMuaCAqLywKIAkJCQk1MUFGNTAzNTE2RjEwMEY2MDA5NUIy
RTggLyogUmVzb3VyY2VMb2FkZXJUeXBlcy5oICovLAorCQkJCTUxRUU3QjM5MUFBNTEyMzEwMEY5
MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmNwcCAqLywKKwkJCQk1MUVFN0IzNzFBQTUwQjA1MDBG
OTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5oICovLAogCQkJCTk3M0UzMjU0MTA4ODNCN0MwMDVC
QzQ5MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5jcHAgKi8sCiAJCQkJOTczRTMyNTUxMDg4M0I3
QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmggKi8sCiAJCQkJRDBDRTU4RjYxMjVF
NENDMjAwRjNGMTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgKi8sCkBAIC0yNTEyNyw2
ICsyNTEzMyw3IEBACiAJCQkJMUFFMkFFQzgwQTFEMjk3QjAwQjQyQjI1IC8qIEpTSFRNTFF1b3Rl
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMkFCQUQwQTFDRTkwNTAwQjQyQjI1IC8q
IEpTSFRNTFNjcmlwdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRTZFRUE4MEI2MjhE
QjMwMDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MUVFN0IzODFBQTUwQjA1MDBGOTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQUI0Q0I0RUIwQjhCREEzRDAwOUY0MEIwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnRD
dXN0b20uaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDYxNDNDMENENjg5Q0MwMEZBREE3NSAvKiBK
U0hUTUxTb3VyY2VFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzUyRDM4RTE0MTMxMDRC
MDAzMzA1QkQgLyogSlNIVE1MU3BhbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzAxMTEs
NiArMzAxMTgsNyBAQAogCQkJCUExNDgzMkIxMTg3RjYxRTEwMERBNjNBNiAvKiBXQUtBcHBLaXRT
dHVicy5tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE0ODMyQjMxODdGNjI5MTAwREE2M0E2IC8qIFdB
S0NsaXBWaWV3Lm0gaW4gU291cmNlcyAqLywKIAkJCQlBMTQ4MzJCNTE4N0Y2MkZDMDBEQTYzQTYg
LyogV0FLUmVzcG9uZGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQk1MUVFN0IzQTFBQTUxMjMxMDBG
OTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTQ4MzJC
NzE4N0Y2MzZDMDBEQTYzQTYgLyogV0FLU2Nyb2xsVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUExNDgzMkI5MTg3RjYzRDUwMERBNjNBNiAvKiBXQUtWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTE0ODMyQkMxODdGNjQ4RTAwREE2M0E2IC8qIFdBS1dpbmRvdy5tbSBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bkNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODE0MDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDggQEAgQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uRGF0YSBjb21waWxlUnVsZQogICAgICAgICBjb25zdCBUcmlnZ2VyJiB0cmlnZ2VyID0g
Y29udGVudEV4dGVuc2lvblJ1bGUudHJpZ2dlcigpOwogICAgICAgICBBU1NFUlQodHJpZ2dlci51
cmxGaWx0ZXIubGVuZ3RoKCkpOwogCi0gICAgICAgIFN0cmluZyBlcnJvciA9IHVybEZpbHRlclBh
cnNlci5hZGRQYXR0ZXJuKHRyaWdnZXIudXJsRmlsdGVyLCB0cmlnZ2VyLnVybEZpbHRlcklzQ2Fz
ZVNlbnNpdGl2ZSwgYWN0aW9uTG9jYXRpb25zW3J1bGVJbmRleF0pOworICAgICAgICAvLyBIaWdo
IGJpdHMgYXJlIHVzZWQgZm9yIGZsYWdzLiBUaGlzIHNob3VsZCBtYXRjaCBob3cgdGhleSBhcmUg
dXNlZCBpbiBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZS4KKyAgICAgICAgU3RyaW5n
IGVycm9yID0gdXJsRmlsdGVyUGFyc2VyLmFkZFBhdHRlcm4odHJpZ2dlci51cmxGaWx0ZXIsIHRy
aWdnZXIudXJsRmlsdGVySXNDYXNlU2Vuc2l0aXZlLCAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRy
aWdnZXIuZmxhZ3MpIDw8IDMyKSB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihhY3Rpb25Mb2NhdGlv
bnNbcnVsZUluZGV4XSkpOwogCiAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKICAgICAg
ICAgICAgIGRhdGFMb2dGKCJFcnJvciB3aGlsZSBwYXJzaW5nICVzOiAlc1xuIiwgdHJpZ2dlci51
cmxGaWx0ZXIudXRmOCgpLmRhdGEoKSwgZXJyb3IudXRmOCgpLmRhdGEoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uUGFyc2VyLmNwcAkocmV2aXNpb24gMTgxNDAzKQorKysgU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDYgKzQ2LDM4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIENvbnRl
bnRFeHRlbnNpb25zIHsKIAorc3RhdGljIGJvb2wgZ2V0VHlwZUZsYWdzKEV4ZWNTdGF0ZSYgZXhl
YywgY29uc3QgSlNWYWx1ZSYgdHlwZVZhbHVlLCBSZXNvdXJjZUZsYWdzJiBmbGFncywgdWludDE2
X3QoKnJlYWRlcikoY29uc3QgU3RyaW5nJikpCit7CisgICAgaWYgKCF0eXBlVmFsdWUuaXNPYmpl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0gdHlw
ZVZhbHVlLnRvT2JqZWN0KCZleGVjKTsKKyAgICBpZiAoIWlzSlNBcnJheShvYmplY3QpKSB7Cisg
ICAgICAgIFdURkxvZ0Fsd2F5cygiSW52YWxpZCBhcnJheSIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgSlNBcnJheSogYXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KG9iamVj
dCk7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gYXJyYXktPmdldEluZGV4KCZleGVjLCBpKTsKKyAgICAgICAgaWYgKGV4ZWMuaGFkRXhj
ZXB0aW9uKCkgfHwgIXZhbHVlKSB7CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIkludmFsaWQg
b2JqZWN0IGluIHRoZSBhcnJheS4iKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBTdHJpbmcgbmFtZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZleGVj
KTsKKyAgICAgICAgdWludDE2X3QgdHlwZSA9IHJlYWRlcihuYW1lKTsKKyAgICAgICAgaWYgKCF0
eXBlKSB7CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIkludmFsaWQgc3RyaW5nIGluIHRoZSBh
cnJheS4iKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGZsYWdz
IHw9IHR5cGU7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorICAgIAogc3RhdGljIGJvb2wg
bG9hZFRyaWdnZXIoRXhlY1N0YXRlJiBleGVjLCBKU09iamVjdCYgcnVsZU9iamVjdCwgVHJpZ2dl
ciYgdHJpZ2dlcikKIHsKICAgICBKU1ZhbHVlIHRyaWdnZXJPYmplY3QgPSBydWxlT2JqZWN0Lmdl
dCgmZXhlYywgSWRlbnRpZmllcigmZXhlYywgInRyaWdnZXIiKSk7CkBAIC02Nyw5ICs5OSwxNyBA
QCBzdGF0aWMgYm9vbCBsb2FkVHJpZ2dlcihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgfQogICAgIHRy
aWdnZXIudXJsRmlsdGVyID0gdXJsRmlsdGVyOwogCi0gICAgSlNWYWx1ZSB1cmxGaWx0ZXJDYXNl
T2JqZWN0ID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXIoJmV4ZWMsICJ1cmwt
ZmlsdGVyLWlzLWNhc2Utc2Vuc2l0aXZlIikpOwotICAgIGlmICh1cmxGaWx0ZXJDYXNlT2JqZWN0
ICYmICFleGVjLmhhZEV4Y2VwdGlvbigpICYmIHVybEZpbHRlckNhc2VPYmplY3QuaXNCb29sZWFu
KCkpCi0gICAgICAgIHRyaWdnZXIudXJsRmlsdGVySXNDYXNlU2Vuc2l0aXZlID0gdXJsRmlsdGVy
Q2FzZU9iamVjdC50b0Jvb2xlYW4oJmV4ZWMpOworICAgIEpTVmFsdWUgdXJsRmlsdGVyQ2FzZVZh
bHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXIoJmV4ZWMsICJ1cmwtZmls
dGVyLWlzLWNhc2Utc2Vuc2l0aXZlIikpOworICAgIGlmICh1cmxGaWx0ZXJDYXNlVmFsdWUgJiYg
IWV4ZWMuaGFkRXhjZXB0aW9uKCkgJiYgdXJsRmlsdGVyQ2FzZVZhbHVlLmlzQm9vbGVhbigpKQor
ICAgICAgICB0cmlnZ2VyLnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSA9IHVybEZpbHRlckNhc2VW
YWx1ZS50b0Jvb2xlYW4oJmV4ZWMpOworCisgICAgSlNWYWx1ZSByZXNvdXJjZVR5cGVWYWx1ZSA9
IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyKCZleGVjLCAicmVzb3VyY2UtdHlw
ZSIpKTsKKyAgICBpZiAocmVzb3VyY2VUeXBlVmFsdWUgJiYgIWV4ZWMuaGFkRXhjZXB0aW9uKCkg
JiYgIWdldFR5cGVGbGFncyhleGVjLCByZXNvdXJjZVR5cGVWYWx1ZSwgdHJpZ2dlci5mbGFncywg
cmVhZFJlc291cmNlVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBKU1Zh
bHVlIGxvYWRUeXBlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcigm
ZXhlYywgImxvYWQtdHlwZSIpKTsKKyAgICBpZiAobG9hZFR5cGVWYWx1ZSAmJiAhZXhlYy5oYWRF
eGNlcHRpb24oKSAmJiAhZ2V0VHlwZUZsYWdzKGV4ZWMsIGxvYWRUeXBlVmFsdWUsIHRyaWdnZXIu
ZmxhZ3MsIHJlYWRMb2FkVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVy
biB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvblJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCShyZXZpc2lvbiAxODE0MDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKIAogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VMb2FkSW5mby5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC00Myw2ICs0NCw3IEBAIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5z
aW9ucyB7CiBzdHJ1Y3QgVHJpZ2dlciB7CiAgICAgU3RyaW5nIHVybEZpbHRlcjsKICAgICBib29s
IHVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSB7IGZhbHNlIH07CisgICAgUmVzb3VyY2VGbGFncyBm
bGFncyB7IDAgfTsKIH07CiAgICAgCiBzdHJ1Y3QgQWN0aW9uIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bnNCYWNrZW5kLmNwcAkocmV2aXNpb24gMTgxNDAzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgi
CiAjaW5jbHVkZSAiREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIlJlc291cmNl
TG9hZEluZm8uaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAKQEAgLTYxLDE2ICs2MiwxNyBAQCB2b2lkIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6
cmVtb3ZlQWxsCiAgICAgbV9jb250ZW50RXh0ZW5zaW9ucy5jbGVhcigpOwogfQogCi1WZWN0b3I8
QWN0aW9uPiBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OmFjdGlvbnNGb3JVUkwoY29uc3QgVVJM
JiB1cmwpCitWZWN0b3I8QWN0aW9uPiBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OmFjdGlvbnNG
b3JSZXNvdXJjZUxvYWQoY29uc3QgUmVzb3VyY2VMb2FkSW5mbyYgcmVzb3VyY2VMb2FkSW5mbykg
Y29uc3QKIHsKLSAgICBjb25zdCBTdHJpbmcmIHVybFN0cmluZyA9IHVybC5zdHJpbmcoKTsKKyAg
ICBjb25zdCBTdHJpbmcmIHVybFN0cmluZyA9IHJlc291cmNlTG9hZEluZm8ucmVzb3VyY2VVUkwu
c3RyaW5nKCk7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSh1cmxTdHJpbmcuY29udGFpbnNPbmx5
QVNDSUkoKSwgIkEgZGVjb2RlZCBVUkwgc2hvdWxkIG9ubHkgY29udGFpbiBBU0NJSSBjaGFyYWN0
ZXJzLiBUaGUgbWF0Y2hpbmcgYWxnb3JpdGhtIGFzc3VtZXMgdGhlIGlucHV0IGlzIEFTQ0lJLiIp
OwogICAgIGNvbnN0IENTdHJpbmcmIHVybENTdHJpbmcgPSB1cmxTdHJpbmcudXRmOCgpOwogCiAg
ICAgVmVjdG9yPEFjdGlvbj4gZmluYWxBY3Rpb25zOworICAgIFJlc291cmNlRmxhZ3MgZmxhZ3Mg
PSByZXNvdXJjZUxvYWRJbmZvLmdldFJlc291cmNlRmxhZ3MoKTsKICAgICBmb3IgKGF1dG8mIGNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbiA6IG1fY29udGVudEV4dGVuc2lvbnMudmFsdWVzKCkpIHsK
ICAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihjb21waWxlZENvbnRl
bnRFeHRlbnNpb24tPmJ5dGVjb2RlKCksIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi0+Ynl0ZWNv
ZGVMZW5ndGgoKSk7Ci0gICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgdHJp
Z2dlcmVkQWN0aW9ucyA9IGludGVycHJldGVyLmludGVycHJldCh1cmxDU3RyaW5nKTsKKyAgICAg
ICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyB0cmlnZ2VyZWRBY3Rpb25zID0gaW50
ZXJwcmV0ZXIuaW50ZXJwcmV0KHVybENTdHJpbmcsIGZsYWdzKTsKICAgICAgICAgCiAgICAgICAg
IGNvbnN0IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zID0gY29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uLT5hY3Rpb25zKCk7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGFjdGlvbnNMZW5ndGgg
PSBjb21waWxlZENvbnRlbnRFeHRlbnNpb24tPmFjdGlvbnNMZW5ndGgoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25zQmFja2VuZC5oCShyZXZpc2lvbiAxODE0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNiArMzcsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFVSTDsKIAorc3Ry
dWN0IFJlc291cmNlTG9hZEluZm87CisKIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAK
IGNsYXNzIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbjsKQEAgLTU3LDcgKzU5LDcgQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsK
IAogICAgIC8vIC0gSW50ZXJuYWwgV2ViQ29yZSBJbnRlcmZhY2UuCi0gICAgV0VCQ09SRV9FWFBP
UlQgVmVjdG9yPEFjdGlvbj4gYWN0aW9uc0ZvclVSTChjb25zdCBVUkwmKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBWZWN0b3I8QWN0aW9uPiBhY3Rpb25zRm9yUmVzb3VyY2VMb2FkKGNvbnN0IFJlc291
cmNlTG9hZEluZm8mKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgUmVm
UHRyPENvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4+IG1fY29udGVudEV4dGVuc2lvbnM7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHJl
dmlzaW9uIDE4MTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5
dGVjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDExIEBAIGVudW0gY2xhc3MgREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbiA6IHVpbnQKICAgICAvLyBBcHBlbmRBY3Rpb24gaGFzIG9uZSBh
cmd1bWVudDoKICAgICAvLyBUaGUgYWN0aW9uIHRvIGFwcGVuZCAoNCBieXRlcykuCiAgICAgQXBw
ZW5kQWN0aW9uLAorICAgIAorICAgIC8vIEFwcGVuZENvbmRpdGlvbmFsQWN0aW9uIGhhcyB0d28g
YXJndW1lbnRzOgorICAgIC8vIFRoZSBmbGFncyB0byBjaGVjayBiZWZvcmUgYXBwZW5kaW5nICgy
IGJ5dGVzKSwKKyAgICAvLyBUaGUgYWN0aW9uIHRvIGFwcGVuZCAoNGJ5dGVzKS4KKyAgICBBcHBl
bmRDb25kaXRpb25hbEFjdGlvbiwKIAogICAgIC8vIFRlcm1pbmF0ZSBoYXMgbm8gYXJndW1lbnRz
LgogICAgIFRlcm1pbmF0ZSwKQEAgLTYwLDYgKzY1LDggQEAgc3RhdGljIGlubGluZSBzaXplX3Qg
aW5zdHJ1Y3Rpb25TaXplV2l0aAogICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKHVuc2lnbmVkKTsKICAgICBjYXNl
IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbjoKICAgICAgICAgcmV0dXJuIHNp
emVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1bnNpZ25lZCk7CisgICAgY2Fz
ZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRDb25kaXRpb25hbEFjdGlvbjoKKyAgICAg
ICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50MTZf
dCkgKyBzaXplb2YodW5zaWduZWQpOwogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6
VGVybWluYXRlOgogICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24p
OwogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcDoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGls
ZXIuY3BwCShyZXZpc2lvbiAxODE0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMs
MTQgQEAgdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QXBwZW5kQWN0aQogICAgIGFwcGVu
ZDx1bnNpZ25lZD4obV9ieXRlY29kZSwgYWN0aW9uKTsKIH0KIAordm9pZCBERkFCeXRlY29kZUNv
bXBpbGVyOjplbWl0QXBwZW5kQ29uZGl0aW9uYWxBY3Rpb24odWludDE2X3QgZmxhZ3MsIHVuc2ln
bmVkIGFjdGlvbikKK3sKKyAgICBBU1NFUlQoZmxhZ3MpOworICAgIGFwcGVuZDxERkFCeXRlY29k
ZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRD
b25kaXRpb25hbEFjdGlvbik7CisgICAgYXBwZW5kPHVpbnQxNl90PihtX2J5dGVjb2RlLCBmbGFn
cyk7CisgICAgYXBwZW5kPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBhY3Rpb24pOworfQorCiB2b2lk
IERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRKdW1wKHVuc2lnbmVkIGRlc3RpbmF0aW9uTm9kZUlu
ZGV4KQogewogICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBE
RkFCeXRlY29kZUluc3RydWN0aW9uOjpKdW1wKTsKQEAgLTgwLDggKzg4LDEzIEBAIHZvaWQgREZB
Qnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUodW4KICAgICAvLyBSZWNvcmQgc3RhcnRpbmcg
aW5kZXggZm9yIGxpbmtpbmcuCiAgICAgbV9ub2RlU3RhcnRPZmZzZXRzW2luZGV4XSA9IG1fYnl0
ZWNvZGUuc2l6ZSgpOwogCi0gICAgZm9yICh1aW50NjRfdCBhY3Rpb24gOiBub2RlLmFjdGlvbnMp
Ci0gICAgICAgIGVtaXRBcHBlbmRBY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFjdGlvbikp
OworICAgIGZvciAodWludDY0X3QgYWN0aW9uIDogbm9kZS5hY3Rpb25zKSB7CisgICAgICAgIC8v
IEhpZ2ggYml0cyBhcmUgdXNlZCB0byBzdG9yZSBmbGFncy4gU2VlIGNvbXBpbGVSdWxlTGlzdC4K
KyAgICAgICAgaWYgKGFjdGlvbiAmIDB4RkZGRjAwMDAwMDAwKQorICAgICAgICAgICAgZW1pdEFw
cGVuZENvbmRpdGlvbmFsQWN0aW9uKHN0YXRpY19jYXN0PHVpbnQxNl90PihhY3Rpb24gPj4gMzIp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0aW9uKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGVtaXRBcHBlbmRBY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFjdGlvbikpOworICAg
IH0KICAgICAKICAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zaXRpb24gOiBub2RlLnRyYW5zaXRp
b25zKQogICAgICAgICBlbWl0Q2hlY2tWYWx1ZSh0cmFuc2l0aW9uLmtleSwgdHJhbnNpdGlvbi52
YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29k
ZUNvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGVDb21waWxlci5oCShyZXZpc2lvbiAxODE0MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDYgKzUyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVOb2RlKHVuc2ln
bmVkKTsKIAogICAgIHZvaWQgZW1pdEFwcGVuZEFjdGlvbih1bnNpZ25lZCk7CisgICAgdm9pZCBl
bWl0QXBwZW5kQ29uZGl0aW9uYWxBY3Rpb24odWludDE2X3QgZmxhZ3MsIHVuc2lnbmVkKTsKICAg
ICB2b2lkIGVtaXRKdW1wKHVuc2lnbmVkIGRlc3RpbmF0aW9uTm9kZUluZGV4KTsKICAgICB2b2lk
IGVtaXRDaGVja1ZhbHVlKHVpbnQ4X3QgdmFsdWUsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTm9kZUlu
ZGV4KTsKICAgICB2b2lkIGVtaXRUZXJtaW5hdGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIu
Y3BwCShyZXZpc2lvbiAxODE0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEs
NyBAQCBzdGF0aWMgaW5saW5lIEludFR5cGUgZ2V0Qml0cyhjb25zdCBERkFCCiAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PGNvbnN0IEludFR5cGUqPigmYnl0ZWNvZGVbaW5kZXhdKTsKIH0K
IAotREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlY29kZUludGVycHJldGVy
OjppbnRlcnByZXQoY29uc3QgQ1N0cmluZyYgdXJsQ1N0cmluZykKK0RGQUJ5dGVjb2RlSW50ZXJw
cmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0KGNvbnN0IENT
dHJpbmcmIHVybENTdHJpbmcsIHVpbnQxNl90IGZsYWdzKQogewogICAgIGNvbnN0IGNoYXIqIHVy
bCA9IHVybENTdHJpbmcuZGF0YSgpOwogICAgIEFTU0VSVCh1cmwpOwpAQCAtNzksNiArNzksMTIg
QEAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlYwogICAgICAgICAgICAg
cHJvZ3JhbUNvdW50ZXIgKz0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAg
ICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRDb25kaXRpb25hbEFjdGlvbjoK
KyAgICAgICAgICAgIGlmIChmbGFncyAmIGdldEJpdHM8dWludDE2X3Q+KG1fYnl0ZWNvZGUsIG1f
Ynl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSkpCisg
ICAgICAgICAgICAgICAgYWN0aW9ucy5hZGQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdldEJpdHM8
dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsg
c2l6ZW9mKERGQUJ5dGVjb2RlKSArIHNpemVvZih1aW50MTZfdCkpKSk7CisgICAgICAgICAgICBw
cm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246OkFwcGVuZENvbmRpdGlvbmFsQWN0aW9uKTsKKyAgICAgICAgICAgIGJyZWFr
OworCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOyAvLyBJbnZhbGlkIGJ5dGVjb2RlLgogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnBy
ZXRlci5oCShyZXZpc2lvbiAxODE0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3
LDcgQEAgcHVibGljOgogICAgIAogICAgIHR5cGVkZWYgSGFzaFNldDx1aW50NjRfdCwgRGVmYXVs
dEhhc2g8dWludDY0X3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PHVpbnQ2NF90Pj4gQWN0aW9uczsKICAgICAKLSAgICBBY3Rpb25zIGludGVycHJldChjb25zdCBD
U3RyaW5nJik7CisgICAgQWN0aW9ucyBpbnRlcnByZXQoY29uc3QgQ1N0cmluZyYsIHVpbnQxNl90
IGZsYWdzKTsKIAogcHJpdmF0ZToKICAgICBjb25zdCBERkFCeXRlY29kZSogbV9ieXRlY29kZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRJbmZvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkSW5mby5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkSW5mby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkSW5mby5oIgorCisjaW5jbHVkZSAiQ29udGVu
dEV4dGVuc2lvbkFjdGlvbnMuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1Jlc291cmNlVHlwZSB0b1Jlc291cmNlVHlwZShDYWNoZWRSZXNv
dXJjZTo6VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6Ok1haW5SZXNvdXJjZToKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdEb2N1
bWVudFJlc291cmNlOgorICAgICAgICByZXR1cm4gUmVzb3VyY2VUeXBlOjpEb2N1bWVudDsKKyAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgorICAgICAgICByZXR1cm4gUmVz
b3VyY2VUeXBlOjpJbWFnZTsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0
OgorI2lmIEVOQUJMRShYU0xUKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hl
ZXQ6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIFJlc291cmNlVHlwZTo6U3R5bGVTaGVldDsKKwor
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKKyAgICAgICAgcmV0dXJuIFJlc291cmNl
VHlwZTo6U2NyaXB0OworCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgor
I2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRm9udFJl
c291cmNlOgorI2VuZGlmCisgICAgICAgIHJldHVybiBSZXNvdXJjZVR5cGU6OkZvbnQ7CisKKyAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIFJlc291
cmNlVHlwZTo6UmF3OworCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OlRleHRUcmFja1Jlc291cmNlOgorICAgICAgICByZXR1cm4gUmVzb3VyY2VUeXBl
OjpNZWRpYTsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH07Cit9CisKK3VpbnQxNl90IHJlYWRSZXNvdXJjZVR5cGUoY29uc3QgU3RyaW5n
JiBuYW1lKQoreworICAgIGlmIChuYW1lID09ICJkb2N1bWVudCIpCisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1aW50MTZfdD4oUmVzb3VyY2VUeXBlOjpEb2N1bWVudCk7CisgICAgaWYgKG5h
bWUgPT0gImltYWdlIikKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90PihSZXNv
dXJjZVR5cGU6OkltYWdlKTsKKyAgICBpZiAobmFtZSA9PSAic3R5bGUtc2hlZXQiKQorICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KFJlc291cmNlVHlwZTo6U3R5bGVTaGVldCk7
CisgICAgaWYgKG5hbWUgPT0gInNjcmlwdCIpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
aW50MTZfdD4oUmVzb3VyY2VUeXBlOjpTY3JpcHQpOworICAgIGlmIChuYW1lID09ICJmb250IikK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90PihSZXNvdXJjZVR5cGU6OkZvbnQp
OworICAgIGlmIChuYW1lID09ICJyYXciKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWlu
dDE2X3Q+KFJlc291cmNlVHlwZTo6UmF3KTsKKyAgICBpZiAobmFtZSA9PSAic3ZnLWRvY3VtZW50
IikKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90PihSZXNvdXJjZVR5cGU6OlNW
R0RvY3VtZW50KTsKKyAgICBpZiAobmFtZSA9PSAibWVkaWEiKQorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dWludDE2X3Q+KFJlc291cmNlVHlwZTo6TWVkaWEpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1aW50MTZfdD4oUmVzb3VyY2VUeXBlOjpJbnZhbGlkKTsKK30KKwordWludDE2X3Qg
cmVhZExvYWRUeXBlKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiZmly
c3QtcGFydHkiKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KExvYWRUeXBl
OjpGaXJzdFBhcnR5KTsKKyAgICBpZiAobmFtZSA9PSAidGhpcmQtcGFydHkiKQorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KExvYWRUeXBlOjpUaGlyZFBhcnR5KTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KExvYWRUeXBlOjpJbnZhbGlkKTsKK30KKworYm9v
bCBSZXNvdXJjZUxvYWRJbmZvOjppc1RoaXJkUGFydHkoKSBjb25zdAoreworICAgIFJlZjxTZWN1
cml0eU9yaWdpbj4gbWFpbkRvY3VtZW50U2VjdXJpdHlPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlKG1haW5Eb2N1bWVudFVSTCk7CisgICAgUmVmPFNlY3VyaXR5T3JpZ2luPiByZXNvdXJj
ZVNlY3VyaXR5T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShyZXNvdXJjZVVSTCk7CisK
KyAgICByZXR1cm4gIW1haW5Eb2N1bWVudFNlY3VyaXR5T3JpZ2luLT5jYW5BY2Nlc3MoJnJlc291
cmNlU2VjdXJpdHlPcmlnaW4uZ2V0KCkpOworfQorICAgIAorUmVzb3VyY2VGbGFncyBSZXNvdXJj
ZUxvYWRJbmZvOjpnZXRSZXNvdXJjZUZsYWdzKCkgY29uc3QKK3sKKyAgICBSZXNvdXJjZUZsYWdz
IGZsYWdzID0gMDsKKyAgICBBU1NFUlQodHlwZSAhPSBSZXNvdXJjZVR5cGU6OkludmFsaWQpOwor
ICAgIGZsYWdzIHw9IHN0YXRpY19jYXN0PFJlc291cmNlRmxhZ3M+KHR5cGUpOworICAgIGZsYWdz
IHw9IGlzVGhpcmRQYXJ0eSgpID8gc3RhdGljX2Nhc3Q8UmVzb3VyY2VGbGFncz4oTG9hZFR5cGU6
OlRoaXJkUGFydHkpIDogc3RhdGljX2Nhc3Q8UmVzb3VyY2VGbGFncz4oTG9hZFR5cGU6OkZpcnN0
UGFydHkpOworICAgIHJldHVybiBmbGFnczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZEluZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkSW5mby5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZEluZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZXNvdXJjZUxvYWRJ
bmZvX2gKKyNkZWZpbmUgUmVzb3VyY2VMb2FkSW5mb19oCisKKyNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZS5oIgorI2luY2x1ZGUgIlVSTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0g
Y2xhc3MgUmVzb3VyY2VUeXBlIDogdWludDE2X3QgeworICAgIEludmFsaWQgPSAweDAwMDAsCisg
ICAgRG9jdW1lbnQgPSAweDAwMDEsCisgICAgSW1hZ2UgPSAweDAwMDIsCisgICAgU3R5bGVTaGVl
dCA9IDB4MDAwNCwKKyAgICBTY3JpcHQgPSAweDAwMDgsCisgICAgRm9udCA9IDB4MDAxMCwKKyAg
ICBSYXcgPSAweDAwMjAsCisgICAgU1ZHRG9jdW1lbnQgPSAweDAwNDAsCisgICAgTWVkaWEgPSAw
eDAwODAsCit9OworCitlbnVtIGNsYXNzIExvYWRUeXBlIDogdWludDE2X3QgeworICAgIEludmFs
aWQgPSAweDAwMDAsCisgICAgRmlyc3RQYXJ0eSA9IDB4MDEwMCwKKyAgICBUaGlyZFBhcnR5ID0g
MHgwMjAwLAorfTsKKwordHlwZWRlZiB1aW50MTZfdCBSZXNvdXJjZUZsYWdzOworCitSZXNvdXJj
ZVR5cGUgdG9SZXNvdXJjZVR5cGUoQ2FjaGVkUmVzb3VyY2U6OlR5cGUpOwordWludDE2X3QgcmVh
ZFJlc291cmNlVHlwZShjb25zdCBTdHJpbmcmKTsKK3VpbnQxNl90IHJlYWRMb2FkVHlwZShjb25z
dCBTdHJpbmcmKTsKKworc3RydWN0IFJlc291cmNlTG9hZEluZm8geworICAgIFVSTCByZXNvdXJj
ZVVSTDsKKyAgICBVUkwgbWFpbkRvY3VtZW50VVJMOworICAgIFJlc291cmNlVHlwZSB0eXBlOwor
CisgICAgYm9vbCBpc1RoaXJkUGFydHkoKSBjb25zdDsKKyAgICBSZXNvdXJjZUZsYWdzIGdldFJl
c291cmNlRmxhZ3MoKSBjb25zdDsKK307CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gUmVzb3VyY2VMb2FkSW5mb19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDE4MTQw
MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJQaW5nTG9hZGVy
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxl
bWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZEluZm8uaCIKICNpbmNsdWRlICJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAgLTUwNyw4ICs1MDgsMTQgQEAgQ2FjaGVkUmVzb3VyY2VI
YW5kbGU8Q2FjaGVkUmVzb3VyY2U+IENhYwogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
CiAgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IGFjdGlvbnM7CiAKKyAgICBV
UkwgbWFpbkRvY3VtZW50VVJMOworICAgIGlmIChmcmFtZSgpICYmIGZyYW1lKCktPmRvY3VtZW50
KCkpCisgICAgICAgIG1haW5Eb2N1bWVudFVSTCA9IGZyYW1lKCktPmRvY3VtZW50KCktPnVybCgp
OworICAgIAorICAgIFJlc291cmNlTG9hZEluZm8gcmVzb3VyY2VMb2FkSW5mbyA9IHsgdXJsLCBt
YWluRG9jdW1lbnRVUkwsIHRvUmVzb3VyY2VUeXBlKHR5cGUpIH07CisgICAgCiAgICAgaWYgKGZy
YW1lKCkgJiYgZnJhbWUoKS0+cGFnZSgpICYmIGZyYW1lKCktPnBhZ2UoKS0+dXNlckNvbnRlbnRD
b250cm9sbGVyKCkpCi0gICAgICAgIGFjdGlvbnMgPSBmcmFtZSgpLT5wYWdlKCktPnVzZXJDb250
ZW50Q29udHJvbGxlcigpLT5hY3Rpb25zRm9yVVJMKHVybCk7CisgICAgICAgIGFjdGlvbnMgPSBm
cmFtZSgpLT5wYWdlKCktPnVzZXJDb250ZW50Q29udHJvbGxlcigpLT5hY3Rpb25zRm9yUmVzb3Vy
Y2VMb2FkKHJlc291cmNlTG9hZEluZm8pOwogCiAgICAgYm9vbCB3aWxsQmxvY2tMb2FkID0gZmFs
c2U7CiAgICAgZm9yIChjb25zdCBhdXRvJiBhY3Rpb24gOiBhY3Rpb25zKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAx
ODE0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIk1haW5GcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZXNv
dXJjZUxvYWRJbmZvLmgiCiAjaW5jbHVkZSAiVXNlclNjcmlwdC5oIgogI2luY2x1ZGUgIlVzZXJT
dHlsZVNoZWV0LmgiCiAKQEAgLTIwMywxMiArMjA0LDEyIEBAIHZvaWQgVXNlckNvbnRlbnRDb250
cm9sbGVyOjpyZW1vdmVBbGxVc2UKICAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLT5yZW1v
dmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOwogfQogCi1WZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6
OkFjdGlvbj4gVXNlckNvbnRlbnRDb250cm9sbGVyOjphY3Rpb25zRm9yVVJMKGNvbnN0IFVSTCYg
dXJsKQorVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24+IFVzZXJDb250ZW50Q29udHJv
bGxlcjo6YWN0aW9uc0ZvclJlc291cmNlTG9hZChjb25zdCBSZXNvdXJjZUxvYWRJbmZvJiByZXNv
dXJjZUxvYWRJbmZvKQogewogICAgIGlmICghbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZCkKICAg
ICAgICAgcmV0dXJuIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPigpOwogCi0gICAg
cmV0dXJuIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQtPmFjdGlvbnNGb3JVUkwodXJsKTsKKyAg
ICByZXR1cm4gbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC0+YWN0aW9uc0ZvclJlc291cmNlTG9h
ZChyZXNvdXJjZUxvYWRJbmZvKTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHJldmlzaW9uIDE4MTQwMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDYgKzQ0LDcgQEAgY2xhc3MgVVJMOwogY2xhc3MgVXNlclNjcmlwdDsKIGNsYXNzIFVzZXJT
dHlsZVNoZWV0OwogY2xhc3MgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjsKK3N0cnVjdCBS
ZXNvdXJjZUxvYWRJbmZvOwogCiBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewogY2xhc3Mg
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOwpAQCAtODUsOCArODYsNyBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJp
bmcmIG5hbWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQWxsVXNlckNvbnRlbnRF
eHRlbnNpb25zKCk7CiAgICAgCi0gICAgLy8gRklYTUU6IENvbnNpZGVyIHB1dHRpbmcgdGhpcyAo
YW5kIG90aGVyIGZ1dHVyZSBjb250ZW50IGV4dGVuc2lvbiBwcmVkaWNhdGVzKSBpbiBpdHMgb3du
IGNsYXNzLgotICAgIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPiBhY3Rpb25zRm9y
VVJMKGNvbnN0IFVSTCYpOworICAgIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPiBh
Y3Rpb25zRm9yUmVzb3VyY2VMb2FkKGNvbnN0IFJlc291cmNlTG9hZEluZm8mKTsKICNlbmRpZgog
CiBwcml2YXRlOgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gMTgxNDAzKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTUtMDMtMTEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBbQ29udGVudCBFeHRlbnNpb25zXSBBZGQg
cmVzb3VyY2UgdHlwZSBhbmQgbG9hZCB0eXBlIHRyaWdnZXJzLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNDIyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQ29udGVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6dGVzdFJl
cXVlc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6bWFpbkRvY3VtZW50UmVxdWVzdCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
dGVzdFVSTCk6IERlbGV0ZWQuCisKIDIwMTUtMDMtMTEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFkZCBzdXBwb3J0IGZvciBoYW5k
bGluZyBUTFMgZXJyb3JzIHRvIE1pbmlCcm93c2VyCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAJKHJldmlz
aW9uIDE4MTQwMykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50
RXh0ZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRF
eHRlbnNpb25zQmFja2VuZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkSW5mby5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
ICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgpAQCAtOTIsOSArOTMsOSBAQCBwcml2YXRlOgogICAg
IENvbnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIG1fZGF0YTsK
IH07CiAKLXZvaWQgc3RhdGljIHRlc3RVUkwoQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRl
bnNpb25zQmFja2VuZCBjb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQsIGNvbnN0IFVSTCYgdXJsLCBW
ZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU+IGV4cGVjdGVkQWN0aW9ucykKK3Zv
aWQgc3RhdGljIHRlc3RSZXF1ZXN0KENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQmIGNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCwgY29uc3QgUmVzb3VyY2VMb2FkSW5m
byYgcmVzb3VyY2VMb2FkSW5mbywgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
PiBleHBlY3RlZEFjdGlvbnMpCiB7Ci0gICAgYXV0byBhY3Rpb25zID0gY29udGVudEV4dGVuc2lv
bnNCYWNrZW5kLmFjdGlvbnNGb3JVUkwodXJsKTsKKyAgICBhdXRvIGFjdGlvbnMgPSBjb250ZW50
RXh0ZW5zaW9uc0JhY2tlbmQuYWN0aW9uc0ZvclJlc291cmNlTG9hZChyZXNvdXJjZUxvYWRJbmZv
KTsKICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRBY3Rpb25zLnNpemUoKSwgYWN0aW9ucy5zaXplKCkp
OwogICAgIGlmIChleHBlY3RlZEFjdGlvbnMuc2l6ZSgpICE9IGFjdGlvbnMuc2l6ZSgpKQogICAg
ICAgICByZXR1cm47CkBAIC0xMDMsNiArMTA0LDExIEBAIHZvaWQgc3RhdGljIHRlc3RVUkwoQ29u
dGVudEV4dGVuc2lvbnM6OkMKICAgICAgICAgRVhQRUNUX0VRKGV4cGVjdGVkQWN0aW9uc1tpXSwg
YWN0aW9uc1tpXS50eXBlKCkpOwogfQogCitSZXNvdXJjZUxvYWRJbmZvIG1haW5Eb2N1bWVudFJl
cXVlc3QoY29uc3QgY2hhciogdXJsLCBSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlID0gUmVzb3Vy
Y2VUeXBlOjpEb2N1bWVudCkKK3sKKyAgICByZXR1cm4geyBVUkwoVVJMKCksIHVybCksIFVSTChV
UkwoKSwgdXJsKSwgcmVzb3VyY2VUeXBlIH07Cit9CisgICAgCiBjb25zdCBjaGFyKiBiYXNpY0Zp
bHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiLip3ZWJraXQub3JnXCJ9fV0iOwogCiBURVNUX0YoQ29udGVudEV4dGVu
c2lvblRlc3QsIEJhc2ljKQpAQCAtMTEzLDcgKzExOSw3IEBAIFRFU1RfRihDb250ZW50RXh0ZW5z
aW9uVGVzdCwgQmFzaWMpCiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25z
QmFja2VuZCBiYWNrZW5kOwogICAgIGJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbigidGVzdEZp
bHRlciIsIGV4dGVuc2lvbik7CiAKLSAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChQYXJzZWRVUkxT
dHJpbmcsICJodHRwOi8vd2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpCbG9ja0xvYWQgfSk7CiB9CiAKIGNvbnN0IGNoYXIqIHBhdHRlcm5zU3RhcnRpbmdX
aXRoR3JvdXBGaWx0ZXIgPSAiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcIihodHRwOi8vd2hhdHdnXFxcXC5vcmcvKT93ZWJraXRc
MTM0XDEzNC5vcmdcIn19XSI7CkBAIC0xMjYsMTEgKzEzMiwxMSBAQCBURVNUX0YoQ29udGVudEV4
dGVuc2lvblRlc3QsIFBhdHRlcm5TdGFyCiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRF
eHRlbnNpb25zQmFja2VuZCBiYWNrZW5kOwogICAgIGJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lv
bigiUGF0dGVybk5lc3RlZEdyb3Vwc0ZpbHRlciIsIGV4dGVuc2lvbik7CiAKLSAgICB0ZXN0VVJM
KGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93aGF0d2cub3JnL3dlYmtpdC5vcmcvIiksIHsg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKLSAgICB0ZXN0VVJM
KGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93aGF0d2cub3JnL3dlYmtpdC5vcmciKSwgeyBD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwotICAgIHRlc3RVUkwo
YmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0cDovL3dlYmtpdC5vcmcvIiksIHsgfSk7Ci0gICAgdGVz
dFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRwOi8vd2hhdHdnLm9yZy8iKSwgeyB9KTsKLSAg
ICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93aGF0d2cub3JnIiksIHsgfSk7
CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3do
YXR3Zy5vcmcvd2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImh0dHA6Ly93aGF0d2cub3JnL3dlYmtpdC5vcmciKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6
QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1
ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93aGF0d2cub3JnLyIpLCB7
IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6
Ly93aGF0d2cub3JnIiksIHsgfSk7CiB9CiAKIGNvbnN0IGNoYXIqIHBhdHRlcm5OZXN0ZWRHcm91
cHNGaWx0ZXIgPSAiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcImh0dHA6Ly93ZWJraXRcXFxcLm9yZy8oZm9vKGJhcikqKStcIn19
XSI7CkBAIC0xNDMsMTggKzE0OSw1OSBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFBh
dHRlcm5OZXN0CiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2Vu
ZCBiYWNrZW5kOwogICAgIGJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbigiUGF0dGVybk5lc3Rl
ZEdyb3Vwc0ZpbHRlciIsIGV4dGVuc2lvbik7CiAKLSAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChV
UkwoKSwgImh0dHA6Ly93ZWJraXQub3JnL2ZvbyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpCbG9ja0xvYWQgfSk7Ci0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJo
dHRwOi8vd2Via2l0Lm9yZy9mb29iYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6QmxvY2tMb2FkIH0pOwotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0cDov
L3dlYmtpdC5vcmcvZm9vYmFyYmFyIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
OkJsb2NrTG9hZCB9KTsKLSAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93
ZWJraXQub3JnL2Zvb2Zvb2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpC
bG9ja0xvYWQgfSk7Ci0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRwOi8vd2Vi
a2l0Lm9yZy9mb29iYXJmb29iYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
QmxvY2tMb2FkIH0pOwotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0cDovL3dl
YmtpdC5vcmcvZm9vYiIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xv
YWQgfSk7Ci0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRwOi8vd2Via2l0Lm9y
Zy9mb29yIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsK
KyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Vi
a2l0Lm9yZy9mb28iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2Fk
IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6
Ly93ZWJraXQub3JnL2Zvb2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpC
bG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgiaHR0cDovL3dlYmtpdC5vcmcvZm9vYmFyYmFyIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9mb29mb29iYXIiKSwgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2Zvb2JhcmZvb2JhciIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVz
dFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcv
Zm9vYiIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7Cisg
ICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtp
dC5vcmcvZm9vciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQg
fSk7CisKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0
dHA6Ly93ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2JhciIpLCB7IH0pOworICAgIHRlc3RS
ZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2Zv
YmFyIiksIHsgfSk7Cit9CisgICAgCitjb25zdCBjaGFyKiBsb2FkVHlwZUZpbHRlciA9ICJbe1wi
YWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
OlwiLip3ZWJraXQub3JnXCIsXCJsb2FkLXR5cGVcIjpbXCJ0aGlyZC1wYXJ0eVwiXX19LCIKKyAg
ICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZp
bHRlclwiOlwiLip3aGF0d2cub3JnXCIsXCJsb2FkLXR5cGVcIjpbXCJmaXJzdC1wYXJ0eVwiXX19
XSI7CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgTG9hZFR5cGUpCit7CisgICAgYXV0
byBleHRlbnNpb25EYXRhID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChsb2Fk
VHlwZUZpbHRlcik7CisgICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbjo6Y3JlYXRlKFdURjo6bW92ZShleHRlbnNpb25EYXRhKSk7CisgICAgCisgICAg
Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBiYWNrZW5kOworICAg
IGJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbigiTG9hZFR5cGVGaWx0ZXIiLCBleHRlbnNpb24p
OworICAgIAorICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0
dHA6Ly93ZWJraXQub3JnIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwge1VSTChV
UkwoKSwgImh0dHA6Ly93ZWJraXQub3JnIiksIFVSTChVUkwoKSwgImh0dHA6Ly9ub3Rfd2Via2l0
Lm9yZyIpLCBSZXNvdXJjZVR5cGU6OkRvY3VtZW50fSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgiaHR0cDovL3doYXR3Zy5vcmciKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6
QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIHtVUkwo
VVJMKCksICJodHRwOi8vd2hhdHdnLm9yZyIpLCBVUkwoVVJMKCksICJodHRwOi8vbm90X3doYXR3
Zy5vcmciKSwgUmVzb3VyY2VUeXBlOjpEb2N1bWVudH0sIHsgfSk7Cit9CiAKK2NvbnN0IGNoYXIq
IHJlc291cmNlVHlwZUZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLipibG9ja19hbGxfdHlwZXMub3JnXCIsXCJy
ZXNvdXJjZS10eXBlXCI6W1wiZG9jdW1lbnRcIixcImltYWdlXCIsXCJzdHlsZS1zaGVldFwiLFwi
c2NyaXB0XCIsXCJmb250XCIsXCJyYXdcIixcInN2Zy1kb2N1bWVudFwiLFwibWVkaWFcIl19fSwi
CisgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIi4qYmxvY2tfb25seV9pbWFnZXNcIixcInJlc291cmNlLXR5cGVcIjpbXCJp
bWFnZVwiXX19XSI7CisgICAgCitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFJlc291cmNl
VHlwZSkKK3sKKyAgICBhdXRvIGV4dGVuc2lvbkRhdGEgPSBDb250ZW50RXh0ZW5zaW9uczo6Y29t
cGlsZVJ1bGVMaXN0KHJlc291cmNlVHlwZUZpbHRlcik7CisgICAgYXV0byBleHRlbnNpb24gPSBJ
bk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURjo6bW92ZShleHRlbnNp
b25EYXRhKSk7CisgICAgICAgIAorICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5z
aW9uc0JhY2tlbmQgYmFja2VuZDsKKyAgICBiYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24oIlJl
c291cmNlVHlwZUZpbHRlciIsIGV4dGVuc2lvbik7CiAKLSAgICB0ZXN0VVJMKGJhY2tlbmQsIFVS
TChVUkwoKSwgImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IH0pOwotICAgIHRlc3RVUkwoYmFja2Vu
ZCwgVVJMKFVSTCgpLCAiaHR0cDovL3dlYmtpdC5vcmcvYmFyIiksIHsgfSk7Ci0gICAgdGVzdFVS
TChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRwOi8vd2Via2l0Lm9yZy9mb2JhciIpLCB7IH0pOwor
ICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9ibG9j
a19hbGxfdHlwZXMub3JnIiwgUmVzb3VyY2VUeXBlOjpEb2N1bWVudCksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vYmxvY2tfYWxsX3R5cGVzLm9yZyIsIFJlc291
cmNlVHlwZTo6SW1hZ2UpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xv
YWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0
cDovL2Jsb2NrX2FsbF90eXBlcy5vcmciLCBSZXNvdXJjZVR5cGU6OlN0eWxlU2hlZXQpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVl
c3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2Jsb2NrX2FsbF90eXBlcy5v
cmciLCBSZXNvdXJjZVR5cGU6OlNjcmlwdCksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJodHRwOi8vYmxvY2tfYWxsX3R5cGVzLm9yZyIsIFJlc291cmNlVHlwZTo6Rm9udCks
IHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vYmxvY2tfYWxsX3R5
cGVzLm9yZyIsIFJlc291cmNlVHlwZTo6UmF3KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImh0dHA6Ly9ibG9ja19hbGxfdHlwZXMub3JnIiwgUmVzb3VyY2VUeXBlOjpTVkdE
b2N1bWVudCksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsK
KyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vYmxv
Y2tfYWxsX3R5cGVzLm9yZyIsIFJlc291cmNlVHlwZTo6TWVkaWEpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2Jsb2NrX29ubHlfaW1hZ2VzLm9yZyIsIFJlc291
cmNlVHlwZTo6SW1hZ2UpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xv
YWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0
cDovL2Jsb2NrX29ubHlfaW1hZ2VzLm9yZyIsIFJlc291cmNlVHlwZTo6RG9jdW1lbnQpLCB7IH0p
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248448</attachid>
            <date>2015-03-11 14:26:50 -0700</date>
            <delta_ts>2015-03-11 15:56:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142422-20150311142624.patch</filename>
            <type>text/plain</type>
            <size>44773</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTQwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE1LTAzLTExICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQWRkIHJlc291cmNlIHR5cGUgYW5kIGxvYWQgdHlwZSB0cmlnZ2Vycy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjQyMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyBBUEkgdGVz
dHMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QpOgorICAg
ICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmdldFR5cGVGbGFncyk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6bG9hZFRyaWdnZXIpOgorICAgICAgICAqIGNv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmg6CisgICAgICAgICogY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OmFjdGlvbnNG
b3JSZXNvdXJjZUxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNv
bnRlbnRFeHRlbnNpb25zQmFja2VuZDo6YWN0aW9uc0ZvclVSTCk6IERlbGV0ZWQuCisgICAgICAg
ICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmg6CisgICAgICAg
ICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjppbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKToKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QXBwZW5k
Q29uZGl0aW9uYWxBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKiBjb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0KToKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmg6CisgICAgICAgICog
bG9hZGVyL1Jlc291cmNlTG9hZEluZm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRv
UmVzb3VyY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRSZXNvdXJjZVR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVhZExvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
TG9hZEluZm86OmlzVGhpcmRQYXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRJ
bmZvOjpnZXRSZXNvdXJjZUZsYWdzKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkSW5m
by5oOiBBZGRlZC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNv
dXJjZSk6CisgICAgICAgICogcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyOjphY3Rpb25zRm9yUmVzb3VyY2VMb2Fk
KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWN0aW9uc0ZvclVS
TCk6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaDoKKwog
MjAxNS0wMy0xMSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZGQgYmFzaWMgc3VwcG9ydCBmb3IgQk9MIGFuZCBFT0wgYXNzZXJ0aW9ucyB0byB0aGUg
VVJMIEZpbHRlciBwYXJzZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4MTQwNikKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjA1Myw2ICsyMDUzLDggQEAKIAkJNTFFQUM1NjgxODE1RUQzRTAwNEYxQkE0IC8qIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxRUFDNTY2MTgxNUVEM0UwMDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNTFFQUM1QjIxODE2M0Y0RTAwNEYxQkE0IC8qIElEQlJlY29yZElkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUFDNUIwMTgxNjNG
NEUwMDRGMUJBNCAvKiBJREJSZWNvcmRJZGVudGlmaWVyLmggKi87IH07CiAJCTUxRUM5MjY1MENF
OTBERDQwMEY5MDMwOCAvKiBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFQzkyNUQwQ0U5
MERENDAwRjkwMzA4IC8qIEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAgKi87
IH07CisJCTUxRUU3QjM4MUFBNTBCMDUwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUVFN0IzNzFBQTUw
QjA1MDBGOTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxRUU3QjNBMUFBNTEyMzEwMEY5MkIyMSAvKiBS
ZXNvdXJjZUxvYWRJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxRUU3QjM5MUFBNTEyMzEwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmNw
cCAqLzsgfTsKIAkJNTFGQTJENzgxNTIxMzJCMzAwQzFCQTBCIC8qIERPTVdpbmRvd0V4dGVuc2lv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3RkJB
MTgxNTFBQTcxQjAwQjU3OTU5IC8qIERPTVdpbmRvd0V4dGVuc2lvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxRkI1NTA0MTEzRTNFOTEwMDgy
MTE3NiAvKiBKU0Nsb3NlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxRkI1NTAyMTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQuaCAq
LzsgfTsKIAkJNTFGQjU1MDUxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZCNTUwMzExM0Uz
RTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmNwcCAqLzsgfTsKQEAgLTkyMjQsNiArOTIyNiw4
IEBACiAJCTUxRUFDNTY2MTgxNUVEM0UwMDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFQUM1QjAxODE2M0Y0
RTAwNEYxQkE0IC8qIElEQlJlY29yZElkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSURCUmVjb3JkSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MUVDOTI1RDBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21TUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxRUU3QjM3MUFBNTBCMDUwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlTG9hZEluZm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFFRTdCMzkxQUE1MTIzMTAwRjkyQjIxIC8qIFJl
c291cmNlTG9hZEluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVzb3VyY2VMb2FkSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRjZB
M0Q1MDY2M0JGMDQwMDREMjkxOSAvKiBIVE1MQ2FudmFzRWxlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MQ2FudmFzRWxl
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMg
PSAwOyB9OwogCQk1MUY2QTNENjA2NjNCRjA0MDA0RDI5MTkgLyogSFRNTENhbnZhc0VsZW1lbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRN
TENhbnZhc0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CiAJCTUxRkI1NTAyMTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZl
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDbG9zZUV2ZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTQ0Nyw2ICsyMTQ1MSw4IEBACiAJCQkJNjU2
RDM3MjcwQURCQTVERTAwQTQ1NTREIC8qIFJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJRDBBM0E3
MzAxNDA1QTM5ODAwRkI4RUQzIC8qIFJlc291cmNlTG9hZGVyT3B0aW9ucy5oICovLAogCQkJCTUx
QUY1MDM1MTZGMTAwRjYwMDk1QjJFOCAvKiBSZXNvdXJjZUxvYWRlclR5cGVzLmggKi8sCisJCQkJ
NTFFRTdCMzkxQUE1MTIzMTAwRjkyQjIxIC8qIFJlc291cmNlTG9hZEluZm8uY3BwICovLAorCQkJ
CTUxRUU3QjM3MUFBNTBCMDUwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmggKi8sCiAJCQkJ
OTczRTMyNTQxMDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmNwcCAqLywK
IAkJCQk5NzNFMzI1NTEwODgzQjdDMDA1QkM0OTMgLyogUmVzb3VyY2VMb2FkTm90aWZpZXIuaCAq
LywKIAkJCQlEMENFNThGNjEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmNwcCAqLywKQEAgLTI1MTI3LDYgKzI1MTMzLDcgQEAKIAkJCQkxQUUyQUVDODBBMUQyOTdCMDBC
NDJCMjUgLyogSlNIVE1MUXVvdGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyQUJB
RDBBMUNFOTA1MDBCNDJCMjUgLyogSlNIVE1MU2NyaXB0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTFFNkVFQTgwQjYyOERCMzAwNUYyRjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAorCQkJCTUxRUU3QjM4MUFBNTBCMDUwMEY5MkIyMSAvKiBSZXNvdXJjZUxv
YWRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjRDQjRFQjBCOEJEQTNEMDA5RjQwQjAgLyog
SlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0NjE0M0Mw
Q0Q2ODlDQzAwRkFEQTc1IC8qIEpTSFRNTFNvdXJjZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk3NTJEMzhFMTQxMzEwNEIwMDMzMDVCRCAvKiBKU0hUTUxTcGFuRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zMDExMSw2ICszMDExOCw3IEBACiAJCQkJQTE0ODMyQjExODdGNjFFMTAw
REE2M0E2IC8qIFdBS0FwcEtpdFN0dWJzLm0gaW4gU291cmNlcyAqLywKIAkJCQlBMTQ4MzJCMzE4
N0Y2MjkxMDBEQTYzQTYgLyogV0FLQ2xpcFZpZXcubSBpbiBTb3VyY2VzICovLAogCQkJCUExNDgz
MkI1MTg3RjYyRkMwMERBNjNBNiAvKiBXQUtSZXNwb25kZXIubSBpbiBTb3VyY2VzICovLAorCQkJ
CTUxRUU3QjNBMUFBNTEyMzEwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUExNDgzMkI3MTg3RjYzNkMwMERBNjNBNiAvKiBXQUtTY3JvbGxWaWV3Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTE0ODMyQjkxODdGNjNENTAwREE2M0E2IC8qIFdBS1ZpZXcu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTQ4MzJCQzE4N0Y2NDhFMDBEQTYzQTYgLyogV0FLV2lu
ZG93Lm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHJl
dmlzaW9uIDE4MTQwNikKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25Db21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsOCBA
QCBDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGNvbXBpbGVSdWxlCiAgICAgICAgIGNvbnN0
IFRyaWdnZXImIHRyaWdnZXIgPSBjb250ZW50RXh0ZW5zaW9uUnVsZS50cmlnZ2VyKCk7CiAgICAg
ICAgIEFTU0VSVCh0cmlnZ2VyLnVybEZpbHRlci5sZW5ndGgoKSk7CiAKLSAgICAgICAgU3RyaW5n
IGVycm9yID0gdXJsRmlsdGVyUGFyc2VyLmFkZFBhdHRlcm4odHJpZ2dlci51cmxGaWx0ZXIsIHRy
aWdnZXIudXJsRmlsdGVySXNDYXNlU2Vuc2l0aXZlLCBhY3Rpb25Mb2NhdGlvbnNbcnVsZUluZGV4
XSk7CisgICAgICAgIC8vIEhpZ2ggYml0cyBhcmUgdXNlZCBmb3IgZmxhZ3MuIFRoaXMgc2hvdWxk
IG1hdGNoIGhvdyB0aGV5IGFyZSB1c2VkIGluIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVO
b2RlLgorICAgICAgICBTdHJpbmcgZXJyb3IgPSB1cmxGaWx0ZXJQYXJzZXIuYWRkUGF0dGVybih0
cmlnZ2VyLnVybEZpbHRlciwgdHJpZ2dlci51cmxGaWx0ZXJJc0Nhc2VTZW5zaXRpdmUsIChzdGF0
aWNfY2FzdDx1aW50NjRfdD4odHJpZ2dlci5mbGFncykgPDwgMzIpIHwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGFjdGlvbkxvY2F0aW9uc1tydWxlSW5kZXhdKSk7CiAKICAgICAgICAgaWYgKCFlcnJv
ci5pc051bGwoKSkgewogICAgICAgICAgICAgZGF0YUxvZ0YoIkVycm9yIHdoaWxlIHBhcnNpbmcg
JXM6ICVzXG4iLCB0cmlnZ2VyLnVybEZpbHRlci51dGY4KCkuZGF0YSgpLCBlcnJvci51dGY4KCku
ZGF0YSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCShyZXZpc2lvbiAxODE0MDYpCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsMzggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewogCitzdGF0aWMgYm9vbCBnZXRUeXBl
RmxhZ3MoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU1ZhbHVlJiB0eXBlVmFsdWUsIFJlc291cmNl
RmxhZ3MmIGZsYWdzLCB1aW50MTZfdCgqcmVhZGVyKShjb25zdCBTdHJpbmcmKSkKK3sKKyAgICBp
ZiAoIXR5cGVWYWx1ZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIEpT
T2JqZWN0KiBvYmplY3QgPSB0eXBlVmFsdWUudG9PYmplY3QoJmV4ZWMpOworICAgIGlmICghaXNK
U0FycmF5KG9iamVjdCkpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJJbnZhbGlkIGFycmF5Iik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBKU0FycmF5KiBhcnJheSA9IGpz
Q2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJh
eS0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBhcnJheS0+Z2V0SW5kZXgoJmV4ZWMsIGkpOworICAg
ICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhdmFsdWUpIHsKKyAgICAgICAgICAgIFdU
RkxvZ0Fsd2F5cygiSW52YWxpZCBvYmplY3QgaW4gdGhlIGFycmF5LiIpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0cmluZyBuYW1lID0gdmFs
dWUudG9XVEZTdHJpbmcoJmV4ZWMpOworICAgICAgICB1aW50MTZfdCB0eXBlID0gcmVhZGVyKG5h
bWUpOworICAgICAgICBpZiAoIXR5cGUpIHsKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiSW52
YWxpZCBzdHJpbmcgaW4gdGhlIGFycmF5LiIpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgZmxhZ3MgfD0gdHlwZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisgICAgCiBzdGF0aWMgYm9vbCBsb2FkVHJpZ2dlcihFeGVjU3RhdGUmIGV4ZWMsIEpTT2JqZWN0
JiBydWxlT2JqZWN0LCBUcmlnZ2VyJiB0cmlnZ2VyKQogewogICAgIEpTVmFsdWUgdHJpZ2dlck9i
amVjdCA9IHJ1bGVPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyKCZleGVjLCAidHJpZ2dlciIp
KTsKQEAgLTY3LDkgKzk5LDE3IEBAIHN0YXRpYyBib29sIGxvYWRUcmlnZ2VyKEV4ZWNTdGF0ZSYg
ZXhlYywKICAgICB9CiAgICAgdHJpZ2dlci51cmxGaWx0ZXIgPSB1cmxGaWx0ZXI7CiAKLSAgICBK
U1ZhbHVlIHVybEZpbHRlckNhc2VPYmplY3QgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRl
bnRpZmllcigmZXhlYywgInVybC1maWx0ZXItaXMtY2FzZS1zZW5zaXRpdmUiKSk7Ci0gICAgaWYg
KHVybEZpbHRlckNhc2VPYmplY3QgJiYgIWV4ZWMuaGFkRXhjZXB0aW9uKCkgJiYgdXJsRmlsdGVy
Q2FzZU9iamVjdC5pc0Jvb2xlYW4oKSkKLSAgICAgICAgdHJpZ2dlci51cmxGaWx0ZXJJc0Nhc2VT
ZW5zaXRpdmUgPSB1cmxGaWx0ZXJDYXNlT2JqZWN0LnRvQm9vbGVhbigmZXhlYyk7CisgICAgSlNW
YWx1ZSB1cmxGaWx0ZXJDYXNlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRp
ZmllcigmZXhlYywgInVybC1maWx0ZXItaXMtY2FzZS1zZW5zaXRpdmUiKSk7CisgICAgaWYgKHVy
bEZpbHRlckNhc2VWYWx1ZSAmJiAhZXhlYy5oYWRFeGNlcHRpb24oKSAmJiB1cmxGaWx0ZXJDYXNl
VmFsdWUuaXNCb29sZWFuKCkpCisgICAgICAgIHRyaWdnZXIudXJsRmlsdGVySXNDYXNlU2Vuc2l0
aXZlID0gdXJsRmlsdGVyQ2FzZVZhbHVlLnRvQm9vbGVhbigmZXhlYyk7CisKKyAgICBKU1ZhbHVl
IHJlc291cmNlVHlwZVZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXIo
JmV4ZWMsICJyZXNvdXJjZS10eXBlIikpOworICAgIGlmIChyZXNvdXJjZVR5cGVWYWx1ZSAmJiAh
ZXhlYy5oYWRFeGNlcHRpb24oKSAmJiAhZ2V0VHlwZUZsYWdzKGV4ZWMsIHJlc291cmNlVHlwZVZh
bHVlLCB0cmlnZ2VyLmZsYWdzLCByZWFkUmVzb3VyY2VUeXBlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIEpTVmFsdWUgbG9hZFR5cGVWYWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0
KCZleGVjLCBJZGVudGlmaWVyKCZleGVjLCAibG9hZC10eXBlIikpOworICAgIGlmIChsb2FkVHlw
ZVZhbHVlICYmICFleGVjLmhhZEV4Y2VwdGlvbigpICYmICFnZXRUeXBlRmxhZ3MoZXhlYywgbG9h
ZFR5cGVWYWx1ZSwgdHJpZ2dlci5mbGFncywgcmVhZExvYWRUeXBlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmgJKHJldmlz
aW9uIDE4MTQwNikKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25SdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkFjdGlv
bnMuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRJbmZvLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQzLDYgKzQ0LDcgQEAgbmFt
ZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIHN0cnVjdCBUcmlnZ2VyIHsKICAgICBTdHJpbmcg
dXJsRmlsdGVyOwogICAgIGJvb2wgdXJsRmlsdGVySXNDYXNlU2Vuc2l0aXZlIHsgZmFsc2UgfTsK
KyAgICBSZXNvdXJjZUZsYWdzIGZsYWdzIHsgMCB9OwogfTsKICAgICAKIHN0cnVjdCBBY3Rpb24g
ewpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bnNCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCShyZXZpc2lvbiAxODE0MDYpCisrKyBT
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24uaCIKICNpbmNsdWRlICJERkFCeXRlY29kZUludGVycHJldGVyLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkSW5mby5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNjEsMTYgKzYyLDE3IEBAIHZvaWQgQ29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kOjpyZW1vdmVBbGwKICAgICBtX2NvbnRlbnRFeHRlbnNpb25zLmNs
ZWFyKCk7CiB9CiAKLVZlY3RvcjxBY3Rpb24+IENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6YWN0
aW9uc0ZvclVSTChjb25zdCBVUkwmIHVybCkKK1ZlY3RvcjxBY3Rpb24+IENvbnRlbnRFeHRlbnNp
b25zQmFja2VuZDo6YWN0aW9uc0ZvclJlc291cmNlTG9hZChjb25zdCBSZXNvdXJjZUxvYWRJbmZv
JiByZXNvdXJjZUxvYWRJbmZvKSBjb25zdAogewotICAgIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
ID0gdXJsLnN0cmluZygpOworICAgIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nID0gcmVzb3VyY2VM
b2FkSW5mby5yZXNvdXJjZVVSTC5zdHJpbmcoKTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHVy
bFN0cmluZy5jb250YWluc09ubHlBU0NJSSgpLCAiQSBkZWNvZGVkIFVSTCBzaG91bGQgb25seSBj
b250YWluIEFTQ0lJIGNoYXJhY3RlcnMuIFRoZSBtYXRjaGluZyBhbGdvcml0aG0gYXNzdW1lcyB0
aGUgaW5wdXQgaXMgQVNDSUkuIik7CiAgICAgY29uc3QgQ1N0cmluZyYgdXJsQ1N0cmluZyA9IHVy
bFN0cmluZy51dGY4KCk7CiAKICAgICBWZWN0b3I8QWN0aW9uPiBmaW5hbEFjdGlvbnM7CisgICAg
UmVzb3VyY2VGbGFncyBmbGFncyA9IHJlc291cmNlTG9hZEluZm8uZ2V0UmVzb3VyY2VGbGFncygp
OwogICAgIGZvciAoYXV0byYgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIDogbV9jb250ZW50RXh0
ZW5zaW9ucy52YWx1ZXMoKSkgewogICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyIGludGVy
cHJldGVyKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi0+Ynl0ZWNvZGUoKSwgY29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uLT5ieXRlY29kZUxlbmd0aCgpKTsKLSAgICAgICAgREZBQnl0ZWNvZGVJbnRl
cnByZXRlcjo6QWN0aW9ucyB0cmlnZ2VyZWRBY3Rpb25zID0gaW50ZXJwcmV0ZXIuaW50ZXJwcmV0
KHVybENTdHJpbmcpOworICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIHRy
aWdnZXJlZEFjdGlvbnMgPSBpbnRlcnByZXRlci5pbnRlcnByZXQodXJsQ1N0cmluZywgZmxhZ3Mp
OwogICAgICAgICAKICAgICAgICAgY29uc3QgU2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMg
PSBjb21waWxlZENvbnRlbnRFeHRlbnNpb24tPmFjdGlvbnMoKTsKICAgICAgICAgY29uc3QgdW5z
aWduZWQgYWN0aW9uc0xlbmd0aCA9IGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi0+YWN0aW9uc0xl
bmd0aCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvbnNCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgJKHJldmlzaW9uIDE4MTQwNikKKysr
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2Vu
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgVVJMOwogCitzdHJ1Y3QgUmVzb3VyY2VMb2FkSW5mbzsKKwogbmFtZXNwYWNlIENv
bnRlbnRFeHRlbnNpb25zIHsKIAogY2xhc3MgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOwpAQCAt
NTcsNyArNTksNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVBbGxD
b250ZW50RXh0ZW5zaW9ucygpOwogCiAgICAgLy8gLSBJbnRlcm5hbCBXZWJDb3JlIEludGVyZmFj
ZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8QWN0aW9uPiBhY3Rpb25zRm9yVVJMKGNvbnN0
IFVSTCYpOworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxBY3Rpb24+IGFjdGlvbnNGb3JSZXNv
dXJjZUxvYWQoY29uc3QgUmVzb3VyY2VMb2FkSW5mbyYpIGNvbnN0OwogCiBwcml2YXRlOgogICAg
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPj4gbV9jb250
ZW50RXh0ZW5zaW9uczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RG
QUJ5dGVjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGUuaAkocmV2aXNpb24gMTgxNDA2KQorKysgU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQs
MTEgQEAgZW51bSBjbGFzcyBERkFCeXRlY29kZUluc3RydWN0aW9uIDogdWludAogICAgIC8vIEFw
cGVuZEFjdGlvbiBoYXMgb25lIGFyZ3VtZW50OgogICAgIC8vIFRoZSBhY3Rpb24gdG8gYXBwZW5k
ICg0IGJ5dGVzKS4KICAgICBBcHBlbmRBY3Rpb24sCisgICAgCisgICAgLy8gQXBwZW5kQ29uZGl0
aW9uYWxBY3Rpb24gaGFzIHR3byBhcmd1bWVudHM6CisgICAgLy8gVGhlIGZsYWdzIHRvIGNoZWNr
IGJlZm9yZSBhcHBlbmRpbmcgKDIgYnl0ZXMpLAorICAgIC8vIFRoZSBhY3Rpb24gdG8gYXBwZW5k
ICg0Ynl0ZXMpLgorICAgIEFwcGVuZENvbmRpdGlvbmFsQWN0aW9uLAogCiAgICAgLy8gVGVybWlu
YXRlIGhhcyBubyBhcmd1bWVudHMuCiAgICAgVGVybWluYXRlLApAQCAtNjAsNiArNjUsOCBAQCBz
dGF0aWMgaW5saW5lIHNpemVfdCBpbnN0cnVjdGlvblNpemVXaXRoCiAgICAgICAgIHJldHVybiBz
aXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2Yo
dW5zaWduZWQpOwogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9u
OgogICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9m
KHVuc2lnbmVkKTsKKyAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZENvbmRp
dGlvbmFsQWN0aW9uOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b24pICsgc2l6ZW9mKHVpbnQxNl90KSArIHNpemVvZih1bnNpZ25lZCk7CiAgICAgY2FzZSBERkFC
eXRlY29kZUluc3RydWN0aW9uOjpUZXJtaW5hdGU6CiAgICAgICAgIHJldHVybiBzaXplb2YoREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbik7CiAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpK
dW1wOgpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVD
b21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAJKHJldmlzaW9uIDE4MTQwNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Myw2ICs1MywxNCBAQCB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRB
cHBlbmRBY3RpCiAgICAgYXBwZW5kPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBhY3Rpb24pOwogfQog
Cit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRBcHBlbmRDb25kaXRpb25hbEFjdGlvbih1
aW50MTZfdCBmbGFncywgdW5zaWduZWQgYWN0aW9uKQoreworICAgIEFTU0VSVChmbGFncyk7Cisg
ICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246OkFwcGVuZENvbmRpdGlvbmFsQWN0aW9uKTsKKyAgICBhcHBlbmQ8dWludDE2
X3Q+KG1fYnl0ZWNvZGUsIGZsYWdzKTsKKyAgICBhcHBlbmQ8dW5zaWduZWQ+KG1fYnl0ZWNvZGUs
IGFjdGlvbik7Cit9CisKIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdEp1bXAodW5zaWdu
ZWQgZGVzdGluYXRpb25Ob2RlSW5kZXgpCiB7CiAgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246Okp1bXApOwpAQCAtODAs
OCArODgsMTMgQEAgdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZSh1bgogICAg
IC8vIFJlY29yZCBzdGFydGluZyBpbmRleCBmb3IgbGlua2luZy4KICAgICBtX25vZGVTdGFydE9m
ZnNldHNbaW5kZXhdID0gbV9ieXRlY29kZS5zaXplKCk7CiAKLSAgICBmb3IgKHVpbnQ2NF90IGFj
dGlvbiA6IG5vZGUuYWN0aW9ucykKLSAgICAgICAgZW1pdEFwcGVuZEFjdGlvbihzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oYWN0aW9uKSk7CisgICAgZm9yICh1aW50NjRfdCBhY3Rpb24gOiBub2RlLmFj
dGlvbnMpIHsKKyAgICAgICAgLy8gSGlnaCBiaXRzIGFyZSB1c2VkIHRvIHN0b3JlIGZsYWdzLiBT
ZWUgY29tcGlsZVJ1bGVMaXN0LgorICAgICAgICBpZiAoYWN0aW9uICYgMHhGRkZGMDAwMDAwMDAp
CisgICAgICAgICAgICBlbWl0QXBwZW5kQ29uZGl0aW9uYWxBY3Rpb24oc3RhdGljX2Nhc3Q8dWlu
dDE2X3Q+KGFjdGlvbiA+PiAzMiksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihhY3Rpb24pKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZW1pdEFwcGVuZEFjdGlvbihzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oYWN0aW9uKSk7CisgICAgfQogICAgIAogICAgIGZvciAoY29uc3QgYXV0byYgdHJhbnNp
dGlvbiA6IG5vZGUudHJhbnNpdGlvbnMpCiAgICAgICAgIGVtaXRDaGVja1ZhbHVlKHRyYW5zaXRp
b24ua2V5LCB0cmFuc2l0aW9uLnZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgJKHJldmlzaW9uIDE4
MTQwNikKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29t
cGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgY29tcGlsZU5vZGUodW5zaWduZWQpOwogCiAgICAgdm9pZCBlbWl0QXBwZW5kQWN0aW9uKHVu
c2lnbmVkKTsKKyAgICB2b2lkIGVtaXRBcHBlbmRDb25kaXRpb25hbEFjdGlvbih1aW50MTZfdCBm
bGFncywgdW5zaWduZWQpOwogICAgIHZvaWQgZW1pdEp1bXAodW5zaWduZWQgZGVzdGluYXRpb25O
b2RlSW5kZXgpOwogICAgIHZvaWQgZW1pdENoZWNrVmFsdWUodWludDhfdCB2YWx1ZSwgdW5zaWdu
ZWQgZGVzdGluYXRpb25Ob2RlSW5kZXgpOwogICAgIHZvaWQgZW1pdFRlcm1pbmF0ZSgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZB
Qnl0ZWNvZGVJbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE4MTQwNikKKysrIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHN0YXRpYyBpbmxpbmUgSW50VHlwZSBnZXRCaXRzKGNv
bnN0IERGQUIKICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW50VHlwZSo+KCZi
eXRlY29kZVtpbmRleF0pOwogfQogCi1ERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldChjb25zdCBDU3RyaW5nJiB1cmxDU3RyaW5n
KQorREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlY29kZUludGVycHJldGVy
OjppbnRlcnByZXQoY29uc3QgQ1N0cmluZyYgdXJsQ1N0cmluZywgdWludDE2X3QgZmxhZ3MpCiB7
CiAgICAgY29uc3QgY2hhciogdXJsID0gdXJsQ1N0cmluZy5kYXRhKCk7CiAgICAgQVNTRVJUKHVy
bCk7CkBAIC04Niw2ICs4NiwxMiBAQCBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERG
QUJ5dGVjCiAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRo
QXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CiAgICAgICAg
ICAgICBicmVhazsKIAorICAgICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVu
ZENvbmRpdGlvbmFsQWN0aW9uOgorICAgICAgICAgICAgaWYgKGZsYWdzICYgZ2V0Qml0czx1aW50
MTZfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXpl
b2YoREZBQnl0ZWNvZGUpKSkKKyAgICAgICAgICAgICAgICBhY3Rpb25zLmFkZChzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0
aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpICsgc2l6ZW9mKHVpbnQxNl90
KSkpKTsKKyAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhB
cmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQ29uZGl0aW9uYWxBY3Rpb24p
OworICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEludmFsaWQgYnl0ZWNvZGUuCiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9ERkFCeXRlY29kZUludGVycHJldGVyLmgJKHJldmlzaW9uIDE4MTQwNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdHlwZWRlZiBIYXNo
U2V0PHVpbnQ2NF90LCBEZWZhdWx0SGFzaDx1aW50NjRfdD46Okhhc2gsIFdURjo6VW5zaWduZWRX
aXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+PiBBY3Rpb25zOwogICAgIAotICAgIEFjdGlv
bnMgaW50ZXJwcmV0KGNvbnN0IENTdHJpbmcmKTsKKyAgICBBY3Rpb25zIGludGVycHJldChjb25z
dCBDU3RyaW5nJiwgdWludDE2X3QgZmxhZ3MpOwogCiBwcml2YXRlOgogICAgIGNvbnN0IERGQUJ5
dGVjb2RlKiBtX2J5dGVjb2RlOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZEluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRJbmZvLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRJbmZvLmgi
CisKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oIgorI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVzb3VyY2VUeXBlIHRvUmVz
b3VyY2VUeXBlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlOgorICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OlNWR0RvY3VtZW50UmVzb3VyY2U6CisgICAgICAgIHJldHVybiBSZXNvdXJj
ZVR5cGU6OkRvY3VtZW50OworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6
CisgICAgICAgIHJldHVybiBSZXNvdXJjZVR5cGU6OkltYWdlOworICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OkNTU1N0eWxlU2hlZXQ6CisjaWYgRU5BQkxFKFhTTFQpCisgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKKyNlbmRpZgorICAgICAgICByZXR1cm4gUmVzb3VyY2VU
eXBlOjpTdHlsZVNoZWV0OworCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgorICAg
ICAgICByZXR1cm4gUmVzb3VyY2VUeXBlOjpTY3JpcHQ7CisKKyAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpGb250UmVzb3VyY2U6CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpTVkdGb250UmVzb3VyY2U6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIFJlc291
cmNlVHlwZTo6Rm9udDsKKworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgor
ICAgICAgICByZXR1cm4gUmVzb3VyY2VUeXBlOjpSYXc7CisKKyNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6VGV4dFRyYWNrUmVzb3VyY2U6CisgICAgICAg
IHJldHVybiBSZXNvdXJjZVR5cGU6Ok1lZGlhOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfTsKK30KKwordWludDE2X3QgcmVhZFJlc291
cmNlVHlwZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKG5hbWUgPT0gImRvY3VtZW50
IikKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90PihSZXNvdXJjZVR5cGU6OkRv
Y3VtZW50KTsKKyAgICBpZiAobmFtZSA9PSAiaW1hZ2UiKQorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dWludDE2X3Q+KFJlc291cmNlVHlwZTo6SW1hZ2UpOworICAgIGlmIChuYW1lID09ICJz
dHlsZS1zaGVldCIpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MTZfdD4oUmVzb3Vy
Y2VUeXBlOjpTdHlsZVNoZWV0KTsKKyAgICBpZiAobmFtZSA9PSAic2NyaXB0IikKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90PihSZXNvdXJjZVR5cGU6OlNjcmlwdCk7CisgICAg
aWYgKG5hbWUgPT0gImZvbnQiKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+
KFJlc291cmNlVHlwZTo6Rm9udCk7CisgICAgaWYgKG5hbWUgPT0gInJhdyIpCisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1aW50MTZfdD4oUmVzb3VyY2VUeXBlOjpSYXcpOworICAgIGlmIChu
YW1lID09ICJzdmctZG9jdW1lbnQiKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2
X3Q+KFJlc291cmNlVHlwZTo6U1ZHRG9jdW1lbnQpOworICAgIGlmIChuYW1lID09ICJtZWRpYSIp
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MTZfdD4oUmVzb3VyY2VUeXBlOjpNZWRp
YSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90PihSZXNvdXJjZVR5cGU6OkludmFs
aWQpOworfQorCit1aW50MTZfdCByZWFkTG9hZFR5cGUoY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIGlmIChuYW1lID09ICJmaXJzdC1wYXJ0eSIpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1aW50MTZfdD4oTG9hZFR5cGU6OkZpcnN0UGFydHkpOworICAgIGlmIChuYW1lID09ICJ0aGly
ZC1wYXJ0eSIpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MTZfdD4oTG9hZFR5cGU6
OlRoaXJkUGFydHkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MTZfdD4oTG9hZFR5cGU6
OkludmFsaWQpOworfQorCitib29sIFJlc291cmNlTG9hZEluZm86OmlzVGhpcmRQYXJ0eSgpIGNv
bnN0Cit7CisgICAgUmVmPFNlY3VyaXR5T3JpZ2luPiBtYWluRG9jdW1lbnRTZWN1cml0eU9yaWdp
biA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobWFpbkRvY3VtZW50VVJMKTsKKyAgICBSZWY8U2Vj
dXJpdHlPcmlnaW4+IHJlc291cmNlU2VjdXJpdHlPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3Jl
YXRlKHJlc291cmNlVVJMKTsKKworICAgIHJldHVybiAhbWFpbkRvY3VtZW50U2VjdXJpdHlPcmln
aW4tPmNhbkFjY2VzcygmcmVzb3VyY2VTZWN1cml0eU9yaWdpbi5nZXQoKSk7Cit9CisgICAgCitS
ZXNvdXJjZUZsYWdzIFJlc291cmNlTG9hZEluZm86OmdldFJlc291cmNlRmxhZ3MoKSBjb25zdAor
eworICAgIFJlc291cmNlRmxhZ3MgZmxhZ3MgPSAwOworICAgIEFTU0VSVCh0eXBlICE9IFJlc291
cmNlVHlwZTo6SW52YWxpZCk7CisgICAgZmxhZ3MgfD0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VGbGFn
cz4odHlwZSk7CisgICAgZmxhZ3MgfD0gaXNUaGlyZFBhcnR5KCkgPyBzdGF0aWNfY2FzdDxSZXNv
dXJjZUZsYWdzPihMb2FkVHlwZTo6VGhpcmRQYXJ0eSkgOiBzdGF0aWNfY2FzdDxSZXNvdXJjZUZs
YWdzPihMb2FkVHlwZTo6Rmlyc3RQYXJ0eSk7CisgICAgcmV0dXJuIGZsYWdzOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRJbmZvLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFJlc291cmNlTG9hZEluZm9faAorI2RlZmluZSBSZXNvdXJjZUxvYWRJbmZvX2gKKwor
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAiVVJMLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBSZXNvdXJjZVR5cGUgOiB1aW50MTZfdCB7CisgICAg
SW52YWxpZCA9IDB4MDAwMCwKKyAgICBEb2N1bWVudCA9IDB4MDAwMSwKKyAgICBJbWFnZSA9IDB4
MDAwMiwKKyAgICBTdHlsZVNoZWV0ID0gMHgwMDA0LAorICAgIFNjcmlwdCA9IDB4MDAwOCwKKyAg
ICBGb250ID0gMHgwMDEwLAorICAgIFJhdyA9IDB4MDAyMCwKKyAgICBTVkdEb2N1bWVudCA9IDB4
MDA0MCwKKyAgICBNZWRpYSA9IDB4MDA4MCwKK307CisKK2VudW0gY2xhc3MgTG9hZFR5cGUgOiB1
aW50MTZfdCB7CisgICAgSW52YWxpZCA9IDB4MDAwMCwKKyAgICBGaXJzdFBhcnR5ID0gMHgwMTAw
LAorICAgIFRoaXJkUGFydHkgPSAweDAyMDAsCit9OworCit0eXBlZGVmIHVpbnQxNl90IFJlc291
cmNlRmxhZ3M7CisKK1Jlc291cmNlVHlwZSB0b1Jlc291cmNlVHlwZShDYWNoZWRSZXNvdXJjZTo6
VHlwZSk7Cit1aW50MTZfdCByZWFkUmVzb3VyY2VUeXBlKGNvbnN0IFN0cmluZyYpOwordWludDE2
X3QgcmVhZExvYWRUeXBlKGNvbnN0IFN0cmluZyYpOworCitzdHJ1Y3QgUmVzb3VyY2VMb2FkSW5m
byB7CisgICAgVVJMIHJlc291cmNlVVJMOworICAgIFVSTCBtYWluRG9jdW1lbnRVUkw7CisgICAg
UmVzb3VyY2VUeXBlIHR5cGU7CisKKyAgICBib29sIGlzVGhpcmRQYXJ0eSgpIGNvbnN0OworICAg
IFJlc291cmNlRmxhZ3MgZ2V0UmVzb3VyY2VGbGFncygpIGNvbnN0OworfTsKKworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSZXNvdXJjZUxvYWRJbmZvX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVy
LmNwcAkocmV2aXNpb24gMTgxNDA2KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAog
I2luY2x1ZGUgIlBpbmdMb2FkZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIK
ICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkSW5mby5o
IgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlNjcmlwdENv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpAQCAtNTA3LDggKzUwOCwx
NCBAQCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gQ2FjCiAjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKICAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlv
bj4gYWN0aW9uczsKIAorICAgIFVSTCBtYWluRG9jdW1lbnRVUkw7CisgICAgaWYgKGZyYW1lKCkg
JiYgZnJhbWUoKS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgbWFpbkRvY3VtZW50VVJMID0gZnJhbWUo
KS0+ZG9jdW1lbnQoKS0+dXJsKCk7CisgICAgCisgICAgUmVzb3VyY2VMb2FkSW5mbyByZXNvdXJj
ZUxvYWRJbmZvID0geyB1cmwsIG1haW5Eb2N1bWVudFVSTCwgdG9SZXNvdXJjZVR5cGUodHlwZSkg
fTsKKyAgICAKICAgICBpZiAoZnJhbWUoKSAmJiBmcmFtZSgpLT5wYWdlKCkgJiYgZnJhbWUoKS0+
cGFnZSgpLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSkKLSAgICAgICAgYWN0aW9ucyA9IGZyYW1l
KCktPnBhZ2UoKS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCktPmFjdGlvbnNGb3JVUkwodXJsKTsK
KyAgICAgICAgYWN0aW9ucyA9IGZyYW1lKCktPnBhZ2UoKS0+dXNlckNvbnRlbnRDb250cm9sbGVy
KCktPmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQocmVzb3VyY2VMb2FkSW5mbyk7CiAKICAgICBib29s
IHdpbGxCbG9ja0xvYWQgPSBmYWxzZTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGFjdGlvbiA6IGFj
dGlvbnMpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDE4MTQwNikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNv
bnRlbnRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZEluZm8uaCIKICNpbmNsdWRlICJVc2VyU2NyaXB0
LmgiCiAjaW5jbHVkZSAiVXNlclN0eWxlU2hlZXQuaCIKIApAQCAtMjAzLDEyICsyMDQsMTIgQEAg
dm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZQogICAgIG1fY29udGVudEV4
dGVuc2lvbkJhY2tlbmQtPnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7CiB9CiAKLVZlY3Rv
cjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPiBVc2VyQ29udGVudENvbnRyb2xsZXI6OmFjdGlv
bnNGb3JVUkwoY29uc3QgVVJMJiB1cmwpCitWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlv
bj4gVXNlckNvbnRlbnRDb250cm9sbGVyOjphY3Rpb25zRm9yUmVzb3VyY2VMb2FkKGNvbnN0IFJl
c291cmNlTG9hZEluZm8mIHJlc291cmNlTG9hZEluZm8pCiB7CiAgICAgaWYgKCFtX2NvbnRlbnRF
eHRlbnNpb25CYWNrZW5kKQogICAgICAgICByZXR1cm4gVmVjdG9yPENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb24+KCk7CiAKLSAgICByZXR1cm4gbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC0+YWN0
aW9uc0ZvclVSTCh1cmwpOworICAgIHJldHVybiBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLT5h
Y3Rpb25zRm9yUmVzb3VyY2VMb2FkKHJlc291cmNlTG9hZEluZm8pOwogfQogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaAkocmV2aXNp
b24gMTgxNDA2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQCBjbGFzcyBVUkw7CiBjbGFzcyBVc2Vy
U2NyaXB0OwogY2xhc3MgVXNlclN0eWxlU2hlZXQ7CiBjbGFzcyBVc2VyTWVzc2FnZUhhbmRsZXJE
ZXNjcmlwdG9yOworc3RydWN0IFJlc291cmNlTG9hZEluZm87CiAKIG5hbWVzcGFjZSBDb250ZW50
RXh0ZW5zaW9ucyB7CiBjbGFzcyBDb21waWxlZENvbnRlbnRFeHRlbnNpb247CkBAIC04NSw4ICs4
Niw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXJDb250ZW50
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBy
ZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKICAgICAKLSAgICAvLyBGSVhNRTogQ29u
c2lkZXIgcHV0dGluZyB0aGlzIChhbmQgb3RoZXIgZnV0dXJlIGNvbnRlbnQgZXh0ZW5zaW9uIHBy
ZWRpY2F0ZXMpIGluIGl0cyBvd24gY2xhc3MuCi0gICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb24+IGFjdGlvbnNGb3JVUkwoY29uc3QgVVJMJik7CisgICAgVmVjdG9yPENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb24+IGFjdGlvbnNGb3JSZXNvdXJjZUxvYWQoY29uc3QgUmVzb3VyY2VM
b2FkSW5mbyYpOwogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODE0MDYpCisrKyBUb29scy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNS0wMy0xMSAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtDb250
ZW50IEV4dGVuc2lvbnNdIEFkZCByZXNvdXJjZSB0eXBlIGFuZCBsb2FkIHR5cGUgdHJpZ2dlcnMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI0MjIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHA6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjp0ZXN0UmVxdWVzdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjptYWlu
RG9jdW1lbnRSZXF1ZXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0VVJMKTogRGVsZXRlZC4KKwogMjAxNS0wMy0xMSAgQmVu
amFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYmFzaWMg
c3VwcG9ydCBmb3IgQk9MIGFuZCBFT0wgYXNzZXJ0aW9ucyB0byB0aGUgVVJMIEZpbHRlciBwYXJz
ZXIKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5z
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0NvbnRlbnRFeHRlbnNpb25zLmNwcAkocmV2aXNpb24gMTgxNDA2KQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVU
aHJlYWRpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4K
ICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CkBA
IC05Miw5ICs5Myw5IEBAIHByaXZhdGU6CiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGEgbV9kYXRhOwogfTsKIAotdm9pZCBzdGF0aWMgdGVzdFVSTChD
b250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIGNvbnRlbnRFeHRlbnNp
b25zQmFja2VuZCwgY29uc3QgVVJMJiB1cmwsIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZT4gZXhwZWN0ZWRBY3Rpb25zKQordm9pZCBzdGF0aWMgdGVzdFJlcXVlc3QoQ29udGVu
dEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBjb250ZW50RXh0ZW5zaW9uc0Jh
Y2tlbmQsIGNvbnN0IFJlc291cmNlTG9hZEluZm8mIHJlc291cmNlTG9hZEluZm8sIFZlY3RvcjxD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZT4gZXhwZWN0ZWRBY3Rpb25zKQogewotICAgIGF1
dG8gYWN0aW9ucyA9IGNvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5hY3Rpb25zRm9yVVJMKHVybCk7
CisgICAgYXV0byBhY3Rpb25zID0gY29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmFjdGlvbnNGb3JS
ZXNvdXJjZUxvYWQocmVzb3VyY2VMb2FkSW5mbyk7CiAgICAgRVhQRUNUX0VRKGV4cGVjdGVkQWN0
aW9ucy5zaXplKCksIGFjdGlvbnMuc2l6ZSgpKTsKICAgICBpZiAoZXhwZWN0ZWRBY3Rpb25zLnNp
emUoKSAhPSBhY3Rpb25zLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTAzLDYgKzEwNCwx
MSBAQCB2b2lkIHN0YXRpYyB0ZXN0VVJMKENvbnRlbnRFeHRlbnNpb25zOjpDCiAgICAgICAgIEVY
UEVDVF9FUShleHBlY3RlZEFjdGlvbnNbaV0sIGFjdGlvbnNbaV0udHlwZSgpKTsKIH0KIAorUmVz
b3VyY2VMb2FkSW5mbyBtYWluRG9jdW1lbnRSZXF1ZXN0KGNvbnN0IGNoYXIqIHVybCwgUmVzb3Vy
Y2VUeXBlIHJlc291cmNlVHlwZSA9IFJlc291cmNlVHlwZTo6RG9jdW1lbnQpCit7CisgICAgcmV0
dXJuIHsgVVJMKFVSTCgpLCB1cmwpLCBVUkwoVVJMKCksIHVybCksIHJlc291cmNlVHlwZSB9Owor
fQorCiBjb25zdCBjaGFyKiBiYXNpY0ZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
YmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLip3ZWJraXQub3JnXCJ9fV0i
OwogCiBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEJhc2ljKQpAQCAtMTEzLDcgKzExOSw3
IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgQmFzaWMpCiAgICAgQ29udGVudEV4dGVu
c2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBiYWNrZW5kOwogICAgIGJhY2tlbmQuYWRk
Q29udGVudEV4dGVuc2lvbigidGVzdEZpbHRlciIsIGV4dGVuc2lvbik7CiAKLSAgICB0ZXN0VVJM
KGJhY2tlbmQsIFVSTChQYXJzZWRVUkxTdHJpbmcsICJodHRwOi8vd2Via2l0Lm9yZy8iKSwgeyBD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1
ZXN0KGJhY2tlbmQsIFVSTChQYXJzZWRVUkxTdHJpbmcsICJodHRwOi8vd2Via2l0Lm9yZy8iKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwogfQogCiBjb25z
dCBjaGFyKiBwYXR0ZXJuc1N0YXJ0aW5nV2l0aEdyb3VwRmlsdGVyID0gIlt7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIoaHR0cDov
L3doYXR3Z1xcXFwub3JnLyk/d2Via2l0XDEzNFwxMzQub3JnXCJ9fV0iOwpAQCAtMTI2LDExICsx
MzIsMTEgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBQYXR0ZXJuU3RhcgogICAgIENv
bnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFja2VuZDsKICAgICBi
YWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24oIlBhdHRlcm5OZXN0ZWRHcm91cHNGaWx0ZXIiLCBl
eHRlbnNpb24pOwogCi0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRwOi8vd2hh
dHdnLm9yZy93ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpC
bG9ja0xvYWQgfSk7Ci0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRwOi8vd2hh
dHdnLm9yZy93ZWJraXQub3JnIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJs
b2NrTG9hZCB9KTsKLSAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93ZWJr
aXQub3JnLyIpLCB7IH0pOwotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0cDov
L3doYXR3Zy5vcmcvIiksIHsgfSk7Ci0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJo
dHRwOi8vd2hhdHdnLm9yZyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImh0dHA6Ly93aGF0d2cub3JnL3dlYmtpdC5vcmcvIiksIHsgQ29udGVu
dEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChi
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2hhdHdnLm9yZy93ZWJraXQub3Jn
IiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0
ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9y
Zy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJodHRwOi8vd2hhdHdnLm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2hhdHdnLm9yZyIpLCB7IH0pOwogfQogCiBjb25z
dCBjaGFyKiBwYXR0ZXJuTmVzdGVkR3JvdXBzRmlsdGVyID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJodHRwOi8vd2Via2l0
XFxcXC5vcmcvKGZvbyhiYXIpKikrXCJ9fV0iOwpAQCAtMTQzLDE4ICsxNDksMTcgQEAgVEVTVF9G
KENvbnRlbnRFeHRlbnNpb25UZXN0LCBQYXR0ZXJuTmVzdAogICAgIENvbnRlbnRFeHRlbnNpb25z
OjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFja2VuZDsKICAgICBiYWNrZW5kLmFkZENvbnRl
bnRFeHRlbnNpb24oIlBhdHRlcm5OZXN0ZWRHcm91cHNGaWx0ZXIiLCBleHRlbnNpb24pOwogCi0g
ICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRwOi8vd2Via2l0Lm9yZy9mb28iKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwotICAgIHRlc3RV
UkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0cDovL3dlYmtpdC5vcmcvZm9vYmFyIiksIHsgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKLSAgICB0ZXN0VVJMKGJh
Y2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93ZWJraXQub3JnL2Zvb2JhcmJhciIpLCB7IENvbnRl
bnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7Ci0gICAgdGVzdFVSTChiYWNr
ZW5kLCBVUkwoVVJMKCksICJodHRwOi8vd2Via2l0Lm9yZy9mb29mb29iYXIiKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwotICAgIHRlc3RVUkwoYmFja2Vu
ZCwgVVJMKFVSTCgpLCAiaHR0cDovL3dlYmtpdC5vcmcvZm9vYmFyZm9vYmFyIiksIHsgQ29udGVu
dEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKLSAgICB0ZXN0VVJMKGJhY2tl
bmQsIFVSTChVUkwoKSwgImh0dHA6Ly93ZWJraXQub3JnL2Zvb2IiKSwgeyBDb250ZW50RXh0ZW5z
aW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJM
KFVSTCgpLCAiaHR0cDovL3dlYmtpdC5vcmcvZm9vciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7Ci0KLQotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVS
TCgpLCAiaHR0cDovL3dlYmtpdC5vcmcvIiksIHsgfSk7Ci0gICAgdGVzdFVSTChiYWNrZW5kLCBV
UkwoVVJMKCksICJodHRwOi8vd2Via2l0Lm9yZy9iYXIiKSwgeyB9KTsKLSAgICB0ZXN0VVJMKGJh
Y2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93ZWJraXQub3JnL2ZvYmFyIiksIHsgfSk7CisgICAg
dGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5v
cmcvZm9vIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsK
KyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Vi
a2l0Lm9yZy9mb29iYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tM
b2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0
dHA6Ly93ZWJraXQub3JnL2Zvb2JhcmJhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvZm9vZm9vYmFyIiksIHsgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9mb29iYXJmb29iYXIiKSwgeyBD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1
ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2Zvb2Ii
KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRl
c3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3Jn
L2Zvb3IiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwor
CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dl
YmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvYmFyIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qo
YmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvZm9iYXIiKSwg
eyB9KTsKIH0KIAogY29uc3QgY2hhciogbWF0Y2hQYXN0RW5kT2ZTdHJpbmdGaWx0ZXIgPSAiW3tc
ImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIi4rXCJ9fV0iOwpAQCAtMTY3LDE0ICsxNzIsMTQgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNp
b25UZXN0LCBNYXRjaFBhc3RFbgogICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5z
aW9uc0JhY2tlbmQgYmFja2VuZDsKICAgICBiYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24oIk1h
dGNoUGFzdEVuZE9mU3RyaW5nIiwgZXh0ZW5zaW9uKTsKIAotICAgIHRlc3RVUkwoYmFja2VuZCwg
VVJMKFVSTCgpLCAiaHR0cDovL3dlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKLSAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwg
Imh0dHA6Ly93ZWJraXQub3JnL2ZvbyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpCbG9ja0xvYWQgfSk7Ci0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRwOi8v
d2Via2l0Lm9yZy9mb29iYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkIH0pOwotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0cDovL3dlYmtp
dC5vcmcvZm9vYmFyYmFyIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2Nr
TG9hZCB9KTsKLSAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93ZWJraXQu
b3JnL2Zvb2Zvb2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xv
YWQgfSk7Ci0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRwOi8vd2Via2l0Lm9y
Zy9mb29iYXJmb29iYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tM
b2FkIH0pOwotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0cDovL3dlYmtpdC5v
cmcvZm9vYiIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
Ci0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRwOi8vd2Via2l0Lm9yZy9mb29y
IiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0
ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9y
Zy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQu
b3JnL2ZvbyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dl
YmtpdC5vcmcvZm9vYmFyIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2Nr
TG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJo
dHRwOi8vd2Via2l0Lm9yZy9mb29iYXJiYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2Zvb2Zvb2JhciIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvZm9vYmFyZm9vYmFyIiksIHsg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVx
dWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9mb29i
IiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0
ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9y
Zy9mb29yIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsK
IH0KIAogY29uc3QgY2hhciogc3RhcnRPZkxpbmVBc3NlcnRpb25GaWx0ZXIgPSAiW3tcImFjdGlv
blwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5m
b29iYXJcIn19XSI7CkBAIC0xODcsMTQgKzE5MiwxNCBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lv
blRlc3QsIFN0YXJ0T2ZMaW5lCiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNp
b25zQmFja2VuZCBiYWNrZW5kOwogICAgIGJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbigiU3Rh
cnRPZkxpbmVBc3NlcnRpb24iLCBleHRlbnNpb24pOwogCi0gICAgdGVzdFVSTChiYWNrZW5kLCBV
UkwoVVJMKCksICJmb29iYXI6Ly93ZWJraXQub3JnL2Zvb2JhciIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7Ci0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwo
VVJMKCksICJmb29iYXJzOi8vL2Zvb2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0xvYWQgfSk7Ci0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJmb29i
YXJmb29iYXI6Ly8vZm9vYmFyZm9vYmFyZm9vYmFyIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKLQotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgp
LCAiaHR0cDovL3dlYmtpdC5vcmcvZm9vYmFyZm9vIiksIHsgfSk7Ci0gICAgdGVzdFVSTChiYWNr
ZW5kLCBVUkwoVVJMKCksICJodHRwOi8vd2Via2l0Lm9yZy9mb29iYXJmIiksIHsgfSk7Ci0gICAg
dGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRwOi8vZm9vYmFyLm9yZy8iKSwgeyB9KTsK
LSAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly9mb29iYXIub3JnLyIpLCB7
IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImZvb2Jh
cjovL3dlYmtpdC5vcmcvZm9vYmFyIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJmb29iYXJzOi8vL2Zvb2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiZm9vYmFyZm9vYmFyOi8vL2Zvb2JhcmZvb2JhcmZvb2JhciIpLCB7IENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9mb29iYXJmb28iKSwg
eyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRw
Oi8vd2Via2l0Lm9yZy9mb29iYXJmIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2Zvb2Jhci5vcmcvIiksIHsgfSk7CisgICAgdGVz
dFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2Zvb2Jhci5vcmcv
IiksIHsgfSk7CiB9CiAKIGNvbnN0IGNoYXIqIGVuZE9mTGluZUFzc2VydGlvbkZpbHRlciA9ICJb
e1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwiLipmb29iYXIkXCJ9fV0iOwpAQCAtMjA3LDEyICsyMTIsNTMgQEAgVEVTVF9GKENvbnRl
bnRFeHRlbnNpb25UZXN0LCBFbmRPZkxpbmVBcwogICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250
ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFja2VuZDsKICAgICBiYWNrZW5kLmFkZENvbnRlbnRFeHRl
bnNpb24oIkVuZE9mTGluZUFzc2VydGlvbiIsIGV4dGVuc2lvbik7CiAKLSAgICB0ZXN0VVJMKGJh
Y2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93ZWJraXQub3JnL2Zvb2JhciIpLCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7Ci0gICAgdGVzdFVSTChiYWNrZW5k
LCBVUkwoVVJMKCksICJmaWxlOi8vL2Zvb2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpCbG9ja0xvYWQgfSk7Ci0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJm
aWxlOi8vL2Zvb2JhcmZvb2JhcmZvb2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0xvYWQgfSk7Ci0KLSAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0
dHA6Ly93ZWJraXQub3JnL2Zvb2JhcmZvbyIpLCB7IH0pOwotICAgIHRlc3RVUkwoYmFja2VuZCwg
VVJMKFVSTCgpLCAiaHR0cDovL3dlYmtpdC5vcmcvZm9vYmFyZiIpLCB7IH0pOworICAgIHRlc3RS
ZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2Zv
b2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7Cisg
ICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZmlsZTovLy9mb29i
YXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImZpbGU6Ly8vZm9vYmFy
Zm9vYmFyZm9vYmFyIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9h
ZCB9KTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0
dHA6Ly93ZWJraXQub3JnL2Zvb2JhcmZvbyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2Zvb2JhcmYiKSwgeyB9
KTsKK30KKyAgICAKK2NvbnN0IGNoYXIqIGxvYWRUeXBlRmlsdGVyID0gIlt7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKndlYmtp
dC5vcmdcIixcImxvYWQtdHlwZVwiOltcInRoaXJkLXBhcnR5XCJdfX0sIgorICAgICJ7XCJhY3Rp
b25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIu
KndoYXR3Zy5vcmdcIixcImxvYWQtdHlwZVwiOltcImZpcnN0LXBhcnR5XCJdfX1dIjsKKyAgICAK
K1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgTG9hZFR5cGUpCit7CisgICAgYXV0byBleHRl
bnNpb25EYXRhID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChsb2FkVHlwZUZp
bHRlcik7CisgICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbjo6Y3JlYXRlKFdURjo6bW92ZShleHRlbnNpb25EYXRhKSk7CisgICAgICAgIAorICAgIENv
bnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFja2VuZDsKKyAgICBi
YWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24oIkxvYWRUeXBlRmlsdGVyIiwgZXh0ZW5zaW9uKTsK
KyAgICAgICAgCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
aHR0cDovL3dlYmtpdC5vcmciKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCB7VVJM
KFVSTCgpLCAiaHR0cDovL3dlYmtpdC5vcmciKSwgVVJMKFVSTCgpLCAiaHR0cDovL25vdF93ZWJr
aXQub3JnIiksIFJlc291cmNlVHlwZTo6RG9jdW1lbnR9LCB7IENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgICAgIAorICAgIHRlc3RSZXF1ZXN0KGJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93aGF0d2cub3JnIiksIHsgQ29udGVudEV4
dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNr
ZW5kLCB7VVJMKFVSTCgpLCAiaHR0cDovL3doYXR3Zy5vcmciKSwgVVJMKFVSTCgpLCAiaHR0cDov
L25vdF93aGF0d2cub3JnIiksIFJlc291cmNlVHlwZTo6RG9jdW1lbnR9LCB7IH0pOworfQorICAg
IAorY29uc3QgY2hhciogcmVzb3VyY2VUeXBlRmlsdGVyID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKmJsb2NrX2FsbF90
eXBlcy5vcmdcIixcInJlc291cmNlLXR5cGVcIjpbXCJkb2N1bWVudFwiLFwiaW1hZ2VcIixcInN0
eWxlLXNoZWV0XCIsXCJzY3JpcHRcIixcImZvbnRcIixcInJhd1wiLFwic3ZnLWRvY3VtZW50XCIs
XCJtZWRpYVwiXX19LCIKKyAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLipibG9ja19vbmx5X2ltYWdlc1wiLFwicmVzb3Vy
Y2UtdHlwZVwiOltcImltYWdlXCJdfX1dIjsKKyAgICAKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9u
VGVzdCwgUmVzb3VyY2VUeXBlKQoreworICAgIGF1dG8gZXh0ZW5zaW9uRGF0YSA9IENvbnRlbnRF
eHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QocmVzb3VyY2VUeXBlRmlsdGVyKTsKKyAgICBhdXRv
IGV4dGVuc2lvbiA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RG
Ojptb3ZlKGV4dGVuc2lvbkRhdGEpKTsKKyAgICAgICAgCisgICAgQ29udGVudEV4dGVuc2lvbnM6
OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBiYWNrZW5kOworICAgIGJhY2tlbmQuYWRkQ29udGVu
dEV4dGVuc2lvbigiUmVzb3VyY2VUeXBlRmlsdGVyIiwgZXh0ZW5zaW9uKTsKKworICAgIHRlc3RS
ZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9ibG9ja19hbGxfdHlw
ZXMub3JnIiwgUmVzb3VyY2VUeXBlOjpEb2N1bWVudCksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJodHRwOi8vYmxvY2tfYWxsX3R5cGVzLm9yZyIsIFJlc291cmNlVHlwZTo6
SW1hZ2UpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7Cisg
ICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2Jsb2Nr
X2FsbF90eXBlcy5vcmciLCBSZXNvdXJjZVR5cGU6OlN0eWxlU2hlZXQpLCB7IENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2Jsb2NrX2FsbF90eXBlcy5vcmciLCBSZXNv
dXJjZVR5cGU6OlNjcmlwdCksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2Nr
TG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJo
dHRwOi8vYmxvY2tfYWxsX3R5cGVzLm9yZyIsIFJlc291cmNlVHlwZTo6Rm9udCksIHsgQ29udGVu
dEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChi
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vYmxvY2tfYWxsX3R5cGVzLm9yZyIs
IFJlc291cmNlVHlwZTo6UmF3KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Imh0dHA6Ly9ibG9ja19hbGxfdHlwZXMub3JnIiwgUmVzb3VyY2VUeXBlOjpTVkdEb2N1bWVudCks
IHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vYmxvY2tfYWxsX3R5
cGVzLm9yZyIsIFJlc291cmNlVHlwZTo6TWVkaWEpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgiaHR0cDovL2Jsb2NrX29ubHlfaW1hZ2VzLm9yZyIsIFJlc291cmNlVHlwZTo6
SW1hZ2UpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7Cisg
ICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2Jsb2Nr
X29ubHlfaW1hZ2VzLm9yZyIsIFJlc291cmNlVHlwZTo6RG9jdW1lbnQpLCB7IH0pOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248460</attachid>
            <date>2015-03-11 15:56:39 -0700</date>
            <delta_ts>2015-03-11 18:04:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142422-20150311155614.patch</filename>
            <type>text/plain</type>
            <size>45465</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTQwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE1LTAzLTExICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQWRkIHJlc291cmNlIHR5cGUgYW5kIGxvYWQgdHlwZSB0cmlnZ2Vycy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjQyMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyBBUEkgdGVz
dHMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QpOgorICAg
ICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmdldFR5cGVGbGFncyk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6bG9hZFRyaWdnZXIpOgorICAgICAgICAqIGNv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmg6CisgICAgICAgICogY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OmFjdGlvbnNG
b3JSZXNvdXJjZUxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNv
bnRlbnRFeHRlbnNpb25zQmFja2VuZDo6YWN0aW9uc0ZvclVSTCk6IERlbGV0ZWQuCisgICAgICAg
ICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmg6CisgICAgICAg
ICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjppbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKToKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QXBwZW5k
Q29uZGl0aW9uYWxBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKiBjb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0KToKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmg6CisgICAgICAgICog
bG9hZGVyL1Jlc291cmNlTG9hZEluZm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRv
UmVzb3VyY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRSZXNvdXJjZVR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVhZExvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
TG9hZEluZm86OmlzVGhpcmRQYXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRJ
bmZvOjpnZXRSZXNvdXJjZUZsYWdzKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkSW5m
by5oOiBBZGRlZC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNv
dXJjZSk6CisgICAgICAgICogcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyOjphY3Rpb25zRm9yUmVzb3VyY2VMb2Fk
KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWN0aW9uc0ZvclVS
TCk6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaDoKKwog
MjAxNS0wMy0xMSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJlZmFjdG9yZWQgdGhlIEpTQzo6SGVhcCBleHRyYSBjb3N0IEFQSSBmb3IgY2xhcml0eSBhbmQg
dG8gbWFrZSBzb21lIGtub3duIGJ1Z3MgbW9yZSBvYnZpb3VzCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODE0
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTIwNTMsNiArMjA1Myw4IEBACiAJCTUxRUFDNTY4MTgxNUVEM0Uw
MDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUVBQzU2NjE4MTVFRDNFMDA0RjFCQTQgLyog
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUxRUFDNUIyMTgxNjNGNEUwMDRGMUJBNCAvKiBJREJSZWNv
cmRJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUVBQzVCMDE4MTYzRjRFMDA0RjFCQTQgLyogSURCUmVjb3JkSWRlbnRpZmllci5oICov
OyB9OwogCQk1MUVDOTI2NTBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21TUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxRUM5MjVEMENFOTBERDQwMEY5MDMwOCAvKiBKU0N1c3RvbVNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suY3BwICovOyB9OworCQk1MUVFN0IzODFBQTUwQjA1MDBGOTJCMjEgLyogUmVz
b3VyY2VMb2FkSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFFRTdCMzcxQUE1MEIwNTAwRjkyQjIxIC8qIFJlc291cmNlTG9hZEluZm8uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MUVFN0IzQTFB
QTUxMjMxMDBGOTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUVFN0IzOTFBQTUxMjMxMDBGOTJCMjEgLyog
UmVzb3VyY2VMb2FkSW5mby5jcHAgKi87IH07CiAJCTUxRkEyRDc4MTUyMTMyQjMwMEMxQkEwQiAv
KiBET01XaW5kb3dFeHRlbnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxN0ZCQTE4MTUxQUE3MUIwMEI1Nzk1OSAvKiBET01XaW5kb3dFeHRlbnNp
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
MUZCNTUwNDExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZCNTUwMjExM0UzRTkxMDA4MjExNzYg
LyogSlNDbG9zZUV2ZW50LmggKi87IH07CiAJCTUxRkI1NTA1MTEzRTNFOTEwMDgyMTE3NiAvKiBK
U0Nsb3NlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFGQjU1MDMxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAgKi87IH07
CkBAIC05MjI0LDYgKzkyMjYsOCBAQAogCQk1MUVBQzU2NjE4MTVFRDNFMDA0RjFCQTQgLyogSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxRUFDNUIwMTgxNjNGNEUwMDRGMUJBNCAvKiBJREJSZWNvcmRJZGVudGlmaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlJlY29yZElkZW50aWZpZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFQzkyNUQwQ0U5MERENDAwRjkwMzA4IC8qIEpT
Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUVFN0IzNzFBQTUwQjA1MDBGOTJCMjEgLyog
UmVzb3VyY2VMb2FkSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNv
dXJjZUxvYWRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRUU3QjM5MUFB
NTEyMzEwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291cmNlTG9hZEluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MUY2QTNENTA2NjNCRjA0MDA0RDI5MTkgLyogSFRNTENhbnZhc0VsZW1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSFRNTENhbnZhc0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTFGNkEzRDYwNjYzQkYwNDAwNEQyOTE5IC8q
IEhUTUxDYW52YXNFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEhUTUxDYW52YXNFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1MUZCNTUwMjExM0UzRTkxMDA4
MjExNzYgLyogSlNDbG9zZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQ2xvc2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE0NDcsNiAr
MjE0NTEsOCBAQAogCQkJCTY1NkQzNzI3MEFEQkE1REUwMEE0NTU0RCAvKiBSZXNvdXJjZUxvYWRl
ci5oICovLAogCQkJCUQwQTNBNzMwMTQwNUEzOTgwMEZCOEVEMyAvKiBSZXNvdXJjZUxvYWRlck9w
dGlvbnMuaCAqLywKIAkJCQk1MUFGNTAzNTE2RjEwMEY2MDA5NUIyRTggLyogUmVzb3VyY2VMb2Fk
ZXJUeXBlcy5oICovLAorCQkJCTUxRUU3QjM5MUFBNTEyMzEwMEY5MkIyMSAvKiBSZXNvdXJjZUxv
YWRJbmZvLmNwcCAqLywKKwkJCQk1MUVFN0IzNzFBQTUwQjA1MDBGOTJCMjEgLyogUmVzb3VyY2VM
b2FkSW5mby5oICovLAogCQkJCTk3M0UzMjU0MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxv
YWROb3RpZmllci5jcHAgKi8sCiAJCQkJOTczRTMyNTUxMDg4M0I3QzAwNUJDNDkzIC8qIFJlc291
cmNlTG9hZE5vdGlmaWVyLmggKi8sCiAJCQkJRDBDRTU4RjYxMjVFNENDMjAwRjNGMTk5IC8qIFJl
c291cmNlTG9hZFNjaGVkdWxlci5jcHAgKi8sCkBAIC0yNTEyNyw2ICsyNTEzMyw3IEBACiAJCQkJ
MUFFMkFFQzgwQTFEMjk3QjAwQjQyQjI1IC8qIEpTSFRNTFF1b3RlRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUFFMkFCQUQwQTFDRTkwNTAwQjQyQjI1IC8qIEpTSFRNTFNjcmlwdEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRTZFRUE4MEI2MjhEQjMwMDVGMkY3MCAvKiBKU0hU
TUxTZWxlY3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUVFN0IzODFBQTUwQjA1MDBG
OTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUI0Q0I0RUIw
QjhCREEzRDAwOUY0MEIwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUU0NDYxNDNDMENENjg5Q0MwMEZBREE3NSAvKiBKU0hUTUxTb3VyY2VFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzUyRDM4RTE0MTMxMDRCMDAzMzA1QkQgLyogSlNIVE1M
U3BhbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzAxMTEsNiArMzAxMTgsNyBAQAogCQkJ
CUExNDgzMkIxMTg3RjYxRTEwMERBNjNBNiAvKiBXQUtBcHBLaXRTdHVicy5tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTE0ODMyQjMxODdGNjI5MTAwREE2M0E2IC8qIFdBS0NsaXBWaWV3Lm0gaW4gU291
cmNlcyAqLywKIAkJCQlBMTQ4MzJCNTE4N0Y2MkZDMDBEQTYzQTYgLyogV0FLUmVzcG9uZGVyLm0g
aW4gU291cmNlcyAqLywKKwkJCQk1MUVFN0IzQTFBQTUxMjMxMDBGOTJCMjEgLyogUmVzb3VyY2VM
b2FkSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTQ4MzJCNzE4N0Y2MzZDMDBEQTYzQTYg
LyogV0FLU2Nyb2xsVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExNDgzMkI5MTg3RjYzRDUw
MERBNjNBNiAvKiBXQUtWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE0ODMyQkMxODdGNjQ4
RTAwREE2M0E2IC8qIFdBS1dpbmRvdy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODE0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTYsNyArMTE2LDggQEAgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBjb21waWxl
UnVsZQogICAgICAgICBjb25zdCBUcmlnZ2VyJiB0cmlnZ2VyID0gY29udGVudEV4dGVuc2lvblJ1
bGUudHJpZ2dlcigpOwogICAgICAgICBBU1NFUlQodHJpZ2dlci51cmxGaWx0ZXIubGVuZ3RoKCkp
OwogCi0gICAgICAgIFN0cmluZyBlcnJvciA9IHVybEZpbHRlclBhcnNlci5hZGRQYXR0ZXJuKHRy
aWdnZXIudXJsRmlsdGVyLCB0cmlnZ2VyLnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSwgYWN0aW9u
TG9jYXRpb25zW3J1bGVJbmRleF0pOworICAgICAgICAvLyBIaWdoIGJpdHMgYXJlIHVzZWQgZm9y
IGZsYWdzLiBUaGlzIHNob3VsZCBtYXRjaCBob3cgdGhleSBhcmUgdXNlZCBpbiBERkFCeXRlY29k
ZUNvbXBpbGVyOjpjb21waWxlTm9kZS4KKyAgICAgICAgU3RyaW5nIGVycm9yID0gdXJsRmlsdGVy
UGFyc2VyLmFkZFBhdHRlcm4odHJpZ2dlci51cmxGaWx0ZXIsIHRyaWdnZXIudXJsRmlsdGVySXND
YXNlU2Vuc2l0aXZlLCAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRyaWdnZXIuZmxhZ3MpIDw8IDMy
KSB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihhY3Rpb25Mb2NhdGlvbnNbcnVsZUluZGV4XSkpOwog
CiAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2dGKCJF
cnJvciB3aGlsZSBwYXJzaW5nICVzOiAlc1xuIiwgdHJpZ2dlci51cmxGaWx0ZXIudXRmOCgpLmRh
dGEoKSwgZXJyb3IudXRmOCgpLmRhdGEoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAko
cmV2aXNpb24gMTgxNDA3KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDM4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAor
c3RhdGljIGJvb2wgZ2V0VHlwZUZsYWdzKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYg
dHlwZVZhbHVlLCBSZXNvdXJjZUZsYWdzJiBmbGFncywgdWludDE2X3QoKnN0cmluZ1RvVHlwZSko
Y29uc3QgU3RyaW5nJikpCit7CisgICAgaWYgKCF0eXBlVmFsdWUuaXNPYmplY3QoKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0gdHlwZVZhbHVlLnRvT2Jq
ZWN0KCZleGVjKTsKKyAgICBpZiAoIWlzSlNBcnJheShvYmplY3QpKSB7CisgICAgICAgIFdURkxv
Z0Fsd2F5cygiSW52YWxpZCB0cmlnZ2VyIGZsYWdzIGFycmF5Iik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBKU0FycmF5KiBhcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4ob2Jq
ZWN0KTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBhcnJheS0+Z2V0SW5kZXgoJmV4ZWMsIGkpOworICAgICAgICBpZiAoZXhlYy5oYWRF
eGNlcHRpb24oKSB8fCAhdmFsdWUpIHsKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiSW52YWxp
ZCBvYmplY3QgaW4gdGhlIHRyaWdnZXIgZmxhZ3MgYXJyYXkuIik7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3RyaW5nIG5hbWUgPSB2YWx1ZS50
b1dURlN0cmluZygmZXhlYyk7CisgICAgICAgIHVpbnQxNl90IHR5cGUgPSBzdHJpbmdUb1R5cGUo
bmFtZSk7CisgICAgICAgIGlmICghdHlwZSkgeworICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJJ
bnZhbGlkIHN0cmluZyBpbiB0aGUgdHJpZ2dlciBmbGFncyBhcnJheS4iKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGZsYWdzIHw9IHR5cGU7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorICAgIAogc3RhdGljIGJvb2wgbG9hZFRyaWdnZXIoRXhlY1N0YXRl
JiBleGVjLCBKU09iamVjdCYgcnVsZU9iamVjdCwgVHJpZ2dlciYgdHJpZ2dlcikKIHsKICAgICBK
U1ZhbHVlIHRyaWdnZXJPYmplY3QgPSBydWxlT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcigm
ZXhlYywgInRyaWdnZXIiKSk7CkBAIC02Nyw5ICs5OSwxNyBAQCBzdGF0aWMgYm9vbCBsb2FkVHJp
Z2dlcihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgfQogICAgIHRyaWdnZXIudXJsRmlsdGVyID0gdXJs
RmlsdGVyOwogCi0gICAgSlNWYWx1ZSB1cmxGaWx0ZXJDYXNlT2JqZWN0ID0gdHJpZ2dlck9iamVj
dC5nZXQoJmV4ZWMsIElkZW50aWZpZXIoJmV4ZWMsICJ1cmwtZmlsdGVyLWlzLWNhc2Utc2Vuc2l0
aXZlIikpOwotICAgIGlmICh1cmxGaWx0ZXJDYXNlT2JqZWN0ICYmICFleGVjLmhhZEV4Y2VwdGlv
bigpICYmIHVybEZpbHRlckNhc2VPYmplY3QuaXNCb29sZWFuKCkpCi0gICAgICAgIHRyaWdnZXIu
dXJsRmlsdGVySXNDYXNlU2Vuc2l0aXZlID0gdXJsRmlsdGVyQ2FzZU9iamVjdC50b0Jvb2xlYW4o
JmV4ZWMpOworICAgIEpTVmFsdWUgdXJsRmlsdGVyQ2FzZVZhbHVlID0gdHJpZ2dlck9iamVjdC5n
ZXQoJmV4ZWMsIElkZW50aWZpZXIoJmV4ZWMsICJ1cmwtZmlsdGVyLWlzLWNhc2Utc2Vuc2l0aXZl
IikpOworICAgIGlmICh1cmxGaWx0ZXJDYXNlVmFsdWUgJiYgIWV4ZWMuaGFkRXhjZXB0aW9uKCkg
JiYgdXJsRmlsdGVyQ2FzZVZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICB0cmlnZ2VyLnVybEZp
bHRlcklzQ2FzZVNlbnNpdGl2ZSA9IHVybEZpbHRlckNhc2VWYWx1ZS50b0Jvb2xlYW4oJmV4ZWMp
OworCisgICAgSlNWYWx1ZSByZXNvdXJjZVR5cGVWYWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0KCZl
eGVjLCBJZGVudGlmaWVyKCZleGVjLCAicmVzb3VyY2UtdHlwZSIpKTsKKyAgICBpZiAocmVzb3Vy
Y2VUeXBlVmFsdWUgJiYgIWV4ZWMuaGFkRXhjZXB0aW9uKCkgJiYgIWdldFR5cGVGbGFncyhleGVj
LCByZXNvdXJjZVR5cGVWYWx1ZSwgdHJpZ2dlci5mbGFncywgcmVhZFJlc291cmNlVHlwZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBKU1ZhbHVlIGxvYWRUeXBlVmFsdWUgPSB0
cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcigmZXhlYywgImxvYWQtdHlwZSIpKTsK
KyAgICBpZiAobG9hZFR5cGVWYWx1ZSAmJiAhZXhlYy5oYWRFeGNlcHRpb24oKSAmJiAhZ2V0VHlw
ZUZsYWdzKGV4ZWMsIGxvYWRUeXBlVmFsdWUsIHRyaWdnZXIuZmxhZ3MsIHJlYWRMb2FkVHlwZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uUnVsZS5oCShyZXZpc2lvbiAxODE0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw3IEBACiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAogI2luY2x1ZGUgIkNvbnRl
bnRFeHRlbnNpb25BY3Rpb25zLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkSW5mby5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00
Myw2ICs0NCw3IEBAIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiBzdHJ1Y3QgVHJpZ2dl
ciB7CiAgICAgU3RyaW5nIHVybEZpbHRlcjsKICAgICBib29sIHVybEZpbHRlcklzQ2FzZVNlbnNp
dGl2ZSB7IGZhbHNlIH07CisgICAgUmVzb3VyY2VGbGFncyBmbGFncyB7IDAgfTsKIH07CiAgICAg
CiBzdHJ1Y3QgQWN0aW9uIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkocmV2aXNp
b24gMTgxNDA3KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvbnNCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAj
aW5jbHVkZSAiQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiREZBQnl0ZWNv
ZGVJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZEluZm8uaCIKICNpbmNsdWRl
ICJVUkwuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTYxLDE2ICs2Miwx
NyBAQCB2b2lkIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6cmVtb3ZlQWxsCiAgICAgbV9jb250
ZW50RXh0ZW5zaW9ucy5jbGVhcigpOwogfQogCi1WZWN0b3I8QWN0aW9uPiBDb250ZW50RXh0ZW5z
aW9uc0JhY2tlbmQ6OmFjdGlvbnNGb3JVUkwoY29uc3QgVVJMJiB1cmwpCitWZWN0b3I8QWN0aW9u
PiBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQoY29uc3Qg
UmVzb3VyY2VMb2FkSW5mbyYgcmVzb3VyY2VMb2FkSW5mbykgY29uc3QKIHsKLSAgICBjb25zdCBT
dHJpbmcmIHVybFN0cmluZyA9IHVybC5zdHJpbmcoKTsKKyAgICBjb25zdCBTdHJpbmcmIHVybFN0
cmluZyA9IHJlc291cmNlTG9hZEluZm8ucmVzb3VyY2VVUkwuc3RyaW5nKCk7CiAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRSh1cmxTdHJpbmcuY29udGFpbnNPbmx5QVNDSUkoKSwgIkEgZGVjb2RlZCBV
Ukwgc2hvdWxkIG9ubHkgY29udGFpbiBBU0NJSSBjaGFyYWN0ZXJzLiBUaGUgbWF0Y2hpbmcgYWxn
b3JpdGhtIGFzc3VtZXMgdGhlIGlucHV0IGlzIEFTQ0lJLiIpOwogICAgIGNvbnN0IENTdHJpbmcm
IHVybENTdHJpbmcgPSB1cmxTdHJpbmcudXRmOCgpOwogCiAgICAgVmVjdG9yPEFjdGlvbj4gZmlu
YWxBY3Rpb25zOworICAgIFJlc291cmNlRmxhZ3MgZmxhZ3MgPSByZXNvdXJjZUxvYWRJbmZvLmdl
dFJlc291cmNlRmxhZ3MoKTsKICAgICBmb3IgKGF1dG8mIGNvbXBpbGVkQ29udGVudEV4dGVuc2lv
biA6IG1fY29udGVudEV4dGVuc2lvbnMudmFsdWVzKCkpIHsKICAgICAgICAgREZBQnl0ZWNvZGVJ
bnRlcnByZXRlciBpbnRlcnByZXRlcihjb21waWxlZENvbnRlbnRFeHRlbnNpb24tPmJ5dGVjb2Rl
KCksIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi0+Ynl0ZWNvZGVMZW5ndGgoKSk7Ci0gICAgICAg
IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgdHJpZ2dlcmVkQWN0aW9ucyA9IGludGVy
cHJldGVyLmludGVycHJldCh1cmxDU3RyaW5nKTsKKyAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnBy
ZXRlcjo6QWN0aW9ucyB0cmlnZ2VyZWRBY3Rpb25zID0gaW50ZXJwcmV0ZXIuaW50ZXJwcmV0KHVy
bENTdHJpbmcsIGZsYWdzKTsKICAgICAgICAgCiAgICAgICAgIGNvbnN0IFNlcmlhbGl6ZWRBY3Rp
b25CeXRlKiBhY3Rpb25zID0gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLT5hY3Rpb25zKCk7CiAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGFjdGlvbnNMZW5ndGggPSBjb21waWxlZENvbnRlbnRFeHRl
bnNpb24tPmFjdGlvbnNMZW5ndGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oCShyZXZp
c2lvbiAxODE0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uc0JhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFVSTDsKIAorc3RydWN0IFJlc291cmNlTG9hZEluZm87
CisKIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKIGNsYXNzIENvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbjsKQEAgLTU3LDcgKzU5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKIAogICAgIC8vIC0gSW50ZXJuYWwg
V2ViQ29yZSBJbnRlcmZhY2UuCi0gICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPEFjdGlvbj4gYWN0
aW9uc0ZvclVSTChjb25zdCBVUkwmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8QWN0aW9u
PiBhY3Rpb25zRm9yUmVzb3VyY2VMb2FkKGNvbnN0IFJlc291cmNlTG9hZEluZm8mKSBjb25zdDsK
IAogcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPENvbXBpbGVkQ29udGVudEV4
dGVuc2lvbj4+IG1fY29udGVudEV4dGVuc2lvbnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHJldmlzaW9uIDE4MTQwNykKKysrIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDYgKzQ0LDExIEBAIGVudW0gY2xhc3MgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiA6
IHVpbnQKICAgICAvLyBBcHBlbmRBY3Rpb24gaGFzIG9uZSBhcmd1bWVudDoKICAgICAvLyBUaGUg
YWN0aW9uIHRvIGFwcGVuZCAoNCBieXRlcykuCiAgICAgQXBwZW5kQWN0aW9uLAorICAgIAorICAg
IC8vIFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbiBoYXMgdHdvIGFyZ3VtZW50czoKKyAgICAvLyBU
aGUgZmxhZ3MgdG8gY2hlY2sgYmVmb3JlIGFwcGVuZGluZyAoMiBieXRlcyksCisgICAgLy8gVGhl
IGFjdGlvbiB0byBhcHBlbmQgKDRieXRlcykuCisgICAgVGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9u
LAogCiAgICAgLy8gVGVybWluYXRlIGhhcyBubyBhcmd1bWVudHMuCiAgICAgVGVybWluYXRlLApA
QCAtNjAsNiArNjUsOCBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBpbnN0cnVjdGlvblNpemVXaXRo
CiAgICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2Yo
dWludDhfdCkgKyBzaXplb2YodW5zaWduZWQpOwogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVj
dGlvbjo6QXBwZW5kQWN0aW9uOgogICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb24pICsgc2l6ZW9mKHVuc2lnbmVkKTsKKyAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihE
RkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50MTZfdCkgKyBzaXplb2YodW5zaWdu
ZWQpOwogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVybWluYXRlOgogICAgICAg
ICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pOwogICAgIGNhc2UgREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAx
ODE0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNv
bXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsMTQgQEAgdm9pZCBERkFCeXRl
Y29kZUNvbXBpbGVyOjplbWl0QXBwZW5kQWN0aQogICAgIGFwcGVuZDx1bnNpZ25lZD4obV9ieXRl
Y29kZSwgYWN0aW9uKTsKIH0KIAordm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0VGVzdEZs
YWdzQW5kQXBwZW5kQWN0aW9uKHVpbnQxNl90IGZsYWdzLCB1bnNpZ25lZCBhY3Rpb24pCit7Cisg
ICAgQVNTRVJUKGZsYWdzKTsKKyAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9i
eXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9u
KTsKKyAgICBhcHBlbmQ8dWludDE2X3Q+KG1fYnl0ZWNvZGUsIGZsYWdzKTsKKyAgICBhcHBlbmQ8
dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIGFjdGlvbik7Cit9CisKIHZvaWQgREZBQnl0ZWNvZGVDb21w
aWxlcjo6ZW1pdEp1bXAodW5zaWduZWQgZGVzdGluYXRpb25Ob2RlSW5kZXgpCiB7CiAgICAgYXBw
ZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246Okp1bXApOwpAQCAtODAsOCArODgsMTMgQEAgdm9pZCBERkFCeXRlY29kZUNvbXBpbGVy
Ojpjb21waWxlTm9kZSh1bgogICAgIC8vIFJlY29yZCBzdGFydGluZyBpbmRleCBmb3IgbGlua2lu
Zy4KICAgICBtX25vZGVTdGFydE9mZnNldHNbaW5kZXhdID0gbV9ieXRlY29kZS5zaXplKCk7CiAK
LSAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbiA6IG5vZGUuYWN0aW9ucykKLSAgICAgICAgZW1pdEFw
cGVuZEFjdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0aW9uKSk7CisgICAgZm9yICh1aW50
NjRfdCBhY3Rpb24gOiBub2RlLmFjdGlvbnMpIHsKKyAgICAgICAgLy8gSGlnaCBiaXRzIGFyZSB1
c2VkIHRvIHN0b3JlIGZsYWdzLiBTZWUgY29tcGlsZVJ1bGVMaXN0LgorICAgICAgICBpZiAoYWN0
aW9uICYgMHhGRkZGMDAwMDAwMDApCisgICAgICAgICAgICBlbWl0VGVzdEZsYWdzQW5kQXBwZW5k
QWN0aW9uKHN0YXRpY19jYXN0PHVpbnQxNl90PihhY3Rpb24gPj4gMzIpLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oYWN0aW9uKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVtaXRBcHBlbmRB
Y3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFjdGlvbikpOworICAgIH0KICAgICAKICAgICBm
b3IgKGNvbnN0IGF1dG8mIHRyYW5zaXRpb24gOiBub2RlLnRyYW5zaXRpb25zKQogICAgICAgICBl
bWl0Q2hlY2tWYWx1ZSh0cmFuc2l0aW9uLmtleSwgdHJhbnNpdGlvbi52YWx1ZSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVD
b21waWxlci5oCShyZXZpc2lvbiAxODE0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUy
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVOb2RlKHVuc2lnbmVkKTsKIAogICAgIHZv
aWQgZW1pdEFwcGVuZEFjdGlvbih1bnNpZ25lZCk7CisgICAgdm9pZCBlbWl0VGVzdEZsYWdzQW5k
QXBwZW5kQWN0aW9uKHVpbnQxNl90IGZsYWdzLCB1bnNpZ25lZCk7CiAgICAgdm9pZCBlbWl0SnVt
cCh1bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRleCk7CiAgICAgdm9pZCBlbWl0Q2hlY2tWYWx1
ZSh1aW50OF90IHZhbHVlLCB1bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRleCk7CiAgICAgdm9p
ZCBlbWl0VGVybWluYXRlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAkocmV2aXNpb24g
MTgxNDA3KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJ
bnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgc3RhdGljIGlu
bGluZSBJbnRUeXBlIGdldEJpdHMoY29uc3QgREZBQgogICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBJbnRUeXBlKj4oJmJ5dGVjb2RlW2luZGV4XSk7CiB9CiAKLURGQUJ5dGVjb2Rl
SW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0KGNv
bnN0IENTdHJpbmcmIHVybENTdHJpbmcpCitERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25z
IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldChjb25zdCBDU3RyaW5nJiB1cmxDU3Ry
aW5nLCB1aW50MTZfdCBmbGFncykKIHsKICAgICBjb25zdCBjaGFyKiB1cmwgPSB1cmxDU3RyaW5n
LmRhdGEoKTsKICAgICBBU1NFUlQodXJsKTsKQEAgLTg2LDYgKzg2LDEyIEBAIERGQUJ5dGVjb2Rl
SW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMKICAgICAgICAgICAgIHByb2dyYW1Db3VudGVy
ICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6
QXBwZW5kQWN0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uOgorICAgICAgICAgICAg
aWYgKGZsYWdzICYgZ2V0Qml0czx1aW50MTZfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0
aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpKSkKKyAgICAgICAgICAgICAg
ICBhY3Rpb25zLmFkZChzdGF0aWNfY2FzdDx1aW50NjRfdD4oZ2V0Qml0czx1bnNpZ25lZD4obV9i
eXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0
ZWNvZGUpICsgc2l6ZW9mKHVpbnQxNl90KSkpKTsKKyAgICAgICAgICAgIHByb2dyYW1Db3VudGVy
ICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6
VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBJ
bnZhbGlkIGJ5dGVjb2RlLgogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oCShyZXZp
c2lvbiAxODE0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZUludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGlj
OgogICAgIAogICAgIHR5cGVkZWYgSGFzaFNldDx1aW50NjRfdCwgRGVmYXVsdEhhc2g8dWludDY0
X3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90Pj4g
QWN0aW9uczsKICAgICAKLSAgICBBY3Rpb25zIGludGVycHJldChjb25zdCBDU3RyaW5nJik7Cisg
ICAgQWN0aW9ucyBpbnRlcnByZXQoY29uc3QgQ1N0cmluZyYsIHVpbnQxNl90IGZsYWdzKTsKIAog
cHJpdmF0ZToKICAgICBjb25zdCBERkFCeXRlY29kZSogbV9ieXRlY29kZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkSW5mby5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkSW5mby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkSW5mby5oIgorCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkFj
dGlvbnMuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1Jlc291cmNlVHlwZSB0b1Jlc291cmNlVHlwZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0
eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1h
aW5SZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIFJlc291cmNlVHlwZTo6RG9jdW1lbnQ7CisgICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRG9jdW1lbnRSZXNvdXJjZToKKyAgICAgICAgcmV0dXJu
IFJlc291cmNlVHlwZTo6U1ZHRG9jdW1lbnQ7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1h
Z2VSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIFJlc291cmNlVHlwZTo6SW1hZ2U7CisgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgorI2VuZGlmCisgICAgICAgIHJldHVy
biBSZXNvdXJjZVR5cGU6OlN0eWxlU2hlZXQ7CisKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpT
Y3JpcHQ6CisgICAgICAgIHJldHVybiBSZXNvdXJjZVR5cGU6OlNjcmlwdDsKKworICAgIGNhc2Ug
Q2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0ZvbnRSZXNvdXJjZToKKyNlbmRpZgorICAgICAgICBy
ZXR1cm4gUmVzb3VyY2VUeXBlOjpGb250OworCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3
UmVzb3VyY2U6CisgICAgICAgIHJldHVybiBSZXNvdXJjZVR5cGU6OlJhdzsKKworI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpUZXh0VHJhY2tSZXNvdXJj
ZToKKyAgICAgICAgcmV0dXJuIFJlc291cmNlVHlwZTo6TWVkaWE7CisjZW5kaWYKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9OworfQorCit1aW50MTZf
dCByZWFkUmVzb3VyY2VUeXBlKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFtZSA9
PSAiZG9jdW1lbnQiKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KFJlc291
cmNlVHlwZTo6RG9jdW1lbnQpOworICAgIGlmIChuYW1lID09ICJpbWFnZSIpCisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1aW50MTZfdD4oUmVzb3VyY2VUeXBlOjpJbWFnZSk7CisgICAgaWYg
KG5hbWUgPT0gInN0eWxlLXNoZWV0IikKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQx
Nl90PihSZXNvdXJjZVR5cGU6OlN0eWxlU2hlZXQpOworICAgIGlmIChuYW1lID09ICJzY3JpcHQi
KQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KFJlc291cmNlVHlwZTo6U2Ny
aXB0KTsKKyAgICBpZiAobmFtZSA9PSAiZm9udCIpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1aW50MTZfdD4oUmVzb3VyY2VUeXBlOjpGb250KTsKKyAgICBpZiAobmFtZSA9PSAicmF3IikK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90PihSZXNvdXJjZVR5cGU6OlJhdyk7
CisgICAgaWYgKG5hbWUgPT0gInN2Zy1kb2N1bWVudCIpCisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1aW50MTZfdD4oUmVzb3VyY2VUeXBlOjpTVkdEb2N1bWVudCk7CisgICAgaWYgKG5hbWUg
PT0gIm1lZGlhIikKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90PihSZXNvdXJj
ZVR5cGU6Ok1lZGlhKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KFJlc291cmNl
VHlwZTo6SW52YWxpZCk7Cit9CisKK3VpbnQxNl90IHJlYWRMb2FkVHlwZShjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgaWYgKG5hbWUgPT0gImZpcnN0LXBhcnR5IikKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVpbnQxNl90PihMb2FkVHlwZTo6Rmlyc3RQYXJ0eSk7CisgICAgaWYgKG5h
bWUgPT0gInRoaXJkLXBhcnR5IikKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90
PihMb2FkVHlwZTo6VGhpcmRQYXJ0eSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90
PihMb2FkVHlwZTo6SW52YWxpZCk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkSW5mbzo6aXNUaGly
ZFBhcnR5KCkgY29uc3QKK3sKKyAgICBSZWY8U2VjdXJpdHlPcmlnaW4+IG1haW5Eb2N1bWVudFNl
Y3VyaXR5T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShtYWluRG9jdW1lbnRVUkwpOwor
ICAgIFJlZjxTZWN1cml0eU9yaWdpbj4gcmVzb3VyY2VTZWN1cml0eU9yaWdpbiA9IFNlY3VyaXR5
T3JpZ2luOjpjcmVhdGUocmVzb3VyY2VVUkwpOworCisgICAgcmV0dXJuICFtYWluRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbi0+Y2FuQWNjZXNzKCZyZXNvdXJjZVNlY3VyaXR5T3JpZ2luLmdldCgpKTsK
K30KKyAgICAKK1Jlc291cmNlRmxhZ3MgUmVzb3VyY2VMb2FkSW5mbzo6Z2V0UmVzb3VyY2VGbGFn
cygpIGNvbnN0Cit7CisgICAgUmVzb3VyY2VGbGFncyBmbGFncyA9IDA7CisgICAgQVNTRVJUKHR5
cGUgIT0gUmVzb3VyY2VUeXBlOjpJbnZhbGlkKTsKKyAgICBmbGFncyB8PSBzdGF0aWNfY2FzdDxS
ZXNvdXJjZUZsYWdzPih0eXBlKTsKKyAgICBmbGFncyB8PSBpc1RoaXJkUGFydHkoKSA/IHN0YXRp
Y19jYXN0PFJlc291cmNlRmxhZ3M+KExvYWRUeXBlOjpUaGlyZFBhcnR5KSA6IHN0YXRpY19jYXN0
PFJlc291cmNlRmxhZ3M+KExvYWRUeXBlOjpGaXJzdFBhcnR5KTsKKyAgICByZXR1cm4gZmxhZ3M7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZEluZm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgUmVzb3VyY2VMb2FkSW5mb19oCisjZGVmaW5lIFJlc291cmNlTG9h
ZEluZm9faAorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJVUkwuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIFJlc291cmNlVHlwZSA6IHVpbnQx
Nl90IHsKKyAgICBJbnZhbGlkID0gMHgwMDAwLAorICAgIERvY3VtZW50ID0gMHgwMDAxLAorICAg
IEltYWdlID0gMHgwMDAyLAorICAgIFN0eWxlU2hlZXQgPSAweDAwMDQsCisgICAgU2NyaXB0ID0g
MHgwMDA4LAorICAgIEZvbnQgPSAweDAwMTAsCisgICAgUmF3ID0gMHgwMDIwLAorICAgIFNWR0Rv
Y3VtZW50ID0gMHgwMDQwLAorICAgIE1lZGlhID0gMHgwMDgwLAorfTsKKworZW51bSBjbGFzcyBM
b2FkVHlwZSA6IHVpbnQxNl90IHsKKyAgICBJbnZhbGlkID0gMHgwMDAwLAorICAgIEZpcnN0UGFy
dHkgPSAweDAxMDAsCisgICAgVGhpcmRQYXJ0eSA9IDB4MDIwMCwKK307CisKK3R5cGVkZWYgdWlu
dDE2X3QgUmVzb3VyY2VGbGFnczsKKworUmVzb3VyY2VUeXBlIHRvUmVzb3VyY2VUeXBlKENhY2hl
ZFJlc291cmNlOjpUeXBlKTsKK3VpbnQxNl90IHJlYWRSZXNvdXJjZVR5cGUoY29uc3QgU3RyaW5n
Jik7Cit1aW50MTZfdCByZWFkTG9hZFR5cGUoY29uc3QgU3RyaW5nJik7CisKK3N0cnVjdCBSZXNv
dXJjZUxvYWRJbmZvIHsKKyAgICBVUkwgcmVzb3VyY2VVUkw7CisgICAgVVJMIG1haW5Eb2N1bWVu
dFVSTDsKKyAgICBSZXNvdXJjZVR5cGUgdHlwZTsKKworICAgIGJvb2wgaXNUaGlyZFBhcnR5KCkg
Y29uc3Q7CisgICAgUmVzb3VyY2VGbGFncyBnZXRSZXNvdXJjZUZsYWdzKCkgY29uc3Q7Cit9Owor
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFJlc291cmNlTG9hZEluZm9f
aApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxODE0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2
ICs1OCw3IEBACiAjaW5jbHVkZSAiUGluZ0xvYWRlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
YXRlZ2llcy5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZUxvYWRJbmZvLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC01
MDcsOCArNTA4LDE0IEBAIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBDYWMK
ICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIFZlY3RvcjxDb250ZW50RXh0ZW5z
aW9uczo6QWN0aW9uPiBhY3Rpb25zOwogCi0gICAgaWYgKGZyYW1lKCkgJiYgZnJhbWUoKS0+cGFn
ZSgpICYmIGZyYW1lKCktPnBhZ2UoKS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkpCi0gICAgICAg
IGFjdGlvbnMgPSBmcmFtZSgpLT5wYWdlKCktPnVzZXJDb250ZW50Q29udHJvbGxlcigpLT5hY3Rp
b25zRm9yVVJMKHVybCk7CisgICAgVVJMIG1haW5Eb2N1bWVudFVSTDsKKyAgICBpZiAoZnJhbWUo
KSAmJiBmcmFtZSgpLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpKQorICAgICAgICBtYWluRG9jdW1l
bnRVUkwgPSBmcmFtZSgpLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT51cmwoKTsKKyAgICAKKyAg
ICBSZXNvdXJjZUxvYWRJbmZvIHJlc291cmNlTG9hZEluZm8gPSB7IHVybCwgbWFpbkRvY3VtZW50
VVJMLCB0b1Jlc291cmNlVHlwZSh0eXBlKSB9OworICAgIAorICAgIGlmIChmcmFtZSgpICYmIGZy
YW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKSAmJiBmcmFtZSgpLT5tYWluRnJhbWUoKS5wYWdlKCkt
PnVzZXJDb250ZW50Q29udHJvbGxlcigpKQorICAgICAgICBhY3Rpb25zID0gZnJhbWUoKS0+bWFp
bkZyYW1lKCkucGFnZSgpLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS0+YWN0aW9uc0ZvclJlc291
cmNlTG9hZChyZXNvdXJjZUxvYWRJbmZvKTsKIAogICAgIGJvb2wgd2lsbEJsb2NrTG9hZCA9IGZh
bHNlOwogICAgIGZvciAoY29uc3QgYXV0byYgYWN0aW9uIDogYWN0aW9ucykgewpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MTgxNDA3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VMb2FkSW5mby5oIgogI2luY2x1ZGUgIlVzZXJTY3JpcHQuaCIKICNpbmNsdWRlICJVc2Vy
U3R5bGVTaGVldC5oIgogCkBAIC0yMDMsMTIgKzIwNCwxMiBAQCB2b2lkIFVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlQWxsVXNlCiAgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC0+cmVt
b3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKIH0KIAotVmVjdG9yPENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb24+IFVzZXJDb250ZW50Q29udHJvbGxlcjo6YWN0aW9uc0ZvclVSTChjb25zdCBVUkwm
IHVybCkKK1ZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPiBVc2VyQ29udGVudENvbnRy
b2xsZXI6OmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQoY29uc3QgUmVzb3VyY2VMb2FkSW5mbyYgcmVz
b3VyY2VMb2FkSW5mbykKIHsKICAgICBpZiAoIW1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQpCiAg
ICAgICAgIHJldHVybiBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4oKTsKIAotICAg
IHJldHVybiBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLT5hY3Rpb25zRm9yVVJMKHVybCk7Cisg
ICAgcmV0dXJuIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQtPmFjdGlvbnNGb3JSZXNvdXJjZUxv
YWQocmVzb3VyY2VMb2FkSW5mbyk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5oCShyZXZpc2lvbiAxODE0MDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw2ICs0NCw3IEBAIGNsYXNzIFVSTDsKIGNsYXNzIFVzZXJTY3JpcHQ7CiBjbGFzcyBVc2Vy
U3R5bGVTaGVldDsKIGNsYXNzIFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I7CitzdHJ1Y3Qg
UmVzb3VyY2VMb2FkSW5mbzsKIAogbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIGNsYXNz
IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbjsKQEAgLTg1LDggKzg2LDcgQEAgcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJiBuYW1lKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUFsbFVzZXJDb250ZW50
RXh0ZW5zaW9ucygpOwogICAgIAotICAgIC8vIEZJWE1FOiBDb25zaWRlciBwdXR0aW5nIHRoaXMg
KGFuZCBvdGhlciBmdXR1cmUgY29udGVudCBleHRlbnNpb24gcHJlZGljYXRlcykgaW4gaXRzIG93
biBjbGFzcy4KLSAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gYWN0aW9uc0Zv
clVSTChjb25zdCBVUkwmKTsKKyAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4g
YWN0aW9uc0ZvclJlc291cmNlTG9hZChjb25zdCBSZXNvdXJjZUxvYWRJbmZvJik7CiAjZW5kaWYK
IAogcHJpdmF0ZToKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE4MTQwNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE1LTAzLTExICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gQWRk
IHJlc291cmNlIHR5cGUgYW5kIGxvYWQgdHlwZSB0cmlnZ2Vycy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjQyMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RS
ZXF1ZXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Om1haW5Eb2N1bWVudFJlcXVlc3QpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OnRlc3RVUkwpOiBEZWxldGVkLgorCiAyMDE1LTAzLTExICBCZW5qYW1pbiBQb3VsYWluICA8YnBv
dWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBiYXNpYyBzdXBwb3J0IGZvciBCT0wgYW5k
IEVPTCBhc3NlcnRpb25zIHRvIHRoZSBVUkwgRmlsdGVyIHBhcnNlcgpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMu
Y3BwCShyZXZpc2lvbiAxODE0MDcpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
TG9hZEluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KQEAgLTkyLDkgKzkzLDkgQEAgcHJp
dmF0ZToKICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0
YSBtX2RhdGE7CiB9OwogCi12b2lkIHN0YXRpYyB0ZXN0VVJMKENvbnRlbnRFeHRlbnNpb25zOjpD
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgY29udGVudEV4dGVuc2lvbnNCYWNrZW5kLCBjb25zdCBV
UkwmIHVybCwgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlPiBleHBlY3RlZEFj
dGlvbnMpCit2b2lkIHN0YXRpYyB0ZXN0UmVxdWVzdChDb250ZW50RXh0ZW5zaW9uczo6Q29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kIGNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCwgY29uc3QgUmVzb3Vy
Y2VMb2FkSW5mbyYgcmVzb3VyY2VMb2FkSW5mbywgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlPiBleHBlY3RlZEFjdGlvbnMpCiB7Ci0gICAgYXV0byBhY3Rpb25zID0gY29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kLmFjdGlvbnNGb3JVUkwodXJsKTsKKyAgICBhdXRvIGFjdGlvbnMg
PSBjb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuYWN0aW9uc0ZvclJlc291cmNlTG9hZChyZXNvdXJj
ZUxvYWRJbmZvKTsKICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRBY3Rpb25zLnNpemUoKSwgYWN0aW9u
cy5zaXplKCkpOwogICAgIGlmIChleHBlY3RlZEFjdGlvbnMuc2l6ZSgpICE9IGFjdGlvbnMuc2l6
ZSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDMsNiArMTA0LDExIEBAIHZvaWQgc3RhdGljIHRl
c3RVUkwoQ29udGVudEV4dGVuc2lvbnM6OkMKICAgICAgICAgRVhQRUNUX0VRKGV4cGVjdGVkQWN0
aW9uc1tpXSwgYWN0aW9uc1tpXS50eXBlKCkpOwogfQogCitSZXNvdXJjZUxvYWRJbmZvIG1haW5E
b2N1bWVudFJlcXVlc3QoY29uc3QgY2hhciogdXJsLCBSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBl
ID0gUmVzb3VyY2VUeXBlOjpEb2N1bWVudCkKK3sKKyAgICByZXR1cm4geyBVUkwoVVJMKCksIHVy
bCksIFVSTChVUkwoKSwgdXJsKSwgcmVzb3VyY2VUeXBlIH07Cit9CisKIGNvbnN0IGNoYXIqIGJh
c2ljRmlsdGVyID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJc
Ijp7XCJ1cmwtZmlsdGVyXCI6XCIuKndlYmtpdC5vcmdcIn19XSI7CiAKIFRFU1RfRihDb250ZW50
RXh0ZW5zaW9uVGVzdCwgQmFzaWMpCkBAIC0xMTMsNyArMTE5LDcgQEAgVEVTVF9GKENvbnRlbnRF
eHRlbnNpb25UZXN0LCBCYXNpYykKICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVu
c2lvbnNCYWNrZW5kIGJhY2tlbmQ7CiAgICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJ0
ZXN0RmlsdGVyIiwgZXh0ZW5zaW9uKTsKIAotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFBhcnNl
ZFVSTFN0cmluZywgImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKIH0KIAogY29uc3QgY2hhciogcGF0dGVybnNTdGFy
dGluZ1dpdGhHcm91cEZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiKGh0dHA6Ly93aGF0d2dcXFxcLm9yZy8pP3dl
YmtpdFwxMzRcMTM0Lm9yZ1wifX1dIjsKQEAgLTEyNiwxMSArMTMyLDExIEBAIFRFU1RfRihDb250
ZW50RXh0ZW5zaW9uVGVzdCwgUGF0dGVyblN0YXIKICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29u
dGVudEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmQ7CiAgICAgYmFja2VuZC5hZGRDb250ZW50RXh0
ZW5zaW9uKCJQYXR0ZXJuTmVzdGVkR3JvdXBzRmlsdGVyIiwgZXh0ZW5zaW9uKTsKIAotICAgIHRl
c3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0cDovL3doYXR3Zy5vcmcvd2Via2l0Lm9yZy8i
KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwotICAgIHRl
c3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0cDovL3doYXR3Zy5vcmcvd2Via2l0Lm9yZyIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7Ci0gICAgdGVz
dFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRwOi8vd2Via2l0Lm9yZy8iKSwgeyB9KTsKLSAg
ICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93aGF0d2cub3JnLyIpLCB7IH0p
OwotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0cDovL3doYXR3Zy5vcmciKSwg
eyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRw
Oi8vd2hhdHdnLm9yZy93ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgiaHR0cDovL3doYXR3Zy5vcmcvd2Via2l0Lm9yZyIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVz
dFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3doYXR3Zy5vcmcv
IiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
aHR0cDovL3doYXR3Zy5vcmciKSwgeyB9KTsKIH0KIAogY29uc3QgY2hhciogcGF0dGVybk5lc3Rl
ZEdyb3Vwc0ZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiaHR0cDovL3dlYmtpdFxcXFwub3JnLyhmb28oYmFyKSop
K1wifX1dIjsKQEAgLTE0MywxOCArMTQ5LDE3IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVz
dCwgUGF0dGVybk5lc3QKICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNC
YWNrZW5kIGJhY2tlbmQ7CiAgICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJQYXR0ZXJu
TmVzdGVkR3JvdXBzRmlsdGVyIiwgZXh0ZW5zaW9uKTsKIAotICAgIHRlc3RVUkwoYmFja2VuZCwg
VVJMKFVSTCgpLCAiaHR0cDovL3dlYmtpdC5vcmcvZm9vIiksIHsgQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKLSAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwo
KSwgImh0dHA6Ly93ZWJraXQub3JnL2Zvb2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpCbG9ja0xvYWQgfSk7Ci0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJo
dHRwOi8vd2Via2l0Lm9yZy9mb29iYXJiYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6QmxvY2tMb2FkIH0pOwotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0
cDovL3dlYmtpdC5vcmcvZm9vZm9vYmFyIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9KTsKLSAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6
Ly93ZWJraXQub3JnL2Zvb2JhcmZvb2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0xvYWQgfSk7Ci0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRw
Oi8vd2Via2l0Lm9yZy9mb29iIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJs
b2NrTG9hZCB9KTsKLSAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93ZWJr
aXQub3JnL2Zvb3IiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2Fk
IH0pOwotCi0KLSAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93ZWJraXQu
b3JnLyIpLCB7IH0pOwotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0cDovL3dl
YmtpdC5vcmcvYmFyIiksIHsgfSk7Ci0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJo
dHRwOi8vd2Via2l0Lm9yZy9mb2JhciIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2ZvbyIpLCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvZm9vYmFyIiksIHsg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVx
dWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9mb29i
YXJiYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwor
ICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJr
aXQub3JnL2Zvb2Zvb2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9j
a0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
aHR0cDovL3dlYmtpdC5vcmcvZm9vYmFyZm9vYmFyIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9mb29iIiksIHsgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9mb29yIiksIHsgQ29udGVudEV4
dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IH0pOwor
ICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJr
aXQub3JnL2JhciIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2ZvYmFyIiksIHsgfSk7CiB9CiAKIGNvbnN0IGNo
YXIqIG1hdGNoUGFzdEVuZE9mU3RyaW5nRmlsdGVyID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6
XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuK1wifX1dIjsKQEAgLTE2
NywxNCArMTcyLDE0IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgTWF0Y2hQYXN0RW4K
ICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmQ7
CiAgICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJNYXRjaFBhc3RFbmRPZlN0cmluZyIs
IGV4dGVuc2lvbik7CiAKLSAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93
ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQg
fSk7Ci0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRwOi8vd2Via2l0Lm9yZy9m
b28iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwotICAg
IHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0cDovL3dlYmtpdC5vcmcvZm9vYmFyIiks
IHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKLSAgICB0ZXN0
VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93ZWJraXQub3JnL2Zvb2JhcmJhciIpLCB7
IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7Ci0gICAgdGVzdFVS
TChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRwOi8vd2Via2l0Lm9yZy9mb29mb29iYXIiKSwgeyBD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwotICAgIHRlc3RVUkwo
YmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0cDovL3dlYmtpdC5vcmcvZm9vYmFyZm9vYmFyIiksIHsg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKLSAgICB0ZXN0VVJM
KGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93ZWJraXQub3JnL2Zvb2IiKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwotICAgIHRlc3RVUkwoYmFja2Vu
ZCwgVVJMKFVSTCgpLCAiaHR0cDovL3dlYmtpdC5vcmcvZm9vciIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9mb28iKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2Zvb2JhciIpLCB7
IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJl
cXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvZm9v
YmFyYmFyIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsK
KyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Vi
a2l0Lm9yZy9mb29mb29iYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Imh0dHA6Ly93ZWJraXQub3JnL2Zvb2JhcmZvb2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvZm9vYiIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvZm9vciIpLCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CiB9CiAKIGNvbnN0IGNoYXIqIHN0
YXJ0T2ZMaW5lQXNzZXJ0aW9uRmlsdGVyID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9j
a1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeZm9vYmFyXCJ9fV0iOwpAQCAtMTg3
LDE0ICsxOTIsMTQgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBTdGFydE9mTGluZQog
ICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFja2VuZDsK
ICAgICBiYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24oIlN0YXJ0T2ZMaW5lQXNzZXJ0aW9uIiwg
ZXh0ZW5zaW9uKTsKIAotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiZm9vYmFyOi8v
d2Via2l0Lm9yZy9mb29iYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkIH0pOwotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiZm9vYmFyczovLy9m
b29iYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwot
ICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiZm9vYmFyZm9vYmFyOi8vL2Zvb2JhcmZv
b2JhcmZvb2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQg
fSk7Ci0KLSAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93ZWJraXQub3Jn
L2Zvb2JhcmZvbyIpLCB7IH0pOwotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0
cDovL3dlYmtpdC5vcmcvZm9vYmFyZiIpLCB7IH0pOwotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJM
KFVSTCgpLCAiaHR0cDovL2Zvb2Jhci5vcmcvIiksIHsgfSk7Ci0gICAgdGVzdFVSTChiYWNrZW5k
LCBVUkwoVVJMKCksICJodHRwOi8vZm9vYmFyLm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVz
dChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJmb29iYXI6Ly93ZWJraXQub3JnL2Zvb2Jh
ciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAg
dGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZm9vYmFyczovLy9mb29i
YXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImZvb2JhcmZvb2Jhcjov
Ly9mb29iYXJmb29iYXJmb29iYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
QmxvY2tMb2FkIH0pOworCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvZm9vYmFyZm9vIiksIHsgfSk7CisgICAgdGVzdFJlcXVl
c3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvZm9vYmFy
ZiIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Imh0dHA6Ly9mb29iYXIub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9mb29iYXIub3JnLyIpLCB7IH0pOwogfQogCiBjb25z
dCBjaGFyKiBlbmRPZkxpbmVBc3NlcnRpb25GaWx0ZXIgPSAiW3tcImFjdGlvblwiOntcInR5cGVc
IjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qZm9vYmFyJFwifX1d
IjsKQEAgLTIwNywxMiArMjEyLDU3IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgRW5k
T2ZMaW5lQXMKICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5k
IGJhY2tlbmQ7CiAgICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJFbmRPZkxpbmVBc3Nl
cnRpb24iLCBleHRlbnNpb24pOwogCi0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJo
dHRwOi8vd2Via2l0Lm9yZy9mb29iYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6QmxvY2tMb2FkIH0pOwotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiZmlsZTov
Ly9mb29iYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0p
OwotICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiZmlsZTovLy9mb29iYXJmb29iYXJm
b29iYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwot
Ci0gICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRwOi8vd2Via2l0Lm9yZy9mb29i
YXJmb28iKSwgeyB9KTsKLSAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93
ZWJraXQub3JnL2Zvb2JhcmYiKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9mb29iYXIiKSwgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImZpbGU6Ly8vZm9vYmFyIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJmaWxlOi8vL2Zvb2JhcmZvb2JhcmZvb2JhciIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisKKyAgICB0ZXN0UmVx
dWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9mb29i
YXJmb28iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9mb29iYXJmIiksIHsgfSk7Cit9CisgICAgCitjb25zdCBj
aGFyKiBsb2FkVHlwZUZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLip3ZWJraXQub3JnXCIsXCJsb2FkLXR5cGVc
IjpbXCJ0aGlyZC1wYXJ0eVwiXX19LCIKKyAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxv
Y2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLip3aGF0d2cub3JnXCIsXCJsb2Fk
LXR5cGVcIjpbXCJmaXJzdC1wYXJ0eVwiXX19LCIKKyAgICAie1wiYWN0aW9uXCI6e1widHlwZVwi
OlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLiphbHdheXNibG9jay5w
ZGZcIn19XSI7CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgTG9hZFR5cGUpCit7Cisg
ICAgYXV0byBleHRlbnNpb25EYXRhID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlz
dChsb2FkVHlwZUZpbHRlcik7CisgICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURjo6bW92ZShleHRlbnNpb25EYXRhKSk7CisgICAg
ICAgIAorICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFj
a2VuZDsKKyAgICBiYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24oIkxvYWRUeXBlRmlsdGVyIiwg
ZXh0ZW5zaW9uKTsKKyAgICAgICAgCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmciKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChi
YWNrZW5kLCB7VVJMKFVSTCgpLCAiaHR0cDovL3dlYmtpdC5vcmciKSwgVVJMKFVSTCgpLCAiaHR0
cDovL25vdF93ZWJraXQub3JnIiksIFJlc291cmNlVHlwZTo6RG9jdW1lbnR9LCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgICAgIAorICAgIHRlc3RS
ZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93aGF0d2cub3JnIiks
IHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kLCB7VVJMKFVSTCgpLCAiaHR0cDovL3doYXR3Zy5vcmciKSwgVVJMKFVS
TCgpLCAiaHR0cDovL25vdF93aGF0d2cub3JnIiksIFJlc291cmNlVHlwZTo6RG9jdW1lbnR9LCB7
IH0pOworICAgIAorICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Imh0dHA6Ly9mb29iYXIub3JnL2Fsd2F5c2Jsb2NrLnBkZiIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwge1VS
TChVUkwoKSwgImh0dHA6Ly9mb29iYXIub3JnL2Fsd2F5c2Jsb2NrLnBkZiIpLCBVUkwoVVJMKCks
ICJodHRwOi8vbm90X2Zvb2Jhci5vcmcvYWx3YXlzYmxvY2sucGRmIiksIFJlc291cmNlVHlwZTo6
RG9jdW1lbnR9LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
Cit9CisgICAgCitjb25zdCBjaGFyKiByZXNvdXJjZVR5cGVGaWx0ZXIgPSAiW3tcImFjdGlvblwi
OntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qYmxv
Y2tfYWxsX3R5cGVzLm9yZ1wiLFwicmVzb3VyY2UtdHlwZVwiOltcImRvY3VtZW50XCIsXCJpbWFn
ZVwiLFwic3R5bGUtc2hlZXRcIixcInNjcmlwdFwiLFwiZm9udFwiLFwicmF3XCIsXCJzdmctZG9j
dW1lbnRcIixcIm1lZGlhXCJdfX0sIgorICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9j
a1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKmJsb2NrX29ubHlfaW1hZ2VzXCIs
XCJyZXNvdXJjZS10eXBlXCI6W1wiaW1hZ2VcIl19fV0iOworICAgIAorVEVTVF9GKENvbnRlbnRF
eHRlbnNpb25UZXN0LCBSZXNvdXJjZVR5cGUpCit7CisgICAgYXV0byBleHRlbnNpb25EYXRhID0g
Q29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChyZXNvdXJjZVR5cGVGaWx0ZXIpOwor
ICAgIGF1dG8gZXh0ZW5zaW9uID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNy
ZWF0ZShXVEY6Om1vdmUoZXh0ZW5zaW9uRGF0YSkpOworICAgICAgICAKKyAgICBDb250ZW50RXh0
ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmQ7CisgICAgYmFja2VuZC5h
ZGRDb250ZW50RXh0ZW5zaW9uKCJSZXNvdXJjZVR5cGVGaWx0ZXIiLCBleHRlbnNpb24pOworCisg
ICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2Jsb2Nr
X2FsbF90eXBlcy5vcmciLCBSZXNvdXJjZVR5cGU6OkRvY3VtZW50KSwgeyBDb250ZW50RXh0ZW5z
aW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9ibG9ja19hbGxfdHlwZXMub3JnIiwgUmVzb3Vy
Y2VUeXBlOjpJbWFnZSksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9h
ZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRw
Oi8vYmxvY2tfYWxsX3R5cGVzLm9yZyIsIFJlc291cmNlVHlwZTo6U3R5bGVTaGVldCksIHsgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVz
dChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vYmxvY2tfYWxsX3R5cGVzLm9y
ZyIsIFJlc291cmNlVHlwZTo6U2NyaXB0KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJl
cXVlc3QoImh0dHA6Ly9ibG9ja19hbGxfdHlwZXMub3JnIiwgUmVzb3VyY2VUeXBlOjpGb250KSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RS
ZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9ibG9ja19hbGxfdHlw
ZXMub3JnIiwgUmVzb3VyY2VUeXBlOjpSYXcpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgiaHR0cDovL2Jsb2NrX2FsbF90eXBlcy5vcmciLCBSZXNvdXJjZVR5cGU6OlNWR0Rv
Y3VtZW50KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwor
ICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9ibG9j
a19hbGxfdHlwZXMub3JnIiwgUmVzb3VyY2VUeXBlOjpNZWRpYSksIHsgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vYmxvY2tfb25seV9pbWFnZXMub3JnIiwgUmVzb3Vy
Y2VUeXBlOjpJbWFnZSksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9h
ZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRw
Oi8vYmxvY2tfb25seV9pbWFnZXMub3JnIiwgUmVzb3VyY2VUeXBlOjpEb2N1bWVudCksIHsgfSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
      

    </bug>

</bugzilla>