<?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>175425</bug_id>
          
          <creation_ts>2017-08-10 04:28:51 -0700</creation_ts>
          <short_desc>[TexMap] Remove GraphicsContext3D usage from TextureMapperShaderProgram</short_desc>
          <delta_ts>2017-10-23 03:11:17 -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>WebKitGTK</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>174860</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>buildbot</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>fujii</cc>
    
    <cc>magomez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1337383</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-10 04:28:51 -0700</bug_when>
    <thetext>[TexMap] Remove GraphicsContext3D usage from TextureMapperShaderProgram</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337385</commentid>
    <comment_count>1</comment_count>
      <attachid>317803</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-10 04:30:21 -0700</bug_when>
    <thetext>Created attachment 317803
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337389</commentid>
    <comment_count>2</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2017-08-10 05:03:00 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #1)
&gt; Created attachment 317803 [details]
&gt; WIP

Zan, we can&apos;t just replace m_context-&gt;compileShader() with glCompileShader(), cause m_context-&gt;compileShader() uses ANGLE to translate the shader source to the appropriate GLSL version before actually calling glCompileShader().
Before doing this change we need to refactor TextureMapperShaderProgram to provide the appropriate shader code for each possible gl version: GLES2, OpenGL &lt; 3.2 and OpenGL &gt;= 3.2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337391</commentid>
    <comment_count>3</comment_count>
      <attachid>317804</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-10 05:09:39 -0700</bug_when>
    <thetext>Created attachment 317804
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337392</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-10 05:10:57 -0700</bug_when>
    <thetext>Attachment 317804 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:161:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337399</commentid>
    <comment_count>5</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-10 06:21:01 -0700</bug_when>
    <thetext>(In reply to Miguel Gomez from comment #2)
&gt; (In reply to Zan Dobersek from comment #1)
&gt; &gt; Created attachment 317803 [details]
&gt; &gt; WIP
&gt; 
&gt; Zan, we can&apos;t just replace m_context-&gt;compileShader() with
&gt; glCompileShader(), cause m_context-&gt;compileShader() uses ANGLE to translate
&gt; the shader source to the appropriate GLSL version before actually calling
&gt; glCompileShader().
&gt; Before doing this change we need to refactor TextureMapperShaderProgram to
&gt; provide the appropriate shader code for each possible gl version: GLES2,
&gt; OpenGL &lt; 3.2 and OpenGL &gt;= 3.2.

Why can&apos;t we target specific GLSL and GLSL ES versions?

The shaders seem to compile fine with all the options enabled for both OpenGL and OpenGL ES.

The only problem is the Rect option, which depends on the GL_ARB_texture_rectangle extension, and that doesn&apos;t compile for GLSL ES 1.00 out-of-the-box. But on the other hand, this program option never gets set upstream or downstream, so program with that option never gets compiled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337400</commentid>
    <comment_count>6</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2017-08-10 06:44:52 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #5)
&gt; (In reply to Miguel Gomez from comment #2)
&gt; &gt; (In reply to Zan Dobersek from comment #1)
&gt; &gt; &gt; Created attachment 317803 [details]
&gt; &gt; &gt; WIP
&gt; &gt; 
&gt; &gt; Zan, we can&apos;t just replace m_context-&gt;compileShader() with
&gt; &gt; glCompileShader(), cause m_context-&gt;compileShader() uses ANGLE to translate
&gt; &gt; the shader source to the appropriate GLSL version before actually calling
&gt; &gt; glCompileShader().
&gt; &gt; Before doing this change we need to refactor TextureMapperShaderProgram to
&gt; &gt; provide the appropriate shader code for each possible gl version: GLES2,
&gt; &gt; OpenGL &lt; 3.2 and OpenGL &gt;= 3.2.
&gt; 
&gt; Why can&apos;t we target specific GLSL and GLSL ES versions?
&gt; 
&gt; The shaders seem to compile fine with all the options enabled for both
&gt; OpenGL and OpenGL ES.

Yes, we can target specific versions. We need GLSL 1.50 for OpenGL &gt;= 3.2, GLSL ES for GLES and for OpenGL &lt; 3.2 ANGLE uses the compatibility mode, which I guess is 1.10 (not sure).

For the case of OpenGL &gt;= 3.2, we want to use a core profile, which I think also has implications in the shader code.

&gt; The only problem is the Rect option, which depends on the
&gt; GL_ARB_texture_rectangle extension, and that doesn&apos;t compile for GLSL ES
&gt; 1.00 out-of-the-box. But on the other hand, this program option never gets
&gt; set upstream or downstream, so program with that option never gets compiled.

I think there are more problems than just that. First, the shaders need to have a line with the GLSL version they are using (which is added by ANGLE). Then, in GLSL 1.50 the variables need to have the in/out qualifiers (added by ANGLE as well) while that&apos;s not needed in older versions. And I&apos;m sure there are more differences. Bear in mind that the current code used for the shaders is like a pseudocode that gets properly translated by ANGLE.

What I was planning to do to find the differences we need to check between versions was to check the ouput of the ANGLE translation for the 3 targeted GLSL versions with all the options enabled, and then refactor TextureMapperShaderProgram somehow to generate that code depending on the OpenGL version available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337839</commentid>
    <comment_count>7</comment_count>
      <attachid>317917</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-10 23:30:11 -0700</bug_when>
    <thetext>Created attachment 317917
ANGLE translation of TexMap shaders on OpenGL ES 2.0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337840</commentid>
    <comment_count>8</comment_count>
      <attachid>317918</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-10 23:32:07 -0700</bug_when>
    <thetext>Created attachment 317918
ANGLE translation of TexMap shaders on OpenGL 3.0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337841</commentid>
    <comment_count>9</comment_count>
      <attachid>317919</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-10 23:32:53 -0700</bug_when>
    <thetext>Created attachment 317919
ANGLE translation of TexMap shaders on OpenGL 4.3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337843</commentid>
    <comment_count>10</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-11 00:00:05 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #9)
&gt; Created attachment 317919 [details]
&gt; ANGLE translation of TexMap shaders on OpenGL 4.3

Forcing through GLSL 1.10 shaders on a core OpenGL profile works on Mesa drivers. But the spec doesn&apos;t guarantee that to be supported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347497</commentid>
    <comment_count>11</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-09-11 11:18:09 -0700</bug_when>
    <thetext>Using the glslangValidator program[1], The vertex and fragment shader sources pass the validation when enforcing the 1.50 version through the &apos;#version&apos; directive. Only a few warnings are thrown about deprecated stuff used in the shaders:

&gt; shaders/gl150.vert
&gt; WARNING: 0:40: attribute deprecated in version 130; may be removed in future release
&gt; WARNING: 0:40: varying deprecated in version 130; may be removed in future release
&gt; WARNING: 0:40: varying deprecated in version 130; may be removed in future release
&gt; WARNING: 0:40: varying deprecated in version 130; may be removed in future release

&gt; shaders/gl150.frag
&gt; WARNING: 0:54: varying deprecated in version 130; may be removed in future release
&gt; WARNING: 0:54: varying deprecated in version 130; may be removed in future release
&gt; WARNING: 0:54: varying deprecated in version 130; may be removed in future release

[1] https://www.khronos.org/opengles/sdk/tools/Reference-Compiler/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362688</commentid>
    <comment_count>12</comment_count>
      <attachid>324397</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2017-10-20 07:42:59 -0700</bug_when>
    <thetext>Created attachment 324397
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362689</commentid>
    <comment_count>13</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-20 07:44:37 -0700</bug_when>
    <thetext>Attachment 324397 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:161:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362690</commentid>
    <comment_count>14</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2017-10-20 07:50:14 -0700</bug_when>
    <thetext>(In reply to Miguel Gomez from comment #12)
&gt; Created attachment 324397 [details]
&gt; Patch

In the end the changes needed to the shaders code were:
- add the &quot;version 150&quot; directive when using OpenGL &gt;= 3.2
- use in/out for input/output parameters definition with OpenGL &gt;= 3.2
- use the default precision just on GLES2

I&apos;ve tested the generated code with these changes using OpenGL versions higher and lower than 3.2 and everything seems to work. I also tested GLES2 with the rpi2 and a broadcom box. Seems to work fine as well.
But I was only able to test OpenGL with Mesa. I hope we don&apos;t have problems with other OpenGL implementations.

Also, when removing the GraphicsContext3D from VideoTextureCopierGStreamer, I had to add a VAO, as the one that was being used was provided by the GC3D. We will need to that as well when removing the GC3D from TextureMaperGL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363211</commentid>
    <comment_count>15</comment_count>
      <attachid>324397</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-10-22 22:19:42 -0700</bug_when>
    <thetext>Comment on attachment 324397
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/VideoTextureCopierGStreamer.cpp:200
&gt; +    if (GLContext::current()-&gt;version() &gt;= 320)

This should check for m_vao being non-zero.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363227</commentid>
    <comment_count>16</comment_count>
      <attachid>324548</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2017-10-23 01:14:16 -0700</bug_when>
    <thetext>Created attachment 324548
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363228</commentid>
    <comment_count>17</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-23 01:15:09 -0700</bug_when>
    <thetext>Attachment 324548 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:161:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363231</commentid>
    <comment_count>18</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2017-10-23 01:33:00 -0700</bug_when>
    <thetext>Don, Fuji, I&apos;m adding you to the CC as this could potentially trigger some rendering issues. Please feel free to blame me if you find any problem that could be related to this change :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363237</commentid>
    <comment_count>19</comment_count>
      <attachid>324548</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-23 03:11:15 -0700</bug_when>
    <thetext>Comment on attachment 324548
Patch

Clearing flags on attachment: 324548

Committed r223833: &lt;https://trac.webkit.org/changeset/223833&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363238</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-23 03:11:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317803</attachid>
            <date>2017-08-10 04:30:21 -0700</date>
            <delta_ts>2017-08-10 05:09:36 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-175425-20170810133019.patch</filename>
            <type>text/plain</type>
            <size>15831</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwNTIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzUyMzYxZTI5ODM0YTY3
ODgzNTdlMGY5OTdhOWZjYzc3YmU5NWUzZi4uZTRlZWQ5ZjBjZjY4MDRiMjkyYThjODI0NDIwZGQ1
YzQxNmEzY2M4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMzIEBACiAyMDE3LTA4LTEwICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAorICAgICAgICBbVGV4TWFwXSBSZW1v
dmUgR3JhcGhpY3NDb250ZXh0M0QgdXNhZ2UgZnJvbSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NDI1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
VGV4dHVyZUNvcGllckdTdHJlYW1lcjo6VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OmdldFNoYWRlclByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6cHJlcGFyZUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0U2hhZGVyTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFByb2dyYW1Mb2cpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
Ojp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06OnNldE1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0TG9jYXRpb24pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OnByb2dyYW1JRCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y29udGV4dCk6IERl
bGV0ZWQuCisKKzIwMTctMDgtMTAgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29t
PgorCiAgICAgICAgIFVucmV2aWV3ZWQgR1RLKyBidWlsZCBmaXggZm9yIEVOQUJMRV9HTEVTMj1P
Ti4KIAogICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0xI
ZWFkZXJzLmg6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXIu
Y3BwCmluZGV4IGM3OGIyZDYzNWRlZjYyZTJmMGFmZDBmNTQxZWZmZmQ2NDM4MTA3MjQuLjMyY2I2
YmE0MDNiNWNmZGVmNDFhMzVhNjRkZjE2NTE4YWQ1NTE3NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RleHR1cmVDb3BpZXJHU3Ry
ZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9WaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXIuY3BwCkBAIC0yNyw5ICsyNyw2IEBACiAjaW5j
bHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtLmgiCiAKLS8vIEZJWE1FOiBSZW1vdmUgYWZ0ZXIgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0gZHJvcHMgR3JhcGhpY3NDb250ZXh0M0QgdXNhZ2UuCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBWaWRlb1RleHR1cmVDb3BpZXJH
U3RyZWFtZXI6OlZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcihDb2xvckNvbnZlcnNpb24gY29s
b3JDb252ZXJzaW9uKQpAQCAtMzgsMTEgKzM1LDcgQEAgVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVh
bWVyOjpWaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXIoQ29sb3JDb252ZXJzaW9uIGNvbG9yQ28K
ICAgICBBU1NFUlQocHJldmlvdXNDb250ZXh0KTsKICAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJl
ZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRD
dXJyZW50KCk7CiAKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgYWZ0ZXIgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0gZHJvcHMgR3JhcGhpY3NDb250ZXh0M0QgdXNhZ2UuCi0gICAg
ICAgIGF1dG8gY29udGV4dDNEID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZvckN1cnJlbnRH
TENvbnRleHQoKTsKLSAgICAgICAgbV9zaGFkZXJQcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06OmNyZWF0ZSgqY29udGV4dDNELCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
VGV4dHVyZSk7Ci0gICAgfQorICAgIG1fc2hhZGVyUHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpjcmVhdGUoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmUpOwog
CiAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZnJhbWVidWZmZXIpOwogICAgIGdsR2VuVGV4
dHVyZXMoMSwgJm1fcmVzdWx0VGV4dHVyZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDY0
YjAyYzFjMDU1ZGFhYTBkNGI2NWIyZGZkMTAyMTYxYjg1YTcwY2UuLjY2ZDYzNDJkNjMxODQxZGM5
NGJkNmVkZDhmYWM0ZTY0YmFlZGM2NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0xNTgs
NyArMTU4LDcgQEAgUGxhdGZvcm0zRE9iamVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhOjpnZXRTdGF0
aWNWQk8oR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIKIFJlZjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlckdMRGF0YTo6Z2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbTo6T3B0aW9ucyBvcHRpb25zKQogewogICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV9zaGFyZWRHTERhdGEtPm1fcHJvZ3JhbXMuZW5zdXJlKG9wdGlvbnMsCi0gICAgICAg
IFt0aGlzLCBvcHRpb25zXSB7IHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3Jl
YXRlKFJlZjxHcmFwaGljc0NvbnRleHQzRD4obV9jb250ZXh0KSwgb3B0aW9ucyk7IH0pOworICAg
ICAgICBbdGhpcywgb3B0aW9uc10geyByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OmNyZWF0ZShvcHRpb25zKTsgfSk7CiAgICAgcmV0dXJuICphZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlOwogfQogCkBAIC0zNTIsOSArMzUyLDggQEAgc3RhdGljIGZsb2F0KiBnYXVzc2lhbktlcm5l
bCgpCiAgICAgcmV0dXJuIGtlcm5lbDsKIH0KIAotc3RhdGljIHZvaWQgcHJlcGFyZUZpbHRlclBy
b2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0mIHByb2dyYW0sIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiBzaXplLCBH
QzNEdWludCBjb250ZW50VGV4dHVyZSkKK3N0YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFt
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYg
cHJvZ3JhbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3Ms
IGNvbnN0IEludFNpemUmIHNpemUsIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlKQogewotICAgIFJl
ZjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IHByb2dyYW0uY29udGV4dCgpOwogICAgIGNv
bnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS5wcm9ncmFtSUQoKSk7CiAKICAgICBzd2l0Y2ggKG9w
ZXJhdGlvbi50eXBlKCkpIHsKQEAgLTQ3NCw3ICs0NzMsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6ZHJhd1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29u
c3QgSQogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEo
KS5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwogCiAgICAgaWYgKGZpbHRlcikKLSAgICAgICAg
cHJlcGFyZUZpbHRlclByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgKmZpbHRlci5nZXQoKSwgZGF0YSgp
LmZpbHRlckluZm8tPnBhc3MsIHRleHR1cmVTaXplLCBmaWx0ZXJDb250ZW50VGV4dHVyZUlEKTsK
KyAgICAgICAgcHJlcGFyZUZpbHRlclByb2dyYW0obV9jb250ZXh0M0QuZ2V0KCksIHByb2dyYW0u
Z2V0KCksICpmaWx0ZXIuZ2V0KCksIGRhdGEoKS5maWx0ZXJJbmZvLT5wYXNzLCB0ZXh0dXJlU2l6
ZSwgZmlsdGVyQ29udGVudFRleHR1cmVJRCk7CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFBy
b2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIHRleHR1cmVTaXplLCB0YXJnZXRS
ZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHkpOwogfQpAQCAtNjI2LDcgKzYyNSw3IEBAIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQoY29uc3QgQml0bWFwVGV4dHVyZSYgc2Ft
cGxlciwgY29uc3QgQml0bWFwVGV4CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9w
dGlvbnMgb3B0aW9ucyA9IG9wdGlvbnNGb3JGaWx0ZXJUeXBlKGZpbHRlci50eXBlKCksIHBhc3Mp
OwogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5n
ZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwogCi0gICAgcHJlcGFyZUZpbHRlclByb2dyYW0ocHJv
Z3JhbS5nZXQoKSwgZmlsdGVyLCBwYXNzLCBzYW1wbGVyLmNvbnRlbnRTaXplKCksIGNvbnRlbnRU
ZXh0dXJlID8gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMKj4oY29udGVudFRleHR1
cmUpLT5pZCgpIDogMCk7CisgICAgcHJlcGFyZUZpbHRlclByb2dyYW0obV9jb250ZXh0M0QuZ2V0
KCksIHByb2dyYW0uZ2V0KCksIGZpbHRlciwgcGFzcywgc2FtcGxlci5jb250ZW50U2l6ZSgpLCBj
b250ZW50VGV4dHVyZSA/IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KGNvbnRl
bnRUZXh0dXJlKS0+aWQoKSA6IDApOwogICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIHNhbXBsZXIuY29udGVudFNpemUoKSk7CiAgICAgZHJhd1RleHR1cmVkUXVhZFdp
dGhQcm9ncmFtKHByb2dyYW0uZ2V0KCksIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVH
TCY+KHNhbXBsZXIpLmlkKCksIDAsIEludFNpemUoMSwgMSksIHRhcmdldFJlY3QsIFRyYW5zZm9y
bWF0aW9uTWF0cml4KCksIDEpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbS5jcHAKaW5kZXggNmNiNTkyZDA0NjdiMWYzYjIwMzQ0NjU5ZWJlOWYyZTg3MzZhYzU3Zi4u
YTc0NmNlOGNlN2U2ZjUzNmVhYmNkZDYyZWNhODM4MWI2ZjFkODA5NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uY3BwCkBAIC01Myw3ICs1Myw5IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBjb21wb3NpdGluZ0xvZ0VuYWJsZWQoKQogc3RhdGljIGNvbnN0IGNoYXIqIHZl
cnRleFRlbXBsYXRlID0KICAgICBURVhUVVJFX1NQQUNFX01BVFJJWF9QUkVDSVNJT05fRElSRUNU
SVZFCiAgICAgU1RSSU5HSUZZKAorI2lmIFVTRShPUEVOR0xfRVNfMikKICAgICAgICAgcHJlY2lz
aW9uIFRleHR1cmVTcGFjZU1hdHJpeFByZWNpc2lvbiBmbG9hdDsKKyNlbmRpZgogICAgICAgICBh
dHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3
TWF0cml4OwogICAgICAgICB1bmlmb3JtIG1hdDQgdV9wcm9qZWN0aW9uTWF0cml4OwpAQCAtMTQy
LDEwICsxNDQsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGUgPQogICAg
IEJMVVJfQ09OU1RBTlRTCiAgICAgVEVYVFVSRV9TUEFDRV9NQVRSSVhfUFJFQ0lTSU9OX0RJUkVD
VElWRQogICAgIFNUUklOR0lGWSgKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCiAgICAgICAgIHByZWNp
c2lvbiBUZXh0dXJlU3BhY2VNYXRyaXhQcmVjaXNpb24gZmxvYXQ7CisjZW5kaWYKICAgICAgICAg
dW5pZm9ybSBtYXQ0IHVfdGV4dHVyZVNwYWNlTWF0cml4OwogICAgICAgICB1bmlmb3JtIG1hdDQg
dV90ZXh0dXJlQ29sb3JTcGFjZU1hdHJpeDsKLSAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxv
YXQ7CiAgICAgICAgIHVuaWZvcm0gU2FtcGxlclR5cGUgc19zYW1wbGVyOwogICAgICAgICB1bmlm
b3JtIHNhbXBsZXIyRCBzX2NvbnRlbnRUZXh0dXJlOwogICAgICAgICB1bmlmb3JtIGZsb2F0IHVf
b3BhY2l0eTsKQEAgLTMwNSw3ICszMDgsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRU
ZW1wbGF0ZSA9CiAgICAgICAgIH0KICAgICApOwogCi1SZWY8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUoUmVmPEdyYXBoaWNzQ29u
dGV4dDNEPiYmIGNvbnRleHQsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zIG9w
dGlvbnMpCitSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpjcmVhdGUoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMgb3B0
aW9ucykKIHsKICNkZWZpbmUgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFwcGxpZXIpIFwKICAg
ICBvcHRpb25zQXBwbGllckJ1aWxkZXIuYXBwZW5kKFwKQEAgLTMzOCwzNyArMzQxLDcyIEBAIFJl
ZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OmNyZWF0ZShSZWY8R3JhcGhpY3NDCiAgICAgZnJhZ21lbnRTaGFkZXJCdWlsZGVyLmFwcGVuZChv
cHRpb25zQXBwbGllckJ1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgZnJhZ21lbnRTaGFkZXJCdWls
ZGVyLmFwcGVuZChmcmFnbWVudFRlbXBsYXRlKTsKIAotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKFdURk1vdmUoY29udGV4dCksIHZlcnRleFNoYWRl
ckJ1aWxkZXIudG9TdHJpbmcoKSwgZnJhZ21lbnRTaGFkZXJCdWlsZGVyLnRvU3RyaW5nKCkpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0
ZXhTaGFkZXJCdWlsZGVyLnRvU3RyaW5nKCksIGZyYWdtZW50U2hhZGVyQnVpbGRlci50b1N0cmlu
ZygpKSk7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbShSZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYgY29udGV4dCwgY29uc3QgU3RyaW5n
JiB2ZXJ0ZXgsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnQpCi0gICAgOiBtX2NvbnRleHQoV1RGTW92
ZShjb250ZXh0KSkKKyNpZiAhTE9HX0RJU0FCTEVECitzdGF0aWMgQ1N0cmluZyBnZXRTaGFkZXJM
b2coR0x1aW50IHNoYWRlcikKIHsKLSAgICBtX3ZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3Jl
YXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKLSAgICBtX2NvbnRl
eHQtPnNoYWRlclNvdXJjZShtX3ZlcnRleFNoYWRlciwgdmVydGV4KTsKKyAgICBHTGludCBsb2dM
ZW5ndGggPSAwOworICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgs
ICZsb2dMZW5ndGgpOworICAgIGlmICghbG9nTGVuZ3RoKQorICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgbV9mcmFnbWVudFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpOwotICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNl
KG1fZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50KTsKKyAgICBhdXRvIGluZm8gPSBzdGQ6Om1ha2Vf
dW5pcXVlPEdMY2hhcltdPihsb2dMZW5ndGgpOworICAgIEdMc2l6ZWkgaW5mb0xlbmd0aCA9IDA7
CisgICAgZ2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbG9nTGVuZ3RoLCAmaW5mb0xlbmd0aCwg
aW5mby5nZXQoKSk7CiAKLSAgICBtX2lkID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7Ci0g
ICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRl
eHQtPmNvbXBpbGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5hdHRh
Y2hTaGFkZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+YXR0YWNoU2hh
ZGVyKG1faWQsIG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0o
bV9pZCk7CisgICAgc2l6ZV90IHN0cmluZ0xlbmd0aCA9IHN0ZDo6bWF4KGluZm9MZW5ndGgsIDAp
OworICAgIHJldHVybiB7IGluZm8uZ2V0KCksIHN0cmluZ0xlbmd0aCB9OworfQogCi0gICAgaWYg
KCFjb21wb3NpdGluZ0xvZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworc3RhdGljIENTdHJp
bmcgZ2V0UHJvZ3JhbUxvZyhHTHVpbnQgcHJvZ3JhbSkKK3sKKyAgICBHTGludCBsb2dMZW5ndGgg
PSAwOworICAgIGdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxv
Z0xlbmd0aCk7CisgICAgaWYgKCFsb2dMZW5ndGgpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBpZiAobV9jb250ZXh0LT5nZXRFcnJvcigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJP
UikKKyAgICBhdXRvIGluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPEdMY2hhcltdPihsb2dMZW5ndGgp
OworICAgIEdMc2l6ZWkgaW5mb0xlbmd0aCA9IDA7CisgICAgZ2xHZXRQcm9ncmFtSW5mb0xvZyhw
cm9ncmFtLCBsb2dMZW5ndGgsICZpbmZvTGVuZ3RoLCBpbmZvLmdldCgpKTsKKworICAgIHNpemVf
dCBzdHJpbmdMZW5ndGggPSBzdGQ6Om1heChpbmZvTGVuZ3RoLCAwKTsKKyAgICByZXR1cm4geyBp
bmZvLmdldCgpLCBzdHJpbmdMZW5ndGggfTsKK30KKyNlbmRpZgorCitUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29uc3QgU3RyaW5nJiB2ZXJ0
ZXgsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnQpCit7CisgICAgbV92ZXJ0ZXhTaGFkZXIgPSBnbENy
ZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVSKTsKKyAgICB7CisgICAgICAgIENTdHJpbmcgdmVy
dGV4Q1N0cmluZyA9IHZlcnRleC51dGY4KCk7CisgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEgPSB2
ZXJ0ZXhDU3RyaW5nLmRhdGEoKTsKKyAgICAgICAgaW50IGxlbmd0aCA9IHZlcnRleENTdHJpbmcu
bGVuZ3RoKCk7CisgICAgICAgIGdsU2hhZGVyU291cmNlKG1fdmVydGV4U2hhZGVyLCAxLCAmZGF0
YSwgJmxlbmd0aCk7CisgICAgfQorICAgIGdsQ29tcGlsZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7
CisKKyAgICBtX2ZyYWdtZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hB
REVSKTsKKyAgICB7CisgICAgICAgIENTdHJpbmcgZnJhZ21lbnRDU3RyaW5nID0gZnJhZ21lbnQu
dXRmOCgpOworICAgICAgICBjb25zdCBjaGFyKiBkYXRhID0gZnJhZ21lbnRDU3RyaW5nLmRhdGEo
KTsKKyAgICAgICAgaW50IGxlbmd0aCA9IGZyYWdtZW50Q1N0cmluZy5sZW5ndGgoKTsKKyAgICAg
ICAgZ2xTaGFkZXJTb3VyY2UobV9mcmFnbWVudFNoYWRlciwgMSwgJmRhdGEsICZsZW5ndGgpOwor
ICAgIH0KKyAgICBnbENvbXBpbGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7CisKKyAgICBtX2lk
ID0gZ2xDcmVhdGVQcm9ncmFtKCk7CisgICAgZ2xBdHRhY2hTaGFkZXIobV9pZCwgbV92ZXJ0ZXhT
aGFkZXIpOworICAgIGdsQXR0YWNoU2hhZGVyKG1faWQsIG1fZnJhZ21lbnRTaGFkZXIpOworICAg
IGdsTGlua1Byb2dyYW0obV9pZCk7CisKKyAgICBpZiAoIWNvbXBvc2l0aW5nTG9nRW5hYmxlZCgp
IHx8IGdsR2V0RXJyb3IoKSA9PSBHTF9OT19FUlJPUikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
U3RyaW5nIGxvZyA9IG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhtX3ZlcnRleFNoYWRlcik7
Ci0gICAgTE9HKENvbXBvc2l0aW5nLCAiVmVydGV4IHNoYWRlciBsb2c6ICVzXG4iLCBsb2cudXRm
OCgpLmRhdGEoKSk7Ci0gICAgbG9nID0gbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKG1fZnJh
Z21lbnRTaGFkZXIpOwotICAgIExPRyhDb21wb3NpdGluZywgIkZyYWdtZW50IHNoYWRlciBsb2c6
ICVzXG4iLCBsb2cudXRmOCgpLmRhdGEoKSk7Ci0gICAgbG9nID0gbV9jb250ZXh0LT5nZXRQcm9n
cmFtSW5mb0xvZyhtX2lkKTsKLSAgICBMT0coQ29tcG9zaXRpbmcsICJQcm9ncmFtIGxvZzogJXNc
biIsIGxvZy51dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coQ29tcG9zaXRpbmcsICJWZXJ0ZXggc2hh
ZGVyIGxvZzogJXNcbiIsIGdldFNoYWRlckxvZyhtX3ZlcnRleFNoYWRlcikuZGF0YSgpKTsKKyAg
ICBMT0coQ29tcG9zaXRpbmcsICJGcmFnbWVudCBzaGFkZXIgbG9nOiAlc1xuIiwgZ2V0U2hhZGVy
TG9nKG1fZnJhZ21lbnRTaGFkZXIpLmRhdGEoKSk7CisgICAgTE9HKENvbXBvc2l0aW5nLCAiUHJv
Z3JhbSBsb2c6ICVzXG4iLCBnZXRQcm9ncmFtTG9nKG1faWQpLmRhdGEoKSk7CiB9CiAKIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQpAQCAt
Mzc2LDI5ICs0MTQsMzAgQEAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSgpCiAgICAgaWYgKCFtX2lkKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7Ci0gICAgbV9j
b250ZXh0LT5kZWxldGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGV0
YWNoU2hhZGVyKG1faWQsIG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGVsZXRl
U2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbSht
X2lkKTsKKyAgICBnbERldGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7CisgICAgZ2xE
ZWxldGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOworICAgIGdsRGV0YWNoU2hhZGVyKG1faWQsIG1f
ZnJhZ21lbnRTaGFkZXIpOworICAgIGdsRGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOwor
ICAgIGdsRGVsZXRlUHJvZ3JhbShtX2lkKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbTo6c2V0TWF0cml4KEdDM0R1aW50IGxvY2F0aW9uLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbWF0cml4KQordm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6c2V0TWF0
cml4KEdMdWludCBsb2NhdGlvbiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkK
IHsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6RmxvYXRNYXRyaXg0IGZsb2F0TWF0cml4Owog
ICAgIG1hdHJpeC50b0NvbHVtbk1ham9yRmxvYXRBcnJheShmbG9hdE1hdHJpeCk7Ci0gICAgbV9j
b250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCAxLCBmYWxzZSwgZmxvYXRNYXRyaXgp
OworICAgIGdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgMSwgZmFsc2UsIGZsb2F0TWF0cml4
KTsKIH0KIAotR0MzRHVpbnQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldExvY2F0aW9u
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgVmFyaWFibGVUeXBlIHR5cGUpCitHTHVpbnQgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldExvY2F0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSwgVmFyaWFibGVUeXBlIHR5cGUpCiB7CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3Zhcmlh
Ymxlcy5lbnN1cmUobmFtZSwKICAgICAgICAgW3RoaXMsICZuYW1lLCB0eXBlXSB7CisgICAgICAg
ICAgICBDU3RyaW5nIG5hbWVDU3RyaW5nID0gbmFtZS5zdHJpbmcoKS51dGY4KCk7CiAgICAgICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgVW5pZm9ybVZhcmlhYmxlOgot
ICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX2lk
LCBuYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9p
ZCwgbmFtZUNTdHJpbmcuZGF0YSgpKTsKICAgICAgICAgICAgIGNhc2UgQXR0cmliVmFyaWFibGU6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24obV9p
ZCwgbmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsR2V0QXR0cmliTG9jYXRpb24obV9p
ZCwgbmFtZUNTdHJpbmcuZGF0YSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbS5oCmluZGV4IGRhNTI1NmI4MzA5NDc1MDliODJkMjY4YWFjMzNl
MjhhNGVjMjI0OTkuLjhkYTFlNDI4MTllMGQxNzQ3ODdiMzdmYTBmNTZmNDFmMjFmMjZjZWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oCkBAIC0yMyw3ICsyMyw3IEBA
CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTEhlYWRlcnMuaCIKICNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfVkFSSUFCTEUoQWNjZXNzb3IsIE5hbWUs
IFR5cGUpIFwKLSAgICBHQzNEdWludCBBY2Nlc3NvciMjTG9jYXRpb24oKSB7IFwKKyAgICBHTHVp
bnQgQWNjZXNzb3IjI0xvY2F0aW9uKCkgeyBcCiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBBdG9taWNTdHJpbmc+IG5hbWUoTmFtZSwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7IFwKICAgICAgICAgcmV0dXJuIGdldExvY2F0aW9uKG5hbWUuZ2V0KCksIFR5
cGUpOyBcCiAgICAgfQpAQCAtNjYsMTEgKzY2LDEwIEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYg
dW5zaWduZWQgT3B0aW9uczsKIAotICAgIHN0YXRpYyBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0+IGNyZWF0ZShSZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYsIE9wdGlvbnMpOworICAgIHN0
YXRpYyBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGNyZWF0ZShPcHRpb25zKTsKICAg
ICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpOwogCi0gICAgUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtSUQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgR3JhcGhpY3ND
b250ZXh0M0QmIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KKyAgICBHTHVpbnQgcHJv
Z3JhbUlEKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQogCiAgICAgVEVYTUFQX0RFQ0xBUkVfQVRU
UklCVVRFKHZlcnRleCkKIApAQCAtOTAsMjAgKzg5LDE5IEBAIHB1YmxpYzoKICAgICBURVhNQVBf
REVDTEFSRV9VTklGT1JNKHNoYWRvd09mZnNldCkKICAgICBURVhNQVBfREVDTEFSRV9TQU1QTEVS
KGNvbnRlbnRUZXh0dXJlKQogCi0gICAgdm9pZCBzZXRNYXRyaXgoR0MzRHVpbnQsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCBzZXRNYXRyaXgoR0x1aW50LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCiBwcml2YXRlOgotICAgIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKFJlZjxHcmFwaGljc0NvbnRleHQzRD4mJiwgY29uc3QgU3RyaW5nJiB2ZXJ0ZXhT
aGFkZXJTb3VyY2UsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOworICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnN0IFN0cmluZyYgdmVydGV4U2hhZGVyU291cmNl
LCBjb25zdCBTdHJpbmcmIGZyYWdtZW50U2hhZGVyU291cmNlKTsKIAotICAgIFBsYXRmb3JtM0RP
YmplY3QgbV92ZXJ0ZXhTaGFkZXI7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50U2hh
ZGVyOworICAgIEdMdWludCBtX3ZlcnRleFNoYWRlcjsKKyAgICBHTHVpbnQgbV9mcmFnbWVudFNo
YWRlcjsKIAogICAgIGVudW0gVmFyaWFibGVUeXBlIHsgVW5pZm9ybVZhcmlhYmxlLCBBdHRyaWJW
YXJpYWJsZSB9OwotICAgIEdDM0R1aW50IGdldExvY2F0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYs
IFZhcmlhYmxlVHlwZSk7CisgICAgR0x1aW50IGdldExvY2F0aW9uKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIFZhcmlhYmxlVHlwZSk7CiAKLSAgICBSZWY8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4
dDsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7Ci0gICAgSGFzaE1hcDxBdG9taWNTdHJpbmcs
IEdDM0R1aW50PiBtX3ZhcmlhYmxlczsKKyAgICBHTHVpbnQgbV9pZDsKKyAgICBIYXNoTWFwPEF0
b21pY1N0cmluZywgR0x1aW50PiBtX3ZhcmlhYmxlczsKIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317804</attachid>
            <date>2017-08-10 05:09:39 -0700</date>
            <delta_ts>2017-10-20 07:42:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175425-20170810140938.patch</filename>
            <type>text/plain</type>
            <size>16700</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwNTIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzUyMzYxZTI5ODM0YTY3
ODgzNTdlMGY5OTdhOWZjYzc3YmU5NWUzZi4uNjVmZDIwNWNhNTE1MjFhZmRmZGVjNjg1NGEyM2Ni
MDEyMTcyMThjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ2IEBACiAyMDE3LTA4LTEwICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAorICAgICAgICBbVGV4TWFwXSBSZW1v
dmUgR3JhcGhpY3NDb250ZXh0M0QgdXNhZ2UgZnJvbSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NDI1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3Zl
IHVzYWdlIG9mIHRoZSBHcmFwaGljc0NvbnRleHQzRCBjbGFzcyBpbiBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbS4KKyAgICAgICAgRGlyZWN0IE9wZW5HTCBBUEkgY2FsbHMsIHR5cGVzIGFuZCBj
b25zdGFudHMgYXJlIHVzZWQgaW5zdGVhZC4KKworICAgICAgICBCeSBub3QgdXNpbmcgR3JhcGhp
Y3NDb250ZXh0M0QgYW55bW9yZSwgQU5HTEUgaXMgbm8gbG9uZ2VyIGxldmVyYWdlZCBmb3IKKyAg
ICAgICAgc2hhZGVyIGNvbXBpbGF0aW9uLiBUaGlzIHJlcXVpcmVzIGRyb3BwaW5nIHRoZSBkZWZh
dWx0IHByZWNpc2lvbiBkZWNsYXJhdGlvbgorICAgICAgICBmb3Igbm9uLUdMRVMyIGNvbmZpZ3Vy
YXRpb25zIHNpbmNlIHRoZSBzaGFkZXJzIHRhcmdldCBHTFNMIDEuMTAsIHdoaWxlIHRoZQorICAg
ICAgICBzdXBwb3J0IGZvciB0aGF0IGRlY2xhcmF0aW9uIHdhc24ndCBhZGRlZCB1bnRpbCBHTFNM
IDEuMzAuIFRoZSBkdXBsaWNhdGVkCisgICAgICAgIGRlZmF1bHQgcHJlY2lzaW9uIGRlY2xhcmF0
aW9uIGluIHRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGNvZGUgaXMgYWxzbworICAgICAgICBk
cm9wcGVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBubyBjaGFuZ2UgaW4gYmVoYXZpb3Iu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UZXh0dXJlQ29w
aWVyR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvVGV4dHVyZUNvcGllckdT
dHJlYW1lcjo6VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyKToKKyAgICAgICAgTm93IGFibGUg
dG8gZHJvcCB0aGUgbGFzdCBHcmFwaGljc0NvbnRleHQzRCB1c2UgaW4gdGhpcyBjbGFzcy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OmdldFNoYWRlclByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6cHJlcGFyZUZpbHRlclByb2dyYW0pOiBUaGUgR3JhcGhpY3NDb250
ZXh0M0Qgb2JqZWN0IGlzIG5vdworICAgICAgICBwYXNzZWQgYnkgdGhlIGNhbGxlciAoVGV4dHVy
ZU1hcHBlckdMKS4gSXQncyBzdGlsbCB0aGUgc2FtZSBvYmplY3QKKyAgICAgICAgdGhhdCB3YXMg
cmVmZXJlbmNlZCBpbiB0aGUgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gaW5zdGFuY2UuCisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRTaGFkZXJMb2cpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UHJvZ3Jh
bUxvZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6c2V0TWF0cml4KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRMb2NhdGlvbik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
Lmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6cHJvZ3Jh
bUlEIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
Ojpjb250ZXh0KTogRGVsZXRlZC4KKworMjAxNy0wOC0xMCAgWmFuIERvYmVyc2VrICA8emRvYmVy
c2VrQGlnYWxpYS5jb20+CisKICAgICAgICAgVW5yZXZpZXdlZCBHVEsrIGJ1aWxkIGZpeCBmb3Ig
RU5BQkxFX0dMRVMyPU9OLgogCiAgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJHTEhlYWRlcnMuaDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVGV4dHVyZUNv
cGllckdTdHJlYW1lci5jcHAKaW5kZXggYzc4YjJkNjM1ZGVmNjJlMmYwYWZkMGY1NDFlZmZmZDY0
MzgxMDcyNC4uMzJjYjZiYTQwM2I1Y2ZkZWY0MWEzNWE2NGRmMTY1MThhZDU1MTc0NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVGV4
dHVyZUNvcGllckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lci5jcHAKQEAgLTI3LDkg
KzI3LDYgQEAKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0uaCIKIAotLy8gRklYTUU6IFJlbW92ZSBhZnRlciBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSBkcm9wcyBHcmFwaGljc0NvbnRleHQzRCB1c2FnZS4KLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFZpZGVv
VGV4dHVyZUNvcGllckdTdHJlYW1lcjo6VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyKENvbG9y
Q29udmVyc2lvbiBjb2xvckNvbnZlcnNpb24pCkBAIC0zOCwxMSArMzUsNyBAQCBWaWRlb1RleHR1
cmVDb3BpZXJHU3RyZWFtZXI6OlZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcihDb2xvckNvbnZl
cnNpb24gY29sb3JDbwogICAgIEFTU0VSVChwcmV2aW91c0NvbnRleHQpOwogICAgIFBsYXRmb3Jt
RGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgp
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFJlbW92
ZSBhZnRlciBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSBkcm9wcyBHcmFwaGljc0NvbnRleHQz
RCB1c2FnZS4KLSAgICAgICAgYXV0byBjb250ZXh0M0QgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3Jl
YXRlRm9yQ3VycmVudEdMQ29udGV4dCgpOwotICAgICAgICBtX3NoYWRlclByb2dyYW0gPSBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKCpjb250ZXh0M0QsIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjpUZXh0dXJlKTsKLSAgICB9CisgICAgbV9zaGFkZXJQcm9ncmFtID0gVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmNyZWF0ZShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bTo6VGV4dHVyZSk7CiAKICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mcmFtZWJ1ZmZlcik7
CiAgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9yZXN1bHRUZXh0dXJlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5jcHAKaW5kZXggNjRiMDJjMWMwNTVkYWFhMGQ0YjY1YjJkZmQxMDIxNjFiODVhNzBjZS4uNjZk
NjM0MmQ2MzE4NDFkYzk0YmQ2ZWRkOGZhYzRlNjRiYWVkYzY0OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5jcHAKQEAgLTE1OCw3ICsxNTgsNyBAQCBQbGF0Zm9ybTNET2JqZWN0IFRleHR1cmVNYXBwZXJH
TERhdGE6OmdldFN0YXRpY1ZCTyhHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0cgogUmVmPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyR0xEYXRhOjpnZXRTaGFkZXJQ
cm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zIG9wdGlvbnMpCiB7CiAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3NoYXJlZEdMRGF0YS0+bV9wcm9ncmFtcy5lbnN1cmUob3B0
aW9ucywKLSAgICAgICAgW3RoaXMsIG9wdGlvbnNdIHsgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpjcmVhdGUoUmVmPEdyYXBoaWNzQ29udGV4dDNEPihtX2NvbnRleHQpLCBvcHRp
b25zKTsgfSk7CisgICAgICAgIFt0aGlzLCBvcHRpb25zXSB7IHJldHVybiBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKG9wdGlvbnMpOyB9KTsKICAgICByZXR1cm4gKmFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKQEAgLTM1Miw5ICszNTIsOCBAQCBzdGF0aWMgZmxvYXQq
IGdhdXNzaWFuS2VybmVsKCkKICAgICByZXR1cm4ga2VybmVsOwogfQogCi1zdGF0aWMgdm9pZCBw
cmVwYXJlRmlsdGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYgcHJvZ3JhbSwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3MsIGNvbnN0IElu
dFNpemUmIHNpemUsIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlKQorc3RhdGljIHZvaWQgcHJlcGFy
ZUZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtJiBwcm9ncmFtLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwg
dW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRHVpbnQgY29udGVudFRleHR1
cmUpCiB7Ci0gICAgUmVmPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gcHJvZ3JhbS5jb250
ZXh0KCk7CiAgICAgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLnByb2dyYW1JRCgpKTsKIAog
ICAgIHN3aXRjaCAob3BlcmF0aW9uLnR5cGUoKSkgewpAQCAtNDc0LDcgKzQ3Myw3IEBAIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEZs
YWdzIGZsYWdzLCBjb25zdCBJCiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBw
cm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CiAKICAgICBpZiAoZmls
dGVyKQotICAgICAgICBwcmVwYXJlRmlsdGVyUHJvZ3JhbShwcm9ncmFtLmdldCgpLCAqZmlsdGVy
LmdldCgpLCBkYXRhKCkuZmlsdGVySW5mby0+cGFzcywgdGV4dHVyZVNpemUsIGZpbHRlckNvbnRl
bnRUZXh0dXJlSUQpOworICAgICAgICBwcmVwYXJlRmlsdGVyUHJvZ3JhbShtX2NvbnRleHQzRC5n
ZXQoKSwgcHJvZ3JhbS5nZXQoKSwgKmZpbHRlci5nZXQoKSwgZGF0YSgpLmZpbHRlckluZm8tPnBh
c3MsIHRleHR1cmVTaXplLCBmaWx0ZXJDb250ZW50VGV4dHVyZUlEKTsKIAogICAgIGRyYXdUZXh0
dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywgdGV4dHVy
ZVNpemUsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSk7CiB9CkBAIC02MjYs
NyArNjI1LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZChjb25zdCBCaXRt
YXBUZXh0dXJlJiBzYW1wbGVyLCBjb25zdCBCaXRtYXBUZXgKICAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6T3B0aW9ucyBvcHRpb25zID0gb3B0aW9uc0ZvckZpbHRlclR5cGUoZmlsdGVy
LnR5cGUoKSwgcGFzcyk7CiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9n
cmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CiAKLSAgICBwcmVwYXJlRmls
dGVyUHJvZ3JhbShwcm9ncmFtLmdldCgpLCBmaWx0ZXIsIHBhc3MsIHNhbXBsZXIuY29udGVudFNp
emUoKSwgY29udGVudFRleHR1cmUgPyBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wq
Pihjb250ZW50VGV4dHVyZSktPmlkKCkgOiAwKTsKKyAgICBwcmVwYXJlRmlsdGVyUHJvZ3JhbSht
X2NvbnRleHQzRC5nZXQoKSwgcHJvZ3JhbS5nZXQoKSwgZmlsdGVyLCBwYXNzLCBzYW1wbGVyLmNv
bnRlbnRTaXplKCksIGNvbnRlbnRUZXh0dXJlID8gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4
dHVyZUdMKj4oY29udGVudFRleHR1cmUpLT5pZCgpIDogMCk7CiAgICAgRmxvYXRSZWN0IHRhcmdl
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgc2FtcGxlci5jb250ZW50U2l6ZSgpKTsKICAgICBkcmF3
VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Qml0bWFwVGV4dHVyZUdMJj4oc2FtcGxlcikuaWQoKSwgMCwgSW50U2l6ZSgxLCAxKSwgdGFyZ2V0
UmVjdCwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgMSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtLmNwcAppbmRleCA2Y2I1OTJkMDQ2N2IxZjNiMjAzNDQ2NTllYmU5
ZjJlODczNmFjNTdmLi5hNzQ2Y2U4Y2U3ZTZmNTM2ZWFiY2RkNjJlY2E4MzgxYjZmMWQ4MDk2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAKQEAgLTUzLDcgKzUz
LDkgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBvc2l0aW5nTG9nRW5hYmxlZCgpCiBzdGF0aWMg
Y29uc3QgY2hhciogdmVydGV4VGVtcGxhdGUgPQogICAgIFRFWFRVUkVfU1BBQ0VfTUFUUklYX1BS
RUNJU0lPTl9ESVJFQ1RJVkUKICAgICBTVFJJTkdJRlkoCisjaWYgVVNFKE9QRU5HTF9FU18yKQog
ICAgICAgICBwcmVjaXNpb24gVGV4dHVyZVNwYWNlTWF0cml4UHJlY2lzaW9uIGZsb2F0OworI2Vu
ZGlmCiAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwogICAgICAgICB1bmlmb3JtIG1h
dDQgdV9tb2RlbFZpZXdNYXRyaXg7CiAgICAgICAgIHVuaWZvcm0gbWF0NCB1X3Byb2plY3Rpb25N
YXRyaXg7CkBAIC0xNDIsMTAgKzE0NCwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRU
ZW1wbGF0ZSA9CiAgICAgQkxVUl9DT05TVEFOVFMKICAgICBURVhUVVJFX1NQQUNFX01BVFJJWF9Q
UkVDSVNJT05fRElSRUNUSVZFCiAgICAgU1RSSU5HSUZZKAorI2lmIFVTRShPUEVOR0xfRVNfMikK
ICAgICAgICAgcHJlY2lzaW9uIFRleHR1cmVTcGFjZU1hdHJpeFByZWNpc2lvbiBmbG9hdDsKKyNl
bmRpZgogICAgICAgICB1bmlmb3JtIG1hdDQgdV90ZXh0dXJlU3BhY2VNYXRyaXg7CiAgICAgICAg
IHVuaWZvcm0gbWF0NCB1X3RleHR1cmVDb2xvclNwYWNlTWF0cml4OwotICAgICAgICBwcmVjaXNp
b24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSBTYW1wbGVyVHlwZSBzX3NhbXBsZXI7
CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfY29udGVudFRleHR1cmU7CiAgICAgICAgIHVu
aWZvcm0gZmxvYXQgdV9vcGFjaXR5OwpAQCAtMzA1LDcgKzMwOCw3IEBAIHN0YXRpYyBjb25zdCBj
aGFyKiBmcmFnbWVudFRlbXBsYXRlID0KICAgICAgICAgfQogICAgICk7CiAKLVJlZjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmNyZWF0ZShS
ZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYgY29udGV4dCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06Ok9wdGlvbnMgb3B0aW9ucykKK1JlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmNyZWF0ZShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bTo6T3B0aW9ucyBvcHRpb25zKQogewogI2RlZmluZSBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMo
QXBwbGllcikgXAogICAgIG9wdGlvbnNBcHBsaWVyQnVpbGRlci5hcHBlbmQoXApAQCAtMzM4LDM3
ICszNDEsNzIgQEAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKFJlZjxHcmFwaGljc0MKICAgICBmcmFnbWVudFNoYWRlckJ1
aWxkZXIuYXBwZW5kKG9wdGlvbnNBcHBsaWVyQnVpbGRlci50b1N0cmluZygpKTsKICAgICBmcmFn
bWVudFNoYWRlckJ1aWxkZXIuYXBwZW5kKGZyYWdtZW50VGVtcGxhdGUpOwogCi0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oV1RGTW92ZShjb250ZXh0
KSwgdmVydGV4U2hhZGVyQnVpbGRlci50b1N0cmluZygpLCBmcmFnbWVudFNoYWRlckJ1aWxkZXIu
dG9TdHJpbmcoKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKHZlcnRleFNoYWRlckJ1aWxkZXIudG9TdHJpbmcoKSwgZnJhZ21lbnRTaGFkZXJC
dWlsZGVyLnRvU3RyaW5nKCkpKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKFJlZjxHcmFwaGljc0NvbnRleHQzRD4mJiBjb250ZXh0
LCBjb25zdCBTdHJpbmcmIHZlcnRleCwgY29uc3QgU3RyaW5nJiBmcmFnbWVudCkKLSAgICA6IG1f
Y29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQorI2lmICFMT0dfRElTQUJMRUQKK3N0YXRpYyBDU3Ry
aW5nIGdldFNoYWRlckxvZyhHTHVpbnQgc2hhZGVyKQogewotICAgIG1fdmVydGV4U2hhZGVyID0g
bV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIp
OwotICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG1fdmVydGV4U2hhZGVyLCB2ZXJ0ZXgpOwor
ICAgIEdMaW50IGxvZ0xlbmd0aCA9IDA7CisgICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lO
Rk9fTE9HX0xFTkdUSCwgJmxvZ0xlbmd0aCk7CisgICAgaWYgKCFsb2dMZW5ndGgpCisgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICBtX2ZyYWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVT
aGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUik7Ci0gICAgbV9jb250ZXh0
LT5zaGFkZXJTb3VyY2UobV9mcmFnbWVudFNoYWRlciwgZnJhZ21lbnQpOworICAgIGF1dG8gaW5m
byA9IHN0ZDo6bWFrZV91bmlxdWU8R0xjaGFyW10+KGxvZ0xlbmd0aCk7CisgICAgR0xzaXplaSBp
bmZvTGVuZ3RoID0gMDsKKyAgICBnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBsb2dMZW5ndGgs
ICZpbmZvTGVuZ3RoLCBpbmZvLmdldCgpKTsKIAotICAgIG1faWQgPSBtX2NvbnRleHQtPmNyZWF0
ZVByb2dyYW0oKTsKLSAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIp
OwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBt
X2NvbnRleHQtPmF0dGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250
ZXh0LT5hdHRhY2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0
LT5saW5rUHJvZ3JhbShtX2lkKTsKKyAgICBzaXplX3Qgc3RyaW5nTGVuZ3RoID0gc3RkOjptYXgo
aW5mb0xlbmd0aCwgMCk7CisgICAgcmV0dXJuIHsgaW5mby5nZXQoKSwgc3RyaW5nTGVuZ3RoIH07
Cit9CiAKLSAgICBpZiAoIWNvbXBvc2l0aW5nTG9nRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47
CitzdGF0aWMgQ1N0cmluZyBnZXRQcm9ncmFtTG9nKEdMdWludCBwcm9ncmFtKQoreworICAgIEdM
aW50IGxvZ0xlbmd0aCA9IDA7CisgICAgZ2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19M
T0dfTEVOR1RILCAmbG9nTGVuZ3RoKTsKKyAgICBpZiAoIWxvZ0xlbmd0aCkKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PX0VSUk9SKQorICAgIGF1dG8gaW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8R0xjaGFy
W10+KGxvZ0xlbmd0aCk7CisgICAgR0xzaXplaSBpbmZvTGVuZ3RoID0gMDsKKyAgICBnbEdldFBy
b2dyYW1JbmZvTG9nKHByb2dyYW0sIGxvZ0xlbmd0aCwgJmluZm9MZW5ndGgsIGluZm8uZ2V0KCkp
OworCisgICAgc2l6ZV90IHN0cmluZ0xlbmd0aCA9IHN0ZDo6bWF4KGluZm9MZW5ndGgsIDApOwor
ICAgIHJldHVybiB7IGluZm8uZ2V0KCksIHN0cmluZ0xlbmd0aCB9OworfQorI2VuZGlmCisKK1Rl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb25z
dCBTdHJpbmcmIHZlcnRleCwgY29uc3QgU3RyaW5nJiBmcmFnbWVudCkKK3sKKyAgICBtX3ZlcnRl
eFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOworICAgIHsKKyAgICAg
ICAgQ1N0cmluZyB2ZXJ0ZXhDU3RyaW5nID0gdmVydGV4LnV0ZjgoKTsKKyAgICAgICAgY29uc3Qg
Y2hhciogZGF0YSA9IHZlcnRleENTdHJpbmcuZGF0YSgpOworICAgICAgICBpbnQgbGVuZ3RoID0g
dmVydGV4Q1N0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgZ2xTaGFkZXJTb3VyY2UobV92ZXJ0ZXhT
aGFkZXIsIDEsICZkYXRhLCAmbGVuZ3RoKTsKKyAgICB9CisgICAgZ2xDb21waWxlU2hhZGVyKG1f
dmVydGV4U2hhZGVyKTsKKworICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihH
TF9GUkFHTUVOVF9TSEFERVIpOworICAgIHsKKyAgICAgICAgQ1N0cmluZyBmcmFnbWVudENTdHJp
bmcgPSBmcmFnbWVudC51dGY4KCk7CisgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBmcmFnbWVu
dENTdHJpbmcuZGF0YSgpOworICAgICAgICBpbnQgbGVuZ3RoID0gZnJhZ21lbnRDU3RyaW5nLmxl
bmd0aCgpOworICAgICAgICBnbFNoYWRlclNvdXJjZShtX2ZyYWdtZW50U2hhZGVyLCAxLCAmZGF0
YSwgJmxlbmd0aCk7CisgICAgfQorICAgIGdsQ29tcGlsZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVy
KTsKKworICAgIG1faWQgPSBnbENyZWF0ZVByb2dyYW0oKTsKKyAgICBnbEF0dGFjaFNoYWRlciht
X2lkLCBtX3ZlcnRleFNoYWRlcik7CisgICAgZ2xBdHRhY2hTaGFkZXIobV9pZCwgbV9mcmFnbWVu
dFNoYWRlcik7CisgICAgZ2xMaW5rUHJvZ3JhbShtX2lkKTsKKworICAgIGlmICghY29tcG9zaXRp
bmdMb2dFbmFibGVkKCkgfHwgZ2xHZXRFcnJvcigpID09IEdMX05PX0VSUk9SKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBTdHJpbmcgbG9nID0gbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKG1f
dmVydGV4U2hhZGVyKTsKLSAgICBMT0coQ29tcG9zaXRpbmcsICJWZXJ0ZXggc2hhZGVyIGxvZzog
JXNcbiIsIGxvZy51dGY4KCkuZGF0YSgpKTsKLSAgICBsb2cgPSBtX2NvbnRleHQtPmdldFNoYWRl
ckluZm9Mb2cobV9mcmFnbWVudFNoYWRlcik7Ci0gICAgTE9HKENvbXBvc2l0aW5nLCAiRnJhZ21l
bnQgc2hhZGVyIGxvZzogJXNcbiIsIGxvZy51dGY4KCkuZGF0YSgpKTsKLSAgICBsb2cgPSBtX2Nv
bnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG1faWQpOwotICAgIExPRyhDb21wb3NpdGluZywgIlBy
b2dyYW0gbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOworICAgIExPRyhDb21wb3NpdGlu
ZywgIlZlcnRleCBzaGFkZXIgbG9nOiAlc1xuIiwgZ2V0U2hhZGVyTG9nKG1fdmVydGV4U2hhZGVy
KS5kYXRhKCkpOworICAgIExPRyhDb21wb3NpdGluZywgIkZyYWdtZW50IHNoYWRlciBsb2c6ICVz
XG4iLCBnZXRTaGFkZXJMb2cobV9mcmFnbWVudFNoYWRlcikuZGF0YSgpKTsKKyAgICBMT0coQ29t
cG9zaXRpbmcsICJQcm9ncmFtIGxvZzogJXNcbiIsIGdldFByb2dyYW1Mb2cobV9pZCkuZGF0YSgp
KTsKIH0KIAogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbSgpCkBAIC0zNzYsMjkgKzQxNCwzMCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkKICAgICBpZiAoIW1faWQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hh
ZGVyKTsKLSAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7Ci0gICAg
bV9jb250ZXh0LT5kZXRhY2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRlcik7Ci0gICAgbV9j
b250ZXh0LT5kZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5k
ZWxldGVQcm9ncmFtKG1faWQpOworICAgIGdsRGV0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hh
ZGVyKTsKKyAgICBnbERlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7CisgICAgZ2xEZXRhY2hT
aGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRlcik7CisgICAgZ2xEZWxldGVTaGFkZXIobV9mcmFn
bWVudFNoYWRlcik7CisgICAgZ2xEZWxldGVQcm9ncmFtKG1faWQpOwogfQogCi12b2lkIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzZXRNYXRyaXgoR0MzRHVpbnQgbG9jYXRpb24sIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpzZXRNYXRyaXgoR0x1aW50IGxvY2F0aW9uLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbWF0cml4KQogewogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpGbG9hdE1hdHJpeDQg
ZmxvYXRNYXRyaXg7CiAgICAgbWF0cml4LnRvQ29sdW1uTWFqb3JGbG9hdEFycmF5KGZsb2F0TWF0
cml4KTsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIDEsIGZhbHNl
LCBmbG9hdE1hdHJpeCk7CisgICAgZ2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCAxLCBmYWxz
ZSwgZmxvYXRNYXRyaXgpOwogfQogCi1HQzNEdWludCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bTo6Z2V0TG9jYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBWYXJpYWJsZVR5cGUgdHlw
ZSkKK0dMdWludCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0TG9jYXRpb24oY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lLCBWYXJpYWJsZVR5cGUgdHlwZSkKIHsKICAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fdmFyaWFibGVzLmVuc3VyZShuYW1lLAogICAgICAgICBbdGhpcywgJm5hbWUsIHR5
cGVdIHsKKyAgICAgICAgICAgIENTdHJpbmcgbmFtZUNTdHJpbmcgPSBuYW1lLnN0cmluZygpLnV0
ZjgoKTsKICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICAgICAgY2FzZSBVbmlm
b3JtVmFyaWFibGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0VW5pZm9y
bUxvY2F0aW9uKG1faWQsIG5hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiBnbEdldFVuaWZv
cm1Mb2NhdGlvbihtX2lkLCBuYW1lQ1N0cmluZy5kYXRhKCkpOwogICAgICAgICAgICAgY2FzZSBB
dHRyaWJWYXJpYWJsZToKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRy
aWJMb2NhdGlvbihtX2lkLCBuYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2xHZXRBdHRy
aWJMb2NhdGlvbihtX2lkLCBuYW1lQ1N0cmluZy5kYXRhKCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmgKaW5kZXggZGE1MjU2YjgzMDk0NzUw
OWI4MmQyNjhhYWMzM2UyOGE0ZWMyMjQ5OS4uOGRhMWU0MjgxOWUwZDE3NDc4N2IzN2ZhMGY1NmY0
MWYyMWYyNmNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmgKQEAg
LTIzLDcgKzIzLDcgQEAKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKIAotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMSGVhZGVycy5o
IgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTMzLDcgKzMzLDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2RlZmluZSBURVhNQVBfREVDTEFSRV9WQVJJQUJMRShB
Y2Nlc3NvciwgTmFtZSwgVHlwZSkgXAotICAgIEdDM0R1aW50IEFjY2Vzc29yIyNMb2NhdGlvbigp
IHsgXAorICAgIEdMdWludCBBY2Nlc3NvciMjTG9jYXRpb24oKSB7IFwKICAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmluZz4gbmFtZShOYW1lLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsgXAogICAgICAgICByZXR1cm4gZ2V0TG9jYXRpb24o
bmFtZS5nZXQoKSwgVHlwZSk7IFwKICAgICB9CkBAIC02NiwxMSArNjYsMTAgQEAgcHVibGljOgog
CiAgICAgdHlwZWRlZiB1bnNpZ25lZCBPcHRpb25zOwogCi0gICAgc3RhdGljIFJlZjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbT4gY3JlYXRlKFJlZjxHcmFwaGljc0NvbnRleHQzRD4mJiwgT3B0
aW9ucyk7CisgICAgc3RhdGljIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gY3JlYXRl
KE9wdGlvbnMpOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCk7CiAK
LSAgICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0K
LSAgICBHcmFwaGljc0NvbnRleHQzRCYgY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQor
ICAgIEdMdWludCBwcm9ncmFtSUQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAKICAgICBURVhN
QVBfREVDTEFSRV9BVFRSSUJVVEUodmVydGV4KQogCkBAIC05MCwyMCArODksMTkgQEAgcHVibGlj
OgogICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oc2hhZG93T2Zmc2V0KQogICAgIFRFWE1BUF9E
RUNMQVJFX1NBTVBMRVIoY29udGVudFRleHR1cmUpCiAKLSAgICB2b2lkIHNldE1hdHJpeChHQzNE
dWludCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2b2lkIHNldE1hdHJpeChH
THVpbnQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKIHByaXZhdGU6Ci0gICAgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0oUmVmPEdyYXBoaWNzQ29udGV4dDNEPiYmLCBjb25zdCBT
dHJpbmcmIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgU3RyaW5nJiBmcmFnbWVudFNoYWRlclNv
dXJjZSk7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29uc3QgU3RyaW5nJiB2ZXJ0
ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwogCi0g
ICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRleFNoYWRlcjsKLSAgICBQbGF0Zm9ybTNET2JqZWN0
IG1fZnJhZ21lbnRTaGFkZXI7CisgICAgR0x1aW50IG1fdmVydGV4U2hhZGVyOworICAgIEdMdWlu
dCBtX2ZyYWdtZW50U2hhZGVyOwogCiAgICAgZW51bSBWYXJpYWJsZVR5cGUgeyBVbmlmb3JtVmFy
aWFibGUsIEF0dHJpYlZhcmlhYmxlIH07Ci0gICAgR0MzRHVpbnQgZ2V0TG9jYXRpb24oY29uc3Qg
QXRvbWljU3RyaW5nJiwgVmFyaWFibGVUeXBlKTsKKyAgICBHTHVpbnQgZ2V0TG9jYXRpb24oY29u
c3QgQXRvbWljU3RyaW5nJiwgVmFyaWFibGVUeXBlKTsKIAotICAgIFJlZjxHcmFwaGljc0NvbnRl
eHQzRD4gbV9jb250ZXh0OwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9pZDsKLSAgICBIYXNoTWFw
PEF0b21pY1N0cmluZywgR0MzRHVpbnQ+IG1fdmFyaWFibGVzOworICAgIEdMdWludCBtX2lkOwor
ICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBHTHVpbnQ+IG1fdmFyaWFibGVzOwogfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>317917</attachid>
            <date>2017-08-10 23:30:11 -0700</date>
            <delta_ts>2017-08-10 23:30:11 -0700</delta_ts>
            <desc>ANGLE translation of TexMap shaders on OpenGL ES 2.0</desc>
            <filename>gles2-shaders.txt</filename>
            <type>text/plain</type>
            <size>24340</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">Y29tcGlsZVNoYWRlcigpIHZlcnRleDoKLS0tIGJlZ2luIG9yaWdpbmFsIHNoYWRlciBzb3VyY2Ug
LS0tCiNkZWZpbmUgRU5BQkxFX1RleHR1cmUKI2RlZmluZSBhcHBseVRleHR1cmVJZk5lZWRlZCBh
cHBseVRleHR1cmUKI2RlZmluZSBhcHBseVJlY3RJZk5lZWRlZCBub29wCiNkZWZpbmUgRU5BQkxF
X1NvbGlkQ29sb3IKI2RlZmluZSBhcHBseVNvbGlkQ29sb3JJZk5lZWRlZCBhcHBseVNvbGlkQ29s
b3IKI2RlZmluZSBFTkFCTEVfT3BhY2l0eQojZGVmaW5lIGFwcGx5T3BhY2l0eUlmTmVlZGVkIGFw
cGx5T3BhY2l0eQojZGVmaW5lIEVOQUJMRV9BbnRpYWxpYXNpbmcKI2RlZmluZSBhcHBseUFudGlh
bGlhc2luZ0lmTmVlZGVkIGFwcGx5QW50aWFsaWFzaW5nCiNkZWZpbmUgRU5BQkxFX0dyYXlzY2Fs
ZUZpbHRlcgojZGVmaW5lIGFwcGx5R3JheXNjYWxlRmlsdGVySWZOZWVkZWQgYXBwbHlHcmF5c2Nh
bGVGaWx0ZXIKI2RlZmluZSBFTkFCTEVfU2VwaWFGaWx0ZXIKI2RlZmluZSBhcHBseVNlcGlhRmls
dGVySWZOZWVkZWQgYXBwbHlTZXBpYUZpbHRlcgojZGVmaW5lIEVOQUJMRV9TYXR1cmF0ZUZpbHRl
cgojZGVmaW5lIGFwcGx5U2F0dXJhdGVGaWx0ZXJJZk5lZWRlZCBhcHBseVNhdHVyYXRlRmlsdGVy
CiNkZWZpbmUgRU5BQkxFX0h1ZVJvdGF0ZUZpbHRlcgojZGVmaW5lIGFwcGx5SHVlUm90YXRlRmls
dGVySWZOZWVkZWQgYXBwbHlIdWVSb3RhdGVGaWx0ZXIKI2RlZmluZSBFTkFCTEVfQnJpZ2h0bmVz
c0ZpbHRlcgojZGVmaW5lIGFwcGx5QnJpZ2h0bmVzc0ZpbHRlcklmTmVlZGVkIGFwcGx5QnJpZ2h0
bmVzc0ZpbHRlcgojZGVmaW5lIEVOQUJMRV9Db250cmFzdEZpbHRlcgojZGVmaW5lIGFwcGx5Q29u
dHJhc3RGaWx0ZXJJZk5lZWRlZCBhcHBseUNvbnRyYXN0RmlsdGVyCiNkZWZpbmUgRU5BQkxFX0lu
dmVydEZpbHRlcgojZGVmaW5lIGFwcGx5SW52ZXJ0RmlsdGVySWZOZWVkZWQgYXBwbHlJbnZlcnRG
aWx0ZXIKI2RlZmluZSBFTkFCTEVfT3BhY2l0eUZpbHRlcgojZGVmaW5lIGFwcGx5T3BhY2l0eUZp
bHRlcklmTmVlZGVkIGFwcGx5T3BhY2l0eUZpbHRlcgojZGVmaW5lIEVOQUJMRV9CbHVyRmlsdGVy
CiNkZWZpbmUgYXBwbHlCbHVyRmlsdGVySWZOZWVkZWQgYXBwbHlCbHVyRmlsdGVyCiNkZWZpbmUg
RU5BQkxFX0FscGhhQmx1cgojZGVmaW5lIGFwcGx5QWxwaGFCbHVySWZOZWVkZWQgYXBwbHlBbHBo
YUJsdXIKI2RlZmluZSBFTkFCTEVfQ29udGVudFRleHR1cmUKI2RlZmluZSBhcHBseUNvbnRlbnRU
ZXh0dXJlSWZOZWVkZWQgYXBwbHlDb250ZW50VGV4dHVyZQojZGVmaW5lIEVOQUJMRV9NYW51YWxS
ZXBlYXQKI2RlZmluZSBhcHBseU1hbnVhbFJlcGVhdElmTmVlZGVkIGFwcGx5TWFudWFsUmVwZWF0
CiNpZmRlZiBHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSAojZGVmaW5lIFRleHR1cmVTcGFjZU1h
dHJpeFByZWNpc2lvbiBoaWdocAojZWxzZQojZGVmaW5lIFRleHR1cmVTcGFjZU1hdHJpeFByZWNp
c2lvbiBtZWRpdW1wCiNlbmRpZgpwcmVjaXNpb24gVGV4dHVyZVNwYWNlTWF0cml4UHJlY2lzaW9u
IGZsb2F0OyBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsgdW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3
TWF0cml4OyB1bmlmb3JtIG1hdDQgdV9wcm9qZWN0aW9uTWF0cml4OyB1bmlmb3JtIG1hdDQgdV90
ZXh0dXJlU3BhY2VNYXRyaXg7IHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyB2YXJ5aW5nIHZlYzIg
dl90cmFuc2Zvcm1lZFRleENvb3JkOyB2YXJ5aW5nIGZsb2F0IHZfYW50aWFsaWFzOyB2b2lkIG5v
b3AoaW5vdXQgdmVjMiBkdW1teVBhcmFtZXRlcikgeyB9IHZlYzQgdG9WaWV3cG9ydFNwYWNlKHZl
YzIgcG9zKSB7IHJldHVybiB2ZWM0KHBvcywgMC4sIDEuKSAqIHVfbW9kZWxWaWV3TWF0cml4OyB9
IHZvaWQgYXBwbHlBbnRpYWxpYXNpbmcoaW5vdXQgdmVjMiBwb3NpdGlvbikgeyBjb25zdCB2ZWMy
IGNlbnRlciA9IHZlYzIoMC41LCAwLjUpOyBjb25zdCBmbG9hdCBhbnRpYWxpYXNJbmZsYXRpb25E
aXN0YW5jZSA9IDEuOyB2ZWMyIGNvbnRyb2xQb2ludCA9IGFfdmVydGV4Lnp3OyB2ZWM0IGNlbnRl
ckluVmlld3BvcnRDb29yZGluYXRlcyA9IHRvVmlld3BvcnRTcGFjZShjZW50ZXIpOyB2ZWM0IGNv
bnRyb2xQb2ludEluVmlld3BvcnRDb29yZGluYXRlcyA9IHRvVmlld3BvcnRTcGFjZShjb250cm9s
UG9pbnQpOyBmbG9hdCB2aWV3cG9ydFNwYWNlRGlzdGFuY2UgPSBkaXN0YW5jZShjZW50ZXJJblZp
ZXdwb3J0Q29vcmRpbmF0ZXMsIGNvbnRyb2xQb2ludEluVmlld3BvcnRDb29yZGluYXRlcyk7IGZs
b2F0IGluZmxhdGlvblJhdGlvID0gKHZpZXdwb3J0U3BhY2VEaXN0YW5jZSArIGFudGlhbGlhc0lu
ZmxhdGlvbkRpc3RhbmNlKSAvIHZpZXdwb3J0U3BhY2VEaXN0YW5jZTsgdl9hbnRpYWxpYXMgPSBk
aXN0YW5jZShjb250cm9sUG9pbnQsIHBvc2l0aW9uKSAqIDIuICogaW5mbGF0aW9uUmF0aW8gLyAo
aW5mbGF0aW9uUmF0aW8gLSAxLik7IHBvc2l0aW9uID0gY2VudGVyICsgKHBvc2l0aW9uIC0gY2Vu
dGVyKSAqIGluZmxhdGlvblJhdGlvOyB9IHZvaWQgbWFpbih2b2lkKSB7IHZlYzIgcG9zaXRpb24g
PSBhX3ZlcnRleC54eTsgYXBwbHlBbnRpYWxpYXNpbmdJZk5lZWRlZChwb3NpdGlvbik7IHZfdGV4
Q29vcmQgPSBwb3NpdGlvbjsgdmVjNCBjbGFtcGVkUG9zaXRpb24gPSBjbGFtcCh2ZWM0KHBvc2l0
aW9uLCAwLiwgMS4pLCAwLiwgMS4pOyB2X3RyYW5zZm9ybWVkVGV4Q29vcmQgPSAodV90ZXh0dXJl
U3BhY2VNYXRyaXggKiBjbGFtcGVkUG9zaXRpb24pLnh5OyBnbF9Qb3NpdGlvbiA9IHVfcHJvamVj
dGlvbk1hdHJpeCAqIHVfbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsg
fQotLS0gZW5kIG9yaWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tCi0tLSBiZWdpbiB0cmFuc2xhdGVk
IHNoYWRlciBzb3VyY2UgLS0tCmF0dHJpYnV0ZSBoaWdocCB2ZWM0IHdlYmdsXzUzZTAxOWQ0MDAw
MDAwMDE7CnVuaWZvcm0gaGlnaHAgbWF0NCB3ZWJnbF82MjEzZDllMDAwMDAwMDAyOwp1bmlmb3Jt
IGhpZ2hwIG1hdDQgd2ViZ2xfYjc4NDkxZGMwMDAwMDAwMzsKdW5pZm9ybSBoaWdocCBtYXQ0IHdl
YmdsX2YwZThkM2U4MDAwMDAwMDQ7CnZhcnlpbmcgaGlnaHAgdmVjMiB3ZWJnbF82ZGE0MjcxODAw
MDAwMDA1Owp2YXJ5aW5nIGhpZ2hwIHZlYzIgd2ViZ2xfMTFjNDc3MjIwMDAwMDAwNjsKdmFyeWlu
ZyBoaWdocCBmbG9hdCB3ZWJnbF9mYTQ3N2QxMzAwMDAwMDA3OwpoaWdocCB2ZWM0IHdlYmdsXzhh
MDY0NTA2MDAwMDAwMDgoaW4gaGlnaHAgdmVjMiB3ZWJnbF8xYmNjNDZmNjAwMDAwMDA5KXsKcmV0
dXJuICh2ZWM0KHdlYmdsXzFiY2M0NmY2MDAwMDAwMDksIDAuMCwgMS4wKSAqIHdlYmdsXzYyMTNk
OWUwMDAwMDAwMDIpOwp9CnZvaWQgd2ViZ2xfZTI4ODdiMmQwMDAwMDAwYShpbm91dCBoaWdocCB2
ZWMyIHdlYmdsX2M4YWQ2MTNmMDAwMDAwMGIpewpoaWdocCB2ZWMyIHdlYmdsX2UyMjQwMGU0MDAw
MDAwMGMgPSB3ZWJnbF81M2UwMTlkNDAwMDAwMDAxLnp3OwpoaWdocCB2ZWM0IHdlYmdsXzg3OTc4
ZTVhMDAwMDAwMGQgPSB3ZWJnbF84YTA2NDUwNjAwMDAwMDA4KHZlYzIoMC41LCAwLjUpKTsKaGln
aHAgdmVjNCB3ZWJnbF84MTc5MmEwOTAwMDAwMDBlID0gd2ViZ2xfOGEwNjQ1MDYwMDAwMDAwOCh3
ZWJnbF9lMjI0MDBlNDAwMDAwMDBjKTsKaGlnaHAgZmxvYXQgd2ViZ2xfNjUyYmVkZDkwMDAwMDAw
ZiA9IGRpc3RhbmNlKHdlYmdsXzg3OTc4ZTVhMDAwMDAwMGQsIHdlYmdsXzgxNzkyYTA5MDAwMDAw
MGUpOwpoaWdocCBmbG9hdCB3ZWJnbF9kMmY1ODg0ZDAwMDAwMDEwID0gKCh3ZWJnbF82NTJiZWRk
OTAwMDAwMDBmICsgMS4wKSAvIHdlYmdsXzY1MmJlZGQ5MDAwMDAwMGYpOwood2ViZ2xfZmE0Nzdk
MTMwMDAwMDAwNyA9ICgoKGRpc3RhbmNlKHdlYmdsX2UyMjQwMGU0MDAwMDAwMGMsIHdlYmdsX2M4
YWQ2MTNmMDAwMDAwMGIpICogMi4wKSAqIHdlYmdsX2QyZjU4ODRkMDAwMDAwMTApIC8gKHdlYmds
X2QyZjU4ODRkMDAwMDAwMTAgLSAxLjApKSk7Cih3ZWJnbF9jOGFkNjEzZjAwMDAwMDBiID0gKHZl
YzIoMC41LCAwLjUpICsgKCh3ZWJnbF9jOGFkNjEzZjAwMDAwMDBiIC0gdmVjMigwLjUsIDAuNSkp
ICogd2ViZ2xfZDJmNTg4NGQwMDAwMDAxMCkpKTsKfQp2b2lkIG1haW4oKXsKKGdsX1Bvc2l0aW9u
ID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApKTsKKHdlYmdsX2ZhNDc3ZDEzMDAwMDAwMDcgPSAw
LjApOwood2ViZ2xfMTFjNDc3MjIwMDAwMDAwNiA9IHZlYzIoMC4wLCAwLjApKTsKKHdlYmdsXzZk
YTQyNzE4MDAwMDAwMDUgPSB2ZWMyKDAuMCwgMC4wKSk7CmhpZ2hwIHZlYzIgd2ViZ2xfYzhhZDYx
M2YwMDAwMDAwYiA9IHdlYmdsXzUzZTAxOWQ0MDAwMDAwMDEueHk7CndlYmdsX2UyODg3YjJkMDAw
MDAwMGEod2ViZ2xfYzhhZDYxM2YwMDAwMDAwYik7Cih3ZWJnbF82ZGE0MjcxODAwMDAwMDA1ID0g
d2ViZ2xfYzhhZDYxM2YwMDAwMDAwYik7CmhpZ2hwIHZlYzQgd2ViZ2xfZWFmNzE1N2MwMDAwMDAx
MSA9IGNsYW1wKHZlYzQod2ViZ2xfYzhhZDYxM2YwMDAwMDAwYiwgMC4wLCAxLjApLCAwLjAsIDEu
MCk7Cih3ZWJnbF8xMWM0NzcyMjAwMDAwMDA2ID0gKHdlYmdsX2YwZThkM2U4MDAwMDAwMDQgKiB3
ZWJnbF9lYWY3MTU3YzAwMDAwMDExKS54eSk7CihnbF9Qb3NpdGlvbiA9ICgod2ViZ2xfYjc4NDkx
ZGMwMDAwMDAwMyAqIHdlYmdsXzYyMTNkOWUwMDAwMDAwMDIpICogdmVjNCh3ZWJnbF9jOGFkNjEz
ZjAwMDAwMDBiLCAwLjAsIDEuMCkpKTsKfQoKLS0tIGVuZCB0cmFuc2xhdGVkIHNoYWRlciBzb3Vy
Y2UgLS0tCmNvbXBpbGVTaGFkZXIoKSBmcmFnbWVudDoKLS0tIGJlZ2luIG9yaWdpbmFsIHNoYWRl
ciBzb3VyY2UgLS0tCiNkZWZpbmUgRU5BQkxFX1RleHR1cmUKI2RlZmluZSBhcHBseVRleHR1cmVJ
Zk5lZWRlZCBhcHBseVRleHR1cmUKI2RlZmluZSBhcHBseVJlY3RJZk5lZWRlZCBub29wCiNkZWZp
bmUgRU5BQkxFX1NvbGlkQ29sb3IKI2RlZmluZSBhcHBseVNvbGlkQ29sb3JJZk5lZWRlZCBhcHBs
eVNvbGlkQ29sb3IKI2RlZmluZSBFTkFCTEVfT3BhY2l0eQojZGVmaW5lIGFwcGx5T3BhY2l0eUlm
TmVlZGVkIGFwcGx5T3BhY2l0eQojZGVmaW5lIEVOQUJMRV9BbnRpYWxpYXNpbmcKI2RlZmluZSBh
cHBseUFudGlhbGlhc2luZ0lmTmVlZGVkIGFwcGx5QW50aWFsaWFzaW5nCiNkZWZpbmUgRU5BQkxF
X0dyYXlzY2FsZUZpbHRlcgojZGVmaW5lIGFwcGx5R3JheXNjYWxlRmlsdGVySWZOZWVkZWQgYXBw
bHlHcmF5c2NhbGVGaWx0ZXIKI2RlZmluZSBFTkFCTEVfU2VwaWFGaWx0ZXIKI2RlZmluZSBhcHBs
eVNlcGlhRmlsdGVySWZOZWVkZWQgYXBwbHlTZXBpYUZpbHRlcgojZGVmaW5lIEVOQUJMRV9TYXR1
cmF0ZUZpbHRlcgojZGVmaW5lIGFwcGx5U2F0dXJhdGVGaWx0ZXJJZk5lZWRlZCBhcHBseVNhdHVy
YXRlRmlsdGVyCiNkZWZpbmUgRU5BQkxFX0h1ZVJvdGF0ZUZpbHRlcgojZGVmaW5lIGFwcGx5SHVl
Um90YXRlRmlsdGVySWZOZWVkZWQgYXBwbHlIdWVSb3RhdGVGaWx0ZXIKI2RlZmluZSBFTkFCTEVf
QnJpZ2h0bmVzc0ZpbHRlcgojZGVmaW5lIGFwcGx5QnJpZ2h0bmVzc0ZpbHRlcklmTmVlZGVkIGFw
cGx5QnJpZ2h0bmVzc0ZpbHRlcgojZGVmaW5lIEVOQUJMRV9Db250cmFzdEZpbHRlcgojZGVmaW5l
IGFwcGx5Q29udHJhc3RGaWx0ZXJJZk5lZWRlZCBhcHBseUNvbnRyYXN0RmlsdGVyCiNkZWZpbmUg
RU5BQkxFX0ludmVydEZpbHRlcgojZGVmaW5lIGFwcGx5SW52ZXJ0RmlsdGVySWZOZWVkZWQgYXBw
bHlJbnZlcnRGaWx0ZXIKI2RlZmluZSBFTkFCTEVfT3BhY2l0eUZpbHRlcgojZGVmaW5lIGFwcGx5
T3BhY2l0eUZpbHRlcklmTmVlZGVkIGFwcGx5T3BhY2l0eUZpbHRlcgojZGVmaW5lIEVOQUJMRV9C
bHVyRmlsdGVyCiNkZWZpbmUgYXBwbHlCbHVyRmlsdGVySWZOZWVkZWQgYXBwbHlCbHVyRmlsdGVy
CiNkZWZpbmUgRU5BQkxFX0FscGhhQmx1cgojZGVmaW5lIGFwcGx5QWxwaGFCbHVySWZOZWVkZWQg
YXBwbHlBbHBoYUJsdXIKI2RlZmluZSBFTkFCTEVfQ29udGVudFRleHR1cmUKI2RlZmluZSBhcHBs
eUNvbnRlbnRUZXh0dXJlSWZOZWVkZWQgYXBwbHlDb250ZW50VGV4dHVyZQojZGVmaW5lIEVOQUJM
RV9NYW51YWxSZXBlYXQKI2RlZmluZSBhcHBseU1hbnVhbFJlcGVhdElmTmVlZGVkIGFwcGx5TWFu
dWFsUmVwZWF0CiNpZmRlZiBFTkFCTEVfUmVjdAojZGVmaW5lIFNhbXBsZXJUeXBlIHNhbXBsZXIy
RFJlY3QKI2RlZmluZSBTYW1wbGVyRnVuY3Rpb24gdGV4dHVyZTJEUmVjdAojZWxzZQojZGVmaW5l
IFNhbXBsZXJUeXBlIHNhbXBsZXIyRAojZGVmaW5lIFNhbXBsZXJGdW5jdGlvbiB0ZXh0dXJlMkQK
I2VuZGlmCiNpZiBkZWZpbmVkKEVOQUJMRV9BbnRpYWxpYXNpbmcpICYmIGRlZmluZWQoRU5BQkxF
X1RleHR1cmUpCiNkZWZpbmUgdHJhbnNmb3JtVGV4Q29vcmQgZnJhZ21lbnRUcmFuc2Zvcm1UZXhD
b29yZAojZWxzZQojZGVmaW5lIHRyYW5zZm9ybVRleENvb3JkIHZlcnRleFRyYW5zZm9ybVRleENv
b3JkCiNlbmRpZgojZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIIDExCiNkZWZpbmUg
R0FVU1NJQU5fS0VSTkVMX1NURVAgMC4yCiNpZmRlZiBHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElH
SAojZGVmaW5lIFRleHR1cmVTcGFjZU1hdHJpeFByZWNpc2lvbiBoaWdocAojZWxzZQojZGVmaW5l
IFRleHR1cmVTcGFjZU1hdHJpeFByZWNpc2lvbiBtZWRpdW1wCiNlbmRpZgpwcmVjaXNpb24gVGV4
dHVyZVNwYWNlTWF0cml4UHJlY2lzaW9uIGZsb2F0OyB1bmlmb3JtIG1hdDQgdV90ZXh0dXJlU3Bh
Y2VNYXRyaXg7IHVuaWZvcm0gbWF0NCB1X3RleHR1cmVDb2xvclNwYWNlTWF0cml4OyBwcmVjaXNp
b24gbWVkaXVtcCBmbG9hdDsgdW5pZm9ybSBTYW1wbGVyVHlwZSBzX3NhbXBsZXI7IHVuaWZvcm0g
c2FtcGxlcjJEIHNfY29udGVudFRleHR1cmU7IHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OyB2YXJ5
aW5nIGZsb2F0IHZfYW50aWFsaWFzOyB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgdmFyeWluZyB2
ZWMyIHZfdHJhbnNmb3JtZWRUZXhDb29yZDsgdW5pZm9ybSBmbG9hdCB1X2ZpbHRlckFtb3VudDsg
dW5pZm9ybSB2ZWMyIHVfYmx1clJhZGl1czsgdW5pZm9ybSB2ZWMyIHVfc2hhZG93T2Zmc2V0OyB1
bmlmb3JtIHZlYzQgdV9jb2xvcjsgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNT
SUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsgdm9pZCBub29wKGlub3V0IHZlYzQgZHVtbXlQYXJhbWV0
ZXIpIHsgfSB2b2lkIG5vb3AoaW5vdXQgdmVjNCBkdW1teVBhcmFtZXRlciwgdmVjMiB0ZXhDb29y
ZCkgeyB9IHZvaWQgbm9vcChpbm91dCB2ZWMyIGR1bW15UGFyYW1ldGVyKSB7IH0gZmxvYXQgYW50
aWFsaWFzKCkgeyByZXR1cm4gc21vb3Roc3RlcCgwLiwgMS4sIHZfYW50aWFsaWFzKTsgfSB2ZWMy
IGZyYWdtZW50VHJhbnNmb3JtVGV4Q29vcmQoKSB7IHZlYzQgY2xhbXBlZFBvc2l0aW9uID0gY2xh
bXAodmVjNCh2X3RleENvb3JkLCAwLiwgMS4pLCAwLiwgMS4pOyByZXR1cm4gKHVfdGV4dHVyZVNw
YWNlTWF0cml4ICogY2xhbXBlZFBvc2l0aW9uKS54eTsgfSB2ZWMyIHZlcnRleFRyYW5zZm9ybVRl
eENvb3JkKCkgeyByZXR1cm4gdl90cmFuc2Zvcm1lZFRleENvb3JkOyB9IHZvaWQgYXBwbHlNYW51
YWxSZXBlYXQoaW5vdXQgdmVjMiBwb3MpIHsgcG9zID0gZnJhY3QocG9zKTsgfSB2b2lkIGFwcGx5
VGV4dHVyZShpbm91dCB2ZWM0IGNvbG9yLCB2ZWMyIHRleENvb3JkKSB7IGNvbG9yID0gdV90ZXh0
dXJlQ29sb3JTcGFjZU1hdHJpeCAqIFNhbXBsZXJGdW5jdGlvbihzX3NhbXBsZXIsIHRleENvb3Jk
KTsgfSB2b2lkIGFwcGx5T3BhY2l0eShpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IHVfb3Bh
Y2l0eTsgfSB2b2lkIGFwcGx5QW50aWFsaWFzaW5nKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3Ig
Kj0gYW50aWFsaWFzKCk7IH0gdm9pZCBhcHBseUdyYXlzY2FsZUZpbHRlcihpbm91dCB2ZWM0IGNv
bG9yKSB7IGZsb2F0IGFtb3VudCA9IDEuMCAtIHVfZmlsdGVyQW1vdW50OyBjb2xvciA9IHZlYzQo
KDAuMjEyNiArIDAuNzg3NCAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1MiAq
IGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBjb2xvci5i
LCAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyICsgMC4yODQ4
ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9y
LmIsICgwLjIxMjYgLSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAwLjcx
NTIgKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIgKyAwLjkyNzggKiBhbW91bnQpICogY29s
b3IuYiwgY29sb3IuYSk7IH0gdm9pZCBhcHBseVNlcGlhRmlsdGVyKGlub3V0IHZlYzQgY29sb3Ip
IHsgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9maWx0ZXJBbW91bnQ7IGNvbG9yID0gdmVjNCgoMC4z
OTMgKyAwLjYwNyAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzY5IC0gMC43NjkgKiBhbW91bnQp
ICogY29sb3IuZyArICgwLjE4OSAtIDAuMTg5ICogYW1vdW50KSAqIGNvbG9yLmIsICgwLjM0OSAt
IDAuMzQ5ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC42ODYgKyAwLjMxNCAqIGFtb3VudCkgKiBj
b2xvci5nICsgKDAuMTY4IC0gMC4xNjggKiBhbW91bnQpICogY29sb3IuYiwgKDAuMjcyIC0gMC4y
NzIgKiBhbW91bnQpICogY29sb3IuciArICgwLjUzNCAtIDAuNTM0ICogYW1vdW50KSAqIGNvbG9y
LmcgKyAoMC4xMzEgKyAwLjg2OSAqIGFtb3VudCkgKiBjb2xvci5iLCBjb2xvci5hKTsgfSB2b2lk
IGFwcGx5U2F0dXJhdGVGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciA9IHZlYzQoKDAu
MjEzICsgMC43ODcgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUg
KiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2ZpbHRlckFt
b3VudCkgKiBjb2xvci5iLCAoMC4yMTMgLSAwLjIxMyAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9y
LnIgKyAoMC43MTUgKyAwLjI4NSAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIg
LSAwLjA3MiAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmIsICgwLjIxMyAtIDAuMjEzICogdV9m
aWx0ZXJBbW91bnQpICogY29sb3IuciArICgwLjcxNSAtIDAuNzE1ICogdV9maWx0ZXJBbW91bnQp
ICogY29sb3IuZyArICgwLjA3MiArIDAuOTI4ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuYiwg
Y29sb3IuYSk7IH0gdm9pZCBhcHBseUh1ZVJvdGF0ZUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKSB7
IGZsb2F0IHBpID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjsgZmxvYXQgYyA9IGNvcyh1X2ZpbHRl
ckFtb3VudCAqIHBpIC8gMTgwLjApOyBmbG9hdCBzID0gc2luKHVfZmlsdGVyQW1vdW50ICogcGkg
LyAxODAuMCk7IGNvbG9yID0gdmVjNChjb2xvci5yICogKDAuMjEzICsgYyAqIDAuNzg3IC0gcyAq
IDAuMjEzKSArIGNvbG9yLmcgKiAoMC43MTUgLSBjICogMC43MTUgLSBzICogMC43MTUpICsgY29s
b3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3MiArIHMgKiAwLjkyOCksIGNvbG9yLnIgKiAoMC4yMTMg
LSBjICogMC4yMTMgKyBzICogMC4xNDMpICsgY29sb3IuZyAqICgwLjcxNSArIGMgKiAwLjI4NSAr
IHMgKiAwLjE0MCkgKyBjb2xvci5iICogKDAuMDcyIC0gYyAqIDAuMDcyIC0gcyAqIDAuMjgzKSwg
Y29sb3IuciAqICgwLjIxMyAtIGMgKiAwLjIxMyAtIHMgKiAwLjc4NykgKyBjb2xvci5nICogKDAu
NzE1IC0gYyAqIDAuNzE1ICsgcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgKyBjICogMC45
MjggKyBzICogMC4wNzIpLCBjb2xvci5hKTsgfSBmbG9hdCBpbnZlcnQoZmxvYXQgbikgeyByZXR1
cm4gKDEuMCAtIG4pICogdV9maWx0ZXJBbW91bnQgKyBuICogKDEuMCAtIHVfZmlsdGVyQW1vdW50
KTsgfSB2b2lkIGFwcGx5SW52ZXJ0RmlsdGVyKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgPSB2
ZWM0KGludmVydChjb2xvci5yKSwgaW52ZXJ0KGNvbG9yLmcpLCBpbnZlcnQoY29sb3IuYiksIGNv
bG9yLmEpOyB9IHZvaWQgYXBwbHlCcmlnaHRuZXNzRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpIHsg
Y29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIHVfZmlsdGVyQW1vdW50LCBjb2xvci5hKTsgfSBmbG9h
dCBjb250cmFzdChmbG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1X2ZpbHRlckFtb3VudCAr
IDAuNTsgfSB2b2lkIGFwcGx5Q29udHJhc3RGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xv
ciA9IHZlYzQoY29udHJhc3QoY29sb3IuciksIGNvbnRyYXN0KGNvbG9yLmcpLCBjb250cmFzdChj
b2xvci5iKSwgY29sb3IuYSk7IH0gdm9pZCBhcHBseU9wYWNpdHlGaWx0ZXIoaW5vdXQgdmVjNCBj
b2xvcikgeyBjb2xvciA9IHZlYzQoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSAq
IHVfZmlsdGVyQW1vdW50KTsgfSB2ZWM0IHNhbXBsZUNvbG9yQXRSYWRpdXMoZmxvYXQgcmFkaXVz
LCB2ZWMyIHRleENvb3JkKSB7IHZlYzIgY29vcmQgPSB0ZXhDb29yZCArIHJhZGl1cyAqIHVfYmx1
clJhZGl1czsgcmV0dXJuIFNhbXBsZXJGdW5jdGlvbihzX3NhbXBsZXIsIGNvb3JkKSAqIGZsb2F0
KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkg
PCAxLik7IH0gZmxvYXQgc2FtcGxlQWxwaGFBdFJhZGl1cyhmbG9hdCByYWRpdXMsIHZlYzIgdGV4
Q29vcmQpIHsgdmVjMiBjb29yZCA9IHRleENvb3JkIC0gdV9zaGFkb3dPZmZzZXQgKyByYWRpdXMg
KiB1X2JsdXJSYWRpdXM7IHJldHVybiBTYW1wbGVyRnVuY3Rpb24oc19zYW1wbGVyLCBjb29yZCku
YSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYm
IGNvb3JkLnkgPCAxLik7IH0gdm9pZCBhcHBseUJsdXJGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvciwg
dmVjMiB0ZXhDb29yZCkgeyB2ZWM0IHRvdGFsID0gc2FtcGxlQ29sb3JBdFJhZGl1cygwLiwgdGV4
Q29vcmQpICogdV9nYXVzc2lhbktlcm5lbFswXTsgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lB
Tl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7IHRvdGFsICs9IHNhbXBsZUNvbG9yQXRSYWRpdXMo
ZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCwgdGV4Q29vcmQpICogdV9nYXVzc2lhbktl
cm5lbFtpXTsgdG90YWwgKz0gc2FtcGxlQ29sb3JBdFJhZGl1cyhmbG9hdCgtMSAqIGkpICogR0FV
U1NJQU5fS0VSTkVMX1NURVAsIHRleENvb3JkKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07IH0gY29s
b3IgPSB0b3RhbDsgfSB2b2lkIGFwcGx5QWxwaGFCbHVyKGlub3V0IHZlYzQgY29sb3IsIHZlYzIg
dGV4Q29vcmQpIHsgZmxvYXQgdG90YWwgPSBzYW1wbGVBbHBoYUF0UmFkaXVzKDAuLCB0ZXhDb29y
ZCkgKiB1X2dhdXNzaWFuS2VybmVsWzBdOyBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tF
Uk5FTF9IQUxGX1dJRFRIOyBpKyspIHsgdG90YWwgKz0gc2FtcGxlQWxwaGFBdFJhZGl1cyhmbG9h
dChpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQLCB0ZXhDb29yZCkgKiB1X2dhdXNzaWFuS2VybmVs
W2ldOyB0b3RhbCArPSBzYW1wbGVBbHBoYUF0UmFkaXVzKGZsb2F0KC0xICogaSkgKiBHQVVTU0lB
Tl9LRVJORUxfU1RFUCwgdGV4Q29vcmQpICogdV9nYXVzc2lhbktlcm5lbFtpXTsgfSBjb2xvciAq
PSB0b3RhbDsgfSB2ZWM0IHNvdXJjZU92ZXIodmVjNCBzcmMsIHZlYzQgZHN0KSB7IHJldHVybiBz
cmMgKyBkc3QgKiAoMS4gLSBkc3QuYSk7IH0gdm9pZCBhcHBseUNvbnRlbnRUZXh0dXJlKGlub3V0
IHZlYzQgY29sb3IsIHZlYzIgdGV4Q29vcmQpIHsgdmVjNCBjb250ZW50Q29sb3IgPSB0ZXh0dXJl
MkQoc19jb250ZW50VGV4dHVyZSwgdGV4Q29vcmQpOyBjb2xvciA9IHNvdXJjZU92ZXIoY29udGVu
dENvbG9yLCBjb2xvcik7IH0gdm9pZCBhcHBseVNvbGlkQ29sb3IoaW5vdXQgdmVjNCBjb2xvcikg
eyBjb2xvciAqPSB1X2NvbG9yOyB9IHZvaWQgbWFpbih2b2lkKSB7IHZlYzQgY29sb3IgPSB2ZWM0
KDEuLCAxLiwgMS4sIDEuKTsgdmVjMiB0ZXhDb29yZCA9IHRyYW5zZm9ybVRleENvb3JkKCk7IGFw
cGx5TWFudWFsUmVwZWF0SWZOZWVkZWQodGV4Q29vcmQpOyBhcHBseVRleHR1cmVJZk5lZWRlZChj
b2xvciwgdGV4Q29vcmQpOyBhcHBseVNvbGlkQ29sb3JJZk5lZWRlZChjb2xvcik7IGFwcGx5QW50
aWFsaWFzaW5nSWZOZWVkZWQoY29sb3IpOyBhcHBseU9wYWNpdHlJZk5lZWRlZChjb2xvcik7IGFw
cGx5R3JheXNjYWxlRmlsdGVySWZOZWVkZWQoY29sb3IpOyBhcHBseVNlcGlhRmlsdGVySWZOZWVk
ZWQoY29sb3IpOyBhcHBseVNhdHVyYXRlRmlsdGVySWZOZWVkZWQoY29sb3IpOyBhcHBseUh1ZVJv
dGF0ZUZpbHRlcklmTmVlZGVkKGNvbG9yKTsgYXBwbHlJbnZlcnRGaWx0ZXJJZk5lZWRlZChjb2xv
cik7IGFwcGx5QnJpZ2h0bmVzc0ZpbHRlcklmTmVlZGVkKGNvbG9yKTsgYXBwbHlDb250cmFzdEZp
bHRlcklmTmVlZGVkKGNvbG9yKTsgYXBwbHlPcGFjaXR5RmlsdGVySWZOZWVkZWQoY29sb3IpOyBh
cHBseUJsdXJGaWx0ZXJJZk5lZWRlZChjb2xvciwgdGV4Q29vcmQpOyBhcHBseUFscGhhQmx1cklm
TmVlZGVkKGNvbG9yLCB0ZXhDb29yZCk7IGFwcGx5Q29udGVudFRleHR1cmVJZk5lZWRlZChjb2xv
ciwgdGV4Q29vcmQpOyBnbF9GcmFnQ29sb3IgPSBjb2xvcjsgfQotLS0gZW5kIG9yaWdpbmFsIHNo
YWRlciBzb3VyY2UgLS0tCi0tLSBiZWdpbiB0cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0tCnVu
aWZvcm0gaGlnaHAgbWF0NCB3ZWJnbF9mMGU4ZDNlODAwMDAwMDA0Owp1bmlmb3JtIGhpZ2hwIG1h
dDQgd2ViZ2xfMTAzNjZlMWYwMDAwMDAxMjsKdW5pZm9ybSBsb3dwIHNhbXBsZXIyRCB3ZWJnbF8z
NzQ4MTk3YzAwMDAwMDEzOwp1bmlmb3JtIGxvd3Agc2FtcGxlcjJEIHdlYmdsXzJjNWU2Mzg2MDAw
MDAwMTQ7CnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB3ZWJnbF8zNjI3NTJmNzAwMDAwMDE1Owp2YXJ5
aW5nIG1lZGl1bXAgZmxvYXQgd2ViZ2xfZmE0NzdkMTMwMDAwMDAwNzsKdmFyeWluZyBtZWRpdW1w
IHZlYzIgd2ViZ2xfNmRhNDI3MTgwMDAwMDAwNTsKdmFyeWluZyBtZWRpdW1wIHZlYzIgd2ViZ2xf
MTFjNDc3MjIwMDAwMDAwNjsKdW5pZm9ybSBtZWRpdW1wIGZsb2F0IHdlYmdsX2YzY2YyYjQxMDAw
MDAwMTY7CnVuaWZvcm0gbWVkaXVtcCB2ZWMyIHdlYmdsXzI0ZWE0ZDM3MDAwMDAwMTc7CnVuaWZv
cm0gbWVkaXVtcCB2ZWMyIHdlYmdsX2U2MmI5MDk4MDAwMDAwMTg7CnVuaWZvcm0gbWVkaXVtcCB2
ZWM0IHdlYmdsXzYxN2VjZjUyMDAwMDAwMTk7CnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB3ZWJnbF9k
MTU0ZGY5MTAwMDAwMDFhWzExXTsKbWVkaXVtcCBmbG9hdCB3ZWJnbF83MjZlYWE3MTAwMDAwMDFi
KCl7CnJldHVybiBzbW9vdGhzdGVwKDAuMCwgMS4wLCB3ZWJnbF9mYTQ3N2QxMzAwMDAwMDA3KTsK
fQptZWRpdW1wIHZlYzIgd2ViZ2xfOWVhZDAwYzEwMDAwMDAxYygpewptZWRpdW1wIHZlYzQgd2Vi
Z2xfZWFmNzE1N2MwMDAwMDAxMSA9IGNsYW1wKHZlYzQod2ViZ2xfNmRhNDI3MTgwMDAwMDAwNSwg
MC4wLCAxLjApLCAwLjAsIDEuMCk7CnJldHVybiAod2ViZ2xfZjBlOGQzZTgwMDAwMDAwNCAqIHdl
YmdsX2VhZjcxNTdjMDAwMDAwMTEpLnh5Owp9CnZvaWQgd2ViZ2xfOWI4MTFjZWIwMDAwMDAxZChp
bm91dCBtZWRpdW1wIHZlYzIgd2ViZ2xfMWJjYzQ2ZjYwMDAwMDAwOSl7Cih3ZWJnbF8xYmNjNDZm
NjAwMDAwMDA5ID0gZnJhY3Qod2ViZ2xfMWJjYzQ2ZjYwMDAwMDAwOSkpOwp9CnZvaWQgd2ViZ2xf
NGU0MjRmZGEwMDAwMDAxZShpbm91dCBtZWRpdW1wIHZlYzQgd2ViZ2xfYzUyOWJiNTEwMDAwMDAx
ZiwgaW4gbWVkaXVtcCB2ZWMyIHdlYmdsXzRhMDAyZGI5MDAwMDAwMjApewood2ViZ2xfYzUyOWJi
NTEwMDAwMDAxZiA9ICh3ZWJnbF8xMDM2NmUxZjAwMDAwMDEyICogdGV4dHVyZTJEKHdlYmdsXzM3
NDgxOTdjMDAwMDAwMTMsIHdlYmdsXzRhMDAyZGI5MDAwMDAwMjApKSk7Cn0Kdm9pZCB3ZWJnbF9l
MGYxN2M1YzAwMDAwMDIxKGlub3V0IG1lZGl1bXAgdmVjNCB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFm
KXsKKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYgKj0gd2ViZ2xfMzYyNzUyZjcwMDAwMDAxNSk7Cn0K
dm9pZCB3ZWJnbF9lMjg4N2IyZDAwMDAwMDBhKGlub3V0IG1lZGl1bXAgdmVjNCB3ZWJnbF9jNTI5
YmI1MTAwMDAwMDFmKXsKKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYgKj0gd2ViZ2xfNzI2ZWFhNzEw
MDAwMDAxYigpKTsKfQp2b2lkIHdlYmdsX2MxZTlhY2QzMDAwMDAwMjIoaW5vdXQgbWVkaXVtcCB2
ZWM0IHdlYmdsX2M1MjliYjUxMDAwMDAwMWYpewptZWRpdW1wIGZsb2F0IHdlYmdsX2ExNzMyYWVm
MDAwMDAwMjMgPSAoMS4wIC0gd2ViZ2xfZjNjZjJiNDEwMDAwMDAxNik7Cih3ZWJnbF9jNTI5YmI1
MTAwMDAwMDFmID0gdmVjNCgoKCgoMC4yMTI1OTk5OSArICgwLjc4NzQwMDAxICogd2ViZ2xfYTE3
MzJhZWYwMDAwMDAyMykpICogd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi54KSArICgoMC43MTUyMDAw
MSAtICgwLjcxNTIwMDAxICogd2ViZ2xfYTE3MzJhZWYwMDAwMDAyMykpICogd2ViZ2xfYzUyOWJi
NTEwMDAwMDAxZi55KSkgKyAoKDAuMDcyMiAtICgwLjA3MjIgKiB3ZWJnbF9hMTczMmFlZjAwMDAw
MDIzKSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnopKSwgKCgoKDAuMjEyNTk5OTkgLSAoMC4y
MTI1OTk5OSAqIHdlYmdsX2ExNzMyYWVmMDAwMDAwMjMpKSAqIHdlYmdsX2M1MjliYjUxMDAwMDAw
MWYueCkgKyAoKDAuNzE1MjAwMDEgKyAoMC4yODQ3OTk5OSAqIHdlYmdsX2ExNzMyYWVmMDAwMDAw
MjMpKSAqIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueSkpICsgKCgwLjA3MjIgLSAoMC4wNzIyICog
d2ViZ2xfYTE3MzJhZWYwMDAwMDAyMykpICogd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi56KSksICgo
KCgwLjIxMjU5OTk5IC0gKDAuMjEyNTk5OTkgKiB3ZWJnbF9hMTczMmFlZjAwMDAwMDIzKSkgKiB3
ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLngpICsgKCgwLjcxNTIwMDAxIC0gKDAuNzE1MjAwMDEgKiB3
ZWJnbF9hMTczMmFlZjAwMDAwMDIzKSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnkpKSArICgo
MC4wNzIyICsgKDAuOTI3OCAqIHdlYmdsX2ExNzMyYWVmMDAwMDAwMjMpKSAqIHdlYmdsX2M1Mjli
YjUxMDAwMDAwMWYueikpLCB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLncpKTsKfQp2b2lkIHdlYmds
X2Y0OGMyODUyMDAwMDAwMjQoaW5vdXQgbWVkaXVtcCB2ZWM0IHdlYmdsX2M1MjliYjUxMDAwMDAw
MWYpewptZWRpdW1wIGZsb2F0IHdlYmdsX2ExNzMyYWVmMDAwMDAwMjMgPSAoMS4wIC0gd2ViZ2xf
ZjNjZjJiNDEwMDAwMDAxNik7Cih3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmID0gdmVjNCgoKCgoMC4z
OTMwMDAwMSArICgwLjYwNjk5OTk5ICogd2ViZ2xfYTE3MzJhZWYwMDAwMDAyMykpICogd2ViZ2xf
YzUyOWJiNTEwMDAwMDAxZi54KSArICgoMC43Njg5OTk5OSAtICgwLjc2ODk5OTk5ICogd2ViZ2xf
YTE3MzJhZWYwMDAwMDAyMykpICogd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi55KSkgKyAoKDAuMTg5
IC0gKDAuMTg5ICogd2ViZ2xfYTE3MzJhZWYwMDAwMDAyMykpICogd2ViZ2xfYzUyOWJiNTEwMDAw
MDAxZi56KSksICgoKCgwLjM0OTAwMDAxIC0gKDAuMzQ5MDAwMDEgKiB3ZWJnbF9hMTczMmFlZjAw
MDAwMDIzKSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLngpICsgKCgwLjY4NTk5OTk5ICsgKDAu
MzE0MDAwMDEgKiB3ZWJnbF9hMTczMmFlZjAwMDAwMDIzKSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAw
MDFmLnkpKSArICgoMC4xNjggLSAoMC4xNjggKiB3ZWJnbF9hMTczMmFlZjAwMDAwMDIzKSkgKiB3
ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnopKSwgKCgoKDAuMjcyMDAwMDEgLSAoMC4yNzIwMDAwMSAq
IHdlYmdsX2ExNzMyYWVmMDAwMDAwMjMpKSAqIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueCkgKyAo
KDAuNTMzOTk5OTggLSAoMC41MzM5OTk5OCAqIHdlYmdsX2ExNzMyYWVmMDAwMDAwMjMpKSAqIHdl
YmdsX2M1MjliYjUxMDAwMDAwMWYueSkpICsgKCgwLjEzMSArICgwLjg2OTAwMDAyICogd2ViZ2xf
YTE3MzJhZWYwMDAwMDAyMykpICogd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi56KSksIHdlYmdsX2M1
MjliYjUxMDAwMDAwMWYudykpOwp9CnZvaWQgd2ViZ2xfZDBiZjg4ZTQwMDAwMDAyNShpbm91dCBt
ZWRpdW1wIHZlYzQgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZil7Cih3ZWJnbF9jNTI5YmI1MTAwMDAw
MDFmID0gdmVjNCgoKCgoMC4yMTMgKyAoMC43ODcgKiB3ZWJnbF9mM2NmMmI0MTAwMDAwMDE2KSkg
KiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLngpICsgKCgwLjcxNDk5OTk3IC0gKDAuNzE0OTk5OTcg
KiB3ZWJnbF9mM2NmMmI0MTAwMDAwMDE2KSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnkpKSAr
ICgoMC4wNzE5OTk5OTcgLSAoMC4wNzE5OTk5OTcgKiB3ZWJnbF9mM2NmMmI0MTAwMDAwMDE2KSkg
KiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnopKSwgKCgoKDAuMjEzIC0gKDAuMjEzICogd2ViZ2xf
ZjNjZjJiNDEwMDAwMDAxNikpICogd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi54KSArICgoMC43MTQ5
OTk5NyArICgwLjI4NSAqIHdlYmdsX2YzY2YyYjQxMDAwMDAwMTYpKSAqIHdlYmdsX2M1MjliYjUx
MDAwMDAwMWYueSkpICsgKCgwLjA3MTk5OTk5NyAtICgwLjA3MTk5OTk5NyAqIHdlYmdsX2YzY2Yy
YjQxMDAwMDAwMTYpKSAqIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueikpLCAoKCgoMC4yMTMgLSAo
MC4yMTMgKiB3ZWJnbF9mM2NmMmI0MTAwMDAwMDE2KSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFm
LngpICsgKCgwLjcxNDk5OTk3IC0gKDAuNzE0OTk5OTcgKiB3ZWJnbF9mM2NmMmI0MTAwMDAwMDE2
KSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnkpKSArICgoMC4wNzE5OTk5OTcgKyAoMC45Mjc5
OTk5NyAqIHdlYmdsX2YzY2YyYjQxMDAwMDAwMTYpKSAqIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYu
eikpLCB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLncpKTsKfQp2b2lkIHdlYmdsXzI2NDNkODQwMDAw
MDAwMjYoaW5vdXQgbWVkaXVtcCB2ZWM0IHdlYmdsX2M1MjliYjUxMDAwMDAwMWYpewptZWRpdW1w
IGZsb2F0IHdlYmdsXzQxOGYzMDFlMDAwMDAwMjcgPSAzLjE0MTU5Mjc7Cm1lZGl1bXAgZmxvYXQg
d2ViZ2xfYzZlYzIxMTkwMDAwMDAyOCA9IGNvcygoKHdlYmdsX2YzY2YyYjQxMDAwMDAwMTYgKiB3
ZWJnbF80MThmMzAxZTAwMDAwMDI3KSAvIDE4MC4wKSk7Cm1lZGl1bXAgZmxvYXQgd2ViZ2xfN2Vh
YmE3N2EwMDAwMDAyOSA9IHNpbigoKHdlYmdsX2YzY2YyYjQxMDAwMDAwMTYgKiB3ZWJnbF80MThm
MzAxZTAwMDAwMDI3KSAvIDE4MC4wKSk7Cih3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmID0gdmVjNCgo
KCh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnggKiAoKDAuMjEzICsgKHdlYmdsX2M2ZWMyMTE5MDAw
MDAwMjggKiAwLjc4NykpIC0gKHdlYmdsXzdlYWJhNzdhMDAwMDAwMjkgKiAwLjIxMykpKSArICh3
ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnkgKiAoKDAuNzE0OTk5OTcgLSAod2ViZ2xfYzZlYzIxMTkw
MDAwMDAyOCAqIDAuNzE0OTk5OTcpKSAtICh3ZWJnbF83ZWFiYTc3YTAwMDAwMDI5ICogMC43MTQ5
OTk5NykpKSkgKyAod2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi56ICogKCgwLjA3MTk5OTk5NyAtICh3
ZWJnbF9jNmVjMjExOTAwMDAwMDI4ICogMC4wNzE5OTk5OTcpKSArICh3ZWJnbF83ZWFiYTc3YTAw
MDAwMDI5ICogMC45Mjc5OTk5NykpKSksICgoKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueCAqICgo
MC4yMTMgLSAod2ViZ2xfYzZlYzIxMTkwMDAwMDAyOCAqIDAuMjEzKSkgKyAod2ViZ2xfN2VhYmE3
N2EwMDAwMDAyOSAqIDAuMTQzMDAwMDEpKSkgKyAod2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi55ICog
KCgwLjcxNDk5OTk3ICsgKHdlYmdsX2M2ZWMyMTE5MDAwMDAwMjggKiAwLjI4NSkpICsgKHdlYmds
XzdlYWJhNzdhMDAwMDAwMjkgKiAwLjE0KSkpKSArICh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnog
KiAoKDAuMDcxOTk5OTk3IC0gKHdlYmdsX2M2ZWMyMTE5MDAwMDAwMjggKiAwLjA3MTk5OTk5Nykp
IC0gKHdlYmdsXzdlYWJhNzdhMDAwMDAwMjkgKiAwLjI4Mjk5OTk5KSkpKSwgKCgod2ViZ2xfYzUy
OWJiNTEwMDAwMDAxZi54ICogKCgwLjIxMyAtICh3ZWJnbF9jNmVjMjExOTAwMDAwMDI4ICogMC4y
MTMpKSAtICh3ZWJnbF83ZWFiYTc3YTAwMDAwMDI5ICogMC43ODcpKSkgKyAod2ViZ2xfYzUyOWJi
NTEwMDAwMDAxZi55ICogKCgwLjcxNDk5OTk3IC0gKHdlYmdsX2M2ZWMyMTE5MDAwMDAwMjggKiAw
LjcxNDk5OTk3KSkgKyAod2ViZ2xfN2VhYmE3N2EwMDAwMDAyOSAqIDAuNzE0OTk5OTcpKSkpICsg
KHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueiAqICgoMC4wNzE5OTk5OTcgKyAod2ViZ2xfYzZlYzIx
MTkwMDAwMDAyOCAqIDAuOTI3OTk5OTcpKSArICh3ZWJnbF83ZWFiYTc3YTAwMDAwMDI5ICogMC4w
NzE5OTk5OTcpKSkpLCB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLncpKTsKfQptZWRpdW1wIGZsb2F0
IHdlYmdsXzViMDEzOTRjMDAwMDAwMmEoaW4gbWVkaXVtcCBmbG9hdCB3ZWJnbF8zMThjMGE2MjAw
MDAwMDJiKXsKcmV0dXJuICgoKDEuMCAtIHdlYmdsXzMxOGMwYTYyMDAwMDAwMmIpICogd2ViZ2xf
ZjNjZjJiNDEwMDAwMDAxNikgKyAod2ViZ2xfMzE4YzBhNjIwMDAwMDAyYiAqICgxLjAgLSB3ZWJn
bF9mM2NmMmI0MTAwMDAwMDE2KSkpOwp9CnZvaWQgd2ViZ2xfYWEzOTExZDEwMDAwMDAyYyhpbm91
dCBtZWRpdW1wIHZlYzQgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZil7Cih3ZWJnbF9jNTI5YmI1MTAw
MDAwMDFmID0gdmVjNCh3ZWJnbF81YjAxMzk0YzAwMDAwMDJhKHdlYmdsX2M1MjliYjUxMDAwMDAw
MWYueCksIHdlYmdsXzViMDEzOTRjMDAwMDAwMmEod2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi55KSwg
d2ViZ2xfNWIwMTM5NGMwMDAwMDAyYSh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnopLCB3ZWJnbF9j
NTI5YmI1MTAwMDAwMDFmLncpKTsKfQp2b2lkIHdlYmdsXzFjMTFlY2ZiMDAwMDAwMmQoaW5vdXQg
bWVkaXVtcCB2ZWM0IHdlYmdsX2M1MjliYjUxMDAwMDAwMWYpewood2ViZ2xfYzUyOWJiNTEwMDAw
MDAxZiA9IHZlYzQoKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueHl6ICogd2ViZ2xfZjNjZjJiNDEw
MDAwMDAxNiksIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYudykpOwp9Cm1lZGl1bXAgZmxvYXQgd2Vi
Z2xfNjhjOTQ2NDUwMDAwMDAyZShpbiBtZWRpdW1wIGZsb2F0IHdlYmdsXzMxOGMwYTYyMDAwMDAw
MmIpewpyZXR1cm4gKCgod2ViZ2xfMzE4YzBhNjIwMDAwMDAyYiAtIDAuNSkgKiB3ZWJnbF9mM2Nm
MmI0MTAwMDAwMDE2KSArIDAuNSk7Cn0Kdm9pZCB3ZWJnbF84Y2NmNTUzYzAwMDAwMDJmKGlub3V0
IG1lZGl1bXAgdmVjNCB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmKXsKKHdlYmdsX2M1MjliYjUxMDAw
MDAwMWYgPSB2ZWM0KHdlYmdsXzY4Yzk0NjQ1MDAwMDAwMmUod2ViZ2xfYzUyOWJiNTEwMDAwMDAx
Zi54KSwgd2ViZ2xfNjhjOTQ2NDUwMDAwMDAyZSh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnkpLCB3
ZWJnbF82OGM5NDY0NTAwMDAwMDJlKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueiksIHdlYmdsX2M1
MjliYjUxMDAwMDAwMWYudykpOwp9CnZvaWQgd2ViZ2xfOTM3ZGEwYmQwMDAwMDAzMChpbm91dCBt
ZWRpdW1wIHZlYzQgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZil7Cih3ZWJnbF9jNTI5YmI1MTAwMDAw
MDFmID0gdmVjNCh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLngsIHdlYmdsX2M1MjliYjUxMDAwMDAw
MWYueSwgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi56LCAod2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi53
ICogd2ViZ2xfZjNjZjJiNDEwMDAwMDAxNikpKTsKfQptZWRpdW1wIHZlYzQgd2ViZ2xfZjgwOTli
NjAwMDAwMDAzMShpbiBtZWRpdW1wIGZsb2F0IHdlYmdsXzNjMmFhNTQ4MDAwMDAwMzIsIGluIG1l
ZGl1bXAgdmVjMiB3ZWJnbF80YTAwMmRiOTAwMDAwMDIwKXsKbWVkaXVtcCB2ZWMyIHdlYmdsXzk2
ZTQ3YWY2MDAwMDAwMzMgPSAod2ViZ2xfNGEwMDJkYjkwMDAwMDAyMCArICh3ZWJnbF8zYzJhYTU0
ODAwMDAwMDMyICogd2ViZ2xfMjRlYTRkMzcwMDAwMDAxNykpOwpyZXR1cm4gKHRleHR1cmUyRCh3
ZWJnbF8zNzQ4MTk3YzAwMDAwMDEzLCB3ZWJnbF85NmU0N2FmNjAwMDAwMDMzKSAqIGZsb2F0KCgo
KCgoKCh3ZWJnbF85NmU0N2FmNjAwMDAwMDMzLnggPiAwLjApKSA/ICgod2ViZ2xfOTZlNDdhZjYw
MDAwMDAzMy55ID4gMC4wKSkgOiAoZmFsc2UpKSkgPyAoKHdlYmdsXzk2ZTQ3YWY2MDAwMDAwMzMu
eCA8IDEuMCkpIDogKGZhbHNlKSkpID8gKCh3ZWJnbF85NmU0N2FmNjAwMDAwMDMzLnkgPCAxLjAp
KSA6IChmYWxzZSkpKSk7Cn0KbWVkaXVtcCBmbG9hdCB3ZWJnbF84ZTFjYWQ0ZTAwMDAwMDM0KGlu
IG1lZGl1bXAgZmxvYXQgd2ViZ2xfM2MyYWE1NDgwMDAwMDAzMiwgaW4gbWVkaXVtcCB2ZWMyIHdl
YmdsXzRhMDAyZGI5MDAwMDAwMjApewptZWRpdW1wIHZlYzIgd2ViZ2xfOTZlNDdhZjYwMDAwMDAz
MyA9ICgod2ViZ2xfNGEwMDJkYjkwMDAwMDAyMCAtIHdlYmdsX2U2MmI5MDk4MDAwMDAwMTgpICsg
KHdlYmdsXzNjMmFhNTQ4MDAwMDAwMzIgKiB3ZWJnbF8yNGVhNGQzNzAwMDAwMDE3KSk7CnJldHVy
biAodGV4dHVyZTJEKHdlYmdsXzM3NDgxOTdjMDAwMDAwMTMsIHdlYmdsXzk2ZTQ3YWY2MDAwMDAw
MzMpLncgKiBmbG9hdCgoKCgoKCgod2ViZ2xfOTZlNDdhZjYwMDAwMDAzMy54ID4gMC4wKSkgPyAo
KHdlYmdsXzk2ZTQ3YWY2MDAwMDAwMzMueSA+IDAuMCkpIDogKGZhbHNlKSkpID8gKCh3ZWJnbF85
NmU0N2FmNjAwMDAwMDMzLnggPCAxLjApKSA6IChmYWxzZSkpKSA/ICgod2ViZ2xfOTZlNDdhZjYw
MDAwMDAzMy55IDwgMS4wKSkgOiAoZmFsc2UpKSkpOwp9CnZvaWQgd2ViZ2xfYjM3ZWU2MmIwMDAw
MDAzNShpbm91dCBtZWRpdW1wIHZlYzQgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZiwgaW4gbWVkaXVt
cCB2ZWMyIHdlYmdsXzRhMDAyZGI5MDAwMDAwMjApewptZWRpdW1wIHZlYzQgd2ViZ2xfMzgxODJl
YzIwMDAwMDAzNiA9ICh3ZWJnbF9mODA5OWI2MDAwMDAwMDMxKDAuMCwgd2ViZ2xfNGEwMDJkYjkw
MDAwMDAyMCkgKiB3ZWJnbF9kMTU0ZGY5MTAwMDAwMDFhWzBdKTsKZm9yIChtZWRpdW1wIGludCB3
ZWJnbF81MWY2NmFmYzAwMDAwMDM3ID0gMTsgKHdlYmdsXzUxZjY2YWZjMDAwMDAwMzcgPCAxMSk7
ICh3ZWJnbF81MWY2NmFmYzAwMDAwMDM3KyspKQp7Cih3ZWJnbF8zODE4MmVjMjAwMDAwMDM2ICs9
ICh3ZWJnbF9mODA5OWI2MDAwMDAwMDMxKChmbG9hdCh3ZWJnbF81MWY2NmFmYzAwMDAwMDM3KSAq
IDAuMiksIHdlYmdsXzRhMDAyZGI5MDAwMDAwMjApICogd2ViZ2xfZDE1NGRmOTEwMDAwMDAxYVtp
bnQoY2xhbXAoZmxvYXQod2ViZ2xfNTFmNjZhZmMwMDAwMDAzNyksIDAuMCwgZmxvYXQoMTApKSld
KSk7Cih3ZWJnbF8zODE4MmVjMjAwMDAwMDM2ICs9ICh3ZWJnbF9mODA5OWI2MDAwMDAwMDMxKChm
bG9hdCgoLTEgKiB3ZWJnbF81MWY2NmFmYzAwMDAwMDM3KSkgKiAwLjIpLCB3ZWJnbF80YTAwMmRi
OTAwMDAwMDIwKSAqIHdlYmdsX2QxNTRkZjkxMDAwMDAwMWFbaW50KGNsYW1wKGZsb2F0KHdlYmds
XzUxZjY2YWZjMDAwMDAwMzcpLCAwLjAsIGZsb2F0KDEwKSkpXSkpOwp9Cih3ZWJnbF9jNTI5YmI1
MTAwMDAwMDFmID0gd2ViZ2xfMzgxODJlYzIwMDAwMDAzNik7Cn0Kdm9pZCB3ZWJnbF9jYmE1YjMw
NTAwMDAwMDM4KGlub3V0IG1lZGl1bXAgdmVjNCB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLCBpbiBt
ZWRpdW1wIHZlYzIgd2ViZ2xfNGEwMDJkYjkwMDAwMDAyMCl7Cm1lZGl1bXAgZmxvYXQgd2ViZ2xf
MzgxODJlYzIwMDAwMDAzNiA9ICh3ZWJnbF84ZTFjYWQ0ZTAwMDAwMDM0KDAuMCwgd2ViZ2xfNGEw
MDJkYjkwMDAwMDAyMCkgKiB3ZWJnbF9kMTU0ZGY5MTAwMDAwMDFhWzBdKTsKZm9yIChtZWRpdW1w
IGludCB3ZWJnbF81MWY2NmFmYzAwMDAwMDM3ID0gMTsgKHdlYmdsXzUxZjY2YWZjMDAwMDAwMzcg
PCAxMSk7ICh3ZWJnbF81MWY2NmFmYzAwMDAwMDM3KyspKQp7Cih3ZWJnbF8zODE4MmVjMjAwMDAw
MDM2ICs9ICh3ZWJnbF84ZTFjYWQ0ZTAwMDAwMDM0KChmbG9hdCh3ZWJnbF81MWY2NmFmYzAwMDAw
MDM3KSAqIDAuMiksIHdlYmdsXzRhMDAyZGI5MDAwMDAwMjApICogd2ViZ2xfZDE1NGRmOTEwMDAw
MDAxYVtpbnQoY2xhbXAoZmxvYXQod2ViZ2xfNTFmNjZhZmMwMDAwMDAzNyksIDAuMCwgZmxvYXQo
MTApKSldKSk7Cih3ZWJnbF8zODE4MmVjMjAwMDAwMDM2ICs9ICh3ZWJnbF84ZTFjYWQ0ZTAwMDAw
MDM0KChmbG9hdCgoLTEgKiB3ZWJnbF81MWY2NmFmYzAwMDAwMDM3KSkgKiAwLjIpLCB3ZWJnbF80
YTAwMmRiOTAwMDAwMDIwKSAqIHdlYmdsX2QxNTRkZjkxMDAwMDAwMWFbaW50KGNsYW1wKGZsb2F0
KHdlYmdsXzUxZjY2YWZjMDAwMDAwMzcpLCAwLjAsIGZsb2F0KDEwKSkpXSkpOwp9Cih3ZWJnbF9j
NTI5YmI1MTAwMDAwMDFmICo9IHdlYmdsXzM4MTgyZWMyMDAwMDAwMzYpOwp9Cm1lZGl1bXAgdmVj
NCB3ZWJnbF9kZDBlYTQ4ODAwMDAwMDM5KGluIG1lZGl1bXAgdmVjNCB3ZWJnbF82Y2FmYmY4MzAw
MDAwMDNhLCBpbiBtZWRpdW1wIHZlYzQgd2ViZ2xfMTM0OWIwNTIwMDAwMDAzYil7CnJldHVybiAo
d2ViZ2xfNmNhZmJmODMwMDAwMDAzYSArICh3ZWJnbF8xMzQ5YjA1MjAwMDAwMDNiICogKDEuMCAt
IHdlYmdsXzEzNDliMDUyMDAwMDAwM2IudykpKTsKfQp2b2lkIHdlYmdsX2VhOWMzM2ZkMDAwMDAw
M2MoaW5vdXQgbWVkaXVtcCB2ZWM0IHdlYmdsX2M1MjliYjUxMDAwMDAwMWYsIGluIG1lZGl1bXAg
dmVjMiB3ZWJnbF80YTAwMmRiOTAwMDAwMDIwKXsKbWVkaXVtcCB2ZWM0IHdlYmdsX2RjYTBjZGJi
MDAwMDAwM2QgPSB0ZXh0dXJlMkQod2ViZ2xfMmM1ZTYzODYwMDAwMDAxNCwgd2ViZ2xfNGEwMDJk
YjkwMDAwMDAyMCk7Cih3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmID0gd2ViZ2xfZGQwZWE0ODgwMDAw
MDAzOSh3ZWJnbF9kY2EwY2RiYjAwMDAwMDNkLCB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmKSk7Cn0K
dm9pZCB3ZWJnbF80N2M2N2ZhMTAwMDAwMDNlKGlub3V0IG1lZGl1bXAgdmVjNCB3ZWJnbF9jNTI5
YmI1MTAwMDAwMDFmKXsKKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYgKj0gd2ViZ2xfNjE3ZWNmNTIw
MDAwMDAxOSk7Cn0Kdm9pZCBtYWluKCl7CihnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAw
LjAsIDAuMCkpOwptZWRpdW1wIHZlYzQgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZiA9IHZlYzQoMS4w
LCAxLjAsIDEuMCwgMS4wKTsKbWVkaXVtcCB2ZWMyIHdlYmdsXzRhMDAyZGI5MDAwMDAwMjAgPSB3
ZWJnbF85ZWFkMDBjMTAwMDAwMDFjKCk7CndlYmdsXzliODExY2ViMDAwMDAwMWQod2ViZ2xfNGEw
MDJkYjkwMDAwMDAyMCk7CndlYmdsXzRlNDI0ZmRhMDAwMDAwMWUod2ViZ2xfYzUyOWJiNTEwMDAw
MDAxZiwgd2ViZ2xfNGEwMDJkYjkwMDAwMDAyMCk7CndlYmdsXzQ3YzY3ZmExMDAwMDAwM2Uod2Vi
Z2xfYzUyOWJiNTEwMDAwMDAxZik7CndlYmdsX2UyODg3YjJkMDAwMDAwMGEod2ViZ2xfYzUyOWJi
NTEwMDAwMDAxZik7CndlYmdsX2UwZjE3YzVjMDAwMDAwMjEod2ViZ2xfYzUyOWJiNTEwMDAwMDAx
Zik7CndlYmdsX2MxZTlhY2QzMDAwMDAwMjIod2ViZ2xfYzUyOWJiNTEwMDAwMDAxZik7CndlYmds
X2Y0OGMyODUyMDAwMDAwMjQod2ViZ2xfYzUyOWJiNTEwMDAwMDAxZik7CndlYmdsX2QwYmY4OGU0
MDAwMDAwMjUod2ViZ2xfYzUyOWJiNTEwMDAwMDAxZik7CndlYmdsXzI2NDNkODQwMDAwMDAwMjYo
d2ViZ2xfYzUyOWJiNTEwMDAwMDAxZik7CndlYmdsX2FhMzkxMWQxMDAwMDAwMmMod2ViZ2xfYzUy
OWJiNTEwMDAwMDAxZik7CndlYmdsXzFjMTFlY2ZiMDAwMDAwMmQod2ViZ2xfYzUyOWJiNTEwMDAw
MDAxZik7CndlYmdsXzhjY2Y1NTNjMDAwMDAwMmYod2ViZ2xfYzUyOWJiNTEwMDAwMDAxZik7Cndl
YmdsXzkzN2RhMGJkMDAwMDAwMzAod2ViZ2xfYzUyOWJiNTEwMDAwMDAxZik7CndlYmdsX2IzN2Vl
NjJiMDAwMDAwMzUod2ViZ2xfYzUyOWJiNTEwMDAwMDAxZiwgd2ViZ2xfNGEwMDJkYjkwMDAwMDAy
MCk7CndlYmdsX2NiYTViMzA1MDAwMDAwMzgod2ViZ2xfYzUyOWJiNTEwMDAwMDAxZiwgd2ViZ2xf
NGEwMDJkYjkwMDAwMDAyMCk7CndlYmdsX2VhOWMzM2ZkMDAwMDAwM2Mod2ViZ2xfYzUyOWJiNTEw
MDAwMDAxZiwgd2ViZ2xfNGEwMDJkYjkwMDAwMDAyMCk7CihnbF9GcmFnQ29sb3IgPSB3ZWJnbF9j
NTI5YmI1MTAwMDAwMDFmKTsKfQoKLS0tIGVuZCB0cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0t
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>317918</attachid>
            <date>2017-08-10 23:32:07 -0700</date>
            <delta_ts>2017-08-10 23:32:07 -0700</delta_ts>
            <desc>ANGLE translation of TexMap shaders on OpenGL 3.0</desc>
            <filename>gl30-shaders.txt</filename>
            <type>text/plain</type>
            <size>23864</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">Y29tcGlsZVNoYWRlcigpIHZlcnRleDoKLS0tIGJlZ2luIG9yaWdpbmFsIHNoYWRlciBzb3VyY2Ug
LS0tCiNkZWZpbmUgRU5BQkxFX1RleHR1cmUKI2RlZmluZSBhcHBseVRleHR1cmVJZk5lZWRlZCBh
cHBseVRleHR1cmUKI2RlZmluZSBhcHBseVJlY3RJZk5lZWRlZCBub29wCiNkZWZpbmUgRU5BQkxF
X1NvbGlkQ29sb3IKI2RlZmluZSBhcHBseVNvbGlkQ29sb3JJZk5lZWRlZCBhcHBseVNvbGlkQ29s
b3IKI2RlZmluZSBFTkFCTEVfT3BhY2l0eQojZGVmaW5lIGFwcGx5T3BhY2l0eUlmTmVlZGVkIGFw
cGx5T3BhY2l0eQojZGVmaW5lIEVOQUJMRV9BbnRpYWxpYXNpbmcKI2RlZmluZSBhcHBseUFudGlh
bGlhc2luZ0lmTmVlZGVkIGFwcGx5QW50aWFsaWFzaW5nCiNkZWZpbmUgRU5BQkxFX0dyYXlzY2Fs
ZUZpbHRlcgojZGVmaW5lIGFwcGx5R3JheXNjYWxlRmlsdGVySWZOZWVkZWQgYXBwbHlHcmF5c2Nh
bGVGaWx0ZXIKI2RlZmluZSBFTkFCTEVfU2VwaWFGaWx0ZXIKI2RlZmluZSBhcHBseVNlcGlhRmls
dGVySWZOZWVkZWQgYXBwbHlTZXBpYUZpbHRlcgojZGVmaW5lIEVOQUJMRV9TYXR1cmF0ZUZpbHRl
cgojZGVmaW5lIGFwcGx5U2F0dXJhdGVGaWx0ZXJJZk5lZWRlZCBhcHBseVNhdHVyYXRlRmlsdGVy
CiNkZWZpbmUgRU5BQkxFX0h1ZVJvdGF0ZUZpbHRlcgojZGVmaW5lIGFwcGx5SHVlUm90YXRlRmls
dGVySWZOZWVkZWQgYXBwbHlIdWVSb3RhdGVGaWx0ZXIKI2RlZmluZSBFTkFCTEVfQnJpZ2h0bmVz
c0ZpbHRlcgojZGVmaW5lIGFwcGx5QnJpZ2h0bmVzc0ZpbHRlcklmTmVlZGVkIGFwcGx5QnJpZ2h0
bmVzc0ZpbHRlcgojZGVmaW5lIEVOQUJMRV9Db250cmFzdEZpbHRlcgojZGVmaW5lIGFwcGx5Q29u
dHJhc3RGaWx0ZXJJZk5lZWRlZCBhcHBseUNvbnRyYXN0RmlsdGVyCiNkZWZpbmUgRU5BQkxFX0lu
dmVydEZpbHRlcgojZGVmaW5lIGFwcGx5SW52ZXJ0RmlsdGVySWZOZWVkZWQgYXBwbHlJbnZlcnRG
aWx0ZXIKI2RlZmluZSBFTkFCTEVfT3BhY2l0eUZpbHRlcgojZGVmaW5lIGFwcGx5T3BhY2l0eUZp
bHRlcklmTmVlZGVkIGFwcGx5T3BhY2l0eUZpbHRlcgojZGVmaW5lIEVOQUJMRV9CbHVyRmlsdGVy
CiNkZWZpbmUgYXBwbHlCbHVyRmlsdGVySWZOZWVkZWQgYXBwbHlCbHVyRmlsdGVyCiNkZWZpbmUg
RU5BQkxFX0FscGhhQmx1cgojZGVmaW5lIGFwcGx5QWxwaGFCbHVySWZOZWVkZWQgYXBwbHlBbHBo
YUJsdXIKI2RlZmluZSBFTkFCTEVfQ29udGVudFRleHR1cmUKI2RlZmluZSBhcHBseUNvbnRlbnRU
ZXh0dXJlSWZOZWVkZWQgYXBwbHlDb250ZW50VGV4dHVyZQojZGVmaW5lIEVOQUJMRV9NYW51YWxS
ZXBlYXQKI2RlZmluZSBhcHBseU1hbnVhbFJlcGVhdElmTmVlZGVkIGFwcGx5TWFudWFsUmVwZWF0
CiNpZmRlZiBHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSAojZGVmaW5lIFRleHR1cmVTcGFjZU1h
dHJpeFByZWNpc2lvbiBoaWdocAojZWxzZQojZGVmaW5lIFRleHR1cmVTcGFjZU1hdHJpeFByZWNp
c2lvbiBtZWRpdW1wCiNlbmRpZgpwcmVjaXNpb24gVGV4dHVyZVNwYWNlTWF0cml4UHJlY2lzaW9u
IGZsb2F0OyBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsgdW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3
TWF0cml4OyB1bmlmb3JtIG1hdDQgdV9wcm9qZWN0aW9uTWF0cml4OyB1bmlmb3JtIG1hdDQgdV90
ZXh0dXJlU3BhY2VNYXRyaXg7IHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyB2YXJ5aW5nIHZlYzIg
dl90cmFuc2Zvcm1lZFRleENvb3JkOyB2YXJ5aW5nIGZsb2F0IHZfYW50aWFsaWFzOyB2b2lkIG5v
b3AoaW5vdXQgdmVjMiBkdW1teVBhcmFtZXRlcikgeyB9IHZlYzQgdG9WaWV3cG9ydFNwYWNlKHZl
YzIgcG9zKSB7IHJldHVybiB2ZWM0KHBvcywgMC4sIDEuKSAqIHVfbW9kZWxWaWV3TWF0cml4OyB9
IHZvaWQgYXBwbHlBbnRpYWxpYXNpbmcoaW5vdXQgdmVjMiBwb3NpdGlvbikgeyBjb25zdCB2ZWMy
IGNlbnRlciA9IHZlYzIoMC41LCAwLjUpOyBjb25zdCBmbG9hdCBhbnRpYWxpYXNJbmZsYXRpb25E
aXN0YW5jZSA9IDEuOyB2ZWMyIGNvbnRyb2xQb2ludCA9IGFfdmVydGV4Lnp3OyB2ZWM0IGNlbnRl
ckluVmlld3BvcnRDb29yZGluYXRlcyA9IHRvVmlld3BvcnRTcGFjZShjZW50ZXIpOyB2ZWM0IGNv
bnRyb2xQb2ludEluVmlld3BvcnRDb29yZGluYXRlcyA9IHRvVmlld3BvcnRTcGFjZShjb250cm9s
UG9pbnQpOyBmbG9hdCB2aWV3cG9ydFNwYWNlRGlzdGFuY2UgPSBkaXN0YW5jZShjZW50ZXJJblZp
ZXdwb3J0Q29vcmRpbmF0ZXMsIGNvbnRyb2xQb2ludEluVmlld3BvcnRDb29yZGluYXRlcyk7IGZs
b2F0IGluZmxhdGlvblJhdGlvID0gKHZpZXdwb3J0U3BhY2VEaXN0YW5jZSArIGFudGlhbGlhc0lu
ZmxhdGlvbkRpc3RhbmNlKSAvIHZpZXdwb3J0U3BhY2VEaXN0YW5jZTsgdl9hbnRpYWxpYXMgPSBk
aXN0YW5jZShjb250cm9sUG9pbnQsIHBvc2l0aW9uKSAqIDIuICogaW5mbGF0aW9uUmF0aW8gLyAo
aW5mbGF0aW9uUmF0aW8gLSAxLik7IHBvc2l0aW9uID0gY2VudGVyICsgKHBvc2l0aW9uIC0gY2Vu
dGVyKSAqIGluZmxhdGlvblJhdGlvOyB9IHZvaWQgbWFpbih2b2lkKSB7IHZlYzIgcG9zaXRpb24g
PSBhX3ZlcnRleC54eTsgYXBwbHlBbnRpYWxpYXNpbmdJZk5lZWRlZChwb3NpdGlvbik7IHZfdGV4
Q29vcmQgPSBwb3NpdGlvbjsgdmVjNCBjbGFtcGVkUG9zaXRpb24gPSBjbGFtcCh2ZWM0KHBvc2l0
aW9uLCAwLiwgMS4pLCAwLiwgMS4pOyB2X3RyYW5zZm9ybWVkVGV4Q29vcmQgPSAodV90ZXh0dXJl
U3BhY2VNYXRyaXggKiBjbGFtcGVkUG9zaXRpb24pLnh5OyBnbF9Qb3NpdGlvbiA9IHVfcHJvamVj
dGlvbk1hdHJpeCAqIHVfbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsg
fQotLS0gZW5kIG9yaWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tCi0tLSBiZWdpbiB0cmFuc2xhdGVk
IHNoYWRlciBzb3VyY2UgLS0tCiNleHRlbnNpb24gR0xfQVJCX2dwdV9zaGFkZXI1IDogZW5hYmxl
CmF0dHJpYnV0ZSB2ZWM0IHdlYmdsXzUzZTAxOWQ0MDAwMDAwMDE7CnVuaWZvcm0gbWF0NCB3ZWJn
bF82MjEzZDllMDAwMDAwMDAyOwp1bmlmb3JtIG1hdDQgd2ViZ2xfYjc4NDkxZGMwMDAwMDAwMzsK
dW5pZm9ybSBtYXQ0IHdlYmdsX2YwZThkM2U4MDAwMDAwMDQ7CnZhcnlpbmcgdmVjMiB3ZWJnbF82
ZGE0MjcxODAwMDAwMDA1Owp2YXJ5aW5nIHZlYzIgd2ViZ2xfMTFjNDc3MjIwMDAwMDAwNjsKdmFy
eWluZyBmbG9hdCB3ZWJnbF9mYTQ3N2QxMzAwMDAwMDA3Owp2ZWM0IHdlYmdsXzhhMDY0NTA2MDAw
MDAwMDgoaW4gdmVjMiB3ZWJnbF8xYmNjNDZmNjAwMDAwMDA5KXsKcmV0dXJuICh2ZWM0KHdlYmds
XzFiY2M0NmY2MDAwMDAwMDksIDAuMCwgMS4wKSAqIHdlYmdsXzYyMTNkOWUwMDAwMDAwMDIpOwp9
CnZvaWQgd2ViZ2xfZTI4ODdiMmQwMDAwMDAwYShpbm91dCB2ZWMyIHdlYmdsX2M4YWQ2MTNmMDAw
MDAwMGIpewp2ZWMyIHdlYmdsX2UyMjQwMGU0MDAwMDAwMGMgPSB3ZWJnbF81M2UwMTlkNDAwMDAw
MDAxLnp3Owp2ZWM0IHdlYmdsXzg3OTc4ZTVhMDAwMDAwMGQgPSB3ZWJnbF84YTA2NDUwNjAwMDAw
MDA4KHZlYzIoMC41LCAwLjUpKTsKdmVjNCB3ZWJnbF84MTc5MmEwOTAwMDAwMDBlID0gd2ViZ2xf
OGEwNjQ1MDYwMDAwMDAwOCh3ZWJnbF9lMjI0MDBlNDAwMDAwMDBjKTsKZmxvYXQgd2ViZ2xfNjUy
YmVkZDkwMDAwMDAwZiA9IGRpc3RhbmNlKHdlYmdsXzg3OTc4ZTVhMDAwMDAwMGQsIHdlYmdsXzgx
NzkyYTA5MDAwMDAwMGUpOwpmbG9hdCB3ZWJnbF9kMmY1ODg0ZDAwMDAwMDEwID0gKCh3ZWJnbF82
NTJiZWRkOTAwMDAwMDBmICsgMS4wKSAvIHdlYmdsXzY1MmJlZGQ5MDAwMDAwMGYpOwood2ViZ2xf
ZmE0NzdkMTMwMDAwMDAwNyA9ICgoKGRpc3RhbmNlKHdlYmdsX2UyMjQwMGU0MDAwMDAwMGMsIHdl
YmdsX2M4YWQ2MTNmMDAwMDAwMGIpICogMi4wKSAqIHdlYmdsX2QyZjU4ODRkMDAwMDAwMTApIC8g
KHdlYmdsX2QyZjU4ODRkMDAwMDAwMTAgLSAxLjApKSk7Cih3ZWJnbF9jOGFkNjEzZjAwMDAwMDBi
ID0gKHZlYzIoMC41LCAwLjUpICsgKCh3ZWJnbF9jOGFkNjEzZjAwMDAwMDBiIC0gdmVjMigwLjUs
IDAuNSkpICogd2ViZ2xfZDJmNTg4NGQwMDAwMDAxMCkpKTsKfQp2b2lkIG1haW4oKXsKKGdsX1Bv
c2l0aW9uID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApKTsKKHdlYmdsX2ZhNDc3ZDEzMDAwMDAw
MDcgPSAwLjApOwood2ViZ2xfMTFjNDc3MjIwMDAwMDAwNiA9IHZlYzIoMC4wLCAwLjApKTsKKHdl
YmdsXzZkYTQyNzE4MDAwMDAwMDUgPSB2ZWMyKDAuMCwgMC4wKSk7CihnbF9Qb3NpdGlvbiA9IHZl
YzQoMC4wLCAwLjAsIDAuMCwgMC4wKSk7CnZlYzIgd2ViZ2xfYzhhZDYxM2YwMDAwMDAwYiA9IHdl
YmdsXzUzZTAxOWQ0MDAwMDAwMDEueHk7CndlYmdsX2UyODg3YjJkMDAwMDAwMGEod2ViZ2xfYzhh
ZDYxM2YwMDAwMDAwYik7Cih3ZWJnbF82ZGE0MjcxODAwMDAwMDA1ID0gd2ViZ2xfYzhhZDYxM2Yw
MDAwMDAwYik7CnZlYzQgd2ViZ2xfZWFmNzE1N2MwMDAwMDAxMSA9IGNsYW1wKHZlYzQod2ViZ2xf
YzhhZDYxM2YwMDAwMDAwYiwgMC4wLCAxLjApLCAwLjAsIDEuMCk7Cih3ZWJnbF8xMWM0NzcyMjAw
MDAwMDA2ID0gKHdlYmdsX2YwZThkM2U4MDAwMDAwMDQgKiB3ZWJnbF9lYWY3MTU3YzAwMDAwMDEx
KS54eSk7CihnbF9Qb3NpdGlvbiA9ICgod2ViZ2xfYjc4NDkxZGMwMDAwMDAwMyAqIHdlYmdsXzYy
MTNkOWUwMDAwMDAwMDIpICogdmVjNCh3ZWJnbF9jOGFkNjEzZjAwMDAwMDBiLCAwLjAsIDEuMCkp
KTsKfQoKLS0tIGVuZCB0cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0tCmNvbXBpbGVTaGFkZXIo
KSBmcmFnbWVudDoKLS0tIGJlZ2luIG9yaWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tCiNkZWZpbmUg
RU5BQkxFX1RleHR1cmUKI2RlZmluZSBhcHBseVRleHR1cmVJZk5lZWRlZCBhcHBseVRleHR1cmUK
I2RlZmluZSBhcHBseVJlY3RJZk5lZWRlZCBub29wCiNkZWZpbmUgRU5BQkxFX1NvbGlkQ29sb3IK
I2RlZmluZSBhcHBseVNvbGlkQ29sb3JJZk5lZWRlZCBhcHBseVNvbGlkQ29sb3IKI2RlZmluZSBF
TkFCTEVfT3BhY2l0eQojZGVmaW5lIGFwcGx5T3BhY2l0eUlmTmVlZGVkIGFwcGx5T3BhY2l0eQoj
ZGVmaW5lIEVOQUJMRV9BbnRpYWxpYXNpbmcKI2RlZmluZSBhcHBseUFudGlhbGlhc2luZ0lmTmVl
ZGVkIGFwcGx5QW50aWFsaWFzaW5nCiNkZWZpbmUgRU5BQkxFX0dyYXlzY2FsZUZpbHRlcgojZGVm
aW5lIGFwcGx5R3JheXNjYWxlRmlsdGVySWZOZWVkZWQgYXBwbHlHcmF5c2NhbGVGaWx0ZXIKI2Rl
ZmluZSBFTkFCTEVfU2VwaWFGaWx0ZXIKI2RlZmluZSBhcHBseVNlcGlhRmlsdGVySWZOZWVkZWQg
YXBwbHlTZXBpYUZpbHRlcgojZGVmaW5lIEVOQUJMRV9TYXR1cmF0ZUZpbHRlcgojZGVmaW5lIGFw
cGx5U2F0dXJhdGVGaWx0ZXJJZk5lZWRlZCBhcHBseVNhdHVyYXRlRmlsdGVyCiNkZWZpbmUgRU5B
QkxFX0h1ZVJvdGF0ZUZpbHRlcgojZGVmaW5lIGFwcGx5SHVlUm90YXRlRmlsdGVySWZOZWVkZWQg
YXBwbHlIdWVSb3RhdGVGaWx0ZXIKI2RlZmluZSBFTkFCTEVfQnJpZ2h0bmVzc0ZpbHRlcgojZGVm
aW5lIGFwcGx5QnJpZ2h0bmVzc0ZpbHRlcklmTmVlZGVkIGFwcGx5QnJpZ2h0bmVzc0ZpbHRlcgoj
ZGVmaW5lIEVOQUJMRV9Db250cmFzdEZpbHRlcgojZGVmaW5lIGFwcGx5Q29udHJhc3RGaWx0ZXJJ
Zk5lZWRlZCBhcHBseUNvbnRyYXN0RmlsdGVyCiNkZWZpbmUgRU5BQkxFX0ludmVydEZpbHRlcgoj
ZGVmaW5lIGFwcGx5SW52ZXJ0RmlsdGVySWZOZWVkZWQgYXBwbHlJbnZlcnRGaWx0ZXIKI2RlZmlu
ZSBFTkFCTEVfT3BhY2l0eUZpbHRlcgojZGVmaW5lIGFwcGx5T3BhY2l0eUZpbHRlcklmTmVlZGVk
IGFwcGx5T3BhY2l0eUZpbHRlcgojZGVmaW5lIEVOQUJMRV9CbHVyRmlsdGVyCiNkZWZpbmUgYXBw
bHlCbHVyRmlsdGVySWZOZWVkZWQgYXBwbHlCbHVyRmlsdGVyCiNkZWZpbmUgRU5BQkxFX0FscGhh
Qmx1cgojZGVmaW5lIGFwcGx5QWxwaGFCbHVySWZOZWVkZWQgYXBwbHlBbHBoYUJsdXIKI2RlZmlu
ZSBFTkFCTEVfQ29udGVudFRleHR1cmUKI2RlZmluZSBhcHBseUNvbnRlbnRUZXh0dXJlSWZOZWVk
ZWQgYXBwbHlDb250ZW50VGV4dHVyZQojZGVmaW5lIEVOQUJMRV9NYW51YWxSZXBlYXQKI2RlZmlu
ZSBhcHBseU1hbnVhbFJlcGVhdElmTmVlZGVkIGFwcGx5TWFudWFsUmVwZWF0CiNpZmRlZiBFTkFC
TEVfUmVjdAojZGVmaW5lIFNhbXBsZXJUeXBlIHNhbXBsZXIyRFJlY3QKI2RlZmluZSBTYW1wbGVy
RnVuY3Rpb24gdGV4dHVyZTJEUmVjdAojZWxzZQojZGVmaW5lIFNhbXBsZXJUeXBlIHNhbXBsZXIy
RAojZGVmaW5lIFNhbXBsZXJGdW5jdGlvbiB0ZXh0dXJlMkQKI2VuZGlmCiNpZiBkZWZpbmVkKEVO
QUJMRV9BbnRpYWxpYXNpbmcpICYmIGRlZmluZWQoRU5BQkxFX1RleHR1cmUpCiNkZWZpbmUgdHJh
bnNmb3JtVGV4Q29vcmQgZnJhZ21lbnRUcmFuc2Zvcm1UZXhDb29yZAojZWxzZQojZGVmaW5lIHRy
YW5zZm9ybVRleENvb3JkIHZlcnRleFRyYW5zZm9ybVRleENvb3JkCiNlbmRpZgojZGVmaW5lIEdB
VVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIIDExCiNkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX1NURVAg
MC4yCiNpZmRlZiBHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSAojZGVmaW5lIFRleHR1cmVTcGFj
ZU1hdHJpeFByZWNpc2lvbiBoaWdocAojZWxzZQojZGVmaW5lIFRleHR1cmVTcGFjZU1hdHJpeFBy
ZWNpc2lvbiBtZWRpdW1wCiNlbmRpZgpwcmVjaXNpb24gVGV4dHVyZVNwYWNlTWF0cml4UHJlY2lz
aW9uIGZsb2F0OyB1bmlmb3JtIG1hdDQgdV90ZXh0dXJlU3BhY2VNYXRyaXg7IHVuaWZvcm0gbWF0
NCB1X3RleHR1cmVDb2xvclNwYWNlTWF0cml4OyBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgdW5p
Zm9ybSBTYW1wbGVyVHlwZSBzX3NhbXBsZXI7IHVuaWZvcm0gc2FtcGxlcjJEIHNfY29udGVudFRl
eHR1cmU7IHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OyB2YXJ5aW5nIGZsb2F0IHZfYW50aWFsaWFz
OyB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgdmFyeWluZyB2ZWMyIHZfdHJhbnNmb3JtZWRUZXhD
b29yZDsgdW5pZm9ybSBmbG9hdCB1X2ZpbHRlckFtb3VudDsgdW5pZm9ybSB2ZWMyIHVfYmx1clJh
ZGl1czsgdW5pZm9ybSB2ZWMyIHVfc2hhZG93T2Zmc2V0OyB1bmlmb3JtIHZlYzQgdV9jb2xvcjsg
dW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRI
XTsgdm9pZCBub29wKGlub3V0IHZlYzQgZHVtbXlQYXJhbWV0ZXIpIHsgfSB2b2lkIG5vb3AoaW5v
dXQgdmVjNCBkdW1teVBhcmFtZXRlciwgdmVjMiB0ZXhDb29yZCkgeyB9IHZvaWQgbm9vcChpbm91
dCB2ZWMyIGR1bW15UGFyYW1ldGVyKSB7IH0gZmxvYXQgYW50aWFsaWFzKCkgeyByZXR1cm4gc21v
b3Roc3RlcCgwLiwgMS4sIHZfYW50aWFsaWFzKTsgfSB2ZWMyIGZyYWdtZW50VHJhbnNmb3JtVGV4
Q29vcmQoKSB7IHZlYzQgY2xhbXBlZFBvc2l0aW9uID0gY2xhbXAodmVjNCh2X3RleENvb3JkLCAw
LiwgMS4pLCAwLiwgMS4pOyByZXR1cm4gKHVfdGV4dHVyZVNwYWNlTWF0cml4ICogY2xhbXBlZFBv
c2l0aW9uKS54eTsgfSB2ZWMyIHZlcnRleFRyYW5zZm9ybVRleENvb3JkKCkgeyByZXR1cm4gdl90
cmFuc2Zvcm1lZFRleENvb3JkOyB9IHZvaWQgYXBwbHlNYW51YWxSZXBlYXQoaW5vdXQgdmVjMiBw
b3MpIHsgcG9zID0gZnJhY3QocG9zKTsgfSB2b2lkIGFwcGx5VGV4dHVyZShpbm91dCB2ZWM0IGNv
bG9yLCB2ZWMyIHRleENvb3JkKSB7IGNvbG9yID0gdV90ZXh0dXJlQ29sb3JTcGFjZU1hdHJpeCAq
IFNhbXBsZXJGdW5jdGlvbihzX3NhbXBsZXIsIHRleENvb3JkKTsgfSB2b2lkIGFwcGx5T3BhY2l0
eShpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IHVfb3BhY2l0eTsgfSB2b2lkIGFwcGx5QW50
aWFsaWFzaW5nKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gYW50aWFsaWFzKCk7IH0gdm9p
ZCBhcHBseUdyYXlzY2FsZUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKSB7IGZsb2F0IGFtb3VudCA9
IDEuMCAtIHVfZmlsdGVyQW1vdW50OyBjb2xvciA9IHZlYzQoKDAuMjEyNiArIDAuNzg3NCAqIGFt
b3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsg
KDAuMDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBjb2xvci5iLCAoMC4yMTI2IC0gMC4yMTI2ICog
YW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyICsgMC4yODQ4ICogYW1vdW50KSAqIGNvbG9yLmcg
KyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9yLmIsICgwLjIxMjYgLSAwLjIxMjYg
KiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAwLjcxNTIgKiBhbW91bnQpICogY29sb3Iu
ZyArICgwLjA3MjIgKyAwLjkyNzggKiBhbW91bnQpICogY29sb3IuYiwgY29sb3IuYSk7IH0gdm9p
ZCBhcHBseVNlcGlhRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpIHsgZmxvYXQgYW1vdW50ID0gMS4w
IC0gdV9maWx0ZXJBbW91bnQ7IGNvbG9yID0gdmVjNCgoMC4zOTMgKyAwLjYwNyAqIGFtb3VudCkg
KiBjb2xvci5yICsgKDAuNzY5IC0gMC43NjkgKiBhbW91bnQpICogY29sb3IuZyArICgwLjE4OSAt
IDAuMTg5ICogYW1vdW50KSAqIGNvbG9yLmIsICgwLjM0OSAtIDAuMzQ5ICogYW1vdW50KSAqIGNv
bG9yLnIgKyAoMC42ODYgKyAwLjMxNCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTY4IC0gMC4x
NjggKiBhbW91bnQpICogY29sb3IuYiwgKDAuMjcyIC0gMC4yNzIgKiBhbW91bnQpICogY29sb3Iu
ciArICgwLjUzNCAtIDAuNTM0ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xMzEgKyAwLjg2OSAq
IGFtb3VudCkgKiBjb2xvci5iLCBjb2xvci5hKTsgfSB2b2lkIGFwcGx5U2F0dXJhdGVGaWx0ZXIo
aW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciA9IHZlYzQoKDAuMjEzICsgMC43ODcgKiB1X2ZpbHRl
ckFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUgKiB1X2ZpbHRlckFtb3VudCkgKiBj
b2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5iLCAoMC4y
MTMgLSAwLjIxMyAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgKyAwLjI4NSAq
IHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfZmlsdGVyQW1v
dW50KSAqIGNvbG9yLmIsICgwLjIxMyAtIDAuMjEzICogdV9maWx0ZXJBbW91bnQpICogY29sb3Iu
ciArICgwLjcxNSAtIDAuNzE1ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuZyArICgwLjA3MiAr
IDAuOTI4ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuYiwgY29sb3IuYSk7IH0gdm9pZCBhcHBs
eUh1ZVJvdGF0ZUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKSB7IGZsb2F0IHBpID0gMy4xNDE1OTI2
NTM1ODk3OTMyMzg0NjsgZmxvYXQgYyA9IGNvcyh1X2ZpbHRlckFtb3VudCAqIHBpIC8gMTgwLjAp
OyBmbG9hdCBzID0gc2luKHVfZmlsdGVyQW1vdW50ICogcGkgLyAxODAuMCk7IGNvbG9yID0gdmVj
NChjb2xvci5yICogKDAuMjEzICsgYyAqIDAuNzg3IC0gcyAqIDAuMjEzKSArIGNvbG9yLmcgKiAo
MC43MTUgLSBjICogMC43MTUgLSBzICogMC43MTUpICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAw
LjA3MiArIHMgKiAwLjkyOCksIGNvbG9yLnIgKiAoMC4yMTMgLSBjICogMC4yMTMgKyBzICogMC4x
NDMpICsgY29sb3IuZyAqICgwLjcxNSArIGMgKiAwLjI4NSArIHMgKiAwLjE0MCkgKyBjb2xvci5i
ICogKDAuMDcyIC0gYyAqIDAuMDcyIC0gcyAqIDAuMjgzKSwgY29sb3IuciAqICgwLjIxMyAtIGMg
KiAwLjIxMyAtIHMgKiAwLjc4NykgKyBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1ICsgcyAq
IDAuNzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgKyBjICogMC45MjggKyBzICogMC4wNzIpLCBjb2xv
ci5hKTsgfSBmbG9hdCBpbnZlcnQoZmxvYXQgbikgeyByZXR1cm4gKDEuMCAtIG4pICogdV9maWx0
ZXJBbW91bnQgKyBuICogKDEuMCAtIHVfZmlsdGVyQW1vdW50KTsgfSB2b2lkIGFwcGx5SW52ZXJ0
RmlsdGVyKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgPSB2ZWM0KGludmVydChjb2xvci5yKSwg
aW52ZXJ0KGNvbG9yLmcpLCBpbnZlcnQoY29sb3IuYiksIGNvbG9yLmEpOyB9IHZvaWQgYXBwbHlC
cmlnaHRuZXNzRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgPSB2ZWM0KGNvbG9yLnJn
YiAqIHVfZmlsdGVyQW1vdW50LCBjb2xvci5hKTsgfSBmbG9hdCBjb250cmFzdChmbG9hdCBuKSB7
IHJldHVybiAobiAtIDAuNSkgKiB1X2ZpbHRlckFtb3VudCArIDAuNTsgfSB2b2lkIGFwcGx5Q29u
dHJhc3RGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciA9IHZlYzQoY29udHJhc3QoY29s
b3IuciksIGNvbnRyYXN0KGNvbG9yLmcpLCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7IH0g
dm9pZCBhcHBseU9wYWNpdHlGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciA9IHZlYzQo
Y29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSAqIHVfZmlsdGVyQW1vdW50KTsgfSB2
ZWM0IHNhbXBsZUNvbG9yQXRSYWRpdXMoZmxvYXQgcmFkaXVzLCB2ZWMyIHRleENvb3JkKSB7IHZl
YzIgY29vcmQgPSB0ZXhDb29yZCArIHJhZGl1cyAqIHVfYmx1clJhZGl1czsgcmV0dXJuIFNhbXBs
ZXJGdW5jdGlvbihzX3NhbXBsZXIsIGNvb3JkKSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29y
ZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7IH0gZmxvYXQgc2FtcGxl
QWxwaGFBdFJhZGl1cyhmbG9hdCByYWRpdXMsIHZlYzIgdGV4Q29vcmQpIHsgdmVjMiBjb29yZCA9
IHRleENvb3JkIC0gdV9zaGFkb3dPZmZzZXQgKyByYWRpdXMgKiB1X2JsdXJSYWRpdXM7IHJldHVy
biBTYW1wbGVyRnVuY3Rpb24oc19zYW1wbGVyLCBjb29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAw
LiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7IH0gdm9p
ZCBhcHBseUJsdXJGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvciwgdmVjMiB0ZXhDb29yZCkgeyB2ZWM0
IHRvdGFsID0gc2FtcGxlQ29sb3JBdFJhZGl1cygwLiwgdGV4Q29vcmQpICogdV9nYXVzc2lhbktl
cm5lbFswXTsgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsg
aSsrKSB7IHRvdGFsICs9IHNhbXBsZUNvbG9yQXRSYWRpdXMoZmxvYXQoaSkgKiBHQVVTU0lBTl9L
RVJORUxfU1RFUCwgdGV4Q29vcmQpICogdV9nYXVzc2lhbktlcm5lbFtpXTsgdG90YWwgKz0gc2Ft
cGxlQ29sb3JBdFJhZGl1cyhmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVAsIHRl
eENvb3JkKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07IH0gY29sb3IgPSB0b3RhbDsgfSB2b2lkIGFw
cGx5QWxwaGFCbHVyKGlub3V0IHZlYzQgY29sb3IsIHZlYzIgdGV4Q29vcmQpIHsgZmxvYXQgdG90
YWwgPSBzYW1wbGVBbHBoYUF0UmFkaXVzKDAuLCB0ZXhDb29yZCkgKiB1X2dhdXNzaWFuS2VybmVs
WzBdOyBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKysp
IHsgdG90YWwgKz0gc2FtcGxlQWxwaGFBdFJhZGl1cyhmbG9hdChpKSAqIEdBVVNTSUFOX0tFUk5F
TF9TVEVQLCB0ZXhDb29yZCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOyB0b3RhbCArPSBzYW1wbGVB
bHBoYUF0UmFkaXVzKGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCwgdGV4Q29v
cmQpICogdV9nYXVzc2lhbktlcm5lbFtpXTsgfSBjb2xvciAqPSB0b3RhbDsgfSB2ZWM0IHNvdXJj
ZU92ZXIodmVjNCBzcmMsIHZlYzQgZHN0KSB7IHJldHVybiBzcmMgKyBkc3QgKiAoMS4gLSBkc3Qu
YSk7IH0gdm9pZCBhcHBseUNvbnRlbnRUZXh0dXJlKGlub3V0IHZlYzQgY29sb3IsIHZlYzIgdGV4
Q29vcmQpIHsgdmVjNCBjb250ZW50Q29sb3IgPSB0ZXh0dXJlMkQoc19jb250ZW50VGV4dHVyZSwg
dGV4Q29vcmQpOyBjb2xvciA9IHNvdXJjZU92ZXIoY29udGVudENvbG9yLCBjb2xvcik7IH0gdm9p
ZCBhcHBseVNvbGlkQ29sb3IoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSB1X2NvbG9yOyB9
IHZvaWQgbWFpbih2b2lkKSB7IHZlYzQgY29sb3IgPSB2ZWM0KDEuLCAxLiwgMS4sIDEuKTsgdmVj
MiB0ZXhDb29yZCA9IHRyYW5zZm9ybVRleENvb3JkKCk7IGFwcGx5TWFudWFsUmVwZWF0SWZOZWVk
ZWQodGV4Q29vcmQpOyBhcHBseVRleHR1cmVJZk5lZWRlZChjb2xvciwgdGV4Q29vcmQpOyBhcHBs
eVNvbGlkQ29sb3JJZk5lZWRlZChjb2xvcik7IGFwcGx5QW50aWFsaWFzaW5nSWZOZWVkZWQoY29s
b3IpOyBhcHBseU9wYWNpdHlJZk5lZWRlZChjb2xvcik7IGFwcGx5R3JheXNjYWxlRmlsdGVySWZO
ZWVkZWQoY29sb3IpOyBhcHBseVNlcGlhRmlsdGVySWZOZWVkZWQoY29sb3IpOyBhcHBseVNhdHVy
YXRlRmlsdGVySWZOZWVkZWQoY29sb3IpOyBhcHBseUh1ZVJvdGF0ZUZpbHRlcklmTmVlZGVkKGNv
bG9yKTsgYXBwbHlJbnZlcnRGaWx0ZXJJZk5lZWRlZChjb2xvcik7IGFwcGx5QnJpZ2h0bmVzc0Zp
bHRlcklmTmVlZGVkKGNvbG9yKTsgYXBwbHlDb250cmFzdEZpbHRlcklmTmVlZGVkKGNvbG9yKTsg
YXBwbHlPcGFjaXR5RmlsdGVySWZOZWVkZWQoY29sb3IpOyBhcHBseUJsdXJGaWx0ZXJJZk5lZWRl
ZChjb2xvciwgdGV4Q29vcmQpOyBhcHBseUFscGhhQmx1cklmTmVlZGVkKGNvbG9yLCB0ZXhDb29y
ZCk7IGFwcGx5Q29udGVudFRleHR1cmVJZk5lZWRlZChjb2xvciwgdGV4Q29vcmQpOyBnbF9GcmFn
Q29sb3IgPSBjb2xvcjsgfQotLS0gZW5kIG9yaWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tCi0tLSBi
ZWdpbiB0cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0tCiNleHRlbnNpb24gR0xfQVJCX2dwdV9z
aGFkZXI1IDogZW5hYmxlCnVuaWZvcm0gbWF0NCB3ZWJnbF9mMGU4ZDNlODAwMDAwMDA0Owp1bmlm
b3JtIG1hdDQgd2ViZ2xfMTAzNjZlMWYwMDAwMDAxMjsKdW5pZm9ybSBzYW1wbGVyMkQgd2ViZ2xf
Mzc0ODE5N2MwMDAwMDAxMzsKdW5pZm9ybSBzYW1wbGVyMkQgd2ViZ2xfMmM1ZTYzODYwMDAwMDAx
NDsKdW5pZm9ybSBmbG9hdCB3ZWJnbF8zNjI3NTJmNzAwMDAwMDE1Owp2YXJ5aW5nIGZsb2F0IHdl
YmdsX2ZhNDc3ZDEzMDAwMDAwMDc7CnZhcnlpbmcgdmVjMiB3ZWJnbF82ZGE0MjcxODAwMDAwMDA1
Owp2YXJ5aW5nIHZlYzIgd2ViZ2xfMTFjNDc3MjIwMDAwMDAwNjsKdW5pZm9ybSBmbG9hdCB3ZWJn
bF9mM2NmMmI0MTAwMDAwMDE2Owp1bmlmb3JtIHZlYzIgd2ViZ2xfMjRlYTRkMzcwMDAwMDAxNzsK
dW5pZm9ybSB2ZWMyIHdlYmdsX2U2MmI5MDk4MDAwMDAwMTg7CnVuaWZvcm0gdmVjNCB3ZWJnbF82
MTdlY2Y1MjAwMDAwMDE5Owp1bmlmb3JtIGZsb2F0IHdlYmdsX2QxNTRkZjkxMDAwMDAwMWFbMTFd
OwpmbG9hdCB3ZWJnbF83MjZlYWE3MTAwMDAwMDFiKCl7CnJldHVybiBzbW9vdGhzdGVwKDAuMCwg
MS4wLCB3ZWJnbF9mYTQ3N2QxMzAwMDAwMDA3KTsKfQp2ZWMyIHdlYmdsXzllYWQwMGMxMDAwMDAw
MWMoKXsKdmVjNCB3ZWJnbF9lYWY3MTU3YzAwMDAwMDExID0gY2xhbXAodmVjNCh3ZWJnbF82ZGE0
MjcxODAwMDAwMDA1LCAwLjAsIDEuMCksIDAuMCwgMS4wKTsKcmV0dXJuICh3ZWJnbF9mMGU4ZDNl
ODAwMDAwMDA0ICogd2ViZ2xfZWFmNzE1N2MwMDAwMDAxMSkueHk7Cn0Kdm9pZCB3ZWJnbF85Yjgx
MWNlYjAwMDAwMDFkKGlub3V0IHZlYzIgd2ViZ2xfMWJjYzQ2ZjYwMDAwMDAwOSl7Cih3ZWJnbF8x
YmNjNDZmNjAwMDAwMDA5ID0gZnJhY3Qod2ViZ2xfMWJjYzQ2ZjYwMDAwMDAwOSkpOwp9CnZvaWQg
d2ViZ2xfNGU0MjRmZGEwMDAwMDAxZShpbm91dCB2ZWM0IHdlYmdsX2M1MjliYjUxMDAwMDAwMWYs
IGluIHZlYzIgd2ViZ2xfNGEwMDJkYjkwMDAwMDAyMCl7Cih3ZWJnbF9jNTI5YmI1MTAwMDAwMDFm
ID0gKHdlYmdsXzEwMzY2ZTFmMDAwMDAwMTIgKiB0ZXh0dXJlMkQod2ViZ2xfMzc0ODE5N2MwMDAw
MDAxMywgd2ViZ2xfNGEwMDJkYjkwMDAwMDAyMCkpKTsKfQp2b2lkIHdlYmdsX2UwZjE3YzVjMDAw
MDAwMjEoaW5vdXQgdmVjNCB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmKXsKKHdlYmdsX2M1MjliYjUx
MDAwMDAwMWYgKj0gd2ViZ2xfMzYyNzUyZjcwMDAwMDAxNSk7Cn0Kdm9pZCB3ZWJnbF9lMjg4N2Iy
ZDAwMDAwMDBhKGlub3V0IHZlYzQgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZil7Cih3ZWJnbF9jNTI5
YmI1MTAwMDAwMDFmICo9IHdlYmdsXzcyNmVhYTcxMDAwMDAwMWIoKSk7Cn0Kdm9pZCB3ZWJnbF9j
MWU5YWNkMzAwMDAwMDIyKGlub3V0IHZlYzQgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZil7CmZsb2F0
IHdlYmdsX2ExNzMyYWVmMDAwMDAwMjMgPSAoMS4wIC0gd2ViZ2xfZjNjZjJiNDEwMDAwMDAxNik7
Cih3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmID0gdmVjNCgoKCgoMC4yMTI1OTk5OSArICgwLjc4NzQw
MDAxICogd2ViZ2xfYTE3MzJhZWYwMDAwMDAyMykpICogd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi54
KSArICgoMC43MTUyMDAwMSAtICgwLjcxNTIwMDAxICogd2ViZ2xfYTE3MzJhZWYwMDAwMDAyMykp
ICogd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi55KSkgKyAoKDAuMDcyMiAtICgwLjA3MjIgKiB3ZWJn
bF9hMTczMmFlZjAwMDAwMDIzKSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnopKSwgKCgoKDAu
MjEyNTk5OTkgLSAoMC4yMTI1OTk5OSAqIHdlYmdsX2ExNzMyYWVmMDAwMDAwMjMpKSAqIHdlYmds
X2M1MjliYjUxMDAwMDAwMWYueCkgKyAoKDAuNzE1MjAwMDEgKyAoMC4yODQ3OTk5OSAqIHdlYmds
X2ExNzMyYWVmMDAwMDAwMjMpKSAqIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueSkpICsgKCgwLjA3
MjIgLSAoMC4wNzIyICogd2ViZ2xfYTE3MzJhZWYwMDAwMDAyMykpICogd2ViZ2xfYzUyOWJiNTEw
MDAwMDAxZi56KSksICgoKCgwLjIxMjU5OTk5IC0gKDAuMjEyNTk5OTkgKiB3ZWJnbF9hMTczMmFl
ZjAwMDAwMDIzKSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLngpICsgKCgwLjcxNTIwMDAxIC0g
KDAuNzE1MjAwMDEgKiB3ZWJnbF9hMTczMmFlZjAwMDAwMDIzKSkgKiB3ZWJnbF9jNTI5YmI1MTAw
MDAwMDFmLnkpKSArICgoMC4wNzIyICsgKDAuOTI3OCAqIHdlYmdsX2ExNzMyYWVmMDAwMDAwMjMp
KSAqIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueikpLCB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLncp
KTsKfQp2b2lkIHdlYmdsX2Y0OGMyODUyMDAwMDAwMjQoaW5vdXQgdmVjNCB3ZWJnbF9jNTI5YmI1
MTAwMDAwMDFmKXsKZmxvYXQgd2ViZ2xfYTE3MzJhZWYwMDAwMDAyMyA9ICgxLjAgLSB3ZWJnbF9m
M2NmMmI0MTAwMDAwMDE2KTsKKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYgPSB2ZWM0KCgoKCgwLjM5
MzAwMDAxICsgKDAuNjA2OTk5OTkgKiB3ZWJnbF9hMTczMmFlZjAwMDAwMDIzKSkgKiB3ZWJnbF9j
NTI5YmI1MTAwMDAwMDFmLngpICsgKCgwLjc2ODk5OTk5IC0gKDAuNzY4OTk5OTkgKiB3ZWJnbF9h
MTczMmFlZjAwMDAwMDIzKSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnkpKSArICgoMC4xODkg
LSAoMC4xODkgKiB3ZWJnbF9hMTczMmFlZjAwMDAwMDIzKSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAw
MDFmLnopKSwgKCgoKDAuMzQ5MDAwMDEgLSAoMC4zNDkwMDAwMSAqIHdlYmdsX2ExNzMyYWVmMDAw
MDAwMjMpKSAqIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueCkgKyAoKDAuNjg1OTk5OTkgKyAoMC4z
MTQwMDAwMSAqIHdlYmdsX2ExNzMyYWVmMDAwMDAwMjMpKSAqIHdlYmdsX2M1MjliYjUxMDAwMDAw
MWYueSkpICsgKCgwLjE2OCAtICgwLjE2OCAqIHdlYmdsX2ExNzMyYWVmMDAwMDAwMjMpKSAqIHdl
YmdsX2M1MjliYjUxMDAwMDAwMWYueikpLCAoKCgoMC4yNzIwMDAwMSAtICgwLjI3MjAwMDAxICog
d2ViZ2xfYTE3MzJhZWYwMDAwMDAyMykpICogd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi54KSArICgo
MC41MzM5OTk5OCAtICgwLjUzMzk5OTk4ICogd2ViZ2xfYTE3MzJhZWYwMDAwMDAyMykpICogd2Vi
Z2xfYzUyOWJiNTEwMDAwMDAxZi55KSkgKyAoKDAuMTMxICsgKDAuODY5MDAwMDIgKiB3ZWJnbF9h
MTczMmFlZjAwMDAwMDIzKSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnopKSwgd2ViZ2xfYzUy
OWJiNTEwMDAwMDAxZi53KSk7Cn0Kdm9pZCB3ZWJnbF9kMGJmODhlNDAwMDAwMDI1KGlub3V0IHZl
YzQgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZil7Cih3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmID0gdmVj
NCgoKCgoMC4yMTMgKyAoMC43ODcgKiB3ZWJnbF9mM2NmMmI0MTAwMDAwMDE2KSkgKiB3ZWJnbF9j
NTI5YmI1MTAwMDAwMDFmLngpICsgKCgwLjcxNDk5OTk3IC0gKDAuNzE0OTk5OTcgKiB3ZWJnbF9m
M2NmMmI0MTAwMDAwMDE2KSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnkpKSArICgoMC4wNzE5
OTk5OTcgLSAoMC4wNzE5OTk5OTcgKiB3ZWJnbF9mM2NmMmI0MTAwMDAwMDE2KSkgKiB3ZWJnbF9j
NTI5YmI1MTAwMDAwMDFmLnopKSwgKCgoKDAuMjEzIC0gKDAuMjEzICogd2ViZ2xfZjNjZjJiNDEw
MDAwMDAxNikpICogd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi54KSArICgoMC43MTQ5OTk5NyArICgw
LjI4NSAqIHdlYmdsX2YzY2YyYjQxMDAwMDAwMTYpKSAqIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYu
eSkpICsgKCgwLjA3MTk5OTk5NyAtICgwLjA3MTk5OTk5NyAqIHdlYmdsX2YzY2YyYjQxMDAwMDAw
MTYpKSAqIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueikpLCAoKCgoMC4yMTMgLSAoMC4yMTMgKiB3
ZWJnbF9mM2NmMmI0MTAwMDAwMDE2KSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLngpICsgKCgw
LjcxNDk5OTk3IC0gKDAuNzE0OTk5OTcgKiB3ZWJnbF9mM2NmMmI0MTAwMDAwMDE2KSkgKiB3ZWJn
bF9jNTI5YmI1MTAwMDAwMDFmLnkpKSArICgoMC4wNzE5OTk5OTcgKyAoMC45Mjc5OTk5NyAqIHdl
YmdsX2YzY2YyYjQxMDAwMDAwMTYpKSAqIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueikpLCB3ZWJn
bF9jNTI5YmI1MTAwMDAwMDFmLncpKTsKfQp2b2lkIHdlYmdsXzI2NDNkODQwMDAwMDAwMjYoaW5v
dXQgdmVjNCB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmKXsKZmxvYXQgd2ViZ2xfNDE4ZjMwMWUwMDAw
MDAyNyA9IDMuMTQxNTkyNzsKZmxvYXQgd2ViZ2xfYzZlYzIxMTkwMDAwMDAyOCA9IGNvcygoKHdl
YmdsX2YzY2YyYjQxMDAwMDAwMTYgKiB3ZWJnbF80MThmMzAxZTAwMDAwMDI3KSAvIDE4MC4wKSk7
CmZsb2F0IHdlYmdsXzdlYWJhNzdhMDAwMDAwMjkgPSBzaW4oKCh3ZWJnbF9mM2NmMmI0MTAwMDAw
MDE2ICogd2ViZ2xfNDE4ZjMwMWUwMDAwMDAyNykgLyAxODAuMCkpOwood2ViZ2xfYzUyOWJiNTEw
MDAwMDAxZiA9IHZlYzQoKCgod2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi54ICogKCgwLjIxMyArICh3
ZWJnbF9jNmVjMjExOTAwMDAwMDI4ICogMC43ODcpKSAtICh3ZWJnbF83ZWFiYTc3YTAwMDAwMDI5
ICogMC4yMTMpKSkgKyAod2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi55ICogKCgwLjcxNDk5OTk3IC0g
KHdlYmdsX2M2ZWMyMTE5MDAwMDAwMjggKiAwLjcxNDk5OTk3KSkgLSAod2ViZ2xfN2VhYmE3N2Ew
MDAwMDAyOSAqIDAuNzE0OTk5OTcpKSkpICsgKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueiAqICgo
MC4wNzE5OTk5OTcgLSAod2ViZ2xfYzZlYzIxMTkwMDAwMDAyOCAqIDAuMDcxOTk5OTk3KSkgKyAo
d2ViZ2xfN2VhYmE3N2EwMDAwMDAyOSAqIDAuOTI3OTk5OTcpKSkpLCAoKCh3ZWJnbF9jNTI5YmI1
MTAwMDAwMDFmLnggKiAoKDAuMjEzIC0gKHdlYmdsX2M2ZWMyMTE5MDAwMDAwMjggKiAwLjIxMykp
ICsgKHdlYmdsXzdlYWJhNzdhMDAwMDAwMjkgKiAwLjE0MzAwMDAxKSkpICsgKHdlYmdsX2M1Mjli
YjUxMDAwMDAwMWYueSAqICgoMC43MTQ5OTk5NyArICh3ZWJnbF9jNmVjMjExOTAwMDAwMDI4ICog
MC4yODUpKSArICh3ZWJnbF83ZWFiYTc3YTAwMDAwMDI5ICogMC4xNCkpKSkgKyAod2ViZ2xfYzUy
OWJiNTEwMDAwMDAxZi56ICogKCgwLjA3MTk5OTk5NyAtICh3ZWJnbF9jNmVjMjExOTAwMDAwMDI4
ICogMC4wNzE5OTk5OTcpKSAtICh3ZWJnbF83ZWFiYTc3YTAwMDAwMDI5ICogMC4yODI5OTk5OSkp
KSksICgoKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueCAqICgoMC4yMTMgLSAod2ViZ2xfYzZlYzIx
MTkwMDAwMDAyOCAqIDAuMjEzKSkgLSAod2ViZ2xfN2VhYmE3N2EwMDAwMDAyOSAqIDAuNzg3KSkp
ICsgKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueSAqICgoMC43MTQ5OTk5NyAtICh3ZWJnbF9jNmVj
MjExOTAwMDAwMDI4ICogMC43MTQ5OTk5NykpICsgKHdlYmdsXzdlYWJhNzdhMDAwMDAwMjkgKiAw
LjcxNDk5OTk3KSkpKSArICh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnogKiAoKDAuMDcxOTk5OTk3
ICsgKHdlYmdsX2M2ZWMyMTE5MDAwMDAwMjggKiAwLjkyNzk5OTk3KSkgKyAod2ViZ2xfN2VhYmE3
N2EwMDAwMDAyOSAqIDAuMDcxOTk5OTk3KSkpKSwgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi53KSk7
Cn0KZmxvYXQgd2ViZ2xfNWIwMTM5NGMwMDAwMDAyYShpbiBmbG9hdCB3ZWJnbF8zMThjMGE2MjAw
MDAwMDJiKXsKcmV0dXJuICgoKDEuMCAtIHdlYmdsXzMxOGMwYTYyMDAwMDAwMmIpICogd2ViZ2xf
ZjNjZjJiNDEwMDAwMDAxNikgKyAod2ViZ2xfMzE4YzBhNjIwMDAwMDAyYiAqICgxLjAgLSB3ZWJn
bF9mM2NmMmI0MTAwMDAwMDE2KSkpOwp9CnZvaWQgd2ViZ2xfYWEzOTExZDEwMDAwMDAyYyhpbm91
dCB2ZWM0IHdlYmdsX2M1MjliYjUxMDAwMDAwMWYpewood2ViZ2xfYzUyOWJiNTEwMDAwMDAxZiA9
IHZlYzQod2ViZ2xfNWIwMTM5NGMwMDAwMDAyYSh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLngpLCB3
ZWJnbF81YjAxMzk0YzAwMDAwMDJhKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueSksIHdlYmdsXzVi
MDEzOTRjMDAwMDAwMmEod2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi56KSwgd2ViZ2xfYzUyOWJiNTEw
MDAwMDAxZi53KSk7Cn0Kdm9pZCB3ZWJnbF8xYzExZWNmYjAwMDAwMDJkKGlub3V0IHZlYzQgd2Vi
Z2xfYzUyOWJiNTEwMDAwMDAxZil7Cih3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmID0gdmVjNCgod2Vi
Z2xfYzUyOWJiNTEwMDAwMDAxZi54eXogKiB3ZWJnbF9mM2NmMmI0MTAwMDAwMDE2KSwgd2ViZ2xf
YzUyOWJiNTEwMDAwMDAxZi53KSk7Cn0KZmxvYXQgd2ViZ2xfNjhjOTQ2NDUwMDAwMDAyZShpbiBm
bG9hdCB3ZWJnbF8zMThjMGE2MjAwMDAwMDJiKXsKcmV0dXJuICgoKHdlYmdsXzMxOGMwYTYyMDAw
MDAwMmIgLSAwLjUpICogd2ViZ2xfZjNjZjJiNDEwMDAwMDAxNikgKyAwLjUpOwp9CnZvaWQgd2Vi
Z2xfOGNjZjU1M2MwMDAwMDAyZihpbm91dCB2ZWM0IHdlYmdsX2M1MjliYjUxMDAwMDAwMWYpewoo
d2ViZ2xfYzUyOWJiNTEwMDAwMDAxZiA9IHZlYzQod2ViZ2xfNjhjOTQ2NDUwMDAwMDAyZSh3ZWJn
bF9jNTI5YmI1MTAwMDAwMDFmLngpLCB3ZWJnbF82OGM5NDY0NTAwMDAwMDJlKHdlYmdsX2M1Mjli
YjUxMDAwMDAwMWYueSksIHdlYmdsXzY4Yzk0NjQ1MDAwMDAwMmUod2ViZ2xfYzUyOWJiNTEwMDAw
MDAxZi56KSwgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi53KSk7Cn0Kdm9pZCB3ZWJnbF85MzdkYTBi
ZDAwMDAwMDMwKGlub3V0IHZlYzQgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZil7Cih3ZWJnbF9jNTI5
YmI1MTAwMDAwMDFmID0gdmVjNCh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLngsIHdlYmdsX2M1Mjli
YjUxMDAwMDAwMWYueSwgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi56LCAod2ViZ2xfYzUyOWJiNTEw
MDAwMDAxZi53ICogd2ViZ2xfZjNjZjJiNDEwMDAwMDAxNikpKTsKfQp2ZWM0IHdlYmdsX2Y4MDk5
YjYwMDAwMDAwMzEoaW4gZmxvYXQgd2ViZ2xfM2MyYWE1NDgwMDAwMDAzMiwgaW4gdmVjMiB3ZWJn
bF80YTAwMmRiOTAwMDAwMDIwKXsKdmVjMiB3ZWJnbF85NmU0N2FmNjAwMDAwMDMzID0gKHdlYmds
XzRhMDAyZGI5MDAwMDAwMjAgKyAod2ViZ2xfM2MyYWE1NDgwMDAwMDAzMiAqIHdlYmdsXzI0ZWE0
ZDM3MDAwMDAwMTcpKTsKcmV0dXJuICh0ZXh0dXJlMkQod2ViZ2xfMzc0ODE5N2MwMDAwMDAxMywg
d2ViZ2xfOTZlNDdhZjYwMDAwMDAzMykgKiBmbG9hdCgoKCgoKCgod2ViZ2xfOTZlNDdhZjYwMDAw
MDAzMy54ID4gMC4wKSkgPyAoKHdlYmdsXzk2ZTQ3YWY2MDAwMDAwMzMueSA+IDAuMCkpIDogKGZh
bHNlKSkpID8gKCh3ZWJnbF85NmU0N2FmNjAwMDAwMDMzLnggPCAxLjApKSA6IChmYWxzZSkpKSA/
ICgod2ViZ2xfOTZlNDdhZjYwMDAwMDAzMy55IDwgMS4wKSkgOiAoZmFsc2UpKSkpOwp9CmZsb2F0
IHdlYmdsXzhlMWNhZDRlMDAwMDAwMzQoaW4gZmxvYXQgd2ViZ2xfM2MyYWE1NDgwMDAwMDAzMiwg
aW4gdmVjMiB3ZWJnbF80YTAwMmRiOTAwMDAwMDIwKXsKdmVjMiB3ZWJnbF85NmU0N2FmNjAwMDAw
MDMzID0gKCh3ZWJnbF80YTAwMmRiOTAwMDAwMDIwIC0gd2ViZ2xfZTYyYjkwOTgwMDAwMDAxOCkg
KyAod2ViZ2xfM2MyYWE1NDgwMDAwMDAzMiAqIHdlYmdsXzI0ZWE0ZDM3MDAwMDAwMTcpKTsKcmV0
dXJuICh0ZXh0dXJlMkQod2ViZ2xfMzc0ODE5N2MwMDAwMDAxMywgd2ViZ2xfOTZlNDdhZjYwMDAw
MDAzMykudyAqIGZsb2F0KCgoKCgoKCh3ZWJnbF85NmU0N2FmNjAwMDAwMDMzLnggPiAwLjApKSA/
ICgod2ViZ2xfOTZlNDdhZjYwMDAwMDAzMy55ID4gMC4wKSkgOiAoZmFsc2UpKSkgPyAoKHdlYmds
Xzk2ZTQ3YWY2MDAwMDAwMzMueCA8IDEuMCkpIDogKGZhbHNlKSkpID8gKCh3ZWJnbF85NmU0N2Fm
NjAwMDAwMDMzLnkgPCAxLjApKSA6IChmYWxzZSkpKSk7Cn0Kdm9pZCB3ZWJnbF9iMzdlZTYyYjAw
MDAwMDM1KGlub3V0IHZlYzQgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZiwgaW4gdmVjMiB3ZWJnbF80
YTAwMmRiOTAwMDAwMDIwKXsKdmVjNCB3ZWJnbF8zODE4MmVjMjAwMDAwMDM2ID0gKHdlYmdsX2Y4
MDk5YjYwMDAwMDAwMzEoMC4wLCB3ZWJnbF80YTAwMmRiOTAwMDAwMDIwKSAqIHdlYmdsX2QxNTRk
ZjkxMDAwMDAwMWFbMF0pOwpmb3IgKGludCB3ZWJnbF81MWY2NmFmYzAwMDAwMDM3ID0gMTsgKHdl
YmdsXzUxZjY2YWZjMDAwMDAwMzcgPCAxMSk7ICh3ZWJnbF81MWY2NmFmYzAwMDAwMDM3KyspKQp7
Cih3ZWJnbF8zODE4MmVjMjAwMDAwMDM2ICs9ICh3ZWJnbF9mODA5OWI2MDAwMDAwMDMxKChmbG9h
dCh3ZWJnbF81MWY2NmFmYzAwMDAwMDM3KSAqIDAuMiksIHdlYmdsXzRhMDAyZGI5MDAwMDAwMjAp
ICogd2ViZ2xfZDE1NGRmOTEwMDAwMDAxYVtpbnQoY2xhbXAoZmxvYXQod2ViZ2xfNTFmNjZhZmMw
MDAwMDAzNyksIDAuMCwgZmxvYXQoMTApKSldKSk7Cih3ZWJnbF8zODE4MmVjMjAwMDAwMDM2ICs9
ICh3ZWJnbF9mODA5OWI2MDAwMDAwMDMxKChmbG9hdCgoLTEgKiB3ZWJnbF81MWY2NmFmYzAwMDAw
MDM3KSkgKiAwLjIpLCB3ZWJnbF80YTAwMmRiOTAwMDAwMDIwKSAqIHdlYmdsX2QxNTRkZjkxMDAw
MDAwMWFbaW50KGNsYW1wKGZsb2F0KHdlYmdsXzUxZjY2YWZjMDAwMDAwMzcpLCAwLjAsIGZsb2F0
KDEwKSkpXSkpOwp9Cih3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmID0gd2ViZ2xfMzgxODJlYzIwMDAw
MDAzNik7Cn0Kdm9pZCB3ZWJnbF9jYmE1YjMwNTAwMDAwMDM4KGlub3V0IHZlYzQgd2ViZ2xfYzUy
OWJiNTEwMDAwMDAxZiwgaW4gdmVjMiB3ZWJnbF80YTAwMmRiOTAwMDAwMDIwKXsKZmxvYXQgd2Vi
Z2xfMzgxODJlYzIwMDAwMDAzNiA9ICh3ZWJnbF84ZTFjYWQ0ZTAwMDAwMDM0KDAuMCwgd2ViZ2xf
NGEwMDJkYjkwMDAwMDAyMCkgKiB3ZWJnbF9kMTU0ZGY5MTAwMDAwMDFhWzBdKTsKZm9yIChpbnQg
d2ViZ2xfNTFmNjZhZmMwMDAwMDAzNyA9IDE7ICh3ZWJnbF81MWY2NmFmYzAwMDAwMDM3IDwgMTEp
OyAod2ViZ2xfNTFmNjZhZmMwMDAwMDAzNysrKSkKewood2ViZ2xfMzgxODJlYzIwMDAwMDAzNiAr
PSAod2ViZ2xfOGUxY2FkNGUwMDAwMDAzNCgoZmxvYXQod2ViZ2xfNTFmNjZhZmMwMDAwMDAzNykg
KiAwLjIpLCB3ZWJnbF80YTAwMmRiOTAwMDAwMDIwKSAqIHdlYmdsX2QxNTRkZjkxMDAwMDAwMWFb
aW50KGNsYW1wKGZsb2F0KHdlYmdsXzUxZjY2YWZjMDAwMDAwMzcpLCAwLjAsIGZsb2F0KDEwKSkp
XSkpOwood2ViZ2xfMzgxODJlYzIwMDAwMDAzNiArPSAod2ViZ2xfOGUxY2FkNGUwMDAwMDAzNCgo
ZmxvYXQoKC0xICogd2ViZ2xfNTFmNjZhZmMwMDAwMDAzNykpICogMC4yKSwgd2ViZ2xfNGEwMDJk
YjkwMDAwMDAyMCkgKiB3ZWJnbF9kMTU0ZGY5MTAwMDAwMDFhW2ludChjbGFtcChmbG9hdCh3ZWJn
bF81MWY2NmFmYzAwMDAwMDM3KSwgMC4wLCBmbG9hdCgxMCkpKV0pKTsKfQood2ViZ2xfYzUyOWJi
NTEwMDAwMDAxZiAqPSB3ZWJnbF8zODE4MmVjMjAwMDAwMDM2KTsKfQp2ZWM0IHdlYmdsX2RkMGVh
NDg4MDAwMDAwMzkoaW4gdmVjNCB3ZWJnbF82Y2FmYmY4MzAwMDAwMDNhLCBpbiB2ZWM0IHdlYmds
XzEzNDliMDUyMDAwMDAwM2IpewpyZXR1cm4gKHdlYmdsXzZjYWZiZjgzMDAwMDAwM2EgKyAod2Vi
Z2xfMTM0OWIwNTIwMDAwMDAzYiAqICgxLjAgLSB3ZWJnbF8xMzQ5YjA1MjAwMDAwMDNiLncpKSk7
Cn0Kdm9pZCB3ZWJnbF9lYTljMzNmZDAwMDAwMDNjKGlub3V0IHZlYzQgd2ViZ2xfYzUyOWJiNTEw
MDAwMDAxZiwgaW4gdmVjMiB3ZWJnbF80YTAwMmRiOTAwMDAwMDIwKXsKdmVjNCB3ZWJnbF9kY2Ew
Y2RiYjAwMDAwMDNkID0gdGV4dHVyZTJEKHdlYmdsXzJjNWU2Mzg2MDAwMDAwMTQsIHdlYmdsXzRh
MDAyZGI5MDAwMDAwMjApOwood2ViZ2xfYzUyOWJiNTEwMDAwMDAxZiA9IHdlYmdsX2RkMGVhNDg4
MDAwMDAwMzkod2ViZ2xfZGNhMGNkYmIwMDAwMDAzZCwgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZikp
Owp9CnZvaWQgd2ViZ2xfNDdjNjdmYTEwMDAwMDAzZShpbm91dCB2ZWM0IHdlYmdsX2M1MjliYjUx
MDAwMDAwMWYpewood2ViZ2xfYzUyOWJiNTEwMDAwMDAxZiAqPSB3ZWJnbF82MTdlY2Y1MjAwMDAw
MDE5KTsKfQp2b2lkIG1haW4oKXsKKGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwg
MC4wKSk7CnZlYzQgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZiA9IHZlYzQoMS4wLCAxLjAsIDEuMCwg
MS4wKTsKdmVjMiB3ZWJnbF80YTAwMmRiOTAwMDAwMDIwID0gd2ViZ2xfOWVhZDAwYzEwMDAwMDAx
YygpOwp3ZWJnbF85YjgxMWNlYjAwMDAwMDFkKHdlYmdsXzRhMDAyZGI5MDAwMDAwMjApOwp3ZWJn
bF80ZTQyNGZkYTAwMDAwMDFlKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYsIHdlYmdsXzRhMDAyZGI5
MDAwMDAwMjApOwp3ZWJnbF80N2M2N2ZhMTAwMDAwMDNlKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYp
Owp3ZWJnbF9lMjg4N2IyZDAwMDAwMDBhKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYpOwp3ZWJnbF9l
MGYxN2M1YzAwMDAwMDIxKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYpOwp3ZWJnbF9jMWU5YWNkMzAw
MDAwMDIyKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYpOwp3ZWJnbF9mNDhjMjg1MjAwMDAwMDI0KHdl
YmdsX2M1MjliYjUxMDAwMDAwMWYpOwp3ZWJnbF9kMGJmODhlNDAwMDAwMDI1KHdlYmdsX2M1Mjli
YjUxMDAwMDAwMWYpOwp3ZWJnbF8yNjQzZDg0MDAwMDAwMDI2KHdlYmdsX2M1MjliYjUxMDAwMDAw
MWYpOwp3ZWJnbF9hYTM5MTFkMTAwMDAwMDJjKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYpOwp3ZWJn
bF8xYzExZWNmYjAwMDAwMDJkKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYpOwp3ZWJnbF84Y2NmNTUz
YzAwMDAwMDJmKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYpOwp3ZWJnbF85MzdkYTBiZDAwMDAwMDMw
KHdlYmdsX2M1MjliYjUxMDAwMDAwMWYpOwp3ZWJnbF9iMzdlZTYyYjAwMDAwMDM1KHdlYmdsX2M1
MjliYjUxMDAwMDAwMWYsIHdlYmdsXzRhMDAyZGI5MDAwMDAwMjApOwp3ZWJnbF9jYmE1YjMwNTAw
MDAwMDM4KHdlYmdsX2M1MjliYjUxMDAwMDAwMWYsIHdlYmdsXzRhMDAyZGI5MDAwMDAwMjApOwp3
ZWJnbF9lYTljMzNmZDAwMDAwMDNjKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYsIHdlYmdsXzRhMDAy
ZGI5MDAwMDAwMjApOwooZ2xfRnJhZ0NvbG9yID0gd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZik7Cn0K
Ci0tLSBlbmQgdHJhbnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>317919</attachid>
            <date>2017-08-10 23:32:53 -0700</date>
            <delta_ts>2017-08-10 23:32:53 -0700</delta_ts>
            <desc>ANGLE translation of TexMap shaders on OpenGL 4.3</desc>
            <filename>gl43-shaders.txt</filename>
            <type>text/plain</type>
            <size>23838</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">Y29tcGlsZVNoYWRlcigpIHZlcnRleDoKLS0tIGJlZ2luIG9yaWdpbmFsIHNoYWRlciBzb3VyY2Ug
LS0tCiNkZWZpbmUgRU5BQkxFX1RleHR1cmUKI2RlZmluZSBhcHBseVRleHR1cmVJZk5lZWRlZCBh
cHBseVRleHR1cmUKI2RlZmluZSBhcHBseVJlY3RJZk5lZWRlZCBub29wCiNkZWZpbmUgRU5BQkxF
X1NvbGlkQ29sb3IKI2RlZmluZSBhcHBseVNvbGlkQ29sb3JJZk5lZWRlZCBhcHBseVNvbGlkQ29s
b3IKI2RlZmluZSBFTkFCTEVfT3BhY2l0eQojZGVmaW5lIGFwcGx5T3BhY2l0eUlmTmVlZGVkIGFw
cGx5T3BhY2l0eQojZGVmaW5lIEVOQUJMRV9BbnRpYWxpYXNpbmcKI2RlZmluZSBhcHBseUFudGlh
bGlhc2luZ0lmTmVlZGVkIGFwcGx5QW50aWFsaWFzaW5nCiNkZWZpbmUgRU5BQkxFX0dyYXlzY2Fs
ZUZpbHRlcgojZGVmaW5lIGFwcGx5R3JheXNjYWxlRmlsdGVySWZOZWVkZWQgYXBwbHlHcmF5c2Nh
bGVGaWx0ZXIKI2RlZmluZSBFTkFCTEVfU2VwaWFGaWx0ZXIKI2RlZmluZSBhcHBseVNlcGlhRmls
dGVySWZOZWVkZWQgYXBwbHlTZXBpYUZpbHRlcgojZGVmaW5lIEVOQUJMRV9TYXR1cmF0ZUZpbHRl
cgojZGVmaW5lIGFwcGx5U2F0dXJhdGVGaWx0ZXJJZk5lZWRlZCBhcHBseVNhdHVyYXRlRmlsdGVy
CiNkZWZpbmUgRU5BQkxFX0h1ZVJvdGF0ZUZpbHRlcgojZGVmaW5lIGFwcGx5SHVlUm90YXRlRmls
dGVySWZOZWVkZWQgYXBwbHlIdWVSb3RhdGVGaWx0ZXIKI2RlZmluZSBFTkFCTEVfQnJpZ2h0bmVz
c0ZpbHRlcgojZGVmaW5lIGFwcGx5QnJpZ2h0bmVzc0ZpbHRlcklmTmVlZGVkIGFwcGx5QnJpZ2h0
bmVzc0ZpbHRlcgojZGVmaW5lIEVOQUJMRV9Db250cmFzdEZpbHRlcgojZGVmaW5lIGFwcGx5Q29u
dHJhc3RGaWx0ZXJJZk5lZWRlZCBhcHBseUNvbnRyYXN0RmlsdGVyCiNkZWZpbmUgRU5BQkxFX0lu
dmVydEZpbHRlcgojZGVmaW5lIGFwcGx5SW52ZXJ0RmlsdGVySWZOZWVkZWQgYXBwbHlJbnZlcnRG
aWx0ZXIKI2RlZmluZSBFTkFCTEVfT3BhY2l0eUZpbHRlcgojZGVmaW5lIGFwcGx5T3BhY2l0eUZp
bHRlcklmTmVlZGVkIGFwcGx5T3BhY2l0eUZpbHRlcgojZGVmaW5lIEVOQUJMRV9CbHVyRmlsdGVy
CiNkZWZpbmUgYXBwbHlCbHVyRmlsdGVySWZOZWVkZWQgYXBwbHlCbHVyRmlsdGVyCiNkZWZpbmUg
RU5BQkxFX0FscGhhQmx1cgojZGVmaW5lIGFwcGx5QWxwaGFCbHVySWZOZWVkZWQgYXBwbHlBbHBo
YUJsdXIKI2RlZmluZSBFTkFCTEVfQ29udGVudFRleHR1cmUKI2RlZmluZSBhcHBseUNvbnRlbnRU
ZXh0dXJlSWZOZWVkZWQgYXBwbHlDb250ZW50VGV4dHVyZQojZGVmaW5lIEVOQUJMRV9NYW51YWxS
ZXBlYXQKI2RlZmluZSBhcHBseU1hbnVhbFJlcGVhdElmTmVlZGVkIGFwcGx5TWFudWFsUmVwZWF0
CiNpZmRlZiBHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSAojZGVmaW5lIFRleHR1cmVTcGFjZU1h
dHJpeFByZWNpc2lvbiBoaWdocAojZWxzZQojZGVmaW5lIFRleHR1cmVTcGFjZU1hdHJpeFByZWNp
c2lvbiBtZWRpdW1wCiNlbmRpZgpwcmVjaXNpb24gVGV4dHVyZVNwYWNlTWF0cml4UHJlY2lzaW9u
IGZsb2F0OyBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsgdW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3
TWF0cml4OyB1bmlmb3JtIG1hdDQgdV9wcm9qZWN0aW9uTWF0cml4OyB1bmlmb3JtIG1hdDQgdV90
ZXh0dXJlU3BhY2VNYXRyaXg7IHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyB2YXJ5aW5nIHZlYzIg
dl90cmFuc2Zvcm1lZFRleENvb3JkOyB2YXJ5aW5nIGZsb2F0IHZfYW50aWFsaWFzOyB2b2lkIG5v
b3AoaW5vdXQgdmVjMiBkdW1teVBhcmFtZXRlcikgeyB9IHZlYzQgdG9WaWV3cG9ydFNwYWNlKHZl
YzIgcG9zKSB7IHJldHVybiB2ZWM0KHBvcywgMC4sIDEuKSAqIHVfbW9kZWxWaWV3TWF0cml4OyB9
IHZvaWQgYXBwbHlBbnRpYWxpYXNpbmcoaW5vdXQgdmVjMiBwb3NpdGlvbikgeyBjb25zdCB2ZWMy
IGNlbnRlciA9IHZlYzIoMC41LCAwLjUpOyBjb25zdCBmbG9hdCBhbnRpYWxpYXNJbmZsYXRpb25E
aXN0YW5jZSA9IDEuOyB2ZWMyIGNvbnRyb2xQb2ludCA9IGFfdmVydGV4Lnp3OyB2ZWM0IGNlbnRl
ckluVmlld3BvcnRDb29yZGluYXRlcyA9IHRvVmlld3BvcnRTcGFjZShjZW50ZXIpOyB2ZWM0IGNv
bnRyb2xQb2ludEluVmlld3BvcnRDb29yZGluYXRlcyA9IHRvVmlld3BvcnRTcGFjZShjb250cm9s
UG9pbnQpOyBmbG9hdCB2aWV3cG9ydFNwYWNlRGlzdGFuY2UgPSBkaXN0YW5jZShjZW50ZXJJblZp
ZXdwb3J0Q29vcmRpbmF0ZXMsIGNvbnRyb2xQb2ludEluVmlld3BvcnRDb29yZGluYXRlcyk7IGZs
b2F0IGluZmxhdGlvblJhdGlvID0gKHZpZXdwb3J0U3BhY2VEaXN0YW5jZSArIGFudGlhbGlhc0lu
ZmxhdGlvbkRpc3RhbmNlKSAvIHZpZXdwb3J0U3BhY2VEaXN0YW5jZTsgdl9hbnRpYWxpYXMgPSBk
aXN0YW5jZShjb250cm9sUG9pbnQsIHBvc2l0aW9uKSAqIDIuICogaW5mbGF0aW9uUmF0aW8gLyAo
aW5mbGF0aW9uUmF0aW8gLSAxLik7IHBvc2l0aW9uID0gY2VudGVyICsgKHBvc2l0aW9uIC0gY2Vu
dGVyKSAqIGluZmxhdGlvblJhdGlvOyB9IHZvaWQgbWFpbih2b2lkKSB7IHZlYzIgcG9zaXRpb24g
PSBhX3ZlcnRleC54eTsgYXBwbHlBbnRpYWxpYXNpbmdJZk5lZWRlZChwb3NpdGlvbik7IHZfdGV4
Q29vcmQgPSBwb3NpdGlvbjsgdmVjNCBjbGFtcGVkUG9zaXRpb24gPSBjbGFtcCh2ZWM0KHBvc2l0
aW9uLCAwLiwgMS4pLCAwLiwgMS4pOyB2X3RyYW5zZm9ybWVkVGV4Q29vcmQgPSAodV90ZXh0dXJl
U3BhY2VNYXRyaXggKiBjbGFtcGVkUG9zaXRpb24pLnh5OyBnbF9Qb3NpdGlvbiA9IHVfcHJvamVj
dGlvbk1hdHJpeCAqIHVfbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsg
fQotLS0gZW5kIG9yaWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tCi0tLSBiZWdpbiB0cmFuc2xhdGVk
IHNoYWRlciBzb3VyY2UgLS0tCiN2ZXJzaW9uIDE1MAojZXh0ZW5zaW9uIEdMX0FSQl9ncHVfc2hh
ZGVyNSA6IGVuYWJsZQppbiB2ZWM0IHdlYmdsXzUzZTAxOWQ0MDAwMDAwMDE7CnVuaWZvcm0gbWF0
NCB3ZWJnbF82MjEzZDllMDAwMDAwMDAyOwp1bmlmb3JtIG1hdDQgd2ViZ2xfYjc4NDkxZGMwMDAw
MDAwMzsKdW5pZm9ybSBtYXQ0IHdlYmdsX2YwZThkM2U4MDAwMDAwMDQ7Cm91dCB2ZWMyIHdlYmds
XzZkYTQyNzE4MDAwMDAwMDU7Cm91dCB2ZWMyIHdlYmdsXzExYzQ3NzIyMDAwMDAwMDY7Cm91dCBm
bG9hdCB3ZWJnbF9mYTQ3N2QxMzAwMDAwMDA3Owp2ZWM0IHdlYmdsXzhhMDY0NTA2MDAwMDAwMDgo
aW4gdmVjMiB3ZWJnbF8xYmNjNDZmNjAwMDAwMDA5KXsKcmV0dXJuICh2ZWM0KHdlYmdsXzFiY2M0
NmY2MDAwMDAwMDksIDAuMCwgMS4wKSAqIHdlYmdsXzYyMTNkOWUwMDAwMDAwMDIpOwp9CnZvaWQg
d2ViZ2xfZTI4ODdiMmQwMDAwMDAwYShpbm91dCB2ZWMyIHdlYmdsX2M4YWQ2MTNmMDAwMDAwMGIp
ewp2ZWMyIHdlYmdsX2UyMjQwMGU0MDAwMDAwMGMgPSB3ZWJnbF81M2UwMTlkNDAwMDAwMDAxLnp3
Owp2ZWM0IHdlYmdsXzg3OTc4ZTVhMDAwMDAwMGQgPSB3ZWJnbF84YTA2NDUwNjAwMDAwMDA4KHZl
YzIoMC41LCAwLjUpKTsKdmVjNCB3ZWJnbF84MTc5MmEwOTAwMDAwMDBlID0gd2ViZ2xfOGEwNjQ1
MDYwMDAwMDAwOCh3ZWJnbF9lMjI0MDBlNDAwMDAwMDBjKTsKZmxvYXQgd2ViZ2xfNjUyYmVkZDkw
MDAwMDAwZiA9IGRpc3RhbmNlKHdlYmdsXzg3OTc4ZTVhMDAwMDAwMGQsIHdlYmdsXzgxNzkyYTA5
MDAwMDAwMGUpOwpmbG9hdCB3ZWJnbF9kMmY1ODg0ZDAwMDAwMDEwID0gKCh3ZWJnbF82NTJiZWRk
OTAwMDAwMDBmICsgMS4wKSAvIHdlYmdsXzY1MmJlZGQ5MDAwMDAwMGYpOwood2ViZ2xfZmE0Nzdk
MTMwMDAwMDAwNyA9ICgoKGRpc3RhbmNlKHdlYmdsX2UyMjQwMGU0MDAwMDAwMGMsIHdlYmdsX2M4
YWQ2MTNmMDAwMDAwMGIpICogMi4wKSAqIHdlYmdsX2QyZjU4ODRkMDAwMDAwMTApIC8gKHdlYmds
X2QyZjU4ODRkMDAwMDAwMTAgLSAxLjApKSk7Cih3ZWJnbF9jOGFkNjEzZjAwMDAwMDBiID0gKHZl
YzIoMC41LCAwLjUpICsgKCh3ZWJnbF9jOGFkNjEzZjAwMDAwMDBiIC0gdmVjMigwLjUsIDAuNSkp
ICogd2ViZ2xfZDJmNTg4NGQwMDAwMDAxMCkpKTsKfQp2b2lkIG1haW4oKXsKKGdsX1Bvc2l0aW9u
ID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApKTsKKHdlYmdsX2ZhNDc3ZDEzMDAwMDAwMDcgPSAw
LjApOwood2ViZ2xfMTFjNDc3MjIwMDAwMDAwNiA9IHZlYzIoMC4wLCAwLjApKTsKKHdlYmdsXzZk
YTQyNzE4MDAwMDAwMDUgPSB2ZWMyKDAuMCwgMC4wKSk7CnZlYzIgd2ViZ2xfYzhhZDYxM2YwMDAw
MDAwYiA9IHdlYmdsXzUzZTAxOWQ0MDAwMDAwMDEueHk7CndlYmdsX2UyODg3YjJkMDAwMDAwMGEo
d2ViZ2xfYzhhZDYxM2YwMDAwMDAwYik7Cih3ZWJnbF82ZGE0MjcxODAwMDAwMDA1ID0gd2ViZ2xf
YzhhZDYxM2YwMDAwMDAwYik7CnZlYzQgd2ViZ2xfZWFmNzE1N2MwMDAwMDAxMSA9IGNsYW1wKHZl
YzQod2ViZ2xfYzhhZDYxM2YwMDAwMDAwYiwgMC4wLCAxLjApLCAwLjAsIDEuMCk7Cih3ZWJnbF8x
MWM0NzcyMjAwMDAwMDA2ID0gKHdlYmdsX2YwZThkM2U4MDAwMDAwMDQgKiB3ZWJnbF9lYWY3MTU3
YzAwMDAwMDExKS54eSk7CihnbF9Qb3NpdGlvbiA9ICgod2ViZ2xfYjc4NDkxZGMwMDAwMDAwMyAq
IHdlYmdsXzYyMTNkOWUwMDAwMDAwMDIpICogdmVjNCh3ZWJnbF9jOGFkNjEzZjAwMDAwMDBiLCAw
LjAsIDEuMCkpKTsKfQoKLS0tIGVuZCB0cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0tCmNvbXBp
bGVTaGFkZXIoKSBmcmFnbWVudDoKLS0tIGJlZ2luIG9yaWdpbmFsIHNoYWRlciBzb3VyY2UgLS0t
CiNkZWZpbmUgRU5BQkxFX1RleHR1cmUKI2RlZmluZSBhcHBseVRleHR1cmVJZk5lZWRlZCBhcHBs
eVRleHR1cmUKI2RlZmluZSBhcHBseVJlY3RJZk5lZWRlZCBub29wCiNkZWZpbmUgRU5BQkxFX1Nv
bGlkQ29sb3IKI2RlZmluZSBhcHBseVNvbGlkQ29sb3JJZk5lZWRlZCBhcHBseVNvbGlkQ29sb3IK
I2RlZmluZSBFTkFCTEVfT3BhY2l0eQojZGVmaW5lIGFwcGx5T3BhY2l0eUlmTmVlZGVkIGFwcGx5
T3BhY2l0eQojZGVmaW5lIEVOQUJMRV9BbnRpYWxpYXNpbmcKI2RlZmluZSBhcHBseUFudGlhbGlh
c2luZ0lmTmVlZGVkIGFwcGx5QW50aWFsaWFzaW5nCiNkZWZpbmUgRU5BQkxFX0dyYXlzY2FsZUZp
bHRlcgojZGVmaW5lIGFwcGx5R3JheXNjYWxlRmlsdGVySWZOZWVkZWQgYXBwbHlHcmF5c2NhbGVG
aWx0ZXIKI2RlZmluZSBFTkFCTEVfU2VwaWFGaWx0ZXIKI2RlZmluZSBhcHBseVNlcGlhRmlsdGVy
SWZOZWVkZWQgYXBwbHlTZXBpYUZpbHRlcgojZGVmaW5lIEVOQUJMRV9TYXR1cmF0ZUZpbHRlcgoj
ZGVmaW5lIGFwcGx5U2F0dXJhdGVGaWx0ZXJJZk5lZWRlZCBhcHBseVNhdHVyYXRlRmlsdGVyCiNk
ZWZpbmUgRU5BQkxFX0h1ZVJvdGF0ZUZpbHRlcgojZGVmaW5lIGFwcGx5SHVlUm90YXRlRmlsdGVy
SWZOZWVkZWQgYXBwbHlIdWVSb3RhdGVGaWx0ZXIKI2RlZmluZSBFTkFCTEVfQnJpZ2h0bmVzc0Zp
bHRlcgojZGVmaW5lIGFwcGx5QnJpZ2h0bmVzc0ZpbHRlcklmTmVlZGVkIGFwcGx5QnJpZ2h0bmVz
c0ZpbHRlcgojZGVmaW5lIEVOQUJMRV9Db250cmFzdEZpbHRlcgojZGVmaW5lIGFwcGx5Q29udHJh
c3RGaWx0ZXJJZk5lZWRlZCBhcHBseUNvbnRyYXN0RmlsdGVyCiNkZWZpbmUgRU5BQkxFX0ludmVy
dEZpbHRlcgojZGVmaW5lIGFwcGx5SW52ZXJ0RmlsdGVySWZOZWVkZWQgYXBwbHlJbnZlcnRGaWx0
ZXIKI2RlZmluZSBFTkFCTEVfT3BhY2l0eUZpbHRlcgojZGVmaW5lIGFwcGx5T3BhY2l0eUZpbHRl
cklmTmVlZGVkIGFwcGx5T3BhY2l0eUZpbHRlcgojZGVmaW5lIEVOQUJMRV9CbHVyRmlsdGVyCiNk
ZWZpbmUgYXBwbHlCbHVyRmlsdGVySWZOZWVkZWQgYXBwbHlCbHVyRmlsdGVyCiNkZWZpbmUgRU5B
QkxFX0FscGhhQmx1cgojZGVmaW5lIGFwcGx5QWxwaGFCbHVySWZOZWVkZWQgYXBwbHlBbHBoYUJs
dXIKI2RlZmluZSBFTkFCTEVfQ29udGVudFRleHR1cmUKI2RlZmluZSBhcHBseUNvbnRlbnRUZXh0
dXJlSWZOZWVkZWQgYXBwbHlDb250ZW50VGV4dHVyZQojZGVmaW5lIEVOQUJMRV9NYW51YWxSZXBl
YXQKI2RlZmluZSBhcHBseU1hbnVhbFJlcGVhdElmTmVlZGVkIGFwcGx5TWFudWFsUmVwZWF0CiNp
ZmRlZiBFTkFCTEVfUmVjdAojZGVmaW5lIFNhbXBsZXJUeXBlIHNhbXBsZXIyRFJlY3QKI2RlZmlu
ZSBTYW1wbGVyRnVuY3Rpb24gdGV4dHVyZTJEUmVjdAojZWxzZQojZGVmaW5lIFNhbXBsZXJUeXBl
IHNhbXBsZXIyRAojZGVmaW5lIFNhbXBsZXJGdW5jdGlvbiB0ZXh0dXJlMkQKI2VuZGlmCiNpZiBk
ZWZpbmVkKEVOQUJMRV9BbnRpYWxpYXNpbmcpICYmIGRlZmluZWQoRU5BQkxFX1RleHR1cmUpCiNk
ZWZpbmUgdHJhbnNmb3JtVGV4Q29vcmQgZnJhZ21lbnRUcmFuc2Zvcm1UZXhDb29yZAojZWxzZQoj
ZGVmaW5lIHRyYW5zZm9ybVRleENvb3JkIHZlcnRleFRyYW5zZm9ybVRleENvb3JkCiNlbmRpZgoj
ZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIIDExCiNkZWZpbmUgR0FVU1NJQU5fS0VS
TkVMX1NURVAgMC4yCiNpZmRlZiBHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSAojZGVmaW5lIFRl
eHR1cmVTcGFjZU1hdHJpeFByZWNpc2lvbiBoaWdocAojZWxzZQojZGVmaW5lIFRleHR1cmVTcGFj
ZU1hdHJpeFByZWNpc2lvbiBtZWRpdW1wCiNlbmRpZgpwcmVjaXNpb24gVGV4dHVyZVNwYWNlTWF0
cml4UHJlY2lzaW9uIGZsb2F0OyB1bmlmb3JtIG1hdDQgdV90ZXh0dXJlU3BhY2VNYXRyaXg7IHVu
aWZvcm0gbWF0NCB1X3RleHR1cmVDb2xvclNwYWNlTWF0cml4OyBwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDsgdW5pZm9ybSBTYW1wbGVyVHlwZSBzX3NhbXBsZXI7IHVuaWZvcm0gc2FtcGxlcjJEIHNf
Y29udGVudFRleHR1cmU7IHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OyB2YXJ5aW5nIGZsb2F0IHZf
YW50aWFsaWFzOyB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgdmFyeWluZyB2ZWMyIHZfdHJhbnNm
b3JtZWRUZXhDb29yZDsgdW5pZm9ybSBmbG9hdCB1X2ZpbHRlckFtb3VudDsgdW5pZm9ybSB2ZWMy
IHVfYmx1clJhZGl1czsgdW5pZm9ybSB2ZWMyIHVfc2hhZG93T2Zmc2V0OyB1bmlmb3JtIHZlYzQg
dV9jb2xvcjsgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9I
QUxGX1dJRFRIXTsgdm9pZCBub29wKGlub3V0IHZlYzQgZHVtbXlQYXJhbWV0ZXIpIHsgfSB2b2lk
IG5vb3AoaW5vdXQgdmVjNCBkdW1teVBhcmFtZXRlciwgdmVjMiB0ZXhDb29yZCkgeyB9IHZvaWQg
bm9vcChpbm91dCB2ZWMyIGR1bW15UGFyYW1ldGVyKSB7IH0gZmxvYXQgYW50aWFsaWFzKCkgeyBy
ZXR1cm4gc21vb3Roc3RlcCgwLiwgMS4sIHZfYW50aWFsaWFzKTsgfSB2ZWMyIGZyYWdtZW50VHJh
bnNmb3JtVGV4Q29vcmQoKSB7IHZlYzQgY2xhbXBlZFBvc2l0aW9uID0gY2xhbXAodmVjNCh2X3Rl
eENvb3JkLCAwLiwgMS4pLCAwLiwgMS4pOyByZXR1cm4gKHVfdGV4dHVyZVNwYWNlTWF0cml4ICog
Y2xhbXBlZFBvc2l0aW9uKS54eTsgfSB2ZWMyIHZlcnRleFRyYW5zZm9ybVRleENvb3JkKCkgeyBy
ZXR1cm4gdl90cmFuc2Zvcm1lZFRleENvb3JkOyB9IHZvaWQgYXBwbHlNYW51YWxSZXBlYXQoaW5v
dXQgdmVjMiBwb3MpIHsgcG9zID0gZnJhY3QocG9zKTsgfSB2b2lkIGFwcGx5VGV4dHVyZShpbm91
dCB2ZWM0IGNvbG9yLCB2ZWMyIHRleENvb3JkKSB7IGNvbG9yID0gdV90ZXh0dXJlQ29sb3JTcGFj
ZU1hdHJpeCAqIFNhbXBsZXJGdW5jdGlvbihzX3NhbXBsZXIsIHRleENvb3JkKTsgfSB2b2lkIGFw
cGx5T3BhY2l0eShpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IHVfb3BhY2l0eTsgfSB2b2lk
IGFwcGx5QW50aWFsaWFzaW5nKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gYW50aWFsaWFz
KCk7IH0gdm9pZCBhcHBseUdyYXlzY2FsZUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKSB7IGZsb2F0
IGFtb3VudCA9IDEuMCAtIHVfZmlsdGVyQW1vdW50OyBjb2xvciA9IHZlYzQoKDAuMjEyNiArIDAu
Nzg3NCAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBj
b2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBjb2xvci5iLCAoMC4yMTI2IC0g
MC4yMTI2ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyICsgMC4yODQ4ICogYW1vdW50KSAq
IGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9yLmIsICgwLjIxMjYg
LSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAwLjcxNTIgKiBhbW91bnQp
ICogY29sb3IuZyArICgwLjA3MjIgKyAwLjkyNzggKiBhbW91bnQpICogY29sb3IuYiwgY29sb3Iu
YSk7IH0gdm9pZCBhcHBseVNlcGlhRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpIHsgZmxvYXQgYW1v
dW50ID0gMS4wIC0gdV9maWx0ZXJBbW91bnQ7IGNvbG9yID0gdmVjNCgoMC4zOTMgKyAwLjYwNyAq
IGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzY5IC0gMC43NjkgKiBhbW91bnQpICogY29sb3IuZyAr
ICgwLjE4OSAtIDAuMTg5ICogYW1vdW50KSAqIGNvbG9yLmIsICgwLjM0OSAtIDAuMzQ5ICogYW1v
dW50KSAqIGNvbG9yLnIgKyAoMC42ODYgKyAwLjMxNCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAu
MTY4IC0gMC4xNjggKiBhbW91bnQpICogY29sb3IuYiwgKDAuMjcyIC0gMC4yNzIgKiBhbW91bnQp
ICogY29sb3IuciArICgwLjUzNCAtIDAuNTM0ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xMzEg
KyAwLjg2OSAqIGFtb3VudCkgKiBjb2xvci5iLCBjb2xvci5hKTsgfSB2b2lkIGFwcGx5U2F0dXJh
dGVGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciA9IHZlYzQoKDAuMjEzICsgMC43ODcg
KiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUgKiB1X2ZpbHRlckFt
b3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xv
ci5iLCAoMC4yMTMgLSAwLjIxMyAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUg
KyAwLjI4NSAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVf
ZmlsdGVyQW1vdW50KSAqIGNvbG9yLmIsICgwLjIxMyAtIDAuMjEzICogdV9maWx0ZXJBbW91bnQp
ICogY29sb3IuciArICgwLjcxNSAtIDAuNzE1ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuZyAr
ICgwLjA3MiArIDAuOTI4ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuYiwgY29sb3IuYSk7IH0g
dm9pZCBhcHBseUh1ZVJvdGF0ZUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKSB7IGZsb2F0IHBpID0g
My4xNDE1OTI2NTM1ODk3OTMyMzg0NjsgZmxvYXQgYyA9IGNvcyh1X2ZpbHRlckFtb3VudCAqIHBp
IC8gMTgwLjApOyBmbG9hdCBzID0gc2luKHVfZmlsdGVyQW1vdW50ICogcGkgLyAxODAuMCk7IGNv
bG9yID0gdmVjNChjb2xvci5yICogKDAuMjEzICsgYyAqIDAuNzg3IC0gcyAqIDAuMjEzKSArIGNv
bG9yLmcgKiAoMC43MTUgLSBjICogMC43MTUgLSBzICogMC43MTUpICsgY29sb3IuYiAqICgwLjA3
MiAtIGMgKiAwLjA3MiArIHMgKiAwLjkyOCksIGNvbG9yLnIgKiAoMC4yMTMgLSBjICogMC4yMTMg
KyBzICogMC4xNDMpICsgY29sb3IuZyAqICgwLjcxNSArIGMgKiAwLjI4NSArIHMgKiAwLjE0MCkg
KyBjb2xvci5iICogKDAuMDcyIC0gYyAqIDAuMDcyIC0gcyAqIDAuMjgzKSwgY29sb3IuciAqICgw
LjIxMyAtIGMgKiAwLjIxMyAtIHMgKiAwLjc4NykgKyBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAu
NzE1ICsgcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgKyBjICogMC45MjggKyBzICogMC4w
NzIpLCBjb2xvci5hKTsgfSBmbG9hdCBpbnZlcnQoZmxvYXQgbikgeyByZXR1cm4gKDEuMCAtIG4p
ICogdV9maWx0ZXJBbW91bnQgKyBuICogKDEuMCAtIHVfZmlsdGVyQW1vdW50KTsgfSB2b2lkIGFw
cGx5SW52ZXJ0RmlsdGVyKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgPSB2ZWM0KGludmVydChj
b2xvci5yKSwgaW52ZXJ0KGNvbG9yLmcpLCBpbnZlcnQoY29sb3IuYiksIGNvbG9yLmEpOyB9IHZv
aWQgYXBwbHlCcmlnaHRuZXNzRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgPSB2ZWM0
KGNvbG9yLnJnYiAqIHVfZmlsdGVyQW1vdW50LCBjb2xvci5hKTsgfSBmbG9hdCBjb250cmFzdChm
bG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1X2ZpbHRlckFtb3VudCArIDAuNTsgfSB2b2lk
IGFwcGx5Q29udHJhc3RGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciA9IHZlYzQoY29u
dHJhc3QoY29sb3IuciksIGNvbnRyYXN0KGNvbG9yLmcpLCBjb250cmFzdChjb2xvci5iKSwgY29s
b3IuYSk7IH0gdm9pZCBhcHBseU9wYWNpdHlGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xv
ciA9IHZlYzQoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSAqIHVfZmlsdGVyQW1v
dW50KTsgfSB2ZWM0IHNhbXBsZUNvbG9yQXRSYWRpdXMoZmxvYXQgcmFkaXVzLCB2ZWMyIHRleENv
b3JkKSB7IHZlYzIgY29vcmQgPSB0ZXhDb29yZCArIHJhZGl1cyAqIHVfYmx1clJhZGl1czsgcmV0
dXJuIFNhbXBsZXJGdW5jdGlvbihzX3NhbXBsZXIsIGNvb3JkKSAqIGZsb2F0KGNvb3JkLnggPiAw
LiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7IH0gZmxv
YXQgc2FtcGxlQWxwaGFBdFJhZGl1cyhmbG9hdCByYWRpdXMsIHZlYzIgdGV4Q29vcmQpIHsgdmVj
MiBjb29yZCA9IHRleENvb3JkIC0gdV9zaGFkb3dPZmZzZXQgKyByYWRpdXMgKiB1X2JsdXJSYWRp
dXM7IHJldHVybiBTYW1wbGVyRnVuY3Rpb24oc19zYW1wbGVyLCBjb29yZCkuYSAqIGZsb2F0KGNv
b3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAx
Lik7IH0gdm9pZCBhcHBseUJsdXJGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvciwgdmVjMiB0ZXhDb29y
ZCkgeyB2ZWM0IHRvdGFsID0gc2FtcGxlQ29sb3JBdFJhZGl1cygwLiwgdGV4Q29vcmQpICogdV9n
YXVzc2lhbktlcm5lbFswXTsgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFM
Rl9XSURUSDsgaSsrKSB7IHRvdGFsICs9IHNhbXBsZUNvbG9yQXRSYWRpdXMoZmxvYXQoaSkgKiBH
QVVTU0lBTl9LRVJORUxfU1RFUCwgdGV4Q29vcmQpICogdV9nYXVzc2lhbktlcm5lbFtpXTsgdG90
YWwgKz0gc2FtcGxlQ29sb3JBdFJhZGl1cyhmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVM
X1NURVAsIHRleENvb3JkKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07IH0gY29sb3IgPSB0b3RhbDsg
fSB2b2lkIGFwcGx5QWxwaGFCbHVyKGlub3V0IHZlYzQgY29sb3IsIHZlYzIgdGV4Q29vcmQpIHsg
ZmxvYXQgdG90YWwgPSBzYW1wbGVBbHBoYUF0UmFkaXVzKDAuLCB0ZXhDb29yZCkgKiB1X2dhdXNz
aWFuS2VybmVsWzBdOyBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJ
RFRIOyBpKyspIHsgdG90YWwgKz0gc2FtcGxlQWxwaGFBdFJhZGl1cyhmbG9hdChpKSAqIEdBVVNT
SUFOX0tFUk5FTF9TVEVQLCB0ZXhDb29yZCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOyB0b3RhbCAr
PSBzYW1wbGVBbHBoYUF0UmFkaXVzKGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RF
UCwgdGV4Q29vcmQpICogdV9nYXVzc2lhbktlcm5lbFtpXTsgfSBjb2xvciAqPSB0b3RhbDsgfSB2
ZWM0IHNvdXJjZU92ZXIodmVjNCBzcmMsIHZlYzQgZHN0KSB7IHJldHVybiBzcmMgKyBkc3QgKiAo
MS4gLSBkc3QuYSk7IH0gdm9pZCBhcHBseUNvbnRlbnRUZXh0dXJlKGlub3V0IHZlYzQgY29sb3Is
IHZlYzIgdGV4Q29vcmQpIHsgdmVjNCBjb250ZW50Q29sb3IgPSB0ZXh0dXJlMkQoc19jb250ZW50
VGV4dHVyZSwgdGV4Q29vcmQpOyBjb2xvciA9IHNvdXJjZU92ZXIoY29udGVudENvbG9yLCBjb2xv
cik7IH0gdm9pZCBhcHBseVNvbGlkQ29sb3IoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSB1
X2NvbG9yOyB9IHZvaWQgbWFpbih2b2lkKSB7IHZlYzQgY29sb3IgPSB2ZWM0KDEuLCAxLiwgMS4s
IDEuKTsgdmVjMiB0ZXhDb29yZCA9IHRyYW5zZm9ybVRleENvb3JkKCk7IGFwcGx5TWFudWFsUmVw
ZWF0SWZOZWVkZWQodGV4Q29vcmQpOyBhcHBseVRleHR1cmVJZk5lZWRlZChjb2xvciwgdGV4Q29v
cmQpOyBhcHBseVNvbGlkQ29sb3JJZk5lZWRlZChjb2xvcik7IGFwcGx5QW50aWFsaWFzaW5nSWZO
ZWVkZWQoY29sb3IpOyBhcHBseU9wYWNpdHlJZk5lZWRlZChjb2xvcik7IGFwcGx5R3JheXNjYWxl
RmlsdGVySWZOZWVkZWQoY29sb3IpOyBhcHBseVNlcGlhRmlsdGVySWZOZWVkZWQoY29sb3IpOyBh
cHBseVNhdHVyYXRlRmlsdGVySWZOZWVkZWQoY29sb3IpOyBhcHBseUh1ZVJvdGF0ZUZpbHRlcklm
TmVlZGVkKGNvbG9yKTsgYXBwbHlJbnZlcnRGaWx0ZXJJZk5lZWRlZChjb2xvcik7IGFwcGx5QnJp
Z2h0bmVzc0ZpbHRlcklmTmVlZGVkKGNvbG9yKTsgYXBwbHlDb250cmFzdEZpbHRlcklmTmVlZGVk
KGNvbG9yKTsgYXBwbHlPcGFjaXR5RmlsdGVySWZOZWVkZWQoY29sb3IpOyBhcHBseUJsdXJGaWx0
ZXJJZk5lZWRlZChjb2xvciwgdGV4Q29vcmQpOyBhcHBseUFscGhhQmx1cklmTmVlZGVkKGNvbG9y
LCB0ZXhDb29yZCk7IGFwcGx5Q29udGVudFRleHR1cmVJZk5lZWRlZChjb2xvciwgdGV4Q29vcmQp
OyBnbF9GcmFnQ29sb3IgPSBjb2xvcjsgfQotLS0gZW5kIG9yaWdpbmFsIHNoYWRlciBzb3VyY2Ug
LS0tCi0tLSBiZWdpbiB0cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0tCiN2ZXJzaW9uIDE1MAoj
ZXh0ZW5zaW9uIEdMX0FSQl9ncHVfc2hhZGVyNSA6IGVuYWJsZQpvdXQgdmVjNCB3ZWJnbF9GcmFn
Q29sb3I7CnVuaWZvcm0gbWF0NCB3ZWJnbF9mMGU4ZDNlODAwMDAwMDA0Owp1bmlmb3JtIG1hdDQg
d2ViZ2xfMTAzNjZlMWYwMDAwMDAxMjsKdW5pZm9ybSBzYW1wbGVyMkQgd2ViZ2xfMzc0ODE5N2Mw
MDAwMDAxMzsKdW5pZm9ybSBzYW1wbGVyMkQgd2ViZ2xfMmM1ZTYzODYwMDAwMDAxNDsKdW5pZm9y
bSBmbG9hdCB3ZWJnbF8zNjI3NTJmNzAwMDAwMDE1OwppbiBmbG9hdCB3ZWJnbF9mYTQ3N2QxMzAw
MDAwMDA3OwppbiB2ZWMyIHdlYmdsXzZkYTQyNzE4MDAwMDAwMDU7CmluIHZlYzIgd2ViZ2xfMTFj
NDc3MjIwMDAwMDAwNjsKdW5pZm9ybSBmbG9hdCB3ZWJnbF9mM2NmMmI0MTAwMDAwMDE2Owp1bmlm
b3JtIHZlYzIgd2ViZ2xfMjRlYTRkMzcwMDAwMDAxNzsKdW5pZm9ybSB2ZWMyIHdlYmdsX2U2MmI5
MDk4MDAwMDAwMTg7CnVuaWZvcm0gdmVjNCB3ZWJnbF82MTdlY2Y1MjAwMDAwMDE5Owp1bmlmb3Jt
IGZsb2F0IHdlYmdsX2QxNTRkZjkxMDAwMDAwMWFbMTFdOwpmbG9hdCB3ZWJnbF83MjZlYWE3MTAw
MDAwMDFiKCl7CnJldHVybiBzbW9vdGhzdGVwKDAuMCwgMS4wLCB3ZWJnbF9mYTQ3N2QxMzAwMDAw
MDA3KTsKfQp2ZWMyIHdlYmdsXzllYWQwMGMxMDAwMDAwMWMoKXsKdmVjNCB3ZWJnbF9lYWY3MTU3
YzAwMDAwMDExID0gY2xhbXAodmVjNCh3ZWJnbF82ZGE0MjcxODAwMDAwMDA1LCAwLjAsIDEuMCks
IDAuMCwgMS4wKTsKcmV0dXJuICh3ZWJnbF9mMGU4ZDNlODAwMDAwMDA0ICogd2ViZ2xfZWFmNzE1
N2MwMDAwMDAxMSkueHk7Cn0Kdm9pZCB3ZWJnbF85YjgxMWNlYjAwMDAwMDFkKGlub3V0IHZlYzIg
d2ViZ2xfMWJjYzQ2ZjYwMDAwMDAwOSl7Cih3ZWJnbF8xYmNjNDZmNjAwMDAwMDA5ID0gZnJhY3Qo
d2ViZ2xfMWJjYzQ2ZjYwMDAwMDAwOSkpOwp9CnZvaWQgd2ViZ2xfNGU0MjRmZGEwMDAwMDAxZShp
bm91dCB2ZWM0IHdlYmdsX2M1MjliYjUxMDAwMDAwMWYsIGluIHZlYzIgd2ViZ2xfNGEwMDJkYjkw
MDAwMDAyMCl7Cih3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmID0gKHdlYmdsXzEwMzY2ZTFmMDAwMDAw
MTIgKiB0ZXh0dXJlKHdlYmdsXzM3NDgxOTdjMDAwMDAwMTMsIHdlYmdsXzRhMDAyZGI5MDAwMDAw
MjApKSk7Cn0Kdm9pZCB3ZWJnbF9lMGYxN2M1YzAwMDAwMDIxKGlub3V0IHZlYzQgd2ViZ2xfYzUy
OWJiNTEwMDAwMDAxZil7Cih3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmICo9IHdlYmdsXzM2Mjc1MmY3
MDAwMDAwMTUpOwp9CnZvaWQgd2ViZ2xfZTI4ODdiMmQwMDAwMDAwYShpbm91dCB2ZWM0IHdlYmds
X2M1MjliYjUxMDAwMDAwMWYpewood2ViZ2xfYzUyOWJiNTEwMDAwMDAxZiAqPSB3ZWJnbF83MjZl
YWE3MTAwMDAwMDFiKCkpOwp9CnZvaWQgd2ViZ2xfYzFlOWFjZDMwMDAwMDAyMihpbm91dCB2ZWM0
IHdlYmdsX2M1MjliYjUxMDAwMDAwMWYpewpmbG9hdCB3ZWJnbF9hMTczMmFlZjAwMDAwMDIzID0g
KDEuMCAtIHdlYmdsX2YzY2YyYjQxMDAwMDAwMTYpOwood2ViZ2xfYzUyOWJiNTEwMDAwMDAxZiA9
IHZlYzQoKCgoKDAuMjEyNTk5OTkgKyAoMC43ODc0MDAwMSAqIHdlYmdsX2ExNzMyYWVmMDAwMDAw
MjMpKSAqIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueCkgKyAoKDAuNzE1MjAwMDEgLSAoMC43MTUy
MDAwMSAqIHdlYmdsX2ExNzMyYWVmMDAwMDAwMjMpKSAqIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYu
eSkpICsgKCgwLjA3MjIgLSAoMC4wNzIyICogd2ViZ2xfYTE3MzJhZWYwMDAwMDAyMykpICogd2Vi
Z2xfYzUyOWJiNTEwMDAwMDAxZi56KSksICgoKCgwLjIxMjU5OTk5IC0gKDAuMjEyNTk5OTkgKiB3
ZWJnbF9hMTczMmFlZjAwMDAwMDIzKSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLngpICsgKCgw
LjcxNTIwMDAxICsgKDAuMjg0Nzk5OTkgKiB3ZWJnbF9hMTczMmFlZjAwMDAwMDIzKSkgKiB3ZWJn
bF9jNTI5YmI1MTAwMDAwMDFmLnkpKSArICgoMC4wNzIyIC0gKDAuMDcyMiAqIHdlYmdsX2ExNzMy
YWVmMDAwMDAwMjMpKSAqIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueikpLCAoKCgoMC4yMTI1OTk5
OSAtICgwLjIxMjU5OTk5ICogd2ViZ2xfYTE3MzJhZWYwMDAwMDAyMykpICogd2ViZ2xfYzUyOWJi
NTEwMDAwMDAxZi54KSArICgoMC43MTUyMDAwMSAtICgwLjcxNTIwMDAxICogd2ViZ2xfYTE3MzJh
ZWYwMDAwMDAyMykpICogd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi55KSkgKyAoKDAuMDcyMiArICgw
LjkyNzggKiB3ZWJnbF9hMTczMmFlZjAwMDAwMDIzKSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFm
LnopKSwgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi53KSk7Cn0Kdm9pZCB3ZWJnbF9mNDhjMjg1MjAw
MDAwMDI0KGlub3V0IHZlYzQgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZil7CmZsb2F0IHdlYmdsX2Ex
NzMyYWVmMDAwMDAwMjMgPSAoMS4wIC0gd2ViZ2xfZjNjZjJiNDEwMDAwMDAxNik7Cih3ZWJnbF9j
NTI5YmI1MTAwMDAwMDFmID0gdmVjNCgoKCgoMC4zOTMwMDAwMSArICgwLjYwNjk5OTk5ICogd2Vi
Z2xfYTE3MzJhZWYwMDAwMDAyMykpICogd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi54KSArICgoMC43
Njg5OTk5OSAtICgwLjc2ODk5OTk5ICogd2ViZ2xfYTE3MzJhZWYwMDAwMDAyMykpICogd2ViZ2xf
YzUyOWJiNTEwMDAwMDAxZi55KSkgKyAoKDAuMTg5IC0gKDAuMTg5ICogd2ViZ2xfYTE3MzJhZWYw
MDAwMDAyMykpICogd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi56KSksICgoKCgwLjM0OTAwMDAxIC0g
KDAuMzQ5MDAwMDEgKiB3ZWJnbF9hMTczMmFlZjAwMDAwMDIzKSkgKiB3ZWJnbF9jNTI5YmI1MTAw
MDAwMDFmLngpICsgKCgwLjY4NTk5OTk5ICsgKDAuMzE0MDAwMDEgKiB3ZWJnbF9hMTczMmFlZjAw
MDAwMDIzKSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnkpKSArICgoMC4xNjggLSAoMC4xNjgg
KiB3ZWJnbF9hMTczMmFlZjAwMDAwMDIzKSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnopKSwg
KCgoKDAuMjcyMDAwMDEgLSAoMC4yNzIwMDAwMSAqIHdlYmdsX2ExNzMyYWVmMDAwMDAwMjMpKSAq
IHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueCkgKyAoKDAuNTMzOTk5OTggLSAoMC41MzM5OTk5OCAq
IHdlYmdsX2ExNzMyYWVmMDAwMDAwMjMpKSAqIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueSkpICsg
KCgwLjEzMSArICgwLjg2OTAwMDAyICogd2ViZ2xfYTE3MzJhZWYwMDAwMDAyMykpICogd2ViZ2xf
YzUyOWJiNTEwMDAwMDAxZi56KSksIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYudykpOwp9CnZvaWQg
d2ViZ2xfZDBiZjg4ZTQwMDAwMDAyNShpbm91dCB2ZWM0IHdlYmdsX2M1MjliYjUxMDAwMDAwMWYp
ewood2ViZ2xfYzUyOWJiNTEwMDAwMDAxZiA9IHZlYzQoKCgoKDAuMjEzICsgKDAuNzg3ICogd2Vi
Z2xfZjNjZjJiNDEwMDAwMDAxNikpICogd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi54KSArICgoMC43
MTQ5OTk5NyAtICgwLjcxNDk5OTk3ICogd2ViZ2xfZjNjZjJiNDEwMDAwMDAxNikpICogd2ViZ2xf
YzUyOWJiNTEwMDAwMDAxZi55KSkgKyAoKDAuMDcxOTk5OTk3IC0gKDAuMDcxOTk5OTk3ICogd2Vi
Z2xfZjNjZjJiNDEwMDAwMDAxNikpICogd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi56KSksICgoKCgw
LjIxMyAtICgwLjIxMyAqIHdlYmdsX2YzY2YyYjQxMDAwMDAwMTYpKSAqIHdlYmdsX2M1MjliYjUx
MDAwMDAwMWYueCkgKyAoKDAuNzE0OTk5OTcgKyAoMC4yODUgKiB3ZWJnbF9mM2NmMmI0MTAwMDAw
MDE2KSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnkpKSArICgoMC4wNzE5OTk5OTcgLSAoMC4w
NzE5OTk5OTcgKiB3ZWJnbF9mM2NmMmI0MTAwMDAwMDE2KSkgKiB3ZWJnbF9jNTI5YmI1MTAwMDAw
MDFmLnopKSwgKCgoKDAuMjEzIC0gKDAuMjEzICogd2ViZ2xfZjNjZjJiNDEwMDAwMDAxNikpICog
d2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi54KSArICgoMC43MTQ5OTk5NyAtICgwLjcxNDk5OTk3ICog
d2ViZ2xfZjNjZjJiNDEwMDAwMDAxNikpICogd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi55KSkgKyAo
KDAuMDcxOTk5OTk3ICsgKDAuOTI3OTk5OTcgKiB3ZWJnbF9mM2NmMmI0MTAwMDAwMDE2KSkgKiB3
ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnopKSwgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi53KSk7Cn0K
dm9pZCB3ZWJnbF8yNjQzZDg0MDAwMDAwMDI2KGlub3V0IHZlYzQgd2ViZ2xfYzUyOWJiNTEwMDAw
MDAxZil7CmZsb2F0IHdlYmdsXzQxOGYzMDFlMDAwMDAwMjcgPSAzLjE0MTU5Mjc7CmZsb2F0IHdl
YmdsX2M2ZWMyMTE5MDAwMDAwMjggPSBjb3MoKCh3ZWJnbF9mM2NmMmI0MTAwMDAwMDE2ICogd2Vi
Z2xfNDE4ZjMwMWUwMDAwMDAyNykgLyAxODAuMCkpOwpmbG9hdCB3ZWJnbF83ZWFiYTc3YTAwMDAw
MDI5ID0gc2luKCgod2ViZ2xfZjNjZjJiNDEwMDAwMDAxNiAqIHdlYmdsXzQxOGYzMDFlMDAwMDAw
MjcpIC8gMTgwLjApKTsKKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYgPSB2ZWM0KCgoKHdlYmdsX2M1
MjliYjUxMDAwMDAwMWYueCAqICgoMC4yMTMgKyAod2ViZ2xfYzZlYzIxMTkwMDAwMDAyOCAqIDAu
Nzg3KSkgLSAod2ViZ2xfN2VhYmE3N2EwMDAwMDAyOSAqIDAuMjEzKSkpICsgKHdlYmdsX2M1Mjli
YjUxMDAwMDAwMWYueSAqICgoMC43MTQ5OTk5NyAtICh3ZWJnbF9jNmVjMjExOTAwMDAwMDI4ICog
MC43MTQ5OTk5NykpIC0gKHdlYmdsXzdlYWJhNzdhMDAwMDAwMjkgKiAwLjcxNDk5OTk3KSkpKSAr
ICh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnogKiAoKDAuMDcxOTk5OTk3IC0gKHdlYmdsX2M2ZWMy
MTE5MDAwMDAwMjggKiAwLjA3MTk5OTk5NykpICsgKHdlYmdsXzdlYWJhNzdhMDAwMDAwMjkgKiAw
LjkyNzk5OTk3KSkpKSwgKCgod2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi54ICogKCgwLjIxMyAtICh3
ZWJnbF9jNmVjMjExOTAwMDAwMDI4ICogMC4yMTMpKSArICh3ZWJnbF83ZWFiYTc3YTAwMDAwMDI5
ICogMC4xNDMwMDAwMSkpKSArICh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnkgKiAoKDAuNzE0OTk5
OTcgKyAod2ViZ2xfYzZlYzIxMTkwMDAwMDAyOCAqIDAuMjg1KSkgKyAod2ViZ2xfN2VhYmE3N2Ew
MDAwMDAyOSAqIDAuMTQpKSkpICsgKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueiAqICgoMC4wNzE5
OTk5OTcgLSAod2ViZ2xfYzZlYzIxMTkwMDAwMDAyOCAqIDAuMDcxOTk5OTk3KSkgLSAod2ViZ2xf
N2VhYmE3N2EwMDAwMDAyOSAqIDAuMjgyOTk5OTkpKSkpLCAoKCh3ZWJnbF9jNTI5YmI1MTAwMDAw
MDFmLnggKiAoKDAuMjEzIC0gKHdlYmdsX2M2ZWMyMTE5MDAwMDAwMjggKiAwLjIxMykpIC0gKHdl
YmdsXzdlYWJhNzdhMDAwMDAwMjkgKiAwLjc4NykpKSArICh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFm
LnkgKiAoKDAuNzE0OTk5OTcgLSAod2ViZ2xfYzZlYzIxMTkwMDAwMDAyOCAqIDAuNzE0OTk5OTcp
KSArICh3ZWJnbF83ZWFiYTc3YTAwMDAwMDI5ICogMC43MTQ5OTk5NykpKSkgKyAod2ViZ2xfYzUy
OWJiNTEwMDAwMDAxZi56ICogKCgwLjA3MTk5OTk5NyArICh3ZWJnbF9jNmVjMjExOTAwMDAwMDI4
ICogMC45Mjc5OTk5NykpICsgKHdlYmdsXzdlYWJhNzdhMDAwMDAwMjkgKiAwLjA3MTk5OTk5Nykp
KSksIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYudykpOwp9CmZsb2F0IHdlYmdsXzViMDEzOTRjMDAw
MDAwMmEoaW4gZmxvYXQgd2ViZ2xfMzE4YzBhNjIwMDAwMDAyYil7CnJldHVybiAoKCgxLjAgLSB3
ZWJnbF8zMThjMGE2MjAwMDAwMDJiKSAqIHdlYmdsX2YzY2YyYjQxMDAwMDAwMTYpICsgKHdlYmds
XzMxOGMwYTYyMDAwMDAwMmIgKiAoMS4wIC0gd2ViZ2xfZjNjZjJiNDEwMDAwMDAxNikpKTsKfQp2
b2lkIHdlYmdsX2FhMzkxMWQxMDAwMDAwMmMoaW5vdXQgdmVjNCB3ZWJnbF9jNTI5YmI1MTAwMDAw
MDFmKXsKKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYgPSB2ZWM0KHdlYmdsXzViMDEzOTRjMDAwMDAw
MmEod2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi54KSwgd2ViZ2xfNWIwMTM5NGMwMDAwMDAyYSh3ZWJn
bF9jNTI5YmI1MTAwMDAwMDFmLnkpLCB3ZWJnbF81YjAxMzk0YzAwMDAwMDJhKHdlYmdsX2M1Mjli
YjUxMDAwMDAwMWYueiksIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYudykpOwp9CnZvaWQgd2ViZ2xf
MWMxMWVjZmIwMDAwMDAyZChpbm91dCB2ZWM0IHdlYmdsX2M1MjliYjUxMDAwMDAwMWYpewood2Vi
Z2xfYzUyOWJiNTEwMDAwMDAxZiA9IHZlYzQoKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueHl6ICog
d2ViZ2xfZjNjZjJiNDEwMDAwMDAxNiksIHdlYmdsX2M1MjliYjUxMDAwMDAwMWYudykpOwp9CmZs
b2F0IHdlYmdsXzY4Yzk0NjQ1MDAwMDAwMmUoaW4gZmxvYXQgd2ViZ2xfMzE4YzBhNjIwMDAwMDAy
Yil7CnJldHVybiAoKCh3ZWJnbF8zMThjMGE2MjAwMDAwMDJiIC0gMC41KSAqIHdlYmdsX2YzY2Yy
YjQxMDAwMDAwMTYpICsgMC41KTsKfQp2b2lkIHdlYmdsXzhjY2Y1NTNjMDAwMDAwMmYoaW5vdXQg
dmVjNCB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmKXsKKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYgPSB2
ZWM0KHdlYmdsXzY4Yzk0NjQ1MDAwMDAwMmUod2ViZ2xfYzUyOWJiNTEwMDAwMDAxZi54KSwgd2Vi
Z2xfNjhjOTQ2NDUwMDAwMDAyZSh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnkpLCB3ZWJnbF82OGM5
NDY0NTAwMDAwMDJlKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYueiksIHdlYmdsX2M1MjliYjUxMDAw
MDAwMWYudykpOwp9CnZvaWQgd2ViZ2xfOTM3ZGEwYmQwMDAwMDAzMChpbm91dCB2ZWM0IHdlYmds
X2M1MjliYjUxMDAwMDAwMWYpewood2ViZ2xfYzUyOWJiNTEwMDAwMDAxZiA9IHZlYzQod2ViZ2xf
YzUyOWJiNTEwMDAwMDAxZi54LCB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLnksIHdlYmdsX2M1Mjli
YjUxMDAwMDAwMWYueiwgKHdlYmdsX2M1MjliYjUxMDAwMDAwMWYudyAqIHdlYmdsX2YzY2YyYjQx
MDAwMDAwMTYpKSk7Cn0KdmVjNCB3ZWJnbF9mODA5OWI2MDAwMDAwMDMxKGluIGZsb2F0IHdlYmds
XzNjMmFhNTQ4MDAwMDAwMzIsIGluIHZlYzIgd2ViZ2xfNGEwMDJkYjkwMDAwMDAyMCl7CnZlYzIg
d2ViZ2xfOTZlNDdhZjYwMDAwMDAzMyA9ICh3ZWJnbF80YTAwMmRiOTAwMDAwMDIwICsgKHdlYmds
XzNjMmFhNTQ4MDAwMDAwMzIgKiB3ZWJnbF8yNGVhNGQzNzAwMDAwMDE3KSk7CnJldHVybiAodGV4
dHVyZSh3ZWJnbF8zNzQ4MTk3YzAwMDAwMDEzLCB3ZWJnbF85NmU0N2FmNjAwMDAwMDMzKSAqIGZs
b2F0KCgoKCgoKCh3ZWJnbF85NmU0N2FmNjAwMDAwMDMzLnggPiAwLjApKSA/ICgod2ViZ2xfOTZl
NDdhZjYwMDAwMDAzMy55ID4gMC4wKSkgOiAoZmFsc2UpKSkgPyAoKHdlYmdsXzk2ZTQ3YWY2MDAw
MDAwMzMueCA8IDEuMCkpIDogKGZhbHNlKSkpID8gKCh3ZWJnbF85NmU0N2FmNjAwMDAwMDMzLnkg
PCAxLjApKSA6IChmYWxzZSkpKSk7Cn0KZmxvYXQgd2ViZ2xfOGUxY2FkNGUwMDAwMDAzNChpbiBm
bG9hdCB3ZWJnbF8zYzJhYTU0ODAwMDAwMDMyLCBpbiB2ZWMyIHdlYmdsXzRhMDAyZGI5MDAwMDAw
MjApewp2ZWMyIHdlYmdsXzk2ZTQ3YWY2MDAwMDAwMzMgPSAoKHdlYmdsXzRhMDAyZGI5MDAwMDAw
MjAgLSB3ZWJnbF9lNjJiOTA5ODAwMDAwMDE4KSArICh3ZWJnbF8zYzJhYTU0ODAwMDAwMDMyICog
d2ViZ2xfMjRlYTRkMzcwMDAwMDAxNykpOwpyZXR1cm4gKHRleHR1cmUod2ViZ2xfMzc0ODE5N2Mw
MDAwMDAxMywgd2ViZ2xfOTZlNDdhZjYwMDAwMDAzMykudyAqIGZsb2F0KCgoKCgoKCh3ZWJnbF85
NmU0N2FmNjAwMDAwMDMzLnggPiAwLjApKSA/ICgod2ViZ2xfOTZlNDdhZjYwMDAwMDAzMy55ID4g
MC4wKSkgOiAoZmFsc2UpKSkgPyAoKHdlYmdsXzk2ZTQ3YWY2MDAwMDAwMzMueCA8IDEuMCkpIDog
KGZhbHNlKSkpID8gKCh3ZWJnbF85NmU0N2FmNjAwMDAwMDMzLnkgPCAxLjApKSA6IChmYWxzZSkp
KSk7Cn0Kdm9pZCB3ZWJnbF9iMzdlZTYyYjAwMDAwMDM1KGlub3V0IHZlYzQgd2ViZ2xfYzUyOWJi
NTEwMDAwMDAxZiwgaW4gdmVjMiB3ZWJnbF80YTAwMmRiOTAwMDAwMDIwKXsKdmVjNCB3ZWJnbF8z
ODE4MmVjMjAwMDAwMDM2ID0gKHdlYmdsX2Y4MDk5YjYwMDAwMDAwMzEoMC4wLCB3ZWJnbF80YTAw
MmRiOTAwMDAwMDIwKSAqIHdlYmdsX2QxNTRkZjkxMDAwMDAwMWFbMF0pOwpmb3IgKGludCB3ZWJn
bF81MWY2NmFmYzAwMDAwMDM3ID0gMTsgKHdlYmdsXzUxZjY2YWZjMDAwMDAwMzcgPCAxMSk7ICh3
ZWJnbF81MWY2NmFmYzAwMDAwMDM3KyspKQp7Cih3ZWJnbF8zODE4MmVjMjAwMDAwMDM2ICs9ICh3
ZWJnbF9mODA5OWI2MDAwMDAwMDMxKChmbG9hdCh3ZWJnbF81MWY2NmFmYzAwMDAwMDM3KSAqIDAu
MiksIHdlYmdsXzRhMDAyZGI5MDAwMDAwMjApICogd2ViZ2xfZDE1NGRmOTEwMDAwMDAxYVtpbnQo
Y2xhbXAoZmxvYXQod2ViZ2xfNTFmNjZhZmMwMDAwMDAzNyksIDAuMCwgZmxvYXQoMTApKSldKSk7
Cih3ZWJnbF8zODE4MmVjMjAwMDAwMDM2ICs9ICh3ZWJnbF9mODA5OWI2MDAwMDAwMDMxKChmbG9h
dCgoLTEgKiB3ZWJnbF81MWY2NmFmYzAwMDAwMDM3KSkgKiAwLjIpLCB3ZWJnbF80YTAwMmRiOTAw
MDAwMDIwKSAqIHdlYmdsX2QxNTRkZjkxMDAwMDAwMWFbaW50KGNsYW1wKGZsb2F0KHdlYmdsXzUx
ZjY2YWZjMDAwMDAwMzcpLCAwLjAsIGZsb2F0KDEwKSkpXSkpOwp9Cih3ZWJnbF9jNTI5YmI1MTAw
MDAwMDFmID0gd2ViZ2xfMzgxODJlYzIwMDAwMDAzNik7Cn0Kdm9pZCB3ZWJnbF9jYmE1YjMwNTAw
MDAwMDM4KGlub3V0IHZlYzQgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZiwgaW4gdmVjMiB3ZWJnbF80
YTAwMmRiOTAwMDAwMDIwKXsKZmxvYXQgd2ViZ2xfMzgxODJlYzIwMDAwMDAzNiA9ICh3ZWJnbF84
ZTFjYWQ0ZTAwMDAwMDM0KDAuMCwgd2ViZ2xfNGEwMDJkYjkwMDAwMDAyMCkgKiB3ZWJnbF9kMTU0
ZGY5MTAwMDAwMDFhWzBdKTsKZm9yIChpbnQgd2ViZ2xfNTFmNjZhZmMwMDAwMDAzNyA9IDE7ICh3
ZWJnbF81MWY2NmFmYzAwMDAwMDM3IDwgMTEpOyAod2ViZ2xfNTFmNjZhZmMwMDAwMDAzNysrKSkK
ewood2ViZ2xfMzgxODJlYzIwMDAwMDAzNiArPSAod2ViZ2xfOGUxY2FkNGUwMDAwMDAzNCgoZmxv
YXQod2ViZ2xfNTFmNjZhZmMwMDAwMDAzNykgKiAwLjIpLCB3ZWJnbF80YTAwMmRiOTAwMDAwMDIw
KSAqIHdlYmdsX2QxNTRkZjkxMDAwMDAwMWFbaW50KGNsYW1wKGZsb2F0KHdlYmdsXzUxZjY2YWZj
MDAwMDAwMzcpLCAwLjAsIGZsb2F0KDEwKSkpXSkpOwood2ViZ2xfMzgxODJlYzIwMDAwMDAzNiAr
PSAod2ViZ2xfOGUxY2FkNGUwMDAwMDAzNCgoZmxvYXQoKC0xICogd2ViZ2xfNTFmNjZhZmMwMDAw
MDAzNykpICogMC4yKSwgd2ViZ2xfNGEwMDJkYjkwMDAwMDAyMCkgKiB3ZWJnbF9kMTU0ZGY5MTAw
MDAwMDFhW2ludChjbGFtcChmbG9hdCh3ZWJnbF81MWY2NmFmYzAwMDAwMDM3KSwgMC4wLCBmbG9h
dCgxMCkpKV0pKTsKfQood2ViZ2xfYzUyOWJiNTEwMDAwMDAxZiAqPSB3ZWJnbF8zODE4MmVjMjAw
MDAwMDM2KTsKfQp2ZWM0IHdlYmdsX2RkMGVhNDg4MDAwMDAwMzkoaW4gdmVjNCB3ZWJnbF82Y2Fm
YmY4MzAwMDAwMDNhLCBpbiB2ZWM0IHdlYmdsXzEzNDliMDUyMDAwMDAwM2IpewpyZXR1cm4gKHdl
YmdsXzZjYWZiZjgzMDAwMDAwM2EgKyAod2ViZ2xfMTM0OWIwNTIwMDAwMDAzYiAqICgxLjAgLSB3
ZWJnbF8xMzQ5YjA1MjAwMDAwMDNiLncpKSk7Cn0Kdm9pZCB3ZWJnbF9lYTljMzNmZDAwMDAwMDNj
KGlub3V0IHZlYzQgd2ViZ2xfYzUyOWJiNTEwMDAwMDAxZiwgaW4gdmVjMiB3ZWJnbF80YTAwMmRi
OTAwMDAwMDIwKXsKdmVjNCB3ZWJnbF9kY2EwY2RiYjAwMDAwMDNkID0gdGV4dHVyZSh3ZWJnbF8y
YzVlNjM4NjAwMDAwMDE0LCB3ZWJnbF80YTAwMmRiOTAwMDAwMDIwKTsKKHdlYmdsX2M1MjliYjUx
MDAwMDAwMWYgPSB3ZWJnbF9kZDBlYTQ4ODAwMDAwMDM5KHdlYmdsX2RjYTBjZGJiMDAwMDAwM2Qs
IHdlYmdsX2M1MjliYjUxMDAwMDAwMWYpKTsKfQp2b2lkIHdlYmdsXzQ3YzY3ZmExMDAwMDAwM2Uo
aW5vdXQgdmVjNCB3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmKXsKKHdlYmdsX2M1MjliYjUxMDAwMDAw
MWYgKj0gd2ViZ2xfNjE3ZWNmNTIwMDAwMDAxOSk7Cn0Kdm9pZCBtYWluKCl7Cih3ZWJnbF9GcmFn
Q29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCkpOwp2ZWM0IHdlYmdsX2M1MjliYjUxMDAw
MDAwMWYgPSB2ZWM0KDEuMCwgMS4wLCAxLjAsIDEuMCk7CnZlYzIgd2ViZ2xfNGEwMDJkYjkwMDAw
MDAyMCA9IHdlYmdsXzllYWQwMGMxMDAwMDAwMWMoKTsKd2ViZ2xfOWI4MTFjZWIwMDAwMDAxZCh3
ZWJnbF80YTAwMmRiOTAwMDAwMDIwKTsKd2ViZ2xfNGU0MjRmZGEwMDAwMDAxZSh3ZWJnbF9jNTI5
YmI1MTAwMDAwMDFmLCB3ZWJnbF80YTAwMmRiOTAwMDAwMDIwKTsKd2ViZ2xfNDdjNjdmYTEwMDAw
MDAzZSh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmKTsKd2ViZ2xfZTI4ODdiMmQwMDAwMDAwYSh3ZWJn
bF9jNTI5YmI1MTAwMDAwMDFmKTsKd2ViZ2xfZTBmMTdjNWMwMDAwMDAyMSh3ZWJnbF9jNTI5YmI1
MTAwMDAwMDFmKTsKd2ViZ2xfYzFlOWFjZDMwMDAwMDAyMih3ZWJnbF9jNTI5YmI1MTAwMDAwMDFm
KTsKd2ViZ2xfZjQ4YzI4NTIwMDAwMDAyNCh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmKTsKd2ViZ2xf
ZDBiZjg4ZTQwMDAwMDAyNSh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmKTsKd2ViZ2xfMjY0M2Q4NDAw
MDAwMDAyNih3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmKTsKd2ViZ2xfYWEzOTExZDEwMDAwMDAyYyh3
ZWJnbF9jNTI5YmI1MTAwMDAwMDFmKTsKd2ViZ2xfMWMxMWVjZmIwMDAwMDAyZCh3ZWJnbF9jNTI5
YmI1MTAwMDAwMDFmKTsKd2ViZ2xfOGNjZjU1M2MwMDAwMDAyZih3ZWJnbF9jNTI5YmI1MTAwMDAw
MDFmKTsKd2ViZ2xfOTM3ZGEwYmQwMDAwMDAzMCh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmKTsKd2Vi
Z2xfYjM3ZWU2MmIwMDAwMDAzNSh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFmLCB3ZWJnbF80YTAwMmRi
OTAwMDAwMDIwKTsKd2ViZ2xfY2JhNWIzMDUwMDAwMDAzOCh3ZWJnbF9jNTI5YmI1MTAwMDAwMDFm
LCB3ZWJnbF80YTAwMmRiOTAwMDAwMDIwKTsKd2ViZ2xfZWE5YzMzZmQwMDAwMDAzYyh3ZWJnbF9j
NTI5YmI1MTAwMDAwMDFmLCB3ZWJnbF80YTAwMmRiOTAwMDAwMDIwKTsKKHdlYmdsX0ZyYWdDb2xv
ciA9IHdlYmdsX2M1MjliYjUxMDAwMDAwMWYpOwp9CgotLS0gZW5kIHRyYW5zbGF0ZWQgc2hhZGVy
IHNvdXJjZSAtLS0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324397</attachid>
            <date>2017-10-20 07:42:59 -0700</date>
            <delta_ts>2017-10-23 01:14:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175425-20171020164257.patch</filename>
            <type>text/plain</type>
            <size>22947</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIzNzQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWFhY2VlOWZlYTIwY2Rm
ZWFiOWExMGRkZTFiYmRhMzQyMTAyZDJhYy4uYzQ2MzU1YTk5ZGVmODg1ZjE3MTQ5M2RmYTIxZTlj
ZTA5ODNlZTc0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE3LTEwLTIwICBNaWd1
ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW1RleE1hcF0gUmVtb3Zl
IEdyYXBoaWNzQ29udGV4dDNEIHVzYWdlIGZyb20gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTQyNQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSB1
c2FnZSBvZiB0aGUgR3JhcGhpY3NDb250ZXh0M0QgY2xhc3MgaW4gVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0uCisgICAgICAgIERpcmVjdCBPcGVuR0wgQVBJIGNhbGxzLCB0eXBlcyBhbmQgY29u
c3RhbnRzIGFyZSB1c2VkIGluc3RlYWQuCisKKyAgICAgICAgQnkgcmVtb3ZpbmcgR3JhcGhpY3ND
b250ZXh0M0QsIHdlIGRvbid0IHVzZSBBTkdMRSBhbnltb3JlIHRvIHBlcmZvcm0gdGhlCisgICAg
ICAgIHNoYWRlciBhZGFwdGF0aW9uIHRvIHRoZSB1c2VkIE9wZW5HTC9HTEVTMiB2ZXJzaW9uLCBz
byB3ZSBuZWVkIHRvIGRvIHRoYXQKKyAgICAgICAgaW5zaWRlIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtLiBUaGUgbWFpbiBjaGFuZ2VzIHJlcXVpcmVkIGZvciB0aGlzIGFyZQorICAgICAgICBh
ZGRpbmcgdGhlICN2ZXJzaW9uIGRpcmVjdGl2ZSBhbmQgdXNlIGluL291dCB0byBkZWZpbmUgaW5w
dXQvb3V0cHV0IHBhcmFtZXRlcnMKKyAgICAgICAgd2hlbiB1c2luZyBPcGVuR0wgPj0gMy4yLCBh
bmQgZGVmaW5pbmcgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIG9ubHkgd2hlbiB1c2luZworICAgICAg
ICBHTEVTMi4KKworICAgICAgICBCZXNpZGVzIHRoYXQsIG5vdyB0aGF0IFZpZGVvVGV4dHVyZUNv
cGllckdTdHJlYW1lciBkb2Vzbid0IGhhdmUgaXRzIG93bgorICAgICAgICBHcmFwaGljc0NvbnRl
eHQzRCwgd2UgbmVlZCB0byBhZGQgYSBWQU8gdG8gaXQgd2hlbiB1c2luZyBPcGVuR0wgPj0gMy4y
LgorCisgICAgICAgIEJhc2VkIG9uIGEgcHJldmlvdXMgcGF0Y2ggYnkgxb1hbiBEb2JlcsWhZWsg
PHpkb2JlcnNla0BpZ2FsaWEuY29tPi4KKworICAgICAgICBObyBiZWhhdmlvciBjaGFuZ2UuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UZXh0dXJlQ29waWVy
R1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvVGV4dHVyZUNvcGllckdTdHJl
YW1lcjo6VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlZp
ZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcjo6flZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXI6OmNvcHlWaWRl
b1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1ZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpwcmVwYXJlRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
ZHJhd0ZpbHRlcmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRTaGFkZXJMb2cp
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0UHJvZ3JhbUxvZyk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbTo6c2V0TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpnZXRMb2NhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6cHJvZ3JhbUlEIGNvbnN0KToKKwogMjAxNy0xMC0yMCAg
RnJlZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOiBNb3ZlIGltcGxlbWVudGF0aW9uIG9mIHNpbXBsZSBtZXRob2RzIGludG8gdGhl
IGhlYWRlciBmaWxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1ZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVh
bWVyLmNwcAppbmRleCBjNzhiMmQ2MzVkZWY2MmUyZjBhZmQwZjU0MWVmZmZkNjQzODEwNzI0Li40
ZWFhZWYxMTlmZGExODlhYTA1MjE5ZTAzNGM5NGEzNDJkOTdmODRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UZXh0dXJlQ29waWVy
R1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyLmNwcApAQCAtMjcsOSArMjcsNiBAQAog
I2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbS5oIgogCi0vLyBGSVhNRTogUmVtb3ZlIGFmdGVyIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtIGRyb3BzIEdyYXBoaWNzQ29udGV4dDNEIHVzYWdlLgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVmlkZW9UZXh0dXJlQ29w
aWVyR1N0cmVhbWVyOjpWaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXIoQ29sb3JDb252ZXJzaW9u
IGNvbG9yQ29udmVyc2lvbikKQEAgLTM4LDE1ICszNSwxNyBAQCBWaWRlb1RleHR1cmVDb3BpZXJH
U3RyZWFtZXI6OlZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcihDb2xvckNvbnZlcnNpb24gY29s
b3JDbwogICAgIEFTU0VSVChwcmV2aW91c0NvbnRleHQpOwogICAgIFBsYXRmb3JtRGlzcGxheTo6
c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpLT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKIAotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFJlbW92ZSBhZnRlciBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSBkcm9wcyBHcmFwaGljc0NvbnRleHQzRCB1c2FnZS4K
LSAgICAgICAgYXV0byBjb250ZXh0M0QgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRm9yQ3Vy
cmVudEdMQ29udGV4dCgpOwotICAgICAgICBtX3NoYWRlclByb2dyYW0gPSBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKCpjb250ZXh0M0QsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtOjpUZXh0dXJlKTsKLSAgICB9CisgICAgbV9zaGFkZXJQcm9ncmFtID0gVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06OmNyZWF0ZShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVy
ZSk7CiAKICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mcmFtZWJ1ZmZlcik7CiAgICAgZ2xH
ZW5UZXh0dXJlcygxLCAmbV9yZXN1bHRUZXh0dXJlKTsKIAorI2lmICFVU0UoT1BFTkdMX0VTXzIp
CisgICAgLy8gRm9yIE9wZW5HTCA+IDMuMiB3ZSBuZWVkIHRvIGhhdmUgYSBWQU8uCisgICAgaWYg
KEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKQorICAgICAgICBnbEdlblZl
cnRleEFycmF5cygxLCAmbV92YW8pOworI2VuZGlmCisKICAgICBzdGF0aWMgY29uc3QgR0xmbG9h
dCB2ZXJ0aWNlc1tdID0geyAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxIH07CiAgICAgZ2xHZW5CdWZm
ZXJzKDEsICZtX3Zibyk7CiAgICAgZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgbV92Ym8p
OwpAQCAtNjYsNiArNjUsMTAgQEAgVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyOjp+VmlkZW9U
ZXh0dXJlQ29waWVyR1N0cmVhbWVyKCkKICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9m
cmFtZWJ1ZmZlcik7CiAgICAgZ2xEZWxldGVCdWZmZXJzKDEsICZtX3Zibyk7CiAgICAgZ2xEZWxl
dGVUZXh0dXJlcygxLCAmbV9yZXN1bHRUZXh0dXJlKTsKKyNpZiAhVVNFKE9QRU5HTF9FU18yKQor
ICAgIGlmIChtX3ZhbykKKyAgICAgICAgZ2xEZWxldGVWZXJ0ZXhBcnJheXMoMSwgJm1fdmFvKTsK
KyNlbmRpZgogICAgIG1fc2hhZGVyUHJvZ3JhbSA9IG51bGxwdHI7CiAKICAgICBpZiAocHJldmlv
dXNDb250ZXh0KQpAQCAtMTkzLDYgKzE5NiwxMCBAQCBib29sIFZpZGVvVGV4dHVyZUNvcGllckdT
dHJlYW1lcjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdMdWludCBpbnB1dAog
ICAgIG1fc2hhZGVyUHJvZ3JhbS0+c2V0TWF0cml4KG1fc2hhZGVyUHJvZ3JhbS0+dGV4dHVyZUNv
bG9yU3BhY2VNYXRyaXhMb2NhdGlvbigpLCBtX2NvbG9yQ29udmVyc2lvbk1hdHJpeCk7CiAKICAg
ICAvLyBQZXJmb3JtIHRoZSBjb3B5LgorI2lmICFVU0UoT1BFTkdMX0VTXzIpCisgICAgaWYgKEdM
Q29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKQorICAgICAgICBnbEJpbmRWZXJ0
ZXhBcnJheShtX3Zhbyk7CisjZW5kaWYKICAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1f
c2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CiAgICAgZ2xCaW5kQnVmZmVyKEdMX0FS
UkFZX0JVRkZFUiwgbV92Ym8pOwogICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihtX3NoYWRlclBy
b2dyYW0tPnZlcnRleExvY2F0aW9uKCksIDIsIEdMX0ZMT0FULCBmYWxzZSwgMCwgMCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9U
ZXh0dXJlQ29waWVyR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyLmgKaW5kZXggMjE4OTc3Y2Ew
MTQ4YWNmNzExYWZlNGM5M2FlNTc1OWEyM2ZhZWExYi4uZjc3OTUzN2VjY2QyYTFiNTgyY2U4ZmZl
YWMwMWFkMDQwNDg0M2U1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RleHR1cmVDb3BpZXJH
U3RyZWFtZXIuaApAQCAtNTIsNiArNTIsOSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbT4gbV9zaGFkZXJQcm9ncmFtOwogICAgIEdMdWludCBtX2ZyYW1l
YnVmZmVyIHsgMCB9OwogICAgIEdMdWludCBtX3ZibyB7IDAgfTsKKyNpZiAhVVNFKE9QRU5HTF9F
U18yKQorICAgIEdMdWludCBtX3ZhbyB7IDAgfTsKKyNlbmRpZgogICAgIGJvb2wgbV9mbGlwWSB7
IGZhbHNlIH07CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOwogICAgIEludFNp
emUgbV9zaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCAxNWVkNzBhNWI2Yjg3MWMzMjNj
OWM3NDBjYWIwMGE0YTdmZGUwNDkyLi5lMmQ0NDk4ODAzNzc5ZGJkMGZhOTkyNDAxMmM5NmU4YTcx
ZTQwYTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIFBsYXRm
b3JtM0RPYmplY3QgVGV4dHVyZU1hcHBlckdMRGF0YTo6Z2V0U3RhdGljVkJPKEdDM0RlbnVtIHRh
cmdldCwgR0MzRHNpemVpcHRyCiBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1
cmVNYXBwZXJHTERhdGE6OmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06Ok9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fc2hhcmVkR0xE
YXRhLT5tX3Byb2dyYW1zLmVuc3VyZShvcHRpb25zLAotICAgICAgICBbdGhpcywgb3B0aW9uc10g
eyByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmNyZWF0ZShSZWY8R3JhcGhpY3ND
b250ZXh0M0Q+KG1fY29udGV4dCksIG9wdGlvbnMpOyB9KTsKKyAgICAgICAgW3RoaXMsIG9wdGlv
bnNdIHsgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUob3B0aW9ucyk7
IH0pOwogICAgIHJldHVybiAqYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIApAQCAtMzUy
LDkgKzM1Miw4IEBAIHN0YXRpYyBmbG9hdCogZ2F1c3NpYW5LZXJuZWwoKQogICAgIHJldHVybiBr
ZXJuZWw7CiB9CiAKLXN0YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtJiBwcm9ncmFtLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlv
biwgdW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRHVpbnQgY29udGVudFRl
eHR1cmUpCitzdGF0aWMgdm9pZCBwcmVwYXJlRmlsdGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0mIHByb2dyYW0sIGNvbnN0IEZp
bHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiBz
aXplLCBHQzNEdWludCBjb250ZW50VGV4dHVyZSkKIHsKLSAgICBSZWY8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQgPSBwcm9ncmFtLmNvbnRleHQoKTsKICAgICBjb250ZXh0LT51c2VQcm9ncmFt
KHByb2dyYW0ucHJvZ3JhbUlEKCkpOwogCiAgICAgc3dpdGNoIChvcGVyYXRpb24udHlwZSgpKSB7
CkBAIC00NzQsNyArNDczLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKFBs
YXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEkKICAgICBSZWY8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0U2hhZGVyUHJvZ3Jh
bShvcHRpb25zKTsKIAogICAgIGlmIChmaWx0ZXIpCi0gICAgICAgIHByZXBhcmVGaWx0ZXJQcm9n
cmFtKHByb2dyYW0uZ2V0KCksICpmaWx0ZXIuZ2V0KCksIGRhdGEoKS5maWx0ZXJJbmZvLT5wYXNz
LCB0ZXh0dXJlU2l6ZSwgZmlsdGVyQ29udGVudFRleHR1cmVJRCk7CisgICAgICAgIHByZXBhcmVG
aWx0ZXJQcm9ncmFtKG1fY29udGV4dDNELmdldCgpLCBwcm9ncmFtLmdldCgpLCAqZmlsdGVyLmdl
dCgpLCBkYXRhKCkuZmlsdGVySW5mby0+cGFzcywgdGV4dHVyZVNpemUsIGZpbHRlckNvbnRlbnRU
ZXh0dXJlSUQpOwogCiAgICAgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dyYW0uZ2V0
KCksIHRleHR1cmUsIGZsYWdzLCB0ZXh0dXJlU2l6ZSwgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0
cml4LCBvcGFjaXR5KTsKIH0KQEAgLTYyNiw3ICs2MjUsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6ZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUmIHNhbXBsZXIsIGNvbnN0IEJpdG1h
cFRleAogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zIG9wdGlvbnMgPSBv
cHRpb25zRm9yRmlsdGVyVHlwZShmaWx0ZXIudHlwZSgpLCBwYXNzKTsKICAgICBSZWY8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShv
cHRpb25zKTsKIAotICAgIHByZXBhcmVGaWx0ZXJQcm9ncmFtKHByb2dyYW0uZ2V0KCksIGZpbHRl
ciwgcGFzcywgc2FtcGxlci5jb250ZW50U2l6ZSgpLCBjb250ZW50VGV4dHVyZSA/IHN0YXRpY19j
YXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KGNvbnRlbnRUZXh0dXJlKS0+aWQoKSA6IDApOwor
ICAgIHByZXBhcmVGaWx0ZXJQcm9ncmFtKG1fY29udGV4dDNELmdldCgpLCBwcm9ncmFtLmdldCgp
LCBmaWx0ZXIsIHBhc3MsIHNhbXBsZXIuY29udGVudFNpemUoKSwgY29udGVudFRleHR1cmUgPyBz
dGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihjb250ZW50VGV4dHVyZSktPmlkKCkg
OiAwKTsKICAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdChJbnRQb2ludDo6emVybygpLCBzYW1wbGVy
LmNvbnRlbnRTaXplKCkpOwogICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFt
LmdldCgpLCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihzYW1wbGVyKS5pZCgp
LCAwLCBJbnRTaXplKDEsIDEpLCB0YXJnZXRSZWN0LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCAx
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uY3BwCmluZGV4IDZj
YjU5MmQwNDY3YjFmM2IyMDM0NDY1OWViZTlmMmU4NzM2YWM1N2YuLmRlYTc1YjAwYTBhNDk1OTI4
MGJkZGY1YWYxZDIwY2QwNTc2OWRhNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtLmNwcApAQCAtMjQsNiArMjQsNyBAQAogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVS
X0dMKQogCisjaW5jbHVkZSAiR0xDb250ZXh0LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KQEAgLTUwLDE4ICs1MSwzNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcG9zaXRpbmdM
b2dFbmFibGVkKCkKICAgICAgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIFRleHR1cmVTcGFjZU1h
dHJpeFByZWNpc2lvbiBtZWRpdW1wKSBcCiAgICAgR0xTTF9ESVJFQ1RJVkUoZW5kaWYpCiAKLXN0
YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhUZW1wbGF0ZSA9CisKKy8vIElucHV0L291dHB1dCB2YXJp
YWJsZXMgZGVmaW5pdGlvbiBmb3IgYm90aCBHTEVTIGFuZCBPcGVuR0wgPCAzLjIuCisvLyBUaGUg
ZGVmYXVsdCBwcmVjaXNpb24gZGlyZWN0aXZlIGlzIG9ubHkgbmVlZGVkIGZvciBHTEVTLgorc3Rh
dGljIGNvbnN0IGNoYXIqIHZlcnRleFRlbXBsYXRlTFQzMjBWYXJzID0KKyNpZiBVU0UoT1BFTkdM
X0VTXzIpCiAgICAgVEVYVFVSRV9TUEFDRV9NQVRSSVhfUFJFQ0lTSU9OX0RJUkVDVElWRQorI2Vu
ZGlmCiAgICAgU1RSSU5HSUZZKAorI2lmIFVTRShPUEVOR0xfRVNfMikKICAgICAgICAgcHJlY2lz
aW9uIFRleHR1cmVTcGFjZU1hdHJpeFByZWNpc2lvbiBmbG9hdDsKKyNlbmRpZgogICAgICAgICBh
dHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKLSAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3
TWF0cml4OwotICAgICAgICB1bmlmb3JtIG1hdDQgdV9wcm9qZWN0aW9uTWF0cml4OwotICAgICAg
ICB1bmlmb3JtIG1hdDQgdV90ZXh0dXJlU3BhY2VNYXRyaXg7Ci0KICAgICAgICAgdmFyeWluZyB2
ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RyYW5zZm9ybWVkVGV4Q29v
cmQ7CiAgICAgICAgIHZhcnlpbmcgZmxvYXQgdl9hbnRpYWxpYXM7CisgICAgKTsKKworLy8gSW5w
dXQvb3V0cHV0IHZhcmlhYmxlcyBkZWZpbml0aW9uIGZvciBPcGVuR0wgPj0gMy4yLgorc3RhdGlj
IGNvbnN0IGNoYXIqIHZlcnRleFRlbXBsYXRlR0UzMjBWYXJzID0KKyAgICBTVFJJTkdJRlkoCisg
ICAgICAgIGluIHZlYzQgYV92ZXJ0ZXg7CisgICAgICAgIG91dCB2ZWMyIHZfdGV4Q29vcmQ7Cisg
ICAgICAgIG91dCB2ZWMyIHZfdHJhbnNmb3JtZWRUZXhDb29yZDsKKyAgICAgICAgb3V0IGZsb2F0
IHZfYW50aWFsaWFzOworICAgICk7CisKK3N0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhUZW1wbGF0
ZUNvbW1vbiA9CisgICAgU1RSSU5HSUZZKAorICAgICAgICB1bmlmb3JtIG1hdDQgdV9tb2RlbFZp
ZXdNYXRyaXg7CisgICAgICAgIHVuaWZvcm0gbWF0NCB1X3Byb2plY3Rpb25NYXRyaXg7CisgICAg
ICAgIHVuaWZvcm0gbWF0NCB1X3RleHR1cmVTcGFjZU1hdHJpeDsKIAogICAgICAgICB2b2lkIG5v
b3AoaW5vdXQgdmVjMiBkdW1teVBhcmFtZXRlcikgeyB9CiAKQEAgLTEzNiwyMiArMTU2LDQ4IEBA
IHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhUZW1wbGF0ZSA9CiAgICAgR0xTTF9ESVJFQ1RJVkUo
ZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9TVEVQIDAuMikKIAogCi1zdGF0aWMgY29uc3QgY2hhciog
ZnJhZ21lbnRUZW1wbGF0ZSA9CisvLyBDb21tb24gaGVhZGVyIGZvciBhbGwgdmVyc2lvbnMuIFdl
IGRlZmluZSB0aGUgbWF0cmljZXMgdmFyaWFibGVzIGhlcmUgdG8ga2VlcCB0aGUgcHJlY2lzaW9u
CisvLyBkaXJlY3RpdmVzIHNjb3BlOiB0aGUgZmlyc3Qgb25lIGFwcGxpZXMgdG8gdGhlIG1hdHJp
Y2VzIHZhcmlhYmxlcyBhbmQgdGhlIG5leHQgb25lIHRvIHRoZQorLy8gcmVzdCBvZiB0aGVtLiBU
aGUgcHJlY2lzaW9uIGlzIG9ubHkgdXNlZCBpbiBHTEVTLgorc3RhdGljIGNvbnN0IGNoYXIqIGZy
YWdtZW50VGVtcGxhdGVIZWFkZXJDb21tb24gPQogICAgIFJFQ1RfVEVYVFVSRV9ESVJFQ1RJVkUK
ICAgICBBTlRJQUxJQVNJTkdfVEVYX0NPT1JEX0RJUkVDVElWRQogICAgIEJMVVJfQ09OU1RBTlRT
CisjaWYgVVNFKE9QRU5HTF9FU18yKQogICAgIFRFWFRVUkVfU1BBQ0VfTUFUUklYX1BSRUNJU0lP
Tl9ESVJFQ1RJVkUKKyNlbmRpZgogICAgIFNUUklOR0lGWSgKKyNpZiBVU0UoT1BFTkdMX0VTXzIp
CiAgICAgICAgIHByZWNpc2lvbiBUZXh0dXJlU3BhY2VNYXRyaXhQcmVjaXNpb24gZmxvYXQ7Cisj
ZW5kaWYKICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfdGV4dHVyZVNwYWNlTWF0cml4OwogICAgICAg
ICB1bmlmb3JtIG1hdDQgdV90ZXh0dXJlQ29sb3JTcGFjZU1hdHJpeDsKKyNpZiBVU0UoT1BFTkdM
X0VTXzIpCiAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICB1bmlmb3Jt
IFNhbXBsZXJUeXBlIHNfc2FtcGxlcjsKLSAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19jb250
ZW50VGV4dHVyZTsKLSAgICAgICAgdW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7CisjZW5kaWYKKyAg
ICApOworCisvLyBJbnB1dC9vdXRwdXQgdmFyaWFibGVzIGRlZmluaXRpb24gZm9yIGJvdGggR0xF
UyBhbmQgT3BlbkdMIDwgMy4yLgorc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGVM
VDMyMFZhcnMgPQorICAgIFNUUklOR0lGWSgKICAgICAgICAgdmFyeWluZyBmbG9hdCB2X2FudGlh
bGlhczsKICAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgIHZhcnlpbmcg
dmVjMiB2X3RyYW5zZm9ybWVkVGV4Q29vcmQ7CisgICAgKTsKKworLy8gSW5wdXQvb3V0cHV0IHZh
cmlhYmxlcyBkZWZpbml0aW9uIGZvciBPcGVuR0wgPj0gMy4yLgorc3RhdGljIGNvbnN0IGNoYXIq
IGZyYWdtZW50VGVtcGxhdGVHRTMyMFZhcnMgPQorICAgIFNUUklOR0lGWSgKKyAgICAgICAgaW4g
ZmxvYXQgdl9hbnRpYWxpYXM7CisgICAgICAgIGluIHZlYzIgdl90ZXhDb29yZDsKKyAgICAgICAg
aW4gdmVjMiB2X3RyYW5zZm9ybWVkVGV4Q29vcmQ7CisgICAgKTsKKworc3RhdGljIGNvbnN0IGNo
YXIqIGZyYWdtZW50VGVtcGxhdGVDb21tb24gPQorICAgIFNUUklOR0lGWSgKKyAgICAgICAgdW5p
Zm9ybSBTYW1wbGVyVHlwZSBzX3NhbXBsZXI7CisgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNf
Y29udGVudFRleHR1cmU7CisgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OwogICAgICAg
ICB1bmlmb3JtIGZsb2F0IHVfZmlsdGVyQW1vdW50OwogICAgICAgICB1bmlmb3JtIHZlYzIgdV9i
bHVyUmFkaXVzOwogICAgICAgICB1bmlmb3JtIHZlYzIgdV9zaGFkb3dPZmZzZXQ7CkBAIC0zMDUs
NyArMzUxLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGUgPQogICAgICAg
ICB9CiAgICAgKTsKIAotUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKFJlZjxHcmFwaGljc0NvbnRleHQzRD4mJiBjb250ZXh0
LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6T3B0aW9ucyBvcHRpb25zKQorUmVmPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRl
KFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zIG9wdGlvbnMpCiB7CiAjZGVmaW5l
IFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBcHBsaWVyKSBcCiAgICAgb3B0aW9uc0FwcGxpZXJC
dWlsZGVyLmFwcGVuZChcCkBAIC0zMzAsNDUgKzM3NiwxMjQgQEAgUmVmPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKFJlZjxHcmFw
aGljc0MKICAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udGVudFRleHR1cmUpOwogICAg
IFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhNYW51YWxSZXBlYXQpOwogCisgICAgdW5zaWduZWQg
Z2xWZXJzaW9uID0gR0xDb250ZXh0OjpjdXJyZW50KCktPnZlcnNpb24oKTsKICAgICBTdHJpbmdC
dWlsZGVyIHZlcnRleFNoYWRlckJ1aWxkZXI7CisKKyAgICAvLyBPcGVuR0wgPj0gMy4yIHJlcXVp
cmVzIGEgI3ZlcnNpb24gZGlyZWN0aXZlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvZGUuCisj
aWYgIVVTRShPUEVOR0xfRVNfMikKKyAgICBpZiAoZ2xWZXJzaW9uID49IDMyMCkKKyAgICAgICAg
dmVydGV4U2hhZGVyQnVpbGRlci5hcHBlbmQoR0xTTF9ESVJFQ1RJVkUodmVyc2lvbiAxNTApKTsK
KyNlbmRpZgorCisgICAgLy8gQXBwZW5kIHRoZSBvcHRpb25zLgogICAgIHZlcnRleFNoYWRlckJ1
aWxkZXIuYXBwZW5kKG9wdGlvbnNBcHBsaWVyQnVpbGRlci50b1N0cmluZygpKTsKLSAgICB2ZXJ0
ZXhTaGFkZXJCdWlsZGVyLmFwcGVuZCh2ZXJ0ZXhUZW1wbGF0ZSk7CisKKyAgICAvLyBBcHBlbmQg
dGhlIGFwcHJvcHJpYXRlIGlucHV0L291dHB1dCB2YXJpYWJsZSBkZWZpbml0aW9ucy4KKyNpZiBV
U0UoT1BFTkdMX0VTXzIpCisgICAgdmVydGV4U2hhZGVyQnVpbGRlci5hcHBlbmQodmVydGV4VGVt
cGxhdGVMVDMyMFZhcnMpOworI2Vsc2UKKyAgICBpZiAoZ2xWZXJzaW9uID49IDMyMCkKKyAgICAg
ICAgdmVydGV4U2hhZGVyQnVpbGRlci5hcHBlbmQodmVydGV4VGVtcGxhdGVHRTMyMFZhcnMpOwor
ICAgIGVsc2UKKyAgICAgICAgdmVydGV4U2hhZGVyQnVpbGRlci5hcHBlbmQodmVydGV4VGVtcGxh
dGVMVDMyMFZhcnMpOworI2VuZGlmCisKKyAgICAvLyBBcHBlbmQgdGhlIGNvbW1vbiBjb2RlLgor
ICAgIHZlcnRleFNoYWRlckJ1aWxkZXIuYXBwZW5kKHZlcnRleFRlbXBsYXRlQ29tbW9uKTsKIAog
ICAgIFN0cmluZ0J1aWxkZXIgZnJhZ21lbnRTaGFkZXJCdWlsZGVyOworCisgICAgLy8gT3BlbkdM
ID49IDMuMiByZXF1aXJlcyBhICN2ZXJzaW9uIGRpcmVjdGl2ZSBhdCB0aGUgYmVnaW5uaW5nIG9m
IHRoZSBjb2RlLgorI2lmICFVU0UoT1BFTkdMX0VTXzIpCisgICAgaWYgKGdsVmVyc2lvbiA+PSAz
MjApCisgICAgICAgIGZyYWdtZW50U2hhZGVyQnVpbGRlci5hcHBlbmQoR0xTTF9ESVJFQ1RJVkUo
dmVyc2lvbiAxNTApKTsKKyNlbmRpZgorCisgICAgLy8gQXBwZW5kIHRoZSBvcHRpb25zLgogICAg
IGZyYWdtZW50U2hhZGVyQnVpbGRlci5hcHBlbmQob3B0aW9uc0FwcGxpZXJCdWlsZGVyLnRvU3Ry
aW5nKCkpOwotICAgIGZyYWdtZW50U2hhZGVyQnVpbGRlci5hcHBlbmQoZnJhZ21lbnRUZW1wbGF0
ZSk7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bShXVEZNb3ZlKGNvbnRleHQpLCB2ZXJ0ZXhTaGFkZXJCdWlsZGVyLnRvU3RyaW5nKCksIGZyYWdt
ZW50U2hhZGVyQnVpbGRlci50b1N0cmluZygpKSk7CisgICAgLy8gQXBwZW5kIHRoZSBjb21tb24g
aGVhZGVyLgorICAgIGZyYWdtZW50U2hhZGVyQnVpbGRlci5hcHBlbmQoZnJhZ21lbnRUZW1wbGF0
ZUhlYWRlckNvbW1vbik7CisKKyAgICAvLyBBcHBlbmQgdGhlIGFwcHJvcHJpYXRlIGlucHV0L291
dHB1dCB2YXJpYWJsZSBkZWZpbml0aW9ucy4KKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgZnJh
Z21lbnRTaGFkZXJCdWlsZGVyLmFwcGVuZChmcmFnbWVudFRlbXBsYXRlTFQzMjBWYXJzKTsKKyNl
bHNlCisgICAgaWYgKGdsVmVyc2lvbiA+PSAzMjApCisgICAgICAgIGZyYWdtZW50U2hhZGVyQnVp
bGRlci5hcHBlbmQoZnJhZ21lbnRUZW1wbGF0ZUdFMzIwVmFycyk7CisgICAgZWxzZQorICAgICAg
ICBmcmFnbWVudFNoYWRlckJ1aWxkZXIuYXBwZW5kKGZyYWdtZW50VGVtcGxhdGVMVDMyMFZhcnMp
OworI2VuZGlmCisKKyAgICAvLyBBcHBlbmQgdGhlIGNvbW1vbiBjb2RlLgorICAgIGZyYWdtZW50
U2hhZGVyQnVpbGRlci5hcHBlbmQoZnJhZ21lbnRUZW1wbGF0ZUNvbW1vbik7CisKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJC
dWlsZGVyLnRvU3RyaW5nKCksIGZyYWdtZW50U2hhZGVyQnVpbGRlci50b1N0cmluZygpKSk7CiB9
CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bShSZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYgY29udGV4dCwgY29uc3QgU3RyaW5nJiB2ZXJ0ZXgs
IGNvbnN0IFN0cmluZyYgZnJhZ21lbnQpCi0gICAgOiBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0
KSkKKyNpZiAhTE9HX0RJU0FCTEVECitzdGF0aWMgQ1N0cmluZyBnZXRTaGFkZXJMb2coR0x1aW50
IHNoYWRlcikKIHsKLSAgICBtX3ZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVy
KEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKLSAgICBtX2NvbnRleHQtPnNoYWRl
clNvdXJjZShtX3ZlcnRleFNoYWRlciwgdmVydGV4KTsKKyAgICBHTGludCBsb2dMZW5ndGggPSAw
OworICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsb2dMZW5n
dGgpOworICAgIGlmICghbG9nTGVuZ3RoKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0
byBpbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxHTGNoYXJbXT4obG9nTGVuZ3RoKTsKKyAgICBHTHNp
emVpIGluZm9MZW5ndGggPSAwOworICAgIGdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxvZ0xl
bmd0aCwgJmluZm9MZW5ndGgsIGluZm8uZ2V0KCkpOwogCi0gICAgbV9mcmFnbWVudFNoYWRlciA9
IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFE
RVIpOwotICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG1fZnJhZ21lbnRTaGFkZXIsIGZyYWdt
ZW50KTsKKyAgICBzaXplX3Qgc3RyaW5nTGVuZ3RoID0gc3RkOjptYXgoaW5mb0xlbmd0aCwgMCk7
CisgICAgcmV0dXJuIHsgaW5mby5nZXQoKSwgc3RyaW5nTGVuZ3RoIH07Cit9CiAKLSAgICBtX2lk
ID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7Ci0gICAgbV9jb250ZXh0LT5jb21waWxlU2hh
ZGVyKG1fdmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIobV9mcmFn
bWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIobV9pZCwgbV92ZXJ0ZXhT
aGFkZXIpOwotICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG1faWQsIG1fZnJhZ21lbnRTaGFk
ZXIpOwotICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0obV9pZCk7CitzdGF0aWMgQ1N0cmluZyBn
ZXRQcm9ncmFtTG9nKEdMdWludCBwcm9ncmFtKQoreworICAgIEdMaW50IGxvZ0xlbmd0aCA9IDA7
CisgICAgZ2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVOR1RILCAmbG9nTGVu
Z3RoKTsKKyAgICBpZiAoIWxvZ0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGlm
ICghY29tcG9zaXRpbmdMb2dFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGlu
Zm8gPSBzdGQ6Om1ha2VfdW5pcXVlPEdMY2hhcltdPihsb2dMZW5ndGgpOworICAgIEdMc2l6ZWkg
aW5mb0xlbmd0aCA9IDA7CisgICAgZ2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsb2dMZW5n
dGgsICZpbmZvTGVuZ3RoLCBpbmZvLmdldCgpKTsKIAotICAgIGlmIChtX2NvbnRleHQtPmdldEVy
cm9yKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorICAgIHNpemVfdCBzdHJpbmdM
ZW5ndGggPSBzdGQ6Om1heChpbmZvTGVuZ3RoLCAwKTsKKyAgICByZXR1cm4geyBpbmZvLmdldCgp
LCBzdHJpbmdMZW5ndGggfTsKK30KKyNlbmRpZgorCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29uc3QgU3RyaW5nJiB2ZXJ0ZXgsIGNvbnN0
IFN0cmluZyYgZnJhZ21lbnQpCit7CisgICAgbV92ZXJ0ZXhTaGFkZXIgPSBnbENyZWF0ZVNoYWRl
cihHTF9WRVJURVhfU0hBREVSKTsKKyAgICB7CisgICAgICAgIENTdHJpbmcgdmVydGV4Q1N0cmlu
ZyA9IHZlcnRleC51dGY4KCk7CisgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEgPSB2ZXJ0ZXhDU3Ry
aW5nLmRhdGEoKTsKKyAgICAgICAgaW50IGxlbmd0aCA9IHZlcnRleENTdHJpbmcubGVuZ3RoKCk7
CisgICAgICAgIGdsU2hhZGVyU291cmNlKG1fdmVydGV4U2hhZGVyLCAxLCAmZGF0YSwgJmxlbmd0
aCk7CisgICAgfQorICAgIGdsQ29tcGlsZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7CisKKyAgICBt
X2ZyYWdtZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKKyAg
ICB7CisgICAgICAgIENTdHJpbmcgZnJhZ21lbnRDU3RyaW5nID0gZnJhZ21lbnQudXRmOCgpOwor
ICAgICAgICBjb25zdCBjaGFyKiBkYXRhID0gZnJhZ21lbnRDU3RyaW5nLmRhdGEoKTsKKyAgICAg
ICAgaW50IGxlbmd0aCA9IGZyYWdtZW50Q1N0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgZ2xTaGFk
ZXJTb3VyY2UobV9mcmFnbWVudFNoYWRlciwgMSwgJmRhdGEsICZsZW5ndGgpOworICAgIH0KKyAg
ICBnbENvbXBpbGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7CisKKyAgICBtX2lkID0gZ2xDcmVh
dGVQcm9ncmFtKCk7CisgICAgZ2xBdHRhY2hTaGFkZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOwor
ICAgIGdsQXR0YWNoU2hhZGVyKG1faWQsIG1fZnJhZ21lbnRTaGFkZXIpOworICAgIGdsTGlua1By
b2dyYW0obV9pZCk7CisKKyAgICBpZiAoIWNvbXBvc2l0aW5nTG9nRW5hYmxlZCgpIHx8IGdsR2V0
RXJyb3IoKSA9PSBHTF9OT19FUlJPUikKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGxv
ZyA9IG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhtX3ZlcnRleFNoYWRlcik7Ci0gICAgTE9H
KENvbXBvc2l0aW5nLCAiVmVydGV4IHNoYWRlciBsb2c6ICVzXG4iLCBsb2cudXRmOCgpLmRhdGEo
KSk7Ci0gICAgbG9nID0gbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKG1fZnJhZ21lbnRTaGFk
ZXIpOwotICAgIExPRyhDb21wb3NpdGluZywgIkZyYWdtZW50IHNoYWRlciBsb2c6ICVzXG4iLCBs
b2cudXRmOCgpLmRhdGEoKSk7Ci0gICAgbG9nID0gbV9jb250ZXh0LT5nZXRQcm9ncmFtSW5mb0xv
ZyhtX2lkKTsKLSAgICBMT0coQ29tcG9zaXRpbmcsICJQcm9ncmFtIGxvZzogJXNcbiIsIGxvZy51
dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coQ29tcG9zaXRpbmcsICJWZXJ0ZXggc2hhZGVyIGxvZzog
JXNcbiIsIGdldFNoYWRlckxvZyhtX3ZlcnRleFNoYWRlcikuZGF0YSgpKTsKKyAgICBMT0coQ29t
cG9zaXRpbmcsICJGcmFnbWVudCBzaGFkZXIgbG9nOiAlc1xuIiwgZ2V0U2hhZGVyTG9nKG1fZnJh
Z21lbnRTaGFkZXIpLmRhdGEoKSk7CisgICAgTE9HKENvbXBvc2l0aW5nLCAiUHJvZ3JhbSBsb2c6
ICVzXG4iLCBnZXRQcm9ncmFtTG9nKG1faWQpLmRhdGEoKSk7CiB9CiAKIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQpAQCAtMzc2LDI5ICs1
MDEsMzAgQEAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbSgpCiAgICAgaWYgKCFtX2lkKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2NvbnRl
eHQtPmRldGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5k
ZWxldGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVy
KG1faWQsIG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1f
ZnJhZ21lbnRTaGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX2lkKTsKKyAg
ICBnbERldGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7CisgICAgZ2xEZWxldGVTaGFk
ZXIobV92ZXJ0ZXhTaGFkZXIpOworICAgIGdsRGV0YWNoU2hhZGVyKG1faWQsIG1fZnJhZ21lbnRT
aGFkZXIpOworICAgIGdsRGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOworICAgIGdsRGVs
ZXRlUHJvZ3JhbShtX2lkKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
c2V0TWF0cml4KEdDM0R1aW50IGxvY2F0aW9uLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bWF0cml4KQordm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6c2V0TWF0cml4KEdMdWlu
dCBsb2NhdGlvbiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKIHsKICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6RmxvYXRNYXRyaXg0IGZsb2F0TWF0cml4OwogICAgIG1hdHJp
eC50b0NvbHVtbk1ham9yRmxvYXRBcnJheShmbG9hdE1hdHJpeCk7Ci0gICAgbV9jb250ZXh0LT51
bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCAxLCBmYWxzZSwgZmxvYXRNYXRyaXgpOworICAgIGds
VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgMSwgZmFsc2UsIGZsb2F0TWF0cml4KTsKIH0KIAot
R0MzRHVpbnQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldExvY2F0aW9uKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgVmFyaWFibGVUeXBlIHR5cGUpCitHTHVpbnQgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06OmdldExvY2F0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgVmFy
aWFibGVUeXBlIHR5cGUpCiB7CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3ZhcmlhYmxlcy5lbnN1
cmUobmFtZSwKICAgICAgICAgW3RoaXMsICZuYW1lLCB0eXBlXSB7CisgICAgICAgICAgICBDU3Ry
aW5nIG5hbWVDU3RyaW5nID0gbmFtZS5zdHJpbmcoKS51dGY4KCk7CiAgICAgICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgVW5pZm9ybVZhcmlhYmxlOgotICAgICAgICAg
ICAgICAgIHJldHVybiBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX2lkLCBuYW1lKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9pZCwgbmFtZUNT
dHJpbmcuZGF0YSgpKTsKICAgICAgICAgICAgIGNhc2UgQXR0cmliVmFyaWFibGU6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24obV9pZCwgbmFtZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsR2V0QXR0cmliTG9jYXRpb24obV9pZCwgbmFtZUNT
dHJpbmcuZGF0YSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbS5oCmluZGV4IGRhNTI1NmI4MzA5NDc1MDliODJkMjY4YWFjMzNlMjhhNGVjMjI0
OTkuLjhkYTFlNDI4MTllMGQxNzQ3ODdiMzdmYTBmNTZmNDFmMjFmMjZjZWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oCkBAIC0yMyw3ICsyMyw3IEBACiAKICNpZiBV
U0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTEhlYWRlcnMuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfVkFSSUFCTEUoQWNjZXNzb3IsIE5hbWUsIFR5cGUpIFwK
LSAgICBHQzNEdWludCBBY2Nlc3NvciMjTG9jYXRpb24oKSB7IFwKKyAgICBHTHVpbnQgQWNjZXNz
b3IjI0xvY2F0aW9uKCkgeyBcCiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBB
dG9taWNTdHJpbmc+IG5hbWUoTmFtZSwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7IFwKICAgICAgICAgcmV0dXJuIGdldExvY2F0aW9uKG5hbWUuZ2V0KCksIFR5cGUpOyBcCiAg
ICAgfQpAQCAtNjYsMTEgKzY2LDEwIEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYgdW5zaWduZWQg
T3B0aW9uczsKIAotICAgIHN0YXRpYyBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGNy
ZWF0ZShSZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYsIE9wdGlvbnMpOworICAgIHN0YXRpYyBSZWY8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGNyZWF0ZShPcHRpb25zKTsKICAgICB2aXJ0dWFs
IH5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpOwogCi0gICAgUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtSUQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Qm
IGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KKyAgICBHTHVpbnQgcHJvZ3JhbUlEKCkg
Y29uc3QgeyByZXR1cm4gbV9pZDsgfQogCiAgICAgVEVYTUFQX0RFQ0xBUkVfQVRUUklCVVRFKHZl
cnRleCkKIApAQCAtOTAsMjAgKzg5LDE5IEBAIHB1YmxpYzoKICAgICBURVhNQVBfREVDTEFSRV9V
TklGT1JNKHNoYWRvd09mZnNldCkKICAgICBURVhNQVBfREVDTEFSRV9TQU1QTEVSKGNvbnRlbnRU
ZXh0dXJlKQogCi0gICAgdm9pZCBzZXRNYXRyaXgoR0MzRHVpbnQsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4Jik7CisgICAgdm9pZCBzZXRNYXRyaXgoR0x1aW50LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYpOwogCiBwcml2YXRlOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
KFJlZjxHcmFwaGljc0NvbnRleHQzRD4mJiwgY29uc3QgU3RyaW5nJiB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOworICAgIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKGNvbnN0IFN0cmluZyYgdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBT
dHJpbmcmIGZyYWdtZW50U2hhZGVyU291cmNlKTsKIAotICAgIFBsYXRmb3JtM0RPYmplY3QgbV92
ZXJ0ZXhTaGFkZXI7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50U2hhZGVyOworICAg
IEdMdWludCBtX3ZlcnRleFNoYWRlcjsKKyAgICBHTHVpbnQgbV9mcmFnbWVudFNoYWRlcjsKIAog
ICAgIGVudW0gVmFyaWFibGVUeXBlIHsgVW5pZm9ybVZhcmlhYmxlLCBBdHRyaWJWYXJpYWJsZSB9
OwotICAgIEdDM0R1aW50IGdldExvY2F0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYsIFZhcmlhYmxl
VHlwZSk7CisgICAgR0x1aW50IGdldExvY2F0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYsIFZhcmlh
YmxlVHlwZSk7CiAKLSAgICBSZWY8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKLSAgICBQ
bGF0Zm9ybTNET2JqZWN0IG1faWQ7Ci0gICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIEdDM0R1aW50
PiBtX3ZhcmlhYmxlczsKKyAgICBHTHVpbnQgbV9pZDsKKyAgICBIYXNoTWFwPEF0b21pY1N0cmlu
ZywgR0x1aW50PiBtX3ZhcmlhYmxlczsKIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324548</attachid>
            <date>2017-10-23 01:14:16 -0700</date>
            <delta_ts>2017-10-23 03:11:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175425-20171023101415.patch</filename>
            <type>text/plain</type>
            <size>22949</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIzODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDFkNmJiMjU3MWZiNWY4
NDIzZTMzNjY4YjBmOGJkNGVkOGE1ODQxMy4uZTE1NzU1NDBmNjM5NjYzMjA1MTJkZWExYjIzYjQ5
ZjE4N2VhZTY3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE3LTEwLTIzICBNaWd1
ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW1RleE1hcF0gUmVtb3Zl
IEdyYXBoaWNzQ29udGV4dDNEIHVzYWdlIGZyb20gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTQyNQor
CisgICAgICAgIFJldmlld2VkIGJ5IMW9YW4gRG9iZXLFoWVrLgorCisgICAgICAgIFJlbW92ZSB1
c2FnZSBvZiB0aGUgR3JhcGhpY3NDb250ZXh0M0QgY2xhc3MgaW4gVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0uCisgICAgICAgIERpcmVjdCBPcGVuR0wgQVBJIGNhbGxzLCB0eXBlcyBhbmQgY29u
c3RhbnRzIGFyZSB1c2VkIGluc3RlYWQuCisKKyAgICAgICAgQnkgcmVtb3ZpbmcgR3JhcGhpY3ND
b250ZXh0M0QsIHdlIGRvbid0IHVzZSBBTkdMRSBhbnltb3JlIHRvIHBlcmZvcm0gdGhlCisgICAg
ICAgIHNoYWRlciBhZGFwdGF0aW9uIHRvIHRoZSB1c2VkIE9wZW5HTC9HTEVTMiB2ZXJzaW9uLCBz
byB3ZSBuZWVkIHRvIGRvIHRoYXQKKyAgICAgICAgaW5zaWRlIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtLiBUaGUgbWFpbiBjaGFuZ2VzIHJlcXVpcmVkIGZvciB0aGlzIGFyZQorICAgICAgICBh
ZGRpbmcgdGhlICN2ZXJzaW9uIGRpcmVjdGl2ZSBhbmQgdXNlIGluL291dCB0byBkZWZpbmUgaW5w
dXQvb3V0cHV0IHBhcmFtZXRlcnMKKyAgICAgICAgd2hlbiB1c2luZyBPcGVuR0wgPj0gMy4yLCBh
bmQgZGVmaW5pbmcgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIG9ubHkgd2hlbiB1c2luZworICAgICAg
ICBHTEVTMi4KKworICAgICAgICBCZXNpZGVzIHRoYXQsIG5vdyB0aGF0IFZpZGVvVGV4dHVyZUNv
cGllckdTdHJlYW1lciBkb2Vzbid0IGhhdmUgaXRzIG93bgorICAgICAgICBHcmFwaGljc0NvbnRl
eHQzRCwgd2UgbmVlZCB0byBhZGQgYSBWQU8gdG8gaXQgd2hlbiB1c2luZyBPcGVuR0wgPj0gMy4y
LgorCisgICAgICAgIEJhc2VkIG9uIGEgcHJldmlvdXMgcGF0Y2ggYnkgxb1hbiBEb2JlcsWhZWsg
PHpkb2JlcnNla0BpZ2FsaWEuY29tPi4KKworICAgICAgICBObyBiZWhhdmlvciBjaGFuZ2UuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UZXh0dXJlQ29waWVy
R1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvVGV4dHVyZUNvcGllckdTdHJl
YW1lcjo6VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlZp
ZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcjo6flZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXI6OmNvcHlWaWRl
b1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1ZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpwcmVwYXJlRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
ZHJhd0ZpbHRlcmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRTaGFkZXJMb2cp
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0UHJvZ3JhbUxvZyk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbTo6c2V0TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpnZXRMb2NhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6cHJvZ3JhbUlEIGNvbnN0KToKKwogMjAxNy0xMC0yMiAg
U2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtTZXR0aW5nc10gUmVwbGFj
ZSBjdXJyZW50IFNldHRpbmdzIGdlbmVyYXRpb24gd2l0aCB0ZW1wbGF0ZSBmaWxlIGJhc2VkIGFw
cHJvYWNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXIuY3Bw
CmluZGV4IGM3OGIyZDYzNWRlZjYyZTJmMGFmZDBmNTQxZWZmZmQ2NDM4MTA3MjQuLmI0ZDc4MzJk
NzM3YmZiMGU2NGM4MGNmZWQ2ZDFiNGZhMGFmYWVkNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFt
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9W
aWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXIuY3BwCkBAIC0yNyw5ICsyNyw2IEBACiAjaW5jbHVk
ZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtLmgiCiAKLS8vIEZJWE1FOiBSZW1vdmUgYWZ0ZXIgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0gZHJvcHMgR3JhcGhpY3NDb250ZXh0M0QgdXNhZ2UuCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBWaWRlb1RleHR1cmVDb3BpZXJHU3Ry
ZWFtZXI6OlZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcihDb2xvckNvbnZlcnNpb24gY29sb3JD
b252ZXJzaW9uKQpAQCAtMzgsMTUgKzM1LDE3IEBAIFZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1l
cjo6VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyKENvbG9yQ29udmVyc2lvbiBjb2xvckNvCiAg
ICAgQVNTRVJUKHByZXZpb3VzQ29udGV4dCk7CiAgICAgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWRE
aXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCktPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogCi0gICAgewotICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIGFmdGVyIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtIGRyb3BzIEdyYXBoaWNzQ29udGV4dDNEIHVzYWdlLgotICAgICAg
ICBhdXRvIGNvbnRleHQzRCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGb3JDdXJyZW50R0xD
b250ZXh0KCk7Ci0gICAgICAgIG1fc2hhZGVyUHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpjcmVhdGUoKmNvbnRleHQzRCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRl
eHR1cmUpOwotICAgIH0KKyAgICBtX3NoYWRlclByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbTo6Y3JlYXRlKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlKTsKIAog
ICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2ZyYW1lYnVmZmVyKTsKICAgICBnbEdlblRleHR1
cmVzKDEsICZtX3Jlc3VsdFRleHR1cmUpOwogCisjaWYgIVVTRShPUEVOR0xfRVNfMikKKyAgICAv
LyBGb3IgT3BlbkdMID4gMy4yIHdlIG5lZWQgdG8gaGF2ZSBhIFZBTy4KKyAgICBpZiAoR0xDb250
ZXh0OjpjdXJyZW50KCktPnZlcnNpb24oKSA+PSAzMjApCisgICAgICAgIGdsR2VuVmVydGV4QXJy
YXlzKDEsICZtX3Zhbyk7CisjZW5kaWYKKwogICAgIHN0YXRpYyBjb25zdCBHTGZsb2F0IHZlcnRp
Y2VzW10gPSB7IDAsIDAsIDEsIDAsIDEsIDEsIDAsIDEgfTsKICAgICBnbEdlbkJ1ZmZlcnMoMSwg
Jm1fdmJvKTsKICAgICBnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBtX3Zibyk7CkBAIC02
Niw2ICs2NSwxMCBAQCBWaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXI6On5WaWRlb1RleHR1cmVD
b3BpZXJHU3RyZWFtZXIoKQogICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2ZyYW1lYnVm
ZmVyKTsKICAgICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJm1fdmJvKTsKICAgICBnbERlbGV0ZVRleHR1
cmVzKDEsICZtX3Jlc3VsdFRleHR1cmUpOworI2lmICFVU0UoT1BFTkdMX0VTXzIpCisgICAgaWYg
KG1fdmFvKQorICAgICAgICBnbERlbGV0ZVZlcnRleEFycmF5cygxLCAmbV92YW8pOworI2VuZGlm
CiAgICAgbV9zaGFkZXJQcm9ncmFtID0gbnVsbHB0cjsKIAogICAgIGlmIChwcmV2aW91c0NvbnRl
eHQpCkBAIC0xOTMsNiArMTk2LDEwIEBAIGJvb2wgVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVy
Ojpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR0x1aW50IGlucHV0CiAgICAgbV9z
aGFkZXJQcm9ncmFtLT5zZXRNYXRyaXgobV9zaGFkZXJQcm9ncmFtLT50ZXh0dXJlQ29sb3JTcGFj
ZU1hdHJpeExvY2F0aW9uKCksIG1fY29sb3JDb252ZXJzaW9uTWF0cml4KTsKIAogICAgIC8vIFBl
cmZvcm0gdGhlIGNvcHkuCisjaWYgIVVTRShPUEVOR0xfRVNfMikKKyAgICBpZiAoR0xDb250ZXh0
OjpjdXJyZW50KCktPnZlcnNpb24oKSA+PSAzMjAgJiYgbV92YW8pCisgICAgICAgIGdsQmluZFZl
cnRleEFycmF5KG1fdmFvKTsKKyNlbmRpZgogICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXko
bV9zaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKICAgICBnbEJpbmRCdWZmZXIoR0xf
QVJSQVlfQlVGRkVSLCBtX3Zibyk7CiAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1fc2hhZGVy
UHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSwgMiwgR0xfRkxPQVQsIGZhbHNlLCAwLCAwKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRl
b1RleHR1cmVDb3BpZXJHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9WaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXIuaAppbmRleCAyMTg5Nzdj
YTAxNDhhY2Y3MTFhZmU0YzkzYWU1NzU5YTIzZmFlYTFiLi5mNzc5NTM3ZWNjZDJhMWI1ODJjZThm
ZmVhYzAxYWQwNDA0ODQzZTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVGV4dHVyZUNvcGll
ckdTdHJlYW1lci5oCkBAIC01Miw2ICs1Miw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBtX3NoYWRlclByb2dyYW07CiAgICAgR0x1aW50IG1fZnJh
bWVidWZmZXIgeyAwIH07CiAgICAgR0x1aW50IG1fdmJvIHsgMCB9OworI2lmICFVU0UoT1BFTkdM
X0VTXzIpCisgICAgR0x1aW50IG1fdmFvIHsgMCB9OworI2VuZGlmCiAgICAgYm9vbCBtX2ZsaXBZ
IHsgZmFsc2UgfTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CiAgICAgSW50
U2l6ZSBtX3NpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDE1ZWQ3MGE1YjZiODcxYzMy
M2M5Yzc0MGNhYjAwYTRhN2ZkZTA0OTIuLmUyZDQ0OTg4MDM3NzlkYmQwZmE5OTI0MDEyYzk2ZThh
NzFlNDBhMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgUGxh
dGZvcm0zRE9iamVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhOjpnZXRTdGF0aWNWQk8oR0MzRGVudW0g
dGFyZ2V0LCBHQzNEc2l6ZWlwdHIKIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4
dHVyZU1hcHBlckdMRGF0YTo6Z2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6T3B0aW9ucyBvcHRpb25zKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zaGFyZWRH
TERhdGEtPm1fcHJvZ3JhbXMuZW5zdXJlKG9wdGlvbnMsCi0gICAgICAgIFt0aGlzLCBvcHRpb25z
XSB7IHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKFJlZjxHcmFwaGlj
c0NvbnRleHQzRD4obV9jb250ZXh0KSwgb3B0aW9ucyk7IH0pOworICAgICAgICBbdGhpcywgb3B0
aW9uc10geyByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmNyZWF0ZShvcHRpb25z
KTsgfSk7CiAgICAgcmV0dXJuICphZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCkBAIC0z
NTIsOSArMzUyLDggQEAgc3RhdGljIGZsb2F0KiBnYXVzc2lhbktlcm5lbCgpCiAgICAgcmV0dXJu
IGtlcm5lbDsKIH0KIAotc3RhdGljIHZvaWQgcHJlcGFyZUZpbHRlclByb2dyYW0oVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0mIHByb2dyYW0sIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0
aW9uLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEdWludCBjb250ZW50
VGV4dHVyZSkKK3N0YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYgcHJvZ3JhbSwgY29uc3Qg
RmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUm
IHNpemUsIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlKQogewotICAgIFJlZjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCA9IHByb2dyYW0uY29udGV4dCgpOwogICAgIGNvbnRleHQtPnVzZVByb2dy
YW0ocHJvZ3JhbS5wcm9ncmFtSUQoKSk7CiAKICAgICBzd2l0Y2ggKG9wZXJhdGlvbi50eXBlKCkp
IHsKQEAgLTQ3NCw3ICs0NzMsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUo
UGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSQogICAgIFJlZjxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9n
cmFtKG9wdGlvbnMpOwogCiAgICAgaWYgKGZpbHRlcikKLSAgICAgICAgcHJlcGFyZUZpbHRlclBy
b2dyYW0ocHJvZ3JhbS5nZXQoKSwgKmZpbHRlci5nZXQoKSwgZGF0YSgpLmZpbHRlckluZm8tPnBh
c3MsIHRleHR1cmVTaXplLCBmaWx0ZXJDb250ZW50VGV4dHVyZUlEKTsKKyAgICAgICAgcHJlcGFy
ZUZpbHRlclByb2dyYW0obV9jb250ZXh0M0QuZ2V0KCksIHByb2dyYW0uZ2V0KCksICpmaWx0ZXIu
Z2V0KCksIGRhdGEoKS5maWx0ZXJJbmZvLT5wYXNzLCB0ZXh0dXJlU2l6ZSwgZmlsdGVyQ29udGVu
dFRleHR1cmVJRCk7CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5n
ZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIHRleHR1cmVTaXplLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdN
YXRyaXgsIG9wYWNpdHkpOwogfQpAQCAtNjI2LDcgKzYyNSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpkcmF3RmlsdGVyZWQoY29uc3QgQml0bWFwVGV4dHVyZSYgc2FtcGxlciwgY29uc3QgQml0
bWFwVGV4CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMgb3B0aW9ucyA9
IG9wdGlvbnNGb3JGaWx0ZXJUeXBlKGZpbHRlci50eXBlKCksIHBhc3MpOwogICAgIFJlZjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFt
KG9wdGlvbnMpOwogCi0gICAgcHJlcGFyZUZpbHRlclByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgZmls
dGVyLCBwYXNzLCBzYW1wbGVyLmNvbnRlbnRTaXplKCksIGNvbnRlbnRUZXh0dXJlID8gc3RhdGlj
X2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMKj4oY29udGVudFRleHR1cmUpLT5pZCgpIDogMCk7
CisgICAgcHJlcGFyZUZpbHRlclByb2dyYW0obV9jb250ZXh0M0QuZ2V0KCksIHByb2dyYW0uZ2V0
KCksIGZpbHRlciwgcGFzcywgc2FtcGxlci5jb250ZW50U2l6ZSgpLCBjb250ZW50VGV4dHVyZSA/
IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KGNvbnRlbnRUZXh0dXJlKS0+aWQo
KSA6IDApOwogICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHNhbXBs
ZXIuY29udGVudFNpemUoKSk7CiAgICAgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dy
YW0uZ2V0KCksIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHNhbXBsZXIpLmlk
KCksIDAsIEludFNpemUoMSwgMSksIHRhcmdldFJlY3QsIFRyYW5zZm9ybWF0aW9uTWF0cml4KCks
IDEpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAKaW5kZXgg
NmNiNTkyZDA0NjdiMWYzYjIwMzQ0NjU5ZWJlOWYyZTg3MzZhYzU3Zi4uZGVhNzViMDBhMGE0OTU5
MjgwYmRkZjVhZjFkMjBjZDA1NzY5ZGE2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0uY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVJfR0wpCiAKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgpAQCAtNTAsMTggKzUxLDM3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wb3NpdGlu
Z0xvZ0VuYWJsZWQoKQogICAgICAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgVGV4dHVyZVNwYWNl
TWF0cml4UHJlY2lzaW9uIG1lZGl1bXApIFwKICAgICBHTFNMX0RJUkVDVElWRShlbmRpZikKIAot
c3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFRlbXBsYXRlID0KKworLy8gSW5wdXQvb3V0cHV0IHZh
cmlhYmxlcyBkZWZpbml0aW9uIGZvciBib3RoIEdMRVMgYW5kIE9wZW5HTCA8IDMuMi4KKy8vIFRo
ZSBkZWZhdWx0IHByZWNpc2lvbiBkaXJlY3RpdmUgaXMgb25seSBuZWVkZWQgZm9yIEdMRVMuCitz
dGF0aWMgY29uc3QgY2hhciogdmVydGV4VGVtcGxhdGVMVDMyMFZhcnMgPQorI2lmIFVTRShPUEVO
R0xfRVNfMikKICAgICBURVhUVVJFX1NQQUNFX01BVFJJWF9QUkVDSVNJT05fRElSRUNUSVZFCisj
ZW5kaWYKICAgICBTVFJJTkdJRlkoCisjaWYgVVNFKE9QRU5HTF9FU18yKQogICAgICAgICBwcmVj
aXNpb24gVGV4dHVyZVNwYWNlTWF0cml4UHJlY2lzaW9uIGZsb2F0OworI2VuZGlmCiAgICAgICAg
IGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwotICAgICAgICB1bmlmb3JtIG1hdDQgdV9tb2RlbFZp
ZXdNYXRyaXg7Ci0gICAgICAgIHVuaWZvcm0gbWF0NCB1X3Byb2plY3Rpb25NYXRyaXg7Ci0gICAg
ICAgIHVuaWZvcm0gbWF0NCB1X3RleHR1cmVTcGFjZU1hdHJpeDsKLQogICAgICAgICB2YXJ5aW5n
IHZlYzIgdl90ZXhDb29yZDsKICAgICAgICAgdmFyeWluZyB2ZWMyIHZfdHJhbnNmb3JtZWRUZXhD
b29yZDsKICAgICAgICAgdmFyeWluZyBmbG9hdCB2X2FudGlhbGlhczsKKyAgICApOworCisvLyBJ
bnB1dC9vdXRwdXQgdmFyaWFibGVzIGRlZmluaXRpb24gZm9yIE9wZW5HTCA+PSAzLjIuCitzdGF0
aWMgY29uc3QgY2hhciogdmVydGV4VGVtcGxhdGVHRTMyMFZhcnMgPQorICAgIFNUUklOR0lGWSgK
KyAgICAgICAgaW4gdmVjNCBhX3ZlcnRleDsKKyAgICAgICAgb3V0IHZlYzIgdl90ZXhDb29yZDsK
KyAgICAgICAgb3V0IHZlYzIgdl90cmFuc2Zvcm1lZFRleENvb3JkOworICAgICAgICBvdXQgZmxv
YXQgdl9hbnRpYWxpYXM7CisgICAgKTsKKworc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFRlbXBs
YXRlQ29tbW9uID0KKyAgICBTVFJJTkdJRlkoCisgICAgICAgIHVuaWZvcm0gbWF0NCB1X21vZGVs
Vmlld01hdHJpeDsKKyAgICAgICAgdW5pZm9ybSBtYXQ0IHVfcHJvamVjdGlvbk1hdHJpeDsKKyAg
ICAgICAgdW5pZm9ybSBtYXQ0IHVfdGV4dHVyZVNwYWNlTWF0cml4OwogCiAgICAgICAgIHZvaWQg
bm9vcChpbm91dCB2ZWMyIGR1bW15UGFyYW1ldGVyKSB7IH0KIApAQCAtMTM2LDIyICsxNTYsNDgg
QEAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFRlbXBsYXRlID0KICAgICBHTFNMX0RJUkVDVElW
RShkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX1NURVAgMC4yKQogCiAKLXN0YXRpYyBjb25zdCBjaGFy
KiBmcmFnbWVudFRlbXBsYXRlID0KKy8vIENvbW1vbiBoZWFkZXIgZm9yIGFsbCB2ZXJzaW9ucy4g
V2UgZGVmaW5lIHRoZSBtYXRyaWNlcyB2YXJpYWJsZXMgaGVyZSB0byBrZWVwIHRoZSBwcmVjaXNp
b24KKy8vIGRpcmVjdGl2ZXMgc2NvcGU6IHRoZSBmaXJzdCBvbmUgYXBwbGllcyB0byB0aGUgbWF0
cmljZXMgdmFyaWFibGVzIGFuZCB0aGUgbmV4dCBvbmUgdG8gdGhlCisvLyByZXN0IG9mIHRoZW0u
IFRoZSBwcmVjaXNpb24gaXMgb25seSB1c2VkIGluIEdMRVMuCitzdGF0aWMgY29uc3QgY2hhciog
ZnJhZ21lbnRUZW1wbGF0ZUhlYWRlckNvbW1vbiA9CiAgICAgUkVDVF9URVhUVVJFX0RJUkVDVElW
RQogICAgIEFOVElBTElBU0lOR19URVhfQ09PUkRfRElSRUNUSVZFCiAgICAgQkxVUl9DT05TVEFO
VFMKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCiAgICAgVEVYVFVSRV9TUEFDRV9NQVRSSVhfUFJFQ0lT
SU9OX0RJUkVDVElWRQorI2VuZGlmCiAgICAgU1RSSU5HSUZZKAorI2lmIFVTRShPUEVOR0xfRVNf
MikKICAgICAgICAgcHJlY2lzaW9uIFRleHR1cmVTcGFjZU1hdHJpeFByZWNpc2lvbiBmbG9hdDsK
KyNlbmRpZgogICAgICAgICB1bmlmb3JtIG1hdDQgdV90ZXh0dXJlU3BhY2VNYXRyaXg7CiAgICAg
ICAgIHVuaWZvcm0gbWF0NCB1X3RleHR1cmVDb2xvclNwYWNlTWF0cml4OworI2lmIFVTRShPUEVO
R0xfRVNfMikKICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgIHVuaWZv
cm0gU2FtcGxlclR5cGUgc19zYW1wbGVyOwotICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX2Nv
bnRlbnRUZXh0dXJlOwotICAgICAgICB1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTsKKyNlbmRpZgor
ICAgICk7CisKKy8vIElucHV0L291dHB1dCB2YXJpYWJsZXMgZGVmaW5pdGlvbiBmb3IgYm90aCBH
TEVTIGFuZCBPcGVuR0wgPCAzLjIuCitzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0
ZUxUMzIwVmFycyA9CisgICAgU1RSSU5HSUZZKAogICAgICAgICB2YXJ5aW5nIGZsb2F0IHZfYW50
aWFsaWFzOwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsKICAgICAgICAgdmFyeWlu
ZyB2ZWMyIHZfdHJhbnNmb3JtZWRUZXhDb29yZDsKKyAgICApOworCisvLyBJbnB1dC9vdXRwdXQg
dmFyaWFibGVzIGRlZmluaXRpb24gZm9yIE9wZW5HTCA+PSAzLjIuCitzdGF0aWMgY29uc3QgY2hh
ciogZnJhZ21lbnRUZW1wbGF0ZUdFMzIwVmFycyA9CisgICAgU1RSSU5HSUZZKAorICAgICAgICBp
biBmbG9hdCB2X2FudGlhbGlhczsKKyAgICAgICAgaW4gdmVjMiB2X3RleENvb3JkOworICAgICAg
ICBpbiB2ZWMyIHZfdHJhbnNmb3JtZWRUZXhDb29yZDsKKyAgICApOworCitzdGF0aWMgY29uc3Qg
Y2hhciogZnJhZ21lbnRUZW1wbGF0ZUNvbW1vbiA9CisgICAgU1RSSU5HSUZZKAorICAgICAgICB1
bmlmb3JtIFNhbXBsZXJUeXBlIHNfc2FtcGxlcjsKKyAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQg
c19jb250ZW50VGV4dHVyZTsKKyAgICAgICAgdW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7CiAgICAg
ICAgIHVuaWZvcm0gZmxvYXQgdV9maWx0ZXJBbW91bnQ7CiAgICAgICAgIHVuaWZvcm0gdmVjMiB1
X2JsdXJSYWRpdXM7CiAgICAgICAgIHVuaWZvcm0gdmVjMiB1X3NoYWRvd09mZnNldDsKQEAgLTMw
NSw3ICszNTEsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CiAgICAg
ICAgIH0KICAgICApOwogCi1SZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUoUmVmPEdyYXBoaWNzQ29udGV4dDNEPiYmIGNvbnRl
eHQsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zIG9wdGlvbnMpCitSZWY8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVh
dGUoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMgb3B0aW9ucykKIHsKICNkZWZp
bmUgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFwcGxpZXIpIFwKICAgICBvcHRpb25zQXBwbGll
ckJ1aWxkZXIuYXBwZW5kKFwKQEAgLTMzMCw0NSArMzc2LDEyNCBAQCBSZWY8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUoUmVmPEdy
YXBoaWNzQwogICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhDb250ZW50VGV4dHVyZSk7CiAg
ICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE1hbnVhbFJlcGVhdCk7CiAKKyAgICB1bnNpZ25l
ZCBnbFZlcnNpb24gPSBHTENvbnRleHQ6OmN1cnJlbnQoKS0+dmVyc2lvbigpOwogICAgIFN0cmlu
Z0J1aWxkZXIgdmVydGV4U2hhZGVyQnVpbGRlcjsKKworICAgIC8vIE9wZW5HTCA+PSAzLjIgcmVx
dWlyZXMgYSAjdmVyc2lvbiBkaXJlY3RpdmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29kZS4K
KyNpZiAhVVNFKE9QRU5HTF9FU18yKQorICAgIGlmIChnbFZlcnNpb24gPj0gMzIwKQorICAgICAg
ICB2ZXJ0ZXhTaGFkZXJCdWlsZGVyLmFwcGVuZChHTFNMX0RJUkVDVElWRSh2ZXJzaW9uIDE1MCkp
OworI2VuZGlmCisKKyAgICAvLyBBcHBlbmQgdGhlIG9wdGlvbnMuCiAgICAgdmVydGV4U2hhZGVy
QnVpbGRlci5hcHBlbmQob3B0aW9uc0FwcGxpZXJCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIHZl
cnRleFNoYWRlckJ1aWxkZXIuYXBwZW5kKHZlcnRleFRlbXBsYXRlKTsKKworICAgIC8vIEFwcGVu
ZCB0aGUgYXBwcm9wcmlhdGUgaW5wdXQvb3V0cHV0IHZhcmlhYmxlIGRlZmluaXRpb25zLgorI2lm
IFVTRShPUEVOR0xfRVNfMikKKyAgICB2ZXJ0ZXhTaGFkZXJCdWlsZGVyLmFwcGVuZCh2ZXJ0ZXhU
ZW1wbGF0ZUxUMzIwVmFycyk7CisjZWxzZQorICAgIGlmIChnbFZlcnNpb24gPj0gMzIwKQorICAg
ICAgICB2ZXJ0ZXhTaGFkZXJCdWlsZGVyLmFwcGVuZCh2ZXJ0ZXhUZW1wbGF0ZUdFMzIwVmFycyk7
CisgICAgZWxzZQorICAgICAgICB2ZXJ0ZXhTaGFkZXJCdWlsZGVyLmFwcGVuZCh2ZXJ0ZXhUZW1w
bGF0ZUxUMzIwVmFycyk7CisjZW5kaWYKKworICAgIC8vIEFwcGVuZCB0aGUgY29tbW9uIGNvZGUu
CisgICAgdmVydGV4U2hhZGVyQnVpbGRlci5hcHBlbmQodmVydGV4VGVtcGxhdGVDb21tb24pOwog
CiAgICAgU3RyaW5nQnVpbGRlciBmcmFnbWVudFNoYWRlckJ1aWxkZXI7CisKKyAgICAvLyBPcGVu
R0wgPj0gMy4yIHJlcXVpcmVzIGEgI3ZlcnNpb24gZGlyZWN0aXZlIGF0IHRoZSBiZWdpbm5pbmcg
b2YgdGhlIGNvZGUuCisjaWYgIVVTRShPUEVOR0xfRVNfMikKKyAgICBpZiAoZ2xWZXJzaW9uID49
IDMyMCkKKyAgICAgICAgZnJhZ21lbnRTaGFkZXJCdWlsZGVyLmFwcGVuZChHTFNMX0RJUkVDVElW
RSh2ZXJzaW9uIDE1MCkpOworI2VuZGlmCisKKyAgICAvLyBBcHBlbmQgdGhlIG9wdGlvbnMuCiAg
ICAgZnJhZ21lbnRTaGFkZXJCdWlsZGVyLmFwcGVuZChvcHRpb25zQXBwbGllckJ1aWxkZXIudG9T
dHJpbmcoKSk7Ci0gICAgZnJhZ21lbnRTaGFkZXJCdWlsZGVyLmFwcGVuZChmcmFnbWVudFRlbXBs
YXRlKTsKIAotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKFdURk1vdmUoY29udGV4dCksIHZlcnRleFNoYWRlckJ1aWxkZXIudG9TdHJpbmcoKSwgZnJh
Z21lbnRTaGFkZXJCdWlsZGVyLnRvU3RyaW5nKCkpKTsKKyAgICAvLyBBcHBlbmQgdGhlIGNvbW1v
biBoZWFkZXIuCisgICAgZnJhZ21lbnRTaGFkZXJCdWlsZGVyLmFwcGVuZChmcmFnbWVudFRlbXBs
YXRlSGVhZGVyQ29tbW9uKTsKKworICAgIC8vIEFwcGVuZCB0aGUgYXBwcm9wcmlhdGUgaW5wdXQv
b3V0cHV0IHZhcmlhYmxlIGRlZmluaXRpb25zLgorI2lmIFVTRShPUEVOR0xfRVNfMikKKyAgICBm
cmFnbWVudFNoYWRlckJ1aWxkZXIuYXBwZW5kKGZyYWdtZW50VGVtcGxhdGVMVDMyMFZhcnMpOwor
I2Vsc2UKKyAgICBpZiAoZ2xWZXJzaW9uID49IDMyMCkKKyAgICAgICAgZnJhZ21lbnRTaGFkZXJC
dWlsZGVyLmFwcGVuZChmcmFnbWVudFRlbXBsYXRlR0UzMjBWYXJzKTsKKyAgICBlbHNlCisgICAg
ICAgIGZyYWdtZW50U2hhZGVyQnVpbGRlci5hcHBlbmQoZnJhZ21lbnRUZW1wbGF0ZUxUMzIwVmFy
cyk7CisjZW5kaWYKKworICAgIC8vIEFwcGVuZCB0aGUgY29tbW9uIGNvZGUuCisgICAgZnJhZ21l
bnRTaGFkZXJCdWlsZGVyLmFwcGVuZChmcmFnbWVudFRlbXBsYXRlQ29tbW9uKTsKKworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRl
ckJ1aWxkZXIudG9TdHJpbmcoKSwgZnJhZ21lbnRTaGFkZXJCdWlsZGVyLnRvU3RyaW5nKCkpKTsK
IH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKFJlZjxHcmFwaGljc0NvbnRleHQzRD4mJiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHZlcnRl
eCwgY29uc3QgU3RyaW5nJiBmcmFnbWVudCkKLSAgICA6IG1fY29udGV4dChXVEZNb3ZlKGNvbnRl
eHQpKQorI2lmICFMT0dfRElTQUJMRUQKK3N0YXRpYyBDU3RyaW5nIGdldFNoYWRlckxvZyhHTHVp
bnQgc2hhZGVyKQogewotICAgIG1fdmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFk
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpOwotICAgIG1fY29udGV4dC0+c2hh
ZGVyU291cmNlKG1fdmVydGV4U2hhZGVyLCB2ZXJ0ZXgpOworICAgIEdMaW50IGxvZ0xlbmd0aCA9
IDA7CisgICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxvZ0xl
bmd0aCk7CisgICAgaWYgKCFsb2dMZW5ndGgpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBh
dXRvIGluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPEdMY2hhcltdPihsb2dMZW5ndGgpOworICAgIEdM
c2l6ZWkgaW5mb0xlbmd0aCA9IDA7CisgICAgZ2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbG9n
TGVuZ3RoLCAmaW5mb0xlbmd0aCwgaW5mby5nZXQoKSk7CiAKLSAgICBtX2ZyYWdtZW50U2hhZGVy
ID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NI
QURFUik7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UobV9mcmFnbWVudFNoYWRlciwgZnJh
Z21lbnQpOworICAgIHNpemVfdCBzdHJpbmdMZW5ndGggPSBzdGQ6Om1heChpbmZvTGVuZ3RoLCAw
KTsKKyAgICByZXR1cm4geyBpbmZvLmdldCgpLCBzdHJpbmdMZW5ndGggfTsKK30KIAotICAgIG1f
aWQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKLSAgICBtX2NvbnRleHQtPmNvbXBpbGVT
aGFkZXIobV92ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihtX2Zy
YWdtZW50U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRl
eFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNo
YWRlcik7Ci0gICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShtX2lkKTsKK3N0YXRpYyBDU3RyaW5n
IGdldFByb2dyYW1Mb2coR0x1aW50IHByb2dyYW0pCit7CisgICAgR0xpbnQgbG9nTGVuZ3RoID0g
MDsKKyAgICBnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsb2dM
ZW5ndGgpOworICAgIGlmICghbG9nTGVuZ3RoKQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
aWYgKCFjb21wb3NpdGluZ0xvZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8g
aW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8R0xjaGFyW10+KGxvZ0xlbmd0aCk7CisgICAgR0xzaXpl
aSBpbmZvTGVuZ3RoID0gMDsKKyAgICBnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxvZ0xl
bmd0aCwgJmluZm9MZW5ndGgsIGluZm8uZ2V0KCkpOwogCi0gICAgaWYgKG1fY29udGV4dC0+Z2V0
RXJyb3IoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCisgICAgc2l6ZV90IHN0cmlu
Z0xlbmd0aCA9IHN0ZDo6bWF4KGluZm9MZW5ndGgsIDApOworICAgIHJldHVybiB7IGluZm8uZ2V0
KCksIHN0cmluZ0xlbmd0aCB9OworfQorI2VuZGlmCisKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb25zdCBTdHJpbmcmIHZlcnRleCwgY29u
c3QgU3RyaW5nJiBmcmFnbWVudCkKK3sKKyAgICBtX3ZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hh
ZGVyKEdMX1ZFUlRFWF9TSEFERVIpOworICAgIHsKKyAgICAgICAgQ1N0cmluZyB2ZXJ0ZXhDU3Ry
aW5nID0gdmVydGV4LnV0ZjgoKTsKKyAgICAgICAgY29uc3QgY2hhciogZGF0YSA9IHZlcnRleENT
dHJpbmcuZGF0YSgpOworICAgICAgICBpbnQgbGVuZ3RoID0gdmVydGV4Q1N0cmluZy5sZW5ndGgo
KTsKKyAgICAgICAgZ2xTaGFkZXJTb3VyY2UobV92ZXJ0ZXhTaGFkZXIsIDEsICZkYXRhLCAmbGVu
Z3RoKTsKKyAgICB9CisgICAgZ2xDb21waWxlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKKworICAg
IG1fZnJhZ21lbnRTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIpOwor
ICAgIHsKKyAgICAgICAgQ1N0cmluZyBmcmFnbWVudENTdHJpbmcgPSBmcmFnbWVudC51dGY4KCk7
CisgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBmcmFnbWVudENTdHJpbmcuZGF0YSgpOworICAg
ICAgICBpbnQgbGVuZ3RoID0gZnJhZ21lbnRDU3RyaW5nLmxlbmd0aCgpOworICAgICAgICBnbFNo
YWRlclNvdXJjZShtX2ZyYWdtZW50U2hhZGVyLCAxLCAmZGF0YSwgJmxlbmd0aCk7CisgICAgfQor
ICAgIGdsQ29tcGlsZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsKKworICAgIG1faWQgPSBnbENy
ZWF0ZVByb2dyYW0oKTsKKyAgICBnbEF0dGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7
CisgICAgZ2xBdHRhY2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRlcik7CisgICAgZ2xMaW5r
UHJvZ3JhbShtX2lkKTsKKworICAgIGlmICghY29tcG9zaXRpbmdMb2dFbmFibGVkKCkgfHwgZ2xH
ZXRFcnJvcigpID09IEdMX05PX0VSUk9SKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcg
bG9nID0gbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKG1fdmVydGV4U2hhZGVyKTsKLSAgICBM
T0coQ29tcG9zaXRpbmcsICJWZXJ0ZXggc2hhZGVyIGxvZzogJXNcbiIsIGxvZy51dGY4KCkuZGF0
YSgpKTsKLSAgICBsb2cgPSBtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cobV9mcmFnbWVudFNo
YWRlcik7Ci0gICAgTE9HKENvbXBvc2l0aW5nLCAiRnJhZ21lbnQgc2hhZGVyIGxvZzogJXNcbiIs
IGxvZy51dGY4KCkuZGF0YSgpKTsKLSAgICBsb2cgPSBtX2NvbnRleHQtPmdldFByb2dyYW1JbmZv
TG9nKG1faWQpOwotICAgIExPRyhDb21wb3NpdGluZywgIlByb2dyYW0gbG9nOiAlc1xuIiwgbG9n
LnV0ZjgoKS5kYXRhKCkpOworICAgIExPRyhDb21wb3NpdGluZywgIlZlcnRleCBzaGFkZXIgbG9n
OiAlc1xuIiwgZ2V0U2hhZGVyTG9nKG1fdmVydGV4U2hhZGVyKS5kYXRhKCkpOworICAgIExPRyhD
b21wb3NpdGluZywgIkZyYWdtZW50IHNoYWRlciBsb2c6ICVzXG4iLCBnZXRTaGFkZXJMb2cobV9m
cmFnbWVudFNoYWRlcikuZGF0YSgpKTsKKyAgICBMT0coQ29tcG9zaXRpbmcsICJQcm9ncmFtIGxv
ZzogJXNcbiIsIGdldFByb2dyYW1Mb2cobV9pZCkuZGF0YSgpKTsKIH0KIAogVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpCkBAIC0zNzYsMjkg
KzUwMSwzMCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKCkKICAgICBpZiAoIW1faWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY29u
dGV4dC0+ZGV0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQt
PmRlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZXRhY2hTaGFk
ZXIobV9pZCwgbV9mcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIo
bV9mcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1faWQpOwor
ICAgIGdsRGV0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVyKTsKKyAgICBnbERlbGV0ZVNo
YWRlcihtX3ZlcnRleFNoYWRlcik7CisgICAgZ2xEZXRhY2hTaGFkZXIobV9pZCwgbV9mcmFnbWVu
dFNoYWRlcik7CisgICAgZ2xEZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7CisgICAgZ2xE
ZWxldGVQcm9ncmFtKG1faWQpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
OjpzZXRNYXRyaXgoR0MzRHVpbnQgbG9jYXRpb24sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtYXRyaXgpCit2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzZXRNYXRyaXgoR0x1
aW50IGxvY2F0aW9uLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQogewogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpGbG9hdE1hdHJpeDQgZmxvYXRNYXRyaXg7CiAgICAgbWF0
cml4LnRvQ29sdW1uTWFqb3JGbG9hdEFycmF5KGZsb2F0TWF0cml4KTsKLSAgICBtX2NvbnRleHQt
PnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIDEsIGZhbHNlLCBmbG9hdE1hdHJpeCk7CisgICAg
Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCAxLCBmYWxzZSwgZmxvYXRNYXRyaXgpOwogfQog
Ci1HQzNEdWludCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0TG9jYXRpb24oY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lLCBWYXJpYWJsZVR5cGUgdHlwZSkKK0dMdWludCBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6Z2V0TG9jYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBW
YXJpYWJsZVR5cGUgdHlwZSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdmFyaWFibGVzLmVu
c3VyZShuYW1lLAogICAgICAgICBbdGhpcywgJm5hbWUsIHR5cGVdIHsKKyAgICAgICAgICAgIENT
dHJpbmcgbmFtZUNTdHJpbmcgPSBuYW1lLnN0cmluZygpLnV0ZjgoKTsKICAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkgewogICAgICAgICAgICAgY2FzZSBVbmlmb3JtVmFyaWFibGU6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1faWQsIG5hbWUp
OworICAgICAgICAgICAgICAgIHJldHVybiBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX2lkLCBuYW1l
Q1N0cmluZy5kYXRhKCkpOwogICAgICAgICAgICAgY2FzZSBBdHRyaWJWYXJpYWJsZToKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihtX2lkLCBuYW1l
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2xHZXRBdHRyaWJMb2NhdGlvbihtX2lkLCBuYW1l
Q1N0cmluZy5kYXRhKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtLmgKaW5kZXggZGE1MjU2YjgzMDk0NzUwOWI4MmQyNjhhYWMzM2UyOGE0ZWMy
MjQ5OS4uOGRhMWU0MjgxOWUwZDE3NDc4N2IzN2ZhMGY1NmY0MWYyMWYyNmNlZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmgKQEAgLTIzLDcgKzIzLDcgQEAKIAogI2lm
IFVTRShURVhUVVJFX01BUFBFUl9HTCkKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMSGVhZGVycy5oIgogI2luY2x1ZGUgIlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogI2RlZmluZSBURVhNQVBfREVDTEFSRV9WQVJJQUJMRShBY2Nlc3NvciwgTmFtZSwgVHlwZSkg
XAotICAgIEdDM0R1aW50IEFjY2Vzc29yIyNMb2NhdGlvbigpIHsgXAorICAgIEdMdWludCBBY2Nl
c3NvciMjTG9jYXRpb24oKSB7IFwKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0
IEF0b21pY1N0cmluZz4gbmFtZShOYW1lLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsgXAogICAgICAgICByZXR1cm4gZ2V0TG9jYXRpb24obmFtZS5nZXQoKSwgVHlwZSk7IFwK
ICAgICB9CkBAIC02NiwxMSArNjYsMTAgQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiB1bnNpZ25l
ZCBPcHRpb25zOwogCi0gICAgc3RhdGljIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4g
Y3JlYXRlKFJlZjxHcmFwaGljc0NvbnRleHQzRD4mJiwgT3B0aW9ucyk7CisgICAgc3RhdGljIFJl
ZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gY3JlYXRlKE9wdGlvbnMpOwogICAgIHZpcnR1
YWwgflRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCk7CiAKLSAgICBQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW1JRCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAgICBHcmFwaGljc0NvbnRleHQz
RCYgY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAgIEdMdWludCBwcm9ncmFtSUQo
KSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAKICAgICBURVhNQVBfREVDTEFSRV9BVFRSSUJVVEUo
dmVydGV4KQogCkBAIC05MCwyMCArODksMTkgQEAgcHVibGljOgogICAgIFRFWE1BUF9ERUNMQVJF
X1VOSUZPUk0oc2hhZG93T2Zmc2V0KQogICAgIFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIoY29udGVu
dFRleHR1cmUpCiAKLSAgICB2b2lkIHNldE1hdHJpeChHQzNEdWludCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmKTsKKyAgICB2b2lkIHNldE1hdHJpeChHTHVpbnQsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4Jik7CiAKIHByaXZhdGU6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0oUmVmPEdyYXBoaWNzQ29udGV4dDNEPiYmLCBjb25zdCBTdHJpbmcmIHZlcnRleFNoYWRlclNv
dXJjZSwgY29uc3QgU3RyaW5nJiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CisgICAgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0oY29uc3QgU3RyaW5nJiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0
IFN0cmluZyYgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwogCi0gICAgUGxhdGZvcm0zRE9iamVjdCBt
X3ZlcnRleFNoYWRlcjsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7Cisg
ICAgR0x1aW50IG1fdmVydGV4U2hhZGVyOworICAgIEdMdWludCBtX2ZyYWdtZW50U2hhZGVyOwog
CiAgICAgZW51bSBWYXJpYWJsZVR5cGUgeyBVbmlmb3JtVmFyaWFibGUsIEF0dHJpYlZhcmlhYmxl
IH07Ci0gICAgR0MzRHVpbnQgZ2V0TG9jYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiwgVmFyaWFi
bGVUeXBlKTsKKyAgICBHTHVpbnQgZ2V0TG9jYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiwgVmFy
aWFibGVUeXBlKTsKIAotICAgIFJlZjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwotICAg
IFBsYXRmb3JtM0RPYmplY3QgbV9pZDsKLSAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgR0MzRHVp
bnQ+IG1fdmFyaWFibGVzOworICAgIEdMdWludCBtX2lkOworICAgIEhhc2hNYXA8QXRvbWljU3Ry
aW5nLCBHTHVpbnQ+IG1fdmFyaWFibGVzOwogfTsKIAogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>