<?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>143058</bug_id>
          
          <creation_ts>2015-03-25 14:21:09 -0700</creation_ts>
          <short_desc>Content extensions should fail if there is an invalid extension</short_desc>
          <delta_ts>2015-04-02 14:54:29 -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>
          <dependson>143059</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>beidson</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1080037</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-25 14:21:09 -0700</bug_when>
    <thetext>Loading a content extension can fail in many places:
1) Parsing JSON
2) Parsing the structure of the JSON object (like if there are invalid actions or triggers)
3) Compiling the content extension (like if there is a .* anywhere but the beginning).

Ignoring a rule that has an invalid trigger or action seems ok, but everything else should be a complete failure so developers notice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080040</commentid>
    <comment_count>1</comment_count>
      <attachid>249427</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-25 14:27:35 -0700</bug_when>
    <thetext>Created attachment 249427
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080053</commentid>
    <comment_count>2</comment_count>
      <attachid>249427</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-03-25 14:54:27 -0700</bug_when>
    <thetext>Comment on attachment 249427
Patch

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

&gt; Source/WebCore/contentextensions/ContentExtensionCompiler.cpp:136
&gt; +                dataLogF(&quot;Triggers matching everything must be at beginning.&quot;);

This (and the other errors) need to go to the web inspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080059</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-25 15:29:58 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 249427 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=249427&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/contentextensions/ContentExtensionCompiler.cpp:136
&gt; &gt; +                dataLogF(&quot;Triggers matching everything must be at beginning.&quot;);
&gt; 
&gt; This (and the other errors) need to go to the web inspector.

In order to go to the web inspector, we need a page.  ContentExtensionCompiler should not need or know about a page.  I&apos;m going to use WTFLogAlways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080062</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-25 15:32:47 -0700</bug_when>
    <thetext>Nevermind.  I&apos;m going to wait for https://bugs.webkit.org/show_bug.cgi?id=143059 and use that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080112</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-03-25 17:09:02 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Comment on attachment 249427 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=249427&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/contentextensions/ContentExtensionCompiler.cpp:136
&gt; &gt; &gt; +                dataLogF(&quot;Triggers matching everything must be at beginning.&quot;);
&gt; &gt; 
&gt; &gt; This (and the other errors) need to go to the web inspector.
&gt; 
&gt; In order to go to the web inspector, we need a page. 
&gt; ContentExtensionCompiler should not need or know about a page.  I&apos;m going to
&gt; use WTFLogAlways.

I think you&apos;re getting caught up on some sort of separation of responsibilities that is not important, or is somehow misguided.

My in-person request was that when compiling a content extension in a WebKit app and the extension fails to compile, the *web* developer be told in a place where they expect to see it.

The web developer is not a WebKit developer.

Logging is definitely not that place.

AFAIK, the Web Inspector is the only such place that exists.

---

The content extension API operates on page groups. Therefore when a content extension fails to compile, it is doing so within the context of a page group.

It should be trivial to walk the Pages in that PageGroup and announce the error to their WebInspectors.

Please consider my r- to stand on any form of this patch that doesn&apos;t put the failure logging in a place where web developers will see it using a standard release build of WebKit launched as normal (i.e. not running it from the command line)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080140</commentid>
    <comment_count>6</comment_count>
      <attachid>249457</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-25 18:03:56 -0700</bug_when>
    <thetext>Created attachment 249457
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080141</commentid>
    <comment_count>7</comment_count>
      <attachid>249457</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-25 18:04:37 -0700</bug_when>
    <thetext>Comment on attachment 249457
Patch

r- until we resolve the error reporting issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080145</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-25 18:12:26 -0700</bug_when>
    <thetext>&gt; The content extension API operates on page groups. Therefore when a content
&gt; extension fails to compile, it is doing so within the context of a page
&gt; group.

If this is associated with a PageGroup like Brady says, then walking over the Pages in the group and output doesn&apos;t sound as crazy to me as when I first heard this.

Does the developer have control over when the compile happens?
  - Can the compile and warning generate happen before any page is loaded?
  - Web Inspector clears its console messages on page navigations, so a navigation could clear these messages (in that page).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080324</commentid>
    <comment_count>9</comment_count>
      <attachid>249457</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-26 10:28:42 -0700</bug_when>
    <thetext>Comment on attachment 249457
Patch

The problem is that the api using content extensions operates on page groups, but the api making content extensions does not.  See WKUserContentFilterCreate (which also needs to be renamed, but that&apos;s another issue).  That is the point at which we get the error and could get a string.  No pages.  No page groups.

That api is being worked on to get better error reporting.  See the declaration of LegacyContentExtensionCompilationClient.  But that work is not directly related to this patch.  I propose this patch go in, then we worry about what to do with the error messages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080335</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-03-26 10:59:01 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 249457 [details]
&gt; Patch
&gt; 
&gt; The problem is that the api using content extensions operates on page
&gt; groups, but the api making content extensions does not.  See
&gt; WKUserContentFilterCreate (which also needs to be renamed, but that&apos;s
&gt; another issue).  That is the point at which we get the error and could get a
&gt; string.  No pages.  No page groups.
&gt; 
&gt; That api is being worked on to get better error reporting.  See the
&gt; declaration of LegacyContentExtensionCompilationClient.  But that work is
&gt; not directly related to this patch.  I propose this patch go in, then we
&gt; worry about what to do with the error messages.

Oy vey.

Okay, so we synchronously compile the extension at creation time, even though it can&apos;t possibly be used until it is installed in a page group.

I assumed we compiled when installing into a page group (since it cannot possibly be used before then)

Can we rethink this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080354</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-26 11:28:10 -0700</bug_when>
    <thetext>The motivation of the API design was startup performance.  An application should already have a compiled content extension to use so it does not need to compile or even check if anything has changed every time it starts.  The API needs to be modified to report errors while compiling, rename things like WKUserContentFilterCreate, and possibly fail to accept a compiled content extension to inform the application that it needs to recompile (with a future version of WebKit when if change the byte code, for example).  Should all that be added to this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080404</commentid>
    <comment_count>12</comment_count>
      <attachid>249457</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-26 14:07:19 -0700</bug_when>
    <thetext>Comment on attachment 249457
Patch

I&apos;m going to put an error code and a version number in the CompiledContentExtension, then we can put errors in the inspector when using an invalid extension.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082347</commentid>
    <comment_count>13</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-02 14:54:29 -0700</bug_when>
    <thetext>The useful parts of this patch were included in https://bugs.webkit.org/show_bug.cgi?id=143235</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249427</attachid>
            <date>2015-03-25 14:27:35 -0700</date>
            <delta_ts>2015-03-25 18:03:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143058-20150325142657.patch</filename>
            <type>text/plain</type>
            <size>30608</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE1LTAzLTI1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29udGVudCBl
eHRlbnNpb25zIHNob3VsZCBmYWlsIHRvIGxvYWQgaW52YWxpZCBleHRlbnNpb25zLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzMDU4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdCk6CisgICAgICAgIFRlcm1pbmF0ZSB3aGVu
IGVuY291bnRlcmluZyBhbiBpbnZhbGlkIHJ1bGUuCisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6dGVybWluYXRlSW1tZWRpYXRlbHkpOgorICAg
ICAgICBBZGRlZCB0byBnZW5lcmF0ZSBzdHVicyB0aGF0IGRvIG5vdCBkbyBhbnl0aGluZy4KKyAg
ICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmg6CisKIDIwMTUt
MDMtMjUgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIE1lZGlhQ29u
dHJvbHM6IFVzZSBmb250IHdpdGggZml4ZWQgbnVtYmVyIHdpZHRoCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNp
b25Db21waWxlci5jcHAJKHJldmlzaW9uIDE4MTk2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNCw2ICsxMTQsNyBAQCBDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGNvbXBpbGVS
dWxlCiAgICAgVmVjdG9yPE5GQT4gbmZhczsKICAgICBuZmFzLmFwcGVuZChORkEoKSk7CiAgICAg
Ym9vbCBub25Vbml2ZXJzYWxBY3Rpb25TZWVuID0gZmFsc2U7CisgICAgYm9vbCBpbnZhbGlkUnVs
ZXMgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIHJ1bGVJbmRleCA9IDA7IHJ1bGVJbmRleCA8
IHBhcnNlZFJ1bGVMaXN0LnNpemUoKTsgKytydWxlSW5kZXgpIHsKIAogICAgICAgICAvLyBGSVhN
RTogVHVuZSB0aGlzIGJldHRlciBhbmQgYWRqdXN0IENvbnRlbnRFeHRlbnNpb25UZXN0Lk11bHRp
REZBIGFjY29yZGluZ2x5LgpAQCAtMTMxLDE3ICsxMzIsMzMgQEAgQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uRGF0YSBjb21waWxlUnVsZQogICAgICAgICBVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3Rh
dHVzIHN0YXR1cyA9IHVybEZpbHRlclBhcnNlci5hZGRQYXR0ZXJuKHRyaWdnZXIudXJsRmlsdGVy
LCB0cmlnZ2VyLnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSwgYWN0aW9uTG9jYXRpb25BbmRGbGFn
cyk7CiAKICAgICAgICAgaWYgKHN0YXR1cyA9PSBVUkxGaWx0ZXJQYXJzZXI6Ok1hdGNoZXNFdmVy
eXRoaW5nKSB7Ci0gICAgICAgICAgICBpZiAobm9uVW5pdmVyc2FsQWN0aW9uU2VlbikKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiVHJpZ2dlciBtYXRjaGluZyBldmVyeXRoaW5nIGZvdW5kIG5v
dCBhdCBiZWdpbm5pbmcuICBUaGlzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3Igd2l0aCBp
Z25vcmUtcHJldmlvdXMtcnVsZXMiKTsKKyAgICAgICAgICAgIGlmIChub25Vbml2ZXJzYWxBY3Rp
b25TZWVuKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIlRyaWdnZXJzIG1hdGNoaW5nIGV2
ZXJ5dGhpbmcgbXVzdCBiZSBhdCBiZWdpbm5pbmcuIik7CisgICAgICAgICAgICAgICAgaW52YWxp
ZFJ1bGVzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb250ZW50RXh0
ZW5zaW9uUnVsZS5hY3Rpb24oKS50eXBlKCkgIT0gQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVT
ZWxlY3RvcikgeworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJUcmlnZ2VycyBtYXRjaGluZyBl
dmVyeXRoaW5nIG11c3QgYmUgY3NzLWRpc3BsYXktbm9uZS4iKTsKKyAgICAgICAgICAgICAgICBp
bnZhbGlkUnVsZXMgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRyaWdn
ZXIuZmxhZ3MpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiVHJpZ2dlcnMgbWF0Y2hpbmcg
ZXZlcnl0aGluZyBjYW5ub3QgaGF2ZSBsb2FkLXR5cGUgb3IgcmVzb3VyY2UtdHlwZS4iKTsKKyAg
ICAgICAgICAgICAgICBpbnZhbGlkUnVsZXMgPSB0cnVlOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgdW5pdmVyc2FsQWN0aW9uTG9jYXRpb25zLmFwcGVuZChhY3Rpb25Mb2NhdGlvbkFuZEZs
YWdzKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBub25Vbml2ZXJzYWxBY3Rpb25TZWVu
ID0gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIGlmIChzdGF0dXMgIT0gVVJMRmlsdGVyUGFyc2Vy
OjpPayAmJiBzdGF0dXMgIT0gVVJMRmlsdGVyUGFyc2VyOjpNYXRjaGVzRXZlcnl0aGluZykgewog
ICAgICAgICAgICAgZGF0YUxvZ0YoIkVycm9yIHdoaWxlIHBhcnNpbmcgJXM6ICVzXG4iLCB0cmln
Z2VyLnVybEZpbHRlci51dGY4KCkuZGF0YSgpLCBVUkxGaWx0ZXJQYXJzZXI6OnN0YXR1c1N0cmlu
ZyhzdGF0dXMpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBpbnZhbGlkUnVsZXMgPSB0cnVlOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoaW52YWxpZFJ1bGVzKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIAorICAgIGlm
IChpbnZhbGlkUnVsZXMpCisgICAgICAgIHJldHVybiB7IERGQUJ5dGVjb2RlQ29tcGlsZXI6OnRl
cm1pbmF0ZUltbWVkaWF0ZWx5KCksIFZlY3RvcjxTZXJpYWxpemVkQWN0aW9uQnl0ZT4oKSB9Owog
CiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9SVElORwogICAgIGRvdWJs
ZSBuZmFCdWlsZFRpbWVFbmQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVj
b2RlQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODE5NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTg2LDcgKzE4NiwxNSBAQCB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGUoKQogICAg
IC8vIFNldCBzaXplIGhlYWRlci4KICAgICBzZXQzMkJpdHMobV9ieXRlY29kZSwgc3RhcnRMb2Nh
dGlvbiwgbV9ieXRlY29kZS5zaXplKCkgLSBzdGFydExvY2F0aW9uKTsKIH0KLSAgICAKKworVmVj
dG9yPERGQUJ5dGVjb2RlPiBERkFCeXRlY29kZUNvbXBpbGVyOjp0ZXJtaW5hdGVJbW1lZGlhdGVs
eSgpCit7CisgICAgVmVjdG9yPERGQUJ5dGVjb2RlPiBieXRlY29kZTsKKyAgICBhcHBlbmQ8dW5z
aWduZWQ+KGJ5dGVjb2RlLCBzaXplb2YodW5zaWduZWQpICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb24pKTsKKyAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4oYnl0ZWNvZGUs
IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlcm1pbmF0ZSk7CisgICAgcmV0dXJuIGJ5dGVjb2Rl
OworfQorCiB9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZUNvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oCShyZXZpc2lvbiAxODE5NjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDYgKzQ3LDggQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIGNv
bXBpbGUoKTsKKyAgICAKKyAgICBzdGF0aWMgVmVjdG9yPERGQUJ5dGVjb2RlPiB0ZXJtaW5hdGVJ
bW1lZGlhdGVseSgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZU5vZGUodW5zaWduZWQp
OwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwko
cmV2aXNpb24gMTgxOTcwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTcgQEAKKzIwMTUtMDMtMjUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5A
d2Via2l0Lm9yZz4KKworICAgICAgICBDb250ZW50IGV4dGVuc2lvbnMgc2hvdWxkIGZhaWwgdG8g
bG9hZCBpbnZhbGlkIGV4dGVuc2lvbnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDMwNTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0
ZW5zaW9ucy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0UmVxdWVzdCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjptYWtlQmFja2VuZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUX0YpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y2hlY2tGb3JUZXJtaW5hdGVJbW1l
ZGlhdGVseSk6CisgICAgICAgIENsZWFuZWQgdXAgYW5kIGFkZGVkIHRlc3RzLgorCiAyMDE1LTAz
LTI1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gQWRkIG11bHRpLURGQSBjb21waWxpbmcgYW5kIGludGVy
cHJldGluZy4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50
RXh0ZW5zaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAkocmV2aXNpb24gMTgxOTY0KQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgc3RhdGljIHRlc3RSZXF1ZXN0KENvbnRl
bnRFeHRlbnNpb24KICAgICBhdXRvIGFjdGlvbnMgPSBjb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQu
YWN0aW9uc0ZvclJlc291cmNlTG9hZChyZXNvdXJjZUxvYWRJbmZvKTsKIAogICAgIHVuc2lnbmVk
IGV4cGVjdGVkU2l6ZSA9IGFjdGlvbnMuc2l6ZSgpOwotICAgIGlmIChhY3Rpb25zLnNpemUoKSAm
JiAhaWdub3JlUHJldmlvdXNSdWxlcykKKyAgICBpZiAoIWlnbm9yZVByZXZpb3VzUnVsZXMpCiAg
ICAgICAgIGV4cGVjdGVkU2l6ZS0tOyAvLyBUaGUgbGFzdCBhY3Rpb24gaXMgYXBwbHlpbmcgdGhl
IGNvbXBpbGVkIHN0eWxlc2hlZXQuCiAgICAgCiAgICAgRVhQRUNUX0VRKGV4cGVjdGVkQWN0aW9u
cy5zaXplKCksIGV4cGVjdGVkU2l6ZSk7CkBAIC0xMjIsMjggKzEyMiwyNyBAQCBSZXNvdXJjZUxv
YWRJbmZvIG1haW5Eb2N1bWVudFJlcXVlc3QoY29uCiAgICAgcmV0dXJuIHsgVVJMKFVSTCgpLCB1
cmwpLCBVUkwoVVJMKCksIHVybCksIHJlc291cmNlVHlwZSB9OwogfQogCi1jb25zdCBjaGFyKiBi
YXNpY0ZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1dIjsKLQotVEVTVF9GKENvbnRlbnRF
eHRlbnNpb25UZXN0LCBCYXNpYykKK0NvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQgbWFrZUJhY2tlbmQoY29uc3QgY2hhcioganNvbiwgY29uc3QgY2hhciogaWRlbnRp
ZmllciA9ICJUZXN0Q29udGVudEV4dGVuc2lvbiIpCiB7Ci0gICAgYXV0byBleHRlbnNpb25EYXRh
ID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChiYXNpY0ZpbHRlcik7CisgICAg
YXV0byBleHRlbnNpb25EYXRhID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChq
c29uKTsKICAgICBhdXRvIGV4dGVuc2lvbiA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uOjpjcmVhdGUoV1RGOjptb3ZlKGV4dGVuc2lvbkRhdGEpKTsKLQorICAgIAogICAgIENvbnRl
bnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFja2VuZDsKLSAgICBiYWNr
ZW5kLmFkZENvbnRlbnRFeHRlbnNpb24oInRlc3RGaWx0ZXIiLCBleHRlbnNpb24pOworICAgIGJh
Y2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbihpZGVudGlmaWVyLCBleHRlbnNpb24pOworICAgIHJl
dHVybiBiYWNrZW5kOworfQorCitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEJhc2ljKQor
eworICAgIGF1dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwi
OlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX1d
Iik7CiAKICAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRw
Oi8vd2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tM
b2FkIH0pOwogfQogCiBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFJhbmdlQmFzaWMpCiB7
Ci0gICAgY29uc3QgY2hhciogcmFuZ2VCYXNpY0ZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlw
ZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid1swLTldY1wiLCBc
InVybC1maWx0ZXItaXMtY2FzZS1zZW5zaXRpdmVcIjp0cnVlfX0sIgotICAgICAgICAie1wiYWN0
aW9uXCI6e1widHlwZVwiOlwiYmxvY2stY29va2llc1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJbQS1IXVthLXpdY2tvXCIsIFwidXJsLWZpbHRlci1pcy1jYXNlLXNlbnNpdGl2ZVwi
OnRydWV9fV0iOwotICAgIGF1dG8gZXh0ZW5zaW9uRGF0YSA9IENvbnRlbnRFeHRlbnNpb25zOjpj
b21waWxlUnVsZUxpc3QocmFuZ2VCYXNpY0ZpbHRlcik7Ci0gICAgYXV0byBleHRlbnNpb24gPSBJ
bk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURjo6bW92ZShleHRlbnNp
b25EYXRhKSk7Ci0KLSAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNr
ZW5kIGJhY2tlbmQ7Ci0gICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJQYXR0ZXJuTmVz
dGVkR3JvdXBzRmlsdGVyIiwgZXh0ZW5zaW9uKTsKKyAgICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFj
a2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIndbMC05XWNcIiwgXCJ1cmwtZmlsdGVyLWlzLWNhc2Utc2Vuc2l0aXZlXCI6
dHJ1ZX19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrLWNvb2tpZXNc
In0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiW0EtSF1bYS16XWNrb1wiLCBcInVybC1m
aWx0ZXItaXMtY2FzZS1zZW5zaXRpdmVcIjp0cnVlfX1dIik7CiAKICAgICB0ZXN0UmVxdWVzdChi
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vdzNjLm9yZyIpLCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CiAgICAgdGVzdFJlcXVlc3QoYmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgidzJjOi8vd2hhdHdnLm9yZy8iKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwpAQCAtMTY1LDEyICsxNjQsNyBA
QCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFJhbmdlQmFzaWMpCiBURVNUX0YoQ29udGVu
dEV4dGVuc2lvblRlc3QsIFJhbmdlRXhjbHVzaW9uR2VuZXJhdGluZ1VuaXZlcnNhbFRyYW5zaXRp
b24pCiB7CiAgICAgLy8gVHJhbnNpdGlvbiBvZiB0aGUgdHlwZSAoW15YXVgpIGVmZmljdGl2ZWx5
IHRyYW5zaXRpb24gb24gZXZlcnkgaW5wdXQuCi0gICAgY29uc3QgY2hhciogcmFuZ2VFeGNsdXNp
b25HZW5lcmF0aW5nVW5pdmVyc2FsVHJhbnNpdGlvbkZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiW15hXSthZm9v
YmFyXCJ9fV0iOwotICAgIGF1dG8gZXh0ZW5zaW9uRGF0YSA9IENvbnRlbnRFeHRlbnNpb25zOjpj
b21waWxlUnVsZUxpc3QocmFuZ2VFeGNsdXNpb25HZW5lcmF0aW5nVW5pdmVyc2FsVHJhbnNpdGlv
bkZpbHRlcik7Ci0gICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbjo6Y3JlYXRlKFdURjo6bW92ZShleHRlbnNpb25EYXRhKSk7Ci0KLSAgICBDb250ZW50
RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmQ7Ci0gICAgYmFja2Vu
ZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJQYXR0ZXJuTmVzdGVkR3JvdXBzRmlsdGVyIiwgZXh0ZW5z
aW9uKTsKKyAgICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5
cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIlteYV0rYWZvb2Jh
clwifX1dIik7CiAKICAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJodHRwOi8vdzNjLm9yZyIpLCB7IH0pOwogCkBAIC0xODgsMTIgKzE4Miw3IEBAIFRFU1RfRihD
b250ZW50RXh0ZW5zaW9uVGVzdCwgUmFuZ2VFeGNsdXMKIAogVEVTVF9GKENvbnRlbnRFeHRlbnNp
b25UZXN0LCBQYXR0ZXJuU3RhcnRpbmdXaXRoR3JvdXApCiB7Ci0gICAgY29uc3QgY2hhciogcGF0
dGVybnNTdGFydGluZ1dpdGhHcm91cEZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
YmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXihodHRwOi8vd2hhdHdnXFxc
XC5vcmcvKT93ZWJraXRcMTM0XDEzNC5vcmdcIn19XSI7Ci0gICAgYXV0byBleHRlbnNpb25EYXRh
ID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChwYXR0ZXJuc1N0YXJ0aW5nV2l0
aEdyb3VwRmlsdGVyKTsKLSAgICBhdXRvIGV4dGVuc2lvbiA9IEluTWVtb3J5Q29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGOjptb3ZlKGV4dGVuc2lvbkRhdGEpKTsKLQotICAgIENv
bnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFja2VuZDsKLSAgICBi
YWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24oIlBhdHRlcm5OZXN0ZWRHcm91cHNGaWx0ZXIiLCBl
eHRlbnNpb24pOworICAgIGF1dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6
e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXihodHRw
Oi8vd2hhdHdnXFxcXC5vcmcvKT93ZWJraXRcMTM0XDEzNC5vcmdcIn19XSIpOwogCiAgICAgdGVz
dFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3doYXR3Zy5vcmcv
d2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2Fk
IH0pOwogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6
Ly93aGF0d2cub3JnL3dlYmtpdC5vcmciKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6QmxvY2tMb2FkIH0pOwpAQCAtMjA0LDEzICsxOTMsNyBAQCBURVNUX0YoQ29udGVudEV4dGVu
c2lvblRlc3QsIFBhdHRlcm5TdGFyCiAKIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgUGF0
dGVybk5lc3RlZEdyb3VwcykKIHsKLSAgICBjb25zdCBjaGFyKiBwYXR0ZXJuTmVzdGVkR3JvdXBz
RmlsdGVyID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7
XCJ1cmwtZmlsdGVyXCI6XCJeaHR0cDovL3dlYmtpdFxcXFwub3JnLyhmb28oYmFyKSopK1wifX1d
IjsKLQotICAgIGF1dG8gZXh0ZW5zaW9uRGF0YSA9IENvbnRlbnRFeHRlbnNpb25zOjpjb21waWxl
UnVsZUxpc3QocGF0dGVybk5lc3RlZEdyb3Vwc0ZpbHRlcik7Ci0gICAgYXV0byBleHRlbnNpb24g
PSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURjo6bW92ZShleHRl
bnNpb25EYXRhKSk7Ci0KLSAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNC
YWNrZW5kIGJhY2tlbmQ7Ci0gICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJQYXR0ZXJu
TmVzdGVkR3JvdXBzRmlsdGVyIiwgZXh0ZW5zaW9uKTsKKyAgICBhdXRvIGJhY2tlbmQgPSBtYWtl
QmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIl5odHRwOi8vd2Via2l0XFxcXC5vcmcvKGZvbyhiYXIpKikrXCJ9fV0i
KTsKIAogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6
Ly93ZWJraXQub3JnL2ZvbyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9j
a0xvYWQgfSk7CiAgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
aHR0cDovL3dlYmtpdC5vcmcvZm9vYmFyIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9KTsKQEAgLTIyNywxMyArMjEwLDcgQEAgVEVTVF9GKENvbnRlbnRFeHRl
bnNpb25UZXN0LCBQYXR0ZXJuTmVzdAogCiBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIE1h
dGNoUGFzdEVuZE9mU3RyaW5nKQogewotICAgIGNvbnN0IGNoYXIqIG1hdGNoUGFzdEVuZE9mU3Ry
aW5nRmlsdGVyID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJc
Ijp7XCJ1cmwtZmlsdGVyXCI6XCIuK1wifX1dIjsKLQotICAgIGF1dG8gZXh0ZW5zaW9uRGF0YSA9
IENvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QobWF0Y2hQYXN0RW5kT2ZTdHJpbmdG
aWx0ZXIpOwotICAgIGF1dG8gZXh0ZW5zaW9uID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRl
bnNpb246OmNyZWF0ZShXVEY6Om1vdmUoZXh0ZW5zaW9uRGF0YSkpOwotCi0gICAgQ29udGVudEV4
dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBiYWNrZW5kOwotICAgIGJhY2tlbmQu
YWRkQ29udGVudEV4dGVuc2lvbigiTWF0Y2hQYXN0RW5kT2ZTdHJpbmciLCBleHRlbnNpb24pOwor
ICAgIGF1dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
YmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLitcIn19XSIpOwogCiAgICAg
dGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5v
cmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKICAg
ICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0
Lm9yZy9mb28iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0p
OwpAQCAtMjQ1LDE1ICsyMjIsOSBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIE1hdGNo
UGFzdEVuCiAgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0
cDovL3dlYmtpdC5vcmcvZm9vciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpC
bG9ja0xvYWQgfSk7CiB9CiAKLWNvbnN0IGNoYXIqIHN0YXJ0T2ZMaW5lQXNzZXJ0aW9uRmlsdGVy
ID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJeZm9vYmFyXCJ9fV0iOwotCiBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3Qs
IFN0YXJ0T2ZMaW5lQXNzZXJ0aW9uKQogewotICAgIGF1dG8gZXh0ZW5zaW9uRGF0YSA9IENvbnRl
bnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3Qoc3RhcnRPZkxpbmVBc3NlcnRpb25GaWx0ZXIp
OwotICAgIGF1dG8gZXh0ZW5zaW9uID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246
OmNyZWF0ZShXVEY6Om1vdmUoZXh0ZW5zaW9uRGF0YSkpOwotCi0gICAgQ29udGVudEV4dGVuc2lv
bnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBiYWNrZW5kOwotICAgIGJhY2tlbmQuYWRkQ29u
dGVudEV4dGVuc2lvbigiU3RhcnRPZkxpbmVBc3NlcnRpb24iLCBleHRlbnNpb24pOworICAgIGF1
dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tc
In0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmZvb2JhclwifX1dIik7CiAKICAgICB0
ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJmb29iYXI6Ly93ZWJraXQu
b3JnL2Zvb2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQg
fSk7CiAgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZm9vYmFy
czovLy9mb29iYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2Fk
IH0pOwpAQCAtMjY3LDEyICsyMzgsNyBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFN0
YXJ0T2ZMaW5lCiAKIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgRW5kT2ZMaW5lQXNzZXJ0
aW9uKQogewotICAgIGNvbnN0IGNoYXIqIGVuZE9mTGluZUFzc2VydGlvbkZpbHRlciA9ICJbe1wi
YWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
OlwiZm9vYmFyJFwifX1dIjsKLSAgICBhdXRvIGV4dGVuc2lvbkRhdGEgPSBDb250ZW50RXh0ZW5z
aW9uczo6Y29tcGlsZVJ1bGVMaXN0KGVuZE9mTGluZUFzc2VydGlvbkZpbHRlcik7Ci0gICAgYXV0
byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdU
Rjo6bW92ZShleHRlbnNpb25EYXRhKSk7Ci0KLSAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmQ7Ci0gICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5z
aW9uKCJFbmRPZkxpbmVBc3NlcnRpb24iLCBleHRlbnNpb24pOworICAgIGF1dG8gYmFja2VuZCA9
IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwiZm9vYmFyJFwifX1dIik7CiAKICAgICB0ZXN0UmVxdWVzdChi
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9mb29iYXIiKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwogICAgIHRlc3RS
ZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImZpbGU6Ly8vZm9vYmFyIiksIHsg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKQEAgLTI4NCwxMiAr
MjUwLDcgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBFbmRPZkxpbmVBcwogCiBURVNU
X0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEVuZE9mTGluZUFzc2VydGlvbldpdGhJbnZlcnRlZENo
YXJhY3RlclNldCkKIHsKLSAgICBjb25zdCBjaGFyKiBlbmRPZkxpbmVBc3NlcnRpb25XaXRoSW52
ZXJ0ZWRDaGFyYWN0ZXJTZXRGaWx0ZXIgPSAiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2Nr
XCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIlteeV0kXCJ9fV0iOwotICAgIGF1dG8g
ZXh0ZW5zaW9uRGF0YSA9IENvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QoZW5kT2ZM
aW5lQXNzZXJ0aW9uV2l0aEludmVydGVkQ2hhcmFjdGVyU2V0RmlsdGVyKTsKLSAgICBhdXRvIGV4
dGVuc2lvbiA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGOjpt
b3ZlKGV4dGVuc2lvbkRhdGEpKTsKLQotICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0
ZW5zaW9uc0JhY2tlbmQgYmFja2VuZDsKLSAgICBiYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24o
IkVuZE9mTGluZUFzc2VydGlvbiIsIGV4dGVuc2lvbik7CisgICAgYXV0byBiYWNrZW5kID0gbWFr
ZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7
XCJ1cmwtZmlsdGVyXCI6XCJbXnldJFwifX1dIik7CiAKICAgICB0ZXN0UmVxdWVzdChiYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwogICAgIHRlc3RSZXF1ZXN0KGJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2EiKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwpAQCAtMzA0LDE1ICsyNjUsMTAg
QEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBFbmRPZkxpbmVBcwogCiBURVNUX0YoQ29u
dGVudEV4dGVuc2lvblRlc3QsIFByZWZpeEluZml4U3VmZml4RXhhY3RNYXRjaCkKIHsKLSAgICBj
b25zdCBjaGFyKiBwcmVmaXhJbmZpeFN1ZmZpeEV4YWN0TWF0Y2hGaWx0ZXIgPSAiW3tcImFjdGlv
blwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcImlu
Zml4XCJ9fSwiCisgICAgYXV0byBiYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJpbmZpeFwi
fX0sIgogICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwiXnByZWZpeFwifX0sIgogICAgICAgICAie1wiYWN0aW9uXCI6
e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwic3VmZml4
JFwifX0sIgotICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmh0dHA6Ly9leGFjdFxcXFwub3JnLyRcIn19XSI7Ci0g
ICAgYXV0byBleHRlbnNpb25EYXRhID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlz
dChwcmVmaXhJbmZpeFN1ZmZpeEV4YWN0TWF0Y2hGaWx0ZXIpOwotICAgIGF1dG8gZXh0ZW5zaW9u
ID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEY6Om1vdmUoZXh0
ZW5zaW9uRGF0YSkpOwotCi0gICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25z
QmFja2VuZCBiYWNrZW5kOwotICAgIGJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbigiUHJlZml4
SW5maXhTdWZmaXhFeGFjdE1hdGNoIiwgZXh0ZW5zaW9uKTsKKyAgICAgICAgIntcImFjdGlvblwi
OntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5odHRw
Oi8vZXhhY3RcXFxcLm9yZy8kXCJ9fV0iKTsKIAogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoImluZml4Oi8vd2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5z
aW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9pbmZpeC5vcmcvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKQEAgLTMzMiwxMyArMjg4LDggQEAgVEVT
VF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBQcmVmaXhJbmZpeAogCiBURVNUX0YoQ29udGVudEV4
dGVuc2lvblRlc3QsIER1cGxpY2F0ZWRNYXRjaEFsbFRlcm1zSW5WYXJpb3VzRm9ybWF0KQogewot
ICAgIGNvbnN0IGNoYXIqIGR1cGxpY2F0ZWRNYXRjaEFsbFRlcm1zSW5WYXJpb3VzRm9ybWF0Rmls
dGVyID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCIuKi4qKC4pKiguKikoLispKiguPykqaW5maXhcIn19LCIKLSAgICAgICAg
IntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcInByZSguPykrKC4rKT9wb3N0XCJ9fV0iOwotICAgIGF1dG8gZXh0ZW5zaW9uRGF0YSA9
IENvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QoZHVwbGljYXRlZE1hdGNoQWxsVGVy
bXNJblZhcmlvdXNGb3JtYXRGaWx0ZXIpOwotICAgIGF1dG8gZXh0ZW5zaW9uID0gSW5NZW1vcnlD
b21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEY6Om1vdmUoZXh0ZW5zaW9uRGF0YSkp
OwotCi0gICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBiYWNr
ZW5kOwotICAgIGJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbigiRHVwbGljYXRlZE1hdGNoQWxs
VGVybXNJblZhcmlvdXNGb3JtYXQiLCBleHRlbnNpb24pOworICAgIGF1dG8gYmFja2VuZCA9IG1h
a2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwiLiouKiguKSooLiopKC4rKSooLj8pKmluZml4XCJ9fSwiCisgICAg
ICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJwcmUoLj8pKyguKyk/cG9zdFwifX1dIik7CiAKICAgICB0ZXN0UmVxdWVzdChi
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJpbmZpeDovL3dlYmtpdC5vcmcvIiksIHsgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKICAgICB0ZXN0UmVxdWVz
dChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vaW5maXgub3JnLyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CkBAIC0zNTcsNyArMzA4
LDcgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBEdXBsaWNhdGVkTQogCiBURVNUX0Yo
Q29udGVudEV4dGVuc2lvblRlc3QsIFRlcm1zS25vd25Ub01hdGNoQW55dGhpbmcpCiB7Ci0gICAg
Y29uc3QgY2hhciogdGVybXNLbm93blRvTWF0Y2hBbnl0aGluZ0ZpbHRlciA9ICJbe1wiYWN0aW9u
XCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXnBy
ZTEuKnBvc3QxJFwifX0sIgorICAgIGF1dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0
aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
XnByZTEuKnBvc3QxJFwifX0sIgogICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxv
Y2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXnByZTIoLiopcG9zdDIkXCJ9fSwi
CiAgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7
XCJ1cmwtZmlsdGVyXCI6XCJecHJlMyguKik/cG9zdDMkXCJ9fSwiCiAgICAgICAgICJ7XCJhY3Rp
b25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJe
cHJlNCguKikrcG9zdDQkXCJ9fSwiCkBAIC0zNjYsMTIgKzMxNyw3IEBAIFRFU1RfRihDb250ZW50
RXh0ZW5zaW9uVGVzdCwgVGVybXNLbm93blQKICAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVc
IjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5wcmU3KC4rKSpwb3N0
NyRcIn19LCIKICAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5wcmU4KC4/KSpwb3N0OCRcIn19LCIKICAgICAgICAg
IntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcIl5wcmU5KC4rKT9wb3N0OSRcIn19LCIKLSAgICAgICAgIntcImFjdGlvblwiOntcInR5
cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5wcmUwKC4/KStw
b3N0MCRcIn19XSI7Ci0gICAgYXV0byBleHRlbnNpb25EYXRhID0gQ29udGVudEV4dGVuc2lvbnM6
OmNvbXBpbGVSdWxlTGlzdCh0ZXJtc0tub3duVG9NYXRjaEFueXRoaW5nRmlsdGVyKTsKLSAgICBh
dXRvIGV4dGVuc2lvbiA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUo
V1RGOjptb3ZlKGV4dGVuc2lvbkRhdGEpKTsKLQotICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250
ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFja2VuZDsKLSAgICBiYWNrZW5kLmFkZENvbnRlbnRFeHRl
bnNpb24oIlRlcm1zS25vd25Ub01hdGNoQW55dGhpbmciLCBleHRlbnNpb24pOworICAgICAgICAi
e1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwiXnByZTAoLj8pK3Bvc3QwJFwifX1dIik7CiAKICAgICB0ZXN0UmVxdWVzdChiYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJwcmUxOi8vd2Via2l0Lm9yZy9wb3N0MSIpLCB7IENvbnRl
bnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CiAgICAgdGVzdFJlcXVlc3Qo
YmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgicHJlMjovL3dlYmtpdC5vcmcvcG9zdDIiKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwpAQCAtNDA5LDEz
ICszNTUsOCBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFRlcm1zS25vd25UCiAKIFRF
U1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgVHJhaWxpbmdEb3RTdGFyKQogewotICAgIGNvbnN0
IGNoYXIqIHRyYWlsaW5nRG90U3RhckZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
YmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiZm9vLiokXCJ9fSwiCi0gICAg
ICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJiYXIoLiopJFwifX1dIjsKLSAgICBhdXRvIGV4dGVuc2lvbkRhdGEgPSBDb250
ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KHRyYWlsaW5nRG90U3RhckZpbHRlcik7Ci0g
ICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3Jl
YXRlKFdURjo6bW92ZShleHRlbnNpb25EYXRhKSk7Ci0KLSAgICBDb250ZW50RXh0ZW5zaW9uczo6
Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmQ7Ci0gICAgYmFja2VuZC5hZGRDb250ZW50
RXh0ZW5zaW9uKCJUcmFpbGluZ0RvdFN0YXIiLCBleHRlbnNpb24pOworICAgIGF1dG8gYmFja2Vu
ZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiZm9vLiokXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJiYXIo
LiopJFwifX1dIik7CiAKICAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJodHRwczovL3dlYmtpdC5vcmcvIiksIHsgfSk7CiAKQEAgLTQzMiwxNCArMzczLDkgQEAg
VEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBUcmFpbGluZ0RvdAogCiBURVNUX0YoQ29udGVu
dEV4dGVuc2lvblRlc3QsIFRyYWlsaW5nVGVybXNDYXJyeWluZ05vRGF0YSkKIHsKLSAgICBjb25z
dCBjaGFyKiB0cmFpbGluZ1Rlcm1zQ2FycnlpbmdOb0RhdGFGaWx0ZXIgPSAiW3tcImFjdGlvblwi
OntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcImZvb2I/
YT9yP1wifX0sIgorICAgIGF1dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6
e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiZm9vYj9h
P3I/XCJ9fSwiCiAgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJiYXpvKG9rKT9hPyRcIn19LCIKLSAgICAgICAgIntc
ImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcImNhdHMqJFwifX1dIjsKLSAgICBhdXRvIGV4dGVuc2lvbkRhdGEgPSBDb250ZW50RXh0ZW5z
aW9uczo6Y29tcGlsZVJ1bGVMaXN0KHRyYWlsaW5nVGVybXNDYXJyeWluZ05vRGF0YUZpbHRlcik7
Ci0gICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6
Y3JlYXRlKFdURjo6bW92ZShleHRlbnNpb25EYXRhKSk7Ci0KLSAgICBDb250ZW50RXh0ZW5zaW9u
czo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmQ7Ci0gICAgYmFja2VuZC5hZGRDb250
ZW50RXh0ZW5zaW9uKCJUcmFpbGluZ1Rlcm1zQ2FycnlpbmdOb0RhdGEiLCBleHRlbnNpb24pOwor
ICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiY2F0cyokXCJ9fV0iKTsKIAogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHBzOi8vd2Via2l0Lm9yZy8iKSwgeyB9KTsKIApAQCAt
NDc0LDE2ICs0MTAsMTAgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBUcmFpbGluZ1Rl
cgogCiBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIExvYWRUeXBlKQogewotICAgIGNvbnN0
IGNoYXIqIGxvYWRUeXBlRmlsdGVyID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wi
fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCIsXCJsb2FkLXR5cGVc
IjpbXCJ0aGlyZC1wYXJ0eVwiXX19LCIKKyAgICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2VuZCgi
W3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcIndlYmtpdC5vcmdcIixcImxvYWQtdHlwZVwiOltcInRoaXJkLXBhcnR5XCJdfX0sIgog
ICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwid2hhdHdnLm9yZ1wiLFwibG9hZC10eXBlXCI6W1wiZmlyc3QtcGFydHlc
Il19fSwiCi0gICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdn
ZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJhbHdheXNibG9jay5wZGZcIn19XSI7Ci0KLSAgICBhdXRv
IGV4dGVuc2lvbkRhdGEgPSBDb250ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KGxvYWRU
eXBlRmlsdGVyKTsKLSAgICBhdXRvIGV4dGVuc2lvbiA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uOjpjcmVhdGUoV1RGOjptb3ZlKGV4dGVuc2lvbkRhdGEpKTsKLSAgICAgICAgCi0g
ICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBiYWNrZW5kOwot
ICAgIGJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbigiTG9hZFR5cGVGaWx0ZXIiLCBleHRlbnNp
b24pOwotICAgICAgICAKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9
LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcImFsd2F5c2Jsb2NrLnBkZlwifX1dIik7Cisg
ICAgCiAgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDov
L3dlYmtpdC5vcmciKSwgeyB9KTsKICAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCB7VVJMKFVSTCgp
LCAiaHR0cDovL3dlYmtpdC5vcmciKSwgVVJMKFVSTCgpLCAiaHR0cDovL25vdF93ZWJraXQub3Jn
IiksIFJlc291cmNlVHlwZTo6RG9jdW1lbnR9LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0xvYWQgfSk7CiAgICAgICAgIApAQCAtNDk2LDE0ICs0MjYsOCBAQCBURVNUX0Yo
Q29udGVudEV4dGVuc2lvblRlc3QsIExvYWRUeXBlKQogCiBURVNUX0YoQ29udGVudEV4dGVuc2lv
blRlc3QsIFJlc291cmNlVHlwZSkKIHsKLSAgICBjb25zdCBjaGFyKiByZXNvdXJjZVR5cGVGaWx0
ZXIgPSAiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcImJsb2NrX2FsbF90eXBlcy5vcmdcIixcInJlc291cmNlLXR5cGVcIjpbXCJk
b2N1bWVudFwiLFwiaW1hZ2VcIixcInN0eWxlLXNoZWV0XCIsXCJzY3JpcHRcIixcImZvbnRcIixc
InJhd1wiLFwic3ZnLWRvY3VtZW50XCIsXCJtZWRpYVwiXX19LCIKLSAgICAgICAgIntcImFjdGlv
blwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcImJs
b2NrX29ubHlfaW1hZ2VzXCIsXCJyZXNvdXJjZS10eXBlXCI6W1wiaW1hZ2VcIl19fV0iOwotCi0g
ICAgYXV0byBleHRlbnNpb25EYXRhID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlz
dChyZXNvdXJjZVR5cGVGaWx0ZXIpOwotICAgIGF1dG8gZXh0ZW5zaW9uID0gSW5NZW1vcnlDb21w
aWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEY6Om1vdmUoZXh0ZW5zaW9uRGF0YSkpOwot
ICAgICAgICAKLSAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5k
IGJhY2tlbmQ7Ci0gICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJSZXNvdXJjZVR5cGVG
aWx0ZXIiLCBleHRlbnNpb24pOworICAgIGF1dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wi
YWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
OlwiYmxvY2tfYWxsX3R5cGVzLm9yZ1wiLFwicmVzb3VyY2UtdHlwZVwiOltcImRvY3VtZW50XCIs
XCJpbWFnZVwiLFwic3R5bGUtc2hlZXRcIixcInNjcmlwdFwiLFwiZm9udFwiLFwicmF3XCIsXCJz
dmctZG9jdW1lbnRcIixcIm1lZGlhXCJdfX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlw
ZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiYmxvY2tfb25seV9p
bWFnZXNcIixcInJlc291cmNlLXR5cGVcIjpbXCJpbWFnZVwiXX19XSIpOwogCiAgICAgdGVzdFJl
cXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2Jsb2NrX2FsbF90eXBl
cy5vcmciLCBSZXNvdXJjZVR5cGU6OkRvY3VtZW50KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImh0dHA6Ly9ibG9ja19hbGxfdHlwZXMub3JnIiwgUmVzb3VyY2VUeXBlOjpJ
bWFnZSksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKQEAg
LTUxNyw2ICs0NDEsNTggQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBSZXNvdXJjZVR5
cAogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9i
bG9ja19vbmx5X2ltYWdlcy5vcmciLCBSZXNvdXJjZVR5cGU6OkRvY3VtZW50KSwgeyB9KTsKIH0K
IAorc3RhdGljIHZvaWQgY2hlY2tGb3JUZXJtaW5hdGVJbW1lZGlhdGVseShjb25zdCBWZWN0b3I8
Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlPiYgYnl0ZWNvZGUsIGJvb2wgc2hvdWxkVGVy
bWluYXRlSW1tZWRpYXRlbHkpCit7CisgICAgLy8gVGhpcyBzaG91bGQgY2hlY2sgZm9yIGNvZGUg
Z2VuZXJhdGVkIGJ5IERGQUJ5dGVjb2RlQ29tcGlsZXI6OnRlcm1pbmF0ZUltbWVkaWF0ZWx5IG9y
IGVxdWl2YWxlbnQgY29kZS4KKyAgICBjb25zdCBzaXplX3QgdGVybWluYXRlSW1tZWRpYXRlbHlC
eXRlY29kZVNpemUgPSBzaXplb2YodW5zaWduZWQpICsgc2l6ZW9mKENvbnRlbnRFeHRlbnNpb25z
OjpERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXJtaW5hdGUpOworICAgIGlmIChzaG91bGRUZXJt
aW5hdGVJbW1lZGlhdGVseSkgeworICAgICAgICBFWFBFQ1RfRVEoYnl0ZWNvZGUuc2l6ZSgpLCB0
ZXJtaW5hdGVJbW1lZGlhdGVseUJ5dGVjb2RlU2l6ZSk7CisgICAgICAgIGlmIChieXRlY29kZS5z
aXplKCkgIT0gdGVybWluYXRlSW1tZWRpYXRlbHlCeXRlY29kZVNpemUpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIEVYUEVDVF9FUSgqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCo+KCZieXRlY29kZVswXSksIHRlcm1pbmF0ZUltbWVkaWF0ZWx5Qnl0ZWNvZGVTaXplKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGJ5dGVjb2RlW3NpemVvZih1bnNpZ25lZCldLCBzdGF0aWNfY2FzdDxD
b250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGU+KENvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRl
Y29kZUluc3RydWN0aW9uOjpUZXJtaW5hdGUpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgRVhQRUNU
X05FKGJ5dGVjb2RlLnNpemUoKSwgdGVybWluYXRlSW1tZWRpYXRlbHlCeXRlY29kZVNpemUpOwor
fQorCitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEludmFsaWRKU09OKQoreworICAgIC8v
IEludmFsaWQgSlNPTi4KKyAgICBhdXRvIGludmFsaWRKU09OID0gQ29udGVudEV4dGVuc2lvbnM6
OmNvbXBpbGVSdWxlTGlzdCgiWyIpOworICAgIGNoZWNrRm9yVGVybWluYXRlSW1tZWRpYXRlbHko
aW52YWxpZEpTT04uYnl0ZWNvZGUsIHRydWUpOworCisgICAgLy8gTm8gcnVsZXMuCisgICAgYXV0
byBub1J1bGVzID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdCgiW10iKTsKKyAg
ICBjaGVja0ZvclRlcm1pbmF0ZUltbWVkaWF0ZWx5KG5vUnVsZXMuYnl0ZWNvZGUsIHRydWUpOwor
CisgICAgLy8gSW52YWxpZCBydWxlcyBhcmUgaWdub3JlZC4gQ29kZSBpcyBnZW5lcmF0ZWQgZm9y
IHRoZSB2YWxpZCBydWxlcy4KKyAgICBhdXRvIGludmFsaWRSdWxlID0gQ29udGVudEV4dGVuc2lv
bnM6OmNvbXBpbGVSdWxlTGlzdCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImludmFsaWRcIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Via2l0Lm9yZ1wifX0sIgorICAgICAgICAi
e1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwid2Via2l0Lm9yZ1wifX1dIik7CisgICAgYXV0byBvbmx5SW52YWxpZFJ1bGUgPSBDb250
ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
aW52YWxpZFwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0i
KTsKKyAgICBjaGVja0ZvclRlcm1pbmF0ZUltbWVkaWF0ZWx5KGludmFsaWRSdWxlLmJ5dGVjb2Rl
LCBmYWxzZSk7CisgICAgY2hlY2tGb3JUZXJtaW5hdGVJbW1lZGlhdGVseShvbmx5SW52YWxpZFJ1
bGUuYnl0ZWNvZGUsIHRydWUpOworICAgIAorICAgIC8vIFRyaWdnZXJzIG1hdGNoaW5nIGV2ZXJ5
dGhpbmcgbXVzdCBiZSBhdCBiZWdpbm5pbmcuCisgICAgYXV0byBtYXRjaGVzRXZlcnl0aGluZ0F0
RW5kID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdCgiW3tcImFjdGlvblwiOntc
InR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5v
cmdcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5v
bmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIi4qXCJ9fV0iKTsKKyAgICBhdXRvIG1hdGNoZXNFdmVyeXRoaW5nQXRCZWdpbm5pbmcgPSBD
b250ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KCJbe1wiYWN0aW9uXCI6e1widHlwZVwi
OlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwiLipcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5
cGVcIjpcImJsb2NrLWNvb2tpZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwid2Vi
a2l0Lm9yZ1wifX1dIik7CisgICAgY2hlY2tGb3JUZXJtaW5hdGVJbW1lZGlhdGVseShtYXRjaGVz
RXZlcnl0aGluZ0F0RW5kLmJ5dGVjb2RlLCB0cnVlKTsKKyAgICBjaGVja0ZvclRlcm1pbmF0ZUlt
bWVkaWF0ZWx5KG1hdGNoZXNFdmVyeXRoaW5nQXRCZWdpbm5pbmcuYnl0ZWNvZGUsIGZhbHNlKTsK
KworICAgIC8vIFRyaWdnZXJzIG1hdGNoaW5nIGV2ZXJ5dGhpbmcgbXVzdCBiZSBjc3MtZGlzcGxh
eS1ub25lLgorICAgIGF1dG8gYmxvY2tNYXRjaGVzRXZlcnl0aGluZyA9IENvbnRlbnRFeHRlbnNp
b25zOjpjb21waWxlUnVsZUxpc3QoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxc
InRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKlwifX1dIik7CisgICAgYXV0byBjc3NNYXRj
aGVzRXZlcnl0aGluZyA9IENvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QoIlt7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhp
ZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKlwifX1dIik7CisgICAgY2hl
Y2tGb3JUZXJtaW5hdGVJbW1lZGlhdGVseShibG9ja01hdGNoZXNFdmVyeXRoaW5nLmJ5dGVjb2Rl
LCB0cnVlKTsKKyAgICBjaGVja0ZvclRlcm1pbmF0ZUltbWVkaWF0ZWx5KGNzc01hdGNoZXNFdmVy
eXRoaW5nLmJ5dGVjb2RlLCBmYWxzZSk7CisgICAgCisgICAgLy8gVHJpZ2dlcnMgbWF0Y2hpbmcg
ZXZlcnl0aGluZyBjYW5ub3QgaGF2ZSBsb2FkLXR5cGUgb3IgcmVzb3VyY2UtdHlwZS4KKyAgICBh
dXRvIHJlc291cmNlVHlwZSA9IENvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QoIlt7
XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCIuKlwiLFwicmVzb3VyY2UtdHlwZVwiOltcImltYWdlXCJdfX1dIik7CisgICAgYXV0byBs
b2FkVHlwZSA9IENvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QoIlt7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKlwi
LFwibG9hZC10eXBlXCI6W1widGhpcmQtcGFydHlcIl19fV0iKTsKKyAgICBjaGVja0ZvclRlcm1p
bmF0ZUltbWVkaWF0ZWx5KHJlc291cmNlVHlwZS5ieXRlY29kZSwgdHJ1ZSk7CisgICAgY2hlY2tG
b3JUZXJtaW5hdGVJbW1lZGlhdGVseShsb2FkVHlwZS5ieXRlY29kZSwgdHJ1ZSk7Cit9CisKIFRF
U1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgTXVsdGlERkEpCiB7CiAgICAgLy8gTWFrZSBhbiBO
RkEgd2l0aCBhYm91dCAxNDAwIG5vZGVzLgpAQCAtNTQ1LDExICs1MjEsNyBAQCBURVNUX0YoQ29u
dGVudEV4dGVuc2lvblRlc3QsIE11bHRpREZBKQogICAgIH0KICAgICBydWxlTGlzdC5hcHBlbmQo
J10nKTsKICAgICAKLSAgICBhdXRvIGV4dGVuc2lvbkRhdGEgPSBDb250ZW50RXh0ZW5zaW9uczo6
Y29tcGlsZVJ1bGVMaXN0KHJ1bGVMaXN0LnRvU3RyaW5nKCkpOwotICAgIGF1dG8gZXh0ZW5zaW9u
ID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEY6Om1vdmUoZXh0
ZW5zaW9uRGF0YSkpOwotICAgICAgICAKLSAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4
dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmQ7Ci0gICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9u
KCJSZXNvdXJjZVR5cGVGaWx0ZXIiLCBleHRlbnNpb24pOworICAgIGF1dG8gYmFja2VuZCA9IG1h
a2VCYWNrZW5kKHJ1bGVMaXN0LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9B
QUEiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwogICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQu
b3JnL1pBQSIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxODE5NzApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNS0wMy0yNSAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIENvbnRlbnQgZXh0ZW5zaW9u
cyBzaG91bGQgZmFpbCB0byBsb2FkIGludmFsaWQgZXh0ZW5zaW9ucy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzA1OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9jb250ZW50ZXh0
ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25lLmh0bWwuanNvbjoKKyAgICAgICAgTWFkZSB0ZXN0IHZh
bGlkIGJ5IHBsYWNpbmcgdGhlIC4qIHRyaWdnZXIgYXQgdGhlIGJlZ2lubmluZy4KKwogMjAxNS0w
My0yNSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgR2FyZGVuaW5n
OiByZWJhc2VsaW5lIGFmdGVyIHIxODE5MDcuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2NvbnRlbnRleHRlbnNpb25zL2Nzcy1kaXNwbGF5LW5vbmUuaHRtbC5qc29uCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvY3NzLWRpc3BsYXkt
bm9uZS5odG1sLmpzb24JKHJldmlzaW9uIDE4MTk2MSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvY29udGVudGV4dGVuc2lvbnMvY3NzLWRpc3BsYXktbm9uZS5odG1sLmpzb24JKHdvcmtpbmcg
Y29weSkKQEAgLTIsMTYgKzIsMTYgQEAKICAgICB7CiAgICAgICAgICJhY3Rpb24iOiB7CiAgICAg
ICAgICAgICAidHlwZSI6ICJjc3MtZGlzcGxheS1ub25lIiwKLSAgICAgICAgICAgICJzZWxlY3Rv
ciI6ICIuaGlkZGVuIgorICAgICAgICAgICAgInNlbGVjdG9yIjogIi5oaWRkZW5fZ2xvYmFsIgog
ICAgICAgICB9LAogICAgICAgICAidHJpZ2dlciI6IHsKLSAgICAgICAgICAgICJ1cmwtZmlsdGVy
IjogIi4qY3NzLWRpc3BsYXktbm9uZS5odG1sIgorICAgICAgICAgICAgInVybC1maWx0ZXIiOiAi
LioiCiAgICAgICAgIH0KICAgICB9LAogICAgIHsKICAgICAgICAgImFjdGlvbiI6IHsKICAgICAg
ICAgICAgICJ0eXBlIjogImNzcy1kaXNwbGF5LW5vbmUiLAotICAgICAgICAgICAgInNlbGVjdG9y
IjogIi5oaWRkZW5fXHUwMTdEIgorICAgICAgICAgICAgInNlbGVjdG9yIjogIi5oaWRkZW4iCiAg
ICAgICAgIH0sCiAgICAgICAgICJ0cmlnZ2VyIjogewogICAgICAgICAgICAgInVybC1maWx0ZXIi
OiAiLipjc3MtZGlzcGxheS1ub25lLmh0bWwiCkBAIC0yMCwxMCArMjAsMTAgQEAKICAgICB7CiAg
ICAgICAgICJhY3Rpb24iOiB7CiAgICAgICAgICAgICAidHlwZSI6ICJjc3MtZGlzcGxheS1ub25l
IiwKLSAgICAgICAgICAgICJzZWxlY3RvciI6ICIuaGlkZGVuX2dsb2JhbCIKKyAgICAgICAgICAg
ICJzZWxlY3RvciI6ICIuaGlkZGVuX1x1MDE3RCIKICAgICAgICAgfSwKICAgICAgICAgInRyaWdn
ZXIiOiB7Ci0gICAgICAgICAgICAidXJsLWZpbHRlciI6ICIuKiIKKyAgICAgICAgICAgICJ1cmwt
ZmlsdGVyIjogIi4qY3NzLWRpc3BsYXktbm9uZS5odG1sIgogICAgICAgICB9CiAgICAgfQogXQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249457</attachid>
            <date>2015-03-25 18:03:56 -0700</date>
            <delta_ts>2015-03-26 14:07:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143058-20150325180319.patch</filename>
            <type>text/plain</type>
            <size>9909</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTk4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE1LTAzLTI1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
ZXh0ZW5zaW9uc10gQWRkIG1vcmUgZmFpbHVyZSBjYXNlcyBhbmQgdGVzdHMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMwNTgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25z
L0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OmNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5KToKKyAgICAgICAgKiBjb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaDoKKwogMjAxNS0wMy0yNSAgQ2hy
aXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiB0YWJsZSBj
ZWxscyB0aGF0IHVzZSBkaXNwbGF5OmJsb2NrIHJlbmRlciB0aGUgdGFibGUgaW5hY2Nlc3NpYmxl
IHRvIFZvaWNlT3ZlcgpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAx
ODE5NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsMTQgKzEzNiwxOCBAQCBzdGQ6
OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAKICAgICAgICAgaWYgKHN0YXR1
cyA9PSBVUkxGaWx0ZXJQYXJzZXI6Ok1hdGNoZXNFdmVyeXRoaW5nKSB7CiAgICAgICAgICAgICBp
ZiAobm9uVW5pdmVyc2FsQWN0aW9uU2VlbikKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiVHJp
Z2dlciBtYXRjaGluZyBldmVyeXRoaW5nIGZvdW5kIG5vdCBhdCBiZWdpbm5pbmcuICBUaGlzIG1h
eSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3Igd2l0aCBpZ25vcmUtcHJldmlvdXMtcnVsZXMiKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpSZWdleE1hdGNo
ZXNFdmVyeXRoaW5nTm90QXRCZWdpbm5pbmc7CisgICAgICAgICAgICBpZiAoY29udGVudEV4dGVu
c2lvblJ1bGUuYWN0aW9uKCkudHlwZSgpICE9IEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2Vs
ZWN0b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6UmVn
ZXhNYXRjaGVzRXZlcnl0aGluZ05vdENTUzsKKyAgICAgICAgICAgIGlmICh0cmlnZ2VyLmZsYWdz
KQorICAgICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OlJlZ2V4TWF0
Y2hlc0V2ZXJ5dGhpbmdMb2FkT3JSZXNvdXJjZVR5cGU7CiAgICAgICAgICAgICB1bml2ZXJzYWxB
Y3Rpb25Mb2NhdGlvbnMuYXBwZW5kKGFjdGlvbkxvY2F0aW9uQW5kRmxhZ3MpOwogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIG5vblVuaXZlcnNhbEFjdGlvblNlZW4gPSB0cnVlOwogICAgICAg
ICAKICAgICAgICAgaWYgKHN0YXR1cyAhPSBVUkxGaWx0ZXJQYXJzZXI6Ok9rICYmIHN0YXR1cyAh
PSBVUkxGaWx0ZXJQYXJzZXI6Ok1hdGNoZXNFdmVyeXRoaW5nKSB7CiAgICAgICAgICAgICBkYXRh
TG9nRigiRXJyb3Igd2hpbGUgcGFyc2luZyAlczogJXNcbiIsIHRyaWdnZXIudXJsRmlsdGVyLnV0
ZjgoKS5kYXRhKCksIFVSTEZpbHRlclBhcnNlcjo6c3RhdHVzU3RyaW5nKHN0YXR1cykudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJldHVybiBDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OlJlZ2V4UGFyc2VFcnJvcjsKICAgICAgICAgfQogICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkVy
cm9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCShyZXZpc2lvbiAxODE5NzkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Myw2ICs3MywxNCBAQCBjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiBjb250
ZW50RXh0ZW5zCiAgICAgICAgICAgICAgICAgcmV0dXJuICJJbnZhbGlkIGFjdGlvbiB0eXBlLiI7
CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRDU1NE
aXNwbGF5Tm9uZUFjdGlvblR5cGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJJbnZhbGlkIGNz
cy1kaXNwbGF5LW5vbmUgYWN0aW9uIHR5cGUuIFJlcXVpcmVzIGEgc2VsZWN0b3IuIjsKKyAgICAg
ICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpSZWdleE1hdGNoZXNFdmVyeXRoaW5n
TG9hZE9yUmVzb3VyY2VUeXBlOgorICAgICAgICAgICAgICAgIHJldHVybiAiUmVndWxhciBleHBy
ZXNzaW9ucyB0aGF0IG1hdGNoIGV2ZXJ5dGhpbmcgYXJlIG5vdCBhbGxvd2VkIHRvIGhhdmUgbG9h
ZC10eXBlIG9yIHJlc291cmNlLXR5cGUuIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVu
c2lvbkVycm9yOjpSZWdleE1hdGNoZXNFdmVyeXRoaW5nTm90QXRCZWdpbm5pbmc6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICJSZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgbWF0Y2ggZXZlcnl0aGlu
ZyBhcmUgb25seSBhbGxvd2VkIGF0IHRoZSBiZWdpbm5pbmcuIjsKKyAgICAgICAgICAgIGNhc2Ug
Q29udGVudEV4dGVuc2lvbkVycm9yOjpSZWdleE1hdGNoZXNFdmVyeXRoaW5nTm90Q1NTOgorICAg
ICAgICAgICAgICAgIHJldHVybiAiUmVndWxhciBleHByZXNzaW9ucyB0aGF0IG1hdGNoIGV2ZXJ5
dGhpbmcgbXVzdCBoYXZlIGNzcy1kaXNwbGF5LW5vbmUgYWN0aW9ucy4iOworICAgICAgICAgICAg
Y2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OlJlZ2V4UGFyc2VFcnJvcjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gIkVycm9yIHBhcnNpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4iOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25FcnJvci5oCShyZXZpc2lvbiAxODE5NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NiArNTMsMTEgQEAgZW51bSBjbGFzcyBDb250ZW50RXh0ZW5zaW9uRXJyb3IgewogICAgIEpTT05J
bnZhbGlkQWN0aW9uLAogICAgIEpTT05JbnZhbGlkQWN0aW9uVHlwZSwKICAgICBKU09OSW52YWxp
ZENTU0Rpc3BsYXlOb25lQWN0aW9uVHlwZSwKKyAgICAKKyAgICBSZWdleE1hdGNoZXNFdmVyeXRo
aW5nTm90QXRCZWdpbm5pbmcsCisgICAgUmVnZXhNYXRjaGVzRXZlcnl0aGluZ05vdENTUywKKyAg
ICBSZWdleE1hdGNoZXNFdmVyeXRoaW5nTG9hZE9yUmVzb3VyY2VUeXBlLAorICAgIFJlZ2V4UGFy
c2VFcnJvciwKIH07CiAKIGNvbnN0IHN0ZDo6ZXJyb3JfY2F0ZWdvcnkmIGNvbnRlbnRFeHRlbnNp
b25FcnJvckNhdGVnb3J5KCk7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODE5ODgpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNS0wMy0yNSAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtDb250ZW50IGV4dGVuc2lv
bnNdIEFkZCBtb3JlIGZhaWx1cmUgY2FzZXMgYW5kIHRlc3RzLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzMDU4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQ29udGVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y2hlY2tD
b21waWxlckVycm9yKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisKIDIwMTUt
MDMtMjUgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXggV2luZG93cyBidWlsZCBmcm9tIHIxODE5NzcuCkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAJKHJl
dmlzaW9uIDE4MTk3OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250
ZW50RXh0ZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNs
dWRlICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRp
YWxpemVUaHJlYWRpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25Db21w
aWxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkVycm9yLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05GQS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkSW5mby5oPgpAQCAtNTcz
LDYgKzU3NCw1OSBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIE11bHRpREZBKQogICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQu
b3JnLyIpLCB7IH0pOwogfQogCit2b2lkIGNoZWNrQ29tcGlsZXJFcnJvcihjb25zdCBjaGFyKiBq
c29uLCBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yIGV4cGVjdGVkRXJy
b3IpCit7CisgICAgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbkRhdGEgZXh0ZW5zaW9uRGF0YTsKKyAgICBJbk1lbW9yeUNvbnRlbnRFeHRlbnNpb25D
b21waWxhdGlvbkNsaWVudCBjbGllbnQoZXh0ZW5zaW9uRGF0YSk7CisgICAgc3RkOjplcnJvcl9j
b2RlIGNvbXBpbGVyRXJyb3IgPSBDb250ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KGNs
aWVudCwganNvbik7CisgICAgRVhQRUNUX0VRKGNvbXBpbGVyRXJyb3IudmFsdWUoKSwgc3RhdGlj
X2Nhc3Q8aW50PihleHBlY3RlZEVycm9yKSk7Cit9CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9u
VGVzdCwgSW52YWxpZEpTT04pCit7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbIiwgQ29udGVu
dEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWQpOworICAgIGNo
ZWNrQ29tcGlsZXJFcnJvcigiMTIzIiwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNp
b25FcnJvcjo6SlNPTlRvcExldmVsU3RydWN0dXJlTm90QW5PYmplY3QpOworICAgIGNoZWNrQ29t
cGlsZXJFcnJvcigie30iLCBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9y
OjpKU09OVG9wTGV2ZWxTdHJ1Y3R1cmVOb3RBbkFycmF5KTsKKyAgICAvLyBGSVhNRTogQWRkIHVu
aXQgdGVzdCBmb3IgSlNPTkludmFsaWRSdWxlLgorICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW10i
LCBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OQ29udGFpbnNO
b1J1bGVzKTsKKworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVc
IjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOjV9XSIsCisgICAgICAgIENvbnRlbnRFeHRlbnNpb25z
OjpDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlcik7CisgICAgY2hlY2tD
b21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwiXCJ9fV0iLAorICAgICAgICBDb250ZW50RXh0ZW5zaW9uczo6
Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFVSTEZpbHRlckluVHJpZ2dlcik7Cisg
ICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOnt9fX1dIiwKKyAgICAgICAgQ29udGVudEV4dGVu
c2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRVUkxGaWx0ZXJJblRyaWdn
ZXIpOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQgdW5pdCB0ZXN0IGZvciBKU09OSW52YWxpZE9i
amVjdEluVHJpZ2dlckZsYWdzQXJyYXkuCisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0
aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
d2Via2l0Lm9yZ1wiLFwibG9hZC10eXBlXCI6e319fV0iLAorICAgICAgICBDb250ZW50RXh0ZW5z
aW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXJGbGFnc0FycmF5
KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9j
a1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCIsXCJsb2FkLXR5
cGVcIjpbXCJpbnZhbGlkXCJdfX1dIiwKKyAgICAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRl
bnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRTdHJpbmdJblRyaWdnZXJGbGFnc0FycmF5KTsK
KyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wi
fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCIsXCJyZXNvdXJjZS10
eXBlXCI6e319fV0iLAorICAgICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXJGbGFnc0FycmF5KTsKKyAgICBjaGVja0NvbXBpbGVy
RXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCIsXCJyZXNvdXJjZS10eXBlXCI6W1wiaW52YWxpZFwi
XX19XSIsCisgICAgICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJyb3I6
OkpTT05JbnZhbGlkU3RyaW5nSW5UcmlnZ2VyRmxhZ3NBcnJheSk7CisKKyAgICBjaGVja0NvbXBp
bGVyRXJyb3IoIlt7XCJhY3Rpb25cIjo1LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndl
YmtpdC5vcmdcIn19XSIsCisgICAgICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05JbnZhbGlkQWN0aW9uKTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7
XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJpbnZhbGlkXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcIndlYmtpdC5vcmdcIn19XSIsCisgICAgICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQWN0aW9uVHlwZSk7CisgICAgY2hlY2tDb21w
aWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwifSxc
InRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3ZWJraXQub3JnXCJ9fV0iLAorICAgICAgICBD
b250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZENTU0Rp
c3BsYXlOb25lQWN0aW9uVHlwZSk7CisgICAgCisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wi
YWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
Olwid2Via2l0Lm9yZ1wifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3Nz
LWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiLipcIn19XSIsCisgICAgICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OlJlZ2V4TWF0Y2hlc0V2ZXJ5dGhpbmdOb3RBdEJlZ2lubmluZyk7
CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tc
In0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLipcIn19XSIsCisgICAgICAgIENvbnRl
bnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJyb3I6OlJlZ2V4TWF0Y2hlc0V2ZXJ5dGhp
bmdOb3RDU1MpOworICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVc
IjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dl
clwiOntcInVybC1maWx0ZXJcIjpcIi4qXCIsXCJyZXNvdXJjZS10eXBlXCI6W1wiaW1hZ2VcIl19
fV0iLAorICAgICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpS
ZWdleE1hdGNoZXNFdmVyeXRoaW5nTG9hZE9yUmVzb3VyY2VUeXBlKTsKKyAgICBjaGVja0NvbXBp
bGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJz
ZWxlY3RvclwiOlwiLmhpZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKlwi
LFwibG9hZC10eXBlXCI6W1widGhpcmQtcGFydHlcIl19fV0iLAorICAgICAgICBDb250ZW50RXh0
ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpSZWdleE1hdGNoZXNFdmVyeXRoaW5nTG9h
ZE9yUmVzb3VyY2VUeXBlKTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbXCJ9fV0i
LAorICAgICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpSZWdl
eFBhcnNlRXJyb3IpOworfQorICAgIAogc3RhdGljIHZvaWQgdGVzdFBhdHRlcm5TdGF0dXMoU3Ry
aW5nIHBhdHRlcm4sIENvbnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3Rh
dHVzIHN0YXR1cykKIHsKICAgICBDb250ZW50RXh0ZW5zaW9uczo6TkZBIG5mYTsK
</data>
<flag name="review"
          id="274264"
          type_id="1"
          status="-"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>