<?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>162878</bug_id>
          
          <creation_ts>2016-10-03 13:42:34 -0700</creation_ts>
          <short_desc>Add preliminary support for extended colors to WebCore::Color</short_desc>
          <delta_ts>2016-10-12 18:17:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1235891</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-03 13:42:34 -0700</bug_when>
    <thetext>Add preliminary support for extended colors to WebCore::Color</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235892</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-10-03 13:44:55 -0700</bug_when>
    <thetext>&lt;rdar://problem/28596413&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235913</commentid>
    <comment_count>2</comment_count>
      <attachid>290521</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-03 14:33:19 -0700</bug_when>
    <thetext>Created attachment 290521
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235920</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-03 14:36:01 -0700</bug_when>
    <thetext>Attachment 290521 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/ExtendedColor.h:34:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/ExtendedColor.h:34:  The parameter name &quot;colorSpace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235939</commentid>
    <comment_count>4</comment_count>
      <attachid>290527</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-03 15:14:54 -0700</bug_when>
    <thetext>Created attachment 290527
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235941</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-03 15:16:59 -0700</bug_when>
    <thetext>Attachment 290527 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/ExtendedColor.h:34:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/ExtendedColor.h:34:  The parameter name &quot;colorSpace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235954</commentid>
    <comment_count>6</comment_count>
      <attachid>290530</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-03 15:41:41 -0700</bug_when>
    <thetext>Created attachment 290530
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235956</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-03 15:45:04 -0700</bug_when>
    <thetext>Attachment 290530 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/ExtendedColor.h:34:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/ExtendedColor.h:34:  The parameter name &quot;colorSpace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235961</commentid>
    <comment_count>8</comment_count>
      <attachid>290527</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-10-03 15:52:19 -0700</bug_when>
    <thetext>Comment on attachment 290527
Patch

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

&gt; Source/WebCore/platform/graphics/Color.cpp:620
&gt; +    if (!isExtended())
&gt; +        return nullptr;
&gt; +    return m_extendedColor;

A common pattern in our code is to make these asFoo() functions ASSERT that the condition is true (e.g. ASSERT(isExtended()).  There can be good reasons to not do that (for instance, combining null checks for perf reasons). Was this intentional?

&gt; Source/WebCore/platform/graphics/ExtendedColor.cpp:36
&gt; +    ExtendedColor* color = new ExtendedColor(r, g, b, a, colorSpace);
&gt; +    return color;

This could be on one line.

&gt; Source/WebCore/platform/graphics/ExtendedColor.h:32
&gt; +class ExtendedColor {

Can this be RefCounted?

&gt; Source/WebCore/platform/graphics/ExtendedColor.h:34
&gt; +    static ExtendedColor* create(float r, float g, float b, float a, const ColorSpace&amp; colorSpace = ColorSpace::ColorSpaceSRGB);

This should return a Ref&lt;ExtendedColor&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235985</commentid>
    <comment_count>9</comment_count>
      <attachid>290535</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-03 16:27:09 -0700</bug_when>
    <thetext>Created attachment 290535
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235988</commentid>
    <comment_count>10</comment_count>
      <attachid>290527</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-03 16:28:02 -0700</bug_when>
    <thetext>Comment on attachment 290527
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/Color.cpp:620
&gt;&gt; +    return m_extendedColor;
&gt; 
&gt; A common pattern in our code is to make these asFoo() functions ASSERT that the condition is true (e.g. ASSERT(isExtended()).  There can be good reasons to not do that (for instance, combining null checks for perf reasons). Was this intentional?

Nope. Added the ASSERT.

&gt;&gt; Source/WebCore/platform/graphics/ExtendedColor.cpp:36
&gt;&gt; +    return color;
&gt; 
&gt; This could be on one line.

Done.

&gt;&gt; Source/WebCore/platform/graphics/ExtendedColor.h:32
&gt;&gt; +class ExtendedColor {
&gt; 
&gt; Can this be RefCounted?

Done.

&gt;&gt; Source/WebCore/platform/graphics/ExtendedColor.h:34
&gt;&gt; +    static ExtendedColor* create(float r, float g, float b, float a, const ColorSpace&amp; colorSpace = ColorSpace::ColorSpaceSRGB);
&gt; 
&gt; This should return a Ref&lt;ExtendedColor&gt;.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235991</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-03 16:37:19 -0700</bug_when>
    <thetext>Attachment 290535 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/ExtendedColor.h:37:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/ExtendedColor.h:37:  The parameter name &quot;colorSpace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236008</commentid>
    <comment_count>12</comment_count>
      <attachid>290535</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-03 17:39:16 -0700</bug_when>
    <thetext>Comment on attachment 290535
Patch

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

&gt; Source/WebCore/platform/graphics/Color.cpp:275
&gt; +    m_rgbaAndFlags = other.m_rgbaAndFlags;
&gt; +    if (isExtended())
&gt; +        m_extendedColor-&gt;ref();

It&apos;s a little confusing that assigning to m_rgbaAndFlags also updates m_extendedColor (because unions). Can you name the union, and just copy via its name?

&gt; Source/WebCore/platform/graphics/Color.cpp:604
&gt; +void Color::setExtended()

I think this would read better as setIsExtended

&gt; Source/WebCore/platform/graphics/Color.h:179
&gt; +    int red() const { return redChannel(rgb()); }
&gt; +    int green() const { return greenChannel(rgb()); }
&gt; +    int blue() const { return blueChannel(rgb()); }
&gt; +    int alpha() const { return alphaChannel(rgb()); }

Should these assert if it&apos;s an extended color? Now they&apos;ll return garbage.

&gt; Source/WebCore/platform/graphics/Color.h:185
&gt; +        m_rgbaAndFlags = (static_cast&lt;uint64_t&gt;(rgb) &lt;&lt; 32);

Is it OK that this clobbers any extended color?

&gt; Source/WebCore/platform/graphics/Color.h:252
&gt; +    static const uint64_t extendedColor = 0x0;
&gt; +    static const uint64_t invalidRGBAColor = 0x1;
&gt; +    static const uint64_t validRGBAColorBit = 0x2;
&gt; +    static const uint64_t validRGBAColor = 0x3;

This makes things a bit confusing. How about:

enum {
  rgbaColorBit = 0;
  validColorBit = 1;
};


enum {
  rgbaColorMask = 1 &lt;&lt; rgbaColorBit,
  validColorMask = 1 &lt;&lt; validColorBit

  extendedColorMask = rgbaColorMask | validColorMask
}

bool isExtended() const
{
  return !(m_rgbaAndFlags &amp; extendedColorMask);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236011</commentid>
    <comment_count>13</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-03 17:53:39 -0700</bug_when>
    <thetext>This should be:
  validRgbaColorMask = rgbaColorMask | validColorMask
or something</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237339</commentid>
    <comment_count>14</comment_count>
      <attachid>290521</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-06 14:09:39 -0700</bug_when>
    <thetext>Comment on attachment 290521
Patch

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

&gt; Source/WebCore/platform/graphics/Color.h:145
&gt; +    WEBCORE_EXPORT Color(const Color&amp;);

I suggest implementing the move constructor right from the start even for this first version. It’s a valuable optimization when dealing with a reference counted object to avoid churn.

&gt; Source/WebCore/platform/graphics/Color.h:187
&gt; +    void setRGB(RGBA32 rgb)
&gt; +    {
&gt; +        m_rgbaAndFlags = (static_cast&lt;uint64_t&gt;(rgb) &lt;&lt; 32);
&gt; +        setValid();
&gt; +    }

If this is going to be multi-line then I suggest putting the actual inline body after the class definition instead of having it here. Also, no need for those parentheses, i think.

&gt; Source/WebCore/platform/graphics/Color.h:243
&gt; +    WEBCORE_EXPORT Color&amp; operator=(const Color&amp;);

I suggest implementing the move version of the assignment operator right from the start even for this first version. It’s a valuable optimization when dealing with a reference counted object to avoid churn.

&gt; Source/WebCore/platform/graphics/Color.h:259
&gt; +        uint64_t m_rgbaAndFlags { invalidRGBAColor };
&gt; +        ExtendedColor* m_extendedColor;

Will this do the right thing under 32-bit in both kinds of endian-ness and compiler differences? If I set m_extendedColor, and it’s a 32-bit pointer, what guarantees that the flag bits in m_rgbaAndFlags will be set to 0?

&gt; Source/WebCore/platform/graphics/ExtendedColor.h:32
&gt; +class ExtendedColor {

This class should use the RefCounted template, unless there is a good reason why not to.

&gt; Source/WebCore/platform/graphics/ExtendedColor.h:34
&gt; +    static ExtendedColor* create(float r, float g, float b, float a, const ColorSpace&amp; colorSpace = ColorSpace::ColorSpaceSRGB);

This should return a Ref&lt;ExtendedColor&gt; rather than a raw pointer.

&gt; Source/WebCore/platform/graphics/ExtendedColor.h:43
&gt; +    const ColorSpace&amp; colorSpace() const { return m_colorSpace; }

Since ColorSpace is a scalar, return type can just be ColorSpace instead of a const&amp;.

&gt; Source/WebCore/platform/graphics/ExtendedColor.h:49
&gt; +    ExtendedColor(int r, int g, int b, int a, const ColorSpace&amp; colorSpace)

Seems like these should be float, not int!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239146</commentid>
    <comment_count>15</comment_count>
      <attachid>290521</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-11 20:14:24 -0700</bug_when>
    <thetext>Comment on attachment 290521
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/Color.h:145
&gt;&gt; +    WEBCORE_EXPORT Color(const Color&amp;);
&gt; 
&gt; I suggest implementing the move constructor right from the start even for this first version. It’s a valuable optimization when dealing with a reference counted object to avoid churn.

Done.

&gt;&gt; Source/WebCore/platform/graphics/Color.h:187
&gt;&gt; +    }
&gt; 
&gt; If this is going to be multi-line then I suggest putting the actual inline body after the class definition instead of having it here. Also, no need for those parentheses, i think.

Done.

&gt;&gt; Source/WebCore/platform/graphics/Color.h:259
&gt;&gt; +        ExtendedColor* m_extendedColor;
&gt; 
&gt; Will this do the right thing under 32-bit in both kinds of endian-ness and compiler differences? If I set m_extendedColor, and it’s a 32-bit pointer, what guarantees that the flag bits in m_rgbaAndFlags will be set to 0?

I assumed it would, but I&apos;m not sure. I&apos;ll ask around.

My assumption was that any assignment to (what is now) m_colorData.extendedColor would set the entire 64 bits, even when on a 32-bit device. However, I can probably guarantee this when I assign to extendedColor by first setting rgbaAndFlags to 0. It&apos;s the next patch that starts using the extendedColor part.

&gt;&gt; Source/WebCore/platform/graphics/ExtendedColor.h:32
&gt;&gt; +class ExtendedColor {
&gt; 
&gt; This class should use the RefCounted template, unless there is a good reason why not to.

Yes, sorry. This patch is out of date. It uses RefCounted now.

&gt;&gt; Source/WebCore/platform/graphics/ExtendedColor.h:34
&gt;&gt; +    static ExtendedColor* create(float r, float g, float b, float a, const ColorSpace&amp; colorSpace = ColorSpace::ColorSpaceSRGB);
&gt; 
&gt; This should return a Ref&lt;ExtendedColor&gt; rather than a raw pointer.

Same here.

&gt;&gt; Source/WebCore/platform/graphics/ExtendedColor.h:43
&gt;&gt; +    const ColorSpace&amp; colorSpace() const { return m_colorSpace; }
&gt; 
&gt; Since ColorSpace is a scalar, return type can just be ColorSpace instead of a const&amp;.

Done.

&gt;&gt; Source/WebCore/platform/graphics/ExtendedColor.h:49
&gt;&gt; +    ExtendedColor(int r, int g, int b, int a, const ColorSpace&amp; colorSpace)
&gt; 
&gt; Seems like these should be float, not int!

Yep. This got me for about 10 minutes in a later patch, when I was trying to work out why all my extended colors had 0 or 1 values in each channel :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239147</commentid>
    <comment_count>16</comment_count>
      <attachid>291330</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-11 20:16:49 -0700</bug_when>
    <thetext>Created attachment 291330
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239393</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-12 11:36:10 -0700</bug_when>
    <thetext>Attachment 291330 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/ExtendedColor.h:37:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239612</commentid>
    <comment_count>18</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-12 18:07:27 -0700</bug_when>
    <thetext>(In reply to comment #12)

&gt; This makes things a bit confusing. How about:
&gt; 
&gt; enum {
&gt;   rgbaColorBit = 0;
&gt;   validColorBit = 1;
&gt; };
&gt; 
&gt; 
&gt; enum {
&gt;   rgbaColorMask = 1 &lt;&lt; rgbaColorBit,
&gt;   validColorMask = 1 &lt;&lt; validColorBit
&gt; 
&gt;   extendedColorMask = rgbaColorMask | validColorMask
&gt; }

I tried a version of this and it was equally confusing to read. The problem is that you need versions of 0, 1, 2 and 3.

0 - if the lowest bit is 0, then it is extended color
1 - if the lowest bit is 1, then it is an RGBA32
2 - this is the bit mask used for validity of RGBA32s
3 - if the lowest two bits are 1, then it is a valid RGBA32

I couldn&apos;t come up with a much better way to explain this by name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239616</commentid>
    <comment_count>19</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-10-12 18:17:21 -0700</bug_when>
    <thetext>Committed r207265: &lt;http://trac.webkit.org/changeset/207265&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290521</attachid>
            <date>2016-10-03 14:33:19 -0700</date>
            <delta_ts>2016-10-06 14:09:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162878-20161003143010.patch</filename>
            <type>text/plain</type>
            <size>30609</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2NTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzU4MTUyMTQyNWEyYTQ1
NGYzNjQxYzRhMmE2NWE5MzRjNmVmOTE4YS4uNzNlMzAyNmZkNGRmZTE0MjM2ZjU4YjZkODdmOGVl
YWYxZDFkNTliZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDE2LTEwLTAzICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcHJlbGltaW5hcnkgc3Vw
cG9ydCBmb3IgZXh0ZW5kZWQgY29sb3JzIHRvIFdlYkNvcmU6OkNvbG9yCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI4NzgKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzI4NTk2NDEzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBhbiBFeHRlbmRlZENvbG9yIGNsYXNzIHRoYXQgd2lsbCBob2xkIHRo
ZSBkYXRhIG5lY2Vzc2FyeQorICAgICAgICBmb3Igd2lkZXItdGhhbi1zUkdCIChhbmQgbW9yZSBw
cmVjaXNlKSBjb2xvcnMuIEluIG9yZGVyIHRvCisgICAgICAgIGF2b2lkIGluY3JlYXNpbmcgdGhl
IHNpemUgb2YgQ29sb3IsIGltcGxlbWVudCBhIHRhZ2dlZAorICAgICAgICBwb2ludGVyIHRoYXQg
aXMgZWl0aGVyIHJlZmVyZW5jaW5nIGFuIEV4dGVuZGVkQ29sb3IsIG9yCisgICAgICAgIGlzIGEg
NjQtYml0IG51bWJlciB3aXRoIHRoZSB0b3AgMzItYml0cyBiZWluZyB0aGUgUkdCQSwgYW5kCisg
ICAgICAgIHRoZSBib3R0b20gMiBiaXRzIGluZGljYXRpbmcgYW4gaW52YWxpZCBSR0JBIG9yIGEg
dmFsaWQgUkdCQSwKKyAgICAgICAgcGx1cyB0aGUgdGFnLgorCisgICAgICAgIEFkZCBjb3B5IGNv
bnN0cnVjdG9ycyBhbmQgb3BlcmF0b3I9IHNvIHRoYXQgdGhlIG5ldyBDb2xvciBvYmplY3RzCisg
ICAgICAgIGFyZSBjb3JyZWN0bHkgY29waWVkLgorCisgICAgICAgIFRoZXJlIGlzbid0IHlldCBh
IHdheSB0byBjcmVhdGUgYW4gRXh0ZW5kZWRDb2xvci4gVGhhdCdzIGNvbWluZworICAgICAgICBp
biBhIGZvbGxvd3VwIHBhdGNoIChhbmQgd2lsbCByZXF1aXJlIGNoYW5nZXMgdG8gdGhlIENTUyBw
YXJzZXIpLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMsIGFuZCBuZXcgQVBJ
IHRlc3RzIGluIENvbG9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgbmV3IGZpbGVzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOiBVcGRhdGUgZXZlcnl0aGluZyB0byB1
c2UgbV9yZ2JhQW5kRmxhZ3MKKyAgICAgICAgaW5zdGVhZCBvZiBtX2NvbG9yICsgbV92YWxpZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6fkNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvcj0pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpzZXROYW1lZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjps
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFyayk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6c2V0VmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldEV4dGVuZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0V4dGVuZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjphc0V4dGVuZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5oOiBJbXBsZW1lbnQgdGhlIHRhZ2dlZCB1bmlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNWYWxpZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpncmVlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Ymx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
YWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnJnYik6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6c2V0UkdCKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHA6IE5ldyBmaWxlLiBIb2xk
cyBmbG9hdGluZyBwb2ludAorICAgICAgICByZWQsIGdyZWVuLCBibHVlIGFuZCBhbHBoYSwgcGx1
cyBhIGNvbG9yIHNwYWNlLiBJbXBsZW1lbnRzIHJlZmVyZW5jZQorICAgICAgICBjb3VudGluZyBk
aXJlY3RseS4KKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp+RXh0ZW5kZWRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpyZWYpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRD
b2xvcjo6ZGVyZWYpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbmRlZENvbG9yOjpncmVlbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENv
bG9yOjpibHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmFscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmNvbG9yU3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5kZWRDb2xvcjo6RXh0ZW5kZWRDb2xvcik6CisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDogVXBkYXRlIHRoZSBjb25zdHJ1Y3RvcnMgZm9yCisg
ICAgICAgIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBjb2xvciBjbGFzc2VzLgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29s
b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Q29sb3IpOgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmNwcDogVXNlIE5ldmVyRGVzdHJveWVkLgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZW1l
bnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFj
ZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlbWVu
dFRleHRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjp1bmF2YWlsYWJsZVBsdWdpbkJvcmRlckNv
bG9yKToKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHA6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyU3RhcnRFZGdlQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Ym9yZGVyRW5kRWRnZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmJvcmRlckZpbGxDb2xv
cik6CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDogVGhpcyBncm93
cyBpbiBzaXplIHNsaWdodGx5CisgICAgICAgIGJlY2F1c2UgaXQgY2FuIG5vIGxvbmdlciBwYWNr
IGJpdHMuCisKIDIwMTYtMDktMjcgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFVzZSBDb2xvciByZWZlcmVuY2VzIHdoZXJlIHBvc3NpYmxlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDc4NzdmZWQ4NzgzY2NkM2RiMWRlZTBkYWVjNGJlZGIwNTYwMTUyMTcuLjg2ZmZj
ZGQ2NTFkMGNmZjdhOTVmNmM5MjkyMTY2OTdhNzZiZTYyYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CkBAIC0yMTkyLDYgKzIxOTIsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJh
dGVkSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9y
Q2xpZW50LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50M0QuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDQyZjcyNzhjZjA3ZDM5NjM3NTQwZTY1OGYwZDBkZDE5NTkxN2ZlYmQuLmRlMTYwYTQzZjFl
NWI0ZjRlZDUwMGIxYTAwODUxNDQxODAxNDEwMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNzEsNiArMTM3MSw4IEBACiAJ
CTMxQzQyMjQ2MUQ3NEVCOUEwMEYxMjM0MiAvKiBKU1BlcmZvcm1hbmNlVGltaW5nQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzQyMjQ1
MUQ3NEVCOUEwMEYxMjM0MiAvKiBKU1BlcmZvcm1hbmNlVGltaW5nQ3VzdG9tLmNwcCAqLzsgfTsK
IAkJMzFENTkxQjMxNjY5N0E2QzAwRTZCRjAyIC8qIFBsdWdJbkNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFENTkxQjExNjY5N0E2QzAwRTZC
RjAyIC8qIFBsdWdJbkNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTMxRENEMjlEMUFCNEZCREUwMDcyRTgxNyAvKiBBbmltYXRpb25Ucmln
Z2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMURD
RDI5QzFBQjRGQkRFMDA3MkU4MTcgLyogQW5pbWF0aW9uVHJpZ2dlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTMxRENERjQzMURBMUM0NTQwMEVB
NUI5MyAvKiBFeHRlbmRlZENvbG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxRENERjQxMURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9y
LmNwcCAqLzsgfTsKKwkJMzFEQ0RGNDQxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRENERjQy
MURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzFERUE0NTUxQjM5RjREOTAwRjc3MTc4IC8q
IFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMURFQTQ1MzFCMzlGNEQ5MDBGNzcxNzggLyogV2ViU3lzdGVtQmFj
a2Ryb3BMYXllci5tbSAqLzsgfTsKIAkJMzFERUE0NTYxQjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5
c3RlbUJhY2tkcm9wTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxREVBNDU0MUIzOUY0RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExh
eWVyLmggKi87IH07CiAJCTMxREY2MzU3MUFGMTg3REQwMDc4RkQ5MSAvKiBOU0NvbG9yU1BJLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMURGNjM1NjFB
RjE4N0REMDA3OEZEOTEgLyogTlNDb2xvclNQSS5oICovOyB9OwpAQCAtODMwNyw2ICs4MzA5LDgg
QEAKIAkJMzFDNDIyNDUxRDc0RUI5QTAwRjEyMzQyIC8qIEpTUGVyZm9ybWFuY2VUaW1pbmdDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQZXJmb3JtYW5j
ZVRpbWluZ0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRDU5MUIx
MTY2OTdBNkMwMEU2QkYwMiAvKiBQbHVnSW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGx1Z0luQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxRENEMjlDMUFCNEZCREUwMDcyRTgxNyAvKiBBbmltYXRpb25UcmlnZ2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvblRyaWdnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzFEQ0RGNDExREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29s
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5kZWRDb2xv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxRENERjQyMURBMUM0NTQwMEVB
NUI5MyAvKiBFeHRlbmRlZENvbG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEV4dGVuZGVkQ29sb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFERUE0NTMx
QjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMURFQTQ1NDFCMzlGNEQ5MDBGNzcxNzggLyog
V2ViU3lzdGVtQmFja2Ryb3BMYXllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxREY2MzU2MUFGMTg3REQwMDc4RkQ5MSAvKiBOU0NvbG9yU1BJLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5TQ29sb3JTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIwNjM5LDYgKzIwNjQzLDggQEAKIAkJCQlDRERFMDJFOTE4QjNERkM3MDBDRjdGRjEg
LyogQ0RNU2Vzc2lvbi5oICovLAogCQkJCUIyNzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xv
ci5jcHAgKi8sCiAJCQkJQjI3NTM1MzkwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCisJ
CQkJMzFEQ0RGNDExREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuY3BwICovLAorCQkJ
CTMxRENERjQyMURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmggKi8sCiAJCQkJOTM4
MkRGNTcxMEE4RDVDOTAwOTI1NjUyIC8qIENvbG9yU3BhY2UuaCAqLywKIAkJCQkyRDJGQzA1NDE0
NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJCTJE
MkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5oICovLApA
QCAtMjQ4MTAsNiArMjQ4MTYsNyBAQAogCQkJCTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdBMSAvKiBJ
bWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQyMThC
NkI5QUIwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnRNYWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3Nzk3OTFBMEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTMxRENERjQ0MURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1NTVCODdFRDFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MjA1QUI2MTIzOTI5MTAwMEIxNzM4MCAvKiBJ
bWFnZURvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RDMjEyNTFGMTJEMDAzRUYy
NjkgLyogSW1hZ2VJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzAyNDQsNiArMzAyNTEs
NyBAQAogCQkJCUIyMjI3QUVGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdWaWV3RWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FGMjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVmlld1Nw
ZWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODQ4NTIyOEExMTkwMTczQzAwNkVEQzdGIC8qIFNW
R1ZLZXJuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMURDREY0MzFEQTFDNDU0MDBF
QTVCOTMgLyogRXh0ZW5kZWRDb2xvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FGNTBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHWm9vbUFuZFBhbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MkU0RUM5NzBEMDBDMjJCMDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxODA4MTEyMTZGQ0Y0MkYwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVu
dC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmNwcAppbmRleCA4ZjY4YjE0YTQyMDYwYWJkN2VmNjEwMDU4OGU0YWEwZmU0NmFkODhjLi42
NjZjZTVmNjlkOWE0NDhhNWE1NmM0NDJhYWQ1MzEzZjZlODk4NjZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC0yMjUsMjMgKzIyNSw1NSBAQCBpbnQg
ZGlmZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImIGMxLCBjb25zdCBDb2xvciYgYzIpCiBDb2xv
cjo6Q29sb3IoY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIGlmIChuYW1lWzBdID09ICcjJykg
eworICAgICAgICBSR0JBMzIgY29sb3I7CisgICAgICAgIGJvb2wgdmFsaWQ7CisKICAgICAgICAg
aWYgKG5hbWUuaXM4Qml0KCkpCi0gICAgICAgICAgICBtX3ZhbGlkID0gcGFyc2VIZXhDb2xvcihu
YW1lLmNoYXJhY3RlcnM4KCkgKyAxLCBuYW1lLmxlbmd0aCgpIC0gMSwgbV9jb2xvcik7CisgICAg
ICAgICAgICB2YWxpZCA9IHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpICsgMSwgbmFt
ZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV92YWxp
ZCA9IHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSArIDEsIG5hbWUubGVuZ3RoKCkg
LSAxLCBtX2NvbG9yKTsKKyAgICAgICAgICAgIHZhbGlkID0gcGFyc2VIZXhDb2xvcihuYW1lLmNo
YXJhY3RlcnMxNigpICsgMSwgbmFtZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsKKworICAgICAgICBp
ZiAodmFsaWQpCisgICAgICAgICAgICBzZXRSR0IoY29sb3IpOwogICAgIH0gZWxzZQogICAgICAg
ICBzZXROYW1lZENvbG9yKG5hbWUpOwogfQogCiBDb2xvcjo6Q29sb3IoY29uc3QgY2hhciogbmFt
ZSkKIHsKKyAgICBSR0JBMzIgY29sb3I7CisgICAgYm9vbCB2YWxpZDsKICAgICBpZiAobmFtZVsw
XSA9PSAnIycpCi0gICAgICAgIG1fdmFsaWQgPSBwYXJzZUhleENvbG9yKChTdHJpbmcpJm5hbWVb
MV0sIG1fY29sb3IpOworICAgICAgICB2YWxpZCA9IHBhcnNlSGV4Q29sb3IoKFN0cmluZykmbmFt
ZVsxXSwgY29sb3IpOwogICAgIGVsc2UgewogICAgICAgICBjb25zdCBOYW1lZENvbG9yKiBmb3Vu
ZENvbG9yID0gZmluZENvbG9yKG5hbWUsIHN0cmxlbihuYW1lKSk7Ci0gICAgICAgIG1fY29sb3Ig
PSBmb3VuZENvbG9yID8gZm91bmRDb2xvci0+QVJHQlZhbHVlIDogMDsKLSAgICAgICAgbV92YWxp
ZCA9IGZvdW5kQ29sb3I7CisgICAgICAgIGNvbG9yID0gZm91bmRDb2xvciA/IGZvdW5kQ29sb3It
PkFSR0JWYWx1ZSA6IDA7CisgICAgICAgIHZhbGlkID0gZm91bmRDb2xvcjsKICAgICB9CisKKyAg
ICBpZiAodmFsaWQpCisgICAgICAgIHNldFJHQihjb2xvcik7Cit9CisKK0NvbG9yOjpDb2xvcihj
b25zdCBDb2xvciYgb3RoZXIpCisgICAgOiBtX3JnYmFBbmRGbGFncyhvdGhlci5tX3JnYmFBbmRG
bGFncykKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBtX2V4dGVuZGVkQ29sb3It
PnJlZigpOworfQorCitDb2xvcjo6fkNvbG9yKCkKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQor
ICAgICAgICBtX2V4dGVuZGVkQ29sb3ItPmRlcmVmKCk7Cit9CisKK0NvbG9yJiBDb2xvcjo6b3Bl
cmF0b3I9KGNvbnN0IENvbG9yJiBvdGhlcikKK3sKKyAgICBtX3JnYmFBbmRGbGFncyA9IG90aGVy
Lm1fcmdiYUFuZEZsYWdzOworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAgIG1fZXh0ZW5k
ZWRDb2xvci0+cmVmKCk7CisgICAgcmV0dXJuICp0aGlzOwogfQogCiBTdHJpbmcgQ29sb3I6OnNl
cmlhbGl6ZWQoKSBjb25zdApAQCAtMjkxLDYgKzMyMyw3IEBAIFN0cmluZyBDb2xvcjo6Y3NzVGV4
dCgpIGNvbnN0CiAKIFN0cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBjb25z
dAogeworICAgIC8vIEZJWE1FOiBIYW5kbGUgRXh0ZW5kZWRDb2xvcnMuCiAgICAgaWYgKGFscGhh
KCkgPCAweEZGKQogICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiMlMDJYJTAyWCUwMlgl
MDJYIiwgcmVkKCksIGdyZWVuKCksIGJsdWUoKSwgYWxwaGEoKSk7CiAgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCIjJTAyWCUwMlglMDJYIiwgcmVkKCksIGdyZWVuKCksIGJsdWUoKSk7CkBAIC0z
MTUsMTQgKzM0OCwxNiBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IE5hbWVkQ29sb3IqIGZpbmROYW1l
ZENvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSkKIHZvaWQgQ29sb3I6OnNldE5hbWVkQ29sb3IoY29u
c3QgU3RyaW5nJiBuYW1lKQogewogICAgIGNvbnN0IE5hbWVkQ29sb3IqIGZvdW5kQ29sb3IgPSBm
aW5kTmFtZWRDb2xvcihuYW1lKTsKLSAgICBtX2NvbG9yID0gZm91bmRDb2xvciA/IGZvdW5kQ29s
b3ItPkFSR0JWYWx1ZSA6IDA7Ci0gICAgbV92YWxpZCA9IGZvdW5kQ29sb3I7CisgICAgaWYgKGZv
dW5kQ29sb3IpCisgICAgICAgIHNldFJHQihmb3VuZENvbG9yLT5BUkdCVmFsdWUpOworICAgIGVs
c2UKKyAgICAgICAgbV9yZ2JhQW5kRmxhZ3MgPSBpbnZhbGlkUkdCQUNvbG9yOwogfQogCiBDb2xv
ciBDb2xvcjo6bGlnaHQoKSBjb25zdAogewogICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNh
c2UgZm9yIHNwZWVkLgotICAgIGlmIChtX2NvbG9yID09IGJsYWNrKQorICAgIGlmIChyZ2IoKSA9
PSBibGFjaykKICAgICAgICAgcmV0dXJuIGxpZ2h0ZW5lZEJsYWNrOwogICAgIAogICAgIGNvbnN0
IGZsb2F0IHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOwpAQCAtMzQ3LDcg
KzM4Miw3IEBAIENvbG9yIENvbG9yOjpsaWdodCgpIGNvbnN0CiBDb2xvciBDb2xvcjo6ZGFyaygp
IGNvbnN0CiB7CiAgICAgLy8gSGFyZGNvZGUgdGhpcyBjb21tb24gY2FzZSBmb3Igc3BlZWQuCi0g
ICAgaWYgKG1fY29sb3IgPT0gd2hpdGUpCisgICAgaWYgKHJnYigpID09IHdoaXRlKQogICAgICAg
ICByZXR1cm4gZGFya2VuZWRXaGl0ZTsKICAgICAKICAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3Rv
ciA9IG5leHRhZnRlcmYoMjU2LjBmLCAwLjBmKTsKQEAgLTU2MSw0ICs1OTYsMjggQEAgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3ImIGNvbG9yKQogICAg
IHJldHVybiB0cyA8PCBjb2xvci5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpOwogfQogCit2b2lk
IENvbG9yOjpzZXRWYWxpZCgpCit7CisgICAgbV9yZ2JhQW5kRmxhZ3MgfD0gdmFsaWRSR0JBQ29s
b3I7Cit9CisKK3ZvaWQgQ29sb3I6OnNldEV4dGVuZGVkKCkKK3sKKyAgICAvLyBWYWxpZCBjb2xv
cnMgc2hvdWxkIG5vdCBjaGFuZ2UgdHlwZS4KKyAgICBBU1NFUlQoIWlzVmFsaWQoKSk7CisgICAg
bV9yZ2JhQW5kRmxhZ3MgJj0gfihpbnZhbGlkUkdCQUNvbG9yKTsKK30KKworYm9vbCBDb2xvcjo6
aXNFeHRlbmRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEobV9yZ2JhQW5kRmxhZ3MgJiBpbnZh
bGlkUkdCQUNvbG9yKTsKK30KKworRXh0ZW5kZWRDb2xvciogQ29sb3I6OmFzRXh0ZW5kZWQoKSBj
b25zdAoreworICAgIGlmICghaXNFeHRlbmRlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gbV9leHRlbmRlZENvbG9yOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAppbmRleCA2NTIwMDNhM2M1
YjA5MGNhMWQxODQyNzFlMDBkZWI1OGNlNGZlN2U1Li5kMWRhMThlZWY2Y2QyMzk1NTBhM2U4Mzg5
MjkyMGIzMjk4M2MwZWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmgKQEAgLTIzLDEwICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBD
b2xvcl9oCi0jZGVmaW5lIENvbG9yX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3JT
cGFjZS5oIgorI2luY2x1ZGUgIkV4dGVuZGVkQ29sb3IuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUV4
cG9ydE1hY3Jvcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjbWF0aD4KQEAg
LTEwNSwxOSArMTA1LDQ3IEBAIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSR0JBJiwgY29uc3QgUkdC
QSYpOwogY2xhc3MgQ29sb3IgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIENvbG9yKCkgOiBtX2NvbG9yKDApLCBtX3ZhbGlkKGZhbHNlKSB7IH0KLSAgICBDb2xv
cihSR0JBLCBDb2xvclNwYWNlKTsKKyAgICBDb2xvcigpIHsgfQogCiAgICAgLy8gRklYTUU6IFJl
bW92ZSBhbGwgdGhlc2UgY29uc3RydWN0b3JzIGFuZCBjcmVhdGlvbiBmdW5jdGlvbnMgYW5kIHJl
cGxhY2UgdGhlIG9uZXMgdGhhdCBhcmUgc3RpbGwgbmVlZGVkIHdpdGggZnJlZSBmdW5jdGlvbnMu
Ci0gICAgQ29sb3IoUkdCQTMyIGNvbG9yLCBib29sIHZhbGlkID0gdHJ1ZSkgOiBtX2NvbG9yKGNv
bG9yKSwgbV92YWxpZCh2YWxpZCkgeyBBU1NFUlQoIW1fY29sb3IgfHwgbV92YWxpZCk7IH0KLSAg
ICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiKSA6IG1fY29sb3IobWFrZVJHQihyLCBnLCBiKSks
IG1fdmFsaWQodHJ1ZSkgeyB9Ci0gICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEp
IDogbV9jb2xvcihtYWtlUkdCQShyLCBnLCBiLCBhKSksIG1fdmFsaWQodHJ1ZSkgeyB9Ci0gICAg
Ly8gQ29sb3IgaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8gMzJiaXQgUkdCQSwgcGVyaGFwcyBzb21l
IGRheSB3ZSdsbCBzdXBwb3J0IGJldHRlciBjb2xvcnMKLSAgICBDb2xvcihmbG9hdCByLCBmbG9h
dCBnLCBmbG9hdCBiLCBmbG9hdCBhKSA6IG1fY29sb3IobWFrZVJHQkEzMkZyb21GbG9hdHMociwg
ZywgYiwgYSkpLCBtX3ZhbGlkKHRydWUpIHsgfQorCisgICAgQ29sb3IoUkdCQTMyIGNvbG9yLCBi
b29sIHZhbGlkID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAg
IHNldFJHQihjb2xvcik7CisgICAgfQorCisgICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYikK
KyAgICB7CisgICAgICAgIHNldFJHQihyLCBnLCBiKTsKKyAgICB9CisKKyAgICBDb2xvcihpbnQg
ciwgaW50IGcsIGludCBiLCBpbnQgYSkKKyAgICB7CisgICAgICAgIHNldFJHQihtYWtlUkdCQShy
LCBnLCBiLCBhKSk7CisgICAgfQorCisgICAgQ29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQg
YiwgZmxvYXQgYSkKKyAgICB7CisgICAgICAgIHNldFJHQihtYWtlUkdCQTMyRnJvbUZsb2F0cyhy
LCBnLCBiLCBhKSk7CisgICAgfQorCiAgICAgLy8gQ3JlYXRlcyBhIG5ldyBjb2xvciBmcm9tIHRo
ZSBzcGVjaWZpYyBDTVlLIGFuZCBhbHBoYSB2YWx1ZXMuCi0gICAgQ29sb3IoZmxvYXQgYywgZmxv
YXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkgOiBtX2NvbG9yKG1ha2VSR0JBRnJvbUNN
WUtBKGMsIG0sIHksIGssIGEpKSwgbV92YWxpZCh0cnVlKSB7IH0KKyAgICBDb2xvcihmbG9hdCBj
LCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQorICAgIHsKKyAgICAgICAgc2V0
UkdCKG1ha2VSR0JBRnJvbUNNWUtBKGMsIG0sIHksIGssIGEpKTsKKyAgICB9CisKICAgICBXRUJD
T1JFX0VYUE9SVCBleHBsaWNpdCBDb2xvcihjb25zdCBTdHJpbmcmKTsKICAgICBleHBsaWNpdCBD
b2xvcihjb25zdCBjaGFyKik7CisKKyAgICAvLyBGSVhNRTogQWRkIGNvbnN0cnVjdG9yIGZvciBF
eHRlbmRlZENvbG9yIHR5cGUuCisKKyAgICBDb2xvcihSR0JBLCBDb2xvclNwYWNlKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBDb2xvcihjb25zdCBDb2xvciYpOworCisgICAgV0VCQ09SRV9FWFBPUlQg
fkNvbG9yKCk7CisKICAgICBzdGF0aWMgQ29sb3IgY3JlYXRlVW5jaGVja2VkKGludCByLCBpbnQg
ZywgaW50IGIpCiAgICAgewogICAgICAgICBSR0JBMzIgY29sb3IgPSAweEZGMDAwMDAwIHwgciA8
PCAxNiB8IGcgPDwgOCB8IGI7CkBAIC0xNDEsMTkgKzE2OSwyMyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldE5hbWVkQ29sb3IoY29uc3QgU3RyaW5nJik7CiAKLSAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoaXMgYWZ0ZXIgbW92aW5nIGNsaWVudHMgdG8gYWxsIHVzZSBPcHRpb25hbENvbG9yIGluc3Rl
YWQuCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV92YWxpZDsgfQorICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmdiYUFuZEZsYWdzICYgdmFsaWRSR0JBQ29s
b3JCaXQ7IH0KIAogICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBhbHBoYSgpIDwg
MjU1OyB9CiAKLSAgICBpbnQgcmVkKCkgY29uc3QgeyByZXR1cm4gcmVkQ2hhbm5lbChtX2NvbG9y
KTsgfQotICAgIGludCBncmVlbigpIGNvbnN0IHsgcmV0dXJuIGdyZWVuQ2hhbm5lbChtX2NvbG9y
KTsgfQotICAgIGludCBibHVlKCkgY29uc3QgeyByZXR1cm4gYmx1ZUNoYW5uZWwobV9jb2xvcik7
IH0KLSAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBhbHBoYUNoYW5uZWwobV9jb2xvcik7
IH0KKyAgICBpbnQgcmVkKCkgY29uc3QgeyByZXR1cm4gcmVkQ2hhbm5lbChyZ2IoKSk7IH0KKyAg
ICBpbnQgZ3JlZW4oKSBjb25zdCB7IHJldHVybiBncmVlbkNoYW5uZWwocmdiKCkpOyB9CisgICAg
aW50IGJsdWUoKSBjb25zdCB7IHJldHVybiBibHVlQ2hhbm5lbChyZ2IoKSk7IH0KKyAgICBpbnQg
YWxwaGEoKSBjb25zdCB7IHJldHVybiBhbHBoYUNoYW5uZWwocmdiKCkpOyB9CiAgICAgCi0gICAg
UkdCQTMyIHJnYigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0gLy8gUHJlc2VydmUgdGhlIGFs
cGhhLgotICAgIHZvaWQgc2V0UkdCKGludCByLCBpbnQgZywgaW50IGIpIHsgbV9jb2xvciA9IG1h
a2VSR0IociwgZywgYik7IG1fdmFsaWQgPSB0cnVlOyB9Ci0gICAgdm9pZCBzZXRSR0IoUkdCQTMy
IHJnYikgeyBtX2NvbG9yID0gcmdiOyBtX3ZhbGlkID0gdHJ1ZTsgfQorICAgIFJHQkEzMiByZ2Io
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSR0JBMzI+KG1fcmdiYUFuZEZsYWdzID4+IDMy
KTsgfQorICAgIHZvaWQgc2V0UkdCKGludCByLCBpbnQgZywgaW50IGIpIHsgc2V0UkdCKG1ha2VS
R0IociwgZywgYikpOyB9CisgICAgdm9pZCBzZXRSR0IoUkdCQTMyIHJnYikKKyAgICB7CisgICAg
ICAgIG1fcmdiYUFuZEZsYWdzID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZ2IpIDw8IDMyKTsK
KyAgICAgICAgc2V0VmFsaWQoKTsKKyAgICB9CisKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdl
dFJHQkEoZmxvYXQmIHIsIGZsb2F0JiBnLCBmbG9hdCYgYiwgZmxvYXQmIGEpIGNvbnN0OwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UkdCQShkb3VibGUmIHIsIGRvdWJsZSYgZywgZG91Ymxl
JiBiLCBkb3VibGUmIGEpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0SFNMKGRv
dWJsZSYgaCwgZG91YmxlJiBzLCBkb3VibGUmIGwpIGNvbnN0OwpAQCAtMjA1LDkgKzIzNywyNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFJHQkEzMiBjb21wb3NpdGlvbkZpbGwgPSAweEZG
RTFERDU1OwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzRXh0ZW5kZWQoKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHRlbmRlZENvbG9yKiBhc0V4dGVuZGVkKCkgY29u
c3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciYgb3BlcmF0b3I9KGNvbnN0IENvbG9yJik7
CisKKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xv
ciYgYik7CisKIHByaXZhdGU6Ci0gICAgUkdCQTMyIG1fY29sb3I7Ci0gICAgYm9vbCBtX3ZhbGlk
OworCisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGV4dGVuZGVkQ29sb3IgPSAweDA7CisgICAg
c3RhdGljIGNvbnN0IHVpbnQ2NF90IGludmFsaWRSR0JBQ29sb3IgPSAweDE7CisgICAgc3RhdGlj
IGNvbnN0IHVpbnQ2NF90IHZhbGlkUkdCQUNvbG9yQml0ID0gMHgyOworICAgIHN0YXRpYyBjb25z
dCB1aW50NjRfdCB2YWxpZFJHQkFDb2xvciA9IDB4MzsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0VmFsaWQoKTsKKyAgICB2b2lkIHNldEV4dGVuZGVkKCk7CisKKyAgICB1bmlvbiB7Cisg
ICAgICAgIHVpbnQ2NF90IG1fcmdiYUFuZEZsYWdzIHsgaW52YWxpZFJHQkFDb2xvciB9OworICAg
ICAgICBFeHRlbmRlZENvbG9yKiBtX2V4dGVuZGVkQ29sb3I7CisgICAgfTsKIH07CiAKIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CkBAIC0yNjcsMTUgKzMxNywx
NCBAQCBpbmxpbmUgYm9vbCBSR0JBOjpoYXNBbHBoYSgpIGNvbnN0CiB9CiAKIGlubGluZSBDb2xv
cjo6Q29sb3IoUkdCQSBjb2xvciwgQ29sb3JTcGFjZSBzcGFjZSkKLSAgICA6IG1fY29sb3IoY29s
b3IubV9pbnRlZ2VyKQotICAgICwgbV92YWxpZCh0cnVlKQogeworICAgIHNldFJHQihjb2xvci5t
X2ludGVnZXIpOwogICAgIEFTU0VSVF9VTlVTRUQoc3BhY2UsIHNwYWNlID09IENvbG9yU3BhY2VT
UkdCKTsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3Qg
Q29sb3ImIGIpCiB7Ci0gICAgcmV0dXJuIGEucmdiKCkgPT0gYi5yZ2IoKSAmJiBhLmlzVmFsaWQo
KSA9PSBiLmlzVmFsaWQoKTsKKyAgICByZXR1cm4gYS5tX3JnYmFBbmRGbGFncyA9PSBiLm1fcmdi
YUFuZEZsYWdzOwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiBhLCBj
b25zdCBDb2xvciYgYikKQEAgLTMxNSw1ICszNjQsMyBAQCBpbmxpbmUgUkdCQTMyIGNvbG9yV2l0
aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gb3ZlcnJpZGVBbHBo
YQogV0VCQ09SRV9FWFBPUlQgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29u
c3QgQ29sb3ImKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ29sb3Jf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRD
b2xvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9y
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42NzQ3OGQyYjQ3N2M2ODQxM2E0NmE4ZWIzNWM0NmRjMTA3ZGMzY2Rj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0
ZW5kZWRDb2xvci5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZENvbG9yLmgiCisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworRXh0ZW5kZWRDb2xvciogRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGZsb2F0IHIsIGZs
b2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEsIGNvbnN0IENvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7
CisgICAgRXh0ZW5kZWRDb2xvciogY29sb3IgPSBuZXcgRXh0ZW5kZWRDb2xvcihyLCBnLCBiLCBh
LCBjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gY29sb3I7Cit9CisKK0V4dGVuZGVkQ29sb3I6On5F
eHRlbmRlZENvbG9yKCkKK3sKK30KKwordm9pZCBFeHRlbmRlZENvbG9yOjpyZWYoKQoreworICAg
ICsrbV9yZWZDb3VudDsKK30KKwordm9pZCBFeHRlbmRlZENvbG9yOjpkZXJlZigpCit7CisgICAg
QVNTRVJUKG1fcmVmQ291bnQpOworICAgIGlmICghLS1tX3JlZkNvdW50KQorICAgICAgICBkZWxl
dGUgdGhpczsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRXh0ZW5kZWRDb2xvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RXh0ZW5kZWRDb2xvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlNzNjYTk5M2I4N2MzYzM1N2Y3OWJhMmRkZDJj
MTg5MGM0MmI4OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9FeHRlbmRlZENvbG9yLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
Q29sb3JTcGFjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV4dGVuZGVkQ29s
b3IgeworcHVibGljOgorICAgIHN0YXRpYyBFeHRlbmRlZENvbG9yKiBjcmVhdGUoZmxvYXQgciwg
ZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSwgY29uc3QgQ29sb3JTcGFjZSYgY29sb3JTcGFjZSA9
IENvbG9yU3BhY2U6OkNvbG9yU3BhY2VTUkdCKTsKKworICAgIH5FeHRlbmRlZENvbG9yKCk7CisK
KyAgICBmbG9hdCByZWQoKSBjb25zdCB7IHJldHVybiBtX3JlZDsgfQorICAgIGZsb2F0IGdyZWVu
KCkgY29uc3QgeyByZXR1cm4gbV9ncmVlbjsgfQorICAgIGZsb2F0IGJsdWUoKSBjb25zdCB7IHJl
dHVybiBtX2JsdWU7IH0KKyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGE7
IH0KKworICAgIGNvbnN0IENvbG9yU3BhY2UmIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBt
X2NvbG9yU3BhY2U7IH0KKworICAgIHZvaWQgcmVmKCk7CisgICAgdm9pZCBkZXJlZigpOworCitw
cml2YXRlOgorICAgIEV4dGVuZGVkQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEsIGNv
bnN0IENvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCisgICAgICAgIDogbV9yZWQocikKKyAgICAgICAg
LCBtX2dyZWVuKGcpCisgICAgICAgICwgbV9ibHVlKGIpCisgICAgICAgICwgbV9hbHBoYShhKQor
ICAgICAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQorICAgIHsgfQorCisgICAgZmxvYXQg
bV9yZWQgeyAwIH07CisgICAgZmxvYXQgbV9ncmVlbiB7IDAgfTsKKyAgICBmbG9hdCBtX2JsdWUg
eyAwIH07CisgICAgZmxvYXQgbV9hbHBoYSB7IDAgfTsKKworICAgIENvbG9yU3BhY2UgbV9jb2xv
clNwYWNlIHsgQ29sb3JTcGFjZTo6Q29sb3JTcGFjZVNSR0IgfTsKKworICAgIHVuc2lnbmVkIG1f
cmVmQ291bnQgeyAxIH07Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0NvbG9yQ0cuY3BwCmluZGV4IDZkODhjODhkZDRhYTZkMmQwYWMzNGQzMTRhZjZk
ZjJiYWUyN2Q1OTguLjczZmRlMjAwMmMzMzc1YTJkN2M2YmM1NjUzMTQyYTM1ODVmZDYxZTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCkBA
IC03Myw4ICs3Myw3IEBAIHN0YXRpYyBDR0NvbG9yUmVmIGNyZWF0ZUNHQ29sb3JXaXRoRGV2aWNl
UkdCQShDR0NvbG9yUmVmIHNvdXJjZUNvbG9yKQogQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29s
b3IpCiB7CiAgICAgaWYgKCFjb2xvcikgewotICAgICAgICBtX2NvbG9yID0gMDsKLSAgICAgICAg
bV92YWxpZCA9IGZhbHNlOworICAgICAgICBtX3JnYmFBbmRGbGFncyA9IGludmFsaWRSR0JBQ29s
b3I7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTExMSw4ICsxMTAsNyBAQCBDb2xvcjo6
Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgfQogCi0gICAgbV9jb2xvciA9IG1ha2VSR0JBKHIgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTUs
IGEgKiAyNTUpOwotICAgIG1fdmFsaWQgPSB0cnVlOworICAgIHNldFJHQihtYWtlUkdCQShyICog
MjU1LCBnICogMjU1LCBiICogMjU1LCBhICogMjU1KSk7CiB9CiAKIHN0YXRpYyBDR0NvbG9yUmVm
IGxlYWtDR0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCmluZGV4IDhmNTZiYTZmYjRlMGI2NWE5
OWMyNzNkM2I0NzBiZmRiNmIzNWI5YWYuLmVkNWRjNTcwMTI5ZjQyOGYxZDVkZjQ5OGY3MzZjYjI0
MGM5OTU2NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9Db2xvckd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0NvbG9yR3RrLmNwcApAQCAtMjYsMTkgKzI2LDE3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IENvbG9yOjpDb2xvcihjb25zdCBHZGtDb2xvciYgYykKLSAgICA6IG1fY29sb3IobWFrZVJHQihj
LnJlZCA+PiA4LCBjLmdyZWVuID4+IDgsIGMuYmx1ZSA+PiA4KSkKLSAgICAsIG1fdmFsaWQodHJ1
ZSkKIHsKKyAgICBzZXRSR0IobWFrZVJHQihjLnJlZCA+PiA4LCBjLmdyZWVuID4+IDgsIGMuYmx1
ZSA+PiA4KSkKIH0KIAogI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgogQ29sb3I6OkNvbG9yKGNv
bnN0IEdka1JHQkEmIGMpCi0gICAgOiBtX2NvbG9yKG1ha2VSR0JBKHN0YXRpY19jYXN0PGludD4o
Yy5yZWQgKiAyNTUpLAotICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGMu
Z3JlZW4gKiAyNTUpLAotICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGMu
Ymx1ZSAqIDI1NSksCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oYy5h
bHBoYSAqIDI1NSkpKQotICAgICwgbV92YWxpZCh0cnVlKQogeworICAgIHNldFJHQihtYWtlUkdC
QShzdGF0aWNfY2FzdDxpbnQ+KGMucmVkICogMjU1KSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50
PihjLmdyZWVuICogMjU1KSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihjLmJsdWUgKiAyNTUp
LAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGMuYWxwaGEgKiAyNTUpKSk7CiB9CiAKIENvbG9y
OjpvcGVyYXRvciBHZGtSR0JBKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAppbmRleCA5MWMxZGExOTNmYmIx
NWQzNGQ3MzQ1YzE1NDQ1NzdkOGE3MWQ2YTYwLi43MjRhMTA1ZTI0ZmY3MTQ5MzczNTNkYWZiZTJk
MmI2OTBhZGVlNzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCkBAIC0zNCw4ICszNCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogQ29sb3I6OkNvbG9yKEQyRDFfQ09MT1JfRiBjb2xvcikKIHsKLSAgICBtX2Nv
bG9yID0gbWFrZVJHQkEoY29sb3IuciAqIDI1NSwgY29sb3IuZyAqIDI1NSwgY29sb3IuYiAqIDI1
NSwgY29sb3IuYSAqIDI1NSk7Ci0gICAgbV92YWxpZCA9IHRydWU7CisgICAgc2V0UkdCKG1ha2VS
R0JBKGNvbG9yLnIgKiAyNTUsIGNvbG9yLmcgKiAyNTUsIGNvbG9yLmIgKiAyNTUsIGNvbG9yLmEg
KiAyNTUpKTsKIH0KIAogQ29sb3I6Om9wZXJhdG9yIEQyRDFfQ09MT1JfRigpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAppbmRl
eCAzODgyMTllNTg5NTJhNmNlOWQyMTNjZTU5Zjg2ODNmZjZjYjg4MjYxLi4wZWIxNWE0NWE1MGQ4
MTE0NDYzYzA1ZmFkMDg5Yzg1MjM5ZmYxYzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKQEAgLTc1LDI1ICs3NSwyNSBAQCBzdGF0
aWMgY29uc3QgZmxvYXQgcmVwbGFjZW1lbnRBcnJvd0NpcmNsZVBhZGRpbmcgPSAzOwogCiBzdGF0
aWMgY29uc3QgQ29sb3ImIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UHJlc3NlZENvbG9yKCkK
IHsKLSAgICBzdGF0aWMgY29uc3QgQ29sb3IgcHJlc3NlZCgxMDUsIDEwNSwgMTA1LCAyNDIpOwor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gcHJlc3NlZCgxMDUsIDEwNSwgMTA1LCAy
NDIpOwogICAgIHJldHVybiBwcmVzc2VkOwogfQogCiBzdGF0aWMgY29uc3QgQ29sb3ImIHJlcGxh
Y2VtZW50VGV4dFJvdW5kZWRSZWN0Q29sb3IoKQogewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBz
dGFuZGFyZCgxMjUsIDEyNSwgMTI1LCAyNDIpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxD
b2xvcj4gc3RhbmRhcmQoMTI1LCAxMjUsIDEyNSwgMjQyKTsKICAgICByZXR1cm4gc3RhbmRhcmQ7
CiB9CiAKIHN0YXRpYyBjb25zdCBDb2xvciYgcmVwbGFjZW1lbnRUZXh0Q29sb3IoKQogewotICAg
IHN0YXRpYyBjb25zdCBDb2xvciBzdGFuZGFyZCgyNDAsIDI0MCwgMjQwLCAyNTUpOworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gc3RhbmRhcmQoMjQwLCAyNDAsIDI0MCwgMjU1KTsK
ICAgICByZXR1cm4gc3RhbmRhcmQ7CiB9CiAKIHN0YXRpYyBjb25zdCBDb2xvciYgdW5hdmFpbGFi
bGVQbHVnaW5Cb3JkZXJDb2xvcigpCiB7Ci0gICAgc3RhdGljIGNvbnN0IENvbG9yIHN0YW5kYXJk
KDI1NSwgMjU1LCAyNTUsIDIxNik7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbG9yPiBz
dGFuZGFyZCgyNTUsIDI1NSwgMjU1LCAyMTYpOwogICAgIHJldHVybiBzdGFuZGFyZDsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKaW5kZXggMTc5YmQ0
MjZjZWE4NjYzZWRkYTA1MjZhMWVjOWYyN2Q2NTRhODlhZi4uNzc0OGM0NzhlYjBkZTQ4Njg1NWFl
MWRlZjc4NTZiYjMyZjI1MzY0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZyYW1lU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RnJhbWVTZXQuY3BwCkBAIC02OSwxOSArNjksMTkgQEAgUmVuZGVyRnJhbWVTZXQ6OkdyaWRBeGlz
OjpHcmlkQXhpcygpCiAKIHN0YXRpYyBjb25zdCBDb2xvciYgYm9yZGVyU3RhcnRFZGdlQ29sb3Io
KQogewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBjb2xvcigxNzAsIDE3MCwgMTcwKTsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IGNvbG9yKDE3MCwgMTcwLCAxNzApOwogICAgIHJl
dHVybiBjb2xvcjsKIH0KIAogc3RhdGljIGNvbnN0IENvbG9yJiBib3JkZXJFbmRFZGdlQ29sb3Io
KQogewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBjb2xvciA9IENvbG9yOjpibGFjazsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IGNvbG9yID0gQ29sb3I6OmJsYWNrOwogICAgIHJl
dHVybiBjb2xvcjsKIH0KIAogc3RhdGljIGNvbnN0IENvbG9yJiBib3JkZXJGaWxsQ29sb3IoKQog
ewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBjb2xvcigyMDgsIDIwOCwgMjA4KTsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IGNvbG9yKDIwOCwgMjA4LCAyMDgpOwogICAgIHJldHVy
biBjb2xvcjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2VsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxs
LmNwcAppbmRleCA0NWQ4YzdiZWI0MWU2YmI4ZDQwZWYzM2Y3ZGFjNGM0N2QyNGJjYTIyLi5hOTgx
YmQzMmUyNmM2NzRkOTE3M2M4Mzk0MjcxOGJiMzAxNzRhODhkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcApAQCAtNTIsNyArNTIsNyBAQCBzdHJ1Y3Qg
U2FtZVNpemVBc1JlbmRlclRhYmxlQ2VsbCA6IHB1YmxpYyBSZW5kZXJCbG9ja0Zsb3cgewogfTsK
IAogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlbmRlclRhYmxlQ2VsbCkgPT0gc2l6ZW9mKFNhbWVT
aXplQXNSZW5kZXJUYWJsZUNlbGwpLCBSZW5kZXJUYWJsZUNlbGxfc2hvdWxkX3N0YXlfc21hbGwp
OwotQ09NUElMRV9BU1NFUlQoc2l6ZW9mKENvbGxhcHNlZEJvcmRlclZhbHVlKSA9PSAxNiwgQ29s
bGFwc2VkQm9yZGVyVmFsdWVfc2hvdWxkX3N0YXlfc21hbGwpOworQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKENvbGxhcHNlZEJvcmRlclZhbHVlKSA9PSAyNCwgQ29sbGFwc2VkQm9yZGVyVmFsdWVfc2hv
dWxkX3N0YXlfc21hbGwpOwogCiBSZW5kZXJUYWJsZUNlbGw6OlJlbmRlclRhYmxlQ2VsbChFbGVt
ZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQogICAgIDogUmVuZGVyQmxvY2tGbG93
KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGZiYWMxMDgzYjY5MWRmNjhjYWIxYmUyYWFkZjI4MDJiNjAx
MTM5YzkuLjgyNmZjODg1ZjlmYzAyZjNjZDZhYWU1YjM2Yzg1ZTBhMDYwMjZhNjIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBA
QAorMjAxNi0xMC0wMyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIHByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIGV4dGVuZGVkIGNvbG9ycyB0byBXZWJDb3JlOjpD
b2xvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYy
ODc4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yODU5NjQxMz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIG5ldyBBUEkgdGVzdCBmb3IgQ29sb3Jz
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yLmNwcDoKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE2LTA5LTI3ICBXZW5zb24gSHNpZWgg
IDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIEFkb3B0IE1lZGlhUmVtb3RlIFNQ
SSB0byBhY2hpZXZlIGRlc2lyZWQgTm93IFBsYXlpbmcgYmVoYXZpb3IKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvci5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3IuY3BwCmluZGV4IGU4ZTY4MjBlNTZjZjEzYWQ5MDYw
ZDk0MTI0YzY4YjNmYmFlNmQ5MzMuLjg1NjI1ZDI3NzQ4ODIzMDZkNzQxOTQ5NTA5NmRmZjY3ZDk3
NWY5MGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xv
ci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yLmNwcApA
QCAtMTQ0LDQgKzE0NCwyNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTVl9MaWdodEdyYXkpCiAgICAg
RVhQRUNUX0RPVUJMRV9FUSgwLjc1Mjk0MTE3NjQ3MDU4ODIyLCB2KTsKIH0KIAorVEVTVChDb2xv
ciwgVmFsaWRpdHkpCit7CisgICAgQ29sb3IgaW52YWxpZENvbG9yOworICAgIEVYUEVDVF9GQUxT
RShpbnZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaW52YWxpZENvbG9y
LmlzRXh0ZW5kZWQoKSk7CisgICAgRVhQRUNUX1RSVUUoaW52YWxpZENvbG9yLmFzRXh0ZW5kZWQo
KSA9PSBudWxscHRyKTsKKworICAgIENvbG9yIG90aGVySW52YWxpZENvbG9yID0gaW52YWxpZENv
bG9yOworICAgIEVYUEVDVF9GQUxTRShvdGhlckludmFsaWRDb2xvci5pc1ZhbGlkKCkpOworICAg
IEVYUEVDVF9GQUxTRShvdGhlckludmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOworICAgIEVYUEVD
VF9UUlVFKG90aGVySW52YWxpZENvbG9yLmFzRXh0ZW5kZWQoKSA9PSBudWxscHRyKTsKKworICAg
IENvbG9yIHZhbGlkQ29sb3IoMjU1LCAwLCAwKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWxpZENvbG9y
LmlzVmFsaWQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsK
KyAgICBFWFBFQ1RfVFJVRSh2YWxpZENvbG9yLmFzRXh0ZW5kZWQoKSA9PSBudWxscHRyKTsKKwor
ICAgIENvbG9yIG90aGVyVmFsaWRDb2xvciA9IHZhbGlkQ29sb3I7CisgICAgRVhQRUNUX1RSVUUo
b3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKG90aGVyVmFsaWRD
b2xvci5pc0V4dGVuZGVkKCkpOworICAgIEVYUEVDVF9UUlVFKG90aGVyVmFsaWRDb2xvci5hc0V4
dGVuZGVkKCkgPT0gbnVsbHB0cik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>
<flag name="review"
          id="313697"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290527</attachid>
            <date>2016-10-03 15:14:54 -0700</date>
            <delta_ts>2016-10-03 15:14:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162878-20161003151145.patch</filename>
            <type>text/plain</type>
            <size>33068</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2NTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzU4MTUyMTQyNWEyYTQ1
NGYzNjQxYzRhMmE2NWE5MzRjNmVmOTE4YS4uNzNlMzAyNmZkNGRmZTE0MjM2ZjU4YjZkODdmOGVl
YWYxZDFkNTliZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDE2LTEwLTAzICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcHJlbGltaW5hcnkgc3Vw
cG9ydCBmb3IgZXh0ZW5kZWQgY29sb3JzIHRvIFdlYkNvcmU6OkNvbG9yCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI4NzgKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzI4NTk2NDEzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBhbiBFeHRlbmRlZENvbG9yIGNsYXNzIHRoYXQgd2lsbCBob2xkIHRo
ZSBkYXRhIG5lY2Vzc2FyeQorICAgICAgICBmb3Igd2lkZXItdGhhbi1zUkdCIChhbmQgbW9yZSBw
cmVjaXNlKSBjb2xvcnMuIEluIG9yZGVyIHRvCisgICAgICAgIGF2b2lkIGluY3JlYXNpbmcgdGhl
IHNpemUgb2YgQ29sb3IsIGltcGxlbWVudCBhIHRhZ2dlZAorICAgICAgICBwb2ludGVyIHRoYXQg
aXMgZWl0aGVyIHJlZmVyZW5jaW5nIGFuIEV4dGVuZGVkQ29sb3IsIG9yCisgICAgICAgIGlzIGEg
NjQtYml0IG51bWJlciB3aXRoIHRoZSB0b3AgMzItYml0cyBiZWluZyB0aGUgUkdCQSwgYW5kCisg
ICAgICAgIHRoZSBib3R0b20gMiBiaXRzIGluZGljYXRpbmcgYW4gaW52YWxpZCBSR0JBIG9yIGEg
dmFsaWQgUkdCQSwKKyAgICAgICAgcGx1cyB0aGUgdGFnLgorCisgICAgICAgIEFkZCBjb3B5IGNv
bnN0cnVjdG9ycyBhbmQgb3BlcmF0b3I9IHNvIHRoYXQgdGhlIG5ldyBDb2xvciBvYmplY3RzCisg
ICAgICAgIGFyZSBjb3JyZWN0bHkgY29waWVkLgorCisgICAgICAgIFRoZXJlIGlzbid0IHlldCBh
IHdheSB0byBjcmVhdGUgYW4gRXh0ZW5kZWRDb2xvci4gVGhhdCdzIGNvbWluZworICAgICAgICBp
biBhIGZvbGxvd3VwIHBhdGNoIChhbmQgd2lsbCByZXF1aXJlIGNoYW5nZXMgdG8gdGhlIENTUyBw
YXJzZXIpLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMsIGFuZCBuZXcgQVBJ
IHRlc3RzIGluIENvbG9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgbmV3IGZpbGVzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOiBVcGRhdGUgZXZlcnl0aGluZyB0byB1
c2UgbV9yZ2JhQW5kRmxhZ3MKKyAgICAgICAgaW5zdGVhZCBvZiBtX2NvbG9yICsgbV92YWxpZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6fkNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvcj0pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpzZXROYW1lZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjps
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFyayk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6c2V0VmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldEV4dGVuZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0V4dGVuZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjphc0V4dGVuZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5oOiBJbXBsZW1lbnQgdGhlIHRhZ2dlZCB1bmlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNWYWxpZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpncmVlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Ymx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
YWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnJnYik6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6c2V0UkdCKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHA6IE5ldyBmaWxlLiBIb2xk
cyBmbG9hdGluZyBwb2ludAorICAgICAgICByZWQsIGdyZWVuLCBibHVlIGFuZCBhbHBoYSwgcGx1
cyBhIGNvbG9yIHNwYWNlLiBJbXBsZW1lbnRzIHJlZmVyZW5jZQorICAgICAgICBjb3VudGluZyBk
aXJlY3RseS4KKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp+RXh0ZW5kZWRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpyZWYpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRD
b2xvcjo6ZGVyZWYpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbmRlZENvbG9yOjpncmVlbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENv
bG9yOjpibHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmFscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmNvbG9yU3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5kZWRDb2xvcjo6RXh0ZW5kZWRDb2xvcik6CisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDogVXBkYXRlIHRoZSBjb25zdHJ1Y3RvcnMgZm9yCisg
ICAgICAgIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBjb2xvciBjbGFzc2VzLgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29s
b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Q29sb3IpOgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmNwcDogVXNlIE5ldmVyRGVzdHJveWVkLgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZW1l
bnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFj
ZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlbWVu
dFRleHRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjp1bmF2YWlsYWJsZVBsdWdpbkJvcmRlckNv
bG9yKToKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHA6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyU3RhcnRFZGdlQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Ym9yZGVyRW5kRWRnZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmJvcmRlckZpbGxDb2xv
cik6CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDogVGhpcyBncm93
cyBpbiBzaXplIHNsaWdodGx5CisgICAgICAgIGJlY2F1c2UgaXQgY2FuIG5vIGxvbmdlciBwYWNr
IGJpdHMuCisKIDIwMTYtMDktMjcgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFVzZSBDb2xvciByZWZlcmVuY2VzIHdoZXJlIHBvc3NpYmxlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDc4NzdmZWQ4NzgzY2NkM2RiMWRlZTBkYWVjNGJlZGIwNTYwMTUyMTcuLjg2ZmZj
ZGQ2NTFkMGNmZjdhOTVmNmM5MjkyMTY2OTdhNzZiZTYyYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CkBAIC0yMTkyLDYgKzIxOTIsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJh
dGVkSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9y
Q2xpZW50LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50M0QuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDQyZjcyNzhjZjA3ZDM5NjM3NTQwZTY1OGYwZDBkZDE5NTkxN2ZlYmQuLmRlMTYwYTQzZjFl
NWI0ZjRlZDUwMGIxYTAwODUxNDQxODAxNDEwMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNzEsNiArMTM3MSw4IEBACiAJ
CTMxQzQyMjQ2MUQ3NEVCOUEwMEYxMjM0MiAvKiBKU1BlcmZvcm1hbmNlVGltaW5nQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzQyMjQ1
MUQ3NEVCOUEwMEYxMjM0MiAvKiBKU1BlcmZvcm1hbmNlVGltaW5nQ3VzdG9tLmNwcCAqLzsgfTsK
IAkJMzFENTkxQjMxNjY5N0E2QzAwRTZCRjAyIC8qIFBsdWdJbkNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFENTkxQjExNjY5N0E2QzAwRTZC
RjAyIC8qIFBsdWdJbkNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTMxRENEMjlEMUFCNEZCREUwMDcyRTgxNyAvKiBBbmltYXRpb25Ucmln
Z2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMURD
RDI5QzFBQjRGQkRFMDA3MkU4MTcgLyogQW5pbWF0aW9uVHJpZ2dlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTMxRENERjQzMURBMUM0NTQwMEVB
NUI5MyAvKiBFeHRlbmRlZENvbG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxRENERjQxMURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9y
LmNwcCAqLzsgfTsKKwkJMzFEQ0RGNDQxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRENERjQy
MURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzFERUE0NTUxQjM5RjREOTAwRjc3MTc4IC8q
IFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMURFQTQ1MzFCMzlGNEQ5MDBGNzcxNzggLyogV2ViU3lzdGVtQmFj
a2Ryb3BMYXllci5tbSAqLzsgfTsKIAkJMzFERUE0NTYxQjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5
c3RlbUJhY2tkcm9wTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxREVBNDU0MUIzOUY0RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExh
eWVyLmggKi87IH07CiAJCTMxREY2MzU3MUFGMTg3REQwMDc4RkQ5MSAvKiBOU0NvbG9yU1BJLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMURGNjM1NjFB
RjE4N0REMDA3OEZEOTEgLyogTlNDb2xvclNQSS5oICovOyB9OwpAQCAtODMwNyw2ICs4MzA5LDgg
QEAKIAkJMzFDNDIyNDUxRDc0RUI5QTAwRjEyMzQyIC8qIEpTUGVyZm9ybWFuY2VUaW1pbmdDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQZXJmb3JtYW5j
ZVRpbWluZ0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRDU5MUIx
MTY2OTdBNkMwMEU2QkYwMiAvKiBQbHVnSW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGx1Z0luQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxRENEMjlDMUFCNEZCREUwMDcyRTgxNyAvKiBBbmltYXRpb25UcmlnZ2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvblRyaWdnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzFEQ0RGNDExREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29s
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5kZWRDb2xv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxRENERjQyMURBMUM0NTQwMEVB
NUI5MyAvKiBFeHRlbmRlZENvbG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEV4dGVuZGVkQ29sb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFERUE0NTMx
QjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMURFQTQ1NDFCMzlGNEQ5MDBGNzcxNzggLyog
V2ViU3lzdGVtQmFja2Ryb3BMYXllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxREY2MzU2MUFGMTg3REQwMDc4RkQ5MSAvKiBOU0NvbG9yU1BJLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5TQ29sb3JTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIwNjM5LDYgKzIwNjQzLDggQEAKIAkJCQlDRERFMDJFOTE4QjNERkM3MDBDRjdGRjEg
LyogQ0RNU2Vzc2lvbi5oICovLAogCQkJCUIyNzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xv
ci5jcHAgKi8sCiAJCQkJQjI3NTM1MzkwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCisJ
CQkJMzFEQ0RGNDExREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuY3BwICovLAorCQkJ
CTMxRENERjQyMURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmggKi8sCiAJCQkJOTM4
MkRGNTcxMEE4RDVDOTAwOTI1NjUyIC8qIENvbG9yU3BhY2UuaCAqLywKIAkJCQkyRDJGQzA1NDE0
NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJCTJE
MkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5oICovLApA
QCAtMjQ4MTAsNiArMjQ4MTYsNyBAQAogCQkJCTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdBMSAvKiBJ
bWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQyMThC
NkI5QUIwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnRNYWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3Nzk3OTFBMEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTMxRENERjQ0MURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1NTVCODdFRDFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MjA1QUI2MTIzOTI5MTAwMEIxNzM4MCAvKiBJ
bWFnZURvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RDMjEyNTFGMTJEMDAzRUYy
NjkgLyogSW1hZ2VJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzAyNDQsNiArMzAyNTEs
NyBAQAogCQkJCUIyMjI3QUVGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdWaWV3RWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FGMjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVmlld1Nw
ZWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODQ4NTIyOEExMTkwMTczQzAwNkVEQzdGIC8qIFNW
R1ZLZXJuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMURDREY0MzFEQTFDNDU0MDBF
QTVCOTMgLyogRXh0ZW5kZWRDb2xvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FGNTBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHWm9vbUFuZFBhbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MkU0RUM5NzBEMDBDMjJCMDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxODA4MTEyMTZGQ0Y0MkYwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVu
dC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmNwcAppbmRleCA4ZjY4YjE0YTQyMDYwYWJkN2VmNjEwMDU4OGU0YWEwZmU0NmFkODhjLi42
NjZjZTVmNjlkOWE0NDhhNWE1NmM0NDJhYWQ1MzEzZjZlODk4NjZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC0yMjUsMjMgKzIyNSw1NSBAQCBpbnQg
ZGlmZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImIGMxLCBjb25zdCBDb2xvciYgYzIpCiBDb2xv
cjo6Q29sb3IoY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIGlmIChuYW1lWzBdID09ICcjJykg
eworICAgICAgICBSR0JBMzIgY29sb3I7CisgICAgICAgIGJvb2wgdmFsaWQ7CisKICAgICAgICAg
aWYgKG5hbWUuaXM4Qml0KCkpCi0gICAgICAgICAgICBtX3ZhbGlkID0gcGFyc2VIZXhDb2xvcihu
YW1lLmNoYXJhY3RlcnM4KCkgKyAxLCBuYW1lLmxlbmd0aCgpIC0gMSwgbV9jb2xvcik7CisgICAg
ICAgICAgICB2YWxpZCA9IHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpICsgMSwgbmFt
ZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV92YWxp
ZCA9IHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSArIDEsIG5hbWUubGVuZ3RoKCkg
LSAxLCBtX2NvbG9yKTsKKyAgICAgICAgICAgIHZhbGlkID0gcGFyc2VIZXhDb2xvcihuYW1lLmNo
YXJhY3RlcnMxNigpICsgMSwgbmFtZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsKKworICAgICAgICBp
ZiAodmFsaWQpCisgICAgICAgICAgICBzZXRSR0IoY29sb3IpOwogICAgIH0gZWxzZQogICAgICAg
ICBzZXROYW1lZENvbG9yKG5hbWUpOwogfQogCiBDb2xvcjo6Q29sb3IoY29uc3QgY2hhciogbmFt
ZSkKIHsKKyAgICBSR0JBMzIgY29sb3I7CisgICAgYm9vbCB2YWxpZDsKICAgICBpZiAobmFtZVsw
XSA9PSAnIycpCi0gICAgICAgIG1fdmFsaWQgPSBwYXJzZUhleENvbG9yKChTdHJpbmcpJm5hbWVb
MV0sIG1fY29sb3IpOworICAgICAgICB2YWxpZCA9IHBhcnNlSGV4Q29sb3IoKFN0cmluZykmbmFt
ZVsxXSwgY29sb3IpOwogICAgIGVsc2UgewogICAgICAgICBjb25zdCBOYW1lZENvbG9yKiBmb3Vu
ZENvbG9yID0gZmluZENvbG9yKG5hbWUsIHN0cmxlbihuYW1lKSk7Ci0gICAgICAgIG1fY29sb3Ig
PSBmb3VuZENvbG9yID8gZm91bmRDb2xvci0+QVJHQlZhbHVlIDogMDsKLSAgICAgICAgbV92YWxp
ZCA9IGZvdW5kQ29sb3I7CisgICAgICAgIGNvbG9yID0gZm91bmRDb2xvciA/IGZvdW5kQ29sb3It
PkFSR0JWYWx1ZSA6IDA7CisgICAgICAgIHZhbGlkID0gZm91bmRDb2xvcjsKICAgICB9CisKKyAg
ICBpZiAodmFsaWQpCisgICAgICAgIHNldFJHQihjb2xvcik7Cit9CisKK0NvbG9yOjpDb2xvcihj
b25zdCBDb2xvciYgb3RoZXIpCisgICAgOiBtX3JnYmFBbmRGbGFncyhvdGhlci5tX3JnYmFBbmRG
bGFncykKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBtX2V4dGVuZGVkQ29sb3It
PnJlZigpOworfQorCitDb2xvcjo6fkNvbG9yKCkKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQor
ICAgICAgICBtX2V4dGVuZGVkQ29sb3ItPmRlcmVmKCk7Cit9CisKK0NvbG9yJiBDb2xvcjo6b3Bl
cmF0b3I9KGNvbnN0IENvbG9yJiBvdGhlcikKK3sKKyAgICBtX3JnYmFBbmRGbGFncyA9IG90aGVy
Lm1fcmdiYUFuZEZsYWdzOworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAgIG1fZXh0ZW5k
ZWRDb2xvci0+cmVmKCk7CisgICAgcmV0dXJuICp0aGlzOwogfQogCiBTdHJpbmcgQ29sb3I6OnNl
cmlhbGl6ZWQoKSBjb25zdApAQCAtMjkxLDYgKzMyMyw3IEBAIFN0cmluZyBDb2xvcjo6Y3NzVGV4
dCgpIGNvbnN0CiAKIFN0cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBjb25z
dAogeworICAgIC8vIEZJWE1FOiBIYW5kbGUgRXh0ZW5kZWRDb2xvcnMuCiAgICAgaWYgKGFscGhh
KCkgPCAweEZGKQogICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiMlMDJYJTAyWCUwMlgl
MDJYIiwgcmVkKCksIGdyZWVuKCksIGJsdWUoKSwgYWxwaGEoKSk7CiAgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCIjJTAyWCUwMlglMDJYIiwgcmVkKCksIGdyZWVuKCksIGJsdWUoKSk7CkBAIC0z
MTUsMTQgKzM0OCwxNiBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IE5hbWVkQ29sb3IqIGZpbmROYW1l
ZENvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSkKIHZvaWQgQ29sb3I6OnNldE5hbWVkQ29sb3IoY29u
c3QgU3RyaW5nJiBuYW1lKQogewogICAgIGNvbnN0IE5hbWVkQ29sb3IqIGZvdW5kQ29sb3IgPSBm
aW5kTmFtZWRDb2xvcihuYW1lKTsKLSAgICBtX2NvbG9yID0gZm91bmRDb2xvciA/IGZvdW5kQ29s
b3ItPkFSR0JWYWx1ZSA6IDA7Ci0gICAgbV92YWxpZCA9IGZvdW5kQ29sb3I7CisgICAgaWYgKGZv
dW5kQ29sb3IpCisgICAgICAgIHNldFJHQihmb3VuZENvbG9yLT5BUkdCVmFsdWUpOworICAgIGVs
c2UKKyAgICAgICAgbV9yZ2JhQW5kRmxhZ3MgPSBpbnZhbGlkUkdCQUNvbG9yOwogfQogCiBDb2xv
ciBDb2xvcjo6bGlnaHQoKSBjb25zdAogewogICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNh
c2UgZm9yIHNwZWVkLgotICAgIGlmIChtX2NvbG9yID09IGJsYWNrKQorICAgIGlmIChyZ2IoKSA9
PSBibGFjaykKICAgICAgICAgcmV0dXJuIGxpZ2h0ZW5lZEJsYWNrOwogICAgIAogICAgIGNvbnN0
IGZsb2F0IHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOwpAQCAtMzQ3LDcg
KzM4Miw3IEBAIENvbG9yIENvbG9yOjpsaWdodCgpIGNvbnN0CiBDb2xvciBDb2xvcjo6ZGFyaygp
IGNvbnN0CiB7CiAgICAgLy8gSGFyZGNvZGUgdGhpcyBjb21tb24gY2FzZSBmb3Igc3BlZWQuCi0g
ICAgaWYgKG1fY29sb3IgPT0gd2hpdGUpCisgICAgaWYgKHJnYigpID09IHdoaXRlKQogICAgICAg
ICByZXR1cm4gZGFya2VuZWRXaGl0ZTsKICAgICAKICAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3Rv
ciA9IG5leHRhZnRlcmYoMjU2LjBmLCAwLjBmKTsKQEAgLTU2MSw0ICs1OTYsMjggQEAgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3ImIGNvbG9yKQogICAg
IHJldHVybiB0cyA8PCBjb2xvci5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpOwogfQogCit2b2lk
IENvbG9yOjpzZXRWYWxpZCgpCit7CisgICAgbV9yZ2JhQW5kRmxhZ3MgfD0gdmFsaWRSR0JBQ29s
b3I7Cit9CisKK3ZvaWQgQ29sb3I6OnNldEV4dGVuZGVkKCkKK3sKKyAgICAvLyBWYWxpZCBjb2xv
cnMgc2hvdWxkIG5vdCBjaGFuZ2UgdHlwZS4KKyAgICBBU1NFUlQoIWlzVmFsaWQoKSk7CisgICAg
bV9yZ2JhQW5kRmxhZ3MgJj0gfihpbnZhbGlkUkdCQUNvbG9yKTsKK30KKworYm9vbCBDb2xvcjo6
aXNFeHRlbmRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEobV9yZ2JhQW5kRmxhZ3MgJiBpbnZh
bGlkUkdCQUNvbG9yKTsKK30KKworRXh0ZW5kZWRDb2xvciogQ29sb3I6OmFzRXh0ZW5kZWQoKSBj
b25zdAoreworICAgIGlmICghaXNFeHRlbmRlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gbV9leHRlbmRlZENvbG9yOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAppbmRleCA2NTIwMDNhM2M1
YjA5MGNhMWQxODQyNzFlMDBkZWI1OGNlNGZlN2U1Li5kMWRhMThlZWY2Y2QyMzk1NTBhM2U4Mzg5
MjkyMGIzMjk4M2MwZWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmgKQEAgLTIzLDEwICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBD
b2xvcl9oCi0jZGVmaW5lIENvbG9yX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3JT
cGFjZS5oIgorI2luY2x1ZGUgIkV4dGVuZGVkQ29sb3IuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUV4
cG9ydE1hY3Jvcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjbWF0aD4KQEAg
LTEwNSwxOSArMTA1LDQ3IEBAIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSR0JBJiwgY29uc3QgUkdC
QSYpOwogY2xhc3MgQ29sb3IgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIENvbG9yKCkgOiBtX2NvbG9yKDApLCBtX3ZhbGlkKGZhbHNlKSB7IH0KLSAgICBDb2xv
cihSR0JBLCBDb2xvclNwYWNlKTsKKyAgICBDb2xvcigpIHsgfQogCiAgICAgLy8gRklYTUU6IFJl
bW92ZSBhbGwgdGhlc2UgY29uc3RydWN0b3JzIGFuZCBjcmVhdGlvbiBmdW5jdGlvbnMgYW5kIHJl
cGxhY2UgdGhlIG9uZXMgdGhhdCBhcmUgc3RpbGwgbmVlZGVkIHdpdGggZnJlZSBmdW5jdGlvbnMu
Ci0gICAgQ29sb3IoUkdCQTMyIGNvbG9yLCBib29sIHZhbGlkID0gdHJ1ZSkgOiBtX2NvbG9yKGNv
bG9yKSwgbV92YWxpZCh2YWxpZCkgeyBBU1NFUlQoIW1fY29sb3IgfHwgbV92YWxpZCk7IH0KLSAg
ICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiKSA6IG1fY29sb3IobWFrZVJHQihyLCBnLCBiKSks
IG1fdmFsaWQodHJ1ZSkgeyB9Ci0gICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEp
IDogbV9jb2xvcihtYWtlUkdCQShyLCBnLCBiLCBhKSksIG1fdmFsaWQodHJ1ZSkgeyB9Ci0gICAg
Ly8gQ29sb3IgaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8gMzJiaXQgUkdCQSwgcGVyaGFwcyBzb21l
IGRheSB3ZSdsbCBzdXBwb3J0IGJldHRlciBjb2xvcnMKLSAgICBDb2xvcihmbG9hdCByLCBmbG9h
dCBnLCBmbG9hdCBiLCBmbG9hdCBhKSA6IG1fY29sb3IobWFrZVJHQkEzMkZyb21GbG9hdHMociwg
ZywgYiwgYSkpLCBtX3ZhbGlkKHRydWUpIHsgfQorCisgICAgQ29sb3IoUkdCQTMyIGNvbG9yLCBi
b29sIHZhbGlkID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAg
IHNldFJHQihjb2xvcik7CisgICAgfQorCisgICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYikK
KyAgICB7CisgICAgICAgIHNldFJHQihyLCBnLCBiKTsKKyAgICB9CisKKyAgICBDb2xvcihpbnQg
ciwgaW50IGcsIGludCBiLCBpbnQgYSkKKyAgICB7CisgICAgICAgIHNldFJHQihtYWtlUkdCQShy
LCBnLCBiLCBhKSk7CisgICAgfQorCisgICAgQ29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQg
YiwgZmxvYXQgYSkKKyAgICB7CisgICAgICAgIHNldFJHQihtYWtlUkdCQTMyRnJvbUZsb2F0cyhy
LCBnLCBiLCBhKSk7CisgICAgfQorCiAgICAgLy8gQ3JlYXRlcyBhIG5ldyBjb2xvciBmcm9tIHRo
ZSBzcGVjaWZpYyBDTVlLIGFuZCBhbHBoYSB2YWx1ZXMuCi0gICAgQ29sb3IoZmxvYXQgYywgZmxv
YXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkgOiBtX2NvbG9yKG1ha2VSR0JBRnJvbUNN
WUtBKGMsIG0sIHksIGssIGEpKSwgbV92YWxpZCh0cnVlKSB7IH0KKyAgICBDb2xvcihmbG9hdCBj
LCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQorICAgIHsKKyAgICAgICAgc2V0
UkdCKG1ha2VSR0JBRnJvbUNNWUtBKGMsIG0sIHksIGssIGEpKTsKKyAgICB9CisKICAgICBXRUJD
T1JFX0VYUE9SVCBleHBsaWNpdCBDb2xvcihjb25zdCBTdHJpbmcmKTsKICAgICBleHBsaWNpdCBD
b2xvcihjb25zdCBjaGFyKik7CisKKyAgICAvLyBGSVhNRTogQWRkIGNvbnN0cnVjdG9yIGZvciBF
eHRlbmRlZENvbG9yIHR5cGUuCisKKyAgICBDb2xvcihSR0JBLCBDb2xvclNwYWNlKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBDb2xvcihjb25zdCBDb2xvciYpOworCisgICAgV0VCQ09SRV9FWFBPUlQg
fkNvbG9yKCk7CisKICAgICBzdGF0aWMgQ29sb3IgY3JlYXRlVW5jaGVja2VkKGludCByLCBpbnQg
ZywgaW50IGIpCiAgICAgewogICAgICAgICBSR0JBMzIgY29sb3IgPSAweEZGMDAwMDAwIHwgciA8
PCAxNiB8IGcgPDwgOCB8IGI7CkBAIC0xNDEsMTkgKzE2OSwyMyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldE5hbWVkQ29sb3IoY29uc3QgU3RyaW5nJik7CiAKLSAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoaXMgYWZ0ZXIgbW92aW5nIGNsaWVudHMgdG8gYWxsIHVzZSBPcHRpb25hbENvbG9yIGluc3Rl
YWQuCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV92YWxpZDsgfQorICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmdiYUFuZEZsYWdzICYgdmFsaWRSR0JBQ29s
b3JCaXQ7IH0KIAogICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBhbHBoYSgpIDwg
MjU1OyB9CiAKLSAgICBpbnQgcmVkKCkgY29uc3QgeyByZXR1cm4gcmVkQ2hhbm5lbChtX2NvbG9y
KTsgfQotICAgIGludCBncmVlbigpIGNvbnN0IHsgcmV0dXJuIGdyZWVuQ2hhbm5lbChtX2NvbG9y
KTsgfQotICAgIGludCBibHVlKCkgY29uc3QgeyByZXR1cm4gYmx1ZUNoYW5uZWwobV9jb2xvcik7
IH0KLSAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBhbHBoYUNoYW5uZWwobV9jb2xvcik7
IH0KKyAgICBpbnQgcmVkKCkgY29uc3QgeyByZXR1cm4gcmVkQ2hhbm5lbChyZ2IoKSk7IH0KKyAg
ICBpbnQgZ3JlZW4oKSBjb25zdCB7IHJldHVybiBncmVlbkNoYW5uZWwocmdiKCkpOyB9CisgICAg
aW50IGJsdWUoKSBjb25zdCB7IHJldHVybiBibHVlQ2hhbm5lbChyZ2IoKSk7IH0KKyAgICBpbnQg
YWxwaGEoKSBjb25zdCB7IHJldHVybiBhbHBoYUNoYW5uZWwocmdiKCkpOyB9CiAgICAgCi0gICAg
UkdCQTMyIHJnYigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0gLy8gUHJlc2VydmUgdGhlIGFs
cGhhLgotICAgIHZvaWQgc2V0UkdCKGludCByLCBpbnQgZywgaW50IGIpIHsgbV9jb2xvciA9IG1h
a2VSR0IociwgZywgYik7IG1fdmFsaWQgPSB0cnVlOyB9Ci0gICAgdm9pZCBzZXRSR0IoUkdCQTMy
IHJnYikgeyBtX2NvbG9yID0gcmdiOyBtX3ZhbGlkID0gdHJ1ZTsgfQorICAgIFJHQkEzMiByZ2Io
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSR0JBMzI+KG1fcmdiYUFuZEZsYWdzID4+IDMy
KTsgfQorICAgIHZvaWQgc2V0UkdCKGludCByLCBpbnQgZywgaW50IGIpIHsgc2V0UkdCKG1ha2VS
R0IociwgZywgYikpOyB9CisgICAgdm9pZCBzZXRSR0IoUkdCQTMyIHJnYikKKyAgICB7CisgICAg
ICAgIG1fcmdiYUFuZEZsYWdzID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZ2IpIDw8IDMyKTsK
KyAgICAgICAgc2V0VmFsaWQoKTsKKyAgICB9CisKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdl
dFJHQkEoZmxvYXQmIHIsIGZsb2F0JiBnLCBmbG9hdCYgYiwgZmxvYXQmIGEpIGNvbnN0OwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UkdCQShkb3VibGUmIHIsIGRvdWJsZSYgZywgZG91Ymxl
JiBiLCBkb3VibGUmIGEpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0SFNMKGRv
dWJsZSYgaCwgZG91YmxlJiBzLCBkb3VibGUmIGwpIGNvbnN0OwpAQCAtMjA1LDkgKzIzNywyNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFJHQkEzMiBjb21wb3NpdGlvbkZpbGwgPSAweEZG
RTFERDU1OwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzRXh0ZW5kZWQoKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHRlbmRlZENvbG9yKiBhc0V4dGVuZGVkKCkgY29u
c3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciYgb3BlcmF0b3I9KGNvbnN0IENvbG9yJik7
CisKKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xv
ciYgYik7CisKIHByaXZhdGU6Ci0gICAgUkdCQTMyIG1fY29sb3I7Ci0gICAgYm9vbCBtX3ZhbGlk
OworCisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGV4dGVuZGVkQ29sb3IgPSAweDA7CisgICAg
c3RhdGljIGNvbnN0IHVpbnQ2NF90IGludmFsaWRSR0JBQ29sb3IgPSAweDE7CisgICAgc3RhdGlj
IGNvbnN0IHVpbnQ2NF90IHZhbGlkUkdCQUNvbG9yQml0ID0gMHgyOworICAgIHN0YXRpYyBjb25z
dCB1aW50NjRfdCB2YWxpZFJHQkFDb2xvciA9IDB4MzsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0VmFsaWQoKTsKKyAgICB2b2lkIHNldEV4dGVuZGVkKCk7CisKKyAgICB1bmlvbiB7Cisg
ICAgICAgIHVpbnQ2NF90IG1fcmdiYUFuZEZsYWdzIHsgaW52YWxpZFJHQkFDb2xvciB9OworICAg
ICAgICBFeHRlbmRlZENvbG9yKiBtX2V4dGVuZGVkQ29sb3I7CisgICAgfTsKIH07CiAKIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CkBAIC0yNjcsMTUgKzMxNywx
NCBAQCBpbmxpbmUgYm9vbCBSR0JBOjpoYXNBbHBoYSgpIGNvbnN0CiB9CiAKIGlubGluZSBDb2xv
cjo6Q29sb3IoUkdCQSBjb2xvciwgQ29sb3JTcGFjZSBzcGFjZSkKLSAgICA6IG1fY29sb3IoY29s
b3IubV9pbnRlZ2VyKQotICAgICwgbV92YWxpZCh0cnVlKQogeworICAgIHNldFJHQihjb2xvci5t
X2ludGVnZXIpOwogICAgIEFTU0VSVF9VTlVTRUQoc3BhY2UsIHNwYWNlID09IENvbG9yU3BhY2VT
UkdCKTsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3Qg
Q29sb3ImIGIpCiB7Ci0gICAgcmV0dXJuIGEucmdiKCkgPT0gYi5yZ2IoKSAmJiBhLmlzVmFsaWQo
KSA9PSBiLmlzVmFsaWQoKTsKKyAgICByZXR1cm4gYS5tX3JnYmFBbmRGbGFncyA9PSBiLm1fcmdi
YUFuZEZsYWdzOwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiBhLCBj
b25zdCBDb2xvciYgYikKQEAgLTMxNSw1ICszNjQsMyBAQCBpbmxpbmUgUkdCQTMyIGNvbG9yV2l0
aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gb3ZlcnJpZGVBbHBo
YQogV0VCQ09SRV9FWFBPUlQgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29u
c3QgQ29sb3ImKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ29sb3Jf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRD
b2xvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9y
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42NzQ3OGQyYjQ3N2M2ODQxM2E0NmE4ZWIzNWM0NmRjMTA3ZGMzY2Rj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0
ZW5kZWRDb2xvci5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZENvbG9yLmgiCisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworRXh0ZW5kZWRDb2xvciogRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGZsb2F0IHIsIGZs
b2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEsIGNvbnN0IENvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7
CisgICAgRXh0ZW5kZWRDb2xvciogY29sb3IgPSBuZXcgRXh0ZW5kZWRDb2xvcihyLCBnLCBiLCBh
LCBjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gY29sb3I7Cit9CisKK0V4dGVuZGVkQ29sb3I6On5F
eHRlbmRlZENvbG9yKCkKK3sKK30KKwordm9pZCBFeHRlbmRlZENvbG9yOjpyZWYoKQoreworICAg
ICsrbV9yZWZDb3VudDsKK30KKwordm9pZCBFeHRlbmRlZENvbG9yOjpkZXJlZigpCit7CisgICAg
QVNTRVJUKG1fcmVmQ291bnQpOworICAgIGlmICghLS1tX3JlZkNvdW50KQorICAgICAgICBkZWxl
dGUgdGhpczsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRXh0ZW5kZWRDb2xvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RXh0ZW5kZWRDb2xvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlNzNjYTk5M2I4N2MzYzM1N2Y3OWJhMmRkZDJj
MTg5MGM0MmI4OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9FeHRlbmRlZENvbG9yLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
Q29sb3JTcGFjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV4dGVuZGVkQ29s
b3IgeworcHVibGljOgorICAgIHN0YXRpYyBFeHRlbmRlZENvbG9yKiBjcmVhdGUoZmxvYXQgciwg
ZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSwgY29uc3QgQ29sb3JTcGFjZSYgY29sb3JTcGFjZSA9
IENvbG9yU3BhY2U6OkNvbG9yU3BhY2VTUkdCKTsKKworICAgIH5FeHRlbmRlZENvbG9yKCk7CisK
KyAgICBmbG9hdCByZWQoKSBjb25zdCB7IHJldHVybiBtX3JlZDsgfQorICAgIGZsb2F0IGdyZWVu
KCkgY29uc3QgeyByZXR1cm4gbV9ncmVlbjsgfQorICAgIGZsb2F0IGJsdWUoKSBjb25zdCB7IHJl
dHVybiBtX2JsdWU7IH0KKyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGE7
IH0KKworICAgIGNvbnN0IENvbG9yU3BhY2UmIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBt
X2NvbG9yU3BhY2U7IH0KKworICAgIHZvaWQgcmVmKCk7CisgICAgdm9pZCBkZXJlZigpOworCitw
cml2YXRlOgorICAgIEV4dGVuZGVkQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEsIGNv
bnN0IENvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCisgICAgICAgIDogbV9yZWQocikKKyAgICAgICAg
LCBtX2dyZWVuKGcpCisgICAgICAgICwgbV9ibHVlKGIpCisgICAgICAgICwgbV9hbHBoYShhKQor
ICAgICAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQorICAgIHsgfQorCisgICAgZmxvYXQg
bV9yZWQgeyAwIH07CisgICAgZmxvYXQgbV9ncmVlbiB7IDAgfTsKKyAgICBmbG9hdCBtX2JsdWUg
eyAwIH07CisgICAgZmxvYXQgbV9hbHBoYSB7IDAgfTsKKworICAgIENvbG9yU3BhY2UgbV9jb2xv
clNwYWNlIHsgQ29sb3JTcGFjZTo6Q29sb3JTcGFjZVNSR0IgfTsKKworICAgIHVuc2lnbmVkIG1f
cmVmQ291bnQgeyAxIH07Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCBjZTU4YTI1MTkyNWE2
NjgyYjNjN2YwMWFkYzg4YTBiNzQ4NTNlYjZiLi5lNzYxYzU5ZTg1MzA5OTUwY2FiNTAyNWI1ODdk
NjlkNDhjYTQzNzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTEzNjksOCArMTM2OSw4IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbnN0IENvbW1pdFN0YXRl
JiBjb21taXRTdGF0ZSwgY29uCiAgICAgLy8gVXNlIGhhdmluZyBhIHRyYW5zZm9ybSBhcyBhIGtl
eSB0byBtYWtpbmcgdGhlIHRpbGUgd2FzaCBsYXllci4gSWYgZXZlcnkgbGF5ZXIgZ2V0cyBhIHdh
c2gsCiAgICAgLy8gdGhleSBzdGFydCB0byBvYnNjdXJlIHVzZWZ1bCBpbmZvcm1hdGlvbi4KICAg
ICBpZiAoKCFtX3RyYW5zZm9ybS5pc0lkZW50aXR5KCkgfHwgbV91c2luZ1RpbGVkQmFja2luZykg
JiYgIW1fdmlzaWJsZVRpbGVXYXNoTGF5ZXIpIHsKLSAgICAgICAgc3RhdGljIENvbG9yIHdhc2hG
aWxsQ29sb3IoMjU1LCAwLCAwLCA1MCk7Ci0gICAgICAgIHN0YXRpYyBDb2xvciB3YXNoQm9yZGVy
Q29sb3IoMjU1LCAwLCAwLCAxMDApOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29s
b3I+IHdhc2hGaWxsQ29sb3IoMjU1LCAwLCAwLCA1MCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxDb2xvcj4gd2FzaEJvcmRlckNvbG9yKDI1NSwgMCwgMCwgMTAwKTsKICAgICAgICAg
CiAgICAgICAgIG1fdmlzaWJsZVRpbGVXYXNoTGF5ZXIgPSBjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIo
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgdGhpcyk7CiAgICAgICAgIFN0cmluZyBu
YW1lID0gU3RyaW5nOjpmb3JtYXQoIlZpc2libGUgVGlsZSBXYXNoIExheWVyICVwIiwgbV92aXNp
YmxlVGlsZVdhc2hMYXllci0+cGxhdGZvcm1MYXllcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKaW5kZXggNmQ4OGM4OGRkNGFhNmQyZDBh
YzM0ZDMxNGFmNmRmMmJhZTI3ZDU5OC4uNzNmZGUyMDAyYzMzNzVhMmQ3YzZiYzU2NTMxNDJhMzU4
NWZkNjFlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Q29sb3JDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29s
b3JDRy5jcHAKQEAgLTczLDggKzczLDcgQEAgc3RhdGljIENHQ29sb3JSZWYgY3JlYXRlQ0dDb2xv
cldpdGhEZXZpY2VSR0JBKENHQ29sb3JSZWYgc291cmNlQ29sb3IpCiBDb2xvcjo6Q29sb3IoQ0dD
b2xvclJlZiBjb2xvcikKIHsKICAgICBpZiAoIWNvbG9yKSB7Ci0gICAgICAgIG1fY29sb3IgPSAw
OwotICAgICAgICBtX3ZhbGlkID0gZmFsc2U7CisgICAgICAgIG1fcmdiYUFuZEZsYWdzID0gaW52
YWxpZFJHQkFDb2xvcjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTExLDggKzExMCw3
IEBAIENvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9CiAKLSAgICBtX2NvbG9yID0gbWFrZVJHQkEociAqIDI1NSwgZyAqIDI1
NSwgYiAqIDI1NSwgYSAqIDI1NSk7Ci0gICAgbV92YWxpZCA9IHRydWU7CisgICAgc2V0UkdCKG1h
a2VSR0JBKHIgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTUsIGEgKiAyNTUpKTsKIH0KIAogc3RhdGlj
IENHQ29sb3JSZWYgbGVha0NHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKaW5kZXggOGY1NmJh
NmZiNGUwYjY1YTk5YzI3M2QzYjQ3MGJmZGI2YjM1YjlhZi4uYWVhMzdmOGMxZDM2ZjVmYWEzYTNi
ZGM5MzRhMWFjMDY5YTAxNTEyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCkBAIC0yNiwxOSArMjYsMTcgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogQ29sb3I6OkNvbG9yKGNvbnN0IEdka0NvbG9yJiBjKQotICAgIDogbV9jb2xv
cihtYWtlUkdCKGMucmVkID4+IDgsIGMuZ3JlZW4gPj4gOCwgYy5ibHVlID4+IDgpKQotICAgICwg
bV92YWxpZCh0cnVlKQogeworICAgIHNldFJHQihtYWtlUkdCKGMucmVkID4+IDgsIGMuZ3JlZW4g
Pj4gOCwgYy5ibHVlID4+IDgpKTsKIH0KIAogI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgogQ29s
b3I6OkNvbG9yKGNvbnN0IEdka1JHQkEmIGMpCi0gICAgOiBtX2NvbG9yKG1ha2VSR0JBKHN0YXRp
Y19jYXN0PGludD4oYy5yZWQgKiAyNTUpLAotICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQ+KGMuZ3JlZW4gKiAyNTUpLAotICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQ+KGMuYmx1ZSAqIDI1NSksCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludD4oYy5hbHBoYSAqIDI1NSkpKQotICAgICwgbV92YWxpZCh0cnVlKQogeworICAgIHNl
dFJHQihtYWtlUkdCQShzdGF0aWNfY2FzdDxpbnQ+KGMucmVkICogMjU1KSwKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50PihjLmdyZWVuICogMjU1KSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihj
LmJsdWUgKiAyNTUpLAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGMuYWxwaGEgKiAyNTUpKSk7
CiB9CiAKIENvbG9yOjpvcGVyYXRvciBHZGtSR0JBKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAppbmRleCA5
MWMxZGExOTNmYmIxNWQzNGQ3MzQ1YzE1NDQ1NzdkOGE3MWQ2YTYwLi43MjRhMTA1ZTI0ZmY3MTQ5
MzczNTNkYWZiZTJkMmI2OTBhZGVlNzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCkBAIC0zNCw4ICszNCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ29sb3I6OkNvbG9yKEQyRDFfQ09MT1JfRiBjb2xvcikK
IHsKLSAgICBtX2NvbG9yID0gbWFrZVJHQkEoY29sb3IuciAqIDI1NSwgY29sb3IuZyAqIDI1NSwg
Y29sb3IuYiAqIDI1NSwgY29sb3IuYSAqIDI1NSk7Ci0gICAgbV92YWxpZCA9IHRydWU7CisgICAg
c2V0UkdCKG1ha2VSR0JBKGNvbG9yLnIgKiAyNTUsIGNvbG9yLmcgKiAyNTUsIGNvbG9yLmIgKiAy
NTUsIGNvbG9yLmEgKiAyNTUpKTsKIH0KIAogQ29sb3I6Om9wZXJhdG9yIEQyRDFfQ09MT1JfRigp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRk
ZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmNwcAppbmRleCAzODgyMTllNTg5NTJhNmNlOWQyMTNjZTU5Zjg2ODNmZjZjYjg4MjYxLi4w
ZWIxNWE0NWE1MGQ4MTE0NDYzYzA1ZmFkMDg5Yzg1MjM5ZmYxYzhiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKQEAgLTc1LDI1ICs3
NSwyNSBAQCBzdGF0aWMgY29uc3QgZmxvYXQgcmVwbGFjZW1lbnRBcnJvd0NpcmNsZVBhZGRpbmcg
PSAzOwogCiBzdGF0aWMgY29uc3QgQ29sb3ImIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UHJl
c3NlZENvbG9yKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgQ29sb3IgcHJlc3NlZCgxMDUsIDEwNSwg
MTA1LCAyNDIpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gcHJlc3NlZCgxMDUs
IDEwNSwgMTA1LCAyNDIpOwogICAgIHJldHVybiBwcmVzc2VkOwogfQogCiBzdGF0aWMgY29uc3Qg
Q29sb3ImIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0Q29sb3IoKQogewotICAgIHN0YXRpYyBj
b25zdCBDb2xvciBzdGFuZGFyZCgxMjUsIDEyNSwgMTI1LCAyNDIpOworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxDb2xvcj4gc3RhbmRhcmQoMTI1LCAxMjUsIDEyNSwgMjQyKTsKICAgICByZXR1
cm4gc3RhbmRhcmQ7CiB9CiAKIHN0YXRpYyBjb25zdCBDb2xvciYgcmVwbGFjZW1lbnRUZXh0Q29s
b3IoKQogewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBzdGFuZGFyZCgyNDAsIDI0MCwgMjQwLCAy
NTUpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gc3RhbmRhcmQoMjQwLCAyNDAs
IDI0MCwgMjU1KTsKICAgICByZXR1cm4gc3RhbmRhcmQ7CiB9CiAKIHN0YXRpYyBjb25zdCBDb2xv
ciYgdW5hdmFpbGFibGVQbHVnaW5Cb3JkZXJDb2xvcigpCiB7Ci0gICAgc3RhdGljIGNvbnN0IENv
bG9yIHN0YW5kYXJkKDI1NSwgMjU1LCAyNTUsIDIxNik7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPENvbG9yPiBzdGFuZGFyZCgyNTUsIDI1NSwgMjU1LCAyMTYpOwogICAgIHJldHVybiBzdGFu
ZGFyZDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZy
YW1lU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAK
aW5kZXggMTc5YmQ0MjZjZWE4NjYzZWRkYTA1MjZhMWVjOWYyN2Q2NTRhODlhZi4uNzc0OGM0Nzhl
YjBkZTQ4Njg1NWFlMWRlZjc4NTZiYjMyZjI1MzY0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCkBAIC02OSwxOSArNjksMTkgQEAgUmVuZGVyRnJhbWVT
ZXQ6OkdyaWRBeGlzOjpHcmlkQXhpcygpCiAKIHN0YXRpYyBjb25zdCBDb2xvciYgYm9yZGVyU3Rh
cnRFZGdlQ29sb3IoKQogewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBjb2xvcigxNzAsIDE3MCwg
MTcwKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IGNvbG9yKDE3MCwgMTcwLCAx
NzApOwogICAgIHJldHVybiBjb2xvcjsKIH0KIAogc3RhdGljIGNvbnN0IENvbG9yJiBib3JkZXJF
bmRFZGdlQ29sb3IoKQogewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBjb2xvciA9IENvbG9yOjpi
bGFjazsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IGNvbG9yID0gQ29sb3I6OmJs
YWNrOwogICAgIHJldHVybiBjb2xvcjsKIH0KIAogc3RhdGljIGNvbnN0IENvbG9yJiBib3JkZXJG
aWxsQ29sb3IoKQogewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBjb2xvcigyMDgsIDIwOCwgMjA4
KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IGNvbG9yKDIwOCwgMjA4LCAyMDgp
OwogICAgIHJldHVybiBjb2xvcjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDZWxsLmNwcAppbmRleCA0NWQ4YzdiZWI0MWU2YmI4ZDQwZWYzM2Y3ZGFjNGM0N2Qy
NGJjYTIyLi5jMDBjYmNjOTkxM2QxM2Q3NmYxN2FmZDgzMmM4NjhmMmFiNzhlYjlkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcApAQCAtNTIsNyArNTIs
NyBAQCBzdHJ1Y3QgU2FtZVNpemVBc1JlbmRlclRhYmxlQ2VsbCA6IHB1YmxpYyBSZW5kZXJCbG9j
a0Zsb3cgewogfTsKIAogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlbmRlclRhYmxlQ2VsbCkgPT0g
c2l6ZW9mKFNhbWVTaXplQXNSZW5kZXJUYWJsZUNlbGwpLCBSZW5kZXJUYWJsZUNlbGxfc2hvdWxk
X3N0YXlfc21hbGwpOwotQ09NUElMRV9BU1NFUlQoc2l6ZW9mKENvbGxhcHNlZEJvcmRlclZhbHVl
KSA9PSAxNiwgQ29sbGFwc2VkQm9yZGVyVmFsdWVfc2hvdWxkX3N0YXlfc21hbGwpOworQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKENvbGxhcHNlZEJvcmRlclZhbHVlKSA8PSAyNCwgQ29sbGFwc2VkQm9y
ZGVyVmFsdWVfc2hvdWxkX3N0YXlfc21hbGwpOwogCiBSZW5kZXJUYWJsZUNlbGw6OlJlbmRlclRh
YmxlQ2VsbChFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQogICAgIDogUmVu
ZGVyQmxvY2tGbG93KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCmluZGV4IDg3OTBmNzljM2QzMTk1NTc5MTljZGE4MzI1
Y2JkZmYzMWVlNzhlZWIuLmJmODY3NDgzNDYzNTM4MzQzZmYxMDdhNmUxYmFiNDI3ZDMwZTBkNDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KQEAgLTMyNSw3
ICszMjUsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpzZXRDb250ZW50U2l6ZUNhdGVnb3J5KGNv
bnN0IFN0cmluZyYgY29udGVudFNpemVDYXRlZ29yeSkKIAogY29uc3QgQ29sb3ImIFJlbmRlclRo
ZW1lSU9TOjpzaGFkb3dDb2xvcigpIGNvbnN0CiB7Ci0gICAgc3RhdGljIENvbG9yIGNvbG9yKDAu
MGYsIDAuMGYsIDAuMGYsIDAuN2YpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4g
Y29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC43Zik7CiAgICAgcmV0dXJuIGNvbG9yOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkluZGljYXRlTGF5ZXIubW0g
Yi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkluZGljYXRlTGF5ZXIubW0KaW5kZXggZjk0
NDRkYzM3NGUwNDJiNmQwNTA3NzBhMjYwNzJlMWU3YmUxMmM0ZC4uMjQ3ODA5ZGQzODk4NmIxOGY1
ZTA2OTE0NTBiMmQ1MmYyNmQyNTg3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJJbmRpY2F0ZUxheWVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViSW5kaWNhdGVMYXllci5tbQpAQCAtNDksNyArNDksNyBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKICAgICBzZWxmLmNvbnRlbnRzU2NhbGUgPSBbW193ZWJWaWV3IHdpbmRvd10gc2NyZWVu
U2NhbGVdOwogCiAgICAgLy8gQmx1ZSBoaWdobGlnaHQgY29sb3IuCi0gICAgc3RhdGljIENvbG9y
IGhpZ2hsaWdodENvbG9yKDExMS4wZiAvIDI1NS4wZiwgMTY4LjBmIC8gMjU1LjBmLCAyMjAuMGYg
LyAyNTUuMGYsIDAuNjZmKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IGhpZ2hs
aWdodENvbG9yKDExMS4wZiAvIDI1NS4wZiwgMTY4LjBmIC8gMjU1LjBmLCAyMjAuMGYgLyAyNTUu
MGYsIDAuNjZmKTsKICAgICBzZWxmLmJhY2tncm91bmRDb2xvciA9IGNhY2hlZENHQ29sb3IoaGln
aGxpZ2h0Q29sb3IpOwogCiAgICAgcmV0dXJuIHNlbGY7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmJhYzEwODNiNjkxZGY2OGNhYjFiZTJhYWRm
MjgwMmI2MDExMzljOS4uODI2ZmM4ODVmOWZjMDJmM2NkNmFhZTViMzZjODVlMGEwNjAyNmE2MiAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE2IEBACisyMDE2LTEwLTAzICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKwor
ICAgICAgICBBZGQgcHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgZXh0ZW5kZWQgY29sb3JzIHRvIFdl
YkNvcmU6OkNvbG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjI4NzgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI4NTk2NDEzPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgbmV3IEFQSSB0ZXN0IGZv
ciBDb2xvcnMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3Iu
Y3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTYtMDktMjcgIFdlbnNv
biBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRvcHQgTWVkaWFS
ZW1vdGUgU1BJIHRvIGFjaGlldmUgZGVzaXJlZCBOb3cgUGxheWluZyBiZWhhdmlvcgpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yLmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvci5jcHAKaW5kZXggZThlNjgyMGU1NmNm
MTNhZDkwNjBkOTQxMjRjNjhiM2ZiYWU2ZDkzMy4uODU2MjVkMjc3NDg4MjMwNmQ3NDE5NDk1MDk2
ZGZmNjdkOTc1ZjkwZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0NvbG9yLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29s
b3IuY3BwCkBAIC0xNDQsNCArMTQ0LDI3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNWX0xpZ2h0R3Jh
eSkKICAgICBFWFBFQ1RfRE9VQkxFX0VRKDAuNzUyOTQxMTc2NDcwNTg4MjIsIHYpOwogfQogCitU
RVNUKENvbG9yLCBWYWxpZGl0eSkKK3sKKyAgICBDb2xvciBpbnZhbGlkQ29sb3I7CisgICAgRVhQ
RUNUX0ZBTFNFKGludmFsaWRDb2xvci5pc1ZhbGlkKCkpOworICAgIEVYUEVDVF9GQUxTRShpbnZh
bGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKKyAgICBFWFBFQ1RfVFJVRShpbnZhbGlkQ29sb3IuYXNF
eHRlbmRlZCgpID09IG51bGxwdHIpOworCisgICAgQ29sb3Igb3RoZXJJbnZhbGlkQ29sb3IgPSBp
bnZhbGlkQ29sb3I7CisgICAgRVhQRUNUX0ZBTFNFKG90aGVySW52YWxpZENvbG9yLmlzVmFsaWQo
KSk7CisgICAgRVhQRUNUX0ZBTFNFKG90aGVySW52YWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7Cisg
ICAgRVhQRUNUX1RSVUUob3RoZXJJbnZhbGlkQ29sb3IuYXNFeHRlbmRlZCgpID09IG51bGxwdHIp
OworCisgICAgQ29sb3IgdmFsaWRDb2xvcigyNTUsIDAsIDApOworICAgIEVYUEVDVF9UUlVFKHZh
bGlkQ29sb3IuaXNWYWxpZCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodmFsaWRDb2xvci5pc0V4dGVu
ZGVkKCkpOworICAgIEVYUEVDVF9UUlVFKHZhbGlkQ29sb3IuYXNFeHRlbmRlZCgpID09IG51bGxw
dHIpOworCisgICAgQ29sb3Igb3RoZXJWYWxpZENvbG9yID0gdmFsaWRDb2xvcjsKKyAgICBFWFBF
Q1RfVFJVRShvdGhlclZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob3Ro
ZXJWYWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CisgICAgRVhQRUNUX1RSVUUob3RoZXJWYWxpZENv
bG9yLmFzRXh0ZW5kZWQoKSA9PSBudWxscHRyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290530</attachid>
            <date>2016-10-03 15:41:41 -0700</date>
            <delta_ts>2016-10-03 15:41:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162878-20161003153832.patch</filename>
            <type>text/plain</type>
            <size>33244</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2NTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzU4MTUyMTQyNWEyYTQ1
NGYzNjQxYzRhMmE2NWE5MzRjNmVmOTE4YS4uNzNlMzAyNmZkNGRmZTE0MjM2ZjU4YjZkODdmOGVl
YWYxZDFkNTliZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDE2LTEwLTAzICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcHJlbGltaW5hcnkgc3Vw
cG9ydCBmb3IgZXh0ZW5kZWQgY29sb3JzIHRvIFdlYkNvcmU6OkNvbG9yCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI4NzgKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzI4NTk2NDEzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBhbiBFeHRlbmRlZENvbG9yIGNsYXNzIHRoYXQgd2lsbCBob2xkIHRo
ZSBkYXRhIG5lY2Vzc2FyeQorICAgICAgICBmb3Igd2lkZXItdGhhbi1zUkdCIChhbmQgbW9yZSBw
cmVjaXNlKSBjb2xvcnMuIEluIG9yZGVyIHRvCisgICAgICAgIGF2b2lkIGluY3JlYXNpbmcgdGhl
IHNpemUgb2YgQ29sb3IsIGltcGxlbWVudCBhIHRhZ2dlZAorICAgICAgICBwb2ludGVyIHRoYXQg
aXMgZWl0aGVyIHJlZmVyZW5jaW5nIGFuIEV4dGVuZGVkQ29sb3IsIG9yCisgICAgICAgIGlzIGEg
NjQtYml0IG51bWJlciB3aXRoIHRoZSB0b3AgMzItYml0cyBiZWluZyB0aGUgUkdCQSwgYW5kCisg
ICAgICAgIHRoZSBib3R0b20gMiBiaXRzIGluZGljYXRpbmcgYW4gaW52YWxpZCBSR0JBIG9yIGEg
dmFsaWQgUkdCQSwKKyAgICAgICAgcGx1cyB0aGUgdGFnLgorCisgICAgICAgIEFkZCBjb3B5IGNv
bnN0cnVjdG9ycyBhbmQgb3BlcmF0b3I9IHNvIHRoYXQgdGhlIG5ldyBDb2xvciBvYmplY3RzCisg
ICAgICAgIGFyZSBjb3JyZWN0bHkgY29waWVkLgorCisgICAgICAgIFRoZXJlIGlzbid0IHlldCBh
IHdheSB0byBjcmVhdGUgYW4gRXh0ZW5kZWRDb2xvci4gVGhhdCdzIGNvbWluZworICAgICAgICBp
biBhIGZvbGxvd3VwIHBhdGNoIChhbmQgd2lsbCByZXF1aXJlIGNoYW5nZXMgdG8gdGhlIENTUyBw
YXJzZXIpLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMsIGFuZCBuZXcgQVBJ
IHRlc3RzIGluIENvbG9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgbmV3IGZpbGVzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOiBVcGRhdGUgZXZlcnl0aGluZyB0byB1
c2UgbV9yZ2JhQW5kRmxhZ3MKKyAgICAgICAgaW5zdGVhZCBvZiBtX2NvbG9yICsgbV92YWxpZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6fkNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvcj0pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpzZXROYW1lZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjps
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFyayk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6c2V0VmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldEV4dGVuZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0V4dGVuZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjphc0V4dGVuZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5oOiBJbXBsZW1lbnQgdGhlIHRhZ2dlZCB1bmlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNWYWxpZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpncmVlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Ymx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
YWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnJnYik6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6c2V0UkdCKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHA6IE5ldyBmaWxlLiBIb2xk
cyBmbG9hdGluZyBwb2ludAorICAgICAgICByZWQsIGdyZWVuLCBibHVlIGFuZCBhbHBoYSwgcGx1
cyBhIGNvbG9yIHNwYWNlLiBJbXBsZW1lbnRzIHJlZmVyZW5jZQorICAgICAgICBjb3VudGluZyBk
aXJlY3RseS4KKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp+RXh0ZW5kZWRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpyZWYpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRD
b2xvcjo6ZGVyZWYpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbmRlZENvbG9yOjpncmVlbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENv
bG9yOjpibHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmFscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmNvbG9yU3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5kZWRDb2xvcjo6RXh0ZW5kZWRDb2xvcik6CisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDogVXBkYXRlIHRoZSBjb25zdHJ1Y3RvcnMgZm9yCisg
ICAgICAgIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBjb2xvciBjbGFzc2VzLgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29s
b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Q29sb3IpOgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmNwcDogVXNlIE5ldmVyRGVzdHJveWVkLgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZW1l
bnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFj
ZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlbWVu
dFRleHRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjp1bmF2YWlsYWJsZVBsdWdpbkJvcmRlckNv
bG9yKToKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHA6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyU3RhcnRFZGdlQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Ym9yZGVyRW5kRWRnZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmJvcmRlckZpbGxDb2xv
cik6CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDogVGhpcyBncm93
cyBpbiBzaXplIHNsaWdodGx5CisgICAgICAgIGJlY2F1c2UgaXQgY2FuIG5vIGxvbmdlciBwYWNr
IGJpdHMuCisKIDIwMTYtMDktMjcgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFVzZSBDb2xvciByZWZlcmVuY2VzIHdoZXJlIHBvc3NpYmxlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDc4NzdmZWQ4NzgzY2NkM2RiMWRlZTBkYWVjNGJlZGIwNTYwMTUyMTcuLjg2ZmZj
ZGQ2NTFkMGNmZjdhOTVmNmM5MjkyMTY2OTdhNzZiZTYyYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CkBAIC0yMTkyLDYgKzIxOTIsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJh
dGVkSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9y
Q2xpZW50LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50M0QuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDQyZjcyNzhjZjA3ZDM5NjM3NTQwZTY1OGYwZDBkZDE5NTkxN2ZlYmQuLmRlMTYwYTQzZjFl
NWI0ZjRlZDUwMGIxYTAwODUxNDQxODAxNDEwMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNzEsNiArMTM3MSw4IEBACiAJ
CTMxQzQyMjQ2MUQ3NEVCOUEwMEYxMjM0MiAvKiBKU1BlcmZvcm1hbmNlVGltaW5nQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzQyMjQ1
MUQ3NEVCOUEwMEYxMjM0MiAvKiBKU1BlcmZvcm1hbmNlVGltaW5nQ3VzdG9tLmNwcCAqLzsgfTsK
IAkJMzFENTkxQjMxNjY5N0E2QzAwRTZCRjAyIC8qIFBsdWdJbkNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFENTkxQjExNjY5N0E2QzAwRTZC
RjAyIC8qIFBsdWdJbkNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTMxRENEMjlEMUFCNEZCREUwMDcyRTgxNyAvKiBBbmltYXRpb25Ucmln
Z2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMURD
RDI5QzFBQjRGQkRFMDA3MkU4MTcgLyogQW5pbWF0aW9uVHJpZ2dlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTMxRENERjQzMURBMUM0NTQwMEVB
NUI5MyAvKiBFeHRlbmRlZENvbG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxRENERjQxMURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9y
LmNwcCAqLzsgfTsKKwkJMzFEQ0RGNDQxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRENERjQy
MURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzFERUE0NTUxQjM5RjREOTAwRjc3MTc4IC8q
IFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMURFQTQ1MzFCMzlGNEQ5MDBGNzcxNzggLyogV2ViU3lzdGVtQmFj
a2Ryb3BMYXllci5tbSAqLzsgfTsKIAkJMzFERUE0NTYxQjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5
c3RlbUJhY2tkcm9wTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxREVBNDU0MUIzOUY0RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExh
eWVyLmggKi87IH07CiAJCTMxREY2MzU3MUFGMTg3REQwMDc4RkQ5MSAvKiBOU0NvbG9yU1BJLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMURGNjM1NjFB
RjE4N0REMDA3OEZEOTEgLyogTlNDb2xvclNQSS5oICovOyB9OwpAQCAtODMwNyw2ICs4MzA5LDgg
QEAKIAkJMzFDNDIyNDUxRDc0RUI5QTAwRjEyMzQyIC8qIEpTUGVyZm9ybWFuY2VUaW1pbmdDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQZXJmb3JtYW5j
ZVRpbWluZ0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRDU5MUIx
MTY2OTdBNkMwMEU2QkYwMiAvKiBQbHVnSW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGx1Z0luQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxRENEMjlDMUFCNEZCREUwMDcyRTgxNyAvKiBBbmltYXRpb25UcmlnZ2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvblRyaWdnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzFEQ0RGNDExREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29s
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5kZWRDb2xv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxRENERjQyMURBMUM0NTQwMEVB
NUI5MyAvKiBFeHRlbmRlZENvbG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEV4dGVuZGVkQ29sb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFERUE0NTMx
QjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMURFQTQ1NDFCMzlGNEQ5MDBGNzcxNzggLyog
V2ViU3lzdGVtQmFja2Ryb3BMYXllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxREY2MzU2MUFGMTg3REQwMDc4RkQ5MSAvKiBOU0NvbG9yU1BJLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5TQ29sb3JTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIwNjM5LDYgKzIwNjQzLDggQEAKIAkJCQlDRERFMDJFOTE4QjNERkM3MDBDRjdGRjEg
LyogQ0RNU2Vzc2lvbi5oICovLAogCQkJCUIyNzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xv
ci5jcHAgKi8sCiAJCQkJQjI3NTM1MzkwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCisJ
CQkJMzFEQ0RGNDExREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuY3BwICovLAorCQkJ
CTMxRENERjQyMURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmggKi8sCiAJCQkJOTM4
MkRGNTcxMEE4RDVDOTAwOTI1NjUyIC8qIENvbG9yU3BhY2UuaCAqLywKIAkJCQkyRDJGQzA1NDE0
NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJCTJE
MkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5oICovLApA
QCAtMjQ4MTAsNiArMjQ4MTYsNyBAQAogCQkJCTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdBMSAvKiBJ
bWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQyMThC
NkI5QUIwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnRNYWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3Nzk3OTFBMEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTMxRENERjQ0MURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1NTVCODdFRDFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MjA1QUI2MTIzOTI5MTAwMEIxNzM4MCAvKiBJ
bWFnZURvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RDMjEyNTFGMTJEMDAzRUYy
NjkgLyogSW1hZ2VJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzAyNDQsNiArMzAyNTEs
NyBAQAogCQkJCUIyMjI3QUVGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdWaWV3RWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FGMjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVmlld1Nw
ZWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODQ4NTIyOEExMTkwMTczQzAwNkVEQzdGIC8qIFNW
R1ZLZXJuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMURDREY0MzFEQTFDNDU0MDBF
QTVCOTMgLyogRXh0ZW5kZWRDb2xvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FGNTBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHWm9vbUFuZFBhbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MkU0RUM5NzBEMDBDMjJCMDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxODA4MTEyMTZGQ0Y0MkYwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVu
dC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmNwcAppbmRleCA4ZjY4YjE0YTQyMDYwYWJkN2VmNjEwMDU4OGU0YWEwZmU0NmFkODhjLi42
NjZjZTVmNjlkOWE0NDhhNWE1NmM0NDJhYWQ1MzEzZjZlODk4NjZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC0yMjUsMjMgKzIyNSw1NSBAQCBpbnQg
ZGlmZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImIGMxLCBjb25zdCBDb2xvciYgYzIpCiBDb2xv
cjo6Q29sb3IoY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIGlmIChuYW1lWzBdID09ICcjJykg
eworICAgICAgICBSR0JBMzIgY29sb3I7CisgICAgICAgIGJvb2wgdmFsaWQ7CisKICAgICAgICAg
aWYgKG5hbWUuaXM4Qml0KCkpCi0gICAgICAgICAgICBtX3ZhbGlkID0gcGFyc2VIZXhDb2xvcihu
YW1lLmNoYXJhY3RlcnM4KCkgKyAxLCBuYW1lLmxlbmd0aCgpIC0gMSwgbV9jb2xvcik7CisgICAg
ICAgICAgICB2YWxpZCA9IHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpICsgMSwgbmFt
ZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV92YWxp
ZCA9IHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSArIDEsIG5hbWUubGVuZ3RoKCkg
LSAxLCBtX2NvbG9yKTsKKyAgICAgICAgICAgIHZhbGlkID0gcGFyc2VIZXhDb2xvcihuYW1lLmNo
YXJhY3RlcnMxNigpICsgMSwgbmFtZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsKKworICAgICAgICBp
ZiAodmFsaWQpCisgICAgICAgICAgICBzZXRSR0IoY29sb3IpOwogICAgIH0gZWxzZQogICAgICAg
ICBzZXROYW1lZENvbG9yKG5hbWUpOwogfQogCiBDb2xvcjo6Q29sb3IoY29uc3QgY2hhciogbmFt
ZSkKIHsKKyAgICBSR0JBMzIgY29sb3I7CisgICAgYm9vbCB2YWxpZDsKICAgICBpZiAobmFtZVsw
XSA9PSAnIycpCi0gICAgICAgIG1fdmFsaWQgPSBwYXJzZUhleENvbG9yKChTdHJpbmcpJm5hbWVb
MV0sIG1fY29sb3IpOworICAgICAgICB2YWxpZCA9IHBhcnNlSGV4Q29sb3IoKFN0cmluZykmbmFt
ZVsxXSwgY29sb3IpOwogICAgIGVsc2UgewogICAgICAgICBjb25zdCBOYW1lZENvbG9yKiBmb3Vu
ZENvbG9yID0gZmluZENvbG9yKG5hbWUsIHN0cmxlbihuYW1lKSk7Ci0gICAgICAgIG1fY29sb3Ig
PSBmb3VuZENvbG9yID8gZm91bmRDb2xvci0+QVJHQlZhbHVlIDogMDsKLSAgICAgICAgbV92YWxp
ZCA9IGZvdW5kQ29sb3I7CisgICAgICAgIGNvbG9yID0gZm91bmRDb2xvciA/IGZvdW5kQ29sb3It
PkFSR0JWYWx1ZSA6IDA7CisgICAgICAgIHZhbGlkID0gZm91bmRDb2xvcjsKICAgICB9CisKKyAg
ICBpZiAodmFsaWQpCisgICAgICAgIHNldFJHQihjb2xvcik7Cit9CisKK0NvbG9yOjpDb2xvcihj
b25zdCBDb2xvciYgb3RoZXIpCisgICAgOiBtX3JnYmFBbmRGbGFncyhvdGhlci5tX3JnYmFBbmRG
bGFncykKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBtX2V4dGVuZGVkQ29sb3It
PnJlZigpOworfQorCitDb2xvcjo6fkNvbG9yKCkKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQor
ICAgICAgICBtX2V4dGVuZGVkQ29sb3ItPmRlcmVmKCk7Cit9CisKK0NvbG9yJiBDb2xvcjo6b3Bl
cmF0b3I9KGNvbnN0IENvbG9yJiBvdGhlcikKK3sKKyAgICBtX3JnYmFBbmRGbGFncyA9IG90aGVy
Lm1fcmdiYUFuZEZsYWdzOworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAgIG1fZXh0ZW5k
ZWRDb2xvci0+cmVmKCk7CisgICAgcmV0dXJuICp0aGlzOwogfQogCiBTdHJpbmcgQ29sb3I6OnNl
cmlhbGl6ZWQoKSBjb25zdApAQCAtMjkxLDYgKzMyMyw3IEBAIFN0cmluZyBDb2xvcjo6Y3NzVGV4
dCgpIGNvbnN0CiAKIFN0cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBjb25z
dAogeworICAgIC8vIEZJWE1FOiBIYW5kbGUgRXh0ZW5kZWRDb2xvcnMuCiAgICAgaWYgKGFscGhh
KCkgPCAweEZGKQogICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiMlMDJYJTAyWCUwMlgl
MDJYIiwgcmVkKCksIGdyZWVuKCksIGJsdWUoKSwgYWxwaGEoKSk7CiAgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCIjJTAyWCUwMlglMDJYIiwgcmVkKCksIGdyZWVuKCksIGJsdWUoKSk7CkBAIC0z
MTUsMTQgKzM0OCwxNiBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IE5hbWVkQ29sb3IqIGZpbmROYW1l
ZENvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSkKIHZvaWQgQ29sb3I6OnNldE5hbWVkQ29sb3IoY29u
c3QgU3RyaW5nJiBuYW1lKQogewogICAgIGNvbnN0IE5hbWVkQ29sb3IqIGZvdW5kQ29sb3IgPSBm
aW5kTmFtZWRDb2xvcihuYW1lKTsKLSAgICBtX2NvbG9yID0gZm91bmRDb2xvciA/IGZvdW5kQ29s
b3ItPkFSR0JWYWx1ZSA6IDA7Ci0gICAgbV92YWxpZCA9IGZvdW5kQ29sb3I7CisgICAgaWYgKGZv
dW5kQ29sb3IpCisgICAgICAgIHNldFJHQihmb3VuZENvbG9yLT5BUkdCVmFsdWUpOworICAgIGVs
c2UKKyAgICAgICAgbV9yZ2JhQW5kRmxhZ3MgPSBpbnZhbGlkUkdCQUNvbG9yOwogfQogCiBDb2xv
ciBDb2xvcjo6bGlnaHQoKSBjb25zdAogewogICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNh
c2UgZm9yIHNwZWVkLgotICAgIGlmIChtX2NvbG9yID09IGJsYWNrKQorICAgIGlmIChyZ2IoKSA9
PSBibGFjaykKICAgICAgICAgcmV0dXJuIGxpZ2h0ZW5lZEJsYWNrOwogICAgIAogICAgIGNvbnN0
IGZsb2F0IHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOwpAQCAtMzQ3LDcg
KzM4Miw3IEBAIENvbG9yIENvbG9yOjpsaWdodCgpIGNvbnN0CiBDb2xvciBDb2xvcjo6ZGFyaygp
IGNvbnN0CiB7CiAgICAgLy8gSGFyZGNvZGUgdGhpcyBjb21tb24gY2FzZSBmb3Igc3BlZWQuCi0g
ICAgaWYgKG1fY29sb3IgPT0gd2hpdGUpCisgICAgaWYgKHJnYigpID09IHdoaXRlKQogICAgICAg
ICByZXR1cm4gZGFya2VuZWRXaGl0ZTsKICAgICAKICAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3Rv
ciA9IG5leHRhZnRlcmYoMjU2LjBmLCAwLjBmKTsKQEAgLTU2MSw0ICs1OTYsMjggQEAgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3ImIGNvbG9yKQogICAg
IHJldHVybiB0cyA8PCBjb2xvci5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpOwogfQogCit2b2lk
IENvbG9yOjpzZXRWYWxpZCgpCit7CisgICAgbV9yZ2JhQW5kRmxhZ3MgfD0gdmFsaWRSR0JBQ29s
b3I7Cit9CisKK3ZvaWQgQ29sb3I6OnNldEV4dGVuZGVkKCkKK3sKKyAgICAvLyBWYWxpZCBjb2xv
cnMgc2hvdWxkIG5vdCBjaGFuZ2UgdHlwZS4KKyAgICBBU1NFUlQoIWlzVmFsaWQoKSk7CisgICAg
bV9yZ2JhQW5kRmxhZ3MgJj0gfihpbnZhbGlkUkdCQUNvbG9yKTsKK30KKworYm9vbCBDb2xvcjo6
aXNFeHRlbmRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEobV9yZ2JhQW5kRmxhZ3MgJiBpbnZh
bGlkUkdCQUNvbG9yKTsKK30KKworRXh0ZW5kZWRDb2xvciogQ29sb3I6OmFzRXh0ZW5kZWQoKSBj
b25zdAoreworICAgIGlmICghaXNFeHRlbmRlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gbV9leHRlbmRlZENvbG9yOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAppbmRleCA2NTIwMDNhM2M1
YjA5MGNhMWQxODQyNzFlMDBkZWI1OGNlNGZlN2U1Li5kMWRhMThlZWY2Y2QyMzk1NTBhM2U4Mzg5
MjkyMGIzMjk4M2MwZWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmgKQEAgLTIzLDEwICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBD
b2xvcl9oCi0jZGVmaW5lIENvbG9yX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3JT
cGFjZS5oIgorI2luY2x1ZGUgIkV4dGVuZGVkQ29sb3IuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUV4
cG9ydE1hY3Jvcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjbWF0aD4KQEAg
LTEwNSwxOSArMTA1LDQ3IEBAIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSR0JBJiwgY29uc3QgUkdC
QSYpOwogY2xhc3MgQ29sb3IgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIENvbG9yKCkgOiBtX2NvbG9yKDApLCBtX3ZhbGlkKGZhbHNlKSB7IH0KLSAgICBDb2xv
cihSR0JBLCBDb2xvclNwYWNlKTsKKyAgICBDb2xvcigpIHsgfQogCiAgICAgLy8gRklYTUU6IFJl
bW92ZSBhbGwgdGhlc2UgY29uc3RydWN0b3JzIGFuZCBjcmVhdGlvbiBmdW5jdGlvbnMgYW5kIHJl
cGxhY2UgdGhlIG9uZXMgdGhhdCBhcmUgc3RpbGwgbmVlZGVkIHdpdGggZnJlZSBmdW5jdGlvbnMu
Ci0gICAgQ29sb3IoUkdCQTMyIGNvbG9yLCBib29sIHZhbGlkID0gdHJ1ZSkgOiBtX2NvbG9yKGNv
bG9yKSwgbV92YWxpZCh2YWxpZCkgeyBBU1NFUlQoIW1fY29sb3IgfHwgbV92YWxpZCk7IH0KLSAg
ICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiKSA6IG1fY29sb3IobWFrZVJHQihyLCBnLCBiKSks
IG1fdmFsaWQodHJ1ZSkgeyB9Ci0gICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEp
IDogbV9jb2xvcihtYWtlUkdCQShyLCBnLCBiLCBhKSksIG1fdmFsaWQodHJ1ZSkgeyB9Ci0gICAg
Ly8gQ29sb3IgaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8gMzJiaXQgUkdCQSwgcGVyaGFwcyBzb21l
IGRheSB3ZSdsbCBzdXBwb3J0IGJldHRlciBjb2xvcnMKLSAgICBDb2xvcihmbG9hdCByLCBmbG9h
dCBnLCBmbG9hdCBiLCBmbG9hdCBhKSA6IG1fY29sb3IobWFrZVJHQkEzMkZyb21GbG9hdHMociwg
ZywgYiwgYSkpLCBtX3ZhbGlkKHRydWUpIHsgfQorCisgICAgQ29sb3IoUkdCQTMyIGNvbG9yLCBi
b29sIHZhbGlkID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAg
IHNldFJHQihjb2xvcik7CisgICAgfQorCisgICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYikK
KyAgICB7CisgICAgICAgIHNldFJHQihyLCBnLCBiKTsKKyAgICB9CisKKyAgICBDb2xvcihpbnQg
ciwgaW50IGcsIGludCBiLCBpbnQgYSkKKyAgICB7CisgICAgICAgIHNldFJHQihtYWtlUkdCQShy
LCBnLCBiLCBhKSk7CisgICAgfQorCisgICAgQ29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQg
YiwgZmxvYXQgYSkKKyAgICB7CisgICAgICAgIHNldFJHQihtYWtlUkdCQTMyRnJvbUZsb2F0cyhy
LCBnLCBiLCBhKSk7CisgICAgfQorCiAgICAgLy8gQ3JlYXRlcyBhIG5ldyBjb2xvciBmcm9tIHRo
ZSBzcGVjaWZpYyBDTVlLIGFuZCBhbHBoYSB2YWx1ZXMuCi0gICAgQ29sb3IoZmxvYXQgYywgZmxv
YXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkgOiBtX2NvbG9yKG1ha2VSR0JBRnJvbUNN
WUtBKGMsIG0sIHksIGssIGEpKSwgbV92YWxpZCh0cnVlKSB7IH0KKyAgICBDb2xvcihmbG9hdCBj
LCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQorICAgIHsKKyAgICAgICAgc2V0
UkdCKG1ha2VSR0JBRnJvbUNNWUtBKGMsIG0sIHksIGssIGEpKTsKKyAgICB9CisKICAgICBXRUJD
T1JFX0VYUE9SVCBleHBsaWNpdCBDb2xvcihjb25zdCBTdHJpbmcmKTsKICAgICBleHBsaWNpdCBD
b2xvcihjb25zdCBjaGFyKik7CisKKyAgICAvLyBGSVhNRTogQWRkIGNvbnN0cnVjdG9yIGZvciBF
eHRlbmRlZENvbG9yIHR5cGUuCisKKyAgICBDb2xvcihSR0JBLCBDb2xvclNwYWNlKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBDb2xvcihjb25zdCBDb2xvciYpOworCisgICAgV0VCQ09SRV9FWFBPUlQg
fkNvbG9yKCk7CisKICAgICBzdGF0aWMgQ29sb3IgY3JlYXRlVW5jaGVja2VkKGludCByLCBpbnQg
ZywgaW50IGIpCiAgICAgewogICAgICAgICBSR0JBMzIgY29sb3IgPSAweEZGMDAwMDAwIHwgciA8
PCAxNiB8IGcgPDwgOCB8IGI7CkBAIC0xNDEsMTkgKzE2OSwyMyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldE5hbWVkQ29sb3IoY29uc3QgU3RyaW5nJik7CiAKLSAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoaXMgYWZ0ZXIgbW92aW5nIGNsaWVudHMgdG8gYWxsIHVzZSBPcHRpb25hbENvbG9yIGluc3Rl
YWQuCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV92YWxpZDsgfQorICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmdiYUFuZEZsYWdzICYgdmFsaWRSR0JBQ29s
b3JCaXQ7IH0KIAogICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBhbHBoYSgpIDwg
MjU1OyB9CiAKLSAgICBpbnQgcmVkKCkgY29uc3QgeyByZXR1cm4gcmVkQ2hhbm5lbChtX2NvbG9y
KTsgfQotICAgIGludCBncmVlbigpIGNvbnN0IHsgcmV0dXJuIGdyZWVuQ2hhbm5lbChtX2NvbG9y
KTsgfQotICAgIGludCBibHVlKCkgY29uc3QgeyByZXR1cm4gYmx1ZUNoYW5uZWwobV9jb2xvcik7
IH0KLSAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBhbHBoYUNoYW5uZWwobV9jb2xvcik7
IH0KKyAgICBpbnQgcmVkKCkgY29uc3QgeyByZXR1cm4gcmVkQ2hhbm5lbChyZ2IoKSk7IH0KKyAg
ICBpbnQgZ3JlZW4oKSBjb25zdCB7IHJldHVybiBncmVlbkNoYW5uZWwocmdiKCkpOyB9CisgICAg
aW50IGJsdWUoKSBjb25zdCB7IHJldHVybiBibHVlQ2hhbm5lbChyZ2IoKSk7IH0KKyAgICBpbnQg
YWxwaGEoKSBjb25zdCB7IHJldHVybiBhbHBoYUNoYW5uZWwocmdiKCkpOyB9CiAgICAgCi0gICAg
UkdCQTMyIHJnYigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0gLy8gUHJlc2VydmUgdGhlIGFs
cGhhLgotICAgIHZvaWQgc2V0UkdCKGludCByLCBpbnQgZywgaW50IGIpIHsgbV9jb2xvciA9IG1h
a2VSR0IociwgZywgYik7IG1fdmFsaWQgPSB0cnVlOyB9Ci0gICAgdm9pZCBzZXRSR0IoUkdCQTMy
IHJnYikgeyBtX2NvbG9yID0gcmdiOyBtX3ZhbGlkID0gdHJ1ZTsgfQorICAgIFJHQkEzMiByZ2Io
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSR0JBMzI+KG1fcmdiYUFuZEZsYWdzID4+IDMy
KTsgfQorICAgIHZvaWQgc2V0UkdCKGludCByLCBpbnQgZywgaW50IGIpIHsgc2V0UkdCKG1ha2VS
R0IociwgZywgYikpOyB9CisgICAgdm9pZCBzZXRSR0IoUkdCQTMyIHJnYikKKyAgICB7CisgICAg
ICAgIG1fcmdiYUFuZEZsYWdzID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZ2IpIDw8IDMyKTsK
KyAgICAgICAgc2V0VmFsaWQoKTsKKyAgICB9CisKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdl
dFJHQkEoZmxvYXQmIHIsIGZsb2F0JiBnLCBmbG9hdCYgYiwgZmxvYXQmIGEpIGNvbnN0OwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UkdCQShkb3VibGUmIHIsIGRvdWJsZSYgZywgZG91Ymxl
JiBiLCBkb3VibGUmIGEpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0SFNMKGRv
dWJsZSYgaCwgZG91YmxlJiBzLCBkb3VibGUmIGwpIGNvbnN0OwpAQCAtMjA1LDkgKzIzNywyNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFJHQkEzMiBjb21wb3NpdGlvbkZpbGwgPSAweEZG
RTFERDU1OwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzRXh0ZW5kZWQoKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeHRlbmRlZENvbG9yKiBhc0V4dGVuZGVkKCkgY29u
c3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciYgb3BlcmF0b3I9KGNvbnN0IENvbG9yJik7
CisKKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xv
ciYgYik7CisKIHByaXZhdGU6Ci0gICAgUkdCQTMyIG1fY29sb3I7Ci0gICAgYm9vbCBtX3ZhbGlk
OworCisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGV4dGVuZGVkQ29sb3IgPSAweDA7CisgICAg
c3RhdGljIGNvbnN0IHVpbnQ2NF90IGludmFsaWRSR0JBQ29sb3IgPSAweDE7CisgICAgc3RhdGlj
IGNvbnN0IHVpbnQ2NF90IHZhbGlkUkdCQUNvbG9yQml0ID0gMHgyOworICAgIHN0YXRpYyBjb25z
dCB1aW50NjRfdCB2YWxpZFJHQkFDb2xvciA9IDB4MzsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0VmFsaWQoKTsKKyAgICB2b2lkIHNldEV4dGVuZGVkKCk7CisKKyAgICB1bmlvbiB7Cisg
ICAgICAgIHVpbnQ2NF90IG1fcmdiYUFuZEZsYWdzIHsgaW52YWxpZFJHQkFDb2xvciB9OworICAg
ICAgICBFeHRlbmRlZENvbG9yKiBtX2V4dGVuZGVkQ29sb3I7CisgICAgfTsKIH07CiAKIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CkBAIC0yNjcsMTUgKzMxNywx
NCBAQCBpbmxpbmUgYm9vbCBSR0JBOjpoYXNBbHBoYSgpIGNvbnN0CiB9CiAKIGlubGluZSBDb2xv
cjo6Q29sb3IoUkdCQSBjb2xvciwgQ29sb3JTcGFjZSBzcGFjZSkKLSAgICA6IG1fY29sb3IoY29s
b3IubV9pbnRlZ2VyKQotICAgICwgbV92YWxpZCh0cnVlKQogeworICAgIHNldFJHQihjb2xvci5t
X2ludGVnZXIpOwogICAgIEFTU0VSVF9VTlVTRUQoc3BhY2UsIHNwYWNlID09IENvbG9yU3BhY2VT
UkdCKTsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3Qg
Q29sb3ImIGIpCiB7Ci0gICAgcmV0dXJuIGEucmdiKCkgPT0gYi5yZ2IoKSAmJiBhLmlzVmFsaWQo
KSA9PSBiLmlzVmFsaWQoKTsKKyAgICByZXR1cm4gYS5tX3JnYmFBbmRGbGFncyA9PSBiLm1fcmdi
YUFuZEZsYWdzOwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiBhLCBj
b25zdCBDb2xvciYgYikKQEAgLTMxNSw1ICszNjQsMyBAQCBpbmxpbmUgUkdCQTMyIGNvbG9yV2l0
aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gb3ZlcnJpZGVBbHBo
YQogV0VCQ09SRV9FWFBPUlQgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29u
c3QgQ29sb3ImKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ29sb3Jf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRD
b2xvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9y
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42NzQ3OGQyYjQ3N2M2ODQxM2E0NmE4ZWIzNWM0NmRjMTA3ZGMzY2Rj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0
ZW5kZWRDb2xvci5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZENvbG9yLmgiCisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworRXh0ZW5kZWRDb2xvciogRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGZsb2F0IHIsIGZs
b2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEsIGNvbnN0IENvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7
CisgICAgRXh0ZW5kZWRDb2xvciogY29sb3IgPSBuZXcgRXh0ZW5kZWRDb2xvcihyLCBnLCBiLCBh
LCBjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gY29sb3I7Cit9CisKK0V4dGVuZGVkQ29sb3I6On5F
eHRlbmRlZENvbG9yKCkKK3sKK30KKwordm9pZCBFeHRlbmRlZENvbG9yOjpyZWYoKQoreworICAg
ICsrbV9yZWZDb3VudDsKK30KKwordm9pZCBFeHRlbmRlZENvbG9yOjpkZXJlZigpCit7CisgICAg
QVNTRVJUKG1fcmVmQ291bnQpOworICAgIGlmICghLS1tX3JlZkNvdW50KQorICAgICAgICBkZWxl
dGUgdGhpczsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRXh0ZW5kZWRDb2xvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RXh0ZW5kZWRDb2xvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlNzNjYTk5M2I4N2MzYzM1N2Y3OWJhMmRkZDJj
MTg5MGM0MmI4OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9FeHRlbmRlZENvbG9yLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
Q29sb3JTcGFjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV4dGVuZGVkQ29s
b3IgeworcHVibGljOgorICAgIHN0YXRpYyBFeHRlbmRlZENvbG9yKiBjcmVhdGUoZmxvYXQgciwg
ZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSwgY29uc3QgQ29sb3JTcGFjZSYgY29sb3JTcGFjZSA9
IENvbG9yU3BhY2U6OkNvbG9yU3BhY2VTUkdCKTsKKworICAgIH5FeHRlbmRlZENvbG9yKCk7CisK
KyAgICBmbG9hdCByZWQoKSBjb25zdCB7IHJldHVybiBtX3JlZDsgfQorICAgIGZsb2F0IGdyZWVu
KCkgY29uc3QgeyByZXR1cm4gbV9ncmVlbjsgfQorICAgIGZsb2F0IGJsdWUoKSBjb25zdCB7IHJl
dHVybiBtX2JsdWU7IH0KKyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGE7
IH0KKworICAgIGNvbnN0IENvbG9yU3BhY2UmIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBt
X2NvbG9yU3BhY2U7IH0KKworICAgIHZvaWQgcmVmKCk7CisgICAgdm9pZCBkZXJlZigpOworCitw
cml2YXRlOgorICAgIEV4dGVuZGVkQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEsIGNv
bnN0IENvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCisgICAgICAgIDogbV9yZWQocikKKyAgICAgICAg
LCBtX2dyZWVuKGcpCisgICAgICAgICwgbV9ibHVlKGIpCisgICAgICAgICwgbV9hbHBoYShhKQor
ICAgICAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQorICAgIHsgfQorCisgICAgZmxvYXQg
bV9yZWQgeyAwIH07CisgICAgZmxvYXQgbV9ncmVlbiB7IDAgfTsKKyAgICBmbG9hdCBtX2JsdWUg
eyAwIH07CisgICAgZmxvYXQgbV9hbHBoYSB7IDAgfTsKKworICAgIENvbG9yU3BhY2UgbV9jb2xv
clNwYWNlIHsgQ29sb3JTcGFjZTo6Q29sb3JTcGFjZVNSR0IgfTsKKworICAgIHVuc2lnbmVkIG1f
cmVmQ291bnQgeyAxIH07Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCBjZTU4YTI1MTkyNWE2
NjgyYjNjN2YwMWFkYzg4YTBiNzQ4NTNlYjZiLi5lNzYxYzU5ZTg1MzA5OTUwY2FiNTAyNWI1ODdk
NjlkNDhjYTQzNzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTEzNjksOCArMTM2OSw4IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbnN0IENvbW1pdFN0YXRl
JiBjb21taXRTdGF0ZSwgY29uCiAgICAgLy8gVXNlIGhhdmluZyBhIHRyYW5zZm9ybSBhcyBhIGtl
eSB0byBtYWtpbmcgdGhlIHRpbGUgd2FzaCBsYXllci4gSWYgZXZlcnkgbGF5ZXIgZ2V0cyBhIHdh
c2gsCiAgICAgLy8gdGhleSBzdGFydCB0byBvYnNjdXJlIHVzZWZ1bCBpbmZvcm1hdGlvbi4KICAg
ICBpZiAoKCFtX3RyYW5zZm9ybS5pc0lkZW50aXR5KCkgfHwgbV91c2luZ1RpbGVkQmFja2luZykg
JiYgIW1fdmlzaWJsZVRpbGVXYXNoTGF5ZXIpIHsKLSAgICAgICAgc3RhdGljIENvbG9yIHdhc2hG
aWxsQ29sb3IoMjU1LCAwLCAwLCA1MCk7Ci0gICAgICAgIHN0YXRpYyBDb2xvciB3YXNoQm9yZGVy
Q29sb3IoMjU1LCAwLCAwLCAxMDApOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29s
b3I+IHdhc2hGaWxsQ29sb3IoMjU1LCAwLCAwLCA1MCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxDb2xvcj4gd2FzaEJvcmRlckNvbG9yKDI1NSwgMCwgMCwgMTAwKTsKICAgICAgICAg
CiAgICAgICAgIG1fdmlzaWJsZVRpbGVXYXNoTGF5ZXIgPSBjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIo
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgdGhpcyk7CiAgICAgICAgIFN0cmluZyBu
YW1lID0gU3RyaW5nOjpmb3JtYXQoIlZpc2libGUgVGlsZSBXYXNoIExheWVyICVwIiwgbV92aXNp
YmxlVGlsZVdhc2hMYXllci0+cGxhdGZvcm1MYXllcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKaW5kZXggNmQ4OGM4OGRkNGFhNmQyZDBh
YzM0ZDMxNGFmNmRmMmJhZTI3ZDU5OC4uNzNmZGUyMDAyYzMzNzVhMmQ3YzZiYzU2NTMxNDJhMzU4
NWZkNjFlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Q29sb3JDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29s
b3JDRy5jcHAKQEAgLTczLDggKzczLDcgQEAgc3RhdGljIENHQ29sb3JSZWYgY3JlYXRlQ0dDb2xv
cldpdGhEZXZpY2VSR0JBKENHQ29sb3JSZWYgc291cmNlQ29sb3IpCiBDb2xvcjo6Q29sb3IoQ0dD
b2xvclJlZiBjb2xvcikKIHsKICAgICBpZiAoIWNvbG9yKSB7Ci0gICAgICAgIG1fY29sb3IgPSAw
OwotICAgICAgICBtX3ZhbGlkID0gZmFsc2U7CisgICAgICAgIG1fcmdiYUFuZEZsYWdzID0gaW52
YWxpZFJHQkFDb2xvcjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTExLDggKzExMCw3
IEBAIENvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9CiAKLSAgICBtX2NvbG9yID0gbWFrZVJHQkEociAqIDI1NSwgZyAqIDI1
NSwgYiAqIDI1NSwgYSAqIDI1NSk7Ci0gICAgbV92YWxpZCA9IHRydWU7CisgICAgc2V0UkdCKG1h
a2VSR0JBKHIgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTUsIGEgKiAyNTUpKTsKIH0KIAogc3RhdGlj
IENHQ29sb3JSZWYgbGVha0NHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKaW5kZXggOGY1NmJh
NmZiNGUwYjY1YTk5YzI3M2QzYjQ3MGJmZGI2YjM1YjlhZi4uYWVhMzdmOGMxZDM2ZjVmYWEzYTNi
ZGM5MzRhMWFjMDY5YTAxNTEyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCkBAIC0yNiwxOSArMjYsMTcgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogQ29sb3I6OkNvbG9yKGNvbnN0IEdka0NvbG9yJiBjKQotICAgIDogbV9jb2xv
cihtYWtlUkdCKGMucmVkID4+IDgsIGMuZ3JlZW4gPj4gOCwgYy5ibHVlID4+IDgpKQotICAgICwg
bV92YWxpZCh0cnVlKQogeworICAgIHNldFJHQihtYWtlUkdCKGMucmVkID4+IDgsIGMuZ3JlZW4g
Pj4gOCwgYy5ibHVlID4+IDgpKTsKIH0KIAogI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgogQ29s
b3I6OkNvbG9yKGNvbnN0IEdka1JHQkEmIGMpCi0gICAgOiBtX2NvbG9yKG1ha2VSR0JBKHN0YXRp
Y19jYXN0PGludD4oYy5yZWQgKiAyNTUpLAotICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQ+KGMuZ3JlZW4gKiAyNTUpLAotICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQ+KGMuYmx1ZSAqIDI1NSksCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludD4oYy5hbHBoYSAqIDI1NSkpKQotICAgICwgbV92YWxpZCh0cnVlKQogeworICAgIHNl
dFJHQihtYWtlUkdCQShzdGF0aWNfY2FzdDxpbnQ+KGMucmVkICogMjU1KSwKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50PihjLmdyZWVuICogMjU1KSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihj
LmJsdWUgKiAyNTUpLAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGMuYWxwaGEgKiAyNTUpKSk7
CiB9CiAKIENvbG9yOjpvcGVyYXRvciBHZGtSR0JBKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAppbmRleCA5
MWMxZGExOTNmYmIxNWQzNGQ3MzQ1YzE1NDQ1NzdkOGE3MWQ2YTYwLi43MjRhMTA1ZTI0ZmY3MTQ5
MzczNTNkYWZiZTJkMmI2OTBhZGVlNzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCkBAIC0zNCw4ICszNCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ29sb3I6OkNvbG9yKEQyRDFfQ09MT1JfRiBjb2xvcikK
IHsKLSAgICBtX2NvbG9yID0gbWFrZVJHQkEoY29sb3IuciAqIDI1NSwgY29sb3IuZyAqIDI1NSwg
Y29sb3IuYiAqIDI1NSwgY29sb3IuYSAqIDI1NSk7Ci0gICAgbV92YWxpZCA9IHRydWU7CisgICAg
c2V0UkdCKG1ha2VSR0JBKGNvbG9yLnIgKiAyNTUsIGNvbG9yLmcgKiAyNTUsIGNvbG9yLmIgKiAy
NTUsIGNvbG9yLmEgKiAyNTUpKTsKIH0KIAogQ29sb3I6Om9wZXJhdG9yIEQyRDFfQ09MT1JfRigp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRk
ZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmNwcAppbmRleCAzODgyMTllNTg5NTJhNmNlOWQyMTNjZTU5Zjg2ODNmZjZjYjg4MjYxLi4w
ZWIxNWE0NWE1MGQ4MTE0NDYzYzA1ZmFkMDg5Yzg1MjM5ZmYxYzhiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKQEAgLTc1LDI1ICs3
NSwyNSBAQCBzdGF0aWMgY29uc3QgZmxvYXQgcmVwbGFjZW1lbnRBcnJvd0NpcmNsZVBhZGRpbmcg
PSAzOwogCiBzdGF0aWMgY29uc3QgQ29sb3ImIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UHJl
c3NlZENvbG9yKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgQ29sb3IgcHJlc3NlZCgxMDUsIDEwNSwg
MTA1LCAyNDIpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gcHJlc3NlZCgxMDUs
IDEwNSwgMTA1LCAyNDIpOwogICAgIHJldHVybiBwcmVzc2VkOwogfQogCiBzdGF0aWMgY29uc3Qg
Q29sb3ImIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0Q29sb3IoKQogewotICAgIHN0YXRpYyBj
b25zdCBDb2xvciBzdGFuZGFyZCgxMjUsIDEyNSwgMTI1LCAyNDIpOworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxDb2xvcj4gc3RhbmRhcmQoMTI1LCAxMjUsIDEyNSwgMjQyKTsKICAgICByZXR1
cm4gc3RhbmRhcmQ7CiB9CiAKIHN0YXRpYyBjb25zdCBDb2xvciYgcmVwbGFjZW1lbnRUZXh0Q29s
b3IoKQogewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBzdGFuZGFyZCgyNDAsIDI0MCwgMjQwLCAy
NTUpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gc3RhbmRhcmQoMjQwLCAyNDAs
IDI0MCwgMjU1KTsKICAgICByZXR1cm4gc3RhbmRhcmQ7CiB9CiAKIHN0YXRpYyBjb25zdCBDb2xv
ciYgdW5hdmFpbGFibGVQbHVnaW5Cb3JkZXJDb2xvcigpCiB7Ci0gICAgc3RhdGljIGNvbnN0IENv
bG9yIHN0YW5kYXJkKDI1NSwgMjU1LCAyNTUsIDIxNik7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPENvbG9yPiBzdGFuZGFyZCgyNTUsIDI1NSwgMjU1LCAyMTYpOwogICAgIHJldHVybiBzdGFu
ZGFyZDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZy
YW1lU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAK
aW5kZXggMTc5YmQ0MjZjZWE4NjYzZWRkYTA1MjZhMWVjOWYyN2Q2NTRhODlhZi4uNzc0OGM0Nzhl
YjBkZTQ4Njg1NWFlMWRlZjc4NTZiYjMyZjI1MzY0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCkBAIC02OSwxOSArNjksMTkgQEAgUmVuZGVyRnJhbWVT
ZXQ6OkdyaWRBeGlzOjpHcmlkQXhpcygpCiAKIHN0YXRpYyBjb25zdCBDb2xvciYgYm9yZGVyU3Rh
cnRFZGdlQ29sb3IoKQogewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBjb2xvcigxNzAsIDE3MCwg
MTcwKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IGNvbG9yKDE3MCwgMTcwLCAx
NzApOwogICAgIHJldHVybiBjb2xvcjsKIH0KIAogc3RhdGljIGNvbnN0IENvbG9yJiBib3JkZXJF
bmRFZGdlQ29sb3IoKQogewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBjb2xvciA9IENvbG9yOjpi
bGFjazsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IGNvbG9yID0gQ29sb3I6OmJs
YWNrOwogICAgIHJldHVybiBjb2xvcjsKIH0KIAogc3RhdGljIGNvbnN0IENvbG9yJiBib3JkZXJG
aWxsQ29sb3IoKQogewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBjb2xvcigyMDgsIDIwOCwgMjA4
KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IGNvbG9yKDIwOCwgMjA4LCAyMDgp
OwogICAgIHJldHVybiBjb2xvcjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDZWxsLmNwcAppbmRleCA0NWQ4YzdiZWI0MWU2YmI4ZDQwZWYzM2Y3ZGFjNGM0N2Qy
NGJjYTIyLi5jMDBjYmNjOTkxM2QxM2Q3NmYxN2FmZDgzMmM4NjhmMmFiNzhlYjlkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcApAQCAtNTIsNyArNTIs
NyBAQCBzdHJ1Y3QgU2FtZVNpemVBc1JlbmRlclRhYmxlQ2VsbCA6IHB1YmxpYyBSZW5kZXJCbG9j
a0Zsb3cgewogfTsKIAogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlbmRlclRhYmxlQ2VsbCkgPT0g
c2l6ZW9mKFNhbWVTaXplQXNSZW5kZXJUYWJsZUNlbGwpLCBSZW5kZXJUYWJsZUNlbGxfc2hvdWxk
X3N0YXlfc21hbGwpOwotQ09NUElMRV9BU1NFUlQoc2l6ZW9mKENvbGxhcHNlZEJvcmRlclZhbHVl
KSA9PSAxNiwgQ29sbGFwc2VkQm9yZGVyVmFsdWVfc2hvdWxkX3N0YXlfc21hbGwpOworQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKENvbGxhcHNlZEJvcmRlclZhbHVlKSA8PSAyNCwgQ29sbGFwc2VkQm9y
ZGVyVmFsdWVfc2hvdWxkX3N0YXlfc21hbGwpOwogCiBSZW5kZXJUYWJsZUNlbGw6OlJlbmRlclRh
YmxlQ2VsbChFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQogICAgIDogUmVu
ZGVyQmxvY2tGbG93KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCmluZGV4IDg3OTBmNzljM2QzMTk1NTc5MTljZGE4MzI1
Y2JkZmYzMWVlNzhlZWIuLmJmODY3NDgzNDYzNTM4MzQzZmYxMDdhNmUxYmFiNDI3ZDMwZTBkNDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KQEAgLTMyNSw3
ICszMjUsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpzZXRDb250ZW50U2l6ZUNhdGVnb3J5KGNv
bnN0IFN0cmluZyYgY29udGVudFNpemVDYXRlZ29yeSkKIAogY29uc3QgQ29sb3ImIFJlbmRlclRo
ZW1lSU9TOjpzaGFkb3dDb2xvcigpIGNvbnN0CiB7Ci0gICAgc3RhdGljIENvbG9yIGNvbG9yKDAu
MGYsIDAuMGYsIDAuMGYsIDAuN2YpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4g
Y29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC43Zik7CiAgICAgcmV0dXJuIGNvbG9yOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkluZGljYXRlTGF5ZXIubW0g
Yi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkluZGljYXRlTGF5ZXIubW0KaW5kZXggZjk0
NDRkYzM3NGUwNDJiNmQwNTA3NzBhMjYwNzJlMWU3YmUxMmM0ZC4uMmYwYzE2NmNkNTI4Mjc3M2Vi
OTBlOWUzOWE5Y2I1YjQ1ZGZmYTkyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJJbmRpY2F0ZUxheWVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViSW5kaWNhdGVMYXllci5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9D
b2xvck1hYy5oPgogI2ltcG9ydCA8V2ViQ29yZS9RdWFydHpDb3JlU1BJLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1dBS1dpbmRvdy5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00OSw3ICs1MCw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogICAgIHNlbGYuY29udGVudHNTY2FsZSA9IFtbX3dlYlZpZXcgd2luZG93XSBz
Y3JlZW5TY2FsZV07CiAKICAgICAvLyBCbHVlIGhpZ2hsaWdodCBjb2xvci4KLSAgICBzdGF0aWMg
Q29sb3IgaGlnaGxpZ2h0Q29sb3IoMTExLjBmIC8gMjU1LjBmLCAxNjguMGYgLyAyNTUuMGYsIDIy
MC4wZiAvIDI1NS4wZiwgMC42NmYpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4g
aGlnaGxpZ2h0Q29sb3IoMTExLjBmIC8gMjU1LjBmLCAxNjguMGYgLyAyNTUuMGYsIDIyMC4wZiAv
IDI1NS4wZiwgMC42NmYpOwogICAgIHNlbGYuYmFja2dyb3VuZENvbG9yID0gY2FjaGVkQ0dDb2xv
cihoaWdobGlnaHRDb2xvcik7CiAKICAgICByZXR1cm4gc2VsZjsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmYmFjMTA4M2I2OTFkZjY4Y2FiMWJl
MmFhZGYyODAyYjYwMTEzOWM5Li44MjZmYzg4NWY5ZmMwMmYzY2Q2YWFlNWIzNmM4NWUwYTA2MDI2
YTYyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTYtMTAtMDMgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29t
PgorCisgICAgICAgIEFkZCBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBleHRlbmRlZCBjb2xvcnMg
dG8gV2ViQ29yZTo6Q29sb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2Mjg3OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjg1OTY0MTM+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBuZXcgQVBJIHRl
c3QgZm9yIENvbG9ycy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9D
b2xvci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNi0wOS0yNyAg
V2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBBZG9wdCBN
ZWRpYVJlbW90ZSBTUEkgdG8gYWNoaWV2ZSBkZXNpcmVkIE5vdyBQbGF5aW5nIGJlaGF2aW9yCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3IuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yLmNwcAppbmRleCBlOGU2ODIw
ZTU2Y2YxM2FkOTA2MGQ5NDEyNGM2OGIzZmJhZTZkOTMzLi44NTYyNWQyNzc0ODgyMzA2ZDc0MTk0
OTUwOTZkZmY2N2Q5NzVmOTBmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ29sb3IuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9Db2xvci5jcHAKQEAgLTE0NCw0ICsxNDQsMjcgQEAgVEVTVChDb2xvciwgUkdCVG9IU1ZfTGln
aHRHcmF5KQogICAgIEVYUEVDVF9ET1VCTEVfRVEoMC43NTI5NDExNzY0NzA1ODgyMiwgdik7CiB9
CiAKK1RFU1QoQ29sb3IsIFZhbGlkaXR5KQoreworICAgIENvbG9yIGludmFsaWRDb2xvcjsKKyAg
ICBFWFBFQ1RfRkFMU0UoaW52YWxpZENvbG9yLmlzVmFsaWQoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KGludmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOworICAgIEVYUEVDVF9UUlVFKGludmFsaWRDb2xv
ci5hc0V4dGVuZGVkKCkgPT0gbnVsbHB0cik7CisKKyAgICBDb2xvciBvdGhlckludmFsaWRDb2xv
ciA9IGludmFsaWRDb2xvcjsKKyAgICBFWFBFQ1RfRkFMU0Uob3RoZXJJbnZhbGlkQ29sb3IuaXNW
YWxpZCgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob3RoZXJJbnZhbGlkQ29sb3IuaXNFeHRlbmRlZCgp
KTsKKyAgICBFWFBFQ1RfVFJVRShvdGhlckludmFsaWRDb2xvci5hc0V4dGVuZGVkKCkgPT0gbnVs
bHB0cik7CisKKyAgICBDb2xvciB2YWxpZENvbG9yKDI1NSwgMCwgMCk7CisgICAgRVhQRUNUX1RS
VUUodmFsaWRDb2xvci5pc1ZhbGlkKCkpOworICAgIEVYUEVDVF9GQUxTRSh2YWxpZENvbG9yLmlz
RXh0ZW5kZWQoKSk7CisgICAgRVhQRUNUX1RSVUUodmFsaWRDb2xvci5hc0V4dGVuZGVkKCkgPT0g
bnVsbHB0cik7CisKKyAgICBDb2xvciBvdGhlclZhbGlkQ29sb3IgPSB2YWxpZENvbG9yOworICAg
IEVYUEVDVF9UUlVFKG90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOworICAgIEVYUEVDVF9GQUxT
RShvdGhlclZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKKyAgICBFWFBFQ1RfVFJVRShvdGhlclZh
bGlkQ29sb3IuYXNFeHRlbmRlZCgpID09IG51bGxwdHIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290535</attachid>
            <date>2016-10-03 16:27:09 -0700</date>
            <delta_ts>2016-10-03 16:27:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162878-20161003162400.patch</filename>
            <type>text/plain</type>
            <size>33075</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2NTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjM5ZWY0NzAwZGMzOTRj
ODlmZDg3YWFhZTVjYzQzZDdjMmIyMjIwYi4uMWRkMjcwOTRiNzlkOGIwNjIzYWE1OTczYmQ3Njdh
NTk5MzQ1Y2Y5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDkyIEBACiAyMDE2LTEwLTAzICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQgcHJlbGltaW5hcnkgc3Vw
cG9ydCBmb3IgZXh0ZW5kZWQgY29sb3JzIHRvIFdlYkNvcmU6OkNvbG9yCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI4NzgKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzI4NTk2NDEzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBhbiBFeHRlbmRlZENvbG9yIGNsYXNzIHRoYXQgd2lsbCBob2xkIHRo
ZSBkYXRhIG5lY2Vzc2FyeQorICAgICAgICBmb3Igd2lkZXItdGhhbi1zUkdCIChhbmQgbW9yZSBw
cmVjaXNlKSBjb2xvcnMuIEluIG9yZGVyIHRvCisgICAgICAgIGF2b2lkIGluY3JlYXNpbmcgdGhl
IHNpemUgb2YgQ29sb3IsIGltcGxlbWVudCBhIHRhZ2dlZAorICAgICAgICBwb2ludGVyIHRoYXQg
aXMgZWl0aGVyIHJlZmVyZW5jaW5nIGFuIEV4dGVuZGVkQ29sb3IsIG9yCisgICAgICAgIGlzIGEg
NjQtYml0IG51bWJlciB3aXRoIHRoZSB0b3AgMzItYml0cyBiZWluZyB0aGUgUkdCQSwgYW5kCisg
ICAgICAgIHRoZSBib3R0b20gMiBiaXRzIGluZGljYXRpbmcgYW4gaW52YWxpZCBSR0JBIG9yIGEg
dmFsaWQgUkdCQSwKKyAgICAgICAgcGx1cyB0aGUgdGFnLgorCisgICAgICAgIEFkZCBjb3B5IGNv
bnN0cnVjdG9ycyBhbmQgb3BlcmF0b3I9IHNvIHRoYXQgdGhlIG5ldyBDb2xvciBvYmplY3RzCisg
ICAgICAgIGFyZSBjb3JyZWN0bHkgY29waWVkLgorCisgICAgICAgIFRoZXJlIGlzbid0IHlldCBh
IHdheSB0byBjcmVhdGUgYW4gRXh0ZW5kZWRDb2xvci4gVGhhdCdzIGNvbWluZworICAgICAgICBp
biBhIGZvbGxvd3VwIHBhdGNoIChhbmQgd2lsbCByZXF1aXJlIGNoYW5nZXMgdG8gdGhlIENTUyBw
YXJzZXIpLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMsIGFuZCBuZXcgQVBJ
IHRlc3RzIGluIENvbG9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgbmV3IGZpbGVzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOiBVcGRhdGUgZXZlcnl0aGluZyB0byB1
c2UgbV9yZ2JhQW5kRmxhZ3MKKyAgICAgICAgaW5zdGVhZCBvZiBtX2NvbG9yICsgbV92YWxpZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6fkNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvcj0pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpzZXROYW1lZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjps
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFyayk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6c2V0VmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldEV4dGVuZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0V4dGVuZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjphc0V4dGVuZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5oOiBJbXBsZW1lbnQgdGhlIHRhZ2dlZCB1bmlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNWYWxpZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpncmVlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Ymx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
YWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnJnYik6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6c2V0UkdCKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHA6IE5ldyBmaWxlLiBIb2xk
cyBmbG9hdGluZyBwb2ludAorICAgICAgICByZWQsIGdyZWVuLCBibHVlIGFuZCBhbHBoYSwgcGx1
cyBhIGNvbG9yIHNwYWNlLgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6On5FeHRlbmRlZENvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnJlZik6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbmRlZENvbG9yOjpkZXJlZik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5k
ZWRDb2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6cmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmdyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuZGVkQ29sb3I6OmJsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6YWxw
aGEpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6Y29sb3JTcGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpFeHRlbmRlZENvbG9yKToKKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwOiBVcGRhdGUgdGhlIGNvbnN0cnVjdG9y
cyBmb3IKKyAgICAgICAgdGhlIHBsYXRmb3JtIHNwZWNpZmljIGNvbG9yIGNsYXNzZXMuCisgICAg
ICAgIChXZWJDb3JlOjpDb2xvcjo6Q29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Db2xvckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29sb3IpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1i
ZWRkZWRPYmplY3QuY3BwOiBVc2UgTmV2ZXJEZXN0cm95ZWQuCisgICAgICAgIChXZWJDb3JlOjpy
ZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFByZXNzZWRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpyZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnJl
cGxhY2VtZW50VGV4dENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnVuYXZhaWxhYmxlUGx1Z2lu
Qm9yZGVyQ29sb3IpOgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpib3JkZXJTdGFydEVkZ2VDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpib3JkZXJFbmRFZGdlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVy
RmlsbENvbG9yKToKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOiBU
aGlzIGdyb3dzIGluIHNpemUgc2xpZ2h0bHkKKyAgICAgICAgYmVjYXVzZSBpdCBjYW4gbm8gbG9u
Z2VyIHBhY2sgYml0cy4KKworMjAxNi0xMC0wMyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5j
b20+CisKICAgICAgICAgQWRkIERpc3BsYXkgUDMgQ29sb3JTcGFjZQogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyODgwCiAgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8yODU5ODU2ND4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNzg3N2ZlZDg3ODNjY2Qz
ZGIxZGVlMGRhZWM0YmVkYjA1NjAxNTIxNy4uODZmZmNkZDY1MWQwY2ZmN2E5NWY2YzkyOTIxNjY5
N2E3NmJlNjJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIxOTIsNiArMjE5Miw3IEBAIHNl
dChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBv
aW50LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDJmNzI3OGNmMDdkMzk2Mzc1NDBl
NjU4ZjBkMGRkMTk1OTE3ZmViZC4uZGUxNjBhNDNmMWU1YjRmNGVkNTAwYjFhMDA4NTE0NDE4MDE0
MTAwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTM3MSw2ICsxMzcxLDggQEAKIAkJMzFDNDIyNDYxRDc0RUI5QTAwRjEyMzQy
IC8qIEpTUGVyZm9ybWFuY2VUaW1pbmdDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDNDIyNDUxRDc0RUI5QTAwRjEyMzQyIC8qIEpTUGVy
Zm9ybWFuY2VUaW1pbmdDdXN0b20uY3BwICovOyB9OwogCQkzMUQ1OTFCMzE2Njk3QTZDMDBFNkJG
MDIgLyogUGx1Z0luQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMUQ1OTFCMTE2Njk3QTZDMDBFNkJGMDIgLyogUGx1Z0luQ2xpZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzFEQ0QyOUQx
QUI0RkJERTAwNzJFODE3IC8qIEFuaW1hdGlvblRyaWdnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRENEMjlDMUFCNEZCREUwMDcyRTgxNyAvKiBB
bmltYXRpb25UcmlnZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMzFEQ0RGNDMxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFEQ0RGNDEx
REExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuY3BwICovOyB9OworCQkzMURDREY0NDFE
QTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFEQ0RGNDIxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVu
ZGVkQ29sb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkzMURFQTQ1NTFCMzlGNEQ5MDBGNzcxNzggLyogV2ViU3lzdGVtQmFja2Ryb3BMYXllci5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxREVBNDUz
MUIzOUY0RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLm1tICovOyB9OwogCQkz
MURFQTQ1NjFCMzlGNEQ5MDBGNzcxNzggLyogV2ViU3lzdGVtQmFja2Ryb3BMYXllci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFERUE0NTQxQjM5RjRE
OTAwRjc3MTc4IC8qIFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIuaCAqLzsgfTsKIAkJMzFERjYzNTcx
QUYxODdERDAwNzhGRDkxIC8qIE5TQ29sb3JTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxREY2MzU2MUFGMTg3REQwMDc4RkQ5MSAvKiBOU0NvbG9y
U1BJLmggKi87IH07CkBAIC04MzA3LDYgKzgzMDksOCBAQAogCQkzMUM0MjI0NTFENzRFQjlBMDBG
MTIzNDIgLyogSlNQZXJmb3JtYW5jZVRpbWluZ0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1BlcmZvcm1hbmNlVGltaW5nQ3VzdG9tLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFENTkxQjExNjY5N0E2QzAwRTZCRjAyIC8qIFBsdWdJ
bkNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnSW5DbGllbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFEQ0QyOUMxQUI0RkJERTAwNzJFODE3
IC8qIEFuaW1hdGlvblRyaWdnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QW5pbWF0aW9uVHJpZ2dlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMURDREY0
MTFEQTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBFeHRlbmRlZENvbG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMzFEQ0RGNDIxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5kZWRDb2xvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzMURFQTQ1MzFCMzlGNEQ5MDBGNzcxNzggLyogV2ViU3lz
dGVtQmFja2Ryb3BMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTMxREVBNDU0MUIzOUY0RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFERjYzNTYxQUYxODdERDAwNzhGRDkx
IC8qIE5TQ29sb3JTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNDb2xv
clNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA2MzksNiArMjA2NDMsOCBA
QAogCQkJCUNEREUwMkU5MThCM0RGQzcwMENGN0ZGMSAvKiBDRE1TZXNzaW9uLmggKi8sCiAJCQkJ
QjI3NTM1MzgwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmNwcCAqLywKIAkJCQlCMjc1MzUzOTBC
MDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuaCAqLywKKwkJCQkzMURDREY0MTFEQTFDNDU0MDBFQTVC
OTMgLyogRXh0ZW5kZWRDb2xvci5jcHAgKi8sCisJCQkJMzFEQ0RGNDIxREExQzQ1NDAwRUE1Qjkz
IC8qIEV4dGVuZGVkQ29sb3IuaCAqLywKIAkJCQk5MzgyREY1NzEwQThENUM5MDA5MjU2NTIgLyog
Q29sb3JTcGFjZS5oICovLAogCQkJCTJEMkZDMDU0MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2Zh
ZGVHZW5lcmF0ZWRJbWFnZS5jcHAgKi8sCiAJCQkJMkQyRkMwNTUxNDYwQ0Q2RjAwMjYzNjMzIC8q
IENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmggKi8sCkBAIC0yNDgxMCw2ICsyNDgxNiw3IEBACiAJ
CQkJNTEwMTkyRDYxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwMTkyRDIxOEI2QjlBQjAwN0ZDN0ExIC8qIEltYWdlQ29u
dHJvbHNSb290RWxlbWVudE1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3OTc5MUEwRDZCOUQw
QzAwMzg1MUI5IC8qIEltYWdlRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzFEQ0RGNDQxREEx
QzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NUI4
N0VEMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTcyMDVBQjYxMjM5MjkxMDAwQjE3MzgwIC8qIEltYWdlRG9jdW1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUY1NUIzREMyMTI1MUYxMkQwMDNFRjI2OSAvKiBJbWFnZUlucHV0VHlwZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDI0NCw2ICszMDI1MSw3IEBACiAJCQkJQjIyMjdBRUYwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR1ZpZXdFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3
QUYyMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdWaWV3U3BlYy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NDg1MjI4QTExOTAxNzNDMDA2RURDN0YgLyogU1ZHVktlcm5FbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTMxRENERjQzMURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QUY1MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdab29t
QW5kUGFuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRTRFQzk3MEQwMEMyMkIwMDQzMjY0MyAv
KiBTVkdab29tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4MDgxMTIxNkZDRjQyRjAw
QjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4IDhmNjhiMTRhNDIw
NjBhYmQ3ZWY2MTAwNTg4ZTRhYTBmZTQ2YWQ4OGMuLmQ4NmRmOWE1ZTU4NmVmY2M1ZmQ2MGI3YmFk
NWNlOGYzMjMwNWQ0MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5jcHAKQEAgLTIyNSwyMyArMjI1LDU1IEBAIGludCBkaWZmZXJlbmNlU3F1YXJlZChjb25zdCBD
b2xvciYgYzEsIGNvbnN0IENvbG9yJiBjMikKIENvbG9yOjpDb2xvcihjb25zdCBTdHJpbmcmIG5h
bWUpCiB7CiAgICAgaWYgKG5hbWVbMF0gPT0gJyMnKSB7CisgICAgICAgIFJHQkEzMiBjb2xvcjsK
KyAgICAgICAgYm9vbCB2YWxpZDsKKwogICAgICAgICBpZiAobmFtZS5pczhCaXQoKSkKLSAgICAg
ICAgICAgIG1fdmFsaWQgPSBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczgoKSArIDEsIG5h
bWUubGVuZ3RoKCkgLSAxLCBtX2NvbG9yKTsKKyAgICAgICAgICAgIHZhbGlkID0gcGFyc2VIZXhD
b2xvcihuYW1lLmNoYXJhY3RlcnM4KCkgKyAxLCBuYW1lLmxlbmd0aCgpIC0gMSwgY29sb3IpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3ZhbGlkID0gcGFyc2VIZXhDb2xvcihuYW1lLmNo
YXJhY3RlcnMxNigpICsgMSwgbmFtZS5sZW5ndGgoKSAtIDEsIG1fY29sb3IpOworICAgICAgICAg
ICAgdmFsaWQgPSBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczE2KCkgKyAxLCBuYW1lLmxl
bmd0aCgpIC0gMSwgY29sb3IpOworCisgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHNl
dFJHQihjb2xvcik7CiAgICAgfSBlbHNlCiAgICAgICAgIHNldE5hbWVkQ29sb3IobmFtZSk7CiB9
CiAKIENvbG9yOjpDb2xvcihjb25zdCBjaGFyKiBuYW1lKQogeworICAgIFJHQkEzMiBjb2xvcjsK
KyAgICBib29sIHZhbGlkOwogICAgIGlmIChuYW1lWzBdID09ICcjJykKLSAgICAgICAgbV92YWxp
ZCA9IHBhcnNlSGV4Q29sb3IoKFN0cmluZykmbmFtZVsxXSwgbV9jb2xvcik7CisgICAgICAgIHZh
bGlkID0gcGFyc2VIZXhDb2xvcigoU3RyaW5nKSZuYW1lWzFdLCBjb2xvcik7CiAgICAgZWxzZSB7
CiAgICAgICAgIGNvbnN0IE5hbWVkQ29sb3IqIGZvdW5kQ29sb3IgPSBmaW5kQ29sb3IobmFtZSwg
c3RybGVuKG5hbWUpKTsKLSAgICAgICAgbV9jb2xvciA9IGZvdW5kQ29sb3IgPyBmb3VuZENvbG9y
LT5BUkdCVmFsdWUgOiAwOwotICAgICAgICBtX3ZhbGlkID0gZm91bmRDb2xvcjsKKyAgICAgICAg
Y29sb3IgPSBmb3VuZENvbG9yID8gZm91bmRDb2xvci0+QVJHQlZhbHVlIDogMDsKKyAgICAgICAg
dmFsaWQgPSBmb3VuZENvbG9yOwogICAgIH0KKworICAgIGlmICh2YWxpZCkKKyAgICAgICAgc2V0
UkdCKGNvbG9yKTsKK30KKworQ29sb3I6OkNvbG9yKGNvbnN0IENvbG9yJiBvdGhlcikKKyAgICA6
IG1fcmdiYUFuZEZsYWdzKG90aGVyLm1fcmdiYUFuZEZsYWdzKQoreworICAgIGlmIChpc0V4dGVu
ZGVkKCkpCisgICAgICAgIG1fZXh0ZW5kZWRDb2xvci0+cmVmKCk7Cit9CisKK0NvbG9yOjp+Q29s
b3IoKQoreworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAgIG1fZXh0ZW5kZWRDb2xvci0+
ZGVyZWYoKTsKK30KKworQ29sb3ImIENvbG9yOjpvcGVyYXRvcj0oY29uc3QgQ29sb3ImIG90aGVy
KQoreworICAgIG1fcmdiYUFuZEZsYWdzID0gb3RoZXIubV9yZ2JhQW5kRmxhZ3M7CisgICAgaWYg
KGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgbV9leHRlbmRlZENvbG9yLT5yZWYoKTsKKyAgICByZXR1
cm4gKnRoaXM7CiB9CiAKIFN0cmluZyBDb2xvcjo6c2VyaWFsaXplZCgpIGNvbnN0CkBAIC0yOTEs
NiArMzIzLDcgQEAgU3RyaW5nIENvbG9yOjpjc3NUZXh0KCkgY29uc3QKIAogU3RyaW5nIENvbG9y
OjpuYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IEhhbmRs
ZSBFeHRlbmRlZENvbG9ycy4KICAgICBpZiAoYWxwaGEoKSA8IDB4RkYpCiAgICAgICAgIHJldHVy
biBTdHJpbmc6OmZvcm1hdCgiIyUwMlglMDJYJTAyWCUwMlgiLCByZWQoKSwgZ3JlZW4oKSwgYmx1
ZSgpLCBhbHBoYSgpKTsKICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiMlMDJYJTAyWCUwMlgi
LCByZWQoKSwgZ3JlZW4oKSwgYmx1ZSgpKTsKQEAgLTMxNSwxNCArMzQ4LDE2IEBAIHN0YXRpYyBp
bmxpbmUgY29uc3QgTmFtZWRDb2xvciogZmluZE5hbWVkQ29sb3IoY29uc3QgU3RyaW5nJiBuYW1l
KQogdm9pZCBDb2xvcjo6c2V0TmFtZWRDb2xvcihjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAg
Y29uc3QgTmFtZWRDb2xvciogZm91bmRDb2xvciA9IGZpbmROYW1lZENvbG9yKG5hbWUpOwotICAg
IG1fY29sb3IgPSBmb3VuZENvbG9yID8gZm91bmRDb2xvci0+QVJHQlZhbHVlIDogMDsKLSAgICBt
X3ZhbGlkID0gZm91bmRDb2xvcjsKKyAgICBpZiAoZm91bmRDb2xvcikKKyAgICAgICAgc2V0UkdC
KGZvdW5kQ29sb3ItPkFSR0JWYWx1ZSk7CisgICAgZWxzZQorICAgICAgICBtX3JnYmFBbmRGbGFn
cyA9IGludmFsaWRSR0JBQ29sb3I7CiB9CiAKIENvbG9yIENvbG9yOjpsaWdodCgpIGNvbnN0CiB7
CiAgICAgLy8gSGFyZGNvZGUgdGhpcyBjb21tb24gY2FzZSBmb3Igc3BlZWQuCi0gICAgaWYgKG1f
Y29sb3IgPT0gYmxhY2spCisgICAgaWYgKHJnYigpID09IGJsYWNrKQogICAgICAgICByZXR1cm4g
bGlnaHRlbmVkQmxhY2s7CiAgICAgCiAgICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSBuZXh0
YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CkBAIC0zNDcsNyArMzgyLDcgQEAgQ29sb3IgQ29sb3I6Omxp
Z2h0KCkgY29uc3QKIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKIHsKICAgICAvLyBIYXJkY29k
ZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KLSAgICBpZiAobV9jb2xvciA9PSB3aGl0ZSkK
KyAgICBpZiAocmdiKCkgPT0gd2hpdGUpCiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwog
ICAgIAogICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAu
MGYpOwpAQCAtNTYxLDQgKzU5NiwyOSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgcmV0dXJuIHRzIDw8IGNvbG9yLm5hbWVG
b3JSZW5kZXJUcmVlQXNUZXh0KCk7CiB9CiAKK3ZvaWQgQ29sb3I6OnNldFZhbGlkKCkKK3sKKyAg
ICBtX3JnYmFBbmRGbGFncyB8PSB2YWxpZFJHQkFDb2xvcjsKK30KKwordm9pZCBDb2xvcjo6c2V0
RXh0ZW5kZWQoKQoreworICAgIC8vIFZhbGlkIGNvbG9ycyBzaG91bGQgbm90IGNoYW5nZSB0eXBl
LgorICAgIEFTU0VSVCghaXNWYWxpZCgpKTsKKyAgICBtX3JnYmFBbmRGbGFncyAmPSB+KGludmFs
aWRSR0JBQ29sb3IpOworfQorCitib29sIENvbG9yOjppc0V4dGVuZGVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gIShtX3JnYmFBbmRGbGFncyAmIGludmFsaWRSR0JBQ29sb3IpOworfQorCitFeHRl
bmRlZENvbG9yKiBDb2xvcjo6YXNFeHRlbmRlZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzRXh0
ZW5kZWQoKSk7CisgICAgaWYgKCFpc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBtX2V4dGVuZGVkQ29sb3I7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCmluZGV4IDY1MjAwM2Ez
YzViMDkwY2ExZDE4NDI3MWUwMGRlYjU4Y2U0ZmU3ZTUuLmQxZGExOGVlZjZjZDIzOTU1MGEzZTgz
ODkyOTIwYjMyOTgzYzBlZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaApAQCAtMjMsMTAgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVm
IENvbG9yX2gKLSNkZWZpbmUgQ29sb3JfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xv
clNwYWNlLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRDb2xvci5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
RXhwb3J0TWFjcm9zLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGNtYXRoPgpA
QCAtMTA1LDE5ICsxMDUsNDcgQEAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJHQkEmLCBjb25zdCBS
R0JBJik7CiBjbGFzcyBDb2xvciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6Ci0gICAgQ29sb3IoKSA6IG1fY29sb3IoMCksIG1fdmFsaWQoZmFsc2UpIHsgfQotICAgIENv
bG9yKFJHQkEsIENvbG9yU3BhY2UpOworICAgIENvbG9yKCkgeyB9CiAKICAgICAvLyBGSVhNRTog
UmVtb3ZlIGFsbCB0aGVzZSBjb25zdHJ1Y3RvcnMgYW5kIGNyZWF0aW9uIGZ1bmN0aW9ucyBhbmQg
cmVwbGFjZSB0aGUgb25lcyB0aGF0IGFyZSBzdGlsbCBuZWVkZWQgd2l0aCBmcmVlIGZ1bmN0aW9u
cy4KLSAgICBDb2xvcihSR0JBMzIgY29sb3IsIGJvb2wgdmFsaWQgPSB0cnVlKSA6IG1fY29sb3Io
Y29sb3IpLCBtX3ZhbGlkKHZhbGlkKSB7IEFTU0VSVCghbV9jb2xvciB8fCBtX3ZhbGlkKTsgfQot
ICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIpIDogbV9jb2xvcihtYWtlUkdCKHIsIGcsIGIp
KSwgbV92YWxpZCh0cnVlKSB7IH0KLSAgICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQg
YSkgOiBtX2NvbG9yKG1ha2VSR0JBKHIsIGcsIGIsIGEpKSwgbV92YWxpZCh0cnVlKSB7IH0KLSAg
ICAvLyBDb2xvciBpcyBjdXJyZW50bHkgbGltaXRlZCB0byAzMmJpdCBSR0JBLCBwZXJoYXBzIHNv
bWUgZGF5IHdlJ2xsIHN1cHBvcnQgYmV0dGVyIGNvbG9ycwotICAgIENvbG9yKGZsb2F0IHIsIGZs
b2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpIDogbV9jb2xvcihtYWtlUkdCQTMyRnJvbUZsb2F0cyhy
LCBnLCBiLCBhKSksIG1fdmFsaWQodHJ1ZSkgeyB9CisKKyAgICBDb2xvcihSR0JBMzIgY29sb3Is
IGJvb2wgdmFsaWQgPSB0cnVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbGlkKQorICAgICAgICAg
ICAgc2V0UkdCKGNvbG9yKTsKKyAgICB9CisKKyAgICBDb2xvcihpbnQgciwgaW50IGcsIGludCBi
KQorICAgIHsKKyAgICAgICAgc2V0UkdCKHIsIGcsIGIpOworICAgIH0KKworICAgIENvbG9yKGlu
dCByLCBpbnQgZywgaW50IGIsIGludCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdCKG1ha2VSR0JB
KHIsIGcsIGIsIGEpKTsKKyAgICB9CisKKyAgICBDb2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9h
dCBiLCBmbG9hdCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdCKG1ha2VSR0JBMzJGcm9tRmxvYXRz
KHIsIGcsIGIsIGEpKTsKKyAgICB9CisKICAgICAvLyBDcmVhdGVzIGEgbmV3IGNvbG9yIGZyb20g
dGhlIHNwZWNpZmljIENNWUsgYW5kIGFscGhhIHZhbHVlcy4KLSAgICBDb2xvcihmbG9hdCBjLCBm
bG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKSA6IG1fY29sb3IobWFrZVJHQkFGcm9t
Q01ZS0EoYywgbSwgeSwgaywgYSkpLCBtX3ZhbGlkKHRydWUpIHsgfQorICAgIENvbG9yKGZsb2F0
IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCisgICAgeworICAgICAgICBz
ZXRSR0IobWFrZVJHQkFGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOworICAgIH0KKwogICAgIFdF
QkNPUkVfRVhQT1JUIGV4cGxpY2l0IENvbG9yKGNvbnN0IFN0cmluZyYpOwogICAgIGV4cGxpY2l0
IENvbG9yKGNvbnN0IGNoYXIqKTsKKworICAgIC8vIEZJWE1FOiBBZGQgY29uc3RydWN0b3IgZm9y
IEV4dGVuZGVkQ29sb3IgdHlwZS4KKworICAgIENvbG9yKFJHQkEsIENvbG9yU3BhY2UpOworICAg
IFdFQkNPUkVfRVhQT1JUIENvbG9yKGNvbnN0IENvbG9yJik7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCB+Q29sb3IoKTsKKwogICAgIHN0YXRpYyBDb2xvciBjcmVhdGVVbmNoZWNrZWQoaW50IHIsIGlu
dCBnLCBpbnQgYikKICAgICB7CiAgICAgICAgIFJHQkEzMiBjb2xvciA9IDB4RkYwMDAwMDAgfCBy
IDw8IDE2IHwgZyA8PCA4IHwgYjsKQEAgLTE0MSwxOSArMTY5LDIzIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgc2V0TmFtZWRDb2xvcihjb25zdCBTdHJpbmcmKTsKIAotICAgIC8vIEZJWE1FOiBSZW1v
dmUgdGhpcyBhZnRlciBtb3ZpbmcgY2xpZW50cyB0byBhbGwgdXNlIE9wdGlvbmFsQ29sb3IgaW5z
dGVhZC4KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkOyB9CisgICAg
Ym9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9yZ2JhQW5kRmxhZ3MgJiB2YWxpZFJHQkFD
b2xvckJpdDsgfQogCiAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGFscGhhKCkg
PCAyNTU7IH0KIAotICAgIGludCByZWQoKSBjb25zdCB7IHJldHVybiByZWRDaGFubmVsKG1fY29s
b3IpOyB9Ci0gICAgaW50IGdyZWVuKCkgY29uc3QgeyByZXR1cm4gZ3JlZW5DaGFubmVsKG1fY29s
b3IpOyB9Ci0gICAgaW50IGJsdWUoKSBjb25zdCB7IHJldHVybiBibHVlQ2hhbm5lbChtX2NvbG9y
KTsgfQotICAgIGludCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGFscGhhQ2hhbm5lbChtX2NvbG9y
KTsgfQorICAgIGludCByZWQoKSBjb25zdCB7IHJldHVybiByZWRDaGFubmVsKHJnYigpKTsgfQor
ICAgIGludCBncmVlbigpIGNvbnN0IHsgcmV0dXJuIGdyZWVuQ2hhbm5lbChyZ2IoKSk7IH0KKyAg
ICBpbnQgYmx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJsdWVDaGFubmVsKHJnYigpKTsgfQorICAgIGlu
dCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGFscGhhQ2hhbm5lbChyZ2IoKSk7IH0KICAgICAKLSAg
ICBSR0JBMzIgcmdiKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfSAvLyBQcmVzZXJ2ZSB0aGUg
YWxwaGEuCi0gICAgdm9pZCBzZXRSR0IoaW50IHIsIGludCBnLCBpbnQgYikgeyBtX2NvbG9yID0g
bWFrZVJHQihyLCBnLCBiKTsgbV92YWxpZCA9IHRydWU7IH0KLSAgICB2b2lkIHNldFJHQihSR0JB
MzIgcmdiKSB7IG1fY29sb3IgPSByZ2I7IG1fdmFsaWQgPSB0cnVlOyB9CisgICAgUkdCQTMyIHJn
YigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJHQkEzMj4obV9yZ2JhQW5kRmxhZ3MgPj4g
MzIpOyB9CisgICAgdm9pZCBzZXRSR0IoaW50IHIsIGludCBnLCBpbnQgYikgeyBzZXRSR0IobWFr
ZVJHQihyLCBnLCBiKSk7IH0KKyAgICB2b2lkIHNldFJHQihSR0JBMzIgcmdiKQorICAgIHsKKyAg
ICAgICAgbV9yZ2JhQW5kRmxhZ3MgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJnYikgPDwgMzIp
OworICAgICAgICBzZXRWYWxpZCgpOworICAgIH0KKwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Z2V0UkdCQShmbG9hdCYgciwgZmxvYXQmIGcsIGZsb2F0JiBiLCBmbG9hdCYgYSkgY29uc3Q7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRSR0JBKGRvdWJsZSYgciwgZG91YmxlJiBnLCBkb3Vi
bGUmIGIsIGRvdWJsZSYgYSkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRIU0wo
ZG91YmxlJiBoLCBkb3VibGUmIHMsIGRvdWJsZSYgbCkgY29uc3Q7CkBAIC0yMDUsOSArMjM3LDI3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgUkdCQTMyIGNvbXBvc2l0aW9uRmlsbCA9IDB4
RkZFMURENTU7CiAjZW5kaWYKIAorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNFeHRlbmRlZCgp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEV4dGVuZGVkQ29sb3IqIGFzRXh0ZW5kZWQoKSBj
b25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oY29uc3QgQ29sb3Im
KTsKKworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENv
bG9yJiBiKTsKKwogcHJpdmF0ZToKLSAgICBSR0JBMzIgbV9jb2xvcjsKLSAgICBib29sIG1fdmFs
aWQ7CisKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgZXh0ZW5kZWRDb2xvciA9IDB4MDsKKyAg
ICBzdGF0aWMgY29uc3QgdWludDY0X3QgaW52YWxpZFJHQkFDb2xvciA9IDB4MTsKKyAgICBzdGF0
aWMgY29uc3QgdWludDY0X3QgdmFsaWRSR0JBQ29sb3JCaXQgPSAweDI7CisgICAgc3RhdGljIGNv
bnN0IHVpbnQ2NF90IHZhbGlkUkdCQUNvbG9yID0gMHgzOworCisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRWYWxpZCgpOworICAgIHZvaWQgc2V0RXh0ZW5kZWQoKTsKKworICAgIHVuaW9uIHsK
KyAgICAgICAgdWludDY0X3QgbV9yZ2JhQW5kRmxhZ3MgeyBpbnZhbGlkUkdCQUNvbG9yIH07Cisg
ICAgICAgIEV4dGVuZGVkQ29sb3IqIG1fZXh0ZW5kZWRDb2xvcjsKKyAgICB9OwogfTsKIAogYm9v
bCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKQEAgLTI2NywxNSArMzE3
LDE0IEBAIGlubGluZSBib29sIFJHQkE6Omhhc0FscGhhKCkgY29uc3QKIH0KIAogaW5saW5lIENv
bG9yOjpDb2xvcihSR0JBIGNvbG9yLCBDb2xvclNwYWNlIHNwYWNlKQotICAgIDogbV9jb2xvcihj
b2xvci5tX2ludGVnZXIpCi0gICAgLCBtX3ZhbGlkKHRydWUpCiB7CisgICAgc2V0UkdCKGNvbG9y
Lm1faW50ZWdlcik7CiAgICAgQVNTRVJUX1VOVVNFRChzcGFjZSwgc3BhY2UgPT0gQ29sb3JTcGFj
ZVNSR0IpOwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25z
dCBDb2xvciYgYikKIHsKLSAgICByZXR1cm4gYS5yZ2IoKSA9PSBiLnJnYigpICYmIGEuaXNWYWxp
ZCgpID09IGIuaXNWYWxpZCgpOworICAgIHJldHVybiBhLm1fcmdiYUFuZEZsYWdzID09IGIubV9y
Z2JhQW5kRmxhZ3M7CiB9CiAKIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIGEs
IGNvbnN0IENvbG9yJiBiKQpAQCAtMzE1LDUgKzM2NCwzIEBAIGlubGluZSBSR0JBMzIgY29sb3JX
aXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIE9wdGlvbmFsPGZsb2F0PiBvdmVycmlkZUFs
cGhhCiBXRUJDT1JFX0VYUE9SVCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBj
b25zdCBDb2xvciYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDb2xv
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRl
ZENvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29s
b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjVkOTM0ODY1NGNiM2I4OWYzYWMzZmUwNGU1N2Q1OTMwNmUxN2Y2
NWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9F
eHRlbmRlZENvbG9yLmNwcApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV4
dGVuZGVkQ29sb3IuaCIKKworI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGZsb2F0
IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEsIGNvbnN0IENvbG9yU3BhY2UmIGNvbG9yU3Bh
Y2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXh0ZW5kZWRDb2xvcihyLCBnLCBiLCBh
LCBjb2xvclNwYWNlKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuZGVkQ29sb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZWViODZjYzY1NmY2YjZhY2RjZjMz
NDE3MDNiMTQ4OTJlNTQzZTIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkNvbG9yU3BhY2UuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV4dGVuZGVk
Q29sb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxFeHRlbmRlZENvbG9yPiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxFeHRlbmRlZENvbG9yPiBjcmVhdGUoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQg
YiwgZmxvYXQgYSwgY29uc3QgQ29sb3JTcGFjZSYgY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkNv
bG9yU3BhY2VTUkdCKTsKKworICAgIGZsb2F0IHJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVkOyB9
CisgICAgZmxvYXQgZ3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2dyZWVuOyB9CisgICAgZmxvYXQg
Ymx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmx1ZTsgfQorICAgIGZsb2F0IGFscGhhKCkgY29uc3Qg
eyByZXR1cm4gbV9hbHBoYTsgfQorCisgICAgY29uc3QgQ29sb3JTcGFjZSYgY29sb3JTcGFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCitwcml2YXRlOgorICAgIEV4dGVuZGVk
Q29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEsIGNvbnN0IENvbG9yU3BhY2UmIGNvbG9y
U3BhY2UpCisgICAgICAgIDogbV9yZWQocikKKyAgICAgICAgLCBtX2dyZWVuKGcpCisgICAgICAg
ICwgbV9ibHVlKGIpCisgICAgICAgICwgbV9hbHBoYShhKQorICAgICAgICAsIG1fY29sb3JTcGFj
ZShjb2xvclNwYWNlKQorICAgIHsgfQorCisgICAgZmxvYXQgbV9yZWQgeyAwIH07CisgICAgZmxv
YXQgbV9ncmVlbiB7IDAgfTsKKyAgICBmbG9hdCBtX2JsdWUgeyAwIH07CisgICAgZmxvYXQgbV9h
bHBoYSB7IDAgfTsKKworICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlIHsgQ29sb3JTcGFjZTo6
Q29sb3JTcGFjZVNSR0IgfTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IGNlNThhMjUxOTI1
YTY2ODJiM2M3ZjAxYWRjODhhMGI3NDg1M2ViNmIuLmU3NjFjNTllODUzMDk5NTBjYWI1MDI1YjU4
N2Q2OWQ0OGNhNDM3NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtMTM2OSw4ICsxMzY5LDggQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoY29uc3QgQ29tbWl0U3Rh
dGUmIGNvbW1pdFN0YXRlLCBjb24KICAgICAvLyBVc2UgaGF2aW5nIGEgdHJhbnNmb3JtIGFzIGEg
a2V5IHRvIG1ha2luZyB0aGUgdGlsZSB3YXNoIGxheWVyLiBJZiBldmVyeSBsYXllciBnZXRzIGEg
d2FzaCwKICAgICAvLyB0aGV5IHN0YXJ0IHRvIG9ic2N1cmUgdXNlZnVsIGluZm9ybWF0aW9uLgog
ICAgIGlmICgoIW1fdHJhbnNmb3JtLmlzSWRlbnRpdHkoKSB8fCBtX3VzaW5nVGlsZWRCYWNraW5n
KSAmJiAhbV92aXNpYmxlVGlsZVdhc2hMYXllcikgewotICAgICAgICBzdGF0aWMgQ29sb3Igd2Fz
aEZpbGxDb2xvcigyNTUsIDAsIDAsIDUwKTsKLSAgICAgICAgc3RhdGljIENvbG9yIHdhc2hCb3Jk
ZXJDb2xvcigyNTUsIDAsIDAsIDEwMCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxD
b2xvcj4gd2FzaEZpbGxDb2xvcigyNTUsIDAsIDAsIDUwKTsKKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPENvbG9yPiB3YXNoQm9yZGVyQ29sb3IoMjU1LCAwLCAwLCAxMDApOwogICAgICAg
ICAKICAgICAgICAgbV92aXNpYmxlVGlsZVdhc2hMYXllciA9IGNyZWF0ZVBsYXRmb3JtQ0FMYXll
cihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCB0aGlzKTsKICAgICAgICAgU3RyaW5n
IG5hbWUgPSBTdHJpbmc6OmZvcm1hdCgiVmlzaWJsZSBUaWxlIFdhc2ggTGF5ZXIgJXAiLCBtX3Zp
c2libGVUaWxlV2FzaExheWVyLT5wbGF0Zm9ybUxheWVyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAppbmRleCA2ZDg4Yzg4ZGQ0YWE2ZDJk
MGFjMzRkMzE0YWY2ZGYyYmFlMjdkNTk4Li43M2ZkZTIwMDJjMzM3NWEyZDdjNmJjNTY1MzE0MmEz
NTg1ZmQ2MWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Db2xvckNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9D
b2xvckNHLmNwcApAQCAtNzMsOCArNzMsNyBAQCBzdGF0aWMgQ0dDb2xvclJlZiBjcmVhdGVDR0Nv
bG9yV2l0aERldmljZVJHQkEoQ0dDb2xvclJlZiBzb3VyY2VDb2xvcikKIENvbG9yOjpDb2xvcihD
R0NvbG9yUmVmIGNvbG9yKQogewogICAgIGlmICghY29sb3IpIHsKLSAgICAgICAgbV9jb2xvciA9
IDA7Ci0gICAgICAgIG1fdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgbV9yZ2JhQW5kRmxhZ3MgPSBp
bnZhbGlkUkdCQUNvbG9yOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMTEsOCArMTEw
LDcgQEAgQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KIAotICAgIG1fY29sb3IgPSBtYWtlUkdCQShyICogMjU1LCBnICog
MjU1LCBiICogMjU1LCBhICogMjU1KTsKLSAgICBtX3ZhbGlkID0gdHJ1ZTsKKyAgICBzZXRSR0Io
bWFrZVJHQkEociAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NSwgYSAqIDI1NSkpOwogfQogCiBzdGF0
aWMgQ0dDb2xvclJlZiBsZWFrQ0dDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAppbmRleCA4ZjU2
YmE2ZmI0ZTBiNjVhOTljMjczZDNiNDcwYmZkYjZiMzViOWFmLi5hZWEzN2Y4YzFkMzZmNWZhYTNh
M2JkYzkzNGExYWMwNjlhMDE1MTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKQEAgLTI2LDE5ICsyNiwxNyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBDb2xvcjo6Q29sb3IoY29uc3QgR2RrQ29sb3ImIGMpCi0gICAgOiBtX2Nv
bG9yKG1ha2VSR0IoYy5yZWQgPj4gOCwgYy5ncmVlbiA+PiA4LCBjLmJsdWUgPj4gOCkpCi0gICAg
LCBtX3ZhbGlkKHRydWUpCiB7CisgICAgc2V0UkdCKG1ha2VSR0IoYy5yZWQgPj4gOCwgYy5ncmVl
biA+PiA4LCBjLmJsdWUgPj4gOCkpOwogfQogCiAjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCiBD
b2xvcjo6Q29sb3IoY29uc3QgR2RrUkdCQSYgYykKLSAgICA6IG1fY29sb3IobWFrZVJHQkEoc3Rh
dGljX2Nhc3Q8aW50PihjLnJlZCAqIDI1NSksCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludD4oYy5ncmVlbiAqIDI1NSksCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludD4oYy5ibHVlICogMjU1KSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50PihjLmFscGhhICogMjU1KSkpCi0gICAgLCBtX3ZhbGlkKHRydWUpCiB7CisgICAg
c2V0UkdCKG1ha2VSR0JBKHN0YXRpY19jYXN0PGludD4oYy5yZWQgKiAyNTUpLAorICAgICAgICBz
dGF0aWNfY2FzdDxpbnQ+KGMuZ3JlZW4gKiAyNTUpLAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KGMuYmx1ZSAqIDI1NSksCisgICAgICAgIHN0YXRpY19jYXN0PGludD4oYy5hbHBoYSAqIDI1NSkp
KTsKIH0KIAogQ29sb3I6Om9wZXJhdG9yIEdka1JHQkEoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCmluZGV4
IDkxYzFkYTE5M2ZiYjE1ZDM0ZDczNDVjMTU0NDU3N2Q4YTcxZDZhNjAuLjcyNGExMDVlMjRmZjcx
NDkzNzM1M2RhZmJlMmQyYjY5MGFkZWU3OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKQEAgLTM0LDggKzM0LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDb2xvcjo6Q29sb3IoRDJEMV9DT0xPUl9GIGNvbG9y
KQogewotICAgIG1fY29sb3IgPSBtYWtlUkdCQShjb2xvci5yICogMjU1LCBjb2xvci5nICogMjU1
LCBjb2xvci5iICogMjU1LCBjb2xvci5hICogMjU1KTsKLSAgICBtX3ZhbGlkID0gdHJ1ZTsKKyAg
ICBzZXRSR0IobWFrZVJHQkEoY29sb3IuciAqIDI1NSwgY29sb3IuZyAqIDI1NSwgY29sb3IuYiAq
IDI1NSwgY29sb3IuYSAqIDI1NSkpOwogfQogCiBDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9G
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJl
ZGRlZE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuY3BwCmluZGV4IDM4ODIxOWU1ODk1MmE2Y2U5ZDIxM2NlNTlmODY4M2ZmNmNiODgyNjEu
LjBlYjE1YTQ1YTUwZDgxMTQ0NjNjMDVmYWQwODljODUyMzlmZjFjOGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcApAQCAtNzUsMjUg
Kzc1LDI1IEBAIHN0YXRpYyBjb25zdCBmbG9hdCByZXBsYWNlbWVudEFycm93Q2lyY2xlUGFkZGlu
ZyA9IDM7CiAKIHN0YXRpYyBjb25zdCBDb2xvciYgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQ
cmVzc2VkQ29sb3IoKQogewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBwcmVzc2VkKDEwNSwgMTA1
LCAxMDUsIDI0Mik7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbG9yPiBwcmVzc2VkKDEw
NSwgMTA1LCAxMDUsIDI0Mik7CiAgICAgcmV0dXJuIHByZXNzZWQ7CiB9CiAKIHN0YXRpYyBjb25z
dCBDb2xvciYgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xvcigpCiB7Ci0gICAgc3RhdGlj
IGNvbnN0IENvbG9yIHN0YW5kYXJkKDEyNSwgMTI1LCAxMjUsIDI0Mik7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPENvbG9yPiBzdGFuZGFyZCgxMjUsIDEyNSwgMTI1LCAyNDIpOwogICAgIHJl
dHVybiBzdGFuZGFyZDsKIH0KIAogc3RhdGljIGNvbnN0IENvbG9yJiByZXBsYWNlbWVudFRleHRD
b2xvcigpCiB7Ci0gICAgc3RhdGljIGNvbnN0IENvbG9yIHN0YW5kYXJkKDI0MCwgMjQwLCAyNDAs
IDI1NSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbG9yPiBzdGFuZGFyZCgyNDAsIDI0
MCwgMjQwLCAyNTUpOwogICAgIHJldHVybiBzdGFuZGFyZDsKIH0KIAogc3RhdGljIGNvbnN0IENv
bG9yJiB1bmF2YWlsYWJsZVBsdWdpbkJvcmRlckNvbG9yKCkKIHsKLSAgICBzdGF0aWMgY29uc3Qg
Q29sb3Igc3RhbmRhcmQoMjU1LCAyNTUsIDI1NSwgMjE2KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Q29sb3I+IHN0YW5kYXJkKDI1NSwgMjU1LCAyNTUsIDIxNik7CiAgICAgcmV0dXJuIHN0
YW5kYXJkOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RnJhbWVTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNw
cAppbmRleCAxNzliZDQyNmNlYTg2NjNlZGRhMDUyNmExZWM5ZjI3ZDY1NGE4OWFmLi43NzQ4YzQ3
OGViMGRlNDg2ODU1YWUxZGVmNzg1NmJiMzJmMjUzNjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKQEAgLTY5LDE5ICs2OSwxOSBAQCBSZW5kZXJGcmFt
ZVNldDo6R3JpZEF4aXM6OkdyaWRBeGlzKCkKIAogc3RhdGljIGNvbnN0IENvbG9yJiBib3JkZXJT
dGFydEVkZ2VDb2xvcigpCiB7Ci0gICAgc3RhdGljIGNvbnN0IENvbG9yIGNvbG9yKDE3MCwgMTcw
LCAxNzApOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gY29sb3IoMTcwLCAxNzAs
IDE3MCk7CiAgICAgcmV0dXJuIGNvbG9yOwogfQogCiBzdGF0aWMgY29uc3QgQ29sb3ImIGJvcmRl
ckVuZEVkZ2VDb2xvcigpCiB7Ci0gICAgc3RhdGljIGNvbnN0IENvbG9yIGNvbG9yID0gQ29sb3I6
OmJsYWNrOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gY29sb3IgPSBDb2xvcjo6
YmxhY2s7CiAgICAgcmV0dXJuIGNvbG9yOwogfQogCiBzdGF0aWMgY29uc3QgQ29sb3ImIGJvcmRl
ckZpbGxDb2xvcigpCiB7Ci0gICAgc3RhdGljIGNvbnN0IENvbG9yIGNvbG9yKDIwOCwgMjA4LCAy
MDgpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gY29sb3IoMjA4LCAyMDgsIDIw
OCk7CiAgICAgcmV0dXJuIGNvbG9yOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZUNlbGwuY3BwCmluZGV4IDQ1ZDhjN2JlYjQxZTZiYjhkNDBlZjMzZjdkYWM0YzQ3
ZDI0YmNhMjIuLmMwMGNiY2M5OTEzZDEzZDc2ZjE3YWZkODMyYzg2OGYyYWI3OGViOWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCkBAIC01Miw3ICs1
Miw3IEBAIHN0cnVjdCBTYW1lU2l6ZUFzUmVuZGVyVGFibGVDZWxsIDogcHVibGljIFJlbmRlckJs
b2NrRmxvdyB7CiB9OwogCiBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVuZGVyVGFibGVDZWxsKSA9
PSBzaXplb2YoU2FtZVNpemVBc1JlbmRlclRhYmxlQ2VsbCksIFJlbmRlclRhYmxlQ2VsbF9zaG91
bGRfc3RheV9zbWFsbCk7Ci1DT01QSUxFX0FTU0VSVChzaXplb2YoQ29sbGFwc2VkQm9yZGVyVmFs
dWUpID09IDE2LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZV9zaG91bGRfc3RheV9zbWFsbCk7CitDT01Q
SUxFX0FTU0VSVChzaXplb2YoQ29sbGFwc2VkQm9yZGVyVmFsdWUpIDw9IDI0LCBDb2xsYXBzZWRC
b3JkZXJWYWx1ZV9zaG91bGRfc3RheV9zbWFsbCk7CiAKIFJlbmRlclRhYmxlQ2VsbDo6UmVuZGVy
VGFibGVDZWxsKEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCiAgICAgOiBS
ZW5kZXJCbG9ja0Zsb3coZWxlbWVudCwgV1RGTW92ZShzdHlsZSkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KaW5kZXggODc5MGY3OWMzZDMxOTU1NzkxOWNkYTgz
MjVjYmRmZjMxZWU3OGVlYi4uYmY4Njc0ODM0NjM1MzgzNDNmZjEwN2E2ZTFiYWI0MjdkMzBlMGQ0
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpAQCAtMzI1
LDcgKzMyNSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnNldENvbnRlbnRTaXplQ2F0ZWdvcnko
Y29uc3QgU3RyaW5nJiBjb250ZW50U2l6ZUNhdGVnb3J5KQogCiBjb25zdCBDb2xvciYgUmVuZGVy
VGhlbWVJT1M6OnNoYWRvd0NvbG9yKCkgY29uc3QKIHsKLSAgICBzdGF0aWMgQ29sb3IgY29sb3Io
MC4wZiwgMC4wZiwgMC4wZiwgMC43Zik7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbG9y
PiBjb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjdmKTsKICAgICByZXR1cm4gY29sb3I7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSW5kaWNhdGVMYXllci5t
bSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSW5kaWNhdGVMYXllci5tbQppbmRleCBm
OTQ0NGRjMzc0ZTA0MmI2ZDA1MDc3MGEyNjA3MmUxZTdiZTEyYzRkLi4yZjBjMTY2Y2Q1MjgyNzcz
ZWI5MGU5ZTM5YTljYjViNDVkZmZhOTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkluZGljYXRlTGF5ZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJJbmRpY2F0ZUxheWVyLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJDb3Jl
L0NvbG9yTWFjLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1F1YXJ0ekNvcmVTUEkuaD4KICNpbXBvcnQg
PFdlYkNvcmUvV0FLV2luZG93Lmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ5LDcgKzUwLDcgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAgICAgc2VsZi5jb250ZW50c1NjYWxlID0gW1tfd2ViVmlldyB3aW5kb3dd
IHNjcmVlblNjYWxlXTsKIAogICAgIC8vIEJsdWUgaGlnaGxpZ2h0IGNvbG9yLgotICAgIHN0YXRp
YyBDb2xvciBoaWdobGlnaHRDb2xvcigxMTEuMGYgLyAyNTUuMGYsIDE2OC4wZiAvIDI1NS4wZiwg
MjIwLjBmIC8gMjU1LjBmLCAwLjY2Zik7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbG9y
PiBoaWdobGlnaHRDb2xvcigxMTEuMGYgLyAyNTUuMGYsIDE2OC4wZiAvIDI1NS4wZiwgMjIwLjBm
IC8gMjU1LjBmLCAwLjY2Zik7CiAgICAgc2VsZi5iYWNrZ3JvdW5kQ29sb3IgPSBjYWNoZWRDR0Nv
bG9yKGhpZ2hsaWdodENvbG9yKTsKIAogICAgIHJldHVybiBzZWxmOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGZiYWMxMDgzYjY5MWRmNjhjYWIx
YmUyYWFkZjI4MDJiNjAxMTM5YzkuLjgyNmZjODg1ZjlmYzAyZjNjZDZhYWU1YjM2Yzg1ZTBhMDYw
MjZhNjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNiBAQAorMjAxNi0xMC0wMyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIHByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIGV4dGVuZGVkIGNvbG9y
cyB0byBXZWJDb3JlOjpDb2xvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYyODc4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yODU5NjQxMz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIG5ldyBBUEkg
dGVzdCBmb3IgQ29sb3JzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0NvbG9yLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE2LTA5LTI3
ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIEFkb3B0
IE1lZGlhUmVtb3RlIFNQSSB0byBhY2hpZXZlIGRlc2lyZWQgTm93IFBsYXlpbmcgYmVoYXZpb3IK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvci5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3IuY3BwCmluZGV4IGU4ZTY4
MjBlNTZjZjEzYWQ5MDYwZDk0MTI0YzY4YjNmYmFlNmQ5MzMuLjg1NjI1ZDI3NzQ4ODIzMDZkNzQx
OTQ5NTA5NmRmZjY3ZDk3NWY5MGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9Db2xvci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0NvbG9yLmNwcApAQCAtMTQ0LDQgKzE0NCwyNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTVl9M
aWdodEdyYXkpCiAgICAgRVhQRUNUX0RPVUJMRV9FUSgwLjc1Mjk0MTE3NjQ3MDU4ODIyLCB2KTsK
IH0KIAorVEVTVChDb2xvciwgVmFsaWRpdHkpCit7CisgICAgQ29sb3IgaW52YWxpZENvbG9yOwor
ICAgIEVYUEVDVF9GQUxTRShpbnZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKKyAgICBFWFBFQ1RfRkFM
U0UoaW52YWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CisgICAgRVhQRUNUX1RSVUUoaW52YWxpZENv
bG9yLmFzRXh0ZW5kZWQoKSA9PSBudWxscHRyKTsKKworICAgIENvbG9yIG90aGVySW52YWxpZENv
bG9yID0gaW52YWxpZENvbG9yOworICAgIEVYUEVDVF9GQUxTRShvdGhlckludmFsaWRDb2xvci5p
c1ZhbGlkKCkpOworICAgIEVYUEVDVF9GQUxTRShvdGhlckludmFsaWRDb2xvci5pc0V4dGVuZGVk
KCkpOworICAgIEVYUEVDVF9UUlVFKG90aGVySW52YWxpZENvbG9yLmFzRXh0ZW5kZWQoKSA9PSBu
dWxscHRyKTsKKworICAgIENvbG9yIHZhbGlkQ29sb3IoMjU1LCAwLCAwKTsKKyAgICBFWFBFQ1Rf
VFJVRSh2YWxpZENvbG9yLmlzVmFsaWQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHZhbGlkQ29sb3Iu
aXNFeHRlbmRlZCgpKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWxpZENvbG9yLmFzRXh0ZW5kZWQoKSA9
PSBudWxscHRyKTsKKworICAgIENvbG9yIG90aGVyVmFsaWRDb2xvciA9IHZhbGlkQ29sb3I7Cisg
ICAgRVhQRUNUX1RSVUUob3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7CisgICAgRVhQRUNUX0ZB
TFNFKG90aGVyVmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOworICAgIEVYUEVDVF9UUlVFKG90aGVy
VmFsaWRDb2xvci5hc0V4dGVuZGVkKCkgPT0gbnVsbHB0cik7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291330</attachid>
            <date>2016-10-11 20:16:49 -0700</date>
            <delta_ts>2016-10-11 20:16:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162878-20161012141323.patch</filename>
            <type>text/plain</type>
            <size>33799</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3MTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDVjNmU0ZDM5OWJiODg0
MTAxZjdhMGVjN2QwOTMzOWY5MTdiMGI4ZS4uMWJjYjU4MjEyMDJmY2Q2ZGFkOTRlYjgxOTg5YmYx
YzIxMDdhODhiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDkyIEBACiAyMDE2LTEwLTExICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQgcHJlbGltaW5hcnkgc3Vw
cG9ydCBmb3IgZXh0ZW5kZWQgY29sb3JzIHRvIFdlYkNvcmU6OkNvbG9yCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI4NzgKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzI4NTk2NDEzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBhbiBFeHRlbmRlZENvbG9yIGNsYXNzIHRoYXQgd2lsbCBob2xkIHRo
ZSBkYXRhIG5lY2Vzc2FyeQorICAgICAgICBmb3Igd2lkZXItdGhhbi1zUkdCIChhbmQgbW9yZSBw
cmVjaXNlKSBjb2xvcnMuIEluIG9yZGVyIHRvCisgICAgICAgIGF2b2lkIGluY3JlYXNpbmcgdGhl
IHNpemUgb2YgQ29sb3IsIGltcGxlbWVudCBhIHRhZ2dlZAorICAgICAgICBwb2ludGVyIHRoYXQg
aXMgZWl0aGVyIHJlZmVyZW5jaW5nIGFuIEV4dGVuZGVkQ29sb3IsIG9yCisgICAgICAgIGlzIGEg
NjQtYml0IG51bWJlciB3aXRoIHRoZSB0b3AgMzItYml0cyBiZWluZyB0aGUgUkdCQSwgYW5kCisg
ICAgICAgIHRoZSBib3R0b20gMiBiaXRzIGluZGljYXRpbmcgYW4gaW52YWxpZCBSR0JBIG9yIGEg
dmFsaWQgUkdCQSwKKyAgICAgICAgcGx1cyB0aGUgdGFnLgorCisgICAgICAgIEFkZCBjb3B5IGNv
bnN0cnVjdG9ycyBhbmQgb3BlcmF0b3I9IHNvIHRoYXQgdGhlIG5ldyBDb2xvciBvYmplY3RzCisg
ICAgICAgIGFyZSBjb3JyZWN0bHkgY29waWVkLgorCisgICAgICAgIFRoZXJlIGlzbid0IHlldCBh
IHdheSB0byBjcmVhdGUgYW4gRXh0ZW5kZWRDb2xvci4gVGhhdCdzIGNvbWluZworICAgICAgICBp
biBhIGZvbGxvd3VwIHBhdGNoIChhbmQgd2lsbCByZXF1aXJlIGNoYW5nZXMgdG8gdGhlIENTUyBw
YXJzZXIpLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMsIGFuZCBuZXcgQVBJ
IHRlc3RzIGluIENvbG9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgbmV3IGZpbGVzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOiBVcGRhdGUgZXZlcnl0aGluZyB0byB1
c2UgbV9yZ2JhQW5kRmxhZ3MKKyAgICAgICAgaW5zdGVhZCBvZiBtX2NvbG9yICsgbV92YWxpZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6fkNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvcj0pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpzZXROYW1lZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjps
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFyayk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6c2V0VmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldEV4dGVuZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0V4dGVuZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjphc0V4dGVuZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5oOiBJbXBsZW1lbnQgdGhlIHRhZ2dlZCB1bmlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNWYWxpZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpncmVlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Ymx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
YWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnJnYik6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6c2V0UkdCKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHA6IE5ldyBmaWxlLiBIb2xk
cyBmbG9hdGluZyBwb2ludAorICAgICAgICByZWQsIGdyZWVuLCBibHVlIGFuZCBhbHBoYSwgcGx1
cyBhIGNvbG9yIHNwYWNlLgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6On5FeHRlbmRlZENvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnJlZik6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbmRlZENvbG9yOjpkZXJlZik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5k
ZWRDb2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6cmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmdyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuZGVkQ29sb3I6OmJsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6YWxw
aGEpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6Y29sb3JTcGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpFeHRlbmRlZENvbG9yKToKKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwOiBVcGRhdGUgdGhlIGNvbnN0cnVjdG9y
cyBmb3IKKyAgICAgICAgdGhlIHBsYXRmb3JtIHNwZWNpZmljIGNvbG9yIGNsYXNzZXMuCisgICAg
ICAgIChXZWJDb3JlOjpDb2xvcjo6Q29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Db2xvckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29sb3IpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1i
ZWRkZWRPYmplY3QuY3BwOiBVc2UgTmV2ZXJEZXN0cm95ZWQuCisgICAgICAgIChXZWJDb3JlOjpy
ZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFByZXNzZWRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpyZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnJl
cGxhY2VtZW50VGV4dENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnVuYXZhaWxhYmxlUGx1Z2lu
Qm9yZGVyQ29sb3IpOgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpib3JkZXJTdGFydEVkZ2VDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpib3JkZXJFbmRFZGdlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVy
RmlsbENvbG9yKToKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOiBU
aGlzIGdyb3dzIGluIHNpemUgc2xpZ2h0bHkKKyAgICAgICAgYmVjYXVzZSBpdCBjYW4gbm8gbG9u
Z2VyIHBhY2sgYml0cy4KKworMjAxNi0xMC0xMSAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5j
b20+CisKICAgICAgICAgY29sb3ItZ2FtdXQgbWVkaWEgcXVlcnkgc2hvdWxkbid0IEFTU0VSVCBv
biBpbnZhbGlkIHZhbHVlcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYzMzAzCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yODcyNDU2Nj4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggOTg4MjE5ZjZhMjdmOTlhZTU1ZTU4N2JjMzNhOTk5OTVmZTg0Y2Yy
Ny4uYjI3M2JhYTZiMjkyZGQyMGM0YWRmNDAwNjU0ZTY1OTQwNGIwZjdjYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTIyMDMsNiArMjIwMyw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2Zh
ZGVHZW5lcmF0ZWRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVz
aE1vbml0b3JDbGllbnQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHln
b24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggZGMxZDMxZTZjNDU5ODAyMjhkYmE3MTNiOWZkMmMzYzA4YjU4MTgzMy4uOWVk
MTBjNzBlNjVjOWQ4NTA0ZGYxNmNhYmIzM2Y0ZmJiMDg0ZWFmNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM4MSw2ICsxMzgx
LDggQEAKIAkJMzFDNDIyNDYxRDc0RUI5QTAwRjEyMzQyIC8qIEpTUGVyZm9ybWFuY2VUaW1pbmdD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzFDNDIyNDUxRDc0RUI5QTAwRjEyMzQyIC8qIEpTUGVyZm9ybWFuY2VUaW1pbmdDdXN0b20uY3Bw
ICovOyB9OwogCQkzMUQ1OTFCMzE2Njk3QTZDMDBFNkJGMDIgLyogUGx1Z0luQ2xpZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUQ1OTFCMTE2Njk3
QTZDMDBFNkJGMDIgLyogUGx1Z0luQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzFEQ0QyOUQxQUI0RkJERTAwNzJFODE3IC8qIEFuaW1h
dGlvblRyaWdnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxRENEMjlDMUFCNEZCREUwMDcyRTgxNyAvKiBBbmltYXRpb25UcmlnZ2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMzFEQ0RGNDMxREEx
QzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFEQ0RGNDExREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVu
ZGVkQ29sb3IuY3BwICovOyB9OworCQkzMURDREY0NDFEQTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5k
ZWRDb2xvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzFEQ0RGNDIxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMURFQTQ1NTFCMzlGNEQ5MDBG
NzcxNzggLyogV2ViU3lzdGVtQmFja2Ryb3BMYXllci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxREVBNDUzMUIzOUY0RDkwMEY3NzE3OCAvKiBXZWJT
eXN0ZW1CYWNrZHJvcExheWVyLm1tICovOyB9OwogCQkzMURFQTQ1NjFCMzlGNEQ5MDBGNzcxNzgg
LyogV2ViU3lzdGVtQmFja2Ryb3BMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzFERUE0NTQxQjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5c3RlbUJh
Y2tkcm9wTGF5ZXIuaCAqLzsgfTsKIAkJMzFERjYzNTcxQUYxODdERDAwNzhGRDkxIC8qIE5TQ29s
b3JTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
REY2MzU2MUFGMTg3REQwMDc4RkQ5MSAvKiBOU0NvbG9yU1BJLmggKi87IH07CkBAIC04MzQ4LDYg
KzgzNTAsOCBAQAogCQkzMUM0MjI0NTFENzRFQjlBMDBGMTIzNDIgLyogSlNQZXJmb3JtYW5jZVRp
bWluZ0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Bl
cmZvcm1hbmNlVGltaW5nQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzFENTkxQjExNjY5N0E2QzAwRTZCRjAyIC8qIFBsdWdJbkNsaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnSW5DbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzFEQ0QyOUMxQUI0RkJERTAwNzJFODE3IC8qIEFuaW1hdGlvblRyaWdnZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0aW9uVHJpZ2dlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMURDREY0MTFEQTFDNDU0MDBFQTVCOTMgLyogRXh0
ZW5kZWRDb2xvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHRl
bmRlZENvbG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFEQ0RGNDIxREEx
QzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRXh0ZW5kZWRDb2xvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
MURFQTQ1MzFCMzlGNEQ5MDBGNzcxNzggLyogV2ViU3lzdGVtQmFja2Ryb3BMYXllci5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlN5c3RlbUJhY2tkcm9wTGF5
ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxREVBNDU0MUIzOUY0RDkwMEY3
NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzFERjYzNTYxQUYxODdERDAwNzhGRDkxIC8qIE5TQ29sb3JTUEkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNDb2xvclNQSS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjA3MzEsNiArMjA3MzUsOCBAQAogCQkJCUNEREUwMkU5MThCM0RGQzcw
MENGN0ZGMSAvKiBDRE1TZXNzaW9uLmggKi8sCiAJCQkJQjI3NTM1MzgwQjA1MzgxNDAwMkNFNjRG
IC8qIENvbG9yLmNwcCAqLywKIAkJCQlCMjc1MzUzOTBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3Iu
aCAqLywKKwkJCQkzMURDREY0MTFEQTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5jcHAg
Ki8sCisJCQkJMzFEQ0RGNDIxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCAqLywK
IAkJCQk5MzgyREY1NzEwQThENUM5MDA5MjU2NTIgLyogQ29sb3JTcGFjZS5oICovLAogCQkJCTJE
MkZDMDU0MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgKi8s
CiAJCQkJMkQyRkMwNTUxNDYwQ0Q2RjAwMjYzNjMzIC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdl
LmggKi8sCkBAIC0yNDkyNSw2ICsyNDkzMSw3IEBACiAJCQkJNTEwMTkyRDYxOEI2QjlCNzAwN0ZD
N0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEw
MTkyRDIxOEI2QjlBQjAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudE1hYy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc3OTc5MUEwRDZCOUQwQzAwMzg1MUI5IC8qIEltYWdlRGF0YS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzFEQ0RGNDQxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVk
Q29sb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NUI4N0VEMUNBQUYwQUIwMDM0OTQyNSAvKiBJ
bWFnZURlY29kZXJDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcyMDVBQjYxMjM5MjkxMDAwQjE3
MzgwIC8qIEltYWdlRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREMyMTI1MUYx
MkQwMDNFRjI2OSAvKiBJbWFnZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDM3Miw2
ICszMDM3OSw3IEBACiAJCQkJQjIyMjdBRUYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1ZpZXdFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QUYyMEQwMEJGMjIwMDcxQjc4MiAvKiBT
VkdWaWV3U3BlYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NDg1MjI4QTExOTAxNzNDMDA2RURD
N0YgLyogU1ZHVktlcm5FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxRENERjQzMURB
MUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
MjI3QUY1MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdab29tQW5kUGFuLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIyRTRFQzk3MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTE4MDgxMTIxNkZDRjQyRjAwQjgwRDA3IC8qIFN5bmNocm9ub3VzTG9h
ZGVyQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCmluZGV4IDhmNjhiMTRhNDIwNjBhYmQ3ZWY2MTAwNTg4ZTRhYTBmZTQ2
YWQ4OGMuLjdlM2VlMjNkMGZjZmIxZjA2ZjFiYjJmM2UxOGZhMjM2NjQ1ODJjMjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKQEAgLTIyNSwyMyArMjI1LDc4
IEBAIGludCBkaWZmZXJlbmNlU3F1YXJlZChjb25zdCBDb2xvciYgYzEsIGNvbnN0IENvbG9yJiBj
MikKIENvbG9yOjpDb2xvcihjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgaWYgKG5hbWVbMF0g
PT0gJyMnKSB7CisgICAgICAgIFJHQkEzMiBjb2xvcjsKKyAgICAgICAgYm9vbCB2YWxpZDsKKwog
ICAgICAgICBpZiAobmFtZS5pczhCaXQoKSkKLSAgICAgICAgICAgIG1fdmFsaWQgPSBwYXJzZUhl
eENvbG9yKG5hbWUuY2hhcmFjdGVyczgoKSArIDEsIG5hbWUubGVuZ3RoKCkgLSAxLCBtX2NvbG9y
KTsKKyAgICAgICAgICAgIHZhbGlkID0gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnM4KCkg
KyAxLCBuYW1lLmxlbmd0aCgpIC0gMSwgY29sb3IpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtX3ZhbGlkID0gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnMxNigpICsgMSwgbmFtZS5s
ZW5ndGgoKSAtIDEsIG1fY29sb3IpOworICAgICAgICAgICAgdmFsaWQgPSBwYXJzZUhleENvbG9y
KG5hbWUuY2hhcmFjdGVyczE2KCkgKyAxLCBuYW1lLmxlbmd0aCgpIC0gMSwgY29sb3IpOworCisg
ICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHNldFJHQihjb2xvcik7CiAgICAgfSBlbHNl
CiAgICAgICAgIHNldE5hbWVkQ29sb3IobmFtZSk7CiB9CiAKIENvbG9yOjpDb2xvcihjb25zdCBj
aGFyKiBuYW1lKQogeworICAgIFJHQkEzMiBjb2xvcjsKKyAgICBib29sIHZhbGlkOwogICAgIGlm
IChuYW1lWzBdID09ICcjJykKLSAgICAgICAgbV92YWxpZCA9IHBhcnNlSGV4Q29sb3IoKFN0cmlu
ZykmbmFtZVsxXSwgbV9jb2xvcik7CisgICAgICAgIHZhbGlkID0gcGFyc2VIZXhDb2xvcigoU3Ry
aW5nKSZuYW1lWzFdLCBjb2xvcik7CiAgICAgZWxzZSB7CiAgICAgICAgIGNvbnN0IE5hbWVkQ29s
b3IqIGZvdW5kQ29sb3IgPSBmaW5kQ29sb3IobmFtZSwgc3RybGVuKG5hbWUpKTsKLSAgICAgICAg
bV9jb2xvciA9IGZvdW5kQ29sb3IgPyBmb3VuZENvbG9yLT5BUkdCVmFsdWUgOiAwOwotICAgICAg
ICBtX3ZhbGlkID0gZm91bmRDb2xvcjsKKyAgICAgICAgY29sb3IgPSBmb3VuZENvbG9yID8gZm91
bmRDb2xvci0+QVJHQlZhbHVlIDogMDsKKyAgICAgICAgdmFsaWQgPSBmb3VuZENvbG9yOwogICAg
IH0KKworICAgIGlmICh2YWxpZCkKKyAgICAgICAgc2V0UkdCKGNvbG9yKTsKK30KKworQ29sb3I6
OkNvbG9yKGNvbnN0IENvbG9yJiBvdGhlcikKKyAgICA6IG1fY29sb3JEYXRhKG90aGVyLm1fY29s
b3JEYXRhKQoreworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAgIG1fY29sb3JEYXRhLmV4
dGVuZGVkQ29sb3ItPnJlZigpOworfQorCitDb2xvcjo6Q29sb3IoQ29sb3ImJiBvdGhlcikKK3sK
KyAgICAqdGhpcyA9IFdURk1vdmUob3RoZXIpOworfQorCitDb2xvcjo6fkNvbG9yKCkKK3sKKyAg
ICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5k
ZXJlZigpOworfQorCitDb2xvciYgQ29sb3I6Om9wZXJhdG9yPShjb25zdCBDb2xvciYgb3RoZXIp
Cit7CisgICAgaWYgKCp0aGlzID09IG90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAg
ICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5k
ZXJlZigpOworCisgICAgbV9jb2xvckRhdGEgPSBvdGhlci5tX2NvbG9yRGF0YTsKKworICAgIGlm
IChpc0V4dGVuZGVkKCkpCisgICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPnJlZigp
OworICAgIHJldHVybiAqdGhpczsKK30KKworQ29sb3ImIENvbG9yOjpvcGVyYXRvcj0oQ29sb3Im
JiBvdGhlcikKK3sKKyAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCisgICAgICAgIHJldHVybiAqdGhp
czsKKworICAgIG1fY29sb3JEYXRhID0gb3RoZXIubV9jb2xvckRhdGE7CisgICAgb3RoZXIubV9j
b2xvckRhdGEucmdiYUFuZEZsYWdzID0gaW52YWxpZFJHQkFDb2xvcjsKKworICAgIHJldHVybiAq
dGhpczsKIH0KIAogU3RyaW5nIENvbG9yOjpzZXJpYWxpemVkKCkgY29uc3QKQEAgLTI5MSw2ICsz
NDYsNyBAQCBTdHJpbmcgQ29sb3I6OmNzc1RleHQoKSBjb25zdAogCiBTdHJpbmcgQ29sb3I6Om5h
bWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogSGFuZGxlIEV4
dGVuZGVkQ29sb3JzLgogICAgIGlmIChhbHBoYSgpIDwgMHhGRikKICAgICAgICAgcmV0dXJuIFN0
cmluZzo6Zm9ybWF0KCIjJTAyWCUwMlglMDJYJTAyWCIsIHJlZCgpLCBncmVlbigpLCBibHVlKCks
IGFscGhhKCkpOwogICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiIyUwMlglMDJYJTAyWCIsIHJl
ZCgpLCBncmVlbigpLCBibHVlKCkpOwpAQCAtMzE1LDE0ICszNzEsMTYgQEAgc3RhdGljIGlubGlu
ZSBjb25zdCBOYW1lZENvbG9yKiBmaW5kTmFtZWRDb2xvcihjb25zdCBTdHJpbmcmIG5hbWUpCiB2
b2lkIENvbG9yOjpzZXROYW1lZENvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBjb25z
dCBOYW1lZENvbG9yKiBmb3VuZENvbG9yID0gZmluZE5hbWVkQ29sb3IobmFtZSk7Ci0gICAgbV9j
b2xvciA9IGZvdW5kQ29sb3IgPyBmb3VuZENvbG9yLT5BUkdCVmFsdWUgOiAwOwotICAgIG1fdmFs
aWQgPSBmb3VuZENvbG9yOworICAgIGlmIChmb3VuZENvbG9yKQorICAgICAgICBzZXRSR0IoZm91
bmRDb2xvci0+QVJHQlZhbHVlKTsKKyAgICBlbHNlCisgICAgICAgIG1fY29sb3JEYXRhLnJnYmFB
bmRGbGFncyA9IGludmFsaWRSR0JBQ29sb3I7CiB9CiAKIENvbG9yIENvbG9yOjpsaWdodCgpIGNv
bnN0CiB7CiAgICAgLy8gSGFyZGNvZGUgdGhpcyBjb21tb24gY2FzZSBmb3Igc3BlZWQuCi0gICAg
aWYgKG1fY29sb3IgPT0gYmxhY2spCisgICAgaWYgKHJnYigpID09IGJsYWNrKQogICAgICAgICBy
ZXR1cm4gbGlnaHRlbmVkQmxhY2s7CiAgICAgCiAgICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0b3Ig
PSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CkBAIC0zNDcsNyArNDA1LDcgQEAgQ29sb3IgQ29s
b3I6OmxpZ2h0KCkgY29uc3QKIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKIHsKICAgICAvLyBI
YXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KLSAgICBpZiAobV9jb2xvciA9PSB3
aGl0ZSkKKyAgICBpZiAocmdiKCkgPT0gd2hpdGUpCiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdo
aXRlOwogICAgIAogICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyZigyNTYu
MGYsIDAuMGYpOwpAQCAtNTYxLDQgKzYxOSwyOSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgcmV0dXJuIHRzIDw8IGNvbG9y
Lm5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCk7CiB9CiAKK3ZvaWQgQ29sb3I6OnNldFZhbGlkKCkK
K3sKKyAgICBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgfD0gdmFsaWRSR0JBQ29sb3I7Cit9CisK
K3ZvaWQgQ29sb3I6OnNldEV4dGVuZGVkKCkKK3sKKyAgICAvLyBWYWxpZCBjb2xvcnMgc2hvdWxk
IG5vdCBjaGFuZ2UgdHlwZS4KKyAgICBBU1NFUlQoIWlzVmFsaWQoKSk7CisgICAgbV9jb2xvckRh
dGEucmdiYUFuZEZsYWdzICY9IH4oaW52YWxpZFJHQkFDb2xvcik7Cit9CisKK2Jvb2wgQ29sb3I6
OmlzRXh0ZW5kZWQoKSBjb25zdAoreworICAgIHJldHVybiAhKG1fY29sb3JEYXRhLnJnYmFBbmRG
bGFncyAmIGludmFsaWRSR0JBQ29sb3IpOworfQorCitFeHRlbmRlZENvbG9yKiBDb2xvcjo6YXNF
eHRlbmRlZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7CisgICAgaWYgKCFp
c0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX2NvbG9y
RGF0YS5leHRlbmRlZENvbG9yOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAppbmRleCA3YmU2OGYxMzg3MTM3NjlhZmVk
MTk3NmRiOTEwNGQ5MTcxMjdjY2U3Li44ODAzNmU5NGM1MjE3ZjFmZTAyNWNhYTM1ZTk5Y2JmOWE2
Y2NlNGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKQEAgLTIz
LDEwICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBDb2xvcl9oCi0j
ZGVmaW5lIENvbG9yX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkQ29sb3IuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUV4cG9ydE1hY3Jv
cy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjbWF0aD4KQEAgLTEwNywxOSAr
MTA3LDQ4IEBAIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSR0JBJiwgY29uc3QgUkdCQSYpOwogY2xh
c3MgQ29sb3IgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIENv
bG9yKCkgOiBtX2NvbG9yKDApLCBtX3ZhbGlkKGZhbHNlKSB7IH0KLSAgICBDb2xvcihSR0JBLCBD
b2xvclNwYWNlKTsKKyAgICBDb2xvcigpIHsgfQogCiAgICAgLy8gRklYTUU6IFJlbW92ZSBhbGwg
dGhlc2UgY29uc3RydWN0b3JzIGFuZCBjcmVhdGlvbiBmdW5jdGlvbnMgYW5kIHJlcGxhY2UgdGhl
IG9uZXMgdGhhdCBhcmUgc3RpbGwgbmVlZGVkIHdpdGggZnJlZSBmdW5jdGlvbnMuCi0gICAgQ29s
b3IoUkdCQTMyIGNvbG9yLCBib29sIHZhbGlkID0gdHJ1ZSkgOiBtX2NvbG9yKGNvbG9yKSwgbV92
YWxpZCh2YWxpZCkgeyBBU1NFUlQoIW1fY29sb3IgfHwgbV92YWxpZCk7IH0KLSAgICBDb2xvcihp
bnQgciwgaW50IGcsIGludCBiKSA6IG1fY29sb3IobWFrZVJHQihyLCBnLCBiKSksIG1fdmFsaWQo
dHJ1ZSkgeyB9Ci0gICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpIDogbV9jb2xv
cihtYWtlUkdCQShyLCBnLCBiLCBhKSksIG1fdmFsaWQodHJ1ZSkgeyB9Ci0gICAgLy8gQ29sb3Ig
aXMgY3VycmVudGx5IGxpbWl0ZWQgdG8gMzJiaXQgUkdCQSwgcGVyaGFwcyBzb21lIGRheSB3ZSds
bCBzdXBwb3J0IGJldHRlciBjb2xvcnMKLSAgICBDb2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9h
dCBiLCBmbG9hdCBhKSA6IG1fY29sb3IobWFrZVJHQkEzMkZyb21GbG9hdHMociwgZywgYiwgYSkp
LCBtX3ZhbGlkKHRydWUpIHsgfQorCisgICAgQ29sb3IoUkdCQTMyIGNvbG9yLCBib29sIHZhbGlk
ID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHNldFJHQihj
b2xvcik7CisgICAgfQorCisgICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYikKKyAgICB7Cisg
ICAgICAgIHNldFJHQihyLCBnLCBiKTsKKyAgICB9CisKKyAgICBDb2xvcihpbnQgciwgaW50IGcs
IGludCBiLCBpbnQgYSkKKyAgICB7CisgICAgICAgIHNldFJHQihtYWtlUkdCQShyLCBnLCBiLCBh
KSk7CisgICAgfQorCisgICAgQ29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQg
YSkKKyAgICB7CisgICAgICAgIHNldFJHQihtYWtlUkdCQTMyRnJvbUZsb2F0cyhyLCBnLCBiLCBh
KSk7CisgICAgfQorCiAgICAgLy8gQ3JlYXRlcyBhIG5ldyBjb2xvciBmcm9tIHRoZSBzcGVjaWZp
YyBDTVlLIGFuZCBhbHBoYSB2YWx1ZXMuCi0gICAgQ29sb3IoZmxvYXQgYywgZmxvYXQgbSwgZmxv
YXQgeSwgZmxvYXQgaywgZmxvYXQgYSkgOiBtX2NvbG9yKG1ha2VSR0JBRnJvbUNNWUtBKGMsIG0s
IHksIGssIGEpKSwgbV92YWxpZCh0cnVlKSB7IH0KKyAgICBDb2xvcihmbG9hdCBjLCBmbG9hdCBt
LCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdCKG1ha2VS
R0JBRnJvbUNNWUtBKGMsIG0sIHksIGssIGEpKTsKKyAgICB9CisKICAgICBXRUJDT1JFX0VYUE9S
VCBleHBsaWNpdCBDb2xvcihjb25zdCBTdHJpbmcmKTsKICAgICBleHBsaWNpdCBDb2xvcihjb25z
dCBjaGFyKik7CisKKyAgICAvLyBGSVhNRTogQWRkIGNvbnN0cnVjdG9yIGZvciBFeHRlbmRlZENv
bG9yIHR5cGUuCisKKyAgICBDb2xvcihSR0JBLCBDb2xvclNwYWNlKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBDb2xvcihjb25zdCBDb2xvciYpOworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENvbG9y
JiYpOworCisgICAgV0VCQ09SRV9FWFBPUlQgfkNvbG9yKCk7CisKICAgICBzdGF0aWMgQ29sb3Ig
Y3JlYXRlVW5jaGVja2VkKGludCByLCBpbnQgZywgaW50IGIpCiAgICAgewogICAgICAgICBSR0JB
MzIgY29sb3IgPSAweEZGMDAwMDAwIHwgciA8PCAxNiB8IGcgPDwgOCB8IGI7CkBAIC0xNDMsMTkg
KzE3MiwxOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE5hbWVkQ29sb3IoY29uc3QgU3RyaW5n
Jik7CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgYWZ0ZXIgbW92aW5nIGNsaWVudHMgdG8g
YWxsIHVzZSBPcHRpb25hbENvbG9yIGluc3RlYWQuCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gbV92YWxpZDsgfQorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIHZhbGlkUkdCQUNvbG9yQml0OyB9CiAKICAgICBib29s
IGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4gYWxwaGEoKSA8IDI1NTsgfQogCi0gICAgaW50IHJl
ZCgpIGNvbnN0IHsgcmV0dXJuIHJlZENoYW5uZWwobV9jb2xvcik7IH0KLSAgICBpbnQgZ3JlZW4o
KSBjb25zdCB7IHJldHVybiBncmVlbkNoYW5uZWwobV9jb2xvcik7IH0KLSAgICBpbnQgYmx1ZSgp
IGNvbnN0IHsgcmV0dXJuIGJsdWVDaGFubmVsKG1fY29sb3IpOyB9Ci0gICAgaW50IGFscGhhKCkg
Y29uc3QgeyByZXR1cm4gYWxwaGFDaGFubmVsKG1fY29sb3IpOyB9CisgICAgaW50IHJlZCgpIGNv
bnN0IHsgcmV0dXJuIHJlZENoYW5uZWwocmdiKCkpOyB9CisgICAgaW50IGdyZWVuKCkgY29uc3Qg
eyByZXR1cm4gZ3JlZW5DaGFubmVsKHJnYigpKTsgfQorICAgIGludCBibHVlKCkgY29uc3QgeyBy
ZXR1cm4gYmx1ZUNoYW5uZWwocmdiKCkpOyB9CisgICAgaW50IGFscGhhKCkgY29uc3QgeyByZXR1
cm4gYWxwaGFDaGFubmVsKHJnYigpKTsgfQogICAgIAotICAgIFJHQkEzMiByZ2IoKSBjb25zdCB7
IHJldHVybiBtX2NvbG9yOyB9IC8vIFByZXNlcnZlIHRoZSBhbHBoYS4KLSAgICB2b2lkIHNldFJH
QihpbnQgciwgaW50IGcsIGludCBiKSB7IG1fY29sb3IgPSBtYWtlUkdCKHIsIGcsIGIpOyBtX3Zh
bGlkID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0UkdCKFJHQkEzMiByZ2IpIHsgbV9jb2xvciA9IHJn
YjsgbV92YWxpZCA9IHRydWU7IH0KKyAgICBSR0JBMzIgcmdiKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8UkdCQTMyPihtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPj4gMzIpOyB9CisgICAg
dm9pZCBzZXRSR0IoaW50IHIsIGludCBnLCBpbnQgYikgeyBzZXRSR0IobWFrZVJHQihyLCBnLCBi
KSk7IH0KKyAgICB2b2lkIHNldFJHQihSR0JBMzIpOworCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBnZXRSR0JBKGZsb2F0JiByLCBmbG9hdCYgZywgZmxvYXQmIGIsIGZsb2F0JiBhKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFJHQkEoZG91YmxlJiByLCBkb3VibGUmIGcsIGRv
dWJsZSYgYiwgZG91YmxlJiBhKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldEhT
TChkb3VibGUmIGgsIGRvdWJsZSYgcywgZG91YmxlJiBsKSBjb25zdDsKQEAgLTIwOCw5ICsyMzcs
MjggQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgY29tcG9zaXRpb25GaWxsID0g
MHhGRkUxREQ1NTsKICNlbmRpZgogCisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0V4dGVuZGVk
KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRXh0ZW5kZWRDb2xvciogYXNFeHRlbmRlZCgp
IGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xv
ciYpOworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oQ29sb3ImJik7CisKKyAg
ICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7
CisKIHByaXZhdGU6Ci0gICAgUkdCQTMyIG1fY29sb3I7Ci0gICAgYm9vbCBtX3ZhbGlkOworCisg
ICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGV4dGVuZGVkQ29sb3IgPSAweDA7CisgICAgc3RhdGlj
IGNvbnN0IHVpbnQ2NF90IGludmFsaWRSR0JBQ29sb3IgPSAweDE7CisgICAgc3RhdGljIGNvbnN0
IHVpbnQ2NF90IHZhbGlkUkdCQUNvbG9yQml0ID0gMHgyOworICAgIHN0YXRpYyBjb25zdCB1aW50
NjRfdCB2YWxpZFJHQkFDb2xvciA9IDB4MzsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
VmFsaWQoKTsKKyAgICB2b2lkIHNldEV4dGVuZGVkKCk7CisKKyAgICB1bmlvbiB7CisgICAgICAg
IHVpbnQ2NF90IHJnYmFBbmRGbGFncyB7IGludmFsaWRSR0JBQ29sb3IgfTsKKyAgICAgICAgRXh0
ZW5kZWRDb2xvciogZXh0ZW5kZWRDb2xvcjsKKyAgICB9IG1fY29sb3JEYXRhOwogfTsKIAogYm9v
bCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKQEAgLTI3MCwxNSArMzE4
LDE0IEBAIGlubGluZSBib29sIFJHQkE6Omhhc0FscGhhKCkgY29uc3QKIH0KIAogaW5saW5lIENv
bG9yOjpDb2xvcihSR0JBIGNvbG9yLCBDb2xvclNwYWNlIHNwYWNlKQotICAgIDogbV9jb2xvcihj
b2xvci5tX2ludGVnZXIpCi0gICAgLCBtX3ZhbGlkKHRydWUpCiB7CisgICAgc2V0UkdCKGNvbG9y
Lm1faW50ZWdlcik7CiAgICAgQVNTRVJUX1VOVVNFRChzcGFjZSwgc3BhY2UgPT0gQ29sb3JTcGFj
ZVNSR0IpOwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25z
dCBDb2xvciYgYikKIHsKLSAgICByZXR1cm4gYS5yZ2IoKSA9PSBiLnJnYigpICYmIGEuaXNWYWxp
ZCgpID09IGIuaXNWYWxpZCgpOworICAgIHJldHVybiBhLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFn
cyA9PSBiLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFnczsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCkBAIC0zMTUsOCArMzYyLDEyIEBA
IGlubGluZSBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIE9wdGlv
bmFsPGZsb2F0PiBvdmVycmlkZUFscGhhCiAgICAgcmV0dXJuIG92ZXJyaWRlQWxwaGEgPyBjb2xv
cldpdGhPdmVycmlkZUFscGhhKGNvbG9yLCBvdmVycmlkZUFscGhhLnZhbHVlKCkpIDogY29sb3I7
CiB9CiAKK2lubGluZSB2b2lkIENvbG9yOjpzZXRSR0IoUkdCQTMyIHJnYikKK3sKKyAgICBtX2Nv
bG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmdiKSA8PCAzMjsK
KyAgICBzZXRWYWxpZCgpOworfQorCiBXRUJDT1JFX0VYUE9SVCBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mLCBjb25zdCBDb2xvciYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBDb2xvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlMGE1ZjdjMjQ5ZmQ3MDQ3NDhi
ZTFkZGMyZWRlZTczNzhhN2ExYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcApAQCAtMCwwICsxLDM4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkQ29sb3IuaCIKKworI2luY2x1ZGUgIkNvbG9yU3BhY2Uu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5kZWRD
b2xvcjo6Y3JlYXRlKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFeHRlbmRlZENvbG9y
KHIsIGcsIGIsIGEsIGNvbG9yU3BhY2UpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1NjY1NThlYWYz
YWQzNzMwZjY1NmNlYzc2OGZhNzc4ZWRjZDIwOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgKQEAgLTAsMCArMSw2MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorCisjaW5jbHVkZSA8d3RmL1JlZi5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRXh0ZW5kZWRDb2xvciA6IHB1YmxpYyBSZWZDb3VudGVkPEV4dGVuZGVkQ29sb3I+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShmbG9hdCByLCBmbG9h
dCBnLCBmbG9hdCBiLCBmbG9hdCBhLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6Q29sb3JTcGFj
ZVNSR0IpOworCisgICAgZmxvYXQgcmVkKCkgY29uc3QgeyByZXR1cm4gbV9yZWQ7IH0KKyAgICBm
bG9hdCBncmVlbigpIGNvbnN0IHsgcmV0dXJuIG1fZ3JlZW47IH0KKyAgICBmbG9hdCBibHVlKCkg
Y29uc3QgeyByZXR1cm4gbV9ibHVlOyB9CisgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVy
biBtX2FscGhhOyB9CisKKyAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVy
biBtX2NvbG9yU3BhY2U7IH0KKworcHJpdmF0ZToKKyAgICBFeHRlbmRlZENvbG9yKGZsb2F0IHIs
IGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAgICAg
ICAgOiBtX3JlZChyKQorICAgICAgICAsIG1fZ3JlZW4oZykKKyAgICAgICAgLCBtX2JsdWUoYikK
KyAgICAgICAgLCBtX2FscGhhKGEpCisgICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2Up
CisgICAgeyB9CisKKyAgICBmbG9hdCBtX3JlZCB7IDAgfTsKKyAgICBmbG9hdCBtX2dyZWVuIHsg
MCB9OworICAgIGZsb2F0IG1fYmx1ZSB7IDAgfTsKKyAgICBmbG9hdCBtX2FscGhhIHsgMCB9Owor
CisgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2UgeyBDb2xvclNwYWNlOjpDb2xvclNwYWNlU1JH
QiB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKaW5kZXggZDBmN2EyOTUxMDQxZWYxNGJiNGQ0MWQz
YjAzY2NjMTlmZjE0ZGUwNy4uZDY2MjFmZjc0ZDQ4NmMyZThlOTkxNDMwOTcxNDg3OGRkNTU4YjAx
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhp
Y3NMYXllckNBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9H
cmFwaGljc0xheWVyQ0EuY3BwCkBAIC0xMzcxLDggKzEzNzEsOCBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhjb25zdCBDb21taXRTdGF0ZSYgY29tbWl0U3Rh
dGUsIGNvbgogICAgIC8vIFVzZSBoYXZpbmcgYSB0cmFuc2Zvcm0gYXMgYSBrZXkgdG8gbWFraW5n
IHRoZSB0aWxlIHdhc2ggbGF5ZXIuIElmIGV2ZXJ5IGxheWVyIGdldHMgYSB3YXNoLAogICAgIC8v
IHRoZXkgc3RhcnQgdG8gb2JzY3VyZSB1c2VmdWwgaW5mb3JtYXRpb24uCiAgICAgaWYgKCghbV90
cmFuc2Zvcm0uaXNJZGVudGl0eSgpIHx8IG1fdXNpbmdUaWxlZEJhY2tpbmcpICYmICFtX3Zpc2li
bGVUaWxlV2FzaExheWVyKSB7Ci0gICAgICAgIHN0YXRpYyBDb2xvciB3YXNoRmlsbENvbG9yKDI1
NSwgMCwgMCwgNTApOwotICAgICAgICBzdGF0aWMgQ29sb3Igd2FzaEJvcmRlckNvbG9yKDI1NSwg
MCwgMCwgMTAwKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbG9yPiB3YXNoRmls
bENvbG9yKDI1NSwgMCwgMCwgNTApOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29s
b3I+IHdhc2hCb3JkZXJDb2xvcigyNTUsIDAsIDAsIDEwMCk7CiAgICAgICAgIAogICAgICAgICBt
X3Zpc2libGVUaWxlV2FzaExheWVyID0gY3JlYXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3JtQ0FM
YXllcjo6TGF5ZXJUeXBlTGF5ZXIsIHRoaXMpOwogICAgICAgICBTdHJpbmcgbmFtZSA9IFN0cmlu
Zzo6Zm9ybWF0KCJWaXNpYmxlIFRpbGUgV2FzaCBMYXllciAlcCIsIG1fdmlzaWJsZVRpbGVXYXNo
TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0NvbG9yQ0cuY3BwCmluZGV4IDZkODhjODhkZDRhYTZkMmQwYWMzNGQzMTRhZjZk
ZjJiYWUyN2Q1OTguLjhiMmNjYTI0NjZmMWVlZDMwOWJiZGYyMmY4MzQ4Njc0MDdlYTU3NWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCkBA
IC03Myw4ICs3Myw3IEBAIHN0YXRpYyBDR0NvbG9yUmVmIGNyZWF0ZUNHQ29sb3JXaXRoRGV2aWNl
UkdCQShDR0NvbG9yUmVmIHNvdXJjZUNvbG9yKQogQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29s
b3IpCiB7CiAgICAgaWYgKCFjb2xvcikgewotICAgICAgICBtX2NvbG9yID0gMDsKLSAgICAgICAg
bV92YWxpZCA9IGZhbHNlOworICAgICAgICBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSBpbnZh
bGlkUkdCQUNvbG9yOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMTEsOCArMTEwLDcg
QEAgQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KIAotICAgIG1fY29sb3IgPSBtYWtlUkdCQShyICogMjU1LCBnICogMjU1
LCBiICogMjU1LCBhICogMjU1KTsKLSAgICBtX3ZhbGlkID0gdHJ1ZTsKKyAgICBzZXRSR0IobWFr
ZVJHQkEociAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NSwgYSAqIDI1NSkpOwogfQogCiBzdGF0aWMg
Q0dDb2xvclJlZiBsZWFrQ0dDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAppbmRleCA4ZjU2YmE2
ZmI0ZTBiNjVhOTljMjczZDNiNDcwYmZkYjZiMzViOWFmLi5hZWEzN2Y4YzFkMzZmNWZhYTNhM2Jk
YzkzNGExYWMwNjlhMDE1MTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKQEAgLTI2LDE5ICsyNiwxNyBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBDb2xvcjo6Q29sb3IoY29uc3QgR2RrQ29sb3ImIGMpCi0gICAgOiBtX2NvbG9y
KG1ha2VSR0IoYy5yZWQgPj4gOCwgYy5ncmVlbiA+PiA4LCBjLmJsdWUgPj4gOCkpCi0gICAgLCBt
X3ZhbGlkKHRydWUpCiB7CisgICAgc2V0UkdCKG1ha2VSR0IoYy5yZWQgPj4gOCwgYy5ncmVlbiA+
PiA4LCBjLmJsdWUgPj4gOCkpOwogfQogCiAjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCiBDb2xv
cjo6Q29sb3IoY29uc3QgR2RrUkdCQSYgYykKLSAgICA6IG1fY29sb3IobWFrZVJHQkEoc3RhdGlj
X2Nhc3Q8aW50PihjLnJlZCAqIDI1NSksCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludD4oYy5ncmVlbiAqIDI1NSksCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludD4oYy5ibHVlICogMjU1KSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50PihjLmFscGhhICogMjU1KSkpCi0gICAgLCBtX3ZhbGlkKHRydWUpCiB7CisgICAgc2V0
UkdCKG1ha2VSR0JBKHN0YXRpY19jYXN0PGludD4oYy5yZWQgKiAyNTUpLAorICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KGMuZ3JlZW4gKiAyNTUpLAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGMu
Ymx1ZSAqIDI1NSksCisgICAgICAgIHN0YXRpY19jYXN0PGludD4oYy5hbHBoYSAqIDI1NSkpKTsK
IH0KIAogQ29sb3I6Om9wZXJhdG9yIEdka1JHQkEoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCmluZGV4IGZh
ODY0MDRhMDQwNjY0MzM4ZjIxMmFjODM2MjQxZTg1MmExOWU1ZWUuLmRlYWRkZDZmOGY4ZjMwN2Iz
OWJmMWMxMWM0YmRiNGE0YzNiNDEwYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKQEAgLTM1LDggKzM1LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBDb2xvcjo6Q29sb3IoRDJEMV9DT0xPUl9GIGNvbG9yKQog
ewotICAgIG1fY29sb3IgPSBtYWtlUkdCQShjb2xvci5yICogMjU1LCBjb2xvci5nICogMjU1LCBj
b2xvci5iICogMjU1LCBjb2xvci5hICogMjU1KTsKLSAgICBtX3ZhbGlkID0gdHJ1ZTsKKyAgICBz
ZXRSR0IobWFrZVJHQkEoY29sb3IuciAqIDI1NSwgY29sb3IuZyAqIDI1NSwgY29sb3IuYiAqIDI1
NSwgY29sb3IuYSAqIDI1NSkpOwogfQogCiBDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9GKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRl
ZE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmpl
Y3QuY3BwCmluZGV4IDM4ODIxOWU1ODk1MmE2Y2U5ZDIxM2NlNTlmODY4M2ZmNmNiODgyNjEuLjBl
YjE1YTQ1YTUwZDgxMTQ0NjNjMDVmYWQwODljODUyMzlmZjFjOGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcApAQCAtNzUsMjUgKzc1
LDI1IEBAIHN0YXRpYyBjb25zdCBmbG9hdCByZXBsYWNlbWVudEFycm93Q2lyY2xlUGFkZGluZyA9
IDM7CiAKIHN0YXRpYyBjb25zdCBDb2xvciYgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVz
c2VkQ29sb3IoKQogewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBwcmVzc2VkKDEwNSwgMTA1LCAx
MDUsIDI0Mik7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbG9yPiBwcmVzc2VkKDEwNSwg
MTA1LCAxMDUsIDI0Mik7CiAgICAgcmV0dXJuIHByZXNzZWQ7CiB9CiAKIHN0YXRpYyBjb25zdCBD
b2xvciYgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xvcigpCiB7Ci0gICAgc3RhdGljIGNv
bnN0IENvbG9yIHN0YW5kYXJkKDEyNSwgMTI1LCAxMjUsIDI0Mik7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPENvbG9yPiBzdGFuZGFyZCgxMjUsIDEyNSwgMTI1LCAyNDIpOwogICAgIHJldHVy
biBzdGFuZGFyZDsKIH0KIAogc3RhdGljIGNvbnN0IENvbG9yJiByZXBsYWNlbWVudFRleHRDb2xv
cigpCiB7Ci0gICAgc3RhdGljIGNvbnN0IENvbG9yIHN0YW5kYXJkKDI0MCwgMjQwLCAyNDAsIDI1
NSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbG9yPiBzdGFuZGFyZCgyNDAsIDI0MCwg
MjQwLCAyNTUpOwogICAgIHJldHVybiBzdGFuZGFyZDsKIH0KIAogc3RhdGljIGNvbnN0IENvbG9y
JiB1bmF2YWlsYWJsZVBsdWdpbkJvcmRlckNvbG9yKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgQ29s
b3Igc3RhbmRhcmQoMjU1LCAyNTUsIDI1NSwgMjE2KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Q29sb3I+IHN0YW5kYXJkKDI1NSwgMjU1LCAyNTUsIDIxNik7CiAgICAgcmV0dXJuIHN0YW5k
YXJkOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJh
bWVTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcApp
bmRleCAxNzliZDQyNmNlYTg2NjNlZGRhMDUyNmExZWM5ZjI3ZDY1NGE4OWFmLi43NzQ4YzQ3OGVi
MGRlNDg2ODU1YWUxZGVmNzg1NmJiMzJmMjUzNjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGcmFtZVNldC5jcHAKQEAgLTY5LDE5ICs2OSwxOSBAQCBSZW5kZXJGcmFtZVNl
dDo6R3JpZEF4aXM6OkdyaWRBeGlzKCkKIAogc3RhdGljIGNvbnN0IENvbG9yJiBib3JkZXJTdGFy
dEVkZ2VDb2xvcigpCiB7Ci0gICAgc3RhdGljIGNvbnN0IENvbG9yIGNvbG9yKDE3MCwgMTcwLCAx
NzApOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gY29sb3IoMTcwLCAxNzAsIDE3
MCk7CiAgICAgcmV0dXJuIGNvbG9yOwogfQogCiBzdGF0aWMgY29uc3QgQ29sb3ImIGJvcmRlckVu
ZEVkZ2VDb2xvcigpCiB7Ci0gICAgc3RhdGljIGNvbnN0IENvbG9yIGNvbG9yID0gQ29sb3I6OmJs
YWNrOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gY29sb3IgPSBDb2xvcjo6Ymxh
Y2s7CiAgICAgcmV0dXJuIGNvbG9yOwogfQogCiBzdGF0aWMgY29uc3QgQ29sb3ImIGJvcmRlckZp
bGxDb2xvcigpCiB7Ci0gICAgc3RhdGljIGNvbnN0IENvbG9yIGNvbG9yKDIwOCwgMjA4LCAyMDgp
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gY29sb3IoMjA4LCAyMDgsIDIwOCk7
CiAgICAgcmV0dXJuIGNvbG9yOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuY3BwCmluZGV4IDQ1ZDhjN2JlYjQxZTZiYjhkNDBlZjMzZjdkYWM0YzQ3ZDI0
YmNhMjIuLmMwMGNiY2M5OTEzZDEzZDc2ZjE3YWZkODMyYzg2OGYyYWI3OGViOWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCkBAIC01Miw3ICs1Miw3
IEBAIHN0cnVjdCBTYW1lU2l6ZUFzUmVuZGVyVGFibGVDZWxsIDogcHVibGljIFJlbmRlckJsb2Nr
RmxvdyB7CiB9OwogCiBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVuZGVyVGFibGVDZWxsKSA9PSBz
aXplb2YoU2FtZVNpemVBc1JlbmRlclRhYmxlQ2VsbCksIFJlbmRlclRhYmxlQ2VsbF9zaG91bGRf
c3RheV9zbWFsbCk7Ci1DT01QSUxFX0FTU0VSVChzaXplb2YoQ29sbGFwc2VkQm9yZGVyVmFsdWUp
ID09IDE2LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZV9zaG91bGRfc3RheV9zbWFsbCk7CitDT01QSUxF
X0FTU0VSVChzaXplb2YoQ29sbGFwc2VkQm9yZGVyVmFsdWUpIDw9IDI0LCBDb2xsYXBzZWRCb3Jk
ZXJWYWx1ZV9zaG91bGRfc3RheV9zbWFsbCk7CiAKIFJlbmRlclRhYmxlQ2VsbDo6UmVuZGVyVGFi
bGVDZWxsKEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCiAgICAgOiBSZW5k
ZXJCbG9ja0Zsb3coZWxlbWVudCwgV1RGTW92ZShzdHlsZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KaW5kZXggOGJmNzRjMGVmYmFmYjUwMzc1NDFjZDYzNWRh
NDJmOWI2N2YxMzBiZi4uOGEzOTRhZDg5YWRiYzJhZDBhMTRmN2U3OGNhNzU1OTA1ZmM1OTljNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpAQCAtMzI1LDcg
KzMyNSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnNldENvbnRlbnRTaXplQ2F0ZWdvcnkoY29u
c3QgU3RyaW5nJiBjb250ZW50U2l6ZUNhdGVnb3J5KQogCiBjb25zdCBDb2xvciYgUmVuZGVyVGhl
bWVJT1M6OnNoYWRvd0NvbG9yKCkgY29uc3QKIHsKLSAgICBzdGF0aWMgQ29sb3IgY29sb3IoMC4w
ZiwgMC4wZiwgMC4wZiwgMC43Zik7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbG9yPiBj
b2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjdmKTsKICAgICByZXR1cm4gY29sb3I7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSW5kaWNhdGVMYXllci5tbSBi
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSW5kaWNhdGVMYXllci5tbQppbmRleCBmOTQ0
NGRjMzc0ZTA0MmI2ZDA1MDc3MGEyNjA3MmUxZTdiZTEyYzRkLi4yZjBjMTY2Y2Q1MjgyNzczZWI5
MGU5ZTM5YTljYjViNDVkZmZhOTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkluZGljYXRlTGF5ZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJJbmRpY2F0ZUxheWVyLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0Nv
bG9yTWFjLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1F1YXJ0ekNvcmVTUEkuaD4KICNpbXBvcnQgPFdl
YkNvcmUvV0FLV2luZG93Lmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ5LDcgKzUwLDcgQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAgICAgc2VsZi5jb250ZW50c1NjYWxlID0gW1tfd2ViVmlldyB3aW5kb3ddIHNj
cmVlblNjYWxlXTsKIAogICAgIC8vIEJsdWUgaGlnaGxpZ2h0IGNvbG9yLgotICAgIHN0YXRpYyBD
b2xvciBoaWdobGlnaHRDb2xvcigxMTEuMGYgLyAyNTUuMGYsIDE2OC4wZiAvIDI1NS4wZiwgMjIw
LjBmIC8gMjU1LjBmLCAwLjY2Zik7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbG9yPiBo
aWdobGlnaHRDb2xvcigxMTEuMGYgLyAyNTUuMGYsIDE2OC4wZiAvIDI1NS4wZiwgMjIwLjBmIC8g
MjU1LjBmLCAwLjY2Zik7CiAgICAgc2VsZi5iYWNrZ3JvdW5kQ29sb3IgPSBjYWNoZWRDR0NvbG9y
KGhpZ2hsaWdodENvbG9yKTsKIAogICAgIHJldHVybiBzZWxmOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDY1MTU2MmI0ZDRhNmJmZDFkNjYxNTkx
ZmVlM2U3MzUyOTdhY2VkODYuLjkxNTIxZTVmZjY2NWUxNTRlY2U0NGZmMDdjNmYwZjEzNWRmOWY5
ZmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNiBAQAorMjAxNi0xMC0xMSAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+
CisKKyAgICAgICAgQWRkIHByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIGV4dGVuZGVkIGNvbG9ycyB0
byBXZWJDb3JlOjpDb2xvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYyODc4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yODU5NjQxMz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIG5ldyBBUEkgdGVz
dCBmb3IgQ29sb3JzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Nv
bG9yLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE2LTEwLTExICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXBk
YXRlIEFQSSB0ZXN0IGV4cGVjdGF0aW9uIGFmdGVyIHIyMDcxNjIuCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3IuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yLmNwcAppbmRleCBlOGU2ODIwZTU2Y2YxM2FkOTA2MGQ5
NDEyNGM2OGIzZmJhZTZkOTMzLi44NTYyNWQyNzc0ODgyMzA2ZDc0MTk0OTUwOTZkZmY2N2Q5NzVm
OTBmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3Iu
Y3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvci5jcHAKQEAg
LTE0NCw0ICsxNDQsMjcgQEAgVEVTVChDb2xvciwgUkdCVG9IU1ZfTGlnaHRHcmF5KQogICAgIEVY
UEVDVF9ET1VCTEVfRVEoMC43NTI5NDExNzY0NzA1ODgyMiwgdik7CiB9CiAKK1RFU1QoQ29sb3Is
IFZhbGlkaXR5KQoreworICAgIENvbG9yIGludmFsaWRDb2xvcjsKKyAgICBFWFBFQ1RfRkFMU0Uo
aW52YWxpZENvbG9yLmlzVmFsaWQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGludmFsaWRDb2xvci5p
c0V4dGVuZGVkKCkpOworICAgIEVYUEVDVF9UUlVFKGludmFsaWRDb2xvci5hc0V4dGVuZGVkKCkg
PT0gbnVsbHB0cik7CisKKyAgICBDb2xvciBvdGhlckludmFsaWRDb2xvciA9IGludmFsaWRDb2xv
cjsKKyAgICBFWFBFQ1RfRkFMU0Uob3RoZXJJbnZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKKyAgICBF
WFBFQ1RfRkFMU0Uob3RoZXJJbnZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShvdGhlckludmFsaWRDb2xvci5hc0V4dGVuZGVkKCkgPT0gbnVsbHB0cik7CisKKyAgICBD
b2xvciB2YWxpZENvbG9yKDI1NSwgMCwgMCk7CisgICAgRVhQRUNUX1RSVUUodmFsaWRDb2xvci5p
c1ZhbGlkKCkpOworICAgIEVYUEVDVF9GQUxTRSh2YWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7Cisg
ICAgRVhQRUNUX1RSVUUodmFsaWRDb2xvci5hc0V4dGVuZGVkKCkgPT0gbnVsbHB0cik7CisKKyAg
ICBDb2xvciBvdGhlclZhbGlkQ29sb3IgPSB2YWxpZENvbG9yOworICAgIEVYUEVDVF9UUlVFKG90
aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOworICAgIEVYUEVDVF9GQUxTRShvdGhlclZhbGlkQ29s
b3IuaXNFeHRlbmRlZCgpKTsKKyAgICBFWFBFQ1RfVFJVRShvdGhlclZhbGlkQ29sb3IuYXNFeHRl
bmRlZCgpID09IG51bGxwdHIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>