<?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>81286</bug_id>
          
          <creation_ts>2012-03-15 16:53:16 -0700</creation_ts>
          <short_desc>[chromium] Unify the drawing logic for different layer types that output textures to the compositor</short_desc>
          <delta_ts>2012-03-16 21:15:44 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>kbr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>senorblanco</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>579897</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-15 16:53:16 -0700</bug_when>
    <thetext>[chromium] Unify the drawing logic for different layer types that output textures to the compositor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579906</commentid>
    <comment_count>1</comment_count>
      <attachid>132151</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-15 16:55:57 -0700</bug_when>
    <thetext>Created attachment 132151
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579907</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-15 16:57:27 -0700</bug_when>
    <thetext>I hope to be able to collapse our API types for texture-backed layers a bit as well, but first we need to unify the implementation a bit.

Diff stat says this is a good change: 583 insertions(+), 752 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579918</commentid>
    <comment_count>3</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-15 17:04:22 -0700</bug_when>
    <thetext>Yes, this is very refreshing indeed...  will we eventually (not in this patch, of course) be able to do the same for main thread side?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579936</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-15 17:20:52 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Yes, this is very refreshing indeed...  will we eventually (not in this patch, of course) be able to do the same for main thread side?

I hope so! That&apos;s the motivation for this patch, actually (in addition to just cleaning things up).  I&apos;m still thinking through exactly how the main thread API will look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579999</commentid>
    <comment_count>5</comment_count>
      <attachid>132151</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-15 18:23:25 -0700</bug_when>
    <thetext>Comment on attachment 132151
Patch

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

Looks awesome. Bikeshed comment only.

&gt; Source/WebCore/WebCore.gypi:3517
&gt; +            &apos;platform/graphics/chromium/cc/CCTextureLayerImpl.h&apos;,

Externaltexture a la WebExternalTextureLayer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580084</commentid>
    <comment_count>6</comment_count>
      <attachid>132151</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-03-15 20:54:37 -0700</bug_when>
    <thetext>Comment on attachment 132151
Patch

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

W00t!  Nice work!

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureDrawQuad.cpp:45
&gt; +    , m_textureId(textureId)
&gt; +    , m_hasAlpha(hasAlpha)
&gt; +    , m_premultipliedAlpha(premultipliedAlpha)
&gt; +    , m_uvRect(uvRect)
&gt; +    , m_flipped(flipped)
&gt; +    , m_ioSurfaceSize(ioSurfaceSize)
&gt; +    , m_ioSurfaceTextureId(ioSurfaceTextureId)

These member vars seem to be common between CCTextureDrawQuad and CCTextureLayerImpl.  Would it be worthwhile refactoring them out into a struct or class that they both can aggregate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580599</commentid>
    <comment_count>7</comment_count>
      <attachid>132151</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-16 09:48:33 -0700</bug_when>
    <thetext>Comment on attachment 132151
Patch

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

I realize you&apos;re trying to cut down on the number of classes that need to be exposed at the WebLayer level, but CCTextureLayerImpl (like CCPluginLayerImpl before it) seems to have multiple personalities--sometimes it&apos;s an io surface and sometimes it&apos;s a normal external texture.  You have to care about this distinction in every function and even at the quad level.  Unless I&apos;m misunderstanding something, these can never switch back and forth for a given layer, so if something is an IO surface-using plugin, it&apos;s always going to be one?

Can you see any easy way to have some more separation of interests here without increasing GTFO complexity?

&gt; Source/WebCore/ChangeLog:14
&gt; +        Canvas 2d, WebGL and plugin composited rendering are all covered by layout tests.

Can you verify manually that plugin layers work in both the IO surface and non-IO surface path? I think this comment is lying about our plugin test coverage.  ;)

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:932
&gt; +    // FIXME: setting the texture parameters every time is redundant. Move this code somewhere
&gt; +    // where it will only happen once per texture.
&gt; +    GLC(context, context()-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MIN_FILTER, GraphicsContext3D::LINEAR));
&gt; +    GLC(context, context()-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MAG_FILTER, GraphicsContext3D::LINEAR));
&gt; +    GLC(context, context()-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_S, GraphicsContext3D::CLAMP_TO_EDGE));
&gt; +    GLC(context, context()-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_T, GraphicsContext3D::CLAMP_TO_EDGE));

I&apos;m pretty sure this is redundant to every path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580811</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-16 12:36:12 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 132151 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132151&amp;action=review
&gt; 
&gt; I realize you&apos;re trying to cut down on the number of classes that need to be exposed at the WebLayer level, but CCTextureLayerImpl (like CCPluginLayerImpl before it) seems to have multiple personalities--sometimes it&apos;s an io surface and sometimes it&apos;s a normal external texture.  You have to care about this distinction in every function and even at the quad level.  Unless I&apos;m misunderstanding something, these can never switch back and forth for a given layer, so if something is an IO surface-using plugin, it&apos;s always going to be one?
&gt; 
&gt; Can you see any easy way to have some more separation of interests here without increasing GTFO complexity?

I could split the IO surface backed logic into a separate quad (or possibly layer) type, if that&apos;s what you mean.  This patch doesn&apos;t make that situation any better or worse, though - we used to have split personality layer and quad types for plugins, now we have split personality 

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:14
&gt; &gt; +        Canvas 2d, WebGL and plugin composited rendering are all covered by layout tests.
&gt; 
&gt; Can you verify manually that plugin layers work in both the IO surface and non-IO surface path? I think this comment is lying about our plugin test coverage.  ;)

Sure. (we really should have layout test coverage for the CoreAnimation drawing model too, but this code landed without it under time pressure so the next person through (me) gets to pay the effort. sigh).

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:932
&gt; &gt; +    // FIXME: setting the texture parameters every time is redundant. Move this code somewhere
&gt; &gt; +    // where it will only happen once per texture.
&gt; &gt; +    GLC(context, context()-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MIN_FILTER, GraphicsContext3D::LINEAR));
&gt; &gt; +    GLC(context, context()-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MAG_FILTER, GraphicsContext3D::LINEAR));
&gt; &gt; +    GLC(context, context()-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_S, GraphicsContext3D::CLAMP_TO_EDGE));
&gt; &gt; +    GLC(context, context()-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_T, GraphicsContext3D::CLAMP_TO_EDGE));
&gt; 
&gt; I&apos;m pretty sure this is redundant to every path.

Do you mean the parameters are already being set somewhere else?  WebGLLayerChromium is the only bit of code that sets these on the composited texture as far as I can tell.  I don&apos;t think it would be a tremendous amount of work to set these parameters elsewhere for canvas 2d and plugin layers somewhere else but they do have to be set.  I think the code in this patch is equivalent to what was already happening in drawCanvasQuad()/drawPluginQuad() before this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580832</commentid>
    <comment_count>9</comment_count>
      <attachid>132151</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-16 12:58:20 -0700</bug_when>
    <thetext>Comment on attachment 132151
Patch

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

You&apos;re right--this patch doesn&apos;t make the IO surface vs. texture ID situation any worse.  We can shave that yak later, I guess.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:932
&gt;&gt;&gt; +    GLC(context, context()-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_T, GraphicsContext3D::CLAMP_TO_EDGE));
&gt;&gt; 
&gt;&gt; I&apos;m pretty sure this is redundant to every path.
&gt; 
&gt; Do you mean the parameters are already being set somewhere else?  WebGLLayerChromium is the only bit of code that sets these on the composited texture as far as I can tell.  I don&apos;t think it would be a tremendous amount of work to set these parameters elsewhere for canvas 2d and plugin layers somewhere else but they do have to be set.  I think the code in this patch is equivalent to what was already happening in drawCanvasQuad()/drawPluginQuad() before this patch.

Oh, you&apos;re quite right, sorry.  TrackingTextureAllocator sets this for internally generated textures, but external textures might not be set properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581191</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-16 18:36:29 -0700</bug_when>
    <thetext>I patched this in on a mac and confirmed that drawingmodel=coreanimation flash still shows up.

Looking closer it should be really easy to support the CoreAnimation drawing model in the test WebKit plugin, and then use layout tests that are already in the tree but marked = SKIPPED for chromium to verify this behavior.  Fun for another day.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581203</commentid>
    <comment_count>11</comment_count>
      <attachid>132151</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-16 19:01:44 -0700</bug_when>
    <thetext>Comment on attachment 132151
Patch

R=me.  I totally agree that this patch unearths some mess, but all of that mess was there before.  I think that the patch as-is is a net positive change and should just get landed.

Also, I think CCTextureLayerImpl really is the right name here.  Many layers are going to have external textures, but the plugin layer already uses an internally generated texture id, as will video layers for software decode once this change gets propagated to the main thread side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581230</commentid>
    <comment_count>12</comment_count>
      <attachid>132439</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-16 20:03:25 -0700</bug_when>
    <thetext>Created attachment 132439
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581247</commentid>
    <comment_count>13</comment_count>
      <attachid>132439</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-16 21:15:39 -0700</bug_when>
    <thetext>Comment on attachment 132439
Patch for landing

Clearing flags on attachment: 132439

Committed r111112: &lt;http://trac.webkit.org/changeset/111112&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581248</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-16 21:15:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132151</attachid>
            <date>2012-03-15 16:55:57 -0700</date>
            <delta_ts>2012-03-16 20:03:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81286-20120315165555.patch</filename>
            <type>text/plain</type>
            <size>87419</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwODg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTQxNmY4NDdiOTMwNGJk
Mzg1NWZiZDU2OTJlZWU2MjVlOTg5MzY0Ni4uNGVmZmRlNmYzMGViN2Q1ODU1MjM5Y2JiYzcyYjhh
ZTFkYTM0YjA1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEyLTAzLTE1ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBV
bmlmeSB0aGUgZHJhd2luZyBsb2dpYyBmb3IgZGlmZmVyZW50IGxheWVyIHR5cGVzIHRoYXQgb3V0
cHV0IHRleHR1cmVzIHRvIHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTI4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSBjYW52YXMgMmQsIHdlYmdsLCBhbmQgcGx1
Z2luIGxheWVycyBhbGwgZXhwb3J0IGEgdGV4dHVyZSB0byB0aGUgY29tcG9zaXRvciB0aGF0IHRo
ZW4gbmVlZHMgdG8gYmUKKyAgICAgICAgZHJhd24uICBUaGVyZSBhcmUgYSBzbWFsbCBzZXQgb2Yg
b3BlcmF0aW9ucyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIHRoZSB0ZXh0dXJlIGF0IGRyYXcgdGlt
ZSAtIGRvIGEgWSBmbGlwLAorICAgICAgICBzdHJldGNoIGEgc3VicmVjdCB0byB0aGUgbGF5ZXIg
Ym91bmRzLCBzZXQgdGhlIGJsZW5kIG1vZGUgZXRjIGJ1dCB0aGV5IGFyZSBmdW5kYW1lbnRhbGx5
IHRoZSBzYW1lIHRoaW5nLiBUaGlzCisgICAgICAgIGNvbGxhcHNlcyB0aGUgbmVhcmx5LXJlZHVu
ZGFudCBjb2RlIGludG8gYSBzaW5nbGUgaW1wbC1zaWRlIGxheWVyIHR5cGUgZm9yIGEgdGV4dHVy
ZS1iYWNrZWQgbGF5ZXIgdGhhdCBjYW4KKyAgICAgICAgaGFuZGxlIHRoZSB1bmlvbiBvZiB0aGUg
Yml0cyBuZWVkZWQgZm9yIGVhY2ggbGF5ZXIgdHlwZS4KKworICAgICAgICBDYW52YXMgMmQsIFdl
YkdMIGFuZCBwbHVnaW4gY29tcG9zaXRlZCByZW5kZXJpbmcgYXJlIGFsbCBjb3ZlcmVkIGJ5IGxh
eW91dCB0ZXN0cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBs
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXhTdHJldGNoVGV4dHVyZVByb2dyYW1CaW5kaW5n
OjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4VHJhbnNmb3JtVGV4dHVyZVByb2dyYW1CaW5k
aW5nOjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
VGV4dHVyZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp0
ZXh0dXJlTGF5ZXJQcm9ncmFtRmxpcCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OnRleHR1cmVMYXllclByb2dyYW1TdHJldGNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2hGbGlwKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUxheWVyVGV4
UmVjdFByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp0
ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXApOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKExheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpQbHVnaW5MYXllckNocm9taXVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OnNldElPU3VyZmFjZVByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3Bl
cnRpZXNUbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5
ZXJDaHJvbWl1bS5oOgorICAgICAgICAoUGx1Z2luTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNEcmF3UXVhZC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52
YXNEcmF3UXVhZC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NEcmF3UXVhZDo6dG9UZXh0dXJlRHJhd1F1YWQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoQ0NEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlRHJhd1F1YWQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5j
cHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZURyYXdR
dWFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlRHJhd1F1YWQ6OkNDVGV4
dHVyZURyYXdRdWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RleHR1cmVEcmF3UXVhZC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5oLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChDQ1RleHR1cmVEcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Rl
eHR1cmVEcmF3UXVhZDo6dGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZURy
YXdRdWFkOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVEcmF3UXVhZDo6
cHJlbXVsdGlwbGllZEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZURyYXdRdWFk
Ojp1dlJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlRHJhd1F1YWQ6OmZsaXBwZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlRHJhd1F1YWQ6OmlvU3VyZmFjZVNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlRHJhd1F1YWQ6OmlvU3VyZmFjZVRleHR1cmVJZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlTGF5ZXJJ
bXBsLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlTGF5ZXJJbXBsOjpDQ1RleHR1cmVMYXllckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlTGF5ZXJJbXBsOjp+Q0NUZXh0dXJlTGF5ZXJJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZUxheWVySW1wbDo6d2lsbERyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RleHR1cmVMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlTGF5ZXJJbXBsOjpkaWRMb3NlQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RleHR1cmVMYXllckltcGw6OnNldElPU3VyZmFjZVByb3BlcnRpZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZUxheWVy
SW1wbC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoQ0NUZXh0dXJlTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZUxheWVy
SW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZUxheWVySW1wbDo6dGV4
dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZUxheWVySW1wbDo6c2V0VGV4dHVy
ZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZUxheWVySW1wbDo6c2V0SGFzQWxwaGEp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlTGF5ZXJJbXBsOjpzZXRQcmVtdWx0aXBsaWVk
QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlTGF5ZXJJbXBsOjpzZXRGbGlwcGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZUxheWVySW1wbDo6c2V0VVZSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZUxheWVySW1wbDo6bGF5ZXJUeXBlQXNTdHJpbmcpOgor
CiAyMDEyLTAzLTE1ICBTY290dCBCeWVyICA8c2NvdHRieWVyQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBGaXggY3JidWcgMTE3OTU3IC0gZ2V0IHNldHRpbmdzIHNjcm9sbGluZyB3aXRoIHRoZSB3
aGVlbCBhZ2Fpbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMmUxODc3OGY1Zjc1YTU0
MDI4M2M1NmUxYjRlYjdkY2I1ZGU5OGRmNy4uOTQwZmZjNjM2MzE2ZTg2NzFlNWMyZGUyMDhjMzQz
NzUzYWY2NjYxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAxMi0wMy0xNSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFtjaHJvbWl1bV0gVW5pZnkgdGhlIGRyYXdpbmcgbG9naWMgZm9yIGRpZmZlcmVudCBsYXll
ciB0eXBlcyB0aGF0IG91dHB1dCB0ZXh0dXJlcyB0byB0aGUgY29tcG9zaXRvcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODEyODYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NhbnZhczJETGF5
ZXJDaHJvbWl1bVRlc3QuY3BwOgorCiAyMDEyLTAzLTE1ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gUkVHUkVTU0lPTihyMTEwNTk2KSBD
Q1F1YWRDdWxsZXJUZXN0LnZlcmlmeUN1bGxDaGlsZExpbmVzVXBUb3BMZWZ0IGZhaWxzIG9uIFdp
bmRvd3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBiYTE0MTMzNDgzZjc3NzhlNzA2YTU1MWEyNTJhOTE1
ZmNiOWEyNzEyLi44OGI4ZDA2YTJhYTYxOWExMmRhMjIwMDJiMjhjODdhNzlhNTg2NzhjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC0zNDQzLDEwICszNDQzLDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVu
dHMuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52
YXNEcmF3UXVhZC5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQ2FudmFzRHJhd1F1YWQuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z0Jv
cmRlckRyYXdRdWFkLmNwcCcsCkBAIC0zNDc4LDIwICszNDc0LDE2IEBACiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxp
bmdEYXRhLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
Q29tbW9uLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVz
aW9uVHJhY2tlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1BhZ2VTY2FsZUFuaW1hdGlvbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUGFnZVNjYWxlQW5pbWF0aW9uLmgnLAotICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQuY3BwJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkRyYXdRdWFkLmgn
LAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5
ZXJJbXBsLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQbHVnaW5MYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcm94eS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUHJveHkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcCcsCkBAIC0zNTE5LDEzICszNTExLDE3IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1
YWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xp
ZENvbG9yTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZURyYXdRdWFkLmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlRHJhd1F1YWQuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlTGF5ZXJJ
bXBsLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
ZXh0dXJlTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZURyYXdRdWFkLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlRHJhd1F1YWQuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaW1pbmdGdW5jdGlvbi5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGltaW5n
RnVuY3Rpb24uaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRQcm94eS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkUHJveHkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggM2ZjNjAwMmM4YTIyMDllMzM4NDQ3Y2RlNDI5MGZlNjA3NTkyYTAwYS4u
ZWQ0YmM4M2Q5MTFiNGVkN2U3OGJmMGFkNDcyOTkyNzQ5YTdiZTUwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyQ2hyb21pdW0uY3BwCkBAIC0zNCwxMiArMzQsMTIgQEAKIAogI2luY2x1ZGUg
IkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgogCi0jaW5jbHVkZSAiY2MvQ0NDYW52YXNMYXllcklt
cGwuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJjYy9DQ1Rl
eHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1
bS5oIiAvLyBGb3IgdGhlIEdMQygpIG1hY3JvCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0
LmgiCisjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NU
ZXh0dXJlVXBkYXRlci5oIgogCiAjaW5jbHVkZSAiU2tDYW52YXMuaCIKIApAQCAtMTUzLDExICsx
NTMsMTEgQEAgdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NM
YXllckltcGwqIGxheWVyKQogewogICAgIENhbnZhc0xheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0
aWVzVG8obGF5ZXIpOwogCi0gICAgQ0NDYW52YXNMYXllckltcGwqIGNhbnZhc0xheWVyID0gc3Rh
dGljX2Nhc3Q8Q0NDYW52YXNMYXllckltcGwqPihsYXllcik7CisgICAgQ0NUZXh0dXJlTGF5ZXJJ
bXBsKiB0ZXh0dXJlTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ1RleHR1cmVMYXllckltcGwqPihsYXll
cik7CiAgICAgaWYgKG1fdXNlRG91YmxlQnVmZmVyaW5nKQotICAgICAgICBjYW52YXNMYXllci0+
c2V0VGV4dHVyZUlkKG1fZnJvbnRUZXh0dXJlLT50ZXh0dXJlSWQoKSk7CisgICAgICAgIHRleHR1
cmVMYXllci0+c2V0VGV4dHVyZUlkKG1fZnJvbnRUZXh0dXJlLT50ZXh0dXJlSWQoKSk7CiAgICAg
ZWxzZQotICAgICAgICBjYW52YXNMYXllci0+c2V0VGV4dHVyZUlkKG1fYmFja1RleHR1cmVJZCk7
CisgICAgICAgIHRleHR1cmVMYXllci0+c2V0VGV4dHVyZUlkKG1fYmFja1RleHR1cmVJZCk7CiB9
CiAKIHZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjp1bnJlc2VydmVDb250ZW50c1RleHR1cmUo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcAppbmRleCBkNTMzNjk5YWY5ZjFmN2Fh
MDg1MjhkNDFmOGI2YmNjMjYwYjAzNTMxLi40YjY2NTIzODRiOWNiZTdkYzc0NDUwODBjZmUwZjgw
YzQwYjFkMWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcApAQCAtMzQsOSAr
MzQsNyBAQAogCiAjaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgogCi0jaW5jbHVkZSAi
Y2MvQ0NMYXllckltcGwuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDVGV4dHVyZUxheWVy
SW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ3LDcgKzQ1LDcgQEAgQ2FudmFz
TGF5ZXJDaHJvbWl1bTo6Q2FudmFzTGF5ZXJDaHJvbWl1bSgpCiAKIFBhc3NPd25QdHI8Q0NMYXll
ckltcGw+IENhbnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKIHsKLSAgICBy
ZXR1cm4gQ0NDYW52YXNMYXllckltcGw6OmNyZWF0ZShtX2xheWVySWQpOworICAgIHJldHVybiBD
Q1RleHR1cmVMYXllckltcGw6OmNyZWF0ZShtX2xheWVySWQpOwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCBhY2ZkNzcyMzJiMmQ0NGNhNDBmOWVlNzJm
MTFlZWNlZjBmYzg1MzkzLi4yN2IzZWRlNTEzMjU3YTdhOWY0NmI5YWUyNDkyMTk2YTZjOTYzOTkw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTM0LDggKzM0LDYg
QEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKLSNp
bmNsdWRlICJDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9u
czNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJHZW9tZXRy
eUJpbmRpbmcuaCIKQEAgLTUyLDE2ICs1MCwxNSBAQAogI2luY2x1ZGUgIlRyYWNraW5nVGV4dHVy
ZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRlICJX
ZWJHTExheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJjYy9DQ0NhbnZhc0RyYXdRdWFkLmgiCiAj
aW5jbHVkZSAiY2MvQ0NEYW1hZ2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRl
ckRyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9D
Q0xheWVyVHJlZUhvc3RDb21tb24uaCIKLSNpbmNsdWRlICJjYy9DQ1BsdWdpbkRyYXdRdWFkLmgi
CiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgog
I2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NT
b2xpZENvbG9yRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ1RleHR1cmVEcmF3UXVhZC5oIgog
I2luY2x1ZGUgImNjL0NDVGlsZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0RyYXdR
dWFkLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCkBAIC00NDgsMTggKzQ0NSwxNSBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCogcXVh
ZCwgY29uc3QgRmxvYXRSZWN0JiBzdQogICAgIGNhc2UgQ0NEcmF3UXVhZDo6U29saWRDb2xvcjoK
ICAgICAgICAgZHJhd1NvbGlkQ29sb3JRdWFkKHF1YWQtPnRvU29saWRDb2xvckRyYXdRdWFkKCkp
OwogICAgICAgICBicmVhazsKKyAgICBjYXNlIENDRHJhd1F1YWQ6OlRleHR1cmVDb250ZW50Ogor
ICAgICAgICBkcmF3VGV4dHVyZVF1YWQocXVhZC0+dG9UZXh0dXJlRHJhd1F1YWQoKSk7CisgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ0NEcmF3UXVhZDo6VGlsZWRDb250ZW50OgogICAgICAgICBk
cmF3VGlsZVF1YWQocXVhZC0+dG9UaWxlRHJhd1F1YWQoKSk7CiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ0NEcmF3UXVhZDo6Q2FudmFzQ29udGVudDoKLSAgICAgICAgZHJhd0NhbnZhc1F1YWQo
cXVhZC0+dG9DYW52YXNEcmF3UXVhZCgpKTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDQ0Ry
YXdRdWFkOjpWaWRlb0NvbnRlbnQ6CiAgICAgICAgIGRyYXdWaWRlb1F1YWQocXVhZC0+dG9WaWRl
b0RyYXdRdWFkKCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIENDRHJhd1F1YWQ6OlBsdWdp
bkNvbnRlbnQ6Ci0gICAgICAgIGRyYXdQbHVnaW5RdWFkKHF1YWQtPnRvUGx1Z2luRHJhd1F1YWQo
KSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtNjk2LDMxICs2OTAsNiBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RpbGVRdWFkKGNvbnN0IENDVGlsZURyYXdRdWFk
KiBxdWFkKQogICAgIGRyYXdUZXh0dXJlZFF1YWQocXVhZC0+cXVhZFRyYW5zZm9ybSgpLCB0aWxl
UmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgpLCBsb2NhbFF1
YWQsIHVuaWZvcm1zLm1hdHJpeExvY2F0aW9uLCB1bmlmb3Jtcy5hbHBoYUxvY2F0aW9uLCB1bmlm
b3Jtcy5wb2ludExvY2F0aW9uKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdDYW52YXNRdWFkKGNvbnN0IENDQ2FudmFzRHJhd1F1YWQqIHF1YWQpCi17Ci0gICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKLSAgICBjb25zdCBDQ0NhbnZhc0xheWVySW1wbDo6
UHJvZ3JhbSogcHJvZ3JhbSA9IGNhbnZhc0xheWVyUHJvZ3JhbSgpOwotICAgIEFTU0VSVChwcm9n
cmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRl
eHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICBH
TEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBxdWFkLT50ZXh0dXJlSWQoKSkpOwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRl
eHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVB
UikpOwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJ
TFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOwotCi0gICAgaWYgKHF1YWQtPmhhc0Fs
cGhhKCkgJiYgIXF1YWQtPnByZW11bHRpcGxpZWRBbHBoYSgpKQotICAgICAgICBHTEMoY29udGV4
dCgpLCBjb250ZXh0KCktPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhBLCBH
cmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSkpOwotCi0gICAgY29uc3QgSW50
U2l6ZSYgYm91bmRzID0gcXVhZC0+cXVhZFJlY3QoKS5zaXplKCk7Ci0KLSAgICBHTEMoY29udGV4
dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0gICAgR0xD
KGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIo
KS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOwotICAgIGRyYXdUZXh0dXJlZFF1YWQocXVhZC0+bGF5
ZXJUcmFuc2Zvcm0oKSwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwgcXVhZC0+b3Bh
Y2l0eSgpLCBzaGFyZWRHZW9tZXRyeVF1YWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigp
LmFscGhhTG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0x
KTsKLQotICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBo
aWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhB
KSk7Ci19Ci0KIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3WVVWKGNvbnN0IENDVmlk
ZW9EcmF3UXVhZCogcXVhZCkKIHsKICAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpZVVZQcm9n
cmFtKiBwcm9ncmFtID0gdmlkZW9MYXllcllVVlByb2dyYW0oKTsKQEAgLTg3MSw3ICs4NDAsNyBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1ZpZGVvUXVhZChjb25zdCBDQ1ZpZGVv
RHJhd1F1YWQqIHF1YWQpCiAgICAgfQogfQogCi1zdHJ1Y3QgUGx1Z2luUHJvZ3JhbUJpbmRpbmcg
eworc3RydWN0IFRleHR1cmVQcm9ncmFtQmluZGluZyB7CiAgICAgdGVtcGxhdGU8Y2xhc3MgUHJv
Z3JhbT4gdm9pZCBzZXQoUHJvZ3JhbSogcHJvZ3JhbSkKICAgICB7CiAgICAgICAgIEFTU0VSVChw
cm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwpAQCAtODg2LDEwICs4NTUsMTAgQEAg
c3RydWN0IFBsdWdpblByb2dyYW1CaW5kaW5nIHsKICAgICBpbnQgYWxwaGFMb2NhdGlvbjsKIH07
CiAKLXN0cnVjdCBUZXhTdHJldGNoUGx1Z2luUHJvZ3JhbUJpbmRpbmcgOiBQbHVnaW5Qcm9ncmFt
QmluZGluZyB7CitzdHJ1Y3QgVGV4U3RyZXRjaFRleHR1cmVQcm9ncmFtQmluZGluZyA6IFRleHR1
cmVQcm9ncmFtQmluZGluZyB7CiAgICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBzZXQo
UHJvZ3JhbSogcHJvZ3JhbSkKICAgICB7Ci0gICAgICAgIFBsdWdpblByb2dyYW1CaW5kaW5nOjpz
ZXQocHJvZ3JhbSk7CisgICAgICAgIFRleHR1cmVQcm9ncmFtQmluZGluZzo6c2V0KHByb2dyYW0p
OwogICAgICAgICBvZmZzZXRMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm9mZnNl
dExvY2F0aW9uKCk7CiAgICAgICAgIHNjYWxlTG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFk
ZXIoKS5zY2FsZUxvY2F0aW9uKCk7CiAgICAgfQpAQCAtODk3LDY2ICs4NjYsODIgQEAgc3RydWN0
IFRleFN0cmV0Y2hQbHVnaW5Qcm9ncmFtQmluZGluZyA6IFBsdWdpblByb2dyYW1CaW5kaW5nIHsK
ICAgICBpbnQgc2NhbGVMb2NhdGlvbjsKIH07CiAKLXN0cnVjdCBUZXhUcmFuc2Zvcm1QbHVnaW5Q
cm9ncmFtQmluZGluZyA6IFBsdWdpblByb2dyYW1CaW5kaW5nIHsKK3N0cnVjdCBUZXhUcmFuc2Zv
cm1UZXh0dXJlUHJvZ3JhbUJpbmRpbmcgOiBUZXh0dXJlUHJvZ3JhbUJpbmRpbmcgewogICAgIHRl
bXBsYXRlPGNsYXNzIFByb2dyYW0+IHZvaWQgc2V0KFByb2dyYW0qIHByb2dyYW0pCiAgICAgewot
ICAgICAgICBQbHVnaW5Qcm9ncmFtQmluZGluZzo6c2V0KHByb2dyYW0pOworICAgICAgICBUZXh0
dXJlUHJvZ3JhbUJpbmRpbmc6OnNldChwcm9ncmFtKTsKICAgICAgICAgdGV4VHJhbnNmb3JtTG9j
YXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS50ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpOwog
ICAgIH0KICAgICBpbnQgdGV4VHJhbnNmb3JtTG9jYXRpb247CiB9OwogCi12b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd1BsdWdpblF1YWQoY29uc3QgQ0NQbHVnaW5EcmF3UXVhZCogcXVh
ZCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGV4dHVyZVF1YWQoY29uc3QgQ0NU
ZXh0dXJlRHJhd1F1YWQqIHF1YWQpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVh
ZCgpKTsKLQorICAgIHVuc2lnbmVkIG1hdHJpeExvY2F0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBh
bHBoYUxvY2F0aW9uID0gMDsKICAgICBpZiAocXVhZC0+aW9TdXJmYWNlVGV4dHVyZUlkKCkpIHsK
LSAgICAgICAgVGV4VHJhbnNmb3JtUGx1Z2luUHJvZ3JhbUJpbmRpbmcgYmluZGluZzsKKyAgICAg
ICAgVGV4VHJhbnNmb3JtVGV4dHVyZVByb2dyYW1CaW5kaW5nIGJpbmRpbmc7CiAgICAgICAgIGlm
IChxdWFkLT5mbGlwcGVkKCkpCi0gICAgICAgICAgICBiaW5kaW5nLnNldChwbHVnaW5MYXllclRl
eFJlY3RQcm9ncmFtRmxpcCgpKTsKKyAgICAgICAgICAgIGJpbmRpbmcuc2V0KHRleHR1cmVMYXll
clRleFJlY3RQcm9ncmFtRmxpcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYmluZGlu
Zy5zZXQocGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbSgpKTsKKyAgICAgICAgICAgIGJpbmRpbmcu
c2V0KHRleHR1cmVMYXllclRleFJlY3RQcm9ncmFtKCkpOwogCiAgICAgICAgIEdMQyhjb250ZXh0
KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAp
KTsKLSAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShFeHRlbnNp
b25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgcXVhZC0+aW9TdXJmYWNlVGV4dHVyZUlkKCkp
KTsKIAogICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0oYmluZGlu
Zy5wcm9ncmFtSWQpKTsKICAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3Jt
MWkoYmluZGluZy5zYW1wbGVyTG9jYXRpb24sIDApKTsKLSAgICAgICAgLy8gTm90ZTogdGhpcyBj
b2RlIHBhdGggaWdub3JlcyBxdWFkLT51dlJlY3QoKS4KLSAgICAgICAgR0xDKGNvbnRleHQoKSwg
Y29udGV4dCgpLT51bmlmb3JtNGYoYmluZGluZy50ZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgMCwgMCwg
cXVhZC0+aW9TdXJmYWNlV2lkdGgoKSwgcXVhZC0+aW9TdXJmYWNlSGVpZ2h0KCkpKTsKLSAgICAg
ICAgY29uc3QgSW50U2l6ZSYgYm91bmRzID0gcXVhZC0+cXVhZFJlY3QoKS5zaXplKCk7Ci0gICAg
ICAgIGRyYXdUZXh0dXJlZFF1YWQocXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKSwgYm91bmRzLndpZHRo
KCksIGJvdW5kcy5oZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgpLCBzaGFyZWRHZW9tZXRyeVF1YWQo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLm1hdHJp
eExvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRp
bmcuYWxwaGFMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtMSk7Ci0gICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoRXh0
ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIDApKTsKKyAgICAgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT51bmlmb3JtNGYoYmluZGluZy50ZXhUcmFuc2Zvcm1Mb2NhdGlvbiwg
MCwgMCwgcXVhZC0+aW9TdXJmYWNlU2l6ZSgpLndpZHRoKCksIHF1YWQtPmlvU3VyZmFjZVNpemUo
KS5oZWlnaHQoKSkpOworCisgICAgICAgIG1hdHJpeExvY2F0aW9uID0gYmluZGluZy5tYXRyaXhM
b2NhdGlvbjsKKyAgICAgICAgYWxwaGFMb2NhdGlvbiA9IGJpbmRpbmcuYWxwaGFMb2NhdGlvbjsK
KyAgICB9IGVsc2UgaWYgKHF1YWQtPmZsaXBwZWQoKSAmJiBxdWFkLT51dlJlY3QoKSA9PSBGbG9h
dFJlY3QoMCwgMCwgMSwgMSkpIHsKKyAgICAgICAgLy8gQSBmbGlwcGVkIHF1YWQgd2l0aCB0aGUg
ZGVmYXVsdCBVViBtYXBwaW5nIGlzIGNvbW1vbiBlbm91Z2ggdG8gdXNlIGEgc3BlY2lhbCBzaGFk
ZXIuCisgICAgICAgIC8vIENhbnZhcyAyZCBhbmQgV2ViR0wgbGF5ZXJzIHVzZSB0aGlzIHBhdGgg
YWx3YXlzIGFuZCBwbHVnaW4vZXh0ZXJuYWwgdGV4dHVyZSBsYXllcnMgdXNlIHRoaXMgYnkgZGVm
YXVsdC4KKyAgICAgICAgY29uc3QgQ0NUZXh0dXJlTGF5ZXJJbXBsOjpQcm9ncmFtRmxpcCogcHJv
Z3JhbSA9IHRleHR1cmVMYXllclByb2dyYW1GbGlwKCk7CisgICAgICAgIEdMQyhjb250ZXh0KCks
IGNvbnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKKyAgICAgICAgR0xD
KGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIo
KS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOworICAgICAgICBtYXRyaXhMb2NhdGlvbiA9IHByb2dy
YW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCk7CisgICAgICAgIGFscGhhTG9jYXRp
b24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKTsKICAgICB9IGVs
c2UgewotICAgICAgICBUZXhTdHJldGNoUGx1Z2luUHJvZ3JhbUJpbmRpbmcgYmluZGluZzsKKyAg
ICAgICAgVGV4U3RyZXRjaFRleHR1cmVQcm9ncmFtQmluZGluZyBiaW5kaW5nOwogICAgICAgICBp
ZiAocXVhZC0+ZmxpcHBlZCgpKQotICAgICAgICAgICAgYmluZGluZy5zZXQocGx1Z2luTGF5ZXJQ
cm9ncmFtRmxpcCgpKTsKKyAgICAgICAgICAgIGJpbmRpbmcuc2V0KHRleHR1cmVMYXllclByb2dy
YW1TdHJldGNoRmxpcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYmluZGluZy5zZXQo
cGx1Z2luTGF5ZXJQcm9ncmFtKCkpOwotCi0gICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICAgICAg
R0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgcXVhZC0+dGV4dHVyZUlkKCkpKTsKLQotICAgICAgICAvLyBGSVhNRTogc2V0
dGluZyB0aGUgdGV4dHVyZSBwYXJhbWV0ZXJzIGV2ZXJ5IHRpbWUgaXMgcmVkdW5kYW50LiBNb3Zl
IHRoaXMgY29kZSBzb21ld2hlcmUKLSAgICAgICAgLy8gd2hlcmUgaXQgd2lsbCBvbmx5IGhhcHBl
biBvbmNlIHBlciB0ZXh0dXJlLgotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dCgpLT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7Ci0gICAg
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQo
KS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURH
RSkpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQ
X1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7Ci0KKyAgICAgICAgICAgIGJp
bmRpbmcuc2V0KHRleHR1cmVMYXllclByb2dyYW1TdHJldGNoKCkpOwogICAgICAgICBHTEMoY29u
dGV4dCwgY29udGV4dCgpLT51c2VQcm9ncmFtKGJpbmRpbmcucHJvZ3JhbUlkKSk7CiAgICAgICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0KCktPnVuaWZvcm0xaShiaW5kaW5nLnNhbXBsZXJMb2NhdGlv
biwgMCkpOwogICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dCgpLT51bmlmb3JtMmYoYmluZGlu
Zy5vZmZzZXRMb2NhdGlvbiwgcXVhZC0+dXZSZWN0KCkueCgpLCBxdWFkLT51dlJlY3QoKS55KCkp
KTsKICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQoKS0+dW5pZm9ybTJmKGJpbmRpbmcuc2Nh
bGVMb2NhdGlvbiwgcXVhZC0+dXZSZWN0KCkud2lkdGgoKSwgcXVhZC0+dXZSZWN0KCkuaGVpZ2h0
KCkpKTsKLSAgICAgICAgY29uc3QgSW50U2l6ZSYgYm91bmRzID0gcXVhZC0+cXVhZFJlY3QoKS5z
aXplKCk7Ci0gICAgICAgIGRyYXdUZXh0dXJlZFF1YWQocXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKSwg
Ym91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgpLCBzaGFyZWRH
ZW9tZXRyeVF1YWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
aW5kaW5nLm1hdHJpeExvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJpbmRpbmcuYWxwaGFMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAtMSk7CisKKyAgICAgICAgbWF0cml4TG9jYXRpb24gPSBiaW5kaW5nLm1h
dHJpeExvY2F0aW9uOworICAgICAgICBhbHBoYUxvY2F0aW9uID0gYmluZGluZy5hbHBoYUxvY2F0
aW9uOwogICAgIH0KKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisKKyAgICBpZiAocXVhZC0+aW9TdXJmYWNl
VGV4dHVyZUlkKCkpCisgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1
cmUoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHF1YWQtPmlvU3VyZmFjZVRl
eHR1cmVJZCgpKSk7CisgICAgZWxzZQorICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBxdWFkLT50ZXh0dXJl
SWQoKSkpOworCisgICAgLy8gRklYTUU6IHNldHRpbmcgdGhlIHRleHR1cmUgcGFyYW1ldGVycyBl
dmVyeSB0aW1lIGlzIHJlZHVuZGFudC4gTW92ZSB0aGlzIGNvZGUgc29tZXdoZXJlCisgICAgLy8g
d2hlcmUgaXQgd2lsbCBvbmx5IGhhcHBlbiBvbmNlIHBlciB0ZXh0dXJlLgorICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpMSU5FQVIpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6
Q0xBTVBfVE9fRURHRSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0KCktPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKKworICAgIGlm
IChxdWFkLT5oYXNBbHBoYSgpICYmICFxdWFkLT5wcmVtdWx0aXBsaWVkQWxwaGEoKSkKKyAgICAg
ICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
OlNSQ19BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpKTsKKwor
ICAgIGNvbnN0IEludFNpemUmIGJvdW5kcyA9IHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpOworCisg
ICAgZHJhd1RleHR1cmVkUXVhZChxdWFkLT5sYXllclRyYW5zZm9ybSgpLCBib3VuZHMud2lkdGgo
KSwgYm91bmRzLmhlaWdodCgpLCBxdWFkLT5vcGFjaXR5KCksIHNoYXJlZEdlb21ldHJ5UXVhZCgp
LCBtYXRyaXhMb2NhdGlvbiwgYWxwaGFMb2NhdGlvbiwgLTEpOworCisgICAgR0xDKG1fY29udGV4
dC5nZXQoKSwgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpKTsKKworICAgIGlmIChxdWFkLT5p
b1N1cmZhY2VUZXh0dXJlSWQoKSkKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5i
aW5kVGV4dHVyZShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgMCkpOwogfQog
CiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKCkKQEAgLTEz
NzEsNTkgKzEzNTYsNTkgQEAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGVB
QSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1Td2kKICAgICByZXR1cm4gbV90
aWxlclByb2dyYW1Td2l6emxlQUEuZ2V0KCk7CiB9CiAKLWNvbnN0IENDQ2FudmFzTGF5ZXJJbXBs
OjpQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNhbnZhc0xheWVyUHJvZ3JhbSgpCitj
b25zdCBDQ1RleHR1cmVMYXllckltcGw6OlByb2dyYW1GbGlwKiBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnRleHR1cmVMYXllclByb2dyYW1GbGlwKCkKIHsKLSAgICBpZiAoIW1fY2FudmFzTGF5ZXJQ
cm9ncmFtKQotICAgICAgICBtX2NhbnZhc0xheWVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDQ0Nh
bnZhc0xheWVySW1wbDo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBpZiAoIW1fY2Fu
dmFzTGF5ZXJQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJM
YXllclJlbmRlcmVyQ2hyb21pdW06OmNhbnZhc0xheWVyUHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRo
aXMsIDApOwotICAgICAgICBtX2NhbnZhc0xheWVyUHJvZ3JhbS0+aW5pdGlhbGl6ZShtX2NvbnRl
eHQuZ2V0KCkpOworICAgIGlmICghbV90ZXh0dXJlTGF5ZXJQcm9ncmFtRmxpcCkKKyAgICAgICAg
bV90ZXh0dXJlTGF5ZXJQcm9ncmFtRmxpcCA9IGFkb3B0UHRyKG5ldyBDQ1RleHR1cmVMYXllcklt
cGw6OlByb2dyYW1GbGlwKG1fY29udGV4dC5nZXQoKSkpOworICAgIGlmICghbV90ZXh0dXJlTGF5
ZXJQcm9ncmFtRmxpcC0+aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBUUkFDRV9FVkVOVCgiTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlTGF5ZXJQcm9ncmFtOjppbml0aWFsaXplIiwgdGhp
cywgMCk7CisgICAgICAgIG1fdGV4dHVyZUxheWVyUHJvZ3JhbUZsaXAtPmluaXRpYWxpemUobV9j
b250ZXh0LmdldCgpKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fY2FudmFzTGF5ZXJQcm9ncmFtLmdl
dCgpOworICAgIHJldHVybiBtX3RleHR1cmVMYXllclByb2dyYW1GbGlwLmdldCgpOwogfQogCi1j
b25zdCBDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpw
bHVnaW5MYXllclByb2dyYW0oKQorY29uc3QgQ0NUZXh0dXJlTGF5ZXJJbXBsOjpQcm9ncmFtU3Ry
ZXRjaCogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaCgp
CiB7Ci0gICAgaWYgKCFtX3BsdWdpbkxheWVyUHJvZ3JhbSkKLSAgICAgICAgbV9wbHVnaW5MYXll
clByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NQbHVnaW5MYXllckltcGw6OlByb2dyYW0obV9jb250
ZXh0LmdldCgpKSk7Ci0gICAgaWYgKCFtX3BsdWdpbkxheWVyUHJvZ3JhbS0+aW5pdGlhbGl6ZWQo
KSkgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwbHVnaW5M
YXllclByb2dyYW06OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKLSAgICAgICAgbV9wbHVnaW5MYXll
clByb2dyYW0tPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgpKTsKKyAgICBpZiAoIW1fdGV4dHVy
ZUxheWVyUHJvZ3JhbVN0cmV0Y2gpCisgICAgICAgIG1fdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0
Y2ggPSBhZG9wdFB0cihuZXcgQ0NUZXh0dXJlTGF5ZXJJbXBsOjpQcm9ncmFtU3RyZXRjaChtX2Nv
bnRleHQuZ2V0KCkpKTsKKyAgICBpZiAoIW1fdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2gtPmlu
aXRpYWxpemVkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dGV4dHVyZUxheWVyUHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOworICAgICAgICBt
X3RleHR1cmVMYXllclByb2dyYW1TdHJldGNoLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7
CiAgICAgfQotICAgIHJldHVybiBtX3BsdWdpbkxheWVyUHJvZ3JhbS5nZXQoKTsKKyAgICByZXR1
cm4gbV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaC5nZXQoKTsKIH0KIAotY29uc3QgQ0NQbHVn
aW5MYXllckltcGw6OlByb2dyYW1GbGlwKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnBsdWdpbkxh
eWVyUHJvZ3JhbUZsaXAoKQorY29uc3QgQ0NUZXh0dXJlTGF5ZXJJbXBsOjpQcm9ncmFtU3RyZXRj
aEZsaXAqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2hG
bGlwKCkKIHsKLSAgICBpZiAoIW1fcGx1Z2luTGF5ZXJQcm9ncmFtRmxpcCkKLSAgICAgICAgbV9w
bHVnaW5MYXllclByb2dyYW1GbGlwID0gYWRvcHRQdHIobmV3IENDUGx1Z2luTGF5ZXJJbXBsOjpQ
cm9ncmFtRmxpcChtX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBpZiAoIW1fcGx1Z2luTGF5ZXJQcm9n
cmFtRmxpcC0+aW5pdGlhbGl6ZWQoKSkgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpwbHVnaW5MYXllclByb2dyYW1GbGlwOjppbml0aWFsaXplIiwgdGhpcywg
MCk7Ci0gICAgICAgIG1fcGx1Z2luTGF5ZXJQcm9ncmFtRmxpcC0+aW5pdGlhbGl6ZShtX2NvbnRl
eHQuZ2V0KCkpOworICAgIGlmICghbV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaEZsaXApCisg
ICAgICAgIG1fdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2hGbGlwID0gYWRvcHRQdHIobmV3IEND
VGV4dHVyZUxheWVySW1wbDo6UHJvZ3JhbVN0cmV0Y2hGbGlwKG1fY29udGV4dC5nZXQoKSkpOwor
ICAgIGlmICghbV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaEZsaXAtPmluaXRpYWxpemVkKCkp
IHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUxh
eWVyUHJvZ3JhbVN0cmV0Y2hGbGlwOjppbml0aWFsaXplIiwgdGhpcywgMCk7CisgICAgICAgIG1f
dGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2hGbGlwLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQo
KSk7CiAgICAgfQotICAgIHJldHVybiBtX3BsdWdpbkxheWVyUHJvZ3JhbUZsaXAuZ2V0KCk7Cisg
ICAgcmV0dXJuIG1fdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2hGbGlwLmdldCgpOwogfQogCi1j
b25zdCBDQ1BsdWdpbkxheWVySW1wbDo6VGV4UmVjdFByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbSgpCitjb25zdCBDQ1RleHR1cmVMYXllcklt
cGw6OlRleFJlY3RQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRleHR1cmVMYXllclRl
eFJlY3RQcm9ncmFtKCkKIHsKLSAgICBpZiAoIW1fcGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbSkK
LSAgICAgICAgbV9wbHVnaW5MYXllclRleFJlY3RQcm9ncmFtID0gYWRvcHRQdHIobmV3IENDUGx1
Z2luTGF5ZXJJbXBsOjpUZXhSZWN0UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBpZiAo
IW1fcGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgewotICAgICAgICBU
UkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwbHVnaW5MYXllclRleFJlY3RQcm9n
cmFtOjppbml0aWFsaXplIiwgdGhpcywgMCk7Ci0gICAgICAgIG1fcGx1Z2luTGF5ZXJUZXhSZWN0
UHJvZ3JhbS0+aW5pdGlhbGl6ZShtX2NvbnRleHQuZ2V0KCkpOworICAgIGlmICghbV90ZXh0dXJl
TGF5ZXJUZXhSZWN0UHJvZ3JhbSkKKyAgICAgICAgbV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3Jh
bSA9IGFkb3B0UHRyKG5ldyBDQ1RleHR1cmVMYXllckltcGw6OlRleFJlY3RQcm9ncmFtKG1fY29u
dGV4dC5nZXQoKSkpOworICAgIGlmICghbV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbS0+aW5p
dGlhbGl6ZWQoKSkgeworICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp0ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOworICAg
ICAgICBtX3RleHR1cmVMYXllclRleFJlY3RQcm9ncmFtLT5pbml0aWFsaXplKG1fY29udGV4dC5n
ZXQoKSk7CiAgICAgfQotICAgIHJldHVybiBtX3BsdWdpbkxheWVyVGV4UmVjdFByb2dyYW0uZ2V0
KCk7CisgICAgcmV0dXJuIG1fdGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW0uZ2V0KCk7CiB9CiAK
LWNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpUZXhSZWN0UHJvZ3JhbUZsaXAqIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6cGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAoKQorY29uc3QgQ0NUZXh0
dXJlTGF5ZXJJbXBsOjpUZXhSZWN0UHJvZ3JhbUZsaXAqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW1GbGlwKCkKIHsKLSAgICBpZiAoIW1fcGx1Z2luTGF5
ZXJUZXhSZWN0UHJvZ3JhbUZsaXApCi0gICAgICAgIG1fcGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3Jh
bUZsaXAgPSBhZG9wdFB0cihuZXcgQ0NQbHVnaW5MYXllckltcGw6OlRleFJlY3RQcm9ncmFtRmxp
cChtX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBpZiAoIW1fcGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3Jh
bUZsaXAtPmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6cGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXA6OmluaXRpYWxpemUiLCB0
aGlzLCAwKTsKLSAgICAgICAgbV9wbHVnaW5MYXllclRleFJlY3RQcm9ncmFtRmxpcC0+aW5pdGlh
bGl6ZShtX2NvbnRleHQuZ2V0KCkpOworICAgIGlmICghbV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJv
Z3JhbUZsaXApCisgICAgICAgIG1fdGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW1GbGlwID0gYWRv
cHRQdHIobmV3IENDVGV4dHVyZUxheWVySW1wbDo6VGV4UmVjdFByb2dyYW1GbGlwKG1fY29udGV4
dC5nZXQoKSkpOworICAgIGlmICghbV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAtPmlu
aXRpYWxpemVkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW1GbGlwOjppbml0aWFsaXplIiwgdGhpcywgMCk7
CisgICAgICAgIG1fdGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW1GbGlwLT5pbml0aWFsaXplKG1f
Y29udGV4dC5nZXQoKSk7CiAgICAgfQotICAgIHJldHVybiBtX3BsdWdpbkxheWVyVGV4UmVjdFBy
b2dyYW1GbGlwLmdldCgpOworICAgIHJldHVybiBtX3RleHR1cmVMYXllclRleFJlY3RQcm9ncmFt
RmxpcC5nZXQoKTsKIH0KIAogY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6UkdCQVByb2dyYW0qIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlkZW9MYXllclJHQkFQcm9ncmFtKCkKQEAgLTE0ODAsNiAr
MTQ2NSwxNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVj
dHMoKQogICAgICAgICBtX2JvcmRlclByb2dyYW0tPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsK
ICAgICBpZiAobV9oZWFkc1VwRGlzcGxheVByb2dyYW0pCiAgICAgICAgIG1faGVhZHNVcERpc3Bs
YXlQcm9ncmFtLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYgKG1fdGV4dHVyZUxh
eWVyUHJvZ3JhbUZsaXApCisgICAgICAgIG1fdGV4dHVyZUxheWVyUHJvZ3JhbUZsaXAtPmNsZWFu
dXAobV9jb250ZXh0LmdldCgpKTsKKyAgICBpZiAobV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRj
aCkKKyAgICAgICAgbV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaC0+Y2xlYW51cChtX2NvbnRl
eHQuZ2V0KCkpOworICAgIGlmIChtX3RleHR1cmVMYXllclByb2dyYW1TdHJldGNoRmxpcCkKKyAg
ICAgICAgbV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaEZsaXAtPmNsZWFudXAobV9jb250ZXh0
LmdldCgpKTsKKyAgICBpZiAobV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbSkKKyAgICAgICAg
bV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbS0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOwor
ICAgIGlmIChtX3RleHR1cmVMYXllclRleFJlY3RQcm9ncmFtRmxpcCkKKyAgICAgICAgbV90ZXh0
dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAtPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKICAg
ICBpZiAobV90aWxlclByb2dyYW0pCiAgICAgICAgIG1fdGlsZXJQcm9ncmFtLT5jbGVhbnVwKG1f
Y29udGV4dC5nZXQoKSk7CiAgICAgaWYgKG1fdGlsZXJQcm9ncmFtT3BhcXVlKQpAQCAtMTQ5Miwx
NiArMTQ4Nyw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2Jq
ZWN0cygpCiAgICAgICAgIG1fdGlsZXJQcm9ncmFtQUEtPmNsZWFudXAobV9jb250ZXh0LmdldCgp
KTsKICAgICBpZiAobV90aWxlclByb2dyYW1Td2l6emxlQUEpCiAgICAgICAgIG1fdGlsZXJQcm9n
cmFtU3dpenpsZUFBLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7Ci0gICAgaWYgKG1fY2FudmFz
TGF5ZXJQcm9ncmFtKQotICAgICAgICBtX2NhbnZhc0xheWVyUHJvZ3JhbS0+Y2xlYW51cChtX2Nv
bnRleHQuZ2V0KCkpOwotICAgIGlmIChtX3BsdWdpbkxheWVyUHJvZ3JhbSkKLSAgICAgICAgbV9w
bHVnaW5MYXllclByb2dyYW0tPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKLSAgICBpZiAobV9w
bHVnaW5MYXllclByb2dyYW1GbGlwKQotICAgICAgICBtX3BsdWdpbkxheWVyUHJvZ3JhbUZsaXAt
PmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKLSAgICBpZiAobV9wbHVnaW5MYXllclRleFJlY3RQ
cm9ncmFtKQotICAgICAgICBtX3BsdWdpbkxheWVyVGV4UmVjdFByb2dyYW0tPmNsZWFudXAobV9j
b250ZXh0LmdldCgpKTsKLSAgICBpZiAobV9wbHVnaW5MYXllclRleFJlY3RQcm9ncmFtRmxpcCkK
LSAgICAgICAgbV9wbHVnaW5MYXllclRleFJlY3RQcm9ncmFtRmxpcC0+Y2xlYW51cChtX2NvbnRl
eHQuZ2V0KCkpOwogICAgIGlmIChtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSkKICAgICAgICAg
bV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0tPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKICAg
ICBpZiAobV9yZW5kZXJTdXJmYWNlUHJvZ3JhbSkKQEAgLTE1MjEsMTcgKzE1MDYsMTcgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZWRPYmplY3RzKCkKIAogICAgIG1f
Ym9yZGVyUHJvZ3JhbS5jbGVhcigpOwogICAgIG1faGVhZHNVcERpc3BsYXlQcm9ncmFtLmNsZWFy
KCk7CisgICAgbV90ZXh0dXJlTGF5ZXJQcm9ncmFtRmxpcC5jbGVhcigpOworICAgIG1fdGV4dHVy
ZUxheWVyUHJvZ3JhbVN0cmV0Y2guY2xlYXIoKTsKKyAgICBtX3RleHR1cmVMYXllclByb2dyYW1T
dHJldGNoRmxpcC5jbGVhcigpOworICAgIG1fdGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW0uY2xl
YXIoKTsKKyAgICBtX3RleHR1cmVMYXllclRleFJlY3RQcm9ncmFtRmxpcC5jbGVhcigpOwogICAg
IG1fdGlsZXJQcm9ncmFtLmNsZWFyKCk7CiAgICAgbV90aWxlclByb2dyYW1PcGFxdWUuY2xlYXIo
KTsKICAgICBtX3RpbGVyUHJvZ3JhbVN3aXp6bGUuY2xlYXIoKTsKICAgICBtX3RpbGVyUHJvZ3Jh
bVN3aXp6bGVPcGFxdWUuY2xlYXIoKTsKICAgICBtX3RpbGVyUHJvZ3JhbUFBLmNsZWFyKCk7CiAg
ICAgbV90aWxlclByb2dyYW1Td2l6emxlQUEuY2xlYXIoKTsKLSAgICBtX2NhbnZhc0xheWVyUHJv
Z3JhbS5jbGVhcigpOwotICAgIG1fcGx1Z2luTGF5ZXJQcm9ncmFtLmNsZWFyKCk7Ci0gICAgbV9w
bHVnaW5MYXllclByb2dyYW1GbGlwLmNsZWFyKCk7Ci0gICAgbV9wbHVnaW5MYXllclRleFJlY3RQ
cm9ncmFtLmNsZWFyKCk7Ci0gICAgbV9wbHVnaW5MYXllclRleFJlY3RQcm9ncmFtRmxpcC5jbGVh
cigpOwogICAgIG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtLmNsZWFyKCk7CiAgICAgbV9yZW5k
ZXJTdXJmYWNlUHJvZ3JhbS5jbGVhcigpOwogICAgIG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFt
QUEuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggYTY4NzZl
NWQ1Njc0M2Y0ZTE5NTM2MjI5MWM2ZTllMDAzZTZmZDZiZC4uNTJlYTg3YzEzM2IxNTdmMWE1ZTBh
ODgyMGFkZGY2MzE2MWYwOGQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgK
QEAgLTQwLDExICs0MCwxMCBAQAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21p
dW0uaCIKLSNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0ND
RHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ0hlYWRzVXBEaXNwbGF5LmgiCiAjaW5jbHVkZSAi
Y2MvQ0NMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVkZSAiY2MvQ0NQbHVnaW5MYXllckltcGwuaCIK
KyNpbmNsdWRlICJjYy9DQ1RleHR1cmVMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1ZpZGVv
TGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KQEAgLTU3LDYgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
Q0NIZWFkc1VwRGlzcGxheTsKIGNsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgQ0NSZW5kZXJQYXNz
OworY2xhc3MgQ0NUZXh0dXJlRHJhd1F1YWQ7CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFz
cyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjsKQEAg
LTEyMSwxNyArMTIxLDE3IEBAIHB1YmxpYzoKICAgICBjb25zdCBDQ1JlbmRlclN1cmZhY2U6OlBy
b2dyYW1BQSogcmVuZGVyU3VyZmFjZVByb2dyYW1BQSgpOwogICAgIGNvbnN0IENDUmVuZGVyU3Vy
ZmFjZTo6TWFza1Byb2dyYW0qIHJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSgpOwogICAgIGNvbnN0
IENDUmVuZGVyU3VyZmFjZTo6TWFza1Byb2dyYW1BQSogcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFt
QUEoKTsKKyAgICBjb25zdCBDQ1RleHR1cmVMYXllckltcGw6OlByb2dyYW1GbGlwKiB0ZXh0dXJl
TGF5ZXJQcm9ncmFtRmxpcCgpOworICAgIGNvbnN0IENDVGV4dHVyZUxheWVySW1wbDo6UHJvZ3Jh
bVN0cmV0Y2gqIHRleHR1cmVMYXllclByb2dyYW1TdHJldGNoKCk7CisgICAgY29uc3QgQ0NUZXh0
dXJlTGF5ZXJJbXBsOjpQcm9ncmFtU3RyZXRjaEZsaXAqIHRleHR1cmVMYXllclByb2dyYW1TdHJl
dGNoRmxpcCgpOworICAgIGNvbnN0IENDVGV4dHVyZUxheWVySW1wbDo6VGV4UmVjdFByb2dyYW0q
IHRleHR1cmVMYXllclRleFJlY3RQcm9ncmFtKCk7CisgICAgY29uc3QgQ0NUZXh0dXJlTGF5ZXJJ
bXBsOjpUZXhSZWN0UHJvZ3JhbUZsaXAqIHRleHR1cmVMYXllclRleFJlY3RQcm9ncmFtRmxpcCgp
OwogICAgIGNvbnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW0qIHRpbGVyUHJvZ3JhbSgpOwog
ICAgIGNvbnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW1PcGFxdWUqIHRpbGVyUHJvZ3JhbU9w
YXF1ZSgpOwogICAgIGNvbnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW1BQSogdGlsZXJQcm9n
cmFtQUEoKTsKICAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtU3dpenpsZSogdGls
ZXJQcm9ncmFtU3dpenpsZSgpOwogICAgIGNvbnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW1T
d2l6emxlT3BhcXVlKiB0aWxlclByb2dyYW1Td2l6emxlT3BhcXVlKCk7CiAgICAgY29uc3QgQ0NU
aWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGVBQSogdGlsZXJQcm9ncmFtU3dpenpsZUFBKCk7
Ci0gICAgY29uc3QgQ0NDYW52YXNMYXllckltcGw6OlByb2dyYW0qIGNhbnZhc0xheWVyUHJvZ3Jh
bSgpOwotICAgIGNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFtKiBwbHVnaW5MYXllclBy
b2dyYW0oKTsKLSAgICBjb25zdCBDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbUZsaXAqIHBsdWdp
bkxheWVyUHJvZ3JhbUZsaXAoKTsKLSAgICBjb25zdCBDQ1BsdWdpbkxheWVySW1wbDo6VGV4UmVj
dFByb2dyYW0qIHBsdWdpbkxheWVyVGV4UmVjdFByb2dyYW0oKTsKLSAgICBjb25zdCBDQ1BsdWdp
bkxheWVySW1wbDo6VGV4UmVjdFByb2dyYW1GbGlwKiBwbHVnaW5MYXllclRleFJlY3RQcm9ncmFt
RmxpcCgpOwogICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtKiB2aWRlb0xh
eWVyUkdCQVByb2dyYW0oKTsKICAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpZVVZQcm9ncmFt
KiB2aWRlb0xheWVyWVVWUHJvZ3JhbSgpOwogICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6Ok5h
dGl2ZVRleHR1cmVQcm9ncmFtKiB2aWRlb0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0oKTsKQEAg
LTE2OCwxMCArMTY4LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQo
Y29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3UmVuZGVyU3VyZmFj
ZVF1YWQoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdTb2xp
ZENvbG9yUXVhZChjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCopOworICAgIHZvaWQgZHJhd1Rl
eHR1cmVRdWFkKGNvbnN0IENDVGV4dHVyZURyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3VGlsZVF1
YWQoY29uc3QgQ0NUaWxlRHJhd1F1YWQqKTsKLSAgICB2b2lkIGRyYXdDYW52YXNRdWFkKGNvbnN0
IENDQ2FudmFzRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdWaWRlb1F1YWQoY29uc3QgQ0NWaWRl
b0RyYXdRdWFkKik7Ci0gICAgdm9pZCBkcmF3UGx1Z2luUXVhZChjb25zdCBDQ1BsdWdpbkRyYXdR
dWFkKik7CiAKICAgICBNYW5hZ2VkVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCk7
CiAgICAgdm9pZCBjb3B5UGxhbmVUb1RleHR1cmUoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiwgY29u
c3Qgdm9pZCogcGxhbmUsIGludCBpbmRleCk7CkBAIC0yMjIsMTcgKzIyMSwxNyBAQCBwcml2YXRl
OgogICAgIE93blB0cjxHZW9tZXRyeUJpbmRpbmc+IG1fc2hhcmVkR2VvbWV0cnk7CiAgICAgT3du
UHRyPExheWVyQ2hyb21pdW06OkJvcmRlclByb2dyYW0+IG1fYm9yZGVyUHJvZ3JhbTsKICAgICBP
d25QdHI8Q0NIZWFkc1VwRGlzcGxheTo6UHJvZ3JhbT4gbV9oZWFkc1VwRGlzcGxheVByb2dyYW07
CisgICAgT3duUHRyPENDVGV4dHVyZUxheWVySW1wbDo6UHJvZ3JhbUZsaXA+IG1fdGV4dHVyZUxh
eWVyUHJvZ3JhbUZsaXA7CisgICAgT3duUHRyPENDVGV4dHVyZUxheWVySW1wbDo6UHJvZ3JhbVN0
cmV0Y2g+IG1fdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2g7CisgICAgT3duUHRyPENDVGV4dHVy
ZUxheWVySW1wbDo6UHJvZ3JhbVN0cmV0Y2hGbGlwPiBtX3RleHR1cmVMYXllclByb2dyYW1TdHJl
dGNoRmxpcDsKKyAgICBPd25QdHI8Q0NUZXh0dXJlTGF5ZXJJbXBsOjpUZXhSZWN0UHJvZ3JhbT4g
bV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbTsKKyAgICBPd25QdHI8Q0NUZXh0dXJlTGF5ZXJJ
bXBsOjpUZXhSZWN0UHJvZ3JhbUZsaXA+IG1fdGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW1GbGlw
OwogICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtPiBtX3RpbGVyUHJvZ3JhbTsK
ICAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbU9wYXF1ZT4gbV90aWxlclByb2dy
YW1PcGFxdWU7CiAgICAgT3duUHRyPENDVGlsZWRMYXllckltcGw6OlByb2dyYW1Td2l6emxlPiBt
X3RpbGVyUHJvZ3JhbVN3aXp6bGU7CiAgICAgT3duUHRyPENDVGlsZWRMYXllckltcGw6OlByb2dy
YW1Td2l6emxlT3BhcXVlPiBtX3RpbGVyUHJvZ3JhbVN3aXp6bGVPcGFxdWU7CiAgICAgT3duUHRy
PENDVGlsZWRMYXllckltcGw6OlByb2dyYW1BQT4gbV90aWxlclByb2dyYW1BQTsKICAgICBPd25Q
dHI8Q0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGVBQT4gbV90aWxlclByb2dyYW1Td2l6
emxlQUE7Ci0gICAgT3duUHRyPENDQ2FudmFzTGF5ZXJJbXBsOjpQcm9ncmFtPiBtX2NhbnZhc0xh
eWVyUHJvZ3JhbTsKLSAgICBPd25QdHI8Q0NQbHVnaW5MYXllckltcGw6OlByb2dyYW0+IG1fcGx1
Z2luTGF5ZXJQcm9ncmFtOwotICAgIE93blB0cjxDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbUZs
aXA+IG1fcGx1Z2luTGF5ZXJQcm9ncmFtRmxpcDsKLSAgICBPd25QdHI8Q0NQbHVnaW5MYXllcklt
cGw6OlRleFJlY3RQcm9ncmFtPiBtX3BsdWdpbkxheWVyVGV4UmVjdFByb2dyYW07Ci0gICAgT3du
UHRyPENDUGx1Z2luTGF5ZXJJbXBsOjpUZXhSZWN0UHJvZ3JhbUZsaXA+IG1fcGx1Z2luTGF5ZXJU
ZXhSZWN0UHJvZ3JhbUZsaXA7CiAgICAgT3duUHRyPENDUmVuZGVyU3VyZmFjZTo6TWFza1Byb2dy
YW0+IG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtOwogICAgIE93blB0cjxDQ1JlbmRlclN1cmZh
Y2U6OlByb2dyYW0+IG1fcmVuZGVyU3VyZmFjZVByb2dyYW07CiAgICAgT3duUHRyPENDUmVuZGVy
U3VyZmFjZTo6TWFza1Byb2dyYW1BQT4gbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW1BQTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdp
bkxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOTc3MDM5NTdmOGJlZTFmMDJiZWIz
MmY3ZGEyZjdkOGJhYTMxZDQ4Yi4uOGE5OWFiMDQ3OGYyYzVkODY0OTA1MmRmZWEwY2IyYjI1MTVi
NDMwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTI5LDEwICsyOSw3
IEBACiAKICNpbmNsdWRlICJQbHVnaW5MYXllckNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCi0jaW5jbHVkZSAiY2MvQ0NQbHVnaW5MYXllckltcGwu
aCIKKyNpbmNsdWRlICJjYy9DQ1RleHR1cmVMYXllckltcGwuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC00NiwxNSArNDMsMTMgQEAgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6UGx1Z2luTGF5
ZXJDaHJvbWl1bSgpCiAgICAgLCBtX3RleHR1cmVJZCgwKQogICAgICwgbV9mbGlwcGVkKHRydWUp
CiAgICAgLCBtX3V2UmVjdCgwLCAwLCAxLCAxKQotICAgICwgbV9pb1N1cmZhY2VXaWR0aCgwKQot
ICAgICwgbV9pb1N1cmZhY2VIZWlnaHQoMCkKICAgICAsIG1faW9TdXJmYWNlSWQoMCkKIHsKIH0K
IAogUGFzc093blB0cjxDQ0xheWVySW1wbD4gUGx1Z2luTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NM
YXllckltcGwoKQogewotICAgIHJldHVybiBDQ1BsdWdpbkxheWVySW1wbDo6Y3JlYXRlKG1fbGF5
ZXJJZCk7CisgICAgcmV0dXJuIENDVGV4dHVyZUxheWVySW1wbDo6Y3JlYXRlKG1fbGF5ZXJJZCk7
CiB9CiAKIHZvaWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlk
KQpAQCAtNzcsOCArNzIsNyBAQCB2b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06OnNldFVWUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiAKIHZvaWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6c2V0SU9T
dXJmYWNlUHJvcGVydGllcyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVpbnQzMl90IGlvU3VyZmFj
ZUlkKQogewotICAgIG1faW9TdXJmYWNlV2lkdGggPSB3aWR0aDsKLSAgICBtX2lvU3VyZmFjZUhl
aWdodCA9IGhlaWdodDsKKyAgICBtX2lvU3VyZmFjZVNpemUgPSBJbnRTaXplKHdpZHRoLCBoZWln
aHQpOwogICAgIG1faW9TdXJmYWNlSWQgPSBpb1N1cmZhY2VJZDsKICAgICBzZXROZWVkc0NvbW1p
dCgpOwogfQpAQCAtOTIsMTEgKzg2LDExIEBAIHZvaWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6cHVz
aFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiB7CiAgICAgTGF5ZXJDaHJvbWl1bTo6
cHVzaFByb3BlcnRpZXNUbyhsYXllcik7CiAKLSAgICBDQ1BsdWdpbkxheWVySW1wbCogcGx1Z2lu
TGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ1BsdWdpbkxheWVySW1wbCo+KGxheWVyKTsKLSAgICBwbHVn
aW5MYXllci0+c2V0VGV4dHVyZUlkKG1fdGV4dHVyZUlkKTsKLSAgICBwbHVnaW5MYXllci0+c2V0
RmxpcHBlZChtX2ZsaXBwZWQpOwotICAgIHBsdWdpbkxheWVyLT5zZXRVVlJlY3QobV91dlJlY3Qp
OwotICAgIHBsdWdpbkxheWVyLT5zZXRJT1N1cmZhY2VQcm9wZXJ0aWVzKG1faW9TdXJmYWNlV2lk
dGgsIG1faW9TdXJmYWNlSGVpZ2h0LCBtX2lvU3VyZmFjZUlkKTsKKyAgICBDQ1RleHR1cmVMYXll
ckltcGwqIHRleHR1cmVMYXllciA9IHN0YXRpY19jYXN0PENDVGV4dHVyZUxheWVySW1wbCo+KGxh
eWVyKTsKKyAgICB0ZXh0dXJlTGF5ZXItPnNldFRleHR1cmVJZChtX3RleHR1cmVJZCk7CisgICAg
dGV4dHVyZUxheWVyLT5zZXRGbGlwcGVkKG1fZmxpcHBlZCk7CisgICAgdGV4dHVyZUxheWVyLT5z
ZXRVVlJlY3QobV91dlJlY3QpOworICAgIHRleHR1cmVMYXllci0+c2V0SU9TdXJmYWNlUHJvcGVy
dGllcyhtX2lvU3VyZmFjZVNpemUsIG1faW9TdXJmYWNlSWQpOwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVn
aW5MYXllckNocm9taXVtLmgKaW5kZXggMjI0ZGE4MTRmNDM4NjM3MGViZWJlNzA4NDFhZDFjMGIx
NmJlNjI3MS4uYWYwMDQ0OTM4MzBhM2FhNmIzODVhNDA3NDg3ZmU3MmIxMTIyMzdlYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaApAQCAtNjEsOCArNjEsNyBAQCBwcml2YXRlOgogICAg
IHVuc2lnbmVkIG1fdGV4dHVyZUlkOwogICAgIGJvb2wgbV9mbGlwcGVkOwogICAgIEZsb2F0UmVj
dCBtX3V2UmVjdDsKLSAgICBpbnQgbV9pb1N1cmZhY2VXaWR0aDsKLSAgICBpbnQgbV9pb1N1cmZh
Y2VIZWlnaHQ7CisgICAgSW50U2l6ZSBtX2lvU3VyZmFjZVNpemU7CiAgICAgdWludDMyX3QgbV9p
b1N1cmZhY2VJZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGUz
ZTE5ZTI1OGZhYTYwNGJjN2Y1YmFiMjkyNzIyMzZjMmMxNjdkMTYuLmVkYjRhY2Y2NDJiNWYyYTBh
MmViYjVjNmE3ZmM1N2FlOWMwZmNiMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNw
cApAQCAtMzcsOCArMzcsOSBAQAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRl
ICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
Ci0jaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVu
dC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDVGV4
dHVyZUxheWVySW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwMCwxMCArMTAx
LDEwIEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJ
bXBsKiBsYXllcikKIHsKICAgICBDYW52YXNMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1Rv
KGxheWVyKTsKIAotICAgIENDQ2FudmFzTGF5ZXJJbXBsKiBjYW52YXNMYXllciA9IHN0YXRpY19j
YXN0PENDQ2FudmFzTGF5ZXJJbXBsKj4obGF5ZXIpOwotICAgIGNhbnZhc0xheWVyLT5zZXRUZXh0
dXJlSWQobV90ZXh0dXJlSWQpOwotICAgIGNhbnZhc0xheWVyLT5zZXRIYXNBbHBoYShtX2hhc0Fs
cGhhKTsKLSAgICBjYW52YXNMYXllci0+c2V0UHJlbXVsdGlwbGllZEFscGhhKG1fcHJlbXVsdGlw
bGllZEFscGhhKTsKKyAgICBDQ1RleHR1cmVMYXllckltcGwqIHRleHR1cmVMYXllciA9IHN0YXRp
Y19jYXN0PENDVGV4dHVyZUxheWVySW1wbCo+KGxheWVyKTsKKyAgICB0ZXh0dXJlTGF5ZXItPnNl
dFRleHR1cmVJZChtX3RleHR1cmVJZCk7CisgICAgdGV4dHVyZUxheWVyLT5zZXRIYXNBbHBoYSht
X2hhc0FscGhhKTsKKyAgICB0ZXh0dXJlTGF5ZXItPnNldFByZW11bHRpcGxpZWRBbHBoYShtX3By
ZW11bHRpcGxpZWRBbHBoYSk7CiB9CiAKIGJvb2wgV2ViR0xMYXllckNocm9taXVtOjpwYWludFJl
bmRlcmVkUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFz
RHJhd1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NDYW52YXNEcmF3UXVhZC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2
ZjUwODNhNTVmYzNhNDFhNjFiM2UwNDAyYzVmZmFiNmJkZjdhMTEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNEcmF3UXVhZC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiY2Mv
Q0NDYW52YXNEcmF3UXVhZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NPd25QdHI8
Q0NDYW52YXNEcmF3UXVhZD4gQ0NDYW52YXNEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVk
UXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCB1bnNp
Z25lZCB0ZXh0dXJlSWQsIGJvb2wgaGFzQWxwaGEsIGJvb2wgcHJlbXVsdGlwbGllZEFscGhhKQot
ewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NDYW52YXNEcmF3UXVhZChzaGFyZWRRdWFkU3Rh
dGUsIHF1YWRSZWN0LCB0ZXh0dXJlSWQsIGhhc0FscGhhLCBwcmVtdWx0aXBsaWVkQWxwaGEpKTsK
LX0KLQotQ0NDYW52YXNEcmF3UXVhZDo6Q0NDYW52YXNEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1
YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgdW5zaWdu
ZWQgdGV4dHVyZUlkLCBib29sIGhhc0FscGhhLCBib29sIHByZW11bHRpcGxpZWRBbHBoYSkKLSAg
ICA6IENDRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBDQ0RyYXdRdWFkOjpDYW52YXNDb250ZW50
LCBxdWFkUmVjdCkKLSAgICAsIG1fdGV4dHVyZUlkKHRleHR1cmVJZCkKLSAgICAsIG1faGFzQWxw
aGEoaGFzQWxwaGEpCi0gICAgLCBtX3ByZW11bHRpcGxpZWRBbHBoYShwcmVtdWx0aXBsaWVkQWxw
aGEpCi17Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzRHJhd1F1YWQuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYWE4NWRiZDEzNGRlODA0MTM2YmE2MzkwMjllNjkxY2NiNTlhYjJm
Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0RyYXdRdWFkLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDQ0NhbnZhc0Ry
YXdRdWFkX2gKLSNkZWZpbmUgQ0NDYW52YXNEcmF3UXVhZF9oCi0KLSNpbmNsdWRlICJjYy9DQ0Ry
YXdRdWFkLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBDQ0xheWVySW1wbDsKLWNsYXNzIENDQ2FudmFzRHJhd1F1YWQgOiBwdWJs
aWMgQ0NEcmF3UXVhZCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NDYW52YXNEcmF3UXVh
ZCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NDYW52YXNEcmF3UXVhZD4gY3Jl
YXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIHVuc2lnbmVkIHRl
eHR1cmVfaWQsIGJvb2wgaGFzQWxwaGEsIGJvb2wgcHJlbXVsdGlwbGllZEFscGhhKTsKLQotICAg
IHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuICBtX3RleHR1cmVJZDsgfQotICAg
IGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiAgbV9oYXNBbHBoYTsgfQotICAgIGJvb2wg
cHJlbXVsdGlwbGllZEFscGhhKCkgY29uc3QgeyByZXR1cm4gIG1fcHJlbXVsdGlwbGllZEFscGhh
OyB9Ci0KLXByaXZhdGU6Ci0gICAgQ0NDYW52YXNEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRT
dGF0ZSosIGNvbnN0IEludFJlY3QmLCB1bnNpZ25lZCB0ZXh0dXJlX2lkLCBib29sIGhhc0FscGhh
LCBib29sIHByZW11bHRpcGxpZWRBbHBoYSk7Ci0gICAgCi0gICAgdW5zaWduZWQgbV90ZXh0dXJl
SWQ7Ci0gICAgYm9vbCBtX2hhc0FscGhhOwotICAgIGJvb2wgbV9wcmVtdWx0aXBsaWVkQWxwaGE7
Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDRlNTc5MTIwYzQ0ZjI3N2YwMDdjYTQ4ZGNm
MDg1ZDFhODQ2Y2MxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFz
TGF5ZXJJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNp
bmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1wbC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJj
Yy9DQ0NhbnZhc0RyYXdRdWFkLmgiCi0jaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgotI2luY2x1ZGUg
ImNjL0NDUXVhZEN1bGxlci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNDQ2FudmFzTGF5ZXJJbXBsOjpDQ0NhbnZhc0xheWVySW1w
bChpbnQgaWQpCi0gICAgOiBDQ0xheWVySW1wbChpZCkKLSAgICAsIG1fdGV4dHVyZUlkKDApCi0g
ICAgLCBtX2hhc0FscGhhKHRydWUpCi0gICAgLCBtX3ByZW11bHRpcGxpZWRBbHBoYSh0cnVlKQot
ewotfQotCi1DQ0NhbnZhc0xheWVySW1wbDo6fkNDQ2FudmFzTGF5ZXJJbXBsKCkKLXsKLX0KLQot
dm9pZCBDQ0NhbnZhc0xheWVySW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlz
dCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSkKLXsKLSAgICBJbnRS
ZWN0IHF1YWRSZWN0KEludFBvaW50KCksIGJvdW5kcygpKTsKLSAgICBxdWFkTGlzdC5hcHBlbmQo
Q0NDYW52YXNEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIG1fdGV4
dHVyZUlkLCBtX2hhc0FscGhhLCBtX3ByZW11bHRpcGxpZWRBbHBoYSkpOwotfQotCi12b2lkIEND
Q2FudmFzTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQg
aW5kZW50KSBjb25zdAotewotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8
ICJjYW52YXMgbGF5ZXIgdGV4dHVyZSBpZDogIiA8PCBtX3RleHR1cmVJZCA8PCAiIHByZW11bHRp
cGxpZWQ6ICIgPDwgbV9wcmVtdWx0aXBsaWVkQWxwaGEgPDwgIlxuIjsKLSAgICBDQ0xheWVySW1w
bDo6ZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KTsKLX0KLQotfQotCi0jZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBs
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZWI4NjAyNGViNjllOWI4NDAxMzM4
NDgxMWJjYTQyMGQzYzgzMjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0ND
YW52YXNMYXllckltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIENDQ2FudmFzTGF5ZXJJbXBsX2gKLSNkZWZpbmUgQ0NDYW52YXNMYXllckltcGxfaAot
Ci0jaW5jbHVkZSAiUHJvZ3JhbUJpbmRpbmcuaCIKLSNpbmNsdWRlICJTaGFkZXJDaHJvbWl1bS5o
IgotI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgQ0NDYW52YXNMYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQ2FudmFzTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0NhbnZhc0xheWVySW1wbChpZCkp
OwotICAgIH0KLSAgICB2aXJ0dWFsIH5DQ0NhbnZhc0xheWVySW1wbCgpOwotCi0gICAgdmlydHVh
bCB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRl
Kik7Ci0KLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJh
Z21lbnRTaGFkZXJSR0JBVGV4RmxpcEFscGhhPiBQcm9ncmFtOwotCi0gICAgdmlydHVhbCB2b2lk
IGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwotCi0g
ICAgdW5zaWduZWQgdGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KLSAg
ICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBtX3RleHR1cmVJZCA9IGlkOyB9Ci0g
ICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGhhc0FscGhhKSB7IG1faGFzQWxwaGEgPSBoYXNBbHBo
YTsgfQotICAgIHZvaWQgc2V0UHJlbXVsdGlwbGllZEFscGhhKGJvb2wgcHJlbXVsdGlwbGllZEFs
cGhhKSB7IG1fcHJlbXVsdGlwbGllZEFscGhhID0gcHJlbXVsdGlwbGllZEFscGhhOyB9Ci1wcml2
YXRlOgotICAgIGV4cGxpY2l0IENDQ2FudmFzTGF5ZXJJbXBsKGludCk7Ci0KLSAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkNhbnZhc0xh
eWVyIjsgfQotCi0gICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7Ci0gICAgYm9vbCBtX2hhc0FscGhh
OwotICAgIGJvb2wgbV9wcmVtdWx0aXBsaWVkQWxwaGE7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBD
Q0NhbnZhc0xheWVySW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuY3BwCmluZGV4IDcwODUwMDI2NzIx
OGY2YTUwMjZkN2JlZTZlMjE5OTIzNjkyMjEzN2IuLjZhNTUzMDAyNjk0YjJiZDM2ZTVjZWU2YjZi
ODdmOTRlM2YxZjI4OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuY3BwCkBAIC0yNywxMCArMjcsOSBA
QAogCiAjaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgogCi0jaW5jbHVkZSAiY2MvQ0NDYW52YXNE
cmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCi0jaW5jbHVkZSAiY2MvQ0NQbHVnaW5EcmF3UXVhZC5oIgor
I2luY2x1ZGUgImNjL0NDVGV4dHVyZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgog
I2luY2x1ZGUgImNjL0NDVGlsZURyYXdRdWFkLmgiCkBAIC04MywyOCArODIsMjIgQEAgY29uc3Qg
Q0NTb2xpZENvbG9yRHJhd1F1YWQqIENDRHJhd1F1YWQ6OnRvU29saWRDb2xvckRyYXdRdWFkKCkg
Y29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQq
Pih0aGlzKTsKIH0KIAorY29uc3QgQ0NUZXh0dXJlRHJhd1F1YWQqIENDRHJhd1F1YWQ6OnRvVGV4
dHVyZURyYXdRdWFkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9tYXRlcmlhbCA9PSBUZXh0dXJl
Q29udGVudCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENDVGV4dHVyZURyYXdRdWFk
Kj4odGhpcyk7Cit9CiBjb25zdCBDQ1RpbGVEcmF3UXVhZCogQ0NEcmF3UXVhZDo6dG9UaWxlRHJh
d1F1YWQoKSBjb25zdAogewogICAgIEFTU0VSVChtX21hdGVyaWFsID09IFRpbGVkQ29udGVudCk7
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENDVGlsZURyYXdRdWFkKj4odGhpcyk7CiB9
CiAKLWNvbnN0IENDQ2FudmFzRHJhd1F1YWQqIENDRHJhd1F1YWQ6OnRvQ2FudmFzRHJhd1F1YWQo
KSBjb25zdAotewotICAgIEFTU0VSVChtX21hdGVyaWFsID09IENhbnZhc0NvbnRlbnQpOwotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDQ0NhbnZhc0RyYXdRdWFkKj4odGhpcyk7Ci19Ci0K
IGNvbnN0IENDVmlkZW9EcmF3UXVhZCogQ0NEcmF3UXVhZDo6dG9WaWRlb0RyYXdRdWFkKCkgY29u
c3QKIHsKICAgICBBU1NFUlQobV9tYXRlcmlhbCA9PSBWaWRlb0NvbnRlbnQpOwogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqPih0aGlzKTsKIH0KIAotY29uc3Qg
Q0NQbHVnaW5EcmF3UXVhZCogQ0NEcmF3UXVhZDo6dG9QbHVnaW5EcmF3UXVhZCgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKG1fbWF0ZXJpYWwgPT0gUGx1Z2luQ29udGVudCk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IENDUGx1Z2luRHJhd1F1YWQqPih0aGlzKTsKLX0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3
UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NE
cmF3UXVhZC5oCmluZGV4IDE3MzhiNGIwZTc1ZTdjYWQ5NWQ0Y2IyZjg3YmM3OWY1NTg5YzAyYTAu
LmQ3MjRlM2RjOWNiMWVlNmM0N2Q1NjMyZThhOWMzYTUyOWFmMDRjMmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdR
dWFkLmgKQEAgLTMzLDEwICszMyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENDRGVi
dWdCb3JkZXJEcmF3UXVhZDsKIGNsYXNzIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOwogY2xhc3Mg
Q0NTb2xpZENvbG9yRHJhd1F1YWQ7CitjbGFzcyBDQ1RleHR1cmVEcmF3UXVhZDsKIGNsYXNzIEND
VGlsZURyYXdRdWFkOwotY2xhc3MgQ0NDYW52YXNEcmF3UXVhZDsKIGNsYXNzIENDVmlkZW9EcmF3
UXVhZDsKLWNsYXNzIENDUGx1Z2luRHJhd1F1YWQ7CiAKIC8vIENDRHJhd1F1YWQgaXMgYSBiYWcg
b2YgZGF0YSB1c2VkIGZvciBkcmF3aW5nIGEgcXVhZC4gQmVjYXVzZSBkaWZmZXJlbnQKIC8vIG1h
dGVyaWFscyBuZWVkIGRpZmZlcmVudCBiaXRzIG9mIHBlci1xdWFkIGRhdGEgdG8gcmVuZGVyLCBj
bGFzc2VzIHRoYXQgZGVyaXZlCkBAIC02NSwxMSArNjQsMTAgQEAgcHVibGljOgogICAgICAgICBJ
bnZhbGlkLAogICAgICAgICBEZWJ1Z0JvcmRlciwKICAgICAgICAgUmVuZGVyU3VyZmFjZSwKKyAg
ICAgICAgVGV4dHVyZUNvbnRlbnQsCiAgICAgICAgIFNvbGlkQ29sb3IsCiAgICAgICAgIFRpbGVk
Q29udGVudCwKLSAgICAgICAgQ2FudmFzQ29udGVudCwKICAgICAgICAgVmlkZW9Db250ZW50LAot
ICAgICAgICBQbHVnaW5Db250ZW50LAogICAgIH07CiAKICAgICBNYXRlcmlhbCBtYXRlcmlhbCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWF0ZXJpYWw7IH0KQEAgLTc3LDEwICs3NSw5IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQqIHRvRGVidWdCb3JkZXJEcmF3UXVhZCgp
IGNvbnN0OwogICAgIGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKiB0b1JlbmRlclN1cmZh
Y2VEcmF3UXVhZCgpIGNvbnN0OwogICAgIGNvbnN0IENDU29saWRDb2xvckRyYXdRdWFkKiB0b1Nv
bGlkQ29sb3JEcmF3UXVhZCgpIGNvbnN0OworICAgIGNvbnN0IENDVGV4dHVyZURyYXdRdWFkKiB0
b1RleHR1cmVEcmF3UXVhZCgpIGNvbnN0OwogICAgIGNvbnN0IENDVGlsZURyYXdRdWFkKiB0b1Rp
bGVEcmF3UXVhZCgpIGNvbnN0OwotICAgIGNvbnN0IENDQ2FudmFzRHJhd1F1YWQqIHRvQ2FudmFz
RHJhd1F1YWQoKSBjb25zdDsKICAgICBjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHRvVmlkZW9EcmF3
UXVhZCgpIGNvbnN0OwotICAgIGNvbnN0IENDUGx1Z2luRHJhd1F1YWQqIHRvUGx1Z2luRHJhd1F1
YWQoKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIENDRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqLCBNYXRlcmlhbCwgY29uc3QgSW50UmVjdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdp
bkRyYXdRdWFkLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUyODkxNDFkNTI5
NTJmNGM2NmU2NjNlMTdmNjZiZTUyMzdmZDVjNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1BsdWdpbkRyYXdRdWFkLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJjYy9DQ1BsdWdpbkRy
YXdRdWFkLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc093blB0cjxDQ1BsdWdpbkRy
YXdRdWFkPiBDQ1BsdWdpbkRyYXdRdWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUq
IHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdXZSZWN0LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGJvb2wgZmxpcHBlZCwgaW50IGlvU3VyZmFj
ZVdpZHRoLCBpbnQgaW9TdXJmYWNlSGVpZ2h0LCB1bnNpZ25lZCBpb1N1cmZhY2VUZXh0dXJlSWQp
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1BsdWdpbkRyYXdRdWFkKHNoYXJlZFF1YWRT
dGF0ZSwgcXVhZFJlY3QsIHV2UmVjdCwgdGV4dHVyZUlkLCBmbGlwcGVkLCBpb1N1cmZhY2VXaWR0
aCwgaW9TdXJmYWNlSGVpZ2h0LCBpb1N1cmZhY2VUZXh0dXJlSWQpKTsKLX0KLQotQ0NQbHVnaW5E
cmF3UXVhZDo6Q0NQbHVnaW5EcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVk
UXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB1dlJl
Y3QsIHVuc2lnbmVkIHRleHR1cmVJZCwgYm9vbCBmbGlwcGVkLCBpbnQgaW9TdXJmYWNlV2lkdGgs
IGludCBpb1N1cmZhY2VIZWlnaHQsIHVuc2lnbmVkIGlvU3VyZmFjZVRleHR1cmVJZCkKLSAgICA6
IENDRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBDQ0RyYXdRdWFkOjpQbHVnaW5Db250ZW50LCBx
dWFkUmVjdCkKLSAgICAsIG1fdXZSZWN0KHV2UmVjdCkKLSAgICAsIG1fdGV4dHVyZUlkKHRleHR1
cmVJZCkKLSAgICAsIG1fZmxpcHBlZChmbGlwcGVkKQotICAgICwgbV9pb1N1cmZhY2VXaWR0aChp
b1N1cmZhY2VXaWR0aCkKLSAgICAsIG1faW9TdXJmYWNlSGVpZ2h0KGlvU3VyZmFjZUhlaWdodCkK
LSAgICAsIG1faW9TdXJmYWNlVGV4dHVyZUlkKGlvU3VyZmFjZVRleHR1cmVJZCkKLXsKLX0KLQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQbHVnaW5EcmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzMWEyNjBkNDM0ZjBiZTM1MTBiNmJhMWEyZDNkNjNmNzI5NDBjMDhjLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQuaAorKysgL2Rldi9udWxs
CkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENDUGx1Z2luRHJhd1F1YWRfaAotI2Rl
ZmluZSBDQ1BsdWdpbkRyYXdRdWFkX2gKLQotI2luY2x1ZGUgImNjL0NDRHJhd1F1YWQuaCIKLSNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IENDTGF5ZXJJbXBsOwotCi1jbGFzcyBDQ1BsdWdpbkRyYXdRdWFkIDogcHVibGljIENDRHJhd1F1
YWQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUGx1Z2luRHJhd1F1YWQpOwotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUGx1Z2luRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBD
Q1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHV2UmVjdCwgdW5zaWduZWQgdGV4dHVyZUlkLCBib29sIGZsaXBwZWQsIGludCBpb1N1cmZh
Y2VXaWR0aCwgaW50IGlvU3VyZmFjZUhlaWdodCwgdW5zaWduZWQgbV9pb1N1cmZhY2VUZXh0dXJl
SWQpOwotCi0gICAgRmxvYXRSZWN0IHV2UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdXZSZWN0OyB9
Ci0gICAgdW5zaWduZWQgdGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0K
LSAgICBib29sIGZsaXBwZWQoKSBjb25zdCB7IHJldHVybiBtX2ZsaXBwZWQ7IH0KLSAgICBpbnQg
aW9TdXJmYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2lvU3VyZmFjZVdpZHRoOyB9Ci0gICAg
aW50IGlvU3VyZmFjZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faW9TdXJmYWNlSGVpZ2h0OyB9
Ci0KLSAgICB1bnNpZ25lZCBpb1N1cmZhY2VUZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX2lv
U3VyZmFjZVRleHR1cmVJZDsgfQotICAgIAotcHJpdmF0ZToKLSAgICBDQ1BsdWdpbkRyYXdRdWFk
KGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdXZSZWN0LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGJvb2wgZmxpcHBlZCwgaW50
IGlvU3VyZmFjZVdpZHRoLCBpbnQgaW9TdXJmYWNlSGVpZ2h0LCB1bnNpZ25lZCBpb1N1cmZhY2VU
ZXh0dXJlSWQpOwotCi0gICAgRmxvYXRSZWN0IG1fdXZSZWN0OwotICAgIHVuc2lnbmVkIG1fdGV4
dHVyZUlkOwotICAgIGJvb2wgbV9mbGlwcGVkOwotICAgIGludCBtX2lvU3VyZmFjZVdpZHRoOwot
ICAgIGludCBtX2lvU3VyZmFjZUhlaWdodDsKLSAgICB1bnNpZ25lZCBtX2lvU3VyZmFjZVRleHR1
cmVJZDsKLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMTQxMTRiNmFiY2Q2ZjY4OGEwODlk
ZGRiN2VhM2ZhMGY5NGQ3NmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
bHVnaW5MYXllckltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
Ci0KLSNpbmNsdWRlICJjYy9DQ1BsdWdpbkxheWVySW1wbC5oIgotCi0jaW5jbHVkZSAiRXh0ZW5z
aW9uczNEQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgImNjL0NDUGx1Z2luRHJhd1F1
YWQuaCIKLSNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCi0jaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVy
LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotQ0NQbHVnaW5MYXllckltcGw6OkNDUGx1Z2luTGF5ZXJJbXBsKGludCBpZCkKLSAgICA6
IENDTGF5ZXJJbXBsKGlkKQotICAgICwgbV90ZXh0dXJlSWQoMCkKLSAgICAsIG1fZmxpcHBlZCh0
cnVlKQotICAgICwgbV91dlJlY3QoMCwgMCwgMSwgMSkKLSAgICAsIG1faW9TdXJmYWNlSWQoMCkK
LSAgICAsIG1faW9TdXJmYWNlV2lkdGgoMCkKLSAgICAsIG1faW9TdXJmYWNlSGVpZ2h0KDApCi0g
ICAgLCBtX2lvU3VyZmFjZUNoYW5nZWQoZmFsc2UpCi0gICAgLCBtX2lvU3VyZmFjZVRleHR1cmVJ
ZCgwKQotewotfQotCi1DQ1BsdWdpbkxheWVySW1wbDo6fkNDUGx1Z2luTGF5ZXJJbXBsKCkKLXsK
LSAgICAvLyBGSVhNRTogaXQgc2VlbXMgdGhlcmUgaXMgbm8gbGF5ZXIgcmVuZGVyZXIgLyBHcmFw
aGljc0NvbnRleHQzRCBhdmFpbGFibGUgaGVyZS4gSWRlYWxseSB3ZQotICAgIC8vIHdvdWxkIGxp
a2UgdG8gZGVsZXRlIG1faW9TdXJmYWNlVGV4dHVyZUlkLgotICAgIG1faW9TdXJmYWNlVGV4dHVy
ZUlkID0gMDsKLX0KLQotdm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6d2lsbERyYXcoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQotewotICAgIGlmIChtX2lvU3VyZmFjZUNoYW5n
ZWQpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVy
LT5jb250ZXh0KCk7Ci0gICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zID0g
c3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25z
KCkpOwotICAgICAgICBBU1NFUlQoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX2lv
c3VyZmFjZSIpKTsKLSAgICAgICAgQVNTRVJUKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BUkJf
dGV4dHVyZV9yZWN0YW5nbGUiKSk7Ci0KLSAgICAgICAgaWYgKCFtX2lvU3VyZmFjZVRleHR1cmVJ
ZCkKLSAgICAgICAgICAgIG1faW9TdXJmYWNlVGV4dHVyZUlkID0gY29udGV4dC0+Y3JlYXRlVGV4
dHVyZSgpOwotCi0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+YmluZFRleHR1cmUoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIG1faW9T
dXJmYWNlVGV4dHVyZUlkKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJh
bWV0ZXJpKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7Ci0g
ICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEV4dGVuc2lvbnMzRDo6
VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklM
VEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJC
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpD
TEFNUF9UT19FREdFKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0
ZXJpKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7Ci0g
ICAgICAgIGV4dGVuc2lvbnMtPnRleEltYWdlSU9TdXJmYWNlMkRDSFJPTUlVTShFeHRlbnNpb25z
M0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW9TdXJmYWNlV2lkdGgsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lvU3VyZmFjZUhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW9TdXJmYWNlSWQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKLSAgICAg
ICAgLy8gRG8gbm90IGNoZWNrIGZvciBlcnJvciBjb25kaXRpb25zLiB0ZXhJbWFnZUlPU3VyZmFj
ZTJEQ0hST01JVU0gaXMgc3VwcG9zZWQgdG8gaG9sZCBvbiB0bwotICAgICAgICAvLyB0aGUgbGFz
dCBnb29kIElPU3VyZmFjZSBpZiB0aGUgbmV3IG9uZSBpcyBhbHJlYWR5IGNsb3NlZC4gVGhpcyBp
cyBvbmx5IGEgcG9zc2liaWxpdHkKLSAgICAgICAgLy8gZHVyaW5nIGxpdmUgcmVzaXppbmcgb2Yg
cGx1Z2lucy4gSG93ZXZlciwgaXQgc2VlbXMgdGhhdCB0aGlzIGlzIG5vdCBzdWZmaWNpZW50IHRv
Ci0gICAgICAgIC8vIGNvbXBsZXRlbHkgZ3VhcmQgYWdhaW5zdCBnYXJiYWdlIGJlaW5nIGRyYXdu
LiBJZiB0aGlzIGlzIGZvdW5kIHRvIGJlIGEgc2lnbmlmaWNhbnQgaXNzdWUsCi0gICAgICAgIC8v
IGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gZXhwbGljaXRseSB0ZWxsIHRoZSBlbWJlZGRlciB3aGVu
IHRvIGZyZWUgdGhlIHN1cmZhY2VzIGl0IGhhcwotICAgICAgICAvLyBhbGxvY2F0ZWQuCi0gICAg
ICAgIG1faW9TdXJmYWNlQ2hhbmdlZCA9IGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBDQ1BsdWdp
bkxheWVySW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgY29uc3QgQ0NT
aGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSkKLXsKLSAgICBJbnRSZWN0IHF1YWRSZWN0
KEludFBvaW50KCksIGJvdW5kcygpKTsKLSAgICBxdWFkTGlzdC5hcHBlbmQoQ0NQbHVnaW5EcmF3
UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIG1fdXZSZWN0LCBtX3RleHR1
cmVJZCwgbV9mbGlwcGVkLCBtX2lvU3VyZmFjZVdpZHRoLCBtX2lvU3VyZmFjZUhlaWdodCwgbV9p
b1N1cmZhY2VUZXh0dXJlSWQpKTsKLX0KLQotdm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6ZHVtcExh
eWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKLXsKLSAgICB3
cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCAicGx1Z2luIGxheWVyIHRleHR1cmUg
aWQ6ICIgPDwgbV90ZXh0dXJlSWQgPDwgIlxuIjsKLSAgICBDQ0xheWVySW1wbDo6ZHVtcExheWVy
UHJvcGVydGllcyh0cywgaW5kZW50KTsKLX0KLQotdm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6ZGlk
TG9zZUNvbnRleHQoKQotewotICAgIGlmIChtX2lvU3VyZmFjZUlkKSB7Ci0gICAgICAgIC8vIFdl
IGRvbid0IGhhdmUgYSB2YWxpZCB0ZXh0dXJlIElEIGluIHRoZSBuZXcgY29udGV4dDsgaG93ZXZl
ciwKLSAgICAgICAgLy8gdGhlIElPU3VyZmFjZSBpcyBzdGlsbCB2YWxpZC4KLSAgICAgICAgbV9p
b1N1cmZhY2VUZXh0dXJlSWQgPSAwOwotICAgICAgICBtX2lvU3VyZmFjZUNoYW5nZWQgPSB0cnVl
OwotICAgIH0KLX0KLQotdm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6c2V0SU9TdXJmYWNlUHJvcGVy
dGllcyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVpbnQzMl90IGlvU3VyZmFjZUlkKQotewotICAg
IGlmIChtX2lvU3VyZmFjZUlkICE9IGlvU3VyZmFjZUlkKQotICAgICAgICBtX2lvU3VyZmFjZUNo
YW5nZWQgPSB0cnVlOwotCi0gICAgbV9pb1N1cmZhY2VXaWR0aCA9IHdpZHRoOwotICAgIG1faW9T
dXJmYWNlSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1faW9TdXJmYWNlSWQgPSBpb1N1cmZhY2VJZDsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDk2OWIzMzYzNTE1ZTQ0Yjc4NTE2YzkxNDFlODM2MTQ1MTE2N2Nl
ZDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwu
aAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENDUGx1Z2lu
TGF5ZXJJbXBsX2gKLSNkZWZpbmUgQ0NQbHVnaW5MYXllckltcGxfaAotCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCi0jaW5jbHVkZSAiUHJvZ3JhbUJpbmRpbmcuaCIKLSNpbmNsdWRlICJTaGFkZXJD
aHJvbWl1bS5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgQ0NQbHVnaW5MYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUGx1Z2luTGF5ZXJJbXBsPiBjcmVhdGUo
aW50IGlkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1BsdWdpbkxheWVy
SW1wbChpZCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5DQ1BsdWdpbkxheWVySW1wbCgpOwotCi0g
ICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwotICAgIHZp
cnR1YWwgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImLCBjb25zdCBDQ1NoYXJlZFF1YWRT
dGF0ZSopOwotCi0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhT
dHJldGNoLCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYT4gUHJvZ3JhbTsKLSAgICB0eXBlZGVm
IFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFN0cmV0Y2gsIEZyYWdtZW50U2hhZGVy
UkdCQVRleEZsaXBBbHBoYT4gUHJvZ3JhbUZsaXA7Ci0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGlu
ZzxWZXJ0ZXhTaGFkZXJQb3NUZXhUcmFuc2Zvcm0sIEZyYWdtZW50U2hhZGVyUkdCQVRleFJlY3RB
bHBoYT4gVGV4UmVjdFByb2dyYW07Ci0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhT
aGFkZXJQb3NUZXhUcmFuc2Zvcm0sIEZyYWdtZW50U2hhZGVyUkdCQVRleFJlY3RGbGlwQWxwaGE+
IFRleFJlY3RQcm9ncmFtRmxpcDsKLQotICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0
aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
TG9zZUNvbnRleHQoKTsKLQotICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlkKSB7IG1f
dGV4dHVyZUlkID0gaWQ7IH0KLSAgICB2b2lkIHNldEZsaXBwZWQoYm9vbCBmbGlwcGVkKSB7IG1f
ZmxpcHBlZCA9IGZsaXBwZWQ7IH0KLSAgICB2b2lkIHNldFVWUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpIHsgbV91dlJlY3QgPSByZWN0OyB9Ci0gICAgdm9pZCBzZXRJT1N1cmZhY2VQcm9wZXJ0
aWVzKGludCB3aWR0aCwgaW50IGhlaWdodCwgdWludDMyX3QgaW9TdXJmYWNlSWQpOwotCi1wcml2
YXRlOgotICAgIGV4cGxpY2l0IENDUGx1Z2luTGF5ZXJJbXBsKGludCk7Ci0KLSAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIlBsdWdpbkxh
eWVyIjsgfQotCi0gICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7Ci0gICAgYm9vbCBtX2ZsaXBwZWQ7
Ci0gICAgRmxvYXRSZWN0IG1fdXZSZWN0OwotICAgIHVpbnQzMl90IG1faW9TdXJmYWNlSWQ7Ci0g
ICAgaW50IG1faW9TdXJmYWNlV2lkdGg7Ci0gICAgaW50IG1faW9TdXJmYWNlSGVpZ2h0OwotCi0g
ICAgLy8gSW50ZXJuYWxzIGZvciB0aGUgSU9TdXJmYWNlIHJlbmRlcmluZyBwYXRoLgotICAgIGJv
b2wgbV9pb1N1cmZhY2VDaGFuZ2VkOwotICAgIHVuc2lnbmVkIG1faW9TdXJmYWNlVGV4dHVyZUlk
OwotfTsKLQotfQotCi0jZW5kaWYgLy8gQ0NQbHVnaW5MYXllckltcGxfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlRHJh
d1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUZXh0dXJlRHJhd1F1YWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0MjM4Yjc5NGQxYjQzMmYwYzdiZTlj
YWQ2NWViZTBiODAwODNlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVEcmF3UXVhZC5jcHAKQEAgLTAsMCAr
MSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDVGV4
dHVyZURyYXdRdWFkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDQ1Rl
eHR1cmVEcmF3UXVhZD4gQ0NUZXh0dXJlRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1
YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgdW5zaWdu
ZWQgdGV4dHVyZUlkLCBib29sIGhhc0FscGhhLCBib29sIHByZW11bHRpcGxpZWRBbHBoYSwgY29u
c3QgRmxvYXRSZWN0JiB1dlJlY3QsIGJvb2wgZmxpcHBlZCwgY29uc3QgSW50U2l6ZSYgaW9TdXJm
YWNlU2l6ZSwgdW5zaWduZWQgaW9TdXJmYWNlVGV4dHVyZUlkKQoreworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ0NUZXh0dXJlRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgdGV4
dHVyZUlkLCBoYXNBbHBoYSwgcHJlbXVsdGlwbGllZEFscGhhLCB1dlJlY3QsIGZsaXBwZWQsIGlv
U3VyZmFjZVNpemUsIGlvU3VyZmFjZVRleHR1cmVJZCkpOworfQorCitDQ1RleHR1cmVEcmF3UXVh
ZDo6Q0NUZXh0dXJlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRT
dGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIHVuc2lnbmVkIHRleHR1cmVJZCwgYm9vbCBo
YXNBbHBoYSwgYm9vbCBwcmVtdWx0aXBsaWVkQWxwaGEsIGNvbnN0IEZsb2F0UmVjdCYgdXZSZWN0
LCBib29sIGZsaXBwZWQsIGNvbnN0IEludFNpemUmIGlvU3VyZmFjZVNpemUsIHVuc2lnbmVkIGlv
U3VyZmFjZVRleHR1cmVJZCkKKyAgICA6IENDRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBDQ0Ry
YXdRdWFkOjpUZXh0dXJlQ29udGVudCwgcXVhZFJlY3QpCisgICAgLCBtX3RleHR1cmVJZCh0ZXh0
dXJlSWQpCisgICAgLCBtX2hhc0FscGhhKGhhc0FscGhhKQorICAgICwgbV9wcmVtdWx0aXBsaWVk
QWxwaGEocHJlbXVsdGlwbGllZEFscGhhKQorICAgICwgbV91dlJlY3QodXZSZWN0KQorICAgICwg
bV9mbGlwcGVkKGZsaXBwZWQpCisgICAgLCBtX2lvU3VyZmFjZVNpemUoaW9TdXJmYWNlU2l6ZSkK
KyAgICAsIG1faW9TdXJmYWNlVGV4dHVyZUlkKGlvU3VyZmFjZVRleHR1cmVJZCkKK3sKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUZXh0dXJlRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGV4dHVyZURyYXdRdWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWE4MzE1NzFiYWQ1
MGRjODk2MTEwYmQ4NWViODg0YzM4MzgyYzI5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZURyYXdRdWFkLmgK
QEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NUZXh0dXJlRHJhd1F1YWRfaAorI2Rl
ZmluZSBDQ1RleHR1cmVEcmF3UXVhZF9oCisKKyNpbmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgiCisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDQ0xheWVySW1wbDsKK2NsYXNzIENDVGV4dHVyZURyYXdRdWFkIDogcHVibGljIENDRHJhd1F1
YWQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDVGV4dHVyZURyYXdRdWFkKTsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RleHR1cmVEcmF3UXVhZD4gY3JlYXRlKGNvbnN0
IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIHVuc2lnbmVkIHRleHR1cmVJZCwg
Ym9vbCBoYXNBbHBoYSwgYm9vbCBwcmVtdWx0aXBsaWVkQWxwaGEsIGNvbnN0IEZsb2F0UmVjdCYg
dXZSZWN0LCBib29sIGZsaXBwZWQsIGNvbnN0IEludFNpemUmIGlvU3VyZmFjZVNpemUsIHVuc2ln
bmVkIGlvU3VyZmFjZVRleHR1cmVJZCk7CisKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25z
dCB7IHJldHVybiAgbV90ZXh0dXJlSWQ7IH0KKyAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyBy
ZXR1cm4gIG1faGFzQWxwaGE7IH0KKyAgICBib29sIHByZW11bHRpcGxpZWRBbHBoYSgpIGNvbnN0
IHsgcmV0dXJuICBtX3ByZW11bHRpcGxpZWRBbHBoYTsgfQorICAgIEZsb2F0UmVjdCB1dlJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3V2UmVjdDsgfQorICAgIGJvb2wgZmxpcHBlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZmxpcHBlZDsgfQorCisgICAgY29uc3QgSW50U2l6ZSYgaW9TdXJmYWNlU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW9TdXJmYWNlU2l6ZTsgfQorICAgIHVuc2lnbmVkIGlvU3VyZmFj
ZVRleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1faW9TdXJmYWNlVGV4dHVyZUlkOyB9CisgCitw
cml2YXRlOgorICAgIENDVGV4dHVyZURyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwg
Y29uc3QgSW50UmVjdCYsIHVuc2lnbmVkIHRleHR1cmVfaWQsIGJvb2wgaGFzQWxwaGEsIGJvb2wg
cHJlbXVsdGlwbGllZEFscGhhLCBjb25zdCBGbG9hdFJlY3QmIHV2UmVjdCwgYm9vbCBmbGlwcGVk
LCBjb25zdCBJbnRTaXplJiBpb1N1cmZhY2VTaXplLCB1bnNpZ25lZCBpb1N1cmZhY2VUZXh0dXJl
SWQpOworICAgIAorICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOworICAgIGJvb2wgbV9oYXNBbHBo
YTsKKyAgICBib29sIG1fcHJlbXVsdGlwbGllZEFscGhhOworICAgIEZsb2F0UmVjdCBtX3V2UmVj
dDsKKyAgICBib29sIG1fZmxpcHBlZDsKKyAgICBJbnRTaXplIG1faW9TdXJmYWNlU2l6ZTsKKyAg
ICB1bnNpZ25lZCBtX2lvU3VyZmFjZVRleHR1cmVJZDsKK307CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rl
eHR1cmVMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlTGF5ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMDZmNzJmNmYyNDli
NjFjNzFhYTNkYWQzMzY0MzFhOGIyZTYyYjNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlTGF5ZXJJbXBsLmNw
cApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgImNjL0NDVGV4dHVyZUxheWVy
SW1wbC5oIgorCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgor
I2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIuaCIKKyNp
bmNsdWRlICJjYy9DQ1RleHR1cmVEcmF3UXVhZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0NDVGV4dHVyZUxheWVySW1wbDo6Q0NUZXh0dXJlTGF5ZXJJbXBsKGludCBpZCkKKyAgICA6IEND
TGF5ZXJJbXBsKGlkKQorICAgICwgbV90ZXh0dXJlSWQoMCkKKyAgICAsIG1faGFzQWxwaGEodHJ1
ZSkKKyAgICAsIG1fcHJlbXVsdGlwbGllZEFscGhhKHRydWUpCisgICAgLCBtX2ZsaXBwZWQodHJ1
ZSkKKyAgICAsIG1fdXZSZWN0KDAsIDAsIDEsIDEpCisgICAgLCBtX2lvU3VyZmFjZUlkKDApCisg
ICAgLCBtX2lvU3VyZmFjZUNoYW5nZWQoZmFsc2UpCisgICAgLCBtX2lvU3VyZmFjZVRleHR1cmVJ
ZCgwKQoreworfQorCitDQ1RleHR1cmVMYXllckltcGw6On5DQ1RleHR1cmVMYXllckltcGwoKQor
eworICAgIC8vIEZJWE1FOiBpdCBzZWVtcyB0aGVyZSBpcyBubyBsYXllciByZW5kZXJlciAvIEdy
YXBoaWNzQ29udGV4dDNEIGF2YWlsYWJsZSBoZXJlLiBJZGVhbGx5IHdlCisgICAgLy8gd291bGQg
bGlrZSB0byBkZWxldGUgbV9pb1N1cmZhY2VUZXh0dXJlSWQuCisgICAgbV9pb1N1cmZhY2VUZXh0
dXJlSWQgPSAwOworfQorCit2b2lkIENDVGV4dHVyZUxheWVySW1wbDo6d2lsbERyYXcoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQoreworICAgIGlmIChtX2lvU3VyZmFjZUNo
YW5nZWQpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRl
cmVyLT5jb250ZXh0KCk7CisgICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25z
ID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0LT5nZXRFeHRlbnNp
b25zKCkpOworICAgICAgICBBU1NFUlQoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0NIUk9NSVVN
X2lvc3VyZmFjZSIpKTsKKyAgICAgICAgQVNTRVJUKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9B
UkJfdGV4dHVyZV9yZWN0YW5nbGUiKSk7CisKKyAgICAgICAgaWYgKCFtX2lvU3VyZmFjZVRleHR1
cmVJZCkKKyAgICAgICAgICAgIG1faW9TdXJmYWNlVGV4dHVyZUlkID0gY29udGV4dC0+Y3JlYXRl
VGV4dHVyZSgpOworCisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAgICAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+YmluZFRleHR1cmUoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIG1f
aW9TdXJmYWNlVGV4dHVyZUlkKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7
CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEV4dGVuc2lvbnMz
RDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdf
RklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAgICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVf
QVJCLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNE
OjpDTEFNUF9UT19FREdFKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJh
bWV0ZXJpKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7
CisgICAgICAgIGV4dGVuc2lvbnMtPnRleEltYWdlSU9TdXJmYWNlMkRDSFJPTUlVTShFeHRlbnNp
b25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW9TdXJmYWNlU2l6ZS53aWR0aCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pb1N1cmZhY2VTaXplLmhl
aWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9pb1N1cmZhY2VJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDApOworICAgICAgICAvLyBEbyBub3QgY2hlY2sgZm9yIGVycm9yIGNvbmRpdGlvbnMu
IHRleEltYWdlSU9TdXJmYWNlMkRDSFJPTUlVTSBpcyBzdXBwb3NlZCB0byBob2xkIG9uIHRvCisg
ICAgICAgIC8vIHRoZSBsYXN0IGdvb2QgSU9TdXJmYWNlIGlmIHRoZSBuZXcgb25lIGlzIGFscmVh
ZHkgY2xvc2VkLiBUaGlzIGlzIG9ubHkgYSBwb3NzaWJpbGl0eQorICAgICAgICAvLyBkdXJpbmcg
bGl2ZSByZXNpemluZyBvZiBwbHVnaW5zLiBIb3dldmVyLCBpdCBzZWVtcyB0aGF0IHRoaXMgaXMg
bm90IHN1ZmZpY2llbnQgdG8KKyAgICAgICAgLy8gY29tcGxldGVseSBndWFyZCBhZ2FpbnN0IGdh
cmJhZ2UgYmVpbmcgZHJhd24uIElmIHRoaXMgaXMgZm91bmQgdG8gYmUgYSBzaWduaWZpY2FudCBp
c3N1ZSwKKyAgICAgICAgLy8gaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBleHBsaWNpdGx5IHRlbGwg
dGhlIGVtYmVkZGVyIHdoZW4gdG8gZnJlZSB0aGUgc3VyZmFjZXMgaXQgaGFzCisgICAgICAgIC8v
IGFsbG9jYXRlZC4KKyAgICAgICAgbV9pb1N1cmZhY2VDaGFuZ2VkID0gZmFsc2U7CisgICAgfQor
fQorCit2b2lkIENDVGV4dHVyZUxheWVySW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBx
dWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSkKK3sKKyAg
ICBJbnRSZWN0IHF1YWRSZWN0KEludFBvaW50KCksIGJvdW5kcygpKTsKKyAgICBxdWFkTGlzdC5h
cHBlbmQoQ0NUZXh0dXJlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0
LCBtX3RleHR1cmVJZCwgbV9oYXNBbHBoYSwgbV9wcmVtdWx0aXBsaWVkQWxwaGEsIG1fdXZSZWN0
LCBtX2ZsaXBwZWQsIG1faW9TdXJmYWNlU2l6ZSwgbV9pb1N1cmZhY2VUZXh0dXJlSWQpKTsKK30K
Kwordm9pZCBDQ1RleHR1cmVMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVh
bSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Cit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7
CisgICAgdHMgPDwgInRleHR1cmUgbGF5ZXIgdGV4dHVyZSBpZDogIiA8PCBtX3RleHR1cmVJZCA8
PCAiIHByZW11bHRpcGxpZWQ6ICIgPDwgbV9wcmVtdWx0aXBsaWVkQWxwaGEgPDwgIlxuIjsKKyAg
ICBDQ0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KTsKK30KKwordm9p
ZCBDQ1RleHR1cmVMYXllckltcGw6OmRpZExvc2VDb250ZXh0KCkKK3sKKyAgICBpZiAobV9pb1N1
cmZhY2VJZCkgeworICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEgdmFsaWQgdGV4dHVyZSBJRCBp
biB0aGUgbmV3IGNvbnRleHQ7IGhvd2V2ZXIsCisgICAgICAgIC8vIHRoZSBJT1N1cmZhY2UgaXMg
c3RpbGwgdmFsaWQuCisgICAgICAgIG1faW9TdXJmYWNlVGV4dHVyZUlkID0gMDsKKyAgICAgICAg
bV9pb1N1cmZhY2VDaGFuZ2VkID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NUZXh0dXJlTGF5
ZXJJbXBsOjpzZXRJT1N1cmZhY2VQcm9wZXJ0aWVzKGNvbnN0IEludFNpemUmIHNpemUsIHVuc2ln
bmVkIGlvU3VyZmFjZUlkKQoreworICAgIGlmIChtX2lvU3VyZmFjZUlkICE9IGlvU3VyZmFjZUlk
KQorICAgICAgICBtX2lvU3VyZmFjZUNoYW5nZWQgPSB0cnVlOworCisgICAgbV9pb1N1cmZhY2VT
aXplID0gc2l6ZTsKKyAgICBtX2lvU3VyZmFjZUlkID0gaW9TdXJmYWNlSWQ7Cit9Cit9CisKKyNl
bmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVMYXllckltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVy
ZUxheWVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4MWMzNjE2YWVkYjY0NWEyMWE3MzUwYjkxYmQ5M2Q2
MDdmOGJjNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVMYXllckltcGwuaApAQCAtMCwwICsxLDg1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBDQ1RleHR1cmVMYXllckltcGxfaAorI2RlZmluZSBDQ1RleHR1cmVMYXll
ckltcGxfaAorCisjaW5jbHVkZSAiUHJvZ3JhbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJTaGFkZXJD
aHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQ0NUZXh0dXJlTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RleHR1cmVMYXllckltcGw+IGNyZWF0
ZShpbnQgaWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDVGV4dHVyZUxh
eWVySW1wbChpZCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5DQ1RleHR1cmVMYXllckltcGwoKTsK
KworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImLCBjb25zdCBDQ1No
YXJlZFF1YWRTdGF0ZSopOworCisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFk
ZXJQb3NUZXgsIEZyYWdtZW50U2hhZGVyUkdCQVRleEZsaXBBbHBoYT4gUHJvZ3JhbUZsaXA7Cisg
ICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhTdHJldGNoLCBGcmFn
bWVudFNoYWRlclJHQkFUZXhBbHBoYT4gUHJvZ3JhbVN0cmV0Y2g7CisgICAgdHlwZWRlZiBQcm9n
cmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhTdHJldGNoLCBGcmFnbWVudFNoYWRlclJHQkFU
ZXhGbGlwQWxwaGE+IFByb2dyYW1TdHJldGNoRmxpcDsKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5k
aW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9ybSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4UmVj
dEFscGhhPiBUZXhSZWN0UHJvZ3JhbTsKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRl
eFNoYWRlclBvc1RleFRyYW5zZm9ybSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4UmVjdEZsaXBBbHBo
YT4gVGV4UmVjdFByb2dyYW1GbGlwOworCisgICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KExheWVy
UmVuZGVyZXJDaHJvbWl1bSopOworICAgIHZpcnR1YWwgdm9pZCBkaWRMb3NlQ29udGV4dCgpOwor
CisgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBp
bmRlbnQpIGNvbnN0OworCisgICAgdW5zaWduZWQgdGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0dXJlSWQ7IH0KKyAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBtX3Rl
eHR1cmVJZCA9IGlkOyB9CisgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGhhc0FscGhhKSB7IG1f
aGFzQWxwaGEgPSBoYXNBbHBoYTsgfQorICAgIHZvaWQgc2V0UHJlbXVsdGlwbGllZEFscGhhKGJv
b2wgcHJlbXVsdGlwbGllZEFscGhhKSB7IG1fcHJlbXVsdGlwbGllZEFscGhhID0gcHJlbXVsdGlw
bGllZEFscGhhOyB9CisgICAgdm9pZCBzZXRGbGlwcGVkKGJvb2wgZmxpcHBlZCkgeyBtX2ZsaXBw
ZWQgPSBmbGlwcGVkOyB9CisgICAgdm9pZCBzZXRVVlJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KSB7IG1fdXZSZWN0ID0gcmVjdDsgfQorICAgIHZvaWQgc2V0SU9TdXJmYWNlUHJvcGVydGllcyhj
b25zdCBJbnRTaXplJiwgdW5zaWduZWQgaW9TdXJmYWNlSWQpOworCisKK3ByaXZhdGU6CisgICAg
ZXhwbGljaXQgQ0NUZXh0dXJlTGF5ZXJJbXBsKGludCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIlRleHR1cmVMYXllciI7IH0K
KworICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOworICAgIGJvb2wgbV9oYXNBbHBoYTsKKyAgICBi
b29sIG1fcHJlbXVsdGlwbGllZEFscGhhOworICAgIGJvb2wgbV9mbGlwcGVkOworICAgIEZsb2F0
UmVjdCBtX3V2UmVjdDsKKworICAgIC8vIEludGVybmFscyBmb3IgSU9TdXJmYWNlLWJhY2tlZCB0
ZXh0dXJlcy4KKyAgICB1bnNpZ25lZCBtX2lvU3VyZmFjZUlkOworICAgIEludFNpemUgbV9pb1N1
cmZhY2VTaXplOworICAgIGJvb2wgbV9pb1N1cmZhY2VDaGFuZ2VkOworICAgIHVuc2lnbmVkIG1f
aW9TdXJmYWNlVGV4dHVyZUlkOworfTsKKworfQorCisjZW5kaWYgLy8gQ0NUZXh0dXJlTGF5ZXJJ
bXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRM
YXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZh
czJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDZhM2RiMDJhN2I1YmRhYWZjYWVkYzFhZDZi
ZTgzYzIwYzc0NzBjYTUuLjNhMDcyN2IzNzU1YmEwNjBiMjljOWFjMTkxZjg0ZGZiMTRlYTcyZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNo
cm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMy
RExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMzQsOCArMzQsOCBAQAogI2luY2x1ZGUgIlRleHR1
cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIldlYktp
dC5oIgotI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NT
aW5nbGVUaHJlYWRQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDVGV4dHVyZUxheWVySW1wbC5oIgog
I2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJL
aXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJUaHJlYWQuaCIKQEAg
LTE2MywxNSArMTYzLDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIERlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZCBzY29wZWRJbXBsVGhyZWFkOwogCiAgICAgICAgICAgICBPd25QdHI8Q0NMYXll
ckltcGw+IGxheWVySW1wbCA9IGNhbnZhcy0+Y3JlYXRlQ0NMYXllckltcGwoKTsKLSAgICAgICAg
ICAgIEVYUEVDVF9FUSgwdSwgc3RhdGljX2Nhc3Q8Q0NDYW52YXNMYXllckltcGwqPihsYXllcklt
cGwuZ2V0KCkpLT50ZXh0dXJlSWQoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMHUsIHN0YXRp
Y19jYXN0PENDVGV4dHVyZUxheWVySW1wbCo+KGxheWVySW1wbC5nZXQoKSktPnRleHR1cmVJZCgp
KTsKIAogICAgICAgICAgICAgY2FudmFzLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGltcGxD
b250ZXh0LmdldCgpLCB1cGRhdGVyKTsKICAgICAgICAgICAgIGNhbnZhcy0+cHVzaFByb3BlcnRp
ZXNUbyhsYXllckltcGwuZ2V0KCkpOwogCiAgICAgICAgICAgICBpZiAodGhyZWFkZWQpCi0gICAg
ICAgICAgICAgICAgRVhQRUNUX0VRKGZyb250VGV4dHVyZUlkLCBzdGF0aWNfY2FzdDxDQ0NhbnZh
c0xheWVySW1wbCo+KGxheWVySW1wbC5nZXQoKSktPnRleHR1cmVJZCgpKTsKKyAgICAgICAgICAg
ICAgICBFWFBFQ1RfRVEoZnJvbnRUZXh0dXJlSWQsIHN0YXRpY19jYXN0PENDVGV4dHVyZUxheWVy
SW1wbCo+KGxheWVySW1wbC5nZXQoKSktPnRleHR1cmVJZCgpKTsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoYmFja1RleHR1cmVJZCwgc3RhdGljX2Nhc3Q8Q0ND
YW52YXNMYXllckltcGwqPihsYXllckltcGwuZ2V0KCkpLT50ZXh0dXJlSWQoKSk7CisgICAgICAg
ICAgICAgICAgRVhQRUNUX0VRKGJhY2tUZXh0dXJlSWQsIHN0YXRpY19jYXN0PENDVGV4dHVyZUxh
eWVySW1wbCo+KGxheWVySW1wbC5nZXQoKSktPnRleHR1cmVJZCgpKTsKICAgICAgICAgfQogICAg
ICAgICBjYW52YXMuY2xlYXIoKTsKICAgICAgICAgbGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0
dXJlTWFuYWdlcigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KDApOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132439</attachid>
            <date>2012-03-16 20:03:25 -0700</date>
            <delta_ts>2012-03-16 21:15:39 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-81286-20120316200324.patch</filename>
            <type>text/plain</type>
            <size>87451</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzIxMWYyZTliMTEwZGUz
MGQ0MTFlYTQwZjc4YTY0ZDk0YTYyYTBkNy4uYzEzZmM2YTNhMTBlMjVkNGVkYTZlNjI4ZTg5M2Ix
NDlhOTFlMWE1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEyLTAzLTE2ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBV
bmlmeSB0aGUgZHJhd2luZyBsb2dpYyBmb3IgZGlmZmVyZW50IGxheWVyIHR5cGVzIHRoYXQgb3V0
cHV0IHRleHR1cmVzIHRvIHRoZSBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTI4NgorCisgICAgICAgIFJldmlld2VkIGJ5IEFkcmll
bm5lIFdhbGtlci4KKworICAgICAgICBDdXJyZW50bHkgY2FudmFzIDJkLCB3ZWJnbCwgYW5kIHBs
dWdpbiBsYXllcnMgYWxsIGV4cG9ydCBhIHRleHR1cmUgdG8gdGhlIGNvbXBvc2l0b3IgdGhhdCB0
aGVuIG5lZWRzIHRvIGJlCisgICAgICAgIGRyYXduLiAgVGhlcmUgYXJlIGEgc21hbGwgc2V0IG9m
IG9wZXJhdGlvbnMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byB0aGUgdGV4dHVyZSBhdCBkcmF3IHRp
bWUgLSBkbyBhIFkgZmxpcCwKKyAgICAgICAgc3RyZXRjaCBhIHN1YnJlY3QgdG8gdGhlIGxheWVy
IGJvdW5kcywgc2V0IHRoZSBibGVuZCBtb2RlIGV0YyBidXQgdGhleSBhcmUgZnVuZGFtZW50YWxs
eSB0aGUgc2FtZSB0aGluZy4gVGhpcworICAgICAgICBjb2xsYXBzZXMgdGhlIG5lYXJseS1yZWR1
bmRhbnQgY29kZSBpbnRvIGEgc2luZ2xlIGltcGwtc2lkZSBsYXllciB0eXBlIGZvciBhIHRleHR1
cmUtYmFja2VkIGxheWVyIHRoYXQgY2FuCisgICAgICAgIGhhbmRsZSB0aGUgdW5pb24gb2YgdGhl
IGJpdHMgbmVlZGVkIGZvciBlYWNoIGxheWVyIHR5cGUuCisKKyAgICAgICAgQ2FudmFzIDJkLCBX
ZWJHTCBhbmQgcGx1Z2luIGNvbXBvc2l0ZWQgcmVuZGVyaW5nIGFyZSBhbGwgY292ZXJlZCBieSBs
YXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1w
bCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4U3RyZXRjaFRleHR1cmVQcm9ncmFtQmluZGlu
Zzo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleFRyYW5zZm9ybVRleHR1cmVQcm9ncmFtQmlu
ZGluZzo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1RleHR1cmVRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dGV4dHVyZUxheWVyUHJvZ3JhbUZsaXApOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp0ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRleHR1cmVMYXllclByb2dyYW1TdHJldGNoRmxpcCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRleHR1cmVMYXllclRl
eFJlY3RQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW1GbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6UGx1Z2luTGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpzZXRJT1N1cmZhY2VQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OnB1c2hQcm9w
ZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxh
eWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFBsdWdpbkxheWVyQ2hyb21pdW0pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzRHJhd1F1YWQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2Fu
dmFzRHJhd1F1YWQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDRHJhd1F1YWQ6OnRvVGV4dHVyZURyYXdRdWFkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENDRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZURyYXdRdWFkLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQu
Y3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVEcmF3
UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZURyYXdRdWFkOjpDQ1Rl
eHR1cmVEcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUZXh0dXJlRHJhd1F1YWQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQuaC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoQ0NUZXh0dXJlRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
ZXh0dXJlRHJhd1F1YWQ6OnRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVE
cmF3UXVhZDo6aGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlRHJhd1F1YWQ6
OnByZW11bHRpcGxpZWRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVEcmF3UXVh
ZDo6dXZSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZURyYXdRdWFkOjpmbGlwcGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZURyYXdRdWFkOjppb1N1cmZhY2VTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZURyYXdRdWFkOjppb1N1cmZhY2VUZXh0dXJlSWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZUxheWVy
SW1wbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZUxheWVySW1wbDo6Q0NUZXh0dXJlTGF5ZXJJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZUxheWVySW1wbDo6fkNDVGV4dHVyZUxheWVySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVMYXllckltcGw6OndpbGxEcmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZUxheWVySW1wbDo6YXBwZW5kUXVhZHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUZXh0dXJlTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZUxheWVySW1wbDo6ZGlkTG9zZUNvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlTGF5ZXJJbXBsOjpzZXRJT1N1cmZhY2VQcm9wZXJ0aWVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVMYXll
ckltcGwuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKENDVGV4dHVyZUxheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVMYXll
ckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVMYXllckltcGw6OnRl
eHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVMYXllckltcGw6OnNldFRleHR1
cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVMYXllckltcGw6OnNldEhhc0FscGhh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZUxheWVySW1wbDo6c2V0UHJlbXVsdGlwbGll
ZEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGV4dHVyZUxheWVySW1wbDo6c2V0RmxpcHBl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVMYXllckltcGw6OnNldFVWUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVMYXllckltcGw6OmxheWVyVHlwZUFzU3RyaW5nKToK
KwogMjAxMi0wMy0xNiAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0NhaXJvXSBUZXh0IGV4dGVudCBvZiBzaGFkb3dlZCB0ZXh0IGlzIGNhbGN1bGF0
ZWQgaW5jb3JyZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNTYwNmZiMDlhOWY0
OTk2ODc3YzVhZmU2ZTFlMWRjYzY1OWNmM2Q3Ny4uMzU3OTFiMmY4ODA3YWE1ZGQ5NTBjMDFjNTRl
ODY4ZmNkNGFhNjFmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBA
QAorMjAxMi0wMy0xNiAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFtjaHJvbWl1bV0gVW5pZnkgdGhlIGRyYXdpbmcgbG9naWMgZm9yIGRpZmZlcmVudCBs
YXllciB0eXBlcyB0aGF0IG91dHB1dCB0ZXh0dXJlcyB0byB0aGUgY29tcG9zaXRvcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODEyODYKKworICAgICAg
ICBSZXZpZXdlZCBieSBBZHJpZW5uZSBXYWxrZXIuCisKKyAgICAgICAgKiB0ZXN0cy9DYW52YXMy
RExheWVyQ2hyb21pdW1UZXN0LmNwcDoKKwogMjAxMi0wMy0xNSAgRGFuaWVsIENoZW5nICA8ZGNo
ZW5nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFJlZmFjdG9yIENsaXBib2Fy
ZENocm9taXVtIGFuZCBEYXRhVHJhbnNmZXJJdGVtTGlzdC9EYXRhVHJhbnNmZXJJdGVtIHRvIHN1
cHBvcnQgSFRNTCBzcGVjCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYmM4NzM2NTQ2ZmM3YjNkNWFkYmUx
ZDE1N2YwMTAzMjczNTY1MWFjNC4uYTVlODQ1ODg5YTlmYjAyNTY0NWNlOGI4NjVlOTM1N2M2NWU5
ZmNhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzQ2NCwxMCArMzQ2NCw2IEBACiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkV2ZW50
cy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5p
bWF0aW9uRXZlbnRzLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQ2FudmFzRHJhd1F1YWQuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0RyYXdRdWFkLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2Vy
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1h
Z2VUcmFja2VyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRGVidWdCb3JkZXJEcmF3UXVhZC5jcHAnLApAQCAtMzQ5OSwxMCArMzQ5NSwxMCBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGlu
Z0RhdGEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVGlsaW5nRGF0YS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1vbi5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lv
blRyYWNrZXIuY3BwJywKQEAgLTM1MTEsMTAgKzM1MDcsNiBAQAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGFnZVNjYWxlQW5pbWF0aW9uLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQYWdlU2Nh
bGVBbmltYXRpb24uaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQbHVnaW5EcmF3UXVhZC5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwJywKLSAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3Bw
JywKQEAgLTM1NDIsMTMgKzM1MzQsMTcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXll
ckltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
ZXh0dXJlRHJhd1F1YWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RleHR1cmVEcmF3UXVhZC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVMYXllckltcGwuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVMYXllckltcGwuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVy
ZVVwZGF0ZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaWxlRHJhd1F1YWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RpbGVEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RpbWluZ0Z1bmN0aW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaW1pbmdGdW5jdGlvbi5oJywKLSAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2su
aCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAppbmRleCA1YzBhZjJjZmI5
M2U0ZDAwZjdiOTA2ZDU0Y2JmMGJjMjdiNGM1NDI1Li43MDAzODI2ZDcwZTE4YzMyYWFkYjE4NDYz
MjEyMmRiNWIyMjEyNzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAK
QEAgLTM0LDEyICszNCwxMiBAQAogCiAjaW5jbHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgi
CiAKLSNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1wbC5oIgotI2luY2x1ZGUgImNjL0NDTGF5
ZXJUcmVlSG9zdC5oIgotI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRl
ICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiIC8vIEZvciB0aGUgR0xDKCkgbWFj
cm8KKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ1RleHR1
cmVMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCiAKICNpbmNs
dWRlICJTa0NhbnZhcy5oIgogCkBAIC0xNTMsMTEgKzE1MywxMSBAQCB2b2lkIENhbnZhczJETGF5
ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiB7CiAgICAg
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhsYXllcik7CiAKLSAgICBDQ0Nh
bnZhc0xheWVySW1wbCogY2FudmFzTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ0NhbnZhc0xheWVySW1w
bCo+KGxheWVyKTsKKyAgICBDQ1RleHR1cmVMYXllckltcGwqIHRleHR1cmVMYXllciA9IHN0YXRp
Y19jYXN0PENDVGV4dHVyZUxheWVySW1wbCo+KGxheWVyKTsKICAgICBpZiAobV91c2VEb3VibGVC
dWZmZXJpbmcpCi0gICAgICAgIGNhbnZhc0xheWVyLT5zZXRUZXh0dXJlSWQobV9mcm9udFRleHR1
cmUtPnRleHR1cmVJZCgpKTsKKyAgICAgICAgdGV4dHVyZUxheWVyLT5zZXRUZXh0dXJlSWQobV9m
cm9udFRleHR1cmUtPnRleHR1cmVJZCgpKTsKICAgICBlbHNlCi0gICAgICAgIGNhbnZhc0xheWVy
LT5zZXRUZXh0dXJlSWQobV9iYWNrVGV4dHVyZUlkKTsKKyAgICAgICAgdGV4dHVyZUxheWVyLT5z
ZXRUZXh0dXJlSWQobV9iYWNrVGV4dHVyZUlkKTsKIH0KIAogdm9pZCBDYW52YXMyRExheWVyQ2hy
b21pdW06OnVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hy
b21pdW0uY3BwCmluZGV4IGQ1MzM2OTlhZjlmMWY3YWEwODUyOGQ0MWY4YjZiY2MyNjBiMDM1MzEu
LjRiNjY1MjM4NGI5Y2JlN2RjNzQ0NTA4MGNmZTBmODBjNDBiMWQxZDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhc0xheWVyQ2hyb21pdW0uY3BwCkBAIC0zNCw5ICszNCw3IEBACiAKICNpbmNsdWRlICJDYW52
YXNMYXllckNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgiCisjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlTGF5ZXJJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDcsNyArNDUsNyBAQCBDYW52YXNMYXllckNocm9taXVtOjpDYW52YXNMYXll
ckNocm9taXVtKCkKIAogUGFzc093blB0cjxDQ0xheWVySW1wbD4gQ2FudmFzTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ0NhbnZhc0xheWVySW1wbDo6
Y3JlYXRlKG1fbGF5ZXJJZCk7CisgICAgcmV0dXJuIENDVGV4dHVyZUxheWVySW1wbDo6Y3JlYXRl
KG1fbGF5ZXJJZCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CmluZGV4IGFjZmQ3NzIzMmIyZDQ0Y2E0MGY5ZWU3MmYxMWVlY2VmMGZjODUzOTMuLjI3YjNlZGU1
MTMyNTdhN2E5ZjQ2YjlhZTI0OTIxOTZhNmM5NjM5OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApAQCAtMzQsOCArMzQsNiBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKIAotI2luY2x1
ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkNhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkdlb21ldHJ5QmluZGluZy5oIgpAQCAtNTIsMTYgKzUw
LDE1IEBACiAjaW5jbHVkZSAiVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
VHJlZVN5bmNocm9uaXplci5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgotI2lu
Y2x1ZGUgImNjL0NDQ2FudmFzRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNr
ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgot
I2luY2x1ZGUgImNjL0NDUGx1Z2luRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5Lmgi
CiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgorI2lu
Y2x1ZGUgImNjL0NDVGV4dHVyZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaWxlRHJhd1F1
YWQuaCIKICNpbmNsdWRlICJjYy9DQ1ZpZGVvRHJhd1F1YWQuaCIKICNpbmNsdWRlICJFeHRlbnNp
b25zM0QuaCIKQEAgLTQ0OCwxOCArNDQ1LDE1IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKiBxdWFkLCBjb25zdCBGbG9hdFJlY3QmIHN1CiAg
ICAgY2FzZSBDQ0RyYXdRdWFkOjpTb2xpZENvbG9yOgogICAgICAgICBkcmF3U29saWRDb2xvclF1
YWQocXVhZC0+dG9Tb2xpZENvbG9yRHJhd1F1YWQoKSk7CiAgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ0NEcmF3UXVhZDo6VGV4dHVyZUNvbnRlbnQ6CisgICAgICAgIGRyYXdUZXh0dXJlUXVhZChx
dWFkLT50b1RleHR1cmVEcmF3UXVhZCgpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDQ0Ry
YXdRdWFkOjpUaWxlZENvbnRlbnQ6CiAgICAgICAgIGRyYXdUaWxlUXVhZChxdWFkLT50b1RpbGVE
cmF3UXVhZCgpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDQ0RyYXdRdWFkOjpDYW52YXND
b250ZW50OgotICAgICAgICBkcmF3Q2FudmFzUXVhZChxdWFkLT50b0NhbnZhc0RyYXdRdWFkKCkp
OwotICAgICAgICBicmVhazsKICAgICBjYXNlIENDRHJhd1F1YWQ6OlZpZGVvQ29udGVudDoKICAg
ICAgICAgZHJhd1ZpZGVvUXVhZChxdWFkLT50b1ZpZGVvRHJhd1F1YWQoKSk7CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ0NEcmF3UXVhZDo6UGx1Z2luQ29udGVudDoKLSAgICAgICAgZHJhd1Bs
dWdpblF1YWQocXVhZC0+dG9QbHVnaW5EcmF3UXVhZCgpKTsKLSAgICAgICAgYnJlYWs7CiAgICAg
fQogfQogCkBAIC02OTYsMzEgKzY5MCw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3VGlsZVF1YWQoY29uc3QgQ0NUaWxlRHJhd1F1YWQqIHF1YWQpCiAgICAgZHJhd1RleHR1cmVk
UXVhZChxdWFkLT5xdWFkVHJhbnNmb3JtKCksIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0Lmhl
aWdodCgpLCBxdWFkLT5vcGFjaXR5KCksIGxvY2FsUXVhZCwgdW5pZm9ybXMubWF0cml4TG9jYXRp
b24sIHVuaWZvcm1zLmFscGhhTG9jYXRpb24sIHVuaWZvcm1zLnBvaW50TG9jYXRpb24pOwogfQog
Ci12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0NhbnZhc1F1YWQoY29uc3QgQ0NDYW52
YXNEcmF3UXVhZCogcXVhZCkKLXsKLSAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkp
OwotICAgIGNvbnN0IENDQ2FudmFzTGF5ZXJJbXBsOjpQcm9ncmFtKiBwcm9ncmFtID0gY2FudmFz
TGF5ZXJQcm9ncmFtKCk7Ci0gICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6
ZWQoKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHF1YWQtPnRleHR1cmVJ
ZCgpKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5f
RklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwg
Y29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6
TElORUFSKSk7Ci0KLSAgICBpZiAocXVhZC0+aGFzQWxwaGEoKSAmJiAhcXVhZC0+cHJlbXVsdGlw
bGllZEFscGhhKCkpCi0gICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmxlbmRGdW5j
KEdyYXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlO
VVNfU1JDX0FMUEhBKSk7Ci0KLSAgICBjb25zdCBJbnRTaXplJiBib3VuZHMgPSBxdWFkLT5xdWFk
UmVjdCgpLnNpemUoKTsKLQotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3Jh
bShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVu
aWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7
Ci0gICAgZHJhd1RleHR1cmVkUXVhZChxdWFkLT5sYXllclRyYW5zZm9ybSgpLCBib3VuZHMud2lk
dGgoKSwgYm91bmRzLmhlaWdodCgpLCBxdWFkLT5vcGFjaXR5KCksIHNoYXJlZEdlb21ldHJ5UXVh
ZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4
U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOwotCi0gICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpKTsKLX0KLQogdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdZVVYoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogewogICAg
IGNvbnN0IENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0qIHByb2dyYW0gPSB2aWRlb0xheWVy
WVVWUHJvZ3JhbSgpOwpAQCAtODcxLDcgKzg0MCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3VmlkZW9RdWFkKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCkKICAgICB9CiB9
CiAKLXN0cnVjdCBQbHVnaW5Qcm9ncmFtQmluZGluZyB7CitzdHJ1Y3QgVGV4dHVyZVByb2dyYW1C
aW5kaW5nIHsKICAgICB0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPiB2b2lkIHNldChQcm9ncmFtKiBw
cm9ncmFtKQogICAgIHsKICAgICAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlh
bGl6ZWQoKSk7CkBAIC04ODYsMTAgKzg1NSwxMCBAQCBzdHJ1Y3QgUGx1Z2luUHJvZ3JhbUJpbmRp
bmcgewogICAgIGludCBhbHBoYUxvY2F0aW9uOwogfTsKIAotc3RydWN0IFRleFN0cmV0Y2hQbHVn
aW5Qcm9ncmFtQmluZGluZyA6IFBsdWdpblByb2dyYW1CaW5kaW5nIHsKK3N0cnVjdCBUZXhTdHJl
dGNoVGV4dHVyZVByb2dyYW1CaW5kaW5nIDogVGV4dHVyZVByb2dyYW1CaW5kaW5nIHsKICAgICB0
ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPiB2b2lkIHNldChQcm9ncmFtKiBwcm9ncmFtKQogICAgIHsK
LSAgICAgICAgUGx1Z2luUHJvZ3JhbUJpbmRpbmc6OnNldChwcm9ncmFtKTsKKyAgICAgICAgVGV4
dHVyZVByb2dyYW1CaW5kaW5nOjpzZXQocHJvZ3JhbSk7CiAgICAgICAgIG9mZnNldExvY2F0aW9u
ID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkub2Zmc2V0TG9jYXRpb24oKTsKICAgICAgICAgc2Nh
bGVMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnNjYWxlTG9jYXRpb24oKTsKICAg
ICB9CkBAIC04OTcsNjYgKzg2Niw4MiBAQCBzdHJ1Y3QgVGV4U3RyZXRjaFBsdWdpblByb2dyYW1C
aW5kaW5nIDogUGx1Z2luUHJvZ3JhbUJpbmRpbmcgewogICAgIGludCBzY2FsZUxvY2F0aW9uOwog
fTsKIAotc3RydWN0IFRleFRyYW5zZm9ybVBsdWdpblByb2dyYW1CaW5kaW5nIDogUGx1Z2luUHJv
Z3JhbUJpbmRpbmcgeworc3RydWN0IFRleFRyYW5zZm9ybVRleHR1cmVQcm9ncmFtQmluZGluZyA6
IFRleHR1cmVQcm9ncmFtQmluZGluZyB7CiAgICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9p
ZCBzZXQoUHJvZ3JhbSogcHJvZ3JhbSkKICAgICB7Ci0gICAgICAgIFBsdWdpblByb2dyYW1CaW5k
aW5nOjpzZXQocHJvZ3JhbSk7CisgICAgICAgIFRleHR1cmVQcm9ncmFtQmluZGluZzo6c2V0KHBy
b2dyYW0pOwogICAgICAgICB0ZXhUcmFuc2Zvcm1Mb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNo
YWRlcigpLnRleFRyYW5zZm9ybUxvY2F0aW9uKCk7CiAgICAgfQogICAgIGludCB0ZXhUcmFuc2Zv
cm1Mb2NhdGlvbjsKIH07CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UGx1Z2lu
UXVhZChjb25zdCBDQ1BsdWdpbkRyYXdRdWFkKiBxdWFkKQordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdUZXh0dXJlUXVhZChjb25zdCBDQ1RleHR1cmVEcmF3UXVhZCogcXVhZCkKIHsK
ICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwotCisgICAgdW5zaWduZWQgbWF0
cml4TG9jYXRpb24gPSAwOworICAgIHVuc2lnbmVkIGFscGhhTG9jYXRpb24gPSAwOwogICAgIGlm
IChxdWFkLT5pb1N1cmZhY2VUZXh0dXJlSWQoKSkgewotICAgICAgICBUZXhUcmFuc2Zvcm1QbHVn
aW5Qcm9ncmFtQmluZGluZyBiaW5kaW5nOworICAgICAgICBUZXhUcmFuc2Zvcm1UZXh0dXJlUHJv
Z3JhbUJpbmRpbmcgYmluZGluZzsKICAgICAgICAgaWYgKHF1YWQtPmZsaXBwZWQoKSkKLSAgICAg
ICAgICAgIGJpbmRpbmcuc2V0KHBsdWdpbkxheWVyVGV4UmVjdFByb2dyYW1GbGlwKCkpOworICAg
ICAgICAgICAgYmluZGluZy5zZXQodGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW1GbGlwKCkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBiaW5kaW5nLnNldChwbHVnaW5MYXllclRleFJlY3RQ
cm9ncmFtKCkpOworICAgICAgICAgICAgYmluZGluZy5zZXQodGV4dHVyZUxheWVyVGV4UmVjdFBy
b2dyYW0oKSk7CiAKICAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgICAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVf
QVJCLCBxdWFkLT5pb1N1cmZhY2VUZXh0dXJlSWQoKSkpOwogCiAgICAgICAgIEdMQyhjb250ZXh0
KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShiaW5kaW5nLnByb2dyYW1JZCkpOwogICAgICAgICBH
TEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShiaW5kaW5nLnNhbXBsZXJMb2NhdGlv
biwgMCkpOwotICAgICAgICAvLyBOb3RlOiB0aGlzIGNvZGUgcGF0aCBpZ25vcmVzIHF1YWQtPnV2
UmVjdCgpLgotICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm00ZihiaW5k
aW5nLnRleFRyYW5zZm9ybUxvY2F0aW9uLCAwLCAwLCBxdWFkLT5pb1N1cmZhY2VXaWR0aCgpLCBx
dWFkLT5pb1N1cmZhY2VIZWlnaHQoKSkpOwotICAgICAgICBjb25zdCBJbnRTaXplJiBib3VuZHMg
PSBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKTsKLSAgICAgICAgZHJhd1RleHR1cmVkUXVhZChxdWFk
LT5sYXllclRyYW5zZm9ybSgpLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpLCBxdWFk
LT5vcGFjaXR5KCksIHNoYXJlZEdlb21ldHJ5UXVhZCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJpbmRpbmcubWF0cml4TG9jYXRpb24sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5hbHBoYUxvY2F0aW9uLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKLSAgICAgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFO
R0xFX0FSQiwgMCkpOworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm00
ZihiaW5kaW5nLnRleFRyYW5zZm9ybUxvY2F0aW9uLCAwLCAwLCBxdWFkLT5pb1N1cmZhY2VTaXpl
KCkud2lkdGgoKSwgcXVhZC0+aW9TdXJmYWNlU2l6ZSgpLmhlaWdodCgpKSk7CisKKyAgICAgICAg
bWF0cml4TG9jYXRpb24gPSBiaW5kaW5nLm1hdHJpeExvY2F0aW9uOworICAgICAgICBhbHBoYUxv
Y2F0aW9uID0gYmluZGluZy5hbHBoYUxvY2F0aW9uOworICAgIH0gZWxzZSBpZiAocXVhZC0+Zmxp
cHBlZCgpICYmIHF1YWQtPnV2UmVjdCgpID09IEZsb2F0UmVjdCgwLCAwLCAxLCAxKSkgeworICAg
ICAgICAvLyBBIGZsaXBwZWQgcXVhZCB3aXRoIHRoZSBkZWZhdWx0IFVWIG1hcHBpbmcgaXMgY29t
bW9uIGVub3VnaCB0byB1c2UgYSBzcGVjaWFsIHNoYWRlci4KKyAgICAgICAgLy8gQ2FudmFzIDJk
IGFuZCBXZWJHTCBsYXllcnMgdXNlIHRoaXMgcGF0aCBhbHdheXMgYW5kIHBsdWdpbi9leHRlcm5h
bCB0ZXh0dXJlIGxheWVycyB1c2UgdGhpcyBieSBkZWZhdWx0LgorICAgICAgICBjb25zdCBDQ1Rl
eHR1cmVMYXllckltcGw6OlByb2dyYW1GbGlwKiBwcm9ncmFtID0gdGV4dHVyZUxheWVyUHJvZ3Jh
bUZsaXAoKTsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHBy
b2dyYW0tPnByb2dyYW0oKSkpOworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVu
aWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7
CisgICAgICAgIG1hdHJpeExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4
TG9jYXRpb24oKTsKKyAgICAgICAgYWxwaGFMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hh
ZGVyKCkuYWxwaGFMb2NhdGlvbigpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFRleFN0cmV0Y2hQ
bHVnaW5Qcm9ncmFtQmluZGluZyBiaW5kaW5nOworICAgICAgICBUZXhTdHJldGNoVGV4dHVyZVBy
b2dyYW1CaW5kaW5nIGJpbmRpbmc7CiAgICAgICAgIGlmIChxdWFkLT5mbGlwcGVkKCkpCi0gICAg
ICAgICAgICBiaW5kaW5nLnNldChwbHVnaW5MYXllclByb2dyYW1GbGlwKCkpOworICAgICAgICAg
ICAgYmluZGluZy5zZXQodGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2hGbGlwKCkpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBiaW5kaW5nLnNldChwbHVnaW5MYXllclByb2dyYW0oKSk7Ci0K
LSAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBxdWFkLT50ZXh0dXJl
SWQoKSkpOwotCi0gICAgICAgIC8vIEZJWE1FOiBzZXR0aW5nIHRoZSB0ZXh0dXJlIHBhcmFtZXRl
cnMgZXZlcnkgdGltZSBpcyByZWR1bmRhbnQuIE1vdmUgdGhpcyBjb2RlIHNvbWV3aGVyZQotICAg
ICAgICAvLyB3aGVyZSBpdCB3aWxsIG9ubHkgaGFwcGVuIG9uY2UgcGVyIHRleHR1cmUuCi0gICAg
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQo
KS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikp
OwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Ms
IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNM
QU1QX1RPX0VER0UpKTsKLQorICAgICAgICAgICAgYmluZGluZy5zZXQodGV4dHVyZUxheWVyUHJv
Z3JhbVN0cmV0Y2goKSk7CiAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0KCktPnVzZVByb2dy
YW0oYmluZGluZy5wcm9ncmFtSWQpKTsKICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQoKS0+
dW5pZm9ybTFpKGJpbmRpbmcuc2FtcGxlckxvY2F0aW9uLCAwKSk7CiAgICAgICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0KCktPnVuaWZvcm0yZihiaW5kaW5nLm9mZnNldExvY2F0aW9uLCBxdWFkLT51
dlJlY3QoKS54KCksIHF1YWQtPnV2UmVjdCgpLnkoKSkpOwogICAgICAgICBHTEMoY29udGV4dCwg
Y29udGV4dCgpLT51bmlmb3JtMmYoYmluZGluZy5zY2FsZUxvY2F0aW9uLCBxdWFkLT51dlJlY3Qo
KS53aWR0aCgpLCBxdWFkLT51dlJlY3QoKS5oZWlnaHQoKSkpOwotICAgICAgICBjb25zdCBJbnRT
aXplJiBib3VuZHMgPSBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKTsKLSAgICAgICAgZHJhd1RleHR1
cmVkUXVhZChxdWFkLT5sYXllclRyYW5zZm9ybSgpLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhl
aWdodCgpLCBxdWFkLT5vcGFjaXR5KCksIHNoYXJlZEdlb21ldHJ5UXVhZCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmcubWF0cml4TG9jYXRpb24sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5hbHBoYUxvY2F0
aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKKworICAg
ICAgICBtYXRyaXhMb2NhdGlvbiA9IGJpbmRpbmcubWF0cml4TG9jYXRpb247CisgICAgICAgIGFs
cGhhTG9jYXRpb24gPSBiaW5kaW5nLmFscGhhTG9jYXRpb247CiAgICAgfQorICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTApKTsKKworICAgIGlmIChxdWFkLT5pb1N1cmZhY2VUZXh0dXJlSWQoKSkKKyAgICAgICAgR0xD
KGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShFeHRlbnNpb25zM0Q6OlRFWFRVUkVf
UkVDVEFOR0xFX0FSQiwgcXVhZC0+aW9TdXJmYWNlVGV4dHVyZUlkKCkpKTsKKyAgICBlbHNlCisg
ICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIHF1YWQtPnRleHR1cmVJZCgpKSk7CisKKyAgICAvLyBGSVhNRTog
c2V0dGluZyB0aGUgdGV4dHVyZSBwYXJhbWV0ZXJzIGV2ZXJ5IHRpbWUgaXMgcmVkdW5kYW50LiBN
b3ZlIHRoaXMgY29kZSBzb21ld2hlcmUKKyAgICAvLyB3aGVyZSBpdCB3aWxsIG9ubHkgaGFwcGVu
IG9uY2UgcGVyIHRleHR1cmUuCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQoKS0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOworICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpMSU5FQVIpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dCgpLT50ZXhQYXJhbWV0
ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRl
eHQzRDo6Q0xBTVBfVE9fRURHRSkpOworCisgICAgaWYgKHF1YWQtPmhhc0FscGhhKCkgJiYgIXF1
YWQtPnByZW11bHRpcGxpZWRBbHBoYSgpKQorICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhBLCBHcmFwaGljc0NvbnRl
eHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSkpOworCisgICAgY29uc3QgSW50U2l6ZSYgYm91bmRz
ID0gcXVhZC0+cXVhZFJlY3QoKS5zaXplKCk7CisKKyAgICBkcmF3VGV4dHVyZWRRdWFkKHF1YWQt
PmxheWVyVHJhbnNmb3JtKCksIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCksIHF1YWQt
Pm9wYWNpdHkoKSwgc2hhcmVkR2VvbWV0cnlRdWFkKCksIG1hdHJpeExvY2F0aW9uLCBhbHBoYUxv
Y2F0aW9uLCAtMSk7CisKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJsZW5k
RnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVT
X1NSQ19BTFBIQSkpOworCisgICAgaWYgKHF1YWQtPmlvU3VyZmFjZVRleHR1cmVJZCgpKQorICAg
ICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEV4dGVuc2lvbnMzRDo6
VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCAwKSk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpmaW5pc2hEcmF3aW5nRnJhbWUoKQpAQCAtMTM3MSw1OSArMTM1Niw1OSBAQCBjb25zdCBD
Q1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtU3dpenpsZUFBKiBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnRpbGVyUHJvZ3JhbVN3aQogICAgIHJldHVybiBtX3RpbGVyUHJvZ3JhbVN3aXp6bGVBQS5nZXQo
KTsKIH0KIAotY29uc3QgQ0NDYW52YXNMYXllckltcGw6OlByb2dyYW0qIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y2FudmFzTGF5ZXJQcm9ncmFtKCkKK2NvbnN0IENDVGV4dHVyZUxheWVySW1wbDo6
UHJvZ3JhbUZsaXAqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUxheWVyUHJvZ3JhbUZs
aXAoKQogewotICAgIGlmICghbV9jYW52YXNMYXllclByb2dyYW0pCi0gICAgICAgIG1fY2FudmFz
TGF5ZXJQcm9ncmFtID0gYWRvcHRQdHIobmV3IENDQ2FudmFzTGF5ZXJJbXBsOjpQcm9ncmFtKG1f
Y29udGV4dC5nZXQoKSkpOwotICAgIGlmICghbV9jYW52YXNMYXllclByb2dyYW0tPmluaXRpYWxp
emVkKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2Fu
dmFzTGF5ZXJQcm9ncmFtOjppbml0aWFsaXplIiwgdGhpcywgMCk7Ci0gICAgICAgIG1fY2FudmFz
TGF5ZXJQcm9ncmFtLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYgKCFtX3Rl
eHR1cmVMYXllclByb2dyYW1GbGlwKQorICAgICAgICBtX3RleHR1cmVMYXllclByb2dyYW1GbGlw
ID0gYWRvcHRQdHIobmV3IENDVGV4dHVyZUxheWVySW1wbDo6UHJvZ3JhbUZsaXAobV9jb250ZXh0
LmdldCgpKSk7CisgICAgaWYgKCFtX3RleHR1cmVMYXllclByb2dyYW1GbGlwLT5pbml0aWFsaXpl
ZCgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnRleHR1
cmVMYXllclByb2dyYW06OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKKyAgICAgICAgbV90ZXh0dXJl
TGF5ZXJQcm9ncmFtRmxpcC0+aW5pdGlhbGl6ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIH0KLSAg
ICByZXR1cm4gbV9jYW52YXNMYXllclByb2dyYW0uZ2V0KCk7CisgICAgcmV0dXJuIG1fdGV4dHVy
ZUxheWVyUHJvZ3JhbUZsaXAuZ2V0KCk7CiB9CiAKLWNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpQ
cm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnBsdWdpbkxheWVyUHJvZ3JhbSgpCitjb25z
dCBDQ1RleHR1cmVMYXllckltcGw6OlByb2dyYW1TdHJldGNoKiBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnRleHR1cmVMYXllclByb2dyYW1TdHJldGNoKCkKIHsKLSAgICBpZiAoIW1fcGx1Z2luTGF5
ZXJQcm9ncmFtKQotICAgICAgICBtX3BsdWdpbkxheWVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBD
Q1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBpZiAoIW1f
cGx1Z2luTGF5ZXJQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5U
KCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnBsdWdpbkxheWVyUHJvZ3JhbTo6aW5pdGlhbGl6ZSIs
IHRoaXMsIDApOwotICAgICAgICBtX3BsdWdpbkxheWVyUHJvZ3JhbS0+aW5pdGlhbGl6ZShtX2Nv
bnRleHQuZ2V0KCkpOworICAgIGlmICghbV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaCkKKyAg
ICAgICAgbV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaCA9IGFkb3B0UHRyKG5ldyBDQ1RleHR1
cmVMYXllckltcGw6OlByb2dyYW1TdHJldGNoKG1fY29udGV4dC5nZXQoKSkpOworICAgIGlmICgh
bV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaC0+aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBU
UkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlTGF5ZXJQcm9ncmFtOjpp
bml0aWFsaXplIiwgdGhpcywgMCk7CisgICAgICAgIG1fdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0
Y2gtPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgpKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fcGx1
Z2luTGF5ZXJQcm9ncmFtLmdldCgpOworICAgIHJldHVybiBtX3RleHR1cmVMYXllclByb2dyYW1T
dHJldGNoLmdldCgpOwogfQogCi1jb25zdCBDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbUZsaXAq
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cGx1Z2luTGF5ZXJQcm9ncmFtRmxpcCgpCitjb25zdCBD
Q1RleHR1cmVMYXllckltcGw6OlByb2dyYW1TdHJldGNoRmxpcCogTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp0ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaEZsaXAoKQogewotICAgIGlmICghbV9wbHVn
aW5MYXllclByb2dyYW1GbGlwKQotICAgICAgICBtX3BsdWdpbkxheWVyUHJvZ3JhbUZsaXAgPSBh
ZG9wdFB0cihuZXcgQ0NQbHVnaW5MYXllckltcGw6OlByb2dyYW1GbGlwKG1fY29udGV4dC5nZXQo
KSkpOwotICAgIGlmICghbV9wbHVnaW5MYXllclByb2dyYW1GbGlwLT5pbml0aWFsaXplZCgpKSB7
Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnBsdWdpbkxheWVy
UHJvZ3JhbUZsaXA6OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKLSAgICAgICAgbV9wbHVnaW5MYXll
clByb2dyYW1GbGlwLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYgKCFtX3Rl
eHR1cmVMYXllclByb2dyYW1TdHJldGNoRmxpcCkKKyAgICAgICAgbV90ZXh0dXJlTGF5ZXJQcm9n
cmFtU3RyZXRjaEZsaXAgPSBhZG9wdFB0cihuZXcgQ0NUZXh0dXJlTGF5ZXJJbXBsOjpQcm9ncmFt
U3RyZXRjaEZsaXAobV9jb250ZXh0LmdldCgpKSk7CisgICAgaWYgKCFtX3RleHR1cmVMYXllclBy
b2dyYW1TdHJldGNoRmxpcC0+aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBUUkFDRV9FVkVOVCgi
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaEZsaXA6Omlu
aXRpYWxpemUiLCB0aGlzLCAwKTsKKyAgICAgICAgbV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRj
aEZsaXAtPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgpKTsKICAgICB9Ci0gICAgcmV0dXJuIG1f
cGx1Z2luTGF5ZXJQcm9ncmFtRmxpcC5nZXQoKTsKKyAgICByZXR1cm4gbV90ZXh0dXJlTGF5ZXJQ
cm9ncmFtU3RyZXRjaEZsaXAuZ2V0KCk7CiB9CiAKLWNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpU
ZXhSZWN0UHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwbHVnaW5MYXllclRleFJlY3RQ
cm9ncmFtKCkKK2NvbnN0IENDVGV4dHVyZUxheWVySW1wbDo6VGV4UmVjdFByb2dyYW0qIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW0oKQogewotICAgIGlm
ICghbV9wbHVnaW5MYXllclRleFJlY3RQcm9ncmFtKQotICAgICAgICBtX3BsdWdpbkxheWVyVGV4
UmVjdFByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NQbHVnaW5MYXllckltcGw6OlRleFJlY3RQcm9n
cmFtKG1fY29udGV4dC5nZXQoKSkpOwotICAgIGlmICghbV9wbHVnaW5MYXllclRleFJlY3RQcm9n
cmFtLT5pbml0aWFsaXplZCgpKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVy
Q2hyb21pdW06OnBsdWdpbkxheWVyVGV4UmVjdFByb2dyYW06OmluaXRpYWxpemUiLCB0aGlzLCAw
KTsKLSAgICAgICAgbV9wbHVnaW5MYXllclRleFJlY3RQcm9ncmFtLT5pbml0aWFsaXplKG1fY29u
dGV4dC5nZXQoKSk7CisgICAgaWYgKCFtX3RleHR1cmVMYXllclRleFJlY3RQcm9ncmFtKQorICAg
ICAgICBtX3RleHR1cmVMYXllclRleFJlY3RQcm9ncmFtID0gYWRvcHRQdHIobmV3IENDVGV4dHVy
ZUxheWVySW1wbDo6VGV4UmVjdFByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CisgICAgaWYgKCFt
X3RleHR1cmVMYXllclRleFJlY3RQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7CisgICAgICAgIFRS
QUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnRleHR1cmVMYXllclRleFJlY3RQcm9n
cmFtOjppbml0aWFsaXplIiwgdGhpcywgMCk7CisgICAgICAgIG1fdGV4dHVyZUxheWVyVGV4UmVj
dFByb2dyYW0tPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgpKTsKICAgICB9Ci0gICAgcmV0dXJu
IG1fcGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbS5nZXQoKTsKKyAgICByZXR1cm4gbV90ZXh0dXJl
TGF5ZXJUZXhSZWN0UHJvZ3JhbS5nZXQoKTsKIH0KIAotY29uc3QgQ0NQbHVnaW5MYXllckltcGw6
OlRleFJlY3RQcm9ncmFtRmxpcCogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwbHVnaW5MYXllclRl
eFJlY3RQcm9ncmFtRmxpcCgpCitjb25zdCBDQ1RleHR1cmVMYXllckltcGw6OlRleFJlY3RQcm9n
cmFtRmxpcCogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3Jh
bUZsaXAoKQogewotICAgIGlmICghbV9wbHVnaW5MYXllclRleFJlY3RQcm9ncmFtRmxpcCkKLSAg
ICAgICAgbV9wbHVnaW5MYXllclRleFJlY3RQcm9ncmFtRmxpcCA9IGFkb3B0UHRyKG5ldyBDQ1Bs
dWdpbkxheWVySW1wbDo6VGV4UmVjdFByb2dyYW1GbGlwKG1fY29udGV4dC5nZXQoKSkpOwotICAg
IGlmICghbV9wbHVnaW5MYXllclRleFJlY3RQcm9ncmFtRmxpcC0+aW5pdGlhbGl6ZWQoKSkgewot
ICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwbHVnaW5MYXllclRl
eFJlY3RQcm9ncmFtRmxpcDo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOwotICAgICAgICBtX3BsdWdp
bkxheWVyVGV4UmVjdFByb2dyYW1GbGlwLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7Cisg
ICAgaWYgKCFtX3RleHR1cmVMYXllclRleFJlY3RQcm9ncmFtRmxpcCkKKyAgICAgICAgbV90ZXh0
dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAgPSBhZG9wdFB0cihuZXcgQ0NUZXh0dXJlTGF5ZXJJ
bXBsOjpUZXhSZWN0UHJvZ3JhbUZsaXAobV9jb250ZXh0LmdldCgpKSk7CisgICAgaWYgKCFtX3Rl
eHR1cmVMYXllclRleFJlY3RQcm9ncmFtRmxpcC0+aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBU
UkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlTGF5ZXJUZXhSZWN0UHJv
Z3JhbUZsaXA6OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKKyAgICAgICAgbV90ZXh0dXJlTGF5ZXJU
ZXhSZWN0UHJvZ3JhbUZsaXAtPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgpKTsKICAgICB9Ci0g
ICAgcmV0dXJuIG1fcGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAuZ2V0KCk7CisgICAgcmV0
dXJuIG1fdGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW1GbGlwLmdldCgpOwogfQogCiBjb25zdCBD
Q1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRl
b0xheWVyUkdCQVByb2dyYW0oKQpAQCAtMTQ4MCw2ICsxNDY1LDE2IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cygpCiAgICAgICAgIG1fYm9yZGVyUHJv
Z3JhbS0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOwogICAgIGlmIChtX2hlYWRzVXBEaXNwbGF5
UHJvZ3JhbSkKICAgICAgICAgbV9oZWFkc1VwRGlzcGxheVByb2dyYW0tPmNsZWFudXAobV9jb250
ZXh0LmdldCgpKTsKKyAgICBpZiAobV90ZXh0dXJlTGF5ZXJQcm9ncmFtRmxpcCkKKyAgICAgICAg
bV90ZXh0dXJlTGF5ZXJQcm9ncmFtRmxpcC0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOworICAg
IGlmIChtX3RleHR1cmVMYXllclByb2dyYW1TdHJldGNoKQorICAgICAgICBtX3RleHR1cmVMYXll
clByb2dyYW1TdHJldGNoLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYgKG1fdGV4
dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2hGbGlwKQorICAgICAgICBtX3RleHR1cmVMYXllclByb2dy
YW1TdHJldGNoRmxpcC0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOworICAgIGlmIChtX3RleHR1
cmVMYXllclRleFJlY3RQcm9ncmFtKQorICAgICAgICBtX3RleHR1cmVMYXllclRleFJlY3RQcm9n
cmFtLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYgKG1fdGV4dHVyZUxheWVyVGV4
UmVjdFByb2dyYW1GbGlwKQorICAgICAgICBtX3RleHR1cmVMYXllclRleFJlY3RQcm9ncmFtRmxp
cC0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOwogICAgIGlmIChtX3RpbGVyUHJvZ3JhbSkKICAg
ICAgICAgbV90aWxlclByb2dyYW0tPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKICAgICBpZiAo
bV90aWxlclByb2dyYW1PcGFxdWUpCkBAIC0xNDkyLDE2ICsxNDg3LDYgQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZWRPYmplY3RzKCkKICAgICAgICAgbV90aWxlclBy
b2dyYW1BQS0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOwogICAgIGlmIChtX3RpbGVyUHJvZ3Jh
bVN3aXp6bGVBQSkKICAgICAgICAgbV90aWxlclByb2dyYW1Td2l6emxlQUEtPmNsZWFudXAobV9j
b250ZXh0LmdldCgpKTsKLSAgICBpZiAobV9jYW52YXNMYXllclByb2dyYW0pCi0gICAgICAgIG1f
Y2FudmFzTGF5ZXJQcm9ncmFtLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7Ci0gICAgaWYgKG1f
cGx1Z2luTGF5ZXJQcm9ncmFtKQotICAgICAgICBtX3BsdWdpbkxheWVyUHJvZ3JhbS0+Y2xlYW51
cChtX2NvbnRleHQuZ2V0KCkpOwotICAgIGlmIChtX3BsdWdpbkxheWVyUHJvZ3JhbUZsaXApCi0g
ICAgICAgIG1fcGx1Z2luTGF5ZXJQcm9ncmFtRmxpcC0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkp
OwotICAgIGlmIChtX3BsdWdpbkxheWVyVGV4UmVjdFByb2dyYW0pCi0gICAgICAgIG1fcGx1Z2lu
TGF5ZXJUZXhSZWN0UHJvZ3JhbS0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOwotICAgIGlmICht
X3BsdWdpbkxheWVyVGV4UmVjdFByb2dyYW1GbGlwKQotICAgICAgICBtX3BsdWdpbkxheWVyVGV4
UmVjdFByb2dyYW1GbGlwLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7CiAgICAgaWYgKG1fcmVu
ZGVyU3VyZmFjZU1hc2tQcm9ncmFtKQogICAgICAgICBtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3Jh
bS0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOwogICAgIGlmIChtX3JlbmRlclN1cmZhY2VQcm9n
cmFtKQpAQCAtMTUyMSwxNyArMTUwNiwxNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
Y2xlYW51cFNoYXJlZE9iamVjdHMoKQogCiAgICAgbV9ib3JkZXJQcm9ncmFtLmNsZWFyKCk7CiAg
ICAgbV9oZWFkc1VwRGlzcGxheVByb2dyYW0uY2xlYXIoKTsKKyAgICBtX3RleHR1cmVMYXllclBy
b2dyYW1GbGlwLmNsZWFyKCk7CisgICAgbV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaC5jbGVh
cigpOworICAgIG1fdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2hGbGlwLmNsZWFyKCk7CisgICAg
bV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbS5jbGVhcigpOworICAgIG1fdGV4dHVyZUxheWVy
VGV4UmVjdFByb2dyYW1GbGlwLmNsZWFyKCk7CiAgICAgbV90aWxlclByb2dyYW0uY2xlYXIoKTsK
ICAgICBtX3RpbGVyUHJvZ3JhbU9wYXF1ZS5jbGVhcigpOwogICAgIG1fdGlsZXJQcm9ncmFtU3dp
enpsZS5jbGVhcigpOwogICAgIG1fdGlsZXJQcm9ncmFtU3dpenpsZU9wYXF1ZS5jbGVhcigpOwog
ICAgIG1fdGlsZXJQcm9ncmFtQUEuY2xlYXIoKTsKICAgICBtX3RpbGVyUHJvZ3JhbVN3aXp6bGVB
QS5jbGVhcigpOwotICAgIG1fY2FudmFzTGF5ZXJQcm9ncmFtLmNsZWFyKCk7Ci0gICAgbV9wbHVn
aW5MYXllclByb2dyYW0uY2xlYXIoKTsKLSAgICBtX3BsdWdpbkxheWVyUHJvZ3JhbUZsaXAuY2xl
YXIoKTsKLSAgICBtX3BsdWdpbkxheWVyVGV4UmVjdFByb2dyYW0uY2xlYXIoKTsKLSAgICBtX3Bs
dWdpbkxheWVyVGV4UmVjdFByb2dyYW1GbGlwLmNsZWFyKCk7CiAgICAgbV9yZW5kZXJTdXJmYWNl
TWFza1Byb2dyYW0uY2xlYXIoKTsKICAgICBtX3JlbmRlclN1cmZhY2VQcm9ncmFtLmNsZWFyKCk7
CiAgICAgbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW1BQS5jbGVhcigpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCBhNjg3NmU1ZDU2NzQzZjRlMTk1MzYyMjkxYzZlOWUw
MDNlNmZkNmJkLi41MmVhODdjMTMzYjE1N2YxYTVlMGE4ODIwYWRkZjYzMTYxZjA4ZDYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNDAsMTEgKzQwLDEwIEBACiAjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYWNraW5nVGV4dHVyZUFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgImNjL0NDQ2Fu
dmFzTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNj
L0NDSGVhZHNVcERpc3BsYXkuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKLSNp
bmNsdWRlICJjYy9DQ1BsdWdpbkxheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDVGV4dHVyZUxh
eWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNTcsNiArNTYs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDQ0hlYWRzVXBEaXNwbGF5OwogY2xhc3Mg
Q0NMYXllckltcGw7CiBjbGFzcyBDQ1JlbmRlclBhc3M7CitjbGFzcyBDQ1RleHR1cmVEcmF3UXVh
ZDsKIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xh
c3MgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOwpAQCAtMTIxLDE3ICsxMjEsMTcgQEAgcHVibGlj
OgogICAgIGNvbnN0IENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbUFBKiByZW5kZXJTdXJmYWNlUHJv
Z3JhbUFBKCk7CiAgICAgY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpNYXNrUHJvZ3JhbSogcmVuZGVy
U3VyZmFjZU1hc2tQcm9ncmFtKCk7CiAgICAgY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpNYXNrUHJv
Z3JhbUFBKiByZW5kZXJTdXJmYWNlTWFza1Byb2dyYW1BQSgpOworICAgIGNvbnN0IENDVGV4dHVy
ZUxheWVySW1wbDo6UHJvZ3JhbUZsaXAqIHRleHR1cmVMYXllclByb2dyYW1GbGlwKCk7CisgICAg
Y29uc3QgQ0NUZXh0dXJlTGF5ZXJJbXBsOjpQcm9ncmFtU3RyZXRjaCogdGV4dHVyZUxheWVyUHJv
Z3JhbVN0cmV0Y2goKTsKKyAgICBjb25zdCBDQ1RleHR1cmVMYXllckltcGw6OlByb2dyYW1TdHJl
dGNoRmxpcCogdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2hGbGlwKCk7CisgICAgY29uc3QgQ0NU
ZXh0dXJlTGF5ZXJJbXBsOjpUZXhSZWN0UHJvZ3JhbSogdGV4dHVyZUxheWVyVGV4UmVjdFByb2dy
YW0oKTsKKyAgICBjb25zdCBDQ1RleHR1cmVMYXllckltcGw6OlRleFJlY3RQcm9ncmFtRmxpcCog
dGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW1GbGlwKCk7CiAgICAgY29uc3QgQ0NUaWxlZExheWVy
SW1wbDo6UHJvZ3JhbSogdGlsZXJQcm9ncmFtKCk7CiAgICAgY29uc3QgQ0NUaWxlZExheWVySW1w
bDo6UHJvZ3JhbU9wYXF1ZSogdGlsZXJQcm9ncmFtT3BhcXVlKCk7CiAgICAgY29uc3QgQ0NUaWxl
ZExheWVySW1wbDo6UHJvZ3JhbUFBKiB0aWxlclByb2dyYW1BQSgpOwogICAgIGNvbnN0IENDVGls
ZWRMYXllckltcGw6OlByb2dyYW1Td2l6emxlKiB0aWxlclByb2dyYW1Td2l6emxlKCk7CiAgICAg
Y29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGVPcGFxdWUqIHRpbGVyUHJvZ3Jh
bVN3aXp6bGVPcGFxdWUoKTsKICAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtU3dp
enpsZUFBKiB0aWxlclByb2dyYW1Td2l6emxlQUEoKTsKLSAgICBjb25zdCBDQ0NhbnZhc0xheWVy
SW1wbDo6UHJvZ3JhbSogY2FudmFzTGF5ZXJQcm9ncmFtKCk7Ci0gICAgY29uc3QgQ0NQbHVnaW5M
YXllckltcGw6OlByb2dyYW0qIHBsdWdpbkxheWVyUHJvZ3JhbSgpOwotICAgIGNvbnN0IENDUGx1
Z2luTGF5ZXJJbXBsOjpQcm9ncmFtRmxpcCogcGx1Z2luTGF5ZXJQcm9ncmFtRmxpcCgpOwotICAg
IGNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpUZXhSZWN0UHJvZ3JhbSogcGx1Z2luTGF5ZXJUZXhS
ZWN0UHJvZ3JhbSgpOwotICAgIGNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpUZXhSZWN0UHJvZ3Jh
bUZsaXAqIHBsdWdpbkxheWVyVGV4UmVjdFByb2dyYW1GbGlwKCk7CiAgICAgY29uc3QgQ0NWaWRl
b0xheWVySW1wbDo6UkdCQVByb2dyYW0qIHZpZGVvTGF5ZXJSR0JBUHJvZ3JhbSgpOwogICAgIGNv
bnN0IENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0qIHZpZGVvTGF5ZXJZVVZQcm9ncmFtKCk7
CiAgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6TmF0aXZlVGV4dHVyZVByb2dyYW0qIHZpZGVv
TGF5ZXJOYXRpdmVUZXh0dXJlUHJvZ3JhbSgpOwpAQCAtMTY4LDEwICsxNjgsOSBAQCBwcml2YXRl
OgogICAgIHZvaWQgZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1
YWQqKTsKICAgICB2b2lkIGRyYXdSZW5kZXJTdXJmYWNlUXVhZChjb25zdCBDQ1JlbmRlclN1cmZh
Y2VEcmF3UXVhZCopOwogICAgIHZvaWQgZHJhd1NvbGlkQ29sb3JRdWFkKGNvbnN0IENDU29saWRD
b2xvckRyYXdRdWFkKik7CisgICAgdm9pZCBkcmF3VGV4dHVyZVF1YWQoY29uc3QgQ0NUZXh0dXJl
RHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdUaWxlUXVhZChjb25zdCBDQ1RpbGVEcmF3UXVhZCop
OwotICAgIHZvaWQgZHJhd0NhbnZhc1F1YWQoY29uc3QgQ0NDYW52YXNEcmF3UXVhZCopOwogICAg
IHZvaWQgZHJhd1ZpZGVvUXVhZChjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqKTsKLSAgICB2b2lkIGRy
YXdQbHVnaW5RdWFkKGNvbnN0IENDUGx1Z2luRHJhd1F1YWQqKTsKIAogICAgIE1hbmFnZWRUZXh0
dXJlKiBnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKTsKICAgICB2b2lkIGNvcHlQbGFuZVRvVGV4
dHVyZShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqLCBjb25zdCB2b2lkKiBwbGFuZSwgaW50IGluZGV4
KTsKQEAgLTIyMiwxNyArMjIxLDE3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEdlb21ldHJ5Qmlu
ZGluZz4gbV9zaGFyZWRHZW9tZXRyeTsKICAgICBPd25QdHI8TGF5ZXJDaHJvbWl1bTo6Qm9yZGVy
UHJvZ3JhbT4gbV9ib3JkZXJQcm9ncmFtOwogICAgIE93blB0cjxDQ0hlYWRzVXBEaXNwbGF5OjpQ
cm9ncmFtPiBtX2hlYWRzVXBEaXNwbGF5UHJvZ3JhbTsKKyAgICBPd25QdHI8Q0NUZXh0dXJlTGF5
ZXJJbXBsOjpQcm9ncmFtRmxpcD4gbV90ZXh0dXJlTGF5ZXJQcm9ncmFtRmxpcDsKKyAgICBPd25Q
dHI8Q0NUZXh0dXJlTGF5ZXJJbXBsOjpQcm9ncmFtU3RyZXRjaD4gbV90ZXh0dXJlTGF5ZXJQcm9n
cmFtU3RyZXRjaDsKKyAgICBPd25QdHI8Q0NUZXh0dXJlTGF5ZXJJbXBsOjpQcm9ncmFtU3RyZXRj
aEZsaXA+IG1fdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2hGbGlwOworICAgIE93blB0cjxDQ1Rl
eHR1cmVMYXllckltcGw6OlRleFJlY3RQcm9ncmFtPiBtX3RleHR1cmVMYXllclRleFJlY3RQcm9n
cmFtOworICAgIE93blB0cjxDQ1RleHR1cmVMYXllckltcGw6OlRleFJlY3RQcm9ncmFtRmxpcD4g
bV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXA7CiAgICAgT3duUHRyPENDVGlsZWRMYXll
ckltcGw6OlByb2dyYW0+IG1fdGlsZXJQcm9ncmFtOwogICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJ
bXBsOjpQcm9ncmFtT3BhcXVlPiBtX3RpbGVyUHJvZ3JhbU9wYXF1ZTsKICAgICBPd25QdHI8Q0NU
aWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGU+IG1fdGlsZXJQcm9ncmFtU3dpenpsZTsKICAg
ICBPd25QdHI8Q0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGVPcGFxdWU+IG1fdGlsZXJQ
cm9ncmFtU3dpenpsZU9wYXF1ZTsKICAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbDo6UHJvZ3Jh
bUFBPiBtX3RpbGVyUHJvZ3JhbUFBOwogICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9n
cmFtU3dpenpsZUFBPiBtX3RpbGVyUHJvZ3JhbVN3aXp6bGVBQTsKLSAgICBPd25QdHI8Q0NDYW52
YXNMYXllckltcGw6OlByb2dyYW0+IG1fY2FudmFzTGF5ZXJQcm9ncmFtOwotICAgIE93blB0cjxD
Q1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbT4gbV9wbHVnaW5MYXllclByb2dyYW07Ci0gICAgT3du
UHRyPENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFtRmxpcD4gbV9wbHVnaW5MYXllclByb2dyYW1G
bGlwOwotICAgIE93blB0cjxDQ1BsdWdpbkxheWVySW1wbDo6VGV4UmVjdFByb2dyYW0+IG1fcGx1
Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbTsKLSAgICBPd25QdHI8Q0NQbHVnaW5MYXllckltcGw6OlRl
eFJlY3RQcm9ncmFtRmxpcD4gbV9wbHVnaW5MYXllclRleFJlY3RQcm9ncmFtRmxpcDsKICAgICBP
d25QdHI8Q0NSZW5kZXJTdXJmYWNlOjpNYXNrUHJvZ3JhbT4gbV9yZW5kZXJTdXJmYWNlTWFza1By
b2dyYW07CiAgICAgT3duUHRyPENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbT4gbV9yZW5kZXJTdXJm
YWNlUHJvZ3JhbTsKICAgICBPd25QdHI8Q0NSZW5kZXJTdXJmYWNlOjpNYXNrUHJvZ3JhbUFBPiBt
X3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbUFBOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVt
LmNwcAppbmRleCA5NzcwMzk1N2Y4YmVlMWYwMmJlYjMyZjdkYTJmN2Q4YmFhMzFkNDhiLi44YTk5
YWIwNDc4ZjJjNWQ4NjQ5MDUyZGZlYTBjYjJiMjUxNWI0MzBlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5M
YXllckNocm9taXVtLmNwcApAQCAtMjksMTAgKzI5LDcgQEAKIAogI2luY2x1ZGUgIlBsdWdpbkxh
eWVyQ2hyb21pdW0uaCIKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIK
LSNpbmNsdWRlICJjYy9DQ1BsdWdpbkxheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDVGV4dHVy
ZUxheWVySW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDE1ICs0MywxMyBA
QCBQbHVnaW5MYXllckNocm9taXVtOjpQbHVnaW5MYXllckNocm9taXVtKCkKICAgICAsIG1fdGV4
dHVyZUlkKDApCiAgICAgLCBtX2ZsaXBwZWQodHJ1ZSkKICAgICAsIG1fdXZSZWN0KDAsIDAsIDEs
IDEpCi0gICAgLCBtX2lvU3VyZmFjZVdpZHRoKDApCi0gICAgLCBtX2lvU3VyZmFjZUhlaWdodCgw
KQogICAgICwgbV9pb1N1cmZhY2VJZCgwKQogewogfQogCiBQYXNzT3duUHRyPENDTGF5ZXJJbXBs
PiBQbHVnaW5MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgcmV0dXJu
IENDUGx1Z2luTGF5ZXJJbXBsOjpjcmVhdGUobV9sYXllcklkKTsKKyAgICByZXR1cm4gQ0NUZXh0
dXJlTGF5ZXJJbXBsOjpjcmVhdGUobV9sYXllcklkKTsKIH0KIAogdm9pZCBQbHVnaW5MYXllckNo
cm9taXVtOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpCkBAIC03Nyw4ICs3Miw3IEBAIHZvaWQg
UGx1Z2luTGF5ZXJDaHJvbWl1bTo6c2V0VVZSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAog
dm9pZCBQbHVnaW5MYXllckNocm9taXVtOjpzZXRJT1N1cmZhY2VQcm9wZXJ0aWVzKGludCB3aWR0
aCwgaW50IGhlaWdodCwgdWludDMyX3QgaW9TdXJmYWNlSWQpCiB7Ci0gICAgbV9pb1N1cmZhY2VX
aWR0aCA9IHdpZHRoOwotICAgIG1faW9TdXJmYWNlSGVpZ2h0ID0gaGVpZ2h0OworICAgIG1faW9T
dXJmYWNlU2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CiAgICAgbV9pb1N1cmZhY2VJZCA9
IGlvU3VyZmFjZUlkOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CkBAIC05MiwxMSArODYsMTEg
QEAgdm9pZCBQbHVnaW5MYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBs
KiBsYXllcikKIHsKICAgICBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKGxheWVyKTsK
IAotICAgIENDUGx1Z2luTGF5ZXJJbXBsKiBwbHVnaW5MYXllciA9IHN0YXRpY19jYXN0PENDUGx1
Z2luTGF5ZXJJbXBsKj4obGF5ZXIpOwotICAgIHBsdWdpbkxheWVyLT5zZXRUZXh0dXJlSWQobV90
ZXh0dXJlSWQpOwotICAgIHBsdWdpbkxheWVyLT5zZXRGbGlwcGVkKG1fZmxpcHBlZCk7Ci0gICAg
cGx1Z2luTGF5ZXItPnNldFVWUmVjdChtX3V2UmVjdCk7Ci0gICAgcGx1Z2luTGF5ZXItPnNldElP
U3VyZmFjZVByb3BlcnRpZXMobV9pb1N1cmZhY2VXaWR0aCwgbV9pb1N1cmZhY2VIZWlnaHQsIG1f
aW9TdXJmYWNlSWQpOworICAgIENDVGV4dHVyZUxheWVySW1wbCogdGV4dHVyZUxheWVyID0gc3Rh
dGljX2Nhc3Q8Q0NUZXh0dXJlTGF5ZXJJbXBsKj4obGF5ZXIpOworICAgIHRleHR1cmVMYXllci0+
c2V0VGV4dHVyZUlkKG1fdGV4dHVyZUlkKTsKKyAgICB0ZXh0dXJlTGF5ZXItPnNldEZsaXBwZWQo
bV9mbGlwcGVkKTsKKyAgICB0ZXh0dXJlTGF5ZXItPnNldFVWUmVjdChtX3V2UmVjdCk7CisgICAg
dGV4dHVyZUxheWVyLT5zZXRJT1N1cmZhY2VQcm9wZXJ0aWVzKG1faW9TdXJmYWNlU2l6ZSwgbV9p
b1N1cmZhY2VJZCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaAppbmRleCAy
MjRkYTgxNGY0Mzg2MzcwZWJlYmU3MDg0MWFkMWMwYjE2YmU2MjcxLi5hZjAwNDQ5MzgzMGEzYWE2
YjM4NWE0MDc0ODdmZTcyYjExMjIzN2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5o
CkBAIC02MSw4ICs2MSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiAg
ICAgYm9vbCBtX2ZsaXBwZWQ7CiAgICAgRmxvYXRSZWN0IG1fdXZSZWN0OwotICAgIGludCBtX2lv
U3VyZmFjZVdpZHRoOwotICAgIGludCBtX2lvU3VyZmFjZUhlaWdodDsKKyAgICBJbnRTaXplIG1f
aW9TdXJmYWNlU2l6ZTsKICAgICB1aW50MzJfdCBtX2lvU3VyZmFjZUlkOwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggODBkMjNkMWE4ZTE5MGYyNmRlYmI2YWZlYjQ0
NWM5MDdmM2FmM2Q0Mi4uZGE1NWYzYWMwNmM0ZDVjNDZlZGFjMTc5ZDg0ZGY2MzhhYzIxOTllYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2Vi
R0xMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCkBAIC0zNyw4ICszNyw5IEBACiAjaW5j
bHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVy
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlTGF5ZXJJbXBsLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtMTAwLDEwICsxMDEsMTAgQEAgdm9pZCBXZWJHTExheWVyQ2hy
b21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogewogICAgIENhbnZh
c0xheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIpOwogCi0gICAgQ0NDYW52YXNM
YXllckltcGwqIGNhbnZhc0xheWVyID0gc3RhdGljX2Nhc3Q8Q0NDYW52YXNMYXllckltcGwqPihs
YXllcik7Ci0gICAgY2FudmFzTGF5ZXItPnNldFRleHR1cmVJZChtX3RleHR1cmVJZCk7Ci0gICAg
Y2FudmFzTGF5ZXItPnNldEhhc0FscGhhKG1faGFzQWxwaGEpOwotICAgIGNhbnZhc0xheWVyLT5z
ZXRQcmVtdWx0aXBsaWVkQWxwaGEobV9wcmVtdWx0aXBsaWVkQWxwaGEpOworICAgIENDVGV4dHVy
ZUxheWVySW1wbCogdGV4dHVyZUxheWVyID0gc3RhdGljX2Nhc3Q8Q0NUZXh0dXJlTGF5ZXJJbXBs
Kj4obGF5ZXIpOworICAgIHRleHR1cmVMYXllci0+c2V0VGV4dHVyZUlkKG1fdGV4dHVyZUlkKTsK
KyAgICB0ZXh0dXJlTGF5ZXItPnNldEhhc0FscGhhKG1faGFzQWxwaGEpOworICAgIHRleHR1cmVM
YXllci0+c2V0UHJlbXVsdGlwbGllZEFscGhhKG1fcHJlbXVsdGlwbGllZEFscGhhKTsKIH0KIAog
Ym9vbCBXZWJHTExheWVyQ2hyb21pdW06OnBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMoSW1h
Z2VCdWZmZXIqIGltYWdlQnVmZmVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNEcmF3UXVhZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0RyYXdRdWFkLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZmNTA4M2E1NWZjM2E0MWE2MWIzZTA0MDJj
NWZmYWI2YmRmN2ExMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZh
c0RyYXdRdWFkLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJjYy9DQ0NhbnZhc0RyYXdRdWFkLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc093blB0cjxDQ0NhbnZhc0RyYXdRdWFkPiBDQ0NhbnZh
c0RyYXdRdWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0
ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIHVuc2lnbmVkIHRleHR1cmVJZCwgYm9vbCBoYXNB
bHBoYSwgYm9vbCBwcmVtdWx0aXBsaWVkQWxwaGEpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBDQ0NhbnZhc0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHRleHR1cmVJZCwg
aGFzQWxwaGEsIHByZW11bHRpcGxpZWRBbHBoYSkpOwotfQotCi1DQ0NhbnZhc0RyYXdRdWFkOjpD
Q0NhbnZhc0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUs
IGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGJvb2wgaGFzQWxw
aGEsIGJvb2wgcHJlbXVsdGlwbGllZEFscGhhKQotICAgIDogQ0NEcmF3UXVhZChzaGFyZWRRdWFk
U3RhdGUsIENDRHJhd1F1YWQ6OkNhbnZhc0NvbnRlbnQsIHF1YWRSZWN0KQotICAgICwgbV90ZXh0
dXJlSWQodGV4dHVyZUlkKQotICAgICwgbV9oYXNBbHBoYShoYXNBbHBoYSkKLSAgICAsIG1fcHJl
bXVsdGlwbGllZEFscGhhKHByZW11bHRpcGxpZWRBbHBoYSkKLXsKLX0KLQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNE
cmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NDYW52YXNEcmF3UXVhZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTg1ZGJk
MTM0ZGU4MDQxMzZiYTYzOTAyOWU2OTFjY2I1OWFiMmZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQ2FudmFzRHJhd1F1YWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIENDQ2FudmFzRHJhd1F1YWRfaAotI2RlZmluZSBDQ0NhbnZh
c0RyYXdRdWFkX2gKLQotI2luY2x1ZGUgImNjL0NDRHJhd1F1YWQuaCIKLSNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENDTGF5ZXJJbXBs
OwotY2xhc3MgQ0NDYW52YXNEcmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDQ0NhbnZhc0RyYXdRdWFkKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxDQ0NhbnZhc0RyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3Rh
dGUqLCBjb25zdCBJbnRSZWN0JiwgdW5zaWduZWQgdGV4dHVyZV9pZCwgYm9vbCBoYXNBbHBoYSwg
Ym9vbCBwcmVtdWx0aXBsaWVkQWxwaGEpOwotCi0gICAgdW5zaWduZWQgdGV4dHVyZUlkKCkgY29u
c3QgeyByZXR1cm4gIG1fdGV4dHVyZUlkOyB9Ci0gICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsg
cmV0dXJuICBtX2hhc0FscGhhOyB9Ci0gICAgYm9vbCBwcmVtdWx0aXBsaWVkQWxwaGEoKSBjb25z
dCB7IHJldHVybiAgbV9wcmVtdWx0aXBsaWVkQWxwaGE7IH0KLQotcHJpdmF0ZToKLSAgICBDQ0Nh
bnZhc0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIHVu
c2lnbmVkIHRleHR1cmVfaWQsIGJvb2wgaGFzQWxwaGEsIGJvb2wgcHJlbXVsdGlwbGllZEFscGhh
KTsKLSAgICAKLSAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKLSAgICBib29sIG1faGFzQWxwaGE7
Ci0gICAgYm9vbCBtX3ByZW11bHRpcGxpZWRBbHBoYTsKLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Nh
bnZhc0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDE0NGU1NzkxMjBjNDRmMjc3ZjAwN2NhNDhkY2YwODVkMWE4NDZjYzEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJ
bXBsLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgImNjL0NDQ2FudmFzRHJhd1F1YWQuaCIKLSNp
bmNsdWRlICJjYy9DQ1Byb3h5LmgiCi0jaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgiCi0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ0ND
YW52YXNMYXllckltcGw6OkNDQ2FudmFzTGF5ZXJJbXBsKGludCBpZCkKLSAgICA6IENDTGF5ZXJJ
bXBsKGlkKQotICAgICwgbV90ZXh0dXJlSWQoMCkKLSAgICAsIG1faGFzQWxwaGEodHJ1ZSkKLSAg
ICAsIG1fcHJlbXVsdGlwbGllZEFscGhhKHRydWUpCi17Ci19Ci0KLUNDQ2FudmFzTGF5ZXJJbXBs
Ojp+Q0NDYW52YXNMYXllckltcGwoKQotewotfQotCi12b2lkIENDQ2FudmFzTGF5ZXJJbXBsOjph
cHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0
ZSogc2hhcmVkUXVhZFN0YXRlKQotewotICAgIEludFJlY3QgcXVhZFJlY3QoSW50UG9pbnQoKSwg
Ym91bmRzKCkpOwotICAgIHF1YWRMaXN0LmFwcGVuZChDQ0NhbnZhc0RyYXdRdWFkOjpjcmVhdGUo
c2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbV90ZXh0dXJlSWQsIG1faGFzQWxwaGEsIG1fcHJl
bXVsdGlwbGllZEFscGhhKSk7Ci19Ci0KLXZvaWQgQ0NDYW52YXNMYXllckltcGw6OmR1bXBMYXll
clByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3Jp
dGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgImNhbnZhcyBsYXllciB0ZXh0dXJlIGlk
OiAiIDw8IG1fdGV4dHVyZUlkIDw8ICIgcHJlbXVsdGlwbGllZDogIiA8PCBtX3ByZW11bHRpcGxp
ZWRBbHBoYSA8PCAiXG4iOwotICAgIENDTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRz
LCBpbmRlbnQpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYTllYjg2MDI0ZWI2OWU5Yjg0MDEzMzg0ODExYmNhNDIwZDNjODMyMi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ0NDYW52YXNMYXllckltcGxf
aAotI2RlZmluZSBDQ0NhbnZhc0xheWVySW1wbF9oCi0KLSNpbmNsdWRlICJQcm9ncmFtQmluZGlu
Zy5oIgotI2luY2x1ZGUgIlNoYWRlckNocm9taXVtLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllcklt
cGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDQ0NhbnZhc0xheWVySW1wbCA6
IHB1YmxpYyBDQ0xheWVySW1wbCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0ND
YW52YXNMYXllckltcGw+IGNyZWF0ZShpbnQgaWQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IENDQ2FudmFzTGF5ZXJJbXBsKGlkKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfkND
Q2FudmFzTGF5ZXJJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFk
Q3VsbGVyJiwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqKTsKLQotICAgIHR5cGVkZWYgUHJvZ3Jh
bUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxw
aGE+IFByb2dyYW07Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0
U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7Ci0KLSAgICB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBj
b25zdCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQotICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVuc2ln
bmVkIGlkKSB7IG1fdGV4dHVyZUlkID0gaWQ7IH0KLSAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wg
aGFzQWxwaGEpIHsgbV9oYXNBbHBoYSA9IGhhc0FscGhhOyB9Ci0gICAgdm9pZCBzZXRQcmVtdWx0
aXBsaWVkQWxwaGEoYm9vbCBwcmVtdWx0aXBsaWVkQWxwaGEpIHsgbV9wcmVtdWx0aXBsaWVkQWxw
aGEgPSBwcmVtdWx0aXBsaWVkQWxwaGE7IH0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ0NDYW52
YXNMYXllckltcGwoaW50KTsKLQotICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNT
dHJpbmcoKSBjb25zdCB7IHJldHVybiAiQ2FudmFzTGF5ZXIiOyB9Ci0KLSAgICB1bnNpZ25lZCBt
X3RleHR1cmVJZDsKLSAgICBib29sIG1faGFzQWxwaGE7Ci0gICAgYm9vbCBtX3ByZW11bHRpcGxp
ZWRBbHBoYTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIENDQ2FudmFzTGF5ZXJJbXBsX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJh
d1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NEcmF3UXVhZC5jcHAKaW5kZXggNzA4NTAwMjY3MjE4ZjZhNTAyNmQ3YmVlNmUyMTk5MjM2OTIy
MTM3Yi4uNmE1NTMwMDI2OTRiMmJkMzZlNWNlZTZiNmI4N2Y5NGUzZjFmMjg4YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVh
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NEcmF3UXVhZC5jcHAKQEAgLTI3LDEwICsyNyw5IEBACiAKICNpbmNsdWRlICJjYy9DQ0RyYXdR
dWFkLmgiCiAKLSNpbmNsdWRlICJjYy9DQ0NhbnZhc0RyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKLSNp
bmNsdWRlICJjYy9DQ1BsdWdpbkRyYXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlRHJh
d1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oIgogI2luY2x1
ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaWxlRHJhd1F1
YWQuaCIKQEAgLTgzLDI4ICs4MiwyMiBAQCBjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCogQ0NE
cmF3UXVhZDo6dG9Tb2xpZENvbG9yRHJhd1F1YWQoKSBjb25zdAogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCo+KHRoaXMpOwogfQogCitjb25zdCBDQ1Rl
eHR1cmVEcmF3UXVhZCogQ0NEcmF3UXVhZDo6dG9UZXh0dXJlRHJhd1F1YWQoKSBjb25zdAorewor
ICAgIEFTU0VSVChtX21hdGVyaWFsID09IFRleHR1cmVDb250ZW50KTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgQ0NUZXh0dXJlRHJhd1F1YWQqPih0aGlzKTsKK30KIGNvbnN0IENDVGls
ZURyYXdRdWFkKiBDQ0RyYXdRdWFkOjp0b1RpbGVEcmF3UXVhZCgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKG1fbWF0ZXJpYWwgPT0gVGlsZWRDb250ZW50KTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgQ0NUaWxlRHJhd1F1YWQqPih0aGlzKTsKIH0KIAotY29uc3QgQ0NDYW52YXNEcmF3UXVh
ZCogQ0NEcmF3UXVhZDo6dG9DYW52YXNEcmF3UXVhZCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1f
bWF0ZXJpYWwgPT0gQ2FudmFzQ29udGVudCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IENDQ2FudmFzRHJhd1F1YWQqPih0aGlzKTsKLX0KLQogY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBD
Q0RyYXdRdWFkOjp0b1ZpZGVvRHJhd1F1YWQoKSBjb25zdAogewogICAgIEFTU0VSVChtX21hdGVy
aWFsID09IFZpZGVvQ29udGVudCk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENDVmlk
ZW9EcmF3UXVhZCo+KHRoaXMpOwogfQogCi1jb25zdCBDQ1BsdWdpbkRyYXdRdWFkKiBDQ0RyYXdR
dWFkOjp0b1BsdWdpbkRyYXdRdWFkKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9tYXRlcmlhbCA9
PSBQbHVnaW5Db250ZW50KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ0NQbHVnaW5E
cmF3UXVhZCo+KHRoaXMpOwotfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmgKaW5kZXggYjE2MzM5M2Q1
NmM1YjFmNTg1MWU2OWQwM2RjNDE4NjNhMTUxOWE3Zi4uZTZmMjA4NTY4Y2M0ODJlOGI3MDZkZDZh
MTU4NjA2NGIxNzY5YWI5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaApAQCAtMzMsMTAgKzMzLDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkOwogY2xhc3Mg
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ7CiBjbGFzcyBDQ1NvbGlkQ29sb3JEcmF3UXVhZDsKK2Ns
YXNzIENDVGV4dHVyZURyYXdRdWFkOwogY2xhc3MgQ0NUaWxlRHJhd1F1YWQ7Ci1jbGFzcyBDQ0Nh
bnZhc0RyYXdRdWFkOwogY2xhc3MgQ0NWaWRlb0RyYXdRdWFkOwotY2xhc3MgQ0NQbHVnaW5EcmF3
UXVhZDsKIAogLy8gQ0NEcmF3UXVhZCBpcyBhIGJhZyBvZiBkYXRhIHVzZWQgZm9yIGRyYXdpbmcg
YSBxdWFkLiBCZWNhdXNlIGRpZmZlcmVudAogLy8gbWF0ZXJpYWxzIG5lZWQgZGlmZmVyZW50IGJp
dHMgb2YgcGVyLXF1YWQgZGF0YSB0byByZW5kZXIsIGNsYXNzZXMgdGhhdCBkZXJpdmUKQEAgLTY1
LDExICs2NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEludmFsaWQsCiAgICAgICAgIERlYnVnQm9y
ZGVyLAogICAgICAgICBSZW5kZXJTdXJmYWNlLAorICAgICAgICBUZXh0dXJlQ29udGVudCwKICAg
ICAgICAgU29saWRDb2xvciwKICAgICAgICAgVGlsZWRDb250ZW50LAotICAgICAgICBDYW52YXND
b250ZW50LAogICAgICAgICBWaWRlb0NvbnRlbnQsCi0gICAgICAgIFBsdWdpbkNvbnRlbnQsCiAg
ICAgfTsKIAogICAgIE1hdGVyaWFsIG1hdGVyaWFsKCkgY29uc3QgeyByZXR1cm4gbV9tYXRlcmlh
bDsgfQpAQCAtNzcsMTAgKzc1LDkgQEAgcHVibGljOgogICAgIGNvbnN0IENDRGVidWdCb3JkZXJE
cmF3UXVhZCogdG9EZWJ1Z0JvcmRlckRyYXdRdWFkKCkgY29uc3Q7CiAgICAgY29uc3QgQ0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQqIHRvUmVuZGVyU3VyZmFjZURyYXdRdWFkKCkgY29uc3Q7CiAgICAg
Y29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQqIHRvU29saWRDb2xvckRyYXdRdWFkKCkgY29uc3Q7
CisgICAgY29uc3QgQ0NUZXh0dXJlRHJhd1F1YWQqIHRvVGV4dHVyZURyYXdRdWFkKCkgY29uc3Q7
CiAgICAgY29uc3QgQ0NUaWxlRHJhd1F1YWQqIHRvVGlsZURyYXdRdWFkKCkgY29uc3Q7Ci0gICAg
Y29uc3QgQ0NDYW52YXNEcmF3UXVhZCogdG9DYW52YXNEcmF3UXVhZCgpIGNvbnN0OwogICAgIGNv
bnN0IENDVmlkZW9EcmF3UXVhZCogdG9WaWRlb0RyYXdRdWFkKCkgY29uc3Q7Ci0gICAgY29uc3Qg
Q0NQbHVnaW5EcmF3UXVhZCogdG9QbHVnaW5EcmF3UXVhZCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6
CiAgICAgQ0NEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIE1hdGVyaWFsLCBjb25z
dCBJbnRSZWN0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkRyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4NTI4OTE0MWQ1Mjk1MmY0YzY2ZTY2M2UxN2Y2NmJlNTIzN2Zk
NWM2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2luY2x1ZGUgImNjL0NDUGx1Z2luRHJhd1F1YWQuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1QYXNzT3duUHRyPENDUGx1Z2luRHJhd1F1YWQ+IENDUGx1Z2luRHJhd1F1YWQ6
OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJ
bnRSZWN0JiBxdWFkUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB1dlJlY3QsIHVuc2lnbmVkIHRleHR1
cmVJZCwgYm9vbCBmbGlwcGVkLCBpbnQgaW9TdXJmYWNlV2lkdGgsIGludCBpb1N1cmZhY2VIZWln
aHQsIHVuc2lnbmVkIGlvU3VyZmFjZVRleHR1cmVJZCkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IENDUGx1Z2luRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgdXZSZWN0LCB0
ZXh0dXJlSWQsIGZsaXBwZWQsIGlvU3VyZmFjZVdpZHRoLCBpb1N1cmZhY2VIZWlnaHQsIGlvU3Vy
ZmFjZVRleHR1cmVJZCkpOwotfQotCi1DQ1BsdWdpbkRyYXdRdWFkOjpDQ1BsdWdpbkRyYXdRdWFk
KGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3Qm
IHF1YWRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHV2UmVjdCwgdW5zaWduZWQgdGV4dHVyZUlkLCBi
b29sIGZsaXBwZWQsIGludCBpb1N1cmZhY2VXaWR0aCwgaW50IGlvU3VyZmFjZUhlaWdodCwgdW5z
aWduZWQgaW9TdXJmYWNlVGV4dHVyZUlkKQotICAgIDogQ0NEcmF3UXVhZChzaGFyZWRRdWFkU3Rh
dGUsIENDRHJhd1F1YWQ6OlBsdWdpbkNvbnRlbnQsIHF1YWRSZWN0KQotICAgICwgbV91dlJlY3Qo
dXZSZWN0KQotICAgICwgbV90ZXh0dXJlSWQodGV4dHVyZUlkKQotICAgICwgbV9mbGlwcGVkKGZs
aXBwZWQpCi0gICAgLCBtX2lvU3VyZmFjZVdpZHRoKGlvU3VyZmFjZVdpZHRoKQotICAgICwgbV9p
b1N1cmZhY2VIZWlnaHQoaW9TdXJmYWNlSGVpZ2h0KQotICAgICwgbV9pb1N1cmZhY2VUZXh0dXJl
SWQoaW9TdXJmYWNlVGV4dHVyZUlkKQotewotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkRyYXdRdWFkLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkRyYXdR
dWFkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxYTI2MGQ0MzRmMGJlMzUxMGI2
YmExYTJkM2Q2M2Y3Mjk0MGMwOGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQbHVnaW5EcmF3UXVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgQ0NQbHVnaW5EcmF3UXVhZF9oCi0jZGVmaW5lIENDUGx1Z2luRHJhd1F1YWRfaAot
Ci0jaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ0NMYXllckltcGw7Ci0KLWNsYXNzIEND
UGx1Z2luRHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ0NQbHVnaW5EcmF3UXVhZCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
Q0NQbHVnaW5EcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3Qg
SW50UmVjdCYgcXVhZFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdXZSZWN0LCB1bnNpZ25lZCB0ZXh0
dXJlSWQsIGJvb2wgZmxpcHBlZCwgaW50IGlvU3VyZmFjZVdpZHRoLCBpbnQgaW9TdXJmYWNlSGVp
Z2h0LCB1bnNpZ25lZCBtX2lvU3VyZmFjZVRleHR1cmVJZCk7Ci0KLSAgICBGbG9hdFJlY3QgdXZS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV91dlJlY3Q7IH0KLSAgICB1bnNpZ25lZCB0ZXh0dXJlSWQo
KSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQotICAgIGJvb2wgZmxpcHBlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZmxpcHBlZDsgfQotICAgIGludCBpb1N1cmZhY2VXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1faW9TdXJmYWNlV2lkdGg7IH0KLSAgICBpbnQgaW9TdXJmYWNlSGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gbV9pb1N1cmZhY2VIZWlnaHQ7IH0KLQotICAgIHVuc2lnbmVkIGlvU3VyZmFj
ZVRleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1faW9TdXJmYWNlVGV4dHVyZUlkOyB9Ci0gICAg
Ci1wcml2YXRlOgotICAgIENDUGx1Z2luRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUq
LCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB1dlJlY3QsIHVuc2ln
bmVkIHRleHR1cmVJZCwgYm9vbCBmbGlwcGVkLCBpbnQgaW9TdXJmYWNlV2lkdGgsIGludCBpb1N1
cmZhY2VIZWlnaHQsIHVuc2lnbmVkIGlvU3VyZmFjZVRleHR1cmVJZCk7Ci0KLSAgICBGbG9hdFJl
Y3QgbV91dlJlY3Q7Ci0gICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7Ci0gICAgYm9vbCBtX2ZsaXBw
ZWQ7Ci0gICAgaW50IG1faW9TdXJmYWNlV2lkdGg7Ci0gICAgaW50IG1faW9TdXJmYWNlSGVpZ2h0
OwotICAgIHVuc2lnbmVkIG1faW9TdXJmYWNlVGV4dHVyZUlkOwotfTsKLQotfQotCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUGx1Z2luTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNGIxNDExNGI2YWJjZDZmNjg4YTA4OWRkZGI3ZWEzZmEwZjk0ZDc2Yi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgImNjL0NDUGx1Z2lu
TGF5ZXJJbXBsLmgiCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgiCi0jaW5jbHVkZSAiY2MvQ0NQbHVnaW5EcmF3UXVhZC5oIgotI2luY2x1ZGUgImNjL0NDUHJv
eHkuaCIKLSNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DQ1BsdWdpbkxheWVySW1wbDo6
Q0NQbHVnaW5MYXllckltcGwoaW50IGlkKQotICAgIDogQ0NMYXllckltcGwoaWQpCi0gICAgLCBt
X3RleHR1cmVJZCgwKQotICAgICwgbV9mbGlwcGVkKHRydWUpCi0gICAgLCBtX3V2UmVjdCgwLCAw
LCAxLCAxKQotICAgICwgbV9pb1N1cmZhY2VJZCgwKQotICAgICwgbV9pb1N1cmZhY2VXaWR0aCgw
KQotICAgICwgbV9pb1N1cmZhY2VIZWlnaHQoMCkKLSAgICAsIG1faW9TdXJmYWNlQ2hhbmdlZChm
YWxzZSkKLSAgICAsIG1faW9TdXJmYWNlVGV4dHVyZUlkKDApCi17Ci19Ci0KLUNDUGx1Z2luTGF5
ZXJJbXBsOjp+Q0NQbHVnaW5MYXllckltcGwoKQotewotICAgIC8vIEZJWE1FOiBpdCBzZWVtcyB0
aGVyZSBpcyBubyBsYXllciByZW5kZXJlciAvIEdyYXBoaWNzQ29udGV4dDNEIGF2YWlsYWJsZSBo
ZXJlLiBJZGVhbGx5IHdlCi0gICAgLy8gd291bGQgbGlrZSB0byBkZWxldGUgbV9pb1N1cmZhY2VU
ZXh0dXJlSWQuCi0gICAgbV9pb1N1cmZhY2VUZXh0dXJlSWQgPSAwOwotfQotCi12b2lkIENDUGx1
Z2luTGF5ZXJJbXBsOjp3aWxsRHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVy
ZXIpCi17Ci0gICAgaWYgKG1faW9TdXJmYWNlQ2hhbmdlZCkgewotICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKLSAgICAgICAgRXh0
ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RD
aHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7Ci0gICAgICAgIEFTU0VSVChleHRl
bnNpb25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1faW9zdXJmYWNlIikpOwotICAgICAgICBBU1NF
UlQoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKTsKLQot
ICAgICAgICBpZiAoIW1faW9TdXJmYWNlVGV4dHVyZUlkKQotICAgICAgICAgICAgbV9pb1N1cmZh
Y2VUZXh0dXJlSWQgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7Ci0KLSAgICAgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUw
KSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShFeHRlbnNpb25z
M0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgbV9pb1N1cmZhY2VUZXh0dXJlSWQpKTsKLSAgICAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoRXh0ZW5zaW9uczNEOjpURVhU
VVJFX1JFQ1RBTkdMRV9BUkIsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIs
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPnRleFBhcmFtZXRlcmkoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FQVIpKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoRXh0
ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKLSAgICAgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoRXh0ZW5zaW9uczNEOjpURVhUVVJF
X1JFQ1RBTkdMRV9BUkIsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKLSAgICAgICAgZXh0ZW5zaW9ucy0+dGV4SW1h
Z2VJT1N1cmZhY2UyRENIUk9NSVVNKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJC
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pb1N1
cmZhY2VXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW9TdXJmYWNlSGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pb1N1cmZhY2VJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDApOwotICAgICAgICAvLyBEbyBub3QgY2hlY2sgZm9yIGVy
cm9yIGNvbmRpdGlvbnMuIHRleEltYWdlSU9TdXJmYWNlMkRDSFJPTUlVTSBpcyBzdXBwb3NlZCB0
byBob2xkIG9uIHRvCi0gICAgICAgIC8vIHRoZSBsYXN0IGdvb2QgSU9TdXJmYWNlIGlmIHRoZSBu
ZXcgb25lIGlzIGFscmVhZHkgY2xvc2VkLiBUaGlzIGlzIG9ubHkgYSBwb3NzaWJpbGl0eQotICAg
ICAgICAvLyBkdXJpbmcgbGl2ZSByZXNpemluZyBvZiBwbHVnaW5zLiBIb3dldmVyLCBpdCBzZWVt
cyB0aGF0IHRoaXMgaXMgbm90IHN1ZmZpY2llbnQgdG8KLSAgICAgICAgLy8gY29tcGxldGVseSBn
dWFyZCBhZ2FpbnN0IGdhcmJhZ2UgYmVpbmcgZHJhd24uIElmIHRoaXMgaXMgZm91bmQgdG8gYmUg
YSBzaWduaWZpY2FudCBpc3N1ZSwKLSAgICAgICAgLy8gaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBl
eHBsaWNpdGx5IHRlbGwgdGhlIGVtYmVkZGVyIHdoZW4gdG8gZnJlZSB0aGUgc3VyZmFjZXMgaXQg
aGFzCi0gICAgICAgIC8vIGFsbG9jYXRlZC4KLSAgICAgICAgbV9pb1N1cmZhY2VDaGFuZ2VkID0g
ZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIENDUGx1Z2luTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhD
Q1F1YWRDdWxsZXImIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVh
ZFN0YXRlKQotewotICAgIEludFJlY3QgcXVhZFJlY3QoSW50UG9pbnQoKSwgYm91bmRzKCkpOwot
ICAgIHF1YWRMaXN0LmFwcGVuZChDQ1BsdWdpbkRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0
YXRlLCBxdWFkUmVjdCwgbV91dlJlY3QsIG1fdGV4dHVyZUlkLCBtX2ZsaXBwZWQsIG1faW9TdXJm
YWNlV2lkdGgsIG1faW9TdXJmYWNlSGVpZ2h0LCBtX2lvU3VyZmFjZVRleHR1cmVJZCkpOwotfQot
Ci12b2lkIENDUGx1Z2luTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0m
IHRzLCBpbnQgaW5kZW50KSBjb25zdAotewotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwot
ICAgIHRzIDw8ICJwbHVnaW4gbGF5ZXIgdGV4dHVyZSBpZDogIiA8PCBtX3RleHR1cmVJZCA8PCAi
XG4iOwotICAgIENDTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQpOwot
fQotCi12b2lkIENDUGx1Z2luTGF5ZXJJbXBsOjpkaWRMb3NlQ29udGV4dCgpCi17Ci0gICAgaWYg
KG1faW9TdXJmYWNlSWQpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIHZhbGlkIHRleHR1
cmUgSUQgaW4gdGhlIG5ldyBjb250ZXh0OyBob3dldmVyLAotICAgICAgICAvLyB0aGUgSU9TdXJm
YWNlIGlzIHN0aWxsIHZhbGlkLgotICAgICAgICBtX2lvU3VyZmFjZVRleHR1cmVJZCA9IDA7Ci0g
ICAgICAgIG1faW9TdXJmYWNlQ2hhbmdlZCA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENDUGx1
Z2luTGF5ZXJJbXBsOjpzZXRJT1N1cmZhY2VQcm9wZXJ0aWVzKGludCB3aWR0aCwgaW50IGhlaWdo
dCwgdWludDMyX3QgaW9TdXJmYWNlSWQpCi17Ci0gICAgaWYgKG1faW9TdXJmYWNlSWQgIT0gaW9T
dXJmYWNlSWQpCi0gICAgICAgIG1faW9TdXJmYWNlQ2hhbmdlZCA9IHRydWU7Ci0KLSAgICBtX2lv
U3VyZmFjZVdpZHRoID0gd2lkdGg7Ci0gICAgbV9pb1N1cmZhY2VIZWlnaHQgPSBoZWlnaHQ7Ci0g
ICAgbV9pb1N1cmZhY2VJZCA9IGlvU3VyZmFjZUlkOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxh
eWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQbHVnaW5MYXllckltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY5YjMz
NjM1MTVlNDRiNzg1MTZjOTE0MWU4MzYxNDUxMTY3Y2VkNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgQ0NQbHVnaW5MYXllckltcGxfaAotI2RlZmluZSBDQ1Bs
dWdpbkxheWVySW1wbF9oCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJQcm9n
cmFtQmluZGluZy5oIgotI2luY2x1ZGUgIlNoYWRlckNocm9taXVtLmgiCi0jaW5jbHVkZSAiY2Mv
Q0NMYXllckltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDQ1BsdWdpbkxh
eWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8Q0NQbHVnaW5MYXllckltcGw+IGNyZWF0ZShpbnQgaWQpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IENDUGx1Z2luTGF5ZXJJbXBsKGlkKSk7Ci0gICAgfQotICAgIHZp
cnR1YWwgfkNDUGx1Z2luTGF5ZXJJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbERyYXco
TGF5ZXJSZW5kZXJlckNocm9taXVtKik7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZFF1YWRzKEND
UXVhZEN1bGxlciYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKik7Ci0KLSAgICB0eXBlZGVmIFBy
b2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFN0cmV0Y2gsIEZyYWdtZW50U2hhZGVyUkdC
QVRleEFscGhhPiBQcm9ncmFtOwotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hh
ZGVyUG9zVGV4U3RyZXRjaCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4RmxpcEFscGhhPiBQcm9ncmFt
RmxpcDsKLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5z
Zm9ybSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4UmVjdEFscGhhPiBUZXhSZWN0UHJvZ3JhbTsKLSAg
ICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9ybSwgRnJh
Z21lbnRTaGFkZXJSR0JBVGV4UmVjdEZsaXBBbHBoYT4gVGV4UmVjdFByb2dyYW1GbGlwOwotCi0g
ICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRl
bnQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBkaWRMb3NlQ29udGV4dCgpOwotCi0gICAgdm9p
ZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpIHsgbV90ZXh0dXJlSWQgPSBpZDsgfQotICAgIHZv
aWQgc2V0RmxpcHBlZChib29sIGZsaXBwZWQpIHsgbV9mbGlwcGVkID0gZmxpcHBlZDsgfQotICAg
IHZvaWQgc2V0VVZSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgeyBtX3V2UmVjdCA9IHJlY3Q7
IH0KLSAgICB2b2lkIHNldElPU3VyZmFjZVByb3BlcnRpZXMoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCB1aW50MzJfdCBpb1N1cmZhY2VJZCk7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ0NQbHVn
aW5MYXllckltcGwoaW50KTsKLQotICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNT
dHJpbmcoKSBjb25zdCB7IHJldHVybiAiUGx1Z2luTGF5ZXIiOyB9Ci0KLSAgICB1bnNpZ25lZCBt
X3RleHR1cmVJZDsKLSAgICBib29sIG1fZmxpcHBlZDsKLSAgICBGbG9hdFJlY3QgbV91dlJlY3Q7
Ci0gICAgdWludDMyX3QgbV9pb1N1cmZhY2VJZDsKLSAgICBpbnQgbV9pb1N1cmZhY2VXaWR0aDsK
LSAgICBpbnQgbV9pb1N1cmZhY2VIZWlnaHQ7Ci0KLSAgICAvLyBJbnRlcm5hbHMgZm9yIHRoZSBJ
T1N1cmZhY2UgcmVuZGVyaW5nIHBhdGguCi0gICAgYm9vbCBtX2lvU3VyZmFjZUNoYW5nZWQ7Ci0g
ICAgdW5zaWduZWQgbV9pb1N1cmZhY2VUZXh0dXJlSWQ7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBD
Q1BsdWdpbkxheWVySW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVEcmF3UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVEcmF3UXVhZC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjQyMzhiNzk0ZDFiNDMyZjBjN2JlOWNhZDY1ZWJlMGI4MDA4M2U4YgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGV4dHVyZURyYXdRdWFkLmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlRHJhd1F1YWQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPENDVGV4dHVyZURyYXdRdWFkPiBDQ1RleHR1cmVE
cmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUs
IGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGJvb2wgaGFzQWxw
aGEsIGJvb2wgcHJlbXVsdGlwbGllZEFscGhhLCBjb25zdCBGbG9hdFJlY3QmIHV2UmVjdCwgYm9v
bCBmbGlwcGVkLCBjb25zdCBJbnRTaXplJiBpb1N1cmZhY2VTaXplLCB1bnNpZ25lZCBpb1N1cmZh
Y2VUZXh0dXJlSWQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RleHR1cmVEcmF3UXVh
ZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCB0ZXh0dXJlSWQsIGhhc0FscGhhLCBwcmVtdWx0
aXBsaWVkQWxwaGEsIHV2UmVjdCwgZmxpcHBlZCwgaW9TdXJmYWNlU2l6ZSwgaW9TdXJmYWNlVGV4
dHVyZUlkKSk7Cit9CisKK0NDVGV4dHVyZURyYXdRdWFkOjpDQ1RleHR1cmVEcmF3UXVhZChjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFk
UmVjdCwgdW5zaWduZWQgdGV4dHVyZUlkLCBib29sIGhhc0FscGhhLCBib29sIHByZW11bHRpcGxp
ZWRBbHBoYSwgY29uc3QgRmxvYXRSZWN0JiB1dlJlY3QsIGJvb2wgZmxpcHBlZCwgY29uc3QgSW50
U2l6ZSYgaW9TdXJmYWNlU2l6ZSwgdW5zaWduZWQgaW9TdXJmYWNlVGV4dHVyZUlkKQorICAgIDog
Q0NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIENDRHJhd1F1YWQ6OlRleHR1cmVDb250ZW50LCBx
dWFkUmVjdCkKKyAgICAsIG1fdGV4dHVyZUlkKHRleHR1cmVJZCkKKyAgICAsIG1faGFzQWxwaGEo
aGFzQWxwaGEpCisgICAgLCBtX3ByZW11bHRpcGxpZWRBbHBoYShwcmVtdWx0aXBsaWVkQWxwaGEp
CisgICAgLCBtX3V2UmVjdCh1dlJlY3QpCisgICAgLCBtX2ZsaXBwZWQoZmxpcHBlZCkKKyAgICAs
IG1faW9TdXJmYWNlU2l6ZShpb1N1cmZhY2VTaXplKQorICAgICwgbV9pb1N1cmZhY2VUZXh0dXJl
SWQoaW9TdXJmYWNlVGV4dHVyZUlkKQoreworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVEcmF3UXVhZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlRHJh
d1F1YWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xYTgzMTU3MWJhZDUwZGM4OTYxMTBiZDg1ZWI4ODRjMzgzODJj
MjkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUZXh0dXJlRHJhd1F1YWQuaApAQCAtMCwwICsxLDYzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDQ1RleHR1cmVEcmF3UXVhZF9oCisjZGVmaW5lIENDVGV4dHVyZURyYXdRdWFkX2gK
KworI2luY2x1ZGUgImNjL0NDRHJhd1F1YWQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJJbXBsOworY2xhc3MgQ0NU
ZXh0dXJlRHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ0NUZXh0dXJlRHJhd1F1YWQpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRy
PENDVGV4dHVyZURyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25z
dCBJbnRSZWN0JiwgdW5zaWduZWQgdGV4dHVyZUlkLCBib29sIGhhc0FscGhhLCBib29sIHByZW11
bHRpcGxpZWRBbHBoYSwgY29uc3QgRmxvYXRSZWN0JiB1dlJlY3QsIGJvb2wgZmxpcHBlZCwgY29u
c3QgSW50U2l6ZSYgaW9TdXJmYWNlU2l6ZSwgdW5zaWduZWQgaW9TdXJmYWNlVGV4dHVyZUlkKTsK
KworICAgIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuICBtX3RleHR1cmVJZDsg
fQorICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiAgbV9oYXNBbHBoYTsgfQorICAg
IGJvb2wgcHJlbXVsdGlwbGllZEFscGhhKCkgY29uc3QgeyByZXR1cm4gIG1fcHJlbXVsdGlwbGll
ZEFscGhhOyB9CisgICAgRmxvYXRSZWN0IHV2UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdXZSZWN0
OyB9CisgICAgYm9vbCBmbGlwcGVkKCkgY29uc3QgeyByZXR1cm4gbV9mbGlwcGVkOyB9CisKKyAg
ICBjb25zdCBJbnRTaXplJiBpb1N1cmZhY2VTaXplKCkgY29uc3QgeyByZXR1cm4gbV9pb1N1cmZh
Y2VTaXplOyB9CisgICAgdW5zaWduZWQgaW9TdXJmYWNlVGV4dHVyZUlkKCkgY29uc3QgeyByZXR1
cm4gbV9pb1N1cmZhY2VUZXh0dXJlSWQ7IH0KKyAKK3ByaXZhdGU6CisgICAgQ0NUZXh0dXJlRHJh
d1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgdW5zaWduZWQg
dGV4dHVyZV9pZCwgYm9vbCBoYXNBbHBoYSwgYm9vbCBwcmVtdWx0aXBsaWVkQWxwaGEsIGNvbnN0
IEZsb2F0UmVjdCYgdXZSZWN0LCBib29sIGZsaXBwZWQsIGNvbnN0IEludFNpemUmIGlvU3VyZmFj
ZVNpemUsIHVuc2lnbmVkIGlvU3VyZmFjZVRleHR1cmVJZCk7CisgICAgCisgICAgdW5zaWduZWQg
bV90ZXh0dXJlSWQ7CisgICAgYm9vbCBtX2hhc0FscGhhOworICAgIGJvb2wgbV9wcmVtdWx0aXBs
aWVkQWxwaGE7CisgICAgRmxvYXRSZWN0IG1fdXZSZWN0OworICAgIGJvb2wgbV9mbGlwcGVkOwor
ICAgIEludFNpemUgbV9pb1N1cmZhY2VTaXplOworICAgIHVuc2lnbmVkIG1faW9TdXJmYWNlVGV4
dHVyZUlkOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZUxheWVySW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVMYXllcklt
cGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmUwNmY3MmY2ZjI0OWI2MWM3MWFhM2RhZDMzNjQzMWE4YjJlNjJi
M2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVMYXllckltcGwuY3BwCkBAIC0wLDAgKzEsMTI2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorCisjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlTGF5ZXJJbXBsLmgiCisKKyNpbmNsdWRlICJFeHRl
bnNpb25zM0RDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5j
bHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgor
I2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgorI2luY2x1ZGUgImNjL0NDVGV4dHVyZURyYXdR
dWFkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NUZXh0dXJlTGF5ZXJJbXBsOjpDQ1Rl
eHR1cmVMYXllckltcGwoaW50IGlkKQorICAgIDogQ0NMYXllckltcGwoaWQpCisgICAgLCBtX3Rl
eHR1cmVJZCgwKQorICAgICwgbV9oYXNBbHBoYSh0cnVlKQorICAgICwgbV9wcmVtdWx0aXBsaWVk
QWxwaGEodHJ1ZSkKKyAgICAsIG1fZmxpcHBlZCh0cnVlKQorICAgICwgbV91dlJlY3QoMCwgMCwg
MSwgMSkKKyAgICAsIG1faW9TdXJmYWNlSWQoMCkKKyAgICAsIG1faW9TdXJmYWNlQ2hhbmdlZChm
YWxzZSkKKyAgICAsIG1faW9TdXJmYWNlVGV4dHVyZUlkKDApCit7Cit9CisKK0NDVGV4dHVyZUxh
eWVySW1wbDo6fkNDVGV4dHVyZUxheWVySW1wbCgpCit7CisgICAgLy8gRklYTUU6IGl0IHNlZW1z
IHRoZXJlIGlzIG5vIGxheWVyIHJlbmRlcmVyIC8gR3JhcGhpY3NDb250ZXh0M0QgYXZhaWxhYmxl
IGhlcmUuIElkZWFsbHkgd2UKKyAgICAvLyB3b3VsZCBsaWtlIHRvIGRlbGV0ZSBtX2lvU3VyZmFj
ZVRleHR1cmVJZC4KKyAgICBtX2lvU3VyZmFjZVRleHR1cmVJZCA9IDA7Cit9CisKK3ZvaWQgQ0NU
ZXh0dXJlTGF5ZXJJbXBsOjp3aWxsRHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVu
ZGVyZXIpCit7CisgICAgaWYgKG1faW9TdXJmYWNlQ2hhbmdlZCkgeworICAgICAgICBHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKKyAgICAgICAg
RXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25z
M0RDaHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7CisgICAgICAgIEFTU0VSVChl
eHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1faW9zdXJmYWNlIikpOworICAgICAgICBB
U1NFUlQoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKTsK
KworICAgICAgICBpZiAoIW1faW9TdXJmYWNlVGV4dHVyZUlkKQorICAgICAgICAgICAgbV9pb1N1
cmZhY2VUZXh0dXJlSWQgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisKKyAgICAgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShFeHRlbnNp
b25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgbV9pb1N1cmZhY2VUZXh0dXJlSWQpKTsKKyAg
ICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoRXh0ZW5zaW9uczNEOjpU
RVhUVVJFX1JFQ1RBTkdMRV9BUkIsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxU
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnRleFBhcmFtZXRlcmkoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpMSU5FQVIpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmko
RXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKKyAgICAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoRXh0ZW5zaW9uczNEOjpURVhU
VVJFX1JFQ1RBTkdMRV9BUkIsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKKyAgICAgICAgZXh0ZW5zaW9ucy0+dGV4
SW1hZ2VJT1N1cmZhY2UyRENIUk9NSVVNKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVf
QVJCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9p
b1N1cmZhY2VTaXplLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2lvU3VyZmFjZVNpemUuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lvU3VyZmFjZUlkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgICAgIC8vIERv
IG5vdCBjaGVjayBmb3IgZXJyb3IgY29uZGl0aW9ucy4gdGV4SW1hZ2VJT1N1cmZhY2UyRENIUk9N
SVVNIGlzIHN1cHBvc2VkIHRvIGhvbGQgb24gdG8KKyAgICAgICAgLy8gdGhlIGxhc3QgZ29vZCBJ
T1N1cmZhY2UgaWYgdGhlIG5ldyBvbmUgaXMgYWxyZWFkeSBjbG9zZWQuIFRoaXMgaXMgb25seSBh
IHBvc3NpYmlsaXR5CisgICAgICAgIC8vIGR1cmluZyBsaXZlIHJlc2l6aW5nIG9mIHBsdWdpbnMu
IEhvd2V2ZXIsIGl0IHNlZW1zIHRoYXQgdGhpcyBpcyBub3Qgc3VmZmljaWVudCB0bworICAgICAg
ICAvLyBjb21wbGV0ZWx5IGd1YXJkIGFnYWluc3QgZ2FyYmFnZSBiZWluZyBkcmF3bi4gSWYgdGhp
cyBpcyBmb3VuZCB0byBiZSBhIHNpZ25pZmljYW50IGlzc3VlLAorICAgICAgICAvLyBpdCBtYXkg
YmUgbmVjZXNzYXJ5IHRvIGV4cGxpY2l0bHkgdGVsbCB0aGUgZW1iZWRkZXIgd2hlbiB0byBmcmVl
IHRoZSBzdXJmYWNlcyBpdCBoYXMKKyAgICAgICAgLy8gYWxsb2NhdGVkLgorICAgICAgICBtX2lv
U3VyZmFjZUNoYW5nZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NUZXh0dXJlTGF5ZXJJ
bXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1
YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKQoreworICAgIEludFJlY3QgcXVhZFJlY3QoSW50UG9p
bnQoKSwgYm91bmRzKCkpOworICAgIHF1YWRMaXN0LmFwcGVuZChDQ1RleHR1cmVEcmF3UXVhZDo6
Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIG1fdGV4dHVyZUlkLCBtX2hhc0FscGhh
LCBtX3ByZW11bHRpcGxpZWRBbHBoYSwgbV91dlJlY3QsIG1fZmxpcHBlZCwgbV9pb1N1cmZhY2VT
aXplLCBtX2lvU3VyZmFjZVRleHR1cmVJZCkpOworfQorCit2b2lkIENDVGV4dHVyZUxheWVySW1w
bDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QK
K3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAidGV4dHVyZSBsYXll
ciB0ZXh0dXJlIGlkOiAiIDw8IG1fdGV4dHVyZUlkIDw8ICIgcHJlbXVsdGlwbGllZDogIiA8PCBt
X3ByZW11bHRpcGxpZWRBbHBoYSA8PCAiXG4iOworICAgIENDTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQ
cm9wZXJ0aWVzKHRzLCBpbmRlbnQpOworfQorCit2b2lkIENDVGV4dHVyZUxheWVySW1wbDo6ZGlk
TG9zZUNvbnRleHQoKQoreworICAgIGlmIChtX2lvU3VyZmFjZUlkKSB7CisgICAgICAgIC8vIFdl
IGRvbid0IGhhdmUgYSB2YWxpZCB0ZXh0dXJlIElEIGluIHRoZSBuZXcgY29udGV4dDsgaG93ZXZl
ciwKKyAgICAgICAgLy8gdGhlIElPU3VyZmFjZSBpcyBzdGlsbCB2YWxpZC4KKyAgICAgICAgbV9p
b1N1cmZhY2VUZXh0dXJlSWQgPSAwOworICAgICAgICBtX2lvU3VyZmFjZUNoYW5nZWQgPSB0cnVl
OworICAgIH0KK30KKwordm9pZCBDQ1RleHR1cmVMYXllckltcGw6OnNldElPU3VyZmFjZVByb3Bl
cnRpZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgdW5zaWduZWQgaW9TdXJmYWNlSWQpCit7CisgICAg
aWYgKG1faW9TdXJmYWNlSWQgIT0gaW9TdXJmYWNlSWQpCisgICAgICAgIG1faW9TdXJmYWNlQ2hh
bmdlZCA9IHRydWU7CisKKyAgICBtX2lvU3VyZmFjZVNpemUgPSBzaXplOworICAgIG1faW9TdXJm
YWNlSWQgPSBpb1N1cmZhY2VJZDsKK30KK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGV4dHVyZUxheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlTGF5ZXJJbXBsLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YTgxYzM2MTZhZWRiNjQ1YTIxYTczNTBiOTFiZDkzZDYwN2Y4YmM3MgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVy
ZUxheWVySW1wbC5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGV4dHVyZUxh
eWVySW1wbF9oCisjZGVmaW5lIENDVGV4dHVyZUxheWVySW1wbF9oCisKKyNpbmNsdWRlICJQcm9n
cmFtQmluZGluZy5oIgorI2luY2x1ZGUgIlNoYWRlckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllckltcGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ1RleHR1cmVM
YXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDVGV4dHVyZUxheWVySW1wbD4gY3JlYXRlKGludCBpZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ0NUZXh0dXJlTGF5ZXJJbXBsKGlkKSk7CisgICAgfQorICAg
IHZpcnR1YWwgfkNDVGV4dHVyZUxheWVySW1wbCgpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGVu
ZFF1YWRzKENDUXVhZEN1bGxlciYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKik7CisKKyAgICB0
eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJS
R0JBVGV4RmxpcEFscGhhPiBQcm9ncmFtRmxpcDsKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5n
PFZlcnRleFNoYWRlclBvc1RleFN0cmV0Y2gsIEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhhPiBQ
cm9ncmFtU3RyZXRjaDsKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBv
c1RleFN0cmV0Y2gsIEZyYWdtZW50U2hhZGVyUkdCQVRleEZsaXBBbHBoYT4gUHJvZ3JhbVN0cmV0
Y2hGbGlwOworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4VHJh
bnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhSZWN0QWxwaGE+IFRleFJlY3RQcm9ncmFtOwor
ICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBG
cmFnbWVudFNoYWRlclJHQkFUZXhSZWN0RmxpcEFscGhhPiBUZXhSZWN0UHJvZ3JhbUZsaXA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgd2lsbERyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CisgICAg
dmlydHVhbCB2b2lkIGRpZExvc2VDb250ZXh0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcExh
eWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CisKKyAgICB1bnNp
Z25lZCB0ZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQorICAgIHZvaWQg
c2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlkKSB7IG1fdGV4dHVyZUlkID0gaWQ7IH0KKyAgICB2b2lk
IHNldEhhc0FscGhhKGJvb2wgaGFzQWxwaGEpIHsgbV9oYXNBbHBoYSA9IGhhc0FscGhhOyB9Cisg
ICAgdm9pZCBzZXRQcmVtdWx0aXBsaWVkQWxwaGEoYm9vbCBwcmVtdWx0aXBsaWVkQWxwaGEpIHsg
bV9wcmVtdWx0aXBsaWVkQWxwaGEgPSBwcmVtdWx0aXBsaWVkQWxwaGE7IH0KKyAgICB2b2lkIHNl
dEZsaXBwZWQoYm9vbCBmbGlwcGVkKSB7IG1fZmxpcHBlZCA9IGZsaXBwZWQ7IH0KKyAgICB2b2lk
IHNldFVWUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIHsgbV91dlJlY3QgPSByZWN0OyB9Cisg
ICAgdm9pZCBzZXRJT1N1cmZhY2VQcm9wZXJ0aWVzKGNvbnN0IEludFNpemUmLCB1bnNpZ25lZCBp
b1N1cmZhY2VJZCk7CisKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDQ1RleHR1cmVMYXllcklt
cGwoaW50KTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBj
b25zdCB7IHJldHVybiAiVGV4dHVyZUxheWVyIjsgfQorCisgICAgdW5zaWduZWQgbV90ZXh0dXJl
SWQ7CisgICAgYm9vbCBtX2hhc0FscGhhOworICAgIGJvb2wgbV9wcmVtdWx0aXBsaWVkQWxwaGE7
CisgICAgYm9vbCBtX2ZsaXBwZWQ7CisgICAgRmxvYXRSZWN0IG1fdXZSZWN0OworCisgICAgLy8g
SW50ZXJuYWxzIGZvciBJT1N1cmZhY2UtYmFja2VkIHRleHR1cmVzLgorICAgIHVuc2lnbmVkIG1f
aW9TdXJmYWNlSWQ7CisgICAgSW50U2l6ZSBtX2lvU3VyZmFjZVNpemU7CisgICAgYm9vbCBtX2lv
U3VyZmFjZUNoYW5nZWQ7CisgICAgdW5zaWduZWQgbV9pb1N1cmZhY2VUZXh0dXJlSWQ7Cit9Owor
Cit9CisKKyNlbmRpZiAvLyBDQ1RleHR1cmVMYXllckltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAK
aW5kZXggMDNhZGIzYzg4OGFiZmY4NDBmYTFlNjA5OTdmNmYwMDY1MTRmZGFlNS4uMTRjOTJhZTlm
N2M5MmU5YzdhYTk2MzQ0MzhkYmQ5MjdjZTBjYWQ4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBA
IC0zNCw4ICszNCw4IEBACiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJX
ZWJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiY2MvQ0NDYW52
YXNMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCisjaW5j
bHVkZSAiY2MvQ0NUZXh0dXJlTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBk
YXRlci5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYlRocmVhZC5oIgpAQCAtMTYyLDE1ICsxNjIsMTUgQEAgcHJvdGVj
dGVkOgogICAgICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNjb3BlZEltcGxUaHJl
YWQ7CiAKICAgICAgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gbGF5ZXJJbXBsID0gY2FudmFz
LT5jcmVhdGVDQ0xheWVySW1wbCgpOwotICAgICAgICAgICAgRVhQRUNUX0VRKDB1LCBzdGF0aWNf
Y2FzdDxDQ0NhbnZhc0xheWVySW1wbCo+KGxheWVySW1wbC5nZXQoKSktPnRleHR1cmVJZCgpKTsK
KyAgICAgICAgICAgIEVYUEVDVF9FUSgwdSwgc3RhdGljX2Nhc3Q8Q0NUZXh0dXJlTGF5ZXJJbXBs
Kj4obGF5ZXJJbXBsLmdldCgpKS0+dGV4dHVyZUlkKCkpOwogCiAgICAgICAgICAgICBjYW52YXMt
PnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoaW1wbENvbnRleHQuZ2V0KCksIHVwZGF0ZXIpOwog
ICAgICAgICAgICAgY2FudmFzLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CiAK
ICAgICAgICAgICAgIGlmICh0aHJlYWRlZCkKLSAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoZnJv
bnRUZXh0dXJlSWQsIHN0YXRpY19jYXN0PENDQ2FudmFzTGF5ZXJJbXBsKj4obGF5ZXJJbXBsLmdl
dCgpKS0+dGV4dHVyZUlkKCkpOworICAgICAgICAgICAgICAgIEVYUEVDVF9FUShmcm9udFRleHR1
cmVJZCwgc3RhdGljX2Nhc3Q8Q0NUZXh0dXJlTGF5ZXJJbXBsKj4obGF5ZXJJbXBsLmdldCgpKS0+
dGV4dHVyZUlkKCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEVYUEVDVF9F
UShiYWNrVGV4dHVyZUlkLCBzdGF0aWNfY2FzdDxDQ0NhbnZhc0xheWVySW1wbCo+KGxheWVySW1w
bC5nZXQoKSktPnRleHR1cmVJZCgpKTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoYmFja1Rl
eHR1cmVJZCwgc3RhdGljX2Nhc3Q8Q0NUZXh0dXJlTGF5ZXJJbXBsKj4obGF5ZXJJbXBsLmdldCgp
KS0+dGV4dHVyZUlkKCkpOwogICAgICAgICB9CiAgICAgICAgIGNhbnZhcy5jbGVhcigpOwogICAg
ICAgICBsYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9y
eVRvTGltaXQoMCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>