<?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>95258</bug_id>
          
          <creation_ts>2012-08-28 16:07:03 -0700</creation_ts>
          <short_desc>Add support for blendmode to webkit rendering engine</short_desc>
          <delta_ts>2012-08-30 11:02:35 -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>CSS</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>
          
          <blocked>91908</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Rik Cabanier">cabanier</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>eric</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>706829</commentid>
    <comment_count>0</comment_count>
    <who name="Rik Cabanier">cabanier</who>
    <bug_when>2012-08-28 16:07:03 -0700</bug_when>
    <thetext>This patch will add support for blendmode to the WebCore engine.
A later patch will add support for CoreAnimation and Chromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706878</commentid>
    <comment_count>1</comment_count>
      <attachid>161090</attachid>
    <who name="Rik Cabanier">cabanier</who>
    <bug_when>2012-08-28 16:49:13 -0700</bug_when>
    <thetext>Created attachment 161090
First try</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706977</commentid>
    <comment_count>2</comment_count>
    <who name="Rik Cabanier">cabanier</who>
    <bug_when>2012-08-28 18:37:07 -0700</bug_when>
    <thetext>No tests since the rendering and parsing didn&apos;t change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707654</commentid>
    <comment_count>3</comment_count>
      <attachid>161090</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-08-29 11:06:50 -0700</bug_when>
    <thetext>Comment on attachment 161090
First try

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        No new tests (OOPS!).

OOPS

This patch does change behavior: it makes compositing layers for blending, so this should be tested.

&gt; Source/WebCore/rendering/RenderInline.h:128
&gt; +    virtual bool requiresLayer() const { return isInFlowPositioned() || isTransparent() || hasMask() || hasFilter() || hasBlendMode(); }

It might be worth making a method on RenderObject for hasMask() || hasFilter() || hasBlendMode(), since these all have similar effects.

&gt; Source/WebCore/rendering/RenderLayerBacking.cpp:963
&gt;  {
&gt; -    return style-&gt;hasBorder() || style-&gt;hasBorderRadius() || style-&gt;hasOutline() || style-&gt;hasAppearance() || style-&gt;boxShadow() || style-&gt;hasFilter();
&gt; +    return style-&gt;hasBorder() || style-&gt;hasBorderRadius() || style-&gt;hasOutline() || style-&gt;hasAppearance() || style-&gt;boxShadow() || style-&gt;hasFilter() || style-&gt;hasBlendMode();
&gt;  }

I&apos;m not sure this is correct. We use hasBoxDecorations() to tell if we need backing store, but I don&apos;t think the blend mode needs to affect that answer.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1484
&gt; +        || renderer-&gt;hasBlendMode())

Again, not sure if this is true for all platforms. I don&apos;t think we need backing store for CA to do blending.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707768</commentid>
    <comment_count>4</comment_count>
      <attachid>161292</attachid>
    <who name="Rik Cabanier">cabanier</who>
    <bug_when>2012-08-29 12:54:52 -0700</bug_when>
    <thetext>Created attachment 161292
added test that checks for compositing layer. Removed test from RenderLayerCompositor.cpp. Added helper function that tests for mask, filter and blend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707781</commentid>
    <comment_count>5</comment_count>
    <who name="Rik Cabanier">cabanier</who>
    <bug_when>2012-08-29 13:07:03 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 161090 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161090&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        No new tests (OOPS!).
&gt; 
&gt; OOPS
&gt; 
&gt; This patch does change behavior: it makes compositing layers for blending, so this should be tested.

I added a test to the patch

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderInline.h:128
&gt; &gt; +    virtual bool requiresLayer() const { return isInFlowPositioned() || isTransparent() || hasMask() || hasFilter() || hasBlendMode(); }
&gt; 
&gt; It might be worth making a method on RenderObject for hasMask() || hasFilter() || hasBlendMode(), since these all have similar effects.

I added a helper method to RenderObject.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerBacking.cpp:963
&gt; &gt;  {
&gt; &gt; -    return style-&gt;hasBorder() || style-&gt;hasBorderRadius() || style-&gt;hasOutline() || style-&gt;hasAppearance() || style-&gt;boxShadow() || style-&gt;hasFilter();
&gt; &gt; +    return style-&gt;hasBorder() || style-&gt;hasBorderRadius() || style-&gt;hasOutline() || style-&gt;hasAppearance() || style-&gt;boxShadow() || style-&gt;hasFilter() || style-&gt;hasBlendMode();
&gt; &gt;  }
&gt; 
&gt; I&apos;m not sure this is correct. We use hasBoxDecorations() to tell if we need backing store, but I don&apos;t think the blend mode needs to affect that answer.

You were right. This wasn&apos;t needed.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1484
&gt; &gt; +        || renderer-&gt;hasBlendMode())
&gt; 
&gt; Again, not sure if this is true for all platforms. I don&apos;t think we need backing store for CA to do blending.

I verified that it was needed in this case. Blending is just like opacity so it should follow the same logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707865</commentid>
    <comment_count>6</comment_count>
      <attachid>161292</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-08-29 14:23:02 -0700</bug_when>
    <thetext>Comment on attachment 161292
added test that checks for compositing layer. Removed test from RenderLayerCompositor.cpp. Added helper function that tests for mask, filter and blend.

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

&gt; Source/WebCore/rendering/RenderObject.h:943
&gt; +    bool hasEffectThatNeedsLayer() const { return hasMask() || hasFilter() || hasBlendMode(); } 

I think this name is a bit literal. Maybe hasGraphicalEffect() or something? Is there generic name in graphics for these treatments that require that descendants need to be pre-rendered?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707886</commentid>
    <comment_count>7</comment_count>
    <who name="Rik Cabanier">cabanier</who>
    <bug_when>2012-08-29 14:36:36 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 161292 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161292&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderObject.h:943
&gt; &gt; +    bool hasEffectThatNeedsLayer() const { return hasMask() || hasFilter() || hasBlendMode(); } 
&gt; 
&gt; I think this name is a bit literal. Maybe hasGraphicalEffect() or something? Is there generic name in graphics for these treatments that require that descendants need to be pre-rendered?

That would be a &apos;group&apos; (aka a layer)
Should I rename it to graphicalEffectNeedsGroup()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707888</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-08-29 14:38:16 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 161292 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161292&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/rendering/RenderObject.h:943
&gt; &gt; &gt; +    bool hasEffectThatNeedsLayer() const { return hasMask() || hasFilter() || hasBlendMode(); } 
&gt; &gt; 
&gt; &gt; I think this name is a bit literal. Maybe hasGraphicalEffect() or something? Is there generic name in graphics for these treatments that require that descendants need to be pre-rendered?
&gt; 
&gt; That would be a &apos;group&apos; (aka a layer)
&gt; Should I rename it to graphicalEffectNeedsGroup()?

hasGroupEffect()?
createsGroup()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707890</commentid>
    <comment_count>9</comment_count>
    <who name="Rik Cabanier">cabanier</who>
    <bug_when>2012-08-29 14:40:39 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; (From update of attachment 161292 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161292&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/rendering/RenderObject.h:943
&gt; &gt; &gt; &gt; +    bool hasEffectThatNeedsLayer() const { return hasMask() || hasFilter() || hasBlendMode(); } 
&gt; &gt; &gt; 
&gt; &gt; &gt; I think this name is a bit literal. Maybe hasGraphicalEffect() or something? Is there generic name in graphics for these treatments that require that descendants need to be pre-rendered?
&gt; &gt; 
&gt; &gt; That would be a &apos;group&apos; (aka a layer)
&gt; &gt; Should I rename it to graphicalEffectNeedsGroup()?
&gt; 
&gt; hasGroupEffect()?
&gt; createsGroup()?

createsGroup sounds good. needsGroup would be good too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707932</commentid>
    <comment_count>10</comment_count>
      <attachid>161330</attachid>
    <who name="Rik Cabanier">cabanier</who>
    <bug_when>2012-08-29 15:19:52 -0700</bug_when>
    <thetext>Created attachment 161330
renamed function so it&apos;s shorter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707974</commentid>
    <comment_count>11</comment_count>
      <attachid>161330</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-08-29 15:54:21 -0700</bug_when>
    <thetext>Comment on attachment 161330
renamed function so it&apos;s shorter

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

&gt; Source/WebCore/rendering/RenderBoxModelObject.h:90
&gt; +    virtual bool requiresLayer() const { return isRoot() || isPositioned() || isTransparent() || hasTransform() || hasHiddenBackface() || hasReflection() || createsGroup() || style()-&gt;specifiesColumns(); }

You also need to change RenderBox::requiresLayer() and RenderTableRow::requiresLayer().

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1780
&gt; +    if (hasCompositedDescendants &amp;&amp; (layer-&gt;transform() || renderer-&gt;isTransparent() || renderer-&gt;hasMask() || renderer-&gt;hasReflection() || renderer-&gt;hasFilter() || renderer-&gt;hasBlendMode())) {
&gt;          reason = RenderLayer::IndirectCompositingForGraphicalEffect;

Why not use createsGroup() here?

&gt; Source/WebCore/rendering/RenderObject.h:943
&gt; +    bool createsGroup() const { return hasMask() || hasFilter() || hasBlendMode(); } 

I think this deserves a comment explaining the usage of &quot;group&quot;. Should isTransparent() also be included?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708032</commentid>
    <comment_count>12</comment_count>
    <who name="Rik Cabanier">cabanier</who>
    <bug_when>2012-08-29 16:32:14 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 161330 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161330&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBoxModelObject.h:90
&gt; &gt; +    virtual bool requiresLayer() const { return isRoot() || isPositioned() || isTransparent() || hasTransform() || hasHiddenBackface() || hasReflection() || createsGroup() || style()-&gt;specifiesColumns(); }
&gt; 
&gt; You also need to change RenderBox::requiresLayer() and RenderTableRow::requiresLayer().
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1780
&gt; &gt; +    if (hasCompositedDescendants &amp;&amp; (layer-&gt;transform() || renderer-&gt;isTransparent() || renderer-&gt;hasMask() || renderer-&gt;hasReflection() || renderer-&gt;hasFilter() || renderer-&gt;hasBlendMode())) {
&gt; &gt;          reason = RenderLayer::IndirectCompositingForGraphicalEffect;
&gt; 
&gt; Why not use createsGroup() here?
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderObject.h:943
&gt; &gt; +    bool createsGroup() const { return hasMask() || hasFilter() || hasBlendMode(); } 
&gt; 
&gt; I think this deserves a comment explaining the usage of &quot;group&quot;. Should isTransparent() also be included?

yes, I will add that. hasTransform seems like it should be added as well, except that RenderInline does not check for that. Is it because inline is never transformed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708054</commentid>
    <comment_count>13</comment_count>
      <attachid>161359</attachid>
    <who name="Rik Cabanier">cabanier</who>
    <bug_when>2012-08-29 16:46:42 -0700</bug_when>
    <thetext>Created attachment 161359
updated all places where requiresLayer checked. Added comment + moved function to public declaration. Changed compositor so it call public function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708080</commentid>
    <comment_count>14</comment_count>
      <attachid>161359</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-08-29 17:16:16 -0700</bug_when>
    <thetext>Comment on attachment 161359
updated all places where requiresLayer checked. Added comment + moved function to public declaration. Changed compositor so it call public function

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

&gt; LayoutTests/css3/compositing/should-have-compositing-layer.html:30
&gt; +&lt;div id=&quot;layertree&quot;&gt;&lt;/div&gt;

Best to use a &lt;pre&gt; for this so that indentation is maintained.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708241</commentid>
    <comment_count>15</comment_count>
      <attachid>161391</attachid>
    <who name="Rik Cabanier">cabanier</who>
    <bug_when>2012-08-29 20:09:50 -0700</bug_when>
    <thetext>Created attachment 161391
changed the test file so it uses a &lt;pre&gt; instead of a &lt;div&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708265</commentid>
    <comment_count>16</comment_count>
      <attachid>161391</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-29 20:56:47 -0700</bug_when>
    <thetext>Comment on attachment 161391
changed the test file so it uses a &lt;pre&gt; instead of a &lt;div&gt;

Rejecting attachment 161391 from commit-queue.

cabanier@adobe.com does not have committer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708307</commentid>
    <comment_count>17</comment_count>
      <attachid>161391</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-29 22:21:10 -0700</bug_when>
    <thetext>Comment on attachment 161391
changed the test file so it uses a &lt;pre&gt; instead of a &lt;div&gt;

Rejecting attachment 161391 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1

ERROR: /mnt/git/webkit-commit-queue/LayoutTests/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/13684555</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708836</commentid>
    <comment_count>18</comment_count>
      <attachid>161391</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-30 11:02:29 -0700</bug_when>
    <thetext>Comment on attachment 161391
changed the test file so it uses a &lt;pre&gt; instead of a &lt;div&gt;

Clearing flags on attachment: 161391

Committed r127162: &lt;http://trac.webkit.org/changeset/127162&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708837</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-30 11:02:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161090</attachid>
            <date>2012-08-28 16:49:13 -0700</date>
            <delta_ts>2012-08-29 12:54:52 -0700</delta_ts>
            <desc>First try</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>16995</size>
            <attacher name="Rik Cabanier">cabanier</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNjkzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDEyLTA4LTI4ICBSaWsgQ2Fi
YW5pZXIgIDxjYWJhbmllckBhZG9iZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGJs
ZW5kbW9kZSB0byB3ZWJraXQgcmVuZGVyaW5nIGVuZ2luZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUyNTgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNvZGUgYWRkcyBzdXBwb3J0IGZvciBibGVu
ZG1vZGVzIHRvIHRoZSBXZWJDb3JlIGVuZ2luZS4gVGhlIENTUyBwYXJzZXIgYWxyZWFkeQorICAg
ICAgICBzdXBwb3J0ZWQgdGhpcyBrZXl3b3JkIGJ1dCBkaWRuJ3QgcGFzcyBpdCBhbG9uZy4gU3Vw
cG9ydCBmb3IgcmVuZGVyaW5nIGJsZW5kaW5nIHdpbGwKKyAgICAgICAgYmUgcHJvdmlkZWQgaW4g
c3Vic2VxdWVudCBwYXRjaGVzCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAg
ICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVp
bGRlcjo6U3R5bGVCdWlsZGVyKToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxp
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAg
ICAoUmVuZGVyQm94TW9kZWxPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9k
ZWxPYmplY3Q6OnJlcXVpcmVzTGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxp
bmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6cmVxdWlyZXNMYXllcik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpSZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVCbGVuZE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmVuc3VyZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnNob3VsZEJlTm9ybWFsRmxvd09ubHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnN0eWxlQ2hhbmdlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6Cisg
ICAgICAgIChSZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFz
QmxlbmRNb2RlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Omhhc0JveERlY29yYXRpb25zKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNPd25CYWNraW5nU3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWFzb25Gb3JDb21wb3NpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29t
cG9zaXRpbmdGb3JJbmRpcmVjdFJlYXNvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JCbGVuZGluZyk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6Cisg
ICAgICAgIChSZW5kZXJMYXllckNvbXBvc2l0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaDoKKyAgICAgICAgKFJlbmRlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6Omhhc0JsZW5kTW9kZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRh
YmxlUm93Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisKIDIw
MTItMDgtMjcgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgogCiAgICAg
ICAgIFtDU1MgRmlsdGVyc10gRmlsdGVycyBzaG91bGQgcmVuZGVyIHVzaW5nIHNSR0IgdW50aWwg
dGhlIHNwZWNpZmljYXRpb24gc2F5cyBob3cgaXQgd29ya3MKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyOSw2ICsxOTI5LDkgQEAgU3R5
bGVCdWlsZGVyOjpTdHlsZUJ1aWxkZXIoKQogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGUsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8Q29t
cG9zaXRlT3BlcmF0b3IsIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZENvbXBvc2l0ZSwgQmFj
a2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAm
UmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZGaWxsTGF5ZXI6OmlzQ29tcG9zaXRlU2V0
LCAmRmlsbExheWVyOjpjb21wb3NpdGUsICZGaWxsTGF5ZXI6OnNldENvbXBvc2l0ZSwgJkZpbGxM
YXllcjo6Y2xlYXJDb21wb3NpdGUsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQ29tcG9zaXRlLCAm
Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbENvbXBvc2l0ZT46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZE9yaWdpbiwgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6ZSwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZSk7Cisj
aWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRCbGVuZE1vZGUsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEJsZW5kTW9kZSwgJlJl
bmRlclN0eWxlOjpibGVuZE1vZGUsIEJsZW5kTW9kZSwgJlJlbmRlclN0eWxlOjpzZXRCbGVuZE1v
ZGUsIEJsZW5kTW9kZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQmxlbmRNb2RlPjo6Y3JlYXRlSGFu
ZGxlcigpKTsKKyNlbmRpZgogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlckZpdCwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJvcmRlckZpdCwgJlJlbmRlclN0eWxl
Ojpib3JkZXJGaXQsIEVCb3JkZXJGaXQsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyRml0LCBFQm9y
ZGVyRml0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJGaXQ+OjpjcmVhdGVIYW5kbGVyKCkp
OwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250
YWxTcGFjaW5nLCBBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDxzaG9ydCwgJlJlbmRlclN0eWxl
Ojpob3Jpem9udGFsQm9yZGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpzZXRIb3Jpem9udGFsQm9y
ZGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjppbml0aWFsSG9yaXpvbnRhbEJvcmRlclNwYWNpbmc+
OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdl
YmtpdEJvcmRlckltYWdlLCBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2U8SW1hZ2UsIENTU1Byb3Bl
cnR5V2Via2l0Qm9yZGVySW1hZ2UsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2UsICZSZW5kZXJT
dHlsZTo6c2V0Qm9yZGVySW1hZ2U+OjpjcmVhdGVIYW5kbGVyKCkpOwpAQCAtMjA2NCw5ICsyMDY3
LDYgQEAgU3R5bGVCdWlsZGVyOjpTdHlsZUJ1aWxkZXIoKQogICAgIHNldFByb3BlcnR5SGFuZGxl
cihDU1NQcm9wZXJ0eVdvcmRXcmFwLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFV29yZFdyYXAsICZS
ZW5kZXJTdHlsZTo6d29yZFdyYXAsIEVXb3JkV3JhcCwgJlJlbmRlclN0eWxlOjpzZXRXb3JkV3Jh
cCwgRVdvcmRXcmFwLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxXb3JkV3JhcD46OmNyZWF0ZUhhbmRs
ZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5WkluZGV4LCBBcHBseVBy
b3BlcnR5QXV0bzxpbnQsICZSZW5kZXJTdHlsZTo6ekluZGV4LCAmUmVuZGVyU3R5bGU6OnNldFpJ
bmRleCwgJlJlbmRlclN0eWxlOjpoYXNBdXRvWkluZGV4LCAmUmVuZGVyU3R5bGU6OnNldEhhc0F1
dG9aSW5kZXg+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVpvb20sIEFwcGx5UHJvcGVydHlab29tOjpjcmVhdGVIYW5kbGVyKCkpOwotI2lmIEVO
QUJMRShDU1NfQ09NUE9TSVRJTkcpCi0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5
V2Via2l0QmxlbmRNb2RlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxCbGVuZE1vZGUsICZSZW5kZXJT
dHlsZTo6YmxlbmRNb2RlLCBCbGVuZE1vZGUsICZSZW5kZXJTdHlsZTo6c2V0QmxlbmRNb2RlLCBC
bGVuZE1vZGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJsZW5kTW9kZT46OmNyZWF0ZUhhbmRsZXIo
KSk7Ci0jZW5kaWYKIH0KIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOTYsNiArMjE5Niw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YWRqdXN0UmVuZGVyU3R5bGUoUmUKICAgICAgICAgfHwgc3R5bGUtPmhhc01hc2soKQogICAg
ICAgICB8fCBzdHlsZS0+Ym94UmVmbGVjdCgpCiAgICAgICAgIHx8IHN0eWxlLT5oYXNGaWx0ZXIo
KQorICAgICAgICB8fCBzdHlsZS0+aGFzQmxlbmRNb2RlKCkKICAgICAgICAgfHwgc3R5bGUtPnBv
c2l0aW9uKCkgPT0gU3RpY2t5UG9zaXRpb24KICNpZmRlZiBGSVhFRF9QT1NJVElPTl9DUkVBVEVT
X1NUQUNLSU5HX0NPTlRFWFQKICAgICAgICAgfHwgc3R5bGUtPnBvc2l0aW9uKCkgPT0gRml4ZWRQ
b3NpdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmgJKHJldmlzaW9uIDEyNjkzNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw4IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdDsKICAgICBS
ZW5kZXJMYXllciogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyOyB9Ci0gICAgdmlydHVh
bCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBpc1Jvb3QoKSB8fCBpc1Bvc2l0
aW9uZWQoKSB8fCBpc1RyYW5zcGFyZW50KCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzSGlkZGVu
QmFja2ZhY2UoKSB8fCBoYXNNYXNrKCkgfHwgaGFzUmVmbGVjdGlvbigpIHx8IGhhc0ZpbHRlcigp
IHx8IHN0eWxlKCktPnNwZWNpZmllc0NvbHVtbnMoKTsgfQorCisgICAgdmlydHVhbCBib29sIHJl
cXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBpc1Jvb3QoKSB8fCBpc1Bvc2l0aW9uZWQoKSB8
fCBpc1RyYW5zcGFyZW50KCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzSGlkZGVuQmFja2ZhY2Uo
KSB8fCBoYXNNYXNrKCkgfHwgaGFzUmVmbGVjdGlvbigpIHx8IGhhc0ZpbHRlcigpIHx8IGhhc0Js
ZW5kTW9kZSgpIHx8IHN0eWxlKCktPnNwZWNpZmllc0NvbHVtbnMoKTsgfQogCiAgICAgLy8gVGhp
cyB3aWxsIHdvcmsgb24gaW5saW5lcyB0byByZXR1cm4gdGhlIGJvdW5kaW5nIGJveCBvZiBhbGwg
b2YgdGhlIGxpbmVzJyBib3JkZXIgYm94ZXMuCiAgICAgdmlydHVhbCBJbnRSZWN0IGJvcmRlckJv
dW5kaW5nQm94KCkgY29uc3QgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcklubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuaAkocmV2aXNpb24gMTI2OTM3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAgcHJpdmF0
ZToKIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWlu
ZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikg
T1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0
dXJuIGlzSW5GbG93UG9zaXRpb25lZCgpIHx8IGlzVHJhbnNwYXJlbnQoKSB8fCBoYXNNYXNrKCkg
fHwgaGFzRmlsdGVyKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0
IHsgcmV0dXJuIGlzSW5GbG93UG9zaXRpb25lZCgpIHx8IGlzVHJhbnNwYXJlbnQoKSB8fCBoYXNN
YXNrKCkgfHwgaGFzRmlsdGVyKCkgfHwgaGFzQmxlbmRNb2RlKCk7IH0KIAogICAgIHZpcnR1YWwg
TGF5b3V0VW5pdCBvZmZzZXRMZWZ0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG9m
ZnNldFRvcCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNiArMTYxLDkgQEAgUmVuZGVyTGF5
ZXI6OlJlbmRlckxheWVyKFJlbmRlckJveE1vZGVsTwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
ICAgICAsIG1faGFzRmlsdGVySW5mbyhmYWxzZSkKICNlbmRpZgorI2lmIEVOQUJMRShDU1NfQ09N
UE9TSVRJTkcpCisgICAgLCBtX2JsZW5kTW9kZShCbGVuZE1vZGVOb3JtYWwpCisjZW5kaWYKICAg
ICAsIG1fcmVuZGVyZXIocmVuZGVyZXIpCiAgICAgLCBtX3BhcmVudCgwKQogICAgICwgbV9wcmV2
aW91cygwKQpAQCAtNTQzLDYgKzU0NiwxOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXll
clBvc2l0aW9uc0FmCiAgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7
CiB9CiAKKyNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQordm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlQmxlbmRNb2RlKCkKK3sKKyAgICBCbGVuZE1vZGUgbmV3QmxlbmRNb2RlID0gcmVuZGVyZXIo
KS0+c3R5bGUoKS0+YmxlbmRNb2RlKCk7CisgICAgaWYgKG5ld0JsZW5kTW9kZSAhPSBtX2JsZW5k
TW9kZSkgeworICAgICAgICBtX2JsZW5kTW9kZSA9IG5ld0JsZW5kTW9kZTsKKyAgICAgICAgaWYg
KGJhY2tpbmcoKSkKKyAgICAgICAgICAgIGJhY2tpbmcoKS0+c2V0QmxlbmRNb2RlKG5ld0JsZW5k
TW9kZSk7CisgICAgfQorfQorI2VuZGlmCisKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVRyYW5z
Zm9ybSgpCiB7CiAgICAgLy8gaGFzVHJhbnNmb3JtKCkgb24gdGhlIHJlbmRlcmVyIGlzIGFsc28g
dHJ1ZSB3aGVuIHRoZXJlIGlzIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Qgb3IgcGVyc3Bl
Y3RpdmUgc2V0LApAQCAtNDQyMSw2ICs0NDM2LDkgQEAgUmVuZGVyTGF5ZXJCYWNraW5nKiBSZW5k
ZXJMYXllcjo6ZW5zdXJlQgogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICAgICAgdXBkYXRl
T3JSZW1vdmVGaWx0ZXJFZmZlY3QoKTsKICNlbmRpZgorI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJ
TkcpCisgICAgICAgIGJhY2tpbmcoKS0+c2V0QmxlbmRNb2RlKG1fYmxlbmRNb2RlKTsKKyNlbmRp
ZgogICAgIH0KICAgICByZXR1cm4gbV9iYWNraW5nLmdldCgpOwogfQpAQCAtNDgwNyw2ICs0ODI1
LDkgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkQmVOb3JtYWxGbG93T25seQogI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKICAgICAgICAgICAgICYmICFyZW5kZXJlcigpLT5oYXNGaWx0ZXIoKQog
I2VuZGlmCisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICAgICAgICAgICYmICFyZW5k
ZXJlcigpLT5oYXNCbGVuZE1vZGUoKQorI2VuZGlmCiAgICAgICAgICAgICAmJiAhaXNUcmFuc3Bh
cmVudCgpCiAgICAgICAgICAgICAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKIH0KQEAg
LTQ5NjAsNiArNDk4MSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURp
ZmYKIAogICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwogICAgIHVwZGF0ZVRy
YW5zZm9ybSgpOworI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCisgICAgdXBkYXRlQmxlbmRN
b2RlKCk7CisjZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBp
ZiAoY29tcG9zaXRvcigpLT51cGRhdGVMYXllckNvbXBvc2l0aW5nU3RhdGUodGhpcykpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gMTI2OTM3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYxMyw2ICs2MTMsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRmlsdGVyKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykK
KyAgICBib29sIGhhc0JsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCktPmhhc0Js
ZW5kTW9kZSgpOyB9CisjZWxzZQorICAgIGJvb2wgaGFzQmxlbmRNb2RlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyNlbmRpZgorCiAgICAgLy8gT3ZlcmxvYWRlZCBuZXcgb3BlcmF0b3IuIERl
cml2ZWQgY2xhc3NlcyBtdXN0IG92ZXJyaWRlIG9wZXJhdG9yIG5ldwogICAgIC8vIGluIG9yZGVy
IHRvIGFsbG9jYXRlIG91dCBvZiB0aGUgUmVuZGVyQXJlbmEuCiAgICAgdm9pZCogb3BlcmF0b3Ig
bmV3KHNpemVfdCwgUmVuZGVyQXJlbmEqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTU5LDcgKzk1OSw3IEBAIGZsb2F0IFJlbmRlckxheWVyQmFja2luZzo6Y29tcG9zaXRp
bmdPcGEKIAogc3RhdGljIGJvb2wgaGFzQm94RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlKQogewotICAgIHJldHVybiBzdHlsZS0+aGFzQm9yZGVyKCkgfHwgc3R5bGUtPmhhc0Jv
cmRlclJhZGl1cygpIHx8IHN0eWxlLT5oYXNPdXRsaW5lKCkgfHwgc3R5bGUtPmhhc0FwcGVhcmFu
Y2UoKSB8fCBzdHlsZS0+Ym94U2hhZG93KCkgfHwgc3R5bGUtPmhhc0ZpbHRlcigpOworICAgIHJl
dHVybiBzdHlsZS0+aGFzQm9yZGVyKCkgfHwgc3R5bGUtPmhhc0JvcmRlclJhZGl1cygpIHx8IHN0
eWxlLT5oYXNPdXRsaW5lKCkgfHwgc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSB8fCBzdHlsZS0+Ym94
U2hhZG93KCkgfHwgc3R5bGUtPmhhc0ZpbHRlcigpIHx8IHN0eWxlLT5oYXNCbGVuZE1vZGUoKTsK
IH0KIAogc3RhdGljIGJvb2wgaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoY29uc3QgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ0NSw3ICsxNDQ1LDggQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
cXVpcmVzQ29tcAogICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKHJl
bmRlcmVyKQogICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yRmlsdGVycyhyZW5kZXJl
cikKICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKHJlbmRlcmVyLCBs
YXllcikKLSAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsaW5n
KGxheWVyKTsKKyAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xs
aW5nKGxheWVyKQorICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yQmxlbmRpbmcocmVu
ZGVyZXIpOwogfQogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FuQmVDb21wb3NpdGVk
KGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikgY29uc3QKQEAgLTE0NzMsMTIgKzE0NzQsMTQgQEAg
Ym9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzT3duQgogICAgICAgICB8fCAoY2Fu
UmVuZGVyM0RUcmFuc2Zvcm1zKCkgJiYgcmVuZGVyZXItPnN0eWxlKCktPmJhY2tmYWNlVmlzaWJp
bGl0eSgpID09IEJhY2tmYWNlVmlzaWJpbGl0eUhpZGRlbikKICAgICAgICAgfHwgcmVxdWlyZXND
b21wb3NpdGluZ0ZvckFuaW1hdGlvbihyZW5kZXJlcikKICAgICAgICAgfHwgcmVxdWlyZXNDb21w
b3NpdGluZ0ZvckZpbHRlcnMocmVuZGVyZXIpCisgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRp
bmdGb3JCbGVuZGluZyhyZW5kZXJlcikKICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0Zv
clBvc2l0aW9uKHJlbmRlcmVyLCBsYXllcikKICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGlu
Z0Zvck92ZXJmbG93U2Nyb2xsaW5nKGxheWVyKQogICAgICAgICB8fCByZW5kZXJlci0+aXNUcmFu
c3BhcmVudCgpCiAgICAgICAgIHx8IHJlbmRlcmVyLT5oYXNNYXNrKCkKICAgICAgICAgfHwgcmVu
ZGVyZXItPmhhc1JlZmxlY3Rpb24oKQotICAgICAgICB8fCByZW5kZXJlci0+aGFzRmlsdGVyKCkp
CisgICAgICAgIHx8IHJlbmRlcmVyLT5oYXNGaWx0ZXIoKQorICAgICAgICB8fCByZW5kZXJlci0+
aGFzQmxlbmRNb2RlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICAKQEAg
LTE1NTksNiArMTU2Miw5IEBAIGNvbnN0IGNoYXIqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVh
c28KIAogICAgICAgICBpZiAocmVuZGVyZXItPmhhc0ZpbHRlcigpKQogICAgICAgICAgICAgcmV0
dXJuICJmaWx0ZXIgd2l0aCBjb21wb3NpdGVkIGRlc2NlbmRhbnRzIjsKKyAgICAgICAgICAgIAor
ICAgICAgICBpZiAocmVuZGVyZXItPmhhc0JsZW5kTW9kZSgpKQorICAgICAgICAgICAgcmV0dXJu
ICJibGVuZGluZyB3aXRoIGNvbXBvc2l0ZWQgZGVzY2VuZGFudHMiOwogICAgIH0KIAogICAgIGlm
IChsYXllci0+aW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbigpID09IFJlbmRlckxheWVyOjpJbmRp
cmVjdENvbXBvc2l0aW5nRm9yUGVyc3BlY3RpdmUpCkBAIC0xNzcxLDcgKzE3NzcsNyBAQCBib29s
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wCiAKICAgICAvLyBXaGVuIGEgbGF5
ZXIgaGFzIGNvbXBvc2l0ZWQgZGVzY2VuZGFudHMsIHNvbWUgZWZmZWN0cywgbGlrZSAyZCB0cmFu
c2Zvcm1zLCBmaWx0ZXJzLCBtYXNrcyBldGMgbXVzdCBiZSBpbXBsZW1lbnRlZAogICAgIC8vIHZp
YSBjb21wb3NpdGluZyBzbyB0aGF0IHRoZXkgYWxzbyBhcHBseSB0byB0aG9zZSBjb21wb3NpdGVk
IGRlc2NkZW5kYW50cy4KLSAgICBpZiAoaGFzQ29tcG9zaXRlZERlc2NlbmRhbnRzICYmIChsYXll
ci0+dHJhbnNmb3JtKCkgfHwgcmVuZGVyZXItPmlzVHJhbnNwYXJlbnQoKSB8fCByZW5kZXJlci0+
aGFzTWFzaygpIHx8IHJlbmRlcmVyLT5oYXNSZWZsZWN0aW9uKCkgfHwgcmVuZGVyZXItPmhhc0Zp
bHRlcigpKSkgeworICAgIGlmIChoYXNDb21wb3NpdGVkRGVzY2VuZGFudHMgJiYgKGxheWVyLT50
cmFuc2Zvcm0oKSB8fCByZW5kZXJlci0+aXNUcmFuc3BhcmVudCgpIHx8IHJlbmRlcmVyLT5oYXNN
YXNrKCkgfHwgcmVuZGVyZXItPmhhc1JlZmxlY3Rpb24oKSB8fCByZW5kZXJlci0+aGFzRmlsdGVy
KCkgfHwgcmVuZGVyZXItPmhhc0JsZW5kTW9kZSgpKSkgewogICAgICAgICByZWFzb24gPSBSZW5k
ZXJMYXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ0ZvckdyYXBoaWNhbEVmZmVjdDsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTgwNyw2ICsxODEzLDE2IEBAIGJvb2wgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXAKICNlbmRpZgogfQogCitib29sIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckJsZW5kaW5nKFJlbmRlck9iamVjdCog
cmVuZGVyZXIpIGNvbnN0Cit7CisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICByZXR1
cm4gcmVuZGVyZXItPmhhc0JsZW5kTW9kZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVu
ZGVyZXIpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBib29sIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikgY29uc3QKIHsKICAgICAvLyBwb3Np
dGlvbjpmaXhlZCBlbGVtZW50cyB0aGF0IGNyZWF0ZSB0aGVpciBvd24gc3RhY2tpbmcgY29udGV4
dCAoZS5nLiBoYXZlIGFuIGV4cGxpY2l0IHotaW5kZXgsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCShyZXZpc2lvbiAxMjY5Mzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5MCw2ICsyOTAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVxdWly
ZXNDb21wb3NpdGluZ0ZvclBsdWdpbihSZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICBib29sIHJl
cXVpcmVzQ29tcG9zaXRpbmdGb3JGcmFtZShSZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICBib29s
IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JGaWx0ZXJzKFJlbmRlck9iamVjdCopIGNvbnN0OworICAg
IGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0ZvckJsZW5kaW5nKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIpIGNvbnN0OwogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclNjcm9sbGFibGVGcmFt
ZSgpIGNvbnN0OwogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlckxheWVyKikgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0Nv
bXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcoY29uc3QgUmVuZGVyTGF5ZXIqKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDEy
NjkzNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTY4LDYgKzU2OCwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNGaWx0ZXIo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1NTX0NPTVBP
U0lUSU5HKQorICAgIGJvb2wgaGFzQmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKSAm
JiBzdHlsZSgpLT5oYXNCbGVuZE1vZGUoKTsgfQorI2Vsc2UKKyAgICBib29sIGhhc0JsZW5kTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKKwogICAgIGlubGluZSBib29sIHBy
ZXNlcnZlc05ld2xpbmUoKSBjb25zdDsKIAogICAgIC8vIFRoZSBwc2V1ZG8gZWxlbWVudCBzdHls
ZSBjYW4gYmUgY2FjaGVkIG9yIHVuY2FjaGVkLiAgVXNlIHRoZSBjYWNoZWQgbWV0aG9kIGlmIHRo
ZSBwc2V1ZG8gZWxlbWVudCBkb2Vzbid0IHJlc3BlY3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyAr
OTcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dS
ZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBP
VkVSUklERTsKIAotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gaXNUcmFuc3BhcmVudCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8IGhhc1Ry
YW5zZm9ybSgpIHx8IGhhc0hpZGRlbkJhY2tmYWNlKCkgfHwgaGFzTWFzaygpIHx8IGhhc0ZpbHRl
cigpOyB9CisgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBpc1RyYW5zcGFyZW50KCkgfHwgaGFzT3ZlcmZsb3dDbGlwKCkgfHwgaGFzVHJhbnNm
b3JtKCkgfHwgaGFzSGlkZGVuQmFja2ZhY2UoKSB8fCBoYXNNYXNrKCkgfHwgaGFzRmlsdGVyKCkg
fHwgaGFzQmxlbmRNb2RlKCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8m
LCBjb25zdCBMYXlvdXRQb2ludCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMTI2OTM3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5MCw3
ICs5OTAsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKICAgICBCbGVu
ZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmxlbmRNb2RlPihy
YXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9lZmZlY3RpdmVCbGVuZE1vZGUpOyB9CiAgICAgdm9pZCBz
ZXRCbGVuZE1vZGUoQmxlbmRNb2RlIHYpIHsgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCkt
Pm1fZWZmZWN0aXZlQmxlbmRNb2RlID0gdjsgfQotICAgIGJvb2wgaGFzQmxlbmRNb2RlKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmxlbmRNb2RlPihyYXJlTm9uSW5oZXJpdGVkRGF0YS0+
bV9lZmZlY3RpdmVCbGVuZE1vZGUpID09IEJsZW5kTW9kZU5vcm1hbDsgfQorICAgIGJvb2wgaGFz
QmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmxlbmRNb2RlPihyYXJlTm9u
SW5oZXJpdGVkRGF0YS0+bV9lZmZlY3RpdmVCbGVuZE1vZGUpICE9IEJsZW5kTW9kZU5vcm1hbDsg
fQogI2Vsc2UKICAgICBib29sIGhhc0JsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAjZW5kaWYK
</data>
<flag name="review"
          id="171804"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="171805"
          type_id="3"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161292</attachid>
            <date>2012-08-29 12:54:52 -0700</date>
            <delta_ts>2012-08-29 16:46:42 -0700</delta_ts>
            <desc>added test that checks for compositing layer. Removed test from RenderLayerCompositor.cpp. Added helper function that tests for mask, filter and blend.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>24222</size>
            <attacher name="Rik Cabanier">cabanier</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNzAzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDEyLTA4LTI5ICBSaWsgQ2Fi
YW5pZXIgIDxjYWJhbmllckBhZG9iZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGJs
ZW5kbW9kZSB0byB3ZWJraXQgcmVuZGVyaW5nIGVuZ2luZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUyNTgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNvZGUgYWRkcyBzdXBwb3J0IGZvciBibGVu
ZG1vZGVzIHRvIHRoZSBXZWJDb3JlIGVuZ2luZS4gVGhlIENTUyBwYXJzZXIgYWxyZWFkeQorICAg
ICAgICBzdXBwb3J0ZWQgdGhpcyBrZXl3b3JkIGJ1dCBkaWRuJ3QgcGFzcyBpdCBhbG9uZy4gU3Vw
cG9ydCBmb3IgcmVuZGVyaW5nIGJsZW5kaW5nIHdpbGwKKyAgICAgICAgYmUgcHJvdmlkZWQgaW4g
c3Vic2VxdWVudCBwYXRjaGVzCisKKyAgICAgICAgVGVzdDogY3NzMy9jb21wb3NpdGluZy9zaG91
bGQtaGF2ZS1jb21wb3NpdGluZy1sYXllci5odG1sCisKKyAgICAgICAgKiBjc3MvU3R5bGVCdWls
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlcjo6U3R5bGVCdWlsZGVyKToK
KyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAgICAoUmVuZGVyQm94TW9kZWxPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnJlcXVpcmVzTGF5
ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlcklubGluZTo6cmVxdWlyZXNMYXllcik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpSZW5kZXJMYXll
cik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1
cGRhdGVCbGVuZE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmVuc3VyZUJh
Y2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNob3VsZEJlTm9ybWFsRmxv
d09ubHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgIChSZW5kZXJMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzQmxlbmRNb2RlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNPd25CYWNraW5nU3Rv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWFzb25Gb3JD
b21wb3NpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
cXVpcmVzQ29tcG9zaXRpbmdGb3JJbmRpcmVjdFJlYXNvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JCbGVuZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmg6CisgICAgICAgIChSZW5kZXJMYXllckNvbXBvc2l0b3IpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFJlbmRlck9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omhhc0JsZW5kTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6Omhhc0VmZmVjdFRoYXROZWVkc0xheWVyKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGFibGVSb3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaDoKKwogMjAxMi0wOC0yOCAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbY2hyb21pdW1dIERvIG5vdCBjbGlwIHJvb3QgbGF5ZXIncyBzdWJ0cmVl
IHRvIHZpZXdwb3J0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcAkocmV2aXNp
b24gMTI2OTM3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5MjksNiArMTkyOSw5IEBAIFN0eWxlQnVpbGRlcjo6U3R5bGVCdWlsZGVy
KCkKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ29t
cG9zaXRlLCBBcHBseVByb3BlcnR5RmlsbExheWVyPENvbXBvc2l0ZU9wZXJhdG9yLCBDU1NQcm9w
ZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGUsIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5k
ZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5k
TGF5ZXJzLCAmRmlsbExheWVyOjppc0NvbXBvc2l0ZVNldCwgJkZpbGxMYXllcjo6Y29tcG9zaXRl
LCAmRmlsbExheWVyOjpzZXRDb21wb3NpdGUsICZGaWxsTGF5ZXI6OmNsZWFyQ29tcG9zaXRlLCAm
RmlsbExheWVyOjppbml0aWFsRmlsbENvbXBvc2l0ZSwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxD
b21wb3NpdGU+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdEJhY2tncm91bmRPcmlnaW4sIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdp
bik7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZFNp
emUsIENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUpOworI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJ
TkcpCisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QmxlbmRNb2RlLCBB
cHBseVByb3BlcnR5RGVmYXVsdDxCbGVuZE1vZGUsICZSZW5kZXJTdHlsZTo6YmxlbmRNb2RlLCBC
bGVuZE1vZGUsICZSZW5kZXJTdHlsZTo6c2V0QmxlbmRNb2RlLCBCbGVuZE1vZGUsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbEJsZW5kTW9kZT46OmNyZWF0ZUhhbmRsZXIoKSk7CisjZW5kaWYKICAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJGaXQsIEFwcGx5UHJvcGVy
dHlEZWZhdWx0PEVCb3JkZXJGaXQsICZSZW5kZXJTdHlsZTo6Ym9yZGVyRml0LCBFQm9yZGVyRml0
LCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckZpdCwgRUJvcmRlckZpdCwgJlJlbmRlclN0eWxlOjpp
bml0aWFsQm9yZGVyRml0Pjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZywgQXBwbHlQcm9wZXJ0
eUNvbXB1dGVMZW5ndGg8c2hvcnQsICZSZW5kZXJTdHlsZTo6aG9yaXpvbnRhbEJvcmRlclNwYWNp
bmcsICZSZW5kZXJTdHlsZTo6c2V0SG9yaXpvbnRhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbEhvcml6b250YWxCb3JkZXJTcGFjaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJJbWFnZSwgQXBwbHlQ
cm9wZXJ0eUJvcmRlckltYWdlPEltYWdlLCBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlLCAm
UmVuZGVyU3R5bGU6OmJvcmRlckltYWdlLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlPjo6
Y3JlYXRlSGFuZGxlcigpKTsKQEAgLTIwNjQsOSArMjA2Nyw2IEBAIFN0eWxlQnVpbGRlcjo6U3R5
bGVCdWlsZGVyKCkKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXb3JkV3JhcCwg
QXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVdvcmRXcmFwLCAmUmVuZGVyU3R5bGU6OndvcmRXcmFwLCBF
V29yZFdyYXAsICZSZW5kZXJTdHlsZTo6c2V0V29yZFdyYXAsIEVXb3JkV3JhcCwgJlJlbmRlclN0
eWxlOjppbml0aWFsV29yZFdyYXA+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eVpJbmRleCwgQXBwbHlQcm9wZXJ0eUF1dG88aW50LCAmUmVuZGVy
U3R5bGU6OnpJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRaSW5kZXgsICZSZW5kZXJTdHlsZTo6aGFz
QXV0b1pJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRIYXNBdXRvWkluZGV4Pjo6Y3JlYXRlSGFuZGxl
cigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlab29tLCBBcHBseVByb3Bl
cnR5Wm9vbTo6Y3JlYXRlSGFuZGxlcigpKTsKLSNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQot
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJsZW5kTW9kZSwgQXBwbHlQ
cm9wZXJ0eURlZmF1bHQ8QmxlbmRNb2RlLCAmUmVuZGVyU3R5bGU6OmJsZW5kTW9kZSwgQmxlbmRN
b2RlLCAmUmVuZGVyU3R5bGU6OnNldEJsZW5kTW9kZSwgQmxlbmRNb2RlLCAmUmVuZGVyU3R5bGU6
OmluaXRpYWxCbGVuZE1vZGU+OjpjcmVhdGVIYW5kbGVyKCkpOwotI2VuZGlmCiB9CiAKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMTI2OTM3KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTk2LDYgKzIxOTYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJl
CiAgICAgICAgIHx8IHN0eWxlLT5oYXNNYXNrKCkKICAgICAgICAgfHwgc3R5bGUtPmJveFJlZmxl
Y3QoKQogICAgICAgICB8fCBzdHlsZS0+aGFzRmlsdGVyKCkKKyAgICAgICAgfHwgc3R5bGUtPmhh
c0JsZW5kTW9kZSgpCiAgICAgICAgIHx8IHN0eWxlLT5wb3NpdGlvbigpID09IFN0aWNreVBvc2l0
aW9uCiAjaWZkZWYgRklYRURfUE9TSVRJT05fQ1JFQVRFU19TVEFDS0lOR19DT05URVhUCiAgICAg
ICAgIHx8IHN0eWxlLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiAx
MjY5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhh
c1NlbGZQYWludGluZ0xheWVyKCkgY29uc3Q7CiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyKCkgY29u
c3QgeyByZXR1cm4gbV9sYXllcjsgfQotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkg
Y29uc3QgeyByZXR1cm4gaXNSb290KCkgfHwgaXNQb3NpdGlvbmVkKCkgfHwgaXNUcmFuc3BhcmVu
dCgpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc0hpZGRlbkJhY2tmYWNlKCkgfHwgaGFzTWFzaygp
IHx8IGhhc1JlZmxlY3Rpb24oKSB8fCBoYXNGaWx0ZXIoKSB8fCBzdHlsZSgpLT5zcGVjaWZpZXND
b2x1bW5zKCk7IH0KKworICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyBy
ZXR1cm4gaXNSb290KCkgfHwgaXNQb3NpdGlvbmVkKCkgfHwgaXNUcmFuc3BhcmVudCgpIHx8IGhh
c1RyYW5zZm9ybSgpIHx8IGhhc0hpZGRlbkJhY2tmYWNlKCkgfHwgaGFzUmVmbGVjdGlvbigpIHx8
IGhhc0VmZmVjdFRoYXROZWVkc0xheWVyKCkgfHwgc3R5bGUoKS0+c3BlY2lmaWVzQ29sdW1ucygp
OyB9CiAKICAgICAvLyBUaGlzIHdpbGwgd29yayBvbiBpbmxpbmVzIHRvIHJldHVybiB0aGUgYm91
bmRpbmcgYm94IG9mIGFsbCBvZiB0aGUgbGluZXMnIGJvcmRlciBib3hlcy4KICAgICB2aXJ0dWFs
IEludFJlY3QgYm9yZGVyQm91bmRpbmdCb3goKSBjb25zdCA9IDA7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3
ICsxMjUsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYg
bG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xh
eWVyKCkgY29uc3QgeyByZXR1cm4gaXNJbkZsb3dQb3NpdGlvbmVkKCkgfHwgaXNUcmFuc3BhcmVu
dCgpIHx8IGhhc01hc2soKSB8fCBoYXNGaWx0ZXIoKTsgfQorICAgIHZpcnR1YWwgYm9vbCByZXF1
aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gaXNJbkZsb3dQb3NpdGlvbmVkKCkgfHwgaXNUcmFu
c3BhcmVudCgpIHx8IGhhc0VmZmVjdFRoYXROZWVkc0xheWVyKCk7IH0KIAogICAgIHZpcnR1YWwg
TGF5b3V0VW5pdCBvZmZzZXRMZWZ0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG9m
ZnNldFRvcCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNiArMTYxLDkgQEAgUmVuZGVyTGF5
ZXI6OlJlbmRlckxheWVyKFJlbmRlckJveE1vZGVsTwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
ICAgICAsIG1faGFzRmlsdGVySW5mbyhmYWxzZSkKICNlbmRpZgorI2lmIEVOQUJMRShDU1NfQ09N
UE9TSVRJTkcpCisgICAgLCBtX2JsZW5kTW9kZShCbGVuZE1vZGVOb3JtYWwpCisjZW5kaWYKICAg
ICAsIG1fcmVuZGVyZXIocmVuZGVyZXIpCiAgICAgLCBtX3BhcmVudCgwKQogICAgICwgbV9wcmV2
aW91cygwKQpAQCAtNTQzLDYgKzU0NiwxOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXll
clBvc2l0aW9uc0FmCiAgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7
CiB9CiAKKyNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQordm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlQmxlbmRNb2RlKCkKK3sKKyAgICBCbGVuZE1vZGUgbmV3QmxlbmRNb2RlID0gcmVuZGVyZXIo
KS0+c3R5bGUoKS0+YmxlbmRNb2RlKCk7CisgICAgaWYgKG5ld0JsZW5kTW9kZSAhPSBtX2JsZW5k
TW9kZSkgeworICAgICAgICBtX2JsZW5kTW9kZSA9IG5ld0JsZW5kTW9kZTsKKyAgICAgICAgaWYg
KGJhY2tpbmcoKSkKKyAgICAgICAgICAgIGJhY2tpbmcoKS0+c2V0QmxlbmRNb2RlKG5ld0JsZW5k
TW9kZSk7CisgICAgfQorfQorI2VuZGlmCisKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVRyYW5z
Zm9ybSgpCiB7CiAgICAgLy8gaGFzVHJhbnNmb3JtKCkgb24gdGhlIHJlbmRlcmVyIGlzIGFsc28g
dHJ1ZSB3aGVuIHRoZXJlIGlzIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Qgb3IgcGVyc3Bl
Y3RpdmUgc2V0LApAQCAtNDQyMSw2ICs0NDM2LDkgQEAgUmVuZGVyTGF5ZXJCYWNraW5nKiBSZW5k
ZXJMYXllcjo6ZW5zdXJlQgogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICAgICAgdXBkYXRl
T3JSZW1vdmVGaWx0ZXJFZmZlY3QoKTsKICNlbmRpZgorI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJ
TkcpCisgICAgICAgIGJhY2tpbmcoKS0+c2V0QmxlbmRNb2RlKG1fYmxlbmRNb2RlKTsKKyNlbmRp
ZgogICAgIH0KICAgICByZXR1cm4gbV9iYWNraW5nLmdldCgpOwogfQpAQCAtNDgwNyw2ICs0ODI1
LDkgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkQmVOb3JtYWxGbG93T25seQogI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKICAgICAgICAgICAgICYmICFyZW5kZXJlcigpLT5oYXNGaWx0ZXIoKQog
I2VuZGlmCisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICAgICAgICAgICYmICFyZW5k
ZXJlcigpLT5oYXNCbGVuZE1vZGUoKQorI2VuZGlmCiAgICAgICAgICAgICAmJiAhaXNUcmFuc3Bh
cmVudCgpCiAgICAgICAgICAgICAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKIH0KQEAg
LTQ5NjAsNiArNDk4MSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURp
ZmYKIAogICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwogICAgIHVwZGF0ZVRy
YW5zZm9ybSgpOworI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCisgICAgdXBkYXRlQmxlbmRN
b2RlKCk7CisjZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBp
ZiAoY29tcG9zaXRvcigpLT51cGRhdGVMYXllckNvbXBvc2l0aW5nU3RhdGUodGhpcykpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gMTI2OTM3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYxMyw2ICs2MTMsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRmlsdGVyKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykK
KyAgICBib29sIGhhc0JsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCktPmhhc0Js
ZW5kTW9kZSgpOyB9CisjZWxzZQorICAgIGJvb2wgaGFzQmxlbmRNb2RlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyNlbmRpZgorCiAgICAgLy8gT3ZlcmxvYWRlZCBuZXcgb3BlcmF0b3IuIERl
cml2ZWQgY2xhc3NlcyBtdXN0IG92ZXJyaWRlIG9wZXJhdG9yIG5ldwogICAgIC8vIGluIG9yZGVy
IHRvIGFsbG9jYXRlIG91dCBvZiB0aGUgUmVuZGVyQXJlbmEuCiAgICAgdm9pZCogb3BlcmF0b3Ig
bmV3KHNpemVfdCwgUmVuZGVyQXJlbmEqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiAxMjY5MzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ0NSw3ICsxNDQ1LDggQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlcXVpcmVzQ29tcAogICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0
aW9uKHJlbmRlcmVyKQogICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yRmlsdGVycyhy
ZW5kZXJlcikKICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKHJlbmRl
cmVyLCBsYXllcikKLSAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Ny
b2xsaW5nKGxheWVyKTsKKyAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93
U2Nyb2xsaW5nKGxheWVyKQorICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yQmxlbmRp
bmcocmVuZGVyZXIpOwogfQogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FuQmVDb21w
b3NpdGVkKGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikgY29uc3QKQEAgLTE0NzMsNiArMTQ3NCw3
IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc093bkIKICAgICAgICAgfHwg
KGNhblJlbmRlcjNEVHJhbnNmb3JtcygpICYmIHJlbmRlcmVyLT5zdHlsZSgpLT5iYWNrZmFjZVZp
c2liaWxpdHkoKSA9PSBCYWNrZmFjZVZpc2liaWxpdHlIaWRkZW4pCiAgICAgICAgIHx8IHJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24ocmVuZGVyZXIpCiAgICAgICAgIHx8IHJlcXVpcmVz
Q29tcG9zaXRpbmdGb3JGaWx0ZXJzKHJlbmRlcmVyKQorICAgICAgICB8fCByZXF1aXJlc0NvbXBv
c2l0aW5nRm9yQmxlbmRpbmcocmVuZGVyZXIpCiAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRp
bmdGb3JQb3NpdGlvbihyZW5kZXJlciwgbGF5ZXIpCiAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9z
aXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZyhsYXllcikKICAgICAgICAgfHwgcmVuZGVyZXItPmlz
VHJhbnNwYXJlbnQoKQpAQCAtMTU1OSw2ICsxNTYxLDkgQEAgY29uc3QgY2hhciogUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpyZWFzbwogCiAgICAgICAgIGlmIChyZW5kZXJlci0+aGFzRmlsdGVyKCkp
CiAgICAgICAgICAgICByZXR1cm4gImZpbHRlciB3aXRoIGNvbXBvc2l0ZWQgZGVzY2VuZGFudHMi
OworICAgICAgICAgICAgCisgICAgICAgIGlmIChyZW5kZXJlci0+aGFzQmxlbmRNb2RlKCkpCisg
ICAgICAgICAgICByZXR1cm4gImJsZW5kaW5nIHdpdGggY29tcG9zaXRlZCBkZXNjZW5kYW50cyI7
CiAgICAgfQogCiAgICAgaWYgKGxheWVyLT5pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKCkgPT0g
UmVuZGVyTGF5ZXI6OkluZGlyZWN0Q29tcG9zaXRpbmdGb3JQZXJzcGVjdGl2ZSkKQEAgLTE3NzEs
NyArMTc3Niw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXAKIAog
ICAgIC8vIFdoZW4gYSBsYXllciBoYXMgY29tcG9zaXRlZCBkZXNjZW5kYW50cywgc29tZSBlZmZl
Y3RzLCBsaWtlIDJkIHRyYW5zZm9ybXMsIGZpbHRlcnMsIG1hc2tzIGV0YyBtdXN0IGJlIGltcGxl
bWVudGVkCiAgICAgLy8gdmlhIGNvbXBvc2l0aW5nIHNvIHRoYXQgdGhleSBhbHNvIGFwcGx5IHRv
IHRob3NlIGNvbXBvc2l0ZWQgZGVzY2RlbmRhbnRzLgotICAgIGlmIChoYXNDb21wb3NpdGVkRGVz
Y2VuZGFudHMgJiYgKGxheWVyLT50cmFuc2Zvcm0oKSB8fCByZW5kZXJlci0+aXNUcmFuc3BhcmVu
dCgpIHx8IHJlbmRlcmVyLT5oYXNNYXNrKCkgfHwgcmVuZGVyZXItPmhhc1JlZmxlY3Rpb24oKSB8
fCByZW5kZXJlci0+aGFzRmlsdGVyKCkpKSB7CisgICAgaWYgKGhhc0NvbXBvc2l0ZWREZXNjZW5k
YW50cyAmJiAobGF5ZXItPnRyYW5zZm9ybSgpIHx8IHJlbmRlcmVyLT5pc1RyYW5zcGFyZW50KCkg
fHwgcmVuZGVyZXItPmhhc01hc2soKSB8fCByZW5kZXJlci0+aGFzUmVmbGVjdGlvbigpIHx8IHJl
bmRlcmVyLT5oYXNGaWx0ZXIoKSB8fCByZW5kZXJlci0+aGFzQmxlbmRNb2RlKCkpKSB7CiAgICAg
ICAgIHJlYXNvbiA9IFJlbmRlckxheWVyOjpJbmRpcmVjdENvbXBvc2l0aW5nRm9yR3JhcGhpY2Fs
RWZmZWN0OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xODA3LDYgKzE4MTIsMTYg
QEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcAogI2VuZGlmCiB9CiAK
K2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQmxlbmRp
bmcoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QKK3sKKyNpZiBFTkFCTEUoQ1NTX0NPTVBP
U0lUSU5HKQorICAgIHJldHVybiByZW5kZXJlci0+aGFzQmxlbmRNb2RlKCk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShyZW5kZXJlcik7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisK
IGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRp
b24oUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKSBjb25z
dAogewogICAgIC8vIHBvc2l0aW9uOmZpeGVkIGVsZW1lbnRzIHRoYXQgY3JlYXRlIHRoZWlyIG93
biBzdGFja2luZyBjb250ZXh0IChlLmcuIGhhdmUgYW4gZXhwbGljaXQgei1pbmRleCwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJ
KHJldmlzaW9uIDEyNjkzNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDYgKzI5MCw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yUGx1Z2luKFJlbmRlck9iamVjdCopIGNv
bnN0OwogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0ZvckZyYW1lKFJlbmRlck9iamVjdCop
IGNvbnN0OwogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0ZvckZpbHRlcnMoUmVuZGVyT2Jq
ZWN0KikgY29uc3Q7CisgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yQmxlbmRpbmcoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5n
Rm9yU2Nyb2xsYWJsZUZyYW1lKCkgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5n
Rm9yUG9zaXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyTGF5ZXIqKSBjb25zdDsKICAg
ICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZyhjb25zdCBSZW5k
ZXJMYXllciopIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAkocmV2aXNpb24gMTI2OTM3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjgsNiArNTY4LDEyIEBAIHB1YmxpYzoKICAg
ICBib29sIGhhc0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorI2lm
IEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCisgICAgYm9vbCBoYXNCbGVuZE1vZGUoKSBjb25zdCB7
IHJldHVybiBzdHlsZSgpICYmIHN0eWxlKCktPmhhc0JsZW5kTW9kZSgpOyB9CisjZWxzZQorICAg
IGJvb2wgaGFzQmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgorCiAg
ICAgaW5saW5lIGJvb2wgcHJlc2VydmVzTmV3bGluZSgpIGNvbnN0OwogCiAgICAgLy8gVGhlIHBz
ZXVkbyBlbGVtZW50IHN0eWxlIGNhbiBiZSBjYWNoZWQgb3IgdW5jYWNoZWQuICBVc2UgdGhlIGNh
Y2hlZCBtZXRob2QgaWYgdGhlIHBzZXVkbyBlbGVtZW50IGRvZXNuJ3QgcmVzcGVjdApAQCAtOTMz
LDYgKzkzOSw4IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50Rm9jdXNSaW5nKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IExheW91dFBvaW50JiwgUmVuZGVyU3R5bGUqKTsKICAgICB2b2lkIHBh
aW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0Jik7CiAgICAgdm9p
ZCBhZGRQREZVUkxSZWN0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFJlY3QmKTsKKyAg
ICAKKyAgICBib29sIGhhc0VmZmVjdFRoYXROZWVkc0xheWVyKCkgY29uc3QgeyByZXR1cm4gaGFz
TWFzaygpIHx8IGhhc0ZpbHRlcigpIHx8IGhhc0JsZW5kTW9kZSgpOyB9IAogCiAgICAgdmlydHVh
bCBMYXlvdXRSZWN0IHZpZXdSZWN0KCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyAr
OTcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dS
ZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBP
VkVSUklERTsKIAotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gaXNUcmFuc3BhcmVudCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8IGhhc1Ry
YW5zZm9ybSgpIHx8IGhhc0hpZGRlbkJhY2tmYWNlKCkgfHwgaGFzTWFzaygpIHx8IGhhc0ZpbHRl
cigpOyB9CisgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBpc1RyYW5zcGFyZW50KCkgfHwgaGFzT3ZlcmZsb3dDbGlwKCkgfHwgaGFzVHJhbnNm
b3JtKCkgfHwgaGFzSGlkZGVuQmFja2ZhY2UoKSB8fCBoYXNFZmZlY3RUaGF0TmVlZHNMYXllcigp
OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9p
bnQmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmgJKHJldmlzaW9uIDEyNjkzNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05OTAsNyArOTkwLDcgQEAgcHVibGlj
OgogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEJsZW5kTW9kZT4ocmFyZU5vbkluaGVyaXRlZERh
dGEtPm1fZWZmZWN0aXZlQmxlbmRNb2RlKTsgfQogICAgIHZvaWQgc2V0QmxlbmRNb2RlKEJsZW5k
TW9kZSB2KSB7IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2VmZmVjdGl2ZUJsZW5k
TW9kZSA9IHY7IH0KLSAgICBib29sIGhhc0JsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEJsZW5kTW9kZT4ocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fZWZmZWN0aXZlQmxlbmRN
b2RlKSA9PSBCbGVuZE1vZGVOb3JtYWw7IH0KKyAgICBib29sIGhhc0JsZW5kTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEJsZW5kTW9kZT4ocmFyZU5vbkluaGVyaXRlZERhdGEtPm1f
ZWZmZWN0aXZlQmxlbmRNb2RlKSAhPSBCbGVuZE1vZGVOb3JtYWw7IH0KICNlbHNlCiAgICAgYm9v
bCBoYXNCbGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxMjcwMzApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wOC0yOSAgUmlrIENhYmFuaWVyICA8Y2FiYW5pZXJA
YWRvYmUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBibGVuZG1vZGUgdG8gd2Via2l0
IHJlbmRlcmluZyBlbmdpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk1MjU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRW5hYmxlIHRlc3QgdG8gdmVyaWZ5IHRoYXQgYmxlbmRpbmcgbW9kZXMgaW50cm9k
dWNlIGEgbmV3IGNvbXBvc2l0aW5nIGxheWVyCisKKyAgICAgICAgKiBjc3MzL2NvbXBvc2l0aW5n
L3Nob3VsZC1oYXZlLWNvbXBvc2l0aW5nLWxheWVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogY3NzMy9jb21wb3NpdGluZy9zaG91bGQtaGF2ZS1jb21wb3NpdGluZy1sYXllci5odG1s
OiBBZGRlZC4KKwogMjAxMi0wOC0yOSAgS2FtaWwgQmxhbmsgIDxrLmJsYW5rQHNhbXN1bmcuY29t
PgogCiAgICAgICAgIFtFRkxdIEFkZCBzZXR0aW5nIEFQSSBmb3IgYWxsb3cgdW5pdmVyc2FsL2Zp
bGUgYWNjZXNzIGZyb20gZmlsZSBVUkxzLgpJbmRleDogTGF5b3V0VGVzdHMvY3NzMy9jb21wb3Np
dGluZy9zaG91bGQtaGF2ZS1jb21wb3NpdGluZy1sYXllci1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvY3NzMy9jb21wb3NpdGluZy9zaG91bGQtaGF2ZS1jb21wb3NpdGlu
Zy1sYXllci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9jc3MzL2Nv
bXBvc2l0aW5nL3Nob3VsZC1oYXZlLWNvbXBvc2l0aW5nLWxheWVyLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorVGVzdCB0byBtYWtlIHN1cmUgYSBibGVuZCBtb2Rl
IGNyZWF0ZXMgYSBjb21wb3NpdGluZyBsYXllci4gVGVzdCBpcyBzdWNjZXNzZnVsIG9mIHJlbmRl
ciB0cmVlIHNob3dzIGNvbXBvc2l0aW5nCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitGQUlMIG5vIGNvbXBvc2l0aW5nIGxheWVycworCisoR3JhcGhpY3NMYXllcgorKGJvdW5kcyA4
MDAuMDAgNjAwLjAwKQorKGNoaWxkcmVuIDEKKyhHcmFwaGljc0xheWVyCisoYm91bmRzIDgwMC4w
MCA2MDAuMDApCisoY2hpbGRyZW4gMQorKEdyYXBoaWNzTGF5ZXIKKyhwb3NpdGlvbiA4LjAwIDc2
LjAwKQorKGJvdW5kcyAyMC4wMCAyMC4wMCkKKyhkcmF3c0NvbnRlbnQgMSkKKykKKykKKykKKykK
KykKKwpJbmRleDogTGF5b3V0VGVzdHMvY3NzMy9jb21wb3NpdGluZy9zaG91bGQtaGF2ZS1jb21w
b3NpdGluZy1sYXllci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NzczMvY29tcG9z
aXRpbmcvc2hvdWxkLWhhdmUtY29tcG9zaXRpbmctbGF5ZXIuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2NzczMvY29tcG9zaXRpbmcvc2hvdWxkLWhhdmUtY29tcG9zaXRpbmctbGF5
ZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorPCFET0NUWVBFIEhUTUwgUFVC
TElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0
UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gZG9UZXN0KCkKKyAgICB7CisgICAgICAgIGRlc2NyaXB0
aW9uKCJUZXN0IHRvIG1ha2Ugc3VyZSBhIGJsZW5kIG1vZGUgY3JlYXRlcyBhIGNvbXBvc2l0aW5n
IGxheWVyLiBUZXN0IGlzIHN1Y2Nlc3NmdWwgb2YgcmVuZGVyIHRyZWUgc2hvd3MgY29tcG9zaXRp
bmciKTsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAgICB2YXIg
bGF5ZXJzID0gdGVzdFJ1bm5lci5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgICAgIGlmIChs
YXllcnMgPT0gIiIpCisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgibm8gY29tcG9zaXRpbmcg
bGF5ZXJzIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgi
Y29udGVudCBoYXMgY29tcG9zaXRpbmcgbGF5ZXJzIik7CisgICAgICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgibGF5ZXJ0cmVlIikuaW5uZXJUZXh0ID0gbGF5ZXJzOworICAgICAgICAg
ICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBkb1Rlc3QsIGZhbHNlKTsKKworPC9zY3Jp
cHQ+Cis8aW1nIHN0eWxlPSItd2Via2l0LWJsZW5kLW1vZGU6IG11bHRpcGx5OyIgc3JjPSJyZXNv
dXJjZXMvcmVmZXJlbmNlLnBuZyI+Cis8ZGl2IGlkPSJsYXllcnRyZWUiPjwvZGl2PgpJbmRleDog
TGF5b3V0VGVzdHMvY3NzMy9jb21wb3NpdGluZy9yZXNvdXJjZXMvcmVmZXJlbmNlLnBuZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46
bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBMYXlvdXRUZXN0cy9jc3MzL2NvbXBvc2l0aW5nL3Jlc291cmNlcy9yZWZlcmVuY2UucG5nCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBS0FBQUFCYUNBWUFBQUEveGwxU0FBQUtRMmxE
UTFCSlEwTWdjSEp2Wm1sc1pRQUFlTnFkClUzZFlrL2NXUHQvM1pROVdRdGp3c1pkc2dRQWlJNndJ
eUJCWm9oQ1NBR0dFRUJKQXhZV0lDbFlVRlJHY1NGWEVndFVLU0oySTRxQW8KdUdkQmlvaGFpMVZj
T080ZjNLZTFmWHJ2N2UzNzEvdTg1NXpuL001NXp3K0FFUklta2VhaWFnQTVVb1U4T3RnZmowOUl4
TW05Z0FJVgpTT0FFSUJEbXk4Sm5CY1VBQVBBRGVYaCtkTEEvL0FHdmJ3QUNBSERWTGlRU3grSC9n
N3BRSmxjQUlKRUE0Q0lTNXdzQmtGSUF5QzVVCnlCUUF5QmdBc0ZPelpBb0FsQUFBYkhsOFFpSUFx
ZzBBN1BSSlBnVUEyS21UM0JjQTJLSWNxUWdBalFFQW1TaEhKQUpBdXdCZ1ZZRlMKTEFMQXdnQ2dy
RUFpTGdUQXJnR0FXYll5UndLQXZRVUFkbzVZa0E5QVlBQ0FtVUlzekFBZ09BSUFReDRUelFNZ1RB
T2dNTksvNEtsZgpjSVc0U0FFQXdNdVZ6WmRMMGpNVXVKWFFHbmZ5OE9EaUllTENiTEZDWVJjcEVH
WUo1Q0tjbDVzakUwam5BMHpPREFBQUd2blJ3ZjQ0ClA1RG41dVRoNW1ibmJPLzB4YUwrYS9Cdklq
NGg4ZC8rdkl3Q0JBQVFUcy92MmwvbDVkWURjTWNCc0hXL2E2bGJBTnBXQUdqZitWMHoKMndtZ1dn
clFldm1MZVRqOFFCNmVvVkRJUEIwY0Nnc0w3U1Zpb2IwdzQ0cysvelBoYitDTGZ2YjhRQjcrMjNy
d0FIR2FRSm10d0tPRAovWEZoYm5hdVVvN255d1JDTVc3MzV5UCt4NFYvL1k0cDBlSTBzVndzRlly
eFdJbTRVQ0pOeDNtNVVwRkVJY21WNGhMcGZ6THhINWI5CkNaTjNEUUNzaGsvQVRyWUh0Y3Rzd0g3
dUFRS0xEbGpTZGdCQWZ2TXRqQm9Ma1FBUVp6UXllZmNBQUpPLytZOUFLd0VBelplazR3QUEKdk9n
WVhLaVVGMHpHQ0FBQVJLQ0JLckJCQnd6QkZLekFEcHpCSGJ6QUZ3SmhCa1JBRENUQVBCQkNCdVNB
SEFxaEdKWkJHVlRBT3RnRQp0YkFER3FBUm11RVF0TUV4T0EzbjRCSmNnZXR3RndaZ0dKN0NHTHlH
Q1FSQnlBZ1RZU0U2aUJGaWp0Z2l6Z2dYbVk0RUltRklOSktBCnBDRHBpQlJSSXNYSWNxUUNxVUpx
a1YxSUkvSXRjaFE1alZ4QStwRGJ5Q0F5aXZ5S3ZFY3hsSUd5VVFQVUFuVkF1YWdmR29yR29IUFIK
ZERRUFhZQ1dvbXZSR3JRZVBZQzJvcWZSUytoMWRBQjlpbzVqZ05FeERtYU0yV0ZjaklkRllJbFlH
aWJIRm1QbFdEVldqelZqSFZnMwpkaFVid0o1aDd3Z2tBb3VBRSt3SVhvUVF3bXlDa0pCSFdFeFlR
NmdsN0NPMEVyb0lWd21EaERIQ0p5S1RxRSswSlhvUytjUjRZanF4CmtGaEdyQ2J1SVI0aG5pVmVK
dzRUWDVOSUpBN0prdVJPQ2lFbGtESkpDMGxyU050SUxhUlRwRDdTRUdtY1RDYnJrRzNKM3VRSXNv
Q3MKSUplUnQ1QVBrRStTKzhuRDVMY1VPc1dJNGt3Sm9pUlNwSlFTU2pWbFArVUVwWjh5UXBtZ3Fs
SE5xWjdVQ0txSU9wOWFTVzJnZGxBdgpVNGVwRXpSMW1pWE5teFpEeTZRdG85WFFtbWxuYWZkb0wr
bDB1Z25kZ3g1Rmw5Q1gwbXZvQitubjZZUDBkd3dOaGcyRHgwaGlLQmxyCkdYc1pweGkzR1MrWlRL
WUYwNWVaeUZRdzF6SWJtV2VZRDVodlZWZ3E5aXA4RlpIS0VwVTZsVmFWZnBYbnFsUlZjMVUvMVht
cUMxU3IKVlErclhsWjlwa1pWczFEanFRblVGcXZWcVIxVnU2azJyczVTZDFLUFVNOVJYNk8rWC8y
QyttTU5zb2FGUnFDR1NLTlVZN2ZHR1kwaApGc1l5WmZGWVF0WnlWZ1ByTEd1WVRXSmJzdm5zVEhZ
Rit4dDJMM3RNVTBOenFtYXNacEZtbmVaeHpRRU94ckhnOERuWm5Fck9JYzROCnpuc3RBeTAvTGJI
V2FxMW1yWDZ0TjlwNjJyN2FZdTF5N1JidDY5cnZkWENkUUowc25mVTZiVHIzZFFtNk5ycFJ1b1c2
MjNYUDZqN1QKWSt0NTZRbjF5dlVPNmQzUlIvVnQ5S1AxRitydjF1L1JIemN3TkFnMmtCbHNNVGhq
OE15UVkraHJtR200MGZDRTRhZ1J5Mmk2a2NSbwpvOUZKb3llNEp1NkhaK00xZUJjK1pxeHZIR0tz
Tk41bDNHczhZV0pwTXR1a3hLVEY1TDRwelpScm1tYTYwYlRUZE16TXlDemNyTmlzCnlleU9PZFdj
YTU1aHZ0bTgyL3lOaGFWRm5NVktpemFMeDViYWxuekxCWlpObHZlc21GWStWbmxXOVZiWHJFbldY
T3NzNjIzV1YyeFEKRzFlYkRKczZtOHUycUsyYnJjUjJtMjNmRk9JVWp5blNLZlZUYnRveDdQenND
dXlhN0FidE9mWmg5aVgyYmZiUEhjd2NFaDNXTzNRNwpmSEowZGN4MmJIQzg2NlRoTk1PcHhLbkQ2
VmRuRzJlaGM1M3pOUmVtUzVETEVwZDJseGRUYmFlS3AyNmZlc3VWNVJydXV0SzEwL1dqCm03dWIz
SzNaYmRUZHpEM0ZmYXY3VFM2Ykc4bGR3ejN2UWZUdzkxamljY3pqbmFlYnA4THprT2N2WG5aZVdW
Nzd2UjVQczV3bW50WXcKYmNqYnhGdmd2Y3Q3WURvK1BXWDZ6dWtEUHNZK0FwOTZuNGUrcHI0aTN6
MitJMzdXZnBsK0IveWUrenY2eS8yUCtML2hlZklXOFU0RgpZQUhCQWVVQnZZRWFnYk1EYXdNZkJK
a0VwUWMxQlkwRnV3WXZERDRWUWd3SkRWa2ZjcE52d0JmeUcvbGpNOXhuTEpyUkZjb0luUlZhCkcv
b3d6Q1pNSHRZUmpvYlBDTjhRZm0rbStVenB6TFlJaU9CSGJJaTRIMmtabVJmNWZSUXBLaktxTHVw
UnRGTjBjWFQzTE5hczVGbjcKWjcyTzhZK3BqTGs3MjJxMmNuWm5yR3BzVW14ajdKdTRnTGlxdUlG
NGgvaEY4WmNTZEJNa0NlMko1TVRZeEQySjQzTUM1MnlhTTV6awptbFNXZEdPdTVkeWl1UmZtNmM3
TG5uYzhXVFZaa0h3NGhaZ1NsN0kvNVlNZ1FsQXZHRS9scDI1TkhSUHloSnVGVDBXK29vMmlVYkcz
CnVFbzhrdWFkVnBYMk9OMDdmVVA2YUlaUFJuWEdNd2xQVWl0NWtSbVN1U1B6VFZaRTF0NnN6OWx4
MlMwNWxKeVVuS05TRFdtV3RDdlgKTUxjb3QwOW1LeXVURGVSNTVtM0tHNU9IeXZma0kvbHo4OXNW
YklWTTBhTzBVcTVRRGhaTUw2Z3JlRnNZVzNpNFNMMUlXdFF6MzJiKwo2dmtqQzRJV2ZMMlFzRkM0
c0xQWXVIaFo4ZUFpdjBXN0ZpT0xVeGQzTGpGZFVycGtlR253MG4zTGFNdXlsdjFRNGxoU1ZmSnFl
ZHp5CmpsS0QwcVdsUXl1Q1Z6U1ZxWlRKeTI2dTlGcTVZeFZobFdSVjcycVgxVnRXZnlvWGxWK3Nj
S3lvcnZpd1Jyam00bGRPWDlWODlYbHQKMnRyZVNyZks3ZXRJNjZUcmJxejNXYit2U3IxcVFkWFFo
dkFOclJ2eGplVWJYMjFLM25TaGVtcjFqczIwemNyTkF6VmhOZTFiekxhcwoyL0toTnFQMmVwMS9Y
Y3RXL2EycnQ3N1pKdHJXdjkxM2UvTU9neDBWTzk3dmxPeTh0U3Q0VjJ1OVJYMzFidEx1Z3QyUEdt
SWJ1ci9tCmZ0MjRSM2RQeFo2UGU2VjdCL1pGNyt0cWRHOXMzSysvdjdJSmJWSTJqUjVJT25EbG00
QnYycHZ0bW5lMWNGb3FEc0pCNWNFbjM2WjgKZStOUTZLSE93OXpEemQrWmY3ZjFDT3RJZVN2U09y
OTFyQzJqYmFBOW9iM3Y2SXlqblIxZUhVZSt0LzkrN3pIalkzWEhOWTlYbnFDZApLRDN4K2VTQ2sr
T25aS2VlblU0L1BkU1ozSG4zVFB5WmExMVJYYjFuUTgrZVB4ZDA3a3kzWC9mSjg5N25qMTN3dkhE
MEl2ZGkyeVczClM2MDlyajFIZm5EOTRVaXZXMi9yWmZmTDdWYzhyblQwVGVzNzBlL1RmL3Bxd05W
ejEvalhMbDJmZWIzdnh1d2J0MjRtM1J5NEpicjEKK0hiMjdSZDNDdTVNM0YxNmozaXYvTDdhL2Vv
SCtnL3FmN1Qrc1dYQWJlRDRZTUJnejhOWkQrOE9DWWVlL3BULzA0Zmgwa2ZNUjlVagpSaU9OajUw
Zkh4c05HcjN5Wk02VDRhZXlweFBQeW41Vy8zbnJjNnZuMy8zaSswdlBXUHpZOEF2NWk4Ky9ybm1w
ODNMdnE2bXZPc2NqCnh4Kzh6bms5OGFiOHJjN2JmZSs0NzdyZng3MGZtU2o4UVA1UTg5SDZZOGVu
MEUvM1B1ZDgvdnd2OTRUeis0QTVKUkVBQUFBR1lrdEgKUkFEL0FQOEEvNkM5cDVNQUFBQUpjRWha
Y3dBQUN4TUFBQXNUQVFDYW5CZ0FBQUFIZEVsTlJRZmNCQXNYRkJ5b2IybmFBQUFDdWtsRQpRVlI0
MnUzZFBXcVVRUUNIOFZsTmwwMnkyWThicUlWWTZ3bThnZWRJL0VnaFlpVjJKa1JUQ0ZaaUNrOFFy
THlCSUdwalFCdkJRdDNkCmJMSW1CcEhrOVFyL1lwYUkvSjc2WWQ1ZGVIWUdkcGgzV2swcFRRa1ls
WXhoNkkwcWUrUEszbDVsYjcreWR4QjYwOUQ3R1hxSGxaOTcKcmdCbmlBQWhRQWdRRUNBRUNBZ1FB
Z1FFaVArZnVVNlRpVTM0Ri9qcGozQzhZV1V2M09Kb1JwWEhtNFJldUdYUzdGZjJLbStGcEIyawpX
elZtUUZpQ0lVQkFnQkFnSUVBSUVCQWdCQWpNbEZZcFRiZ1hFdjdsSDU4SytkZFBqNlNuUFNhVnZk
cW5SMnFmQ2prS3ZXd3J4QXdJClN6QUVDQWdRQWdRRUNBRUNBb1FBZ1puU0t1SGJzUmJMWWpSZ3U3
UkRiNkhVZk81U1dZcThUdW1FM25Ma2RVdTNzdGVMdkY3bzlVcy8KOUFhUk40aTk3UHVhQVdFSmhn
QUJBVUtBZ0FBaFFFQ0FFQ0F3VStaU2Nib1lldTF3d0lYUUM1OGJib1NVa3I0T2JMbXkxd3U5N21u
bQo5WnU2M2lCOWJ1aGxHelZtUUZpQ0lVQkFnQkFnSUVBSUVCQWdCQWpNbG5nblpMR1Z2V1dwSGI2
TktkNElhV1hlVXVoMVFtODU5Y0tmCmNEZjBldWRETHh4dkVJN1hENzFCV0V5NEVXSUdoQ1VZQWdR
RUNBRUNBb1FBQVFGQ2dNQnNhVFZOZGsvSWNKamQ2NUY2bzlHb3FqY2UKajZ0NmUzdlpQU0dUeWFT
cXQ3K2YzZjl4Y0pEZHd6R2RaanRUaDRlSFZiMzB1V1pBV0lJaFFFQ0FFQ0FnUUFnUUVDQUVDTXlV
dWNIVgpUTng0a3gwYWVCQWVNMW4vbkwyMTZlRXdPNXp4NkV2MlBWN3Nacis1elEvWmVQYy9aWjl2
YTNvY2VmZmUvWW04N2JlL0krL3V4NVBJCmUvcitWK1N0ZmMzR2V4WmUxRzRHaENVWUFnUUVDQUVD
QW9RQUFRRkNnTUJNbWR1NXNoYUpMeTl2Uk43SlVUYmV4ZFgxeUx0K2ZDZnkKVnByczgrME1iMFhl
OXZ4bTVIMi9jRHZ5dXBkZVJkNjFvNXVSZDJQK2NlUzkvcllTZWMvTFZ1VHRsdFV3clNkbVFGaUNB
UUZDZ0lBQQpJVUJBZ0JBZ0lFQ2NQWDhCelphdkhBODdvbEFBQUFBQVNVVk9SSzVDWUlJPQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>161330</attachid>
            <date>2012-08-29 15:19:52 -0700</date>
            <delta_ts>2012-08-29 16:03:49 -0700</delta_ts>
            <desc>renamed function so it&apos;s shorter</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>24178</size>
            <attacher name="Rik Cabanier">cabanier</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNzAzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDEyLTA4LTI5ICBSaWsgQ2Fi
YW5pZXIgIDxjYWJhbmllckBhZG9iZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGJs
ZW5kbW9kZSB0byB3ZWJraXQgcmVuZGVyaW5nIGVuZ2luZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUyNTgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNvZGUgYWRkcyBzdXBwb3J0IGZvciBibGVu
ZG1vZGVzIHRvIHRoZSBXZWJDb3JlIGVuZ2luZS4gVGhlIENTUyBwYXJzZXIgYWxyZWFkeQorICAg
ICAgICBzdXBwb3J0ZWQgdGhpcyBrZXl3b3JkIGJ1dCBkaWRuJ3QgcGFzcyBpdCBhbG9uZy4gU3Vw
cG9ydCBmb3IgcmVuZGVyaW5nIGJsZW5kaW5nIHdpbGwKKyAgICAgICAgYmUgcHJvdmlkZWQgaW4g
c3Vic2VxdWVudCBwYXRjaGVzCisKKyAgICAgICAgVGVzdDogY3NzMy9jb21wb3NpdGluZy9zaG91
bGQtaGF2ZS1jb21wb3NpdGluZy1sYXllci5odG1sCisKKyAgICAgICAgKiBjc3MvU3R5bGVCdWls
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlcjo6U3R5bGVCdWlsZGVyKToK
KyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAgICAoUmVuZGVyQm94TW9kZWxPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnJlcXVpcmVzTGF5
ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlcklubGluZTo6cmVxdWlyZXNMYXllcik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpSZW5kZXJMYXll
cik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1
cGRhdGVCbGVuZE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmVuc3VyZUJh
Y2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNob3VsZEJlTm9ybWFsRmxv
d09ubHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgIChSZW5kZXJMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzQmxlbmRNb2RlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNPd25CYWNraW5nU3Rv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWFzb25Gb3JD
b21wb3NpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
cXVpcmVzQ29tcG9zaXRpbmdGb3JJbmRpcmVjdFJlYXNvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JCbGVuZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmg6CisgICAgICAgIChSZW5kZXJMYXllckNvbXBvc2l0b3IpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFJlbmRlck9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omhhc0JsZW5kTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6Omhhc0VmZmVjdFRoYXROZWVkc0xheWVyKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGFibGVSb3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaDoKKwogMjAxMi0wOC0yOCAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbY2hyb21pdW1dIERvIG5vdCBjbGlwIHJvb3QgbGF5ZXIncyBzdWJ0cmVl
IHRvIHZpZXdwb3J0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcAkocmV2aXNp
b24gMTI2OTM3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5MjksNiArMTkyOSw5IEBAIFN0eWxlQnVpbGRlcjo6U3R5bGVCdWlsZGVy
KCkKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ29t
cG9zaXRlLCBBcHBseVByb3BlcnR5RmlsbExheWVyPENvbXBvc2l0ZU9wZXJhdG9yLCBDU1NQcm9w
ZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGUsIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5k
ZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5k
TGF5ZXJzLCAmRmlsbExheWVyOjppc0NvbXBvc2l0ZVNldCwgJkZpbGxMYXllcjo6Y29tcG9zaXRl
LCAmRmlsbExheWVyOjpzZXRDb21wb3NpdGUsICZGaWxsTGF5ZXI6OmNsZWFyQ29tcG9zaXRlLCAm
RmlsbExheWVyOjppbml0aWFsRmlsbENvbXBvc2l0ZSwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxD
b21wb3NpdGU+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdEJhY2tncm91bmRPcmlnaW4sIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdp
bik7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZFNp
emUsIENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUpOworI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJ
TkcpCisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QmxlbmRNb2RlLCBB
cHBseVByb3BlcnR5RGVmYXVsdDxCbGVuZE1vZGUsICZSZW5kZXJTdHlsZTo6YmxlbmRNb2RlLCBC
bGVuZE1vZGUsICZSZW5kZXJTdHlsZTo6c2V0QmxlbmRNb2RlLCBCbGVuZE1vZGUsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbEJsZW5kTW9kZT46OmNyZWF0ZUhhbmRsZXIoKSk7CisjZW5kaWYKICAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJGaXQsIEFwcGx5UHJvcGVy
dHlEZWZhdWx0PEVCb3JkZXJGaXQsICZSZW5kZXJTdHlsZTo6Ym9yZGVyRml0LCBFQm9yZGVyRml0
LCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckZpdCwgRUJvcmRlckZpdCwgJlJlbmRlclN0eWxlOjpp
bml0aWFsQm9yZGVyRml0Pjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZywgQXBwbHlQcm9wZXJ0
eUNvbXB1dGVMZW5ndGg8c2hvcnQsICZSZW5kZXJTdHlsZTo6aG9yaXpvbnRhbEJvcmRlclNwYWNp
bmcsICZSZW5kZXJTdHlsZTo6c2V0SG9yaXpvbnRhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbEhvcml6b250YWxCb3JkZXJTcGFjaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJJbWFnZSwgQXBwbHlQ
cm9wZXJ0eUJvcmRlckltYWdlPEltYWdlLCBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlLCAm
UmVuZGVyU3R5bGU6OmJvcmRlckltYWdlLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlPjo6
Y3JlYXRlSGFuZGxlcigpKTsKQEAgLTIwNjQsOSArMjA2Nyw2IEBAIFN0eWxlQnVpbGRlcjo6U3R5
bGVCdWlsZGVyKCkKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXb3JkV3JhcCwg
QXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVdvcmRXcmFwLCAmUmVuZGVyU3R5bGU6OndvcmRXcmFwLCBF
V29yZFdyYXAsICZSZW5kZXJTdHlsZTo6c2V0V29yZFdyYXAsIEVXb3JkV3JhcCwgJlJlbmRlclN0
eWxlOjppbml0aWFsV29yZFdyYXA+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eVpJbmRleCwgQXBwbHlQcm9wZXJ0eUF1dG88aW50LCAmUmVuZGVy
U3R5bGU6OnpJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRaSW5kZXgsICZSZW5kZXJTdHlsZTo6aGFz
QXV0b1pJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRIYXNBdXRvWkluZGV4Pjo6Y3JlYXRlSGFuZGxl
cigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlab29tLCBBcHBseVByb3Bl
cnR5Wm9vbTo6Y3JlYXRlSGFuZGxlcigpKTsKLSNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQot
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJsZW5kTW9kZSwgQXBwbHlQ
cm9wZXJ0eURlZmF1bHQ8QmxlbmRNb2RlLCAmUmVuZGVyU3R5bGU6OmJsZW5kTW9kZSwgQmxlbmRN
b2RlLCAmUmVuZGVyU3R5bGU6OnNldEJsZW5kTW9kZSwgQmxlbmRNb2RlLCAmUmVuZGVyU3R5bGU6
OmluaXRpYWxCbGVuZE1vZGU+OjpjcmVhdGVIYW5kbGVyKCkpOwotI2VuZGlmCiB9CiAKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMTI2OTM3KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTk2LDYgKzIxOTYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJl
CiAgICAgICAgIHx8IHN0eWxlLT5oYXNNYXNrKCkKICAgICAgICAgfHwgc3R5bGUtPmJveFJlZmxl
Y3QoKQogICAgICAgICB8fCBzdHlsZS0+aGFzRmlsdGVyKCkKKyAgICAgICAgfHwgc3R5bGUtPmhh
c0JsZW5kTW9kZSgpCiAgICAgICAgIHx8IHN0eWxlLT5wb3NpdGlvbigpID09IFN0aWNreVBvc2l0
aW9uCiAjaWZkZWYgRklYRURfUE9TSVRJT05fQ1JFQVRFU19TVEFDS0lOR19DT05URVhUCiAgICAg
ICAgIHx8IHN0eWxlLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiAx
MjY5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhh
c1NlbGZQYWludGluZ0xheWVyKCkgY29uc3Q7CiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyKCkgY29u
c3QgeyByZXR1cm4gbV9sYXllcjsgfQotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkg
Y29uc3QgeyByZXR1cm4gaXNSb290KCkgfHwgaXNQb3NpdGlvbmVkKCkgfHwgaXNUcmFuc3BhcmVu
dCgpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc0hpZGRlbkJhY2tmYWNlKCkgfHwgaGFzTWFzaygp
IHx8IGhhc1JlZmxlY3Rpb24oKSB8fCBoYXNGaWx0ZXIoKSB8fCBzdHlsZSgpLT5zcGVjaWZpZXND
b2x1bW5zKCk7IH0KKworICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyBy
ZXR1cm4gaXNSb290KCkgfHwgaXNQb3NpdGlvbmVkKCkgfHwgaXNUcmFuc3BhcmVudCgpIHx8IGhh
c1RyYW5zZm9ybSgpIHx8IGhhc0hpZGRlbkJhY2tmYWNlKCkgfHwgaGFzUmVmbGVjdGlvbigpIHx8
IGNyZWF0ZXNHcm91cCgpIHx8IHN0eWxlKCktPnNwZWNpZmllc0NvbHVtbnMoKTsgfQogCiAgICAg
Ly8gVGhpcyB3aWxsIHdvcmsgb24gaW5saW5lcyB0byByZXR1cm4gdGhlIGJvdW5kaW5nIGJveCBv
ZiBhbGwgb2YgdGhlIGxpbmVzJyBib3JkZXIgYm94ZXMuCiAgICAgdmlydHVhbCBJbnRSZWN0IGJv
cmRlckJvdW5kaW5nQm94KCkgY29uc3QgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuaAkocmV2aXNpb24gMTI2OTM3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAg
cHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFj
dGlvbikgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0
IHsgcmV0dXJuIGlzSW5GbG93UG9zaXRpb25lZCgpIHx8IGlzVHJhbnNwYXJlbnQoKSB8fCBoYXNN
YXNrKCkgfHwgaGFzRmlsdGVyKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigp
IGNvbnN0IHsgcmV0dXJuIGlzSW5GbG93UG9zaXRpb25lZCgpIHx8IGlzVHJhbnNwYXJlbnQoKSB8
fCBjcmVhdGVzR3JvdXAoKTsgfQogCiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG9mZnNldExlZnQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIExheW91dFVuaXQgb2Zmc2V0VG9wKCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDEyNjkz
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2MSw2ICsxNjEsOSBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVy
Qm94TW9kZWxPCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogICAgICwgbV9oYXNGaWx0ZXJJbmZv
KGZhbHNlKQogI2VuZGlmCisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICAsIG1fYmxl
bmRNb2RlKEJsZW5kTW9kZU5vcm1hbCkKKyNlbmRpZgogICAgICwgbV9yZW5kZXJlcihyZW5kZXJl
cikKICAgICAsIG1fcGFyZW50KDApCiAgICAgLCBtX3ByZXZpb3VzKDApCkBAIC01NDMsNiArNTQ2
LDE4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWYKICAgICAgICAg
bV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKIH0KIAorI2lmIEVOQUJMRShDU1Nf
Q09NUE9TSVRJTkcpCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVCbGVuZE1vZGUoKQoreworICAg
IEJsZW5kTW9kZSBuZXdCbGVuZE1vZGUgPSByZW5kZXJlcigpLT5zdHlsZSgpLT5ibGVuZE1vZGUo
KTsKKyAgICBpZiAobmV3QmxlbmRNb2RlICE9IG1fYmxlbmRNb2RlKSB7CisgICAgICAgIG1fYmxl
bmRNb2RlID0gbmV3QmxlbmRNb2RlOworICAgICAgICBpZiAoYmFja2luZygpKQorICAgICAgICAg
ICAgYmFja2luZygpLT5zZXRCbGVuZE1vZGUobmV3QmxlbmRNb2RlKTsKKyAgICB9Cit9CisjZW5k
aWYKKwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKCkKIHsKICAgICAvLyBoYXNU
cmFuc2Zvcm0oKSBvbiB0aGUgcmVuZGVyZXIgaXMgYWxzbyB0cnVlIHdoZW4gdGhlcmUgaXMgdHJh
bnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZCBvciBwZXJzcGVjdGl2ZSBzZXQsCkBAIC00NDIxLDYg
KzQ0MzYsOSBAQCBSZW5kZXJMYXllckJhY2tpbmcqIFJlbmRlckxheWVyOjplbnN1cmVCCiAjaWYg
RU5BQkxFKENTU19GSUxURVJTKQogICAgICAgICB1cGRhdGVPclJlbW92ZUZpbHRlckVmZmVjdCgp
OwogI2VuZGlmCisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICAgICAgYmFja2luZygp
LT5zZXRCbGVuZE1vZGUobV9ibGVuZE1vZGUpOworI2VuZGlmCiAgICAgfQogICAgIHJldHVybiBt
X2JhY2tpbmcuZ2V0KCk7CiB9CkBAIC00ODA3LDYgKzQ4MjUsOSBAQCBib29sIFJlbmRlckxheWVy
OjpzaG91bGRCZU5vcm1hbEZsb3dPbmx5CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogICAgICAg
ICAgICAgJiYgIXJlbmRlcmVyKCktPmhhc0ZpbHRlcigpCiAjZW5kaWYKKyNpZiBFTkFCTEUoQ1NT
X0NPTVBPU0lUSU5HKQorICAgICAgICAgICAgJiYgIXJlbmRlcmVyKCktPmhhc0JsZW5kTW9kZSgp
CisjZW5kaWYKICAgICAgICAgICAgICYmICFpc1RyYW5zcGFyZW50KCkKICAgICAgICAgICAgICYm
ICF1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOwogfQpAQCAtNDk2MCw2ICs0OTgxLDkgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZgogCiAgICAgdXBkYXRlRGVzY2Vu
ZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CisjaWYgRU5BQkxF
KENTU19DT01QT1NJVElORykKKyAgICB1cGRhdGVCbGVuZE1vZGUoKTsKKyNlbmRpZgogCiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChjb21wb3NpdG9yKCktPnVwZGF0
ZUxheWVyQ29tcG9zaXRpbmdTdGF0ZSh0aGlzKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMywxMiBAQCBw
dWJsaWM6CiAgICAgYm9vbCBoYXNGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2Vu
ZGlmCiAKKyNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQorICAgIGJvb2wgaGFzQmxlbmRNb2Rl
KCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS0+aGFzQmxlbmRNb2RlKCk7IH0KKyNlbHNlCisg
ICAgYm9vbCBoYXNCbGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisK
ICAgICAvLyBPdmVybG9hZGVkIG5ldyBvcGVyYXRvci4gRGVyaXZlZCBjbGFzc2VzIG11c3Qgb3Zl
cnJpZGUgb3BlcmF0b3IgbmV3CiAgICAgLy8gaW4gb3JkZXIgdG8gYWxsb2NhdGUgb3V0IG9mIHRo
ZSBSZW5kZXJBcmVuYS4KICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBSZW5kZXJBcmVu
YSopOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDEyNjkzNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ1LDcg
KzE0NDUsOCBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wCiAgICAg
ICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24ocmVuZGVyZXIpCiAgICAgICAg
IHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JGaWx0ZXJzKHJlbmRlcmVyKQogICAgICAgICB8fCBy
ZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24ocmVuZGVyZXIsIGxheWVyKQotICAgICAgICB8
fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcobGF5ZXIpOworICAgICAg
ICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcobGF5ZXIpCisgICAg
ICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JCbGVuZGluZyhyZW5kZXJlcik7CiB9CiAKIGJv
b2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYW5CZUNvbXBvc2l0ZWQoY29uc3QgUmVuZGVyTGF5
ZXIqIGxheWVyKSBjb25zdApAQCAtMTQ3Myw2ICsxNDc0LDcgQEAgYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnJlcXVpcmVzT3duQgogICAgICAgICB8fCAoY2FuUmVuZGVyM0RUcmFuc2Zvcm1z
KCkgJiYgcmVuZGVyZXItPnN0eWxlKCktPmJhY2tmYWNlVmlzaWJpbGl0eSgpID09IEJhY2tmYWNl
VmlzaWJpbGl0eUhpZGRlbikKICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvckFuaW1h
dGlvbihyZW5kZXJlcikKICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvckZpbHRlcnMo
cmVuZGVyZXIpCisgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JCbGVuZGluZyhyZW5k
ZXJlcikKICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKHJlbmRlcmVy
LCBsYXllcikKICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xs
aW5nKGxheWVyKQogICAgICAgICB8fCByZW5kZXJlci0+aXNUcmFuc3BhcmVudCgpCkBAIC0xNTU5
LDYgKzE1NjEsOSBAQCBjb25zdCBjaGFyKiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlYXNvCiAK
ICAgICAgICAgaWYgKHJlbmRlcmVyLT5oYXNGaWx0ZXIoKSkKICAgICAgICAgICAgIHJldHVybiAi
ZmlsdGVyIHdpdGggY29tcG9zaXRlZCBkZXNjZW5kYW50cyI7CisgICAgICAgICAgICAKKyAgICAg
ICAgaWYgKHJlbmRlcmVyLT5oYXNCbGVuZE1vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiAiYmxl
bmRpbmcgd2l0aCBjb21wb3NpdGVkIGRlc2NlbmRhbnRzIjsKICAgICB9CiAKICAgICBpZiAobGF5
ZXItPmluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24oKSA9PSBSZW5kZXJMYXllcjo6SW5kaXJlY3RD
b21wb3NpdGluZ0ZvclBlcnNwZWN0aXZlKQpAQCAtMTc3MSw3ICsxNzc2LDcgQEAgYm9vbCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcAogCiAgICAgLy8gV2hlbiBhIGxheWVyIGhh
cyBjb21wb3NpdGVkIGRlc2NlbmRhbnRzLCBzb21lIGVmZmVjdHMsIGxpa2UgMmQgdHJhbnNmb3Jt
cywgZmlsdGVycywgbWFza3MgZXRjIG11c3QgYmUgaW1wbGVtZW50ZWQKICAgICAvLyB2aWEgY29t
cG9zaXRpbmcgc28gdGhhdCB0aGV5IGFsc28gYXBwbHkgdG8gdGhvc2UgY29tcG9zaXRlZCBkZXNj
ZGVuZGFudHMuCi0gICAgaWYgKGhhc0NvbXBvc2l0ZWREZXNjZW5kYW50cyAmJiAobGF5ZXItPnRy
YW5zZm9ybSgpIHx8IHJlbmRlcmVyLT5pc1RyYW5zcGFyZW50KCkgfHwgcmVuZGVyZXItPmhhc01h
c2soKSB8fCByZW5kZXJlci0+aGFzUmVmbGVjdGlvbigpIHx8IHJlbmRlcmVyLT5oYXNGaWx0ZXIo
KSkpIHsKKyAgICBpZiAoaGFzQ29tcG9zaXRlZERlc2NlbmRhbnRzICYmIChsYXllci0+dHJhbnNm
b3JtKCkgfHwgcmVuZGVyZXItPmlzVHJhbnNwYXJlbnQoKSB8fCByZW5kZXJlci0+aGFzTWFzaygp
IHx8IHJlbmRlcmVyLT5oYXNSZWZsZWN0aW9uKCkgfHwgcmVuZGVyZXItPmhhc0ZpbHRlcigpIHx8
IHJlbmRlcmVyLT5oYXNCbGVuZE1vZGUoKSkpIHsKICAgICAgICAgcmVhc29uID0gUmVuZGVyTGF5
ZXI6OkluZGlyZWN0Q29tcG9zaXRpbmdGb3JHcmFwaGljYWxFZmZlY3Q7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KQEAgLTE4MDcsNiArMTgxMiwxNiBAQCBib29sIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cmVxdWlyZXNDb21wCiAjZW5kaWYKIH0KIAorYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JCbGVuZGluZyhSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKSBjb25zdAoreworI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCisgICAgcmV0dXJuIHJl
bmRlcmVyLT5oYXNCbGVuZE1vZGUoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHJlbmRlcmVy
KTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwogYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLCBjb25zdCBSZW5kZXJMYXllciogbGF5ZXIpIGNvbnN0CiB7CiAgICAgLy8gcG9zaXRpb246
Zml4ZWQgZWxlbWVudHMgdGhhdCBjcmVhdGUgdGhlaXIgb3duIHN0YWNraW5nIGNvbnRleHQgKGUu
Zy4gaGF2ZSBhbiBleHBsaWNpdCB6LWluZGV4LApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkocmV2aXNpb24gMTI2OTM3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTAsNiArMjkwLDcgQEAgcHJpdmF0ZToKICAgICBib29sIHJlcXVpcmVzQ29t
cG9zaXRpbmdGb3JQbHVnaW4oUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJl
c0NvbXBvc2l0aW5nRm9yRnJhbWUoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAgICAgYm9vbCByZXF1
aXJlc0NvbXBvc2l0aW5nRm9yRmlsdGVycyhSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICBib29s
IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JCbGVuZGluZyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSBj
b25zdDsKICAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JTY3JvbGxhYmxlRnJhbWUoKSBj
b25zdDsKICAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBSZW5kZXJMYXllciopIGNvbnN0OwogICAgIGJvb2wgcmVxdWlyZXNDb21wb3Np
dGluZ0Zvck92ZXJmbG93U2Nyb2xsaW5nKGNvbnN0IFJlbmRlckxheWVyKikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAxMjY5Mzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU2OCw2ICs1NjgsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRmlsdGVyKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKENTU19DT01QT1NJVElO
RykKKyAgICBib29sIGhhc0JsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkgJiYgc3R5
bGUoKS0+aGFzQmxlbmRNb2RlKCk7IH0KKyNlbHNlCisgICAgYm9vbCBoYXNCbGVuZE1vZGUoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisKICAgICBpbmxpbmUgYm9vbCBwcmVzZXJ2
ZXNOZXdsaW5lKCkgY29uc3Q7CiAKICAgICAvLyBUaGUgcHNldWRvIGVsZW1lbnQgc3R5bGUgY2Fu
IGJlIGNhY2hlZCBvciB1bmNhY2hlZC4gIFVzZSB0aGUgY2FjaGVkIG1ldGhvZCBpZiB0aGUgcHNl
dWRvIGVsZW1lbnQgZG9lc24ndCByZXNwZWN0CkBAIC05MzMsNiArOTM5LDggQEAgcHJvdGVjdGVk
OgogICAgIHZvaWQgcGFpbnRGb2N1c1JpbmcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0
UG9pbnQmLCBSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgcGFpbnRPdXRsaW5lKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IExheW91dFJlY3QmKTsKICAgICB2b2lkIGFkZFBERlVSTFJlY3QoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYpOworICAgIAorICAgIGJvb2wgY3JlYXRlc0dy
b3VwKCkgY29uc3QgeyByZXR1cm4gaGFzTWFzaygpIHx8IGhhc0ZpbHRlcigpIHx8IGhhc0JsZW5k
TW9kZSgpOyB9IAogCiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IHZpZXdSZWN0KCkgY29uc3Q7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCShyZXZpc2lv
biAxMjY5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAko
d29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgTGF5
b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lcikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2Nh
dGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgYm9vbCByZXF1
aXJlc0xheWVyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gaXNUcmFuc3BhcmVudCgpIHx8IGhh
c092ZXJmbG93Q2xpcCgpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc0hpZGRlbkJhY2tmYWNlKCkg
fHwgaGFzTWFzaygpIHx8IGhhc0ZpbHRlcigpOyB9CisgICAgdmlydHVhbCBib29sIHJlcXVpcmVz
TGF5ZXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBpc1RyYW5zcGFyZW50KCkgfHwgaGFzT3Zl
cmZsb3dDbGlwKCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzSGlkZGVuQmFja2ZhY2UoKSB8fCBj
cmVhdGVzR3JvdXAoKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTkwLDcgKzk5
MCw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQogICAgIEJsZW5kTW9k
ZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxCbGVuZE1vZGU+KHJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tX2VmZmVjdGl2ZUJsZW5kTW9kZSk7IH0KICAgICB2b2lkIHNldEJs
ZW5kTW9kZShCbGVuZE1vZGUgdikgeyByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9l
ZmZlY3RpdmVCbGVuZE1vZGUgPSB2OyB9Ci0gICAgYm9vbCBoYXNCbGVuZE1vZGUoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxCbGVuZE1vZGU+KHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2Vm
ZmVjdGl2ZUJsZW5kTW9kZSkgPT0gQmxlbmRNb2RlTm9ybWFsOyB9CisgICAgYm9vbCBoYXNCbGVu
ZE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxCbGVuZE1vZGU+KHJhcmVOb25Jbmhl
cml0ZWREYXRhLT5tX2VmZmVjdGl2ZUJsZW5kTW9kZSkgIT0gQmxlbmRNb2RlTm9ybWFsOyB9CiAj
ZWxzZQogICAgIGJvb2wgaGFzQmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNl
bmRpZgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTI3MDMwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDgtMjkgIFJpayBDYWJhbmll
ciAgPGNhYmFuaWVyQGFkb2JlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgYmxlbmRt
b2RlIHRvIHdlYmtpdCByZW5kZXJpbmcgZW5naW5lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTI1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZSB0ZXN0IHRvIHZlcmlmeSB0aGF0IGJsZW5kaW5n
IG1vZGVzIGludHJvZHVjZSBhIG5ldyBjb21wb3NpdGluZyBsYXllcgorCisgICAgICAgICogY3Nz
My9jb21wb3NpdGluZy9zaG91bGQtaGF2ZS1jb21wb3NpdGluZy1sYXllci1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGNzczMvY29tcG9zaXRpbmcvc2hvdWxkLWhhdmUtY29tcG9zaXRp
bmctbGF5ZXIuaHRtbDogQWRkZWQuCisKIDIwMTItMDgtMjkgIEthbWlsIEJsYW5rICA8ay5ibGFu
a0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBBZGQgc2V0dGluZyBBUEkgZm9yIGFsbG93
IHVuaXZlcnNhbC9maWxlIGFjY2VzcyBmcm9tIGZpbGUgVVJMcy4KSW5kZXg6IExheW91dFRlc3Rz
L2NzczMvY29tcG9zaXRpbmcvc2hvdWxkLWhhdmUtY29tcG9zaXRpbmctbGF5ZXItZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NzczMvY29tcG9zaXRpbmcvc2hvdWxkLWhh
dmUtY29tcG9zaXRpbmctbGF5ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvY3NzMy9jb21wb3NpdGluZy9zaG91bGQtaGF2ZS1jb21wb3NpdGluZy1sYXllci1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKK1Rlc3QgdG8gbWFrZSBzdXJl
IGEgYmxlbmQgbW9kZSBjcmVhdGVzIGEgY29tcG9zaXRpbmcgbGF5ZXIuIFRlc3QgaXMgc3VjY2Vz
c2Z1bCBvZiByZW5kZXIgdHJlZSBzaG93cyBjb21wb3NpdGluZworCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworRkFJTCBubyBjb21wb3NpdGluZyBsYXllcnMKKworKEdyYXBoaWNzTGF5
ZXIKKyhib3VuZHMgODAwLjAwIDYwMC4wMCkKKyhjaGlsZHJlbiAxCisoR3JhcGhpY3NMYXllcgor
KGJvdW5kcyA4MDAuMDAgNjAwLjAwKQorKGNoaWxkcmVuIDEKKyhHcmFwaGljc0xheWVyCisocG9z
aXRpb24gOC4wMCA3Ni4wMCkKKyhib3VuZHMgMjAuMDAgMjAuMDApCisoZHJhd3NDb250ZW50IDEp
CispCispCispCispCispCisKSW5kZXg6IExheW91dFRlc3RzL2NzczMvY29tcG9zaXRpbmcvc2hv
dWxkLWhhdmUtY29tcG9zaXRpbmctbGF5ZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9jc3MzL2NvbXBvc2l0aW5nL3Nob3VsZC1oYXZlLWNvbXBvc2l0aW5nLWxheWVyLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9jc3MzL2NvbXBvc2l0aW5nL3Nob3VsZC1oYXZlLWNv
bXBvc2l0aW5nLWxheWVyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPHNjcmlwdD4KKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsK
KyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgIHRlc3RSdW5uZXIud2Fp
dFVudGlsRG9uZSgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGRvVGVzdCgpCisgICAgeworICAg
ICAgICBkZXNjcmlwdGlvbigiVGVzdCB0byBtYWtlIHN1cmUgYSBibGVuZCBtb2RlIGNyZWF0ZXMg
YSBjb21wb3NpdGluZyBsYXllci4gVGVzdCBpcyBzdWNjZXNzZnVsIG9mIHJlbmRlciB0cmVlIHNo
b3dzIGNvbXBvc2l0aW5nIik7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAg
ICAgICAgICAgdmFyIGxheWVycyA9IHRlc3RSdW5uZXIubGF5ZXJUcmVlQXNUZXh0KCk7CisgICAg
ICAgICAgICBpZiAobGF5ZXJzID09ICIiKQorICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIm5v
IGNvbXBvc2l0aW5nIGxheWVycyIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHRlc3RQYXNzZWQoImNvbnRlbnQgaGFzIGNvbXBvc2l0aW5nIGxheWVycyIpOworICAgICAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxheWVydHJlZSIpLmlubmVyVGV4dCA9IGxheWVy
czsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZG9UZXN0LCBmYWxz
ZSk7CisKKzwvc2NyaXB0PgorPGltZyBzdHlsZT0iLXdlYmtpdC1ibGVuZC1tb2RlOiBtdWx0aXBs
eTsiIHNyYz0icmVzb3VyY2VzL3JlZmVyZW5jZS5wbmciPgorPGRpdiBpZD0ibGF5ZXJ0cmVlIj48
L2Rpdj4KSW5kZXg6IExheW91dFRlc3RzL2NzczMvY29tcG9zaXRpbmcvcmVzb3VyY2VzL3JlZmVy
ZW5jZS5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5h
cnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvY3NzMy9jb21wb3NpdGluZy9yZXNvdXJjZXMvcmVm
ZXJlbmNlLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRp
b24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUtBQUFBQmFDQVlBQUFB
L3hsMVNBQUFLUTJsRFExQkpRME1nY0hKdlptbHNaUUFBZU5xZApVM2RZay9jV1B0LzNaUTlXUXRq
d3NaZHNnUUFpSTZ3SXlCQlpvaENTQUdHRUVCSkF4WVdJQ2xZVUZSR2NTRlhFZ3RVS1NKMkk0cUFv
CnVHZEJpb2hhaTFWY09PNGYzS2UxZlhydjdlMzcxL3U4NTV6bi9NNTV6dytBRVJJbWtlYWlhZ0E1
VW9VOE90Z2ZqMDlJeE1tOWdBSVYKU09BRUlCRG15OEpuQmNVQUFQQURlWGgrZExBLy9BR3Zid0FD
QUhEVkxpUVN4K0gvZzdwUUpsY0FJSkVBNENJUzV3c0JrRklBeUM1VQp5QlFBeUJnQXNGT3paQW9B
bEFBQWJIbDhRaUlBcWcwQTdQUkpQZ1VBMkttVDNCY0EyS0ljcVFnQWpRRUFtU2hISkFKQXV3QmdW
WUZTCkxBTEF3Z0NnckVBaUxnVEFyZ0dBV2JZeVJ3S0F2UVVBZG81WWtBOUFZQUNBbVVJc3pBQWdP
QUlBUXg0VHpRTWdUQU9nTU5LLzRLbGYKY0lXNFNBRUF3TXVWelpkTDBqTVV1SlhRR25meThPRGlJ
ZUxDYkxGQ1lSY3BFR1lKNUNLY2w1c2pFMGpuQTB6T0RBQUFHdm5Sd2Y0NApQNURuNXVUaDVtYm5i
Ty8weGFMK2EvQnZJajRoOGQvK3ZJd0NCQUFRVHMvdjJsL2w1ZFlEY01jQnNIVy9hNmxiQU5wV0FH
amYrVjB6CjJ3bWdXZ3JRZXZtTGVUajhRQjZlb1ZESVBCMGNDZ3NMN1NWaW9iMHc0NHMrL3pQaGIr
Q0xmdmI4UUI3KzIzcndBSEdhUUptdHdLT0QKL1hGaGJuYXVVbzdueXdSQ01XNzM1eVAreDRWLy9Z
NHAwZUkwc1Z3c0ZZcnhXSW00VUNKTngzbTVVcEZFSWNtVjRoTHBmekx4SDViOQpDWk4zRFFDc2hr
L0FUcllIdGN0c3dIN3VBUUtMRGxqU2RnQkFmdk10akJvTGtRQVFaelF5ZWZjQUFKTy8rWTlBS3dF
QXpaZWs0d0FBCnZPZ1lYS2lVRjB6R0NBQUFSS0NCS3JCQkJ3ekJGS3pBRHB6QkhiekFGd0poQmtS
QURDVEFQQkJDQnVTQUhBcWhHSlpCR1ZUQU90Z0UKdGJBREdxQVJtdUVRdE1FeE9BM240QkpjZ2V0
d0Z3WmdHSjdDR0x5R0NRUkJ5QWdUWVNFNmlCRmlqdGdpemdnWG1ZNEVJbUZJTkpLQQpwQ0RwaUJS
UklzWEljcVFDcVVKcWtWMUlJL0l0Y2hRNWpWeEErcERieUNBeWl2eUt2RWN4bElHeVVRUFVBblZB
dWFnZkdvckdvSFBSCmREUVBYWUNXb212UkdyUWVQWUMyb3FmUlMraDFkQUI5aW81amdORXhEbWFN
MldGY2pJZEZZSWxZR2liSEZtUGxXRFZXanpWakhWZzMKZGhVYndKNWg3d2drQW91QUUrd0lYb1FR
d215Q2tKQkhXRXhZUTZnbDdDTzBFcm9JVndtRGhESENKeUtUcUUrMEpYb1MrY1I0WWpxeAprRmhH
ckNidUlSNGhuaVZlSnc0VFg1TklKQTdKa3VST0NpRWxrREpKQzBsclNOdElMYVJUcEQ3U0VHbWNU
Q2Jya0czSjN1UUlzb0NzCklKZVJ0NUFQa0UrUys4bkQ1TGNVT3NXSTRrd0pvaVJTcEpRU1NqVmxQ
K1VFcFo4eVFwbWdxbEhOcVo3VUNLcUlPcDlhU1cyZ2RsQXYKVTRlcEV6UjFtaVhObXhaRHk2UXRv
OVhRbW1sbmFmZG9MK2wwdWduZGd4NUZsOUNYMG12b0Irbm42WVAwZHd3TmhnMkR4MGhpS0JscgpH
WHNacHhpM0dTK1pUS1lGMDVlWnlGUXcxeklibVdlWUQ1aHZWVmdxOWlwOEZaSEtFcFU2bFZhVmZw
WG5xbFJWYzFVLzFYbXFDMVNyClZRK3JYbFo5cGtaVnMxRGpxUW5VRnF2VnFSMVZ1NmsycnM1U2Qx
S1BVTTlSWDZPK1gvMkMrbU1Oc29hRlJxQ0dTS05VWTdmR0dZMGgKRnNZeVpmRllRdFp5VmdQckxH
dVlUV0pic3Zuc1RIWUYreHQyTDN0TVUwTnpxbWFzWnBGbW5lWnh6UUVPeHJIZzhEblpuRXJPSWM0
Tgp6bnN0QXkwL0xiSFdhcTFtclg2dE45cDYycjdhWXUxeTdSYnQ2OXJ2ZFhDZFFKMHNuZlU2YlRy
M2RRbTZOcnBSdW9XNjIzWFA2ajdUClkrdDU2UW4xeXZVTzZkM1JSL1Z0OUtQMUYrcnYxdS9SSHpj
d05BZzJrQmxzTVRoajhNeVFZK2hybUdtNDBmQ0U0YWdSeTJpNmtjUm8KbzlGSm95ZTRKdTZIWitN
MWVCYytacXh2SEdLc05ONWwzR3M4WVdKcE10dWt4S1RGNUw0cHpaUnJtbWE2MGJUVGRNek15Q3pj
ck5pcwp5ZXlPT2RXY2E1NWh2dG04Mi95TmhhVkZuTVZLaXphTHg1YmFsbnpMQlpaTmx2ZXNtRlkr
Vm5sVzlWYlhyRW5XWE9zczYyM1dWMnhRCkcxZWJESnM2bTh1MnFLMmJyY1IybTIzZkZPSVVqeW5T
S2ZWVGJ0b3g3UHpzQ3V5YTdBYnRPZlpoOWlYMmJmYlBIY3djRWgzV08zUTcKZkhKMGRjeDJiSEM4
NjZUaE5NT3B4S25ENlZkbkcyZWhjNTN6TlJlbVM1RExFcGQybHhkVGJhZUtwMjZmZXN1VjVScnV1
dEsxMC9XagptN3ViM0szWmJkVGR6RDNGZmF2N1RTNmJHOGxkd3ozdlFmVHc5MWppY2N6am5hZWJw
OEx6a09jdlhuWmVXVjc3dlI1UHM1d21udFl3CmJjamJ4RnZndmN0N1lEbytQV1g2enVrRFBzWStB
cDk2bjRlK3ByNGkzejIrSTM3V2ZwbCtCL3llK3p2NnkvMlArTC9oZWZJVzhVNEYKWUFIQkFlVUJ2
WUVhZ2JNRGF3TWZCSmtFcFFjMUJZMEZ1d1l2REQ0VlFnd0pEVmtmY3BOdndCZnlHL2xqTTl4bkxK
clJGY29JblJWYQpHL293ekNaTUh0WVJqb2JQQ044UWZtK20rVXpwekxZSWlPQkhiSWk0SDJrWm1S
ZjVmUlFwS2pLcUx1cFJ0Rk4wY1hUM0xOYXM1Rm43Clo3Mk84WStwakxrNzIycTJjblpuckdwc1Vt
eGo3SnU0Z0xpcXVJRjRoL2hGOFpjU2RCTWtDZTJKNU1UWXhEMko0M01DNTJ5YU01emsKbWxTV2RH
T3U1ZHlpdVJmbTZjN0xubmM4V1RWWmtIdzRoWmdTbDdJLzVZTWdRbEF2R0UvbHAyNU5IUlB5aEp1
RlQwVytvbzJpVWJHMwp1RW84a3VhZFZwWDJPTjA3ZlVQNmFJWlBSblhHTXdsUFVpdDVrUm1TdVNQ
elRWWkUxdDZzejlseDJTMDVsSnlVbktOU0RXbVd0Q3ZYCk1MY290MDltS3l1VERlUjU1bTNLRzVP
SHl2ZmtJL2x6ODlzVmJJVk0wYU8wVXE1UURoWk1MNmdyZUZzWVczaTRTTDFJV3RRejMyYisKNnZr
akM0SVdmTDJRc0ZDNHNMUFl1SGhaOGVBaXYwVzdGaU9MVXhkM0xqRmRVcnBrZUdudzBuM0xhTXV5
bHYxUTRsaFNWZkpxZWR6eQpqbEtEMHFXbFF5dUNWelNWcVpUSnkyNnU5RnE1WXhWaGxXUlY3MnFY
MVZ0V2Z5b1hsVitzY0t5b3J2aXdScmptNGxkT1g5Vjg5WGx0CjJ0cmVTcmZLN2V0STY2VHJicXoz
V2IrdlNyMXFRZFhRaHZBTnJSdnhqZVViWDIxSzNuU2hlbXIxanMyMHpjck5BelZoTmUxYnpMYXMK
Mi9LaE5xUDJlcDEvWGN0Vy9hMnJ0NzdaSnRyV3Y5MTNlL01PZ3gwVk85N3ZsT3k4dFN0NFYydTlS
WDMxYnRMdWd0MlBHbUlidXIvbQpmdDI0UjNkUHhaNlBlNlY3Qi9aRjcrdHFkRzlzM0srL3Y3SUpi
VkkyalI1SU9uRGxtNEJ2MnB2dG1uZTFjRm9xRHNKQjVjRW4zNlo4CmUrTlE2S0hPdzl6RHpkK1pm
N2YxQ090SWVTdlNPcjkxckMyamJhQTlvYjN2Nkl5am5SMWVIVWUrdC85Kzd6SGpZM1hITlk5WG5x
Q2QKS0QzeCtlU0NrK09uWktlZW5VNC9QZFNaM0huM1RQeVphMTFSWGIxblE4K2VQeGQwN2t5M1gv
Zko4OTduajEzd3ZIRDBJdmRpMnlXMwpTNjA5cmoxSGZuRDk0VWl2VzIvclpmZkw3VmM4cm5UMFRl
czcwZS9UZi9wcXdOVnoxL2pYTGwyZmViM3Z4dXdidDI0bTNSeTRKYnIxCitIYjI3UmQzQ3U1TTNG
MTZqM2l2L0w3YS9lb0grZy9xZjdUK3NXWEFiZUQ0WU1CZ3o4TlpEKzhPQ1llZS9wVC8wNGZoMGtm
TVI5VWoKUmlPTmo1MGZIeHNOR3IzeVpNNlQ0YWV5cHhQUHluNVcvM25yYzZ2bjMvM2krMHZQV1B6
WThBdjVpOCsvcm5tcDgzTHZxNm12T3Njagp4eCs4em5rOThhYjhyYzdiZmUrNDc3cmZ4NzBmbVNq
OFFQNVE4OUg2WThlbjBFLzNQdWQ4L3Z3djk0VHorNEE1SlJFQUFBQUdZa3RIClJBRC9BUDhBLzZD
OXA1TUFBQUFKY0VoWmN3QUFDeE1BQUFzVEFRQ2FuQmdBQUFBSGRFbE5SUWZjQkFzWEZCeW9iMm5h
QUFBQ3VrbEUKUVZSNDJ1M2RQV3FVUVFDSDhWbE5sMDJ5Mlk4YnFJVlk2d204Z2VkSS9FZ2hZaVYy
SmtSVENGWmlDazhRckx5QklHcGpRQnZCUXQzZApiTEltQnBIazlRci9ZcGFJL0o3NllkNWRlSFlH
ZHBoM1drMHBUUWtZbFl4aDZJMHFlK1BLM2w1bGI3K3lkeEI2MDlEN0dYcUhsWjk3CnJnQm5pQUFo
UUFnUUVDQUVDQWdRQWdRRWlQK2Z1VTZUaVUzNEYvanBqM0M4WVdVdjNPSm9ScFhIbTRSZXVHWFM3
RmYyS20rRnBCMmsKV3pWbVFGaUNJVUJBZ0JBZ0lFQUlFQkFnQkFqTWxGWXBUYmdYRXY3bEg1OEsr
ZGRQajZTblBTYVZ2ZHFuUjJxZkNqa0t2V3dyeEF3SQpTekFFQ0FnUUFnUUVDQUVDQW9RQWdablNL
dUhic1JiTFlqUmd1N1JEYjZIVWZPNVNXWXE4VHVtRTNuTGtkVXUzc3RlTHZGN285VXMvCjlBYVJO
NGk5N1B1YUFXRUpoZ0FCQVVLQWdBQWhRRUNBRUNBd1UrWlNjYm9ZZXUxd3dJWFFDNThiYm9TVWty
NE9iTG15MXd1OTdtbm0KOVp1NjNpQjlidWhsR3pWbVFGaUNJVUJBZ0JBZ0lFQUlFQkFnQkFqTWxu
Z25aTEdWdldXcEhiNk5LZDRJYVdYZVV1aDFRbTg1OWNLZgpjRGYwZXVkREx4eHZFSTdYRDcxQldF
eTRFV0lHaENVWUFnUUVDQUVDQW9RQUFRRkNnTUJzYVRWTmRrL0ljSmpkNjVGNm85R29xamNlCmo2
dDZlM3ZaUFNHVHlhU3F0NytmM2Y5eGNKRGR3ekdkWmp0VGg0ZUhWYjMwdVdaQVdJSWhRRUNBRUNB
Z1FBZ1FFQ0FFQ015VXVjSFYKVE54NGt4MGFlQkFlTTFuL25MMjE2ZUV3TzV6eDZFdjJQVjdzWnIr
NXpRL1plUGMvWlo5dmEzb2NlZmZlL1ltODdiZS9JKy91eDVQSQplL3IrVitTdGZjM0dleFplMUc0
R2hDVVlBZ1FFQ0FFQ0FvUUFBUUZDZ01CTW1kdTVzaGFKTHk5dlJON0pVVGJleGRYMXlMdCtmQ2Z5
ClZwcnM4KzBNYjBYZTl2eG01SDIvY0R2eXVwZGVSZDYxbzV1UmQyUCtjZVM5L3JZU2VjL0xWdVR0
bHRVd3JTZG1RRmlDQVFGQ2dJQUEKSVVCQWdCQWdJRUNjUFg4QnpaYXZIQTg3b2xBQUFBQUFTVVZP
Uks1Q1lJST0KCg==
</data>
<flag name="review"
          id="172097"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="172098"
          type_id="3"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161359</attachid>
            <date>2012-08-29 16:46:42 -0700</date>
            <delta_ts>2012-08-29 20:09:50 -0700</delta_ts>
            <desc>updated all places where requiresLayer checked. Added comment + moved function to public declaration. Changed compositor so it call public function</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25719</size>
            <attacher name="Rik Cabanier">cabanier</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDEyLTA4LTI5ICBSaWsgQ2Fi
YW5pZXIgIDxjYWJhbmllckBhZG9iZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGJs
ZW5kbW9kZSB0byB3ZWJraXQgcmVuZGVyaW5nIGVuZ2luZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUyNTgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNvZGUgYWRkcyBzdXBwb3J0IGZvciBibGVu
ZG1vZGVzIHRvIHRoZSBXZWJDb3JlIGVuZ2luZS4gVGhlIENTUyBwYXJzZXIgYWxyZWFkeQorICAg
ICAgICBzdXBwb3J0ZWQgdGhpcyBrZXl3b3JkIGJ1dCBkaWRuJ3QgcGFzcyBpdCBhbG9uZy4gU3Vw
cG9ydCBmb3IgcmVuZGVyaW5nIGJsZW5kaW5nIHdpbGwKKyAgICAgICAgYmUgcHJvdmlkZWQgaW4g
c3Vic2VxdWVudCBwYXRjaGVzCisKKyAgICAgICAgVGVzdDogY3NzMy9jb21wb3NpdGluZy9zaG91
bGQtaGF2ZS1jb21wb3NpdGluZy1sYXllci5odG1sCisKKyAgICAgICAgKiBjc3MvU3R5bGVCdWls
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlcjo6U3R5bGVCdWlsZGVyKToK
KyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuaDoKKyAgICAgICAgKFJlbmRlckJveE1vZGVsT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveE1vZGVsT2JqZWN0OjpyZXF1aXJlc0xheWVyKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnJlcXVp
cmVzTGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlQmxlbmRNb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbnN1cmVCYWNraW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzaG91bGRCZU5vcm1hbEZsb3dPbmx5KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllci5oOgorICAgICAgICAoUmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6Omhhc0JsZW5kTW9kZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnJlcXVpcmVzQ29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnJlcXVpcmVzT3duQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVhc29uRm9yQ29tcG9zaXRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9ySW5k
aXJlY3RSZWFzb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZXF1aXJlc0NvbXBvc2l0aW5nRm9yQmxlbmRpbmcpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oOgorICAgICAgICAoUmVuZGVy
TGF5ZXJDb21wb3NpdG9yKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6Cisg
ICAgICAgIChSZW5kZXJPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpo
YXNCbGVuZE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjcmVhdGVzR3Jv
dXApOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oOgorICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorCiAyMDEyLTA4LTI5ICBEYW5hIEphbnNlbnMg
IDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIEhVRCBs
YXllciB3aGVuIHJvb3RMYXllciBpcyBzZXQgdG8gbnVsbApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlQnVpbGRlci5jcHAJKHJldmlzaW9uIDEyNjkzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTI5LDYgKzE5MjksOSBAQCBTdHls
ZUJ1aWxkZXI6OlN0eWxlQnVpbGRlcigpCiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0QmFja2dyb3VuZENvbXBvc2l0ZSwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxDb21w
b3NpdGVPcGVyYXRvciwgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ29tcG9zaXRlLCBCYWNr
Z3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZS
ZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNDb21wb3NpdGVTZXQs
ICZGaWxsTGF5ZXI6OmNvbXBvc2l0ZSwgJkZpbGxMYXllcjo6c2V0Q29tcG9zaXRlLCAmRmlsbExh
eWVyOjpjbGVhckNvbXBvc2l0ZSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxDb21wb3NpdGUsICZD
U1NUb1N0eWxlTWFwOjptYXBGaWxsQ29tcG9zaXRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kT3JpZ2luLCBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRPcmlnaW4pOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdEJhY2tncm91bmRTaXplLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplKTsKKyNp
ZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQorICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdEJsZW5kTW9kZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8QmxlbmRNb2RlLCAmUmVu
ZGVyU3R5bGU6OmJsZW5kTW9kZSwgQmxlbmRNb2RlLCAmUmVuZGVyU3R5bGU6OnNldEJsZW5kTW9k
ZSwgQmxlbmRNb2RlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCbGVuZE1vZGU+OjpjcmVhdGVIYW5k
bGVyKCkpOworI2VuZGlmCiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0
Qm9yZGVyRml0LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyRml0LCAmUmVuZGVyU3R5bGU6
OmJvcmRlckZpdCwgRUJvcmRlckZpdCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJGaXQsIEVCb3Jk
ZXJGaXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlckZpdD46OmNyZWF0ZUhhbmRsZXIoKSk7
CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRh
bFNwYWNpbmcsIEFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3RoPHNob3J0LCAmUmVuZGVyU3R5bGU6
Omhvcml6b250YWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldEhvcml6b250YWxCb3Jk
ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxIb3Jpem9udGFsQm9yZGVyU3BhY2luZz46
OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVySW1hZ2UsIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZTxJbWFnZSwgQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJJbWFnZSwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZSwgJlJlbmRlclN0
eWxlOjpzZXRCb3JkZXJJbWFnZT46OmNyZWF0ZUhhbmRsZXIoKSk7CkBAIC0yMDY0LDkgKzIwNjcs
NiBAQCBTdHlsZUJ1aWxkZXI6OlN0eWxlQnVpbGRlcigpCiAgICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V29yZFdyYXAsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVXb3JkV3JhcCwgJlJl
bmRlclN0eWxlOjp3b3JkV3JhcCwgRVdvcmRXcmFwLCAmUmVuZGVyU3R5bGU6OnNldFdvcmRXcmFw
LCBFV29yZFdyYXAsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFdvcmRXcmFwPjo6Y3JlYXRlSGFuZGxl
cigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlaSW5kZXgsIEFwcGx5UHJv
cGVydHlBdXRvPGludCwgJlJlbmRlclN0eWxlOjp6SW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0Wklu
ZGV4LCAmUmVuZGVyU3R5bGU6Omhhc0F1dG9aSW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0SGFzQXV0
b1pJbmRleD46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5Wm9vbSwgQXBwbHlQcm9wZXJ0eVpvb206OmNyZWF0ZUhhbmRsZXIoKSk7Ci0jaWYgRU5B
QkxFKENTU19DT01QT1NJVElORykKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRCbGVuZE1vZGUsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEJsZW5kTW9kZSwgJlJlbmRlclN0
eWxlOjpibGVuZE1vZGUsIEJsZW5kTW9kZSwgJlJlbmRlclN0eWxlOjpzZXRCbGVuZE1vZGUsIEJs
ZW5kTW9kZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQmxlbmRNb2RlPjo6Y3JlYXRlSGFuZGxlcigp
KTsKLSNlbmRpZgogfQogCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJ
KHJldmlzaW9uIDEyNjkzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjE5Niw2ICsyMTk2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphZGp1c3RSZW5kZXJTdHlsZShSZQogICAgICAgICB8fCBzdHlsZS0+aGFzTWFzaygpCiAgICAg
ICAgIHx8IHN0eWxlLT5ib3hSZWZsZWN0KCkKICAgICAgICAgfHwgc3R5bGUtPmhhc0ZpbHRlcigp
CisgICAgICAgIHx8IHN0eWxlLT5oYXNCbGVuZE1vZGUoKQogICAgICAgICB8fCBzdHlsZS0+cG9z
aXRpb24oKSA9PSBTdGlja3lQb3NpdGlvbgogI2lmZGVmIEZJWEVEX1BPU0lUSU9OX0NSRUFURVNf
U1RBQ0tJTkdfQ09OVEVYVAogICAgICAgICB8fCBzdHlsZS0+cG9zaXRpb24oKSA9PSBGaXhlZFBv
c2l0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiAx
MjY5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogCiAgICAgLy8gaGFzQXV0b1pJbmRleCBv
bmx5IHJldHVybnMgdHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBwb3NpdGlvbmVkIG9yIGEgZmxleC1p
dGVtIHNpbmNlCiAgICAgLy8gcG9zaXRpb246c3RhdGljIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBm
bGV4LWl0ZW1zIGdldCB0aGVpciB6LWluZGV4IGNvZXJjZWQgdG8gYXV0by4KLSAgICB2aXJ0dWFs
IGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGlzUm9vdCgpIHx8
IGlzUG9zaXRpb25lZCgpIHx8IGlzVHJhbnNwYXJlbnQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSB8
fCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNIaWRkZW5CYWNrZmFjZSgpIHx8IGhhc01hc2soKSB8fCBo
YXNSZWZsZWN0aW9uKCkgfHwgaGFzRmlsdGVyKCkgfHwgc3R5bGUoKS0+c3BlY2lmaWVzQ29sdW1u
cygpIHx8ICFzdHlsZSgpLT5oYXNBdXRvWkluZGV4KCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcmVx
dWlyZXNMYXllcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGlzUm9vdCgpIHx8IGlzUG9zaXRp
b25lZCgpIHx8IGNyZWF0ZXNHcm91cCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8IGhhc1RyYW5z
Zm9ybSgpIHx8IGhhc0hpZGRlbkJhY2tmYWNlKCkgfHwgaGFzUmVmbGVjdGlvbigpIHx8IHN0eWxl
KCktPnNwZWNpZmllc0NvbHVtbnMoKSB8fCAhc3R5bGUoKS0+aGFzQXV0b1pJbmRleCgpOyB9CiAK
ICAgICAvLyBVc2UgdGhpcyB3aXRoIGNhdXRpb24hIE5vIHR5cGUgY2hlY2tpbmcgaXMgZG9uZSEK
ICAgICBSZW5kZXJCb3gqIGZpcnN0Q2hpbGRCb3goKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiAxMjY5
MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc1Nl
bGZQYWludGluZ0xheWVyKCkgY29uc3Q7CiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXllcjsgfQotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29u
c3QgeyByZXR1cm4gaXNSb290KCkgfHwgaXNQb3NpdGlvbmVkKCkgfHwgaXNUcmFuc3BhcmVudCgp
IHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc0hpZGRlbkJhY2tmYWNlKCkgfHwgaGFzTWFzaygpIHx8
IGhhc1JlZmxlY3Rpb24oKSB8fCBoYXNGaWx0ZXIoKSB8fCBzdHlsZSgpLT5zcGVjaWZpZXNDb2x1
bW5zKCk7IH0KKworICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1
cm4gaXNSb290KCkgfHwgaXNQb3NpdGlvbmVkKCkgfHwgY3JlYXRlc0dyb3VwKCkgfHwgaGFzVHJh
bnNmb3JtKCkgfHwgaGFzSGlkZGVuQmFja2ZhY2UoKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5
bGUoKS0+c3BlY2lmaWVzQ29sdW1ucygpOyB9CiAKICAgICAvLyBUaGlzIHdpbGwgd29yayBvbiBp
bmxpbmVzIHRvIHJldHVybiB0aGUgYm91bmRpbmcgYm94IG9mIGFsbCBvZiB0aGUgbGluZXMnIGJv
cmRlciBib3hlcy4KICAgICB2aXJ0dWFsIEludFJlY3QgYm9yZGVyQm91bmRpbmdCb3goKSBjb25z
dCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZp
c2lvbiAxMjY5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAotICAg
IHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gaXNJbkZsb3dQb3Np
dGlvbmVkKCkgfHwgaXNUcmFuc3BhcmVudCgpIHx8IGhhc01hc2soKSB8fCBoYXNGaWx0ZXIoKTsg
fQorICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gaXNJbkZs
b3dQb3NpdGlvbmVkKCkgfHwgY3JlYXRlc0dyb3VwKCk7IH0KIAogICAgIHZpcnR1YWwgTGF5b3V0
VW5pdCBvZmZzZXRMZWZ0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG9mZnNldFRv
cCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNiArMTYxLDkgQEAgUmVuZGVyTGF5ZXI6OlJl
bmRlckxheWVyKFJlbmRlckJveE1vZGVsTwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICAs
IG1faGFzRmlsdGVySW5mbyhmYWxzZSkKICNlbmRpZgorI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJ
TkcpCisgICAgLCBtX2JsZW5kTW9kZShCbGVuZE1vZGVOb3JtYWwpCisjZW5kaWYKICAgICAsIG1f
cmVuZGVyZXIocmVuZGVyZXIpCiAgICAgLCBtX3BhcmVudCgwKQogICAgICwgbV9wcmV2aW91cygw
KQpAQCAtNTQzLDYgKzU0NiwxOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0
aW9uc0FmCiAgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CiB9CiAK
KyNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQmxl
bmRNb2RlKCkKK3sKKyAgICBCbGVuZE1vZGUgbmV3QmxlbmRNb2RlID0gcmVuZGVyZXIoKS0+c3R5
bGUoKS0+YmxlbmRNb2RlKCk7CisgICAgaWYgKG5ld0JsZW5kTW9kZSAhPSBtX2JsZW5kTW9kZSkg
eworICAgICAgICBtX2JsZW5kTW9kZSA9IG5ld0JsZW5kTW9kZTsKKyAgICAgICAgaWYgKGJhY2tp
bmcoKSkKKyAgICAgICAgICAgIGJhY2tpbmcoKS0+c2V0QmxlbmRNb2RlKG5ld0JsZW5kTW9kZSk7
CisgICAgfQorfQorI2VuZGlmCisKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVRyYW5zZm9ybSgp
CiB7CiAgICAgLy8gaGFzVHJhbnNmb3JtKCkgb24gdGhlIHJlbmRlcmVyIGlzIGFsc28gdHJ1ZSB3
aGVuIHRoZXJlIGlzIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Qgb3IgcGVyc3BlY3RpdmUg
c2V0LApAQCAtNDQyMSw2ICs0NDM2LDkgQEAgUmVuZGVyTGF5ZXJCYWNraW5nKiBSZW5kZXJMYXll
cjo6ZW5zdXJlQgogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICAgICAgdXBkYXRlT3JSZW1v
dmVGaWx0ZXJFZmZlY3QoKTsKICNlbmRpZgorI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCisg
ICAgICAgIGJhY2tpbmcoKS0+c2V0QmxlbmRNb2RlKG1fYmxlbmRNb2RlKTsKKyNlbmRpZgogICAg
IH0KICAgICByZXR1cm4gbV9iYWNraW5nLmdldCgpOwogfQpAQCAtNDgwNyw2ICs0ODI1LDkgQEAg
Ym9vbCBSZW5kZXJMYXllcjo6c2hvdWxkQmVOb3JtYWxGbG93T25seQogI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKICAgICAgICAgICAgICYmICFyZW5kZXJlcigpLT5oYXNGaWx0ZXIoKQogI2VuZGlm
CisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICAgICAgICAgICYmICFyZW5kZXJlcigp
LT5oYXNCbGVuZE1vZGUoKQorI2VuZGlmCiAgICAgICAgICAgICAmJiAhaXNUcmFuc3BhcmVudCgp
CiAgICAgICAgICAgICAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKIH0KQEAgLTQ5NjAs
NiArNDk4MSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmYKIAog
ICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwogICAgIHVwZGF0ZVRyYW5zZm9y
bSgpOworI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCisgICAgdXBkYXRlQmxlbmRNb2RlKCk7
CisjZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAoY29t
cG9zaXRvcigpLT51cGRhdGVMYXllckNvbXBvc2l0aW5nU3RhdGUodGhpcykpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gMTI2OTM3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYx
Myw2ICs2MTMsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRmlsdGVyKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICBi
b29sIGhhc0JsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCktPmhhc0JsZW5kTW9k
ZSgpOyB9CisjZWxzZQorICAgIGJvb2wgaGFzQmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyNlbmRpZgorCiAgICAgLy8gT3ZlcmxvYWRlZCBuZXcgb3BlcmF0b3IuIERlcml2ZWQg
Y2xhc3NlcyBtdXN0IG92ZXJyaWRlIG9wZXJhdG9yIG5ldwogICAgIC8vIGluIG9yZGVyIHRvIGFs
bG9jYXRlIG91dCBvZiB0aGUgUmVuZGVyQXJlbmEuCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNp
emVfdCwgUmVuZGVyQXJlbmEqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ0NSw3ICsxNDQ1LDggQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
cXVpcmVzQ29tcAogICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKHJl
bmRlcmVyKQogICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yRmlsdGVycyhyZW5kZXJl
cikKICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKHJlbmRlcmVyLCBs
YXllcikKLSAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsaW5n
KGxheWVyKTsKKyAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xs
aW5nKGxheWVyKQorICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yQmxlbmRpbmcocmVu
ZGVyZXIpOwogfQogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FuQmVDb21wb3NpdGVk
KGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikgY29uc3QKQEAgLTE0NzMsNiArMTQ3NCw3IEBAIGJv
b2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc093bkIKICAgICAgICAgfHwgKGNhblJl
bmRlcjNEVHJhbnNmb3JtcygpICYmIHJlbmRlcmVyLT5zdHlsZSgpLT5iYWNrZmFjZVZpc2liaWxp
dHkoKSA9PSBCYWNrZmFjZVZpc2liaWxpdHlIaWRkZW4pCiAgICAgICAgIHx8IHJlcXVpcmVzQ29t
cG9zaXRpbmdGb3JBbmltYXRpb24ocmVuZGVyZXIpCiAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9z
aXRpbmdGb3JGaWx0ZXJzKHJlbmRlcmVyKQorICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5n
Rm9yQmxlbmRpbmcocmVuZGVyZXIpCiAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQ
b3NpdGlvbihyZW5kZXJlciwgbGF5ZXIpCiAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdG
b3JPdmVyZmxvd1Njcm9sbGluZyhsYXllcikKICAgICAgICAgfHwgcmVuZGVyZXItPmlzVHJhbnNw
YXJlbnQoKQpAQCAtMTU1OSw2ICsxNTYxLDkgQEAgY29uc3QgY2hhciogUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpyZWFzbwogCiAgICAgICAgIGlmIChyZW5kZXJlci0+aGFzRmlsdGVyKCkpCiAgICAg
ICAgICAgICByZXR1cm4gImZpbHRlciB3aXRoIGNvbXBvc2l0ZWQgZGVzY2VuZGFudHMiOworICAg
ICAgICAgICAgCisgICAgICAgIGlmIChyZW5kZXJlci0+aGFzQmxlbmRNb2RlKCkpCisgICAgICAg
ICAgICByZXR1cm4gImJsZW5kaW5nIHdpdGggY29tcG9zaXRlZCBkZXNjZW5kYW50cyI7CiAgICAg
fQogCiAgICAgaWYgKGxheWVyLT5pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKCkgPT0gUmVuZGVy
TGF5ZXI6OkluZGlyZWN0Q29tcG9zaXRpbmdGb3JQZXJzcGVjdGl2ZSkKQEAgLTE3NzEsNyArMTc3
Niw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXAKIAogICAgIC8v
IFdoZW4gYSBsYXllciBoYXMgY29tcG9zaXRlZCBkZXNjZW5kYW50cywgc29tZSBlZmZlY3RzLCBs
aWtlIDJkIHRyYW5zZm9ybXMsIGZpbHRlcnMsIG1hc2tzIGV0YyBtdXN0IGJlIGltcGxlbWVudGVk
CiAgICAgLy8gdmlhIGNvbXBvc2l0aW5nIHNvIHRoYXQgdGhleSBhbHNvIGFwcGx5IHRvIHRob3Nl
IGNvbXBvc2l0ZWQgZGVzY2RlbmRhbnRzLgotICAgIGlmIChoYXNDb21wb3NpdGVkRGVzY2VuZGFu
dHMgJiYgKGxheWVyLT50cmFuc2Zvcm0oKSB8fCByZW5kZXJlci0+aXNUcmFuc3BhcmVudCgpIHx8
IHJlbmRlcmVyLT5oYXNNYXNrKCkgfHwgcmVuZGVyZXItPmhhc1JlZmxlY3Rpb24oKSB8fCByZW5k
ZXJlci0+aGFzRmlsdGVyKCkpKSB7CisgICAgaWYgKGhhc0NvbXBvc2l0ZWREZXNjZW5kYW50cyAm
JiAobGF5ZXItPnRyYW5zZm9ybSgpIHx8IHJlbmRlcmVyLT5jcmVhdGVzR3JvdXAoKSB8fCByZW5k
ZXJlci0+aGFzUmVmbGVjdGlvbigpKSkgewogICAgICAgICByZWFzb24gPSBSZW5kZXJMYXllcjo6
SW5kaXJlY3RDb21wb3NpdGluZ0ZvckdyYXBoaWNhbEVmZmVjdDsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQpAQCAtMTgwNyw2ICsxODEyLDE2IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpyZXF1aXJlc0NvbXAKICNlbmRpZgogfQogCitib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckJsZW5kaW5nKFJlbmRlck9iamVjdCogcmVuZGVyZXIp
IGNvbnN0Cit7CisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICByZXR1cm4gcmVuZGVy
ZXItPmhhc0JsZW5kTW9kZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVuZGVyZXIpOwor
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIs
IGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikgY29uc3QKIHsKICAgICAvLyBwb3NpdGlvbjpmaXhl
ZCBlbGVtZW50cyB0aGF0IGNyZWF0ZSB0aGVpciBvd24gc3RhY2tpbmcgY29udGV4dCAoZS5nLiBo
YXZlIGFuIGV4cGxpY2l0IHotaW5kZXgsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5MCw2ICsyOTAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVxdWlyZXNDb21wb3Np
dGluZ0ZvclBsdWdpbihSZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzQ29t
cG9zaXRpbmdGb3JGcmFtZShSZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVz
Q29tcG9zaXRpbmdGb3JGaWx0ZXJzKFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIGJvb2wgcmVx
dWlyZXNDb21wb3NpdGluZ0ZvckJsZW5kaW5nKFJlbmRlck9iamVjdCogcmVuZGVyZXIpIGNvbnN0
OwogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclNjcm9sbGFibGVGcmFtZSgpIGNvbnN0
OwogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlckxheWVyKikgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5n
Rm9yT3ZlcmZsb3dTY3JvbGxpbmcoY29uc3QgUmVuZGVyTGF5ZXIqKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDEyNjkzNykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTY4LDYgKzU2OCwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNGaWx0ZXIoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQor
ICAgIGJvb2wgaGFzQmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKSAmJiBzdHlsZSgp
LT5oYXNCbGVuZE1vZGUoKTsgfQorI2Vsc2UKKyAgICBib29sIGhhc0JsZW5kTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKKwogICAgIGlubGluZSBib29sIHByZXNlcnZlc05l
d2xpbmUoKSBjb25zdDsKIAogICAgIC8vIFRoZSBwc2V1ZG8gZWxlbWVudCBzdHlsZSBjYW4gYmUg
Y2FjaGVkIG9yIHVuY2FjaGVkLiAgVXNlIHRoZSBjYWNoZWQgbWV0aG9kIGlmIHRoZSBwc2V1ZG8g
ZWxlbWVudCBkb2Vzbid0IHJlc3BlY3QKQEAgLTkwNiw2ICs5MTIsOSBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBzaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCog
Y29udGFpbmVyKSBjb25zdDsKICAgICB2b2lkIGdldFRyYW5zZm9ybUZyb21Db250YWluZXIoY29u
c3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIGNvbnN0IExheW91dFNpemUmIG9mZnNldEluQ29u
dGFpbmVyLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0OwogICAgIAorICAgIC8vIHJldHVy
biB0cnVlIGlmIHRoaXMgb2JqZWN0IHJlcXVpcmVzIGEgbmV3IHN0YWNraW5nIGNvbnRleHQKKyAg
ICBib29sIGNyZWF0ZXNHcm91cCgpIGNvbnN0IHsgcmV0dXJuIGlzVHJhbnNwYXJlbnQoKSB8fCBo
YXNNYXNrKCkgfHwgaGFzRmlsdGVyKCkgfHwgaGFzQmxlbmRNb2RlKCk7IH0gCisgICAgCiAgICAg
dmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExh
eW91dFBvaW50JikgeyB9OwogCiAgICAgTGF5b3V0UmVjdCBhYnNvbHV0ZU91dGxpbmVCb3VuZHMo
KSBjb25zdApAQCAtOTMzLDcgKzk0Miw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50Rm9j
dXNSaW5nKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFBvaW50JiwgUmVuZGVyU3R5bGUq
KTsKICAgICB2b2lkIHBhaW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRS
ZWN0Jik7CiAgICAgdm9pZCBhZGRQREZVUkxSZWN0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExh
eW91dFJlY3QmKTsKLQorICAgIAogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCB2aWV3UmVjdCgpIGNv
bnN0OwogCiAgICAgdm9pZCBhZGp1c3RSZWN0Rm9yT3V0bGluZUFuZFNoYWRvdyhMYXlvdXRSZWN0
JikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cu
aAkocmV2aXNpb24gMTI2OTM3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlUm93LmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBI
aXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGlzVHJhbnNwYXJl
bnQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSB8fCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNIaWRkZW5C
YWNrZmFjZSgpIHx8IGhhc01hc2soKSB8fCBoYXNGaWx0ZXIoKTsgfQorICAgIHZpcnR1YWwgYm9v
bCByZXF1aXJlc0xheWVyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gaGFzT3ZlcmZsb3dDbGlw
KCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzSGlkZGVuQmFja2ZhY2UoKSB8fCBjcmVhdGVzR3Jv
dXAoKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91
dFBvaW50Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5oCShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTkwLDcgKzk5MCw3IEBAIHB1
YmxpYzoKICNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQogICAgIEJsZW5kTW9kZSBibGVuZE1v
ZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxCbGVuZE1vZGU+KHJhcmVOb25Jbmhlcml0
ZWREYXRhLT5tX2VmZmVjdGl2ZUJsZW5kTW9kZSk7IH0KICAgICB2b2lkIHNldEJsZW5kTW9kZShC
bGVuZE1vZGUgdikgeyByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9lZmZlY3RpdmVC
bGVuZE1vZGUgPSB2OyB9Ci0gICAgYm9vbCBoYXNCbGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxCbGVuZE1vZGU+KHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2VmZmVjdGl2ZUJs
ZW5kTW9kZSkgPT0gQmxlbmRNb2RlTm9ybWFsOyB9CisgICAgYm9vbCBoYXNCbGVuZE1vZGUoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxCbGVuZE1vZGU+KHJhcmVOb25Jbmhlcml0ZWREYXRh
LT5tX2VmZmVjdGl2ZUJsZW5kTW9kZSkgIT0gQmxlbmRNb2RlTm9ybWFsOyB9CiAjZWxzZQogICAg
IGJvb2wgaGFzQmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTI3MDY1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDgtMjkgIFJpayBDYWJhbmllciAgPGNhYmFu
aWVyQGFkb2JlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgYmxlbmRtb2RlIHRvIHdl
YmtpdCByZW5kZXJpbmcgZW5naW5lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NTI1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEVuYWJsZSB0ZXN0IHRvIHZlcmlmeSB0aGF0IGJsZW5kaW5nIG1vZGVzIGlu
dHJvZHVjZSBhIG5ldyBjb21wb3NpdGluZyBsYXllcgorCisgICAgICAgICogY3NzMy9jb21wb3Np
dGluZy9yZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIGNzczMvY29tcG9zaXRpbmcvcmVzb3Vy
Y2VzL3JlZmVyZW5jZS5wbmc6IEFkZGVkLgorICAgICAgICAqIGNzczMvY29tcG9zaXRpbmcvc2hv
dWxkLWhhdmUtY29tcG9zaXRpbmctbGF5ZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBjc3MzL2NvbXBvc2l0aW5nL3Nob3VsZC1oYXZlLWNvbXBvc2l0aW5nLWxheWVyLmh0bWw6IEFk
ZGVkLgorCiAyMDEyLTA4LTI5ICBQaGlsaXAgUm9nZXJzICA8cGRyQGdvb2dsZS5jb20+CiAKICAg
ICAgICBVbnJldmlld2VkIHJlYmFzZWxpbmUgYWZ0ZXIgcjEyNzAzNQpJbmRleDogTGF5b3V0VGVz
dHMvY3NzMy9jb21wb3NpdGluZy9zaG91bGQtaGF2ZS1jb21wb3NpdGluZy1sYXllci1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3NzMy9jb21wb3NpdGluZy9zaG91bGQt
aGF2ZS1jb21wb3NpdGluZy1sYXllci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9jc3MzL2NvbXBvc2l0aW5nL3Nob3VsZC1oYXZlLWNvbXBvc2l0aW5nLWxheWVyLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorVGVzdCB0byBtYWtlIHN1
cmUgYSBibGVuZCBtb2RlIGNyZWF0ZXMgYSBjb21wb3NpdGluZyBsYXllci4gVGVzdCBpcyBzdWNj
ZXNzZnVsIG9mIHJlbmRlciB0cmVlIHNob3dzIGNvbXBvc2l0aW5nCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitGQUlMIG5vIGNvbXBvc2l0aW5nIGxheWVycworCisoR3JhcGhpY3NM
YXllcgorKGJvdW5kcyA4MDAuMDAgNjAwLjAwKQorKGNoaWxkcmVuIDEKKyhHcmFwaGljc0xheWVy
CisoYm91bmRzIDgwMC4wMCA2MDAuMDApCisoY2hpbGRyZW4gMQorKEdyYXBoaWNzTGF5ZXIKKyhw
b3NpdGlvbiA4LjAwIDc2LjAwKQorKGJvdW5kcyAyMC4wMCAyMC4wMCkKKyhkcmF3c0NvbnRlbnQg
MSkKKykKKykKKykKKykKKykKKwpJbmRleDogTGF5b3V0VGVzdHMvY3NzMy9jb21wb3NpdGluZy9z
aG91bGQtaGF2ZS1jb21wb3NpdGluZy1sYXllci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2NzczMvY29tcG9zaXRpbmcvc2hvdWxkLWhhdmUtY29tcG9zaXRpbmctbGF5ZXIuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NzczMvY29tcG9zaXRpbmcvc2hvdWxkLWhhdmUt
Y29tcG9zaXRpbmctbGF5ZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikg
eworICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgdGVzdFJ1bm5lci53
YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZG9UZXN0KCkKKyAgICB7Cisg
ICAgICAgIGRlc2NyaXB0aW9uKCJUZXN0IHRvIG1ha2Ugc3VyZSBhIGJsZW5kIG1vZGUgY3JlYXRl
cyBhIGNvbXBvc2l0aW5nIGxheWVyLiBUZXN0IGlzIHN1Y2Nlc3NmdWwgb2YgcmVuZGVyIHRyZWUg
c2hvd3MgY29tcG9zaXRpbmciKTsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7Cisg
ICAgICAgICAgICB2YXIgbGF5ZXJzID0gdGVzdFJ1bm5lci5sYXllclRyZWVBc1RleHQoKTsKKyAg
ICAgICAgICAgIGlmIChsYXllcnMgPT0gIiIpCisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgi
bm8gY29tcG9zaXRpbmcgbGF5ZXJzIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgdGVzdFBhc3NlZCgiY29udGVudCBoYXMgY29tcG9zaXRpbmcgbGF5ZXJzIik7CisgICAgICAg
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibGF5ZXJ0cmVlIikuaW5uZXJUZXh0ID0gbGF5
ZXJzOworICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBkb1Rlc3QsIGZh
bHNlKTsKKworPC9zY3JpcHQ+Cis8aW1nIHN0eWxlPSItd2Via2l0LWJsZW5kLW1vZGU6IG11bHRp
cGx5OyIgc3JjPSJyZXNvdXJjZXMvcmVmZXJlbmNlLnBuZyI+Cis8ZGl2IGlkPSJsYXllcnRyZWUi
PjwvZGl2PgpJbmRleDogTGF5b3V0VGVzdHMvY3NzMy9jb21wb3NpdGluZy9yZXNvdXJjZXMvcmVm
ZXJlbmNlLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJp
bmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jc3MzL2NvbXBvc2l0aW5nL3Jlc291cmNlcy9y
ZWZlcmVuY2UucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBS0FBQUFCYUNBWUFB
QUEveGwxU0FBQUtRMmxEUTFCSlEwTWdjSEp2Wm1sc1pRQUFlTnFkClUzZFlrL2NXUHQvM1pROVdR
dGp3c1pkc2dRQWlJNndJeUJCWm9oQ1NBR0dFRUJKQXhZV0lDbFlVRlJHY1NGWEVndFVLU0oySTRx
QW8KdUdkQmlvaGFpMVZjT080ZjNLZTFmWHJ2N2UzNzEvdTg1NXpuL001NXp3K0FFUklta2VhaWFn
QTVVb1U4T3RnZmowOUl4TW05Z0FJVgpTT0FFSUJEbXk4Sm5CY1VBQVBBRGVYaCtkTEEvL0FHdmJ3
QUNBSERWTGlRU3grSC9nN3BRSmxjQUlKRUE0Q0lTNXdzQmtGSUF5QzVVCnlCUUF5QmdBc0ZPelpB
b0FsQUFBYkhsOFFpSUFxZzBBN1BSSlBnVUEyS21UM0JjQTJLSWNxUWdBalFFQW1TaEhKQUpBdXdC
Z1ZZRlMKTEFMQXdnQ2dyRUFpTGdUQXJnR0FXYll5UndLQXZRVUFkbzVZa0E5QVlBQ0FtVUlzekFB
Z09BSUFReDRUelFNZ1RBT2dNTksvNEtsZgpjSVc0U0FFQXdNdVZ6WmRMMGpNVXVKWFFHbmZ5OE9E
aUllTENiTEZDWVJjcEVHWUo1Q0tjbDVzakUwam5BMHpPREFBQUd2blJ3ZjQ0ClA1RG41dVRoNW1i
bmJPLzB4YUwrYS9CdklqNGg4ZC8rdkl3Q0JBQVFUcy92MmwvbDVkWURjTWNCc0hXL2E2bGJBTnBX
QUdqZitWMHoKMndtZ1dnclFldm1MZVRqOFFCNmVvVkRJUEIwY0Nnc0w3U1Zpb2IwdzQ0cysvelBo
YitDTGZ2YjhRQjcrMjNyd0FIR2FRSm10d0tPRAovWEZoYm5hdVVvN255d1JDTVc3MzV5UCt4NFYv
L1k0cDBlSTBzVndzRllyeFdJbTRVQ0pOeDNtNVVwRkVJY21WNGhMcGZ6THhINWI5CkNaTjNEUUNz
aGsvQVRyWUh0Y3Rzd0g3dUFRS0xEbGpTZGdCQWZ2TXRqQm9Ma1FBUVp6UXllZmNBQUpPLytZOUFL
d0VBelplazR3QUEKdk9nWVhLaVVGMHpHQ0FBQVJLQ0JLckJCQnd6QkZLekFEcHpCSGJ6QUZ3SmhC
a1JBRENUQVBCQkNCdVNBSEFxaEdKWkJHVlRBT3RnRQp0YkFER3FBUm11RVF0TUV4T0EzbjRCSmNn
ZXR3RndaZ0dKN0NHTHlHQ1FSQnlBZ1RZU0U2aUJGaWp0Z2l6Z2dYbVk0RUltRklOSktBCnBDRHBp
QlJSSXNYSWNxUUNxVUpxa1YxSUkvSXRjaFE1alZ4QStwRGJ5Q0F5aXZ5S3ZFY3hsSUd5VVFQVUFu
VkF1YWdmR29yR29IUFIKZERRUFhZQ1dvbXZSR3JRZVBZQzJvcWZSUytoMWRBQjlpbzVqZ05FeERt
YU0yV0ZjaklkRllJbFlHaWJIRm1QbFdEVldqelZqSFZnMwpkaFVid0o1aDd3Z2tBb3VBRSt3SVhv
UVF3bXlDa0pCSFdFeFlRNmdsN0NPMEVyb0lWd21EaERIQ0p5S1RxRSswSlhvUytjUjRZanF4CmtG
aEdyQ2J1SVI0aG5pVmVKdzRUWDVOSUpBN0prdVJPQ2lFbGtESkpDMGxyU050SUxhUlRwRDdTRUdt
Y1RDYnJrRzNKM3VRSXNvQ3MKSUplUnQ1QVBrRStTKzhuRDVMY1VPc1dJNGt3Sm9pUlNwSlFTU2pW
bFArVUVwWjh5UXBtZ3FsSE5xWjdVQ0txSU9wOWFTVzJnZGxBdgpVNGVwRXpSMW1pWE5teFpEeTZR
dG85WFFtbWxuYWZkb0wrbDB1Z25kZ3g1Rmw5Q1gwbXZvQitubjZZUDBkd3dOaGcyRHgwaGlLQmxy
CkdYc1pweGkzR1MrWlRLWUYwNWVaeUZRdzF6SWJtV2VZRDVodlZWZ3E5aXA4RlpIS0VwVTZsVmFW
ZnBYbnFsUlZjMVUvMVhtcUMxU3IKVlErclhsWjlwa1pWczFEanFRblVGcXZWcVIxVnU2azJyczVT
ZDFLUFVNOVJYNk8rWC8yQyttTU5zb2FGUnFDR1NLTlVZN2ZHR1kwaApGc1l5WmZGWVF0WnlWZ1By
TEd1WVRXSmJzdm5zVEhZRit4dDJMM3RNVTBOenFtYXNacEZtbmVaeHpRRU94ckhnOERuWm5Fck9J
YzROCnpuc3RBeTAvTGJIV2FxMW1yWDZ0TjlwNjJyN2FZdTF5N1JidDY5cnZkWENkUUowc25mVTZi
VHIzZFFtNk5ycFJ1b1c2MjNYUDZqN1QKWSt0NTZRbjF5dlVPNmQzUlIvVnQ5S1AxRitydjF1L1JI
emN3TkFnMmtCbHNNVGhqOE15UVkraHJtR200MGZDRTRhZ1J5Mmk2a2NSbwpvOUZKb3llNEp1Nkha
K00xZUJjK1pxeHZIR0tzTk41bDNHczhZV0pwTXR1a3hLVEY1TDRwelpScm1tYTYwYlRUZE16TXlD
emNyTmlzCnlleU9PZFdjYTU1aHZ0bTgyL3lOaGFWRm5NVktpemFMeDViYWxuekxCWlpObHZlc21G
WStWbmxXOVZiWHJFbldYT3NzNjIzV1YyeFEKRzFlYkRKczZtOHUycUsyYnJjUjJtMjNmRk9JVWp5
blNLZlZUYnRveDdQenNDdXlhN0FidE9mWmg5aVgyYmZiUEhjd2NFaDNXTzNRNwpmSEowZGN4MmJI
Qzg2NlRoTk1PcHhLbkQ2VmRuRzJlaGM1M3pOUmVtUzVETEVwZDJseGRUYmFlS3AyNmZlc3VWNVJy
dXV0SzEwL1dqCm03dWIzSzNaYmRUZHpEM0ZmYXY3VFM2Ykc4bGR3ejN2UWZUdzkxamljY3pqbmFl
YnA4THprT2N2WG5aZVdWNzd2UjVQczV3bW50WXcKYmNqYnhGdmd2Y3Q3WURvK1BXWDZ6dWtEUHNZ
K0FwOTZuNGUrcHI0aTN6MitJMzdXZnBsK0IveWUrenY2eS8yUCtML2hlZklXOFU0RgpZQUhCQWVV
QnZZRWFnYk1EYXdNZkJKa0VwUWMxQlkwRnV3WXZERDRWUWd3SkRWa2ZjcE52d0JmeUcvbGpNOXhu
TEpyUkZjb0luUlZhCkcvb3d6Q1pNSHRZUmpvYlBDTjhRZm0rbStVenB6TFlJaU9CSGJJaTRIMmta
bVJmNWZSUXBLaktxTHVwUnRGTjBjWFQzTE5hczVGbjcKWjcyTzhZK3BqTGs3MjJxMmNuWm5yR3Bz
VW14ajdKdTRnTGlxdUlGNGgvaEY4WmNTZEJNa0NlMko1TVRZeEQySjQzTUM1MnlhTTV6awptbFNX
ZEdPdTVkeWl1UmZtNmM3TG5uYzhXVFZaa0h3NGhaZ1NsN0kvNVlNZ1FsQXZHRS9scDI1TkhSUHlo
SnVGVDBXK29vMmlVYkczCnVFbzhrdWFkVnBYMk9OMDdmVVA2YUlaUFJuWEdNd2xQVWl0NWtSbVN1
U1B6VFZaRTF0NnN6OWx4MlMwNWxKeVVuS05TRFdtV3RDdlgKTUxjb3QwOW1LeXVURGVSNTVtM0tH
NU9IeXZma0kvbHo4OXNWYklWTTBhTzBVcTVRRGhaTUw2Z3JlRnNZVzNpNFNMMUlXdFF6MzJiKwo2
dmtqQzRJV2ZMMlFzRkM0c0xQWXVIaFo4ZUFpdjBXN0ZpT0xVeGQzTGpGZFVycGtlR253MG4zTGFN
dXlsdjFRNGxoU1ZmSnFlZHp5CmpsS0QwcVdsUXl1Q1Z6U1ZxWlRKeTI2dTlGcTVZeFZobFdSVjcy
cVgxVnRXZnlvWGxWK3NjS3lvcnZpd1Jyam00bGRPWDlWODlYbHQKMnRyZVNyZks3ZXRJNjZUcmJx
ejNXYit2U3IxcVFkWFFodkFOclJ2eGplVWJYMjFLM25TaGVtcjFqczIwemNyTkF6VmhOZTFiekxh
cwoyL0toTnFQMmVwMS9YY3RXL2EycnQ3N1pKdHJXdjkxM2UvTU9neDBWTzk3dmxPeTh0U3Q0VjJ1
OVJYMzFidEx1Z3QyUEdtSWJ1ci9tCmZ0MjRSM2RQeFo2UGU2VjdCL1pGNyt0cWRHOXMzSysvdjdJ
SmJWSTJqUjVJT25EbG00QnYycHZ0bW5lMWNGb3FEc0pCNWNFbjM2WjgKZStOUTZLSE93OXpEemQr
WmY3ZjFDT3RJZVN2U09yOTFyQzJqYmFBOW9iM3Y2SXlqblIxZUhVZSt0LzkrN3pIalkzWEhOWTlY
bnFDZApLRDN4K2VTQ2srT25aS2VlblU0L1BkU1ozSG4zVFB5WmExMVJYYjFuUTgrZVB4ZDA3a3kz
WC9mSjg5N25qMTN3dkhEMEl2ZGkyeVczClM2MDlyajFIZm5EOTRVaXZXMi9yWmZmTDdWYzhyblQw
VGVzNzBlL1RmL3Bxd05WejEvalhMbDJmZWIzdnh1d2J0MjRtM1J5NEpicjEKK0hiMjdSZDNDdTVN
M0YxNmozaXYvTDdhL2VvSCtnL3FmN1Qrc1dYQWJlRDRZTUJnejhOWkQrOE9DWWVlL3BULzA0Zmgw
a2ZNUjlVagpSaU9OajUwZkh4c05HcjN5Wk02VDRhZXlweFBQeW41Vy8zbnJjNnZuMy8zaSswdlBX
UHpZOEF2NWk4Ky9ybm1wODNMdnE2bXZPc2NqCnh4Kzh6bms5OGFiOHJjN2JmZSs0NzdyZng3MGZt
U2o4UVA1UTg5SDZZOGVuMEUvM1B1ZDgvdnd2OTRUeis0QTVKUkVBQUFBR1lrdEgKUkFEL0FQOEEv
NkM5cDVNQUFBQUpjRWhaY3dBQUN4TUFBQXNUQVFDYW5CZ0FBQUFIZEVsTlJRZmNCQXNYRkJ5b2Iy
bmFBQUFDdWtsRQpRVlI0MnUzZFBXcVVRUUNIOFZsTmwwMnkyWThicUlWWTZ3bThnZWRJL0VnaFlp
VjJKa1JUQ0ZaaUNrOFFyTHlCSUdwalFCdkJRdDNkCmJMSW1CcEhrOVFyL1lwYUkvSjc2WWQ1ZGVI
WUdkcGgzV2swcFRRa1lsWXhoNkkwcWUrUEszbDVsYjcreWR4QjYwOUQ3R1hxSGxaOTcKcmdCbmlB
QWhRQWdRRUNBRUNBZ1FBZ1FFaVArZnVVNlRpVTM0Ri9qcGozQzhZV1V2M09Kb1JwWEhtNFJldUdY
UzdGZjJLbStGcEIyawpXelZtUUZpQ0lVQkFnQkFnSUVBSUVCQWdCQWpNbEZZcFRiZ1hFdjdsSDU4
SytkZFBqNlNuUFNhVnZkcW5SMnFmQ2prS3ZXd3J4QXdJClN6QUVDQWdRQWdRRUNBRUNBb1FBZ1pu
U0t1SGJzUmJMWWpSZ3U3UkRiNkhVZk81U1dZcThUdW1FM25Ma2RVdTNzdGVMdkY3bzlVcy8KOUFh
Uk40aTk3UHVhQVdFSmhnQUJBVUtBZ0FBaFFFQ0FFQ0F3VStaU2Nib1lldTF3d0lYUUM1OGJib1NV
a3I0T2JMbXkxd3U5N21ubQo5WnU2M2lCOWJ1aGxHelZtUUZpQ0lVQkFnQkFnSUVBSUVCQWdCQWpN
bG5nblpMR1Z2V1dwSGI2TktkNElhV1hlVXVoMVFtODU5Y0tmCmNEZjBldWRETHh4dkVJN1hENzFC
V0V5NEVXSUdoQ1VZQWdRRUNBRUNBb1FBQVFGQ2dNQnNhVFZOZGsvSWNKamQ2NUY2bzlHb3FqY2UK
ajZ0NmUzdlpQU0dUeWFTcXQ3K2YzZjl4Y0pEZHd6R2RaanRUaDRlSFZiMzB1V1pBV0lJaFFFQ0FF
Q0FnUUFnUUVDQUVDTXlVdWNIVgpUTng0a3gwYWVCQWVNMW4vbkwyMTZlRXdPNXp4NkV2MlBWN3Na
cis1elEvWmVQYy9aWjl2YTNvY2VmZmUvWW04N2JlL0krL3V4NVBJCmUvcitWK1N0ZmMzR2V4WmUx
RzRHaENVWUFnUUVDQUVDQW9RQUFRRkNnTUJNbWR1NXNoYUpMeTl2Uk43SlVUYmV4ZFgxeUx0K2ZD
ZnkKVnByczgrME1iMFhlOXZ4bTVIMi9jRHZ5dXBkZVJkNjFvNXVSZDJQK2NlUzkvcllTZWMvTFZ1
VHRsdFV3clNkbVFGaUNBUUZDZ0lBQQpJVUJBZ0JBZ0lFQ2NQWDhCelphdkhBODdvbEFBQUFBQVNV
Vk9SSzVDWUlJPQoK
</data>
<flag name="review"
          id="172140"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="172141"
          type_id="3"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161391</attachid>
            <date>2012-08-29 20:09:50 -0700</date>
            <delta_ts>2012-08-30 11:02:29 -0700</delta_ts>
            <desc>changed the test file so it uses a &lt;pre&gt; instead of a &lt;div&gt;</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25518</size>
            <attacher name="Rik Cabanier">cabanier</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNzA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDEyLTA4LTI5ICBSaWsgQ2Fi
YW5pZXIgIDxjYWJhbmllckBhZG9iZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGJs
ZW5kbW9kZSB0byB3ZWJraXQgcmVuZGVyaW5nIGVuZ2luZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUyNTgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNvZGUgYWRkcyBzdXBwb3J0IGZvciBibGVu
ZG1vZGVzIHRvIHRoZSBXZWJDb3JlIGVuZ2luZS4gVGhlIENTUyBwYXJzZXIgYWxyZWFkeQorICAg
ICAgICBzdXBwb3J0ZWQgdGhpcyBrZXl3b3JkIGJ1dCBkaWRuJ3QgcGFzcyBpdCBhbG9uZy4gU3Vw
cG9ydCBmb3IgcmVuZGVyaW5nIGJsZW5kaW5nIHdpbGwKKyAgICAgICAgYmUgcHJvdmlkZWQgaW4g
c3Vic2VxdWVudCBwYXRjaGVzCisKKyAgICAgICAgVGVzdDogY3NzMy9jb21wb3NpdGluZy9zaG91
bGQtaGF2ZS1jb21wb3NpdGluZy1sYXllci5odG1sCisKKyAgICAgICAgKiBjc3MvU3R5bGVCdWls
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlcjo6U3R5bGVCdWlsZGVyKToK
KyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuaDoKKyAgICAgICAgKFJlbmRlckJveE1vZGVsT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveE1vZGVsT2JqZWN0OjpyZXF1aXJlc0xheWVyKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnJlcXVp
cmVzTGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlQmxlbmRNb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbnN1cmVCYWNraW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzaG91bGRCZU5vcm1hbEZsb3dPbmx5KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllci5oOgorICAgICAgICAoUmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6Omhhc0JsZW5kTW9kZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnJlcXVpcmVzQ29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnJlcXVpcmVzT3duQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVhc29uRm9yQ29tcG9zaXRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9ySW5k
aXJlY3RSZWFzb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZXF1aXJlc0NvbXBvc2l0aW5nRm9yQmxlbmRpbmcpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oOgorICAgICAgICAoUmVuZGVy
TGF5ZXJDb21wb3NpdG9yKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6Cisg
ICAgICAgIChSZW5kZXJPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpo
YXNCbGVuZE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjcmVhdGVzR3Jv
dXApOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oOgorICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorCiAyMDEyLTA4LTI5ICBEYW5hIEphbnNlbnMg
IDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIEhVRCBs
YXllciB3aGVuIHJvb3RMYXllciBpcyBzZXQgdG8gbnVsbApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlQnVpbGRlci5jcHAJKHJldmlzaW9uIDEyNjkzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTI5LDYgKzE5MjksOSBAQCBTdHls
ZUJ1aWxkZXI6OlN0eWxlQnVpbGRlcigpCiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0QmFja2dyb3VuZENvbXBvc2l0ZSwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxDb21w
b3NpdGVPcGVyYXRvciwgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ29tcG9zaXRlLCBCYWNr
Z3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZS
ZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNDb21wb3NpdGVTZXQs
ICZGaWxsTGF5ZXI6OmNvbXBvc2l0ZSwgJkZpbGxMYXllcjo6c2V0Q29tcG9zaXRlLCAmRmlsbExh
eWVyOjpjbGVhckNvbXBvc2l0ZSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxDb21wb3NpdGUsICZD
U1NUb1N0eWxlTWFwOjptYXBGaWxsQ29tcG9zaXRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kT3JpZ2luLCBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRPcmlnaW4pOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdEJhY2tncm91bmRTaXplLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplKTsKKyNp
ZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQorICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdEJsZW5kTW9kZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8QmxlbmRNb2RlLCAmUmVu
ZGVyU3R5bGU6OmJsZW5kTW9kZSwgQmxlbmRNb2RlLCAmUmVuZGVyU3R5bGU6OnNldEJsZW5kTW9k
ZSwgQmxlbmRNb2RlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCbGVuZE1vZGU+OjpjcmVhdGVIYW5k
bGVyKCkpOworI2VuZGlmCiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0
Qm9yZGVyRml0LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyRml0LCAmUmVuZGVyU3R5bGU6
OmJvcmRlckZpdCwgRUJvcmRlckZpdCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJGaXQsIEVCb3Jk
ZXJGaXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlckZpdD46OmNyZWF0ZUhhbmRsZXIoKSk7
CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRh
bFNwYWNpbmcsIEFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3RoPHNob3J0LCAmUmVuZGVyU3R5bGU6
Omhvcml6b250YWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldEhvcml6b250YWxCb3Jk
ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxIb3Jpem9udGFsQm9yZGVyU3BhY2luZz46
OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVySW1hZ2UsIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZTxJbWFnZSwgQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJJbWFnZSwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZSwgJlJlbmRlclN0
eWxlOjpzZXRCb3JkZXJJbWFnZT46OmNyZWF0ZUhhbmRsZXIoKSk7CkBAIC0yMDY0LDkgKzIwNjcs
NiBAQCBTdHlsZUJ1aWxkZXI6OlN0eWxlQnVpbGRlcigpCiAgICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V29yZFdyYXAsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVXb3JkV3JhcCwgJlJl
bmRlclN0eWxlOjp3b3JkV3JhcCwgRVdvcmRXcmFwLCAmUmVuZGVyU3R5bGU6OnNldFdvcmRXcmFw
LCBFV29yZFdyYXAsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFdvcmRXcmFwPjo6Y3JlYXRlSGFuZGxl
cigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlaSW5kZXgsIEFwcGx5UHJv
cGVydHlBdXRvPGludCwgJlJlbmRlclN0eWxlOjp6SW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0Wklu
ZGV4LCAmUmVuZGVyU3R5bGU6Omhhc0F1dG9aSW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0SGFzQXV0
b1pJbmRleD46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5Wm9vbSwgQXBwbHlQcm9wZXJ0eVpvb206OmNyZWF0ZUhhbmRsZXIoKSk7Ci0jaWYgRU5B
QkxFKENTU19DT01QT1NJVElORykKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRCbGVuZE1vZGUsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEJsZW5kTW9kZSwgJlJlbmRlclN0
eWxlOjpibGVuZE1vZGUsIEJsZW5kTW9kZSwgJlJlbmRlclN0eWxlOjpzZXRCbGVuZE1vZGUsIEJs
ZW5kTW9kZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQmxlbmRNb2RlPjo6Y3JlYXRlSGFuZGxlcigp
KTsKLSNlbmRpZgogfQogCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJ
KHJldmlzaW9uIDEyNjkzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjE5Niw2ICsyMTk2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphZGp1c3RSZW5kZXJTdHlsZShSZQogICAgICAgICB8fCBzdHlsZS0+aGFzTWFzaygpCiAgICAg
ICAgIHx8IHN0eWxlLT5ib3hSZWZsZWN0KCkKICAgICAgICAgfHwgc3R5bGUtPmhhc0ZpbHRlcigp
CisgICAgICAgIHx8IHN0eWxlLT5oYXNCbGVuZE1vZGUoKQogICAgICAgICB8fCBzdHlsZS0+cG9z
aXRpb24oKSA9PSBTdGlja3lQb3NpdGlvbgogI2lmZGVmIEZJWEVEX1BPU0lUSU9OX0NSRUFURVNf
U1RBQ0tJTkdfQ09OVEVYVAogICAgICAgICB8fCBzdHlsZS0+cG9zaXRpb24oKSA9PSBGaXhlZFBv
c2l0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiAx
MjY5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogCiAgICAgLy8gaGFzQXV0b1pJbmRleCBv
bmx5IHJldHVybnMgdHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBwb3NpdGlvbmVkIG9yIGEgZmxleC1p
dGVtIHNpbmNlCiAgICAgLy8gcG9zaXRpb246c3RhdGljIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBm
bGV4LWl0ZW1zIGdldCB0aGVpciB6LWluZGV4IGNvZXJjZWQgdG8gYXV0by4KLSAgICB2aXJ0dWFs
IGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGlzUm9vdCgpIHx8
IGlzUG9zaXRpb25lZCgpIHx8IGlzVHJhbnNwYXJlbnQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSB8
fCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNIaWRkZW5CYWNrZmFjZSgpIHx8IGhhc01hc2soKSB8fCBo
YXNSZWZsZWN0aW9uKCkgfHwgaGFzRmlsdGVyKCkgfHwgc3R5bGUoKS0+c3BlY2lmaWVzQ29sdW1u
cygpIHx8ICFzdHlsZSgpLT5oYXNBdXRvWkluZGV4KCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcmVx
dWlyZXNMYXllcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGlzUm9vdCgpIHx8IGlzUG9zaXRp
b25lZCgpIHx8IGNyZWF0ZXNHcm91cCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8IGhhc1RyYW5z
Zm9ybSgpIHx8IGhhc0hpZGRlbkJhY2tmYWNlKCkgfHwgaGFzUmVmbGVjdGlvbigpIHx8IHN0eWxl
KCktPnNwZWNpZmllc0NvbHVtbnMoKSB8fCAhc3R5bGUoKS0+aGFzQXV0b1pJbmRleCgpOyB9CiAK
ICAgICAvLyBVc2UgdGhpcyB3aXRoIGNhdXRpb24hIE5vIHR5cGUgY2hlY2tpbmcgaXMgZG9uZSEK
ICAgICBSZW5kZXJCb3gqIGZpcnN0Q2hpbGRCb3goKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiAxMjY5
MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc1Nl
bGZQYWludGluZ0xheWVyKCkgY29uc3Q7CiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXllcjsgfQotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29u
c3QgeyByZXR1cm4gaXNSb290KCkgfHwgaXNQb3NpdGlvbmVkKCkgfHwgaXNUcmFuc3BhcmVudCgp
IHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc0hpZGRlbkJhY2tmYWNlKCkgfHwgaGFzTWFzaygpIHx8
IGhhc1JlZmxlY3Rpb24oKSB8fCBoYXNGaWx0ZXIoKSB8fCBzdHlsZSgpLT5zcGVjaWZpZXNDb2x1
bW5zKCk7IH0KKworICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1
cm4gaXNSb290KCkgfHwgaXNQb3NpdGlvbmVkKCkgfHwgY3JlYXRlc0dyb3VwKCkgfHwgaGFzVHJh
bnNmb3JtKCkgfHwgaGFzSGlkZGVuQmFja2ZhY2UoKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5
bGUoKS0+c3BlY2lmaWVzQ29sdW1ucygpOyB9CiAKICAgICAvLyBUaGlzIHdpbGwgd29yayBvbiBp
bmxpbmVzIHRvIHJldHVybiB0aGUgYm91bmRpbmcgYm94IG9mIGFsbCBvZiB0aGUgbGluZXMnIGJv
cmRlciBib3hlcy4KICAgICB2aXJ0dWFsIEludFJlY3QgYm9yZGVyQm91bmRpbmdCb3goKSBjb25z
dCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZp
c2lvbiAxMjY5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAotICAg
IHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gaXNJbkZsb3dQb3Np
dGlvbmVkKCkgfHwgaXNUcmFuc3BhcmVudCgpIHx8IGhhc01hc2soKSB8fCBoYXNGaWx0ZXIoKTsg
fQorICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gaXNJbkZs
b3dQb3NpdGlvbmVkKCkgfHwgY3JlYXRlc0dyb3VwKCk7IH0KIAogICAgIHZpcnR1YWwgTGF5b3V0
VW5pdCBvZmZzZXRMZWZ0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG9mZnNldFRv
cCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNiArMTYxLDkgQEAgUmVuZGVyTGF5ZXI6OlJl
bmRlckxheWVyKFJlbmRlckJveE1vZGVsTwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICAs
IG1faGFzRmlsdGVySW5mbyhmYWxzZSkKICNlbmRpZgorI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJ
TkcpCisgICAgLCBtX2JsZW5kTW9kZShCbGVuZE1vZGVOb3JtYWwpCisjZW5kaWYKICAgICAsIG1f
cmVuZGVyZXIocmVuZGVyZXIpCiAgICAgLCBtX3BhcmVudCgwKQogICAgICwgbV9wcmV2aW91cygw
KQpAQCAtNTQzLDYgKzU0NiwxOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0
aW9uc0FmCiAgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CiB9CiAK
KyNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQmxl
bmRNb2RlKCkKK3sKKyAgICBCbGVuZE1vZGUgbmV3QmxlbmRNb2RlID0gcmVuZGVyZXIoKS0+c3R5
bGUoKS0+YmxlbmRNb2RlKCk7CisgICAgaWYgKG5ld0JsZW5kTW9kZSAhPSBtX2JsZW5kTW9kZSkg
eworICAgICAgICBtX2JsZW5kTW9kZSA9IG5ld0JsZW5kTW9kZTsKKyAgICAgICAgaWYgKGJhY2tp
bmcoKSkKKyAgICAgICAgICAgIGJhY2tpbmcoKS0+c2V0QmxlbmRNb2RlKG5ld0JsZW5kTW9kZSk7
CisgICAgfQorfQorI2VuZGlmCisKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVRyYW5zZm9ybSgp
CiB7CiAgICAgLy8gaGFzVHJhbnNmb3JtKCkgb24gdGhlIHJlbmRlcmVyIGlzIGFsc28gdHJ1ZSB3
aGVuIHRoZXJlIGlzIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Qgb3IgcGVyc3BlY3RpdmUg
c2V0LApAQCAtNDQyMSw2ICs0NDM2LDkgQEAgUmVuZGVyTGF5ZXJCYWNraW5nKiBSZW5kZXJMYXll
cjo6ZW5zdXJlQgogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICAgICAgdXBkYXRlT3JSZW1v
dmVGaWx0ZXJFZmZlY3QoKTsKICNlbmRpZgorI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCisg
ICAgICAgIGJhY2tpbmcoKS0+c2V0QmxlbmRNb2RlKG1fYmxlbmRNb2RlKTsKKyNlbmRpZgogICAg
IH0KICAgICByZXR1cm4gbV9iYWNraW5nLmdldCgpOwogfQpAQCAtNDgwNyw2ICs0ODI1LDkgQEAg
Ym9vbCBSZW5kZXJMYXllcjo6c2hvdWxkQmVOb3JtYWxGbG93T25seQogI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKICAgICAgICAgICAgICYmICFyZW5kZXJlcigpLT5oYXNGaWx0ZXIoKQogI2VuZGlm
CisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICAgICAgICAgICYmICFyZW5kZXJlcigp
LT5oYXNCbGVuZE1vZGUoKQorI2VuZGlmCiAgICAgICAgICAgICAmJiAhaXNUcmFuc3BhcmVudCgp
CiAgICAgICAgICAgICAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKIH0KQEAgLTQ5NjAs
NiArNDk4MSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmYKIAog
ICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwogICAgIHVwZGF0ZVRyYW5zZm9y
bSgpOworI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCisgICAgdXBkYXRlQmxlbmRNb2RlKCk7
CisjZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAoY29t
cG9zaXRvcigpLT51cGRhdGVMYXllckNvbXBvc2l0aW5nU3RhdGUodGhpcykpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gMTI2OTM3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYx
Myw2ICs2MTMsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRmlsdGVyKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICBi
b29sIGhhc0JsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCktPmhhc0JsZW5kTW9k
ZSgpOyB9CisjZWxzZQorICAgIGJvb2wgaGFzQmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyNlbmRpZgorCiAgICAgLy8gT3ZlcmxvYWRlZCBuZXcgb3BlcmF0b3IuIERlcml2ZWQg
Y2xhc3NlcyBtdXN0IG92ZXJyaWRlIG9wZXJhdG9yIG5ldwogICAgIC8vIGluIG9yZGVyIHRvIGFs
bG9jYXRlIG91dCBvZiB0aGUgUmVuZGVyQXJlbmEuCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNp
emVfdCwgUmVuZGVyQXJlbmEqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ0NSw3ICsxNDQ1LDggQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
cXVpcmVzQ29tcAogICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKHJl
bmRlcmVyKQogICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yRmlsdGVycyhyZW5kZXJl
cikKICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKHJlbmRlcmVyLCBs
YXllcikKLSAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsaW5n
KGxheWVyKTsKKyAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xs
aW5nKGxheWVyKQorICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yQmxlbmRpbmcocmVu
ZGVyZXIpOwogfQogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FuQmVDb21wb3NpdGVk
KGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikgY29uc3QKQEAgLTE0NzMsNiArMTQ3NCw3IEBAIGJv
b2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc093bkIKICAgICAgICAgfHwgKGNhblJl
bmRlcjNEVHJhbnNmb3JtcygpICYmIHJlbmRlcmVyLT5zdHlsZSgpLT5iYWNrZmFjZVZpc2liaWxp
dHkoKSA9PSBCYWNrZmFjZVZpc2liaWxpdHlIaWRkZW4pCiAgICAgICAgIHx8IHJlcXVpcmVzQ29t
cG9zaXRpbmdGb3JBbmltYXRpb24ocmVuZGVyZXIpCiAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9z
aXRpbmdGb3JGaWx0ZXJzKHJlbmRlcmVyKQorICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5n
Rm9yQmxlbmRpbmcocmVuZGVyZXIpCiAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQ
b3NpdGlvbihyZW5kZXJlciwgbGF5ZXIpCiAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdG
b3JPdmVyZmxvd1Njcm9sbGluZyhsYXllcikKICAgICAgICAgfHwgcmVuZGVyZXItPmlzVHJhbnNw
YXJlbnQoKQpAQCAtMTU1OSw2ICsxNTYxLDkgQEAgY29uc3QgY2hhciogUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpyZWFzbwogCiAgICAgICAgIGlmIChyZW5kZXJlci0+aGFzRmlsdGVyKCkpCiAgICAg
ICAgICAgICByZXR1cm4gImZpbHRlciB3aXRoIGNvbXBvc2l0ZWQgZGVzY2VuZGFudHMiOworICAg
ICAgICAgICAgCisgICAgICAgIGlmIChyZW5kZXJlci0+aGFzQmxlbmRNb2RlKCkpCisgICAgICAg
ICAgICByZXR1cm4gImJsZW5kaW5nIHdpdGggY29tcG9zaXRlZCBkZXNjZW5kYW50cyI7CiAgICAg
fQogCiAgICAgaWYgKGxheWVyLT5pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKCkgPT0gUmVuZGVy
TGF5ZXI6OkluZGlyZWN0Q29tcG9zaXRpbmdGb3JQZXJzcGVjdGl2ZSkKQEAgLTE3NzEsNyArMTc3
Niw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXAKIAogICAgIC8v
IFdoZW4gYSBsYXllciBoYXMgY29tcG9zaXRlZCBkZXNjZW5kYW50cywgc29tZSBlZmZlY3RzLCBs
aWtlIDJkIHRyYW5zZm9ybXMsIGZpbHRlcnMsIG1hc2tzIGV0YyBtdXN0IGJlIGltcGxlbWVudGVk
CiAgICAgLy8gdmlhIGNvbXBvc2l0aW5nIHNvIHRoYXQgdGhleSBhbHNvIGFwcGx5IHRvIHRob3Nl
IGNvbXBvc2l0ZWQgZGVzY2RlbmRhbnRzLgotICAgIGlmIChoYXNDb21wb3NpdGVkRGVzY2VuZGFu
dHMgJiYgKGxheWVyLT50cmFuc2Zvcm0oKSB8fCByZW5kZXJlci0+aXNUcmFuc3BhcmVudCgpIHx8
IHJlbmRlcmVyLT5oYXNNYXNrKCkgfHwgcmVuZGVyZXItPmhhc1JlZmxlY3Rpb24oKSB8fCByZW5k
ZXJlci0+aGFzRmlsdGVyKCkpKSB7CisgICAgaWYgKGhhc0NvbXBvc2l0ZWREZXNjZW5kYW50cyAm
JiAobGF5ZXItPnRyYW5zZm9ybSgpIHx8IHJlbmRlcmVyLT5jcmVhdGVzR3JvdXAoKSB8fCByZW5k
ZXJlci0+aGFzUmVmbGVjdGlvbigpKSkgewogICAgICAgICByZWFzb24gPSBSZW5kZXJMYXllcjo6
SW5kaXJlY3RDb21wb3NpdGluZ0ZvckdyYXBoaWNhbEVmZmVjdDsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQpAQCAtMTgwNyw2ICsxODEyLDE2IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpyZXF1aXJlc0NvbXAKICNlbmRpZgogfQogCitib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckJsZW5kaW5nKFJlbmRlck9iamVjdCogcmVuZGVyZXIp
IGNvbnN0Cit7CisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICByZXR1cm4gcmVuZGVy
ZXItPmhhc0JsZW5kTW9kZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVuZGVyZXIpOwor
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIs
IGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikgY29uc3QKIHsKICAgICAvLyBwb3NpdGlvbjpmaXhl
ZCBlbGVtZW50cyB0aGF0IGNyZWF0ZSB0aGVpciBvd24gc3RhY2tpbmcgY29udGV4dCAoZS5nLiBo
YXZlIGFuIGV4cGxpY2l0IHotaW5kZXgsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5MCw2ICsyOTAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVxdWlyZXNDb21wb3Np
dGluZ0ZvclBsdWdpbihSZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzQ29t
cG9zaXRpbmdGb3JGcmFtZShSZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVz
Q29tcG9zaXRpbmdGb3JGaWx0ZXJzKFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIGJvb2wgcmVx
dWlyZXNDb21wb3NpdGluZ0ZvckJsZW5kaW5nKFJlbmRlck9iamVjdCogcmVuZGVyZXIpIGNvbnN0
OwogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclNjcm9sbGFibGVGcmFtZSgpIGNvbnN0
OwogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlckxheWVyKikgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5n
Rm9yT3ZlcmZsb3dTY3JvbGxpbmcoY29uc3QgUmVuZGVyTGF5ZXIqKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDEyNjkzNykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTY4LDYgKzU2OCwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNGaWx0ZXIoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQor
ICAgIGJvb2wgaGFzQmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKSAmJiBzdHlsZSgp
LT5oYXNCbGVuZE1vZGUoKTsgfQorI2Vsc2UKKyAgICBib29sIGhhc0JsZW5kTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKKwogICAgIGlubGluZSBib29sIHByZXNlcnZlc05l
d2xpbmUoKSBjb25zdDsKIAogICAgIC8vIFRoZSBwc2V1ZG8gZWxlbWVudCBzdHlsZSBjYW4gYmUg
Y2FjaGVkIG9yIHVuY2FjaGVkLiAgVXNlIHRoZSBjYWNoZWQgbWV0aG9kIGlmIHRoZSBwc2V1ZG8g
ZWxlbWVudCBkb2Vzbid0IHJlc3BlY3QKQEAgLTkwNiw2ICs5MTIsOSBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBzaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCog
Y29udGFpbmVyKSBjb25zdDsKICAgICB2b2lkIGdldFRyYW5zZm9ybUZyb21Db250YWluZXIoY29u
c3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIGNvbnN0IExheW91dFNpemUmIG9mZnNldEluQ29u
dGFpbmVyLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0OwogICAgIAorICAgIC8vIHJldHVy
biB0cnVlIGlmIHRoaXMgb2JqZWN0IHJlcXVpcmVzIGEgbmV3IHN0YWNraW5nIGNvbnRleHQKKyAg
ICBib29sIGNyZWF0ZXNHcm91cCgpIGNvbnN0IHsgcmV0dXJuIGlzVHJhbnNwYXJlbnQoKSB8fCBo
YXNNYXNrKCkgfHwgaGFzRmlsdGVyKCkgfHwgaGFzQmxlbmRNb2RlKCk7IH0gCisgICAgCiAgICAg
dmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExh
eW91dFBvaW50JikgeyB9OwogCiAgICAgTGF5b3V0UmVjdCBhYnNvbHV0ZU91dGxpbmVCb3VuZHMo
KSBjb25zdApAQCAtOTMzLDcgKzk0Miw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50Rm9j
dXNSaW5nKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFBvaW50JiwgUmVuZGVyU3R5bGUq
KTsKICAgICB2b2lkIHBhaW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRS
ZWN0Jik7CiAgICAgdm9pZCBhZGRQREZVUkxSZWN0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExh
eW91dFJlY3QmKTsKLQorICAgIAogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCB2aWV3UmVjdCgpIGNv
bnN0OwogCiAgICAgdm9pZCBhZGp1c3RSZWN0Rm9yT3V0bGluZUFuZFNoYWRvdyhMYXlvdXRSZWN0
JikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cu
aAkocmV2aXNpb24gMTI2OTM3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlUm93LmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBI
aXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGlzVHJhbnNwYXJl
bnQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSB8fCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNIaWRkZW5C
YWNrZmFjZSgpIHx8IGhhc01hc2soKSB8fCBoYXNGaWx0ZXIoKTsgfQorICAgIHZpcnR1YWwgYm9v
bCByZXF1aXJlc0xheWVyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gaGFzT3ZlcmZsb3dDbGlw
KCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzSGlkZGVuQmFja2ZhY2UoKSB8fCBjcmVhdGVzR3Jv
dXAoKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91
dFBvaW50Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5oCShyZXZpc2lvbiAxMjY5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTkwLDcgKzk5MCw3IEBAIHB1
YmxpYzoKICNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQogICAgIEJsZW5kTW9kZSBibGVuZE1v
ZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxCbGVuZE1vZGU+KHJhcmVOb25Jbmhlcml0
ZWREYXRhLT5tX2VmZmVjdGl2ZUJsZW5kTW9kZSk7IH0KICAgICB2b2lkIHNldEJsZW5kTW9kZShC
bGVuZE1vZGUgdikgeyByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9lZmZlY3RpdmVC
bGVuZE1vZGUgPSB2OyB9Ci0gICAgYm9vbCBoYXNCbGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxCbGVuZE1vZGU+KHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2VmZmVjdGl2ZUJs
ZW5kTW9kZSkgPT0gQmxlbmRNb2RlTm9ybWFsOyB9CisgICAgYm9vbCBoYXNCbGVuZE1vZGUoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxCbGVuZE1vZGU+KHJhcmVOb25Jbmhlcml0ZWREYXRh
LT5tX2VmZmVjdGl2ZUJsZW5kTW9kZSkgIT0gQmxlbmRNb2RlTm9ybWFsOyB9CiAjZWxzZQogICAg
IGJvb2wgaGFzQmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTI3MDY1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDgtMjkgIFJpayBDYWJhbmllciAgPGNhYmFu
aWVyQGFkb2JlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgYmxlbmRtb2RlIHRvIHdl
YmtpdCByZW5kZXJpbmcgZW5naW5lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NTI1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEVuYWJsZSB0ZXN0IHRvIHZlcmlmeSB0aGF0IGJsZW5kaW5nIG1vZGVzIGlu
dHJvZHVjZSBhIG5ldyBjb21wb3NpdGluZyBsYXllcgorCisgICAgICAgICogY3NzMy9jb21wb3Np
dGluZy9yZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIGNzczMvY29tcG9zaXRpbmcvcmVzb3Vy
Y2VzL3JlZmVyZW5jZS5wbmc6IEFkZGVkLgorICAgICAgICAqIGNzczMvY29tcG9zaXRpbmcvc2hv
dWxkLWhhdmUtY29tcG9zaXRpbmctbGF5ZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBjc3MzL2NvbXBvc2l0aW5nL3Nob3VsZC1oYXZlLWNvbXBvc2l0aW5nLWxheWVyLmh0bWw6IEFk
ZGVkLgorCiAyMDEyLTA4LTI5ICBQaGlsaXAgUm9nZXJzICA8cGRyQGdvb2dsZS5jb20+CiAKICAg
ICAgICBVbnJldmlld2VkIHJlYmFzZWxpbmUgYWZ0ZXIgcjEyNzAzNQpJbmRleDogTGF5b3V0VGVz
dHMvY3NzMy9jb21wb3NpdGluZy9zaG91bGQtaGF2ZS1jb21wb3NpdGluZy1sYXllci1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3NzMy9jb21wb3NpdGluZy9zaG91bGQt
aGF2ZS1jb21wb3NpdGluZy1sYXllci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9jc3MzL2NvbXBvc2l0aW5nL3Nob3VsZC1oYXZlLWNvbXBvc2l0aW5nLWxheWVyLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACitUZXN0IHRvIG1ha2Ugc3Vy
ZSBhIGJsZW5kIG1vZGUgY3JlYXRlcyBhIGNvbXBvc2l0aW5nIGxheWVyLiBUZXN0IGlzIHN1Y2Nl
c3NmdWwgb2YgcmVuZGVyIHRyZWUgc2hvd3MgY29tcG9zaXRpbmcKKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK0ZBSUwgbm8gY29tcG9zaXRpbmcgbGF5ZXJzCisKKwpJbmRleDogTGF5
b3V0VGVzdHMvY3NzMy9jb21wb3NpdGluZy9zaG91bGQtaGF2ZS1jb21wb3NpdGluZy1sYXllci5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NzczMvY29tcG9zaXRpbmcvc2hvdWxkLWhh
dmUtY29tcG9zaXRpbmctbGF5ZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Nz
czMvY29tcG9zaXRpbmcvc2hvdWxkLWhhdmUtY29tcG9zaXRpbmctbGF5ZXIuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0Pgor
ICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1Rl
eHQoKTsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gZG9UZXN0KCkKKyAgICB7CisgICAgICAgIGRlc2NyaXB0aW9uKCJUZXN0IHRvIG1h
a2Ugc3VyZSBhIGJsZW5kIG1vZGUgY3JlYXRlcyBhIGNvbXBvc2l0aW5nIGxheWVyLiBUZXN0IGlz
IHN1Y2Nlc3NmdWwgb2YgcmVuZGVyIHRyZWUgc2hvd3MgY29tcG9zaXRpbmciKTsKKyAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAgICB2YXIgbGF5ZXJzID0gdGVzdFJ1
bm5lci5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgICAgIGlmIChsYXllcnMgPT0gIiIpCisg
ICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgibm8gY29tcG9zaXRpbmcgbGF5ZXJzIik7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiY29udGVudCBoYXMgY29t
cG9zaXRpbmcgbGF5ZXJzIik7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
bGF5ZXJ0cmVlIikuaW5uZXJUZXh0ID0gbGF5ZXJzOworICAgICAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgd2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoJ2xvYWQnLCBkb1Rlc3QsIGZhbHNlKTsKKworPC9zY3JpcHQ+Cis8aW1nIHN0eWxl
PSItd2Via2l0LWJsZW5kLW1vZGU6IG11bHRpcGx5OyIgc3JjPSJyZXNvdXJjZXMvcmVmZXJlbmNl
LnBuZyI+Cis8cHJlIGlkPSJsYXllcnRyZWUiPjwvcHJlPgpJbmRleDogTGF5b3V0VGVzdHMvY3Nz
My9jb21wb3NpdGluZy9yZXNvdXJjZXMvcmVmZXJlbmNlLnBuZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBk
aXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9j
c3MzL2NvbXBvc2l0aW5nL3Jlc291cmNlcy9yZWZlcmVuY2UucG5nCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dn
b0FBQUFOU1VoRVVnQUFBS0FBQUFCYUNBWUFBQUEveGwxU0FBQUtRMmxEUTFCSlEwTWdjSEp2Wm1s
c1pRQUFlTnFkClUzZFlrL2NXUHQvM1pROVdRdGp3c1pkc2dRQWlJNndJeUJCWm9oQ1NBR0dFRUJK
QXhZV0lDbFlVRlJHY1NGWEVndFVLU0oySTRxQW8KdUdkQmlvaGFpMVZjT080ZjNLZTFmWHJ2N2Uz
NzEvdTg1NXpuL001NXp3K0FFUklta2VhaWFnQTVVb1U4T3RnZmowOUl4TW05Z0FJVgpTT0FFSUJE
bXk4Sm5CY1VBQVBBRGVYaCtkTEEvL0FHdmJ3QUNBSERWTGlRU3grSC9nN3BRSmxjQUlKRUE0Q0lT
NXdzQmtGSUF5QzVVCnlCUUF5QmdBc0ZPelpBb0FsQUFBYkhsOFFpSUFxZzBBN1BSSlBnVUEyS21U
M0JjQTJLSWNxUWdBalFFQW1TaEhKQUpBdXdCZ1ZZRlMKTEFMQXdnQ2dyRUFpTGdUQXJnR0FXYll5
UndLQXZRVUFkbzVZa0E5QVlBQ0FtVUlzekFBZ09BSUFReDRUelFNZ1RBT2dNTksvNEtsZgpjSVc0
U0FFQXdNdVZ6WmRMMGpNVXVKWFFHbmZ5OE9EaUllTENiTEZDWVJjcEVHWUo1Q0tjbDVzakUwam5B
MHpPREFBQUd2blJ3ZjQ0ClA1RG41dVRoNW1ibmJPLzB4YUwrYS9CdklqNGg4ZC8rdkl3Q0JBQVFU
cy92MmwvbDVkWURjTWNCc0hXL2E2bGJBTnBXQUdqZitWMHoKMndtZ1dnclFldm1MZVRqOFFCNmVv
VkRJUEIwY0Nnc0w3U1Zpb2IwdzQ0cysvelBoYitDTGZ2YjhRQjcrMjNyd0FIR2FRSm10d0tPRAov
WEZoYm5hdVVvN255d1JDTVc3MzV5UCt4NFYvL1k0cDBlSTBzVndzRllyeFdJbTRVQ0pOeDNtNVVw
RkVJY21WNGhMcGZ6THhINWI5CkNaTjNEUUNzaGsvQVRyWUh0Y3Rzd0g3dUFRS0xEbGpTZGdCQWZ2
TXRqQm9Ma1FBUVp6UXllZmNBQUpPLytZOUFLd0VBelplazR3QUEKdk9nWVhLaVVGMHpHQ0FBQVJL
Q0JLckJCQnd6QkZLekFEcHpCSGJ6QUZ3SmhCa1JBRENUQVBCQkNCdVNBSEFxaEdKWkJHVlRBT3Rn
RQp0YkFER3FBUm11RVF0TUV4T0EzbjRCSmNnZXR3RndaZ0dKN0NHTHlHQ1FSQnlBZ1RZU0U2aUJG
aWp0Z2l6Z2dYbVk0RUltRklOSktBCnBDRHBpQlJSSXNYSWNxUUNxVUpxa1YxSUkvSXRjaFE1alZ4
QStwRGJ5Q0F5aXZ5S3ZFY3hsSUd5VVFQVUFuVkF1YWdmR29yR29IUFIKZERRUFhZQ1dvbXZSR3JR
ZVBZQzJvcWZSUytoMWRBQjlpbzVqZ05FeERtYU0yV0ZjaklkRllJbFlHaWJIRm1QbFdEVldqelZq
SFZnMwpkaFVid0o1aDd3Z2tBb3VBRSt3SVhvUVF3bXlDa0pCSFdFeFlRNmdsN0NPMEVyb0lWd21E
aERIQ0p5S1RxRSswSlhvUytjUjRZanF4CmtGaEdyQ2J1SVI0aG5pVmVKdzRUWDVOSUpBN0prdVJP
Q2lFbGtESkpDMGxyU050SUxhUlRwRDdTRUdtY1RDYnJrRzNKM3VRSXNvQ3MKSUplUnQ1QVBrRStT
KzhuRDVMY1VPc1dJNGt3Sm9pUlNwSlFTU2pWbFArVUVwWjh5UXBtZ3FsSE5xWjdVQ0txSU9wOWFT
VzJnZGxBdgpVNGVwRXpSMW1pWE5teFpEeTZRdG85WFFtbWxuYWZkb0wrbDB1Z25kZ3g1Rmw5Q1gw
bXZvQitubjZZUDBkd3dOaGcyRHgwaGlLQmxyCkdYc1pweGkzR1MrWlRLWUYwNWVaeUZRdzF6SWJt
V2VZRDVodlZWZ3E5aXA4RlpIS0VwVTZsVmFWZnBYbnFsUlZjMVUvMVhtcUMxU3IKVlErclhsWjlw
a1pWczFEanFRblVGcXZWcVIxVnU2azJyczVTZDFLUFVNOVJYNk8rWC8yQyttTU5zb2FGUnFDR1NL
TlVZN2ZHR1kwaApGc1l5WmZGWVF0WnlWZ1ByTEd1WVRXSmJzdm5zVEhZRit4dDJMM3RNVTBOenFt
YXNacEZtbmVaeHpRRU94ckhnOERuWm5Fck9JYzROCnpuc3RBeTAvTGJIV2FxMW1yWDZ0TjlwNjJy
N2FZdTF5N1JidDY5cnZkWENkUUowc25mVTZiVHIzZFFtNk5ycFJ1b1c2MjNYUDZqN1QKWSt0NTZR
bjF5dlVPNmQzUlIvVnQ5S1AxRitydjF1L1JIemN3TkFnMmtCbHNNVGhqOE15UVkraHJtR200MGZD
RTRhZ1J5Mmk2a2NSbwpvOUZKb3llNEp1NkhaK00xZUJjK1pxeHZIR0tzTk41bDNHczhZV0pwTXR1
a3hLVEY1TDRwelpScm1tYTYwYlRUZE16TXlDemNyTmlzCnlleU9PZFdjYTU1aHZ0bTgyL3lOaGFW
Rm5NVktpemFMeDViYWxuekxCWlpObHZlc21GWStWbmxXOVZiWHJFbldYT3NzNjIzV1YyeFEKRzFl
YkRKczZtOHUycUsyYnJjUjJtMjNmRk9JVWp5blNLZlZUYnRveDdQenNDdXlhN0FidE9mWmg5aVgy
YmZiUEhjd2NFaDNXTzNRNwpmSEowZGN4MmJIQzg2NlRoTk1PcHhLbkQ2VmRuRzJlaGM1M3pOUmVt
UzVETEVwZDJseGRUYmFlS3AyNmZlc3VWNVJydXV0SzEwL1dqCm03dWIzSzNaYmRUZHpEM0ZmYXY3
VFM2Ykc4bGR3ejN2UWZUdzkxamljY3pqbmFlYnA4THprT2N2WG5aZVdWNzd2UjVQczV3bW50WXcK
YmNqYnhGdmd2Y3Q3WURvK1BXWDZ6dWtEUHNZK0FwOTZuNGUrcHI0aTN6MitJMzdXZnBsK0IveWUr
enY2eS8yUCtML2hlZklXOFU0RgpZQUhCQWVVQnZZRWFnYk1EYXdNZkJKa0VwUWMxQlkwRnV3WXZE
RDRWUWd3SkRWa2ZjcE52d0JmeUcvbGpNOXhuTEpyUkZjb0luUlZhCkcvb3d6Q1pNSHRZUmpvYlBD
TjhRZm0rbStVenB6TFlJaU9CSGJJaTRIMmtabVJmNWZSUXBLaktxTHVwUnRGTjBjWFQzTE5hczVG
bjcKWjcyTzhZK3BqTGs3MjJxMmNuWm5yR3BzVW14ajdKdTRnTGlxdUlGNGgvaEY4WmNTZEJNa0Nl
Mko1TVRZeEQySjQzTUM1MnlhTTV6awptbFNXZEdPdTVkeWl1UmZtNmM3TG5uYzhXVFZaa0h3NGha
Z1NsN0kvNVlNZ1FsQXZHRS9scDI1TkhSUHloSnVGVDBXK29vMmlVYkczCnVFbzhrdWFkVnBYMk9O
MDdmVVA2YUlaUFJuWEdNd2xQVWl0NWtSbVN1U1B6VFZaRTF0NnN6OWx4MlMwNWxKeVVuS05TRFdt
V3RDdlgKTUxjb3QwOW1LeXVURGVSNTVtM0tHNU9IeXZma0kvbHo4OXNWYklWTTBhTzBVcTVRRGha
TUw2Z3JlRnNZVzNpNFNMMUlXdFF6MzJiKwo2dmtqQzRJV2ZMMlFzRkM0c0xQWXVIaFo4ZUFpdjBX
N0ZpT0xVeGQzTGpGZFVycGtlR253MG4zTGFNdXlsdjFRNGxoU1ZmSnFlZHp5CmpsS0QwcVdsUXl1
Q1Z6U1ZxWlRKeTI2dTlGcTVZeFZobFdSVjcycVgxVnRXZnlvWGxWK3NjS3lvcnZpd1Jyam00bGRP
WDlWODlYbHQKMnRyZVNyZks3ZXRJNjZUcmJxejNXYit2U3IxcVFkWFFodkFOclJ2eGplVWJYMjFL
M25TaGVtcjFqczIwemNyTkF6VmhOZTFiekxhcwoyL0toTnFQMmVwMS9YY3RXL2EycnQ3N1pKdHJX
djkxM2UvTU9neDBWTzk3dmxPeTh0U3Q0VjJ1OVJYMzFidEx1Z3QyUEdtSWJ1ci9tCmZ0MjRSM2RQ
eFo2UGU2VjdCL1pGNyt0cWRHOXMzSysvdjdJSmJWSTJqUjVJT25EbG00QnYycHZ0bW5lMWNGb3FE
c0pCNWNFbjM2WjgKZStOUTZLSE93OXpEemQrWmY3ZjFDT3RJZVN2U09yOTFyQzJqYmFBOW9iM3Y2
SXlqblIxZUhVZSt0LzkrN3pIalkzWEhOWTlYbnFDZApLRDN4K2VTQ2srT25aS2VlblU0L1BkU1oz
SG4zVFB5WmExMVJYYjFuUTgrZVB4ZDA3a3kzWC9mSjg5N25qMTN3dkhEMEl2ZGkyeVczClM2MDly
ajFIZm5EOTRVaXZXMi9yWmZmTDdWYzhyblQwVGVzNzBlL1RmL3Bxd05WejEvalhMbDJmZWIzdnh1
d2J0MjRtM1J5NEpicjEKK0hiMjdSZDNDdTVNM0YxNmozaXYvTDdhL2VvSCtnL3FmN1Qrc1dYQWJl
RDRZTUJnejhOWkQrOE9DWWVlL3BULzA0Zmgwa2ZNUjlVagpSaU9OajUwZkh4c05HcjN5Wk02VDRh
ZXlweFBQeW41Vy8zbnJjNnZuMy8zaSswdlBXUHpZOEF2NWk4Ky9ybm1wODNMdnE2bXZPc2NqCnh4
Kzh6bms5OGFiOHJjN2JmZSs0NzdyZng3MGZtU2o4UVA1UTg5SDZZOGVuMEUvM1B1ZDgvdnd2OTRU
eis0QTVKUkVBQUFBR1lrdEgKUkFEL0FQOEEvNkM5cDVNQUFBQUpjRWhaY3dBQUN4TUFBQXNUQVFD
YW5CZ0FBQUFIZEVsTlJRZmNCQXNYRkJ5b2IybmFBQUFDdWtsRQpRVlI0MnUzZFBXcVVRUUNIOFZs
TmwwMnkyWThicUlWWTZ3bThnZWRJL0VnaFlpVjJKa1JUQ0ZaaUNrOFFyTHlCSUdwalFCdkJRdDNk
CmJMSW1CcEhrOVFyL1lwYUkvSjc2WWQ1ZGVIWUdkcGgzV2swcFRRa1lsWXhoNkkwcWUrUEszbDVs
YjcreWR4QjYwOUQ3R1hxSGxaOTcKcmdCbmlBQWhRQWdRRUNBRUNBZ1FBZ1FFaVArZnVVNlRpVTM0
Ri9qcGozQzhZV1V2M09Kb1JwWEhtNFJldUdYUzdGZjJLbStGcEIyawpXelZtUUZpQ0lVQkFnQkFn
SUVBSUVCQWdCQWpNbEZZcFRiZ1hFdjdsSDU4SytkZFBqNlNuUFNhVnZkcW5SMnFmQ2prS3ZXd3J4
QXdJClN6QUVDQWdRQWdRRUNBRUNBb1FBZ1puU0t1SGJzUmJMWWpSZ3U3UkRiNkhVZk81U1dZcThU
dW1FM25Ma2RVdTNzdGVMdkY3bzlVcy8KOUFhUk40aTk3UHVhQVdFSmhnQUJBVUtBZ0FBaFFFQ0FF
Q0F3VStaU2Nib1lldTF3d0lYUUM1OGJib1NVa3I0T2JMbXkxd3U5N21ubQo5WnU2M2lCOWJ1aGxH
elZtUUZpQ0lVQkFnQkFnSUVBSUVCQWdCQWpNbG5nblpMR1Z2V1dwSGI2TktkNElhV1hlVXVoMVFt
ODU5Y0tmCmNEZjBldWRETHh4dkVJN1hENzFCV0V5NEVXSUdoQ1VZQWdRRUNBRUNBb1FBQVFGQ2dN
QnNhVFZOZGsvSWNKamQ2NUY2bzlHb3FqY2UKajZ0NmUzdlpQU0dUeWFTcXQ3K2YzZjl4Y0pEZHd6
R2RaanRUaDRlSFZiMzB1V1pBV0lJaFFFQ0FFQ0FnUUFnUUVDQUVDTXlVdWNIVgpUTng0a3gwYWVC
QWVNMW4vbkwyMTZlRXdPNXp4NkV2MlBWN3Nacis1elEvWmVQYy9aWjl2YTNvY2VmZmUvWW04N2Jl
L0krL3V4NVBJCmUvcitWK1N0ZmMzR2V4WmUxRzRHaENVWUFnUUVDQUVDQW9RQUFRRkNnTUJNbWR1
NXNoYUpMeTl2Uk43SlVUYmV4ZFgxeUx0K2ZDZnkKVnByczgrME1iMFhlOXZ4bTVIMi9jRHZ5dXBk
ZVJkNjFvNXVSZDJQK2NlUzkvcllTZWMvTFZ1VHRsdFV3clNkbVFGaUNBUUZDZ0lBQQpJVUJBZ0JB
Z0lFQ2NQWDhCelphdkhBODdvbEFBQUFBQVNVVk9SSzVDWUlJPQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>