<?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>51908</bug_id>
          
          <creation_ts>2011-01-04 16:38:07 -0800</creation_ts>
          <short_desc>Use GC3D types in WebGLRenderingContext and related WebGL classes</short_desc>
          <delta_ts>2011-01-13 16:53:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          <dependson>45557</dependson>
    
    <dependson>52386</dependson>
          <blocked>52338</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>abarth</cc>
    
    <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>eric</cc>
    
    <cc>kbr</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>329296</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-04 16:38:07 -0800</bug_when>
    <thetext>Including GL functions and internal data types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333364</commentid>
    <comment_count>1</comment_count>
      <attachid>78748</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-12 15:39:10 -0800</bug_when>
    <thetext>Created attachment 78748
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333365</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-12 15:40:34 -0800</bug_when>
    <thetext>Attachment 78748 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Last 3072 characters of output:
adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:247:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:248:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:248:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:255:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:258:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:261:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:264:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:471:  The parameter name &quot;image&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:564:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:565:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:566:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:566:  The parameter name &quot;v&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:566:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:567:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:568:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:568:  The parameter name &quot;v&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:568:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:577:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 71 in 17 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>333367</commentid>
    <comment_count>3</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-12 15:41:26 -0800</bug_when>
    <thetext>All the style errors are for gl function argument names.

In this patch, I did not clean up WebGLGetInfo and related getLongParameter/getUnsignedLongParameter/getIntParameter.  Will create another bug to clean this.

Thanks in advance for reviewing this long and boring patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333444</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-12 17:19:05 -0800</bug_when>
    <thetext>Attachment 78748 did not build on chromium:
Build output: http://queues.webkit.org/results/7567002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333454</commentid>
    <comment_count>5</comment_count>
      <attachid>78765</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-12 17:34:56 -0800</bug_when>
    <thetext>Created attachment 78765
Patch

Fix two issues in 32bit build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333458</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-12 17:38:04 -0800</bug_when>
    <thetext>Attachment 78765 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Last 3072 characters of output:
adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:247:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:248:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:248:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:255:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:258:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:261:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:264:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:471:  The parameter name &quot;image&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:564:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:565:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:566:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:566:  The parameter name &quot;v&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:566:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:567:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:568:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:568:  The parameter name &quot;v&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:568:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/canvas/WebGLRenderingContext.h:577:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 71 in 17 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>333475</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-01-12 18:22:03 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; All the style errors are for gl function argument names.

I don&apos;t understand what this means. Are you saying that this file isn&apos;t suppose to follow WebKit style for some reason? (If so, submit a patch to Tools/Scripts/webkitpy/style/checker.py to handle this.) 

It wasn&apos;t caught by the script but it looks like &quot;pname&quot; the parameter names in the declarations for &quot;WebGLGetInfo getBooleanParameter(GC3Denum pname);&quot; also add no information and should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333535</commentid>
    <comment_count>8</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-12 21:32:09 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #3)
&gt; &gt; All the style errors are for gl function argument names.
&gt; 
&gt; I don&apos;t understand what this means. Are you saying that this file isn&apos;t suppose to follow WebKit style for some reason? (If so, submit a patch to Tools/Scripts/webkitpy/style/checker.py to handle this.) 

This file and GraphicsContext3D defines a list of GL function signatures and I think their signatures should match the GL signatures in argument names.  However, I don&apos;t think we should skip these two files totally as we have other functions in them and they should follow the rules.

Fortunately these GL-like functions won&apos;t change often (hopefully after this patch they will never need to change again), so you won&apos;t see those style error messages again.

&gt; 
&gt; It wasn&apos;t caught by the script but it looks like &quot;pname&quot; the parameter names in the declarations for &quot;WebGLGetInfo getBooleanParameter(GC3Denum pname);&quot; also add no information and should be removed.

This patch didn&apos;t add/delete/modify any argument names.  It&apos;s simply changing the types.  I don&apos;t think we should clean any legacy style violations in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333541</commentid>
    <comment_count>9</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-12 21:47:01 -0800</bug_when>
    <thetext>Create a bug for style cleanup: https://bugs.webkit.org/show_bug.cgi?id=52352</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333805</commentid>
    <comment_count>10</comment_count>
      <attachid>78765</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-13 11:05:14 -0800</bug_when>
    <thetext>Comment on attachment 78765
Patch

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

Thanks for doing this tedious cleanup. It will make the code more maintainable. The only high-level issue is that I think GC3Dboolean should be typedefed to bool rather than unsigned char. Using 0 instead of false loses a significant amount of information and it&apos;s difficult to make the reverse transition, because some platforms will complain about converting 0/1 to a bool and some won&apos;t. There are probably ten or so places in this patch where this affects the code.

&gt; Source/WebCore/html/canvas/WebGLBuffer.cpp:131


Should these CheckedInt instances use GC3Dintptr as their template parameter? Theoretically they are supposed to handle 64-bit values on 64-bit platforms.

&gt; Source/WebCore/html/canvas/WebGLBuffer.cpp:132
&gt; +        if (!checkedArrayMax.valid() || checkedArrayMax.value() &gt; static_cast&lt;int32_t&gt;(array-&gt;byteLength()) || !checkedBufferMax.valid() || checkedBufferMax.value() &gt; m_byteLength)

Should this static_cast to int32_t use one of the GC3D types, again like GC3Dintptr?

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:1910
&gt; +            return WebGLGetInfo(static_cast&lt;unsigned long&gt;(m_renderbufferBinding-&gt;getInternalFormat()));

Might be a good idea to add a FIXME here even though you&apos;ve already filed the cleanup bug to get rid of this cast to unsigned long.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:1932
&gt; +        return WebGLGetInfo(static_cast&lt;unsigned long&gt;(m_renderbufferBinding-&gt;getInternalFormat()));

Here too.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2194
&gt; +        return WebGLGetInfo(static_cast&lt;bool&gt;(m_vertexAttribState[index].enabled));

FIXME here and below?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333965</commentid>
    <comment_count>11</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-13 15:05:57 -0800</bug_when>
    <thetext>Committed r75741: &lt;http://trac.webkit.org/changeset/75741&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333970</commentid>
    <comment_count>12</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-13 15:09:47 -0800</bug_when>
    <thetext>For the records:

1) I didn&apos;t change the mapping of GC3Dboolean from unsigned char to bool as it turned out to be more complicated then I thought: getBooleanv function that takes a GLboolean* type, so it needs to be taken care of.  However, I changed all the 0/1 cases in WebGLRenderingContext to true/false so the semantic meaning is not lost here.

2) CheckedInt takes int/long long, but does not take long.  Will create a bug to fix this.

Thanks again for the quick review for this huge ugly patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334034</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-13 16:53:50 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/75741 might have broken GTK Linux 64-bit Debug
The following tests are not passing:
editing/input/page-up-down-scrolls.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78748</attachid>
            <date>2011-01-12 15:39:10 -0800</date>
            <delta_ts>2011-01-12 17:34:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51908-20110112153909.patch</filename>
            <type>text/plain</type>
            <size>176992</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NjQ4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjI1IEBACisyMDExLTAxLTEyICBaaGVueWFv
IE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXNlIEdDM0QgdHlwZXMgaW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0IGFu
ZCByZWxhdGVkIFdlYkdMIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUxOTA4CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEFjdGl2
ZUluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMQWN0aXZlSW5mbzo6dHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTEFjdGl2ZUluZm86OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xBY3RpdmVJ
bmZvOjpXZWJHTEFjdGl2ZUluZm8pOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJEYXRh
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyU3ViRGF0
YUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlclN1
YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OmJ5dGVMZW5ndGgpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OmdldENhY2hlZE1heEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMQnVmZmVyOjpzZXRDYWNoZWRNYXhJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTEJ1ZmZlcjo6c2V0VGFyZ2V0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OmdldFRhcmdldCk6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2htZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xGcmFtZWJ1ZmZlcjo6Z2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1
ZmZlcjo6Z2V0SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6Omdl
dENvbG9yQnVmZmVyRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6
OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZy
YW1lYnVmZmVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Y2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpudW1BY3RpdmVBdHRyaWJMb2NhdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJMb2Nh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06OmlzVXNpbmdWZXJ0ZXhBdHRy
aWIwKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUHJvZ3JhbTo6Z2V0TGlua0NvdW50KToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJidWZm
ZXI6OnNldEludGVybmFsRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyYnVm
ZmVyOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1
ZmZlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZlcjo6Z2V0
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJidWZmZXI6OmdldEhlaWdodCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaXplSW5CeXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQXR0cmliTG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1l
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFJl
bmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJp
bmRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Ymxl
bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5k
RXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpibGVuZEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y2xlYXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNsZWFyRGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojpjb2xvck1hc2spOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y3VsbEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZWxldGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpkZXB0aE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
ZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlz
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheVByZWNp
c2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVJl
bmRlcmluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRy
YXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdlbmVyYXRlTWlwbWFwKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVmZmVyUGFyYW1ldGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1ldGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYik6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYk9m
ZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmhpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0J1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxlZCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBvbHlnb25PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNhbXBsZUNvdmVyYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcFNlcGFyYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJmKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyaSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRC
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1h
Z2UyREltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhT
dWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTFmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTFmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0x
aSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmYpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2kpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2YpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0Zik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRm
dik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aWV3
cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvb2xl
YW5QYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRGbG9hdFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldEludFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldExvbmdQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbnNpZ25lZExvbmdQYXJhbWV0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRXZWJHTEZsb2F0QXJyYXlQYXJh
bWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRXZWJH
TEludEFycmF5UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6aXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZm
ZXJDb2xvckZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVU
ZXhGdW5jRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlRHJhd01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuZEZ1bmNG
YWN0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVDYXBhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0
cmliZkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0
ZXhBdHRyaWJmdkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpzaW11bGF0ZVZlcnRleEF0dHJpYjApOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpWZXJ0ZXhBdHRyaWJTdGF0ZTo6VmVydGV4QXR0cmliU3RhdGUpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMU2hhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhZGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFkZXI6OldlYkdMU2hhZGVyKToKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xTaGFkZXI6OmdldFR5cGUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OnNldFRhcmdldCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OnNldFBhcmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xUZXh0dXJlOjpzZXRQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
VGV4dHVyZTo6c2V0TGV2ZWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6
Z2VuZXJhdGVNaXBtYXBMZXZlbEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJl
OjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6Omdl
dFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpnZXRXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmdldEhlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFRleHR1cmU6OmlzTlBPVCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6
Om1hcFRhcmdldFRvSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpjb21w
dXRlTGV2ZWxDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmdldExldmVsSW5mbyk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRl
eHR1cmU6OkxldmVsSW5mbzo6c2V0SW5mbyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xV
bmlmb3JtTG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbmlmb3JtTG9jYXRp
b246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6V2Vi
R0xVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbmlmb3JtTG9jYXRp
b246OmxvY2F0aW9uKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlv
bi5oOgorCiAyMDExLTAxLTExICBNYXR0aGV3IERlbGFuZXkgIDxtZGVsYW5leUBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmgJKHJldmlzaW9uIDc1NTMxKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgV2ViR0xBY3RpdmVJbmZvX2gKICNkZWZpbmUg
V2ViR0xBY3RpdmVJbmZvX2gKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC0zNCwxNiArMzUsMTYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBXZWJHTEFjdGl2ZUluZm8gOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJH
TEFjdGl2ZUluZm8+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEFjdGl2
ZUluZm8+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIHR5cGUsIGludCBzaXpl
KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gY3JlYXRlKGNvbnN0IFN0
cmluZyYgbmFtZSwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBzaXplKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTEFjdGl2ZUluZm8obmFtZSwgdHlwZSwgc2l6ZSkpOwog
ICAgIH0KICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIHVu
c2lnbmVkIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBpbnQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIEdDM0RlbnVtIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KKyAgICBHQzNEaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
IAogcHJpdmF0ZToKLSAgICBXZWJHTEFjdGl2ZUluZm8oY29uc3QgU3RyaW5nJiBuYW1lLCB1bnNp
Z25lZCB0eXBlLCBpbnQgc2l6ZSkKKyAgICBXZWJHTEFjdGl2ZUluZm8oY29uc3QgU3RyaW5nJiBu
YW1lLCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHNpemUpCiAgICAgICAgIDogbV9uYW1lKG5hbWUp
CiAgICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAgICAgICwgbV9zaXplKHNpemUpCkBAIC01Myw4
ICs1NCw4IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChzaXplKTsKICAgICB9CiAgICAgU3Ry
aW5nIG1fbmFtZTsKLSAgICB1bnNpZ25lZCBtX3R5cGU7Ci0gICAgaW50IG1fc2l6ZTsKKyAgICBH
QzNEZW51bSBtX3R5cGU7CisgICAgR0MzRGludCBtX3NpemU7CiB9OwogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCShyZXZpc2lvbiA3NTUzMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTUsOCArNTUsMTEgQEAgdm9pZCBXZWJHTEJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1w
bChQbGF0ZgogICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlQnVmZmVy
KG9iamVjdCk7CiB9CiAKLWJvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGFJbXBs
KEFycmF5QnVmZmVyKiBhcnJheSwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxl
bmd0aCkKK2Jvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGFJbXBsKEFycmF5QnVm
ZmVyKiBhcnJheSwgR0MzRGludHB0ciBieXRlT2Zmc2V0LCBHQzNEc2l6ZWlwdHIgYnl0ZUxlbmd0
aCkKIHsKKyAgICBpZiAoYnl0ZUxlbmd0aCA8IDAgfHwgYnl0ZU9mZnNldCA8IDApCisgICAgICAg
IHJldHVybiBmYWxzZTsKKwogICAgIGlmIChhcnJheSAmJiBieXRlTGVuZ3RoKSB7CiAgICAgICAg
IENoZWNrZWRJbnQ8dWludDMyX3Q+IGNoZWNrZWRPZmZzZXQoYnl0ZU9mZnNldCk7CiAgICAgICAg
IENoZWNrZWRJbnQ8dWludDMyX3Q+IGNoZWNrZWRMZW5ndGgoYnl0ZUxlbmd0aCk7CkBAIC05NCwx
MSArOTcsMTEgQEAgYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyRGF0YUltcAogICAg
IH0KIH0KIAotYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyRGF0YShpbnQgc2l6ZSkK
K2Jvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGEoR0MzRHNpemVpcHRyIHNpemUp
CiB7CiAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IGFzc29jaWF0ZUJ1ZmZlckRhdGFJbXBsKDAsIDAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXpl
KSk7CisgICAgcmV0dXJuIGFzc29jaWF0ZUJ1ZmZlckRhdGFJbXBsKDAsIDAsIHNpemUpOwogfQog
CiBib29sIFdlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJEYXRhKEFycmF5QnVmZmVyKiBhcnJh
eSkKQEAgLTExNSw5ICsxMTgsOSBAQCBib29sIFdlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJE
YXRhKEFyCiAgICAgcmV0dXJuIGFzc29jaWF0ZUJ1ZmZlckRhdGFJbXBsKGFycmF5LT5idWZmZXIo
KS5nZXQoKSwgYXJyYXktPmJ5dGVPZmZzZXQoKSwgYXJyYXktPmJ5dGVMZW5ndGgoKSk7CiB9CiAK
LWJvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGFJbXBsKGxvbmcgb2Zmc2V0
LCBBcnJheUJ1ZmZlciogYXJyYXksIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwgdW5zaWduZWQg
Ynl0ZUxlbmd0aCkKK2Jvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGFJbXBs
KEdDM0RpbnRwdHIgb2Zmc2V0LCBBcnJheUJ1ZmZlciogYXJyYXksIEdDM0RpbnRwdHIgYXJyYXlC
eXRlT2Zmc2V0LCBHQzNEc2l6ZWlwdHIgYnl0ZUxlbmd0aCkKIHsKLSAgICBpZiAoIWFycmF5IHx8
IG9mZnNldCA8IDApCisgICAgaWYgKCFhcnJheSB8fCBvZmZzZXQgPCAwIHx8IGFycmF5Qnl0ZU9m
ZnNldCA8IDAgfHwgYnl0ZUxlbmd0aCA8IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChieXRlTGVuZ3RoKSB7CkBAIC0xNDgsMjYgKzE1MSwyNiBAQCBib29sIFdlYkdMQnVmZmVy
Ojphc3NvY2lhdGVCdWZmZXJTdWJEYXRhCiAgICAgfQogfQogCi1ib29sIFdlYkdMQnVmZmVyOjph
c3NvY2lhdGVCdWZmZXJTdWJEYXRhKGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlciogYXJyYXkpCiti
b29sIFdlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJTdWJEYXRhKEdDM0RpbnRwdHIgb2Zmc2V0
LCBBcnJheUJ1ZmZlciogYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHJldHVybiBhc3NvY2lhdGVCdWZmZXJTdWJEYXRhSW1wbChvZmZzZXQsIGFy
cmF5LCAwLCBhcnJheS0+Ynl0ZUxlbmd0aCgpKTsKIH0KIAotYm9vbCBXZWJHTEJ1ZmZlcjo6YXNz
b2NpYXRlQnVmZmVyU3ViRGF0YShsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBhcnJheSkK
K2Jvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEoR0MzRGludHB0ciBvZmZz
ZXQsIEFycmF5QnVmZmVyVmlldyogYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBhc3NvY2lhdGVCdWZmZXJTdWJEYXRhSW1wbChvZmZz
ZXQsIGFycmF5LT5idWZmZXIoKS5nZXQoKSwgYXJyYXktPmJ5dGVPZmZzZXQoKSwgYXJyYXktPmJ5
dGVMZW5ndGgoKSk7CiB9CiAKLXVuc2lnbmVkIFdlYkdMQnVmZmVyOjpieXRlTGVuZ3RoKCkgY29u
c3QKK0dDM0RzaXplaXB0ciBXZWJHTEJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fYnl0ZUxlbmd0aDsKIH0KIAotbG9uZyBXZWJHTEJ1ZmZlcjo6Z2V0Q2FjaGVkTWF4
SW5kZXgodW5zaWduZWQgbG9uZyB0eXBlKQoraW50IFdlYkdMQnVmZmVyOjpnZXRDYWNoZWRNYXhJ
bmRleChHQzNEZW51bSB0eXBlKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FS
UkFZX0xFTkdUSChtX21heEluZGV4Q2FjaGUpOyArK2kpCiAgICAgICAgIGlmIChtX21heEluZGV4
Q2FjaGVbaV0udHlwZSA9PSB0eXBlKQpAQCAtMTc1LDcgKzE3OCw3IEBAIGxvbmcgV2ViR0xCdWZm
ZXI6OmdldENhY2hlZE1heEluZGV4KHVuc2kKICAgICByZXR1cm4gLTE7CiB9CiAKLXZvaWQgV2Vi
R0xCdWZmZXI6OnNldENhY2hlZE1heEluZGV4KHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyB2YWx1
ZSkKK3ZvaWQgV2ViR0xCdWZmZXI6OnNldENhY2hlZE1heEluZGV4KEdDM0RlbnVtIHR5cGUsIGlu
dCB2YWx1ZSkKIHsKICAgICBzaXplX3QgbnVtRW50cmllcyA9IFdURl9BUlJBWV9MRU5HVEgobV9t
YXhJbmRleENhY2hlKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUVudHJpZXM7ICsr
aSkKQEAgLTE4OCw3ICsxOTEsNyBAQCB2b2lkIFdlYkdMQnVmZmVyOjpzZXRDYWNoZWRNYXhJbmRl
eCh1bnNpCiAgICAgbV9uZXh0QXZhaWxhYmxlQ2FjaGVFbnRyeSA9IChtX25leHRBdmFpbGFibGVD
YWNoZUVudHJ5ICsgMSkgJSBudW1FbnRyaWVzOwogfQogCi12b2lkIFdlYkdMQnVmZmVyOjpzZXRU
YXJnZXQodW5zaWduZWQgbG9uZyB0YXJnZXQpCit2b2lkIFdlYkdMQnVmZmVyOjpzZXRUYXJnZXQo
R0MzRGVudW0gdGFyZ2V0KQogewogICAgIC8vIEluIFdlYkdMLCBhIGJ1ZmZlciBpcyBib3VuZCB0
byBvbmUgdGFyZ2V0IGluIGl0cyBsaWZldGltZQogICAgIGlmIChtX3RhcmdldCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAkocmV2aXNpb24gNzU1MzEpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSwyMyArNDEsMjMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2Vi
R0xCdWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIAotICAgIGJvb2wgYXNz
b2NpYXRlQnVmZmVyRGF0YShpbnQgc2l6ZSk7CisgICAgYm9vbCBhc3NvY2lhdGVCdWZmZXJEYXRh
KEdDM0RzaXplaXB0ciBzaXplKTsKICAgICBib29sIGFzc29jaWF0ZUJ1ZmZlckRhdGEoQXJyYXlC
dWZmZXIqIGFycmF5KTsKICAgICBib29sIGFzc29jaWF0ZUJ1ZmZlckRhdGEoQXJyYXlCdWZmZXJW
aWV3KiBhcnJheSk7Ci0gICAgYm9vbCBhc3NvY2lhdGVCdWZmZXJTdWJEYXRhKGxvbmcgb2Zmc2V0
LCBBcnJheUJ1ZmZlciogYXJyYXkpOwotICAgIGJvb2wgYXNzb2NpYXRlQnVmZmVyU3ViRGF0YShs
b25nIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBhcnJheSk7CisgICAgYm9vbCBhc3NvY2lhdGVC
dWZmZXJTdWJEYXRhKEdDM0RpbnRwdHIgb2Zmc2V0LCBBcnJheUJ1ZmZlciogYXJyYXkpOworICAg
IGJvb2wgYXNzb2NpYXRlQnVmZmVyU3ViRGF0YShHQzNEaW50cHRyIG9mZnNldCwgQXJyYXlCdWZm
ZXJWaWV3KiBhcnJheSk7CiAKLSAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisgICAg
R0MzRHNpemVpcHRyIGJ5dGVMZW5ndGgoKSBjb25zdDsKICAgICBjb25zdCBBcnJheUJ1ZmZlciog
ZWxlbWVudEFycmF5QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50QXJyYXlCdWZmZXIu
Z2V0KCk7IH0KIAogICAgIC8vIEdldHMgdGhlIGNhY2hlZCBtYXggaW5kZXggZm9yIHRoZSBnaXZl
biB0eXBlLiBSZXR1cm5zIC0xIGlmCiAgICAgLy8gbm9uZSBoYXMgYmVlbiBzZXQuCi0gICAgbG9u
ZyBnZXRDYWNoZWRNYXhJbmRleCh1bnNpZ25lZCBsb25nIHR5cGUpOworICAgIGludCBnZXRDYWNo
ZWRNYXhJbmRleChHQzNEZW51bSB0eXBlKTsKICAgICAvLyBTZXRzIHRoZSBjYWNoZWQgbWF4IGlu
ZGV4IGZvciB0aGUgZ2l2ZW4gdHlwZS4KLSAgICB2b2lkIHNldENhY2hlZE1heEluZGV4KHVuc2ln
bmVkIGxvbmcgdHlwZSwgbG9uZyB2YWx1ZSk7CisgICAgdm9pZCBzZXRDYWNoZWRNYXhJbmRleChH
QzNEZW51bSB0eXBlLCBpbnQgdmFsdWUpOwogCi0gICAgdW5zaWduZWQgbG9uZyBnZXRUYXJnZXQo
KSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQotICAgIHZvaWQgc2V0VGFyZ2V0KHVuc2lnbmVk
IGxvbmcpOworICAgIEdDM0RlbnVtIGdldFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0
OyB9CisgICAgdm9pZCBzZXRUYXJnZXQoR0MzRGVudW0pOwogCiAgICAgYm9vbCBoYXNFdmVyQmVl
bkJvdW5kKCkgY29uc3QgeyByZXR1cm4gb2JqZWN0KCkgJiYgbV90YXJnZXQ7IH0KIApAQCAtNjks
MTAgKzY5LDEwIEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzQnVm
ZmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdW5zaWduZWQgbG9uZyBtX3Rhcmdl
dDsKKyAgICBHQzNEZW51bSBtX3RhcmdldDsKIAogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9l
bGVtZW50QXJyYXlCdWZmZXI7Ci0gICAgdW5zaWduZWQgbV9ieXRlTGVuZ3RoOworICAgIEdDM0Rz
aXplaXB0ciBtX2J5dGVMZW5ndGg7CiAKICAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGluZGV4IHZh
bGlkYXRpb24uIEZvciBlYWNoIHR5cGUgb2YgaW5kZXgKICAgICAvLyAoaS5lLiwgVU5TSUdORURf
U0hPUlQpLCBjYWNoZSB0aGUgbWF4aW11bSBpbmRleCBpbiB0aGUKQEAgLTgyLDIyICs4MiwyMiBA
QCBwcml2YXRlOgogICAgIC8vIGRyYXcgY2FsbCBhcyBsb25nIGFzIGFsbCBib3VuZCBhcnJheSBi
dWZmZXJzIGFyZSBhdCBsZWFzdAogICAgIC8vIHRoYXQgc2l6ZS4KICAgICBzdHJ1Y3QgTWF4SW5k
ZXhDYWNoZUVudHJ5IHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyB0eXBlOwotICAgICAgICBsb25n
IG1heEluZGV4OworICAgICAgICBHQzNEZW51bSB0eXBlOworICAgICAgICBpbnQgbWF4SW5kZXg7
CiAgICAgfTsKICAgICAvLyBPcGVuR0wgRVMgMi4wIG9ubHkgaGFzIHR3byB2YWxpZCBpbmRleCB0
eXBlcyAoVU5TSUdORURfQllURQogICAgIC8vIGFuZCBVTlNJR05FRF9TSE9SVCksIGJ1dCBtaWdo
dCBhcyB3ZWxsIGxlYXZlIG9wZW4gdGhlCiAgICAgLy8gcG9zc2liaWxpdHkgb2YgYWRkaW5nIG90
aGVycy4KICAgICBNYXhJbmRleENhY2hlRW50cnkgbV9tYXhJbmRleENhY2hlWzRdOwotICAgIHVu
c2lnbmVkIG1fbmV4dEF2YWlsYWJsZUNhY2hlRW50cnk7CisgICAgdW5zaWduZWQgaW50IG1fbmV4
dEF2YWlsYWJsZUNhY2hlRW50cnk7CiAKICAgICAvLyBDbGVhcnMgYWxsIG9mIHRoZSBjYWNoZWQg
bWF4IGluZGljZXMuCiAgICAgdm9pZCBjbGVhckNhY2hlZE1heEluZGljZXMoKTsKIAogICAgIC8v
IEhlbHBlciBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIHRocmVlIGFzc29jaWF0ZUJ1ZmZlckRhdGEo
KS4KLSAgICBib29sIGFzc29jaWF0ZUJ1ZmZlckRhdGFJbXBsKEFycmF5QnVmZmVyKiBhcnJheSwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisgICAgYm9vbCBhc3Nv
Y2lhdGVCdWZmZXJEYXRhSW1wbChBcnJheUJ1ZmZlciogYXJyYXksIEdDM0RpbnRwdHIgYnl0ZU9m
ZnNldCwgR0MzRHNpemVpcHRyIGJ5dGVMZW5ndGgpOwogICAgIC8vIEhlbHBlciBmdW5jdGlvbiBj
YWxsZWQgYnkgdGhlIHR3byBhc3NvY2lhdGVCdWZmZXJTdWJEYXRhKCkuCi0gICAgYm9vbCBhc3Nv
Y2lhdGVCdWZmZXJTdWJEYXRhSW1wbChsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGFycmF5LCB1
bnNpZ25lZCBhcnJheUJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIGJvb2wg
YXNzb2NpYXRlQnVmZmVyU3ViRGF0YUltcGwoR0MzRGludHB0ciBvZmZzZXQsIEFycmF5QnVmZmVy
KiBhcnJheSwgR0MzRGludHB0ciBhcnJheUJ5dGVPZmZzZXQsIEdDM0RzaXplaXB0ciBieXRlTGVu
Z3RoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiA3NTUzMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSB7CiAKICAgICAvLyBUaGlzIGZ1
bmN0aW9uIGlzIG9ubHkgZm9yIGRlcHRoL3N0ZW5jaWwvZGVwdGhfc3RlbmNpbCBhdHRhY2htZW50
LgogICAgIC8vIEN1cnJlbnRseSB3ZSBhc3N1bWUgdGhlc2UgYXR0YWNobWVudHMgYXJlIGFsbCBy
ZW5kZXJidWZmZXJzLgotICAgIHVuc2lnbmVkIGxvbmcgZ2V0SW50ZXJuYWxGb3JtYXQoV2ViR0xP
YmplY3QqIGJ1ZmZlcikKKyAgICBHQzNEZW51bSBnZXRJbnRlcm5hbEZvcm1hdChXZWJHTE9iamVj
dCogYnVmZmVyKQogICAgIHsKICAgICAgICAgQVNTRVJUKGJ1ZmZlciAmJiBidWZmZXItPmlzUmVu
ZGVyYnVmZmVyKCkpOwogICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5k
ZXJidWZmZXIqPihidWZmZXIpKS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKQEAgLTgyLDcgKzgyLDcg
QEAgV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xGcmFtZWJ1ZmZlcihXZWJHTAogICAgIHNldE9iamVj
dChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZUZyYW1lYnVmZmVyKCkpOwog
fQogCi12b2lkIFdlYkdMRnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnQodW5zaWduZWQgbG9uZyBh
dHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleFRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJl
LCBpbnQgbGV2ZWwpCit2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnQoR0MzRGVu
dW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4VGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUs
IEdDM0RpbnQgbGV2ZWwpCiB7CiAgICAgaWYgKCFvYmplY3QoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudCh1
bnMKICAgICB9CiB9CiAKLXZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudCh1bnNp
Z25lZCBsb25nIGF0dGFjaG1lbnQsIFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit2
b2lkIFdlYkdMRnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnQoR0MzRGVudW0gYXR0YWNobWVudCwg
V2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKIHsKICAgICBpZiAoIW9iamVjdCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBXZWJHTEZyYW1lYnVmZmVy
OjpzZXRBdHRhY2htZW50KHVucwogICAgIH0KIH0KIAotV2ViR0xPYmplY3QqIFdlYkdMRnJhbWVi
dWZmZXI6OmdldEF0dGFjaG1lbnQodW5zaWduZWQgbG9uZyBhdHRhY2htZW50KSBjb25zdAorV2Vi
R0xPYmplY3QqIFdlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1lbnQoR0MzRGVudW0gYXR0YWNo
bWVudCkgY29uc3QKIHsKICAgICBpZiAoIW9iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTE2OCw3ICsxNjgsNyBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnQo
CiAgICAgICAgIHJldHVybjsKIH0KIAotaW50IFdlYkdMRnJhbWVidWZmZXI6OmdldFdpZHRoKCkg
Y29uc3QKK0dDM0RzaXplaSBXZWJHTEZyYW1lYnVmZmVyOjpnZXRXaWR0aCgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFvYmplY3QoKSB8fCAhaXNDb2xvckF0dGFjaGVkKCkpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtMTgwLDcgKzE4MCw3IEBAIGludCBXZWJHTEZyYW1lYnVmZmVyOjpnZXRXaWR0aCgpIGNv
bnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBXZWJHTEZyYW1lYnVmZmVyOjpnZXRIZWlnaHQo
KSBjb25zdAorR0MzRHNpemVpIFdlYkdMRnJhbWVidWZmZXI6OmdldEhlaWdodCgpIGNvbnN0CiB7
CiAgICAgaWYgKCFvYmplY3QoKSB8fCAhaXNDb2xvckF0dGFjaGVkKCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMTkyLDcgKzE5Miw3IEBAIGludCBXZWJHTEZyYW1lYnVmZmVyOjpnZXRIZWlnaHQo
KSBjb25zdAogICAgIHJldHVybiAwOwogfQogCi11bnNpZ25lZCBsb25nIFdlYkdMRnJhbWVidWZm
ZXI6OmdldENvbG9yQnVmZmVyRm9ybWF0KCkgY29uc3QKK0dDM0RlbnVtIFdlYkdMRnJhbWVidWZm
ZXI6OmdldENvbG9yQnVmZmVyRm9ybWF0KCkgY29uc3QKIHsKICAgICBpZiAoIW9iamVjdCgpIHx8
ICFpc0NvbG9yQXR0YWNoZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNjAsNyArMjYwLDcg
QEAgYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplUmVuZGVyYgogewogICAgIEFTU0VS
VChvYmplY3QoKSk7CiAgICAgYm9vbCBpbml0Q29sb3IgPSBmYWxzZSwgaW5pdERlcHRoID0gZmFs
c2UsIGluaXRTdGVuY2lsID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgbG9uZyBtYXNrID0gMDsKKyAg
ICBHQzNEYml0ZmllbGQgbWFzayA9IDA7CiAgICAgaWYgKGlzVW5pbml0aWFsaXplZChtX2NvbG9y
QXR0YWNobWVudC5nZXQoKSkpIHsKICAgICAgICAgaW5pdENvbG9yID0gdHJ1ZTsKICAgICAgICAg
bWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVDsKQEAgLTI4NywxMiAr
Mjg3LDEyIEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJlbmRlcmIKICAgICBp
ZiAoZzNkLT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBmbG9hdCBjb2xvckNsZWFyVmFsdWVbXSA9IHswLCAwLCAw
LCAwfSwgZGVwdGhDbGVhclZhbHVlID0gMDsKLSAgICBpbnQgc3RlbmNpbENsZWFyVmFsdWUgPSAw
OwotICAgIHVuc2lnbmVkIGNoYXIgY29sb3JNYXNrW10gPSB7MCwgMCwgMCwgMH0sIGRlcHRoTWFz
ayA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHN0ZW5jaWxNYXNrID0gMHhmZmZmZmZmZjsKLSAgICBi
b29sIGlzU2Npc3NvckVuYWJsZWQgPSBmYWxzZTsKLSAgICBib29sIGlzRGl0aGVyRW5hYmxlZCA9
IGZhbHNlOworICAgIEdDM0RmbG9hdCBjb2xvckNsZWFyVmFsdWVbXSA9IHswLCAwLCAwLCAwfSwg
ZGVwdGhDbGVhclZhbHVlID0gMDsKKyAgICBHQzNEaW50IHN0ZW5jaWxDbGVhclZhbHVlID0gMDsK
KyAgICBHQzNEYm9vbGVhbiBjb2xvck1hc2tbXSA9IHswLCAwLCAwLCAwfSwgZGVwdGhNYXNrID0g
MDsKKyAgICBHQzNEdWludCBzdGVuY2lsTWFzayA9IDB4ZmZmZmZmZmY7CisgICAgR0MzRGJvb2xl
YW4gaXNTY2lzc29yRW5hYmxlZCA9IDA7CisgICAgR0MzRGJvb2xlYW4gaXNEaXRoZXJFbmFibGVk
ID0gMDsKICAgICBpZiAoaW5pdENvbG9yKSB7CiAgICAgICAgIGczZC0+Z2V0RmxvYXR2KEdyYXBo
aWNzQ29udGV4dDNEOjpDT0xPUl9DTEVBUl9WQUxVRSwgY29sb3JDbGVhclZhbHVlKTsKICAgICAg
ICAgZzNkLT5nZXRCb29sZWFudihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLLCBj
b2xvck1hc2spOwpAQCAtMzA3LDcgKzMwNyw3IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5p
dGlhbGl6ZVJlbmRlcmIKICAgICB9CiAgICAgaWYgKGluaXRTdGVuY2lsKSB7CiAgICAgICAgIGcz
ZC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQ0xFQVJfVkFMVUUsICZz
dGVuY2lsQ2xlYXJWYWx1ZSk7Ci0gICAgICAgIGczZC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PGludCo+KCZzdGVuY2ls
TWFzaykpOworICAgICAgICBnM2QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxHQzNEaW50Kj4oJnN0ZW5jaWxNYXNrKSk7
CiAgICAgICAgIGczZC0+Y2xlYXJTdGVuY2lsKDApOwogICAgICAgICBnM2QtPnN0ZW5jaWxNYXNr
KDB4ZmZmZmZmZmYpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMRnJhbWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDc1NTMxKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNSAr
NDIsMTUgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZl
cj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCi0gICAgdm9pZCBzZXRBdHRhY2ht
ZW50KHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXhUYXJnZXQsIFdl
YkdMVGV4dHVyZSosIGludCBsZXZlbCk7Ci0gICAgdm9pZCBzZXRBdHRhY2htZW50KHVuc2lnbmVk
IGxvbmcgYXR0YWNobWVudCwgV2ViR0xSZW5kZXJidWZmZXIqKTsKKyAgICB2b2lkIHNldEF0dGFj
aG1lbnQoR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4VGFyZ2V0LCBXZWJHTFRleHR1
cmUqLCBHQzNEaW50IGxldmVsKTsKKyAgICB2b2lkIHNldEF0dGFjaG1lbnQoR0MzRGVudW0gYXR0
YWNobWVudCwgV2ViR0xSZW5kZXJidWZmZXIqKTsKICAgICAvLyBJZiBhbiBvYmplY3QgaXMgYXR0
YWNoZWQgdG8gdGhlIGZyYW1lYnVmZmVyLCByZW1vdmUgaXQuCiAgICAgdm9pZCByZW1vdmVBdHRh
Y2htZW50KFdlYkdMT2JqZWN0Kik7Ci0gICAgV2ViR0xPYmplY3QqIGdldEF0dGFjaG1lbnQodW5z
aWduZWQgbG9uZykgY29uc3Q7CisgICAgV2ViR0xPYmplY3QqIGdldEF0dGFjaG1lbnQoR0MzRGVu
dW0pIGNvbnN0OwogCi0gICAgdW5zaWduZWQgbG9uZyBnZXRDb2xvckJ1ZmZlckZvcm1hdCgpIGNv
bnN0OwotICAgIGludCBnZXRXaWR0aCgpIGNvbnN0OwotICAgIGludCBnZXRIZWlnaHQoKSBjb25z
dDsKKyAgICBHQzNEZW51bSBnZXRDb2xvckJ1ZmZlckZvcm1hdCgpIGNvbnN0OworICAgIEdDM0Rz
aXplaSBnZXRXaWR0aCgpIGNvbnN0OworICAgIEdDM0RzaXplaSBnZXRIZWlnaHQoKSBjb25zdDsK
IAogICAgIC8vIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgYmVmb3JlIGRyYXdBcnJheSwg
ZHJhd0VsZW1lbnRzLCBjbGVhciwKICAgICAvLyByZWFkUGl4ZWxzLCBjb3B5VGV4SW1hZ2UyRCwg
Y29weVRleFN1YkltYWdlMkQgaWYgdGhpcyBmcmFtZWJ1ZmZlciBpcwpAQCAtOTAsOCArOTAsOCBA
QCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2hhc0V2ZXJCZWVuQm91bmQ7CiAKLSAgICB1bnNpZ25l
ZCBsb25nIG1fdGV4VGFyZ2V0OwotICAgIGludCBtX3RleExldmVsOworICAgIEdDM0RlbnVtIG1f
dGV4VGFyZ2V0OworICAgIEdDM0RpbnQgbV90ZXhMZXZlbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFt
LmNwcAkocmV2aXNpb24gNzU1MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFByb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgV2ViR0xQ
cm9ncmFtOjpjYWNoZUFjdGl2ZUF0dHJpYkxvY2EKICAgICBpZiAoIW1fbGlua1N0YXR1cykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaW50IG51bUF0dHJpYnMgPSAwOworICAgIEdDM0Rp
bnQgbnVtQXR0cmlicyA9IDA7CiAgICAgY29udGV4dDNkLT5nZXRQcm9ncmFtaXYob2JqZWN0KCks
IEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUywgJm51bUF0dHJpYnMpOwogICAg
IG1fYWN0aXZlQXR0cmliTG9jYXRpb25zLnJlc2l6ZShzdGF0aWNfY2FzdDxzaXplX3Q+KG51bUF0
dHJpYnMpKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUF0dHJpYnM7ICsraSkgewpAQCAt
ODIsMjEgKzgyLDIxIEBAIGJvb2wgV2ViR0xQcm9ncmFtOjpjYWNoZUFjdGl2ZUF0dHJpYkxvY2EK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IFdlYkdMUHJvZ3JhbTo6bnVtQWN0aXZlQXR0cmli
TG9jYXRpb25zKCkgY29uc3QKK3Vuc2lnbmVkIFdlYkdMUHJvZ3JhbTo6bnVtQWN0aXZlQXR0cmli
TG9jYXRpb25zKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihtX2FjdGl2
ZUF0dHJpYkxvY2F0aW9ucy5zaXplKCkpOworICAgIHJldHVybiBtX2FjdGl2ZUF0dHJpYkxvY2F0
aW9ucy5zaXplKCk7CiB9CiAKLWludCBXZWJHTFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYkxvY2F0
aW9uKGludCBpbmRleCkgY29uc3QKK0dDM0RpbnQgV2ViR0xQcm9ncmFtOjpnZXRBY3RpdmVBdHRy
aWJMb2NhdGlvbihHQzNEdWludCBpbmRleCkgY29uc3QKIHsKLSAgICBpZiAoaW5kZXggPCAwIHx8
IGluZGV4ID49IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpKQorICAgIGlmIChpbmRleCA+PSBu
dW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVy
biBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KV07Cisg
ICAgcmV0dXJuIG1fYWN0aXZlQXR0cmliTG9jYXRpb25zW2luZGV4XTsKIH0KIAogYm9vbCBXZWJH
TFByb2dyYW06OmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCkgY29uc3QKIHsKLSAgICBmb3IgKGludCBp
aSA9IDA7IGlpIDwgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7ICsraWkpIHsKKyAgICBmb3Ig
KHVuc2lnbmVkIGlpID0gMDsgaWkgPCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsgKytpaSkg
ewogICAgICAgICBpZiAoIWdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKGlpKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUHJvZ3JhbS5oCShyZXZpc2lvbiA3NTUzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUHJvZ3JhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNSArNDUsMTUgQEAgcHVi
bGljOgogICAgIC8vIGNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb24oKSBpcyBvbmx5IGNhbGxlZCBv
bmNlIGFmdGVyIGxpbmtQcm9ncmFtKCkKICAgICAvLyBzdWNjZWVkcy4KICAgICBib29sIGNhY2hl
QWN0aXZlQXR0cmliTG9jYXRpb25zKCk7Ci0gICAgaW50IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9u
cygpIGNvbnN0OwotICAgIGludCBnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpbnQgaW5kZXgpIGNv
bnN0OworICAgIHVuc2lnbmVkIG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpIGNvbnN0OworICAg
IEdDM0RpbnQgZ2V0QWN0aXZlQXR0cmliTG9jYXRpb24oR0MzRHVpbnQgaW5kZXgpIGNvbnN0Owog
CiAgICAgYm9vbCBpc1VzaW5nVmVydGV4QXR0cmliMCgpIGNvbnN0OwogCiAgICAgYm9vbCBnZXRM
aW5rU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9saW5rU3RhdHVzOyB9CiAgICAgdm9pZCBzZXRM
aW5rU3RhdHVzKGJvb2wgc3RhdHVzKSB7IG1fbGlua1N0YXR1cyA9IHN0YXR1czsgfQogCi0gICAg
dW5zaWduZWQgbG9uZyBnZXRMaW5rQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmtDb3VudDsg
fQorICAgIHVuc2lnbmVkIGdldExpbmtDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlua0NvdW50
OyB9CiAKICAgICAvLyBUaGlzIGlzIHRvIGJlIGNhbGxlZCBldmVyeXRpbWUgYWZ0ZXIgdGhlIHBy
b2dyYW0gaXMgc3VjY2Vzc2Z1bGx5IGxpbmtlZC4KICAgICAvLyBXZSBkb24ndCBkZWFsIHdpdGgg
aW50ZWdlciBvdmVyZmxvdyBoZXJlLCBhc3N1bWluZyBpbiByZWFsaXR5IGEgcHJvZ3JhbQpAQCAt
NzIsMTMgKzcyLDEzIEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlz
UHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIFZlY3RvcjxpbnQ+IG1fYWN0
aXZlQXR0cmliTG9jYXRpb25zOworICAgIFZlY3RvcjxHQzNEaW50PiBtX2FjdGl2ZUF0dHJpYkxv
Y2F0aW9uczsKIAotICAgIGJvb2wgbV9saW5rU3RhdHVzOworICAgIEdDM0RpbnQgbV9saW5rU3Rh
dHVzOwogCiAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHdoZXRoZXIgYSBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBiZWxvbmdzIHRvIHRoaXMKICAgICAvLyBwcm9ncmFtIG9yIG5vdC4KLSAgICB1
bnNpZ25lZCBsb25nIG1fbGlua0NvdW50OworICAgIHVuc2lnbmVkIG1fbGlua0NvdW50OwogCiAg
ICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBtX3ZlcnRleFNoYWRlcjsKICAgICBSZWZQdHI8V2ViR0xT
aGFkZXI+IG1fZnJhZ21lbnRTaGFkZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmgJKHJldmlzaW9uIDc1NTMxKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksMjAgKzM5LDIwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMUmVu
ZGVyYnVmZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKLSAgICB2b2lkIHNl
dEludGVybmFsRm9ybWF0KHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQpCisgICAgdm9pZCBz
ZXRJbnRlcm5hbEZvcm1hdChHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCkKICAgICB7CiAgICAgICAg
IG1faW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsKICAgICAgICAgbV9pbml0aWFsaXpl
ZCA9IGZhbHNlOwogICAgIH0KLSAgICB1bnNpZ25lZCBsb25nIGdldEludGVybmFsRm9ybWF0KCkg
Y29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbEZvcm1hdDsgfQorICAgIEdDM0RlbnVtIGdldEludGVy
bmFsRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbEZvcm1hdDsgfQogCi0gICAgdm9p
ZCBzZXRTaXplKHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQorICAg
IHZvaWQgc2V0U2l6ZShHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCiAgICAgewog
ICAgICAgICBtX3dpZHRoID0gd2lkdGg7CiAgICAgICAgIG1faGVpZ2h0ID0gaGVpZ2h0OwogICAg
IH0KLSAgICB1bnNpZ25lZCBsb25nIGdldFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsg
fQotICAgIHVuc2lnbmVkIGxvbmcgZ2V0SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7
IH0KKyAgICBHQzNEc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9Cisg
ICAgR0MzRHNpemVpIGdldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CiAKICAg
ICB2b2lkIHNldElzVmFsaWQoYm9vbCBpc1ZhbGlkKSB7IG1faXNWYWxpZCA9IGlzVmFsaWQ7IH0K
ICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KQEAgLTcyLDkg
KzcyLDkgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJi
dWZmZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB1bnNpZ25lZCBsb25nIG1faW50
ZXJuYWxGb3JtYXQ7CisgICAgR0MzRGVudW0gbV9pbnRlcm5hbEZvcm1hdDsKICAgICBib29sIG1f
aW5pdGlhbGl6ZWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtX3dpZHRoLCBtX2hlaWdodDsKKyAgICBH
QzNEc2l6ZWkgbV93aWR0aCwgbV9oZWlnaHQ7CiAgICAgYm9vbCBtX2lzVmFsaWQ7IC8vIFRoaXMg
aXMgb25seSBmYWxzZSBpZiBpbnRlcm5hbEZvcm1hdCBpcyBERVBUSF9TVEVOQ0lMIGFuZCBwYWNr
ZWRfZGVwdGhfc3RlbmNpbCBpcyBub3Qgc3VwcG9ydGVkLgogCiAgICAgYm9vbCBtX2hhc0V2ZXJC
ZWVuQm91bmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDc1NTMxKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzQsMTQgKzc0LDE0IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIHJldHVybiBvYmplY3QgPyBv
YmplY3QtPm9iamVjdCgpIDogMDsKICAgICB9CiAKLSAgICB2b2lkIGNsaXAxRChsb25nIHN0YXJ0
LCBsb25nIHJhbmdlLCBsb25nIHNvdXJjZVJhbmdlLCBsb25nKiBjbGlwcGVkU3RhcnQsIGxvbmcq
IGNsaXBwZWRSYW5nZSkKKyAgICB2b2lkIGNsaXAxRChHQzNEaW50IHN0YXJ0LCBHQzNEc2l6ZWkg
cmFuZ2UsIEdDM0RzaXplaSBzb3VyY2VSYW5nZSwgR0MzRGludCogY2xpcHBlZFN0YXJ0LCBHQzNE
c2l6ZWkqIGNsaXBwZWRSYW5nZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChjbGlwcGVkU3RhcnQg
JiYgY2xpcHBlZFJhbmdlKTsKICAgICAgICAgaWYgKHN0YXJ0IDwgMCkgewogICAgICAgICAgICAg
cmFuZ2UgKz0gc3RhcnQ7CiAgICAgICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgIH0KLSAgICAg
ICAgbG9uZyBlbmQgPSBzdGFydCArIHJhbmdlOworICAgICAgICBHQzNEaW50IGVuZCA9IHN0YXJ0
ICsgcmFuZ2U7CiAgICAgICAgIGlmIChlbmQgPiBzb3VyY2VSYW5nZSkKICAgICAgICAgICAgIHJh
bmdlIC09IGVuZCAtIHNvdXJjZVJhbmdlOwogICAgICAgICAqY2xpcHBlZFN0YXJ0ID0gc3RhcnQ7
CkBAIC04OSw5ICs4OSw5IEBAIG5hbWVzcGFjZSB7CiAgICAgfQogCiAgICAgLy8gUmV0dXJucyBm
YWxzZSBpZiBubyBjbGlwcGluZyBpcyBuZWNlc3NhcnksIGkuZS4sIHgsIHksIHdpZHRoLCBoZWln
aHQgc3RheSB0aGUgc2FtZS4KLSAgICBib29sIGNsaXAyRChsb25nIHgsIGxvbmcgeSwgbG9uZyB3
aWR0aCwgbG9uZyBoZWlnaHQsCi0gICAgICAgICAgICAgICAgbG9uZyBzb3VyY2VXaWR0aCwgbG9u
ZyBzb3VyY2VIZWlnaHQsCi0gICAgICAgICAgICAgICAgbG9uZyogY2xpcHBlZFgsIGxvbmcqIGNs
aXBwZWRZLCBsb25nKiBjbGlwcGVkV2lkdGgsIGxvbmcqY2xpcHBlZEhlaWdodCkKKyAgICBib29s
IGNsaXAyRChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LAorICAgICAgICAgICAgICAgIEdDM0RzaXplaSBzb3VyY2VXaWR0aCwgR0MzRHNpemVp
IHNvdXJjZUhlaWdodCwKKyAgICAgICAgICAgICAgICBHQzNEaW50KiBjbGlwcGVkWCwgR0MzRGlu
dCogY2xpcHBlZFksIEdDM0RzaXplaSogY2xpcHBlZFdpZHRoLCBHQzNEc2l6ZWkqY2xpcHBlZEhl
aWdodCkKICAgICB7CiAgICAgICAgIEFTU0VSVChjbGlwcGVkWCAmJiBjbGlwcGVkWSAmJiBjbGlw
cGVkV2lkdGggJiYgY2xpcHBlZEhlaWdodCk7CiAgICAgICAgIGNsaXAxRCh4LCB3aWR0aCwgc291
cmNlV2lkdGgsIGNsaXBwZWRYLCBjbGlwcGVkV2lkdGgpOwpAQCAtMjA4LDEyICsyMDgsMTIgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZQogICAgIG1fc3RlbmNpbEZ1
bmNNYXNrQmFjayA9IDB4RkZGRkZGRkY7CiAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5jbGVhcigp
OwogCi0gICAgaW50IG51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAwOworICAgIEdDM0Rp
bnQgbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IDA7CiAgICAgbV9jb250ZXh0LT5nZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFMsICZudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKICAgICBtX3RleHR1cmVVbml0cy5j
bGVhcigpOwogICAgIG1fdGV4dHVyZVVuaXRzLnJlc2l6ZShudW1Db21iaW5lZFRleHR1cmVJbWFn
ZVVuaXRzKTsKIAotICAgIGludCBudW1WZXJ0ZXhBdHRyaWJzID0gMDsKKyAgICBHQzNEaW50IG51
bVZlcnRleEF0dHJpYnMgPSAwOwogICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJm51bVZlcnRleEF0dHJpYnMpOwogICAgIG1f
bWF4VmVydGV4QXR0cmlicyA9IG51bVZlcnRleEF0dHJpYnM7CiAKQEAgLTMwMCwxMiArMzAwLDEy
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKGludCAKICAgICBtX2NvbnRl
eHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CiB9CiAKLWludCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnNpemVJbkJ5dGVzKGludCB0eXBlKQordW5zaWduZWQgaW50IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6c2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSkKIHsKICAgICByZXR1cm4gbV9jb250ZXh0
LT5zaXplSW5CeXRlcyh0eXBlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFj
dGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlLCBFeGNlcHRpb25Db2RlJiBlYykKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlz
Q29udGV4dExvc3QoKSkKQEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YXR0YWNoU2hhZGVyCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRBdHRyaWJMb2NhdGlvbihXZWJH
TFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0
dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0
IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVj
KTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dy
YW0pKQpAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5k
QXR0cmliTG8KICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwg
V2ViR0xCdWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZm
ZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKQEAgLTM3NCw3ICszNzQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YmluZEJ1ZmZlcih1CiB9CiAKIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciog
YnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
aW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiBidWZmZXIs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlz
Q29udGV4dExvc3QoKSkKQEAgLTM5NCw3ICszOTQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YmluZEZyYW1lYnVmCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJCdWZmZXIsIEV4Y2VwdGlv
bkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIo
R0MzRGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCkBAIC00MTUsNyArNDE1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJp
bmRSZW5kZXJidQogfQogCiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kVGV4dHVy
ZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBFeGNlcHRpb25D
b2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kVGV4dHVyZShHQzNEZW51
bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQpAQCAtNDI0LDcg
KzQyNCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kVGV4dHVyZSgKICAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGludCBtYXhMZXZlbCA9
IDA7CisgICAgR0MzRGludCBtYXhMZXZlbCA9IDA7CiAgICAgaWYgKHRhcmdldCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCkgewogICAgICAgICBtX3RleHR1cmVVbml0c1ttX2FjdGl2
ZVRleHR1cmVVbml0XS5tX3RleHR1cmUyREJpbmRpbmcgPSB0ZXh0dXJlOwogICAgICAgICBtYXhM
ZXZlbCA9IG1fbWF4VGV4dHVyZUxldmVsOwpAQCAtNDUxLDcgKzQ1MSw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpiaW5kVGV4dHVyZSgKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRDb2xvcihm
bG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSkKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZENvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBn
cmVlbiwgR0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSkKIHsKICAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CkBAIC00NTksNyArNDU5LDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kQ29sb3IoZgogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0
aW9uKHVuc2lnbmVkIGxvbmcgbW9kZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVu
ZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAh
dmFsaWRhdGVCbGVuZEVxdWF0aW9uKG1vZGUpKQogICAgICAgICByZXR1cm47CkBAIC00NjcsNyAr
NDY3LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpbwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1bnNp
Z25lZCBsb25nIG1vZGVBbHBoYSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQogewog
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbihtb2RlUkdC
KSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKG1vZGVBbHBoYSkpCiAgICAgICAgIHJldHVybjsK
QEAgLTQ3Niw3ICs0NzYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVh
dGlvCiB9CiAKIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuYyh1bnNpZ25l
ZCBsb25nIHNmYWN0b3IsIHVuc2lnbmVkIGxvbmcgZGZhY3RvcikKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikK
IHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMo
c2ZhY3RvciwgZGZhY3RvcikpCiAgICAgICAgIHJldHVybjsKQEAgLTQ4NCw3ICs0ODQsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jKHVuCiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0gICAgICAgCiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpibGVuZEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIHNyY1JHQiwgdW5zaWduZWQgbG9u
ZyBkc3RSR0IsIHVuc2lnbmVkIGxvbmcgc3JjQWxwaGEsIHVuc2lnbmVkIGxvbmcgZHN0QWxwaGEp
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0g
c3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RB
bHBoYSkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0Zh
Y3RvcnMoc3JjUkdCLCBkc3RSR0IpKQogICAgICAgICByZXR1cm47CkBAIC00OTIsNyArNDkyLDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcAogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQgbG9u
ZyB1c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1
c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpKQpAQCAtNTExLDcgKzUxMSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpidWZmZXJEYXRhKHUKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YSh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgQXJyYXlCdWZmZXIqIGRhdGEsIHVuc2lnbmVkIGxvbmcgdXNhZ2UsIEV4
Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEo
R0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4
dExvc3QoKSkKQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YnVmZmVyRGF0YSh1CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YShHQzNEZW51
bSB0YXJnZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKQEAgLTU1Nyw3ICs1NTcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVm
ZmVyRGF0YSh1CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnRwdHIgb2Zmc2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQpAQCAt
NTc4LDcgKzU3OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXQK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBv
ZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnRwdHIgb2Zmc2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKQEAgLTU5
OSw3ICs1OTksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdW5zaWduZWQgbG9uZyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXModW5zaWduZWQgbG9u
ZyB0YXJnZXQpCitHQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAg
ICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7
CkBAIC02MTYsNyArNjE2LDcgQEAgdW5zaWduZWQgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNoZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjbGVhcih1bnNpZ25lZCBsb25nIG1hc2spCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNjMyLDcgKzYzMiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpjbGVhcih1bnNpZ24KICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9
CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhckNvbG9yKGZsb2F0IHIsIGZsb2F0
IGcsIGZsb2F0IGIsIGZsb2F0IGEpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJD
b2xvcihHQzNEZmxvYXQgciwgR0MzRGZsb2F0IGcsIEdDM0RmbG9hdCBiLCBHQzNEZmxvYXQgYSkK
IHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CkBAIC02NDgsNyAr
NjQ4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyQ29sb3IoZgogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpjbGVhckRlcHRoKGZsb2F0IGRlcHRoKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNsZWFyRGVwdGgoR0MzRGZsb2F0IGRlcHRoKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTY1Niw3ICs2NTYsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y2xlYXJEZXB0aChmCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyU3RlbmNpbChsb25n
IHMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykK
IHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CkBAIC02NjQsNyAr
NjY0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyU3RlbmNpbAogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpjb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBh
bHBoYSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb2xvck1hc2soR0MzRGJvb2xlYW4g
cmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxw
aGEpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjgx
LDcgKzY4MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21waWxlU2hhZGUKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2
ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9uZyB5LCBsb25nIHdp
ZHRoLCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCiB7CiAgICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzA1LDcgKzcwNSw4IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkKICAg
ICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKICAgICBlbHNlIHsKLSAgICAgICAg
bG9uZyBjbGlwcGVkWCwgY2xpcHBlZFksIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKKyAg
ICAgICAgR0MzRGludCBjbGlwcGVkWCwgY2xpcHBlZFk7CisgICAgICAgIEdDM0RzaXplaSBjbGlw
cGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7CiAgICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgs
IGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJI
ZWlnaHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVp
Z2h0KSkgewogICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBtX3VucGFja0FsaWdubWVudCk7CkBA
IC03MjEsNyArNzIyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFn
ZQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwg
bG9uZyBsZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9uZyB5LCBs
b25nIHdpZHRoLCBsb25nIGhlaWdodCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5
VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTc0NywxMCArNzQ4LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojpjb3B5VGV4U3ViSW0KICAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkKICAgICAgICAgbV9j
b250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBlbHNlIHsKLSAgICAgICAgbG9uZyBjbGlwcGVk
WCwgY2xpcHBlZFksIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKKyAgICAgICAgR0MzRGlu
dCBjbGlwcGVkWCwgY2xpcHBlZFk7CisgICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNs
aXBwZWRIZWlnaHQ7CiAgICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2V0
Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNs
aXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgewotICAg
ICAgICAgICAgdW5zaWduZWQgbG9uZyBmb3JtYXQgPSB0ZXgtPmdldEludGVybmFsRm9ybWF0KHRh
cmdldCwgbGV2ZWwpOwotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0eXBlID0gdGV4LT5nZXRU
eXBlKHRhcmdldCwgbGV2ZWwpOworICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0ID0gdGV4LT5n
ZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAgICAgICAgICAgIEdDM0RlbnVtIHR5
cGUgPSB0ZXgtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgICAgICBPd25BcnJheVB0
cjx1bnNpZ25lZCBjaGFyPiB6ZXJvOwogICAgICAgICAgICAgaWYgKHdpZHRoICYmIGhlaWdodCkg
ewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzaXplOwpAQCAtODIyLDcgKzgyNCw3IEBA
IFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGUKICAgICByZXR1cm4gbzsK
IH0KIAotUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGVTaGFkZXIodW5zaWduZWQgbG9uZyB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQ
dHI8V2ViR0xTaGFkZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlU2hhZGVyKEdDM0Rl
bnVtIHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSkKQEAgLTgzMiwxMiArODM0LDEyIEBAIFBhc3NSZWZQdHI8
V2ViR0xTaGFkZXI+IFdlYkdMUmVuZGVyaW5nQ28KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
ICAgIAotICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbyA9IFdlYkdMU2hhZGVyOjpjcmVhdGUodGhp
cywgc3RhdGljX2Nhc3Q8R3JhcGhpY3NDb250ZXh0M0Q6OldlYkdMRW51bVR5cGU+KHR5cGUpKTsK
KyAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IG8gPSBXZWJHTFNoYWRlcjo6Y3JlYXRlKHRoaXMsIHR5
cGUpOwogICAgIGFkZE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4gbzsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmN1bGxGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQogewogICAgIGlm
IChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTg1OSw3ICs4NjEsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlQnVmZmVyCiAgICAgICAgICAgICBzdGF0
ZS5ieXRlc1BlckVsZW1lbnQgPSAwOwogICAgICAgICAgICAgc3RhdGUuc2l6ZSA9IDQ7CiAgICAg
ICAgICAgICBzdGF0ZS50eXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwotICAgICAgICAg
ICAgc3RhdGUubm9ybWFsaXplZCA9IGZhbHNlOworICAgICAgICAgICAgc3RhdGUubm9ybWFsaXpl
ZCA9IDA7CiAgICAgICAgICAgICBzdGF0ZS5zdHJpZGUgPSAxNjsKICAgICAgICAgICAgIHN0YXRl
Lm9yaWdpbmFsU3RyaWRlID0gMDsKICAgICAgICAgICAgIHN0YXRlLm9mZnNldCA9IDA7CkBAIC05
MjEsNyArOTIzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVRleHR1cgog
ICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3ZlQXR0YWNobWVudCh0ZXh0dXJlKTsK
IH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoRnVuYyh1bnNpZ25lZCBsb25n
IGZ1bmMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1
bmMpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTI5
LDcgKzkzMSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aEZ1bmModW4KICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZGVwdGhNYXNrKGJvb2wgZmxhZykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykKIHsKICAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQogICAgICAgICByZXR1cm47CkBAIC05MzcsNyArOTM5LDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRlcHRoTWFzayhibwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aFJhbmdlKGZsb2F0
IHpOZWFyLCBmbG9hdCB6RmFyKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoUmFu
Z2UoR0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxvYXQgekZhcikKIHsKICAgICBpZiAoaXNDb250ZXh0
TG9zdCgpKQogICAgICAgICByZXR1cm47CkBAIC05NjQsNyArOTY2LDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcgogfQogCiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkaXNhYmxlKHVuc2lnbmVkIGxvbmcgY2FwKQordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRpc2FibGUoR0MzRGVudW0gY2FwKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkg
fHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQogICAgICAgICByZXR1cm47CkBAIC05NzIsNyAr
OTc0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUodW5zaQogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBV
TlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCkBAIC05ODMsNyArOTg1
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGVWZXJ0ZQogICAgIH0KICAg
ICAKICAgICBpZiAoaW5kZXggPCBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKSkKLSAgICAgICAg
bV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uZW5hYmxlZCA9IGZhbHNlOworICAgICAgICBtX3Zl
cnRleEF0dHJpYlN0YXRlW2luZGV4XS5lbmFibGVkID0gMDsKIAogICAgIGlmIChpbmRleCA+IDAg
fHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7CiAgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KGluZGV4KTsKQEAgLTk5MSw3ICs5OTMsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZGlzYWJsZVZlcnRlCiAgICAgfQogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKHVuc2lnbmVkIGxvbmcgY291bnQsIHVu
c2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlw
ZSwgR0MzRGludHB0ciBvZmZzZXQpCiB7CiAgICAgaWYgKCFtX2JvdW5kRWxlbWVudEFycmF5QnVm
ZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05OTksMjggKzEwMDEsMjYgQEAgYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRWxlbQogICAgIGlmIChvZmZzZXQgPCAwKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB1bnNpZ25lZCBsb25nIHVvZmZzZXQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBsb25nPihvZmZzZXQpOwotCiAgICAgaWYgKHR5cGUgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUKSB7CiAgICAgICAgIC8vIEZvciBhbiB1bnNpZ25l
ZCBzaG9ydCBhcnJheSwgb2Zmc2V0IG11c3QgYmUgZGl2aXNpYmxlIGJ5IDIgZm9yIGFsaWdubWVu
dCByZWFzb25zLgotICAgICAgICBpZiAodW9mZnNldCAmIDEpCisgICAgICAgIGlmIChvZmZzZXQg
JSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIE1ha2UgdW9mZnNl
dCBhbiBlbGVtZW50IG9mZnNldC4KLSAgICAgICAgdW9mZnNldCAvPSAyOworICAgICAgICBvZmZz
ZXQgLz0gMjsKIAotICAgICAgICB1bnNpZ25lZCBsb25nIG4gPSBtX2JvdW5kRWxlbWVudEFycmF5
QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyAyOwotICAgICAgICBpZiAodW9mZnNldCA+IG4gfHwgY291
bnQgPiBuIC0gdW9mZnNldCkKKyAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBtX2JvdW5kRWxlbWVu
dEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyAyOworICAgICAgICBpZiAob2Zmc2V0ID4gbiB8
fCBjb3VudCA+IG4gLSBvZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBl
bHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7Ci0gICAg
ICAgIHVuc2lnbmVkIGxvbmcgbiA9IG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5n
dGgoKTsKLSAgICAgICAgaWYgKHVvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAtIHVvZmZzZXQpCisg
ICAgICAgIEdDM0RzaXplaXB0ciBuID0gbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxl
bmd0aCgpOworICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZl
KHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyYgbnVtRWxlbWVudHNSZXF1aXJlZCkKK2Jvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUoR0MzRGVu
dW0gdHlwZSwgaW50JiBudW1FbGVtZW50c1JlcXVpcmVkKQogewogICAgIC8vIFBlcmZvcm1zIGNv
bnNlcnZhdGl2ZSB2YWxpZGF0aW9uIGJ5IGNhY2hpbmcgYSBtYXhpbXVtIGluZGV4IG9mCiAgICAg
Ly8gdGhlIGdpdmVuIHR5cGUgcGVyIGVsZW1lbnQgYXJyYXkgYnVmZmVyLiBJZiBhbGwgb2YgdGhl
IGJvdW5kCkBAIC0xMDMxLDI4ICsxMDMxLDI4IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZUluZGUKICAgICBpZiAoIW1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gbV9ib3VuZEVs
ZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOworICAgIEdDM0RzaXplaXB0ciBudW1FbGVt
ZW50cyA9IG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKICAgICAvLyBU
aGUgY2FzZSBjb3VudD09MCBpcyBhbHJlYWR5IGRlYWx0IHdpdGggaW4gZHJhd0VsZW1lbnRzIGJl
Zm9yZSB2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUuCiAgICAgaWYgKCFudW1FbGVtZW50
cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNvbnN0IEFycmF5QnVmZmVyKiBidWZmZXIg
PSBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKTsKICAgICBB
U1NFUlQoYnVmZmVyKTsKIAotICAgIGxvbmcgbWF4SW5kZXggPSBtX2JvdW5kRWxlbWVudEFycmF5
QnVmZmVyLT5nZXRDYWNoZWRNYXhJbmRleCh0eXBlKTsKKyAgICBpbnQgbWF4SW5kZXggPSBtX2Jv
dW5kRWxlbWVudEFycmF5QnVmZmVyLT5nZXRDYWNoZWRNYXhJbmRleCh0eXBlKTsKICAgICBpZiAo
bWF4SW5kZXggPCAwKSB7CiAgICAgICAgIC8vIENvbXB1dGUgdGhlIG1heGltdW0gaW5kZXggaW4g
dGhlIGVudGlyZSBidWZmZXIgZm9yIHRoZSBnaXZlbiB0eXBlIG9mIGluZGV4LgogICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURTogewotICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogcCA9IHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihidWZmZXItPmRhdGEoKSk7CisgICAgICAgICAgICBjb25z
dCBHQzNEdWJ5dGUqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWJ5dGUqPihidWZmZXItPmRh
dGEoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7
IGkrKykKLSAgICAgICAgICAgICAgICBtYXhJbmRleCA9IG1heChtYXhJbmRleCwgc3RhdGljX2Nh
c3Q8bG9uZz4ocFtpXSkpOworICAgICAgICAgICAgICAgIG1heEluZGV4ID0gbWF4KG1heEluZGV4
LCBzdGF0aWNfY2FzdDxpbnQ+KHBbaV0pKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOiB7Ci0gICAg
ICAgICAgICBudW1FbGVtZW50cyAvPSBzaXplb2YodW5zaWduZWQgc2hvcnQpOwotICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBz
aG9ydCo+KGJ1ZmZlci0+ZGF0YSgpKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1FbGVtZW50czsgaSsrKQotICAgICAgICAgICAgICAgIG1heEluZGV4ID0gbWF4KG1h
eEluZGV4LCBzdGF0aWNfY2FzdDxsb25nPihwW2ldKSk7CisgICAgICAgICAgICBudW1FbGVtZW50
cyAvPSBzaXplb2YoR0MzRHVzaG9ydCk7CisgICAgICAgICAgICBjb25zdCBHQzNEdXNob3J0KiBw
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVzaG9ydCo+KGJ1ZmZlci0+ZGF0YSgpKTsKKyAgICAg
ICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKKyAg
ICAgICAgICAgICAgICBtYXhJbmRleCA9IG1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50Pihw
W2ldKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgpA
QCAtMTA3MSw5ICsxMDcxLDEwIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUluZGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVk
IGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQsIGxvbmcmIG51bUVsZW1lbnRzUmVxdWlyZWQpCitib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShHQzNEc2l6
ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCBpbnQmIG51bUVsZW1l
bnRzUmVxdWlyZWQpCiB7Ci0gICAgbG9uZyBsYXN0SW5kZXggPSAtMTsKKyAgICBBU1NFUlQoY291
bnQgPj0gMCAmJiBvZmZzZXQgPj0gMCk7CisgICAgaW50IGxhc3RJbmRleCA9IC0xOwogCiAgICAg
aWYgKCFtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xMDg2LDIwICsxMDg3LDIwIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUluZGUKICAgICBpZiAoIW1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1
ZmZlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB1bnNpZ25lZCBsb25nIHVvZmZz
ZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihvZmZzZXQpOworICAgIHVuc2lnbmVkIGxv
bmcgdW9mZnNldCA9IG9mZnNldDsKICAgICB1bnNpZ25lZCBsb25nIG4gPSBjb3VudDsKIAogICAg
IGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCkgewogICAgICAg
ICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQuCi0gICAgICAgIHVvZmZzZXQgLz0g
MjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBzaG9ydCo+KG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1
ZmZlcigpLT5kYXRhKCkpICsgdW9mZnNldDsKKyAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0Mz
RHVzaG9ydCk7CisgICAgICAgIGNvbnN0IEdDM0R1c2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxjb25z
dCBHQzNEdXNob3J0Kj4obV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVm
ZmVyKCktPmRhdGEoKSkgKyB1b2Zmc2V0OwogICAgICAgICB3aGlsZSAobi0tID4gMCkgewogICAg
ICAgICAgICAgaWYgKCpwID4gbGFzdEluZGV4KQogICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9
ICpwOwogICAgICAgICAgICAgKytwOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0eXBlID09
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7Ci0gICAgICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4obV9ib3VuZEVs
ZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSkgKyB1b2Zmc2V0
OworICAgICAgICBjb25zdCBHQzNEdWJ5dGUqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWJ5
dGUqPihtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0
YSgpKSArIHVvZmZzZXQ7CiAgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CiAgICAgICAgICAgICBp
ZiAoKnAgPiBsYXN0SW5kZXgpCiAgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CkBAIC0x
MTEyLDcgKzExMTMsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRl
CiAgICAgcmV0dXJuIG51bUVsZW1lbnRzUmVxdWlyZWQgPiAwOwogfQogCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVSZW5kZXJpbmdTdGF0ZShsb25nIG51bUVsZW1lbnRzUmVx
dWlyZWQpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVSZW5kZXJpbmdTdGF0
ZShpbnQgbnVtRWxlbWVudHNSZXF1aXJlZCkKIHsKICAgICBpZiAoIW1fY3VycmVudFByb2dyYW0p
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExMzAsNyArMTEzMSw3IEBAIGJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVJlbmQKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICAvLyBMb29rIGluIGVhY2ggY29uc3VtZWQgdmVydGV4IGF0dHJpYiAoYnkgdGhlIGN1cnJlbnQg
cHJvZ3JhbSkgYW5kIGZpbmQgdGhlIHNtYWxsZXN0IGJ1ZmZlciBzaXplCi0gICAgbG9uZyBzbWFs
bGVzdE51bUVsZW1lbnRzID0gTE9OR19NQVg7CisgICAgaW50IHNtYWxsZXN0TnVtRWxlbWVudHMg
PSBJTlRfTUFYOwogICAgIGludCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMgPSBtX2N1cnJlbnRQ
cm9ncmFtLT5udW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9uczsgKytpKSB7CiAgICAgICAgIGludCBsb2MgPSBt
X2N1cnJlbnRQcm9ncmFtLT5nZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpKTsKQEAgLTExNDAsOCAr
MTE0MSw5IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVJlbmQKICAgICAg
ICAgICAgICAgICAvLyBBdm9pZCBvZmYtYnktb25lIGVycm9ycyBpbiBudW1FbGVtZW50cyBjb21w
dXRhdGlvbi4KICAgICAgICAgICAgICAgICAvLyBGb3IgdGhlIGxhc3QgZWxlbWVudCwgd2Ugd2ls
bCBvbmx5IHRvdWNoIHRoZSBkYXRhIGZvciB0aGUKICAgICAgICAgICAgICAgICAvLyBlbGVtZW50
IGFuZCBub3RoaW5nIGJleW9uZCBpdC4KLSAgICAgICAgICAgICAgICBsb25nIGJ5dGVzUmVtYWlu
aW5nID0gc3RhdGUuYnVmZmVyQmluZGluZy0+Ynl0ZUxlbmd0aCgpIC0gc3RhdGUub2Zmc2V0Owot
ICAgICAgICAgICAgICAgIGxvbmcgbnVtRWxlbWVudHMgPSAwOworICAgICAgICAgICAgICAgIGlu
dCBieXRlc1JlbWFpbmluZyA9IHN0YXRpY19jYXN0PGludD4oc3RhdGUuYnVmZmVyQmluZGluZy0+
Ynl0ZUxlbmd0aCgpIC0gc3RhdGUub2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpbnQgbnVtRWxl
bWVudHMgPSAwOworICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5zdHJpZGUgPiAwKTsKICAg
ICAgICAgICAgICAgICBpZiAoYnl0ZXNSZW1haW5pbmcgPj0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50
KQogICAgICAgICAgICAgICAgICAgICBudW1FbGVtZW50cyA9IDEgKyAoYnl0ZXNSZW1haW5pbmcg
LSBzdGF0ZS5ieXRlc1BlckVsZW1lbnQpIC8gc3RhdGUuc3RyaWRlOwogICAgICAgICAgICAgICAg
IGlmIChudW1FbGVtZW50cyA8IHNtYWxsZXN0TnVtRWxlbWVudHMpCkBAIC0xMTUwLDcgKzExNTIs
NyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVSZW5kCiAgICAgICAgIH0K
ICAgICB9CiAgICAgCi0gICAgaWYgKHNtYWxsZXN0TnVtRWxlbWVudHMgPT0gTE9OR19NQVgpCisg
ICAgaWYgKHNtYWxsZXN0TnVtRWxlbWVudHMgPT0gSU5UX01BWCkKICAgICAgICAgc21hbGxlc3RO
dW1FbGVtZW50cyA9IDA7CiAgICAgCiAgICAgcmV0dXJuIG51bUVsZW1lbnRzUmVxdWlyZWQgPD0g
c21hbGxlc3ROdW1FbGVtZW50czsKQEAgLTExNjksNyArMTE3MSw3IEBAIGJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkcKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25n
IGZpcnN0LCBsb25nIGNvdW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0Rz
aXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsK
IApAQCAtMTIyMSw3ICsxMjIzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdB
cnJheXModQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUsIGxv
bmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBt
b2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogCkBAIC0xMjQ4LDcg
KzEyNTAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzCiAgICAg
aWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbG9uZyBudW1FbGVtZW50cyA9IDA7
CisgICAgaW50IG51bUVsZW1lbnRzID0gMDsKICAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91
dE9mQm91bmRzQWNjZXNzZXMoKSkgewogICAgICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlk
IHJlbmRlcmluZyBzdGF0ZQogICAgICAgICBpZiAoIXZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShj
b3VudCwgdHlwZSwgb2Zmc2V0KSkgewpAQCAtMTI5MSw3ICsxMjkzLDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bCh0cnVlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZSh1bnNpZ25l
ZCBsb25nIGNhcCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGVudW0g
Y2FwKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShj
YXApKQogICAgICAgICByZXR1cm47CkBAIC0xMjk5LDcgKzEzMDEsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZW5hYmxlKHVuc2lnCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGlu
ZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlm
IChpc0NvbnRleHRMb3N0KCkpCkBAIC0xMzEyLDcgKzEzMTQsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZW5hYmxlVmVydGV4CiAgICAgaWYgKGluZGV4ID49IG1fdmVydGV4QXR0cmli
U3RhdGUuc2l6ZSgpKQogICAgICAgICBtX3ZlcnRleEF0dHJpYlN0YXRlLnJlc2l6ZShpbmRleCAr
IDEpOwogICAgICAgICAKLSAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5lbmFibGVkID0g
dHJ1ZTsKKyAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5lbmFibGVkID0gMTsKICAgICAK
ICAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtMTMzNSw3ICsxMzM3LDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZsdXNoKCkKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwodHJ1ZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50
LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIGJ1
ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJh
bWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50
LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiBidWZmZXIs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKHRhcmdl
dCwgYXR0YWNobWVudCkpCkBAIC0xNDA2LDcgKzE0MDgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZnJhbWVidWZmZXJSCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJE
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVk
IGxvbmcgdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIGxvbmcgbGV2ZWwsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4
dGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgYXR0YWNobWVu
dCkpCkBAIC0xNDMxLDcgKzE0MzMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJh
bWVidWZmZXJUCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyb250RmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCiB7CiAg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQzOSw3ICsxNDQx
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyb250RmFjZSh1bgogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCkKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCiB7CiAgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ2OCw3ICsxNDcwLDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdlbmVyYXRlTWlwbQogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHByb2dy
YW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxX
ZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlQXR0cmliKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFs
aWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKQEAgLTE0NzksNyArMTQ4MSw3IEBAIFBhc3NSZWZQ
dHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmkKICAgICByZXR1cm4gV2ViR0xBY3RpdmVJ
bmZvOjpjcmVhdGUoaW5mby5uYW1lLCBpbmZvLnR5cGUsIGluZm8uc2l6ZSk7CiB9CiAKLVBhc3NS
ZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZVVu
aWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRp
b25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBp
bmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQpAQCAt
MTQ5OSwxNiArMTUwMSwxNiBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNo
ZWRTCiAgICAgc2hhZGVyT2JqZWN0cy5jbGVhcigpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpbnQgbnVtU2hhZGVycyA9IDA7CisgICAgR0MzRGludCBudW1TaGFkZXJzID0gMDsKICAg
ICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNz
Q29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJTLCAmbnVtU2hhZGVycyk7CiAgICAgaWYgKG51bVNo
YWRlcnMpIHsKLSAgICAgICAgT3duQXJyYXlQdHI8dW5zaWduZWQgaW50PiBzaGFkZXJzKG5ldyB1
bnNpZ25lZCBpbnRbbnVtU2hhZGVyc10pOwotICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAg
ICBPd25BcnJheVB0cjxQbGF0Zm9ybTNET2JqZWN0PiBzaGFkZXJzKG5ldyBQbGF0Zm9ybTNET2Jq
ZWN0W251bVNoYWRlcnNdKTsKKyAgICAgICAgR0MzRHNpemVpIGNvdW50ID0gMDsKICAgICAgICAg
bV9jb250ZXh0LT5nZXRBdHRhY2hlZFNoYWRlcnMob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBudW1T
aGFkZXJzLCAmY291bnQsIHNoYWRlcnMuZ2V0KCkpOwogICAgICAgICBpZiAoY291bnQgIT0gbnVt
U2hhZGVycykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgc2hhZGVyT2JqZWN0
cy5yZXNpemUobnVtU2hhZGVycyk7Ci0gICAgICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCBudW1T
aGFkZXJzOyArK2lpKSB7CisgICAgICAgIGZvciAoR0MzRGludCBpaSA9IDA7IGlpIDwgbnVtU2hh
ZGVyczsgKytpaSkgewogICAgICAgICAgICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IGZpbmRTaGFk
ZXIoc2hhZGVyc1tpaV0pOwogICAgICAgICAgICAgaWYgKCFzaGFkZXIpIHsKICAgICAgICAgICAg
ICAgICBzaGFkZXJPYmplY3RzLmNsZWFyKCk7CkBAIC0xNTIwLDcgKzE1MjIsNyBAQCBib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorR0MzRGludCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybiAt
MTsKQEAgLTE1MjksNyArMTUzMSw3IEBAIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0
dHJpYkxvY2EKICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3RP
clplcm8ocHJvZ3JhbSksIG5hbWUpOwogfQogCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVk
IGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0QnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKQEAgLTE1NDUsNyArMTU0Nyw3IEBAIFdlYkdMR2V0SW5mbyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEIKICAgICB9CiAKICAgICBXZWJHTFN0YXRlUmVzdG9y
ZXIodGhpcywgZmFsc2UpOwotICAgIGludCB2YWx1ZSA9IDA7CisgICAgR0MzRGludCB2YWx1ZSA9
IDA7CiAgICAgbV9jb250ZXh0LT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAm
dmFsdWUpOwogICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUp
CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8bG9uZz4odmFsdWUpKTsK
QEAgLTE1NjEsNyArMTU2Myw3IEBAIFBhc3NSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4g
V2ViR0wKICAgICByZXR1cm4gV2ViR0xDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKG1fY29udGV4
dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRFcnJvcigpCitHQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEVycm9yKCkKIHsKICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOwogfQpAQCAt
MTU4Nyw3ICsxNTg5LDcgQEAgV2ViR0xFeHRlbnNpb24qIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZwogICAgIHJldHVybiAwOwogfQogCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVy
RnVuY1BhcmFtZXRlcnModGFyZ2V0LCBhdHRhY2htZW50KSkKQEAgLTE2MTAsNyArMTYxMiw3IEBA
IFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEYKIAogICAgIGlmIChwbmFt
ZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFN
RSkgewogICAgICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwotICAgICAgICBp
bnQgdmFsdWUgPSAwOworICAgICAgICBHQzNEaW50IHZhbHVlID0gMDsKICAgICAgICAgbV9jb250
ZXh0LT5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1l
bnQsIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUpCiAgICAgICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHZhbHVlKSk7CkBAIC0x
NjE4LDExICsxNjIwLDExIEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dEYKICAgICB9CiAKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwotICAgIGlu
dCB0eXBlID0gMDsKKyAgICBHQzNEaW50IHR5cGUgPSAwOwogICAgIG1fY29udGV4dC0+Z2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSwgJnR5cGUpOwog
ICAgIGlmICghdHlwZSkKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGludCB2
YWx1ZSA9IDA7CisgICAgR0MzRGludCB2YWx1ZSA9IDA7CiAgICAgbV9jb250ZXh0LT5nZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FLCAmdmFsdWUpOwog
ICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUjoKQEAgLTE2MzUsNyArMTYzNyw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEYKICAgICB9CiB9CiAKLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
K1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQpAQCAtMTgxMyw3ICsxODE1LDcgQEAgV2ViR0xHZXRJbmZv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UAogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTDoKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6Ci0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8obV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbik7CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV91bnBhY2tDb2xvcnNw
YWNlQ29udmVyc2lvbikpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUjoKICAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygiV2Via2l0ICgiICsgbV9jb250ZXh0LT5nZXRTdHJp
bmcoR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUikgKyAiKSIpOwogICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlZFUlNJT046CkBAIC0xODI2LDE0ICsxODI4LDE0IEBAIFdlYkdMR2V0SW5mbyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFAKICAgICB9CiB9CiAKLVdlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK1dlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdM
T2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAKICAgICBX
ZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwotICAgIGludCB2YWx1ZSA9IDA7CisgICAg
R0MzRGludCB2YWx1ZSA9IDA7CiAgICAgc3dpdGNoIChwbmFtZSkgewogICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFTEVURV9TVEFUVVM6CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
cHJvZ3JhbS0+aXNEZWxldGVkKCkpOwpAQCAtMTg2Nyw3ICsxODY5LDcgQEAgU3RyaW5nIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbQogICAgIHJldHVybiBtX2NvbnRleHQtPmdldFBy
b2dyYW1JbmZvTG9nKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7CiB9CiAKLVdlYkdMR2V0SW5mbyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcih1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitXZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQpAQCAtMTkwNSw3
ICsxOTA3LDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UgogICAg
ICAgICAgICAgdmFsdWUgPSA4OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6Ci0gICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0SW50ZXJuYWxG
b3JtYXQoKSk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmc+KG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkp
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKQEAgLTE5MTQsNyArMTkxNiw3IEBAIFdlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFIKICAgICB9CiAKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIo
dGhpcywgZmFsc2UpOwotICAgIGludCB2YWx1ZSA9IDA7CisgICAgR0MzRGludCB2YWx1ZSA9IDA7
CiAgICAgc3dpdGNoIChwbmFtZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUl9XSURUSDoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJf
SEVJR0hUOgpAQCAtMTkyNywyMCArMTkyOSwyMCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRSCiAgICAgICAgIG1fY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhzdGF0aWNfY2FzdDxsb25nPih2YWx1ZSkpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX3JlbmRlcmJ1
ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkpKTsKICAgICBkZWZhdWx0OgogICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0pOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgfQogfQogCi1XZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xT
aGFkZXIqIHNoYWRlciwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitX
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIoV2Vi
R0xTaGFkZXIqIHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRh
dGVXZWJHTE9iamVjdChzaGFkZXIpKQogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAg
ICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKLSAgICBpbnQgdmFsdWUgPSAwOwor
ICAgIEdDM0RpbnQgdmFsdWUgPSAwOwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RBVFVTOgogICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKHNoYWRlci0+aXNEZWxldGVkKCkpOwpAQCAtMTk5MSw3ICsxOTkzLDcgQEAgVmVjdG9yPFN0
cmluZz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBhcmFtZXRlcih1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQpAQCAtMjAwMCw3ICsy
MDAyLDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VAogICAgIGlm
ICghdGV4KQogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgV2ViR0xTdGF0ZVJl
c3RvcmVyKHRoaXMsIGZhbHNlKTsKLSAgICBpbnQgdmFsdWUgPSAwOworICAgIEdDM0RpbnQgdmFs
dWUgPSAwOwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX01BR19GSUxURVI6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9NSU5fRklMVEVSOgpAQCAtMjAyMywxMyArMjAyNSwxMyBAQCBXZWJHTEdldEluZm8gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRVCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOwogICAgIH0KLSAgICBsb25nIGxvY2F0aW9uID0gdW5pZm9ybUxvY2F0
aW9uLT5sb2NhdGlvbigpOworICAgIEdDM0RpbnQgbG9jYXRpb24gPSB1bmlmb3JtTG9jYXRpb24t
PmxvY2F0aW9uKCk7CiAgICAgCiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsK
ICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIG1vcmUgZWZmaWNpZW50IHVzaW5nIFdlYkdMVW5pZm9y
bUxvY2F0aW9uIGFuZCBjYWNoaW5nIHR5cGVzIGluIGl0Ci0gICAgaW50IGFjdGl2ZVVuaWZvcm1z
ID0gMDsKKyAgICBHQzNEaW50IGFjdGl2ZVVuaWZvcm1zID0gMDsKICAgICBtX2NvbnRleHQtPmdl
dFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJ
VkVfVU5JRk9STVMsICZhY3RpdmVVbmlmb3Jtcyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBh
Y3RpdmVVbmlmb3JtczsgaSsrKSB7CisgICAgZm9yIChHQzNEaW50IGkgPSAwOyBpIDwgYWN0aXZl
VW5pZm9ybXM7IGkrKykgewogICAgICAgICBBY3RpdmVJbmZvIGluZm87CiAgICAgICAgIGlmICgh
bV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaSwgaW5m
bykpCiAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CkBAIC0yMDM3LDcgKzIwMzks
NyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVCiAgICAgICAgIGlm
IChpbmZvLnNpemUgPiAxKQogICAgICAgICAgICAgaW5mby5uYW1lID0gaW5mby5uYW1lLmxlZnQo
aW5mby5uYW1lLmxlbmd0aCgpIC0gMyk7CiAgICAgICAgIC8vIElmIGl0J3MgYW4gYXJyYXksIHdl
IG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIGVhY2ggZWxlbWVudCwgYXBwZW5kaW5nICJbaW5kZXhd
IiB0byB0aGUgbmFtZS4KLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGluZm8u
c2l6ZTsgKytpbmRleCkgeworICAgICAgICBmb3IgKEdDM0RpbnQgaW5kZXggPSAwOyBpbmRleCA8
IGluZm8uc2l6ZTsgKytpbmRleCkgewogICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBpbmZvLm5h
bWU7CiAgICAgICAgICAgICBpZiAoaW5mby5zaXplID4gMSAmJiBpbmRleCA+PSAxKSB7CiAgICAg
ICAgICAgICAgICAgbmFtZS5hcHBlbmQoJ1snKTsKQEAgLTIwNDUsMTEgKzIwNDcsMTEgQEAgV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VQogICAgICAgICAgICAgICAgIG5h
bWUuYXBwZW5kKCddJyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBOb3cgbmVlZCB0
byBsb29rIHRoaXMgdXAgYnkgbmFtZSBhZ2FpbiB0byBmaW5kIGl0cyBsb2NhdGlvbgotICAgICAg
ICAgICAgbG9uZyBsb2MgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihvYmplY3RPclpl
cm8ocHJvZ3JhbSksIG5hbWUpOworICAgICAgICAgICAgR0MzRGludCBsb2MgPSBtX2NvbnRleHQt
PmdldFVuaWZvcm1Mb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwogICAgICAg
ICAgICAgaWYgKGxvYyA9PSBsb2NhdGlvbikgewogICAgICAgICAgICAgICAgIC8vIEZvdW5kIGl0
LiBVc2UgdGhlIHR5cGUgaW4gdGhlIEFjdGl2ZUluZm8gdG8gZGV0ZXJtaW5lIHRoZSByZXR1cm4g
dHlwZS4KLSAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6V2ViR0xFbnVtVHlwZSBi
YXNlVHlwZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgICAgICAgICAg
ICAgR0MzRGVudW0gYmFzZVR5cGU7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0
aDsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGluZm8udHlwZSkgewogICAgICAgICAgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6CiAgICAgICAgICAgICAgICAgICAgIGJhc2VU
eXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7CkBAIC0yMTE5LDIxICsyMTIxLDIxIEBAIFdl
YkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFUKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgc3dpdGNoIChiYXNlVHlwZSkgewogICAgICAgICAgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0
IHZhbHVlWzE2XSA9IHswfTsKKyAgICAgICAgICAgICAgICAgICAgR0MzRGZsb2F0IHZhbHVlWzE2
XSA9IHswfTsKICAgICAgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtZnYob2Jq
ZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAobGVuZ3RoID09IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKHZhbHVlWzBdKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDogewotICAgICAg
ICAgICAgICAgICAgICBpbnQgdmFsdWVbNF0gPSB7MH07CisgICAgICAgICAgICAgICAgICAgIEdD
M0RpbnQgdmFsdWVbNF0gPSB7MH07CiAgICAgICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
VW5pZm9ybWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSAxKQogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxsb25nPih2YWx1ZVswXSkpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1
ZSwgbGVuZ3RoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJPT0w6IHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlWzRd
ID0gezB9OworICAgICAgICAgICAgICAgICAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OwogICAg
ICAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJv
Z3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGgg
PiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJvb2xWYWx1ZVsxNl0gPSB7MH07
CkBAIC0yMTYyLDEzICsyMTY0LDEzIEBAIFBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+
IFdlYkdMUmUKICAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKG5hbWUpKQogICAgICAgICByZXR1cm4g
MDsKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwotICAgIGxvbmcgdW5pZm9y
bUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ob2JqZWN0T3JaZXJvKHBy
b2dyYW0pLCBuYW1lKTsKKyAgICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+
Z2V0VW5pZm9ybUxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7CiAgICAgaWYg
KHVuaWZvcm1Mb2NhdGlvbiA9PSAtMSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIFdl
YkdMVW5pZm9ybUxvY2F0aW9uOjpjcmVhdGUocHJvZ3JhbSwgdW5pZm9ybUxvY2F0aW9uKTsKIH0K
IAotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKHVu
c2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQorV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKEdD
M0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQpAQCAtMjE4OSwyMyAr
MjE5MSwyMyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWCiAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgogICAg
ICAgICBpZiAoaW5kZXggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCiAgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5lbmFibGVkKTsKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPihtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5l
bmFibGVkKSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJB
WV9OT1JNQUxJWkVEOgogICAgICAgICBpZiAoaW5kZXggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5z
aXplKCkpCiAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGZhbHNlKTsKLSAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5ub3JtYWxpemVk
KTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPihtX3ZlcnRl
eEF0dHJpYlN0YXRlW2luZGV4XS5ub3JtYWxpemVkKSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgogICAgICAgICBpZiAoaW5kZXggPj0gbV92
ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KHN0YXRpY19jYXN0PGxvbmc+KDQpKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3Zl
cnRleEF0dHJpYlN0YXRlW2luZGV4XS5zaXplKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhzdGF0aWNfY2FzdDxsb25nPihtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5zaXplKSk7CiAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6CiAg
ICAgICAgIGlmIChpbmRleCA+PSBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKSkKICAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8bG9uZz4oMCkpOwotICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLm9yaWdpbmFsU3Ry
aWRlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxsb25nPihtX3Zl
cnRleEF0dHJpYlN0YXRlW2luZGV4XS5vcmlnaW5hbFN0cmlkZSkpOwogICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKICAgICAgICAgaWYgKGluZGV4
ID49IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQpKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3ZlcnRleEF0dHJpYlN0YXRlW2lu
ZGV4XS50eXBlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nPihtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS50eXBlKSk7CiAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9WRVJURVhfQVRUUklCOgogICAgICAgICBpZiAoaW5k
ZXggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpIHsKICAgICAgICAgICAgIGZsb2F0IHZh
bHVlWzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmIH07CkBAIC0yMjE4LDE2ICsyMjIwLDE2
IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFYKICAgICB9CiB9CiAK
LWxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWdu
ZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK0dDM0RzaXplaXB0ciBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0Mz
RGVudW0gcG5hbWUpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgbG9uZyByZXN1bHQgPSBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYk9mZnNldChp
bmRleCwgcG5hbWUpOworICAgIEdDM0RzaXplaXB0ciByZXN1bHQgPSBtX2NvbnRleHQtPmdldFZl
cnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgbW9kZSkK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gbW9kZSkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CkBA
IC0yMjM5LDEzICsyMjQxLDEzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoaW50KHVu
c2lnbmUKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi1ib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6aXNCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikKK0dDM0Ri
b29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZl
cikKIHsKICAgICBpZiAoIWJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIWJ1ZmZlci0+aGFzRXZlckJl
ZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwogCiAg
ICAgcmV0dXJuIG1fY29udGV4dC0+aXNCdWZmZXIoYnVmZmVyLT5vYmplY3QoKSk7CiB9CkBAIC0y
MjYzLDY3ICsyMjY1LDY3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0NvbnRleHRM
b3MKICAgICByZXR1cm4gbV9jb250ZXh0TG9zdDsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmlzRW5hYmxlZCh1bnNpZ25lZCBsb25nIGNhcCkKK0dDM0Rib29sZWFuIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKIHsKICAgICBpZiAoIXZhbGlk
YXRlQ2FwYWJpbGl0eShjYXApIHx8IGlzQ29udGV4dExvc3QoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gbV9jb250ZXh0LT5pc0VuYWJsZWQo
Y2FwKTsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVidWZmZXIoV2Vi
R0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCiB7CiAg
ICAgaWYgKCFmcmFtZWJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIWZyYW1lYnVmZmVyLT5oYXNFdmVy
QmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICByZXR1cm4gbV9jb250ZXh0LT5pc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyLT5vYmplY3Qo
KSk7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Byb2dyYW0oV2ViR0xQcm9n
cmFtKiBwcm9ncmFtKQorR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Byb2dy
YW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQogewogICAgIGlmICghcHJvZ3JhbSB8fCBpc0NvbnRl
eHRMb3N0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICByZXR1cm4gbV9jb250ZXh0LT5pc1Byb2dyYW0ocHJvZ3JhbS0+b2JqZWN0KCkpOwogfQogCi1i
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZm
ZXIqIHJlbmRlcmJ1ZmZlcikKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNS
ZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKIHsKICAgICBpZiAo
IXJlbmRlcmJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIXJlbmRlcmJ1ZmZlci0+aGFzRXZlckJlZW5C
b3VuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwogCiAgICAg
cmV0dXJuIG1fY29udGV4dC0+aXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyLT5vYmplY3QoKSk7
CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1NoYWRlcihXZWJHTFNoYWRlciog
c2hhZGVyKQorR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1NoYWRlcihXZWJH
TFNoYWRlciogc2hhZGVyKQogewogICAgIGlmICghc2hhZGVyIHx8IGlzQ29udGV4dExvc3QoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBt
X2NvbnRleHQtPmlzU2hhZGVyKHNoYWRlci0+b2JqZWN0KCkpOwogfQogCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKK0dDM0Rib29s
ZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVy
ZSkKIHsKICAgICBpZiAoIXRleHR1cmUgfHwgaXNDb250ZXh0TG9zdCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCF0ZXh0dXJlLT5oYXNFdmVy
QmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICByZXR1cm4gbV9jb250ZXh0LT5pc1RleHR1cmUodGV4dHVyZS0+b2JqZWN0KCkpOwogfQog
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGluZVdpZHRoKGZsb2F0IHdpZHRoKQordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCiB7CiAg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+
bGluZVdpZHRoKChmbG9hdCkgd2lkdGgpOworICAgIG1fY29udGV4dC0+bGluZVdpZHRoKHdpZHRo
KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0yMzQyLDcg
KzIzNDQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0oCiAgICAg
bV9jb250ZXh0LT5saW5rUHJvZ3JhbShvYmplY3RPclplcm8ocHJvZ3JhbSkpOwogICAgIHByb2dy
YW0tPmluY3JlYXNlTGlua0NvdW50KCk7CiAgICAgLy8gY2FjaGUgbGluayBzdGF0dXMKLSAgICBp
bnQgdmFsdWUgPSAwOworICAgIEdDM0RpbnQgdmFsdWUgPSAwOwogICAgIG1fY29udGV4dC0+Z2V0
UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTktf
U1RBVFVTLCAmdmFsdWUpOwogICAgIHByb2dyYW0tPnNldExpbmtTdGF0dXMoc3RhdGljX2Nhc3Q8
Ym9vbD4odmFsdWUpKTsKICAgICAvLyBOZWVkIHRvIGNhY2hlIGxpbmsgc3RhdHVzIGJlZm9yZSBj
YWNoaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgbG9jYXRpb25zLgpAQCAtMjM1MCw3ICsyMzUyLDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKAogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpw
aXhlbFN0b3JlaSh1bnNpZ25lZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKQordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFt
KQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNjMs
NyArMjM2NSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwaXhlbFN0b3JlaSgKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0NPTE9SU1BB
Q0VfQ09OVkVSU0lPTl9XRUJHTDoKICAgICAgICAgaWYgKHBhcmFtID09IEdyYXBoaWNzQ29udGV4
dDNEOjpCUk9XU0VSX0RFRkFVTFRfV0VCR0wgfHwgcGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6
Ok5PTkUpCi0gICAgICAgICAgICBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZz4ocGFyYW0pOworICAgICAgICAgICAgbV91bnBhY2tDb2xvcnNw
YWNlQ29udmVyc2lvbiA9IHN0YXRpY19jYXN0PEdDM0RlbnVtPihwYXJhbSk7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yMzczLDkg
KzIzNzUsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGl4ZWxTdG9yZWkoCiAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKICAgICAgICAgaWYgKHBh
cmFtID09IDEgfHwgcGFyYW0gPT0gMiB8fCBwYXJhbSA9PSA0IHx8IHBhcmFtID09IDgpIHsKICAg
ICAgICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQp
Ci0gICAgICAgICAgICAgICAgbV9wYWNrQWxpZ25tZW50ID0gc3RhdGljX2Nhc3Q8aW50PihwYXJh
bSk7CisgICAgICAgICAgICAgICAgbV9wYWNrQWxpZ25tZW50ID0gcGFyYW07CiAgICAgICAgICAg
ICBlbHNlIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5UOgotICAgICAgICAg
ICAgICAgIG1fdW5wYWNrQWxpZ25tZW50ID0gc3RhdGljX2Nhc3Q8aW50PihwYXJhbSk7CisgICAg
ICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQgPSBwYXJhbTsKICAgICAgICAgICAgIG1fY29u
dGV4dC0+cGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKICAgICAgICAgICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0yMzg5LDE1ICsyMzkx
LDE1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwaXhlbFN0b3JlaSgKICAgICB9CiB9
CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpwb2x5Z29uT2Zmc2V0KGZsb2F0IGZhY3Rv
ciwgZmxvYXQgdW5pdHMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cG9seWdvbk9mZnNl
dChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCiB7CiAgICAgaWYgKGlzQ29udGV4
dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+cG9seWdvbk9mZnNldCgo
ZmxvYXQpIGZhY3RvciwgKGZsb2F0KSB1bml0cyk7CisgICAgbV9jb250ZXh0LT5wb2x5Z29uT2Zm
c2V0KGZhY3RvciwgdW5pdHMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9u
ZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2ln
bmVkIGxvbmcgdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQ2
MSw4ICsyNDYzLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMobAog
ICAgIC8vIHdoZW4gYWxwaGEgaXMgb2ZmLCByZWFkUGl4ZWxzIHNob3VsZCBzZXQgYWxwaGEgdG8g
MjU1IGluc3RlYWQgb2YgMC4KICAgICBpZiAoIW1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0
ZXMoKS5hbHBoYSkgewogICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKTsKLSAgICAgICAgZm9yIChsb25nIGl5ID0gMDsg
aXkgPCBoZWlnaHQ7ICsraXkpIHsKLSAgICAgICAgICAgIGZvciAobG9uZyBpeCA9IDA7IGl4IDwg
d2lkdGg7ICsraXgpIHsKKyAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXkgPSAwOyBpeSA8IGhlaWdo
dDsgKytpeSkgeworICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXggPSAwOyBpeCA8IHdpZHRo
OyArK2l4KSB7CiAgICAgICAgICAgICAgICAgcGl4ZWxzWzNdID0gMjU1OwogICAgICAgICAgICAg
ICAgIHBpeGVscyArPSA0OwogICAgICAgICAgICAgfQpAQCAtMjQ4MSw3ICsyNDgzLDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbGVhc2VTaGFkZQogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5k
ZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGludGVy
bmFsZm9ybWF0LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKICAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNTIxLDE1ICsyNTIzLDE1
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXIKICAgICB9CiB9CiAK
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzYW1wbGVDb3ZlcmFnZShmbG9hdCB2YWx1ZSwg
Ym9vbCBpbnZlcnQpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2FtcGxlQ292ZXJhZ2Uo
R0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpCiB7CiAgICAgaWYgKGlzQ29udGV4
dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+c2FtcGxlQ292ZXJhZ2Uo
KGZsb2F0KSB2YWx1ZSwgaW52ZXJ0KTsKKyAgICBtX2NvbnRleHQtPnNhbXBsZUNvdmVyYWdlKHZh
bHVlLCBpbnZlcnQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCBsb25n
IHdpZHRoLCBsb25nIGhlaWdodCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzY2lzc29y
KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQp
CiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjU1MCw3
ICsyNTUyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZQogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpzdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNp
Z25lZCBsb25nIG1hc2spCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmMo
R0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCiB7CiAgICAgaWYgKGlz
Q29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjU2NCw3ICsyNTY2LDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5jKAogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVu
Y2lsRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmdW5jLCBs
b25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGlu
dCByZWYsIEdDM0R1aW50IG1hc2spCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjU5Myw3ICsyNTk1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnN0ZW5jaWxGdW5jUwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFzayh1bnNpZ25lZCBsb25n
IG1hc2spCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2soR0MzRHVpbnQg
bWFzaykKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CkBAIC0y
NjAzLDcgKzI2MDUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2so
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1
bnNpZ25lZCBsb25nIG1hc2spCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1h
c2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQogewogICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MjYsNyArMjYyOCw3IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFza1MKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNp
bE9wKHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9u
ZyB6cGFzcykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3AoR0MzRGVudW0g
ZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQogewogICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MzQsNyArMjYzNiw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3AodW4KICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE9w
U2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVk
IGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcgenBhc3MpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6c3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0Mz
RGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTI2NDIsOSArMjY0NCw5IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpzdGVuY2lsT3BTZXAKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UodW5z
aWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMs
IEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdl
MkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgLy8gRklYTUU6
IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKICAgICBlYyA9IDA7CkBAIC0y
NjcyLDggKzI2NzQsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJh
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbXBsKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQg
bGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSW1hZ2Uq
IGltYWdlLAordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbXBsKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7CkBAIC0yNjkwLDkgKzI2OTIsOSBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREltCiAgICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodW5z
aWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWln
aHQsIHVuc2lnbmVkIGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhl
bHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFy
cmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgcGl4ZWxzKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjcxNyw4ICsyNzE5LDggQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodQogICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3Vu
cGFja0FsaWdubWVudCk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFn
ZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9y
bWF0LCB1bnNpZ25lZCB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMp
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJ
bWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwogICAg
IGlmIChpc0NvbnRleHRMb3N0KCkpCkBAIC0yNzM2LDggKzI3MzgsOCBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1CiAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9y
ZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50
KTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodW5zaWduZWQg
dGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVk
IHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFn
ZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7CiAgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKQEAgLTI3NTEsOCArMjc1Myw4IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHUKICAgICAgICAgICAgICAgICAgICBtX3VucGFja0Zs
aXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwg
dW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50
KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CkBAIC0yNzg1LDggKzI3ODcsOCBAQCBQYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6CiAgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKCk7CiB9CiAKLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWws
IHVuc2lnbmVkIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBIVE1MVmlkZW9FbGVtZW50
KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCkBA
IC0yNzk3LDcgKzI3OTksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2Uy
RCh1CiAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZv
cm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwgZWMpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1l
dGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCBwYXJh
bWYsIGludCBwYXJhbWksIGJvb2wgaXNGbG9hdCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0
IHBhcmFtZiwgR0MzRGludCBwYXJhbWksIGJvb2wgaXNGbG9hdCkKIHsKICAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CkBAIC0yODMwLDE5ICsyODMyLDE5IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXIKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFy
YW1ldGVyZih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBmbG9hdCBwYXJhbSkKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSkKIHsKICAgICB0ZXhQYXJhbWV0ZXIodGFy
Z2V0LCBwbmFtZSwgcGFyYW0sIDAsIHRydWUpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4UGFyYW1ldGVyaSh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBpbnQg
cGFyYW0pCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyaShHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQogewogICAgIHRleFBhcmFt
ZXRlcih0YXJnZXQsIHBuYW1lLCAwLCBwYXJhbSwgZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREJhc2UodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25l
ZCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVu
c2lnbmVkIHR5cGUsIHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3Jz
IHJldHVybmVkCiAgICAgZWMgPSAwOwpAQCAtMjg1OCw4ICsyODYwLDggQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMgogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJE
SW1wbCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlv
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLAordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGlu
dCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlKiBpbWFnZSwgYm9v
bCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBlYyA9IDA7CkBAIC0yODc0LDkgKzI4NzYsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4U3ViSW1hZ2UyCiAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBkYXRh
LmRhdGEoKSwgZWMpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1h
Z2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlv
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lk
dGgsIGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxz
LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFy
cmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgcGl4ZWxzKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjkwMCw4ICsyOTAyLDggQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMgogICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3Vu
cGFja0FsaWdubWVudCk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJ
bWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQg
eW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIGVjID0gMDsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQpAQCAtMjkxNSw4ICsy
OTE3LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMgogICAgICAg
ICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgZGF0YS5kYXRhKCksIGVjKTsKIH0KIAotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1
bnNpZ25lZCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBl
LCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMg
PSAwOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCkBAIC0yOTMwLDggKzI5MzIsOCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyCiAgICAgICAgICAgICAgICAgICAg
ICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAKLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwg
dW5zaWduZWQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlw
ZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBlYyA9IDA7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKQEAgLTI5NDUsOCArMjk0Nyw4IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTIKICAgICAgICAgICAgICAg
ICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0K
IAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFy
Z2V0LCB1bnNpZ25lZCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25l
ZCB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgZWMgPSAwOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCkBAIC0yOTU3LDcgKzI5NTksNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyCiAgICAgdGV4U3ViSW1h
Z2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBp
bWFnZS5nZXQoKSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7
CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBFeGNlcHRpb25Db2RlJiBlYykKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFsb2NhdGlvbikK
QEAgLTI5ODIsNyArMjk4NCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MWZ2KGMKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMSkpCkBA
IC0yOTkyLDcgKzI5OTQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFm
dihjCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIGludCB4LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEaW50IHgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhbG9jYXRpb24pCkBAIC0zMDE3LDcgKzMwMTksNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjCiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYs
IGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGlu
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9Q
QVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMSkpCkBAIC0zMDI3LDcgKzMwMjksNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjCiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0
IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBH
QzNEZmxvYXQgeSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsK
ICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFsb2NhdGlvbikKQEAgLTMwNTIsNyArMzA1NCw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KGMKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0
KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVO
VVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCkBAIC0zMDYyLDcgKzMwNjQsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjCiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0yaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCB4LCBp
bnQgeSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTJpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBH
QzNEaW50IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhbG9jYXRpb24pCkBAIC0zMDg3LDcgKzMwODksNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdihjCiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYs
IGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGlu
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9Q
QVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCkBAIC0zMDk3LDcgKzMwOTksNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdihjCiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0
IHksIGZsb2F0IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rm
bG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhbG9jYXRp
b24pCkBAIC0zMTIyLDcgKzMxMjQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTNmdihjCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRM
b3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDMp
KQpAQCAtMzEzMiw3ICszMTM0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0zZnYoYwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6LCBFeGNlcHRpb25Db2RlJiBlYykKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRM
b3N0KCkgfHwgIWxvY2F0aW9uKQpAQCAtMzE1Nyw3ICszMTU5LDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoYwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBz
aXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24s
IHYsIHNpemUsIDMpKQpAQCAtMzE2Nyw3ICszMTY5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0zaXYoYwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9h
dCB3LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwg
R0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdywgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFs
b2NhdGlvbikKQEAgLTMxOTIsNyArMzE5NCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtNGZ2KGMKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQog
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6
ZSwgNCkpCkBAIC0zMjAyLDcgKzMyMDQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTRmdihjCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aShjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHosIGludCB3LCBFeGNlcHRpb25D
b2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGkoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGlu
dCB6LCBHQzNEaW50IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShl
Yyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhbG9jYXRpb24pCkBAIC0zMjI3LDcgKzMy
MjksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjCiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBp
bnQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVO
VVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgNCkpCkBAIC0zMjM3LDcgKzMyMzksNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjCiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBi
b29sIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkq
IHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2Nh
dGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKQEAgLTMyNDYsNyArMzI0OCw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cmkKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJp
eDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3Nl
LCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVp
IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAg
aWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhs
b2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCA0KSkKQEAgLTMyNTUsNyArMzI1Nyw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cmkKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wg
dHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIHYsIDkpKQpAQCAtMzI2NCw3ICszMjY2LDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZs
b2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0
aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQpAQCAtMzI3Myw3ICszMjc1LDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaQogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
TWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFu
c3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRy
YW5zcG9zZSwgdiwgMTYpKQpAQCAtMzI4Miw3ICszMjg0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm1NYXRyaQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0
KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIHYsIHNpemUsIDE2KSkKQEAgLTMzMjUsNjcgKzMzMjcsNjcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlUHJvZwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWIxZih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCB2MCkKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwKQog
ewogICAgIHZlcnRleEF0dHJpYmZJbXBsKGluZGV4LCAxLCB2MCwgMC4wZiwgMC4wZiwgMS4wZik7
CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYodW5zaWdu
ZWQgbG9uZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQogewog
ICAgIHZlcnRleEF0dHJpYmZ2SW1wbChpbmRleCwgdiwgMSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQq
IHYsIGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFm
dihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKIHsKICAgICB2
ZXJ0ZXhBdHRyaWJmdkltcGwoaW5kZXgsIHYsIHNpemUsIDEpOwogfQogCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQg
djAsIGZsb2F0IHYxKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJm
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKIHsKICAgICB2ZXJ0
ZXhBdHRyaWJmSW1wbChpbmRleCwgMiwgdjAsIHYxLCAwLjBmLCAxLjBmKTsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZGV4
LCBGbG9hdDMyQXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0
cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCiB7CiAgICAgdmVydGV4QXR0
cmliZnZJbXBsKGluZGV4LCB2LCAyKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCogdiwgaW50IHNpemUp
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQogewogICAgIHZlcnRleEF0dHJpYmZ2
SW1wbChpbmRleCwgdiwgc2l6ZSwgMik7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2ZXJ0ZXhBdHRyaWIzZih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCB2MCwgZmxvYXQgdjEs
IGZsb2F0IHYyKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmKEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQog
ewogICAgIHZlcnRleEF0dHJpYmZJbXBsKGluZGV4LCAzLCB2MCwgdjEsIHYyLCAxLjBmKTsKIH0K
IAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdih1bnNpZ25lZCBs
b25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCiB7CiAgICAg
dmVydGV4QXR0cmliZnZJbXBsKGluZGV4LCB2LCAzKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCogdiwg
aW50IHNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQogewogICAgIHZlcnRl
eEF0dHJpYmZ2SW1wbChpbmRleCwgdiwgc2l6ZSwgMyk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0Zih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCB2MCwg
ZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQg
djEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQogewogICAgIHZlcnRleEF0dHJpYmZJbXBs
KGluZGV4LCA0LCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2
KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBp
bmRleCwgRmxvYXQzMkFycmF5KiB2KQogewogICAgIHZlcnRleEF0dHJpYmZ2SW1wbChpbmRleCwg
diwgNCk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYo
dW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2
LCBHQzNEc2l6ZWkgc2l6ZSkKIHsKICAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoaW5kZXgsIHYsIHNp
emUsIDQpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9p
bnRlcih1bnNpZ25lZCBsb25nIGluZGV4LCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgdHlwZSwg
Ym9vbCBub3JtYWxpemVkLCBsb25nIHN0cmlkZSwgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9y
bWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSkKQEAgLTM0MTQsOCArMzQxNiw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0
ZXhBdHRyaWIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBEZXRlcm1pbmUgdGhlIG51
bWJlciBvZiBlbGVtZW50cyB0aGUgYm91bmQgYnVmZmVyIGNhbiBob2xkLCBnaXZlbiB0aGUgb2Zm
c2V0LCBzaXplLCB0eXBlIGFuZCBzdHJpZGUKLSAgICBsb25nIHR5cGVTaXplID0gc2l6ZUluQnl0
ZXModHlwZSk7Ci0gICAgaWYgKHR5cGVTaXplIDw9IDApIHsKKyAgICB1bnNpZ25lZCBpbnQgdHlw
ZVNpemUgPSBzaXplSW5CeXRlcyh0eXBlKTsKKyAgICBpZiAoIXR5cGVTaXplKSB7CiAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDIzLDEyICszNDI1LDEyIEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIKICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGxvbmcgYnl0ZXNQZXJFbGVtZW50ID0gc2l6
ZSAqIHR5cGVTaXplOworICAgIEdDM0RzaXplaSBieXRlc1BlckVsZW1lbnQgPSBzaXplICogdHlw
ZVNpemU7CiAKICAgICBpZiAoaW5kZXggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCiAg
ICAgICAgIG1fdmVydGV4QXR0cmliU3RhdGUucmVzaXplKGluZGV4ICsgMSk7CiAKLSAgICBsb25n
IHZhbGlkYXRlZFN0cmlkZSA9IHN0cmlkZSA/IHN0cmlkZSA6IGJ5dGVzUGVyRWxlbWVudDsKKyAg
ICBHQzNEc2l6ZWkgdmFsaWRhdGVkU3RyaWRlID0gc3RyaWRlID8gc3RyaWRlIDogYnl0ZXNQZXJF
bGVtZW50OwogCiAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uYnVmZmVyQmluZGluZyA9
IG1fYm91bmRBcnJheUJ1ZmZlcjsKICAgICBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5ieXRl
c1BlckVsZW1lbnQgPSBieXRlc1BlckVsZW1lbnQ7CkBAIC0zNDQyLDcgKzM0NDQsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliCiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZXdw
b3J0KGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCkKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTM1NzAsMjAgKzM1NzIsMjAgQEAgV2ViR0xTaGFkZXIqIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZmluZAogICAgIHJldHVybiAwOwogfQogCi1XZWJHTEdldEluZm8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb29sZWFuUGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcg
cG5hbWUpCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb29sZWFuUGFy
YW1ldGVyKEdDM0RlbnVtIHBuYW1lKQogewotICAgIHVuc2lnbmVkIGNoYXIgdmFsdWUgPSAwOwor
ICAgIEdDM0Rib29sZWFuIHZhbHVlID0gMDsKICAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBu
YW1lLCAmdmFsdWUpOwogICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4o
dmFsdWUpKTsKIH0KIAotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm9v
bGVhbkFycmF5UGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgcG5hbWUpCitXZWJHTEdldEluZm8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0gcG5h
bWUpCiB7CiAgICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9XUklURU1B
U0spIHsKICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygwLCAwKTsKICAgICB9Ci0gICAgdW5zaWduZWQgY2hhciB2YWx1ZVs0XSA9IHswfTsKKyAg
ICBHQzNEYm9vbGVhbiB2YWx1ZVs0XSA9IHswfTsKICAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52
KHBuYW1lLCB2YWx1ZSk7CiAgICAgYm9vbCBib29sVmFsdWVbNF07CiAgICAgZm9yIChpbnQgaWkg
PSAwOyBpaSA8IDQ7ICsraWkpCkBAIC0zNTkxLDM2ICszNTkzLDM2IEBAIFdlYkdMR2V0SW5mbyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEIKICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGJvb2xW
YWx1ZSwgNCk7CiB9CiAKLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZs
b2F0UGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgcG5hbWUpCitXZWJHTEdldEluZm8gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKIHsKLSAgICBm
bG9hdCB2YWx1ZSA9IDA7CisgICAgR0MzRGZsb2F0IHZhbHVlID0gMDsKICAgICBtX2NvbnRleHQt
PmdldEZsb2F0dihwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRp
Y19jYXN0PGZsb2F0Pih2YWx1ZSkpOworICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwog
fQogCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRJbnRQYXJhbWV0ZXIo
dW5zaWduZWQgbG9uZyBwbmFtZSkKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEludFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKIHsKICAgICByZXR1cm4gZ2V0TG9uZ1Bh
cmFtZXRlcihwbmFtZSk7CiB9CiAKLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldExvbmdQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyBwbmFtZSkKK1dlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldExvbmdQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCiB7Ci0g
ICAgaW50IHZhbHVlID0gMDsKKyAgICBHQzNEaW50IHZhbHVlID0gMDsKICAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KHBuYW1lLCAmdmFsdWUpOwogICAgIHJldHVybiBXZWJHTEdldEluZm8oc3Rh
dGljX2Nhc3Q8bG9uZz4odmFsdWUpKTsKIH0KIAotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0VW5zaWduZWRMb25nUGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgcG5hbWUpCitX
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbnNpZ25lZExvbmdQYXJhbWV0
ZXIoR0MzRGVudW0gcG5hbWUpCiB7Ci0gICAgaW50IHZhbHVlID0gMDsKKyAgICBHQzNEaW50IHZh
bHVlID0gMDsKICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCAmdmFsdWUpOwotICAg
IHVuc2lnbmVkIGludCB1VmFsdWUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKTsK
KyAgICBHQzNEdWludCB1VmFsdWUgPSBzdGF0aWNfY2FzdDxHQzNEdWludD4odmFsdWUpOwogICAg
IHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odVZhbHVlKSk7
CiB9CiAKLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMRmxvYXRB
cnJheVBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHBuYW1lKQorV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1l
KQogewotICAgIGZsb2F0IHZhbHVlWzRdID0gezB9OworICAgIEdDM0RmbG9hdCB2YWx1ZVs0XSA9
IHswfTsKICAgICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgdmFsdWUpOwogICAgIHVuc2ln
bmVkIGxlbmd0aCA9IDA7CiAgICAgc3dpdGNoIChwbmFtZSkgewpAQCAtMzYzOSw5ICszNjQxLDkg
QEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VwogICAgIHJldHVybiBX
ZWJHTEdldEluZm8oRmxvYXQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwogfQogCi1X
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRXZWJHTEludEFycmF5UGFyYW1l
dGVyKHVuc2lnbmVkIGxvbmcgcG5hbWUpCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQogewotICAgIGlu
dCB2YWx1ZVs0XSA9IHswfTsKKyAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OwogICAgIG1fY29u
dGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSAw
OwogICAgIHN3aXRjaCAocG5hbWUpIHsKQEAgLTM3MTUsOCArMzcxNyw4IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGYWxsYmEKICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCAwKTsKIH0KIAotYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0
aW9uVmFsaWQodW5zaWduZWQgbG9uZyB0ZXhJbnRlcm5hbEZvcm1hdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgY29sb3JCdWZmZXJGb3JtYXQpCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6aXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChH
QzNEZW51bSB0ZXhJbnRlcm5hbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGNv
bG9yQnVmZmVyRm9ybWF0KQogewogICAgIHN3aXRjaCAoY29sb3JCdWZmZXJGb3JtYXQpIHsKICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKQEAgLTM3MzQsNyArMzczNiw3IEBAIGJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleEludGVybmEKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXVuc2lnbmVkIGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1l
YnVmZmVyQ29sb3JGb3JtYXQoKQorR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRC
b3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKQogewogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBt
X2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKTsKQEAgLTM3NTcsNyAr
Mzc1OSw3IEBAIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWUKICAgICBy
ZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgpOwog
fQogCi1XZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXh0dXJl
QmluZGluZyh1bnNpZ25lZCBsb25nIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXAp
CitXZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXh0dXJlQmlu
ZGluZyhHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKQogewogICAg
IFdlYkdMVGV4dHVyZSogdGV4ID0gMDsKICAgICBzd2l0Y2ggKHRhcmdldCkgewpAQCAtMzc5Miw3
ICszNzk0LDcgQEAgV2ViR0xUZXh0dXJlKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbAogICAg
IHJldHVybiB0ZXg7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVNp
emUobG9uZyB4LCBsb25nIHkpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVT
aXplKEdDM0RpbnQgeCwgR0MzRGludCB5KQogewogICAgIGlmICh4IDwgMCB8fCB5IDwgMCkgewog
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFKTsKQEAgLTM4MTIsNyArMzgxNCw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZVN0cmkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUodW5zaWduZWQgbG9u
ZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSkKIHsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkFMUEhBOgpAQCAtMzg3Nyw3ICszODc5LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlVGV4RgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxv
bmcgbGV2ZWwpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2
ZWwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKQogewogICAgIGlmIChsZXZlbCA8IDAp
IHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSk7CkBAIC0zOTA3LDEwICszOTA5LDEwIEBAIGJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnModW5zaWduZWQg
bG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB3
aWR0aCwgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2ln
bmVkIGxvbmcgdHlwZSkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1
bmNQYXJhbWV0ZXJzKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKIHsKICAgICAvLyBXZSBhYnNvbHV0ZWx5
IGhhdmUgdG8gdmFsaWRhdGUgdGhlIGZvcm1hdCBhbmQgdHlwZSBjb21iaW5hdGlvbi4KICAgICAv
LyBUaGUgdGV4SW1hZ2UyRCBlbnRyeSBwb2ludHMgdGFraW5nIEhUTUxJbWFnZSwgZXRjLiB3aWxs
IHByb2R1Y2UKQEAgLTM5NTksOCArMzk2MSw4IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVRleEYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0RhdGEobG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
b25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlLAorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlVGV4RnVuY0RhdGEoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMpCiB7CiAgICAgaWYgKCFw
aXhlbHMpCkBAIC00MDA3LDcgKzQwMDksNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVUZXhGCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZURyYXdNb2RlKHVuc2lnbmVkIGxvbmcgbW9kZSkKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdNb2RlKEdDM0RlbnVtIG1vZGUpCiB7CiAgICAg
c3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9JTlRTOgpAQCAt
NDAzMyw3ICs0MDM1LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU3Rl
bgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVTdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMpCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVTdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jKQogewogICAgIHN3aXRj
aCAoZnVuYykgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FVkVSOgpAQCAtNDA1Nyw3
ICs0MDU5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnByaW50V2FybmluZwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2UsIDAsIGNhbnZhcygpLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmco
KSk7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVy
RnVuY1BhcmFtZXRlcnModW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNo
bWVudCkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVu
Y1BhcmFtZXRlcnMoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50KQogewogICAg
IGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7CiAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSk7CkBAIC00MDc2LDcgKzQwNzgsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVGcmFtCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZUJsZW5kRXF1YXRpb24odW5zaWduZWQgbG9uZyBtb2RlKQorYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2Rl
KQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZV
TkNfQUREOgpAQCAtNDA4OSw3ICs0MDkxLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlQmxlbgogICAgIH0KIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlQmxlbmRGdW5jRmFjdG9ycyh1bnNpZ25lZCBsb25nIHNyYywgdW5zaWduZWQgbG9uZyBk
c3QpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3Jz
KEdDM0RlbnVtIHNyYywgR0MzRGVudW0gZHN0KQogewogICAgIGlmICgoKHNyYyA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1IgfHwgc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpP
TkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCiAgICAgICAgICAmJiAoZHN0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8fCBkc3QgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9N
SU5VU19DT05TVEFOVF9BTFBIQSkpCkBAIC00MTAxLDcgKzQxMDMsNyBAQCBib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFiaWxpdHkodW5zaWduZWQgbG9uZyBj
YXApCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDYXBhYmlsaXR5KEdDM0Rl
bnVtIGNhcCkKIHsKICAgICBzd2l0Y2ggKGNhcCkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkJMRU5EOgpAQCAtNDEyMCw3ICs0MTIyLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlQ2FwYQogICAgIH0KIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIGludCByZXF1aXJlZE1pblNpemUpCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVp
cmVkTWluU2l6ZSkKIHsKICAgICBpZiAoIXYpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CkBAIC00MTI5LDcg
KzQxMzEsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmCiAgICAg
cmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIGZhbHNlLCB2
LT5kYXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOwogfQogCi1ib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIGludCByZXF1aXJlZE1pblNp
emUpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cyhjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEdD
M0RzaXplaSByZXF1aXJlZE1pblNpemUpCiB7CiAgICAgaWYgKCF2KSB7CiAgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUp
OwpAQCAtNDEzOCwxMiArNDE0MCwxMiBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVVbmlmCiAgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9j
YXRpb24sIGZhbHNlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOwog
fQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cyhjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIHZvaWQqIHYsIGludCBzaXpl
LCBpbnQgcmVxdWlyZWRNaW5TaXplKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKIHsK
ICAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgZmFs
c2UsIHYsIHNpemUsIHJlcXVpcmVkTWluU2l6ZSk7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgaW50
IHJlcXVpcmVkTWluU2l6ZSkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVu
aWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1
aXJlZE1pblNpemUpCiB7CiAgICAgaWYgKCF2KSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwpAQCAtNDE1Miw3
ICs0MTU0LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZgogICAg
IHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bv
c2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7CiB9CiAKLWJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIHZvaWQq
IHYsIGludCBzaXplLCBpbnQgcmVxdWlyZWRNaW5TaXplKQorYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIHZvaWQqIHYsIEdDM0Rz
aXplaSBzaXplLCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQogewogICAgIGlmICghbG9jYXRp
b24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQxNzUsNyArNDE3Nyw3IEBAIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
V2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZmZXJEYXRhUGFy
YW1ldGVycyh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK1dlYkdM
QnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRl
cnMoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSB1c2FnZSkKIHsKICAgICBXZWJHTEJ1ZmZlciog
YnVmZmVyID0gMDsKICAgICBzd2l0Y2ggKHRhcmdldCkgewpAQCAtNDIwMyw3ICs0MjA1LDcgQEAg
V2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaQogICAgIHJldHVybiAwOwog
fQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZkltcGwodW5zaWdu
ZWQgbG9uZyBpbmRleCwgaW50IGV4cGVjdGVkU2l6ZSwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9h
dCB2MiwgZmxvYXQgdjMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmli
ZkltcGwoR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBlY3RlZFNpemUsIEdDM0RmbG9hdCB2
MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKIHsKICAgICBpZiAo
aXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CkBAIC00MjM3LDcgKzQyMzksNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliCiAgICAgbV92ZXJ0ZXhBdHRy
aWJTdGF0ZVtpbmRleF0udmFsdWVbM10gPSB2MzsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbCh1bnNpZ25lZCBsb25nIGluZGV4LCBGbG9hdDMyQXJy
YXkqIHYsIGludCBleHBlY3RlZFNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliZnZJbXBsKEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXpl
aSBleHBlY3RlZFNpemUpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDI0OCw3ICs0MjUwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYgogICAgIHZlcnRleEF0dHJpYmZ2SW1wbChpbmRleCwgdi0+ZGF0YSgpLCB2LT5s
ZW5ndGgoKSwgZXhwZWN0ZWRTaXplKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYmZ2SW1wbCh1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCogdiwgaW50IHNp
emUsIGludCBleHBlY3RlZFNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliZnZJbXBsKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXpl
LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTQzMDYsMjEgKzQzMDgsMjEgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmluaXRWZXJ0ZXhBdAogICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNd
ID0gMS4wZjsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVsYXRlVmVydGV4
QXR0cmliMChsb25nIG51bVZlcnRleCkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaW11
bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHNpemVpIG51bVZlcnRleCkKIHsKICAgICBjb25zdCBWZXJ0
ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX3ZlcnRleEF0dHJpYlN0YXRlWzBdOwogICAgIGlmIChz
dGF0ZS5lbmFibGVkIHx8ICFtX2N1cnJlbnRQcm9ncmFtIHx8ICFtX2N1cnJlbnRQcm9ncmFtLT5v
YmplY3QoKQogICAgICAgICB8fCAhbV9jdXJyZW50UHJvZ3JhbS0+aXNVc2luZ1ZlcnRleEF0dHJp
YjAoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3ZlcnRleEF0dHJpYjBCdWZmZXItPm9i
amVjdCgpKTsKLSAgICBsb25nIGJ1ZmZlckRhdGFTaXplID0gKG51bVZlcnRleCArIDEpICogNCAq
IHNpemVvZihmbG9hdCk7CisgICAgR0MzRHNpemVpcHRyIGJ1ZmZlckRhdGFTaXplID0gKG51bVZl
cnRleCArIDEpICogNCAqIHNpemVvZihHQzNEZmxvYXQpOwogICAgIGlmIChidWZmZXJEYXRhU2l6
ZSA+IG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUKICAgICAgICAgfHwgc3RhdGUudmFsdWVbMF0g
IT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0KICAgICAgICAgfHwgc3RhdGUudmFsdWVb
MV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0KICAgICAgICAgfHwgc3RhdGUudmFs
dWVbMl0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0KICAgICAgICAgfHwgc3RhdGUu
dmFsdWVbM10gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10pIHsKLSAgICAgICAgT3du
QXJyYXlQdHI8ZmxvYXQ+IGJ1ZmZlckRhdGEobmV3IGZsb2F0WyhudW1WZXJ0ZXggKyAxKSAqIDRd
KTsKLSAgICAgICAgZm9yIChsb25nIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXggKyAxOyArK2lpKSB7
CisgICAgICAgIE93bkFycmF5UHRyPEdDM0RmbG9hdD4gYnVmZmVyRGF0YShuZXcgR0MzRGZsb2F0
WyhudW1WZXJ0ZXggKyAxKSAqIDRdKTsKKyAgICAgICAgZm9yIChHQzNEc2l6ZWkgaWkgPSAwOyBp
aSA8IG51bVZlcnRleCArIDE7ICsraWkpIHsKICAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0
XSA9IHN0YXRlLnZhbHVlWzBdOwogICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAxXSA9
IHN0YXRlLnZhbHVlWzFdOwogICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAyXSA9IHN0
YXRlLnZhbHVlWzJdOwpAQCAtNDMzMyw3ICs0MzM1LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnNpbXVsYXRlVmVydAogICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsy
XSA9IHN0YXRlLnZhbHVlWzJdOwogICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsz
XSA9IHN0YXRlLnZhbHVlWzNdOwogICAgIH0KLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBv
aW50ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAg
bV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdyYXBoaWNzQ29udGV4dDNEOjpG
TE9BVCwgMCwgMCwgMCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lv
biA3NTUzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw0NyArNjgsNDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFj
dGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlLCBFeGNlcHRpb25Db2RlJiBlYyk7Cisg
ICAgdm9pZCBhY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVj
KTsKICAgICB2b2lkIGF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciosIEV4
Y2VwdGlvbkNvZGUmIGVjKTsKLSAgICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dy
YW0qLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKTsKLSAgICB2b2lkIGJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdM
QnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYgZWMpOwotICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYgZWMp
OwotICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xS
ZW5kZXJidWZmZXIqLCBFeGNlcHRpb25Db2RlJiBlYyk7Ci0gICAgdm9pZCBiaW5kVGV4dHVyZSh1
bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgRXhjZXB0aW9uQ29kZSYgZWMpOwot
ICAgIHZvaWQgYmxlbmRDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBm
bG9hdCBhbHBoYSk7Ci0gICAgdm9pZCBibGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcgbW9kZSk7
Ci0gICAgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1
bnNpZ25lZCBsb25nIG1vZGVBbHBoYSk7Ci0gICAgdm9pZCBibGVuZEZ1bmModW5zaWduZWQgbG9u
ZyBzZmFjdG9yLCB1bnNpZ25lZCBsb25nIGRmYWN0b3IpOwotICAgIHZvaWQgYmxlbmRGdW5jU2Vw
YXJhdGUodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNpZ25l
ZCBsb25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKTsKLQotICAgIHZvaWQgYnVm
ZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNpemUsIHVuc2lnbmVkIGxvbmcgdXNh
Z2UsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0
YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLCB1bnNpZ25lZCBsb25nIHVzYWdlLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCBidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBBcnJheUJ1
ZmZlclZpZXcqIGRhdGEsIHVuc2lnbmVkIGxvbmcgdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIGJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBB
cnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYnVmZmVyU3ViRGF0
YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0
YSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdW5zaWduZWQgbG9uZyBjaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KTsKLSAgICB2b2lkIGNsZWFyKHVuc2lnbmVkIGxv
bmcgbWFzayk7Ci0gICAgdm9pZCBjbGVhckNvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZs
b2F0IGJsdWUsIGZsb2F0IGFscGhhKTsKLSAgICB2b2lkIGNsZWFyRGVwdGgoZmxvYXQpOwotICAg
IHZvaWQgY2xlYXJTdGVuY2lsKGxvbmcpOwotICAgIHZvaWQgY29sb3JNYXNrKGJvb2wgcmVkLCBi
b29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOworICAgIHZvaWQgYmluZEF0dHJpYkxv
Y2F0aW9uKFdlYkdMUHJvZ3JhbSosIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICB2b2lkIGJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0
LCBXZWJHTEJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICB2b2lkIGJpbmRGcmFtZWJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqLCBFeGNlcHRpb25Db2RlJiBl
Yyk7CisgICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xSZW5k
ZXJidWZmZXIqLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgdm9pZCBiaW5kVGV4dHVyZShHQzNE
ZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSosIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICB2b2lk
IGJsZW5kQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1
ZSwgR0MzRGZsb2F0IGFscGhhKTsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9k
ZSk7CisgICAgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0Mz
RGVudW0gbW9kZUFscGhhKTsKKyAgICB2b2lkIGJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBH
QzNEZW51bSBkZmFjdG9yKTsKKyAgICB2b2lkIGJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNy
Y1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxw
aGEpOworCisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRy
IHNpemUsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBidWZmZXJE
YXRhKEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBF
eGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgQXJy
YXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZvaWQgYnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBB
cnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYnVmZmVyU3ViRGF0
YShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRh
dGEsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIEdDM0RlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoR0MzRGVudW0gdGFyZ2V0KTsKKyAgICB2b2lkIGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKTsK
KyAgICB2b2lkIGNsZWFyQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNE
ZmxvYXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhhKTsKKyAgICB2b2lkIGNsZWFyRGVwdGgoR0MzRGZs
b2F0KTsKKyAgICB2b2lkIGNsZWFyU3RlbmNpbChHQzNEaW50KTsKKyAgICB2b2lkIGNvbG9yTWFz
ayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBH
QzNEYm9vbGVhbiBhbHBoYSk7CiAgICAgdm9pZCBjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiwg
RXhjZXB0aW9uQ29kZSYgZWMpOwogCi0gICAgLy8gdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRCh1
bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZv
cm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9y
ZGVyLCB1bnNpZ25lZCBsb25nIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSk7Ci0gICAgLy8g
dm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBs
ZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyBp
bWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpOworICAgIC8vIHZvaWQgY29tcHJlc3NlZFRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
R0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSk7CisgICAgLy8gdm9pZCBjb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQqIGRhdGEpOwogCi0gICAgdm9pZCBjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25n
IHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4
LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcik7Ci0gICAgdm9p
ZCBjb3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgbG9u
ZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25n
IGhlaWdodCk7CisgICAgdm9pZCBjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcik7CisgICAg
dm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKIAogICAgIFBhc3NSZWZQdHI8V2ViR0xC
dWZmZXI+IGNyZWF0ZUJ1ZmZlcigpOwogICAgIFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4g
Y3JlYXRlRnJhbWVidWZmZXIoKTsKICAgICBQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gY3JlYXRl
UHJvZ3JhbSgpOwogICAgIFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IGNyZWF0ZVJlbmRl
cmJ1ZmZlcigpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IGNyZWF0ZVNoYWRlcih1bnNp
Z25lZCBsb25nIHR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMU2hh
ZGVyPiBjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBh
c3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CiAKLSAgICB2b2lkIGN1bGxG
YWNlKHVuc2lnbmVkIGxvbmcgbW9kZSk7CisgICAgdm9pZCBjdWxsRmFjZShHQzNEZW51bSBtb2Rl
KTsKIAogICAgIHZvaWQgZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyKik7CiAgICAgdm9pZCBkZWxl
dGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKik7CkBAIC0xMTcsMTczICsxMTcsMTU1IEBA
IHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciopOwogICAgIHZvaWQg
ZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUqKTsKIAotICAgIHZvaWQgZGVwdGhGdW5jKHVuc2ln
bmVkIGxvbmcpOwotICAgIHZvaWQgZGVwdGhNYXNrKGJvb2wpOwotICAgIHZvaWQgZGVwdGhSYW5n
ZShmbG9hdCB6TmVhciwgZmxvYXQgekZhcik7CisgICAgdm9pZCBkZXB0aEZ1bmMoR0MzRGVudW0p
OworICAgIHZvaWQgZGVwdGhNYXNrKEdDM0Rib29sZWFuKTsKKyAgICB2b2lkIGRlcHRoUmFuZ2Uo
R0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxvYXQgekZhcik7CiAgICAgdm9pZCBkZXRhY2hTaGFkZXIo
V2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBk
aXNhYmxlKHVuc2lnbmVkIGxvbmcgY2FwKTsKLSAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheSh1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkcmF3
QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3VudCwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9u
ZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0eXBlLCBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgZGlzYWJsZShHQzNEZW51bSBjYXApOworICAgIHZvaWQgZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBk
cmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdD
M0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIEV4Y2VwdGlv
bkNvZGUmKTsKIAotICAgIHZvaWQgZW5hYmxlKHVuc2lnbmVkIGxvbmcgY2FwKTsKLSAgICB2b2lk
IGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXApOworICAgIHZvaWQgZW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lk
IGZpbmlzaCgpOwogICAgIHZvaWQgZmx1c2goKTsKLSAgICB2b2lkIGZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVu
c2lnbmVkIGxvbmcgcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciosIEV4Y2Vw
dGlvbkNvZGUmIGVjKTsKLSAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFy
Z2V0LCBXZWJHTFRleHR1cmUqLCBsb25nIGxldmVsLCBFeGNlcHRpb25Db2RlJiBlYyk7Ci0gICAg
dm9pZCBmcm9udEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKTsKLSAgICB2b2lkIGdlbmVyYXRlTWlw
bWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KTsKLQotICAgIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJ
bmZvPiBnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiwgdW5zaWduZWQgbG9uZyBpbmRleCwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRBY3Rp
dmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2b2lkIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJl
bmRlcmJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICB2b2lkIGZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4
dGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBHQzNEaW50IGxldmVsLCBFeGNlcHRpb25Db2RlJiBlYyk7
CisgICAgdm9pZCBmcm9udEZhY2UoR0MzRGVudW0gbW9kZSk7CisgICAgdm9pZCBnZW5lcmF0ZU1p
cG1hcChHQzNEZW51bSB0YXJnZXQpOwogCisgICAgUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+
IGdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9u
Q29kZSYpOworICAgIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRBY3RpdmVVbmlmb3Jt
KFdlYkdMUHJvZ3JhbSosIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9v
bCBnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtKiwgVmVjdG9yPFdlYkdMU2hhZGVyKj4m
LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBpbnQgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9n
cmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLQotICAgIFdlYkdMR2V0SW5mbyBnZXRCdWZmZXJQ
YXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmKTsKLQorICAgIEdDM0RpbnQgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFt
KiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0QnVmZmVyUGFyYW1l
dGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICBQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IGdldENvbnRleHRBdHRyaWJ1dGVz
KCk7Ci0KLSAgICB1bnNpZ25lZCBsb25nIGdldEVycm9yKCk7Ci0KKyAgICBHQzNEZW51bSBnZXRF
cnJvcigpOwogICAgIFdlYkdMRXh0ZW5zaW9uKiBnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBu
YW1lKTsKLQotICAgIFdlYkdMR2V0SW5mbyBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgV2ViR0xHZXRJbmZvIGdldFBh
cmFtZXRlcih1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBXZWJH
TEdldEluZm8gZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0qLCB1bnNpZ25lZCBsb25n
IHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0KKyAgICBXZWJHTEdldEluZm8gZ2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVu
dCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0
UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgV2ViR0xHZXRJ
bmZvIGdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiwgR0MzRGVudW0gcG5hbWUsIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICBTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFt
KiwgRXhjZXB0aW9uQ29kZSYgZWMpOwotCi0gICAgV2ViR0xHZXRJbmZvIGdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhj
ZXB0aW9uQ29kZSYpOwotCi0gICAgV2ViR0xHZXRJbmZvIGdldFNoYWRlclBhcmFtZXRlcihXZWJH
TFNoYWRlciosIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKLQorICAg
IFdlYkdMR2V0SW5mbyBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdlYkdMR2V0SW5mbyBnZXRTaGFk
ZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIqLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpOwogICAgIFN0cmluZyBnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9u
Q29kZSYgZWMpOwogCiAgICAgLy8gVEJECi0gICAgLy8gdm9pZCBnbEdldFNoYWRlclByZWNpc2lv
bkZvcm1hdCAoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlLCBHTGludCog
cmFuZ2UsIEdMaW50KiBwcmVjaXNpb24pOworICAgIC8vIHZvaWQgZ2xHZXRTaGFkZXJQcmVjaXNp
b25Gb3JtYXQgKEdDM0RlbnVtIHNoYWRlcnR5cGUsIEdDM0RlbnVtIHByZWNpc2lvbnR5cGUsIEdD
M0RpbnQqIHJhbmdlLCBHQzNEaW50KiBwcmVjaXNpb24pOwogCiAgICAgU3RyaW5nIGdldFNoYWRl
clNvdXJjZShXZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKLQogICAgIFZlY3RvcjxTdHJp
bmc+IGdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKLQotICAgIFdlYkdMR2V0SW5mbyBnZXRUZXhQ
YXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmKTsKLQorICAgIFdlYkdMR2V0SW5mbyBnZXRUZXhQYXJhbWV0ZXIoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFdlYkdMR2V0SW5m
byBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwg
RXhjZXB0aW9uQ29kZSYpOwotCiAgICAgUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4g
Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4
LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIEdDM0RzaXplaXB0ciBnZXRW
ZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKTsKIAotICAg
IFdlYkdMR2V0SW5mbyBnZXRWZXJ0ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgbG9uZyBnZXRWZXJ0ZXhBdHRy
aWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0KLSAg
ICB2b2lkIGhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgbW9kZSk7Ci0g
ICAgYm9vbCBpc0J1ZmZlcihXZWJHTEJ1ZmZlciopOworICAgIHZvaWQgaGludChHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIG1vZGUpOworICAgIEdDM0Rib29sZWFuIGlzQnVmZmVyKFdlYkdMQnVm
ZmVyKik7CiAgICAgYm9vbCBpc0NvbnRleHRMb3N0KCk7Ci0gICAgYm9vbCBpc0VuYWJsZWQodW5z
aWduZWQgbG9uZyBjYXApOwotICAgIGJvb2wgaXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVy
Kik7Ci0gICAgYm9vbCBpc1Byb2dyYW0oV2ViR0xQcm9ncmFtKik7Ci0gICAgYm9vbCBpc1JlbmRl
cmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciopOwotICAgIGJvb2wgaXNTaGFkZXIoV2ViR0xTaGFk
ZXIqKTsKLSAgICBib29sIGlzVGV4dHVyZShXZWJHTFRleHR1cmUqKTsKLSAgICB2b2lkIGxpbmVX
aWR0aChmbG9hdCk7CisgICAgR0MzRGJvb2xlYW4gaXNFbmFibGVkKEdDM0RlbnVtIGNhcCk7Cisg
ICAgR0MzRGJvb2xlYW4gaXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKik7CisgICAgR0Mz
RGJvb2xlYW4gaXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSopOworICAgIEdDM0Rib29sZWFuIGlzUmVu
ZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKik7CisgICAgR0MzRGJvb2xlYW4gaXNTaGFkZXIo
V2ViR0xTaGFkZXIqKTsKKyAgICBHQzNEYm9vbGVhbiBpc1RleHR1cmUoV2ViR0xUZXh0dXJlKik7
CisKKyAgICB2b2lkIGxpbmVXaWR0aChHQzNEZmxvYXQpOwogICAgIHZvaWQgbGlua1Byb2dyYW0o
V2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgcGl4ZWxTdG9yZWkodW5z
aWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSk7Ci0gICAgdm9pZCBwb2x5Z29uT2Zmc2V0KGZs
b2F0IGZhY3RvciwgZmxvYXQgdW5pdHMpOwotICAgIHZvaWQgcmVhZFBpeGVscyhsb25nIHgsIGxv
bmcgeSwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNp
Z25lZCBsb25nIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCBwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7Cisg
ICAgdm9pZCBwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cyk7
CisgICAgdm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJy
YXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHJlbGVhc2VT
aGFkZXJDb21waWxlcigpOwotICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZSh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB3aWR0aCwgbG9u
ZyBoZWlnaHQpOwotICAgIHZvaWQgc2FtcGxlQ292ZXJhZ2UoZmxvYXQgdmFsdWUsIGJvb2wgaW52
ZXJ0KTsKLSAgICB2b2lkIHNjaXNzb3IobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcg
aGVpZ2h0KTsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KTsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RmbG9hdCB2YWx1ZSwgR0MzRGJvb2xlYW4g
aW52ZXJ0KTsKKyAgICB2b2lkIHNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CiAgICAgdm9pZCBzaGFkZXJTb3VyY2UoV2ViR0xT
aGFkZXIqLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzdGVuY2ls
RnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spOwot
ICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVk
IGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzayk7Ci0gICAgdm9pZCBzdGVu
Y2lsTWFzayh1bnNpZ25lZCBsb25nKTsKLSAgICB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUodW5z
aWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spOwotICAgIHZvaWQgc3RlbmNpbE9w
KHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6
cGFzcyk7Ci0gICAgdm9pZCBzdGVuY2lsT3BTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVu
c2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFz
cyk7Ci0KLSAgICB2b2lkIHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZl
bCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgIGludCB3aWR0
aCwgaW50IGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWdu
ZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCB0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQg
bGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWdu
ZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1
bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlk
ZW8sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgdGV4UGFyYW1ldGVyZih1bnNpZ25lZCB0
YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBmbG9hdCBwYXJhbSk7Ci0gICAgdm9pZCB0ZXhQYXJhbWV0
ZXJpKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGludCBwYXJhbSk7Ci0KLSAgICB2
b2lkIHRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgaW50IHhv
ZmZzZXQsIGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWdu
ZWQgdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIHRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgaW50IHhv
ZmZzZXQsIGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3Jt
YXQsIHVuc2lnbmVkIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdm9pZCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIGlu
dCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
Zm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVk
IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZh
cywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJn
ZXQsIHVuc2lnbmVkIGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSFRNTFZpZGVvRWxl
bWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHN0ZW5jaWxGdW5jKEdDM0Rl
bnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsKKyAgICB2b2lkIHN0ZW5jaWxG
dW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdD
M0R1aW50IG1hc2spOworICAgIHZvaWQgc3RlbmNpbE1hc2soR0MzRHVpbnQpOworICAgIHZvaWQg
c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKTsKKyAgICB2
b2lkIHN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBh
c3MpOworICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0g
ZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKTsKKworICAgIHZvaWQgdGV4SW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29k
ZSYpOworCisgICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cG5hbWUsIEdDM0RmbG9hdCBwYXJhbSk7CisgICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOworCisgICAgdm9pZCB0ZXhT
dWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBF
eGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdl
RWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGlu
dCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2Vw
dGlvbkNvZGUmKTsKIAotICAgIHZvaWQgdW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9y
bTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIHVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9h
dCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0xaShjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCB4LCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCB1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgdW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGlu
dCB4LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCB1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgdW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IGludCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0yZihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgdW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9p
ZCB1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQz
MkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMmZ2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZv
cm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYs
IEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtMmkoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwg
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgdW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIHVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQq
IHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2YoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICB2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVu
aWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwg
aW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0zaShjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHosIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCB1bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBFeGNlcHRpb25Db2RlJik7CiAgICAg
dm9pZCB1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50
MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZvaWQgdW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcsIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICB2b2lkIHVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVu
aWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwg
aW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00aShjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHosIGludCB3LCBF
eGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZvaWQgdW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0MzRGludCB3LCBFeGNl
cHRpb25Db2RlJik7CiAgICAgdm9pZCB1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCogdiwg
aW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgRmxvYXQz
MkFycmF5KiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBm
bG9hdCogdmFsdWUsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3Jt
TWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFu
c3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVu
aWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29s
IHRyYW5zcG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIGJvb2wgdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1
ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRy
aXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lk
IHVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJy
YXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwogCiAg
ICAgdm9pZCB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7CiAKLSAg
ICB2b2lkIHZlcnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0IHgpOwotICAg
IHZvaWQgdmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJheSog
dmFsdWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZGV4LCBm
bG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25l
ZCBsb25nIGluZGV4LCBmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjJm
dih1bnNpZ25lZCBsb25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHZhbHVlcywgaW50IHNp
emUpOwotICAgIHZvaWQgdmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQg
eCwgZmxvYXQgeSwgZmxvYXQgeik7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQg
bG9uZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmli
M2Z2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2YWx1ZXMsIGludCBzaXplKTsKLSAgICB2
b2lkIHZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0IHgsIGZsb2F0IHks
IGZsb2F0IHosIGZsb2F0IHcpOwotICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxv
bmcgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRm
dih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7Ci0gICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGxvbmcgc2l6ZSwgdW5z
aWduZWQgbG9uZyB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvbmcgc3RyaWRlLCBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KTsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwor
ICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVl
cywgR0MzRHNpemVpIHNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYo
R0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXpl
KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwg
R0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAgIHZvaWQgdmVydGV4QXR0cmli
M2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOwor
ICAgIHZvaWQgdmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KTsKKyAgICB2b2lkIHZlcnRleEF0dHJp
YjRmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAgIHZvaWQgdmVy
dGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVp
IHNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0Mz
RGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgdm9pZCB2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwg
bG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQpOworICAgIHZvaWQgdmlld3BvcnQoR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CiAKICAgICB2b2lk
IGZvcmNlTG9zdENvbnRleHQoKTsKICAgICB2b2lkIG9uTG9zdENvbnRleHQoKTsKQEAgLTMzOCwx
OCArMzIwLDE4IEBAIHB1YmxpYzoKIAogICAgIC8vIEhlbHBlciB0byByZXR1cm4gdGhlIHNpemUg
aW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMKICAgICAvLyBsaWtlIEdMX0ZMT0FULCBHTF9J
TlQsIGV0Yy4KLSAgICBpbnQgc2l6ZUluQnl0ZXMoaW50IHR5cGUpOworICAgIHVuc2lnbmVkIGlu
dCBzaXplSW5CeXRlcyhHQzNEZW51bSB0eXBlKTsKIAogICAgIC8vIEJhc2ljIHZhbGlkYXRpb24g
b2YgY291bnQgYW5kIG9mZnNldCBhZ2FpbnN0IG51bWJlciBvZiBlbGVtZW50cyBpbiBlbGVtZW50
IGFycmF5IGJ1ZmZlcgotICAgIGJvb2wgdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKHVuc2lnbmVk
IGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQpOworICAgIGJvb2wg
dmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwg
R0MzRGludHB0ciBvZmZzZXQpOwogCiAgICAgLy8gQ29uc2VydmF0aXZlIGJ1dCBxdWljayBpbmRl
eCB2YWxpZGF0aW9uCi0gICAgYm9vbCB2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUodW5z
aWduZWQgbG9uZyB0eXBlLCBsb25nJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKKyAgICBib29sIHZh
bGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCBpbnQmIG51bUVsZW1l
bnRzUmVxdWlyZWQpOwogCiAgICAgLy8gUHJlY2lzZSBidXQgc2xvdyBpbmRleCB2YWxpZGF0aW9u
IC0tIG9ubHkgZG9uZSBpZiBjb25zZXJ2YXRpdmUgY2hlY2tzIGZhaWwKLSAgICBib29sIHZhbGlk
YXRlSW5kZXhBcnJheVByZWNpc2UodW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0
eXBlLCBsb25nIG9mZnNldCwgbG9uZyYgbnVtRWxlbWVudHNSZXF1aXJlZCk7CisgICAgYm9vbCB2
YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwg
R0MzRGludHB0ciBvZmZzZXQsIGludCYgbnVtRWxlbWVudHNSZXF1aXJlZCk7CiAgICAgLy8gSWYg
bnVtRWxlbWVudHMgPD0gMCwgd2Ugb25seSBjaGVjayBpZiBlYWNoIGVuYWJsZWQgdmVydGV4IGF0
dHJpYnV0ZSBpcyBib3VuZCB0byBhIGJ1ZmZlci4KLSAgICBib29sIHZhbGlkYXRlUmVuZGVyaW5n
U3RhdGUobG9uZyBudW1FbGVtZW50cyk7CisgICAgYm9vbCB2YWxpZGF0ZVJlbmRlcmluZ1N0YXRl
KGludCBudW1FbGVtZW50cyk7CiAKICAgICBib29sIHZhbGlkYXRlV2ViR0xPYmplY3QoV2ViR0xP
YmplY3QqIG9iamVjdCk7CiAKQEAgLTM3OSwxMSArMzYxLDExIEBAIHB1YmxpYzoKICAgICBjbGFz
cyBWZXJ0ZXhBdHRyaWJTdGF0ZSB7CiAgICAgcHVibGljOgogICAgICAgICBWZXJ0ZXhBdHRyaWJT
dGF0ZSgpCi0gICAgICAgICAgICA6IGVuYWJsZWQoZmFsc2UpCisgICAgICAgICAgICA6IGVuYWJs
ZWQoMCkKICAgICAgICAgICAgICwgYnl0ZXNQZXJFbGVtZW50KDApCiAgICAgICAgICAgICAsIHNp
emUoNCkKICAgICAgICAgICAgICwgdHlwZShHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQpCi0gICAg
ICAgICAgICAsIG5vcm1hbGl6ZWQoZmFsc2UpCisgICAgICAgICAgICAsIG5vcm1hbGl6ZWQoMCkK
ICAgICAgICAgICAgICwgc3RyaWRlKDE2KQogICAgICAgICAgICAgLCBvcmlnaW5hbFN0cmlkZSgw
KQogICAgICAgICAgICAgLCBvZmZzZXQoMCkKQEAgLTM5OSwyMyArMzgxLDIzIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHZhbHVlWzNdID0gMS4wZjsKICAgICAgICAgfQogCi0gICAgICAgIGJvb2wg
ZW5hYmxlZDsKKyAgICAgICAgR0MzRGJvb2xlYW4gZW5hYmxlZDsKICAgICAgICAgUmVmUHRyPFdl
YkdMQnVmZmVyPiBidWZmZXJCaW5kaW5nOwotICAgICAgICBsb25nIGJ5dGVzUGVyRWxlbWVudDsK
LSAgICAgICAgbG9uZyBzaXplOwotICAgICAgICB1bnNpZ25lZCBsb25nIHR5cGU7Ci0gICAgICAg
IGJvb2wgbm9ybWFsaXplZDsKLSAgICAgICAgbG9uZyBzdHJpZGU7Ci0gICAgICAgIGxvbmcgb3Jp
Z2luYWxTdHJpZGU7Ci0gICAgICAgIGxvbmcgb2Zmc2V0OwotICAgICAgICBmbG9hdCB2YWx1ZVs0
XTsKKyAgICAgICAgR0MzRHNpemVpIGJ5dGVzUGVyRWxlbWVudDsKKyAgICAgICAgR0MzRGludCBz
aXplOworICAgICAgICBHQzNEZW51bSB0eXBlOworICAgICAgICBHQzNEYm9vbGVhbiBub3JtYWxp
emVkOworICAgICAgICBHQzNEc2l6ZWkgc3RyaWRlOworICAgICAgICBHQzNEc2l6ZWkgb3JpZ2lu
YWxTdHJpZGU7CisgICAgICAgIEdDM0RpbnRwdHIgb2Zmc2V0OworICAgICAgICBHQzNEZmxvYXQg
dmFsdWVbNF07CiAgICAgfTsKIAogICAgIFZlY3RvcjxWZXJ0ZXhBdHRyaWJTdGF0ZT4gbV92ZXJ0
ZXhBdHRyaWJTdGF0ZTsKICAgICB1bnNpZ25lZCBtX21heFZlcnRleEF0dHJpYnM7CiAgICAgUmVm
UHRyPFdlYkdMQnVmZmVyPiBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7CiAgICAgbG9uZyBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXJTaXplOwotICAgIGZsb2F0IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVl
WzRdOworICAgIEdDM0RmbG9hdCBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVs0XTsKIAogICAg
IFJlZlB0cjxXZWJHTFByb2dyYW0+IG1fY3VycmVudFByb2dyYW07CiAgICAgUmVmUHRyPFdlYkdM
RnJhbWVidWZmZXI+IG1fZnJhbWVidWZmZXJCaW5kaW5nOwpAQCAtNDQ0LDIzICs0MjYsMjMgQEAg
cHVibGljOgogICAgIH07CiAgICAgTFJVSW1hZ2VCdWZmZXJDYWNoZSBtX3ZpZGVvQ2FjaGU7CiAK
LSAgICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKLSAgICBpbnQgbV9tYXhDdWJlTWFwVGV4dHVyZVNp
emU7Ci0gICAgaW50IG1fbWF4VGV4dHVyZUxldmVsOwotICAgIGludCBtX21heEN1YmVNYXBUZXh0
dXJlTGV2ZWw7CisgICAgR0MzRGludCBtX21heFRleHR1cmVTaXplOworICAgIEdDM0RpbnQgbV9t
YXhDdWJlTWFwVGV4dHVyZVNpemU7CisgICAgR0MzRGludCBtX21heFRleHR1cmVMZXZlbDsKKyAg
ICBHQzNEaW50IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbDsKIAotICAgIGludCBtX3BhY2tBbGln
bm1lbnQ7Ci0gICAgaW50IG1fdW5wYWNrQWxpZ25tZW50OworICAgIEdDM0RpbnQgbV9wYWNrQWxp
Z25tZW50OworICAgIEdDM0RpbnQgbV91bnBhY2tBbGlnbm1lbnQ7CiAgICAgYm9vbCBtX3VucGFj
a0ZsaXBZOwogICAgIGJvb2wgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhOwotICAgIHVuc2lnbmVk
IGxvbmcgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbjsKKyAgICBHQzNEZW51bSBtX3VucGFj
a0NvbG9yc3BhY2VDb252ZXJzaW9uOwogICAgIGJvb2wgbV9jb250ZXh0TG9zdDsKICAgICBHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAKICAgICBsb25nIG1fc3Rl
bmNpbEJpdHM7Ci0gICAgdW5zaWduZWQgbG9uZyBtX3N0ZW5jaWxNYXNrLCBtX3N0ZW5jaWxNYXNr
QmFjazsKLSAgICBsb25nIG1fc3RlbmNpbEZ1bmNSZWYsIG1fc3RlbmNpbEZ1bmNSZWZCYWNrOyAv
LyBOb3RlIHRoYXQgdGhlc2UgYXJlIHRoZSB1c2VyIHNwZWNpZmllZCB2YWx1ZXMsIG5vdCB0aGUg
aW50ZXJuYWwgY2xhbXBlZCB2YWx1ZS4KLSAgICB1bnNpZ25lZCBsb25nIG1fc3RlbmNpbEZ1bmNN
YXNrLCBtX3N0ZW5jaWxGdW5jTWFza0JhY2s7CisgICAgR0MzRHVpbnQgbV9zdGVuY2lsTWFzaywg
bV9zdGVuY2lsTWFza0JhY2s7CisgICAgR0MzRGludCBtX3N0ZW5jaWxGdW5jUmVmLCBtX3N0ZW5j
aWxGdW5jUmVmQmFjazsgLy8gTm90ZSB0aGF0IHRoZXNlIGFyZSB0aGUgdXNlciBzcGVjaWZpZWQg
dmFsdWVzLCBub3QgdGhlIGludGVybmFsIGNsYW1wZWQgdmFsdWUuCisgICAgR0MzRHVpbnQgbV9z
dGVuY2lsRnVuY01hc2ssIG1fc3RlbmNpbEZ1bmNNYXNrQmFjazsKIAogICAgIGJvb2wgbV9pc0dM
RVMyQ29tcGxpYW50OwogICAgIGJvb2wgbV9pc0dMRVMyTlBPVFN0cmljdDsKQEAgLTQ3MywyNiAr
NDU1LDI2IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8V2ViS2l0TG9zZUNvbnRleHQ+IG1fd2Via2l0
TG9zZUNvbnRleHQ7CiAKICAgICAvLyBIZWxwZXJzIGZvciBnZXRQYXJhbWV0ZXIgYW5kIG90aGVy
cwotICAgIFdlYkdMR2V0SW5mbyBnZXRCb29sZWFuUGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgcG5h
bWUpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIodW5zaWduZWQg
bG9uZyBwbmFtZSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldEZsb2F0UGFyYW1ldGVyKHVuc2lnbmVk
IGxvbmcgcG5hbWUpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRJbnRQYXJhbWV0ZXIodW5zaWduZWQg
bG9uZyBwbmFtZSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldExvbmdQYXJhbWV0ZXIodW5zaWduZWQg
bG9uZyBwbmFtZSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFVuc2lnbmVkTG9uZ1BhcmFtZXRlcih1
bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0V2ViR0xGbG9hdEFycmF5
UGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRXZWJH
TEludEFycmF5UGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotCi0gICAgdm9pZCB0ZXhJ
bWFnZTJEQmFzZSh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRl
cm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdo
dCwgdW5zaWduZWQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9y
bWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIHRleEltYWdlMkRJbXBsKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2ln
bmVkIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9y
bWF0LCB1bnNpZ25lZCB0eXBlLCBJbWFnZSogaW1hZ2UsCisgICAgV2ViR0xHZXRJbmZvIGdldEJv
b2xlYW5QYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpOworICAgIFdlYkdMR2V0SW5mbyBnZXRCb29s
ZWFuQXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpOworICAgIFdlYkdMR2V0SW5mbyBnZXRG
bG9hdFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSk7CisgICAgV2ViR0xHZXRJbmZvIGdldEludFBh
cmFtZXRlcihHQzNEZW51bSBwbmFtZSk7CisgICAgV2ViR0xHZXRJbmZvIGdldExvbmdQYXJhbWV0
ZXIoR0MzRGVudW0gcG5hbWUpOworICAgIFdlYkdMR2V0SW5mbyBnZXRVbnNpZ25lZExvbmdQYXJh
bWV0ZXIoR0MzRGVudW0gcG5hbWUpOworICAgIFdlYkdMR2V0SW5mbyBnZXRXZWJHTEZsb2F0QXJy
YXlQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpOworICAgIFdlYkdMR2V0SW5mbyBnZXRXZWJHTElu
dEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKTsKKworICAgIHZvaWQgdGV4SW1hZ2UyREJh
c2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZvaWQgdGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdm9pZCB0ZXhTdWJJbWFnZTJEQmFzZSh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVs
LCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgdGV4U3ViSW1hZ2UyREltcGwodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZl
bCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLAorICAgIHZvaWQgdGV4U3ViSW1hZ2UyREJh
c2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCB0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW1hZ2UqIGltYWdlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4
Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZvaWQgaGFuZGxlTlBPVFRleHR1cmVzKGJvb2wgcHJlcGFy
ZVRvRHJhdyk7CkBAIC01MDIsMTEgKzQ4NCwxMSBAQCBwdWJsaWM6CiAgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIGZvciBjb3B5VGV4e1N1Yn1JbWFnZSwgY2hlY2sgd2hldGhlciB0aGUgaW50ZXJuYWxm
b3JtYXQKICAgICAvLyBhbmQgdGhlIGNvbG9yIGJ1ZmZlciBmb3JtYXQgb2YgdGhlIGN1cnJlbnQg
Ym91bmQgZnJhbWVidWZmZXIgY29tYmluYXRpb24KICAgICAvLyBpcyB2YWxpZC4KLSAgICBib29s
IGlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQodW5zaWduZWQg
bG9uZyB0ZXhJbnRlcm5hbEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2xvckJ1ZmZlckZvcm1hdCk7
CisgICAgYm9vbCBpc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlk
KEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCk7
CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidz
IGNvbG9yIGJ1ZmZlciBmb3JtYXQuCi0gICAgdW5zaWduZWQgbG9uZyBnZXRCb3VuZEZyYW1lYnVm
ZmVyQ29sb3JGb3JtYXQoKTsKKyAgICBHQzNEZW51bSBnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JG
b3JtYXQoKTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1l
YnVmZmVyJ3Mgd2lkdGguCiAgICAgaW50IGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpOwpAQCAt
NTE2LDcgKzQ5OCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVj
ayBpZiBzaXplIGlzIG5vbi1uZWdhdGl2ZS4KICAgICAvLyBHZW5lcmF0ZSBHTCBlcnJvciBhbmQg
cmV0dXJuIGZhbHNlIGZvciBuZWdhdGl2ZSBpbnB1dHM7IG90aGVyd2lzZSwgcmV0dXJuIHRydWUu
Ci0gICAgYm9vbCB2YWxpZGF0ZVNpemUobG9uZyB4LCBsb25nIHkpOworICAgIGJvb2wgdmFsaWRh
dGVTaXplKEdDM0RpbnQgeCwgR0MzRGludCB5KTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0
byBjaGVjayBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGJlbG9uZyB0byB0aGUKICAg
ICAvLyBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBpbiBHTFNMIEVTIDEuMCBzcGVjIHNlY3Rpb24g
My4xLgpAQCAtNTI1LDQxICs1MDcsNDEgQEAgcHVibGljOgogICAgIC8vIEhlbHBlciBmdW5jdGlv
biB0byBjaGVjayB0YXJnZXQgYW5kIHRleHR1cmUgYm91bmQgdG8gdGhlIHRhcmdldC4KICAgICAv
LyBHZW5lcmF0ZSBHTCBlcnJvcnMgYW5kIHJldHVybiAwIGlmIHRhcmdldCBpcyBpbnZhbGlkIG9y
IHRleHR1cmUgYm91bmQgaXMKICAgICAvLyBudWxsLiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHRl
eHR1cmUgYm91bmQgdG8gdGhlIHRhcmdldC4KLSAgICBXZWJHTFRleHR1cmUqIHZhbGlkYXRlVGV4
dHVyZUJpbmRpbmcodW5zaWduZWQgbG9uZyB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJl
TWFwKTsKKyAgICBXZWJHTFRleHR1cmUqIHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoR0MzRGVudW0g
dGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCk7CiAKICAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gdG8gY2hlY2sgaW5wdXQgZm9ybWF0L3R5cGUgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7
U3VifUltYWdlLgogICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBp
ZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jRm9ybWF0
QW5kVHlwZSh1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKTsKKyAgICBi
b29sIHZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlKTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBsZXZlbCBm
b3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCiAgICAgLy8gR2VuZXJhdGVzIEdMIGVy
cm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIGxldmVsIGlzIGludmFsaWQuCi0gICAgYm9vbCB2YWxp
ZGF0ZVRleEZ1bmNMZXZlbCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCk7CisgICAg
Ym9vbCB2YWxpZGF0ZVRleEZ1bmNMZXZlbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwp
OwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IHBhcmFtZXRlcnMgZm9y
IGZ1bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgogICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJv
ciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIGJvb2wg
dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZl
bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnRl
cm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB3aWR0
aCwgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKTsKKyAgICBi
b29sIHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlKTsKIAogICAg
IC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZl
clZpZXcKICAgICAvLyBpcyBvZiB0aGUgY29ycmVjdCB0eXBlIGFuZCBjb250YWlucyBlbm91Z2gg
ZGF0YSBmb3IgdGhlIHRleEltYWdlIGNhbGwuCiAgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFu
ZCByZXR1cm5zIGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCi0gICAgYm9vbCB2YWxp
ZGF0ZVRleEZ1bmNEYXRhKGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlLAor
ICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jRGF0YShHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlCdWZmZXJWaWV3
KiBwaXhlbHMpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIG1vZGUgZm9y
IGRyYXd7QXJyYXlzL0VsZW1lbnRzfS4KLSAgICBib29sIHZhbGlkYXRlRHJhd01vZGUodW5zaWdu
ZWQgbG9uZyk7CisgICAgYm9vbCB2YWxpZGF0ZURyYXdNb2RlKEdDM0RlbnVtKTsKIAogICAgIC8v
IEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpZiBmcm9udC9iYWNrIHN0ZW5jaWxNYXNrIGFu
ZCBzdGVuY2lsRnVuYyBzZXR0aW5ncyBhcmUgdGhlIHNhbWUuCiAgICAgYm9vbCB2YWxpZGF0ZVN0
ZW5jaWxTZXR0aW5ncygpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHN0
ZW5jaWwgZnVuYy4KLSAgICBib29sIHZhbGlkYXRlU3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyk7
CisgICAgYm9vbCB2YWxpZGF0ZVN0ZW5jaWxGdW5jKEdDM0RlbnVtKTsKIAogICAgIC8vIEhlbHBl
ciBmdW5jdGlvbiBmb3IgdGV4UGFyYW1ldGVyZiBhbmQgdGV4UGFyYW1ldGVyaS4KLSAgICB2b2lk
IHRleFBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwg
ZmxvYXQgcGFyYW1pLCBpbnQgcGFyYW1mLCBib29sIGlzRmxvYXQpOworICAgIHZvaWQgdGV4UGFy
YW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbWks
IEdDM0RpbnQgcGFyYW1mLCBib29sIGlzRmxvYXQpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIHByaW50IHdhcm5pbmdzIHRvIGNvbnNvbGUuIEN1cnJlbnRseQogICAgIC8vIHVzZWQgb25s
eSB0byB3YXJuIGFib3V0IHVzZSBvZiBvYnNvbGV0ZSBmdW5jdGlvbnMuCkBAIC01NjcsMzYgKzU0
OSwzNiBAQCBwdWJsaWM6CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgaW5w
dXQgcGFyYW1ldGVycyBmb3IgZnJhbWVidWZmZXIgZnVuY3Rpb25zLgogICAgIC8vIEdlbmVyYXRl
IEdMIGVycm9yIGlmIHBhcmFtZXRlcnMgYXJlIGlsbGVnYWwuCi0gICAgYm9vbCB2YWxpZGF0ZUZy
YW1lYnVmZmVyRnVuY1BhcmFtZXRlcnModW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgYXR0YWNobWVudCk7CisgICAgYm9vbCB2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRl
cnMoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50KTsKIAogICAgIC8vIEhlbHBl
ciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBibGVuZCBlcXVhdGlvbiBtb2RlLgotICAgIGJvb2wgdmFs
aWRhdGVCbGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcpOworICAgIGJvb2wgdmFsaWRhdGVCbGVu
ZEVxdWF0aW9uKEdDM0RlbnVtKTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0
ZSBibGVuZCBmdW5jIGZhY3RvcnMuCi0gICAgYm9vbCB2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMo
dW5zaWduZWQgbG9uZyBzcmMsIHVuc2lnbmVkIGxvbmcgZHN0KTsKKyAgICBib29sIHZhbGlkYXRl
QmxlbmRGdW5jRmFjdG9ycyhHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCk7CiAKICAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYSBHTCBjYXBhYmlsaXR5LgotICAgIGJvb2wgdmFs
aWRhdGVDYXBhYmlsaXR5KHVuc2lnbmVkIGxvbmcpOworICAgIGJvb2wgdmFsaWRhdGVDYXBhYmls
aXR5KEdDM0RlbnVtKTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1
dCBwYXJhbWV0ZXJzIGZvciB1bmlmb3JtIGZ1bmN0aW9ucy4KLSAgICBib29sIHZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9h
dDMyQXJyYXkqIHYsIGludCBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cyhjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIGlu
dCBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIHZvaWQqIHYsIGludCBzaXplLCBpbnQgbW9kKTsKLSAg
ICBib29sIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBpbnQg
bW9kKTsKLSAgICBib29sIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgdm9pZCogdiwgaW50
IHNpemUsIGludCBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgR0MzRHNp
emVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgR0MzRHNpemVpIG1vZCk7
CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNpemVpIHNpemUsIEdDM0RzaXplaSBtb2Qp
OworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFy
cmF5KiB2LCBHQzNEc2l6ZWkgbW9kKTsKKyAgICBib29sIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBh
cmFtZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIHZvaWQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgbW9kKTsKIAog
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBwYXJhbWV0ZXJzIGZvciBidWZmZXJE
YXRhLgogICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFyZ2V0LCBv
ciAwIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCi0gICAgV2ViR0xCdWZmZXIqIHZhbGlkYXRl
QnVmZmVyRGF0YVBhcmFtZXRlcnModW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcg
dXNhZ2UpOworICAgIFdlYkdMQnVmZmVyKiB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9u
cyBmb3IgdmVydGV4QXR0cmliTmZ7dn0uCi0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmSW1wbCh1bnNp
Z25lZCBsb25nIGluZGV4LCBpbnQgZXhwZWN0ZWRTaXplLCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZs
b2F0IHYyLCBmbG9hdCB2Myk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmdkltcGwodW5zaWduZWQg
bG9uZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2LCBpbnQgZXhwZWN0ZWRTaXplKTsKLSAgICB2b2lk
IHZlcnRleEF0dHJpYmZ2SW1wbCh1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCogdiwgaW50IHNp
emUsIGludCBleHBlY3RlZFNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliZkltcGwoR0MzRHVp
bnQgaW5kZXgsIEdDM0RzaXplaSBleHBlY3RlZFNpemUsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0
IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2Myk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJm
dkltcGwoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIGV4cGVjdGVk
U2l6ZSk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmdkltcGwoR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEdDM0RzaXplaSBleHBlY3RlZFNpemUpOwogCiAgICAg
Ly8gSGVscGVycyBmb3Igc2ltdWxhdGluZyB2ZXJ0ZXhBdHRyaWIwCiAgICAgdm9pZCBpbml0VmVy
dGV4QXR0cmliMCgpOwotICAgIGJvb2wgc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGxvbmcgbnVtVmVy
dGV4KTsKKyAgICBib29sIHNpbXVsYXRlVmVydGV4QXR0cmliMChHQzNEc2l6ZWkgbnVtVmVydGV4
KTsKICAgICB2b2lkIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7
CiAKICAgICBmcmllbmQgY2xhc3MgV2ViR0xTdGF0ZVJlc3RvcmVyOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAkocmV2aXNpb24gNzU1MzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDEyICszMywxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi1QYXNzUmVm
UHRyPFdlYkdMU2hhZGVyPiBXZWJHTFNoYWRlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY3R4LCBHcmFwaGljc0NvbnRleHQzRDo6V2ViR0xFbnVtVHlwZSB0eXBlKQorUGFzc1JlZlB0
cjxXZWJHTFNoYWRlcj4gV2ViR0xTaGFkZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQq
IGN0eCwgR0MzRGVudW0gdHlwZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMU2hh
ZGVyKGN0eCwgdHlwZSkpOwogfQogCi1XZWJHTFNoYWRlcjo6V2ViR0xTaGFkZXIoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjdHgsIEdyYXBoaWNzQ29udGV4dDNEOjpXZWJHTEVudW1UeXBlIHR5cGUp
CitXZWJHTFNoYWRlcjo6V2ViR0xTaGFkZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgsIEdD
M0RlbnVtIHR5cGUpCiAgICAgOiBXZWJHTE9iamVjdChjdHgpCiAgICAgLCBtX3R5cGUodHlwZSkK
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAkocmV2aXNp
b24gNzU1MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNywxOCArMzcsMTggQEAgY2xhc3MgV2ViR0xTaGFkZXIgOiBwdWJs
aWMgV2ViR0xPYmplY3QgewogcHVibGljOgogICAgIHZpcnR1YWwgfldlYkdMU2hhZGVyKCkgeyBk
ZWxldGVPYmplY3QoKTsgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IGNy
ZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBHcmFwaGljc0NvbnRleHQzRDo6V2ViR0xFbnVt
VHlwZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IGNyZWF0ZShXZWJHTFJl
bmRlcmluZ0NvbnRleHQqLCBHQzNEZW51bSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6V2Vi
R0xFbnVtVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgR0MzRGVu
dW0gZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogCiBwcml2YXRlOgotICAgIFdl
YkdMU2hhZGVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIEdyYXBoaWNzQ29udGV4dDNEOjpXZWJH
TEVudW1UeXBlKTsKKyAgICBXZWJHTFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBHQzNE
ZW51bSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2Jq
ZWN0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1NoYWRlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIAotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpXZWJHTEVudW1UeXBlIG1fdHlwZTsKKyAgICBH
QzNEZW51bSBtX3R5cGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAJKHJldmlzaW9uIDc1NTMx
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBXZWJHTFRleHR1cmU6OldlYkdMVGV4dHVyZShXZWJH
TFJlbmRlcmluCiAgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+
Y3JlYXRlVGV4dHVyZSgpKTsKIH0KIAotdm9pZCBXZWJHTFRleHR1cmU6OnNldFRhcmdldCh1bnNp
Z25lZCBsb25nIHRhcmdldCwgaW50IG1heExldmVsKQordm9pZCBXZWJHTFRleHR1cmU6OnNldFRh
cmdldChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbWF4TGV2ZWwpCiB7CiAgICAgaWYgKCFvYmpl
Y3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIFdlYkdMVGV4dHVy
ZTo6c2V0VGFyZ2V0KHVuc2lnbmVkIGxvCiAgICAgfQogfQogCi12b2lkIFdlYkdMVGV4dHVyZTo6
c2V0UGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQgcGFyYW0pCit2b2lkIFdlYkdM
VGV4dHVyZTo6c2V0UGFyYW1ldGVyaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKIHsK
ICAgICBpZiAoIW9iamVjdCgpIHx8ICFtX3RhcmdldCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTI0
LDE1ICsxMjQsMTUgQEAgdm9pZCBXZWJHTFRleHR1cmU6OnNldFBhcmFtZXRlcmkodW5zaWduZQog
ICAgIHVwZGF0ZSgpOwogfQogCi12b2lkIFdlYkdMVGV4dHVyZTo6c2V0UGFyYW1ldGVyZih1bnNp
Z25lZCBsb25nIHBuYW1lLCBmbG9hdCBwYXJhbSkKK3ZvaWQgV2ViR0xUZXh0dXJlOjpzZXRQYXJh
bWV0ZXJmKEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pCiB7CiAgICAgaWYgKCFvYmpl
Y3QoKSB8fCAhbV90YXJnZXQpCiAgICAgICAgIHJldHVybjsKLSAgICBpbnQgaXBhcmFtID0gc3Rh
dGljX2Nhc3Q8aW50PihwYXJhbSk7CisgICAgR0MzRGludCBpcGFyYW0gPSBzdGF0aWNfY2FzdDxH
QzNEaW50PihwYXJhbSk7CiAgICAgc2V0UGFyYW1ldGVyaShwbmFtZSwgaXBhcmFtKTsKIH0KIAot
dm9pZCBXZWJHTFRleHR1cmU6OnNldExldmVsSW5mbyh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50
IGxldmVsLCB1bnNpZ25lZCBsb25nIGludGVybmFsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWln
aHQsIHVuc2lnbmVkIGxvbmcgdHlwZSkKK3ZvaWQgV2ViR0xUZXh0dXJlOjpzZXRMZXZlbEluZm8o
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSB0eXBlKQogewogICAg
IGlmICghb2JqZWN0KCkgfHwgIW1fdGFyZ2V0KQogICAgICAgICByZXR1cm47CkBAIC0xNTQsMTAg
KzE1NCwxMCBAQCB2b2lkIFdlYkdMVGV4dHVyZTo6Z2VuZXJhdGVNaXBtYXBMZXZlbEluCiAgICAg
aWYgKCFtX2lzQ29tcGxldGUpIHsKICAgICAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IG1f
aW5mby5zaXplKCk7ICsraWkpIHsKICAgICAgICAgICAgIGNvbnN0IExldmVsSW5mbyYgaW5mbzAg
PSBtX2luZm9baWldWzBdOwotICAgICAgICAgICAgaW50IHdpZHRoID0gaW5mbzAud2lkdGg7Ci0g
ICAgICAgICAgICBpbnQgaGVpZ2h0ID0gaW5mbzAuaGVpZ2h0OwotICAgICAgICAgICAgaW50IGxl
dmVsQ291bnQgPSBjb21wdXRlTGV2ZWxDb3VudCh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAg
IGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50OyArK2xldmVsKSB7CisgICAg
ICAgICAgICBHQzNEc2l6ZWkgd2lkdGggPSBpbmZvMC53aWR0aDsKKyAgICAgICAgICAgIEdDM0Rz
aXplaSBoZWlnaHQgPSBpbmZvMC5oZWlnaHQ7CisgICAgICAgICAgICBHQzNEaW50IGxldmVsQ291
bnQgPSBjb21wdXRlTGV2ZWxDb3VudCh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGZvciAo
R0MzRGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgKytsZXZlbCkgewogICAgICAg
ICAgICAgICAgIHdpZHRoID0gc3RkOjptYXgoMSwgd2lkdGggPj4gMSk7CiAgICAgICAgICAgICAg
ICAgaGVpZ2h0ID0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IDEpOwogICAgICAgICAgICAgICAgIExl
dmVsSW5mbyYgaW5mbyA9IG1faW5mb1tpaV1bbGV2ZWxdOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHZv
aWQgV2ViR0xUZXh0dXJlOjpnZW5lcmF0ZU1pcG1hcExldmVsSW4KICAgICBtX25lZWRUb1VzZUJs
YWNrVGV4dHVyZSA9IGZhbHNlOwogfQogCi11bnNpZ25lZCBsb25nIFdlYkdMVGV4dHVyZTo6Z2V0
SW50ZXJuYWxGb3JtYXQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3QKK0dD
M0RlbnVtIFdlYkdMVGV4dHVyZTo6Z2V0SW50ZXJuYWxGb3JtYXQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsKSBjb25zdAogewogICAgIGNvbnN0IExldmVsSW5mbyogaW5mbyA9IGdldExl
dmVsSW5mbyh0YXJnZXQsIGxldmVsKTsKICAgICBpZiAoIWluZm8pCkBAIC0xNzcsNyArMTc3LDcg
QEAgdW5zaWduZWQgbG9uZyBXZWJHTFRleHR1cmU6OmdldEludGVybmFsRgogICAgIHJldHVybiBp
bmZvLT5pbnRlcm5hbEZvcm1hdDsKIH0KIAotdW5zaWduZWQgbG9uZyBXZWJHTFRleHR1cmU6Omdl
dFR5cGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3QKK0dDM0RlbnVtIFdl
YkdMVGV4dHVyZTo6Z2V0VHlwZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpIGNvbnN0
CiB7CiAgICAgY29uc3QgTGV2ZWxJbmZvKiBpbmZvID0gZ2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2
ZWwpOwogICAgIGlmICghaW5mbykKQEAgLTE4NSw3ICsxODUsNyBAQCB1bnNpZ25lZCBsb25nIFdl
YkdMVGV4dHVyZTo6Z2V0VHlwZSh1bnNpCiAgICAgcmV0dXJuIGluZm8tPnR5cGU7CiB9CiAKLWlu
dCBXZWJHTFRleHR1cmU6OmdldFdpZHRoKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwp
IGNvbnN0CitHQzNEc2l6ZWkgV2ViR0xUZXh0dXJlOjpnZXRXaWR0aChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgY29uc3QgTGV2ZWxJbmZvKiBpbmZvID0gZ2V0
TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwpOwogICAgIGlmICghaW5mbykKQEAgLTE5Myw3ICsxOTMs
NyBAQCBpbnQgV2ViR0xUZXh0dXJlOjpnZXRXaWR0aCh1bnNpZ25lZCBsb25nCiAgICAgcmV0dXJu
IGluZm8tPndpZHRoOwogfQogCi1pbnQgV2ViR0xUZXh0dXJlOjpnZXRIZWlnaHQodW5zaWduZWQg
bG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3QKK0dDM0RzaXplaSBXZWJHTFRleHR1cmU6Omdl
dEhlaWdodChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgY29u
c3QgTGV2ZWxJbmZvKiBpbmZvID0gZ2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwpOwogICAgIGlm
ICghaW5mbykKQEAgLTIwMSw4ICsyMDEsOSBAQCBpbnQgV2ViR0xUZXh0dXJlOjpnZXRIZWlnaHQo
dW5zaWduZWQgbG9uCiAgICAgcmV0dXJuIGluZm8tPmhlaWdodDsKIH0KIAotYm9vbCBXZWJHTFRl
eHR1cmU6OmlzTlBPVCh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorYm9vbCBXZWJH
TFRleHR1cmU6OmlzTlBPVChHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7Cisg
ICAgQVNTRVJUKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49IDApOwogICAgIGlmICghd2lkdGggfHwg
IWhlaWdodCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICgod2lkdGggJiAod2lkdGgg
LSAxKSkgfHwgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkpCkBAIC0yMjksNyArMjMwLDcgQEAgdm9p
ZCBXZWJHTFRleHR1cmU6OmRlbGV0ZU9iamVjdEltcGwoUGxhdAogICAgIGNvbnRleHQoKS0+Z3Jh
cGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlVGV4dHVyZShvYmplY3QpOwogfQogCi1pbnQgV2ViR0xU
ZXh0dXJlOjptYXBUYXJnZXRUb0luZGV4KHVuc2lnbmVkIGxvbmcgdGFyZ2V0KSBjb25zdAoraW50
IFdlYkdMVGV4dHVyZTo6bWFwVGFyZ2V0VG9JbmRleChHQzNEZW51bSB0YXJnZXQpIGNvbnN0CiB7
CiAgICAgaWYgKG1fdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKSB7CiAg
ICAgICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpCkBAIC0y
NjgsMTcgKzI2OSwxNyBAQCBib29sIFdlYkdMVGV4dHVyZTo6Y2FuR2VuZXJhdGVNaXBtYXBzKCkK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IFdlYkdMVGV4dHVyZTo6Y29tcHV0ZUxldmVsQ291
bnQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorR0MzRGludCBXZWJHTFRleHR1cmU6OmNvbXB1dGVM
ZXZlbENvdW50KEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKICAgICAvLyBy
ZXR1cm4gMSArIGxvZzJGbG9vcihzdGQ6Om1heCh3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgaW50IG4g
PSBzdGQ6Om1heCh3aWR0aCwgaGVpZ2h0KTsKKyAgICBHQzNEc2l6ZWkgbiA9IHN0ZDo6bWF4KHdp
ZHRoLCBoZWlnaHQpOwogICAgIGlmIChuIDw9IDApCiAgICAgICAgIHJldHVybiAwOwotICAgIGlu
dCBsb2cgPSAwOwotICAgIGludCB2YWx1ZSA9IG47CisgICAgR0MzRGludCBsb2cgPSAwOworICAg
IEdDM0RzaXplaSB2YWx1ZSA9IG47CiAgICAgZm9yIChpbnQgaWkgPSA0OyBpaSA+PSAwOyAtLWlp
KSB7CiAgICAgICAgIGludCBzaGlmdCA9ICgxIDw8IGlpKTsKLSAgICAgICAgaW50IHggPSAodmFs
dWUgPj4gc2hpZnQpOworICAgICAgICBHQzNEc2l6ZWkgeCA9ICh2YWx1ZSA+PiBzaGlmdCk7CiAg
ICAgICAgIGlmICh4KSB7CiAgICAgICAgICAgICB2YWx1ZSA9IHg7CiAgICAgICAgICAgICBsb2cg
Kz0gc2hpZnQ7CkBAIC0yOTksNyArMzAwLDcgQEAgdm9pZCBXZWJHTFRleHR1cmU6OnVwZGF0ZSgp
CiAgICAgfQogICAgIG1faXNDb21wbGV0ZSA9IHRydWU7CiAgICAgY29uc3QgTGV2ZWxJbmZvJiBm
aXJzdCA9IG1faW5mb1swXVswXTsKLSAgICBpbnQgbGV2ZWxDb3VudCA9IGNvbXB1dGVMZXZlbENv
dW50KGZpcnN0LndpZHRoLCBmaXJzdC5oZWlnaHQpOworICAgIEdDM0RpbnQgbGV2ZWxDb3VudCA9
IGNvbXB1dGVMZXZlbENvdW50KGZpcnN0LndpZHRoLCBmaXJzdC5oZWlnaHQpOwogICAgIGlmIChs
ZXZlbENvdW50IDwgMSkKICAgICAgICAgbV9pc0NvbXBsZXRlID0gZmFsc2U7CiAgICAgZWxzZSB7
CkBAIC0zMTEsOSArMzEyLDkgQEAgdm9pZCBXZWJHTFRleHR1cmU6OnVwZGF0ZSgpCiAgICAgICAg
ICAgICAgICAgbV9pc0NvbXBsZXRlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgd2lkdGggPSBpbmZvMC53aWR0aDsKLSAgICAg
ICAgICAgIGludCBoZWlnaHQgPSBpbmZvMC5oZWlnaHQ7Ci0gICAgICAgICAgICBmb3IgKGludCBs
ZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgKytsZXZlbCkgeworICAgICAgICAgICAgR0Mz
RHNpemVpIHdpZHRoID0gaW5mbzAud2lkdGg7CisgICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0
ID0gaW5mbzAuaGVpZ2h0OworICAgICAgICAgICAgZm9yIChHQzNEaW50IGxldmVsID0gMTsgbGV2
ZWwgPCBsZXZlbENvdW50OyArK2xldmVsKSB7CiAgICAgICAgICAgICAgICAgd2lkdGggPSBzdGQ6
Om1heCgxLCB3aWR0aCA+PiAxKTsKICAgICAgICAgICAgICAgICBoZWlnaHQgPSBzdGQ6Om1heCgx
LCBoZWlnaHQgPj4gMSk7CiAgICAgICAgICAgICAgICAgY29uc3QgTGV2ZWxJbmZvJiBpbmZvID0g
bV9pbmZvW2lpXVtsZXZlbF07CkBAIC0zMzgsMTQgKzMzOSwxNCBAQCB2b2lkIFdlYkdMVGV4dHVy
ZTo6dXBkYXRlKCkKICAgICAgICAgbV9uZWVkVG9Vc2VCbGFja1RleHR1cmUgPSB0cnVlOwogfQog
Ci1jb25zdCBXZWJHTFRleHR1cmU6OkxldmVsSW5mbyogV2ViR0xUZXh0dXJlOjpnZXRMZXZlbElu
Zm8odW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3QKK2NvbnN0IFdlYkdMVGV4
dHVyZTo6TGV2ZWxJbmZvKiBXZWJHTFRleHR1cmU6OmdldExldmVsSW5mbyhHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKCFvYmplY3QoKSB8fCAhbV90YXJn
ZXQpCiAgICAgICAgIHJldHVybiAwOwogICAgIGludCB0YXJnZXRJbmRleCA9IG1hcFRhcmdldFRv
SW5kZXgodGFyZ2V0KTsKICAgICBpZiAodGFyZ2V0SW5kZXggPCAwIHx8IHRhcmdldEluZGV4ID49
IHN0YXRpY19jYXN0PGludD4obV9pbmZvLnNpemUoKSkpCiAgICAgICAgIHJldHVybiAwOwotICAg
IGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPj0gc3RhdGljX2Nhc3Q8aW50PihtX2luZm9bdGFyZ2V0
SW5kZXhdLnNpemUoKSkpCisgICAgaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+PSBzdGF0aWNfY2Fz
dDxHQzNEaW50PihtX2luZm9bdGFyZ2V0SW5kZXhdLnNpemUoKSkpCiAgICAgICAgIHJldHVybiAw
OwogICAgIHJldHVybiAmKG1faW5mb1t0YXJnZXRJbmRleF1bbGV2ZWxdKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCShyZXZpc2lvbiA3NTUzMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MCwyNSArNDAsMjUgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
V2ViR0xUZXh0dXJlPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKLSAgICB2b2lk
IHNldFRhcmdldCh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IG1heExldmVsKTsKLSAgICB2b2lk
IHNldFBhcmFtZXRlcmkodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50IHBhcmFtKTsKLSAgICB2b2lk
IHNldFBhcmFtZXRlcmYodW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQgcGFyYW0pOworICAgIHZv
aWQgc2V0VGFyZ2V0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBtYXhMZXZlbCk7CisgICAgdm9p
ZCBzZXRQYXJhbWV0ZXJpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKTsKKyAgICB2b2lk
IHNldFBhcmFtZXRlcmYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSk7CiAKICAgICBp
bnQgZ2V0TWluRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9taW5GaWx0ZXI7IH0KIAotICAgIHZv
aWQgc2V0TGV2ZWxJbmZvKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwsIHVuc2lnbmVk
IGxvbmcgaW50ZXJuYWxGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgbG9u
ZyB0eXBlKTsKKyAgICB2b2lkIHNldExldmVsSW5mbyhHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RlbnVtIHR5cGUpOwogCiAgICAgYm9vbCBjYW5HZW5lcmF0ZU1pcG1hcHMo
KTsKICAgICAvLyBHZW5lcmF0ZSBhbGwgbGV2ZWwgaW5mb3JtYXRpb24uCiAgICAgdm9pZCBnZW5l
cmF0ZU1pcG1hcExldmVsSW5mbygpOwogCi0gICAgdW5zaWduZWQgbG9uZyBnZXRJbnRlcm5hbEZv
cm1hdCh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IGxldmVsKSBjb25zdDsKLSAgICB1bnNpZ25l
ZCBsb25nIGdldFR5cGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3Q7Ci0g
ICAgaW50IGdldFdpZHRoKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwpIGNvbnN0Owot
ICAgIGludCBnZXRIZWlnaHQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3Q7
CisgICAgR0MzRGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsKSBjb25zdDsKKyAgICBHQzNEZW51bSBnZXRUeXBlKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCkgY29uc3Q7CisgICAgR0MzRHNpemVpIGdldFdpZHRoKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCkgY29uc3Q7CisgICAgR0MzRHNpemVpIGdldEhlaWdodChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpIGNvbnN0OwogCiAgICAgLy8gV2hldGhlciB3aWR0aC9o
ZWlnaHQgaXMgTm90UG93ZXJPZlR3by4KLSAgICBzdGF0aWMgYm9vbCBpc05QT1QodW5zaWduZWQs
IHVuc2lnbmVkKTsKKyAgICBzdGF0aWMgYm9vbCBpc05QT1QoR0MzRHNpemVpLCBHQzNEc2l6ZWkp
OwogCiAgICAgYm9vbCBpc05QT1QoKSBjb25zdDsKICAgICAvLyBEZXRlcm1pbmUgaWYgdGV4dHVy
ZSBzYW1wbGluZyBzaG91bGQgYWx3YXlzIHJldHVybiBbMCwgMCwgMCwgMV0gKE9wZW5HTCBFUyAy
LjAgU2VjIDMuOC4yKS4KQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNF
dmVyQmVlbkJvdW5kKCkgY29uc3QgeyByZXR1cm4gb2JqZWN0KCkgJiYgbV90YXJnZXQ7IH0KIAot
ICAgIHN0YXRpYyBpbnQgY29tcHV0ZUxldmVsQ291bnQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsK
KyAgICBzdGF0aWMgR0MzRGludCBjb21wdXRlTGV2ZWxDb3VudChHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQpOwogCiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xUZXh0dXJlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCopOwpAQCAtODUsNyArODUsNyBAQCBwcml2YXRlOgogICAgICAgICB7CiAg
ICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldEluZm8odW5zaWduZWQgbG9uZyBpbnRlcm5hbEZt
dCwgaW50IHcsIGludCBoLCB1bnNpZ25lZCBsb25nIHRwKQorICAgICAgICB2b2lkIHNldEluZm8o
R0MzRGVudW0gaW50ZXJuYWxGbXQsIEdDM0RzaXplaSB3LCBHQzNEc2l6ZWkgaCwgR0MzRGVudW0g
dHApCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhbGlkID0gdHJ1ZTsKICAgICAgICAgICAgIGlu
dGVybmFsRm9ybWF0ID0gaW50ZXJuYWxGbXQ7CkBAIC05NSwyNiArOTUsMjYgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgdmFsaWQ7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcg
aW50ZXJuYWxGb3JtYXQ7Ci0gICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsK
LSAgICAgICAgdW5zaWduZWQgbG9uZyB0eXBlOworICAgICAgICBHQzNEZW51bSBpbnRlcm5hbEZv
cm1hdDsKKyAgICAgICAgR0MzRHNpemVpIHdpZHRoOworICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0
OworICAgICAgICBHQzNEZW51bSB0eXBlOwogICAgIH07CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNU
ZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdm9pZCB1cGRhdGUoKTsKIAot
ICAgIGludCBtYXBUYXJnZXRUb0luZGV4KHVuc2lnbmVkIGxvbmcpIGNvbnN0OworICAgIGludCBt
YXBUYXJnZXRUb0luZGV4KEdDM0RlbnVtKSBjb25zdDsKIAotICAgIGNvbnN0IExldmVsSW5mbyog
Z2V0TGV2ZWxJbmZvKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwpIGNvbnN0OworICAg
IGNvbnN0IExldmVsSW5mbyogZ2V0TGV2ZWxJbmZvKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCkgY29uc3Q7CiAKLSAgICB1bnNpZ25lZCBsb25nIG1fdGFyZ2V0OworICAgIEdDM0RlbnVt
IG1fdGFyZ2V0OwogCi0gICAgaW50IG1fbWluRmlsdGVyOwotICAgIGludCBtX21hZ0ZpbHRlcjsK
LSAgICBpbnQgbV93cmFwUzsKLSAgICBpbnQgbV93cmFwVDsKKyAgICBHQzNEZW51bSBtX21pbkZp
bHRlcjsKKyAgICBHQzNEZW51bSBtX21hZ0ZpbHRlcjsKKyAgICBHQzNEZW51bSBtX3dyYXBTOwor
ICAgIEdDM0RlbnVtIG1fd3JhcFQ7CiAKICAgICBWZWN0b3I8VmVjdG9yPExldmVsSW5mbz4gPiBt
X2luZm87CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxv
Y2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFVuaWZvcm1Mb2NhdGlvbi5jcHAJKHJldmlzaW9uIDc1NTMxKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MiwxMiArMzIsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotUGFzc1JlZlB0cjxX
ZWJHTFVuaWZvcm1Mb2NhdGlvbj4gV2ViR0xVbmlmb3JtTG9jYXRpb246OmNyZWF0ZShXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24pCitQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxv
Y2F0aW9uPiBXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6Y3JlYXRlKFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSwgR0MzRGludCBsb2NhdGlvbikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKHByb2dyYW0sIGxvY2F0aW9uKSk7CiB9CiAKLVdlYkdMVW5pZm9ybUxvY2F0
aW9uOjpXZWJHTFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9j
YXRpb24pCitXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6V2ViR0xVbmlmb3JtTG9jYXRpb24oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uKQogICAgIDogbV9wcm9ncmFtKHByb2dy
YW0pCiAgICAgLCBtX2xvY2F0aW9uKGxvY2F0aW9uKQogewpAQCAtNTQsNyArNTQsNyBAQCBXZWJH
TFByb2dyYW0qIFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpwcm9nCiAgICAgcmV0dXJuIG1fcHJvZ3Jh
bS5nZXQoKTsKIH0KIAotbG9uZyBXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6bG9jYXRpb24oKSBjb25z
dAorR0MzRGludCBXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6bG9jYXRpb24oKSBjb25zdAogewogICAg
IC8vIElmIHRoZSBwcm9ncmFtIGhhcyBiZWVuIGxpbmtlZCBhZ2FpbiwgdGhlbiB0aGlzIFVuaWZv
cm1Mb2NhdGlvbiBpcyBubwogICAgIC8vIGxvbmdlciB2YWxpZC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaAkocmV2aXNpb24g
NzU1MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxOSArMzksMTkgQEAgY2xhc3MgV2ViR0xVbmlmb3Jt
TG9jYXRpb24gOiBwdWJsaWMgUmVmQwogcHVibGljOgogICAgIHZpcnR1YWwgfldlYkdMVW5pZm9y
bUxvY2F0aW9uKCkgeyB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2Nh
dGlvbj4gY3JlYXRlKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IGNyZWF0ZShXZWJHTFByb2dy
YW0qIHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24pOwogCiAgICAgV2ViR0xQcm9ncmFtKiBwcm9n
cmFtKCkgY29uc3Q7CiAKLSAgICBsb25nIGxvY2F0aW9uKCkgY29uc3Q7CisgICAgR0MzRGludCBs
b2NhdGlvbigpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24o
V2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKTsKKyAgICBXZWJHTFVuaWZvcm1M
b2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24pOwogCiBwcml2
YXRlOgogICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG1fcHJvZ3JhbTsKLSAgICBsb25nIG1fbG9j
YXRpb247Ci0gICAgdW5zaWduZWQgbG9uZyBtX2xpbmtDb3VudDsKKyAgICBHQzNEaW50IG1fbG9j
YXRpb247CisgICAgdW5zaWduZWQgbV9saW5rQ291bnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78765</attachid>
            <date>2011-01-12 17:34:56 -0800</date>
            <delta_ts>2011-01-13 11:05:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51908-20110112173454.patch</filename>
            <type>text/plain</type>
            <size>178133</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NjQ4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjI1IEBACisyMDExLTAxLTEyICBaaGVueWFv
IE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXNlIEdDM0QgdHlwZXMgaW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0IGFu
ZCByZWxhdGVkIFdlYkdMIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUxOTA4CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEFjdGl2
ZUluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMQWN0aXZlSW5mbzo6dHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTEFjdGl2ZUluZm86OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xBY3RpdmVJ
bmZvOjpXZWJHTEFjdGl2ZUluZm8pOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJEYXRh
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyU3ViRGF0
YUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlclN1
YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OmJ5dGVMZW5ndGgpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OmdldENhY2hlZE1heEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMQnVmZmVyOjpzZXRDYWNoZWRNYXhJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTEJ1ZmZlcjo6c2V0VGFyZ2V0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OmdldFRhcmdldCk6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2htZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xGcmFtZWJ1ZmZlcjo6Z2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1
ZmZlcjo6Z2V0SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6Omdl
dENvbG9yQnVmZmVyRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6
OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZy
YW1lYnVmZmVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Y2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpudW1BY3RpdmVBdHRyaWJMb2NhdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJMb2Nh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06OmlzVXNpbmdWZXJ0ZXhBdHRy
aWIwKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUHJvZ3JhbTo6Z2V0TGlua0NvdW50KToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJidWZm
ZXI6OnNldEludGVybmFsRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyYnVm
ZmVyOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1
ZmZlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZlcjo6Z2V0
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJidWZmZXI6OmdldEhlaWdodCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaXplSW5CeXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQXR0cmliTG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1l
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFJl
bmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJp
bmRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Ymxl
bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5k
RXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpibGVuZEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y2xlYXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNsZWFyRGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojpjb2xvck1hc2spOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y3VsbEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZWxldGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpkZXB0aE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
ZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlz
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheVByZWNp
c2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVJl
bmRlcmluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRy
YXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdlbmVyYXRlTWlwbWFwKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVmZmVyUGFyYW1ldGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1ldGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYik6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYk9m
ZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmhpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0J1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxlZCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBvbHlnb25PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNhbXBsZUNvdmVyYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcFNlcGFyYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJmKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyaSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRC
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1h
Z2UyREltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhT
dWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTFmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTFmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0x
aSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmYpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2kpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2YpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0Zik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRm
dik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aWV3
cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvb2xl
YW5QYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRGbG9hdFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldEludFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldExvbmdQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbnNpZ25lZExvbmdQYXJhbWV0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRXZWJHTEZsb2F0QXJyYXlQYXJh
bWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRXZWJH
TEludEFycmF5UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6aXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZm
ZXJDb2xvckZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVU
ZXhGdW5jRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlRHJhd01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuZEZ1bmNG
YWN0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVDYXBhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0
cmliZkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0
ZXhBdHRyaWJmdkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpzaW11bGF0ZVZlcnRleEF0dHJpYjApOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpWZXJ0ZXhBdHRyaWJTdGF0ZTo6VmVydGV4QXR0cmliU3RhdGUpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMU2hhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhZGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFkZXI6OldlYkdMU2hhZGVyKToKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xTaGFkZXI6OmdldFR5cGUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OnNldFRhcmdldCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OnNldFBhcmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xUZXh0dXJlOjpzZXRQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
VGV4dHVyZTo6c2V0TGV2ZWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6
Z2VuZXJhdGVNaXBtYXBMZXZlbEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJl
OjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6Omdl
dFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpnZXRXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmdldEhlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFRleHR1cmU6OmlzTlBPVCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6
Om1hcFRhcmdldFRvSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpjb21w
dXRlTGV2ZWxDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmdldExldmVsSW5mbyk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRl
eHR1cmU6OkxldmVsSW5mbzo6c2V0SW5mbyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xV
bmlmb3JtTG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbmlmb3JtTG9jYXRp
b246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6V2Vi
R0xVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbmlmb3JtTG9jYXRp
b246OmxvY2F0aW9uKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlv
bi5oOgorCiAyMDExLTAxLTExICBNYXR0aGV3IERlbGFuZXkgIDxtZGVsYW5leUBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmgJKHJldmlzaW9uIDc1NTMxKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgV2ViR0xBY3RpdmVJbmZvX2gKICNkZWZpbmUg
V2ViR0xBY3RpdmVJbmZvX2gKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC0zNCwxNiArMzUsMTYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBXZWJHTEFjdGl2ZUluZm8gOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJH
TEFjdGl2ZUluZm8+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEFjdGl2
ZUluZm8+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIHR5cGUsIGludCBzaXpl
KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gY3JlYXRlKGNvbnN0IFN0
cmluZyYgbmFtZSwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBzaXplKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTEFjdGl2ZUluZm8obmFtZSwgdHlwZSwgc2l6ZSkpOwog
ICAgIH0KICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIHVu
c2lnbmVkIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBpbnQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIEdDM0RlbnVtIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KKyAgICBHQzNEaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
IAogcHJpdmF0ZToKLSAgICBXZWJHTEFjdGl2ZUluZm8oY29uc3QgU3RyaW5nJiBuYW1lLCB1bnNp
Z25lZCB0eXBlLCBpbnQgc2l6ZSkKKyAgICBXZWJHTEFjdGl2ZUluZm8oY29uc3QgU3RyaW5nJiBu
YW1lLCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHNpemUpCiAgICAgICAgIDogbV9uYW1lKG5hbWUp
CiAgICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAgICAgICwgbV9zaXplKHNpemUpCkBAIC01Myw4
ICs1NCw4IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChzaXplKTsKICAgICB9CiAgICAgU3Ry
aW5nIG1fbmFtZTsKLSAgICB1bnNpZ25lZCBtX3R5cGU7Ci0gICAgaW50IG1fc2l6ZTsKKyAgICBH
QzNEZW51bSBtX3R5cGU7CisgICAgR0MzRGludCBtX3NpemU7CiB9OwogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCShyZXZpc2lvbiA3NTUzMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTUsOCArNTUsMTEgQEAgdm9pZCBXZWJHTEJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1w
bChQbGF0ZgogICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlQnVmZmVy
KG9iamVjdCk7CiB9CiAKLWJvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGFJbXBs
KEFycmF5QnVmZmVyKiBhcnJheSwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxl
bmd0aCkKK2Jvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGFJbXBsKEFycmF5QnVm
ZmVyKiBhcnJheSwgR0MzRGludHB0ciBieXRlT2Zmc2V0LCBHQzNEc2l6ZWlwdHIgYnl0ZUxlbmd0
aCkKIHsKKyAgICBpZiAoYnl0ZUxlbmd0aCA8IDAgfHwgYnl0ZU9mZnNldCA8IDApCisgICAgICAg
IHJldHVybiBmYWxzZTsKKwogICAgIGlmIChhcnJheSAmJiBieXRlTGVuZ3RoKSB7CiAgICAgICAg
IENoZWNrZWRJbnQ8dWludDMyX3Q+IGNoZWNrZWRPZmZzZXQoYnl0ZU9mZnNldCk7CiAgICAgICAg
IENoZWNrZWRJbnQ8dWludDMyX3Q+IGNoZWNrZWRMZW5ndGgoYnl0ZUxlbmd0aCk7CkBAIC05NCwx
MSArOTcsMTEgQEAgYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyRGF0YUltcAogICAg
IH0KIH0KIAotYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyRGF0YShpbnQgc2l6ZSkK
K2Jvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGEoR0MzRHNpemVpcHRyIHNpemUp
CiB7CiAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IGFzc29jaWF0ZUJ1ZmZlckRhdGFJbXBsKDAsIDAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXpl
KSk7CisgICAgcmV0dXJuIGFzc29jaWF0ZUJ1ZmZlckRhdGFJbXBsKDAsIDAsIHNpemUpOwogfQog
CiBib29sIFdlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJEYXRhKEFycmF5QnVmZmVyKiBhcnJh
eSkKQEAgLTExNSwxOCArMTE4LDE4IEBAIGJvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZl
ckRhdGEoQXIKICAgICByZXR1cm4gYXNzb2NpYXRlQnVmZmVyRGF0YUltcGwoYXJyYXktPmJ1ZmZl
cigpLmdldCgpLCBhcnJheS0+Ynl0ZU9mZnNldCgpLCBhcnJheS0+Ynl0ZUxlbmd0aCgpKTsKIH0K
IAotYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyU3ViRGF0YUltcGwobG9uZyBvZmZz
ZXQsIEFycmF5QnVmZmVyKiBhcnJheSwgdW5zaWduZWQgYXJyYXlCeXRlT2Zmc2V0LCB1bnNpZ25l
ZCBieXRlTGVuZ3RoKQorYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyU3ViRGF0YUlt
cGwoR0MzRGludHB0ciBvZmZzZXQsIEFycmF5QnVmZmVyKiBhcnJheSwgR0MzRGludHB0ciBhcnJh
eUJ5dGVPZmZzZXQsIEdDM0RzaXplaXB0ciBieXRlTGVuZ3RoKQogewotICAgIGlmICghYXJyYXkg
fHwgb2Zmc2V0IDwgMCkKKyAgICBpZiAoIWFycmF5IHx8IG9mZnNldCA8IDAgfHwgYXJyYXlCeXRl
T2Zmc2V0IDwgMCB8fCBieXRlTGVuZ3RoIDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgaWYgKGJ5dGVMZW5ndGgpIHsKLSAgICAgICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hlY2tl
ZEJ1ZmZlck9mZnNldChvZmZzZXQpOwotICAgICAgICBDaGVja2VkSW50PHVpbnQzMl90PiBjaGVj
a2VkQXJyYXlPZmZzZXQoYXJyYXlCeXRlT2Zmc2V0KTsKLSAgICAgICAgQ2hlY2tlZEludDx1aW50
MzJfdD4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKLSAgICAgICAgQ2hlY2tlZEludDx1aW50
MzJfdD4gY2hlY2tlZEFycmF5TWF4ID0gY2hlY2tlZEFycmF5T2Zmc2V0ICsgY2hlY2tlZExlbmd0
aDsKLSAgICAgICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hlY2tlZEJ1ZmZlck1heCA9IGNoZWNr
ZWRCdWZmZXJPZmZzZXQgKyBjaGVja2VkTGVuZ3RoOwotICAgICAgICBpZiAoIWNoZWNrZWRBcnJh
eU1heC52YWxpZCgpIHx8IGNoZWNrZWRBcnJheU1heC52YWx1ZSgpID4gYXJyYXktPmJ5dGVMZW5n
dGgoKSB8fCAhY2hlY2tlZEJ1ZmZlck1heC52YWxpZCgpIHx8IGNoZWNrZWRCdWZmZXJNYXgudmFs
dWUoKSA+IG1fYnl0ZUxlbmd0aCkKKyAgICAgICAgQ2hlY2tlZEludDxpbnQzMl90PiBjaGVja2Vk
QnVmZmVyT2Zmc2V0KG9mZnNldCk7CisgICAgICAgIENoZWNrZWRJbnQ8aW50MzJfdD4gY2hlY2tl
ZEFycmF5T2Zmc2V0KGFycmF5Qnl0ZU9mZnNldCk7CisgICAgICAgIENoZWNrZWRJbnQ8aW50MzJf
dD4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKKyAgICAgICAgQ2hlY2tlZEludDxpbnQzMl90
PiBjaGVja2VkQXJyYXlNYXggPSBjaGVja2VkQXJyYXlPZmZzZXQgKyBjaGVja2VkTGVuZ3RoOwor
ICAgICAgICBDaGVja2VkSW50PGludDMyX3Q+IGNoZWNrZWRCdWZmZXJNYXggPSBjaGVja2VkQnVm
ZmVyT2Zmc2V0ICsgY2hlY2tlZExlbmd0aDsKKyAgICAgICAgaWYgKCFjaGVja2VkQXJyYXlNYXgu
dmFsaWQoKSB8fCBjaGVja2VkQXJyYXlNYXgudmFsdWUoKSA+IHN0YXRpY19jYXN0PGludDMyX3Q+
KGFycmF5LT5ieXRlTGVuZ3RoKCkpIHx8ICFjaGVja2VkQnVmZmVyTWF4LnZhbGlkKCkgfHwgY2hl
Y2tlZEJ1ZmZlck1heC52YWx1ZSgpID4gbV9ieXRlTGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIApAQCAtMTQ4LDI2ICsxNTEsMjYgQEAgYm9vbCBXZWJHTEJ1ZmZlcjo6
YXNzb2NpYXRlQnVmZmVyU3ViRGF0YQogICAgIH0KIH0KIAotYm9vbCBXZWJHTEJ1ZmZlcjo6YXNz
b2NpYXRlQnVmZmVyU3ViRGF0YShsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGFycmF5KQorYm9v
bCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShHQzNEaW50cHRyIG9mZnNldCwg
QXJyYXlCdWZmZXIqIGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICByZXR1cm4gYXNzb2NpYXRlQnVmZmVyU3ViRGF0YUltcGwob2Zmc2V0LCBhcnJh
eSwgMCwgYXJyYXktPmJ5dGVMZW5ndGgoKSk7CiB9CiAKLWJvb2wgV2ViR0xCdWZmZXI6OmFzc29j
aWF0ZUJ1ZmZlclN1YkRhdGEobG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogYXJyYXkpCiti
b29sIFdlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJTdWJEYXRhKEdDM0RpbnRwdHIgb2Zmc2V0
LCBBcnJheUJ1ZmZlclZpZXcqIGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXR1cm4gYXNzb2NpYXRlQnVmZmVyU3ViRGF0YUltcGwob2Zmc2V0
LCBhcnJheS0+YnVmZmVyKCkuZ2V0KCksIGFycmF5LT5ieXRlT2Zmc2V0KCksIGFycmF5LT5ieXRl
TGVuZ3RoKCkpOwogfQogCi11bnNpZ25lZCBXZWJHTEJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0
CitHQzNEc2l6ZWlwdHIgV2ViR0xCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2J5dGVMZW5ndGg7CiB9CiAKLWxvbmcgV2ViR0xCdWZmZXI6OmdldENhY2hlZE1heElu
ZGV4KHVuc2lnbmVkIGxvbmcgdHlwZSkKK2ludCBXZWJHTEJ1ZmZlcjo6Z2V0Q2FjaGVkTWF4SW5k
ZXgoR0MzRGVudW0gdHlwZSkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJB
WV9MRU5HVEgobV9tYXhJbmRleENhY2hlKTsgKytpKQogICAgICAgICBpZiAobV9tYXhJbmRleENh
Y2hlW2ldLnR5cGUgPT0gdHlwZSkKQEAgLTE3NSw3ICsxNzgsNyBAQCBsb25nIFdlYkdMQnVmZmVy
OjpnZXRDYWNoZWRNYXhJbmRleCh1bnNpCiAgICAgcmV0dXJuIC0xOwogfQogCi12b2lkIFdlYkdM
QnVmZmVyOjpzZXRDYWNoZWRNYXhJbmRleCh1bnNpZ25lZCBsb25nIHR5cGUsIGxvbmcgdmFsdWUp
Cit2b2lkIFdlYkdMQnVmZmVyOjpzZXRDYWNoZWRNYXhJbmRleChHQzNEZW51bSB0eXBlLCBpbnQg
dmFsdWUpCiB7CiAgICAgc2l6ZV90IG51bUVudHJpZXMgPSBXVEZfQVJSQVlfTEVOR1RIKG1fbWF4
SW5kZXhDYWNoZSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1FbnRyaWVzOyArK2kp
CkBAIC0xODgsNyArMTkxLDcgQEAgdm9pZCBXZWJHTEJ1ZmZlcjo6c2V0Q2FjaGVkTWF4SW5kZXgo
dW5zaQogICAgIG1fbmV4dEF2YWlsYWJsZUNhY2hlRW50cnkgPSAobV9uZXh0QXZhaWxhYmxlQ2Fj
aGVFbnRyeSArIDEpICUgbnVtRW50cmllczsKIH0KIAotdm9pZCBXZWJHTEJ1ZmZlcjo6c2V0VGFy
Z2V0KHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQordm9pZCBXZWJHTEJ1ZmZlcjo6c2V0VGFyZ2V0KEdD
M0RlbnVtIHRhcmdldCkKIHsKICAgICAvLyBJbiBXZWJHTCwgYSBidWZmZXIgaXMgYm91bmQgdG8g
b25lIHRhcmdldCBpbiBpdHMgbGlmZXRpbWUKICAgICBpZiAobV90YXJnZXQpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgJKHJldmlzaW9uIDc1NTMxKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDEsMjMgKzQxLDIzIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdM
QnVmZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKLSAgICBib29sIGFzc29j
aWF0ZUJ1ZmZlckRhdGEoaW50IHNpemUpOworICAgIGJvb2wgYXNzb2NpYXRlQnVmZmVyRGF0YShH
QzNEc2l6ZWlwdHIgc2l6ZSk7CiAgICAgYm9vbCBhc3NvY2lhdGVCdWZmZXJEYXRhKEFycmF5QnVm
ZmVyKiBhcnJheSk7CiAgICAgYm9vbCBhc3NvY2lhdGVCdWZmZXJEYXRhKEFycmF5QnVmZmVyVmll
dyogYXJyYXkpOwotICAgIGJvb2wgYXNzb2NpYXRlQnVmZmVyU3ViRGF0YShsb25nIG9mZnNldCwg
QXJyYXlCdWZmZXIqIGFycmF5KTsKLSAgICBib29sIGFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEobG9u
ZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogYXJyYXkpOworICAgIGJvb2wgYXNzb2NpYXRlQnVm
ZmVyU3ViRGF0YShHQzNEaW50cHRyIG9mZnNldCwgQXJyYXlCdWZmZXIqIGFycmF5KTsKKyAgICBi
b29sIGFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEoR0MzRGludHB0ciBvZmZzZXQsIEFycmF5QnVmZmVy
VmlldyogYXJyYXkpOwogCi0gICAgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0OworICAgIEdD
M0RzaXplaXB0ciBieXRlTGVuZ3RoKCkgY29uc3Q7CiAgICAgY29uc3QgQXJyYXlCdWZmZXIqIGVs
ZW1lbnRBcnJheUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudEFycmF5QnVmZmVyLmdl
dCgpOyB9CiAKICAgICAvLyBHZXRzIHRoZSBjYWNoZWQgbWF4IGluZGV4IGZvciB0aGUgZ2l2ZW4g
dHlwZS4gUmV0dXJucyAtMSBpZgogICAgIC8vIG5vbmUgaGFzIGJlZW4gc2V0LgotICAgIGxvbmcg
Z2V0Q2FjaGVkTWF4SW5kZXgodW5zaWduZWQgbG9uZyB0eXBlKTsKKyAgICBpbnQgZ2V0Q2FjaGVk
TWF4SW5kZXgoR0MzRGVudW0gdHlwZSk7CiAgICAgLy8gU2V0cyB0aGUgY2FjaGVkIG1heCBpbmRl
eCBmb3IgdGhlIGdpdmVuIHR5cGUuCi0gICAgdm9pZCBzZXRDYWNoZWRNYXhJbmRleCh1bnNpZ25l
ZCBsb25nIHR5cGUsIGxvbmcgdmFsdWUpOworICAgIHZvaWQgc2V0Q2FjaGVkTWF4SW5kZXgoR0Mz
RGVudW0gdHlwZSwgaW50IHZhbHVlKTsKIAotICAgIHVuc2lnbmVkIGxvbmcgZ2V0VGFyZ2V0KCkg
Y29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KLSAgICB2b2lkIHNldFRhcmdldCh1bnNpZ25lZCBs
b25nKTsKKyAgICBHQzNEZW51bSBnZXRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsg
fQorICAgIHZvaWQgc2V0VGFyZ2V0KEdDM0RlbnVtKTsKIAogICAgIGJvb2wgaGFzRXZlckJlZW5C
b3VuZCgpIGNvbnN0IHsgcmV0dXJuIG9iamVjdCgpICYmIG1fdGFyZ2V0OyB9CiAKQEAgLTY5LDEw
ICs2OSwxMCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0J1ZmZl
cigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHVuc2lnbmVkIGxvbmcgbV90YXJnZXQ7
CisgICAgR0MzRGVudW0gbV90YXJnZXQ7CiAKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG1fZWxl
bWVudEFycmF5QnVmZmVyOwotICAgIHVuc2lnbmVkIG1fYnl0ZUxlbmd0aDsKKyAgICBHQzNEc2l6
ZWlwdHIgbV9ieXRlTGVuZ3RoOwogCiAgICAgLy8gT3B0aW1pemF0aW9uIGZvciBpbmRleCB2YWxp
ZGF0aW9uLiBGb3IgZWFjaCB0eXBlIG9mIGluZGV4CiAgICAgLy8gKGkuZS4sIFVOU0lHTkVEX1NI
T1JUKSwgY2FjaGUgdGhlIG1heGltdW0gaW5kZXggaW4gdGhlCkBAIC04MiwyMiArODIsMjIgQEAg
cHJpdmF0ZToKICAgICAvLyBkcmF3IGNhbGwgYXMgbG9uZyBhcyBhbGwgYm91bmQgYXJyYXkgYnVm
ZmVycyBhcmUgYXQgbGVhc3QKICAgICAvLyB0aGF0IHNpemUuCiAgICAgc3RydWN0IE1heEluZGV4
Q2FjaGVFbnRyeSB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgdHlwZTsKLSAgICAgICAgbG9uZyBt
YXhJbmRleDsKKyAgICAgICAgR0MzRGVudW0gdHlwZTsKKyAgICAgICAgaW50IG1heEluZGV4Owog
ICAgIH07CiAgICAgLy8gT3BlbkdMIEVTIDIuMCBvbmx5IGhhcyB0d28gdmFsaWQgaW5kZXggdHlw
ZXMgKFVOU0lHTkVEX0JZVEUKICAgICAvLyBhbmQgVU5TSUdORURfU0hPUlQpLCBidXQgbWlnaHQg
YXMgd2VsbCBsZWF2ZSBvcGVuIHRoZQogICAgIC8vIHBvc3NpYmlsaXR5IG9mIGFkZGluZyBvdGhl
cnMuCiAgICAgTWF4SW5kZXhDYWNoZUVudHJ5IG1fbWF4SW5kZXhDYWNoZVs0XTsKLSAgICB1bnNp
Z25lZCBtX25leHRBdmFpbGFibGVDYWNoZUVudHJ5OworICAgIHVuc2lnbmVkIGludCBtX25leHRB
dmFpbGFibGVDYWNoZUVudHJ5OwogCiAgICAgLy8gQ2xlYXJzIGFsbCBvZiB0aGUgY2FjaGVkIG1h
eCBpbmRpY2VzLgogICAgIHZvaWQgY2xlYXJDYWNoZWRNYXhJbmRpY2VzKCk7CiAKICAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSB0aHJlZSBhc3NvY2lhdGVCdWZmZXJEYXRhKCku
Ci0gICAgYm9vbCBhc3NvY2lhdGVCdWZmZXJEYXRhSW1wbChBcnJheUJ1ZmZlciogYXJyYXksIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIGJvb2wgYXNzb2Np
YXRlQnVmZmVyRGF0YUltcGwoQXJyYXlCdWZmZXIqIGFycmF5LCBHQzNEaW50cHRyIGJ5dGVPZmZz
ZXQsIEdDM0RzaXplaXB0ciBieXRlTGVuZ3RoKTsKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gY2Fs
bGVkIGJ5IHRoZSB0d28gYXNzb2NpYXRlQnVmZmVyU3ViRGF0YSgpLgotICAgIGJvb2wgYXNzb2Np
YXRlQnVmZmVyU3ViRGF0YUltcGwobG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyKiBhcnJheSwgdW5z
aWduZWQgYXJyYXlCeXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKyAgICBib29sIGFz
c29jaWF0ZUJ1ZmZlclN1YkRhdGFJbXBsKEdDM0RpbnRwdHIgb2Zmc2V0LCBBcnJheUJ1ZmZlciog
YXJyYXksIEdDM0RpbnRwdHIgYXJyYXlCeXRlT2Zmc2V0LCBHQzNEc2l6ZWlwdHIgYnl0ZUxlbmd0
aCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2aXNpb24gNzU1MzEpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgewogCiAgICAgLy8gVGhpcyBmdW5j
dGlvbiBpcyBvbmx5IGZvciBkZXB0aC9zdGVuY2lsL2RlcHRoX3N0ZW5jaWwgYXR0YWNobWVudC4K
ICAgICAvLyBDdXJyZW50bHkgd2UgYXNzdW1lIHRoZXNlIGF0dGFjaG1lbnRzIGFyZSBhbGwgcmVu
ZGVyYnVmZmVycy4KLSAgICB1bnNpZ25lZCBsb25nIGdldEludGVybmFsRm9ybWF0KFdlYkdMT2Jq
ZWN0KiBidWZmZXIpCisgICAgR0MzRGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoV2ViR0xPYmplY3Qq
IGJ1ZmZlcikKICAgICB7CiAgICAgICAgIEFTU0VSVChidWZmZXIgJiYgYnVmZmVyLT5pc1JlbmRl
cmJ1ZmZlcigpKTsKICAgICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVy
YnVmZmVyKj4oYnVmZmVyKSktPmdldEludGVybmFsRm9ybWF0KCk7CkBAIC04Miw3ICs4Miw3IEBA
IFdlYkdMRnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIoV2ViR0wKICAgICBzZXRPYmplY3Qo
Y29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVGcmFtZWJ1ZmZlcigpKTsKIH0K
IAotdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2htZW50KHVuc2lnbmVkIGxvbmcgYXR0
YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXhUYXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwg
aW50IGxldmVsKQordm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2htZW50KEdDM0RlbnVt
IGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleFRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBH
QzNEaW50IGxldmVsKQogewogICAgIGlmICghb2JqZWN0KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTExMCw3ICsxMTAsNyBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnQodW5z
CiAgICAgfQogfQogCi12b2lkIFdlYkdMRnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnQodW5zaWdu
ZWQgbG9uZyBhdHRhY2htZW50LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQordm9p
ZCBXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2htZW50KEdDM0RlbnVtIGF0dGFjaG1lbnQsIFdl
YkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFvYmplY3QoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6
c2V0QXR0YWNobWVudCh1bnMKICAgICB9CiB9CiAKLVdlYkdMT2JqZWN0KiBXZWJHTEZyYW1lYnVm
ZmVyOjpnZXRBdHRhY2htZW50KHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCkgY29uc3QKK1dlYkdM
T2JqZWN0KiBXZWJHTEZyYW1lYnVmZmVyOjpnZXRBdHRhY2htZW50KEdDM0RlbnVtIGF0dGFjaG1l
bnQpIGNvbnN0CiB7CiAgICAgaWYgKCFvYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0x
NjgsNyArMTY4LDcgQEAgdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50KAog
ICAgICAgICByZXR1cm47CiB9CiAKLWludCBXZWJHTEZyYW1lYnVmZmVyOjpnZXRXaWR0aCgpIGNv
bnN0CitHQzNEc2l6ZWkgV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0V2lkdGgoKSBjb25zdAogewogICAg
IGlmICghb2JqZWN0KCkgfHwgIWlzQ29sb3JBdHRhY2hlZCgpKQogICAgICAgICByZXR1cm4gMDsK
QEAgLTE4MCw3ICsxODAsNyBAQCBpbnQgV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0V2lkdGgoKSBjb25z
dAogICAgIHJldHVybiAwOwogfQogCi1pbnQgV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0SGVpZ2h0KCkg
Y29uc3QKK0dDM0RzaXplaSBXZWJHTEZyYW1lYnVmZmVyOjpnZXRIZWlnaHQoKSBjb25zdAogewog
ICAgIGlmICghb2JqZWN0KCkgfHwgIWlzQ29sb3JBdHRhY2hlZCgpKQogICAgICAgICByZXR1cm4g
MDsKQEAgLTE5Miw3ICsxOTIsNyBAQCBpbnQgV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0SGVpZ2h0KCkg
Y29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgbG9uZyBXZWJHTEZyYW1lYnVmZmVy
OjpnZXRDb2xvckJ1ZmZlckZvcm1hdCgpIGNvbnN0CitHQzNEZW51bSBXZWJHTEZyYW1lYnVmZmVy
OjpnZXRDb2xvckJ1ZmZlckZvcm1hdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFvYmplY3QoKSB8fCAh
aXNDb2xvckF0dGFjaGVkKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjYwLDcgKzI2MCw3IEBA
IGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJlbmRlcmIKIHsKICAgICBBU1NFUlQo
b2JqZWN0KCkpOwogICAgIGJvb2wgaW5pdENvbG9yID0gZmFsc2UsIGluaXREZXB0aCA9IGZhbHNl
LCBpbml0U3RlbmNpbCA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxvbmcgbWFzayA9IDA7CisgICAg
R0MzRGJpdGZpZWxkIG1hc2sgPSAwOwogICAgIGlmIChpc1VuaW5pdGlhbGl6ZWQobV9jb2xvckF0
dGFjaG1lbnQuZ2V0KCkpKSB7CiAgICAgICAgIGluaXRDb2xvciA9IHRydWU7CiAgICAgICAgIG1h
c2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7CkBAIC0yODcsMTIgKzI4
NywxMiBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJiCiAgICAgaWYg
KGczZC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgZmxvYXQgY29sb3JDbGVhclZhbHVlW10gPSB7MCwgMCwgMCwg
MH0sIGRlcHRoQ2xlYXJWYWx1ZSA9IDA7Ci0gICAgaW50IHN0ZW5jaWxDbGVhclZhbHVlID0gMDsK
LSAgICB1bnNpZ25lZCBjaGFyIGNvbG9yTWFza1tdID0gezAsIDAsIDAsIDB9LCBkZXB0aE1hc2sg
PSAwOwotICAgIHVuc2lnbmVkIGludCBzdGVuY2lsTWFzayA9IDB4ZmZmZmZmZmY7Ci0gICAgYm9v
bCBpc1NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAgYm9vbCBpc0RpdGhlckVuYWJsZWQgPSBm
YWxzZTsKKyAgICBHQzNEZmxvYXQgY29sb3JDbGVhclZhbHVlW10gPSB7MCwgMCwgMCwgMH0sIGRl
cHRoQ2xlYXJWYWx1ZSA9IDA7CisgICAgR0MzRGludCBzdGVuY2lsQ2xlYXJWYWx1ZSA9IDA7Cisg
ICAgR0MzRGJvb2xlYW4gY29sb3JNYXNrW10gPSB7MCwgMCwgMCwgMH0sIGRlcHRoTWFzayA9IDA7
CisgICAgR0MzRHVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmOworICAgIEdDM0Rib29sZWFu
IGlzU2Npc3NvckVuYWJsZWQgPSAwOworICAgIEdDM0Rib29sZWFuIGlzRGl0aGVyRW5hYmxlZCA9
IDA7CiAgICAgaWYgKGluaXRDb2xvcikgewogICAgICAgICBnM2QtPmdldEZsb2F0dihHcmFwaGlj
c0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUUsIGNvbG9yQ2xlYXJWYWx1ZSk7CiAgICAgICAg
IGczZC0+Z2V0Qm9vbGVhbnYoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSywgY29s
b3JNYXNrKTsKQEAgLTMwNyw3ICszMDcsNyBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRp
YWxpemVSZW5kZXJiCiAgICAgfQogICAgIGlmIChpbml0U3RlbmNpbCkgewogICAgICAgICBnM2Qt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0NMRUFSX1ZBTFVFLCAmc3Rl
bmNpbENsZWFyVmFsdWUpOwotICAgICAgICBnM2QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxpbnQqPigmc3RlbmNpbE1h
c2spKTsKKyAgICAgICAgZzNkLT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJ
TF9XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0MzRGludCo+KCZzdGVuY2lsTWFzaykpOwog
ICAgICAgICBnM2QtPmNsZWFyU3RlbmNpbCgwKTsKICAgICAgICAgZzNkLT5zdGVuY2lsTWFzaygw
eGZmZmZmZmZmKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiA3NTUzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTUgKzQy
LDE1IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+
IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIAotICAgIHZvaWQgc2V0QXR0YWNobWVu
dCh1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4VGFyZ2V0LCBXZWJH
TFRleHR1cmUqLCBpbnQgbGV2ZWwpOwotICAgIHZvaWQgc2V0QXR0YWNobWVudCh1bnNpZ25lZCBs
b25nIGF0dGFjaG1lbnQsIFdlYkdMUmVuZGVyYnVmZmVyKik7CisgICAgdm9pZCBzZXRBdHRhY2ht
ZW50KEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleFRhcmdldCwgV2ViR0xUZXh0dXJl
KiwgR0MzRGludCBsZXZlbCk7CisgICAgdm9pZCBzZXRBdHRhY2htZW50KEdDM0RlbnVtIGF0dGFj
aG1lbnQsIFdlYkdMUmVuZGVyYnVmZmVyKik7CiAgICAgLy8gSWYgYW4gb2JqZWN0IGlzIGF0dGFj
aGVkIHRvIHRoZSBmcmFtZWJ1ZmZlciwgcmVtb3ZlIGl0LgogICAgIHZvaWQgcmVtb3ZlQXR0YWNo
bWVudChXZWJHTE9iamVjdCopOwotICAgIFdlYkdMT2JqZWN0KiBnZXRBdHRhY2htZW50KHVuc2ln
bmVkIGxvbmcpIGNvbnN0OworICAgIFdlYkdMT2JqZWN0KiBnZXRBdHRhY2htZW50KEdDM0RlbnVt
KSBjb25zdDsKIAotICAgIHVuc2lnbmVkIGxvbmcgZ2V0Q29sb3JCdWZmZXJGb3JtYXQoKSBjb25z
dDsKLSAgICBpbnQgZ2V0V2lkdGgoKSBjb25zdDsKLSAgICBpbnQgZ2V0SGVpZ2h0KCkgY29uc3Q7
CisgICAgR0MzRGVudW0gZ2V0Q29sb3JCdWZmZXJGb3JtYXQoKSBjb25zdDsKKyAgICBHQzNEc2l6
ZWkgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICBHQzNEc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CiAK
ICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIGJlZm9yZSBkcmF3QXJyYXksIGRy
YXdFbGVtZW50cywgY2xlYXIsCiAgICAgLy8gcmVhZFBpeGVscywgY29weVRleEltYWdlMkQsIGNv
cHlUZXhTdWJJbWFnZTJEIGlmIHRoaXMgZnJhbWVidWZmZXIgaXMKQEAgLTkwLDggKzkwLDggQEAg
cHJpdmF0ZToKIAogICAgIGJvb2wgbV9oYXNFdmVyQmVlbkJvdW5kOwogCi0gICAgdW5zaWduZWQg
bG9uZyBtX3RleFRhcmdldDsKLSAgICBpbnQgbV90ZXhMZXZlbDsKKyAgICBHQzNEZW51bSBtX3Rl
eFRhcmdldDsKKyAgICBHQzNEaW50IG1fdGV4TGV2ZWw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5j
cHAJKHJldmlzaW9uIDc1NTMxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQ
cm9ncmFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBib29sIFdlYkdMUHJv
Z3JhbTo6Y2FjaGVBY3RpdmVBdHRyaWJMb2NhCiAgICAgaWYgKCFtX2xpbmtTdGF0dXMpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGludCBudW1BdHRyaWJzID0gMDsKKyAgICBHQzNEaW50
IG51bUF0dHJpYnMgPSAwOwogICAgIGNvbnRleHQzZC0+Z2V0UHJvZ3JhbWl2KG9iamVjdCgpLCBH
cmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX0FUVFJJQlVURVMsICZudW1BdHRyaWJzKTsKICAgICBt
X2FjdGl2ZUF0dHJpYkxvY2F0aW9ucy5yZXNpemUoc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1BdHRy
aWJzKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BdHRyaWJzOyArK2kpIHsKQEAgLTgy
LDIxICs4MiwyMSBAQCBib29sIFdlYkdMUHJvZ3JhbTo6Y2FjaGVBY3RpdmVBdHRyaWJMb2NhCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWludCBXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0dHJpYkxv
Y2F0aW9ucygpIGNvbnN0Cit1bnNpZ25lZCBXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0dHJpYkxv
Y2F0aW9ucygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obV9hY3RpdmVB
dHRyaWJMb2NhdGlvbnMuc2l6ZSgpKTsKKyAgICByZXR1cm4gbV9hY3RpdmVBdHRyaWJMb2NhdGlv
bnMuc2l6ZSgpOwogfQogCi1pbnQgV2ViR0xQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJMb2NhdGlv
bihpbnQgaW5kZXgpIGNvbnN0CitHQzNEaW50IFdlYkdMUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmli
TG9jYXRpb24oR0MzRHVpbnQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgaWYgKGluZGV4IDwgMCB8fCBp
bmRleCA+PSBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKSkKKyAgICBpZiAoaW5kZXggPj0gbnVt
QWN0aXZlQXR0cmliTG9jYXRpb25zKCkpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4g
bV9hY3RpdmVBdHRyaWJMb2NhdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCldOworICAg
IHJldHVybiBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9uc1tpbmRleF07CiB9CiAKIGJvb2wgV2ViR0xQ
cm9ncmFtOjppc1VzaW5nVmVydGV4QXR0cmliMCgpIGNvbnN0CiB7Ci0gICAgZm9yIChpbnQgaWkg
PSAwOyBpaSA8IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOyArK2lpKSB7CisgICAgZm9yICh1
bnNpZ25lZCBpaSA9IDA7IGlpIDwgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7ICsraWkpIHsK
ICAgICAgICAgaWYgKCFnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpaSkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFByb2dyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFByb2dyYW0uaAkocmV2aXNpb24gNzU1MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFByb2dyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTUgKzQ1LDE1IEBAIHB1Ymxp
YzoKICAgICAvLyBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9uKCkgaXMgb25seSBjYWxsZWQgb25j
ZSBhZnRlciBsaW5rUHJvZ3JhbSgpCiAgICAgLy8gc3VjY2VlZHMuCiAgICAgYm9vbCBjYWNoZUFj
dGl2ZUF0dHJpYkxvY2F0aW9ucygpOwotICAgIGludCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMo
KSBjb25zdDsKLSAgICBpbnQgZ2V0QWN0aXZlQXR0cmliTG9jYXRpb24oaW50IGluZGV4KSBjb25z
dDsKKyAgICB1bnNpZ25lZCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKSBjb25zdDsKKyAgICBH
QzNEaW50IGdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKEdDM0R1aW50IGluZGV4KSBjb25zdDsKIAog
ICAgIGJvb2wgaXNVc2luZ1ZlcnRleEF0dHJpYjAoKSBjb25zdDsKIAogICAgIGJvb2wgZ2V0TGlu
a1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fbGlua1N0YXR1czsgfQogICAgIHZvaWQgc2V0TGlu
a1N0YXR1cyhib29sIHN0YXR1cykgeyBtX2xpbmtTdGF0dXMgPSBzdGF0dXM7IH0KIAotICAgIHVu
c2lnbmVkIGxvbmcgZ2V0TGlua0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5rQ291bnQ7IH0K
KyAgICB1bnNpZ25lZCBnZXRMaW5rQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmtDb3VudDsg
fQogCiAgICAgLy8gVGhpcyBpcyB0byBiZSBjYWxsZWQgZXZlcnl0aW1lIGFmdGVyIHRoZSBwcm9n
cmFtIGlzIHN1Y2Nlc3NmdWxseSBsaW5rZWQuCiAgICAgLy8gV2UgZG9uJ3QgZGVhbCB3aXRoIGlu
dGVnZXIgb3ZlcmZsb3cgaGVyZSwgYXNzdW1pbmcgaW4gcmVhbGl0eSBhIHByb2dyYW0KQEAgLTcy
LDEzICs3MiwxMyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1By
b2dyYW0oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBWZWN0b3I8aW50PiBtX2FjdGl2
ZUF0dHJpYkxvY2F0aW9uczsKKyAgICBWZWN0b3I8R0MzRGludD4gbV9hY3RpdmVBdHRyaWJMb2Nh
dGlvbnM7CiAKLSAgICBib29sIG1fbGlua1N0YXR1czsKKyAgICBHQzNEaW50IG1fbGlua1N0YXR1
czsKIAogICAgIC8vIFRoaXMgaXMgdXNlZCB0byB0cmFjayB3aGV0aGVyIGEgV2ViR0xVbmlmb3Jt
TG9jYXRpb24gYmVsb25ncyB0byB0aGlzCiAgICAgLy8gcHJvZ3JhbSBvciBub3QuCi0gICAgdW5z
aWduZWQgbG9uZyBtX2xpbmtDb3VudDsKKyAgICB1bnNpZ25lZCBtX2xpbmtDb3VudDsKIAogICAg
IFJlZlB0cjxXZWJHTFNoYWRlcj4gbV92ZXJ0ZXhTaGFkZXI7CiAgICAgUmVmUHRyPFdlYkdMU2hh
ZGVyPiBtX2ZyYWdtZW50U2hhZGVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oCShyZXZpc2lvbiA3NTUzMSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDIwICszOSwyMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFJlbmRl
cmJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCi0gICAgdm9pZCBzZXRJ
bnRlcm5hbEZvcm1hdCh1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0KQorICAgIHZvaWQgc2V0
SW50ZXJuYWxGb3JtYXQoR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQpCiAgICAgewogICAgICAgICBt
X2ludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7CiAgICAgICAgIG1faW5pdGlhbGl6ZWQg
PSBmYWxzZTsKICAgICB9Ci0gICAgdW5zaWduZWQgbG9uZyBnZXRJbnRlcm5hbEZvcm1hdCgpIGNv
bnN0IHsgcmV0dXJuIG1faW50ZXJuYWxGb3JtYXQ7IH0KKyAgICBHQzNEZW51bSBnZXRJbnRlcm5h
bEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJuYWxGb3JtYXQ7IH0KIAotICAgIHZvaWQg
c2V0U2l6ZSh1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKKyAgICB2
b2lkIHNldFNpemUoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQogICAgIHsKICAg
ICAgICAgbV93aWR0aCA9IHdpZHRoOwogICAgICAgICBtX2hlaWdodCA9IGhlaWdodDsKICAgICB9
Ci0gICAgdW5zaWduZWQgbG9uZyBnZXRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0K
LSAgICB1bnNpZ25lZCBsb25nIGdldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9
CisgICAgR0MzRHNpemVpIGdldFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAg
IEdDM0RzaXplaSBnZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQogCiAgICAg
dm9pZCBzZXRJc1ZhbGlkKGJvb2wgaXNWYWxpZCkgeyBtX2lzVmFsaWQgPSBpc1ZhbGlkOyB9CiAg
ICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9CkBAIC03Miw5ICs3
Miw5IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyYnVm
ZmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdW5zaWduZWQgbG9uZyBtX2ludGVy
bmFsRm9ybWF0OworICAgIEdDM0RlbnVtIG1faW50ZXJuYWxGb3JtYXQ7CiAgICAgYm9vbCBtX2lu
aXRpYWxpemVkOwotICAgIHVuc2lnbmVkIGxvbmcgbV93aWR0aCwgbV9oZWlnaHQ7CisgICAgR0Mz
RHNpemVpIG1fd2lkdGgsIG1faGVpZ2h0OwogICAgIGJvb2wgbV9pc1ZhbGlkOyAvLyBUaGlzIGlz
IG9ubHkgZmFsc2UgaWYgaW50ZXJuYWxGb3JtYXQgaXMgREVQVEhfU1RFTkNJTCBhbmQgcGFja2Vk
X2RlcHRoX3N0ZW5jaWwgaXMgbm90IHN1cHBvcnRlZC4KIAogICAgIGJvb2wgbV9oYXNFdmVyQmVl
bkJvdW5kOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA3NTUzMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc0LDE0ICs3NCwxNCBAQCBuYW1lc3BhY2UgewogICAgICAgICByZXR1cm4gb2JqZWN0ID8gb2Jq
ZWN0LT5vYmplY3QoKSA6IDA7CiAgICAgfQogCi0gICAgdm9pZCBjbGlwMUQobG9uZyBzdGFydCwg
bG9uZyByYW5nZSwgbG9uZyBzb3VyY2VSYW5nZSwgbG9uZyogY2xpcHBlZFN0YXJ0LCBsb25nKiBj
bGlwcGVkUmFuZ2UpCisgICAgdm9pZCBjbGlwMUQoR0MzRGludCBzdGFydCwgR0MzRHNpemVpIHJh
bmdlLCBHQzNEc2l6ZWkgc291cmNlUmFuZ2UsIEdDM0RpbnQqIGNsaXBwZWRTdGFydCwgR0MzRHNp
emVpKiBjbGlwcGVkUmFuZ2UpCiAgICAgewogICAgICAgICBBU1NFUlQoY2xpcHBlZFN0YXJ0ICYm
IGNsaXBwZWRSYW5nZSk7CiAgICAgICAgIGlmIChzdGFydCA8IDApIHsKICAgICAgICAgICAgIHJh
bmdlICs9IHN0YXJ0OwogICAgICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICB9Ci0gICAgICAg
IGxvbmcgZW5kID0gc3RhcnQgKyByYW5nZTsKKyAgICAgICAgR0MzRGludCBlbmQgPSBzdGFydCAr
IHJhbmdlOwogICAgICAgICBpZiAoZW5kID4gc291cmNlUmFuZ2UpCiAgICAgICAgICAgICByYW5n
ZSAtPSBlbmQgLSBzb3VyY2VSYW5nZTsKICAgICAgICAgKmNsaXBwZWRTdGFydCA9IHN0YXJ0OwpA
QCAtODksOSArODksOSBAQCBuYW1lc3BhY2UgewogICAgIH0KIAogICAgIC8vIFJldHVybnMgZmFs
c2UgaWYgbm8gY2xpcHBpbmcgaXMgbmVjZXNzYXJ5LCBpLmUuLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
IHN0YXkgdGhlIHNhbWUuCi0gICAgYm9vbCBjbGlwMkQobG9uZyB4LCBsb25nIHksIGxvbmcgd2lk
dGgsIGxvbmcgaGVpZ2h0LAotICAgICAgICAgICAgICAgIGxvbmcgc291cmNlV2lkdGgsIGxvbmcg
c291cmNlSGVpZ2h0LAotICAgICAgICAgICAgICAgIGxvbmcqIGNsaXBwZWRYLCBsb25nKiBjbGlw
cGVkWSwgbG9uZyogY2xpcHBlZFdpZHRoLCBsb25nKmNsaXBwZWRIZWlnaHQpCisgICAgYm9vbCBj
bGlwMkQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwKKyAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgc291cmNlV2lkdGgsIEdDM0RzaXplaSBz
b3VyY2VIZWlnaHQsCisgICAgICAgICAgICAgICAgR0MzRGludCogY2xpcHBlZFgsIEdDM0RpbnQq
IGNsaXBwZWRZLCBHQzNEc2l6ZWkqIGNsaXBwZWRXaWR0aCwgR0MzRHNpemVpKmNsaXBwZWRIZWln
aHQpCiAgICAgewogICAgICAgICBBU1NFUlQoY2xpcHBlZFggJiYgY2xpcHBlZFkgJiYgY2xpcHBl
ZFdpZHRoICYmIGNsaXBwZWRIZWlnaHQpOwogICAgICAgICBjbGlwMUQoeCwgd2lkdGgsIHNvdXJj
ZVdpZHRoLCBjbGlwcGVkWCwgY2xpcHBlZFdpZHRoKTsKQEAgLTIwOCwxMiArMjA4LDEyIEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmUKICAgICBtX3N0ZW5jaWxGdW5j
TWFza0JhY2sgPSAweEZGRkZGRkZGOwogICAgIG1fdmVydGV4QXR0cmliU3RhdGUuY2xlYXIoKTsK
IAotICAgIGludCBudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKKyAgICBHQzNEaW50
IG51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAwOwogICAgIG1fY29udGV4dC0+Z2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRT
LCAmbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CiAgICAgbV90ZXh0dXJlVW5pdHMuY2xl
YXIoKTsKICAgICBtX3RleHR1cmVVbml0cy5yZXNpemUobnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cyk7CiAKLSAgICBpbnQgbnVtVmVydGV4QXR0cmlicyA9IDA7CisgICAgR0MzRGludCBudW1W
ZXJ0ZXhBdHRyaWJzID0gMDsKICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZudW1WZXJ0ZXhBdHRyaWJzKTsKICAgICBtX21h
eFZlcnRleEF0dHJpYnMgPSBudW1WZXJ0ZXhBdHRyaWJzOwogCkBAIC0zMDAsMTIgKzMwMCwxMiBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZShpbnQgCiAgICAgbV9jb250ZXh0
LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOwogfQogCi1pbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpzaXplSW5CeXRlcyhpbnQgdHlwZSkKK3Vuc2lnbmVkIGludCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnNpemVJbkJ5dGVzKEdDM0RlbnVtIHR5cGUpCiB7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+
c2l6ZUluQnl0ZXModHlwZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphY3Rp
dmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCkBAIC0zMzMsNyArMzMzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmF0dGFjaFNoYWRlcgogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRBdHRy
aWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7
CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFt
KSkKQEAgLTM0NCw3ICszNDQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0
dHJpYkxvCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdl
YkdMQnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEJ1ZmZlciogYnVmZmVy
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCkBAIC0zNzQsNyArMzc0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJpbmRCdWZmZXIodQogfQogCiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
aW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGJ1
ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Ymlu
ZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciogYnVmZmVyLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCkBAIC0zOTQsNyArMzk0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJpbmRGcmFtZWJ1ZgogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyLCBFeGNlcHRpb25D
b2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKEdD
M0RlbnVtIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQpAQCAtNDE1LDcgKzQxNSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5k
UmVuZGVyYnUKIH0KIAogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUoR0MzRGVudW0g
dGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKQEAgLTQyNCw3ICs0
MjQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUoCiAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpbnQgbWF4TGV2ZWwgPSAw
OworICAgIEdDM0RpbnQgbWF4TGV2ZWwgPSAwOwogICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKICAgICAgICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVU
ZXh0dXJlVW5pdF0ubV90ZXh0dXJlMkRCaW5kaW5nID0gdGV4dHVyZTsKICAgICAgICAgbWF4TGV2
ZWwgPSBtX21heFRleHR1cmVMZXZlbDsKQEAgLTQ1MSw3ICs0NTEsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUoCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kQ29sb3IoZmxv
YXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YmxlbmRDb2xvcihHQzNEZmxvYXQgcmVkLCBHQzNEZmxvYXQgZ3Jl
ZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpCiB7CiAgICAgaWYgKGlzQ29udGV4
dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDU5LDcgKzQ1OSw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpibGVuZENvbG9yKGYKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlv
bih1bnNpZ25lZCBsb25nIG1vZGUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRF
cXVhdGlvbihHQzNEZW51bSBtb2RlKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZh
bGlkYXRlQmxlbmRFcXVhdGlvbihtb2RlKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDY3LDcgKzQ2
Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW8KICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgbW9kZVJHQiwgdW5zaWdu
ZWQgbG9uZyBtb2RlQWxwaGEpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVh
dGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKIHsKICAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24obW9kZVJHQikg
fHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbihtb2RlQWxwaGEpKQogICAgICAgICByZXR1cm47CkBA
IC00NzYsNyArNDc2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRp
bwogfQogCiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmModW5zaWduZWQg
bG9uZyBzZmFjdG9yLCB1bnNpZ25lZCBsb25nIGRmYWN0b3IpCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpCiB7
CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKHNm
YWN0b3IsIGRmYWN0b3IpKQogICAgICAgICByZXR1cm47CkBAIC00ODQsNyArNDg0LDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuYyh1bgogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9ICAgICAgIAogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6YmxlbmRGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcg
ZHN0UkdCLCB1bnNpZ25lZCBsb25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKQor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNy
Y1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxw
aGEpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVCbGVuZEZ1bmNGYWN0
b3JzKHNyY1JHQiwgZHN0UkdCKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDkyLDcgKzQ5Miw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmNTZXAKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNpemUsIHVuc2lnbmVkIGxvbmcg
dXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1
ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0gdXNh
Z2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKQEAgLTUxMSw3ICs1MTEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YnVmZmVyRGF0YSh1CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEodW5zaWduZWQg
bG9uZyB0YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLCB1bnNpZ25lZCBsb25nIHVzYWdlLCBFeGNl
cHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCkBAIC01MzQsNyArNTM0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1
ZmZlckRhdGEodQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIHVuc2lnbmVkIGxvbmcgdXNhZ2UsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0g
dGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCkBAIC01NTcsNyArNTU3LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZl
ckRhdGEodQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50cHRyIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKQEAgLTU3
OCw3ICs1NzgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zm
c2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
cHRyIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCkBAIC01OTks
NyArNTk5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdAogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0KQorR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAg
ICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwpA
QCAtNjE2LDcgKzYxNiw3IEBAIHVuc2lnbmVkIGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
aGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y2xlYXIodW5zaWduZWQgbG9uZyBtYXNrKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTYzMiw3ICs2MzIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y2xlYXIodW5zaWduCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOwogfQog
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJDb2xvcihmbG9hdCByLCBmbG9hdCBn
LCBmbG9hdCBiLCBmbG9hdCBhKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyQ29s
b3IoR0MzRGZsb2F0IHIsIEdDM0RmbG9hdCBnLCBHQzNEZmxvYXQgYiwgR0MzRGZsb2F0IGEpCiB7
CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjQ4LDcgKzY0
OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhckNvbG9yKGYKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y2xlYXJEZXB0aChmbG9hdCBkZXB0aCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjbGVhckRlcHRoKEdDM0RmbG9hdCBkZXB0aCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQogICAgICAgICByZXR1cm47CkBAIC02NTYsNyArNjU2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNsZWFyRGVwdGgoZgogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhclN0ZW5jaWwobG9uZyBz
KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCiB7
CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjY0LDcgKzY2
NCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhclN0ZW5jaWwKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxw
aGEpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJl
ZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhh
KQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTY4MSw3
ICs2ODEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcGlsZVNoYWRlCiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVs
LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0
aCwgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTcwNSw3ICs3MDUsOCBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y29weVRleEltYWdlCiAgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpCiAgICAg
ICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CiAgICAgZWxzZSB7Ci0gICAgICAgIGxv
bmcgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7CisgICAg
ICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOworICAgICAgICBHQzNEc2l6ZWkgY2xpcHBl
ZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OwogICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVp
Z2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdo
dCkpIHsKICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZSh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0LCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgbV91bnBhY2tBbGlnbm1lbnQpOwpAQCAt
NzIxLDcgKzcyMiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y29weVRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxv
bmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBsb25nIHgsIGxvbmcgeSwgbG9u
ZyB3aWR0aCwgbG9uZyBoZWlnaHQpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAg
ICByZXR1cm47CkBAIC03NDcsMTAgKzc0OCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y29weVRleFN1YkltCiAgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpCiAgICAgICAgIG1fY29u
dGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
eCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGxvbmcgY2xpcHBlZFgs
IGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7CisgICAgICAgIEdDM0RpbnQg
Y2xpcHBlZFgsIGNsaXBwZWRZOworICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlw
cGVkSGVpZ2h0OwogICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJv
dW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlw
cGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGxvbmcgZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJn
ZXQsIGxldmVsKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdHlwZSA9IHRleC0+Z2V0VHlw
ZSh0YXJnZXQsIGxldmVsKTsKKyAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCA9IHRleC0+Z2V0
SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CisgICAgICAgICAgICBHQzNEZW51bSB0eXBl
ID0gdGV4LT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpOwogICAgICAgICAgICAgT3duQXJyYXlQdHI8
dW5zaWduZWQgY2hhcj4gemVybzsKICAgICAgICAgICAgIGlmICh3aWR0aCAmJiBoZWlnaHQpIHsK
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZTsKQEAgLTgyMiw3ICs4MjQsNyBAQCBQ
YXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJlbmRlCiAgICAgcmV0dXJuIG87CiB9
CiAKLVBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
U2hhZGVyKHVuc2lnbmVkIGxvbmcgdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRy
PFdlYkdMU2hhZGVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVNoYWRlcihHQzNEZW51
bSB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAg
IGlmIChpc0NvbnRleHRMb3N0KCkpCkBAIC04MzIsMTIgKzgzNCwxMiBAQCBQYXNzUmVmUHRyPFdl
YkdMU2hhZGVyPiBXZWJHTFJlbmRlcmluZ0NvCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAg
ICAKLSAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IG8gPSBXZWJHTFNoYWRlcjo6Y3JlYXRlKHRoaXMs
IHN0YXRpY19jYXN0PEdyYXBoaWNzQ29udGV4dDNEOjpXZWJHTEVudW1UeXBlPih0eXBlKSk7Cisg
ICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBvID0gV2ViR0xTaGFkZXI6OmNyZWF0ZSh0aGlzLCB0eXBl
KTsKICAgICBhZGRPYmplY3Qoby5nZXQoKSk7CiAgICAgcmV0dXJuIG87CiB9CiAKLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjdWxsRmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkKIHsKICAgICBpZiAo
aXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CkBAIC04NTksNyArODYxLDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUJ1ZmZlcgogICAgICAgICAgICAgc3RhdGUu
Ynl0ZXNQZXJFbGVtZW50ID0gMDsKICAgICAgICAgICAgIHN0YXRlLnNpemUgPSA0OwogICAgICAg
ICAgICAgc3RhdGUudHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAgICAg
IHN0YXRlLm5vcm1hbGl6ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHN0YXRlLm5vcm1hbGl6ZWQg
PSAwOwogICAgICAgICAgICAgc3RhdGUuc3RyaWRlID0gMTY7CiAgICAgICAgICAgICBzdGF0ZS5v
cmlnaW5hbFN0cmlkZSA9IDA7CiAgICAgICAgICAgICBzdGF0ZS5vZmZzZXQgPSAwOwpAQCAtOTIx
LDcgKzkyMyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVUZXh0dXIKICAg
ICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnQodGV4dHVyZSk7CiB9
CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aEZ1bmModW5zaWduZWQgbG9uZyBm
dW5jKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoRnVuYyhHQzNEZW51bSBmdW5j
KQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTkyOSw3
ICs5MzEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhGdW5jKHVuCiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlcHRoTWFzayhib29sIGZsYWcpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTM3LDcgKzkzOSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpkZXB0aE1hc2soYm8KICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhSYW5nZShmbG9hdCB6
TmVhciwgZmxvYXQgekZhcikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aFJhbmdl
KEdDM0RmbG9hdCB6TmVhciwgR0MzRGZsb2F0IHpGYXIpCiB7CiAgICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTY0LDcgKzk2Niw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIKIH0KIAogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTcyLDcgKzk3
NCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKHVuc2kKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQpAQCAtOTgzLDcgKzk4NSw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGUKICAgICB9CiAgICAg
CiAgICAgaWYgKGluZGV4IDwgbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCi0gICAgICAgIG1f
dmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLmVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgbV92ZXJ0
ZXhBdHRyaWJTdGF0ZVtpbmRleF0uZW5hYmxlZCA9IDA7CiAKICAgICBpZiAoaW5kZXggPiAwIHx8
IGlzR0xFUzJDb21wbGlhbnQoKSkgewogICAgICAgICBtX2NvbnRleHQtPmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShpbmRleCk7CkBAIC05OTEsNyArOTkzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRpc2FibGVWZXJ0ZQogICAgIH0KIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZSh1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNp
Z25lZCBsb25nIHR5cGUsIGxvbmcgb2Zmc2V0KQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUs
IEdDM0RpbnRwdHIgb2Zmc2V0KQogewogICAgIGlmICghbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTk5LDI4ICsxMDAxLDI2IEBAIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUVsZW0KICAgICBpZiAob2Zmc2V0IDwgMCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdW5zaWduZWQgbG9uZyB1b2Zmc2V0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZz4ob2Zmc2V0KTsKLQogICAgIGlmICh0eXBlID09IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCkgewogICAgICAgICAvLyBGb3IgYW4gdW5zaWduZWQg
c2hvcnQgYXJyYXksIG9mZnNldCBtdXN0IGJlIGRpdmlzaWJsZSBieSAyIGZvciBhbGlnbm1lbnQg
cmVhc29ucy4KLSAgICAgICAgaWYgKHVvZmZzZXQgJiAxKQorICAgICAgICBpZiAob2Zmc2V0ICUg
MikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvLyBNYWtlIHVvZmZzZXQg
YW4gZWxlbWVudCBvZmZzZXQuCi0gICAgICAgIHVvZmZzZXQgLz0gMjsKKyAgICAgICAgb2Zmc2V0
IC89IDI7CiAKLSAgICAgICAgdW5zaWduZWQgbG9uZyBuID0gbV9ib3VuZEVsZW1lbnRBcnJheUJ1
ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gMjsKLSAgICAgICAgaWYgKHVvZmZzZXQgPiBuIHx8IGNvdW50
ID4gbiAtIHVvZmZzZXQpCisgICAgICAgIEdDM0RzaXplaXB0ciBuID0gbV9ib3VuZEVsZW1lbnRB
cnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gMjsKKyAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwg
Y291bnQgPiBuIC0gb2Zmc2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAg
ICB1bnNpZ25lZCBsb25nIG4gPSBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3Ro
KCk7Ci0gICAgICAgIGlmICh1b2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSB1b2Zmc2V0KQorICAg
ICAgICBHQzNEc2l6ZWlwdHIgbiA9IG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5n
dGgoKTsKKyAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSh1
bnNpZ25lZCBsb25nIHR5cGUsIGxvbmcmIG51bUVsZW1lbnRzUmVxdWlyZWQpCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKEdDM0RlbnVt
IHR5cGUsIGludCYgbnVtRWxlbWVudHNSZXF1aXJlZCkKIHsKICAgICAvLyBQZXJmb3JtcyBjb25z
ZXJ2YXRpdmUgdmFsaWRhdGlvbiBieSBjYWNoaW5nIGEgbWF4aW11bSBpbmRleCBvZgogICAgIC8v
IHRoZSBnaXZlbiB0eXBlIHBlciBlbGVtZW50IGFycmF5IGJ1ZmZlci4gSWYgYWxsIG9mIHRoZSBi
b3VuZApAQCAtMTAzMSwyOCArMTAzMSwyOCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVJbmRlCiAgICAgaWYgKCFtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG1fYm91bmRFbGVt
ZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKKyAgICBHQzNEc2l6ZWlwdHIgbnVtRWxlbWVu
dHMgPSBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCk7CiAgICAgLy8gVGhl
IGNhc2UgY291bnQ9PTAgaXMgYWxyZWFkeSBkZWFsdCB3aXRoIGluIGRyYXdFbGVtZW50cyBiZWZv
cmUgdmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlLgogICAgIGlmICghbnVtRWxlbWVudHMp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjb25zdCBBcnJheUJ1ZmZlciogYnVmZmVyID0g
bV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCk7CiAgICAgQVNT
RVJUKGJ1ZmZlcik7CiAKLSAgICBsb25nIG1heEluZGV4ID0gbV9ib3VuZEVsZW1lbnRBcnJheUJ1
ZmZlci0+Z2V0Q2FjaGVkTWF4SW5kZXgodHlwZSk7CisgICAgaW50IG1heEluZGV4ID0gbV9ib3Vu
ZEVsZW1lbnRBcnJheUJ1ZmZlci0+Z2V0Q2FjaGVkTWF4SW5kZXgodHlwZSk7CiAgICAgaWYgKG1h
eEluZGV4IDwgMCkgewogICAgICAgICAvLyBDb21wdXRlIHRoZSBtYXhpbXVtIGluZGV4IGluIHRo
ZSBlbnRpcmUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gdHlwZSBvZiBpbmRleC4KICAgICAgICAgc3dp
dGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEU6IHsKLSAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHAgPSBzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oYnVmZmVyLT5kYXRhKCkpOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCi0gICAgICAgICAgICAgICAgbWF4
SW5kZXggPSBtYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGxvbmc+KHBbaV0pKTsKKyAgICAgICAg
ICAgIGNvbnN0IEdDM0R1Ynl0ZSogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1Ynl0ZSo+KGJ1
ZmZlci0+ZGF0YSgpKTsKKyAgICAgICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwg
bnVtRWxlbWVudHM7IGkrKykKKyAgICAgICAgICAgICAgICBtYXhJbmRleCA9IG1heChtYXhJbmRl
eCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDogewotICAg
ICAgICAgICAgbnVtRWxlbWVudHMgLz0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKLSAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
c2hvcnQqPihidWZmZXItPmRhdGEoKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtRWxlbWVudHM7IGkrKykKLSAgICAgICAgICAgICAgICBtYXhJbmRleCA9IG1heCht
YXhJbmRleCwgc3RhdGljX2Nhc3Q8bG9uZz4ocFtpXSkpOworICAgICAgICAgICAgbnVtRWxlbWVu
dHMgLz0gc2l6ZW9mKEdDM0R1c2hvcnQpOworICAgICAgICAgICAgY29uc3QgR0MzRHVzaG9ydCog
cCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQqPihidWZmZXItPmRhdGEoKSk7CisgICAg
ICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCisg
ICAgICAgICAgICAgICAgbWF4SW5kZXggPSBtYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4o
cFtpXSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoK
QEAgLTEwNzEsOSArMTA3MSwxMCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVJbmRlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZSh1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25l
ZCBsb25nIHR5cGUsIGxvbmcgb2Zmc2V0LCBsb25nJiBudW1FbGVtZW50c1JlcXVpcmVkKQorYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoR0MzRHNp
emVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgaW50JiBudW1FbGVt
ZW50c1JlcXVpcmVkKQogewotICAgIGxvbmcgbGFzdEluZGV4ID0gLTE7CisgICAgQVNTRVJUKGNv
dW50ID49IDAgJiYgb2Zmc2V0ID49IDApOworICAgIGludCBsYXN0SW5kZXggPSAtMTsKIAogICAg
IGlmICghbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTA4NiwyMCArMTA4NywyMCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVJbmRlCiAgICAgaWYgKCFtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlC
dWZmZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdW5zaWduZWQgbG9uZyB1b2Zm
c2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ob2Zmc2V0KTsKKyAgICB1bnNpZ25lZCBs
b25nIHVvZmZzZXQgPSBvZmZzZXQ7CiAgICAgdW5zaWduZWQgbG9uZyBuID0gY291bnQ7CiAKICAg
ICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQpIHsKICAgICAg
ICAgLy8gTWFrZSB1b2Zmc2V0IGFuIGVsZW1lbnQgb2Zmc2V0LgotICAgICAgICB1b2Zmc2V0IC89
IDI7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgc2hvcnQqPihtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlC
dWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZzZXQ7CisgICAgICAgIHVvZmZzZXQgLz0gc2l6ZW9mKEdD
M0R1c2hvcnQpOworICAgICAgICBjb25zdCBHQzNEdXNob3J0KiBwID0gc3RhdGljX2Nhc3Q8Y29u
c3QgR0MzRHVzaG9ydCo+KG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1
ZmZlcigpLT5kYXRhKCkpICsgdW9mZnNldDsKICAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKICAg
ICAgICAgICAgIGlmICgqcCA+IGxhc3RJbmRleCkKICAgICAgICAgICAgICAgICBsYXN0SW5kZXgg
PSAqcDsKICAgICAgICAgICAgICsrcDsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAodHlwZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KG1fYm91bmRF
bGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRhKCkpICsgdW9mZnNl
dDsKKyAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVi
eXRlKj4obV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRh
dGEoKSkgKyB1b2Zmc2V0OwogICAgICAgICB3aGlsZSAobi0tID4gMCkgewogICAgICAgICAgICAg
aWYgKCpwID4gbGFzdEluZGV4KQogICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9ICpwOwpAQCAt
MTExMiw3ICsxMTEzLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5k
ZQogICAgIHJldHVybiBudW1FbGVtZW50c1JlcXVpcmVkID4gMDsKIH0KIAotYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlUmVuZGVyaW5nU3RhdGUobG9uZyBudW1FbGVtZW50c1Jl
cXVpcmVkKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlUmVuZGVyaW5nU3Rh
dGUoaW50IG51bUVsZW1lbnRzUmVxdWlyZWQpCiB7CiAgICAgaWYgKCFtX2N1cnJlbnRQcm9ncmFt
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTMwLDcgKzExMzEsNyBAQCBib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVSZW5kCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgLy8gTG9vayBpbiBlYWNoIGNvbnN1bWVkIHZlcnRleCBhdHRyaWIgKGJ5IHRoZSBjdXJyZW50
IHByb2dyYW0pIGFuZCBmaW5kIHRoZSBzbWFsbGVzdCBidWZmZXIgc2l6ZQotICAgIGxvbmcgc21h
bGxlc3ROdW1FbGVtZW50cyA9IExPTkdfTUFYOworICAgIGludCBzbWFsbGVzdE51bUVsZW1lbnRz
ID0gSU5UX01BWDsKICAgICBpbnQgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zID0gbV9jdXJyZW50
UHJvZ3JhbS0+bnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnM7ICsraSkgewogICAgICAgICBpbnQgbG9jID0g
bV9jdXJyZW50UHJvZ3JhbS0+Z2V0QWN0aXZlQXR0cmliTG9jYXRpb24oaSk7CkBAIC0xMTQwLDgg
KzExNDEsOSBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVSZW5kCiAgICAg
ICAgICAgICAgICAgLy8gQXZvaWQgb2ZmLWJ5LW9uZSBlcnJvcnMgaW4gbnVtRWxlbWVudHMgY29t
cHV0YXRpb24uCiAgICAgICAgICAgICAgICAgLy8gRm9yIHRoZSBsYXN0IGVsZW1lbnQsIHdlIHdp
bGwgb25seSB0b3VjaCB0aGUgZGF0YSBmb3IgdGhlCiAgICAgICAgICAgICAgICAgLy8gZWxlbWVu
dCBhbmQgbm90aGluZyBiZXlvbmQgaXQuCi0gICAgICAgICAgICAgICAgbG9uZyBieXRlc1JlbWFp
bmluZyA9IHN0YXRlLmJ1ZmZlckJpbmRpbmctPmJ5dGVMZW5ndGgoKSAtIHN0YXRlLm9mZnNldDsK
LSAgICAgICAgICAgICAgICBsb25nIG51bUVsZW1lbnRzID0gMDsKKyAgICAgICAgICAgICAgICBp
bnQgYnl0ZXNSZW1haW5pbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRlLmJ1ZmZlckJpbmRpbmct
PmJ5dGVMZW5ndGgoKSAtIHN0YXRlLm9mZnNldCk7CisgICAgICAgICAgICAgICAgaW50IG51bUVs
ZW1lbnRzID0gMDsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdGUuc3RyaWRlID4gMCk7CiAg
ICAgICAgICAgICAgICAgaWYgKGJ5dGVzUmVtYWluaW5nID49IHN0YXRlLmJ5dGVzUGVyRWxlbWVu
dCkKICAgICAgICAgICAgICAgICAgICAgbnVtRWxlbWVudHMgPSAxICsgKGJ5dGVzUmVtYWluaW5n
IC0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50KSAvIHN0YXRlLnN0cmlkZTsKICAgICAgICAgICAgICAg
ICBpZiAobnVtRWxlbWVudHMgPCBzbWFsbGVzdE51bUVsZW1lbnRzKQpAQCAtMTE1MCw3ICsxMTUy
LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlUmVuZAogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIGlmIChzbWFsbGVzdE51bUVsZW1lbnRzID09IExPTkdfTUFYKQor
ICAgIGlmIChzbWFsbGVzdE51bUVsZW1lbnRzID09IElOVF9NQVgpCiAgICAgICAgIHNtYWxsZXN0
TnVtRWxlbWVudHMgPSAwOwogICAgIAogICAgIHJldHVybiBudW1FbGVtZW50c1JlcXVpcmVkIDw9
IHNtYWxsZXN0TnVtRWxlbWVudHM7CkBAIC0xMTY5LDcgKzExNzEsNyBAQCBib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVXZWJHCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9u
ZyBmaXJzdCwgbG9uZyBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNE
c2l6ZWkgY291bnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7
CiAKQEAgLTEyMjEsNyArMTIyMyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3
QXJyYXlzKHUKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CiAKLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBtb2RlLCBs
b25nIGNvdW50LCB1bnNpZ25lZCBsb25nIHR5cGUsIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2Rl
JiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMoR0MzRGVudW0g
bW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKIApAQCAtMTI0OCw3
ICsxMjUwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cwogICAg
IGlmICghY291bnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGxvbmcgbnVtRWxlbWVudHMgPSAw
OworICAgIGludCBudW1FbGVtZW50cyA9IDA7CiAgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25P
dXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKICAgICAgICAgLy8gRW5zdXJlIHdlIGhhdmUgYSB2YWxp
ZCByZW5kZXJpbmcgc3RhdGUKICAgICAgICAgaWYgKCF2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUo
Y291bnQsIHR5cGUsIG9mZnNldCkpIHsKQEAgLTEyOTEsNyArMTI5Myw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwodHJ1ZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUodW5zaWdu
ZWQgbG9uZyBjYXApCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlKEdDM0RlbnVt
IGNhcCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHko
Y2FwKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTI5OSw3ICsxMzAxLDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmVuYWJsZSh1bnNpZwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBp
bmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpKQpAQCAtMTMxMiw3ICsxMzE0LDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRleAogICAgIGlmIChpbmRleCA+PSBtX3ZlcnRleEF0dHJp
YlN0YXRlLnNpemUoKSkKICAgICAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5yZXNpemUoaW5kZXgg
KyAxKTsKICAgICAgICAgCi0gICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uZW5hYmxlZCA9
IHRydWU7CisgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uZW5hYmxlZCA9IDE7CiAgICAg
CiAgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTEzMzUsNyArMTMzNyw3IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmbHVzaCgpCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKHRydWUpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVu
dCwgdW5zaWduZWQgbG9uZyByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiBi
dWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVu
dCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVy
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyh0YXJn
ZXQsIGF0dGFjaG1lbnQpKQpAQCAtMTQwNiw3ICsxNDA4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmZyYW1lYnVmZmVyUgogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclRleHR1cmUy
RCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25l
ZCBsb25nIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBsb25nIGxldmVsLCBFeGNl
cHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclRl
eHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRl
eHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBHQzNEaW50IGxldmVsLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyh0YXJnZXQsIGF0dGFjaG1l
bnQpKQpAQCAtMTQzMSw3ICsxNDMzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZy
YW1lYnVmZmVyVAogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmcm9udEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKQor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyb250RmFjZShHQzNEZW51bSBtb2RlKQogewog
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MzksNyArMTQ0
MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmcm9udEZhY2UodW4KICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQpCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQogewogICAgIGlm
IChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0NjgsNyArMTQ3MCw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZW5lcmF0ZU1pcG0KICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi1QYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8
V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZUF0dHJpYihX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCkBAIC0xNDc5LDcgKzE0ODEsNyBAQCBQYXNzUmVm
UHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpCiAgICAgcmV0dXJuIFdlYkdMQWN0aXZl
SW5mbzo6Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOwogfQogCi1QYXNz
UmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVV
bmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQg
aW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAg
aWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKQEAg
LTE0OTksMTYgKzE1MDEsMTYgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFj
aGVkUwogICAgIHNoYWRlck9iamVjdHMuY2xlYXIoKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgp
IHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaW50IG51bVNoYWRlcnMgPSAwOworICAgIEdDM0RpbnQgbnVtU2hhZGVycyA9IDA7CiAg
ICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGlj
c0NvbnRleHQzRDo6QVRUQUNIRURfU0hBREVSUywgJm51bVNoYWRlcnMpOwogICAgIGlmIChudW1T
aGFkZXJzKSB7Ci0gICAgICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGludD4gc2hhZGVycyhuZXcg
dW5zaWduZWQgaW50W251bVNoYWRlcnNdKTsKLSAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAg
ICAgT3duQXJyYXlQdHI8UGxhdGZvcm0zRE9iamVjdD4gc2hhZGVycyhuZXcgUGxhdGZvcm0zRE9i
amVjdFtudW1TaGFkZXJzXSk7CisgICAgICAgIEdDM0RzaXplaSBjb3VudCA9IDA7CiAgICAgICAg
IG1fY29udGV4dC0+Z2V0QXR0YWNoZWRTaGFkZXJzKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbnVt
U2hhZGVycywgJmNvdW50LCBzaGFkZXJzLmdldCgpKTsKICAgICAgICAgaWYgKGNvdW50ICE9IG51
bVNoYWRlcnMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHNoYWRlck9iamVj
dHMucmVzaXplKG51bVNoYWRlcnMpOwotICAgICAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgbnVt
U2hhZGVyczsgKytpaSkgeworICAgICAgICBmb3IgKEdDM0RpbnQgaWkgPSAwOyBpaSA8IG51bVNo
YWRlcnM7ICsraWkpIHsKICAgICAgICAgICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBmaW5kU2hh
ZGVyKHNoYWRlcnNbaWldKTsKICAgICAgICAgICAgIGlmICghc2hhZGVyKSB7CiAgICAgICAgICAg
ICAgICAgc2hhZGVyT2JqZWN0cy5jbGVhcigpOwpAQCAtMTUyMCw3ICsxNTIyLDcgQEAgYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkUwogICAgIHJldHVybiB0cnVlOwogfQog
Ci1pbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dy
YW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK0dDM0RpbnQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4g
LTE7CkBAIC0xNTI5LDcgKzE1MzEsNyBAQCBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRB
dHRyaWJMb2NhCiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ob2JqZWN0
T3JaZXJvKHByb2dyYW0pLCBuYW1lKTsKIH0KIAotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0QnVmZmVyUGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25l
ZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAg
IGlmIChpc0NvbnRleHRMb3N0KCkpCkBAIC0xNTQ1LDcgKzE1NDcsNyBAQCBXZWJHTEdldEluZm8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCCiAgICAgfQogCiAgICAgV2ViR0xTdGF0ZVJlc3Rv
cmVyKHRoaXMsIGZhbHNlKTsKLSAgICBpbnQgdmFsdWUgPSAwOworICAgIEdDM0RpbnQgdmFsdWUg
PSAwOwogICAgIG1fY29udGV4dC0+Z2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwg
JnZhbHVlKTsKICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJVRkZFUl9TSVpF
KQogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGxvbmc+KHZhbHVlKSk7
CkBAIC0xNTYxLDcgKzE1NjMsNyBAQCBQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+
IFdlYkdMCiAgICAgcmV0dXJuIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZShtX2NvbnRl
eHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkpOwogfQogCi11bnNpZ25lZCBsb25nIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0RXJyb3IoKQorR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRFcnJvcigpCiB7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0RXJyb3IoKTsKIH0KQEAg
LTE1ODcsNyArMTU4OSw3IEBAIFdlYkdMRXh0ZW5zaW9uKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmcKICAgICByZXR1cm4gMDsKIH0KIAotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQorV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNo
bWVudCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9Q
QVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZl
ckZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgYXR0YWNobWVudCkpCkBAIC0xNjEwLDcgKzE2MTIsNyBA
QCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGCiAKICAgICBpZiAocG5h
bWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05B
TUUpIHsKICAgICAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKLSAgICAgICAg
aW50IHZhbHVlID0gMDsKKyAgICAgICAgR0MzRGludCB2YWx1ZSA9IDA7CiAgICAgICAgIG1fY29u
dGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2ht
ZW50LCBwbmFtZSwgJnZhbHVlKTsKICAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFKQogICAgICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPih2YWx1ZSkpOwpAQCAt
MTYxOCwxMSArMTYyMCwxMSBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRGCiAgICAgfQogCiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKLSAgICBp
bnQgdHlwZSA9IDA7CisgICAgR0MzRGludCB0eXBlID0gMDsKICAgICBtX2NvbnRleHQtPmdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUsICZ0eXBlKTsK
ICAgICBpZiAoIXR5cGUpCiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBpbnQg
dmFsdWUgPSAwOworICAgIEdDM0RpbnQgdmFsdWUgPSAwOwogICAgIG1fY29udGV4dC0+Z2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSwgJnZhbHVlKTsK
ICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVI6CkBAIC0xNjM1LDcgKzE2MzcsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRGCiAgICAgfQogfQogCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIoR0MzRGVu
dW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSkKQEAgLTE4MTMsNyArMTgxNSw3IEBAIFdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFAKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CiAgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8obV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgotICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24pOworICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fdW5wYWNrQ29sb3Jz
cGFjZUNvbnZlcnNpb24pKTsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRU5ET1I6CiAg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oIldlYmtpdCAoIiArIG1fY29udGV4dC0+Z2V0U3Ry
aW5nKEdyYXBoaWNzQ29udGV4dDNEOjpWRU5ET1IpICsgIikiKTsKICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpWRVJTSU9OOgpAQCAtMTgyNiwxNCArMTgyOCwxNCBAQCBXZWJHTEdldEluZm8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQCiAgICAgfQogfQogCi1XZWJHTEdldEluZm8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitXZWJHTEdldElu
Zm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVO
VVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJH
TE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogCiAgICAg
V2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKLSAgICBpbnQgdmFsdWUgPSAwOworICAg
IEdDM0RpbnQgdmFsdWUgPSAwOwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERUxFVEVfU1RBVFVTOgogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KHByb2dyYW0tPmlzRGVsZXRlZCgpKTsKQEAgLTE4NjcsNyArMTg2OSw3IEBAIFN0cmluZyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW0KICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRQ
cm9ncmFtSW5mb0xvZyhvYmplY3RPclplcm8ocHJvZ3JhbSkpOwogfQogCi1XZWJHTEdldEluZm8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIodW5zaWduZWQg
bG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKQEAgLTE5MDUs
NyArMTkwNyw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFIKICAg
ICAgICAgICAgIHZhbHVlID0gODsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOgotICAgICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFs
Rm9ybWF0KCkpOworICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPihtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkp
KTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CkBAIC0xOTE0LDcgKzE5MTYsNyBAQCBXZWJHTEdldEluZm8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSCiAgICAgfQogCiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVy
KHRoaXMsIGZhbHNlKTsKLSAgICBpbnQgdmFsdWUgPSAwOworICAgIEdDM0RpbnQgdmFsdWUgPSAw
OwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVJfV0lEVEg6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
X0hFSUdIVDoKQEAgLTE5MjcsMjAgKzE5MjksMjAgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0UgogICAgICAgICBtX2NvbnRleHQtPmdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oc3RhdGljX2Nhc3Q8bG9uZz4odmFsdWUpKTsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0SW50ZXJuYWxGb3JtYXQoKSk7CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV9yZW5kZXJi
dWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSk7CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIH0KIH0KIAotV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdM
U2hhZGVyKiBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
V2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKFdl
YkdMU2hhZGVyKiBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwog
ICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7Ci0gICAgaW50IHZhbHVlID0gMDsK
KyAgICBHQzNEaW50IHZhbHVlID0gMDsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhzaGFkZXItPmlzRGVsZXRlZCgpKTsKQEAgLTE5OTEsNyArMTk5Myw3IEBAIFZlY3RvcjxT
dHJpbmc+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2UKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIodW5z
aWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQorV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1ldGVyKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKQEAgLTIwMDAsNyAr
MjAwMiw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFQKICAgICBp
ZiAoIXRleCkKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIFdlYkdMU3RhdGVS
ZXN0b3Jlcih0aGlzLCBmYWxzZSk7Ci0gICAgaW50IHZhbHVlID0gMDsKKyAgICBHQzNEaW50IHZh
bHVlID0gMDsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9NQUdfRklMVEVSOgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfTUlOX0ZJTFRFUjoKQEAgLTIwMjMsMTMgKzIwMjUsMTMgQEAgV2ViR0xHZXRJbmZvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0VQogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKICAgICB9Ci0gICAgbG9uZyBsb2NhdGlvbiA9IHVuaWZvcm1Mb2Nh
dGlvbi0+bG9jYXRpb24oKTsKKyAgICBHQzNEaW50IGxvY2F0aW9uID0gdW5pZm9ybUxvY2F0aW9u
LT5sb2NhdGlvbigpOwogICAgIAogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7
CiAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudCB1c2luZyBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBhbmQgY2FjaGluZyB0eXBlcyBpbiBpdAotICAgIGludCBhY3RpdmVVbmlmb3Jt
cyA9IDA7CisgICAgR0MzRGludCBhY3RpdmVVbmlmb3JtcyA9IDA7CiAgICAgbV9jb250ZXh0LT5n
ZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0NvbnRleHQzRDo6QUNU
SVZFX1VOSUZPUk1TLCAmYWN0aXZlVW5pZm9ybXMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
YWN0aXZlVW5pZm9ybXM7IGkrKykgeworICAgIGZvciAoR0MzRGludCBpID0gMDsgaSA8IGFjdGl2
ZVVuaWZvcm1zOyBpKyspIHsKICAgICAgICAgQWN0aXZlSW5mbyBpbmZvOwogICAgICAgICBpZiAo
IW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShvYmplY3RPclplcm8ocHJvZ3JhbSksIGksIGlu
Zm8pKQogICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwpAQCAtMjAzNyw3ICsyMDM5
LDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VQogICAgICAgICBp
ZiAoaW5mby5zaXplID4gMSkKICAgICAgICAgICAgIGluZm8ubmFtZSA9IGluZm8ubmFtZS5sZWZ0
KGluZm8ubmFtZS5sZW5ndGgoKSAtIDMpOwogICAgICAgICAvLyBJZiBpdCdzIGFuIGFycmF5LCB3
ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIGVsZW1lbnQsIGFwcGVuZGluZyAiW2luZGV4
XSIgdG8gdGhlIG5hbWUuCi0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBpbmZv
LnNpemU7ICsraW5kZXgpIHsKKyAgICAgICAgZm9yIChHQzNEaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBpbmZvLnNpemU7ICsraW5kZXgpIHsKICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gaW5mby5u
YW1lOwogICAgICAgICAgICAgaWYgKGluZm8uc2l6ZSA+IDEgJiYgaW5kZXggPj0gMSkgewogICAg
ICAgICAgICAgICAgIG5hbWUuYXBwZW5kKCdbJyk7CkBAIC0yMDQ1LDExICsyMDQ3LDExIEBAIFdl
YkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFUKICAgICAgICAgICAgICAgICBu
YW1lLmFwcGVuZCgnXScpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gTm93IG5lZWQg
dG8gbG9vayB0aGlzIHVwIGJ5IG5hbWUgYWdhaW4gdG8gZmluZCBpdHMgbG9jYXRpb24KLSAgICAg
ICAgICAgIGxvbmcgbG9jID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBuYW1lKTsKKyAgICAgICAgICAgIEdDM0RpbnQgbG9jID0gbV9jb250ZXh0
LT5nZXRVbmlmb3JtTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBuYW1lKTsKICAgICAg
ICAgICAgIGlmIChsb2MgPT0gbG9jYXRpb24pIHsKICAgICAgICAgICAgICAgICAvLyBGb3VuZCBp
dC4gVXNlIHRoZSB0eXBlIGluIHRoZSBBY3RpdmVJbmZvIHRvIGRldGVybWluZSB0aGUgcmV0dXJu
IHR5cGUuCi0gICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdMRW51bVR5cGUg
YmFzZVR5cGU7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoOworICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGJhc2VUeXBlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW5n
dGg7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChpbmZvLnR5cGUpIHsKICAgICAgICAgICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOgogICAgICAgICAgICAgICAgICAgICBiYXNl
VHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOwpAQCAtMjExOSwyMSArMjEyMSwyMSBAQCBX
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVCiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIHN3aXRjaCAoYmFzZVR5cGUpIHsKICAgICAgICAgICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogewotICAgICAgICAgICAgICAgICAgICBmbG9h
dCB2YWx1ZVsxNl0gPSB7MH07CisgICAgICAgICAgICAgICAgICAgIEdDM0RmbG9hdCB2YWx1ZVsx
Nl0gPSB7MH07CiAgICAgICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5pZm9ybWZ2KG9i
amVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGxlbmd0aCA9PSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyh2YWx1ZVswXSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oRmxvYXQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6IHsKLSAgICAg
ICAgICAgICAgICAgICAgaW50IHZhbHVlWzRdID0gezB9OworICAgICAgICAgICAgICAgICAgICBH
QzNEaW50IHZhbHVlWzRdID0gezB9OwogICAgICAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmdl
dFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8bG9uZz4odmFsdWVbMF0pKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhJbnQzMkFycmF5OjpjcmVhdGUodmFs
dWUsIGxlbmd0aCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpCT09MOiB7Ci0gICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZVs0
XSA9IHswfTsKKyAgICAgICAgICAgICAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKICAg
ICAgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0T3JaZXJvKHBy
b2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3Ro
ID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBib29sVmFsdWVbMTZdID0gezB9
OwpAQCAtMjE2MiwxMyArMjE2NCwxMyBAQCBQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9u
PiBXZWJHTFJlCiAgICAgaWYgKCF2YWxpZGF0ZVN0cmluZyhuYW1lKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKLSAgICBsb25nIHVuaWZv
cm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG9iamVjdE9yWmVybyhw
cm9ncmFtKSwgbmFtZSk7CisgICAgR0MzRGludCB1bmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQt
PmdldFVuaWZvcm1Mb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwogICAgIGlm
ICh1bmlmb3JtTG9jYXRpb24gPT0gLTEpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbjo6Y3JlYXRlKHByb2dyYW0sIHVuaWZvcm1Mb2NhdGlvbik7CiB9
CiAKLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYih1
bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYihH
QzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKQEAgLTIxODksMjMg
KzIxOTEsMjMgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VgogICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDoKICAg
ICAgICAgaWYgKGluZGV4ID49IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhmYWxzZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8obV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uZW5hYmxlZCk7CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4obV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0u
ZW5hYmxlZCkpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJS
QVlfTk9STUFMSVpFRDoKICAgICAgICAgaWYgKGluZGV4ID49IG1fdmVydGV4QXR0cmliU3RhdGUu
c2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhmYWxzZSk7Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8obV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0ubm9ybWFsaXpl
ZCk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4obV92ZXJ0
ZXhBdHRyaWJTdGF0ZVtpbmRleF0ubm9ybWFsaXplZCkpOwogICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKICAgICAgICAgaWYgKGluZGV4ID49IG1f
dmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhzdGF0aWNfY2FzdDxsb25nPig0KSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV92
ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uc2l6ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oc3RhdGljX2Nhc3Q8bG9uZz4obV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uc2l6ZSkpOwog
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgog
ICAgICAgICBpZiAoaW5kZXggPj0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCkpCiAgICAgICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGxvbmc+KDApKTsKLSAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XS5vcmlnaW5hbFN0
cmlkZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8bG9uZz4obV92
ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0ub3JpZ2luYWxTdHJpZGUpKTsKICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6CiAgICAgICAgIGlmIChpbmRl
eCA+PSBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUKSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV92ZXJ0ZXhBdHRyaWJTdGF0ZVtp
bmRleF0udHlwZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZz4obV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0udHlwZSkpOwogICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfVkVSVEVYX0FUVFJJQjoKICAgICAgICAgaWYgKGlu
ZGV4ID49IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpKSB7CiAgICAgICAgICAgICBmbG9hdCB2
YWx1ZVs0XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMS4wZiB9OwpAQCAtMjIxOCwxNiArMjIyMCwx
NiBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWCiAgICAgfQogfQog
Ci1sb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2ln
bmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCitHQzNEc2l6ZWlwdHIgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdD
M0RlbnVtIHBuYW1lKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVy
biAwOwotICAgIGxvbmcgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJPZmZzZXQo
aW5kZXgsIHBuYW1lKTsKKyAgICBHQzNEc2l6ZWlwdHIgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRW
ZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpoaW50KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUp
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIG1vZGUpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjIzOSwxMyArMjI0MSwxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGludCh1
bnNpZ25lCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCitHQzNE
Ym9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZm
ZXIpCiB7CiAgICAgaWYgKCFidWZmZXIgfHwgaXNDb250ZXh0TG9zdCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFidWZmZXItPmhhc0V2ZXJC
ZWVuQm91bmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gMDsKIAog
ICAgIHJldHVybiBtX2NvbnRleHQtPmlzQnVmZmVyKGJ1ZmZlci0+b2JqZWN0KCkpOwogfQpAQCAt
MjI2Myw2NyArMjI2NSw2NyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNDb250ZXh0
TG9zCiAgICAgcmV0dXJuIG1fY29udGV4dExvc3Q7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojppc0VuYWJsZWQodW5zaWduZWQgbG9uZyBjYXApCitHQzNEYm9vbGVhbiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxlZChHQzNEZW51bSBjYXApCiB7CiAgICAgaWYgKCF2YWxp
ZGF0ZUNhcGFiaWxpdHkoY2FwKSB8fCBpc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+aXNFbmFibGVk
KGNhcCk7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0ZyYW1lYnVmZmVyKFdl
YkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQorR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojppc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQogewog
ICAgIGlmICghZnJhbWVidWZmZXIgfHwgaXNDb250ZXh0TG9zdCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFmcmFtZWJ1ZmZlci0+aGFzRXZl
ckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwog
CiAgICAgcmV0dXJuIG1fY29udGV4dC0+aXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlci0+b2JqZWN0
KCkpOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNQcm9ncmFtKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSkKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNQcm9n
cmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKIHsKICAgICBpZiAoIXByb2dyYW0gfHwgaXNDb250
ZXh0TG9zdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwogCiAg
ICAgcmV0dXJuIG1fY29udGV4dC0+aXNQcm9ncmFtKHByb2dyYW0tPm9iamVjdCgpKTsKIH0KIAot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVm
ZmVyKiByZW5kZXJidWZmZXIpCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omlz
UmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYg
KCFyZW5kZXJidWZmZXIgfHwgaXNDb250ZXh0TG9zdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFyZW5kZXJidWZmZXItPmhhc0V2ZXJCZWVu
Qm91bmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gMDsKIAogICAg
IHJldHVybiBtX2NvbnRleHQtPmlzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkp
OwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNTaGFkZXIoV2ViR0xTaGFkZXIq
IHNoYWRlcikKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNTaGFkZXIoV2Vi
R0xTaGFkZXIqIHNoYWRlcikKIHsKICAgICBpZiAoIXNoYWRlciB8fCBpc0NvbnRleHRMb3N0KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4g
bV9jb250ZXh0LT5pc1NoYWRlcihzaGFkZXItPm9iamVjdCgpKTsKIH0KIAotYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmlzVGV4dHVyZShXZWJHTFRleHR1cmUqIHRleHR1cmUpCitHQzNEYm9v
bGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4dHVyZShXZWJHTFRleHR1cmUqIHRleHR1
cmUpCiB7CiAgICAgaWYgKCF0ZXh0dXJlIHx8IGlzQ29udGV4dExvc3QoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghdGV4dHVyZS0+aGFzRXZl
ckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwog
CiAgICAgcmV0dXJuIG1fY29udGV4dC0+aXNUZXh0dXJlKHRleHR1cmUtPm9iamVjdCgpKTsKIH0K
IAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmVXaWR0aChmbG9hdCB3aWR0aCkKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQogewog
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQt
PmxpbmVXaWR0aCgoZmxvYXQpIHdpZHRoKTsKKyAgICBtX2NvbnRleHQtPmxpbmVXaWR0aCh3aWR0
aCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMjM0Miw3
ICsyMzQ0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKAogICAg
IG1fY29udGV4dC0+bGlua1Byb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKICAgICBwcm9n
cmFtLT5pbmNyZWFzZUxpbmtDb3VudCgpOwogICAgIC8vIGNhY2hlIGxpbmsgc3RhdHVzCi0gICAg
aW50IHZhbHVlID0gMDsKKyAgICBHQzNEaW50IHZhbHVlID0gMDsKICAgICBtX2NvbnRleHQtPmdl
dFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5L
X1NUQVRVUywgJnZhbHVlKTsKICAgICBwcm9ncmFtLT5zZXRMaW5rU3RhdHVzKHN0YXRpY19jYXN0
PGJvb2w+KHZhbHVlKSk7CiAgICAgLy8gTmVlZCB0byBjYWNoZSBsaW5rIHN0YXR1cyBiZWZvcmUg
Y2FjaGluZyBhY3RpdmUgYXR0cmlidXRlIGxvY2F0aW9ucy4KQEAgLTIzNTAsNyArMjM1Miw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5rUHJvZ3JhbSgKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSkKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJh
bSkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMzYz
LDcgKzIzNjUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGl4ZWxTdG9yZWkoCiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQ
QUNFX0NPTlZFUlNJT05fV0VCR0w6CiAgICAgICAgIGlmIChwYXJhbSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dFQkdMIHx8IHBhcmFtID09IEdyYXBoaWNzQ29udGV4dDNE
OjpOT05FKQotICAgICAgICAgICAgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmc+KHBhcmFtKTsKKyAgICAgICAgICAgIG1fdW5wYWNrQ29sb3Jz
cGFjZUNvbnZlcnNpb24gPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4ocGFyYW0pOwogICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjM3Myw5
ICsyMzc1LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBpeGVsU3RvcmVpKAogICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQ6CiAgICAgICAgIGlmIChw
YXJhbSA9PSAxIHx8IHBhcmFtID09IDIgfHwgcGFyYW0gPT0gNCB8fCBwYXJhbSA9PSA4KSB7CiAg
ICAgICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlBBQ0tfQUxJR05NRU5U
KQotICAgICAgICAgICAgICAgIG1fcGFja0FsaWdubWVudCA9IHN0YXRpY19jYXN0PGludD4ocGFy
YW0pOworICAgICAgICAgICAgICAgIG1fcGFja0FsaWdubWVudCA9IHBhcmFtOwogICAgICAgICAg
ICAgZWxzZSAvLyBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKLSAgICAgICAg
ICAgICAgICBtX3VucGFja0FsaWdubWVudCA9IHN0YXRpY19jYXN0PGludD4ocGFyYW0pOworICAg
ICAgICAgICAgICAgIG1fdW5wYWNrQWxpZ25tZW50ID0gcGFyYW07CiAgICAgICAgICAgICBtX2Nv
bnRleHQtPnBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7CiAgICAgICAgICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgICAgICB9IGVsc2UgewpAQCAtMjM4OSwxNSArMjM5
MSwxNSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGl4ZWxTdG9yZWkoCiAgICAgfQog
fQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cG9seWdvbk9mZnNldChmbG9hdCBmYWN0
b3IsIGZsb2F0IHVuaXRzKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBvbHlnb25PZmZz
ZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQogewogICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnBvbHlnb25PZmZzZXQo
KGZsb2F0KSBmYWN0b3IsIChmbG9hdCkgdW5pdHMpOworICAgIG1fY29udGV4dC0+cG9seWdvbk9m
ZnNldChmYWN0b3IsIHVuaXRzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhsb25nIHgsIGxv
bmcgeSwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNp
Z25lZCBsb25nIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBl
YykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0
NjEsOCArMjQ2Myw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKGwK
ICAgICAvLyB3aGVuIGFscGhhIGlzIG9mZiwgcmVhZFBpeGVscyBzaG91bGQgc2V0IGFscGhhIHRv
IDI1NSBpbnN0ZWFkIG9mIDAuCiAgICAgaWYgKCFtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1
dGVzKCkuYWxwaGEpIHsKICAgICAgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSk7Ci0gICAgICAgIGZvciAobG9uZyBpeSA9IDA7
IGl5IDwgaGVpZ2h0OyArK2l5KSB7Ci0gICAgICAgICAgICBmb3IgKGxvbmcgaXggPSAwOyBpeCA8
IHdpZHRoOyArK2l4KSB7CisgICAgICAgIGZvciAoR0MzRHNpemVpIGl5ID0gMDsgaXkgPCBoZWln
aHQ7ICsraXkpIHsKKyAgICAgICAgICAgIGZvciAoR0MzRHNpemVpIGl4ID0gMDsgaXggPCB3aWR0
aDsgKytpeCkgewogICAgICAgICAgICAgICAgIHBpeGVsc1szXSA9IDI1NTsKICAgICAgICAgICAg
ICAgICBwaXhlbHMgKz0gNDsKICAgICAgICAgICAgIH0KQEAgLTI0ODEsNyArMjQ4Myw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWxlYXNlU2hhZGUKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVu
ZGVyYnVmZmVyU3RvcmFnZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRl
cm5hbGZvcm1hdCwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQpCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7CiAgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjUyMSwxNSArMjUyMywx
NSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyCiAgICAgfQogfQog
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2FtcGxlQ292ZXJhZ2UoZmxvYXQgdmFsdWUs
IGJvb2wgaW52ZXJ0KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNhbXBsZUNvdmVyYWdl
KEdDM0RmbG9hdCB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQogewogICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnNhbXBsZUNvdmVyYWdl
KChmbG9hdCkgdmFsdWUsIGludmVydCk7CisgICAgbV9jb250ZXh0LT5zYW1wbGVDb3ZlcmFnZSh2
YWx1ZSwgaW52ZXJ0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQog
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2Npc3Nvcihsb25nIHgsIGxvbmcgeSwgbG9u
ZyB3aWR0aCwgbG9uZyBoZWlnaHQpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2Npc3Nv
cihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1NTAs
NyArMjU1Miw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaGFkZXJTb3VyY2UKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6c3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5z
aWduZWQgbG9uZyBtYXNrKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5j
KEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQogewogICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1NjQsNyArMjU2Niw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuYygKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3Rl
bmNpbEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVuYywg
bG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0Rp
bnQgcmVmLCBHQzNEdWludCBtYXNrKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTI1OTMsNyArMjU5NSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpzdGVuY2lsRnVuY1MKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2sodW5zaWduZWQgbG9u
ZyBtYXNrKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrKEdDM0R1aW50
IG1hc2spCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjYwMyw3ICsyNjA1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNr
KAogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFza1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwg
dW5zaWduZWQgbG9uZyBtYXNrKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxN
YXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKIHsKICAgICBpZiAoaXND
b250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNjI2LDcgKzI2MjgsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTCiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5j
aWxPcCh1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVkIGxv
bmcgenBhc3MpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE9wKEdDM0RlbnVt
IGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKIHsKICAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNjM0LDcgKzI2MzYsNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE9wKHVuCiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxP
cFNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25l
ZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKQordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdD
M0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNjQyLDkgKzI2NDQsOSBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6c3RlbmNpbE9wU2VwCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRCYXNlKHVu
c2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50
IGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxz
LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFn
ZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIC8vIEZJWE1F
OiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCiAgICAgZWMgPSAwOwpAQCAt
MjY3Miw4ICsyNjc0LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRC
YQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1wbCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVk
IGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEltYWdl
KiBpbWFnZSwKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1wbChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwpAQCAtMjY5MCw5ICsyNjkyLDkgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbQogICAgICAgICBtX2NvbnRleHQtPnBp
eGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0Fs
aWdubWVudCk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHVu
c2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCB1bnNpZ25lZCBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4
ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBB
cnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVUZXhGdW5jRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHBpeGVscykpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MTcsOCArMjcxOSw4IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHUKICAgICAgICAgbV9jb250
ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91
bnBhY2tBbGlnbm1lbnQpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1h
Z2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZv
cm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZv
cm1hdCwgdW5zaWduZWQgdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKICAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQpAQCAtMjczNiw4ICsyNzM4LDggQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodQogICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3Rv
cmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVu
dCk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHVuc2lnbmVk
IHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25l
ZCB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1h
Z2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwogICAg
IGlmIChpc0NvbnRleHRMb3N0KCkpCkBAIC0yNzUxLDggKzI3NTMsOCBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1CiAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tG
bGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAKLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWws
IHVuc2lnbmVkIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBIVE1MQ2FudmFzRWxlbWVu
dCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQpAQCAtMjc4NSw4ICsyNzg3LDggQEAgUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OgogICAgIHJldHVybiBidWYtPmNvcHlJbWFnZSgpOwogfQogCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVs
LCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSFRNTFZpZGVvRWxlbWVu
dCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQpA
QCAtMjc5Nyw3ICsyNzk5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdl
MkQodQogICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBm
b3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEsIGVjKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFt
ZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQgcGFy
YW1mLCBpbnQgcGFyYW1pLCBib29sIGlzRmxvYXQpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9h
dCBwYXJhbWYsIEdDM0RpbnQgcGFyYW1pLCBib29sIGlzRmxvYXQpCiB7CiAgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjgzMCwxOSArMjgzMiwxOSBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyCiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBh
cmFtZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgZmxvYXQgcGFyYW0pCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pCiB7CiAgICAgdGV4UGFyYW1ldGVyKHRh
cmdldCwgcG5hbWUsIHBhcmFtLCAwLCB0cnVlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50
IHBhcmFtKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcmkoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKIHsKICAgICB0ZXhQYXJh
bWV0ZXIodGFyZ2V0LCBwbmFtZSwgMCwgcGFyYW0sIGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKHVuc2lnbmVkIHRhcmdldCwgdW5zaWdu
ZWQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1
bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogcGl4ZWxzLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9y
cyByZXR1cm5lZAogICAgIGVjID0gMDsKQEAgLTI4NTgsOCArMjg2MCw4IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTIKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2Uy
REltcGwodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5
b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZSogaW1hZ2UsIGJv
b2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgZWMgPSAwOwpAQCAtMjg3NCw5ICsyODc2LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleFN1YkltYWdlMgogICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgZGF0
YS5kYXRhKCksIGVjKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1Yklt
YWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5
b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVs
cywgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3Vi
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBB
cnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVUZXhGdW5jRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHBpeGVscykpCiAgICAgICAgIHJldHVybjsKQEAgLTI5MDAsOCArMjkwMiw4IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTIKICAgICAgICAgbV9jb250
ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91
bnBhY2tBbGlnbm1lbnQpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3Vi
SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBpbnQgeG9mZnNldCwgaW50
IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRpb25D
b2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBlYyA9IDA7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKQEAgLTI5MTUsOCAr
MjkxNyw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTIKICAgICAg
ICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpLCBlYyk7CiB9CiAKLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwg
dW5zaWduZWQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlw
ZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVj
ID0gMDsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQpAQCAtMjkzMCw4ICsyOTMyLDggQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMgogICAgICAgICAgICAgICAgICAg
ICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogfQogCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQs
IHVuc2lnbmVkIGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5
cGUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgZWMgPSAwOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCkBAIC0yOTQ1LDggKzI5NDcsOCBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyCiAgICAgICAgICAgICAg
ICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9
CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRh
cmdldCwgdW5zaWduZWQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWdu
ZWQgdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIGVjID0gMDsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQpAQCAtMjk1Nyw3ICsyOTU5LDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMgogICAgIHRleFN1Yklt
YWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwg
aW1hZ2UuZ2V0KCksIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMp
OwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhbG9jYXRpb24p
CkBAIC0yOTgyLDcgKzI5ODQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTFmdihjCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDEpKQpA
QCAtMjk5Miw3ICsyOTk0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0x
ZnYoYwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBpbnQgeCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGludCB4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwog
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIWxvY2F0aW9uKQpAQCAtMzAxNyw3ICszMDE5LDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoYwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2
LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rp
bnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURf
UEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDEpKQpAQCAtMzAyNyw3ICszMDI5LDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoYwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtMmYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9h
dCB5LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtMmYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwg
R0MzRGZsb2F0IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7
CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhbG9jYXRpb24pCkBAIC0zMDUyLDcgKzMwNTQs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjCiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9h
dCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBV
TlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDIpKQpAQCAtMzA2Miw3ICszMDY0LDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoYwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCwg
aW50IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0yaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwg
R0MzRGludCB5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwog
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIWxvY2F0aW9uKQpAQCAtMzA4Nyw3ICszMDg5LDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoYwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2
LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rp
bnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURf
UEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDIpKQpAQCAtMzA5Nyw3ICszMDk5LDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoYwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9h
dCB5LCBmbG9hdCB6LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNE
ZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIWxvY2F0
aW9uKQpAQCAtMzEyMiw3ICszMTI0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0zZnYoYwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAz
KSkKQEAgLTMxMzIsNyArMzEzNCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtM2Z2KGMKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICFsb2NhdGlvbikKQEAgLTMxNTcsNyArMzE1OSw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGMKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkg
c2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9u
LCB2LCBzaXplLCAzKSkKQEAgLTMxNjcsNyArMzE2OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtM2l2KGMKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmKGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxv
YXQgdywgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgs
IEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAh
bG9jYXRpb24pCkBAIC0zMTkyLDcgKzMxOTQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTRmdihjCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNp
emUsIDQpKQpAQCAtMzIwMiw3ICszMjA0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm00ZnYoYwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6LCBpbnQgdywgRXhjZXB0aW9u
Q29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpKGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rp
bnQgeiwgR0MzRGludCB3LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0o
ZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIWxvY2F0aW9uKQpAQCAtMzIyNyw3ICsz
MjI5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoYwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
aW50KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBV
TlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDQpKQpAQCAtMzIzNyw3ICszMjM5LDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoYwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
Ym9vbCB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5
KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9j
YXRpb24sIHRyYW5zcG9zZSwgdiwgNCkpCkBAIC0zMjQ2LDcgKzMyNDgsNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRy
aXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9z
ZSwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXpl
aSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAg
IGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMo
bG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgNCkpCkBAIC0zMjU1LDcgKzMyNTcsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpCiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29s
IHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlv
biwgdHJhbnNwb3NlLCB2LCA5KSkKQEAgLTMyNjQsNyArMzI2Niw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cmkKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBm
bG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNp
emUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2Nh
dGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCA5KSkKQEAgLTMyNzMsNyArMzI3NSw3IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cmkKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJh
bnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIHYsIDE2KSkKQEAgLTMyODIsNyArMzI4NCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtTWF0cmkKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9h
dCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlv
biwgdHJhbnNwb3NlLCB2LCBzaXplLCAxNikpCkBAIC0zMzI1LDY3ICszMzI3LDY3IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVByb2cKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliMWYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQgdjApCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCkK
IHsKICAgICB2ZXJ0ZXhBdHRyaWJmSW1wbChpbmRleCwgMSwgdjAsIDAuMGYsIDAuMGYsIDEuMGYp
OwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KHVuc2ln
bmVkIGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKIHsK
ICAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoaW5kZXgsIHYsIDEpOwogfQogCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0
KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIx
ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCiB7CiAgICAg
dmVydGV4QXR0cmliZnZJbXBsKGluZGV4LCB2LCBzaXplLCAxKTsKIH0KIAotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0
IHYwLCBmbG9hdCB2MSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIy
ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCiB7CiAgICAgdmVy
dGV4QXR0cmliZkltcGwoaW5kZXgsIDIsIHYwLCB2MSwgMC4wZiwgMS4wZik7CiB9CiAKLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmRl
eCwgRmxvYXQzMkFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjJmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQogewogICAgIHZlcnRleEF0
dHJpYmZ2SW1wbChpbmRleCwgdiwgMik7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHYsIGludCBzaXpl
KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKIHsKICAgICB2ZXJ0ZXhBdHRyaWJm
dkltcGwoaW5kZXgsIHYsIHNpemUsIDIpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQgdjAsIGZsb2F0IHYx
LCBmbG9hdCB2MikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikK
IHsKICAgICB2ZXJ0ZXhBdHRyaWJmSW1wbChpbmRleCwgMywgdjAsIHYxLCB2MiwgMS4wZik7CiB9
CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQg
bG9uZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQogewogICAg
IHZlcnRleEF0dHJpYmZ2SW1wbChpbmRleCwgdiwgMyk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHYs
IGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKIHsKICAgICB2ZXJ0
ZXhBdHRyaWJmdkltcGwoaW5kZXgsIHYsIHNpemUsIDMpOwogfQogCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQgdjAs
IGZsb2F0IHYxLCBmbG9hdCB2MiwgZmxvYXQgdjMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0
IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKIHsKICAgICB2ZXJ0ZXhBdHRyaWJmSW1w
bChpbmRleCwgNCwgdjAsIHYxLCB2MiwgdjMpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJheSog
dikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQg
aW5kZXgsIEZsb2F0MzJBcnJheSogdikKIHsKICAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoaW5kZXgs
IHYsIDQpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2
KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCog
diwgR0MzRHNpemVpIHNpemUpCiB7CiAgICAgdmVydGV4QXR0cmliZnZJbXBsKGluZGV4LCB2LCBz
aXplLCA0KTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYlBv
aW50ZXIodW5zaWduZWQgbG9uZyBpbmRleCwgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIHR5cGUs
IGJvb2wgbm9ybWFsaXplZCwgbG9uZyBzdHJpZGUsIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2Rl
JiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdD
M0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5v
cm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCkBAIC0zNDE0LDggKzM0MTYsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBu
dW1iZXIgb2YgZWxlbWVudHMgdGhlIGJvdW5kIGJ1ZmZlciBjYW4gaG9sZCwgZ2l2ZW4gdGhlIG9m
ZnNldCwgc2l6ZSwgdHlwZSBhbmQgc3RyaWRlCi0gICAgbG9uZyB0eXBlU2l6ZSA9IHNpemVJbkJ5
dGVzKHR5cGUpOwotICAgIGlmICh0eXBlU2l6ZSA8PSAwKSB7CisgICAgdW5zaWduZWQgaW50IHR5
cGVTaXplID0gc2l6ZUluQnl0ZXModHlwZSk7CisgICAgaWYgKCF0eXBlU2l6ZSkgewogICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQyMywxMiArMzQyNSwxMiBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliCiAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBsb25nIGJ5dGVzUGVyRWxlbWVudCA9IHNp
emUgKiB0eXBlU2l6ZTsKKyAgICBHQzNEc2l6ZWkgYnl0ZXNQZXJFbGVtZW50ID0gc2l6ZSAqIHR5
cGVTaXplOwogCiAgICAgaWYgKGluZGV4ID49IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpKQog
ICAgICAgICBtX3ZlcnRleEF0dHJpYlN0YXRlLnJlc2l6ZShpbmRleCArIDEpOwogCi0gICAgbG9u
ZyB2YWxpZGF0ZWRTdHJpZGUgPSBzdHJpZGUgPyBzdHJpZGUgOiBieXRlc1BlckVsZW1lbnQ7Cisg
ICAgR0MzRHNpemVpIHZhbGlkYXRlZFN0cmlkZSA9IHN0cmlkZSA/IHN0cmlkZSA6IGJ5dGVzUGVy
RWxlbWVudDsKIAogICAgIG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdLmJ1ZmZlckJpbmRpbmcg
PSBtX2JvdW5kQXJyYXlCdWZmZXI7CiAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF0uYnl0
ZXNQZXJFbGVtZW50ID0gYnl0ZXNQZXJFbGVtZW50OwpAQCAtMzQ0Miw3ICszNDQ0LDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYgogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aWV3
cG9ydChsb25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQpCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0zNTcwLDIwICszNTcyLDIwIEBAIFdlYkdMU2hhZGVyKiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmZpbmQKICAgICByZXR1cm4gMDsKIH0KIAotV2ViR0xHZXRJbmZv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm9vbGVhblBhcmFtZXRlcih1bnNpZ25lZCBsb25n
IHBuYW1lKQorV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm9vbGVhblBh
cmFtZXRlcihHQzNEZW51bSBwbmFtZSkKIHsKLSAgICB1bnNpZ25lZCBjaGFyIHZhbHVlID0gMDsK
KyAgICBHQzNEYm9vbGVhbiB2YWx1ZSA9IDA7CiAgICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihw
bmFtZSwgJnZhbHVlKTsKICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+
KHZhbHVlKSk7CiB9CiAKLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJv
b2xlYW5BcnJheVBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHBuYW1lKQorV2ViR0xHZXRJbmZvIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBu
YW1lKQogewogICAgIGlmIChwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVN
QVNLKSB7CiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oMCwgMCk7CiAgICAgfQotICAgIHVuc2lnbmVkIGNoYXIgdmFsdWVbNF0gPSB7MH07Cisg
ICAgR0MzRGJvb2xlYW4gdmFsdWVbNF0gPSB7MH07CiAgICAgbV9jb250ZXh0LT5nZXRCb29sZWFu
dihwbmFtZSwgdmFsdWUpOwogICAgIGJvb2wgYm9vbFZhbHVlWzRdOwogICAgIGZvciAoaW50IGlp
ID0gMDsgaWkgPCA0OyArK2lpKQpAQCAtMzU5MSwzNiArMzU5MywzNiBAQCBXZWJHTEdldEluZm8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCCiAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhib29s
VmFsdWUsIDQpOwogfQogCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRG
bG9hdFBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHBuYW1lKQorV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0RmxvYXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCiB7Ci0gICAg
ZmxvYXQgdmFsdWUgPSAwOworICAgIEdDM0RmbG9hdCB2YWx1ZSA9IDA7CiAgICAgbV9jb250ZXh0
LT5nZXRGbG9hdHYocG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0
aWNfY2FzdDxmbG9hdD4odmFsdWUpKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsK
IH0KIAotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0SW50UGFyYW1ldGVy
KHVuc2lnbmVkIGxvbmcgcG5hbWUpCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRJbnRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCiB7CiAgICAgcmV0dXJuIGdldExvbmdQ
YXJhbWV0ZXIocG5hbWUpOwogfQogCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRMb25nUGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgcG5hbWUpCitXZWJHTEdldEluZm8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRMb25nUGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQogewot
ICAgIGludCB2YWx1ZSA9IDA7CisgICAgR0MzRGludCB2YWx1ZSA9IDA7CiAgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0
YXRpY19jYXN0PGxvbmc+KHZhbHVlKSk7CiB9CiAKLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldFVuc2lnbmVkTG9uZ1BhcmFtZXRlcih1bnNpZ25lZCBsb25nIHBuYW1lKQor
V2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5zaWduZWRMb25nUGFyYW1l
dGVyKEdDM0RlbnVtIHBuYW1lKQogewotICAgIGludCB2YWx1ZSA9IDA7CisgICAgR0MzRGludCB2
YWx1ZSA9IDA7CiAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKLSAg
ICB1bnNpZ25lZCBpbnQgdVZhbHVlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSk7
CisgICAgR0MzRHVpbnQgdVZhbHVlID0gc3RhdGljX2Nhc3Q8R0MzRHVpbnQ+KHZhbHVlKTsKICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHVWYWx1ZSkp
OwogfQogCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRXZWJHTEZsb2F0
QXJyYXlQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyBwbmFtZSkKK1dlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFt
ZSkKIHsKLSAgICBmbG9hdCB2YWx1ZVs0XSA9IHswfTsKKyAgICBHQzNEZmxvYXQgdmFsdWVbNF0g
PSB7MH07CiAgICAgbV9jb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSAwOwogICAgIHN3aXRjaCAocG5hbWUpIHsKQEAgLTM2MzksOSArMzY0MSw5
IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFcKICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKIH0KIAot
V2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xJbnRBcnJheVBhcmFt
ZXRlcih1bnNpZ25lZCBsb25nIHBuYW1lKQorV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKIHsKLSAgICBp
bnQgdmFsdWVbNF0gPSB7MH07CisgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKICAgICBtX2Nv
bnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0g
MDsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CkBAIC0zNzE1LDggKzM3MTcsOCBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRmFsbGJhCiAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgMCk7CiB9CiAKLWJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5h
dGlvblZhbGlkKHVuc2lnbmVkIGxvbmcgdGV4SW50ZXJuYWxGb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBsb25nIGNvbG9yQnVmZmVyRm9ybWF0KQorYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQo
R0MzRGVudW0gdGV4SW50ZXJuYWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBj
b2xvckJ1ZmZlckZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGNvbG9yQnVmZmVyRm9ybWF0KSB7CiAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CkBAIC0zNzM0LDcgKzM3MzYsNyBAQCBi
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXhJbnRlcm5hCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi11bnNpZ25lZCBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFt
ZWJ1ZmZlckNvbG9yRm9ybWF0KCkKK0dDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkKIHsKICAgICBpZiAobV9mcmFtZWJ1ZmZlckJp
bmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQogICAgICAgICByZXR1cm4g
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyRm9ybWF0KCk7CkBAIC0zNzU3LDcg
KzM3NTksNyBAQCBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lCiAgICAg
cmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsK
IH0KIAotV2ViR0xUZXh0dXJlKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVy
ZUJpbmRpbmcodW5zaWduZWQgbG9uZyB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFw
KQorV2ViR0xUZXh0dXJlKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoR0MzRGVudW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkKIHsKICAg
ICBXZWJHTFRleHR1cmUqIHRleCA9IDA7CiAgICAgc3dpdGNoICh0YXJnZXQpIHsKQEAgLTM3OTIs
NyArMzc5NCw3IEBAIFdlYkdMVGV4dHVyZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWwKICAg
ICByZXR1cm4gdGV4OwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVT
aXplKGxvbmcgeCwgbG9uZyB5KQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
U2l6ZShHQzNEaW50IHgsIEdDM0RpbnQgeSkKIHsKICAgICBpZiAoeCA8IDAgfHwgeSA8IDApIHsK
ICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSk7CkBAIC0zODEyLDcgKzM4MTQsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVTdHJpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKHVuc2lnbmVkIGxv
bmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUpCiB7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpBTFBIQToKQEAgLTM4NzcsNyArMzg3OSw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVRleEYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0xldmVsKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBs
b25nIGxldmVsKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0xl
dmVsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCkKIHsKICAgICBpZiAobGV2ZWwgPCAw
KSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpOwpAQCAtMzkwNywxMCArMzkwOSwxMCBAQCBib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcg
d2lkdGgsIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNp
Z25lZCBsb25nIHR5cGUpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhG
dW5jUGFyYW1ldGVycyhHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3Jk
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpCiB7CiAgICAgLy8gV2UgYWJzb2x1dGVs
eSBoYXZlIHRvIHZhbGlkYXRlIHRoZSBmb3JtYXQgYW5kIHR5cGUgY29tYmluYXRpb24uCiAgICAg
Ly8gVGhlIHRleEltYWdlMkQgZW50cnkgcG9pbnRzIHRha2luZyBIVE1MSW1hZ2UsIGV0Yy4gd2ls
bCBwcm9kdWNlCkBAIC0zOTU5LDggKzM5NjEsOCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVUZXhGCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSwKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKQogewogICAgIGlmICgh
cGl4ZWxzKQpAQCAtNDAwNyw3ICs0MDA5LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlVGV4RgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVEcmF3TW9kZSh1bnNpZ25lZCBsb25nIG1vZGUpCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVEcmF3TW9kZShHQzNEZW51bSBtb2RlKQogewogICAg
IHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPSU5UUzoKQEAg
LTQwMzMsNyArNDAzNSw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0
ZW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlU3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5jKQorYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlU3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYykKIHsKICAgICBzd2l0
Y2ggKGZ1bmMpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpORVZFUjoKQEAgLTQwNTcs
NyArNDA1OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludFdhcm5pbmcKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtZXNzYWdlLCAwLCBjYW52YXMoKS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5n
KCkpOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVGcmFtZWJ1ZmZl
ckZ1bmNQYXJhbWV0ZXJzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFj
aG1lbnQpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVGcmFtZWJ1ZmZlckZ1
bmNQYXJhbWV0ZXJzKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCkKIHsKICAg
ICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgewogICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0pOwpAQCAtNDA3Niw3ICs0MDc4LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlRnJhbQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcgbW9kZSkKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9k
ZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
VU5DX0FERDoKQEAgLTQwODksNyArNDA5MSw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZUJsZW4KICAgICB9CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnModW5zaWduZWQgbG9uZyBzcmMsIHVuc2lnbmVkIGxvbmcg
ZHN0KQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRGdW5jRmFjdG9y
cyhHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCkKIHsKICAgICBpZiAoKChzcmMgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTlNUQU5UX0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6
T05FX01JTlVTX0NPTlNUQU5UX0NPTE9SKQogICAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6Q09OU1RBTlRfQUxQSEEgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfQ09OU1RBTlRfQUxQSEEpKQpAQCAtNDEwMSw3ICs0MTAzLDcgQEAgYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDYXBhYmlsaXR5KHVuc2lnbmVkIGxvbmcg
Y2FwKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ2FwYWJpbGl0eShHQzNE
ZW51bSBjYXApCiB7CiAgICAgc3dpdGNoIChjYXApIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCTEVORDoKQEAgLTQxMjAsNyArNDEyMiw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUNhcGEKICAgICB9CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBpbnQgcmVxdWlyZWRNaW5TaXplKQorYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1
aXJlZE1pblNpemUpCiB7CiAgICAgaWYgKCF2KSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwpAQCAtNDEyOSw3
ICs0MTMxLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZgogICAg
IHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCBmYWxzZSwg
di0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXplKTsKIH0KIAotYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBpbnQgcmVxdWlyZWRNaW5T
aXplKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBH
QzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQogewogICAgIGlmICghdikgewogICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
KTsKQEAgLTQxMzgsMTIgKzQxNDAsMTIgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlVW5pZgogICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxv
Y2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXplKTsK
IH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCB2b2lkKiB2LCBpbnQgc2l6
ZSwgaW50IHJlcXVpcmVkTWluU2l6ZSkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgdm9pZCogdiwgR0MzRHNpemVpIHNpemUsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCiB7
CiAgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIGZh
bHNlLCB2LCBzaXplLCByZXF1aXJlZE1pblNpemUpOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIGlu
dCByZXF1aXJlZE1pblNpemUpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVV
bmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVx
dWlyZWRNaW5TaXplKQogewogICAgIGlmICghdikgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKQEAgLTQxNTIs
NyArNDE1NCw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWYKICAg
ICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNw
b3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOwogfQogCi1ib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCB2b2lk
KiB2LCBpbnQgc2l6ZSwgaW50IHJlcXVpcmVkTWluU2l6ZSkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCB2b2lkKiB2LCBHQzNE
c2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKIHsKICAgICBpZiAoIWxvY2F0
aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00MTc1LDcgKzQxNzcsNyBAQCBib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LVdlYkdMQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQnVmZmVyRGF0YVBh
cmFtZXRlcnModW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgdXNhZ2UpCitXZWJH
TEJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0
ZXJzKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpCiB7CiAgICAgV2ViR0xCdWZmZXIq
IGJ1ZmZlciA9IDA7CiAgICAgc3dpdGNoICh0YXJnZXQpIHsKQEAgLTQyMDMsNyArNDIwNSw3IEBA
IFdlYkdMQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGkKICAgICByZXR1cm4gMDsK
IH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJbXBsKHVuc2ln
bmVkIGxvbmcgaW5kZXgsIGludCBleHBlY3RlZFNpemUsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxv
YXQgdjIsIGZsb2F0IHYzKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YmZJbXBsKEdDM0R1aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQg
djAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCiB7CiAgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDIzNyw3ICs0MjM5LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYgogICAgIG1fdmVydGV4QXR0
cmliU3RhdGVbaW5kZXhdLnZhbHVlWzNdID0gdjM7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwodW5zaWduZWQgbG9uZyBpbmRleCwgRmxvYXQzMkFy
cmF5KiB2LCBpbnQgZXhwZWN0ZWRTaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYmZ2SW1wbChHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6
ZWkgZXhwZWN0ZWRTaXplKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTQyNDgsNyArNDI1MCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWIKICAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoaW5kZXgsIHYtPmRhdGEoKSwgdi0+
bGVuZ3RoKCksIGV4cGVjdGVkU2l6ZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHYsIGludCBz
aXplLCBpbnQgZXhwZWN0ZWRTaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYmZ2SW1wbChHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6
ZSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQog
ICAgICAgICByZXR1cm47CkBAIC00MzA2LDIxICs0MzA4LDIxIEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojppbml0VmVydGV4QXQKICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsz
XSA9IDEuMGY7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaW11bGF0ZVZlcnRl
eEF0dHJpYjAobG9uZyBudW1WZXJ0ZXgpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2lt
dWxhdGVWZXJ0ZXhBdHRyaWIwKEdDM0RzaXplaSBudW1WZXJ0ZXgpCiB7CiAgICAgY29uc3QgVmVy
dGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZVswXTsKICAgICBpZiAo
c3RhdGUuZW5hYmxlZCB8fCAhbV9jdXJyZW50UHJvZ3JhbSB8fCAhbV9jdXJyZW50UHJvZ3JhbS0+
b2JqZWN0KCkKICAgICAgICAgfHwgIW1fY3VycmVudFByb2dyYW0tPmlzVXNpbmdWZXJ0ZXhBdHRy
aWIwKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLT5v
YmplY3QoKSk7Ci0gICAgbG9uZyBidWZmZXJEYXRhU2l6ZSA9IChudW1WZXJ0ZXggKyAxKSAqIDQg
KiBzaXplb2YoZmxvYXQpOworICAgIEdDM0RzaXplaXB0ciBidWZmZXJEYXRhU2l6ZSA9IChudW1W
ZXJ0ZXggKyAxKSAqIDQgKiBzaXplb2YoR0MzRGZsb2F0KTsKICAgICBpZiAoYnVmZmVyRGF0YVNp
emUgPiBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplCiAgICAgICAgIHx8IHN0YXRlLnZhbHVlWzBd
ICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzBdCiAgICAgICAgIHx8IHN0YXRlLnZhbHVl
WzFdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFdCiAgICAgICAgIHx8IHN0YXRlLnZh
bHVlWzJdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJdCiAgICAgICAgIHx8IHN0YXRl
LnZhbHVlWzNdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdKSB7Ci0gICAgICAgIE93
bkFycmF5UHRyPGZsb2F0PiBidWZmZXJEYXRhKG5ldyBmbG9hdFsobnVtVmVydGV4ICsgMSkgKiA0
XSk7Ci0gICAgICAgIGZvciAobG9uZyBpaSA9IDA7IGlpIDwgbnVtVmVydGV4ICsgMTsgKytpaSkg
eworICAgICAgICBPd25BcnJheVB0cjxHQzNEZmxvYXQ+IGJ1ZmZlckRhdGEobmV3IEdDM0RmbG9h
dFsobnVtVmVydGV4ICsgMSkgKiA0XSk7CisgICAgICAgIGZvciAoR0MzRHNpemVpIGlpID0gMDsg
aWkgPCBudW1WZXJ0ZXggKyAxOyArK2lpKSB7CiAgICAgICAgICAgICBidWZmZXJEYXRhW2lpICog
NF0gPSBzdGF0ZS52YWx1ZVswXTsKICAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMV0g
PSBzdGF0ZS52YWx1ZVsxXTsKICAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMl0gPSBz
dGF0ZS52YWx1ZVsyXTsKQEAgLTQzMzMsNyArNDMzNSw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpzaW11bGF0ZVZlcnQKICAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVb
Ml0gPSBzdGF0ZS52YWx1ZVsyXTsKICAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVb
M10gPSBzdGF0ZS52YWx1ZVszXTsKICAgICB9Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQ
b2ludGVyKDAsIDQsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOworICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQsIDAsIDAsIDApOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNp
b24gNzU1MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNDcgKzY4LDQ3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwogCi0gICAgdm9pZCBh
Y3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpOwor
ICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlLCBFeGNlcHRpb25Db2RlJiBl
Yyk7CiAgICAgdm9pZCBhdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqLCBF
eGNlcHRpb25Db2RlJiBlYyk7Ci0gICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9n
cmFtKiwgdW5zaWduZWQgbG9uZyBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25D
b2RlJiBlYyk7Ci0gICAgdm9pZCBiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJH
TEJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmIGVjKTsKLSAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcih1
bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmIGVj
KTsKLSAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdM
UmVuZGVyYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYgZWMpOwotICAgIHZvaWQgYmluZFRleHR1cmUo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMVGV4dHVyZSosIEV4Y2VwdGlvbkNvZGUmIGVjKTsK
LSAgICB2b2lkIGJsZW5kQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwg
ZmxvYXQgYWxwaGEpOwotICAgIHZvaWQgYmxlbmRFcXVhdGlvbih1bnNpZ25lZCBsb25nIG1vZGUp
OwotICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgbW9kZVJHQiwg
dW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpOwotICAgIHZvaWQgYmxlbmRGdW5jKHVuc2lnbmVkIGxv
bmcgc2ZhY3RvciwgdW5zaWduZWQgbG9uZyBkZmFjdG9yKTsKLSAgICB2b2lkIGJsZW5kRnVuY1Nl
cGFyYXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBsb25nIGRzdFJHQiwgdW5zaWdu
ZWQgbG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9uZyBkc3RBbHBoYSk7Ci0KLSAgICB2b2lkIGJ1
ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCB1bnNpZ25lZCBsb25nIHVz
YWdlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgYnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgQXJyYXlC
dWZmZXJWaWV3KiBkYXRhLCB1bnNpZ25lZCBsb25nIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdm9pZCBidWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwg
QXJyYXlCdWZmZXIqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJ1ZmZlclN1YkRh
dGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRh
dGEsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHVuc2lnbmVkIGxvbmcgY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCk7Ci0gICAgdm9pZCBjbGVhcih1bnNpZ25lZCBs
b25nIG1hc2spOwotICAgIHZvaWQgY2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBm
bG9hdCBibHVlLCBmbG9hdCBhbHBoYSk7Ci0gICAgdm9pZCBjbGVhckRlcHRoKGZsb2F0KTsKLSAg
ICB2b2lkIGNsZWFyU3RlbmNpbChsb25nKTsKLSAgICB2b2lkIGNvbG9yTWFzayhib29sIHJlZCwg
Ym9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKKyAgICB2b2lkIGJpbmRBdHRyaWJM
b2NhdGlvbihXZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgdm9pZCBiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgV2ViR0xCdWZmZXIqLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgdm9pZCBiaW5kRnJhbWVi
dWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYg
ZWMpOworICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMUmVu
ZGVyYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgIHZvaWQgYmluZFRleHR1cmUoR0Mz
RGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgdm9p
ZCBibGVuZENvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVlbiwgR0MzRGZsb2F0IGJs
dWUsIEdDM0RmbG9hdCBhbHBoYSk7CisgICAgdm9pZCBibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1v
ZGUpOworICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdD
M0RlbnVtIG1vZGVBbHBoYSk7CisgICAgdm9pZCBibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3Rvciwg
R0MzRGVudW0gZGZhY3Rvcik7CisgICAgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBz
cmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFs
cGhhKTsKKworICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0
ciBzaXplLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYnVmZmVy
RGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBHQzNEZW51bSB1c2FnZSwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFy
cmF5QnVmZmVyVmlldyogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwg
QXJyYXlCdWZmZXIqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJ1ZmZlclN1YkRh
dGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBk
YXRhLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBHQzNEZW51bSBjaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKEdDM0RlbnVtIHRhcmdldCk7CisgICAgdm9pZCBjbGVhcihHQzNEYml0ZmllbGQgbWFzayk7
CisgICAgdm9pZCBjbGVhckNvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVlbiwgR0Mz
RGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSk7CisgICAgdm9pZCBjbGVhckRlcHRoKEdDM0Rm
bG9hdCk7CisgICAgdm9pZCBjbGVhclN0ZW5jaWwoR0MzRGludCk7CisgICAgdm9pZCBjb2xvck1h
c2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwg
R0MzRGJvb2xlYW4gYWxwaGEpOwogICAgIHZvaWQgY29tcGlsZVNoYWRlcihXZWJHTFNoYWRlcios
IEV4Y2VwdGlvbkNvZGUmIGVjKTsKIAotICAgIC8vIHZvaWQgY29tcHJlc3NlZFRleEltYWdlMkQo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxm
b3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJv
cmRlciwgdW5zaWduZWQgbG9uZyBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpOwotICAgIC8v
IHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcg
bGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1
bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcg
aW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKTsKKyAgICAvLyB2b2lkIGNvbXByZXNzZWRUZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
IEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpOworICAgIC8vIHZvaWQgY29t
cHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkKiBkYXRhKTsKIAotICAgIHZvaWQgY29weVRleEltYWdlMkQodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcg
eCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpOwotICAgIHZv
aWQgY29weVRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIGxv
bmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBsb25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9u
ZyBoZWlnaHQpOworICAgIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpOworICAg
IHZvaWQgY29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CiAKICAgICBQYXNzUmVmUHRyPFdlYkdM
QnVmZmVyPiBjcmVhdGVCdWZmZXIoKTsKICAgICBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+
IGNyZWF0ZUZyYW1lYnVmZmVyKCk7CiAgICAgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0
ZVByb2dyYW0oKTsKICAgICBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBjcmVhdGVSZW5k
ZXJidWZmZXIoKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGVTaGFkZXIodW5z
aWduZWQgbG9uZyB0eXBlLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxXZWJHTFNo
YWRlcj4gY3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQ
YXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpOwogCi0gICAgdm9pZCBjdWxs
RmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpOworICAgIHZvaWQgY3VsbEZhY2UoR0MzRGVudW0gbW9k
ZSk7CiAKICAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciopOwogICAgIHZvaWQgZGVs
ZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciopOwpAQCAtMTE3LDE3MyArMTE3LDE1NSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIqKTsKICAgICB2b2lk
IGRlbGV0ZVRleHR1cmUoV2ViR0xUZXh0dXJlKik7CiAKLSAgICB2b2lkIGRlcHRoRnVuYyh1bnNp
Z25lZCBsb25nKTsKLSAgICB2b2lkIGRlcHRoTWFzayhib29sKTsKLSAgICB2b2lkIGRlcHRoUmFu
Z2UoZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIpOworICAgIHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVt
KTsKKyAgICB2b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVhbik7CisgICAgdm9pZCBkZXB0aFJhbmdl
KEdDM0RmbG9hdCB6TmVhciwgR0MzRGZsb2F0IHpGYXIpOwogICAgIHZvaWQgZGV0YWNoU2hhZGVy
KFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
ZGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCk7Ci0gICAgdm9pZCBkaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZHJh
d0FycmF5cyh1bnNpZ25lZCBsb25nIG1vZGUsIGxvbmcgZmlyc3QsIGxvbmcgY291bnQsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIGRyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUsIGxv
bmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2b2lkIGRpc2FibGUoR0MzRGVudW0gY2FwKTsKKyAgICB2b2lkIGRpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBH
QzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCBFeGNlcHRp
b25Db2RlJik7CiAKLSAgICB2b2lkIGVuYWJsZSh1bnNpZ25lZCBsb25nIGNhcCk7Ci0gICAgdm9p
ZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCBlbmFibGUoR0MzRGVudW0gY2FwKTsKKyAgICB2b2lkIGVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9p
ZCBmaW5pc2goKTsKICAgICB2b2lkIGZsdXNoKCk7Ci0gICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1
bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqLCBFeGNl
cHRpb25Db2RlJiBlYyk7Ci0gICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRCh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleHRh
cmdldCwgV2ViR0xUZXh0dXJlKiwgbG9uZyBsZXZlbCwgRXhjZXB0aW9uQ29kZSYgZWMpOwotICAg
IHZvaWQgZnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSk7Ci0gICAgdm9pZCBnZW5lcmF0ZU1p
cG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCk7Ci0KLSAgICBQYXNzUmVmUHRyPFdlYkdMQWN0aXZl
SW5mbz4gZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcgaW5kZXgs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gZ2V0QWN0
aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qLCB1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xS
ZW5kZXJidWZmZXIqLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRl
eHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRl
eHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYgZWMp
OworICAgIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpOworICAgIHZvaWQgZ2VuZXJhdGVN
aXBtYXAoR0MzRGVudW0gdGFyZ2V0KTsKIAorICAgIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZv
PiBnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gZ2V0QWN0aXZlVW5pZm9y
bShXZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJv
b2wgZ2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSosIFZlY3RvcjxXZWJHTFNoYWRlcio+
JiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgaW50IGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJv
Z3JhbSosIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KLSAgICBXZWJHTEdldEluZm8gZ2V0QnVmZmVy
UGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNl
cHRpb25Db2RlJik7Ci0KKyAgICBHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3Jh
bSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgV2ViR0xHZXRJbmZvIGdldEJ1ZmZlclBhcmFt
ZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CiAg
ICAgUGFzc1JlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBnZXRDb250ZXh0QXR0cmlidXRl
cygpOwotCi0gICAgdW5zaWduZWQgbG9uZyBnZXRFcnJvcigpOwotCisgICAgR0MzRGVudW0gZ2V0
RXJyb3IoKTsKICAgICBXZWJHTEV4dGVuc2lvbiogZ2V0RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
bmFtZSk7Ci0KLSAgICBXZWJHTEdldEluZm8gZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2ln
bmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIFdlYkdMR2V0SW5mbyBnZXRQ
YXJhbWV0ZXIodW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgV2Vi
R0xHZXRJbmZvIGdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiwgdW5zaWduZWQgbG9u
ZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotCisgICAgV2ViR0xHZXRJbmZvIGdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1l
bnQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgV2ViR0xHZXRJbmZvIGdl
dFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdlYkdMR2V0
SW5mbyBnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSosIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3Jh
bSosIEV4Y2VwdGlvbkNvZGUmIGVjKTsKLQotICAgIFdlYkdMR2V0SW5mbyBnZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4
Y2VwdGlvbkNvZGUmKTsKLQotICAgIFdlYkdMR2V0SW5mbyBnZXRTaGFkZXJQYXJhbWV0ZXIoV2Vi
R0xTaGFkZXIqLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYyk7Ci0KKyAg
ICBXZWJHTEdldEluZm8gZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0U2hh
ZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKTsKICAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRlciosIEV4Y2VwdGlv
bkNvZGUmIGVjKTsKIAogICAgIC8vIFRCRAotICAgIC8vIHZvaWQgZ2xHZXRTaGFkZXJQcmVjaXNp
b25Gb3JtYXQgKEdMZW51bSBzaGFkZXJ0eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSwgR0xpbnQq
IHJhbmdlLCBHTGludCogcHJlY2lzaW9uKTsKKyAgICAvLyB2b2lkIGdsR2V0U2hhZGVyUHJlY2lz
aW9uRm9ybWF0IChHQzNEZW51bSBzaGFkZXJ0eXBlLCBHQzNEZW51bSBwcmVjaXNpb250eXBlLCBH
QzNEaW50KiByYW5nZSwgR0MzRGludCogcHJlY2lzaW9uKTsKIAogICAgIFN0cmluZyBnZXRTaGFk
ZXJTb3VyY2UoV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0KICAgICBWZWN0b3I8U3Ry
aW5nPiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7Ci0KLSAgICBXZWJHTEdldEluZm8gZ2V0VGV4
UGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNl
cHRpb25Db2RlJik7Ci0KKyAgICBXZWJHTEdldEluZm8gZ2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBXZWJHTEdldElu
Zm8gZ2V0VW5pZm9ybShXZWJHTFByb2dyYW0qLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbios
IEV4Y2VwdGlvbkNvZGUmKTsKLQogICAgIFBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+
IGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRp
b25Db2RlJik7CisgICAgV2ViR0xHZXRJbmZvIGdldFZlcnRleEF0dHJpYihHQzNEdWludCBpbmRl
eCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBHQzNEc2l6ZWlwdHIgZ2V0
VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSk7CiAKLSAg
ICBXZWJHTEdldEluZm8gZ2V0VmVydGV4QXR0cmliKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2ln
bmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIGxvbmcgZ2V0VmVydGV4QXR0
cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotCi0g
ICAgdm9pZCBoaW50KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpOwot
ICAgIGJvb2wgaXNCdWZmZXIoV2ViR0xCdWZmZXIqKTsKKyAgICB2b2lkIGhpbnQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBtb2RlKTsKKyAgICBHQzNEYm9vbGVhbiBpc0J1ZmZlcihXZWJHTEJ1
ZmZlciopOwogICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwotICAgIGJvb2wgaXNFbmFibGVkKHVu
c2lnbmVkIGxvbmcgY2FwKTsKLSAgICBib29sIGlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZl
ciopOwotICAgIGJvb2wgaXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSopOwotICAgIGJvb2wgaXNSZW5k
ZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKLSAgICBib29sIGlzU2hhZGVyKFdlYkdMU2hh
ZGVyKik7Ci0gICAgYm9vbCBpc1RleHR1cmUoV2ViR0xUZXh0dXJlKik7Ci0gICAgdm9pZCBsaW5l
V2lkdGgoZmxvYXQpOworICAgIEdDM0Rib29sZWFuIGlzRW5hYmxlZChHQzNEZW51bSBjYXApOwor
ICAgIEdDM0Rib29sZWFuIGlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciopOworICAgIEdD
M0Rib29sZWFuIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKKyAgICBHQzNEYm9vbGVhbiBpc1Jl
bmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciopOworICAgIEdDM0Rib29sZWFuIGlzU2hhZGVy
KFdlYkdMU2hhZGVyKik7CisgICAgR0MzRGJvb2xlYW4gaXNUZXh0dXJlKFdlYkdMVGV4dHVyZSop
OworCisgICAgdm9pZCBsaW5lV2lkdGgoR0MzRGZsb2F0KTsKICAgICB2b2lkIGxpbmtQcm9ncmFt
KFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHBpeGVsU3RvcmVpKHVu
c2lnbmVkIGxvbmcgcG5hbWUsIGxvbmcgcGFyYW0pOwotICAgIHZvaWQgcG9seWdvbk9mZnNldChm
bG9hdCBmYWN0b3IsIGZsb2F0IHVuaXRzKTsKLSAgICB2b2lkIHJlYWRQaXhlbHMobG9uZyB4LCBs
b25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5z
aWduZWQgbG9uZyB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwor
ICAgIHZvaWQgcG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMp
OworICAgIHZvaWQgcmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFy
cmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCByZWxlYXNl
U2hhZGVyQ29tcGlsZXIoKTsKLSAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UodW5zaWduZWQg
bG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgd2lkdGgsIGxv
bmcgaGVpZ2h0KTsKLSAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKGZsb2F0IHZhbHVlLCBib29sIGlu
dmVydCk7Ci0gICAgdm9pZCBzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25n
IGhlaWdodCk7CisgICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCk7CisgICAgdm9pZCBzYW1wbGVDb3ZlcmFnZShHQzNEZmxvYXQgdmFsdWUsIEdDM0Rib29sZWFu
IGludmVydCk7CisgICAgdm9pZCBzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwogICAgIHZvaWQgc2hhZGVyU291cmNlKFdlYkdM
U2hhZGVyKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc3RlbmNp
bEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKTsK
LSAgICB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25l
ZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spOwotICAgIHZvaWQgc3Rl
bmNpbE1hc2sodW5zaWduZWQgbG9uZyk7Ci0gICAgdm9pZCBzdGVuY2lsTWFza1NlcGFyYXRlKHVu
c2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBtYXNrKTsKLSAgICB2b2lkIHN0ZW5jaWxP
cCh1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcg
enBhc3MpOwotICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1
bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcgenBh
c3MpOwotCi0gICAgdm9pZCB0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2
ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICBpbnQgd2lk
dGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2ln
bmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVk
IGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2ln
bmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFz
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwg
dW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZp
ZGVvLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHRleFBhcmFtZXRlcmYodW5zaWduZWQg
dGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgZmxvYXQgcGFyYW0pOwotICAgIHZvaWQgdGV4UGFyYW1l
dGVyaSh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBpbnQgcGFyYW0pOwotCi0gICAg
dm9pZCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIGludCB4
b2Zmc2V0LCBpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2ln
bmVkIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIGludCB4
b2Zmc2V0LCBpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9y
bWF0LCB1bnNpZ25lZCB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgdGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBp
bnQgeG9mZnNldCwgaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25l
ZCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52
YXMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkQodW5zaWduZWQgdGFy
Z2V0LCB1bnNpZ25lZCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LAotICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEhUTUxWaWRlb0Vs
ZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzdGVuY2lsRnVuYyhHQzNE
ZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzayk7CisgICAgdm9pZCBzdGVuY2ls
RnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBH
QzNEdWludCBtYXNrKTsKKyAgICB2b2lkIHN0ZW5jaWxNYXNrKEdDM0R1aW50KTsKKyAgICB2b2lk
IHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzayk7CisgICAg
dm9pZCBzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpw
YXNzKTsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVt
IGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7CisKKyAgICB2b2lkIHRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwKKyAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNv
ZGUmKTsKKworICAgIHZvaWQgdGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pOworICAgIHZvaWQgdGV4UGFyYW1ldGVyaShHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKTsKKworICAgIHZvaWQgdGV4
U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFn
ZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNl
cHRpb25Db2RlJik7CiAKLSAgICB2b2lkIHVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZv
cm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBF
eGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCB1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCB1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxv
YXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMWkoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgdW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIHVuaWZvcm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rp
bnQgeCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgdW5pZm9ybTFpdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBpbnQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMmYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBF
eGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZv
aWQgdW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0
MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTJmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlm
b3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2
LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTJpKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHks
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50
KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTNmKGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQg
eiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBFeGNlcHRp
b25Db2RlJik7CiAgICAgdm9pZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1
bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQqIHYs
IGludCBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2koY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6LCBFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgdW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgRXhjZXB0aW9uQ29kZSYpOwogICAg
IHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIElu
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0zaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3LCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCB1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIHVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3LCBFeGNlcHRp
b25Db2RlJik7CiAgICAgdm9pZCB1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1
bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQqIHYs
IGludCBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtNGkoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6LCBpbnQgdywg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm00aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdywgRXhj
ZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYs
IGludCBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIEZsb2F0
MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm1NYXRyaXgy
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwg
ZmxvYXQqIHZhbHVlLCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9y
bU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJh
bnNwb3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1
bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9v
bCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBib29sIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplLCBFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFs
dWUsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtTWF0
cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4g
dHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9p
ZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFy
cmF5KiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9z
ZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKIAog
ICAgIHZvaWQgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7CiAgICAg
dm9pZCB2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOwogCi0g
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCB4KTsKLSAg
ICB2b2lkIHZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZGV4LCBGbG9hdDMyQXJyYXkq
IHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmRleCwg
ZmxvYXQqIHZhbHVlcywgaW50IHNpemUpOwotICAgIHZvaWQgdmVydGV4QXR0cmliMmYodW5zaWdu
ZWQgbG9uZyBpbmRleCwgZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIy
ZnYodW5zaWduZWQgbG9uZyBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwotICAgIHZvaWQg
dmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0KiB2YWx1ZXMsIGludCBz
aXplKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGZsb2F0
IHgsIGZsb2F0IHksIGZsb2F0IHopOwotICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KHVuc2lnbmVk
IGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJp
YjNmdih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7Ci0gICAg
dm9pZCB2ZXJ0ZXhBdHRyaWI0Zih1bnNpZ25lZCBsb25nIGluZGV4LCBmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB6LCBmbG9hdCB3KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBs
b25nIGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0
ZnYodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHZhbHVlcywgaW50IHNpemUpOwotICAgIHZv
aWQgdmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZGV4LCBsb25nIHNpemUsIHVu
c2lnbmVkIGxvbmcgdHlwZSwgYm9vbCBub3JtYWxpemVkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb25nIHN0cmlkZSwgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIHZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCk7CisgICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsK
KyAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1
ZXMsIEdDM0RzaXplaSBzaXplKTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2
KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7CisgICAgdm9pZCB2ZXJ0ZXhB
dHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6
ZSk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgs
IEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeik7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0Mz
RHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKKyAgICB2b2lkIHZlcnRleEF0dHJp
YjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsK
KyAgICB2b2lkIHZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0Mz
RGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKKyAgICB2b2lkIHZl
cnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXpl
aSBzaXplKTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdD
M0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZz
ZXQsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIHZvaWQgdmlld3BvcnQobG9uZyB4LCBsb25nIHks
IGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0KTsKKyAgICB2b2lkIHZpZXdwb3J0KEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwogCiAgICAgdm9p
ZCBmb3JjZUxvc3RDb250ZXh0KCk7CiAgICAgdm9pZCBvbkxvc3RDb250ZXh0KCk7CkBAIC0zMzgs
MTggKzMyMCwxOCBAQCBwdWJsaWM6CiAKICAgICAvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXpl
IGluIGJ5dGVzIG9mIE9wZW5HTCBkYXRhIHR5cGVzCiAgICAgLy8gbGlrZSBHTF9GTE9BVCwgR0xf
SU5ULCBldGMuCi0gICAgaW50IHNpemVJbkJ5dGVzKGludCB0eXBlKTsKKyAgICB1bnNpZ25lZCBp
bnQgc2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSk7CiAKICAgICAvLyBCYXNpYyB2YWxpZGF0aW9u
IG9mIGNvdW50IGFuZCBvZmZzZXQgYWdhaW5zdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gZWxlbWVu
dCBhcnJheSBidWZmZXIKLSAgICBib29sIHZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZSh1bnNpZ25l
ZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIHR5cGUsIGxvbmcgb2Zmc2V0KTsKKyAgICBib29s
IHZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUs
IEdDM0RpbnRwdHIgb2Zmc2V0KTsKIAogICAgIC8vIENvbnNlcnZhdGl2ZSBidXQgcXVpY2sgaW5k
ZXggdmFsaWRhdGlvbgotICAgIGJvb2wgdmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKHVu
c2lnbmVkIGxvbmcgdHlwZSwgbG9uZyYgbnVtRWxlbWVudHNSZXF1aXJlZCk7CisgICAgYm9vbCB2
YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgaW50JiBudW1FbGVt
ZW50c1JlcXVpcmVkKTsKIAogICAgIC8vIFByZWNpc2UgYnV0IHNsb3cgaW5kZXggdmFsaWRhdGlv
biAtLSBvbmx5IGRvbmUgaWYgY29uc2VydmF0aXZlIGNoZWNrcyBmYWlsCi0gICAgYm9vbCB2YWxp
ZGF0ZUluZGV4QXJyYXlQcmVjaXNlKHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcg
dHlwZSwgbG9uZyBvZmZzZXQsIGxvbmcmIG51bUVsZW1lbnRzUmVxdWlyZWQpOworICAgIGJvb2wg
dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUs
IEdDM0RpbnRwdHIgb2Zmc2V0LCBpbnQmIG51bUVsZW1lbnRzUmVxdWlyZWQpOwogICAgIC8vIElm
IG51bUVsZW1lbnRzIDw9IDAsIHdlIG9ubHkgY2hlY2sgaWYgZWFjaCBlbmFibGVkIHZlcnRleCBh
dHRyaWJ1dGUgaXMgYm91bmQgdG8gYSBidWZmZXIuCi0gICAgYm9vbCB2YWxpZGF0ZVJlbmRlcmlu
Z1N0YXRlKGxvbmcgbnVtRWxlbWVudHMpOworICAgIGJvb2wgdmFsaWRhdGVSZW5kZXJpbmdTdGF0
ZShpbnQgbnVtRWxlbWVudHMpOwogCiAgICAgYm9vbCB2YWxpZGF0ZVdlYkdMT2JqZWN0KFdlYkdM
T2JqZWN0KiBvYmplY3QpOwogCkBAIC0zNzksMTEgKzM2MSwxMSBAQCBwdWJsaWM6CiAgICAgY2xh
c3MgVmVydGV4QXR0cmliU3RhdGUgewogICAgIHB1YmxpYzoKICAgICAgICAgVmVydGV4QXR0cmli
U3RhdGUoKQotICAgICAgICAgICAgOiBlbmFibGVkKGZhbHNlKQorICAgICAgICAgICAgOiBlbmFi
bGVkKDApCiAgICAgICAgICAgICAsIGJ5dGVzUGVyRWxlbWVudCgwKQogICAgICAgICAgICAgLCBz
aXplKDQpCiAgICAgICAgICAgICAsIHR5cGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUKQotICAg
ICAgICAgICAgLCBub3JtYWxpemVkKGZhbHNlKQorICAgICAgICAgICAgLCBub3JtYWxpemVkKDAp
CiAgICAgICAgICAgICAsIHN0cmlkZSgxNikKICAgICAgICAgICAgICwgb3JpZ2luYWxTdHJpZGUo
MCkKICAgICAgICAgICAgICwgb2Zmc2V0KDApCkBAIC0zOTksMjMgKzM4MSwyMyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICB2YWx1ZVszXSA9IDEuMGY7CiAgICAgICAgIH0KIAotICAgICAgICBib29s
IGVuYWJsZWQ7CisgICAgICAgIEdDM0Rib29sZWFuIGVuYWJsZWQ7CiAgICAgICAgIFJlZlB0cjxX
ZWJHTEJ1ZmZlcj4gYnVmZmVyQmluZGluZzsKLSAgICAgICAgbG9uZyBieXRlc1BlckVsZW1lbnQ7
Ci0gICAgICAgIGxvbmcgc2l6ZTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyB0eXBlOwotICAgICAg
ICBib29sIG5vcm1hbGl6ZWQ7Ci0gICAgICAgIGxvbmcgc3RyaWRlOwotICAgICAgICBsb25nIG9y
aWdpbmFsU3RyaWRlOwotICAgICAgICBsb25nIG9mZnNldDsKLSAgICAgICAgZmxvYXQgdmFsdWVb
NF07CisgICAgICAgIEdDM0RzaXplaSBieXRlc1BlckVsZW1lbnQ7CisgICAgICAgIEdDM0RpbnQg
c2l6ZTsKKyAgICAgICAgR0MzRGVudW0gdHlwZTsKKyAgICAgICAgR0MzRGJvb2xlYW4gbm9ybWFs
aXplZDsKKyAgICAgICAgR0MzRHNpemVpIHN0cmlkZTsKKyAgICAgICAgR0MzRHNpemVpIG9yaWdp
bmFsU3RyaWRlOworICAgICAgICBHQzNEaW50cHRyIG9mZnNldDsKKyAgICAgICAgR0MzRGZsb2F0
IHZhbHVlWzRdOwogICAgIH07CiAKICAgICBWZWN0b3I8VmVydGV4QXR0cmliU3RhdGU+IG1fdmVy
dGV4QXR0cmliU3RhdGU7CiAgICAgdW5zaWduZWQgbV9tYXhWZXJ0ZXhBdHRyaWJzOwogICAgIFJl
ZlB0cjxXZWJHTEJ1ZmZlcj4gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyOwogICAgIGxvbmcgbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyU2l6ZTsKLSAgICBmbG9hdCBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVs0XTsKKyAgICBHQzNEZmxvYXQgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbNF07CiAKICAg
ICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBtX2N1cnJlbnRQcm9ncmFtOwogICAgIFJlZlB0cjxXZWJH
TEZyYW1lYnVmZmVyPiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKQEAgLTQ0NCwyMyArNDI2LDIzIEBA
IHB1YmxpYzoKICAgICB9OwogICAgIExSVUltYWdlQnVmZmVyQ2FjaGUgbV92aWRlb0NhY2hlOwog
Ci0gICAgaW50IG1fbWF4VGV4dHVyZVNpemU7Ci0gICAgaW50IG1fbWF4Q3ViZU1hcFRleHR1cmVT
aXplOwotICAgIGludCBtX21heFRleHR1cmVMZXZlbDsKLSAgICBpbnQgbV9tYXhDdWJlTWFwVGV4
dHVyZUxldmVsOworICAgIEdDM0RpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKKyAgICBHQzNEaW50IG1f
bWF4Q3ViZU1hcFRleHR1cmVTaXplOworICAgIEdDM0RpbnQgbV9tYXhUZXh0dXJlTGV2ZWw7Cisg
ICAgR0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7CiAKLSAgICBpbnQgbV9wYWNrQWxp
Z25tZW50OwotICAgIGludCBtX3VucGFja0FsaWdubWVudDsKKyAgICBHQzNEaW50IG1fcGFja0Fs
aWdubWVudDsKKyAgICBHQzNEaW50IG1fdW5wYWNrQWxpZ25tZW50OwogICAgIGJvb2wgbV91bnBh
Y2tGbGlwWTsKICAgICBib29sIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYTsKLSAgICB1bnNpZ25l
ZCBsb25nIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb247CisgICAgR0MzRGVudW0gbV91bnBh
Y2tDb2xvcnNwYWNlQ29udmVyc2lvbjsKICAgICBib29sIG1fY29udGV4dExvc3Q7CiAgICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogCiAgICAgbG9uZyBtX3N0
ZW5jaWxCaXRzOwotICAgIHVuc2lnbmVkIGxvbmcgbV9zdGVuY2lsTWFzaywgbV9zdGVuY2lsTWFz
a0JhY2s7Ci0gICAgbG9uZyBtX3N0ZW5jaWxGdW5jUmVmLCBtX3N0ZW5jaWxGdW5jUmVmQmFjazsg
Ly8gTm90ZSB0aGF0IHRoZXNlIGFyZSB0aGUgdXNlciBzcGVjaWZpZWQgdmFsdWVzLCBub3QgdGhl
IGludGVybmFsIGNsYW1wZWQgdmFsdWUuCi0gICAgdW5zaWduZWQgbG9uZyBtX3N0ZW5jaWxGdW5j
TWFzaywgbV9zdGVuY2lsRnVuY01hc2tCYWNrOworICAgIEdDM0R1aW50IG1fc3RlbmNpbE1hc2ss
IG1fc3RlbmNpbE1hc2tCYWNrOworICAgIEdDM0RpbnQgbV9zdGVuY2lsRnVuY1JlZiwgbV9zdGVu
Y2lsRnVuY1JlZkJhY2s7IC8vIE5vdGUgdGhhdCB0aGVzZSBhcmUgdGhlIHVzZXIgc3BlY2lmaWVk
IHZhbHVlcywgbm90IHRoZSBpbnRlcm5hbCBjbGFtcGVkIHZhbHVlLgorICAgIEdDM0R1aW50IG1f
c3RlbmNpbEZ1bmNNYXNrLCBtX3N0ZW5jaWxGdW5jTWFza0JhY2s7CiAKICAgICBib29sIG1faXNH
TEVTMkNvbXBsaWFudDsKICAgICBib29sIG1faXNHTEVTMk5QT1RTdHJpY3Q7CkBAIC00NzMsMjYg
KzQ1NSwyNiBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPFdlYktpdExvc2VDb250ZXh0PiBtX3dlYmtp
dExvc2VDb250ZXh0OwogCiAgICAgLy8gSGVscGVycyBmb3IgZ2V0UGFyYW1ldGVyIGFuZCBvdGhl
cnMKLSAgICBXZWJHTEdldEluZm8gZ2V0Qm9vbGVhblBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHBu
YW1lKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKHVuc2lnbmVk
IGxvbmcgcG5hbWUpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRGbG9hdFBhcmFtZXRlcih1bnNpZ25l
ZCBsb25nIHBuYW1lKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0SW50UGFyYW1ldGVyKHVuc2lnbmVk
IGxvbmcgcG5hbWUpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRMb25nUGFyYW1ldGVyKHVuc2lnbmVk
IGxvbmcgcG5hbWUpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRVbnNpZ25lZExvbmdQYXJhbWV0ZXIo
dW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFdlYkdMRmxvYXRBcnJh
eVBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0V2Vi
R0xJbnRBcnJheVBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHBuYW1lKTsKLQotICAgIHZvaWQgdGV4
SW1hZ2UyREJhc2UodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50
ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWln
aHQsIHVuc2lnbmVkIGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZv
cm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCB0ZXhJbWFnZTJESW1wbCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNp
Z25lZCBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZv
cm1hdCwgdW5zaWduZWQgdHlwZSwgSW1hZ2UqIGltYWdlLAorICAgIFdlYkdMR2V0SW5mbyBnZXRC
b29sZWFuUGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0Qm9v
bGVhbkFycmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0
RmxvYXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpOworICAgIFdlYkdMR2V0SW5mbyBnZXRJbnRQ
YXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpOworICAgIFdlYkdMR2V0SW5mbyBnZXRMb25nUGFyYW1l
dGVyKEdDM0RlbnVtIHBuYW1lKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0VW5zaWduZWRMb25nUGFy
YW1ldGVyKEdDM0RlbnVtIHBuYW1lKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0V2ViR0xGbG9hdEFy
cmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0V2ViR0xJ
bnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSk7CisKKyAgICB2b2lkIHRleEltYWdlMkRC
YXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsCisgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIHRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBpbWFnZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgdGV4U3ViSW1hZ2UyREJhc2UodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZl
bCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHRleFN1YkltYWdlMkRJbXBsKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2
ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwKKyAgICB2b2lkIHRleFN1YkltYWdlMkRC
YXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZvaWQgdGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEltYWdlKiBpbWFnZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBF
eGNlcHRpb25Db2RlJik7CiAKICAgICB2b2lkIGhhbmRsZU5QT1RUZXh0dXJlcyhib29sIHByZXBh
cmVUb0RyYXcpOwpAQCAtNTAyLDExICs0ODQsMTEgQEAgcHVibGljOgogICAgIC8vIEhlbHBlciBm
dW5jdGlvbiBmb3IgY29weVRleHtTdWJ9SW1hZ2UsIGNoZWNrIHdoZXRoZXIgdGhlIGludGVybmFs
Zm9ybWF0CiAgICAgLy8gYW5kIHRoZSBjb2xvciBidWZmZXIgZm9ybWF0IG9mIHRoZSBjdXJyZW50
IGJvdW5kIGZyYW1lYnVmZmVyIGNvbWJpbmF0aW9uCiAgICAgLy8gaXMgdmFsaWQuCi0gICAgYm9v
bCBpc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKHVuc2lnbmVk
IGxvbmcgdGV4SW50ZXJuYWxGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29sb3JCdWZmZXJGb3JtYXQp
OworICAgIGJvb2wgaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxp
ZChHQzNEZW51bSB0ZXhJbnRlcm5hbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gY29sb3JCdWZmZXJGb3JtYXQp
OwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJhbWVidWZmZXIn
cyBjb2xvciBidWZmZXIgZm9ybWF0LgotICAgIHVuc2lnbmVkIGxvbmcgZ2V0Qm91bmRGcmFtZWJ1
ZmZlckNvbG9yRm9ybWF0KCk7CisgICAgR0MzRGVudW0gZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9y
Rm9ybWF0KCk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFt
ZWJ1ZmZlcidzIHdpZHRoLgogICAgIGludCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKTsKQEAg
LTUxNiw3ICs0OTgsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hl
Y2sgaWYgc2l6ZSBpcyBub24tbmVnYXRpdmUuCiAgICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgYW5k
IHJldHVybiBmYWxzZSBmb3IgbmVnYXRpdmUgaW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0cnVl
LgotICAgIGJvb2wgdmFsaWRhdGVTaXplKGxvbmcgeCwgbG9uZyB5KTsKKyAgICBib29sIHZhbGlk
YXRlU2l6ZShHQzNEaW50IHgsIEdDM0RpbnQgeSk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gY2hlY2sgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBiZWxvbmcgdG8gdGhlCiAg
ICAgLy8gQVNDSUkgc3Vic2V0IGFzIGRlZmluZWQgaW4gR0xTTCBFUyAxLjAgc3BlYyBzZWN0aW9u
IDMuMS4KQEAgLTUyNSw0MSArNTA3LDQxIEBAIHB1YmxpYzoKICAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gY2hlY2sgdGFyZ2V0IGFuZCB0ZXh0dXJlIGJvdW5kIHRvIHRoZSB0YXJnZXQuCiAgICAg
Ly8gR2VuZXJhdGUgR0wgZXJyb3JzIGFuZCByZXR1cm4gMCBpZiB0YXJnZXQgaXMgaW52YWxpZCBv
ciB0ZXh0dXJlIGJvdW5kIGlzCiAgICAgLy8gbnVsbC4gIE90aGVyd2lzZSwgcmV0dXJuIHRoZSB0
ZXh0dXJlIGJvdW5kIHRvIHRoZSB0YXJnZXQuCi0gICAgV2ViR0xUZXh0dXJlKiB2YWxpZGF0ZVRl
eHR1cmVCaW5kaW5nKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3Vi
ZU1hcCk7CisgICAgV2ViR0xUZXh0dXJlKiB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKEdDM0RlbnVt
IHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApOwogCiAgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIGNoZWNrIGlucHV0IGZvcm1hdC90eXBlIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4
e1N1Yn1JbWFnZS4KICAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2Ug
aWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAgICBib29sIHZhbGlkYXRlVGV4RnVuY0Zvcm1h
dEFuZFR5cGUodW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSk7CisgICAg
Ym9vbCB2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQgbGV2ZWwg
Zm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgogICAgIC8vIEdlbmVyYXRlcyBHTCBl
cnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBsZXZlbCBpcyBpbnZhbGlkLgotICAgIGJvb2wgdmFs
aWRhdGVUZXhGdW5jTGV2ZWwodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwpOworICAg
IGJvb2wgdmFsaWRhdGVUZXhGdW5jTGV2ZWwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
KTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBwYXJhbWV0ZXJzIGZv
ciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KICAgICAvLyBHZW5lcmF0ZXMgR0wgZXJy
b3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAgICBib29s
IHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnModW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2
ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50
ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgd2lk
dGgsIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSk7CisgICAg
Ym9vbCB2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSk7CiAKICAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhhdCB0aGUgZ2l2ZW4gQXJyYXlCdWZm
ZXJWaWV3CiAgICAgLy8gaXMgb2YgdGhlIGNvcnJlY3QgdHlwZSBhbmQgY29udGFpbnMgZW5vdWdo
IGRhdGEgZm9yIHRoZSB0ZXhJbWFnZSBjYWxsLgogICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBh
bmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIGJvb2wgdmFs
aWRhdGVUZXhGdW5jRGF0YShsb25nIHdpZHRoLCBsb25nIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSwK
KyAgICBib29sIHZhbGlkYXRlVGV4RnVuY0RhdGEoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmll
dyogcGl4ZWxzKTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBtb2RlIGZv
ciBkcmF3e0FycmF5cy9FbGVtZW50c30uCi0gICAgYm9vbCB2YWxpZGF0ZURyYXdNb2RlKHVuc2ln
bmVkIGxvbmcpOworICAgIGJvb2wgdmFsaWRhdGVEcmF3TW9kZShHQzNEZW51bSk7CiAKICAgICAv
LyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgaWYgZnJvbnQvYmFjayBzdGVuY2lsTWFzayBh
bmQgc3RlbmNpbEZ1bmMgc2V0dGluZ3MgYXJlIHRoZSBzYW1lLgogICAgIGJvb2wgdmFsaWRhdGVT
dGVuY2lsU2V0dGluZ3MoKTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBz
dGVuY2lsIGZ1bmMuCi0gICAgYm9vbCB2YWxpZGF0ZVN0ZW5jaWxGdW5jKHVuc2lnbmVkIGxvbmcp
OworICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsRnVuYyhHQzNEZW51bSk7CiAKICAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gZm9yIHRleFBhcmFtZXRlcmYgYW5kIHRleFBhcmFtZXRlcmkuCi0gICAgdm9p
ZCB0ZXhQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUs
IGZsb2F0IHBhcmFtaSwgaW50IHBhcmFtZiwgYm9vbCBpc0Zsb2F0KTsKKyAgICB2b2lkIHRleFBh
cmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW1p
LCBHQzNEaW50IHBhcmFtZiwgYm9vbCBpc0Zsb2F0KTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlv
biB0byBwcmludCB3YXJuaW5ncyB0byBjb25zb2xlLiBDdXJyZW50bHkKICAgICAvLyB1c2VkIG9u
bHkgdG8gd2FybiBhYm91dCB1c2Ugb2Ygb2Jzb2xldGUgZnVuY3Rpb25zLgpAQCAtNTY3LDM2ICs1
NDksMzYgQEAgcHVibGljOgogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlu
cHV0IHBhcmFtZXRlcnMgZm9yIGZyYW1lYnVmZmVyIGZ1bmN0aW9ucy4KICAgICAvLyBHZW5lcmF0
ZSBHTCBlcnJvciBpZiBwYXJhbWV0ZXJzIGFyZSBpbGxlZ2FsLgotICAgIGJvb2wgdmFsaWRhdGVG
cmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBs
b25nIGF0dGFjaG1lbnQpOworICAgIGJvb2wgdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0
ZXJzKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCk7CiAKICAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZXF1YXRpb24gbW9kZS4KLSAgICBib29sIHZh
bGlkYXRlQmxlbmRFcXVhdGlvbih1bnNpZ25lZCBsb25nKTsKKyAgICBib29sIHZhbGlkYXRlQmxl
bmRFcXVhdGlvbihHQzNEZW51bSk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRh
dGUgYmxlbmQgZnVuYyBmYWN0b3JzLgotICAgIGJvb2wgdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3Jz
KHVuc2lnbmVkIGxvbmcgc3JjLCB1bnNpZ25lZCBsb25nIGRzdCk7CisgICAgYm9vbCB2YWxpZGF0
ZUJsZW5kRnVuY0ZhY3RvcnMoR0MzRGVudW0gc3JjLCBHQzNEZW51bSBkc3QpOwogCiAgICAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgR0wgY2FwYWJpbGl0eS4KLSAgICBib29sIHZh
bGlkYXRlQ2FwYWJpbGl0eSh1bnNpZ25lZCBsb25nKTsKKyAgICBib29sIHZhbGlkYXRlQ2FwYWJp
bGl0eShHQzNEZW51bSk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgaW5w
dXQgcGFyYW1ldGVycyBmb3IgdW5pZm9ybSBmdW5jdGlvbnMuCi0gICAgYm9vbCB2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5KiB2LCBpbnQgbW9kKTsKLSAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBp
bnQgbW9kKTsKLSAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCB2b2lkKiB2LCBpbnQgc2l6ZSwgaW50IG1vZCk7Ci0g
ICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgaW50
IG1vZCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIHZvaWQqIHYsIGlu
dCBzaXplLCBpbnQgbW9kKTsKKyAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEdDM0Rz
aXplaSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEdDM0RzaXplaSBtb2Qp
OworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIHZvaWQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgbW9k
KTsKKyAgICBib29sIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJB
cnJheSogdiwgR0MzRHNpemVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQ
YXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIG1vZCk7CiAK
ICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgcGFyYW1ldGVycyBmb3IgYnVmZmVy
RGF0YS4KICAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgYm91bmQgYnVmZmVyIHRvIHRhcmdldCwg
b3IgMCBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIFdlYkdMQnVmZmVyKiB2YWxpZGF0
ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25n
IHVzYWdlKTsKKyAgICBXZWJHTEJ1ZmZlciogdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHVzYWdlKTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlv
bnMgZm9yIHZlcnRleEF0dHJpYk5me3Z9LgotICAgIHZvaWQgdmVydGV4QXR0cmliZkltcGwodW5z
aWduZWQgbG9uZyBpbmRleCwgaW50IGV4cGVjdGVkU2l6ZSwgZmxvYXQgdjAsIGZsb2F0IHYxLCBm
bG9hdCB2MiwgZmxvYXQgdjMpOwotICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBsKHVuc2lnbmVk
IGxvbmcgaW5kZXgsIEZsb2F0MzJBcnJheSogdiwgaW50IGV4cGVjdGVkU2l6ZSk7Ci0gICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWJmdkltcGwodW5zaWduZWQgbG9uZyBpbmRleCwgZmxvYXQqIHYsIGludCBz
aXplLCBpbnQgZXhwZWN0ZWRTaXplKTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYmZJbXBsKEdDM0R1
aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9h
dCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpOworICAgIHZvaWQgdmVydGV4QXR0cmli
ZnZJbXBsKEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXplaSBleHBlY3Rl
ZFNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBsKEdDM0R1aW50IGluZGV4LCBHQzNE
ZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKTsKIAogICAg
IC8vIEhlbHBlcnMgZm9yIHNpbXVsYXRpbmcgdmVydGV4QXR0cmliMAogICAgIHZvaWQgaW5pdFZl
cnRleEF0dHJpYjAoKTsKLSAgICBib29sIHNpbXVsYXRlVmVydGV4QXR0cmliMChsb25nIG51bVZl
cnRleCk7CisgICAgYm9vbCBzaW11bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHNpemVpIG51bVZlcnRl
eCk7CiAgICAgdm9pZCByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigp
OwogCiAgICAgZnJpZW5kIGNsYXNzIFdlYkdMU3RhdGVSZXN0b3JlcjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAJKHJldmlzaW9uIDc1NTMxKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMywxMiArMzMsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotUGFzc1Jl
ZlB0cjxXZWJHTFNoYWRlcj4gV2ViR0xTaGFkZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqIGN0eCwgR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdMRW51bVR5cGUgdHlwZSkKK1Bhc3NSZWZQ
dHI8V2ViR0xTaGFkZXI+IFdlYkdMU2hhZGVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0
KiBjdHgsIEdDM0RlbnVtIHR5cGUpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTFNo
YWRlcihjdHgsIHR5cGUpKTsKIH0KIAotV2ViR0xTaGFkZXI6OldlYkdMU2hhZGVyKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY3R4LCBHcmFwaGljc0NvbnRleHQzRDo6V2ViR0xFbnVtVHlwZSB0eXBl
KQorV2ViR0xTaGFkZXI6OldlYkdMU2hhZGVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4LCBH
QzNEZW51bSB0eXBlKQogICAgIDogV2ViR0xPYmplY3QoY3R4KQogICAgICwgbV90eXBlKHR5cGUp
CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgJKHJldmlz
aW9uIDc1NTMxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsMTggKzM3LDE4IEBAIGNsYXNzIFdlYkdMU2hhZGVyIDogcHVi
bGljIFdlYkdMT2JqZWN0IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTFNoYWRlcigpIHsg
ZGVsZXRlT2JqZWN0KCk7IH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBj
cmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiwgR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdMRW51
bVR5cGUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGUoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiwgR0MzRGVudW0pOwogCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6Oldl
YkdMRW51bVR5cGUgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIEdDM0Rl
bnVtIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIAogcHJpdmF0ZToKLSAgICBX
ZWJHTFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBHcmFwaGljc0NvbnRleHQzRDo6V2Vi
R0xFbnVtVHlwZSk7CisgICAgV2ViR0xTaGFkZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiwgR0Mz
RGVudW0pOwogCiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9i
amVjdCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkZXIoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CiAKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6V2ViR0xFbnVtVHlwZSBtX3R5cGU7CisgICAg
R0MzRGVudW0gbV90eXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCShyZXZpc2lvbiA3NTUz
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgV2ViR0xUZXh0dXJlOjpXZWJHTFRleHR1cmUoV2Vi
R0xSZW5kZXJpbgogICAgIHNldE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCkt
PmNyZWF0ZVRleHR1cmUoKSk7CiB9CiAKLXZvaWQgV2ViR0xUZXh0dXJlOjpzZXRUYXJnZXQodW5z
aWduZWQgbG9uZyB0YXJnZXQsIGludCBtYXhMZXZlbCkKK3ZvaWQgV2ViR0xUZXh0dXJlOjpzZXRU
YXJnZXQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IG1heExldmVsKQogewogICAgIGlmICghb2Jq
ZWN0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBXZWJHTFRleHR1
cmU6OnNldFRhcmdldCh1bnNpZ25lZCBsbwogICAgIH0KIH0KIAotdm9pZCBXZWJHTFRleHR1cmU6
OnNldFBhcmFtZXRlcmkodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50IHBhcmFtKQordm9pZCBXZWJH
TFRleHR1cmU6OnNldFBhcmFtZXRlcmkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCiB7
CiAgICAgaWYgKCFvYmplY3QoKSB8fCAhbV90YXJnZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTEy
NCwxNSArMTI0LDE1IEBAIHZvaWQgV2ViR0xUZXh0dXJlOjpzZXRQYXJhbWV0ZXJpKHVuc2lnbmUK
ICAgICB1cGRhdGUoKTsKIH0KIAotdm9pZCBXZWJHTFRleHR1cmU6OnNldFBhcmFtZXRlcmYodW5z
aWduZWQgbG9uZyBwbmFtZSwgZmxvYXQgcGFyYW0pCit2b2lkIFdlYkdMVGV4dHVyZTo6c2V0UGFy
YW1ldGVyZihHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtKQogewogICAgIGlmICghb2Jq
ZWN0KCkgfHwgIW1fdGFyZ2V0KQogICAgICAgICByZXR1cm47Ci0gICAgaW50IGlwYXJhbSA9IHN0
YXRpY19jYXN0PGludD4ocGFyYW0pOworICAgIEdDM0RpbnQgaXBhcmFtID0gc3RhdGljX2Nhc3Q8
R0MzRGludD4ocGFyYW0pOwogICAgIHNldFBhcmFtZXRlcmkocG5hbWUsIGlwYXJhbSk7CiB9CiAK
LXZvaWQgV2ViR0xUZXh0dXJlOjpzZXRMZXZlbEluZm8odW5zaWduZWQgbG9uZyB0YXJnZXQsIGlu
dCBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCB1bnNpZ25lZCBsb25nIHR5cGUpCit2b2lkIFdlYkdMVGV4dHVyZTo6c2V0TGV2ZWxJbmZv
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gdHlwZSkKIHsKICAg
ICBpZiAoIW9iamVjdCgpIHx8ICFtX3RhcmdldCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU0LDEw
ICsxNTQsMTAgQEAgdm9pZCBXZWJHTFRleHR1cmU6OmdlbmVyYXRlTWlwbWFwTGV2ZWxJbgogICAg
IGlmICghbV9pc0NvbXBsZXRlKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBt
X2luZm8uc2l6ZSgpOyArK2lpKSB7CiAgICAgICAgICAgICBjb25zdCBMZXZlbEluZm8mIGluZm8w
ID0gbV9pbmZvW2lpXVswXTsKLSAgICAgICAgICAgIGludCB3aWR0aCA9IGluZm8wLndpZHRoOwot
ICAgICAgICAgICAgaW50IGhlaWdodCA9IGluZm8wLmhlaWdodDsKLSAgICAgICAgICAgIGludCBs
ZXZlbENvdW50ID0gY29tcHV0ZUxldmVsQ291bnQod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAg
ICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgKytsZXZlbCkgeworICAg
ICAgICAgICAgR0MzRHNpemVpIHdpZHRoID0gaW5mbzAud2lkdGg7CisgICAgICAgICAgICBHQzNE
c2l6ZWkgaGVpZ2h0ID0gaW5mbzAuaGVpZ2h0OworICAgICAgICAgICAgR0MzRGludCBsZXZlbENv
dW50ID0gY29tcHV0ZUxldmVsQ291bnQod2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBmb3Ig
KEdDM0RpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7ICsrbGV2ZWwpIHsKICAgICAg
ICAgICAgICAgICB3aWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IDEpOwogICAgICAgICAgICAg
ICAgIGhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiAxKTsKICAgICAgICAgICAgICAgICBM
ZXZlbEluZm8mIGluZm8gPSBtX2luZm9baWldW2xldmVsXTsKQEAgLTE2OSw3ICsxNjksNyBAQCB2
b2lkIFdlYkdMVGV4dHVyZTo6Z2VuZXJhdGVNaXBtYXBMZXZlbEluCiAgICAgbV9uZWVkVG9Vc2VC
bGFja1RleHR1cmUgPSBmYWxzZTsKIH0KIAotdW5zaWduZWQgbG9uZyBXZWJHTFRleHR1cmU6Omdl
dEludGVybmFsRm9ybWF0KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwpIGNvbnN0CitH
QzNEZW51bSBXZWJHTFRleHR1cmU6OmdldEludGVybmFsRm9ybWF0KEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCkgY29uc3QKIHsKICAgICBjb25zdCBMZXZlbEluZm8qIGluZm8gPSBnZXRM
ZXZlbEluZm8odGFyZ2V0LCBsZXZlbCk7CiAgICAgaWYgKCFpbmZvKQpAQCAtMTc3LDcgKzE3Nyw3
IEBAIHVuc2lnbmVkIGxvbmcgV2ViR0xUZXh0dXJlOjpnZXRJbnRlcm5hbEYKICAgICByZXR1cm4g
aW5mby0+aW50ZXJuYWxGb3JtYXQ7CiB9CiAKLXVuc2lnbmVkIGxvbmcgV2ViR0xUZXh0dXJlOjpn
ZXRUeXBlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwpIGNvbnN0CitHQzNEZW51bSBX
ZWJHTFRleHR1cmU6OmdldFR5cGUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKSBjb25z
dAogewogICAgIGNvbnN0IExldmVsSW5mbyogaW5mbyA9IGdldExldmVsSW5mbyh0YXJnZXQsIGxl
dmVsKTsKICAgICBpZiAoIWluZm8pCkBAIC0xODUsNyArMTg1LDcgQEAgdW5zaWduZWQgbG9uZyBX
ZWJHTFRleHR1cmU6OmdldFR5cGUodW5zaQogICAgIHJldHVybiBpbmZvLT50eXBlOwogfQogCi1p
bnQgV2ViR0xUZXh0dXJlOjpnZXRXaWR0aCh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IGxldmVs
KSBjb25zdAorR0MzRHNpemVpIFdlYkdMVGV4dHVyZTo6Z2V0V2lkdGgoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsKSBjb25zdAogewogICAgIGNvbnN0IExldmVsSW5mbyogaW5mbyA9IGdl
dExldmVsSW5mbyh0YXJnZXQsIGxldmVsKTsKICAgICBpZiAoIWluZm8pCkBAIC0xOTMsNyArMTkz
LDcgQEAgaW50IFdlYkdMVGV4dHVyZTo6Z2V0V2lkdGgodW5zaWduZWQgbG9uZwogICAgIHJldHVy
biBpbmZvLT53aWR0aDsKIH0KIAotaW50IFdlYkdMVGV4dHVyZTo6Z2V0SGVpZ2h0KHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwpIGNvbnN0CitHQzNEc2l6ZWkgV2ViR0xUZXh0dXJlOjpn
ZXRIZWlnaHQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKSBjb25zdAogewogICAgIGNv
bnN0IExldmVsSW5mbyogaW5mbyA9IGdldExldmVsSW5mbyh0YXJnZXQsIGxldmVsKTsKICAgICBp
ZiAoIWluZm8pCkBAIC0yMDEsOCArMjAxLDkgQEAgaW50IFdlYkdMVGV4dHVyZTo6Z2V0SGVpZ2h0
KHVuc2lnbmVkIGxvbgogICAgIHJldHVybiBpbmZvLT5oZWlnaHQ7CiB9CiAKLWJvb2wgV2ViR0xU
ZXh0dXJlOjppc05QT1QodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKK2Jvb2wgV2Vi
R0xUZXh0dXJlOjppc05QT1QoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQogewor
ICAgIEFTU0VSVCh3aWR0aCA+PSAwICYmIGhlaWdodCA+PSAwKTsKICAgICBpZiAoIXdpZHRoIHx8
ICFoZWlnaHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoKHdpZHRoICYgKHdpZHRo
IC0gMSkpIHx8IChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpKQpAQCAtMjI5LDcgKzIzMCw3IEBAIHZv
aWQgV2ViR0xUZXh0dXJlOjpkZWxldGVPYmplY3RJbXBsKFBsYXQKICAgICBjb250ZXh0KCktPmdy
YXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVRleHR1cmUob2JqZWN0KTsKIH0KIAotaW50IFdlYkdM
VGV4dHVyZTo6bWFwVGFyZ2V0VG9JbmRleCh1bnNpZ25lZCBsb25nIHRhcmdldCkgY29uc3QKK2lu
dCBXZWJHTFRleHR1cmU6Om1hcFRhcmdldFRvSW5kZXgoR0MzRGVudW0gdGFyZ2V0KSBjb25zdAog
ewogICAgIGlmIChtX3RhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCkgewog
ICAgICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKQpAQCAt
MjY4LDE3ICsyNjksMTcgQEAgYm9vbCBXZWJHTFRleHR1cmU6OmNhbkdlbmVyYXRlTWlwbWFwcygp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWludCBXZWJHTFRleHR1cmU6OmNvbXB1dGVMZXZlbENv
dW50KGludCB3aWR0aCwgaW50IGhlaWdodCkKK0dDM0RpbnQgV2ViR0xUZXh0dXJlOjpjb21wdXRl
TGV2ZWxDb3VudChHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7CiAgICAgLy8g
cmV0dXJuIDEgKyBsb2cyRmxvb3Ioc3RkOjptYXgod2lkdGgsIGhlaWdodCkpOwotICAgIGludCBu
ID0gc3RkOjptYXgod2lkdGgsIGhlaWdodCk7CisgICAgR0MzRHNpemVpIG4gPSBzdGQ6Om1heCh3
aWR0aCwgaGVpZ2h0KTsKICAgICBpZiAobiA8PSAwKQogICAgICAgICByZXR1cm4gMDsKLSAgICBp
bnQgbG9nID0gMDsKLSAgICBpbnQgdmFsdWUgPSBuOworICAgIEdDM0RpbnQgbG9nID0gMDsKKyAg
ICBHQzNEc2l6ZWkgdmFsdWUgPSBuOwogICAgIGZvciAoaW50IGlpID0gNDsgaWkgPj0gMDsgLS1p
aSkgewogICAgICAgICBpbnQgc2hpZnQgPSAoMSA8PCBpaSk7Ci0gICAgICAgIGludCB4ID0gKHZh
bHVlID4+IHNoaWZ0KTsKKyAgICAgICAgR0MzRHNpemVpIHggPSAodmFsdWUgPj4gc2hpZnQpOwog
ICAgICAgICBpZiAoeCkgewogICAgICAgICAgICAgdmFsdWUgPSB4OwogICAgICAgICAgICAgbG9n
ICs9IHNoaWZ0OwpAQCAtMjk5LDcgKzMwMCw3IEBAIHZvaWQgV2ViR0xUZXh0dXJlOjp1cGRhdGUo
KQogICAgIH0KICAgICBtX2lzQ29tcGxldGUgPSB0cnVlOwogICAgIGNvbnN0IExldmVsSW5mbyYg
Zmlyc3QgPSBtX2luZm9bMF1bMF07Ci0gICAgaW50IGxldmVsQ291bnQgPSBjb21wdXRlTGV2ZWxD
b3VudChmaXJzdC53aWR0aCwgZmlyc3QuaGVpZ2h0KTsKKyAgICBHQzNEaW50IGxldmVsQ291bnQg
PSBjb21wdXRlTGV2ZWxDb3VudChmaXJzdC53aWR0aCwgZmlyc3QuaGVpZ2h0KTsKICAgICBpZiAo
bGV2ZWxDb3VudCA8IDEpCiAgICAgICAgIG1faXNDb21wbGV0ZSA9IGZhbHNlOwogICAgIGVsc2Ug
ewpAQCAtMzExLDkgKzMxMiw5IEBAIHZvaWQgV2ViR0xUZXh0dXJlOjp1cGRhdGUoKQogICAgICAg
ICAgICAgICAgIG1faXNDb21wbGV0ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IHdpZHRoID0gaW5mbzAud2lkdGg7Ci0gICAg
ICAgICAgICBpbnQgaGVpZ2h0ID0gaW5mbzAuaGVpZ2h0OwotICAgICAgICAgICAgZm9yIChpbnQg
bGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7ICsrbGV2ZWwpIHsKKyAgICAgICAgICAgIEdD
M0RzaXplaSB3aWR0aCA9IGluZm8wLndpZHRoOworICAgICAgICAgICAgR0MzRHNpemVpIGhlaWdo
dCA9IGluZm8wLmhlaWdodDsKKyAgICAgICAgICAgIGZvciAoR0MzRGludCBsZXZlbCA9IDE7IGxl
dmVsIDwgbGV2ZWxDb3VudDsgKytsZXZlbCkgewogICAgICAgICAgICAgICAgIHdpZHRoID0gc3Rk
OjptYXgoMSwgd2lkdGggPj4gMSk7CiAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gc3RkOjptYXgo
MSwgaGVpZ2h0ID4+IDEpOwogICAgICAgICAgICAgICAgIGNvbnN0IExldmVsSW5mbyYgaW5mbyA9
IG1faW5mb1tpaV1bbGV2ZWxdOwpAQCAtMzM4LDE0ICszMzksMTQgQEAgdm9pZCBXZWJHTFRleHR1
cmU6OnVwZGF0ZSgpCiAgICAgICAgIG1fbmVlZFRvVXNlQmxhY2tUZXh0dXJlID0gdHJ1ZTsKIH0K
IAotY29uc3QgV2ViR0xUZXh0dXJlOjpMZXZlbEluZm8qIFdlYkdMVGV4dHVyZTo6Z2V0TGV2ZWxJ
bmZvKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwpIGNvbnN0Citjb25zdCBXZWJHTFRl
eHR1cmU6OkxldmVsSW5mbyogV2ViR0xUZXh0dXJlOjpnZXRMZXZlbEluZm8oR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsKSBjb25zdAogewogICAgIGlmICghb2JqZWN0KCkgfHwgIW1fdGFy
Z2V0KQogICAgICAgICByZXR1cm4gMDsKICAgICBpbnQgdGFyZ2V0SW5kZXggPSBtYXBUYXJnZXRU
b0luZGV4KHRhcmdldCk7CiAgICAgaWYgKHRhcmdldEluZGV4IDwgMCB8fCB0YXJnZXRJbmRleCA+
PSBzdGF0aWNfY2FzdDxpbnQ+KG1faW5mby5zaXplKCkpKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID49IHN0YXRpY19jYXN0PGludD4obV9pbmZvW3Rhcmdl
dEluZGV4XS5zaXplKCkpKQorICAgIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPj0gc3RhdGljX2Nh
c3Q8R0MzRGludD4obV9pbmZvW3RhcmdldEluZGV4XS5zaXplKCkpKQogICAgICAgICByZXR1cm4g
MDsKICAgICByZXR1cm4gJihtX2luZm9bdGFyZ2V0SW5kZXhdW2xldmVsXSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaAkocmV2aXNpb24gNzU1MzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDAsMjUgKzQwLDI1IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYkdMVGV4dHVyZT4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCi0gICAgdm9p
ZCBzZXRUYXJnZXQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBtYXhMZXZlbCk7Ci0gICAgdm9p
ZCBzZXRQYXJhbWV0ZXJpKHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCBwYXJhbSk7Ci0gICAgdm9p
ZCBzZXRQYXJhbWV0ZXJmKHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0IHBhcmFtKTsKKyAgICB2
b2lkIHNldFRhcmdldChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbWF4TGV2ZWwpOworICAgIHZv
aWQgc2V0UGFyYW1ldGVyaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7CisgICAgdm9p
ZCBzZXRQYXJhbWV0ZXJmKEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pOwogCiAgICAg
aW50IGdldE1pbkZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fbWluRmlsdGVyOyB9CiAKLSAgICB2
b2lkIHNldExldmVsSW5mbyh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IGxldmVsLCB1bnNpZ25l
ZCBsb25nIGludGVybmFsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGxv
bmcgdHlwZSk7CisgICAgdm9pZCBzZXRMZXZlbEluZm8oR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEZW51bSB0eXBlKTsKIAogICAgIGJvb2wgY2FuR2VuZXJhdGVNaXBtYXBz
KCk7CiAgICAgLy8gR2VuZXJhdGUgYWxsIGxldmVsIGluZm9ybWF0aW9uLgogICAgIHZvaWQgZ2Vu
ZXJhdGVNaXBtYXBMZXZlbEluZm8oKTsKIAotICAgIHVuc2lnbmVkIGxvbmcgZ2V0SW50ZXJuYWxG
b3JtYXQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3Q7Ci0gICAgdW5zaWdu
ZWQgbG9uZyBnZXRUeXBlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwpIGNvbnN0Owot
ICAgIGludCBnZXRXaWR0aCh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IGxldmVsKSBjb25zdDsK
LSAgICBpbnQgZ2V0SGVpZ2h0KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwpIGNvbnN0
OworICAgIEdDM0RlbnVtIGdldEludGVybmFsRm9ybWF0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCkgY29uc3Q7CisgICAgR0MzRGVudW0gZ2V0VHlwZShHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdDM0RzaXplaSBnZXRXaWR0aChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdDM0RzaXplaSBnZXRIZWlnaHQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKSBjb25zdDsKIAogICAgIC8vIFdoZXRoZXIgd2lkdGgv
aGVpZ2h0IGlzIE5vdFBvd2VyT2ZUd28uCi0gICAgc3RhdGljIGJvb2wgaXNOUE9UKHVuc2lnbmVk
LCB1bnNpZ25lZCk7CisgICAgc3RhdGljIGJvb2wgaXNOUE9UKEdDM0RzaXplaSwgR0MzRHNpemVp
KTsKIAogICAgIGJvb2wgaXNOUE9UKCkgY29uc3Q7CiAgICAgLy8gRGV0ZXJtaW5lIGlmIHRleHR1
cmUgc2FtcGxpbmcgc2hvdWxkIGFsd2F5cyByZXR1cm4gWzAsIDAsIDAsIDFdIChPcGVuR0wgRVMg
Mi4wIFNlYyAzLjguMikuCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFz
RXZlckJlZW5Cb3VuZCgpIGNvbnN0IHsgcmV0dXJuIG9iamVjdCgpICYmIG1fdGFyZ2V0OyB9CiAK
LSAgICBzdGF0aWMgaW50IGNvbXB1dGVMZXZlbENvdW50KGludCB3aWR0aCwgaW50IGhlaWdodCk7
CisgICAgc3RhdGljIEdDM0RpbnQgY29tcHV0ZUxldmVsQ291bnQoR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KTsKIAogcHJvdGVjdGVkOgogICAgIFdlYkdMVGV4dHVyZShXZWJHTFJl
bmRlcmluZ0NvbnRleHQqKTsKQEAgLTg1LDcgKzg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgewog
ICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRJbmZvKHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxG
bXQsIGludCB3LCBpbnQgaCwgdW5zaWduZWQgbG9uZyB0cCkKKyAgICAgICAgdm9pZCBzZXRJbmZv
KEdDM0RlbnVtIGludGVybmFsRm10LCBHQzNEc2l6ZWkgdywgR0MzRHNpemVpIGgsIEdDM0RlbnVt
IHRwKQogICAgICAgICB7CiAgICAgICAgICAgICB2YWxpZCA9IHRydWU7CiAgICAgICAgICAgICBp
bnRlcm5hbEZvcm1hdCA9IGludGVybmFsRm10OwpAQCAtOTUsMjYgKzk1LDI2IEBAIHByaXZhdGU6
CiAgICAgICAgIH0KIAogICAgICAgICBib29sIHZhbGlkOwotICAgICAgICB1bnNpZ25lZCBsb25n
IGludGVybmFsRm9ybWF0OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7
Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgdHlwZTsKKyAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxG
b3JtYXQ7CisgICAgICAgIEdDM0RzaXplaSB3aWR0aDsKKyAgICAgICAgR0MzRHNpemVpIGhlaWdo
dDsKKyAgICAgICAgR0MzRGVudW0gdHlwZTsKICAgICB9OwogCiAgICAgdmlydHVhbCBib29sIGlz
VGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZvaWQgdXBkYXRlKCk7CiAK
LSAgICBpbnQgbWFwVGFyZ2V0VG9JbmRleCh1bnNpZ25lZCBsb25nKSBjb25zdDsKKyAgICBpbnQg
bWFwVGFyZ2V0VG9JbmRleChHQzNEZW51bSkgY29uc3Q7CiAKLSAgICBjb25zdCBMZXZlbEluZm8q
IGdldExldmVsSW5mbyh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IGxldmVsKSBjb25zdDsKKyAg
ICBjb25zdCBMZXZlbEluZm8qIGdldExldmVsSW5mbyhHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwpIGNvbnN0OwogCi0gICAgdW5zaWduZWQgbG9uZyBtX3RhcmdldDsKKyAgICBHQzNEZW51
bSBtX3RhcmdldDsKIAotICAgIGludCBtX21pbkZpbHRlcjsKLSAgICBpbnQgbV9tYWdGaWx0ZXI7
Ci0gICAgaW50IG1fd3JhcFM7Ci0gICAgaW50IG1fd3JhcFQ7CisgICAgR0MzRGVudW0gbV9taW5G
aWx0ZXI7CisgICAgR0MzRGVudW0gbV9tYWdGaWx0ZXI7CisgICAgR0MzRGVudW0gbV93cmFwUzsK
KyAgICBHQzNEZW51bSBtX3dyYXBUOwogCiAgICAgVmVjdG9yPFZlY3RvcjxMZXZlbEluZm8+ID4g
bV9pbmZvOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1M
b2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xVbmlmb3JtTG9jYXRpb24uY3BwCShyZXZpc2lvbiA3NTUzMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsMTIgKzMyLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLVBhc3NSZWZQdHI8
V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpjcmVhdGUoV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKQorUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1M
b2NhdGlvbj4gV2ViR0xVbmlmb3JtTG9jYXRpb246OmNyZWF0ZShXZWJHTFByb2dyYW0qIHByb2dy
YW0sIEdDM0RpbnQgbG9jYXRpb24pCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBsb2NhdGlvbikpOwogfQogCi1XZWJHTFVuaWZvcm1Mb2Nh
dGlvbjo6V2ViR0xVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxv
Y2F0aW9uKQorV2ViR0xVbmlmb3JtTG9jYXRpb246OldlYkdMVW5pZm9ybUxvY2F0aW9uKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbikKICAgICA6IG1fcHJvZ3JhbShwcm9n
cmFtKQogICAgICwgbV9sb2NhdGlvbihsb2NhdGlvbikKIHsKQEAgLTU0LDcgKzU0LDcgQEAgV2Vi
R0xQcm9ncmFtKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6cHJvZwogICAgIHJldHVybiBtX3Byb2dy
YW0uZ2V0KCk7CiB9CiAKLWxvbmcgV2ViR0xVbmlmb3JtTG9jYXRpb246OmxvY2F0aW9uKCkgY29u
c3QKK0dDM0RpbnQgV2ViR0xVbmlmb3JtTG9jYXRpb246OmxvY2F0aW9uKCkgY29uc3QKIHsKICAg
ICAvLyBJZiB0aGUgcHJvZ3JhbSBoYXMgYmVlbiBsaW5rZWQgYWdhaW4sIHRoZW4gdGhpcyBVbmlm
b3JtTG9jYXRpb24gaXMgbm8KICAgICAvLyBsb25nZXIgdmFsaWQuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgJKHJldmlzaW9u
IDc1NTMxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTkgKzM5LDE5IEBAIGNsYXNzIFdlYkdMVW5pZm9y
bUxvY2F0aW9uIDogcHVibGljIFJlZkMKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTFVuaWZv
cm1Mb2NhdGlvbigpIHsgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9j
YXRpb24+IGNyZWF0ZShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24pOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBjcmVhdGUoV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uKTsKIAogICAgIFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSgpIGNvbnN0OwogCi0gICAgbG9uZyBsb2NhdGlvbigpIGNvbnN0OworICAgIEdDM0RpbnQg
bG9jYXRpb24oKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9u
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbik7CisgICAgV2ViR0xVbmlmb3Jt
TG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uKTsKIAogcHJp
dmF0ZToKICAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBtX3Byb2dyYW07Ci0gICAgbG9uZyBtX2xv
Y2F0aW9uOwotICAgIHVuc2lnbmVkIGxvbmcgbV9saW5rQ291bnQ7CisgICAgR0MzRGludCBtX2xv
Y2F0aW9uOworICAgIHVuc2lnbmVkIG1fbGlua0NvdW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQo=
</data>
<flag name="review"
          id="70128"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>