<?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>190697</bug_id>
          
          <creation_ts>2018-10-17 20:10:14 -0700</creation_ts>
          <short_desc>Add new image type for CSS painting API</short_desc>
          <delta_ts>2018-10-19 21:26:32 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>190217</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Justin Michaud">justin_michaud</reporter>
          <assigned_to name="Justin Michaud">justin_michaud</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1470452</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2018-10-17 20:10:14 -0700</bug_when>
    <thetext>Add new image type for CSS painting API, and hook it up to draw something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470459</commentid>
    <comment_count>1</comment_count>
      <attachid>352681</attachid>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2018-10-17 20:33:15 -0700</bug_when>
    <thetext>Created attachment 352681
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470604</commentid>
    <comment_count>2</comment_count>
      <attachid>352710</attachid>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2018-10-18 11:34:53 -0700</bug_when>
    <thetext>Created attachment 352710
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470731</commentid>
    <comment_count>3</comment_count>
      <attachid>352710</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2018-10-18 16:13:33 -0700</bug_when>
    <thetext>Comment on attachment 352710
Patch

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

&gt; Source/WebCore/platform/graphics/CustomPaintImage.cpp:76
&gt; +    auto canvas = OffscreenCanvas::create(*scriptExecutionContext, destSize.width(), destSize.height());
&gt; +    ExceptionOr&lt;OffscreenRenderingContext&gt; contextOrException = canvas-&gt;getContext(*execState, OffscreenCanvas::RenderingContextType::Webgl, { });
&gt; +
&gt; +    if (contextOrException.hasException())
&gt; +        return ImageDrawResult::DidNothing;
&gt; +    auto context = contextOrException.releaseReturnValue();
&gt; +
&gt; +    context-&gt;clearColor(0, 0, 0, 1.0);
&gt; +    context-&gt;clear(GL_COLOR_BUFFER_BIT);
&gt; +
&gt; +    auto result = m_paintCallback-&gt;handleEvent(*context);
&gt; +    if (result.type() != CallbackResultType::Success)
&gt; +        return ImageDrawResult::DidNothing;
&gt; +
&gt; +    auto bitmap = canvas-&gt;transferToImageBitmap();
&gt; +    if (!bitmap)
&gt; +        return ImageDrawResult::DidNothing;
&gt; +
&gt; +    destContext.drawImage(*bitmap-&gt;buffer()-&gt;copyImage(), FloatPoint());

This will work fine but will be too slow in practice, since transferToImageBitmap is a GPU readback. However, it&apos;s a good place to start.

Ultimately I don&apos;t expect we&apos;ll want to support WebGL initially - only 2d contexts. It&apos;s a bit scary to think that any element on a page could require a WebGL canvas/context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470732</commentid>
    <comment_count>4</comment_count>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2018-10-18 16:25:12 -0700</bug_when>
    <thetext>(In reply to Dean Jackson from comment #3)
&gt; Comment on attachment 352710 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=352710&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/CustomPaintImage.cpp:76
&gt; &gt; +    auto canvas = OffscreenCanvas::create(*scriptExecutionContext, destSize.width(), destSize.height());
&gt; &gt; +    ExceptionOr&lt;OffscreenRenderingContext&gt; contextOrException = canvas-&gt;getContext(*execState, OffscreenCanvas::RenderingContextType::Webgl, { });
&gt; &gt; +
&gt; &gt; +    if (contextOrException.hasException())
&gt; &gt; +        return ImageDrawResult::DidNothing;
&gt; &gt; +    auto context = contextOrException.releaseReturnValue();
&gt; &gt; +
&gt; &gt; +    context-&gt;clearColor(0, 0, 0, 1.0);
&gt; &gt; +    context-&gt;clear(GL_COLOR_BUFFER_BIT);
&gt; &gt; +
&gt; &gt; +    auto result = m_paintCallback-&gt;handleEvent(*context);
&gt; &gt; +    if (result.type() != CallbackResultType::Success)
&gt; &gt; +        return ImageDrawResult::DidNothing;
&gt; &gt; +
&gt; &gt; +    auto bitmap = canvas-&gt;transferToImageBitmap();
&gt; &gt; +    if (!bitmap)
&gt; &gt; +        return ImageDrawResult::DidNothing;
&gt; &gt; +
&gt; &gt; +    destContext.drawImage(*bitmap-&gt;buffer()-&gt;copyImage(), FloatPoint());
&gt; 
&gt; This will work fine but will be too slow in practice, since
&gt; transferToImageBitmap is a GPU readback. However, it&apos;s a good place to start.
&gt; 
&gt; Ultimately I don&apos;t expect we&apos;ll want to support WebGL initially - only 2d
&gt; contexts. It&apos;s a bit scary to think that any element on a page could require
&gt; a WebGL canvas/context.

I did that because it was the only offscreen canvas I could get easily. The spec actually only supports 2d.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470743</commentid>
    <comment_count>5</comment_count>
      <attachid>352710</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-18 16:59:58 -0700</bug_when>
    <thetext>Comment on attachment 352710
Patch

Clearing flags on attachment: 352710

Committed r237276: &lt;https://trac.webkit.org/changeset/237276&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470744</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-18 17:00:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470746</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-18 17:00:50 -0700</bug_when>
    <thetext>&lt;rdar://problem/45390166&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1471064</commentid>
    <comment_count>8</comment_count>
      <attachid>352710</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-10-19 21:26:32 -0700</bug_when>
    <thetext>Comment on attachment 352710
Patch

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

In general this approach doesn&apos;t seem right. We should not be firing the callback synchronously at paint time. We should be firing the call back at requestAnimationFrame time; the context drawn into should be backed by a display list, and in this doCustomPaint code we should just be playing back that display list.

&gt; Source/WebCore/css/CSSPaintCallback.h:41
&gt; +    virtual CallbackResult&lt;void&gt; handleEvent(WebGLRenderingContext&amp;) = 0;

Why is this using WebGLRenderingContext? The custom paint API is al 2d.

&gt; Source/WebCore/platform/graphics/CustomPaintImage.cpp:59
&gt; +    ExceptionOr&lt;OffscreenRenderingContext&gt; contextOrException = canvas-&gt;getContext(*execState, OffscreenCanvas::RenderingContextType::Webgl, { });

Shouldn&apos;t be WebGL.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352681</attachid>
            <date>2018-10-17 20:33:15 -0700</date>
            <delta_ts>2018-10-18 11:34:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190697-20181017203312.patch</filename>
            <type>text/plain</type>
            <size>24691</size>
            <attacher name="Justin Michaud">justin_michaud</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3MjQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTFkYzRiN2YwZjUxMTU3
OGY5OWQyNDgzOGFmZTQ5NzdiZTM5NjM3ZC4uYmJhNDFmYzMxZGM3M2EwMjg4ZGQwMjJhYTNhNjY1
ZDNjN2E0ZDE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE4LTEwLTE3ICBKdXN0
aW4gTWljaGF1ZCAgPGp1c3Rpbl9taWNoYXVkQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbmV3
IGltYWdlIHR5cGUgZm9yIENTUyBwYWludGluZyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MDY5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBpbWFnZSB0eXBlIGZvciB0aGUgQ1NT
IHBhaW50aW5nIEFQSSwgYW5kIGhvb2sgaXQgdXAgc28gaXQgY2FuIGJlIGRyYXduLgorICAgICAg
ICBGb3Igbm93LCBpdCB1c2VzIGEgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHQgZnJvbSBPZmZsaW5l
Q2FudmFzIGJlY2F1c2UgdGhhdCB3YXMKKyAgICAgICAgZWFzeSB0byBob29rIHVwLiBUaGUgc3Bl
YyBhY3R1YWxseSBjYWxscyBmb3IgYSBSZW5kZXJpbmdDb250ZXh0MkQsIHdoaWNoIGNhbiBiZQor
ICAgICAgICBoYW5kbGVkIGluIGFub3RoZXIgcGF0Y2guCisKKyAgICAgICAgKiBTb3VyY2VzLnR4
dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZTo6aXNGaXhlZFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Zml4ZWRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0lt
YWdlR2VuZXJhdG9yVmFsdWU6OmlzUGVuZGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NJbWFnZUdlbmVyYXRvclZhbHVlOjprbm93blRvQmVPcGFxdWUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6bG9hZFN1YmltYWdlcyk6CisgICAgICAg
ICogY3NzL0NTU1BhaW50Q2FsbGJhY2suaDoKKyAgICAgICAgKiBjc3MvQ1NTUGFpbnRDYWxsYmFj
ay5pZGw6CisgICAgICAgICogY3NzL0NTU1BhaW50SW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYWludEltYWdlVmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTUGFp
bnRJbWFnZVZhbHVlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJ
bWFnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRJbWFnZTo6Q3Vz
dG9tUGFpbnRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludEltYWdlOjpkb0N1
c3RvbVBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50SW1hZ2U6OmRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvY3NzL0NTU1BhaW50Q2FsbGJhY2suaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmlzQ3VzdG9tUGFpbnRJ
bWFnZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoK
KwogMjAxOC0xMC0xNyAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBhcHBsZS5jb20+
CiAKICAgICAgICAgUGFyc2UgcGFpbnQoKSBhbmQgc3RvcmUgcGFpbnQgY2FsbGJhY2tzIGZvciBD
U1MgUGFpbnRpbmcgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGQxOTNkOWUxZWI2ZTJlNTkwZjIxMzIz
ZmFmOWU5MGE3Y2QzZTgyMTUuLjU0YmJjODlhNTVjZDc5MGI0ZDUwOTEzODVmMzg3MWM2YmQyOGY0
ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xNjEzLDYgKzE2MTMsNyBAQCBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Q3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9DdXN0b21QYWlu
dEltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2OGY3MWQ0
MGY0YTc0YWUyOGQyNzIzNzA1MThhYjc5MDFiYmFiYmI0Li5iMjUyYjE2YmI5MmZmZjliZjE3NjBl
ZGI0NjkxZWM4NTY4NWRjOWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzUyLDYgKzEzNTIsNyBAQAogCQk0QjZCNUNDMDIx
NjQzODY0MDA2MDM4MTcgLyogQ1NTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCNkI1Q0JGMjE2NDM4NjQwMDYw
MzgxNyAvKiBDU1NQYWludFdvcmtsZXRHbG9iYWxTY29wZS5oICovOyB9OwogCQk0QjZFODc2OTIx
NzZENjkyMDA0MjBFNUUgLyogQ1NTUGFpbnRJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjZFODc2ODIxNzZENjkyMDA0MjBFNUUgLyog
Q1NTUGFpbnRJbWFnZVZhbHVlLmggKi87IH07CiAJCTRCNkZBNkY0MEMzOUU0OEMwMDA4NzAxMSAv
KiBTbWFydFJlcGxhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRCNkZBNkYyMEMzOUU0OEMwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0QjdBRTQ5MzIxNzdC
NTZGMDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEI3QUU0OTIyMTc3QjU2RjAwQzU5OTU5IC8qIEN1c3Rv
bVBhaW50SW1hZ2UuaCAqLzsgfTsKIAkJNEJBRTk1QjEwQjJGQTlDRTAwQUVEOEEwIC8qIEVkaXRv
ckRlbGV0ZUFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEJBRTk1QjAwQjJGQTlDRTAwQUVEOEEwIC8qIEVkaXRvckRlbGV0ZUFjdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTRCREEzRkZF
MjE1MUI2RjUwMEZENjYwNCAvKiBET01DU1NDdXN0b21Qcm9wZXJ0eURlc2NyaXB0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCREEzRkY4MjE1MUI2
RjIwMEZENjYwNCAvKiBET01DU1NDdXN0b21Qcm9wZXJ0eURlc2NyaXB0b3IuaCAqLzsgfTsKIAkJ
NEJEQTNGRkYyMTUxQjZGNTAwRkQ2NjA0IC8qIERPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCREEzRkY5
MjE1MUI2RjMwMEZENjYwNCAvKiBET01DU1NSZWdpc3RlckN1c3RvbVByb3BlcnR5LmggKi87IH07
CkBAIC03ODkzLDYgKzc4OTQsOCBAQAogCQk0QjZFODc2QjIxNzZEOEExMDA0MjBFNUUgLyogQ1NT
UGFpbnRJbWFnZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1BhaW50SW1hZ2VWYWx1
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCNkZBNkYyMEMzOUU0OEMwMDA4
NzAxMSAvKiBTbWFydFJlcGxhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U21hcnRSZXBsYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCNkZBNkY2MEMz
OUU0QTEwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2VDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTbWFydFJlcGxhY2VDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTRCN0FFNDkyMjE3N0I1NkYwMEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEN1c3RvbVBhaW50SW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNEI3QUU0OTUyMTc3QjYzRTAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ3VzdG9tUGFpbnRJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTRCQUU5NUIwMEIyRkE5Q0UwMEFFRDhBMCAvKiBFZGl0b3JEZWxldGVB
Y3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdG9yRGVsZXRlQWN0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCREEzRkY1MjE1MUI2RjAwMEZE
NjYwNCAvKiBET01DU1NSZWdpc3RlckN1c3RvbVByb3BlcnR5LmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBET01DU1NSZWdpc3RlckN1c3RvbVByb3BlcnR5LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNEJEQTNGRjcyMTUxQjZGMTAwRkQ2NjA0IC8qIERPTUNTU1JlZ2lzdGVy
Q3VzdG9tUHJvcGVydHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMzk0NCw2ICsyMzk0Nyw4IEBACiAJCQkJQzJGNEU3ODkxRTQ1QUVERjAwNkQ3MTA1
IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oICovLAogCQkJCTJEMkZDMDU0MTQ2MENENkYwMDI2
MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgKi8sCiAJCQkJMkQyRkMwNTUxNDYw
Q0Q2RjAwMjYzNjMzIC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmggKi8sCisJCQkJNEI3QUU0
OTUyMTc3QjYzRTAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuY3BwICovLAorCQkJCTRCN0FF
NDkyMjE3N0I1NkYwMEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdlLmggKi8sCiAJCQkJQThDQjQx
MDIwRTg1QjhBNTAwMzJDNEYwIC8qIERhc2hBcnJheS5oICovLAogCQkJCTU1NTEzMDAwMUU3Q0ND
Q0EwMEE2OUUzOCAvKiBEZWNvZGluZ09wdGlvbnMuaCAqLywKIAkJCQk0OUZDN0E0RjE0NDRBRjVG
MDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCAqLywKQEAgLTI4MDYwLDYgKzI4
MDY1LDcgQEAKIAkJCQk5M0Q0MzdBMDFENTdCMTlBMDBBQjg1RUEgLyogQ3VzdG9tRWxlbWVudFJl
YWN0aW9uUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTlCRDRFOTFCMUM0NjJDRkMwMDUwNjVC
QyAvKiBDdXN0b21FbGVtZW50UmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyQ0QzMjVB
MTE1N0U1N0MwMDYzQjBBNyAvKiBDdXN0b21FdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEI3
QUU0OTMyMTc3QjU2RjAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4Q0I0MTNFMEU4NjMzRkQwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4MEU2RDBCMEExOTg5Q0EwMDdGQjhDNSAvKiBEYXNoYm9hcmRSZWdpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTk3QkM2QTIxMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZS5o
IGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZS5jcHAKaW5kZXggYjYwMDAzMzM5NTI1NDIwYTAwYWQyNjAxMTZjYzkwYWIzNDdhMDRhZS4u
ZmZkZDNkMGFhNjU3ZjI1ZWFmMzFkNTcwYzU4NjhlZDUzMDllMmVmZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcApAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIkNTU0dyYWRpZW50VmFsdWUuaCIKICNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgi
CiAjaW5jbHVkZSAiQ1NTTmFtZWRJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUGFpbnRJbWFn
ZVZhbHVlLmgiCiAjaW5jbHVkZSAiR2VuZXJhdGVkSW1hZ2UuaCIKICNpbmNsdWRlICJIVE1MQ2Fu
dmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgpAQCAt
MTUyLDcgKzE1Myw3IEBAIFJlZlB0cjxJbWFnZT4gQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6aW1h
Z2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0CiAgICAgICAgIHJldHVybiBk
b3duY2FzdDxDU1NDb25pY0dyYWRpZW50VmFsdWU+KCp0aGlzKS5pbWFnZShyZW5kZXJlciwgc2l6
ZSk7CiAjaWYgRU5BQkxFKENTU19QQUlOVElOR19BUEkpCiAgICAgY2FzZSBQYWludEltYWdlQ2xh
c3M6Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NT
UGFpbnRJbWFnZVZhbHVlPigqdGhpcykuaW1hZ2UocmVuZGVyZXIsIHNpemUpOwogI2VuZGlmCiAg
ICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNzksNyArMTgw
LDcgQEAgYm9vbCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjppc0ZpeGVkU2l6ZSgpIGNvbnN0CiAg
ICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDb25pY0dyYWRpZW50VmFsdWU+KCp0aGlzKS5pc0Zp
eGVkU2l6ZSgpOwogI2lmIEVOQUJMRShDU1NfUEFJTlRJTkdfQVBJKQogICAgIGNhc2UgUGFpbnRJ
bWFnZUNsYXNzOgotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBkb3duY2Fz
dDxDU1NQYWludEltYWdlVmFsdWU+KCp0aGlzKS5pc0ZpeGVkU2l6ZSgpOwogI2VuZGlmCiAgICAg
ZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMDQsNyArMjA1LDcg
QEAgRmxvYXRTaXplIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmZpeGVkU2l6ZShjb25zdCBSZW5k
ZXJFbGVtZW50JiByZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0NvbmljR3Jh
ZGllbnRWYWx1ZT4oKnRoaXMpLmZpeGVkU2l6ZShyZW5kZXJlcik7CiAjaWYgRU5BQkxFKENTU19Q
QUlOVElOR19BUEkpCiAgICAgY2FzZSBQYWludEltYWdlQ2xhc3M6Ci0gICAgICAgIHJldHVybiBG
bG9hdFNpemUoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1BhaW50SW1hZ2VWYWx1ZT4o
KnRoaXMpLmZpeGVkU2l6ZShyZW5kZXJlcik7CiAjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIzMSw3ICsyMzIsNyBAQCBib29sIENTU0ltYWdl
R2VuZXJhdG9yVmFsdWU6OmlzUGVuZGluZygpIGNvbnN0CiAgICAgICAgIHJldHVybiBkb3duY2Fz
dDxDU1NDb25pY0dyYWRpZW50VmFsdWU+KCp0aGlzKS5pc1BlbmRpbmcoKTsKICNpZiBFTkFCTEUo
Q1NTX1BBSU5USU5HX0FQSSkKICAgICBjYXNlIFBhaW50SW1hZ2VDbGFzczoKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUGFpbnRJbWFnZVZhbHVlPigq
dGhpcykuaXNQZW5kaW5nKCk7CiAjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTI1OCw3ICsyNTksNyBAQCBib29sIENTU0ltYWdlR2VuZXJhdG9y
VmFsdWU6Omtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikgY29u
cwogICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ29uaWNHcmFkaWVudFZhbHVlPigqdGhpcyku
a25vd25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsKICNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkK
ICAgICBjYXNlIFBhaW50SW1hZ2VDbGFzczoKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q1NTUGFpbnRJbWFnZVZhbHVlPigqdGhpcykua25vd25Ub0JlT3Bh
cXVlKHJlbmRlcmVyKTsKICNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpAQCAtMjg5LDYgKzI5MCw3IEBAIHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZTo6bG9hZFN1YmltYWdlcyhDYWNoZWRSZXNvdXJjZUxvYWRlciYgY2FjaGVkUmVzb3VyY2VMCiAg
ICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShDU1NfUEFJTlRJTkdfQVBJKQogICAgIGNhc2UgUGFp
bnRJbWFnZUNsYXNzOgorICAgICAgICBkb3duY2FzdDxDU1NQYWludEltYWdlVmFsdWU+KCp0aGlz
KS5sb2FkU3ViaW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyLCBvcHRpb25zKTsKICAgICAgICAg
YnJlYWs7CiAjZW5kaWYKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhaW50Q2FsbGJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWludENhbGxi
YWNrLmgKaW5kZXggZDQ0YmRiM2MwZDg3YzMwODZiYzlmYjMwNjhjNWY2Mzk1MTJhOThmNy4uZjBl
YzJjNDQxMzVhZTQ0Y2M4OTM1MDZkODVhNTA3NTk2M2IyMzEzNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhaW50Q2FsbGJhY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFpbnRDYWxsYmFjay5oCkBAIC0zMiwxMiArMzIsMTMgQEAKICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ7CiAKIGNsYXNzIENTU1BhaW50Q2FsbGJhY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxDU1NQ
YWludENhbGxiYWNrPiwgcHVibGljIEFjdGl2ZURPTUNhbGxiYWNrIHsKIHB1YmxpYzoKICAgICB1
c2luZyBBY3RpdmVET01DYWxsYmFjazo6QWN0aXZlRE9NQ2FsbGJhY2s7CiAKLSAgICB2aXJ0dWFs
IENhbGxiYWNrUmVzdWx0PHZvaWQ+IGhhbmRsZUV2ZW50KCkgPSAwOworICAgIHZpcnR1YWwgQ2Fs
bGJhY2tSZXN1bHQ8dm9pZD4gaGFuZGxlRXZlbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0JikgPSAw
OwogCiAgICAgdmlydHVhbCB+Q1NTUGFpbnRDYWxsYmFjaygpCiAgICAgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhaW50Q2FsbGJhY2suaWRsIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhaW50Q2FsbGJhY2suaWRsCmluZGV4IDk2OWM4NjU3OGMwMzVlYWY1ZTE4NWYwNzdi
ZjQyNjhlZWNlMzQxMmQuLjc2ZDliNmM5NWJhMWNmOGQyOTUyYTQ3OWQxYzUzMDc0OTRjYzgwOWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWludENhbGxiYWNrLmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFpbnRDYWxsYmFjay5pZGwKQEAgLTI2LDQgKzI2LDQg
QEAKIFsKICAgICBFbmFibGVkQXRSdW50aW1lPUNTU1BhaW50aW5nQVBJLAogICAgIENvbmRpdGlv
bmFsPUNTU19QQUlOVElOR19BUEksCi1dIGNhbGxiYWNrIENTU1BhaW50Q2FsbGJhY2sgPSB2b2lk
ICgpOworXSBjYWxsYmFjayBDU1NQYWludENhbGxiYWNrID0gdm9pZCAoV2ViR0xSZW5kZXJpbmdD
b250ZXh0IGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhaW50
SW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFpbnRJbWFnZVZhbHVlLmNw
cAppbmRleCBjNDIxYTFkMmE5OTM0MDk3ZDdmZjJmZWEwNTMzZGJmMmQyYzY1NDM0Li5hNjkwZTQx
ZDc2NzFkZWEwMzUzMjFmYWZlN2I3ZmE5NzExYWJkYTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFpbnRJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFpbnRJbWFnZVZhbHVlLmNwcApAQCAtMjksNiArMjksOSBAQAogCiAjaWYgRU5BQkxFKENT
U19QQUlOVElOR19BUEkpCiAKKyNpbmNsdWRlICJDU1NQYWludFdvcmtsZXRHbG9iYWxTY29wZS5o
IgorI2luY2x1ZGUgIkN1c3RvbVBhaW50SW1hZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJFbGVtZW50
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC00Myw2ICs0NiwxOCBAQCBTdHJpbmcgQ1NTUGFpbnRJbWFnZVZhbHVlOjpjdXN0
b21DU1NUZXh0KCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKK1Jl
ZlB0cjxJbWFnZT4gQ1NTUGFpbnRJbWFnZVZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50JiByZW5k
ZXJFbGVtZW50LCBjb25zdCBGbG9hdFNpemUmIHNpemUpCit7CisgICAgaWYgKHNpemUuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvJiBzZWxlY3RlZEdsb2JhbFNj
b3BlID0gcmVuZGVyRWxlbWVudC5kb2N1bWVudCgpLmVuc3VyZUNTU1BhaW50V29ya2xldEdsb2Jh
bFNjb3BlKCk7CisgICAgYXV0byogcmVnaXN0cmF0aW9uID0gc2VsZWN0ZWRHbG9iYWxTY29wZS5w
YWludERlZmluaXRpb25NYXAoKS5nZXQobV9uYW1lKTsKKworICAgIGlmICghcmVnaXN0cmF0aW9u
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gQ3VzdG9tUGFpbnRJbWFnZTo6
Y3JlYXRlKCpyZWdpc3RyYXRpb24sIHNpemUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhaW50SW1hZ2VW
YWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhaW50SW1hZ2VWYWx1ZS5oCmluZGV4IGI2
Y2E4NDUzMmVmMzkyYWEyYjRhZDRiZjM1OWExOTJlNjNjMTU4ZWYuLjU3Njc5ZmMwNWI3NzIxOWMy
NGJkOTliMWM5YjE2YjhkOWNhODVlNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYWludEltYWdlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFpbnRJbWFn
ZVZhbHVlLmgKQEAgLTM5LDEwICszOSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IENTU1BhaW50SW1hZ2VWYWx1ZShuYW1lKSk7CiAgICAgfQogCi0gICAgYm9vbCBl
cXVhbHMoY29uc3QgQ1NTUGFpbnRJbWFnZVZhbHVlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9u
YW1lID09IG90aGVyLm1fbmFtZTsgfQorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UoUmVuZGVyRWxl
bWVudCYsIGNvbnN0IEZsb2F0U2l6ZSYpOwogCisgICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTUGFp
bnRJbWFnZVZhbHVlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9uYW1lID09IG90aGVyLm1fbmFt
ZTsgfQogICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7CiAKKyAgICBib29sIGlzRml4
ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBGbG9hdFNpemUgZml4ZWRTaXpl
KGNvbnN0IFJlbmRlckVsZW1lbnQmKSBjb25zdCB7IHJldHVybiBGbG9hdFNpemUoKTsgfQorCisg
ICAgYm9vbCBpc1BlbmRpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wga25v
d25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQmKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorCisgICAgdm9pZCBsb2FkU3ViaW1hZ2VzKENhY2hlZFJlc291cmNlTG9hZGVyJiwgY29uc3Qg
UmVzb3VyY2VMb2FkZXJPcHRpb25zJikgeyB9CisKIHByaXZhdGU6CiAgICAgQ1NTUGFpbnRJbWFn
ZVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICAgICAgOiBDU1NJbWFnZUdlbmVyYXRvclZh
bHVlKFBhaW50SW1hZ2VDbGFzcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGIzNDkzNjI3OWM0YzYx
OWJmZWVmNTNkMDg0NmQ4N2M5MjFkMDFjZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwCkBAIC0wLDAgKzEsMTIx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1c3RvbVBh
aW50SW1hZ2UuaCIKKworI2lmIEVOQUJMRShDU1NfUEFJTlRJTkdfQVBJKQorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCaXRtYXAuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQ1NTUGFpbnRDYWxsYmFjay5oIgorI2luY2x1ZGUg
Ik9mZnNjcmVlbkNhbnZhcy5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0N1c3RvbVBhaW50SW1hZ2U6OkN1c3RvbVBhaW50SW1h
Z2UoY29uc3QgQ1NTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OlBhaW50RGVmaW5pdGlvbiYgZGVm
aW5pdGlvbiwgY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgIDogbV9wYWludENhbGxiYWNrKGRl
ZmluaXRpb24ucGFpbnRDYWxsYmFjay5nZXQoKSkKK3sKKyAgICBzZXRDb250YWluZXJTaXplKHNp
emUpOworfQorCitDdXN0b21QYWludEltYWdlOjp+Q3VzdG9tUGFpbnRJbWFnZSgpID0gZGVmYXVs
dDsKKworSW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRvQ3VzdG9tUGFpbnQoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBkZXN0U2l6ZSkKK3sK
KyAgICBKU0NTU1BhaW50Q2FsbGJhY2smIGNhbGxiYWNrID0gc3RhdGljX2Nhc3Q8SlNDU1NQYWlu
dENhbGxiYWNrJj4obV9wYWludENhbGxiYWNrLmdldCgpKTsKKyAgICBhdXRvKiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0ID0gY2FsbGJhY2suc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlm
ICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3Vs
dDo6RGlkTm90aGluZzsKKyAgICBhdXRvKiBleGVjU3RhdGUgPSBzY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5leGVjU3RhdGUoKTsKKyAgICBpZiAoIWV4ZWNTdGF0ZSkKKyAgICAgICAgcmV0dXJuIElt
YWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKKworICAgIGF1dG8gY2FudmFzID0gT2Zmc2NyZWVu
Q2FudmFzOjpjcmVhdGUoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGRlc3RTaXplLndpZHRoKCks
IGRlc3RTaXplLmhlaWdodCgpKTsKKyAgICBFeGNlcHRpb25PcjxPZmZzY3JlZW5SZW5kZXJpbmdD
b250ZXh0PiBjb250ZXh0T3JFeGNlcHRpb24gPSBjYW52YXMtPmdldENvbnRleHQoKmV4ZWNTdGF0
ZSwgT2Zmc2NyZWVuQ2FudmFzOjpSZW5kZXJpbmdDb250ZXh0VHlwZTo6V2ViZ2wsIHsgfSk7CisK
KyAgICBpZiAoY29udGV4dE9yRXhjZXB0aW9uLmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOworICAgIGF1dG8gY29udGV4dCA9IGNvbnRl
eHRPckV4Y2VwdGlvbi5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKworICAgIGNvbnRleHQtPmNsZWFy
Q29sb3IoMCwgMCwgMCwgMS4wKTsKKyAgICBjb250ZXh0LT5jbGVhcihHTF9DT0xPUl9CVUZGRVJf
QklUKTsKKworICAgIGF1dG8gcmVzdWx0ID0gbV9wYWludENhbGxiYWNrLT5oYW5kbGVFdmVudCgq
Y29udGV4dCk7CisgICAgaWYgKHJlc3VsdC50eXBlKCkgIT0gQ2FsbGJhY2tSZXN1bHRUeXBlOjpT
dWNjZXNzKQorICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOworCisg
ICAgYXV0byBiaXRtYXAgPSBjYW52YXMtPnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpOworICAgIGlm
ICghYml0bWFwKQorICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwor
CisgICAgZGVzdENvbnRleHQuZHJhd0ltYWdlKCpiaXRtYXAtPmJ1ZmZlcigpLT5jb3B5SW1hZ2Uo
KSwgRmxvYXRQb2ludCgpKTsKKworICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZERyYXc7
Cit9CisKK0ltYWdlRHJhd1Jlc3VsdCBDdXN0b21QYWludEltYWdlOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBi
bGVuZE1vZGUsIERlY29kaW5nTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKQorewor
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihkZXN0Q29udGV4dCk7Cisg
ICAgZGVzdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0ZU9wLCBibGVuZE1v
ZGUpOworICAgIGRlc3RDb250ZXh0LmNsaXAoZGVzdFJlY3QpOworICAgIGRlc3RDb250ZXh0LnRy
YW5zbGF0ZShkZXN0UmVjdC5sb2NhdGlvbigpKTsKKyAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9
IHNyY1JlY3Quc2l6ZSgpKQorICAgICAgICBkZXN0Q29udGV4dC5zY2FsZShkZXN0UmVjdC5zaXpl
KCkgLyBzcmNSZWN0LnNpemUoKSk7CisgICAgZGVzdENvbnRleHQudHJhbnNsYXRlKC1zcmNSZWN0
LmxvY2F0aW9uKCkpOworICAgIHJldHVybiBkb0N1c3RvbVBhaW50KGRlc3RDb250ZXh0LCBzaXpl
KCkpOworfQorCit2b2lkIEN1c3RvbVBhaW50SW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAor
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQoreworICAg
IC8vIEFsbG93IHRoZSBnZW5lcmF0b3IgdG8gcHJvdmlkZSB2aXN1YWxseS1lcXVpdmFsZW50IHRp
bGluZyBwYXJhbWV0ZXJzIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisgICAgRmxvYXRTaXplIGFk
anVzdGVkU2l6ZSA9IHNpemUoKTsKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3Jj
UmVjdDsKKworICAgIC8vIEZhY3RvciBpbiB0aGUgZGVzdGluYXRpb24gY29udGV4dCdzIHNjYWxl
IHRvIGdlbmVyYXRlIGF0IHRoZSBiZXN0IHJlc29sdXRpb24KKyAgICBBZmZpbmVUcmFuc2Zvcm0g
ZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZp
bml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBkb3VibGUgeFNjYWxlID0gZmFicyhkZXN0
Q29udGV4dENUTS54U2NhbGUoKSk7CisgICAgZG91YmxlIHlTY2FsZSA9IGZhYnMoZGVzdENvbnRl
eHRDVE0ueVNjYWxlKCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBhZGp1c3RlZFBhdHRlcm5DVE0g
PSBwYXR0ZXJuVHJhbnNmb3JtOworICAgIGFkanVzdGVkUGF0dGVybkNUTS5zY2FsZSgxLjAgLyB4
U2NhbGUsIDEuMCAvIHlTY2FsZSk7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKHhTY2FsZSwg
eVNjYWxlKTsKKworICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGli
bGVCdWZmZXIoYWRqdXN0ZWRTaXplLCBDb2xvclNwYWNlU1JHQiwgZGVzdENvbnRleHQpOworICAg
IGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgZG9DdXN0b21QYWludChidWZmZXIt
PmNvbnRleHQoKSwgYWRqdXN0ZWRTaXplKTsKKworICAgIGlmIChkZXN0Q29udGV4dC5kcmF3THVt
aW5hbmNlTWFzaygpKQorICAgICAgICBidWZmZXItPmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsK
KworICAgIGJ1ZmZlci0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3Rl
ZFNyY1JlY3QsIGFkanVzdGVkUGF0dGVybkNUTSwgcGhhc2UsIHNwYWNpbmcsIGNvbXBvc2l0ZU9w
LCBibGVuZE1vZGUpOworICAgIGRlc3RDb250ZXh0LnNldERyYXdMdW1pbmFuY2VNYXNrKGZhbHNl
KTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9DdXN0b21QYWludEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9DdXN0b21QYWludEltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDNhYjJhODg4NjgzYTNmNTM4NzFk
YWM1YjUxZjg5MTlkYTRjNGRkMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuaApAQCAtMCwwICsxLDYxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKKworI2luY2x1ZGUgIkNTU1BhaW50V29ya2xl
dEdsb2JhbFNjb3BlLmgiCisjaW5jbHVkZSAiR2VuZXJhdGVkSW1hZ2UuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlcjsKKworY2xhc3MgQ3VzdG9tUGFpbnRJbWFn
ZSBmaW5hbCA6IHB1YmxpYyBHZW5lcmF0ZWRJbWFnZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxDdXN0b21QYWludEltYWdlPiBjcmVhdGUoY29uc3QgQ1NTUGFpbnRXb3JrbGV0R2xvYmFsU2Nv
cGU6OlBhaW50RGVmaW5pdGlvbiYgZGVmaW5pdGlvbiwgY29uc3QgRmxvYXRTaXplJiBzaXplKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3VzdG9tUGFpbnRJbWFnZShkZWZp
bml0aW9uLCBzaXplKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+Q3VzdG9tUGFpbnRJbWFnZSgp
OworICAgIGJvb2wgaXNDdXN0b21QYWludEltYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQorCitwcml2YXRlOgorICAgIEN1c3RvbVBhaW50SW1hZ2UoY29uc3QgQ1NTUGFpbnRX
b3JrbGV0R2xvYmFsU2NvcGU6OlBhaW50RGVmaW5pdGlvbiYsIGNvbnN0IEZsb2F0U2l6ZSYpOwor
CisgICAgSW1hZ2VEcmF3UmVzdWx0IGRvQ3VzdG9tUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRTaXplJik7CisKKyAgICBJbWFnZURyYXdSZXN1bHQgZHJhdyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Q29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgRGVjb2RpbmdNb2RlLCBJbWFnZU9yaWVudGF0
aW9uRGVzY3JpcHRpb24pIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yLCBC
bGVuZE1vZGUpIGZpbmFsOworCisgICAgUmVmPENTU1BhaW50Q2FsbGJhY2s+IG1fcGFpbnRDYWxs
YmFjazsKK307CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19JTUFHRShDdXN0b21QYWlu
dEltYWdlKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApp
bmRleCA1ZjIyMGJlNGVmMDZmM2ZjMWU3OTM0OWZkZWIzMzBlZDkxZTc0YWM5Li5kZjExZjc5ZDQ0
MzJmYjlhM2Y4YjY1NDk4OGNlNzIwM2I4NGUzODE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmgKQEAgLTkzLDYgKzkzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBpc0dyYWRpZW50SW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc1NWR0ltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNQREZEb2N1bWVudEltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNDdXN0b21QYWludEltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAogICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSBjb25zdCA9
IDA7CiAgICAgdmlydHVhbCBib29sIGlzQW5pbWF0ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5k
ZXggNmM2NjYyOWNmNGY2MTZjOWMwOGQ3NzgxN2IwMzBiMDhlYWY2M2Q1Ny4uZGNmYjU0OTQwZGYx
Y2IwZjUxM2M4M2VmZDA2YWM2YWU5NTc5ODA2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC0xNTYsNiArMTU2LDcgQEAgcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7CiAgICAgZnJpZW5kIGNs
YXNzIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTsKICAgICBmcmllbmQgY2xhc3MgR3JhZGllbnRJ
bWFnZTsKKyAgICBmcmllbmQgY2xhc3MgQ3VzdG9tUGFpbnRJbWFnZTsKIAogcHJpdmF0ZToKICAg
ICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDVlNWUzN2JlZGJkY2I3OTE3M2ZlOTFi
ODEyODM5ODBkZDcwOWQ3NWQuLjZhZDkwMzllNmI5Zjg4ZWMzMGNmZjdjMjM3MzRiN2M5ZjBlZjZj
YTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxOC0xMC0xNyAgSnVzdGluIE1pY2hhdWQgIDxq
dXN0aW5fbWljaGF1ZEBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIG5ldyBpbWFnZSB0eXBlIGZv
ciBDU1MgcGFpbnRpbmcgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTA2OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIGZhc3QvY3NzLWN1c3RvbS1wYWludC9iYXNpYy1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZmFzdC9jc3MtY3VzdG9tLXBhaW50L2Jhc2ljLmh0bWw6CisKIDIwMTgtMTAtMTcg
IEp1c3RpbiBNaWNoYXVkICA8anVzdGluX21pY2hhdWRAYXBwbGUuY29tPgogCiAgICAgICAgIFBh
cnNlIHBhaW50KCkgYW5kIHN0b3JlIHBhaW50IGNhbGxiYWNrcyBmb3IgQ1NTIFBhaW50aW5nIEFQ
SQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MtY3VzdG9tLXBhaW50L2Jhc2ljLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWN1c3RvbS1wYWludC9iYXNpYy1leHBl
Y3RlZC50eHQKaW5kZXggY2Q3ZjJlZWJiMTg5MTgwNGVhOWI5NzI1OGQ5NDU1Zjc2YWZhODQ4Yy4u
ZWFhMTc0M2U0Mzk5MDBiZmQ3M2IwYzE5MTZlM2QyZWNlZTZkNGI1NiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC9jc3MtY3VzdG9tLXBhaW50L2Jhc2ljLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2Nzcy1jdXN0b20tcGFpbnQvYmFzaWMtZXhwZWN0ZWQudHh0CkBAIC02
LDQgKzYsNSBAQCBQQVNTIHRlc3QgdGhhdCByZWdpc3RlclBhaW50IHJ1bnMgd2l0aCBjb250ZXh0
T3B0aW9ucwogUEFTUyB0ZXN0IHRoYXQgcmVnaXN0ZXJQYWludCBydW5zIHdpdGggcHJlZGVmaW5l
ZCBjbGFzcyAKIFBBU1MgdGVzdCB0aGF0IHJlZ2lzdGVyUGFpbnQgYWNjZXB0cyBvbmx5IGEgc3Ry
aW5nIGFuZCBhIGNsYXNzIGNvbnN0cnVjdG9yIAogUEFTUyB0ZXN0IHRoYXQgdGVzdCBkaXYgaGFz
IHBhaW50KCkgdmFsdWUgCitQQVNTIHRlc3QgdGhhdCB0ZXN0IGRpdiBwYWludCBjYWxsYmFjayBn
ZXRzIGNhbGxlZCAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MtY3VzdG9tLXBh
aW50L2Jhc2ljLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1jdXN0b20tcGFpbnQvYmFzaWMu
aHRtbAppbmRleCAzNjk5YWEyMWVhMTE2NzFjOTk5NDAwN2Q5N2U3ZWQ0MGRmZjI3MWFmLi5jZjNh
ZmU4MzQ1MTZmN2YwMWIwNzI2MTZkMmY5MjZhOWZhYWJlZjAyIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy1jdXN0b20tcGFpbnQvYmFzaWMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2Nzcy1jdXN0b20tcGFpbnQvYmFzaWMuaHRtbApAQCAtNjYsNCArNjYsMTUgQEAgdGVzdChm
dW5jdGlvbigpIHsKICAgYXNzZXJ0X2VxdWFscyhnZXRDb21wdXRlZFN0eWxlKHBhaW50KS5nZXRQ
cm9wZXJ0eVZhbHVlKCJiYWNrZ3JvdW5kLWltYWdlIiksICJwYWludChteS1wYWludCkiKTsKIH0s
ICd0ZXN0IHRoYXQgdGVzdCBkaXYgaGFzIHBhaW50KCkgdmFsdWUnKTsKIAorbGV0IHBhaW50X2Nh
bGxlZF90ZXN0ID0gYXN5bmNfdGVzdCgndGVzdCB0aGF0IHRlc3QgZGl2IHBhaW50IGNhbGxiYWNr
IGdldHMgY2FsbGVkJyk7CitwYWludF9jYWxsZWRfdGVzdC5zdGVwKGZ1bmN0aW9uKCkgeworICBD
U1MucGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUucmVnaXN0ZXJQYWludCgnbXktcGFpbnQnLCBjbGFz
cyB7CisgICAgcGFpbnQoY3R4LCBnZW9tLCBwcm9wZXJ0aWVzKSB7CisgICAgICBjdHguY2xlYXJD
b2xvcigwLDEuMCwwLDEuMCk7CisgICAgICBjdHguY2xlYXIoY3R4LkNPTE9SX0JVRkZFUl9CSVQp
OworICAgICAgcGFpbnRfY2FsbGVkX3Rlc3QuZG9uZSgpOworICAgIH0KKyAgfSk7Cit9KTsKKwog
PC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352710</attachid>
            <date>2018-10-18 11:34:53 -0700</date>
            <delta_ts>2018-10-18 16:59:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190697-20181018113452.patch</filename>
            <type>text/plain</type>
            <size>25260</size>
            <attacher name="Justin Michaud">justin_michaud</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3MjQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTFkYzRiN2YwZjUxMTU3
OGY5OWQyNDgzOGFmZTQ5NzdiZTM5NjM3ZC4uMmIyODhkZWNhOTNjMDk4NGIyNzBiYzFlNTZhZTBm
YmVkZWJiY2JiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE4LTEwLTE4ICBKdXN0
aW4gTWljaGF1ZCAgPGp1c3Rpbl9taWNoYXVkQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbmV3
IGltYWdlIHR5cGUgZm9yIENTUyBwYWludGluZyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MDY5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBpbWFnZSB0eXBlIGZvciB0aGUgQ1NT
IHBhaW50aW5nIEFQSSwgYW5kIGhvb2sgaXQgdXAgc28gaXQgY2FuIGJlIGRyYXduLgorICAgICAg
ICBGb3Igbm93LCBpdCB1c2VzIGEgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHQgZnJvbSBPZmZsaW5l
Q2FudmFzIGJlY2F1c2UgdGhhdCB3YXMKKyAgICAgICAgZWFzeSB0byBob29rIHVwLiBUaGUgc3Bl
YyBhY3R1YWxseSBjYWxscyBmb3IgYSBSZW5kZXJpbmdDb250ZXh0MkQsIHdoaWNoIGNhbiBiZQor
ICAgICAgICBoYW5kbGVkIGluIGFub3RoZXIgcGF0Y2guCisKKyAgICAgICAgKiBTb3VyY2VzLnR4
dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZTo6aXNGaXhlZFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Zml4ZWRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0lt
YWdlR2VuZXJhdG9yVmFsdWU6OmlzUGVuZGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NJbWFnZUdlbmVyYXRvclZhbHVlOjprbm93blRvQmVPcGFxdWUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6bG9hZFN1YmltYWdlcyk6CisgICAgICAg
ICogY3NzL0NTU1BhaW50Q2FsbGJhY2suaDoKKyAgICAgICAgKiBjc3MvQ1NTUGFpbnRDYWxsYmFj
ay5pZGw6CisgICAgICAgICogY3NzL0NTU1BhaW50SW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYWludEltYWdlVmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTUGFp
bnRJbWFnZVZhbHVlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJ
bWFnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRJbWFnZTo6Q3Vz
dG9tUGFpbnRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludEltYWdlOjpkb0N1
c3RvbVBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50SW1hZ2U6OmRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvY3NzL0NTU1BhaW50Q2FsbGJhY2suaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmlzQ3VzdG9tUGFpbnRJ
bWFnZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwOgor
CiAyMDE4LTEwLTE3ICBKdXN0aW4gTWljaGF1ZCAgPGp1c3Rpbl9taWNoYXVkQGFwcGxlLmNvbT4K
IAogICAgICAgICBQYXJzZSBwYWludCgpIGFuZCBzdG9yZSBwYWludCBjYWxsYmFja3MgZm9yIENT
UyBQYWludGluZyBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggZDE5M2Q5ZTFlYjZlMmU1OTBmMjEzMjNm
YWY5ZTkwYTdjZDNlODIxNS4uNTRiYmM4OWE1NWNkNzkwYjRkNTA5MTM4NWYzODcxYzZiZDI4ZjRm
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKQEAgLTE2MTMsNiArMTYxMyw3IEBAIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9D
cm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50
SW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDY4ZjcxZDQw
ZjRhNzRhZTI4ZDI3MjM3MDUxOGFiNzkwMWJiYWJiYjQuLmIyNTJiMTZiYjkyZmZmOWJmMTc2MGVk
YjQ2OTFlYzg1Njg1ZGM5YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNTIsNiArMTM1Miw3IEBACiAJCTRCNkI1Q0MwMjE2
NDM4NjQwMDYwMzgxNyAvKiBDU1NQYWludFdvcmtsZXRHbG9iYWxTY29wZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEI2QjVDQkYyMTY0Mzg2NDAwNjAz
ODE3IC8qIENTU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmggKi87IH07CiAJCTRCNkU4NzY5MjE3
NkQ2OTIwMDQyMEU1RSAvKiBDU1NQYWludEltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCNkU4NzY4MjE3NkQ2OTIwMDQyMEU1RSAvKiBD
U1NQYWludEltYWdlVmFsdWUuaCAqLzsgfTsKIAkJNEI2RkE2RjQwQzM5RTQ4QzAwMDg3MDExIC8q
IFNtYXJ0UmVwbGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEI2RkE2RjIwQzM5RTQ4QzAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTRCN0FFNDkzMjE3N0I1
NkYwMEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjdBRTQ5MjIxNzdCNTZGMDBDNTk5NTkgLyogQ3VzdG9t
UGFpbnRJbWFnZS5oICovOyB9OwogCQk0QkFFOTVCMTBCMkZBOUNFMDBBRUQ4QTAgLyogRWRpdG9y
RGVsZXRlQWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0QkFFOTVCMDBCMkZBOUNFMDBBRUQ4QTAgLyogRWRpdG9yRGVsZXRlQWN0aW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNEJEQTNGRkUy
MTUxQjZGNTAwRkQ2NjA0IC8qIERPTUNTU0N1c3RvbVByb3BlcnR5RGVzY3JpcHRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEJEQTNGRjgyMTUxQjZG
MjAwRkQ2NjA0IC8qIERPTUNTU0N1c3RvbVByb3BlcnR5RGVzY3JpcHRvci5oICovOyB9OwogCQk0
QkRBM0ZGRjIxNTFCNkY1MDBGRDY2MDQgLyogRE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEJEQTNGRjky
MTUxQjZGMzAwRkQ2NjA0IC8qIERPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHkuaCAqLzsgfTsK
QEAgLTc4OTMsNiArNzg5NCw4IEBACiAJCTRCNkU4NzZCMjE3NkQ4QTEwMDQyMEU1RSAvKiBDU1NQ
YWludEltYWdlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTUGFpbnRJbWFnZVZhbHVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEI2RkE2RjIwQzM5RTQ4QzAwMDg3
MDExIC8qIFNtYXJ0UmVwbGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
bWFydFJlcGxhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEI2RkE2RjYwQzM5
RTRBMTAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZUNGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNtYXJ0UmVwbGFjZUNGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNEI3QUU0OTIyMTc3QjU2RjAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ3VzdG9tUGFpbnRJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0QjdBRTQ5NTIxNzdCNjNFMDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDdXN0b21QYWludEltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNEJBRTk1QjAwQjJGQTlDRTAwQUVEOEEwIC8qIEVkaXRvckRlbGV0ZUFj
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0b3JEZWxldGVBY3Rp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEJEQTNGRjUyMTUxQjZGMDAwRkQ2
NjA0IC8qIERPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHkuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IERPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHkuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0QkRBM0ZGNzIxNTFCNkYxMDBGRDY2MDQgLyogRE9NQ1NTUmVnaXN0ZXJD
dXN0b21Qcm9wZXJ0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
T01DU1NSZWdpc3RlckN1c3RvbVByb3BlcnR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIzOTQ0LDYgKzIzOTQ3LDggQEAKIAkJCQlDMkY0RTc4OTFFNDVBRURGMDA2RDcxMDUg
LyogQ29tcGxleFRleHRDb250cm9sbGVyLmggKi8sCiAJCQkJMkQyRkMwNTQxNDYwQ0Q2RjAwMjYz
NjMzIC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcCAqLywKIAkJCQkyRDJGQzA1NTE0NjBD
RDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuaCAqLywKKwkJCQk0QjdBRTQ5
NTIxNzdCNjNFMDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5jcHAgKi8sCisJCQkJNEI3QUU0
OTIyMTc3QjU2RjAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuaCAqLywKIAkJCQlBOENCNDEw
MjBFODVCOEE1MDAzMkM0RjAgLyogRGFzaEFycmF5LmggKi8sCiAJCQkJNTU1MTMwMDAxRTdDQ0ND
QTAwQTY5RTM4IC8qIERlY29kaW5nT3B0aW9ucy5oICovLAogCQkJCTQ5RkM3QTRGMTQ0NEFGNUYw
MEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovLApAQCAtMjgwNjAsNiArMjgw
NjUsNyBAQAogCQkJCTkzRDQzN0EwMUQ1N0IxOUEwMEFCODVFQSAvKiBDdXN0b21FbGVtZW50UmVh
Y3Rpb25RdWV1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUJENEU5MUIxQzQ2MkNGQzAwNTA2NUJD
IC8qIEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjJDRDMyNUEx
MTU3RTU3QzAwNjNCMEE3IC8qIEN1c3RvbUV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk0QjdB
RTQ5MzIxNzdCNTZGMDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThDQjQxM0UwRTg2MzNGRDAwMzJDNEYwIC8qIERhc2hBcnJheS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTgwRTZEMEIwQTE5ODlDQTAwN0ZCOEM1IC8qIERhc2hib2FyZFJlZ2lvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTdCQzZBMjExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdl
bmVyYXRvclZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZh
bHVlLmNwcAppbmRleCBiNjAwMDMzMzk1MjU0MjBhMDBhZDI2MDExNmNjOTBhYjM0N2EwNGFlLi5m
ZmRkM2QwYWE2NTdmMjVlYWYzMWQ1NzBjNTg2OGVkNTMwOWUyZWZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIK
ICNpbmNsdWRlICJDU1NOYW1lZEltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NQYWludEltYWdl
VmFsdWUuaCIKICNpbmNsdWRlICJHZW5lcmF0ZWRJbWFnZS5oIgogI2luY2x1ZGUgIkhUTUxDYW52
YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCkBAIC0x
NTIsNyArMTUzLDcgQEAgUmVmUHRyPEltYWdlPiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjppbWFn
ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmxvYXQKICAgICAgICAgcmV0dXJuIGRv
d25jYXN0PENTU0NvbmljR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmltYWdlKHJlbmRlcmVyLCBzaXpl
KTsKICNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKICAgICBjYXNlIFBhaW50SW1hZ2VDbGFz
czoKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NQ
YWludEltYWdlVmFsdWU+KCp0aGlzKS5pbWFnZShyZW5kZXJlciwgc2l6ZSk7CiAjZW5kaWYKICAg
ICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE3OSw3ICsxODAs
NyBAQCBib29sIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmlzRml4ZWRTaXplKCkgY29uc3QKICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0NvbmljR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmlzRml4
ZWRTaXplKCk7CiAjaWYgRU5BQkxFKENTU19QQUlOVElOR19BUEkpCiAgICAgY2FzZSBQYWludElt
YWdlQ2xhc3M6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU1BhaW50SW1hZ2VWYWx1ZT4oKnRoaXMpLmlzRml4ZWRTaXplKCk7CiAjZW5kaWYKICAgICBk
ZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIwNCw3ICsyMDUsNyBA
QCBGbG9hdFNpemUgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Zml4ZWRTaXplKGNvbnN0IFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ29uaWNHcmFk
aWVudFZhbHVlPigqdGhpcykuZml4ZWRTaXplKHJlbmRlcmVyKTsKICNpZiBFTkFCTEUoQ1NTX1BB
SU5USU5HX0FQSSkKICAgICBjYXNlIFBhaW50SW1hZ2VDbGFzczoKLSAgICAgICAgcmV0dXJuIEZs
b2F0U2l6ZSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUGFpbnRJbWFnZVZhbHVlPigq
dGhpcykuZml4ZWRTaXplKHJlbmRlcmVyKTsKICNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjMxLDcgKzIzMiw3IEBAIGJvb2wgQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZTo6aXNQZW5kaW5nKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU0NvbmljR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmlzUGVuZGluZygpOwogI2lmIEVOQUJMRShD
U1NfUEFJTlRJTkdfQVBJKQogICAgIGNhc2UgUGFpbnRJbWFnZUNsYXNzOgotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NQYWludEltYWdlVmFsdWU+KCp0
aGlzKS5pc1BlbmRpbmcoKTsKICNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMjU4LDcgKzI1OSw3IEBAIGJvb2wgQ1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZTo6a25vd25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKSBjb25z
CiAgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDb25pY0dyYWRpZW50VmFsdWU+KCp0aGlzKS5r
bm93blRvQmVPcGFxdWUocmVuZGVyZXIpOwogI2lmIEVOQUJMRShDU1NfUEFJTlRJTkdfQVBJKQog
ICAgIGNhc2UgUGFpbnRJbWFnZUNsYXNzOgotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBkb3duY2FzdDxDU1NQYWludEltYWdlVmFsdWU+KCp0aGlzKS5rbm93blRvQmVPcGFx
dWUocmVuZGVyZXIpOwogI2VuZGlmCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC0yODksNiArMjkwLDcgQEAgdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVl
Ojpsb2FkU3ViaW1hZ2VzKENhY2hlZFJlc291cmNlTG9hZGVyJiBjYWNoZWRSZXNvdXJjZUwKICAg
ICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKENTU19QQUlOVElOR19BUEkpCiAgICAgY2FzZSBQYWlu
dEltYWdlQ2xhc3M6CisgICAgICAgIGRvd25jYXN0PENTU1BhaW50SW1hZ2VWYWx1ZT4oKnRoaXMp
LmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIG9wdGlvbnMpOwogICAgICAgICBi
cmVhazsKICNlbmRpZgogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFpbnRDYWxsYmFjay5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhaW50Q2FsbGJh
Y2suaAppbmRleCBkNDRiZGIzYzBkODdjMzA4NmJjOWZiMzA2OGM1ZjYzOTUxMmE5OGY3Li5mMGVj
MmM0NDEzNWFlNDRjYzg5MzUwNmQ4NWE1MDc1OTYzYjIzMTM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUGFpbnRDYWxsYmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYWludENhbGxiYWNrLmgKQEAgLTMyLDEyICszMiwxMyBAQAogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDsKIAogY2xhc3MgQ1NTUGFpbnRDYWxsYmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPENTU1Bh
aW50Q2FsbGJhY2s+LCBwdWJsaWMgQWN0aXZlRE9NQ2FsbGJhY2sgewogcHVibGljOgogICAgIHVz
aW5nIEFjdGl2ZURPTUNhbGxiYWNrOjpBY3RpdmVET01DYWxsYmFjazsKIAotICAgIHZpcnR1YWwg
Q2FsbGJhY2tSZXN1bHQ8dm9pZD4gaGFuZGxlRXZlbnQoKSA9IDA7CisgICAgdmlydHVhbCBDYWxs
YmFja1Jlc3VsdDx2b2lkPiBoYW5kbGVFdmVudChXZWJHTFJlbmRlcmluZ0NvbnRleHQmKSA9IDA7
CiAKICAgICB2aXJ0dWFsIH5DU1NQYWludENhbGxiYWNrKCkKICAgICB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFpbnRDYWxsYmFjay5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFpbnRDYWxsYmFjay5pZGwKaW5kZXggOTY5Yzg2NTc4YzAzNWVhZjVlMTg1ZjA3N2Jm
NDI2OGVlY2UzNDEyZC4uNzZkOWI2Yzk1YmExY2Y4ZDI5NTJhNDc5ZDFjNTMwNzQ5NGNjODA5YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhaW50Q2FsbGJhY2suaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWludENhbGxiYWNrLmlkbApAQCAtMjYsNCArMjYsNCBA
QAogWwogICAgIEVuYWJsZWRBdFJ1bnRpbWU9Q1NTUGFpbnRpbmdBUEksCiAgICAgQ29uZGl0aW9u
YWw9Q1NTX1BBSU5USU5HX0FQSSwKLV0gY2FsbGJhY2sgQ1NTUGFpbnRDYWxsYmFjayA9IHZvaWQg
KCk7CitdIGNhbGxiYWNrIENTU1BhaW50Q2FsbGJhY2sgPSB2b2lkIChXZWJHTFJlbmRlcmluZ0Nv
bnRleHQgY29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFpbnRJ
bWFnZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWludEltYWdlVmFsdWUuY3Bw
CmluZGV4IGM0MjFhMWQyYTk5MzQwOTdkN2ZmMmZlYTA1MzNkYmYyZDJjNjU0MzQuLmE2OTBlNDFk
NzY3MWRlYTAzNTMyMWZhZmU3YjdmYTk3MTFhYmRhNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYWludEltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYWludEltYWdlVmFsdWUuY3BwCkBAIC0yOSw2ICsyOSw5IEBACiAKICNpZiBFTkFCTEUoQ1NT
X1BBSU5USU5HX0FQSSkKIAorI2luY2x1ZGUgIkNTU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmgi
CisjaW5jbHVkZSAiQ3VzdG9tUGFpbnRJbWFnZS5oIgorI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQzLDYgKzQ2LDE4IEBAIFN0cmluZyBDU1NQYWludEltYWdlVmFsdWU6OmN1c3Rv
bUNTU1RleHQoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAorUmVm
UHRyPEltYWdlPiBDU1NQYWludEltYWdlVmFsdWU6OmltYWdlKFJlbmRlckVsZW1lbnQmIHJlbmRl
ckVsZW1lbnQsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoc2l6ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8mIHNlbGVjdGVkR2xvYmFsU2Nv
cGUgPSByZW5kZXJFbGVtZW50LmRvY3VtZW50KCkuZW5zdXJlQ1NTUGFpbnRXb3JrbGV0R2xvYmFs
U2NvcGUoKTsKKyAgICBhdXRvKiByZWdpc3RyYXRpb24gPSBzZWxlY3RlZEdsb2JhbFNjb3BlLnBh
aW50RGVmaW5pdGlvbk1hcCgpLmdldChtX25hbWUpOworCisgICAgaWYgKCFyZWdpc3RyYXRpb24p
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBDdXN0b21QYWludEltYWdlOjpj
cmVhdGUoKnJlZ2lzdHJhdGlvbiwgc2l6ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFpbnRJbWFnZVZh
bHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFpbnRJbWFnZVZhbHVlLmgKaW5kZXggYjZj
YTg0NTMyZWYzOTJhYTJiNGFkNGJmMzU5YTE5MmU2M2MxNThlZi4uNTc2NzlmYzA1Yjc3MjE5YzI0
YmQ5OWIxYzliMTZiOGQ5Y2E4NWU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhaW50SW1hZ2VWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWludEltYWdl
VmFsdWUuaApAQCAtMzksMTAgKzM5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ1NTUGFpbnRJbWFnZVZhbHVlKG5hbWUpKTsKICAgICB9CiAKLSAgICBib29sIGVx
dWFscyhjb25zdCBDU1NQYWludEltYWdlVmFsdWUmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX25h
bWUgPT0gb3RoZXIubV9uYW1lOyB9CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZShSZW5kZXJFbGVt
ZW50JiwgY29uc3QgRmxvYXRTaXplJik7CiAKKyAgICBib29sIGVxdWFscyhjb25zdCBDU1NQYWlu
dEltYWdlVmFsdWUmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX25hbWUgPT0gb3RoZXIubV9uYW1l
OyB9CiAgICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25zdDsKIAorICAgIGJvb2wgaXNGaXhl
ZFNpemUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIEZsb2F0U2l6ZSBmaXhlZFNpemUo
Y29uc3QgUmVuZGVyRWxlbWVudCYpIGNvbnN0IHsgcmV0dXJuIEZsb2F0U2l6ZSgpOyB9CisKKyAg
ICBib29sIGlzUGVuZGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBrbm93
blRvQmVPcGFxdWUoY29uc3QgUmVuZGVyRWxlbWVudCYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisKKyAgICB2b2lkIGxvYWRTdWJpbWFnZXMoQ2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBS
ZXNvdXJjZUxvYWRlck9wdGlvbnMmKSB7IH0KKwogcHJpdmF0ZToKICAgICBDU1NQYWludEltYWdl
VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lKQogICAgICAgICA6IENTU0ltYWdlR2VuZXJhdG9yVmFs
dWUoUGFpbnRJbWFnZUNsYXNzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9DdXN0b21QYWludEltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YjM0OTM2Mjc5YzRjNjE5
YmZlZWY1M2QwODQ2ZDg3YzkyMWQwMWNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5jcHAKQEAgLTAsMCArMSwxMjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3VzdG9tUGFp
bnRJbWFnZS5oIgorCisjaWYgRU5BQkxFKENTU19QQUlOVElOR19BUEkpCisKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJpdG1hcC5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSlNDU1NQYWludENhbGxiYWNrLmgiCisjaW5jbHVkZSAi
T2Zmc2NyZWVuQ2FudmFzLmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3VzdG9tUGFpbnRJbWFnZTo6Q3VzdG9tUGFpbnRJbWFn
ZShjb25zdCBDU1NQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6UGFpbnREZWZpbml0aW9uJiBkZWZp
bml0aW9uLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgOiBtX3BhaW50Q2FsbGJhY2soZGVm
aW5pdGlvbi5wYWludENhbGxiYWNrLmdldCgpKQoreworICAgIHNldENvbnRhaW5lclNpemUoc2l6
ZSk7Cit9CisKK0N1c3RvbVBhaW50SW1hZ2U6On5DdXN0b21QYWludEltYWdlKCkgPSBkZWZhdWx0
OworCitJbWFnZURyYXdSZXN1bHQgQ3VzdG9tUGFpbnRJbWFnZTo6ZG9DdXN0b21QYWludChHcmFw
aGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmIGRlc3RTaXplKQorewor
ICAgIEpTQ1NTUGFpbnRDYWxsYmFjayYgY2FsbGJhY2sgPSBzdGF0aWNfY2FzdDxKU0NTU1BhaW50
Q2FsbGJhY2smPihtX3BhaW50Q2FsbGJhY2suZ2V0KCkpOworICAgIGF1dG8qIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQgPSBjYWxsYmFjay5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYg
KCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0
OjpEaWROb3RoaW5nOworICAgIGF1dG8qIGV4ZWNTdGF0ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmV4ZWNTdGF0ZSgpOworICAgIGlmICghZXhlY1N0YXRlKQorICAgICAgICByZXR1cm4gSW1h
Z2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOworCisgICAgYXV0byBjYW52YXMgPSBPZmZzY3JlZW5D
YW52YXM6OmNyZWF0ZSgqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgZGVzdFNpemUud2lkdGgoKSwg
ZGVzdFNpemUuaGVpZ2h0KCkpOworICAgIEV4Y2VwdGlvbk9yPE9mZnNjcmVlblJlbmRlcmluZ0Nv
bnRleHQ+IGNvbnRleHRPckV4Y2VwdGlvbiA9IGNhbnZhcy0+Z2V0Q29udGV4dCgqZXhlY1N0YXRl
LCBPZmZzY3JlZW5DYW52YXM6OlJlbmRlcmluZ0NvbnRleHRUeXBlOjpXZWJnbCwgeyB9KTsKKwor
ICAgIGlmIChjb250ZXh0T3JFeGNlcHRpb24uaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7CisgICAgYXV0byBjb250ZXh0ID0gY29udGV4
dE9yRXhjZXB0aW9uLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOworCisgICAgY29udGV4dC0+Y2xlYXJD
b2xvcigwLCAwLCAwLCAxLjApOworICAgIGNvbnRleHQtPmNsZWFyKEdMX0NPTE9SX0JVRkZFUl9C
SVQpOworCisgICAgYXV0byByZXN1bHQgPSBtX3BhaW50Q2FsbGJhY2stPmhhbmRsZUV2ZW50KCpj
b250ZXh0KTsKKyAgICBpZiAocmVzdWx0LnR5cGUoKSAhPSBDYWxsYmFja1Jlc3VsdFR5cGU6OlN1
Y2Nlc3MpCisgICAgICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7CisKKyAg
ICBhdXRvIGJpdG1hcCA9IGNhbnZhcy0+dHJhbnNmZXJUb0ltYWdlQml0bWFwKCk7CisgICAgaWYg
KCFiaXRtYXApCisgICAgICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7CisK
KyAgICBkZXN0Q29udGV4dC5kcmF3SW1hZ2UoKmJpdG1hcC0+YnVmZmVyKCktPmNvcHlJbWFnZSgp
LCBGbG9hdFBvaW50KCkpOworCisgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkRHJhdzsK
K30KKworSW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSwgRGVjb2RpbmdNb2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24pCit7Cisg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGRlc3RDb250ZXh0KTsKKyAg
ICBkZXN0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3AsIGJsZW5kTW9k
ZSk7CisgICAgZGVzdENvbnRleHQuY2xpcChkZXN0UmVjdCk7CisgICAgZGVzdENvbnRleHQudHJh
bnNsYXRlKGRlc3RSZWN0LmxvY2F0aW9uKCkpOworICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0g
c3JjUmVjdC5zaXplKCkpCisgICAgICAgIGRlc3RDb250ZXh0LnNjYWxlKGRlc3RSZWN0LnNpemUo
KSAvIHNyY1JlY3Quc2l6ZSgpKTsKKyAgICBkZXN0Q29udGV4dC50cmFuc2xhdGUoLXNyY1JlY3Qu
bG9jYXRpb24oKSk7CisgICAgcmV0dXJuIGRvQ3VzdG9tUGFpbnQoZGVzdENvbnRleHQsIHNpemUo
KSk7Cit9CisKK3ZvaWQgQ3VzdG9tUGFpbnRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisg
ICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAg
Ly8gQWxsb3cgdGhlIGdlbmVyYXRvciB0byBwcm92aWRlIHZpc3VhbGx5LWVxdWl2YWxlbnQgdGls
aW5nIHBhcmFtZXRlcnMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KKyAgICBGbG9hdFNpemUgYWRq
dXN0ZWRTaXplID0gc2l6ZSgpOworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNS
ZWN0OworCisgICAgLy8gRmFjdG9yIGluIHRoZSBkZXN0aW5hdGlvbiBjb250ZXh0J3Mgc2NhbGUg
dG8gZ2VuZXJhdGUgYXQgdGhlIGJlc3QgcmVzb2x1dGlvbgorICAgIEFmZmluZVRyYW5zZm9ybSBk
ZXN0Q29udGV4dENUTSA9IGRlc3RDb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmlu
aXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIGRvdWJsZSB4U2NhbGUgPSBmYWJzKGRlc3RD
b250ZXh0Q1RNLnhTY2FsZSgpKTsKKyAgICBkb3VibGUgeVNjYWxlID0gZmFicyhkZXN0Q29udGV4
dENUTS55U2NhbGUoKSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGFkanVzdGVkUGF0dGVybkNUTSA9
IHBhdHRlcm5UcmFuc2Zvcm07CisgICAgYWRqdXN0ZWRQYXR0ZXJuQ1RNLnNjYWxlKDEuMCAvIHhT
Y2FsZSwgMS4wIC8geVNjYWxlKTsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUoeFNjYWxlLCB5
U2NhbGUpOworCisgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihhZGp1c3RlZFNpemUsIENvbG9yU3BhY2VTUkdCLCBkZXN0Q29udGV4dCk7CisgICAg
aWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBkb0N1c3RvbVBhaW50KGJ1ZmZlci0+
Y29udGV4dCgpLCBhZGp1c3RlZFNpemUpOworCisgICAgaWYgKGRlc3RDb250ZXh0LmRyYXdMdW1p
bmFuY2VNYXNrKCkpCisgICAgICAgIGJ1ZmZlci0+Y29udmVydFRvTHVtaW5hbmNlTWFzaygpOwor
CisgICAgYnVmZmVyLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVk
U3JjUmVjdCwgYWRqdXN0ZWRQYXR0ZXJuQ1RNLCBwaGFzZSwgc3BhY2luZywgY29tcG9zaXRlT3As
IGJsZW5kTW9kZSk7CisgICAgZGVzdENvbnRleHQuc2V0RHJhd0x1bWluYW5jZU1hc2soZmFsc2Up
OworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0N1c3RvbVBhaW50SW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wM2FiMmE4ODg2ODNhM2Y1Mzg3MWRh
YzViNTFmODkxOWRhNGM0ZGQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShDU1NfUEFJTlRJTkdfQVBJKQorCisjaW5jbHVkZSAiQ1NTUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGUuaCIKKyNpbmNsdWRlICJHZW5lcmF0ZWRJbWFnZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyOworCitjbGFzcyBDdXN0b21QYWludEltYWdl
IGZpbmFsIDogcHVibGljIEdlbmVyYXRlZEltYWdlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PEN1c3RvbVBhaW50SW1hZ2U+IGNyZWF0ZShjb25zdCBDU1NQYWludFdvcmtsZXRHbG9iYWxTY29w
ZTo6UGFpbnREZWZpbml0aW9uJiBkZWZpbml0aW9uLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDdXN0b21QYWludEltYWdlKGRlZmlu
aXRpb24sIHNpemUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5DdXN0b21QYWludEltYWdlKCk7
CisgICAgYm9vbCBpc0N1c3RvbVBhaW50SW1hZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CisKK3ByaXZhdGU6CisgICAgQ3VzdG9tUGFpbnRJbWFnZShjb25zdCBDU1NQYWludFdv
cmtsZXRHbG9iYWxTY29wZTo6UGFpbnREZWZpbml0aW9uJiwgY29uc3QgRmxvYXRTaXplJik7CisK
KyAgICBJbWFnZURyYXdSZXN1bHQgZG9DdXN0b21QYWludChHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFNpemUmKTsKKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3KEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBEZWNvZGluZ01vZGUsIEltYWdlT3JpZW50YXRp
b25EZXNjcmlwdGlvbikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSkgZmluYWw7CisKKyAgICBSZWY8Q1NTUGFpbnRDYWxsYmFjaz4gbV9wYWludENhbGxi
YWNrOworfTsKKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0lNQUdFKEN1c3RvbVBhaW50
SW1hZ2UpCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCmlu
ZGV4IDVmMjIwYmU0ZWYwNmYzZmMxZTc5MzQ5ZmRlYjMzMGVkOTFlNzRhYzkuLmRmMTFmNzlkNDQz
MmZiOWEzZjhiNjU0OTg4Y2U3MjAzYjg0ZTM4MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2UuaApAQCAtOTMsNiArOTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGlzR3JhZGllbnRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzU1ZHSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc1BERkRvY3VtZW50SW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBpc0N1c3RvbVBhaW50SW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
CiAgICAgdmlydHVhbCBib29sIGN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIGJvb2wgaXNBbmltYXRlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRl
eCA2YzY2NjI5Y2Y0ZjYxNmM5YzA4ZDc3ODE3YjAzMGIwOGVhZjYzZDU3Li5kY2ZiNTQ5NDBkZjFj
YjBmNTEzYzgzZWZkMDZhYzZhZTk1Nzk4MDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTE1Niw2ICsxNTYsNyBAQCBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTsKICAgICBmcmllbmQgY2xh
c3MgTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOwogICAgIGZyaWVuZCBjbGFzcyBHcmFkaWVudElt
YWdlOworICAgIGZyaWVuZCBjbGFzcyBDdXN0b21QYWludEltYWdlOwogCiBwcml2YXRlOgogICAg
IEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAppbmRleCA3MDczYTc2
YjNmNTZjMDRmMTI0NWY2MWY2MTcwODc1YmQwMDlmMTY1Li44M2MyYjBhZTJkNWYyNDg4MTFlODk5
ZTExNzAwNjBlZjZmNTE1YmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKQEAgLTM1LDYgKzM1LDcg
QEAKIAogI2lmIFVTRShDQUlSTykKIAorI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSAiRHJhd0Vycm9yVW5kZXJsaW5lLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNWU1ZTM3YmVkYmRjYjc5MTczZmU5MWI4
MTI4Mzk4MGRkNzA5ZDc1ZC4uZGEwMWNjNmM1NDEzOTg3NjFlNDQ1YmUwZWZjYTlkNzM0ZDZlZjdl
MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE4LTEwLTE4ICBKdXN0aW4gTWljaGF1ZCAgPGp1
c3Rpbl9taWNoYXVkQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbmV3IGltYWdlIHR5cGUgZm9y
IENTUyBwYWludGluZyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5MDY5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogZmFzdC9jc3MtY3VzdG9tLXBhaW50L2Jhc2ljLWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBmYXN0L2Nzcy1jdXN0b20tcGFpbnQvYmFzaWMuaHRtbDoKKwogMjAxOC0xMC0xNyAg
SnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBhcHBsZS5jb20+CiAKICAgICAgICAgUGFy
c2UgcGFpbnQoKSBhbmQgc3RvcmUgcGFpbnQgY2FsbGJhY2tzIGZvciBDU1MgUGFpbnRpbmcgQVBJ
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1jdXN0b20tcGFpbnQvYmFzaWMtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3MtY3VzdG9tLXBhaW50L2Jhc2ljLWV4cGVj
dGVkLnR4dAppbmRleCBjZDdmMmVlYmIxODkxODA0ZWE5Yjk3MjU4ZDk0NTVmNzZhZmE4NDhjLi5l
YWExNzQzZTQzOTkwMGJmZDczYjBjMTkxNmUzZDJlY2VlNmQ0YjU2IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L2Nzcy1jdXN0b20tcGFpbnQvYmFzaWMtZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvY3NzLWN1c3RvbS1wYWludC9iYXNpYy1leHBlY3RlZC50eHQKQEAgLTYs
NCArNiw1IEBAIFBBU1MgdGVzdCB0aGF0IHJlZ2lzdGVyUGFpbnQgcnVucyB3aXRoIGNvbnRleHRP
cHRpb25zCiBQQVNTIHRlc3QgdGhhdCByZWdpc3RlclBhaW50IHJ1bnMgd2l0aCBwcmVkZWZpbmVk
IGNsYXNzIAogUEFTUyB0ZXN0IHRoYXQgcmVnaXN0ZXJQYWludCBhY2NlcHRzIG9ubHkgYSBzdHJp
bmcgYW5kIGEgY2xhc3MgY29uc3RydWN0b3IgCiBQQVNTIHRlc3QgdGhhdCB0ZXN0IGRpdiBoYXMg
cGFpbnQoKSB2YWx1ZSAKK1BBU1MgdGVzdCB0aGF0IHRlc3QgZGl2IHBhaW50IGNhbGxiYWNrIGdl
dHMgY2FsbGVkIAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1jdXN0b20tcGFp
bnQvYmFzaWMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWN1c3RvbS1wYWludC9iYXNpYy5o
dG1sCmluZGV4IDM2OTlhYTIxZWExMTY3MWM5OTk0MDA3ZDk3ZTdlZDQwZGZmMjcxYWYuLmNmM2Fm
ZTgzNDUxNmY3ZjAxYjA3MjYxNmQyZjkyNmE5ZmFhYmVmMDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvY3NzLWN1c3RvbS1wYWludC9iYXNpYy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvY3NzLWN1c3RvbS1wYWludC9iYXNpYy5odG1sCkBAIC02Niw0ICs2NiwxNSBAQCB0ZXN0KGZ1
bmN0aW9uKCkgewogICBhc3NlcnRfZXF1YWxzKGdldENvbXB1dGVkU3R5bGUocGFpbnQpLmdldFBy
b3BlcnR5VmFsdWUoImJhY2tncm91bmQtaW1hZ2UiKSwgInBhaW50KG15LXBhaW50KSIpOwogfSwg
J3Rlc3QgdGhhdCB0ZXN0IGRpdiBoYXMgcGFpbnQoKSB2YWx1ZScpOwogCitsZXQgcGFpbnRfY2Fs
bGVkX3Rlc3QgPSBhc3luY190ZXN0KCd0ZXN0IHRoYXQgdGVzdCBkaXYgcGFpbnQgY2FsbGJhY2sg
Z2V0cyBjYWxsZWQnKTsKK3BhaW50X2NhbGxlZF90ZXN0LnN0ZXAoZnVuY3Rpb24oKSB7CisgIENT
Uy5wYWludFdvcmtsZXRHbG9iYWxTY29wZS5yZWdpc3RlclBhaW50KCdteS1wYWludCcsIGNsYXNz
IHsKKyAgICBwYWludChjdHgsIGdlb20sIHByb3BlcnRpZXMpIHsKKyAgICAgIGN0eC5jbGVhckNv
bG9yKDAsMS4wLDAsMS4wKTsKKyAgICAgIGN0eC5jbGVhcihjdHguQ09MT1JfQlVGRkVSX0JJVCk7
CisgICAgICBwYWludF9jYWxsZWRfdGVzdC5kb25lKCk7CisgICAgfQorICB9KTsKK30pOworCiA8
L3NjcmlwdD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>