<?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>77267</bug_id>
          
          <creation_ts>2012-01-27 18:14:07 -0800</creation_ts>
          <short_desc>Make WebGL put synthesized errors in the JS console</short_desc>
          <delta_ts>2012-01-31 19:17:29 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Gregg Tavares">gman</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>kbr</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>544566</commentid>
    <comment_count>0</comment_count>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2012-01-27 18:14:07 -0800</bug_when>
    <thetext>Make WebGL put synthesized errors in the JS console</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544568</commentid>
    <comment_count>1</comment_count>
      <attachid>124415</attachid>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2012-01-27 18:15:02 -0800</bug_when>
    <thetext>Created attachment 124415
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544571</commentid>
    <comment_count>2</comment_count>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2012-01-27 18:16:58 -0800</bug_when>
    <thetext>I don&apos;t think adding the function name passing will add that much to the overhead of calling functions. They&apos;re static data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544585</commentid>
    <comment_count>3</comment_count>
      <attachid>124415</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-27 18:46:03 -0800</bug_when>
    <thetext>Comment on attachment 124415
Patch

Attachment 124415 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11349945

New failing tests:
fast/canvas/webgl/error-reporting.html
http/tests/inspector/inspect-element.html
fast/canvas/webgl/buffer-data-array-buffer.html
fast/canvas/webgl/tex-image-and-sub-image-2d-with-video.html
fast/canvas/webgl/gl-enable-enum-test.html
fast/canvas/webgl/gl-uniformmatrix4fv.html
fast/canvas/webgl/get-active-test.html
fast/canvas/webgl/context-lost-restored.html
fast/canvas/webgl/compressed-tex-image.html
fast/canvas/webgl/read-pixels-pack-alignment.html
fast/canvas/webgl/buffer-bind-test.html
fast/canvas/webgl/null-object-behaviour.html
fast/canvas/webgl/WebGLContextEvent.html
fast/canvas/webgl/program-test.html
fast/canvas/webgl/tex-image-and-sub-image-2d-with-image.html
fast/canvas/webgl/draw-arrays-out-of-bounds.html
fast/canvas/webgl/framebuffer-test.html
fast/canvas/webgl/object-deletion-behaviour.html
fast/canvas/webgl/context-lost.html
fast/canvas/webgl/attrib-location-length-limits.html
fast/canvas/webgl/bad-arguments-test.html
fast/canvas/webgl/incorrect-context-object-behaviour.html
fast/canvas/webgl/index-validation.html
fast/canvas/webgl/gl-enum-tests.html
fast/canvas/webgl/draw-elements-out-of-bounds.html
fast/canvas/webgl/glsl-conformance.html
fast/canvas/webgl/shader-deleted-by-accessor.html
fast/canvas/webgl/invalid-passed-params.html
fast/canvas/webgl/gl-vertexattribpointer.html
fast/canvas/webgl/context-destroyed-crash.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546213</commentid>
    <comment_count>4</comment_count>
      <attachid>124415</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-31 10:31:44 -0800</bug_when>
    <thetext>Comment on attachment 124415
Patch

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

Looks good. A few minor issues. Test expectations also need to be updated in the next version of the patch. r=me

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:979
&gt; +    if (isContextLost() || !validateBlendFuncFactors(&quot;blendFunc&quot;, srcRGB, dstRGB) || !validateBlendFuncFactors(&quot;blendFunc&quot;, srcAlpha, dstAlpha))

The additional call to validateBlendFuncFactors checking srcAlpha and dstAlpha isn&apos;t correct. The restrictions on srcRGB and dstRGB don&apos;t apply to the alpha factors. See the spec and ANGLE&apos;s glBlendFuncSeparate in src/libGLESv2/libGLESv2.cpp.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2027
&gt; +        synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, &quot;generateMipmaps&quot;, &quot;level 0 not power of 2 or not all the same size&quot;);

generateMipmaps -&gt; generateMipmap

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2077
&gt; +    if (isContextLost() || !validateWebGLObject(&quot;getAttachedShader&quot;, program))

getAttachedShader -&gt; getAttachedShaders

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3136
&gt; +        synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, &quot;rendebufferStorage&quot;, &quot;no bound renderbuffer&quot;);

rendebufferStorage -&gt; renderbufferStorage</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546634</commentid>
    <comment_count>5</comment_count>
      <attachid>124847</attachid>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2012-01-31 16:43:52 -0800</bug_when>
    <thetext>Created attachment 124847
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546638</commentid>
    <comment_count>6</comment_count>
      <attachid>124415</attachid>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2012-01-31 16:48:36 -0800</bug_when>
    <thetext>Comment on attachment 124415
Patch

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

I fixed the typos and the blendFuncSeparate issue. I also added a flag m_synthesizedErrorsToConsole which defaults to false. I&apos;ll use another CL to turn it on through Settings.h for Chrome only. That way hopefully DRT won&apos;t need new expectations

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:979
&gt;&gt; +    if (isContextLost() || !validateBlendFuncFactors(&quot;blendFunc&quot;, srcRGB, dstRGB) || !validateBlendFuncFactors(&quot;blendFunc&quot;, srcAlpha, dstAlpha))
&gt; 
&gt; The additional call to validateBlendFuncFactors checking srcAlpha and dstAlpha isn&apos;t correct. The restrictions on srcRGB and dstRGB don&apos;t apply to the alpha factors. See the spec and ANGLE&apos;s glBlendFuncSeparate in src/libGLESv2/libGLESv2.cpp.

done

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2027
&gt;&gt; +        synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, &quot;generateMipmaps&quot;, &quot;level 0 not power of 2 or not all the same size&quot;);
&gt; 
&gt; generateMipmaps -&gt; generateMipmap

done

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2077
&gt;&gt; +    if (isContextLost() || !validateWebGLObject(&quot;getAttachedShader&quot;, program))
&gt; 
&gt; getAttachedShader -&gt; getAttachedShaders

done

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3136
&gt;&gt; +        synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, &quot;rendebufferStorage&quot;, &quot;no bound renderbuffer&quot;);
&gt; 
&gt; rendebufferStorage -&gt; renderbufferStorage

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546642</commentid>
    <comment_count>7</comment_count>
      <attachid>124851</attachid>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2012-01-31 16:53:16 -0800</bug_when>
    <thetext>Created attachment 124851
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546648</commentid>
    <comment_count>8</comment_count>
      <attachid>124851</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-31 16:57:14 -0800</bug_when>
    <thetext>Comment on attachment 124851
Patch

Looks good. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546727</commentid>
    <comment_count>9</comment_count>
      <attachid>124851</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 19:17:23 -0800</bug_when>
    <thetext>Comment on attachment 124851
Patch

Clearing flags on attachment: 124851

Committed r106421: &lt;http://trac.webkit.org/changeset/106421&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546728</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 19:17:29 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124415</attachid>
            <date>2012-01-27 18:15:02 -0800</date>
            <delta_ts>2012-01-31 16:48:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77267-20120127181501.patch</filename>
            <type>text/plain</type>
            <size>144939</size>
            <attacher name="Gregg Tavares">gman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzVhNmRkMzhjMzRmYmYz
MDI0MDA2NGJiNWRhZTM5Y2NmZWU3ZTdjOS4uMDM3MzE4OThmNDFlZTA4MGM3ZDQwMWYyYTgxZDQ4
MTY4N2QyODNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MyBAQAorMjAxMi0wMS0yNyAgR3Jl
Z2cgVGF2YXJlcyAgPGdtYW5AZ29vZ2xlLmNvbT4KKworICAgICAgICBNYWtlIFdlYkdMIHB1dCBz
eW50aGVzaXplZCBlcnJvcnMgaW4gdGhlIEpTIGNvbnNvbGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IGZ1bmN0aW9uYWxpdHkgc28gbm8gbmV3
IHRlc3RzLgorCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZXM6OnZhbGlkYXRl
Q29tcHJlc3NlZFRleEZ1bmNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVzOjpjb21wcmVzc2VkVGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TENvbXByZXNzZWRUZXh0dXJlczo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQpOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVzLmg6CisgICAgICAgIChXZWJHTENv
bXByZXNzZWRUZXh0dXJlcyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRl
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xEZWJ1Z1NoYWRlcnM6OmdldFRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2UpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2
ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjphdHRh
Y2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5k
QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjaGVja09iamVjdFRvQmVCb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJpbmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXByZXNzZWRUZXhTdWJJbWFn
ZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleElt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
cHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRh
Y2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNh
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVXZWJHTE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZUF0dHJpYik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZVVuaWZvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRyaWJM
b2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1
ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclBh
cmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNo
YWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRUZXhQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0VmVydGV4QXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aGludCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cGl4ZWxTdG9yZWkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVu
ZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnNjaXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpz
aGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpz
dGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0
ZW5jaWxGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpzdGVuY2lsTWFza1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2aWRlb0ZyYW1lVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTJpdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0zZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtM2kpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm00aSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00
aXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0
cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bU1hdHJpeDNmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliMWYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGYpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlld3BvcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZUxvc3RDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHRJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VSZXN0b3JlQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUxvY2F0aW9uTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5j
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
RHJhd01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVN0ZW5jaWxTZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlU3RlbmNpbEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5kRXF1YXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5k
RnVuY0ZhY3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZUNhcGFiaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQnVmZmVyRGF0YVBh
cmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZUhUTUxJbWFnZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN5bnRoZXNpemVH
TEVycm9yKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoK
KyAgICAgICAgKFdlYkdMUmVuZGVyaW5nQ29udGV4dCk6CisKIDIwMTItMDEtMjcgIEFiaGlzaGVr
IEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBDcmFzaCBpbiBEb2N1bWVu
dExvYWRlcjo6ZGV0YWNoRnJvbUZyYW1lLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZXMuY3BwCmluZGV4IDFlYWI3ODcyMzZhYzc4
ODNjNDg0ZThjMGZiN2IwODA1MGYwY2U5N2MuLjE1MTk4MGNhYTE4YjI4Nzg5ZTYwMGU5MTA0NGRj
N2Q3YjJjOWNkMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTENvbXByZXNzZWRUZXh0dXJlcy5jcHAKQEAgLTEyNSwxNiArMTI1LDE2IEBAIGJvb2wgV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZXM6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChHQzNEZW51
bSBmb3JtYXQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVzOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVm
ZmVyVmlldyogcGl4ZWxzKQorYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlczo6dmFsaWRhdGVD
b21wcmVzc2VkVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1
ZmZlclZpZXcqIHBpeGVscykKIHsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1f
Y29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKICAgICBpZiAoIXBpeGVscykgewotICAgICAg
ICBjb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVscyIpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkg
ewotICAgICAgICBjb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhl
aWdodCA8IDAiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTcyLDEyICsx
NzIsMTIgQEAgYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlczo6dmFsaWRhdGVDb21wcmVzc2Vk
VGV4RnVuY0RhdGEoR0MzRHNpemVpIHdpZHRoLCBHQzMKICAgICAgICAgfQogICAgICAgICBicmVh
azsKICAgICBkZWZhdWx0OgotICAgICAgICBjb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUs
ICJpbnZhbGlkIGZvcm1hdCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAg
aWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpICE9IGJ5dGVzUmVxdWlyZWQpIHsKLSAgICAgICAgY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUp
OworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZW5ndGggb2YgQXJyYXlCdWZmZXJWaWV3
IGlzIG5vdCBjb3JyZWN0IGZvciBkaW1lbnNpb25zIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKQEAgLTIyOSwzMCArMjI5LDI5IEBAIGJvb2wgV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZXM6OnZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMoR0MzRGVudW0gdGFyZ2V0CiB2
b2lkIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVzOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6
ZWkgd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlC
dWZmZXJWaWV3KiBkYXRhKQogewotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9j
b250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpOwogICAgIGlmIChtX2NvbnRleHQtPmlzQ29udGV4
dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4
Rm9ybWF0KGludGVybmFsZm9ybWF0KSkgewotICAgICAgICBjb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY29t
cHJlc3NlZFRleEltYWdlMkQiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGlmIChib3JkZXIpIHsKLSAgICAgICAgY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiY29tcHJlc3NlZFRleEltYWdlMkQiLCAiYm9yZGVyIG5vdCAwIik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YSh3aWR0
aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZGF0YSkpCisgICAgaWYgKCF2YWxpZGF0ZUNvbXBy
ZXNzZWRUZXhGdW5jRGF0YSgiY29tcHJlc3NlZFRleEltYWdlMkQiLCB3aWR0aCwgaGVpZ2h0LCBp
bnRlcm5hbGZvcm1hdCwgZGF0YSkpCiAgICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUq
IHRleCA9IG1fY29udGV4dC0+dmFsaWRhdGVUZXh0dXJlQmluZGluZyh0YXJnZXQsIHRydWUpOwor
ICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gbV9jb250ZXh0LT52YWxpZGF0ZVRleHR1cmVCaW5kaW5n
KCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CiAgICAgaWYgKCF0ZXgpCiAg
ICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fY29udGV4dC0+aXNHTEVTMk5QT1RTdHJpY3QoKSkg
ewogICAgICAgICBpZiAobGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdo
dCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb21wcmVzc2VkVGV4
SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KLSAgICBjb250ZXh0LT5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+
YmFzZUFkZHJlc3MoKSk7CisgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5jb21w
cmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvcmRlciwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsK
ICAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwogICAgIG1fY29u
dGV4dC0+Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI2MCwzMiArMjU5
LDMxIEBAIHZvaWQgV2ViR0xDb21wcmVzc2VkVGV4dHVyZXM6OmNvbXByZXNzZWRUZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlCiB2b2lkIFdlYkdMQ29tcHJlc3NlZFRleHR1
cmVzOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmll
dyogZGF0YSkKIHsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fY29udGV4dC0+
Z3JhcGhpY3NDb250ZXh0M0QoKTsKICAgICBpZiAobV9jb250ZXh0LT5pc0NvbnRleHRMb3N0KCkp
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChm
b3JtYXQpKSB7Ci0gICAgICAgIGNvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4U3ViSW1h
Z2UyRCIsICJpbnZhbGlkIGZvcm1hdCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
ICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCBk
YXRhKSkKKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2Vk
VGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YSkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gbV9jb250ZXh0LT52YWxpZGF0ZVRleHR1
cmVCaW5kaW5nKHRhcmdldCwgdHJ1ZSk7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSBtX2NvbnRl
eHQtPnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFy
Z2V0LCB0cnVlKTsKICAgICBpZiAoIXRleCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGZv
cm1hdCAhPSB0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAg
IGNvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgImZvcm1hdCBk
b2VzIG5vdCBtYXRjaCB0ZXh0dXJlIGZvcm1hdCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdGV4KSkgewotICAg
ICAgICBjb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
IiwgImRpbWVuc2lvbnMgaW52YWxpZCBmb3IgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBjb250ZXh0LT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRk
cmVzcygpKTsKKyAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmNvbXByZXNzZWRU
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7
CiAgICAgbV9jb250ZXh0LT5jbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0
dXJlcy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZXMuaAppbmRleCA2OTkzNzA2NjhhNTQ4M2JkNTY4OGFiMzFlNTJkYzY2ODI5ZGJmZWMyLi41MmI3
MWMyMTM3ZmNjNTkwNTJjZTQ1Zjg0NjJlYzg0NTg4OTdmNzY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVzLmgKQEAgLTU0LDcg
KzU0LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBXZWJHTENvbXByZXNzZWRUZXh0dXJlcyhX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIAotICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4
RnVuY0RhdGEoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgIGJvb2wgdmFs
aWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Mz
RGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscyk7CiAKICAgICBib29sIHZhbGlk
YXRlQ29tcHJlc3NlZFRleEZvcm1hdChHQzNEZW51bSBmb3JtYXQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwCmluZGV4IDVkMmMzMTc2ZGYw
NjQwMWM0OWViYTZhZmJhNmNlNjZjZGUzMDhkZTUuLjU0OTlhZWQ5ZjA0OGIyOWQ5YzhlNWE1ZTI3
NTNlMDRhMWQ1NGU1MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMRGVidWdTaGFkZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TERlYnVnU2hhZGVycy5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgU3RyaW5nIFdlYkdMRGVidWdTaGFk
ZXJzOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2Vw
dGkKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChtX2NvbnRleHQtPmlzQ29udGV4dExv
c3QoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGlmICghbV9jb250ZXh0LT52YWxp
ZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCisgICAgaWYgKCFtX2NvbnRleHQtPnZhbGlkYXRlV2Vi
R0xPYmplY3QoImdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UiLCBzaGFkZXIpKQogICAgICAgICBy
ZXR1cm4gIiI7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0
RXh0ZW5zaW9ucygpLT5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyLT5vYmpl
Y3QoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAppbmRleCAwNDU2NjdiYzZhZGE1MjRlOTcxMmIzOWRmMjVjOGM1YWYz
OWY2ZjE2Li4yN2I5ZDBlYTk2ODU2Yjk0MGZkOTI3ZWZmMThhOWQ0MzU2MTMwZTJiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAKQEAgLTc3NSw3ICs3NzUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWN0aXZl
VGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBpZiAoaXND
b250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHRleHR1cmUgLSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRTAgPj0gbV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSB7Ci0gICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJhY3RpdmVUZXh0dXJlIiwgInRleHR1cmUgdW5pdCBvdXQgb2YgcmFuZ2UiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2FjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVy
ZSAtIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMDsKQEAgLTc5MCwxMCArNzkwLDEwIEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmF0dGFjaFNo
YWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9i
amVjdChzaGFkZXIpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xP
YmplY3QoImF0dGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJh
dHRhY2hTaGFkZXIiLCBzaGFkZXIpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFwcm9ncmFt
LT5hdHRhY2hTaGFkZXIoc2hhZGVyKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImF0
dGFjaFNoYWRlciIsICJzaGFkZXIgYXR0YWNobWVudCBhbHJlYWR5IGhhcyBzaGFkZXIiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihvYmplY3RP
clplcm8ocHJvZ3JhbSksIG9iamVjdE9yWmVybyhzaGFkZXIpKTsKQEAgLTgwNCwyNCArODA0LDI0
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgs
IGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0
KHByb2dyYW0pKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmpl
Y3QoImJpbmRBdHRyaWJMb2NhdGlvbiIsIHByb2dyYW0pKQogICAgICAgICByZXR1cm47Ci0gICAg
aWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKG5hbWUpKQorICAgIGlmICghdmFsaWRhdGVMb2Nh
dGlvbkxlbmd0aCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCiAgICAgICAgIHJldHVybjsK
LSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKG5hbWUpKQorICAgIGlmICghdmFsaWRhdGVTdHJpbmco
ImJpbmRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250
ZXh0LT5iaW5kQXR0cmliTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgbmFt
ZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrT2JqZWN0VG9CZUJvdW5kKFdlYkdMT2JqZWN0KiBvYmpl
Y3QsIGJvb2wmIGRlbGV0ZWQpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tPYmpl
Y3RUb0JlQm91bmQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9iamVjdCogb2JqZWN0
LCBib29sJiBkZWxldGVkKQogewogICAgIGRlbGV0ZWQgPSBmYWxzZTsKICAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKG9iamVjdCkgewogICAg
ICAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAg
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBub3Qg
ZnJvbSB0aGlzIGNvbnRleHQiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogICAgICAgICBkZWxldGVkID0gIW9iamVjdC0+b2JqZWN0KCk7CkBAIC04MzMsMTIgKzgzMywx
MiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJn
ZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIsIEV4YwogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAg
ICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoYnVmZmVyLCBk
ZWxldGVkKSkKKyAgICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kQnVmZmVyIiwgYnVm
ZmVyLCBkZWxldGVkKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChkZWxldGVkKQogICAgICAg
ICBidWZmZXIgPSAwOwogICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5nZXRUYXJnZXQoKSAmJiBi
dWZmZXItPmdldFRhcmdldCgpICE9IHRhcmdldCkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImJpbmRCdWZmZXIiLCAiYnVmZmVycyBjYW4gbm90IGJlIHVzZWQgd2l0aCBtdWx0aXBsZSB0
YXJnZXRzIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRhcmdldCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSKQpAQCAtODQ2LDcgKzg0Niw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZm
ZXIqIGJ1ZmZlciwgRXhjCiAgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKICAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
LT5zZXRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKICAgICBlbHNlIHsKLSAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgImJpbmRCdWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtODYwLDEyICs4NjAsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGIKIHsK
ICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGJvb2wgZGVsZXRlZDsKLSAgICBpZiAoIWNoZWNr
T2JqZWN0VG9CZUJvdW5kKGJ1ZmZlciwgZGVsZXRlZCkpCisgICAgaWYgKCFjaGVja09iamVjdFRv
QmVCb3VuZCgiYmluZEZyYW1lYnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKICAgICAgICAgcmV0
dXJuOwogICAgIGlmIChkZWxldGVkKQogICAgICAgICBidWZmZXIgPSAwOwogICAgIGlmICh0YXJn
ZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7Ci0gICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJiaW5kRnJhbWVidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKQEAgLTg4MywxMiArODgz
LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKEdDM0Rl
bnVtIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsK
ICAgICBib29sIGRlbGV0ZWQ7Ci0gICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZChyZW5kZXJC
dWZmZXIsIGRlbGV0ZWQpKQorICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRSZW5k
ZXJidWZmZXIiLCByZW5kZXJCdWZmZXIsIGRlbGV0ZWQpKQogICAgICAgICByZXR1cm47CiAgICAg
aWYgKGRlbGV0ZWQpCiAgICAgICAgIHJlbmRlckJ1ZmZlciA9IDA7CiAgICAgaWYgKHRhcmdldCAh
PSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJi
aW5kUmVuZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gcmVuZGVyQnVmZmVyOwpAQCAtOTAyLDEy
ICs5MDIsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRUZXh0dXJlKEdDM0Rl
bnVtIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLAogewogICAgIFVOVVNFRF9QQVJBTShl
Yyk7CiAgICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQodGV4
dHVyZSwgZGVsZXRlZCkpCisgICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZFRleHR1
cmUiLCB0ZXh0dXJlLCBkZWxldGVkKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChkZWxldGVk
KQogICAgICAgICB0ZXh0dXJlID0gMDsKICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRU
YXJnZXQoKSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKLSAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICJiaW5kVGV4dHVyZSIsICJ0ZXh0dXJlcyBjYW4gbm90IGJlIHVzZWQg
d2l0aCBtdWx0aXBsZSB0YXJnZXRzIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgR0Mz
RGludCBtYXhMZXZlbCA9IDA7CkBAIC05MjIsNyArOTIyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0
dXJlLAogICAgICAgICBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS5tX3RleHR1
cmVDdWJlTWFwQmluZGluZyA9IHRleHR1cmU7CiAgICAgICAgIG1heExldmVsID0gbV9tYXhDdWJl
TWFwVGV4dHVyZUxldmVsOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kVGV4
dHVyZSIsICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1f
Y29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCBvYmplY3RPclplcm8odGV4dHVyZSkpOwpAQCAt
OTUxLDcgKzk1MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZENvbG9yKEdD
M0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVlbiwgR0MzRGZsb2F0CiAKIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCiB7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKG1vZGUpKQorICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIs
IG1vZGUpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uKG1v
ZGUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC05NTksNyArOTU5
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0g
bW9kZSkKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb25TZXBhcmF0
ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpCiB7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3QoKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKG1vZGVSR0IpIHx8ICF2YWxpZGF0
ZUJsZW5kRXF1YXRpb24obW9kZUFscGhhKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2
YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlUkdCKSB8fCAhdmFsaWRh
dGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9kZUFscGhhKSkKICAgICAgICAgcmV0
dXJuOwogICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVB
bHBoYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTk2OCw3ICs5
NjgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRl
KEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZAogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpCiB7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKHNmYWN0
b3IsIGRmYWN0b3IpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQmxlbmRG
dW5jRmFjdG9ycygiYmxlbmRGdW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCiAgICAgICAgIHJldHVy
bjsKICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtOTc2LDcgKzk3Niw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0g
ZGZhY3RvcikKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRl
KEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0Mz
RGVudW0gZHN0QWxwaGEpCiB7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVC
bGVuZEZ1bmNGYWN0b3JzKHNyY1JHQiwgZHN0UkdCKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgp
IHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoImJsZW5kRnVuYyIsIHNyY1JHQiwgZHN0UkdC
KSB8fCAhdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKCJibGVuZEZ1bmMiLCBzcmNBbHBoYSwgZHN0
QWxwaGEpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0
ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtOTg3LDE2ICs5ODcsMTYgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6
ZSwgR0MzRGUKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZm
ZXJEYXRhUGFyYW1ldGVycyh0YXJnZXQsIHVzYWdlKTsKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVy
ID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyRGF0YSIsIHRhcmdldCwgdXNh
Z2UpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHNpemUgPCAw
KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAic2l6ZSA8IDAiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXMoKSkgewogICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShz
aXplKSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52YWxp
ZCBidWZmZXIiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTEw
MTAsMTYgKzEwMTAsMTYgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEo
R0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGUKICAgICBVTlVTRURfUEFS
QU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBX
ZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyh0YXJnZXQs
IHVzYWdlKTsKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFy
YW1ldGVycygiYnVmZmVyRGF0YSIsIHRhcmdldCwgdXNhZ2UpOwogICAgIGlmICghYnVmZmVyKQog
ICAgICAgICByZXR1cm47CiAgICAgaWYgKCFkYXRhKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1
ZmZlckRhdGEiLCAibm8gZGF0YSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICgh
aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CiAgICAgICAgIGlmICgh
YnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7Ci0gICAgICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTAzMywxNiArMTAzMywxNiBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5QnVmZmVy
VmlldyogZGF0YSwgRwogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0
ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKHRhcmdldCwgdXNhZ2UpOworICAgIFdlYkdMQnVmZmVyKiBi
dWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0
LCB1c2FnZSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWRh
dGEpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJubyBkYXRhIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5k
c0FjY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEo
ZGF0YSkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgImludmFs
aWQgYnVmZmVyIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0x
MDU2LDE4ICsxMDU2LDE4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJE
YXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEFyCiAgICAgVU5VU0VEX1BB
UkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
V2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnModGFyZ2V0
LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIFdlYkdMQnVmZmVyKiBidWZm
ZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRhIiwgdGFyZ2V0
LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwogICAgIGlmICghYnVmZmVyKQogICAg
ICAgICByZXR1cm47CiAgICAgaWYgKG9mZnNldCA8IDApIHsKLSAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
YnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgPCAwIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVk
T25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0
ZUJ1ZmZlclN1YkRhdGEob2Zmc2V0LCBkYXRhKSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91dCBvZiByYW5nZSIpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA4MSwxOCArMTA4MSwxOCBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnRwdHIgb2Zmc2V0LCBBcgogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4
dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxp
ZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJ
Q19EUkFXKTsKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFy
YW1ldGVycygiYnVmZmVyU3ViRGF0YSIsIHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJ
Q19EUkFXKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChvZmZz
ZXQgPCAwKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwg
MCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0
dXJuOwogICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7
CiAgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKG9mZnNldCwgZGF0
YSkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNl
dCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0K
QEAgLTExMDYsNyArMTEwNiw3IEBAIEdDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCiAgICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9VTlNV
UFBPUlRFRDsKICAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyIsICJpbnZhbGlk
IHRhcmdldCIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKCFtX2ZyYW1lYnVm
ZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQpAQCAtMTEyNCwx
MSArMTEyNCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIoR0MzRGJpdGZp
ZWxkIG1hc2spCiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmIChtYXNrICYgfihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQlVGRkVSX0JJVCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXIiLCAiaW52YWxpZCBt
YXNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5k
aW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0Qo
KSwgIWlzUmVzb3VyY2VTYWZlKCkpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJB
TUVCVUZGRVJfT1BFUkFUSU9OLCAiY2xlYXIiLCAiY2FuIG5vdCByZW5kZXIgdG8gZnJhbWVidWZm
ZXIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIWNsZWFySWZDb21wb3NpdGVk
KG1hc2spKQpAQCAtMTE4OSw3ICsxMTg5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm8KIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFk
ZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQorICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImNvbXBpbGVTaGFkZXIi
LCBzaGFkZXIpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVy
KG9iamVjdE9yWmVybyhzaGFkZXIpKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwpAQCAtMTIwMiw3ICsxMjAyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNv
bXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIC8qdGFyZ2V0Ki8sIEdDM0RpbnQgLyoKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzLgotICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7Cisg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNv
bXByZXNzZWRUZXhJbWFnZTJEIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKIH0KIAogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IC8qdGFyZ2V0Ki8sIEdDM0RpbnQgLypsZXZlbCovLCBHQzNEaW50IC8qeG9mZnNldCovLCBHQzNE
aW50IC8qeW9mZnNldCovLApAQCAtMTIxMiwyOCArMTIxMiwyOCBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gLyp0YXJnZXQqLywg
R0MzRGludAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMu
Ci0gICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNKTsKKyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQiKTsK
IH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQg
Ym9yZGVyKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnModGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFKSkKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRl
cnMoImNvcHlUZXhJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFKSkKICAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFs
aWRhdGVUZXh0dXJlQmluZGluZyh0YXJnZXQsIHRydWUpOworICAgIFdlYkdMVGV4dHVyZSogdGV4
ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29weVRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUp
OwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFpc1RleEludGVybmFs
Rm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3Vu
ZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJjb3B5VGV4SW1hZ2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNvbXBhdGlibGUgZm9ybWF0Iik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpICYm
IGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImNvcHlUZXhJbWFnZTJEIiwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAm
JiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFp
c1Jlc291cmNlU2FmZSgpKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgImZyYW1lYnVmZmVyIG5vdCByZWFkYWJs
ZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CkBA
IC0xMjYzLDIzICsxMjYzLDIzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDCiB7CiAgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhG
dW5jTGV2ZWwodGFyZ2V0LCBsZXZlbCkpCisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCgi
Y29weVRleFN1YkltYWdlMkQiLCB0YXJnZXQsIGxldmVsKSkKICAgICAgICAgcmV0dXJuOwotICAg
IFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyh0YXJnZXQsIHRydWUp
OworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29weVRl
eFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1
cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNpemUoeG9mZnNldCwgeW9mZnNldCkgfHwgIXZhbGlkYXRl
U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgiY29weVRleFN1Yklt
YWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSB8fCAhdmFsaWRhdGVTaXplKCJjb3B5VGV4U3ViSW1h
Z2UyRCIsIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHhvZmZzZXQg
KyB3aWR0aCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCArIGhlaWdo
dCA+IHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ImNvcHlUZXhTdWJJbWFnZTJEIiwgInJlY3RhbmdsZSBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNv
bWJpbmF0aW9uVmFsaWQodGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSwgZ2V0
Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAiY29weVRleFN1YkltYWdlMkQiLCAiZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZv
cm1hdCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNE
KCksICFpc1Jlc291cmNlU2FmZSgpKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImZyYW1lYnVmZmVyIG5v
dCByZWFkYWJsZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNsZWFySWZDb21wb3Np
dGVkKCk7CkBAIC0xMjk3LDEyICsxMjk3LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDCiAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemU7CiAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlw
ZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZzaXplLCAwKTsKICAgICAgICAg
ICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOworICAg
ICAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgImNvcHlUZXhTdWJJbWFn
ZTJEIiwgImJhZCBkaW1lbnNpb25zIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgemVybyA9IGFkb3B0QXJyYXlQdHIobmV3
IHVuc2lnbmVkIGNoYXJbc2l6ZV0pOwogICAgICAgICAgICAgICAgIGlmICghemVybykgewotICAg
ICAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2Uy
RCIsICJvdXQgb2YgbWVtb3J5Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAsIHNpemUp
OwpAQCAtMTM3Miw3ICsxMzcyLDcgQEAgUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSwgRXhjZXAKICAgICBpZiAo
aXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAodHlwZSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFHTUVOVF9TSEFERVIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNyZWF0ZVNoYWRlciIsICJp
bnZhbGlkIHNoYWRlciB0eXBlIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMTM5
NCw3ICsxMzk0LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZU9iamVjdChX
ZWJHTE9iamVjdCogb2JqZWN0KQogICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIW9iamVjdCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0
R3JvdXAoKSwgdGhpcykpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZWxldGUiLCAi
b2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGNvbnRleHQiKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICBpZiAob2JqZWN0LT5vYmplY3QoKSkKQEAgLTE1MDAsNyArMTUw
MCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aFJhbmdlKEdDM0RmbG9hdCB6
TmVhciwgR0MzRGZsb2F0IHpGYXIpCiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIGlmICh6TmVhciA+IHpGYXIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJkZXB0aFJhbmdlIiwgInpOZWFyID4gekZhciIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIG1fY29udGV4dC0+ZGVwdGhSYW5nZSh6TmVhciwgekZhcik7CkBAIC0xNTEwLDEwICsx
NTEwLDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aFJhbmdlKEdDM0RmbG9h
dCB6TmVhciwgR0MzRGZsb2F0IHpGYXIpCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0
YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdl
YkdMT2JqZWN0KHNoYWRlcikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVX
ZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2ViR0xPYmpl
Y3QoImRldGFjaFNoYWRlciIsIHNoYWRlcikpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXBy
b2dyYW0tPmRldGFjaFNoYWRlcihzaGFkZXIpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZGV0YWNoU2hhZGVyIiwgInNoYWRlciBub3QgYXR0YWNoZWQiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihvYmplY3RPclplcm8ocHJvZ3Jh
bSksIG9iamVjdE9yWmVybyhzaGFkZXIpKTsKQEAgLTE1MjMsNyArMTUyMyw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBX
ZWJHTFNoYWRlciogc2hhCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKEdD
M0RlbnVtIGNhcCkKIHsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUNhcGFi
aWxpdHkoY2FwKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUNhcGFiaWxp
dHkoImRpc2FibGUiLCBjYXApKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGNhcCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7CiAgICAgICAgIG1fc2Npc3NvckVuYWJsZWQg
PSBmYWxzZTsKQEAgLTE1NDAsNyArMTU0MCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvCiAg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChpbmRleCA+
PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5IiwgImluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0xNzIzLDE0ICsxNzIzLDE0IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVJlbmRlcmluZ1N0YXRlKGludCBudW1FbGVtZW50c1JlcXVpcmVkKQogICAgIHJl
dHVybiBudW1FbGVtZW50c1JlcXVpcmVkIDw9IHNtYWxsZXN0TnVtRWxlbWVudHM7CiB9CiAKLWJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkdMT2JqZWN0KFdlYkdMT2JqZWN0
KiBvYmplY3QpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVXZWJHTE9iamVj
dChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiBvYmplY3QpCiB7CiAgICAg
aWYgKCFvYmplY3QgfHwgIW9iamVjdC0+b2JqZWN0KCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJubyBvYmplY3Qgb3Igb2JqZWN0IGRlbGV0ZWQiKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3Vw
KCksIHRoaXMpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJv
YmplY3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29udGV4dCIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTc0MCwxNCArMTc0MCwxNCBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNE
aW50IGZpcnN0LCBHQzNEc2l6ZWkgYwogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKG1vZGUpKQorICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlRHJhd01vZGUoImRyYXdBcnJheXMiLCBtb2RlKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncygpKQor
ICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoImRyYXdBcnJheXMiKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKGZpcnN0IDwgMCB8fCBjb3VudCA8IDApIHsKLSAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAiZHJhd0FycmF5cyIsICJmaXJzdCBvciBjb3VudCA8IDAiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMTc2MCwxOCArMTc2MCwxOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6
ZWkgYwogICAgICAgICBDaGVja2VkSW50PEdDM0RpbnQ+IGNoZWNrZWRDb3VudChjb3VudCk7CiAg
ICAgICAgIENoZWNrZWRJbnQ8R0MzRGludD4gY2hlY2tlZFN1bSA9IGNoZWNrZWRGaXJzdCArIGNo
ZWNrZWRDb3VudDsKICAgICAgICAgaWYgKCFjaGVja2VkU3VtLnZhbGlkKCkgfHwgIXZhbGlkYXRl
UmVuZGVyaW5nU3RhdGUoY2hlY2tlZFN1bS52YWx1ZSgpKSkgewotICAgICAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAiZHJhd0FycmF5cyIsICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2Yg
Ym91bmRzIGFycmF5cyIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKICAgICAgICAgaWYgKCF2YWxpZGF0ZVJlbmRlcmluZ1N0YXRlKDApKSB7Ci0gICAgICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3QXJyYXlzIiwgImF0dHJpYnMgbm90IHNl
dHVwIGNvcnJlY3RseSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQog
CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCkpKSB7Ci0gICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiZHJhd0FycmF5
cyIsICJmcmFtZWJ1ZmZlciBjYW4gbm90IGJlIHJlbmRlcmVkIHRvIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTE3OTQsMTAgKzE3OTQsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0Rl
bnUKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogCi0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8
fCAhdmFsaWRhdGVEcmF3TW9kZShtb2RlKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2
YWxpZGF0ZURyYXdNb2RlKCJkcmF3RWxlbWVudHMiLCBtb2RlKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncygpKQorICAgIGlmICghdmFsaWRhdGVT
dGVuY2lsU2V0dGluZ3MoImRyYXdFbGVtZW50cyIpKQogICAgICAgICByZXR1cm47CiAKICAgICBz
d2l0Y2ggKHR5cGUpIHsKQEAgLTE4MDUsMTIgKzE4MDUsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdD
M0RlbnUKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKICAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImRyYXdFbGVtZW50cyIs
ICJpbnZhbGlkIHR5cGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChjb3Vu
dCA8IDAgfHwgb2Zmc2V0IDwgMCkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkcmF3RWxlbWVudHMi
LCAiY291bnQgb3Igb2Zmc2V0IDwgMCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
ODE4LDcgKzE4MTgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRz
KEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoIW1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVm
ZmVyKCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3RWxlbWVudHMiLCAibm8g
RUxFTUVOVF9BUlJBWV9CVUZGRVIgYm91bmQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtMTgyNiwyNiArMTgyNiwyNiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0Vs
ZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudQogICAgIGlmICgh
aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CiAgICAgICAgIC8vIEVu
c3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCiAgICAgICAgIGlmICghdmFsaWRh
dGVFbGVtZW50QXJyYXlTaXplKGNvdW50LCB0eXBlLCBvZmZzZXQpKSB7Ci0gICAgICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3RWxlbWVudHMiLCAicmVxdWVzdCBvdXQgb2YgYm91
bmRzIGZvciBjdXJyZW50IEVMRU1FTlRfQVJSQVlfQlVGRkVSIik7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFjb3VudCkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUodHlwZSwgbnVtRWxl
bWVudHMpIHx8ICF2YWxpZGF0ZVJlbmRlcmluZ1N0YXRlKG51bUVsZW1lbnRzKSkgewogICAgICAg
ICAgICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBvZmZzZXQs
IG51bUVsZW1lbnRzKSB8fCAhdmFsaWRhdGVSZW5kZXJpbmdTdGF0ZShudW1FbGVtZW50cykpIHsK
LSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0VsZW1lbnRz
IiwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgaWYgKCF2YWxpZGF0ZVJlbmRlcmluZ1N0YXRlKDApKSB7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3RWxlbWVudHMiLCAiYXR0cmlicyBub3Qgc2V0dXAgY29y
cmVjdGx5Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKICAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSkpIHsKLSAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJkcmF3RWxlbWVudHMiLCAi
ZnJhbWVidWZmZXIgY2FuIG5vdCBiZSByZW5kZXJlZCB0byIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CkBAIC0xODY4LDcgKzE4NjgsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0Rz
aXplaSBjb3VudCwgR0MzRGVudQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxl
KEdDM0RlbnVtIGNhcCkKIHsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUNh
cGFiaWxpdHkoY2FwKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUNhcGFi
aWxpdHkoImVuYWJsZSIsIGNhcCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoY2FwID09IEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKICAgICAgICAgbV9zY2lzc29yRW5hYmxl
ZCA9IHRydWU7CkBAIC0xODg1LDcgKzE4ODUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZAog
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoaW5kZXgg
Pj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5IiwgImluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0xOTE1LDIxICsxOTE1LDIxIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpmbHVzaCgpCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5k
ZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8
fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgYXR0YWNobWVudCkp
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJh
bWV0ZXJzKCJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsIHRhcmdldCwgYXR0YWNobWVudCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBpZiAocmVuZGVyYnVmZmVydGFyZ2V0ICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgaWYgKGJ1ZmZlciAmJiAhYnVmZmVyLT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykp
IHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIs
ICJubyBidWZmZXIgb3IgYnVmZmVyIG5vdCBmcm9tIHRoaXMgY29udGV4dCIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGZyYW1lYnVmZmVy
IHRvIGJlIG11dGF0ZWQ7IGFsbCBjdXJyZW50CiAgICAgLy8gaW1wbGVtZW50YXRpb25zIHVzZSBh
biBGQk8gaW50ZXJuYWxseSBpbiBwbGFjZSBvZiB0aGUgZGVmYXVsdAogICAgIC8vIEZCTy4KICAg
ICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2Jq
ZWN0KCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3JaZXJvKGJ1ZmZlcik7
CkBAIC0xOTg2LDIxICsxOTg2LDIxIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0CiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSog
dGV4dHVyZSwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUZyYW1lYnVm
ZmVyRnVuY1BhcmFtZXRlcnModGFyZ2V0LCBhdHRhY2htZW50KSkKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVmZmVy
VGV4dHVyZTJEIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKICAgICAgICAgcmV0dXJuOwogICAgIGlm
IChsZXZlbCkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJs
ZXZlbCBub3QgMCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0ZXh0dXJlICYm
ICF0ZXh0dXJlLT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKLSAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyB0ZXh0dXJlIG9yIHRl
eHR1cmUgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsg
YWxsIGN1cnJlbnQKICAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5
IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0CiAgICAgLy8gRkJPLgogICAgIGlmICghbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIGZyYW1lYnVm
ZmVyIGJvdW5kIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgb2JqZWN0T3Ja
ZXJvKHRleHR1cmUpLCBsZXZlbCk7CkBAIC0yMDIwLDExICsyMDIwLDExIEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCiB7CiAgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMVGV4dHVyZSog
dGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyh0YXJnZXQsIGZhbHNlKTsKKyAgICBXZWJHTFRl
eHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImdlbmVyYXRlTWlwbWFwIiwgdGFy
Z2V0LCBmYWxzZSk7CiAgICAgaWYgKCF0ZXgpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXRl
eC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJn
ZW5lcmF0ZU1pcG1hcHMiLCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBub3QgYWxsIHRoZSBz
YW1lIHNpemUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBnZW5lcmF0ZU1pcG1h
cCB3b24ndCB3b3JrIHByb3Blcmx5IGlmIG1pbkZpbHRlciBpcyBub3QgTkVBUkVTVF9NSVBNQVBf
TElORUFSCkBAIC0yMDQ4LDcgKzIwNDgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQogUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUlu
Zm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9i
amVjdChwcm9ncmFtKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdM
T2JqZWN0KCJnZXRBY3RpdmVBdHRyaWIiLCBwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgQWN0aXZlSW5mbyBpbmZvOwogICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIo
b2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCkBAIC0yMDU5LDcgKzIwNTksNyBA
QCBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRB
Y3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKgogUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dy
YW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qo
cHJvZ3JhbSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVj
dCgiZ2V0QWN0aXZlVW5pZm9ybSIsIHByb2dyYW0pKQogICAgICAgICByZXR1cm4gMDsKICAgICBB
Y3RpdmVJbmZvIGluZm87CiAgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2Jq
ZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCkBAIC0yMDc0LDcgKzIwNzQsNyBAQCBi
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgVmVjdG9yPFJlZgogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgc2hh
ZGVyT2JqZWN0cy5jbGVhcigpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRh
dGVXZWJHTE9iamVjdCgiZ2V0QXR0YWNoZWRTaGFkZXIiLCBwcm9ncmFtKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgY29uc3QgR0MzRGVudW0gc2hhZGVyVHlwZVtdID0gewpAQCAtMjA5
Myw5ICsyMDkzLDkgQEAgR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dHJpYkxv
Y2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3QKIHsKICAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9u
TGVuZ3RoKG5hbWUpKQorICAgIGlmICghdmFsaWRhdGVMb2NhdGlvbkxlbmd0aCgiZ2V0QXR0cmli
TG9jYXRpb24iLCBuYW1lKSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmICghdmFsaWRhdGVT
dHJpbmcobmFtZSkpCisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZygiZ2V0QXR0cmliTG9jYXRpb24i
LCBuYW1lKSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0
dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7CiB9CkBAIC0yMTA2LDEy
ICsyMTA2LDEyIEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZl
clBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtCiAgICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIGlmICh0YXJnZXQgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiAmJiB0YXJnZXQgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRCdWZm
ZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwogICAgIH0KIAogICAgIGlmIChwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6QlVG
RkVSX1NJWkUgJiYgcG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJVRkZFUl9VU0FHRSkgewot
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiZ2V0QnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVy
IG5hbWUiKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIH0KIApAQCAtMjIw
MCwxMSArMjIwMCwxMSBAQCBXZWJHTEV4dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8
fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgYXR0YWNobWVudCkp
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJh
bWV0ZXJzKCJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCB0YXJnZXQsIGF0dGFj
aG1lbnQpKQogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAKICAgICBpZiAoIW1fZnJh
bWVidWZmZXJCaW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKLSAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIiLCAibm8gZnJhbWVidWZmZXIgYm91bmQiKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOwogICAgIH0KIApAQCAtMjIxNCw3ICsyMjE0LDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVt
IHQKICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
TkUpOwogICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJTlZBTElEX0VOVU0gaW4g
dGhpcyBjYXNlLCB3aGlsZSBkZXNrdG9wIEdMCiAgICAgICAgIC8vIHNwZWNpZmllcyBJTlZBTElE
X09QRVJBVElPTi4KLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKICAgICB9CiAKQEAgLTIyMzQsNyArMjIzNCw3IEBAIFdlYkdMR2V0SW5mbyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihH
QzNEZW51bSB0CiAgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lIGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsKICAgICAgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC0yMjQ0LDcgKzIyNDQsNyBAQCBX
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXIoR0MzRGVudW0gdAogICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgogICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPihyZWludGVycHJldF9jYXN0
PFdlYkdMUmVuZGVyYnVmZmVyKj4ob2JqZWN0KSkpOwogICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAi
aW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgcmVuZGVyYnVmZmVyIGF0dGFjaG1lbnQiKTsKICAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI0
MzksMTcgKzI0MzksMTcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJgogICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUzogLy8gT0VTX3N0YW5k
YXJkX2Rlcml2YXRpdmVzCiAgICAgICAgIGlmIChtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMpCiAg
ICAgICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIoRXh0ZW5zaW9uczNEOjpG
UkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUyk7Ci0gICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJn
ZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzIG5vdCBlbmFibGVkIik7CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAg
ICBjYXNlIFdlYkdMRGVidWdSZW5kZXJlckluZm86OlVOTUFTS0VEX1JFTkRFUkVSX1dFQkdMOgog
ICAgICAgICBpZiAobV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQogICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSRVIpKTsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFt
ZXRlciBuYW1lLCBXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5vdCBlbmFibGVkIik7CiAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBjYXNlIFdlYkdMRGVidWdSZW5kZXJlcklu
Zm86OlVOTUFTS0VEX1ZFTkRPUl9XRUJHTDoKICAgICAgICAgaWYgKG1fd2ViZ2xEZWJ1Z1JlbmRl
cmVySW5mbykKICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9jb250ZXh0LT5nZXRT
dHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUikpOwotICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVy
X2luZm8gbm90IGVuYWJsZWQiKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpWRVJURVhfQVJSQVlfQklORElOR19PRVM6IC8vIE9FU192ZXJ0
ZXhfYXJyYXlfb2JqZWN0CiAgICAgICAgIGlmIChtX29lc1ZlcnRleEFycmF5T2JqZWN0KSB7CkBA
IC0yNDU3LDEwICsyNDU3LDEwIEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYKICAgICAgICAgICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUz4obV9ib3VuZFZlcnRleEFycmF5T2JqZWN0KSk7CiAgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CiAgICAgICAgIH0KLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIs
ICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgZW5h
YmxlZCIpOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgZGVmYXVsdDoKLSAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7
CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICB9CiB9CkBAIC0yNDY4LDcgKzI0
NjgsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIo
R0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0Mz
RGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFt
KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRQ
cm9ncmFtUGFyYW1ldGVyIiwgcHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKIAogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CkBAIC0yNDg3LDcgKzI0
ODcsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFy
YW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRwogICAgICAgICBtX2NvbnRleHQtPmdldFBy
b2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKICAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiZ2V0UHJvZ3JhbVBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICB9CiB9CkBAIC0yNDk3LDcgKzI0OTcsNyBA
QCBTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbgogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGlmICghdmFs
aWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3Qo
ImdldFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiAiIjsKICAgICBX
ZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwogICAgIHJldHVybiBtX2NvbnRleHQtPmdl
dFByb2dyYW1JbmZvTG9nKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7CkBAIC0yNTA5LDExICsyNTA5
LDExIEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDCiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkK
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIGlmICh0YXJnZXQgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKICAgICB9CiAgICAgaWYgKCFtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgfHwgIW1f
cmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAibm8gcmVuZGVyYnVmZmVyIGJvdW5kIik7
CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICB9CiAKQEAgLTI1NDMsNyArMjU0
Myw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDCiAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6CiAgICAgICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0SW50ZXJuYWxGb3JtYXQoKSk7
CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyh2YWx1ZSk7CkBAIC0yNTY1LDcgKzI1NjUsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBH
QwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JN
QVQ6CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5n
ZXRJbnRlcm5hbEZvcm1hdCgpKTsKICAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIH0KIH0KQEAgLTI1NzMsNyArMjU3Myw3IEBA
IFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgR0MzRGVudW0gcG5h
bWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQorICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlclBhcmFt
ZXRlciIsIHNoYWRlcikpCiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBXZWJH
TFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwogICAgIEdDM0RpbnQgdmFsdWUgPSAwOwpAQCAt
MjU4Nyw3ICsyNTg3LDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEdDM0QKICAgICAgICAgbV9jb250
ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1ZSk7CiAg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1
ZSkpOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7CiAgICAgfQogfQpAQCAtMjU5Nyw3ICsyNTk3LDcgQEAgU3RyaW5nIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25D
b2QKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVy
KSkKKyAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlckluZm9Mb2ciLCBzaGFk
ZXIpKQogICAgICAgICByZXR1cm4gIiI7CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZh
bHNlKTsKICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKG9iamVjdE9yWmVy
byhzaGFkZXIpKTsKQEAgLTI2MDgsNyArMjYwOCw3IEBAIFN0cmluZyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2Rl
CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikp
CisgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFkZXJTb3VyY2UiLCBzaGFkZXIp
KQogICAgICAgICByZXR1cm4gIiI7CiAgICAgcmV0dXJuIHNoYWRlci0+Z2V0U291cmNlKCk7CiB9
CkBAIC0yNjQwLDcgKzI2NDAsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRUZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbgogICAgIFVOVVNF
RF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmlu
ZGluZyh0YXJnZXQsIGZhbHNlKTsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4
dHVyZUJpbmRpbmcoImdldFRleFBhcmFtZXRlciIsIHRhcmdldCwgZmFsc2UpOwogICAgIGlmICgh
dGV4KQogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgV2ViR0xTdGF0ZVJlc3Rv
cmVyKHRoaXMsIGZhbHNlKTsKQEAgLTI2NTMsNyArMjY1Myw3IEBAIFdlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIHBuCiAgICAgICAgIG1fY29udGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFt
ZSwgJnZhbHVlKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQ+KHZhbHVlKSk7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFRl
eFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oKTsKICAgICB9CiB9CkBAIC0yNjYxLDEwICsyNjYxLDEwIEBAIFdlYkdMR2V0
SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHBuCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRV
bmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IHVuaWZvcm1Mb2NhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHBy
b2dyYW0pKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qo
ImdldFVuaWZvcm0iLCBwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwog
ICAgIGlmICghdW5pZm9ybUxvY2F0aW9uIHx8IHVuaWZvcm1Mb2NhdGlvbi0+cHJvZ3JhbSgpICE9
IHByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRVbmlmb3JtIiwgIm5v
IHVuaWZvcm1sb2NhdGlvbiBvciBub3QgdmFsaWQgZm9yIHRoaXMgcHJvZ3JhbSIpOwogICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgfQogICAgIEdDM0RpbnQgbG9jYXRpb24gPSB1
bmlmb3JtTG9jYXRpb24tPmxvY2F0aW9uKCk7CkBAIC0yNzYyLDcgKzI3NjIsNyBAQCBXZWJHTEdl
dEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgY29uc3QgV2ViRwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAvLyBDYW4ndCBoYW5kbGUgdGhpcyB0
eXBlCi0gICAgICAgICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFVuaWZv
cm0iLCAidW5oYW5kbGVkIHR5cGUiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzd2l0Y2ggKGJh
c2VUeXBlKSB7CkBAIC0yNzk4LDE4ICsyNzk4LDE4IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBXZWJH
CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHNvbWV0aGluZyB3ZW50
IHdyb25nIGluIG91ciB1bmZvcnR1bmF0ZWx5IGNvbXBsZXggbG9naWMgYWJvdmUKLSAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
KTsKKyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgImdldFVuaWZvcm0iLCAidW5rbm93biBlcnJvciIpOwogICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKIH0KIAogUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25z
dCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9n
cmFtKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJn
ZXRVbmlmb3JtTG9jYXRpb24iLCBwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYg
KCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKG5hbWUpKQorICAgIGlmICghdmFsaWRhdGVMb2NhdGlv
bkxlbmd0aCgiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIGlmICghdmFsaWRhdGVTdHJpbmcobmFtZSkpCisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZygi
Z2V0VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFdlYkdM
U3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CiAgICAgR0MzRGludCB1bmlmb3JtTG9jYXRpb24g
PSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5h
bWUpOwpAQCAtMjgyNSw3ICsyODI1LDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmEKICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBm
YWxzZSk7CiAgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICB9CiAgICAgY29uc3QgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CkBAIC0yODQ5LDcgKzI4NDks
NyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIo
R0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYQogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkNVUlJFTlRfVkVSVEVYX0FUVFJJQjoKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9h
dDMyQXJyYXk6OmNyZWF0ZShtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XS52YWx1ZSwgNCkpOwog
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAg
fQogfQpAQCAtMjg3OCw3ICsyODc4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omhp
bnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgaWYgKCFpc1ZhbGlkKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJoaW50IiwgImludmFsaWQg
dGFyZ2V0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5oaW50KHRh
cmdldCwgbW9kZSk7CkBAIC0yOTAzLDcgKzI5MDMsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6aXNDb250ZXh0TG9zdCgpCiAKIEdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKIHsKLSAgICBpZiAoIXZhbGlkYXRlQ2FwYWJpbGl0
eShjYXApIHx8IGlzQ29udGV4dExvc3QoKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2
YWxpZGF0ZUNhcGFiaWxpdHkoImlzRW5hYmxlZCIsIGNhcCkpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIHJldHVybiBtX2NvbnRleHQtPmlzRW5hYmxlZChjYXApOwogfQpAQCAtMjk2OCw3ICsyOTY4
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lk
dGgpCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0oV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkp
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgibGlua1By
b2dyYW0iLCBwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghaXNHTEVTMkNvbXBs
aWFudCgpKSB7CiAgICAgICAgIGlmICghcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpIHx8ICFwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKSkgewpAQCAtMzAwMyw3ICszMDAz
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBu
YW1lLCBHQzNEaW50IHBhcmFtKQogICAgICAgICBpZiAocGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkJST1dTRVJfREVGQVVMVF9XRUJHTCB8fCBwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9ORSkKICAgICAgICAgICAgIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBzdGF0aWNf
Y2FzdDxHQzNEZW51bT4ocGFyYW0pOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgVU5QQUNLX0NP
TE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMzAxNywxMiArMzAxNywxMiBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0p
CiAgICAgICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7CiAgICAg
ICAgICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFy
YW1ldGVyIGZvciBhbGlnbm1lbnQiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicGl4ZWxTdG9y
ZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
fQpAQCAtMzA0NCw3ICszMDQ0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQ
aXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MKICAgICBBU1NF
UlQoY2FudmFzKCktPm9yaWdpbkNsZWFuKCkpOwogICAgIC8vIFZhbGlkYXRlIGlucHV0IHBhcmFt
ZXRlcnMuCiAgICAgaWYgKCFwaXhlbHMpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicmVhZFBpeGVs
cyIsICJubyBkZXN0aW5hdGlvbiBBcnJheUJ1ZmZlclZpZXciKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBzd2l0Y2ggKGZvcm1hdCkgewpAQCAtMzA1Myw3ICszMDUzLDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgogICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIs
ICJpbnZhbGlkIGZvcm1hdCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHN3aXRjaCAo
dHlwZSkgewpAQCAtMzA2MywyMCArMzA2MywyMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQwog
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CiAgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwg
ImludmFsaWQgdHlwZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChmb3JtYXQg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgfHwgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMi
LCAiZm9ybWF0IG5vdCBSR0JBIG9yIHR5cGUgbm90IFVOU0lHTkVEX0JZVEUiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAvLyBWYWxpZGF0ZSBhcnJheSB0eXBlIGFnYWluc3QgcGl4ZWwg
dHlwZS4KICAgICBpZiAoIXBpeGVscy0+aXNVbnNpZ25lZEJ5dGVBcnJheSgpKSB7Ci0gICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJheUJ1ZmZlclZpZXcgbm90IFVp
bnQ4QXJyYXkiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRl
eHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgImZyYW1lYnVmZmVyIG5vdCBy
ZWFkYWJsZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIENhbGN1bGF0ZSBhcnJh
eSBzaXplLCB0YWtpbmcgaW50byBjb25zaWRlcmF0aW9uIG9mIFBBQ0tfQUxJR05NRU5ULgpAQCAt
MzA4NCwxMSArMzA4NCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVs
cyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQwogICAgIHVuc2lnbmVk
IGludCBwYWRkaW5nOwogICAgIEdDM0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1h
Z2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fcGFja0FsaWdubWVu
dCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgJnBhZGRpbmcpOwogICAgIGlmIChlcnJvciAhPSBHcmFw
aGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihlcnJvcik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAicmVhZFBp
eGVscyIsICJpbnZhbGlkIGRpbWVuc2lvbnMiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVxdWlyZWQpIHsKLSAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3Qg
bGFyZ2UgZW5vdWdoIGZvciBkaW1lbnNpb25zIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKQEAgLTMxMjksMTQgKzMxMjksMTQgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBpbnRlcm4KICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47
CiAgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0g
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgdGFyZ2V0Iik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFtX3JlbmRlcmJ1ZmZlckJpbmRpbmcg
fHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKLSAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJyZW5kZWJ1ZmZlclN0b3JhZ2UiLCAibm8gYm91bmQgcmVuZGVyYnVmZmVyIik7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKCF2YWxpZGF0ZVNpemUod2lkdGgsIGhl
aWdodCkpCisgICAgaWYgKCF2YWxpZGF0ZVNpemUoInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCB3aWR0
aCwgaGVpZ2h0KSkKICAgICAgICAgcmV0dXJuOwogICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQp
IHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNjoKQEAgLTMx
NjAsNyArMzE2MCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXJT
dG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuCiAgICAgICAgIG1fcmVuZGVy
YnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3Rv
cmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CiAgICAgfQogfQogCkBAIC0zMTc2LDcg
KzMxNzYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2Npc3NvcihHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEcwogewogICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU2l6ZSh3aWR0aCwgaGVp
Z2h0KSkKKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgic2Npc3NvciIsIHdpZHRoLCBoZWlnaHQpKQog
ICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5zY2lzc29yKHgsIHksIHdpZHRoLCBoZWln
aHQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0zMTg1LDEwICsz
MTg1LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzY2lzc29yKEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6c2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJzaGFkZXJTb3VyY2Ui
LCBzaGFkZXIpKQogICAgICAgICByZXR1cm47CiAgICAgU3RyaW5nIHN0cmluZ1dpdGhvdXRDb21t
ZW50cyA9IFN0cmlwQ29tbWVudHMoc3RyaW5nKS5yZXN1bHQoKTsKLSAgICBpZiAoIXZhbGlkYXRl
U3RyaW5nKHN0cmluZ1dpdGhvdXRDb21tZW50cykpCisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZygi
c2hhZGVyU291cmNlIiwgc3RyaW5nV2l0aG91dENvbW1lbnRzKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIHNoYWRlci0+c2V0U291cmNlKHN0cmluZyk7CiAgICAgbV9jb250ZXh0LT5zaGFkZXJTb3Vy
Y2Uob2JqZWN0T3JaZXJvKHNoYWRlciksIHN0cmluZ1dpdGhvdXRDb21tZW50cyk7CkBAIC0zMTk5
LDcgKzMxOTksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmMoR0Mz
RGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hcwogewogICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMo
ZnVuYykpCisgICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxGdW5jKCJzdGVuY2lsRnVuYyIsIGZ1bmMp
KQogICAgICAgICByZXR1cm47CiAgICAgbV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKICAgICBtX3N0
ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKQEAgLTMyMTMsNyArMzIxMyw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0Rl
bnVtIGZ1bmMsIEdDCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIGlmICghdmFsaWRhdGVTdGVuY2lsRnVuYyhmdW5jKSkKKyAgICBpZiAoIXZhbGlkYXRl
U3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCBmdW5jKSkKICAgICAgICAgcmV0dXJu
OwogICAgIHN3aXRjaCAoZmFjZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05U
X0FORF9CQUNLOgpAQCAtMzIzMSw3ICszMjMxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MK
ICAgICAgICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gbWFzazsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCAiaW52
YWxpZCBmYWNlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5zdGVu
Y2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7CkBAIC0zMjY0LDcgKzMyNjQs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNE
ZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQogICAgICAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1h
c2s7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJzdGVu
Y2lsTWFza1NlcGFyYXRlIiwgImludmFsaWQgZmFjZSIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKQEAgLTMy
OTMsMTQgKzMyOTMsMTQgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRC
YXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGUKIHsKICAgICAvLyBGSVhN
RTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAogICAgIGVjID0gMDsKLSAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnModGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlKSkKKyAgICBpZiAoIXZh
bGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUpKQogICAgICAg
ICByZXR1cm47Ci0gICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5n
KHRhcmdldCwgdHJ1ZSk7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVC
aW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKICAgICBpZiAoIXRleCkKICAgICAg
ICAgcmV0dXJuOwogICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkgewogICAgICAgICBpZiAo
bGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImxldmVsID4gMCBub3QgcG93ZXIgb2Yg
MiIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMzMyNCw3ICsz
MzI0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbXBsKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGUKICAgICBlYyA9IDA7CiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGRhdGE7CiAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEoaW1h
Z2UsIGZvcm1hdCwgdHlwZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3Jz
cGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUsIGRhdGEpKSB7Ci0gICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKQEAgLTMzMzks
NyArMzMzOSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGludCBib3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVRl
eEZ1bmNEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhJbWFnZTJEIiwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQogICAgICAgICByZXR1cm47CiAgICAg
dm9pZCogZGF0YSA9IHBpeGVscyA/IHBpeGVscy0+YmFzZUFkZHJlc3MoKSA6IDA7CiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IHRlbXBEYXRhOwpAQCAtMzM3MCw3ICszMzcwLDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bQogICAgICAgICByZXR1cm47CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAg
ICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUs
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKLSAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQpAQCAtMzM4Nyw3
ICszMzg3LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bQogICAgIGVjID0gMDsKICAgICBpZiAo
aXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZUhUTUxJ
bWFnZUVsZW1lbnQoaW1hZ2UpKQorICAgIGlmICghdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0
ZXhJbWFnZTJEIiwgaW1hZ2UpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHdvdWxkVGFpbnRP
cmlnaW4oaW1hZ2UpKSB7CiAgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwpAQCAtMzQwNSw3ICsz
NDA1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bQogICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWNhbnZhcyB8fCAhY2FudmFzLT5idWZmZXIoKSkg
ewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgIm5vIGNhbnZhcyIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKGNhbnZhcykpIHsKQEAg
LTM0MjQsMTMgKzM0MjQsMTMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bQogUGFzc1JlZlB0cjxJ
bWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9F
bGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCF2aWRlbyB8fCAh
dmlkZW8tPnZpZGVvV2lkdGgoKSB8fCAhdmlkZW8tPnZpZGVvSGVpZ2h0KCkpIHsKLSAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJubyB2aWRlbyIpOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAgICAgSW50U2l6ZSBzaXplKHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRl
b0hlaWdodCgpKTsKICAgICBJbWFnZUJ1ZmZlciogYnVmID0gbV92aWRlb0NhY2hlLmltYWdlQnVm
ZmVyKHNpemUpOwogICAgIGlmICghYnVmKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlkpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWSwgInRleEltYWdl
MkQiLCAib3V0IG9mIG1lbW9yeSIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYg
KHdvdWxkVGFpbnRPcmlnaW4odmlkZW8pKSB7CkBAIC0zNDYwLDcgKzM0NjAsNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RmbAogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcodGFy
Z2V0LCBmYWxzZSk7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5k
aW5nKCJ0ZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsKICAgICBpZiAoIXRleCkKICAgICAg
ICAgcmV0dXJuOwogICAgIHN3aXRjaCAocG5hbWUpIHsKQEAgLTM0NzEsMTIgKzM0NzEsMTIgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEZmwKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX1dSQVBfVDoKICAgICAgICAgaWYgKChpc0Zsb2F0ICYmIHBhcmFtZiAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok1J
UlJPUkVEX1JFUEVBVCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkKICAg
ICAgICAgICAgIHx8ICghaXNGbG9hdCAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNM
QU1QX1RPX0VER0UgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpNSVJST1JFRF9SRVBF
QVQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBFQVQpKSB7Ci0gICAgICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciIpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFt
ZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChpc0Zsb2F0KSB7CkBAIC0zNTA3
LDE5ICszNTA3LDE5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJE
QmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDCiAgICAgZWMgPSAwOwogICAg
IGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRl
VGV4RnVuY1BhcmFtZXRlcnModGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAw
LCBmb3JtYXQsIHR5cGUpKQorICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4
U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9y
bWF0LCB0eXBlKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTaXplKHhvZmZz
ZXQsIHlvZmZzZXQpKQorICAgIGlmICghdmFsaWRhdGVTaXplKCJ0ZXhTdWJJbWFnZTJEIiwgeG9m
ZnNldCwgeW9mZnNldCkpCiAgICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9
IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcodGFyZ2V0LCB0cnVlKTsKKyAgICBXZWJHTFRleHR1cmUq
IHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRy
dWUpOwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHhvZmZzZXQgKyB3
aWR0aCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCArIGhlaWdodCA+
IHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRl
eFN1YkltYWdlMkQiLCAiZGltZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBpZiAodGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSAh
PSBmb3JtYXQgfHwgdGV4LT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpICE9IHR5cGUpIHsKLSAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJ0ZXhTdWJJbWFnZTJEIiwgInR5cGUgYW5kIGZvcm1hdCBk
byBub3QgbWF0Y2ggdGV4dHVyZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29u
dGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CkBAIC0zNTM1LDcgKzM1MzUsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQwogICAgICAgICByZXR1cm47CiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGRhdGE7CiAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZv
cm1hdCwgdHlwZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNv
bnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUsIGRhdGEpKSB7Ci0gICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwKQEAgLTM1NDYsNyArMzU0Niw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCBwaXhlbHMpKQogICAgICAgICByZXR1cm47CiAgICAgdm9pZCogZGF0YSA9IHBp
eGVscyA/IHBpeGVscy0+YmFzZUFkZHJlc3MoKSA6IDA7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRl
bXBEYXRhOwpAQCAtMzU3Niw3ICszNTc2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW4KICAg
ICAgICAgcmV0dXJuOwogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIGlmICghbV9jb250
ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0LCB0eXBlLCBtX3VucGFja0ZsaXBZ
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
InRleFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksCkBAIC0zNTg5LDcgKzM1ODksNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbgogICAgIGVjID0gMDsKICAgICBpZiAoaXNDb250ZXh0
TG9zdCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1l
bnQoaW1hZ2UpKQorICAgIGlmICghdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0ZXhTdWJJbWFn
ZTJEIiwgaW1hZ2UpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4o
aW1hZ2UpKSB7CiAgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwpAQCAtMzYwNiw3ICszNjA2LDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW4KICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgaWYgKCFjYW52YXMgfHwgIWNhbnZhcy0+YnVmZmVyKCkpIHsKLSAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJubyBjYW52YXMiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBpZiAod291bGRUYWludE9yaWdpbihjYW52YXMpKSB7CkBAIC0z
NjQyLDcgKzM2NDIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRAogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0g
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTFmIiwgImxvY2F0aW9uIG5vdCBmb3Ig
Y3VycmVudCBwcm9ncmFtIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM2NTMsNyAr
MzY1Myw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNECiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZs
b2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJz
KGxvY2F0aW9uLCB2LCAxKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIDEpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkpOwpAQCAtMzY2Myw3ICszNjYzLDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBGbG8KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6
ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0
aW9uLCB2LCBzaXplLCAxKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDEpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxvY2F0
aW9uKCksIHYsIHNpemUpOwpAQCAtMzY3Nyw3ICszNjc3LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0QKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0g
bV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0x
aSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0zNjg4LDcgKzM2ODgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRAog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlk
YXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDEpKQorICAgIGlmIChpc0NvbnRleHRM
b3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2NhdGlv
biwgdiwgMSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSk7CkBAIC0zNjk4LDcg
KzM2OTgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludAogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZv
cm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24s
IHYsIHNpemUsIDEpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0x
aXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUpOwpAQCAtMzcxMiw3ICszNzEyLDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0QKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0
aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgInVuaWZvcm0yZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNzIzLDcgKzM3MjMsNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMikp
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygi
dW5pZm9ybTJmdiIsIGxvY2F0aW9uLCB2LCAyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9j
b250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxl
bmd0aCgpIC8gMik7CkBAIC0zNzMzLDcgKzM3MzMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZs
bwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUs
IDIpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoInVuaWZvcm0yZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6
ZSAvIDIpOwpAQCAtMzc0Nyw3ICszNzQ3LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0yaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0QKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50
UHJvZ3JhbSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0yaSIsICJsb2Nh
dGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0zNzU4LDcgKzM3NTgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTJpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRAogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVT
RURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDIpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgMikp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOwpAQCAtMzc2OCw3ICszNzY4
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGlu
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8
fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJpdiIsIGxvY2F0aW9uLCB2LCBz
aXplLCAyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gMik7CkBAIC0zNzgyLDcgKzM3ODIsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRp
b24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAidW5pZm9ybTNmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM3OTMsNyArMzc5Myw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBHQzNECiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAzKSkK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1
bmlmb3JtM2Z2IiwgbG9jYXRpb24sIHYsIDMpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2Nv
bnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVu
Z3RoKCkgLyAzKTsKQEAgLTM4MDMsNyArMzgwMyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4
dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwg
MykpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAzKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXpl
IC8gMyk7CkBAIC0zODE3LDcgKzM4MTcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRAogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQ
cm9ncmFtKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTNpIiwgImxvY2F0
aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTM4MjgsNyArMzgyOCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
M2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNECiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3Jt
UGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMykpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCAzKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLT5s
b2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMyk7CkBAIC0zODM4LDcgKzM4Mzgs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50
KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJh
bWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAzKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRpb24sIHYsIHNp
emUsIDMpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyAzKTsKQEAgLTM4NTIsNyArMzg1Miw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNECiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlv
bi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ1bmlmb3JtNGYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzg2Myw3ICszODYzLDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0QKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDQpKQor
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVu
aWZvcm00ZnYiLCBsb2NhdGlvbiwgdiwgNCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29u
dGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5n
dGgoKSAvIDQpOwpAQCAtMzg3Myw3ICszODczLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG8K
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCA0
KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJz
KCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDQpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUg
LyA0KTsKQEAgLTM4ODcsNyArMzg4Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNECiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFBy
b2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtNGkiLCAibG9jYXRp
b24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtMzg5OCw3ICszODk4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00
aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0QKIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCA0KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGl2IiwgbG9jYXRpb24sIHYsIDQpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm00aXYobG9jYXRpb24tPmxv
Y2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKQEAgLTM5MDgsNyArMzkwOCw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQq
IHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDQpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlvbiwgdiwgc2l6
ZSwgNCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDQpOwpAQCAtMzkxOCw3ICszOTE4LDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzMKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
TWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1
bmlmb3JtTWF0cml4MmZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgNCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0zOTI3LDcgKzM5MjcsNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpbwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgy
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXpl
LCA0KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQ
YXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4MmZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6
ZSwgNCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdiwgc2l6ZSAvIDQpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0zOTM2LDcgKzM5MzYsNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpbwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRy
aXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZv
cm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDkpKQorICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZv
cm1NYXRyaXgzZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA5KSkKICAgICAgICAgcmV0dXJu
OwogICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
dHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gOSk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTM5NDUsNyArMzk0NSw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9z
ZSwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0
ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkp
KQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFt
ZXRlcnMoInVuaWZvcm1NYXRyaXgzZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCA5
KSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LCBzaXplIC8gOSk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTM5NTQsNyArMzk1NCw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5z
cG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURf
UEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgMTYpKQorICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1N
YXRyaXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCAxNikpCiAgICAgICAgIHJldHVybjsK
ICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHRy
YW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDE2KTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtMzk2Myw3ICszOTYzLDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW8KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRl
VW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgMTYp
KQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFt
ZXRlcnMoInVuaWZvcm1NYXRyaXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCAx
NikpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdiwgc2l6ZSAvIDE2KTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtMzk3MywxMiArMzk3MywxMiBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgYm9vbCBkZWxl
dGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQocHJvZ3JhbSwgZGVsZXRlZCkpCisg
ICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgidXNlUHJvZ3JhbSIsIHByb2dyYW0sIGRlbGV0
ZWQpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGRlbGV0ZWQpCiAgICAgICAgIHByb2dyYW0g
PSAwOwogICAgIGlmIChwcm9ncmFtICYmICFwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpIHsKLSAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1c2VQcm9ncmFtIiwgInByb2dyYW0gbm90IHZhbGlk
Iik7CiAgICAgICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0zOTk2LDcgKzM5OTYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVj
KQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dy
YW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFt
KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJ2YWxp
ZGF0ZVByb2dyYW0iLCBwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+
dmFsaWRhdGVQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTQwMDQsNjIgKzQwMDQsNjIgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4
Y2VwdGlvbkNvZGUKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFm
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjApCiB7Ci0gICAgdmVydGV4QXR0cmliZkltcGwo
aW5kZXgsIDEsIHYwLCAwLjBmLCAwLjBmLCAxLjBmKTsKKyAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgi
dmVydGV4QXR0cmliMWYiLCBpbmRleCwgMSwgdjAsIDAuMGYsIDAuMGYsIDEuMGYpOwogfQogCiB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4
LCBGbG9hdDMyQXJyYXkqIHYpCiB7Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKGluZGV4LCB2LCAx
KTsKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIsIGluZGV4LCB2LCAx
KTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKIHsKLSAgICB2ZXJ0ZXhB
dHRyaWJmdkltcGwoaW5kZXgsIHYsIHNpemUsIDEpOworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgi
dmVydGV4QXR0cmliMWZ2IiwgaW5kZXgsIHYsIHNpemUsIDEpOwogfQogCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2
MCwgR0MzRGZsb2F0IHYxKQogewotICAgIHZlcnRleEF0dHJpYmZJbXBsKGluZGV4LCAyLCB2MCwg
djEsIDAuMGYsIDEuMGYpOworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZiIs
IGluZGV4LCAyLCB2MCwgdjEsIDAuMGYsIDEuMGYpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYp
CiB7Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKGluZGV4LCB2LCAyKTsKKyAgICB2ZXJ0ZXhBdHRy
aWJmdkltcGwoInZlcnRleEF0dHJpYjJmdiIsIGluZGV4LCB2LCAyKTsKIH0KIAogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKIHsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoaW5kZXgs
IHYsIHNpemUsIDIpOworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMmZ2Iiwg
aW5kZXgsIHYsIHNpemUsIDIpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBH
QzNEZmxvYXQgdjIpCiB7Ci0gICAgdmVydGV4QXR0cmliZkltcGwoaW5kZXgsIDMsIHYwLCB2MSwg
djIsIDEuMGYpOworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZiIsIGluZGV4
LCAzLCB2MCwgdjEsIHYyLCAxLjBmKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQogewotICAg
IHZlcnRleEF0dHJpYmZ2SW1wbChpbmRleCwgdiwgMyk7CisgICAgdmVydGV4QXR0cmliZnZJbXBs
KCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRleCwgdiwgMyk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwg
R0MzRHNpemVpIHNpemUpCiB7Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKGluZGV4LCB2LCBzaXpl
LCAzKTsKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjNmdiIsIGluZGV4LCB2
LCBzaXplLCAzKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0
IHYyLCBHQzNEZmxvYXQgdjMpCiB7Ci0gICAgdmVydGV4QXR0cmliZkltcGwoaW5kZXgsIDQsIHYw
LCB2MSwgdjIsIHYzKTsKKyAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliNGYiLCBp
bmRleCwgNCwgdjAsIHYxLCB2MiwgdjMpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCiB7Ci0g
ICAgdmVydGV4QXR0cmliZnZJbXBsKGluZGV4LCB2LCA0KTsKKyAgICB2ZXJ0ZXhBdHRyaWJmdklt
cGwoInZlcnRleEF0dHJpYjRmdiIsIGluZGV4LCB2LCA0KTsKIH0KIAogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2
LCBHQzNEc2l6ZWkgc2l6ZSkKIHsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoaW5kZXgsIHYsIHNp
emUsIDQpOworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5kZXgs
IHYsIHNpemUsIDQpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0
cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBH
QzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC00MDc1LDI5ICs0MDc1LDI5IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNE
aW50IHNpemUsIEdDCiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6CiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQb2lu
dGVyIiwgImludmFsaWQgdHlwZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChp
bmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4
QXR0cmliUG9pbnRlciIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQgfHwgc3RyaWRlIDwgMCB8fCBzdHJp
ZGUgPiAyNTUgfHwgb2Zmc2V0IDwgMCkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRy
aWJQb2ludGVyIiwgImJhZCBzaXplLCBzdHJpZGUgb3Igb2Zmc2V0Iik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgaWYgKCFtX2JvdW5kQXJyYXlCdWZmZXIpIHsKLSAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgIm5vIGJvdW5kIEFSUkFZX0JVRkZF
UiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIERldGVybWluZSB0aGUgbnVtYmVy
IG9mIGVsZW1lbnRzIHRoZSBib3VuZCBidWZmZXIgY2FuIGhvbGQsIGdpdmVuIHRoZSBvZmZzZXQs
IHNpemUsIHR5cGUgYW5kIHN0cmlkZQogICAgIHVuc2lnbmVkIGludCB0eXBlU2l6ZSA9IHNpemVJ
bkJ5dGVzKHR5cGUpOwogICAgIGlmICghdHlwZVNpemUpIHsKLSAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInZl
cnRleEF0dHJpYlBvaW50ZXIiLCAiaW52YWxpZCB0eXBlIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgaWYgKChzdHJpZGUgJSB0eXBlU2l6ZSkgfHwgKG9mZnNldCAlIHR5cGVTaXplKSkg
ewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAic3Ry
aWRlIG9yIG9mZnNldCBub3QgdmFsaWQgZm9yIHR5cGUiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBHQzNEc2l6ZWkgYnl0ZXNQZXJFbGVtZW50ID0gc2l6ZSAqIHR5cGVTaXplOwpAQCAt
NDEyMSw3ICs0MTIxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZXdwb3J0KEdD
M0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0QKIHsKICAgICBpZiAoaXND
b250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNpemUod2lk
dGgsIGhlaWdodCkpCisgICAgaWYgKCF2YWxpZGF0ZVNpemUoInZpZXdwb3J0Iiwgd2lkdGgsIGhl
aWdodCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnZpZXdwb3J0KHgsIHksIHdp
ZHRoLCBoZWlnaHQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC00
MTMwLDcgKzQxMzAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlld3BvcnQoR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRAogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0
Q29udGV4dE1vZGUgbW9kZSkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKSB7Ci0gICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAibG9zZUNvbnRleHQiLCAiY29udGV4dCBhbHJlYWR5IGxvc3Qi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDE1NSw3ICs0MTU1LDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omxvc2VDb250ZXh0SW1wbChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6Okxvc3RDb250ZXh0TW8KICAgICAgICAgaWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6Q09OVEVY
VF9MT1NUX1dFQkdMKTsKKyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
Q09OVEVYVF9MT1NUX1dFQkdMLCAibG9zZUNvbnRleHQiLCAiY29udGV4dCBsb3N0Iik7CiAKICAg
ICAvLyBEb24ndCBhbGxvdyByZXN0b3JhdGlvbiB1bmxlc3MgdGhlIGNvbnRleHQgbG9zdCBldmVu
dCBoYXMgYm90aCBiZWVuCiAgICAgLy8gZGlzcGF0Y2hlZCBhbmQgaXRzIGRlZmF1bHQgYmVoYXZp
b3IgcHJldmVudGVkLgpAQCAtNDE2OSwxMyArNDE2OSwxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6bG9zZUNvbnRleHRJbXBsKFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRl
eHRNbwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZvcmNlUmVzdG9yZUNvbnRleHQoKQog
ewogICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCBub3QgbG9zdCIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKCFtX3Jlc3RvcmVBbGxvd2VkKSB7CiAgICAgICAgIGlmIChtX2Nv
bnRleHRMb3N0TW9kZSA9PSBTeW50aGV0aWNMb3N0Q29udGV4dCkKLSAgICAgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInJlc3RvcmVDb250ZXh0IiwgImNvbnRleHQgcmVzdG9yYXRpb24g
bm90IGFsbG93ZWQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDQwNiw3ICs0NDA2
LDcgQEAgaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdo
dCgpCiAgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgp
LmhlaWdodCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdo
dCgpOwogfQogCi1XZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVU
ZXh0dXJlQmluZGluZyhHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFw
KQorV2ViR0xUZXh0dXJlKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNl
U2l4RW51bXNGb3JDdWJlTWFwKQogewogICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gMDsKICAgICBz
d2l0Y2ggKHRhcmdldCkgewpAQCAtNDQyMCw1OCArNDQyMCw1OCBAQCBXZWJHTFRleHR1cmUqIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXh0dXJlQmluZGluZyhHQzNEZW51bSB0YXJn
ZXQsIGJvbwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWjoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1o6CiAgICAgICAgIGlmICghdXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7Ci0gICAgICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIp
OwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgdGV4ID0gbV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0ubV90ZXh0dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVA6CiAgICAgICAgIGlmICh1c2VTaXhFbnVtc0ZvckN1YmVNYXApIHsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICB0ZXggPSBtX3RleHR1
cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS5tX3RleHR1cmVDdWJlTWFwQmluZGluZy5nZXQo
KTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOwogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAgICAgaWYgKCF0ZXgpCi0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJubyB0ZXh0dXJlIik7CiAgICAgcmV0dXJuIHRleDsKIH0KIAotYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlTG9jYXRpb25MZW5ndGgoY29uc3QgU3RyaW5nJiBzdHJpbmcp
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVMb2NhdGlvbkxlbmd0aChjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIGNvbnN0
IHVuc2lnbmVkIG1heFdlYkdMTG9jYXRpb25MZW5ndGggPSAyNTY7CiAgICAgaWYgKHN0cmluZy5s
ZW5ndGgoKSA+IG1heFdlYkdMTG9jYXRpb25MZW5ndGgpIHsKLSAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJsb2NhdGlvbiBsZW5ndGggPiAyNTYiKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlU2l6ZShHQzNEaW50IHgsIEdDM0RpbnQgeSkKK2Jvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVNpemUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
aW50IHgsIEdDM0RpbnQgeSkKIHsKICAgICBpZiAoeCA8IDAgfHwgeSA8IDApIHsKLSAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzaXplIDwgMCIpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTdHJpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBj
b25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmlu
Zy5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIGlmICghdmFsaWRhdGVDaGFyYWN0ZXIoc3RyaW5n
W2ldKSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic3RyaW5n
IG5vdCBBU0NJSSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
fQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUp
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlw
ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSkKIHsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkFMUEhBOgpAQCAtNDQ4MSw3ICs0NDgxLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoR0MzRGVudW0gZm9ybWF0LCBHQzNEZW4KICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgogICAgICAgICBicmVhazsKICAgICBkZWZh
dWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgZm9y
bWF0Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTQ0OTQsMTAgKzQ0OTQs
MTAgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFu
ZFR5cGUoR0MzRGVudW0gZm9ybWF0LCBHQzNEZW4KICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVDoKICAgICAgICAgaWYgKG1fb2VzVGV4dHVyZUZsb2F0KQogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBl
Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCkBAIC00NTA4LDcgKzQ1MDgsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKICAgICAg
ICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKICAgICAgICAg
ICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUKSB7Ci0gICAgICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgZm9y
bWF0Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CkBAIC00NTE2LDcgKzQ1MTYsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShHQzNEZW51bSBmb3JtYXQsIEdDM0RlbgogICAgICAg
ICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQogICAgICAgICAg
ICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzUKICAg
ICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUKSB7Ci0gICAgICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBm
b3IgUkdCIGZvcm1hdCIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwpAQCAtNDUyNSw3ICs0NTI1LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW4KICAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NI
T1JUXzRfNF80XzQKICAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUXzVfNV81XzEKICAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgUkdCQSBmb3JtYXQiKTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTQ1MzYsMTYgKzQ1MzYs
MTYgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFu
ZFR5cGUoR0MzRGVudW0gZm9ybWF0LCBHQzNEZW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0xldmVsKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVRleEZ1bmNMZXZlbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCkKIHsKICAgICBpZiAobGV2ZWwgPCAwKSB7Ci0gICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPCAwIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgc3dpdGNoICh0YXJnZXQpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJEOgogICAgICAgICBpZiAobGV2ZWwgPiBtX21heFRleHR1cmVMZXZlbCkgewotICAg
ICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdl
Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CkBAIC00NTU2LDcgKzQ1NTYsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVUZXhGdW5jTGV2ZWwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKQogICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CiAgICAgICAg
IGlmIChsZXZlbCA+IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCkgewotICAgICAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC00NTY2LDcg
KzQ1NjYsOCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2
ZWwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUpCkBAIC00NTc0LDE4ICs0NTc1LDE4IEBAIGJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsCiAgICAgLy8gV2UgYWJzb2x1dGVseSBoYXZlIHRvIHZhbGlkYXRlIHRoZSBmb3JtYXQg
YW5kIHR5cGUgY29tYmluYXRpb24uCiAgICAgLy8gVGhlIHRleEltYWdlMkQgZW50cnkgcG9pbnRz
IHRha2luZyBIVE1MSW1hZ2UsIGV0Yy4gd2lsbCBwcm9kdWNlCiAgICAgLy8gdGVtcG9yYXJ5IGRh
dGEgYmFzZWQgb24gdGhpcyBjb21iaW5hdGlvbiwgc28gaXQgbXVzdCBiZSBsZWdhbC4KLSAgICBp
ZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoZm9ybWF0LCB0eXBlKSB8fCAhdmFsaWRh
dGVUZXhGdW5jTGV2ZWwodGFyZ2V0LCBsZXZlbCkpCisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNG
b3JtYXRBbmRUeXBlKGZ1bmN0aW9uTmFtZSwgZm9ybWF0LCB0eXBlKSB8fCAhdmFsaWRhdGVUZXhG
dW5jTGV2ZWwoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIGxldmVsKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7Ci0gICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUp
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IDwgMCIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCiAgICAgc3dpdGNoICh0YXJnZXQpIHsKICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgogICAgICAgICBpZiAod2lkdGggPiBtX21heFRleHR1
cmVTaXplIHx8IGhlaWdodCA+IG1fbWF4VGV4dHVyZVNpemUpIHsKLSAgICAgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBvdXQgb2YgcmFuZ2UiKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAg
LTQ1OTYsNDIgKzQ1OTcsNDMgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
VGV4RnVuY1BhcmFtZXRlcnMoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGwKICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgogICAgICAgICBp
ZiAod2lkdGggIT0gaGVpZ2h0IHx8IHdpZHRoID4gbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUpIHsK
LSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoICE9IGhlaWdo
dCBvciB3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJhbmdlIGZvciBjdWJlIG1hcCIpOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBpZiAoZm9ybWF0ICE9IGludGVybmFs
Zm9ybWF0KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3Jt
YXQgIT0gaW50ZXJuYWxmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAog
ICAgIGlmIChib3JkZXIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJib3Jk
ZXIgIT0gMCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNEYXRh
KEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKK2Jvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyog
cGl4ZWxzKQogewogICAgIGlmICghcGl4ZWxzKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmb3JtYXQsIHR5cGUpKQorICAgIGlm
ICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGZvcm1hdCwgdHlw
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CiAgICAgICAgIGlmICghcGl4ZWxz
LT5pc1Vuc2lnbmVkQnl0ZUFycmF5KCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBVTlNJR05FRF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZp
ZXcgbm90IFVpbnQ4QXJyYXkiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogICAgICAgICBicmVhazsKQEAgLTQ2MzksMTMgKzQ2NDEsMTMgQEAgYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0RhdGEoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2gKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRf
NF80OgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6
CiAgICAgICAgIGlmICghcGl4ZWxzLT5pc1Vuc2lnbmVkU2hvcnRBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5TSUdORURf
U0hPUlQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWludDE2QXJyYXkiKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQKICAgICAgICAgaWYgKCFw
aXhlbHMtPmlzRmxvYXRBcnJheSgpKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgRkxPQVQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgRmxv
YXQzMkFycmF5Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CkBAIC00NjU2LDE3ICs0NjU4LDE3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
CiAgICAgdW5zaWduZWQgaW50IHRvdGFsQnl0ZXNSZXF1aXJlZDsKICAgICBHQzNEZW51bSBlcnJv
ciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0
aCwgaGVpZ2h0LCBtX3VucGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7CiAg
ICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoZXJyb3IsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBkaW1lbnNpb25zIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0
aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJBcnJheUJ1ZmZlclZpZXcgbm90IGJpZyBlbm91Z2ggZm9yIHJlcXVlc3Qi
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd01vZGUoR0MzRGVudW0gbW9k
ZSkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsK
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0lOVFM6CkBAIC00Njc4LDIxICs0NjgwLDIx
IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdNb2RlKEdDM0RlbnVt
IG1vZGUpCiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUs
ICJpbnZhbGlkIGRyYXcgbW9kZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQog
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoKQor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSkKIHsKICAgICBpZiAobV9zdGVuY2lsTWFzayAhPSBtX3N0ZW5j
aWxNYXNrQmFjayB8fCBtX3N0ZW5jaWxGdW5jUmVmICE9IG1fc3RlbmNpbEZ1bmNSZWZCYWNrIHx8
IG1fc3RlbmNpbEZ1bmNNYXNrICE9IG1fc3RlbmNpbEZ1bmNNYXNrQmFjaykgewotICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZnJvbnQgYW5kIGJhY2sgc3RlbmNpbHMg
c2V0dGluZ3MgZG8gbm90IG1hdGNoIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZ1
bmMpCiB7CiAgICAgc3dpdGNoIChmdW5jKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TkVWRVI6CkBAIC00NzA1LDcgKzQ3MDcsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVTdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jKQogICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkFMV0FZUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKLSAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmdW5jdGlvbiIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogfQpAQCAtNDcxNSwxMCArNDcxNywxMCBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cHJpbnRXYXJuaW5nVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKICAgICBjYW52YXMoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZG9tV2luZG93KCktPmNv
bnNvbGUoKS0+YWRkTWVzc2FnZShIVE1MTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIFdh
cm5pbmdNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIGNhbnZhcygpLT5kb2N1bWVudCgpLT51cmwoKS5z
dHJpbmcoKSk7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1l
YnVmZmVyRnVuY1BhcmFtZXRlcnMoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50
KQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFy
YW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gYXR0YWNobWVudCkKIHsKICAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRh
cmdldCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHN3aXRjaCAoYXR0YWNo
bWVudCkgewpAQCAtNDcyOCwxMyArNDczMCwxMyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKEdDM0RlbnVtIHRhcmdldCwgRwog
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1l
LCAiaW52YWxpZCBhdHRhY2htZW50Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZVTkNfQUREOgpAQCAtNDc0MiwyNCArNDc0NCwyNCBAQCBib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCiAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlVOQ19SRVZFUlNFX1NVQlRSQUNUOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIG1vZGUiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAotYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhHQzNEZW51bSBzcmMs
IEdDM0RlbnVtIGRzdCkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5k
RnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBzcmMsIEdDM0Rl
bnVtIGRzdCkKIHsKICAgICBpZiAoKChzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5U
X0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0NP
TE9SKQogICAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQUxQ
SEEgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEp
KQogICAgICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1Ig
fHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCiAg
ICAgICAgICAgICAmJiAoc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8
fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpKSB7
Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbmNvbXBhdGlibGUg
c3JjIGFuZCBkc3QiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ2FwYWJpbGl0
eShHQzNEZW51bSBjYXApCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDYXBh
YmlsaXR5KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gY2FwKQogewogICAgIHN3
aXRjaCAoY2FwKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQ6CkBAIC00Nzcz
LDY3ICs0Nzc1LDY3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFi
aWxpdHkoR0MzRGVudW0gY2FwKQogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
VEVTVDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBjYXBhYmlsaXR5Iik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQorYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJh
eSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKIHsKICAgICBpZiAoIXYpIHsKLSAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQotICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJz
KGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXpl
KTsKKyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5h
bWUsIGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5T
aXplKTsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5
KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEdDM0Rz
aXplaSByZXF1aXJlZE1pblNpemUpCiB7CiAgICAgaWYgKCF2KSB7Ci0gICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KLSAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwg
ZmFsc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7CisgICAgcmV0
dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlv
biwgZmFsc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7CiB9CiAK
LWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNpemVpIHNp
emUsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNpemVpIHNp
emUsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCiB7Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5p
Zm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIGZhbHNlLCB2LCBzaXplLCByZXF1aXJlZE1p
blNpemUpOworICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1bmN0
aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LCBzaXplLCByZXF1aXJlZE1pblNpemUpOwogfQog
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1l
dGVycyhjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRy
YW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQorYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkg
cmVxdWlyZWRNaW5TaXplKQogewogICAgIGlmICghdikgewotICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0g
ICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5z
cG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXplKTsKKyAgICByZXR1
cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7CiB9
CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJh
bWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4g
dHJhbnNwb3NlLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWlu
U2l6ZSkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQ
YXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIHZvaWQqIHYsIEdDM0RzaXpl
aSBzaXplLCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQogewogICAgIGlmICghbG9jYXRpb24p
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBt
X2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJsb2NhdGlvbiBpcyBub3QgZnJvbSBjdXJyZW50IHByb2dyYW0iKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJubyBhcnJheSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IGlmICh0cmFuc3Bvc2UpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0cmFu
c3Bvc2Ugbm90IEZBTFNFIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYg
KHNpemUgPCByZXF1aXJlZE1pblNpemUgfHwgKHNpemUgJSByZXF1aXJlZE1pblNpemUpKSB7Ci0g
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBzaXplIik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVdlYkdMQnVmZmVy
KiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSB1c2FnZSkKK1dlYkdMQnVmZmVyKiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHVzYWdlKQogewogICAgIFdlYkdMQnVm
ZmVyKiBidWZmZXIgPSAwOwogICAgIHN3aXRjaCAodGFyZ2V0KSB7CkBAIC00ODQ0LDExICs0ODQ2
LDExIEBAIFdlYkdMQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQnVmZmVy
RGF0YVBhcmFtZXRlcnMoR0MzRGVudW0gdGFyZ2V0CiAgICAgICAgIGJ1ZmZlciA9IG1fYm91bmRB
cnJheUJ1ZmZlci5nZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIGlmICghYnVmZmVyKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJubyBidWZmZXIiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
ICAgIHN3aXRjaCAodXNhZ2UpIHsKQEAgLTQ4NTcsMzAgKzQ4NTksMzAgQEAgV2ViR0xCdWZmZXIq
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhHQzNE
ZW51bSB0YXJnZXQKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVc6CiAg
ICAgICAgIHJldHVybiBidWZmZXI7CiAgICAgfQotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52
YWxpZCB1c2FnZSIpOwogICAgIHJldHVybiAwOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlKQor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlKQogewogICAgIGlm
ICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAibm8gaW1hZ2UiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICBjb25zdCBLVVJMJiB1cmwgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+cmVzcG9uc2UoKS51
cmwoKTsKICAgICBpZiAodXJsLmlzTnVsbCgpIHx8IHVybC5pc0VtcHR5KCkgfHwgIXVybC5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGltYWdl
Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmSW1wbChHQzNEdWludCBp
bmRleCwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEs
IEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYmZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5k
ZXgsIEdDM0RzaXplaSBleHBlY3RlZFNpemUsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBH
QzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQog
ICAgICAgICByZXR1cm47CiAgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewot
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRpbmcgdmVy
dGV4QXR0cmliMCB2YWx1ZXMuCkBAIC00OTA4LDMxICs0OTEwLDMxIEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmSW1wbChHQzNEdWludCBpbmRleCwgR0MzRHNpemVp
IGV4cGVjdGVkCiAgICAgYXR0cmliVmFsdWUudmFsdWVbM10gPSB2MzsKIH0KIAotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbChHQzNEdWludCBpbmRleCwgRmxv
YXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXplaSBleHBlY3RlZFNpemUpCiB7
CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghdikg
ewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKGluZGV4LCB2LT5kYXRhKCks
IHYtPmxlbmd0aCgpLCBleHBlY3RlZFNpemUpOworICAgIHZlcnRleEF0dHJpYmZ2SW1wbChmdW5j
dGlvbk5hbWUsIGluZGV4LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCBleHBlY3RlZFNpemUpOwog
fQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZnZJbXBsKEdDM0R1
aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgZXhwZWN0
ZWRTaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdD
M0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQogewogICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGlmIChzaXplIDwgZXhwZWN0ZWRTaXplKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCBzaXplIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYg
KGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRpbmcgdmVydGV4QXR0cmliMCB2YWx1ZXMuCkBAIC01
MDkxLDcgKzUwOTMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3Jl
Q29udGV4dChUaW1lcjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KikKICAgICAgICAgICAgIG1fcmVz
dG9yZVRpbWVyLnN0YXJ0T25lU2hvdChzZWNvbmRzQmV0d2VlblJlc3RvcmVBdHRlbXB0cyk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIC8vIFRoaXMgbGlrZWx5IHNob3VsZG4ndCBoYXBwZW4g
YnV0IGlzIHRoZSBiZXN0IHdheSB0byByZXBvcnQgaXQgdG8gdGhlIFdlYkdMIGFwcC4KLSAgICAg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgIiIsICJlcnJvciByZXN0b3JpbmcgY29udGV4
dCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MTQ0LDYgKzUxNDYsMzYgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmJ1YmJsZVRvRnJv
bnQoaW50IGlkeCkKICAgICAgICAgbV9idWZmZXJzW2ldLnN3YXAobV9idWZmZXJzW2ktMV0pOwog
fQogCituYW1lc3BhY2UgeworCisgICAgU3RyaW5nIEdldEVycm9yU3RyaW5nKEdDM0RlbnVtIGVy
cm9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChlcnJvcikgeworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU06CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSURf
RU5VTSI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU6Cisg
ICAgICAgICAgICByZXR1cm4gIklOVkFMSURfVkFMVUUiOworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTjoKKyAgICAgICAgICAgIHJldHVybiAiSU5WQUxJ
RF9PUEVSQVRJT04iOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVN
T1JZOgorICAgICAgICAgICAgcmV0dXJuICJPVVRfT0ZfTUVNT1JZIjsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdMOgorICAgICAgICAgICAgcmV0dXJu
ICJDT05URVhUX0xPU1RfV0VCR0wiOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIFN0cmluZzo6Zm9ybWF0KCJXZWJHTCBFUlJPUiglMDR4KSIsIGVycm9yKTsKKyAgICAgICAg
fQorICAgIH0KKworfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvciwgY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikKK3sKKyAgICBTdHJpbmcgc3Ry
ID0gU3RyaW5nKCJXZWJHTDogIikgKyBHZXRFcnJvclN0cmluZyhlcnJvcikgKyAgIjogIiArIFN0
cmluZyhmdW5jdGlvbk5hbWUpICsgIjogIiArIFN0cmluZyhkZXNjcmlwdGlvbik7CisgICAgcHJp
bnRXYXJuaW5nVG9Db25zb2xlKHN0cik7CisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihlcnJvcik7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaAppbmRleCA1NTUwMzYwMWFmZjhmOGY5OGY4NDIzMGMyZGJhZDZhODA2NDhk
NjliLi43MWRkMzY1OThlMDFlNmZlNWIzY2JhY2UwODQzZTY5MTc4ZDU2ZDZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaApAQCAt
MzY0LDcgKzM2NCw3IEBAIHB1YmxpYzoKICAgICAvLyBJZiBudW1FbGVtZW50cyA8PSAwLCB3ZSBv
bmx5IGNoZWNrIGlmIGVhY2ggZW5hYmxlZCB2ZXJ0ZXggYXR0cmlidXRlIGlzIGJvdW5kIHRvIGEg
YnVmZmVyLgogICAgIGJvb2wgdmFsaWRhdGVSZW5kZXJpbmdTdGF0ZShpbnQgbnVtRWxlbWVudHMp
OwogCi0gICAgYm9vbCB2YWxpZGF0ZVdlYkdMT2JqZWN0KFdlYkdMT2JqZWN0Kik7CisgICAgYm9v
bCB2YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0IGNoYXIqLCBXZWJHTE9iamVjdCopOwogCiAjaWYg
RU5BQkxFKFZJREVPKQogICAgIFBhc3NSZWZQdHI8SW1hZ2U+IHZpZGVvRnJhbWVUb0ltYWdlKEhU
TUxWaWRlb0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CkBAIC01NDYsMzIgKzU0NiwzMyBAQCBw
dWJsaWM6CiAgICAgaW50IGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKTsKIAogICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB0byB2ZXJpZnkgbGltaXRzIG9uIHRoZSBsZW5ndGggb2YgdW5pZm9ybSBh
bmQgYXR0cmlidXRlIGxvY2F0aW9ucy4KLSAgICBib29sIHZhbGlkYXRlTG9jYXRpb25MZW5ndGgo
Y29uc3QgU3RyaW5nJik7CisgICAgYm9vbCB2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJik7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gY2hlY2sgaWYgc2l6ZSBpcyBub24tbmVnYXRpdmUuCiAgICAgLy8gR2VuZXJhdGUgR0wg
ZXJyb3IgYW5kIHJldHVybiBmYWxzZSBmb3IgbmVnYXRpdmUgaW5wdXRzOyBvdGhlcndpc2UsIHJl
dHVybiB0cnVlLgotICAgIGJvb2wgdmFsaWRhdGVTaXplKEdDM0RpbnQgeCwgR0MzRGludCB5KTsK
KyAgICBib29sIHZhbGlkYXRlU2l6ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQg
eCwgR0MzRGludCB5KTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBhbGwg
Y2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGJlbG9uZyB0byB0aGUKICAgICAvLyBBU0NJSSBzdWJz
ZXQgYXMgZGVmaW5lZCBpbiBHTFNMIEVTIDEuMCBzcGVjIHNlY3Rpb24gMy4xLgotICAgIGJvb2wg
dmFsaWRhdGVTdHJpbmcoY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCB2YWxpZGF0ZVN0cmluZyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYpOwogCiAgICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIGNoZWNrIHRhcmdldCBhbmQgdGV4dHVyZSBib3VuZCB0byB0aGUgdGFyZ2V0
LgogICAgIC8vIEdlbmVyYXRlIEdMIGVycm9ycyBhbmQgcmV0dXJuIDAgaWYgdGFyZ2V0IGlzIGlu
dmFsaWQgb3IgdGV4dHVyZSBib3VuZCBpcwogICAgIC8vIG51bGwuICBPdGhlcndpc2UsIHJldHVy
biB0aGUgdGV4dHVyZSBib3VuZCB0byB0aGUgdGFyZ2V0LgotICAgIFdlYkdMVGV4dHVyZSogdmFs
aWRhdGVUZXh0dXJlQmluZGluZyhHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JD
dWJlTWFwKTsKKyAgICBXZWJHTFRleHR1cmUqIHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JD
dWJlTWFwKTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBmb3JtYXQv
dHlwZSBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCiAgICAgLy8gR2VuZXJhdGVz
IEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCi0g
ICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSk7CisgICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlKTsKIAog
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBsZXZlbCBmb3IgZnVuY3Rpb25z
IHtjb3B5fVRleHtTdWJ9SW1hZ2UuCiAgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1
cm5zIGZhbHNlIGlmIGxldmVsIGlzIGludmFsaWQuCi0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNM
ZXZlbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpOworICAgIGJvb2wgdmFsaWRhdGVU
ZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IHBh
cmFtZXRlcnMgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgogICAgIC8vIEdlbmVy
YXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlk
LgotICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsCisgICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlKTsKQEAgLTU3OSwxOCArNTgwLDE5IEBAIHB1YmxpYzoKICAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhhdCB0aGUgZ2l2ZW4gQXJyYXlCdWZmZXJWaWV3
CiAgICAgLy8gaXMgb2YgdGhlIGNvcnJlY3QgdHlwZSBhbmQgY29udGFpbnMgZW5vdWdoIGRhdGEg
Zm9yIHRoZSB0ZXhJbWFnZSBjYWxsLgogICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0
dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIGJvb2wgdmFsaWRhdGVU
ZXhGdW5jRGF0YShHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgYm9vbCB2
YWxpZGF0ZVRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKTsK
IAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBtb2RlIGZvciBkcmF3e0FycmF5
cy9FbGVtZW50c30uCi0gICAgYm9vbCB2YWxpZGF0ZURyYXdNb2RlKEdDM0RlbnVtKTsKKyAgICBi
b29sIHZhbGlkYXRlRHJhd01vZGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7
CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgaWYgZnJvbnQvYmFjayBzdGVu
Y2lsTWFzayBhbmQgc3RlbmNpbEZ1bmMgc2V0dGluZ3MgYXJlIHRoZSBzYW1lLgotICAgIGJvb2wg
dmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoKTsKKyAgICBib29sIHZhbGlkYXRlU3RlbmNpbFNldHRp
bmdzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gdmFsaWRhdGUgc3RlbmNpbCBmdW5jLgotICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsRnVuYyhH
QzNEZW51bSk7CisgICAgYm9vbCB2YWxpZGF0ZVN0ZW5jaWxGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRGVudW0pOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXhQYXJh
bWV0ZXJmIGFuZCB0ZXhQYXJhbWV0ZXJpLgogICAgIHZvaWQgdGV4UGFyYW1ldGVyKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbWksIEdDM0RpbnQgcGFyYW1m
LCBib29sIGlzRmxvYXQpOwpAQCAtNjAxLDM1ICs2MDMsMzUgQEAgcHVibGljOgogCiAgICAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZyYW1lYnVm
ZmVyIGZ1bmN0aW9ucy4KICAgICAvLyBHZW5lcmF0ZSBHTCBlcnJvciBpZiBwYXJhbWV0ZXJzIGFy
ZSBpbGxlZ2FsLgotICAgIGJvb2wgdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCk7CisgICAgYm9vbCB2YWxpZGF0ZUZy
YW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIHZhbGlkYXRlIGJsZW5kIGVxdWF0aW9uIG1vZGUuCi0gICAgYm9vbCB2YWxpZGF0ZUJsZW5k
RXF1YXRpb24oR0MzRGVudW0pOworICAgIGJvb2wgdmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0pOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIHZhbGlkYXRlIGJsZW5kIGZ1bmMgZmFjdG9ycy4KLSAgICBib29sIHZhbGlkYXRlQmxlbmRG
dW5jRmFjdG9ycyhHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCk7CisgICAgYm9vbCB2YWxpZGF0
ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBzcmMs
IEdDM0RlbnVtIGRzdCk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYSBH
TCBjYXBhYmlsaXR5LgotICAgIGJvb2wgdmFsaWRhdGVDYXBhYmlsaXR5KEdDM0RlbnVtKTsKKyAg
ICBib29sIHZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0Rl
bnVtKTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0
ZXJzIGZvciB1bmlmb3JtIGZ1bmN0aW9ucy4KLSAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBGbG9hdDMyQXJyYXkqLCBHQzNEc2l6
ZWkgbW9kKTsKLSAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qLCBJbnQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgdm9p
ZCosIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgbW9kKTsKLSAgICBib29sIHZhbGlkYXRlVW5p
Zm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSosIEdDM0RzaXplaSBtb2QpOwotICAgIGJvb2wg
dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biosIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgdm9pZCosIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6
ZWkgbW9kKTsKKyAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEZsb2F0MzJBcnJheSos
IEdDM0RzaXplaSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgSW50MzJB
cnJheSosIEdDM0RzaXplaSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwg
dm9pZCosIEdDM0RzaXplaSwgR0MzRHNpemVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZv
cm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSosIEdD
M0RzaXplaSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0Mz
RGJvb2xlYW4gdHJhbnNwb3NlLCB2b2lkKiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKIAog
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBwYXJhbWV0ZXJzIGZvciBidWZmZXJE
YXRhLgogICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFyZ2V0LCBv
ciAwIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCi0gICAgV2ViR0xCdWZmZXIqIHZhbGlkYXRl
QnVmZmVyRGF0YVBhcmFtZXRlcnMoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSB1c2FnZSk7Cisg
ICAgV2ViR0xCdWZmZXIqIHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHVzYWdlKTsKIAogICAgIC8v
IEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBpbWFnZSBp
cyByZWFkeS4KLSAgICBib29sIHZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChIVE1MSW1hZ2VFbGVt
ZW50Kik7CisgICAgYm9vbCB2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBIVE1MSW1hZ2VFbGVtZW50Kik7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb25z
IGZvciB2ZXJ0ZXhBdHRyaWJOZnt2fS4KLSAgICB2b2lkIHZlcnRleEF0dHJpYmZJbXBsKEdDM0R1
aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwg
R0MzRGZsb2F0LCBHQzNEZmxvYXQpOwotICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBsKEdDM0R1
aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKTsKLSAgICB2
b2lkIHZlcnRleEF0dHJpYmZ2SW1wbChHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiwgR0MzRHNp
emVpIHNpemUsIEdDM0RzaXplaSBleHBlY3RlZFNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmli
ZkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0MzRHNpemVp
IGV4cGVjdGVkU2l6ZSwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0
KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKTsK
KyAgICB2b2lkIHZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBleHBlY3RlZFNp
emUpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBkZWxldGUqIChkZWxldGVCdWZmZXIs
IGRlbGV0ZVByb2dyYW0sIGV0YykgZnVuY3Rpb25zLgogICAgIC8vIFJldHVybiBmYWxzZSBpZiBj
YWxsZXIgc2hvdWxkIHJldHVybiB3aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4KQEAgLTYzOCw3
ICs2NDAsNyBAQCBwdWJsaWM6CiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBiaW5kKiAoYmlu
ZEJ1ZmZlciwgYmluZFRleHR1cmUsIGV0YykgYW5kIHVzZVByb2dyYW0uCiAgICAgLy8gSWYgdGhl
IG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGRlbGV0ZWQsIHNldCBkZWxldGVkIHRvIHRydWUgdXBv
biByZXR1cm4uCiAgICAgLy8gUmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJuIHdp
dGhvdXQgZnVydGhlciBwcm9jZXNzaW5nLgotICAgIGJvb2wgY2hlY2tPYmplY3RUb0JlQm91bmQo
V2ViR0xPYmplY3QqLCBib29sJiBkZWxldGVkKTsKKyAgICBib29sIGNoZWNrT2JqZWN0VG9CZUJv
dW5kKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqLCBib29sJiBkZWxldGVk
KTsKIAogICAgIC8vIEhlbHBlcnMgZm9yIHNpbXVsYXRpbmcgdmVydGV4QXR0cmliMAogICAgIHZv
aWQgaW5pdFZlcnRleEF0dHJpYjAoKTsKQEAgLTY1Myw2ICs2NTUsMTAgQEAgcHVibGljOgogICAg
IC8vIGEgU2FmYXJpIG9yIENocm9tZSBleHRlbnNpb24uCiAgICAgYm9vbCBhbGxvd1ByaXZpbGVn
ZWRFeHRlbnNpb25zKCkgY29uc3Q7CiAKKyAgICAvLyBXcmFwcGVyIGZvciBHcmFwaGljc0NvbnRl
eHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IgdGhhdCBzZW5kcyBhIG1lc3NhZ2UKKyAgICAvLyB0byB0
aGUgSmF2YVNjcmlwdCBjb25zb2xlLgorICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVu
dW0sIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24pOwor
CiAgICAgZnJpZW5kIGNsYXNzIFdlYkdMU3RhdGVSZXN0b3JlcjsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124847</attachid>
            <date>2012-01-31 16:43:52 -0800</date>
            <delta_ts>2012-01-31 16:53:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77267-20120131164351.patch</filename>
            <type>text/plain</type>
            <size>154321</size>
            <attacher name="Gregg Tavares">gman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NDA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTMxNjhlZTViNGI2MzJj
NGFiZjc4NTQ4Yzc1YWE2MmNmOTQ4MGIzYS4uMDY2ZDdiY2M3ZTdiNTM1NWY0ODEzYmI2NmM1ZWM3
Y2QzOTAwOTA0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwMyBAQAorMjAxMi0wMS0yNyAgR3Jl
Z2cgVGF2YXJlcyAgPGdtYW5AZ29vZ2xlLmNvbT4KKworICAgICAgICBNYWtlIFdlYkdMIHB1dCBz
eW50aGVzaXplZCBlcnJvcnMgaW4gdGhlIEpTIGNvbnNvbGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IGZ1bmN0aW9uYWxpdHkgc28gbm8gbmV3
IHRlc3RzLgorCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZXM6OnZhbGlkYXRl
Q29tcHJlc3NlZFRleEZ1bmNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVzOjpjb21wcmVzc2VkVGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TENvbXByZXNzZWRUZXh0dXJlczo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQpOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVzLmg6CisgICAgICAgIChXZWJHTENv
bXByZXNzZWRUZXh0dXJlcyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRl
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xEZWJ1Z1NoYWRlcnM6OmdldFRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2UpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2
ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjphdHRh
Y2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5k
QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjaGVja09iamVjdFRvQmVCb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJpbmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXByZXNzZWRUZXhTdWJJbWFn
ZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleElt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
cHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRh
Y2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNh
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVXZWJHTE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZUF0dHJpYik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZVVuaWZvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRyaWJM
b2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1
ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclBh
cmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNo
YWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRUZXhQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0VmVydGV4QXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aGludCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cGl4ZWxTdG9yZWkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVu
ZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnNjaXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpz
aGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpz
dGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0
ZW5jaWxGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpzdGVuY2lsTWFza1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2aWRlb0ZyYW1lVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTJpdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0zZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtM2kpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm00aSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00
aXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0
cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bU1hdHJpeDNmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliMWYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGYpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlld3BvcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZUxvc3RDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHRJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VSZXN0b3JlQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUxvY2F0aW9uTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5j
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
RHJhd01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVN0ZW5jaWxTZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlU3RlbmNpbEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5kRXF1YXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5k
RnVuY0ZhY3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZUNhcGFiaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQnVmZmVyRGF0YVBh
cmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZUhUTUxJbWFnZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN5bnRoZXNpemVH
TEVycm9yKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoK
KyAgICAgICAgKFdlYkdMUmVuZGVyaW5nQ29udGV4dCk6CisKKzIwMTItMDEtMjcgIEdyZWdnIFRh
dmFyZXMgIDxnbWFuQGdvb2dsZS5jb20+CisKKyAgICAgICAgTWFrZSBXZWJHTCBwdXQgc3ludGhl
c2l6ZWQgZXJyb3JzIGluIHRoZSBKUyBjb25zb2xlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzI2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5IHNvIG5vIG5ldyB0ZXN0
cy4KKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVzOjp2YWxpZGF0ZUNvbXBy
ZXNzZWRUZXhGdW5jRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbXByZXNzZWRUZXh0
dXJlczo6Y29tcHJlc3NlZFRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21w
cmVzc2VkVGV4dHVyZXM6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlcy5oOgorICAgICAgICAoV2ViR0xDb21wcmVz
c2VkVGV4dHVyZXMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRGVidWdTaGFkZXJzOjpnZXRUcmFuc2xhdGVkU2hh
ZGVyU291cmNlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjphY3RpdmVUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXR0YWNoU2hh
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0dHJp
YkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hl
Y2tPYmplY3RUb0JlQm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpiaW5kQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YmxlbmRFcXVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21waWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJE
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1Yklt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVT
aGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aFJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoU2hh
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlV2ViR0xPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQ
YXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2cpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQYXJhbWV0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJ
bmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hh
ZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VGV4UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFZlcnRleEF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpp
c0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5r
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBpeGVs
U3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBp
eGVscyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpz
Y2lzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2hhZGVy
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNp
bEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2ls
RnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
c3RlbmNpbE1hc2tTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleEltYWdlMkRCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dGV4SW1hZ2UyREltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmlkZW9GcmFtZVRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0yaSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTNpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm00Zik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGkp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJm
dik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRy
aXgzZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
TWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dXNl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmVydGV4QXR0cmliMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VMb3N0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omxvc2VDb250ZXh0SW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZvcmNlUmVzdG9yZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleHR1cmVCaW5kaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVMb2Nh
dGlvbkxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0RhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdN
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVT
dGVuY2lsU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuZEZ1bmNG
YWN0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVDYXBhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVI
VE1MSW1hZ2VFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliZkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjptYXliZVJlc3RvcmVDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzeW50aGVzaXplR0xFcnJv
cik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAg
ICAgIChXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorCiAyMDEyLTAxLTMxICBTaGVyaWZmIEJvdCAg
PHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByMTA2Mzc2LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xDb21wcmVzc2VkVGV4dHVyZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xDb21wcmVzc2VkVGV4dHVyZXMuY3BwCmluZGV4IDFlYWI3ODcyMzZhYzc4ODNjNDg0ZThj
MGZiN2IwODA1MGYwY2U5N2MuLjE1MTk4MGNhYTE4YjI4Nzg5ZTYwMGU5MTA0NGRjN2Q3YjJjOWNk
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlcy5jcHAKQEAgLTEyNSwxNiArMTI1LDE2IEBAIGJvb2wgV2ViR0xDb21wcmVz
c2VkVGV4dHVyZXM6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChHQzNEZW51bSBmb3JtYXQp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVzOjp2
YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyog
cGl4ZWxzKQorYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlczo6dmFsaWRhdGVDb21wcmVzc2Vk
VGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcq
IHBpeGVscykKIHsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fY29udGV4dC0+
Z3JhcGhpY3NDb250ZXh0M0QoKTsKICAgICBpZiAoIXBpeGVscykgewotICAgICAgICBjb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVscyIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkgewotICAgICAg
ICBjb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAi
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTcyLDEyICsxNzIsMTIgQEAg
Ym9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlczo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0Rh
dGEoR0MzRHNpemVpIHdpZHRoLCBHQzMKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBk
ZWZhdWx0OgotICAgICAgICBjb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IGZvcm1hdCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKHBpeGVs
cy0+Ynl0ZUxlbmd0aCgpICE9IGJ5dGVzUmVxdWlyZWQpIHsKLSAgICAgICAgY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZW5ndGggb2YgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBj
b3JyZWN0IGZvciBkaW1lbnNpb25zIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
QEAgLTIyOSwzMCArMjI5LDI5IEBAIGJvb2wgV2ViR0xDb21wcmVzc2VkVGV4dHVyZXM6OnZhbGlk
YXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMoR0MzRGVudW0gdGFyZ2V0CiB2b2lkIFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVzOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3
KiBkYXRhKQogewotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9jb250ZXh0LT5n
cmFwaGljc0NvbnRleHQzRCgpOwogICAgIGlmIChtX2NvbnRleHQtPmlzQ29udGV4dExvc3QoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KGlu
dGVybmFsZm9ybWF0KSkgewotICAgICAgICBjb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY29tcHJlc3NlZFRl
eEltYWdlMkQiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmIChib3JkZXIpIHsKLSAgICAgICAgY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29t
cHJlc3NlZFRleEltYWdlMkQiLCAiYm9yZGVyIG5vdCAwIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YSh3aWR0aCwgaGVpZ2h0
LCBpbnRlcm5hbGZvcm1hdCwgZGF0YSkpCisgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhG
dW5jRGF0YSgiY29tcHJlc3NlZFRleEltYWdlMkQiLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZv
cm1hdCwgZGF0YSkpCiAgICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IG1f
Y29udGV4dC0+dmFsaWRhdGVUZXh0dXJlQmluZGluZyh0YXJnZXQsIHRydWUpOworICAgIFdlYkdM
VGV4dHVyZSogdGV4ID0gbV9jb250ZXh0LT52YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVz
c2VkVGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CiAgICAgaWYgKCF0ZXgpCiAgICAgICAgIHJl
dHVybjsKICAgICBpZiAoIW1fY29udGV4dC0+aXNHTEVTMk5QT1RTdHJpY3QoKSkgewogICAgICAg
ICBpZiAobGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIs
ICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0KLSAgICBjb250ZXh0LT5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib3JkZXIsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJl
c3MoKSk7CisgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
cmRlciwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKICAgICB0ZXgt
PnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwogICAgIG1fY29udGV4dC0+Y2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI2MCwzMiArMjU5LDMxIEBAIHZv
aWQgV2ViR0xDb21wcmVzc2VkVGV4dHVyZXM6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlCiB2b2lkIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVzOjpjb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSkK
IHsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fY29udGV4dC0+Z3JhcGhpY3ND
b250ZXh0M0QoKTsKICAgICBpZiAobV9jb250ZXh0LT5pc0NvbnRleHRMb3N0KCkpCiAgICAgICAg
IHJldHVybjsKICAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChmb3JtYXQpKSB7
Ci0gICAgICAgIGNvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0pOworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJp
bnZhbGlkIGZvcm1hdCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghdmFsaWRh
dGVDb21wcmVzc2VkVGV4RnVuY0RhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCBkYXRhKSkKKyAg
ICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4U3ViSW1h
Z2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gbV9jb250ZXh0LT52YWxpZGF0ZVRleHR1cmVCaW5kaW5n
KHRhcmdldCwgdHJ1ZSk7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSBtX2NvbnRleHQtPnZhbGlk
YXRlVGV4dHVyZUJpbmRpbmcoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0cnVl
KTsKICAgICBpZiAoIXRleCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGZvcm1hdCAhPSB0
ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgIGNvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgImZvcm1hdCBkb2VzIG5vdCBt
YXRjaCB0ZXh0dXJlIGZvcm1hdCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdGV4KSkgewotICAgICAgICBjb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgImRpbWVu
c2lvbnMgaW52YWxpZCBmb3IgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBjb250ZXh0LT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsK
KyAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmNvbXByZXNzZWRUZXhTdWJJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7CiAgICAgbV9j
b250ZXh0LT5jbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlcy5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZXMuaAppbmRl
eCA2OTkzNzA2NjhhNTQ4M2JkNTY4OGFiMzFlNTJkYzY2ODI5ZGJmZWMyLi41MmI3MWMyMTM3ZmNj
NTkwNTJjZTQ1Zjg0NjJlYzg0NTg4OTdmNzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVzLmgKQEAgLTU0LDcgKzU0LDggQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBXZWJHTENvbXByZXNzZWRUZXh0dXJlcyhXZWJHTFJlbmRl
cmluZ0NvbnRleHQqKTsKIAotICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEo
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgIGJvb2wgdmFsaWRhdGVDb21w
cmVzc2VkVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscyk7CiAKICAgICBib29sIHZhbGlkYXRlQ29tcHJl
c3NlZFRleEZvcm1hdChHQzNEZW51bSBmb3JtYXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwCmluZGV4IDVkMmMzMTc2ZGYwNjQwMWM0OWVi
YTZhZmJhNmNlNjZjZGUzMDhkZTUuLjU0OTlhZWQ5ZjA0OGIyOWQ5YzhlNWE1ZTI3NTNlMDRhMWQ1
NGU1MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdT
aGFkZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnU2hh
ZGVycy5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgU3RyaW5nIFdlYkdMRGVidWdTaGFkZXJzOjpnZXRU
cmFuc2xhdGVkU2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGkKICAgICBV
TlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChtX2NvbnRleHQtPmlzQ29udGV4dExvc3QoKSkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGlmICghbV9jb250ZXh0LT52YWxpZGF0ZVdlYkdM
T2JqZWN0KHNoYWRlcikpCisgICAgaWYgKCFtX2NvbnRleHQtPnZhbGlkYXRlV2ViR0xPYmplY3Qo
ImdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UiLCBzaGFkZXIpKQogICAgICAgICByZXR1cm4gIiI7
CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9u
cygpLT5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyLT5vYmplY3QoKSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcAppbmRleCA5MTc2YTJkYTQ0ZmQ2ODlkMjIxYmE2MTM4NGE3NTY5ZjY0ZjQxNmJmLi45
NDVjMTdlNzRmMGMzZjEwMGIwZWE0ZjdmOWQ0NzRhMmRlMTk2NDZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTQy
NCw2ICs0MjQsNyBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4
dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBQYQogICAgICwgbV9jb250ZXh0TG9z
dChmYWxzZSkKICAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RDb250ZXh0KQog
ICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3N5bnRoZXNpemVkRXJyb3Jz
VG9Db25zb2xlKGZhbHNlKQogewogICAgIEFTU0VSVChtX2NvbnRleHQpOwogICAgIG1fY29udGV4
dEdyb3VwID0gV2ViR0xDb250ZXh0R3JvdXA6OmNyZWF0ZSgpOwpAQCAtNzg2LDcgKzc4Nyw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1
cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAg
IHJldHVybjsKICAgICBpZiAodGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCA+
PSBtX3RleHR1cmVVbml0cy5zaXplKCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImFjdGl2ZVRleHR1
cmUiLCAidGV4dHVyZSB1bml0IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIG1fYWN0aXZlVGV4dHVyZVVuaXQgPSB0ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUwOwpAQCAtODAxLDEwICs4MDIsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdM
T2JqZWN0KHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwg
cHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImF0dGFjaFNoYWRlciIsIHNoYWRlcikp
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXByb2dyYW0tPmF0dGFjaFNoYWRlcihzaGFkZXIp
KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYXR0YWNoU2hhZGVyIiwgInNoYWRlciBh
dHRhY2htZW50IGFscmVhZHkgaGFzIHNoYWRlciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2JqZWN0
T3JaZXJvKHNoYWRlcikpOwpAQCAtODE1LDI0ICs4MTYsMjQgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVy
KiBzaGEKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQXR0cmliTG9jYXRpb24oV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYmluZEF0dHJpYkxvY2F0aW9u
IiwgcHJvZ3JhbSkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25M
ZW5ndGgobmFtZSkpCisgICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJiaW5kQXR0cmli
TG9jYXRpb24iLCBuYW1lKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTdHJp
bmcobmFtZSkpCisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZygiYmluZEF0dHJpYkxvY2F0aW9uIiwg
bmFtZSkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmJpbmRBdHRyaWJMb2NhdGlv
bihvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hl
Y2tPYmplY3RUb0JlQm91bmQoV2ViR0xPYmplY3QqIG9iamVjdCwgYm9vbCYgZGVsZXRlZCkKK2Jv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiBvYmplY3QsIGJvb2wmIGRlbGV0ZWQpCiB7CiAg
ICAgZGVsZXRlZCA9IGZhbHNlOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAob2JqZWN0KSB7CiAgICAgICAgIGlmICghb2JqZWN0LT52YWxp
ZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAib2JqZWN0IG5vdCBmcm9tIHRoaXMgY29udGV4dCIpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGRlbGV0ZWQgPSAh
b2JqZWN0LT5vYmplY3QoKTsKQEAgLTg0NCwxMiArODQ1LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIqIGJ1ZmZl
ciwgRXhjCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBib29sIGRlbGV0ZWQ7Ci0gICAg
aWYgKCFjaGVja09iamVjdFRvQmVCb3VuZChidWZmZXIsIGRlbGV0ZWQpKQorICAgIGlmICghY2hl
Y2tPYmplY3RUb0JlQm91bmQoImJpbmRCdWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKGRlbGV0ZWQpCiAgICAgICAgIGJ1ZmZlciA9IDA7CiAgICAgaWYg
KGJ1ZmZlciAmJiBidWZmZXItPmdldFRhcmdldCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0g
dGFyZ2V0KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmluZEJ1ZmZlciIsICJidWZm
ZXJzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRhcmdldHMiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9C
VUZGRVIpCkBAIC04NTcsNyArODU4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJp
bmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEJ1ZmZlciogYnVmZmVyLCBFeGMKICAgICBl
bHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVS
KQogICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldEVsZW1lbnRBcnJheUJ1ZmZl
cihidWZmZXIpOwogICAgIGVsc2UgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZEJ1ZmZlciIsICJp
bnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NzEsMTIgKzg3
MiwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKEdDM0Rl
bnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciogYgogewogICAgIFVOVVNFRF9QQVJBTShlYyk7
CiAgICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoYnVmZmVy
LCBkZWxldGVkKSkKKyAgICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kRnJhbWVidWZm
ZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGRlbGV0ZWQp
CiAgICAgICAgIGJ1ZmZlciA9IDA7CiAgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRGcmFtZWJ1ZmZlciIsICJp
bnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fZnJhbWVidWZm
ZXJCaW5kaW5nID0gYnVmZmVyOwpAQCAtODk0LDEyICs4OTUsMTIgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRl
cmJ1ZmZlcioKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGJvb2wgZGVsZXRlZDsKLSAg
ICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKHJlbmRlckJ1ZmZlciwgZGVsZXRlZCkpCisgICAg
aWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZFJlbmRlcmJ1ZmZlciIsIHJlbmRlckJ1ZmZl
ciwgZGVsZXRlZCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoZGVsZXRlZCkKICAgICAgICAg
cmVuZGVyQnVmZmVyID0gMDsKICAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRSZW5kZXJidWZmZXIiLCAiaW52
YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX3JlbmRlcmJ1ZmZl
ckJpbmRpbmcgPSByZW5kZXJCdWZmZXI7CkBAIC05MTMsMTIgKzkxNCwxMiBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1
cmUqIHRleHR1cmUsCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBib29sIGRlbGV0ZWQ7
Ci0gICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCh0ZXh0dXJlLCBkZWxldGVkKSkKKyAgICBp
ZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kVGV4dHVyZSIsIHRleHR1cmUsIGRlbGV0ZWQp
KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGRlbGV0ZWQpCiAgICAgICAgIHRleHR1cmUgPSAw
OwogICAgIGlmICh0ZXh0dXJlICYmIHRleHR1cmUtPmdldFRhcmdldCgpICYmIHRleHR1cmUtPmdl
dFRhcmdldCgpICE9IHRhcmdldCkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRU
ZXh0dXJlIiwgInRleHR1cmVzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRhcmdldHMi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBHQzNEaW50IG1heExldmVsID0gMDsKQEAg
LTkzMyw3ICs5MzQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUo
R0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsCiAgICAgICAgIG1fdGV4dHVy
ZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gdGV4
dHVyZTsKICAgICAgICAgbWF4TGV2ZWwgPSBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRUZXh0dXJlIiwgImludmFsaWQgdGFyZ2V0
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZSh0
YXJnZXQsIG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7CkBAIC05NjIsNyArOTYzLDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0
IGdyZWVuLCBHQzNEZmxvYXQKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1
YXRpb24oR0MzRGVudW0gbW9kZSkKIHsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxp
ZGF0ZUJsZW5kRXF1YXRpb24obW9kZSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFs
aWRhdGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9kZSkpCiAgICAgICAgIHJldHVy
bjsKICAgICBtX2NvbnRleHQtPmJsZW5kRXF1YXRpb24obW9kZSk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTk3MCw3ICs5NzEsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQogCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdD
M0RlbnVtIG1vZGVBbHBoYSkKIHsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0
ZUJsZW5kRXF1YXRpb24obW9kZVJHQikgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbihtb2RlQWxw
aGEpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigi
YmxlbmRFcXVhdGlvbiIsIG1vZGVSR0IpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5k
RXF1YXRpb24iLCBtb2RlQWxwaGEpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5i
bGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtOTc5LDcgKzk4MCw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0Mz
RGVudW0gbW9kCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmMoR0MzRGVu
dW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikKIHsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgp
IHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoc2ZhY3RvciwgZGZhY3RvcikpCisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKCJibGVuZEZ1bmMi
LCBzZmFjdG9yLCBkZmFjdG9yKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+Ymxl
bmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CkBAIC05ODcsNyArOTg4LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJs
ZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQogCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNE
ZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKIHsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoc3JjUkdC
LCBkc3RSR0IpKQorICAgIC8vIE5vdGU6IEFscGhhIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgcmVz
dHJpY3Rpb25zIGFzIFJHQi4KKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUJs
ZW5kRnVuY0ZhY3RvcnMoImJsZW5kRnVuYyIsIHNyY1JHQiwgZHN0UkdCKSkKICAgICAgICAgcmV0
dXJuOwogICAgIG1fY29udGV4dC0+YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNy
Y0FscGhhLCBkc3RBbHBoYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
QEAgLTk5OCwxNiArMTAwMCwxNiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVy
RGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZQogICAgIFVOVVNF
RF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKHRh
cmdldCwgdXNhZ2UpOworICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRh
dGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7CiAgICAgaWYgKCFidWZm
ZXIpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoc2l6ZSA8IDApIHsKLSAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiYnVmZmVyRGF0YSIsICJzaXplIDwgMCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CiAgICAg
ICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKHNpemUpKSB7Ci0gICAgICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTAyMSwxNiArMTAyMywxNiBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFy
cmF5QnVmZmVyKiBkYXRhLCBHQzNEZQogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlz
Q29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBidWZmZXIg
PSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKHRhcmdldCwgdXNhZ2UpOworICAgIFdlYkdM
QnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRh
IiwgdGFyZ2V0LCB1c2FnZSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoIWRhdGEpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJubyBkYXRh
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25P
dXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1
ZmZlckRhdGEoZGF0YSkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRh
IiwgImludmFsaWQgYnVmZmVyIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xMDQ0LDE2ICsxMDQ2LDE2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
dWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHCiAgICAg
VU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1
cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRl
cnModGFyZ2V0LCB1c2FnZSk7CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVm
ZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKICAgICBpZiAo
IWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghZGF0YSkgewotICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJidWZmZXJEYXRhIiwgIm5vIGRhdGEiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewogICAg
ICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgewotICAgICAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNjcsMTggKzEwNjksMTggQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50cHRyIG9mZnNldCwgQXIKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBXZWJHTEJ1ZmZlciogYnVmZmVy
ID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEFUSUNfRFJBVyk7CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVy
RGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEFUSUNfRFJBVyk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKICAgICBp
ZiAob2Zmc2V0IDwgMCkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9m
ZnNldCA8IDAiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIWRhdGEpCiAgICAg
ICAgIHJldHVybjsKICAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNz
ZXMoKSkgewogICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShvZmZz
ZXQsIGRhdGEpKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIs
ICJvZmZzZXQgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xMDkyLDE4ICsxMDk0LDE4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEFyCiAg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFt
ZXRlcnModGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIFdlYkdM
QnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJE
YXRhIiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwogICAgIGlmICgh
YnVmZmVyKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG9mZnNldCA8IDApIHsKLSAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgPCAwIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFpc0Vy
cm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFidWZm
ZXItPmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEob2Zmc2V0LCBkYXRhKSkgewotICAgICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91dCBvZiByYW5nZSIpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTExNyw3ICsxMTE5LDcg
QEAgR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KEdDM0RlbnVtIHRhcmdldCkKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwogICAgIGlmICh0
YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7Ci0gICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIiwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nIHx8ICFtX2Zy
YW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCkBAIC0xMTM1LDExICsxMTM3LDExIEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKICAgICBpZiAo
aXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG1hc2sgJiB+KEdyYXBo
aWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgewot
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJjbGVhciIsICJpbnZhbGlkIG1hc2siKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUo
KSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04s
ICJjbGVhciIsICJjYW4gbm90IHJlbmRlciB0byBmcmFtZWJ1ZmZlciIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGlmICghY2xlYXJJZkNvbXBvc2l0ZWQobWFzaykpCkBAIC0xMjAwLDcg
KzEyMDIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29sb3JNYXNrKEdDM0Rib29s
ZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Ribwogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8
fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiY29tcGlsZVNoYWRlciIsIHNoYWRlcikpCiAgICAgICAg
IHJldHVybjsKICAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIob2JqZWN0T3JaZXJvKHNoYWRl
cikpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0xMjEzLDcgKzEy
MTUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleEltYWdlMkQo
R0MzRGVudW0gLyp0YXJnZXQqLywgR0MzRGludCAvKgogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBGSVhNRTogaW1wbGVtZW50IHRoaXMuCi0gICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY29tcHJlc3NlZFRleEltYWdlMkQi
LCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gLyp0YXJnZXQqLywgR0MzRGlu
dCAvKmxldmVsKi8sIEdDM0RpbnQgLyp4b2Zmc2V0Ki8sIEdDM0RpbnQgLyp5b2Zmc2V0Ki8sCkBA
IC0xMjIzLDI4ICsxMjI1LDI4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSAvKnRhcmdldCovLCBHQzNEaW50CiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcy4KLSAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIGZvcm1hdCIpOwogfQogCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCiB7CiAgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhG
dW5jUGFyYW1ldGVycyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyLCBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUpKQorICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygiY29weVRleEltYWdlMkQi
LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBp
bnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKQogICAgICAg
ICByZXR1cm47Ci0gICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5n
KHRhcmdldCwgdHJ1ZSk7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVC
aW5kaW5nKCJjb3B5VGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CiAgICAgaWYgKCF0ZXgpCiAg
ICAgICAgIHJldHVybjsKICAgICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNv
bWJpbmF0aW9uVmFsaWQoaW50ZXJuYWxmb3JtYXQsIGdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZv
cm1hdCgpKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwg
ImZyYW1lYnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0
dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRl
eEltYWdlMkQiLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCkpKSB7
Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY29w
eVRleEltYWdlMkQiLCAiZnJhbWVidWZmZXIgbm90IHJlYWRhYmxlIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKQEAgLTEyNzQsMjMgKzEyNzYsMjMg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCh0YXJnZXQsIGxl
dmVsKSkKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb3B5VGV4U3ViSW1hZ2UyRCIs
IHRhcmdldCwgbGV2ZWwpKQogICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xUZXh0dXJlKiB0ZXgg
PSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKHRhcmdldCwgdHJ1ZSk7CisgICAgV2ViR0xUZXh0dXJl
KiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdl
dCwgdHJ1ZSk7CiAgICAgaWYgKCF0ZXgpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlk
YXRlU2l6ZSh4b2Zmc2V0LCB5b2Zmc2V0KSB8fCAhdmFsaWRhdGVTaXplKHdpZHRoLCBoZWlnaHQp
KQorICAgIGlmICghdmFsaWRhdGVTaXplKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlv
ZmZzZXQpIHx8ICF2YWxpZGF0ZVNpemUoImNvcHlUZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdo
dCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4LT5nZXRX
aWR0aCh0YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4LT5nZXRIZWlnaHQo
dGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQi
LCAicmVjdGFuZ2xlIG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZCh0ZXgt
PmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpLCBnZXRCb3VuZEZyYW1lYnVmZmVyQ29s
b3JGb3JtYXQoKSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjb3B5VGV4U3ViSW1h
Z2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNvbXBhdGlibGUgZm9ybWF0Iik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVm
ZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZl
KCkpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
LCAiY29weVRleFN1YkltYWdlMkQiLCAiZnJhbWVidWZmZXIgbm90IHJlYWRhYmxlIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKQEAgLTEzMDgsMTIg
KzEzMTAsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MKICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgc2l6ZTsKICAgICAgICAgICAgICAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4
dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBt
X3VucGFja0FsaWdubWVudCwgJnNpemUsIDApOwogICAgICAgICAgICAgICAgIGlmIChlcnJvciAh
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihlcnJvcik7CisgICAgICAgICAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKGVycm9yLCAiY29weVRleFN1YkltYWdlMkQiLCAiYmFkIGRpbWVuc2lv
bnMiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB6ZXJvID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQgY2hhcltzaXpl
XSk7CiAgICAgICAgICAgICAgICAgaWYgKCF6ZXJvKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnki
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7CkBAIC0xMzgzLDcgKzEzODUs
NyBAQCBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZVNoYWRlcihHQzNEZW51bSB0eXBlLCBFeGNlcAogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJU
RVhfU0hBREVSICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikg
ewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiY3JlYXRlU2hhZGVyIiwgImludmFsaWQgc2hhZGVyIHR5cGUi
KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xNDA1LDcgKzE0MDcsNyBAQCBib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3Qp
CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhb2JqZWN0KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewot
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRlbGV0ZSIsICJvYmplY3QgZG9lcyBub3QgYmVs
b25nIHRvIHRoaXMgY29udGV4dCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IGlmIChvYmplY3QtPm9iamVjdCgpKQpAQCAtMTUxMSw3ICsxNTEzLDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRlcHRoUmFuZ2UoR0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxvYXQgekZh
cikKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHpO
ZWFyID4gekZhcikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRlcHRoUmFuZ2UiLCAi
ek5lYXIgPiB6RmFyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5k
ZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKQEAgLTE1MjEsMTAgKzE1MjMsMTAgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoUmFuZ2UoR0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxvYXQg
ekZhcikKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QocHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJkZXRhY2hT
aGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwg
c2hhZGVyKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghcHJvZ3JhbS0+ZGV0YWNoU2hhZGVy
KHNoYWRlcikpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZXRhY2hTaGFkZXIiLCAi
c2hhZGVyIG5vdCBhdHRhY2hlZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29u
dGV4dC0+ZGV0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNo
YWRlcikpOwpAQCAtMTUzNCw3ICsxNTM2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGEKIAog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUoR0MzRGVudW0gY2FwKQogewotICAg
IGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQorICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZGlzYWJsZSIsIGNhcCkp
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lT
U09SX1RFU1QpIHsKICAgICAgICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOwpAQCAtMTU1MSw3
ICsxNTUzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGVWZXJ0ZXhBdHRy
aWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ28KICAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmli
cykgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5k
ZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE3MzQsMTQg
KzE3MzYsMTQgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlUmVuZGVyaW5n
U3RhdGUoaW50IG51bUVsZW1lbnRzUmVxdWlyZWQpCiAgICAgcmV0dXJuIG51bUVsZW1lbnRzUmVx
dWlyZWQgPD0gc21hbGxlc3ROdW1FbGVtZW50czsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlV2ViR0xPYmplY3QoV2ViR0xPYmplY3QqIG9iamVjdCkKK2Jvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgV2ViR0xPYmplY3QqIG9iamVjdCkKIHsKICAgICBpZiAoIW9iamVjdCB8fCAhb2Jq
ZWN0LT5vYmplY3QoKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIG9i
amVjdCBvciBvYmplY3QgZGVsZXRlZCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKLSAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBkb2VzIG5vdCBiZWxv
bmcgdG8gdGhpcyBjb250ZXh0Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
cmV0dXJuIHRydWU7CkBAIC0xNzUxLDE0ICsxNzUzLDE0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXpl
aSBjCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKIAotICAgIGlmIChpc0NvbnRleHRMb3N0KCkg
fHwgIXZhbGlkYXRlRHJhd01vZGUobW9kZSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAh
dmFsaWRhdGVEcmF3TW9kZSgiZHJhd0FycmF5cyIsIG1vZGUpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKCkpCisgICAgaWYgKCF2YWxpZGF0ZVN0
ZW5jaWxTZXR0aW5ncygiZHJhd0FycmF5cyIpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
Zmlyc3QgPCAwIHx8IGNvdW50IDwgMCkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkcmF3QXJyYXlz
IiwgImZpcnN0IG9yIGNvdW50IDwgMCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
NzcxLDE4ICsxNzczLDE4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlz
KEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjCiAgICAgICAgIENoZWNr
ZWRJbnQ8R0MzRGludD4gY2hlY2tlZENvdW50KGNvdW50KTsKICAgICAgICAgQ2hlY2tlZEludDxH
QzNEaW50PiBjaGVja2VkU3VtID0gY2hlY2tlZEZpcnN0ICsgY2hlY2tlZENvdW50OwogICAgICAg
ICBpZiAoIWNoZWNrZWRTdW0udmFsaWQoKSB8fCAhdmFsaWRhdGVSZW5kZXJpbmdTdGF0ZShjaGVj
a2VkU3VtLnZhbHVlKCkpKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJk
cmF3QXJyYXlzIiwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAo
IXZhbGlkYXRlUmVuZGVyaW5nU3RhdGUoMCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgImRyYXdBcnJheXMiLCAiYXR0cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0Nv
bnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJkcmF3QXJyYXlzIiwgImZyYW1lYnVmZmVyIGNh
biBub3QgYmUgcmVuZGVyZWQgdG8iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTgw
NSwxMCArMTgwNywxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRz
KEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudQogewogICAgIFVOVVNFRF9Q
QVJBTShlYyk7CiAKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZURyYXdNb2Rl
KG1vZGUpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlRHJhd01vZGUoImRy
YXdFbGVtZW50cyIsIG1vZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXZhbGlkYXRl
U3RlbmNpbFNldHRpbmdzKCkpCisgICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncygiZHJh
d0VsZW1lbnRzIikpCiAgICAgICAgIHJldHVybjsKIAogICAgIHN3aXRjaCAodHlwZSkgewpAQCAt
MTgxNiwxMiArMTgxOCwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1l
bnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudQogICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgogICAgICAgICBicmVhazsKICAgICBkZWZh
dWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZHJhd0VsZW1lbnRzIiwgImludmFsaWQgdHlwZSIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGNvdW50IDwgMCB8fCBvZmZzZXQgPCAw
KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRyYXdFbGVtZW50cyIsICJjb3VudCBvciBvZmZzZXQg
PCAwIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE4MjksNyArMTgzMSw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0Mz
RHNpemVpIGNvdW50LCBHQzNEZW51CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkgewotICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgImRyYXdFbGVtZW50cyIsICJubyBFTEVNRU5UX0FSUkFZX0JVRkZF
UiBib3VuZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xODM3LDI2ICsxODM5LDI2
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9k
ZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51CiAgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25P
dXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKICAgICAgICAgLy8gRW5zdXJlIHdlIGhhdmUgYSB2YWxp
ZCByZW5kZXJpbmcgc3RhdGUKICAgICAgICAgaWYgKCF2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUo
Y291bnQsIHR5cGUsIG9mZnNldCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImRyYXdFbGVtZW50cyIsICJyZXF1ZXN0IG91dCBvZiBib3VuZHMgZm9yIGN1cnJlbnQgRUxF
TUVOVF9BUlJBWV9CVUZGRVIiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICBpZiAoIWNvdW50KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoIXZhbGlk
YXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRl
UmVuZGVyaW5nU3RhdGUobnVtRWxlbWVudHMpKSB7CiAgICAgICAgICAgICBpZiAoIXZhbGlkYXRl
SW5kZXhBcnJheVByZWNpc2UoY291bnQsIHR5cGUsIG9mZnNldCwgbnVtRWxlbWVudHMpIHx8ICF2
YWxpZGF0ZVJlbmRlcmluZ1N0YXRlKG51bUVsZW1lbnRzKSkgewotICAgICAgICAgICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3RWxlbWVudHMiLCAiYXR0ZW1wdCB0byBhY2Nl
c3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIXZhbGlkYXRl
UmVuZGVyaW5nU3RhdGUoMCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImRyYXdFbGVtZW50cyIsICJhdHRyaWJzIG5vdCBzZXR1cCBjb3JyZWN0bHkiKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNE
KCksICFpc1Jlc291cmNlU2FmZSgpKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTiwgImRyYXdFbGVtZW50cyIsICJmcmFtZWJ1ZmZlciBjYW4gbm90
IGJlIHJlbmRlcmVkIHRvIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2xlYXJJZkNv
bXBvc2l0ZWQoKTsKQEAgLTE4NzksNyArMTg4MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51
CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGVudW0gY2FwKQogewot
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQorICAg
IGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZW5hYmxlIiwgY2Fw
KSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlND
SVNTT1JfVEVTVCkgewogICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gdHJ1ZTsKQEAgLTE4OTYs
NyArMTg5OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kCiAgICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJp
YnMpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZW5hYmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5k
ZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE5MjYsMjEg
KzE5MjgsMjEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZsdXNoKCkKIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2Vi
R0xSZW5kZXJidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUZyYW1lYnVm
ZmVyRnVuY1BhcmFtZXRlcnModGFyZ2V0LCBhdHRhY2htZW50KSkKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmIChyZW5kZXJidWZmZXJ0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAiaW52YWxp
ZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYnVmZmVyICYmICFi
dWZmZXItPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZm
ZXIgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ly8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxs
IGN1cnJlbnQKICAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGlu
IHBsYWNlIG9mIHRoZSBkZWZhdWx0CiAgICAgLy8gRkJPLgogICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGZyYW1lYnVm
ZmVyIGJvdW5kIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgUGxhdGZvcm0zRE9iamVj
dCBidWZmZXJPYmplY3QgPSBvYmplY3RPclplcm8oYnVmZmVyKTsKQEAgLTE5OTcsMjEgKzE5OTks
MjEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1l
bnQsIEdDM0RlbnVtIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBHQzNEaW50IGxl
dmVsLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyh0
YXJnZXQsIGF0dGFjaG1lbnQpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRl
RnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCB0YXJnZXQs
IGF0dGFjaG1lbnQpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGxldmVsKSB7Ci0gICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgImxldmVsIG5vdCAwIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRleHR1cmUgJiYgIXRleHR1cmUtPnZhbGlkYXRl
KGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZy
YW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIHRleHR1cmUgb3IgdGV4dHVyZSBub3QgZnJvbSB0aGlz
IGNvbnRleHQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBEb24ndCBhbGxvdyB0
aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRhdGVkOyBhbGwgY3VycmVudAogICAgIC8v
IGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVybmFsbHkgaW4gcGxhY2Ugb2YgdGhlIGRl
ZmF1bHQKICAgICAvLyBGQk8uCiAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCAibm8gZnJhbWVidWZmZXIgYm91bmQiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRh
cmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCBvYmplY3RPclplcm8odGV4dHVyZSksIGxldmVs
KTsKQEAgLTIwMzEsMTEgKzIwMzMsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
bmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1
cmVCaW5kaW5nKHRhcmdldCwgZmFsc2UpOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRh
dGVUZXh0dXJlQmluZGluZygiZ2VuZXJhdGVNaXBtYXAiLCB0YXJnZXQsIGZhbHNlKTsKICAgICBp
ZiAoIXRleCkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghdGV4LT5jYW5HZW5lcmF0ZU1pcG1h
cHMoKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdlbmVyYXRlTWlwbWFwIiwgImxl
dmVsIDAgbm90IHBvd2VyIG9mIDIgb3Igbm90IGFsbCB0aGUgc2FtZSBzaXplIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgLy8gZ2VuZXJhdGVNaXBtYXAgd29uJ3Qgd29yayBwcm9wZXJs
eSBpZiBtaW5GaWx0ZXIgaXMgbm90IE5FQVJFU1RfTUlQTUFQX0xJTkVBUgpAQCAtMjA1OSw3ICsy
MDYxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdlbmVyYXRlTWlwbWFwKEdDM0Rl
bnVtIHRhcmdldCkKIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGlu
ZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QWN0aXZlQXR0
cmliIiwgcHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIEFjdGl2ZUluZm8gaW5mbzsK
ICAgICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlQXR0cmliKG9iamVjdE9yWmVybyhwcm9ncmFt
KSwgaW5kZXgsIGluZm8pKQpAQCAtMjA3MCw3ICsyMDcyLDcgQEAgUGFzc1JlZlB0cjxXZWJHTEFj
dGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlQXR0cmliKFdlYkdMUHJv
Z3JhbSoKIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQorICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0i
LCBwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgQWN0aXZlSW5mbyBpbmZvOwogICAg
IGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwg
aW5kZXgsIGluZm8pKQpAQCAtMjA4NSw3ICsyMDg3LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEF0dGFjaGVkU2hhZGVycyhXZWJHTFByb2dyYW0qIHByb2dyYW0sIFZlY3RvcjxS
ZWYKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIHNoYWRlck9iamVjdHMuY2xlYXIoKTsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0p
KQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEF0
dGFjaGVkU2hhZGVycyIsIHByb2dyYW0pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBj
b25zdCBHQzNEZW51bSBzaGFkZXJUeXBlW10gPSB7CkBAIC0yMTA0LDkgKzIxMDYsOSBAQCBHQzNE
aW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBjb25zdCBTdAogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAg
IHJldHVybiAtMTsKLSAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgobmFtZSkpCisgICAg
aWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJnZXRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQog
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKCF2YWxpZGF0ZVN0cmluZyhuYW1lKSkKKyAgICBp
ZiAoIXZhbGlkYXRlU3RyaW5nKCJnZXRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQogICAgICAgICBy
ZXR1cm4gLTE7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ob2JqZWN0
T3JaZXJvKHByb2dyYW0pLCBuYW1lKTsKIH0KQEAgLTIxMTcsMTIgKzIxMTksMTIgQEAgV2ViR0xH
ZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0KICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6
QVJSQVlfQlVGRkVSICYmIHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJB
WV9CVUZGRVIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZh
bGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgfQogCiAg
ICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSAmJiBwbmFtZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1VTQUdFKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJn
ZXRCdWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgfQogCkBAIC0yMjExLDExICsyMjEzLDExIEBAIFdl
YkdMRXh0ZW5zaW9uKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEV4dGVuc2lvbihjb25zdCBT
dHJpbmcmIG5hbWUpCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRh
Y2htZW50LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUZyYW1lYnVm
ZmVyRnVuY1BhcmFtZXRlcnModGFyZ2V0LCBhdHRhY2htZW50KSkKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlciIsIHRhcmdldCwgYXR0YWNobWVudCkpCiAgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oKTsKIAogICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwg
IW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBmcmFtZWJ1ZmZl
ciBib3VuZCIpOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgfQogCkBAIC0y
MjI1LDcgKzIyMjcsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdAogICAgICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7CiAgICAgICAgIC8vIE9w
ZW5HTCBFUyAyLjAgc3BlY2lmaWVzIElOVkFMSURfRU5VTSBpbiB0aGlzIGNhc2UsIHdoaWxlIGRl
c2t0b3AgR0wKICAgICAgICAgLy8gc3BlY2lmaWVzIElOVkFMSURfT1BFUkFUSU9OLgotICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIH0K
IApAQCAtMjI0NSw3ICsyMjQ3LDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHQKICAgICAgICAg
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHRleHR1cmUgYXR0
YWNobWVudCIpOwogICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgICAgICB9
CiAgICAgfSBlbHNlIHsKQEAgLTIyNTUsNyArMjI1Nyw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHQzNEZW51
bSB0CiAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfT0JKRUNUX05BTUU6CiAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQ
dHI8V2ViR0xSZW5kZXJidWZmZXI+KHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIq
PihvYmplY3QpKSk7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lIGZvciByZW5kZXJidWZmZXIgYXR0YWNobWVudCIpOwogICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjQ1MCwxNyArMjQ1MiwxNyBAQCBX
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIoR0MzRGVudW0g
cG5hbWUsIEV4Y2VwdGlvbkNvZGUmCiAgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NI
QURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKICAg
ICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKICAgICAgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJ
VkFUSVZFX0hJTlRfT0VTKTsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZh
bGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90IGVuYWJsZWQi
KTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIGNhc2UgV2ViR0xEZWJ1Z1Jl
bmRlcmVySW5mbzo6VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6CiAgICAgICAgIGlmIChtX3dlYmds
RGVidWdSZW5kZXJlckluZm8pCiAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fY29u
dGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUikpOwotICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2Rl
YnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQiKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwogICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9S
X1dFQkdMOgogICAgICAgICBpZiAobV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQogICAgICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRl
eHQzRDo6VkVORE9SKSk7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIp
OwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKICAg
ICAgICAgaWYgKG1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKQEAgLTI0NjgsMTAgKzI0NzAsMTAg
QEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEdDM0Rl
bnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJgogICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oUGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPihtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QpKTsKICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICAg
ICAgfQotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVy
IG5hbWUsIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IG5vdCBlbmFibGVkIik7CiAgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oKTsKICAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOwogICAgIH0KIH0KQEAgLTI0NzksNyArMjQ4MSw3IEBAIFdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhj
ZXB0aW9uQ29kZSYKIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dy
YW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQorICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1QYXJhbWV0ZXIiLCBw
cm9ncmFtKSkKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogCiAgICAgV2ViR0xTdGF0
ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKQEAgLTI0OTgsNyArMjUwMCw3IEBAIFdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBHCiAgICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
dmFsdWUpOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQcm9ncmFtUGFyYW1l
dGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwogICAgIH0KIH0KQEAgLTI1MDgsNyArMjUxMCw3IEBAIFN0cmluZyBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhj
ZXB0aW9uCiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHBy
b2dyYW0pKQorICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3JhbUluZm9Mb2ci
LCBwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuICIiOwogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0
aGlzLCBmYWxzZSk7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0UHJvZ3JhbUluZm9Mb2cob2Jq
ZWN0T3JaZXJvKHByb2dyYW0pKTsKQEAgLTI1MjAsMTEgKzI1MjIsMTEgQEAgV2ViR0xHZXRJbmZv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVt
IHRhcmdldCwgR0MKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CiAgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAi
aW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIH0K
ICAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlciIsICJubyByZW5kZXJidWZmZXIgYm91bmQiKTsKICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOwogICAgIH0KIApAQCAtMjU1NCw3ICsyNTU2LDcgQEAgV2ViR0xHZXRJbmZv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVt
IHRhcmdldCwgR0MKICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
X0lOVEVSTkFMX0ZPUk1BVDoKICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9yZW5k
ZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKQEAgLTI1
NzYsNyArMjU3OCw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDCiAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDoKICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkp
OwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CiAgICAgfQogfQpAQCAtMjU4NCw3ICsyNTg2LDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdl
dCwgR0MKIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclBhcmFt
ZXRlcihXZWJHTFNoYWRlciogc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8
fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVyUGFyYW1ldGVyIiwgc2hhZGVyKSkKICAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlz
LCBmYWxzZSk7CiAgICAgR0MzRGludCB2YWx1ZSA9IDA7CkBAIC0yNTk4LDcgKzI2MDAsNyBAQCBX
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIoV2Vi
R0xTaGFkZXIqIHNoYWRlciwgR0MzRAogICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9i
amVjdE9yWmVybyhzaGFkZXIpLCBwbmFtZSwgJnZhbHVlKTsKICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7CiAgICAgZGVmYXVsdDoK
LSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lIik7CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICB9CiB9CkBAIC0y
NjA4LDcgKzI2MTAsNyBAQCBTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJ
bmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZAogICAgIFVOVVNFRF9QQVJB
TShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQorICAgIGlmICghdmFsaWRh
dGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xvZyIsIHNoYWRlcikpCiAgICAgICAgIHJldHVy
biAiIjsKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwogICAgIHJldHVybiBt
X2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpOwpAQCAtMjYx
OSw3ICsyNjIxLDcgQEAgU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyU291
cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUKICAgICBVTlVTRURfUEFSQU0o
ZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKKyAgICBpZiAoIXZhbGlkYXRl
V2ViR0xPYmplY3QoImdldFNoYWRlclNvdXJjZSIsIHNoYWRlcikpCiAgICAgICAgIHJldHVybiAi
IjsKICAgICByZXR1cm4gc2hhZGVyLT5nZXRTb3VyY2UoKTsKIH0KQEAgLTI2NTEsNyArMjY1Myw3
IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBhcmFtZXRlcihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuCiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAg
V2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKHRhcmdldCwgZmFsc2Up
OworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2V0VGV4
UGFyYW1ldGVyIiwgdGFyZ2V0LCBmYWxzZSk7CiAgICAgaWYgKCF0ZXgpCiAgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwpA
QCAtMjY2NCw3ICsyNjY2LDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG4KICAgICAgICAgbV9j
b250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwogICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUpKTsK
ICAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFs
aWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAg
IH0KIH0KQEAgLTI2NzIsMTAgKzI2NzQsMTAgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG4KIFdl
YkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogdW5pZm9ybUxvY2F0aW9uLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0VW5pZm9ybSIsIHByb2dy
YW0pKQogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgaWYgKCF1bmlmb3JtTG9j
YXRpb24gfHwgdW5pZm9ybUxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gcHJvZ3JhbSkgewotICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImdldFVuaWZvcm0iLCAibm8gdW5pZm9ybWxvY2F0aW9uIG9y
IG5vdCB2YWxpZCBmb3IgdGhpcyBwcm9ncmFtIik7CiAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKICAgICB9CiAgICAgR0MzRGludCBsb2NhdGlvbiA9IHVuaWZvcm1Mb2NhdGlvbi0+bG9j
YXRpb24oKTsKQEAgLTI3NzMsNyArMjc3NSw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBXZWJHCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgICAgIC8vIENhbid0IGhhbmRsZSB0aGlzIHR5cGUKLSAgICAgICAgICAgICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmhhbmRsZWQgdHlw
ZSIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN3aXRjaCAoYmFzZVR5cGUpIHsKQEAgLTI4MDks
MTggKzI4MTEsMTggQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5p
Zm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFdlYkcKICAgICAgICAgfQogICAgIH0K
ICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gb3VyIHVuZm9y
dHVuYXRlbHkgY29tcGxleCBsb2dpYyBhYm92ZQotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1
bmtub3duIGVycm9yIik7CiAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogfQogCiBQYXNzUmVm
UHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZv
cm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQorICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFVuaWZvcm1Mb2NhdGlvbiIs
IHByb2dyYW0pKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25M
ZW5ndGgobmFtZSkpCisgICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJnZXRVbmlmb3Jt
TG9jYXRpb24iLCBuYW1lKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCF2YWxpZGF0ZVN0
cmluZyhuYW1lKSkKKyAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJnZXRVbmlmb3JtTG9jYXRpb24i
LCBuYW1lKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMs
IGZhbHNlKTsKICAgICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7CkBAIC0yODM2LDcgKzI4
MzgsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRy
aWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYQogICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKICAgICBpZiAoaW5k
ZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFZlcnRl
eEF0dHJpYiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwogICAgIH0KICAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0
ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRl
eEF0dHJpYlN0YXRlKGluZGV4KTsKQEAgLTI4NjAsNyArMjg2Miw3IEBAIFdlYkdMR2V0SW5mbyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYihHQzNEdWludCBpbmRleCwgR0Mz
RGVudW0gcG5hCiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9WRVJURVhfQVRU
UklCOgogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKG1f
dmVydGV4QXR0cmliVmFsdWVbaW5kZXhdLnZhbHVlLCA0KSk7CiAgICAgZGVmYXVsdDoKLSAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgImdldFZlcnRleEF0dHJpYiIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7
CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICB9CiB9CkBAIC0yODg5LDcgKzI4
OTEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGludChHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIG1vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAoIWlzVmFsaWQp
IHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImhpbnQiLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQtPmhpbnQodGFyZ2V0LCBtb2RlKTsKQEAgLTI5
MTQsNyArMjkxNiw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0NvbnRleHRMb3N0
KCkKIAogR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0VuYWJsZWQoR0MzRGVu
dW0gY2FwKQogewotICAgIGlmICghdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkgfHwgaXNDb250ZXh0
TG9zdCgpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgi
aXNFbmFibGVkIiwgY2FwKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIG1fY29udGV4
dC0+aXNFbmFibGVkKGNhcCk7CiB9CkBAIC0yOTc5LDcgKzI5ODEsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJsaW5rUHJvZ3JhbSIsIHByb2dyYW0pKQog
ICAgICAgICByZXR1cm47CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKICAgICAgICAg
aWYgKCFwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVY
X1NIQURFUikgfHwgIXByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFHTUVOVF9TSEFERVIpKSB7CkBAIC0zMDE0LDcgKzMwMTYsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0p
CiAgICAgICAgIGlmIChwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxU
X1dFQkdMIHx8IHBhcmFtID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKQogICAgICAgICAgICAg
bV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9IHN0YXRpY19jYXN0PEdDM0RlbnVtPihwYXJh
bSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInBpeGVsU3Rv
cmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9O
X1dFQkdMIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CkBAIC0zMDI4LDEyICszMDMwLDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwaXhl
bFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKICAgICAgICAgICAgIG1fY29u
dGV4dC0+cGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKICAgICAgICAgICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIGFsaWdubWVu
dCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFt
ZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CkBAIC0zMDU1LDcgKzMwNTcs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQwogICAgIEFTU0VSVChjYW52YXMoKS0+b3JpZ2lu
Q2xlYW4oKSk7CiAgICAgLy8gVmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycy4KICAgICBpZiAoIXBp
eGVscykgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJyZWFkUGl4ZWxzIiwgIm5vIGRlc3RpbmF0aW9u
IEFycmF5QnVmZmVyVmlldyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHN3aXRjaCAo
Zm9ybWF0KSB7CkBAIC0zMDY0LDcgKzMwNjYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQwog
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6CiAgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgZm9ybWF0Iik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0zMDc0LDIw
ICszMDc2LDIwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDCiAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKICAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiaW52YWxpZCB0eXBlIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSB8fCB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7Ci0g
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJmb3JtYXQgbm90IFJHQkEg
b3IgdHlwZSBub3QgVU5TSUdORURfQllURSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IC8vIFZhbGlkYXRlIGFycmF5IHR5cGUgYWdhaW5zdCBwaXhlbCB0eXBlLgogICAgIGlmICghcGl4
ZWxzLT5pc1Vuc2lnbmVkQnl0ZUFycmF5KCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJyZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNl
U2FmZSgpKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJB
VElPTiwgInJlYWRQaXhlbHMiLCAiZnJhbWVidWZmZXIgbm90IHJlYWRhYmxlIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgLy8gQ2FsY3VsYXRlIGFycmF5IHNpemUsIHRha2luZyBpbnRv
IGNvbnNpZGVyYXRpb24gb2YgUEFDS19BTElHTk1FTlQuCkBAIC0zMDk1LDExICszMDk3LDExIEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDCiAgICAgdW5zaWduZWQgaW50IHBhZGRpbmc7CiAgICAg
R0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1h
dCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVp
cmVkLCAmcGFkZGluZyk7CiAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19F
UlJPUikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsICJyZWFkUGl4ZWxzIiwgImludmFsaWQgZGlt
ZW5zaW9ucyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChwaXhlbHMtPmJ5dGVM
ZW5ndGgoKSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBsYXJnZSBlbm91Z2ggZm9yIGRp
bWVuc2lvbnMiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjbGVhcklmQ29tcG9zaXRl
ZCgpOwpAQCAtMzE0MCwxNCArMzE0MiwxNCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybgogICAg
IGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAodGFyZ2V0ICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJl
bmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJC
aW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlbmRlcmJ1
ZmZlclN0b3JhZ2UiLCAibm8gYm91bmQgcmVuZGVyYnVmZmVyIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgaWYgKCF2YWxpZGF0ZVNpemUod2lkdGgsIGhlaWdodCkpCisgICAgaWYgKCF2
YWxpZGF0ZVNpemUoInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCB3aWR0aCwgaGVpZ2h0KSkKICAgICAg
ICAgcmV0dXJuOwogICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNjoKQEAgLTMxNzEsNyArMzE3Myw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gaW50ZXJuCiAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0
SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwogICAgICAgICBicmVhazsKICAgICBkZWZh
dWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIGlu
dGVybmFsZm9ybWF0Iik7CiAgICAgfQogfQogCkBAIC0zMTg3LDcgKzMxODksNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEcwogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAoIXZh
bGlkYXRlU2l6ZSgic2Npc3NvciIsIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICByZXR1cm47CiAg
ICAgbV9jb250ZXh0LT5zY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0zMTk2LDEwICszMTk4LDEwIEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2hhZGVyU291cmNl
KFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgp
IHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJzaGFkZXJTb3VyY2UiLCBzaGFkZXIpKQogICAgICAg
ICByZXR1cm47CiAgICAgU3RyaW5nIHN0cmluZ1dpdGhvdXRDb21tZW50cyA9IFN0cmlwQ29tbWVu
dHMoc3RyaW5nKS5yZXN1bHQoKTsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKHN0cmluZ1dpdGhv
dXRDb21tZW50cykpCisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZygic2hhZGVyU291cmNlIiwgc3Ry
aW5nV2l0aG91dENvbW1lbnRzKSkKICAgICAgICAgcmV0dXJuOwogICAgIHNoYWRlci0+c2V0U291
cmNlKHN0cmluZyk7CiAgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2Uob2JqZWN0T3JaZXJvKHNo
YWRlciksIHN0cmluZ1dpdGhvdXRDb21tZW50cyk7CkBAIC0zMjEwLDcgKzMyMTIsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGlu
dCByZWYsIEdDM0R1aW50IG1hcwogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoZnVuYykpCisgICAgaWYgKCF2
YWxpZGF0ZVN0ZW5jaWxGdW5jKCJzdGVuY2lsRnVuYyIsIGZ1bmMpKQogICAgICAgICByZXR1cm47
CiAgICAgbV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKICAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9
IHJlZjsKQEAgLTMyMjQsNyArMzIyNiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpz
dGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDCiB7CiAg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRh
dGVTdGVuY2lsRnVuYyhmdW5jKSkKKyAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5j
aWxGdW5jU2VwYXJhdGUiLCBmdW5jKSkKICAgICAgICAgcmV0dXJuOwogICAgIHN3aXRjaCAoZmFj
ZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UX0FORF9CQUNLOgpAQCAtMzI0
Miw3ICszMjQ0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5jU2Vw
YXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MKICAgICAgICAgbV9zdGVuY2ls
RnVuY01hc2tCYWNrID0gbWFzazsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCAiaW52YWxpZCBmYWNlIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZh
Y2UsIGZ1bmMsIHJlZiwgbWFzayk7CkBAIC0zMjc1LDcgKzMyNzcsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWlu
dCBtYXNrKQogICAgICAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7CiAgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJzdGVuY2lsTWFza1NlcGFyYXRlIiwg
ImludmFsaWQgZmFjZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29udGV4dC0+
c3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKQEAgLTMzMDQsMTQgKzMzMDYsMTQgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGUKIHsKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25v
cmUgYW55IGVycm9ycyByZXR1cm5lZAogICAgIGVjID0gMDsKLSAgICBpZiAoIXZhbGlkYXRlVGV4
RnVuY1BhcmFtZXRlcnModGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlKSkKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFt
ZXRlcnMoInRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUpKQogICAgICAgICByZXR1cm47Ci0gICAgV2Vi
R0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKHRhcmdldCwgdHJ1ZSk7Cisg
ICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJE
IiwgdGFyZ2V0LCB0cnVlKTsKICAgICBpZiAoIXRleCkKICAgICAgICAgcmV0dXJuOwogICAgIGlm
ICghaXNHTEVTMk5QT1RTdHJpY3QoKSkgewogICAgICAgICBpZiAobGV2ZWwgJiYgV2ViR0xUZXh0
dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJ0ZXhJbWFnZTJEIiwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMzMzNSw3ICszMzM3LDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGUKICAgICBlYyA9IDA7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAg
ICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZvcm1hdCwgdHlwZSwg
ZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0g
R3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUsIGRhdGEpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRl
eEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKQEAgLTMzNTAsNyArMzM1Miw3IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCBwaXhlbHMpKQogICAgICAgICByZXR1cm47CiAgICAgdm9pZCogZGF0YSA9IHBpeGVs
cyA/IHBpeGVscy0+YmFzZUFkZHJlc3MoKSA6IDA7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBE
YXRhOwpAQCAtMzM4MSw3ICszMzgzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bQogICAgICAg
ICByZXR1cm47CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgaWYgKCFtX2NvbnRleHQt
PmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxpcFksIG1f
dW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4
SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQpAQCAtMzM5OCw3ICszNDAwLDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bQogICAgIGVjID0gMDsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoaW1hZ2Up
KQorICAgIGlmICghdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0ZXhJbWFnZTJEIiwgaW1hZ2Up
KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKSB7CiAg
ICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwpAQCAtMzQxNiw3ICszNDE4LDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bQogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpZiAoIWNhbnZhcyB8fCAhY2FudmFzLT5idWZmZXIoKSkgewotICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJ0ZXhJbWFnZTJEIiwgIm5vIGNhbnZhcyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKGNhbnZhcykpIHsKQEAgLTM0MzUsMTMgKzM0MzcsMTMg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bQogUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCF2aWRlbyB8fCAhdmlkZW8tPnZpZGVvV2lkdGgo
KSB8fCAhdmlkZW8tPnZpZGVvSGVpZ2h0KCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1h
Z2UyRCIsICJubyB2aWRlbyIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgSW50U2l6
ZSBzaXplKHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpKTsKICAgICBJ
bWFnZUJ1ZmZlciogYnVmID0gbV92aWRlb0NhY2hlLmltYWdlQnVmZmVyKHNpemUpOwogICAgIGlm
ICghYnVmKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlkpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9y
eSIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4o
dmlkZW8pKSB7CkBAIC0zNDcxLDcgKzM0NzMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbAog
ewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRl
eHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcodGFyZ2V0LCBmYWxzZSk7CisgICAg
V2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhQYXJhbWV0ZXIi
LCB0YXJnZXQsIGZhbHNlKTsKICAgICBpZiAoIXRleCkKICAgICAgICAgcmV0dXJuOwogICAgIHN3
aXRjaCAocG5hbWUpIHsKQEAgLTM0ODIsMTIgKzM0ODQsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBH
QzNEZmwKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKICAgICAg
ICAgaWYgKChpc0Zsb2F0ICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9f
RURHRSAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBw
YXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkKICAgICAgICAgICAgIHx8ICghaXNG
bG9hdCAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFy
YW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1pICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpSRVBFQVQpKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRl
eFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciIpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGlmIChpc0Zsb2F0KSB7CkBAIC0zNTE4LDE5ICszNTIwLDE5IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDCiAgICAgZWMgPSAwOwogICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMo
dGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUpKQor
ICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4U3ViSW1hZ2UyRCIsIHRhcmdl
dCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTaXplKHhvZmZzZXQsIHlvZmZzZXQpKQorICAg
IGlmICghdmFsaWRhdGVTaXplKCJ0ZXhTdWJJbWFnZTJEIiwgeG9mZnNldCwgeW9mZnNldCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcodGFyZ2V0LCB0cnVlKTsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4
dHVyZUJpbmRpbmcoInRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwogICAgIGlmICghdGV4
KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleC0+Z2V0V2lk
dGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCArIGhlaWdodCA+IHRleC0+Z2V0SGVpZ2h0KHRh
cmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiZGlt
ZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAo
dGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSAhPSBmb3JtYXQgfHwgdGV4LT5n
ZXRUeXBlKHRhcmdldCwgbGV2ZWwpICE9IHR5cGUpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJ0ZXhTdWJJbWFnZTJEIiwgInR5cGUgYW5kIGZvcm1hdCBkbyBub3QgbWF0Y2ggdGV4dHVy
ZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHBpeGVscyk7CkBAIC0zNTQ2LDcgKzM1NDgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQwogICAgICAgICByZXR1cm47CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgaWYg
KCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZvcm1hdCwgdHlwZSwgZmxpcFks
IHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PTkUsIGRhdGEpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1Yklt
YWdlMkQiLCAiYmFkIGltYWdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgdGV4U3Vi
SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgaW1hZ2UtPndpZHRo
KCksIGltYWdlLT5oZWlnaHQoKSwKQEAgLTM1NTcsNyArMzU1OSw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVm
ZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVRleEZ1bmNE
YXRhKCJ0ZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMp
KQogICAgICAgICByZXR1cm47CiAgICAgdm9pZCogZGF0YSA9IHBpeGVscyA/IHBpeGVscy0+YmFz
ZUFkZHJlc3MoKSA6IDA7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBEYXRhOwpAQCAtMzU4Nyw3
ICszNTg5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW4KICAgICAgICAgcmV0dXJuOwogICAg
IFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VE
YXRhKHBpeGVscywgZm9ybWF0LCB0eXBlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEsIGRhdGEpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAi
YmFkIGltYWdlIGRhdGEiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICB0ZXhTdWJJbWFn
ZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBwaXhlbHMtPndpZHRoKCks
IHBpeGVscy0+aGVpZ2h0KCksCkBAIC0zNjAwLDcgKzM2MDIsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbgogICAgIGVjID0gMDsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoaW1hZ2UpKQorICAgIGlm
ICghdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgaW1hZ2UpKQogICAg
ICAgICByZXR1cm47CiAgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKSB7CiAgICAgICAg
IGVjID0gU0VDVVJJVFlfRVJSOwpAQCAtMzYxNyw3ICszNjE5LDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW4KICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CiAgICAg
aWYgKCFjYW52YXMgfHwgIWNhbnZhcy0+YnVmZmVyKCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
dGV4U3ViSW1hZ2UyRCIsICJubyBjYW52YXMiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBpZiAod291bGRUYWludE9yaWdpbihjYW52YXMpKSB7CkBAIC0zNjUzLDcgKzM2NTUsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRp
b24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAidW5pZm9ybTFmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM2NjQsNyArMzY2Niw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBHQzNECiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAxKSkK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1
bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIDEpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2Nv
bnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVu
Z3RoKCkpOwpAQCAtMzY3NCw3ICszNjc2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG8KIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAxKSkK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1
bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDEpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUpOwpA
QCAtMzY4OCw3ICszNjkwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0x
aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0QKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkg
ewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0xaSIsICJsb2NhdGlvbiBub3Qg
Zm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNjk5
LDcgKzM3MDEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpKGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRAogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMobG9jYXRpb24sIHYsIDEpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRl
VW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2NhdGlvbiwgdiwgMSkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24o
KSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSk7CkBAIC0zNzA5LDcgKzM3MTEsNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6
ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0
aW9uLCB2LCBzaXplLCAxKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24sIHYsIHNpemUsIDEpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0
aW9uKCksIHYsIHNpemUpOwpAQCAtMzcyMyw3ICszNzI1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0QKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0g
bV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0y
ZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0zNzM0LDcgKzM3MzYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRAog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMikpCisgICAgaWYgKGlzQ29udGV4
dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJmdiIsIGxvY2F0
aW9uLCB2LCAyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2
KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMik7CkBAIC0z
NzQ0LDcgKzM3NDYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsbwogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlk
YXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDIpKQorICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yZnYiLCBs
b2NhdGlvbiwgdiwgc2l6ZSwgMikpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+
dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDIpOwpAQCAtMzc1OCw3
ICszNzYwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaShjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0QKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0yaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJl
bnQgcHJvZ3JhbSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNzY5LDcgKzM3NzEs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRp
b24sIHYsIDIpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgMikpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0
YSgpLCB2LT5sZW5ndGgoKSAvIDIpOwpAQCAtMzc3OSw3ICszNzgxLDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBJbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNp
emUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwg
diwgc2l6ZSwgMikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3Jt
UGFyYW1ldGVycygidW5pZm9ybTJpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigp
LCB2LCBzaXplIC8gMik7CkBAIC0zNzkzLDcgKzM3OTUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTNmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBt
X2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTNm
IiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTM4MDQsNyArMzgwNiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNECiB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAzKSkKKyAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2Z2IiwgbG9jYXRp
b24sIHYsIDMpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAzKTsKQEAgLTM4
MTQsNyArMzgxNiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRh
dGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMykpCisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxv
Y2F0aW9uLCB2LCBzaXplLCAzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51
bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gMyk7CkBAIC0zODI4LDcg
KzM4MzAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpKGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRAogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTNpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVu
dCBwcm9ncmFtIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM4MzksNyArMzg0MSw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2koY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNECiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJy
YXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlv
biwgdiwgMykpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCAzKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRh
KCksIHYtPmxlbmd0aCgpIC8gMyk7CkBAIC0zODQ5LDcgKzM4NTEsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2
LCBzaXplLCAzKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRpb24sIHYsIHNpemUsIDMpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHYsIHNpemUgLyAzKTsKQEAgLTM4NjMsNyArMzg2NSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNECiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1f
Y3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtNGYi
LCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMzg3NCw3ICszODc2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0QKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlk
YXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDQpKQorICAgIGlmIChpc0NvbnRleHRM
b3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00ZnYiLCBsb2NhdGlv
biwgdiwgNCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOwpAQCAtMzg4
NCw3ICszODg2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG8KIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0
ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKKyAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9j
YXRpb24sIHYsIHNpemUsIDQpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVu
aWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyA0KTsKQEAgLTM4OTgsNyAr
MzkwMCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGkoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNECiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtNGkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50
IHByb2dyYW0iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzkwOSw3ICszOTExLDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aShjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0QKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJh
eSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9u
LCB2LCA0KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJh
bWV0ZXJzKCJ1bmlmb3JtNGl2IiwgbG9jYXRpb24sIHYsIDQpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBtX2NvbnRleHQtPnVuaWZvcm00aXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEo
KSwgdi0+bGVuZ3RoKCkgLyA0KTsKQEAgLTM5MTksNyArMzkyMSw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgSW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXpl
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYs
IHNpemUsIDQpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgNCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
diwgc2l6ZSAvIDQpOwpAQCAtMzkyOSw3ICszOTMxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzMKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1l
dGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgp
IHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4MmZ2Iiwg
bG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgNCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRl
eHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+
ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CkBAIC0zOTM4LDcgKzM5NDAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpbwogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4
UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCA0KSkKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3Jt
TWF0cml4MmZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgNCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHRyYW5zcG9zZSwgdiwgc2l6ZSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CkBAIC0zOTQ3LDcgKzM5NDksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpbwog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJB
cnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJz
KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDkpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwg
IXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgzZnYiLCBsb2Nh
dGlvbiwgdHJhbnNwb3NlLCB2LCA5KSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+
dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LT5kYXRh
KCksIHYtPmxlbmd0aCgpIC8gOSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKQEAgLTM5NTYsNyArMzk1OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJh
bWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQorICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRy
aXgzZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCA5KSkKICAgICAgICAgcmV0dXJu
OwogICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
dHJhbnNwb3NlLCB2LCBzaXplIC8gOSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKQEAgLTM5NjUsNyArMzk2Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5
KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9j
YXRpb24sIHRyYW5zcG9zZSwgdiwgMTYpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZh
bGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXg0ZnYiLCBsb2NhdGlv
biwgdHJhbnNwb3NlLCB2LCAxNikpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnVu
aWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+ZGF0YSgp
LCB2LT5sZW5ndGgoKSAvIDE2KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwpAQCAtMzk3NCw3ICszOTc2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW8KIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdD
M0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFt
ZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgMTYpKQorICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRy
aXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCAxNikpCiAgICAgICAgIHJldHVy
bjsKICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHRyYW5zcG9zZSwgdiwgc2l6ZSAvIDE2KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwpAQCAtMzk4NCwxMiArMzk4NiwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hl
Y2tPYmplY3RUb0JlQm91bmQocHJvZ3JhbSwgZGVsZXRlZCkpCisgICAgaWYgKCFjaGVja09iamVj
dFRvQmVCb3VuZCgidXNlUHJvZ3JhbSIsIHByb2dyYW0sIGRlbGV0ZWQpKQogICAgICAgICByZXR1
cm47CiAgICAgaWYgKGRlbGV0ZWQpCiAgICAgICAgIHByb2dyYW0gPSAwOwogICAgIGlmIChwcm9n
cmFtICYmICFwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ1c2VQcm9ncmFtIiwgInByb2dyYW0gbm90IHZhbGlkIik7CiAgICAgICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00
MDA3LDcgKzQwMDksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4
dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJ2YWxpZGF0ZVByb2dyYW0iLCBwcm9n
cmFtKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+dmFsaWRhdGVQcm9ncmFtKG9i
amVjdE9yWmVybyhwcm9ncmFtKSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKQEAgLTQwMTUsNjIgKzQwMTcsNjIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUKIAogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQgdjApCiB7Ci0gICAgdmVydGV4QXR0cmliZkltcGwoaW5kZXgsIDEsIHYwLCAwLjBm
LCAwLjBmLCAxLjBmKTsKKyAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliMWYiLCBp
bmRleCwgMSwgdjAsIDAuMGYsIDAuMGYsIDEuMGYpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYp
CiB7Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKGluZGV4LCB2LCAxKTsKKyAgICB2ZXJ0ZXhBdHRy
aWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIsIGluZGV4LCB2LCAxKTsKIH0KIAogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKIHsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoaW5kZXgs
IHYsIHNpemUsIDEpOworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMWZ2Iiwg
aW5kZXgsIHYsIHNpemUsIDEpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQog
ewotICAgIHZlcnRleEF0dHJpYmZJbXBsKGluZGV4LCAyLCB2MCwgdjEsIDAuMGYsIDEuMGYpOwor
ICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZiIsIGluZGV4LCAyLCB2MCwgdjEs
IDAuMGYsIDEuMGYpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0
cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCiB7Ci0gICAgdmVydGV4QXR0
cmliZnZJbXBsKGluZGV4LCB2LCAyKTsKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0
dHJpYjJmdiIsIGluZGV4LCB2LCAyKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkg
c2l6ZSkKIHsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoaW5kZXgsIHYsIHNpemUsIDIpOworICAg
IHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMmZ2IiwgaW5kZXgsIHYsIHNpemUsIDIp
OwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2YoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCiB7Ci0g
ICAgdmVydGV4QXR0cmliZkltcGwoaW5kZXgsIDMsIHYwLCB2MSwgdjIsIDEuMGYpOworICAgIHZl
cnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZiIsIGluZGV4LCAzLCB2MCwgdjEsIHYyLCAx
LjBmKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdihH
QzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQogewotICAgIHZlcnRleEF0dHJpYmZ2SW1w
bChpbmRleCwgdiwgMyk7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYi
LCBpbmRleCwgdiwgMyk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCiB7
Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKGluZGV4LCB2LCBzaXplLCAzKTsKKyAgICB2ZXJ0ZXhB
dHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjNmdiIsIGluZGV4LCB2LCBzaXplLCAzKTsKIH0KIAog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMp
CiB7Ci0gICAgdmVydGV4QXR0cmliZkltcGwoaW5kZXgsIDQsIHYwLCB2MSwgdjIsIHYzKTsKKyAg
ICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliNGYiLCBpbmRleCwgNCwgdjAsIHYxLCB2
MiwgdjMpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2
KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCiB7Ci0gICAgdmVydGV4QXR0cmliZnZJ
bXBsKGluZGV4LCB2LCA0KTsKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjRm
diIsIGluZGV4LCB2LCA0KTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkK
IHsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoaW5kZXgsIHYsIHNpemUsIDQpOworICAgIHZlcnRl
eEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5kZXgsIHYsIHNpemUsIDQpOwogfQog
CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWlu
dCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxp
emVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCkBAIC00MDg2LDI5ICs0MDg4LDI5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDCiAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImludmFsaWQgdHlw
ZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRl
eEF0dHJpYnMpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJp
bmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoc2l6
ZSA8IDEgfHwgc2l6ZSA+IDQgfHwgc3RyaWRlIDwgMCB8fCBzdHJpZGUgPiAyNTUgfHwgb2Zmc2V0
IDwgMCkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImJhZCBz
aXplLCBzdHJpZGUgb3Igb2Zmc2V0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYg
KCFtX2JvdW5kQXJyYXlCdWZmZXIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0
ZXhBdHRyaWJQb2ludGVyIiwgIm5vIGJvdW5kIEFSUkFZX0JVRkZFUiIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIC8vIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoZSBi
b3VuZCBidWZmZXIgY2FuIGhvbGQsIGdpdmVuIHRoZSBvZmZzZXQsIHNpemUsIHR5cGUgYW5kIHN0
cmlkZQogICAgIHVuc2lnbmVkIGludCB0eXBlU2l6ZSA9IHNpemVJbkJ5dGVzKHR5cGUpOwogICAg
IGlmICghdHlwZVNpemUpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50ZXIi
LCAiaW52YWxpZCB0eXBlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKChzdHJp
ZGUgJSB0eXBlU2l6ZSkgfHwgKG9mZnNldCAlIHR5cGVTaXplKSkgewotICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAic3RyaWRlIG9yIG9mZnNldCBub3Qg
dmFsaWQgZm9yIHR5cGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBHQzNEc2l6ZWkg
Ynl0ZXNQZXJFbGVtZW50ID0gc2l6ZSAqIHR5cGVTaXplOwpAQCAtNDEzMiw3ICs0MTM0LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0QKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNpemUod2lkdGgsIGhlaWdodCkpCisgICAg
aWYgKCF2YWxpZGF0ZVNpemUoInZpZXdwb3J0Iiwgd2lkdGgsIGhlaWdodCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBtX2NvbnRleHQtPnZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC00MTQxLDcgKzQxNDMsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RzaXplaSB3aWR0aCwgR0MzRAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZvcmNl
TG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29udGV4dE1vZGUgbW9kZSkK
IHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAibG9zZUNvbnRleHQiLCAiY29udGV4dCBhbHJlYWR5IGxvc3QiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtNDE2Niw3ICs0MTY4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6Omxvc2VDb250ZXh0SW1wbChXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Okxvc3RDb250ZXh0TW8K
ICAgICAgICAgaWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9fRVJST1IpCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdMKTsKKyAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdM
LCAibG9zZUNvbnRleHQiLCAiY29udGV4dCBsb3N0Iik7CiAKICAgICAvLyBEb24ndCBhbGxvdyBy
ZXN0b3JhdGlvbiB1bmxlc3MgdGhlIGNvbnRleHQgbG9zdCBldmVudCBoYXMgYm90aCBiZWVuCiAg
ICAgLy8gZGlzcGF0Y2hlZCBhbmQgaXRzIGRlZmF1bHQgYmVoYXZpb3IgcHJldmVudGVkLgpAQCAt
NDE4MCwxMyArNDE4MiwxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRl
eHRJbXBsKFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNbwogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmZvcmNlUmVzdG9yZUNvbnRleHQoKQogewogICAgIGlmICghaXNDb250
ZXh0TG9zdCgpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVzdG9yZUNvbnRleHQi
LCAiY29udGV4dCBub3QgbG9zdCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KCFtX3Jlc3RvcmVBbGxvd2VkKSB7CiAgICAgICAgIGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBT
eW50aGV0aWNMb3N0Q29udGV4dCkKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
InJlc3RvcmVDb250ZXh0IiwgImNvbnRleHQgcmVzdG9yYXRpb24gbm90IGFsbG93ZWQiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDQxNyw3ICs0NDE5LDcgQEAgaW50IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpCiAgICAgcmV0dXJuIG1f
ZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpIDogbV9jb250
ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgpOwogfQogCi1XZWJHTFRl
eHR1cmUqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXh0dXJlQmluZGluZyhHQzNE
ZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKQorV2ViR0xUZXh0dXJlKiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFw
KQogewogICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gMDsKICAgICBzd2l0Y2ggKHRhcmdldCkgewpA
QCAtNDQzMSw1OCArNDQzMyw1OCBAQCBXZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVUZXh0dXJlQmluZGluZyhHQzNEZW51bSB0YXJnZXQsIGJvbwogICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CiAgICAgICAg
IGlmICghdXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOwogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgdGV4ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVU
ZXh0dXJlVW5pdF0ubV90ZXh0dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0KCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVA6CiAgICAgICAg
IGlmICh1c2VTaXhFbnVtc0ZvckN1YmVNYXApIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7CiAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgfQogICAgICAgICB0ZXggPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRl
eHR1cmVVbml0XS5tX3RleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0
ZXh0dXJlIHRhcmdldCIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKCF0ZXgp
Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJubyB0ZXh0dXJlIik7
CiAgICAgcmV0dXJuIHRleDsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlTG9jYXRpb25MZW5ndGgoY29uc3QgU3RyaW5nJiBzdHJpbmcpCitib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVMb2NhdGlvbkxlbmd0aChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIGNvbnN0IHVuc2lnbmVkIG1heFdlYkdM
TG9jYXRpb25MZW5ndGggPSAyNTY7CiAgICAgaWYgKHN0cmluZy5sZW5ndGgoKSA+IG1heFdlYkdM
TG9jYXRpb25MZW5ndGgpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsb2Nh
dGlvbiBsZW5ndGggPiAyNTYiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU2l6
ZShHQzNEaW50IHgsIEdDM0RpbnQgeSkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVNpemUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IHgsIEdDM0RpbnQgeSkK
IHsKICAgICBpZiAoeCA8IDAgfHwgeSA8IDApIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJzaXplIDwgMCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTdHJp
bmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVTdHJpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmlu
ZykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKSB7
CiAgICAgICAgIGlmICghdmFsaWRhdGVDaGFyYWN0ZXIoc3RyaW5nW2ldKSkgewotICAgICAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic3RyaW5nIG5vdCBBU0NJSSIpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0
QW5kVHlwZShHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpCitib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKIHsKICAgICBzd2l0Y2gg
KGZvcm1hdCkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgpAQCAtNDQ5Miw3
ICs0NDk0LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0Zv
cm1hdEFuZFR5cGUoR0MzRGVudW0gZm9ybWF0LCBHQzNEZW4KICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBOgogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0p
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgZm9ybWF0Iik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTQ1MDUsMTAgKzQ1MDcsMTAgQEAgYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW4KICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKICAgICAgICAg
aWYgKG1fb2VzVGV4dHVyZUZsb2F0KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIHRleHR1cmUgdHlwZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBA
IC00NTE5LDcgKzQ1MjEsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVU
ZXhGdW5jRm9ybWF0QW5kVHlwZShHQzNEZW51bSBmb3JtYXQsIEdDM0RlbgogICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKICAgICAgICAgaWYgKHR5cGUgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKICAgICAgICAgICAgICYmIHR5cGUgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgZm9ybWF0Iik7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC00NTI3LDcgKzQ1
MjksNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0
QW5kVHlwZShHQzNEZW51bSBmb3JtYXQsIEdDM0RlbgogICAgICAgICBpZiAodHlwZSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQogICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzUKICAgICAgICAgICAgICYmIHR5cGUg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgUkdCIGZvcm1hdCIpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAt
NDUzNiw3ICs0NTM4LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4
RnVuY0Zvcm1hdEFuZFR5cGUoR0MzRGVudW0gZm9ybWF0LCBHQzNEZW4KICAgICAgICAgICAgICYm
IHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQKICAgICAg
ICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81
XzEKICAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUKSB7Ci0g
ICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
dHlwZSBmb3IgUkdCQSBmb3JtYXQiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKQEAgLTQ1NDcsMTYgKzQ1NDksMTYgQEAgYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlVGV4RnVuY0xldmVsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNMZXZlbChjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCkKIHsK
ICAgICBpZiAobGV2ZWwgPCAwKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
bGV2ZWwgPCAwIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgc3dpdGNoICh0
YXJnZXQpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgogICAgICAg
ICBpZiAobGV2ZWwgPiBtX21heFRleHR1cmVMZXZlbCkgewotICAgICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC00NTY3LDcgKzQ1Njks
NyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKQogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CiAgICAgICAgIGlmIChsZXZlbCA+IG1fbWF4
Q3ViZU1hcFRleHR1cmVMZXZlbCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC00NTc3LDcgKzQ1NzksOCBAQCBib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5j
UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGludCBib3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpCkBA
IC00NTg1LDE4ICs0NTg4LDE4IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVRleEZ1bmNQYXJhbWV0ZXJzKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsCiAgICAgLy8gV2Ug
YWJzb2x1dGVseSBoYXZlIHRvIHZhbGlkYXRlIHRoZSBmb3JtYXQgYW5kIHR5cGUgY29tYmluYXRp
b24uCiAgICAgLy8gVGhlIHRleEltYWdlMkQgZW50cnkgcG9pbnRzIHRha2luZyBIVE1MSW1hZ2Us
IGV0Yy4gd2lsbCBwcm9kdWNlCiAgICAgLy8gdGVtcG9yYXJ5IGRhdGEgYmFzZWQgb24gdGhpcyBj
b21iaW5hdGlvbiwgc28gaXQgbXVzdCBiZSBsZWdhbC4KLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVu
Y0Zvcm1hdEFuZFR5cGUoZm9ybWF0LCB0eXBlKSB8fCAhdmFsaWRhdGVUZXhGdW5jTGV2ZWwodGFy
Z2V0LCBsZXZlbCkpCisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZ1bmN0
aW9uTmFtZSwgZm9ybWF0LCB0eXBlKSB8fCAhdmFsaWRhdGVUZXhGdW5jTGV2ZWwoZnVuY3Rpb25O
YW1lLCB0YXJnZXQsIGxldmVsKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHdp
ZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAid2lkdGggb3IgaGVpZ2h0IDwgMCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CiAgICAgc3dpdGNoICh0YXJnZXQpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJEOgogICAgICAgICBpZiAod2lkdGggPiBtX21heFRleHR1cmVTaXplIHx8IGhlaWdodCA+
IG1fbWF4VGV4dHVyZVNpemUpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9u
TmFtZSwgIndpZHRoIG9yIGhlaWdodCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTQ2MDcsNDIgKzQ2MTAsNDMg
QEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGwKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgogICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0
IHx8IHdpZHRoID4gbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUpIHsKLSAgICAgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoICE9IGhlaWdodCBvciB3aWR0aCBvciBoZWln
aHQgb3V0IG9mIHJhbmdlIGZvciBjdWJlIG1hcCIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKICAgICBpZiAoZm9ybWF0ICE9IGludGVybmFsZm9ybWF0KSB7Ci0gICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQgIT0gaW50ZXJuYWxmb3Jt
YXQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGlmIChib3JkZXIpIHsK
LSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJib3JkZXIgIT0gMCIpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRl
eEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKQogewogICAgIGlm
ICghcGl4ZWxzKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghdmFsaWRhdGVUZXhG
dW5jRm9ybWF0QW5kVHlwZShmb3JtYXQsIHR5cGUpKQorICAgIGlmICghdmFsaWRhdGVUZXhGdW5j
Rm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGZvcm1hdCwgdHlwZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEU6CiAgICAgICAgIGlmICghcGl4ZWxzLT5pc1Vuc2lnbmVkQnl0ZUFy
cmF5KCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAidHlwZSBVTlNJR05FRF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXki
KTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
QEAgLTQ2NTAsMTMgKzQ2NTQsMTMgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlVGV4RnVuY0RhdGEoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2gKICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgogICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CiAgICAgICAgIGlmICghcGl4
ZWxzLT5pc1Vuc2lnbmVkU2hvcnRBcnJheSgpKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5TSUdORURfU0hPUlQgYnV0IEFycmF5QnVm
ZmVyVmlldyBub3QgVWludDE2QXJyYXkiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VDogLy8gT0VTX3RleHR1cmVfZmxvYXQKICAgICAgICAgaWYgKCFwaXhlbHMtPmlzRmxvYXRBcnJh
eSgpKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
InR5cGUgRkxPQVQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgRmxvYXQzMkFycmF5Iik7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC00NjY3
LDE3ICs0NjcxLDE3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1
bmNEYXRhKEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdoCiAgICAgdW5zaWduZWQgaW50
IHRvdGFsQnl0ZXNSZXF1aXJlZDsKICAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29t
cHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3VucGFj
a0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7CiAgICAgaWYgKGVycm9yICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKGVycm9yKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBkaW1lbnNpb25zIik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1Jl
cXVpcmVkKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJBcnJh
eUJ1ZmZlclZpZXcgbm90IGJpZyBlbm91Z2ggZm9yIHJlcXVlc3QiKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlRHJhd01vZGUoR0MzRGVudW0gbW9kZSkKK2Jvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRGVudW0gbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpQT0lOVFM6CkBAIC00Njg5LDIxICs0NjkzLDIxIEBAIGJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdNb2RlKEdDM0RlbnVtIG1vZGUpCiAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBk
ZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGRyYXcgbW9k
ZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogCi1ib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoKQorYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSkKIHsKICAgICBpZiAobV9zdGVuY2lsTWFzayAhPSBtX3N0ZW5jaWxNYXNrQmFjayB8fCBtX3N0
ZW5jaWxGdW5jUmVmICE9IG1fc3RlbmNpbEZ1bmNSZWZCYWNrIHx8IG1fc3RlbmNpbEZ1bmNNYXNr
ICE9IG1fc3RlbmNpbEZ1bmNNYXNrQmFjaykgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAiZnJvbnQgYW5kIGJhY2sgc3RlbmNpbHMgc2V0dGluZ3MgZG8gbm90IG1h
dGNoIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0ZW5jaWxGdW5jKEdDM0Rl
bnVtIGZ1bmMpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTdGVuY2lsRnVu
Yyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZ1bmMpCiB7CiAgICAgc3dpdGNo
IChmdW5jKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TkVWRVI6CkBAIC00NzE2LDcg
KzQ3MjAsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTdGVuY2lsRnVu
YyhHQzNEZW51bSBmdW5jKQogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMV0FZUzoKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCBmdW5jdGlvbiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogfQpAQCAtNDcyNiwxMCArNDczMCwxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cHJpbnRXYXJuaW5nVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICBjYW52YXMo
KS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKS0+YWRkTWVzc2Fn
ZShIVE1MTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIFdhcm5pbmdNZXNzYWdlTGV2ZWws
IG1lc3NhZ2UsIGNhbnZhcygpLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7CiB9CiAKLWJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRl
cnMoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50KQorYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCkKIHsK
ICAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgewotICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewpAQCAtNDczOSwx
MyArNDc0MywxMyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVGcmFtZWJ1
ZmZlckZ1bmNQYXJhbWV0ZXJzKEdDM0RlbnVtIHRhcmdldCwgRwogICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKICAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBhdHRhY2ht
ZW50Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5kRXF1YXRpb24oR0Mz
RGVudW0gbW9kZSkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5kRXF1
YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlKQogewogICAgIHN3
aXRjaCAobW9kZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfQUREOgpAQCAt
NDc1MywyNCArNDc1NywyNCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVC
bGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlVOQ19SRVZFUlNFX1NVQlRSQUNUOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0
OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCkKK2Jv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCkKIHsKICAgICBp
ZiAoKChzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0NPTE9SIHx8IHNyYyA9PSBH
cmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0NPTE9SKQogICAgICAgICAgJiYg
KGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQUxQSEEgfHwgZHN0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpKQogICAgICAgICB8fCAoKGRz
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1IgfHwgZHN0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCiAgICAgICAgICAgICAmJiAoc3Jj
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8fCBzcmMgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpKSB7Ci0gICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbmNvbXBhdGlibGUgc3JjIGFuZCBkc3QiKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ2FwYWJpbGl0eShHQzNEZW51bSBjYXApCiti
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gY2FwKQogewogICAgIHN3aXRjaCAoY2FwKSB7CiAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQ6CkBAIC00Nzg0LDY3ICs0Nzg4LDY3IEBAIGJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFiaWxpdHkoR0MzRGVudW0gY2Fw
KQogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVDoKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCBjYXBhYmlsaXR5Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAK
LWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBHQzNE
c2l6ZWkgcmVxdWlyZWRNaW5TaXplKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIHJl
cXVpcmVkTWluU2l6ZSkKIHsKICAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJubyBhcnJheSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAg
IHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCBmYWxzZSwg
di0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXplKTsKKyAgICByZXR1cm4gdmFs
aWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxz
ZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXplKTsKIH0KIAotYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVx
dWlyZWRNaW5TaXplKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1pblNp
emUpCiB7CiAgICAgaWYgKCF2KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
bm8gYXJyYXkiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICByZXR1cm4gdmFs
aWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgZmFsc2UsIHYtPmRhdGEoKSwg
di0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9y
bU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYtPmRhdGEo
KSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNpemVpIHNpemUsIEdDM0RzaXplaSByZXF1
aXJlZE1pblNpemUpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3Jt
UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNpemVpIHNpemUsIEdDM0RzaXplaSByZXF1
aXJlZE1pblNpemUpCiB7Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRl
cnMobG9jYXRpb24sIGZhbHNlLCB2LCBzaXplLCByZXF1aXJlZE1pblNpemUpOworICAgIHJldHVy
biB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24s
IGZhbHNlLCB2LCBzaXplLCByZXF1aXJlZE1pblNpemUpOwogfQogCi1ib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFy
cmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQorYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFu
IHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQog
ewogICAgIGlmICghdikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFy
cmF5Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRl
VW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2
LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXplKTsKKyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3Jt
TWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYtPmRh
dGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7CiB9CiAKLWJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCB2b2lkKiB2
LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIHZvaWQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkg
cmVxdWlyZWRNaW5TaXplKQogewogICAgIGlmICghbG9jYXRpb24pCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7
Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsb2NhdGlvbiBpcyBu
b3QgZnJvbSBjdXJyZW50IHByb2dyYW0iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJh
eSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICh0cmFuc3Bvc2UpIHsK
LSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0cmFuc3Bvc2Ugbm90IEZBTFNFIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKHNpemUgPCByZXF1aXJlZE1p
blNpemUgfHwgKHNpemUgJSByZXF1aXJlZE1pblNpemUpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBzaXplIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVdlYkdMQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSB1c2FnZSkKK1dlYkdMQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
QnVmZmVyRGF0YVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIHVzYWdlKQogewogICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSAwOwog
ICAgIHN3aXRjaCAodGFyZ2V0KSB7CkBAIC00ODU1LDExICs0ODU5LDExIEBAIFdlYkdMQnVmZmVy
KiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoR0Mz
RGVudW0gdGFyZ2V0CiAgICAgICAgIGJ1ZmZlciA9IG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlm
ICghYnVmZmVyKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJu
byBidWZmZXIiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHN3aXRjaCAodXNhZ2Up
IHsKQEAgLTQ4NjgsMzAgKzQ4NzIsMzAgQEAgV2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhHQzNEZW51bSB0YXJnZXQKICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVc6CiAgICAgICAgIHJldHVybiBidWZm
ZXI7CiAgICAgfQotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB1c2FnZSIpOwogICAg
IHJldHVybiAwOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1M
SW1hZ2VFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlKQorYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlKQogewogICAgIGlmICghaW1hZ2UgfHwgIWltYWdl
LT5jYWNoZWRJbWFnZSgpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8g
aW1hZ2UiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBjb25zdCBLVVJMJiB1
cmwgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+cmVzcG9uc2UoKS51cmwoKTsKICAgICBpZiAodXJs
LmlzTnVsbCgpIHx8IHVybC5pc0VtcHR5KCkgfHwgIXVybC5pc1ZhbGlkKCkpIHsKLSAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGltYWdlIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmSW1wbChHQzNEdWludCBpbmRleCwgR0MzRHNpemVpIGV4
cGVjdGVkU2l6ZSwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0Mz
RGZsb2F0IHYzKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJbXBs
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBl
Y3RlZFNpemUsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0Rm
bG9hdCB2MykKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRpbmcgdmVydGV4QXR0cmliMCB2YWx1ZXMu
CkBAIC00OTE5LDMxICs0OTIzLDMxIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0
ZXhBdHRyaWJmSW1wbChHQzNEdWludCBpbmRleCwgR0MzRHNpemVpIGV4cGVjdGVkCiAgICAgYXR0
cmliVmFsdWUudmFsdWVbM10gPSB2MzsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYmZ2SW1wbChHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2LCBHQzNE
c2l6ZWkgZXhwZWN0ZWRTaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBGbG9h
dDMyQXJyYXkqIHYsIEdDM0RzaXplaSBleHBlY3RlZFNpemUpCiB7CiAgICAgaWYgKGlzQ29udGV4
dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghdikgewotICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgdmVydGV4QXR0cmliZnZJbXBsKGluZGV4LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCBleHBl
Y3RlZFNpemUpOworICAgIHZlcnRleEF0dHJpYmZ2SW1wbChmdW5jdGlvbk5hbWUsIGluZGV4LCB2
LT5kYXRhKCksIHYtPmxlbmd0aCgpLCBleHBlY3RlZFNpemUpOwogfQogCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZnZJbXBsKEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNE
c2l6ZWkgZXhwZWN0ZWRTaXplKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAg
IHJldHVybjsKICAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJubyBhcnJheSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChzaXplIDwgZXhw
ZWN0ZWRTaXplKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBz
aXplIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGluZGV4ID49IG1fbWF4VmVy
dGV4QXR0cmlicykgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91
dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIEluIEdMLCB3ZSBz
a2lwIHNldHRpbmcgdmVydGV4QXR0cmliMCB2YWx1ZXMuCkBAIC01MTAyLDcgKzUxMDYsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dChUaW1lcjxXZWJH
TFJlbmRlcmluZ0NvbnRleHQ+KikKICAgICAgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25l
U2hvdChzZWNvbmRzQmV0d2VlblJlc3RvcmVBdHRlbXB0cyk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIC8vIFRoaXMgbGlrZWx5IHNob3VsZG4ndCBoYXBwZW4gYnV0IGlzIHRoZSBiZXN0IHdh
eSB0byByZXBvcnQgaXQgdG8gdGhlIFdlYkdMIGFwcC4KLSAgICAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgIiIsICJlcnJvciByZXN0b3JpbmcgY29udGV4dCIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC01MTU1LDYgKzUxNTksNDAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmJ1YmJsZVRvRnJvbnQoaW50IGlkeCkKICAgICAg
ICAgbV9idWZmZXJzW2ldLnN3YXAobV9idWZmZXJzW2ktMV0pOwogfQogCituYW1lc3BhY2Ugewor
CisgICAgU3RyaW5nIEdldEVycm9yU3RyaW5nKEdDM0RlbnVtIGVycm9yKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChlcnJvcikgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU06CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSURfRU5VTSI7CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU6CisgICAgICAgICAgICByZXR1cm4g
IklOVkFMSURfVkFMVUUiOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTjoKKyAgICAgICAgICAgIHJldHVybiAiSU5WQUxJRF9PUEVSQVRJT04iOworICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZOgorICAgICAgICAgICAg
cmV0dXJuICJPVVRfT0ZfTUVNT1JZIjsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT046CisgICAgICAgICAgICByZXR1cm4gIklOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIjsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Q09OVEVYVF9MT1NUX1dFQkdMOgorICAgICAgICAgICAgcmV0dXJuICJDT05URVhUX0xPU1Rf
V0VCR0wiOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9y
bWF0KCJXZWJHTCBFUlJPUiglMDR4KSIsIGVycm9yKTsKKyAgICAgICAgfQorICAgIH0KKworfSAv
LyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzeW50
aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvciwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBj
b25zdCBjaGFyKiBkZXNjcmlwdGlvbikKK3sKKyAgICBpZiAobV9zeW50aGVzaXplZEVycm9yc1Rv
Q29uc29sZSkgeworICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6ICIpICsgR2V0RXJy
b3JTdHJpbmcoZXJyb3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rpb25OYW1lKSArICI6ICIgKyBT
dHJpbmcoZGVzY3JpcHRpb24pOworICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKHN0cik7Cisg
ICAgfQorICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOworfQorCisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXgg
MTgyOTFmZGQ2ZjIzZmU0MzU5MzBjOWJhZDI3NjYxOWI4ZjU1ODc3MS4uNjIwYjRkNGU2N2FiOTA5
YmQyMzdmOWEzYjI3MDQ5MGFkMDBiNWM4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTM2NSw3ICszNjUsNyBAQCBwdWJs
aWM6CiAgICAgLy8gSWYgbnVtRWxlbWVudHMgPD0gMCwgd2Ugb25seSBjaGVjayBpZiBlYWNoIGVu
YWJsZWQgdmVydGV4IGF0dHJpYnV0ZSBpcyBib3VuZCB0byBhIGJ1ZmZlci4KICAgICBib29sIHZh
bGlkYXRlUmVuZGVyaW5nU3RhdGUoaW50IG51bUVsZW1lbnRzKTsKIAotICAgIGJvb2wgdmFsaWRh
dGVXZWJHTE9iamVjdChXZWJHTE9iamVjdCopOworICAgIGJvb2wgdmFsaWRhdGVXZWJHTE9iamVj
dChjb25zdCBjaGFyKiwgV2ViR0xPYmplY3QqKTsKIAogI2lmIEVOQUJMRShWSURFTykKICAgICBQ
YXNzUmVmUHRyPEltYWdlPiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiwgRXhj
ZXB0aW9uQ29kZSYpOwpAQCAtNDkxLDYgKzQ5MSw4IEBAIHB1YmxpYzoKICAgICBib29sIG1faXNS
ZXNvdXJjZVNhZmU7CiAgICAgYm9vbCBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkOwogCisgICAg
Ym9vbCBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlOworCiAgICAgLy8gRW5hYmxlZCBleHRl
bnNpb24gb2JqZWN0cy4KICAgICBPd25QdHI8T0VTVGV4dHVyZUZsb2F0PiBtX29lc1RleHR1cmVG
bG9hdDsKICAgICBPd25QdHI8T0VTU3RhbmRhcmREZXJpdmF0aXZlcz4gbV9vZXNTdGFuZGFyZERl
cml2YXRpdmVzOwpAQCAtNTQ3LDMyICs1NDksMzMgQEAgcHVibGljOgogICAgIGludCBnZXRCb3Vu
ZEZyYW1lYnVmZmVySGVpZ2h0KCk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmVyaWZ5
IGxpbWl0cyBvbiB0aGUgbGVuZ3RoIG9mIHVuaWZvcm0gYW5kIGF0dHJpYnV0ZSBsb2NhdGlvbnMu
Ci0gICAgYm9vbCB2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IFN0cmluZyYpOworICAgIGJv
b2wgdmFsaWRhdGVMb2NhdGlvbkxlbmd0aChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0
IFN0cmluZyYpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHNpemUgaXMg
bm9uLW5lZ2F0aXZlLgogICAgIC8vIEdlbmVyYXRlIEdMIGVycm9yIGFuZCByZXR1cm4gZmFsc2Ug
Zm9yIG5lZ2F0aXZlIGlucHV0czsgb3RoZXJ3aXNlLCByZXR1cm4gdHJ1ZS4KLSAgICBib29sIHZh
bGlkYXRlU2l6ZShHQzNEaW50IHgsIEdDM0RpbnQgeSk7CisgICAgYm9vbCB2YWxpZGF0ZVNpemUo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IHgsIEdDM0RpbnQgeSk7CiAKICAgICAv
LyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmlu
ZyBiZWxvbmcgdG8gdGhlCiAgICAgLy8gQVNDSUkgc3Vic2V0IGFzIGRlZmluZWQgaW4gR0xTTCBF
UyAxLjAgc3BlYyBzZWN0aW9uIDMuMS4KLSAgICBib29sIHZhbGlkYXRlU3RyaW5nKGNvbnN0IFN0
cmluZyYpOworICAgIGJvb2wgdmFsaWRhdGVTdHJpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBjb25zdCBTdHJpbmcmKTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB0YXJn
ZXQgYW5kIHRleHR1cmUgYm91bmQgdG8gdGhlIHRhcmdldC4KICAgICAvLyBHZW5lcmF0ZSBHTCBl
cnJvcnMgYW5kIHJldHVybiAwIGlmIHRhcmdldCBpcyBpbnZhbGlkIG9yIHRleHR1cmUgYm91bmQg
aXMKICAgICAvLyBudWxsLiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHRleHR1cmUgYm91bmQgdG8g
dGhlIHRhcmdldC4KLSAgICBXZWJHTFRleHR1cmUqIHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoR0Mz
RGVudW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCk7CisgICAgV2ViR0xUZXh0
dXJlKiB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCk7CiAKICAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQgZm9ybWF0L3R5cGUgZm9yIGZ1bmN0aW9ucyB7Y29w
eX1UZXh7U3VifUltYWdlLgogICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBm
YWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5j
Rm9ybWF0QW5kVHlwZShHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpOworICAgIGJvb2wg
dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gY2hlY2sgaW5wdXQgbGV2ZWwgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgog
ICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBsZXZlbCBpcyBp
bnZhbGlkLgotICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jTGV2ZWwoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsKTsKKyAgICBib29sIHZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKTsKIAogICAgIC8v
IEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBwYXJhbWV0ZXJzIGZvciBmdW5jdGlvbnMg
e2NvcHl9VGV4e1N1Yn1JbWFnZS4KICAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVy
bnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAgICBib29sIHZhbGlkYXRlVGV4
RnVuY1BhcmFtZXRlcnMoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLAorICAgIGJvb2wg
dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSk7CkBAIC01
ODAsMTggKzU4MywxOSBAQCBwdWJsaWM6CiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlk
YXRlIHRoYXQgdGhlIGdpdmVuIEFycmF5QnVmZmVyVmlldwogICAgIC8vIGlzIG9mIHRoZSBjb3Jy
ZWN0IHR5cGUgYW5kIGNvbnRhaW5zIGVub3VnaCBkYXRhIGZvciB0aGUgdGV4SW1hZ2UgY2FsbC4K
ICAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVy
cyBhcmUgaW52YWxpZC4KLSAgICBib29sIHZhbGlkYXRlVGV4RnVuY0RhdGEoR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jRGF0YShjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscyk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gdmFsaWRhdGUgbW9kZSBmb3IgZHJhd3tBcnJheXMvRWxlbWVudHN9LgotICAgIGJvb2wg
dmFsaWRhdGVEcmF3TW9kZShHQzNEZW51bSk7CisgICAgYm9vbCB2YWxpZGF0ZURyYXdNb2RlKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0pOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0
aW9uIHRvIHZhbGlkYXRlIGlmIGZyb250L2JhY2sgc3RlbmNpbE1hc2sgYW5kIHN0ZW5jaWxGdW5j
IHNldHRpbmdzIGFyZSB0aGUgc2FtZS4KLSAgICBib29sIHZhbGlkYXRlU3RlbmNpbFNldHRpbmdz
KCk7CisgICAgYm9vbCB2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHN0ZW5jaWwgZnVu
Yy4KLSAgICBib29sIHZhbGlkYXRlU3RlbmNpbEZ1bmMoR0MzRGVudW0pOworICAgIGJvb2wgdmFs
aWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKIAog
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4UGFyYW1ldGVyZiBhbmQgdGV4UGFyYW1ldGVy
aS4KICAgICB2b2lkIHRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEZmxvYXQgcGFyYW1pLCBHQzNEaW50IHBhcmFtZiwgYm9vbCBpc0Zsb2F0KTsKQEAgLTYw
MiwzNSArNjA2LDM1IEBAIHB1YmxpYzoKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxp
ZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciBmcmFtZWJ1ZmZlciBmdW5jdGlvbnMuCiAgICAgLy8g
R2VuZXJhdGUgR0wgZXJyb3IgaWYgcGFyYW1ldGVycyBhcmUgaWxsZWdhbC4KLSAgICBib29sIHZh
bGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IGF0dGFjaG1lbnQpOworICAgIGJvb2wgdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJz
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRh
Y2htZW50KTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBibGVuZCBlcXVh
dGlvbiBtb2RlLgotICAgIGJvb2wgdmFsaWRhdGVCbGVuZEVxdWF0aW9uKEdDM0RlbnVtKTsKKyAg
ICBib29sIHZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtKTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBibGVuZCBmdW5j
IGZhY3RvcnMuCi0gICAgYm9vbCB2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoR0MzRGVudW0gc3Jj
LCBHQzNEZW51bSBkc3QpOworICAgIGJvb2wgdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gc3JjLCBHQzNEZW51bSBkc3QpOwogCiAgICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgR0wgY2FwYWJpbGl0eS4KLSAgICBib29s
IHZhbGlkYXRlQ2FwYWJpbGl0eShHQzNEZW51bSk7CisgICAgYm9vbCB2YWxpZGF0ZUNhcGFiaWxp
dHkoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7CiAKICAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gdG8gdmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgdW5pZm9ybSBmdW5jdGlv
bnMuCi0gICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiwgRmxvYXQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgSW50MzJB
cnJheSosIEdDM0RzaXplaSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cyhjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIHZvaWQqLCBHQzNEc2l6ZWkgc2l6ZSwgR0Mz
RHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMy
QXJyYXkqLCBHQzNEc2l6ZWkgbW9kKTsKLSAgICBib29sIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBh
cmFtZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bv
c2UsIHZvaWQqLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIG1vZCk7CisgICAgYm9vbCB2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qLCBGbG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgbW9kKTsKKyAgICBi
b29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEludDMyQXJyYXkqLCBHQzNEc2l6ZWkgbW9kKTsK
KyAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIHZvaWQqLCBHQzNEc2l6ZWksIEdDM0Rz
aXplaSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgbW9kKTsKKyAgICBib29s
IHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgdm9p
ZCosIEdDM0RzaXplaSwgR0MzRHNpemVpIG1vZCk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gdmFsaWRhdGUgcGFyYW1ldGVycyBmb3IgYnVmZmVyRGF0YS4KICAgICAvLyBSZXR1cm4gdGhl
IGN1cnJlbnQgYm91bmQgYnVmZmVyIHRvIHRhcmdldCwgb3IgMCBpZiBwYXJhbWV0ZXJzIGFyZSBp
bnZhbGlkLgotICAgIFdlYkdMQnVmZmVyKiB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpOworICAgIFdlYkdMQnVmZmVyKiB2YWxpZGF0
ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSB1c2FnZSk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRl
eHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgaW1hZ2UgaXMgcmVhZHkuCi0gICAgYm9vbCB2YWxp
ZGF0ZUhUTUxJbWFnZUVsZW1lbnQoSFRNTEltYWdlRWxlbWVudCopOworICAgIGJvb2wgdmFsaWRh
dGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxl
bWVudCopOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdmVydGV4QXR0cmliTmZ7dn0u
Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmSW1wbChHQzNEdWludCBpbmRleCwgR0MzRHNpemVpIGV4
cGVjdGVkU2l6ZSwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KTsK
LSAgICB2b2lkIHZlcnRleEF0dHJpYmZ2SW1wbChHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5
KiwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmdkltcGwo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCosIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgZXhw
ZWN0ZWRTaXplKTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYmZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBlY3RlZFNpemUsIEdDM0RmbG9h
dCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgRmxvYXQz
MkFycmF5KiwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJm
dkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0
KiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKTsKIAogICAgIC8vIEhlbHBlciBm
dW5jdGlvbiBmb3IgZGVsZXRlKiAoZGVsZXRlQnVmZmVyLCBkZWxldGVQcm9ncmFtLCBldGMpIGZ1
bmN0aW9ucy4KICAgICAvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCByZXR1cm4gd2l0
aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuCkBAIC02MzksNyArNjQzLDcgQEAgcHVibGljOgogICAg
IC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgYmluZCogKGJpbmRCdWZmZXIsIGJpbmRUZXh0dXJlLCBl
dGMpIGFuZCB1c2VQcm9ncmFtLgogICAgIC8vIElmIHRoZSBvYmplY3QgaGFzIGFscmVhZHkgYmVl
biBkZWxldGVkLCBzZXQgZGVsZXRlZCB0byB0cnVlIHVwb24gcmV0dXJuLgogICAgIC8vIFJldHVy
biBmYWxzZSBpZiBjYWxsZXIgc2hvdWxkIHJldHVybiB3aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2lu
Zy4KLSAgICBib29sIGNoZWNrT2JqZWN0VG9CZUJvdW5kKFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVs
ZXRlZCk7CisgICAgYm9vbCBjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVsZXRlZCk7CiAKICAgICAvLyBIZWxwZXJzIGZv
ciBzaW11bGF0aW5nIHZlcnRleEF0dHJpYjAKICAgICB2b2lkIGluaXRWZXJ0ZXhBdHRyaWIwKCk7
CkBAIC02NTQsNiArNjU4LDEwIEBAIHB1YmxpYzoKICAgICAvLyBhIFNhZmFyaSBvciBDaHJvbWUg
ZXh0ZW5zaW9uLgogICAgIGJvb2wgYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpIGNvbnN0Owog
CisgICAgLy8gV3JhcHBlciBmb3IgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9y
IHRoYXQgc2VuZHMgYSBtZXNzYWdlCisgICAgLy8gdG8gdGhlIEphdmFTY3JpcHQgY29uc29sZS4K
KyAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtLCBjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKTsKKwogICAgIGZyaWVuZCBjbGFzcyBXZWJH
TFN0YXRlUmVzdG9yZXI7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124851</attachid>
            <date>2012-01-31 16:53:16 -0800</date>
            <delta_ts>2012-01-31 19:17:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77267-20120131165315.patch</filename>
            <type>text/plain</type>
            <size>145719</size>
            <attacher name="Gregg Tavares">gman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NDA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTMxNjhlZTViNGI2MzJj
NGFiZjc4NTQ4Yzc1YWE2MmNmOTQ4MGIzYS4uMjUyZTk5M2Y5Y2MwZWIwZTBhYmNhZmQ3OTkyZTI5
YzEyZTBhZTViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MyBAQAorMjAxMi0wMS0zMSAgR3Jl
Z2cgVGF2YXJlcyAgPGdtYW5AZ29vZ2xlLmNvbT4KKworICAgICAgICBNYWtlIFdlYkdMIHB1dCBz
eW50aGVzaXplZCBlcnJvcnMgaW4gdGhlIEpTIGNvbnNvbGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IGZ1bmN0aW9uYWxpdHkgc28gbm8gbmV3
IHRlc3RzLgorCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZXM6OnZhbGlkYXRl
Q29tcHJlc3NlZFRleEZ1bmNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVzOjpjb21wcmVzc2VkVGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TENvbXByZXNzZWRUZXh0dXJlczo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQpOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVzLmg6CisgICAgICAgIChXZWJHTENv
bXByZXNzZWRUZXh0dXJlcyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRl
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xEZWJ1Z1NoYWRlcnM6OmdldFRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2UpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2
ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjphdHRh
Y2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5k
QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjaGVja09iamVjdFRvQmVCb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJpbmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXByZXNzZWRUZXhTdWJJbWFn
ZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleElt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
cHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRh
Y2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNh
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVXZWJHTE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZUF0dHJpYik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZVVuaWZvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRyaWJM
b2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1
ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclBh
cmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNo
YWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRUZXhQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0VmVydGV4QXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aGludCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cGl4ZWxTdG9yZWkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVu
ZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnNjaXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpz
aGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpz
dGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0
ZW5jaWxGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpzdGVuY2lsTWFza1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2aWRlb0ZyYW1lVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTJpdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0zZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtM2kpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm00aSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00
aXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0
cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bU1hdHJpeDNmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliMWYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGYpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlld3BvcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZUxvc3RDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHRJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VSZXN0b3JlQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUxvY2F0aW9uTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5j
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
RHJhd01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVN0ZW5jaWxTZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlU3RlbmNpbEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5kRXF1YXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5k
RnVuY0ZhY3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZUNhcGFiaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQnVmZmVyRGF0YVBh
cmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZUhUTUxJbWFnZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN5bnRoZXNpemVH
TEVycm9yKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoK
KyAgICAgICAgKFdlYkdMUmVuZGVyaW5nQ29udGV4dCk6CisKIDIwMTItMDEtMzEgIFNoZXJpZmYg
Qm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIxMDYzNzYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlcy5jcHAKaW5kZXggMWVhYjc4NzIzNmFjNzg4M2M0
ODRlOGMwZmI3YjA4MDUwZjBjZTk3Yy4uMTUxOTgwY2FhMThiMjg3ODllNjAwZTkxMDQ0ZGM3ZDdi
MmM5Y2QyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21w
cmVzc2VkVGV4dHVyZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVzLmNwcApAQCAtMTI1LDE2ICsxMjUsMTYgQEAgYm9vbCBXZWJHTENv
bXByZXNzZWRUZXh0dXJlczo6dmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZv
cm1hdCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZXM6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJW
aWV3KiBwaXhlbHMpCitib29sIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVzOjp2YWxpZGF0ZUNvbXBy
ZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVy
VmlldyogcGl4ZWxzKQogewotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9jb250
ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpOwogICAgIGlmICghcGl4ZWxzKSB7Ci0gICAgICAgIGNv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7Ci0g
ICAgICAgIGNvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0
IDwgMCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNzIsMTIgKzE3Miwx
MiBAQCBib29sIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVzOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhG
dW5jRGF0YShHQzNEc2l6ZWkgd2lkdGgsIEdDMwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBpZiAo
cGl4ZWxzLT5ieXRlTGVuZ3RoKCkgIT0gYnl0ZXNSZXF1aXJlZCkgewotICAgICAgICBjb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxlbmd0aCBvZiBBcnJheUJ1ZmZlclZpZXcgaXMg
bm90IGNvcnJlY3QgZm9yIGRpbWVuc2lvbnMiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIApAQCAtMjI5LDMwICsyMjksMjkgQEAgYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlczo6
dmFsaWRhdGVDb21wcmVzc2VkVGV4U3ViRGltZW5zaW9ucyhHQzNEZW51bSB0YXJnZXQKIHZvaWQg
V2ViR0xDb21wcmVzc2VkVGV4dHVyZXM6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBBcnJheUJ1ZmZl
clZpZXcqIGRhdGEpCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2NvbnRl
eHQtPmdyYXBoaWNzQ29udGV4dDNEKCk7CiAgICAgaWYgKG1fY29udGV4dC0+aXNDb250ZXh0TG9z
dCgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQpKSB7Ci0gICAgICAgIGNvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVz
c2VkVGV4SW1hZ2UyRCIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgaWYgKGJvcmRlcikgewotICAgICAgICBjb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJib3JkZXIgbm90IDAiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKHdpZHRoLCBo
ZWlnaHQsIGludGVybmFsZm9ybWF0LCBkYXRhKSkKKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3Nl
ZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGludGVy
bmFsZm9ybWF0LCBkYXRhKSkKICAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMVGV4dHVyZSogdGV4
ID0gbV9jb250ZXh0LT52YWxpZGF0ZVRleHR1cmVCaW5kaW5nKHRhcmdldCwgdHJ1ZSk7CisgICAg
V2ViR0xUZXh0dXJlKiB0ZXggPSBtX2NvbnRleHQtPnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNv
bXByZXNzZWRUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKICAgICBpZiAoIXRleCkKICAgICAg
ICAgcmV0dXJuOwogICAgIGlmICghbV9jb250ZXh0LT5pc0dMRVMyTlBPVFN0cmljdCgpKSB7CiAg
ICAgICAgIGlmIChsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkg
ewotICAgICAgICAgICAgY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFn
ZTJEIiwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQotICAgIGNvbnRleHQtPmNvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNl
QWRkcmVzcygpKTsKKyAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmNvbXByZXNz
ZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9yZGVyLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwogICAg
IHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CiAgICAgbV9jb250ZXh0
LT5jbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjYwLDMyICsyNTksMzEg
QEAgdm9pZCBXZWJHTENvbXByZXNzZWRUZXh0dXJlczo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmUKIHZvaWQgV2ViR0xDb21wcmVzc2VkVGV4dHVyZXM6
OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBk
YXRhKQogewotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9jb250ZXh0LT5ncmFw
aGljc0NvbnRleHQzRCgpOwogICAgIGlmIChtX2NvbnRleHQtPmlzQ29udGV4dExvc3QoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KGZvcm1h
dCkpIHsKLSAgICAgICAgY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
IiwgImludmFsaWQgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKCF2
YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGRhdGEp
KQorICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoImNvbXByZXNzZWRUZXhT
dWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBkYXRhKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgV2ViR0xUZXh0dXJlKiB0ZXggPSBtX2NvbnRleHQtPnZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcodGFyZ2V0LCB0cnVlKTsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IG1fY29udGV4dC0+
dmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQs
IHRydWUpOwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoZm9ybWF0
ICE9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUp
OworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiZm9ybWF0IGRvZXMg
bm90IG1hdGNoIHRleHR1cmUgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnModGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0ZXgpKSB7Ci0gICAgICAg
IGNvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAi
ZGltZW5zaW9ucyBpbnZhbGlkIGZvciBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGNvbnRleHQtPmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNz
KCkpOworICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y29tcHJlc3NlZFRleFN1
YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKICAg
ICBtX2NvbnRleHQtPmNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVz
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlcy5o
CmluZGV4IDY5OTM3MDY2OGE1NDgzYmQ1Njg4YWIzMWU1MmRjNjY4MjlkYmZlYzIuLjUyYjcxYzIx
MzdmY2M1OTA1MmNlNDVmODQ2MmVjODQ1ODg5N2Y3NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZXMuaApAQCAtNTQsNyArNTQs
OCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVzKFdlYkdM
UmVuZGVyaW5nQ29udGV4dCopOwogCi0gICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5j
RGF0YShHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgYm9vbCB2YWxpZGF0
ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKTsKIAogICAgIGJvb2wgdmFsaWRhdGVD
b21wcmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHAKaW5kZXggNWQyYzMxNzZkZjA2NDAx
YzQ5ZWJhNmFmYmE2Y2U2NmNkZTMwOGRlNS4uNTQ5OWFlZDlmMDQ4YjI5ZDljOGU1YTVlMjc1M2Uw
NGExZDU0ZTUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xE
ZWJ1Z1NoYWRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVi
dWdTaGFkZXJzLmNwcApAQCAtNjEsNyArNjEsNyBAQCBTdHJpbmcgV2ViR0xEZWJ1Z1NoYWRlcnM6
OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aQog
ICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKG1fY29udGV4dC0+aXNDb250ZXh0TG9zdCgp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaWYgKCFtX2NvbnRleHQtPnZhbGlkYXRl
V2ViR0xPYmplY3Qoc2hhZGVyKSkKKyAgICBpZiAoIW1fY29udGV4dC0+dmFsaWRhdGVXZWJHTE9i
amVjdCgiZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZSIsIHNoYWRlcikpCiAgICAgICAgIHJldHVy
biAiIjsKICAgICByZXR1cm4gbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRl
bnNpb25zKCktPmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShzaGFkZXItPm9iamVjdCgp
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuY3BwCmluZGV4IDkxNzZhMmRhNDRmZDY4OWQyMjFiYTYxMzg0YTc1NjlmNjRmNDE2
YmYuLjk0NWMxN2U3NGYwYzNmMTAwYjBlYTRmN2Y5ZDQ3NGEyZGUxOTY0NmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcApA
QCAtNDI0LDYgKzQyNCw3IEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIFBhCiAgICAgLCBtX2NvbnRl
eHRMb3N0KGZhbHNlKQogICAgICwgbV9jb250ZXh0TG9zdE1vZGUoU3ludGhldGljTG9zdENvbnRl
eHQpCiAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKKyAgICAsIG1fc3ludGhlc2l6ZWRF
cnJvcnNUb0NvbnNvbGUoZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7CiAgICAgbV9j
b250ZXh0R3JvdXAgPSBXZWJHTENvbnRleHRHcm91cDo6Y3JlYXRlKCk7CkBAIC03ODYsNyArNzg3
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0g
dGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGlmICh0ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwID49IG1fdGV4dHVyZVVuaXRzLnNpemUoKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYWN0aXZl
VGV4dHVyZSIsICJ0ZXh0dXJlIHVuaXQgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1cmUgLSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRTA7CkBAIC04MDEsMTAgKzgwMiwxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlLCBFeGNlcHRpb25Db2RlJiBl
YykKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3QocHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFk
ZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgc2hh
ZGVyKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghcHJvZ3JhbS0+YXR0YWNoU2hhZGVyKHNo
YWRlcikpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJhdHRhY2hTaGFkZXIiLCAic2hh
ZGVyIGF0dGFjaG1lbnQgYWxyZWFkeSBoYXMgc2hhZGVyIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBv
YmplY3RPclplcm8oc2hhZGVyKSk7CkBAIC04MTUsMjQgKzgxNiwyNCBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xT
aGFkZXIqIHNoYQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRBdHRyaWJMb2NhdGlv
bihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJiaW5kQXR0cmliTG9j
YXRpb24iLCBwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVMb2Nh
dGlvbkxlbmd0aChuYW1lKSkKKyAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImJpbmRB
dHRyaWJMb2NhdGlvbiIsIG5hbWUpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0
ZVN0cmluZyhuYW1lKSkKKyAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJiaW5kQXR0cmliTG9jYXRp
b24iLCBuYW1lKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxv
Y2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgsIG5hbWUpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjaGVja09iamVjdFRvQmVCb3VuZChXZWJHTE9iamVjdCogb2JqZWN0LCBib29sJiBkZWxldGVk
KQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrT2JqZWN0VG9CZUJvdW5kKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqIG9iamVjdCwgYm9vbCYgZGVsZXRlZCkK
IHsKICAgICBkZWxldGVkID0gZmFsc2U7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChvYmplY3QpIHsKICAgICAgICAgaWYgKCFvYmplY3Qt
PnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmplY3Qgbm90IGZyb20gdGhpcyBjb250ZXh0
Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZGVsZXRl
ZCA9ICFvYmplY3QtPm9iamVjdCgpOwpAQCAtODQ0LDEyICs4NDUsMTIgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEJ1ZmZlciog
YnVmZmVyLCBFeGMKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGJvb2wgZGVsZXRlZDsK
LSAgICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKGJ1ZmZlciwgZGVsZXRlZCkpCisgICAgaWYg
KCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZEJ1ZmZlciIsIGJ1ZmZlciwgZGVsZXRlZCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBpZiAoZGVsZXRlZCkKICAgICAgICAgYnVmZmVyID0gMDsKICAg
ICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgJiYgYnVmZmVyLT5nZXRUYXJnZXQo
KSAhPSB0YXJnZXQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJiaW5kQnVmZmVyIiwg
ImJ1ZmZlcnMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFyZ2V0cyIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFS
UkFZX0JVRkZFUikKQEAgLTg1Nyw3ICs4NTgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIsIEV4Ywog
ICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9C
VUZGRVIpCiAgICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0RWxlbWVudEFycmF5
QnVmZmVyKGJ1ZmZlcik7CiAgICAgZWxzZSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kQnVmZmVy
IiwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg3MSwx
MiArODcyLDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVidWZmZXIo
R0MzRGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiBiCiB7CiAgICAgVU5VU0VEX1BBUkFN
KGVjKTsKICAgICBib29sIGRlbGV0ZWQ7Ci0gICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZChi
dWZmZXIsIGRlbGV0ZWQpKQorICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRGcmFt
ZWJ1ZmZlciIsIGJ1ZmZlciwgZGVsZXRlZCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoZGVs
ZXRlZCkKICAgICAgICAgYnVmZmVyID0gMDsKICAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZEZyYW1lYnVmZmVy
IiwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgPSBidWZmZXI7CkBAIC04OTQsMTIgKzg5NSwxMiBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdM
UmVuZGVyYnVmZmVyKgogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgYm9vbCBkZWxldGVk
OwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQocmVuZGVyQnVmZmVyLCBkZWxldGVkKSkK
KyAgICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kUmVuZGVyYnVmZmVyIiwgcmVuZGVy
QnVmZmVyLCBkZWxldGVkKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChkZWxldGVkKQogICAg
ICAgICByZW5kZXJCdWZmZXIgPSAwOwogICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZlciIs
ICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fcmVuZGVy
YnVmZmVyQmluZGluZyA9IHJlbmRlckJ1ZmZlcjsKQEAgLTkxMywxMiArOTE0LDEyIEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdM
VGV4dHVyZSogdGV4dHVyZSwKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGJvb2wgZGVs
ZXRlZDsKLSAgICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKHRleHR1cmUsIGRlbGV0ZWQpKQor
ICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRUZXh0dXJlIiwgdGV4dHVyZSwgZGVs
ZXRlZCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoZGVsZXRlZCkKICAgICAgICAgdGV4dHVy
ZSA9IDA7CiAgICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkgJiYgdGV4dHVy
ZS0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
YmluZFRleHR1cmUiLCAidGV4dHVyZXMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFy
Z2V0cyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEdDM0RpbnQgbWF4TGV2ZWwgPSAw
OwpAQCAtOTMzLDcgKzkzNCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kVGV4
dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwKICAgICAgICAgbV90
ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0ubV90ZXh0dXJlQ3ViZU1hcEJpbmRpbmcg
PSB0ZXh0dXJlOwogICAgICAgICBtYXhMZXZlbCA9IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbDsK
ICAgICB9IGVsc2UgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZFRleHR1cmUiLCAiaW52YWxpZCB0
YXJnZXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQtPmJpbmRUZXh0
dXJlKHRhcmdldCwgb2JqZWN0T3JaZXJvKHRleHR1cmUpKTsKQEAgLTk2Miw3ICs5NjMsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRDb2xvcihHQzNEZmxvYXQgcmVkLCBHQzNE
ZmxvYXQgZ3JlZW4sIEdDM0RmbG9hdAogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Ymxl
bmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwg
IXZhbGlkYXRlQmxlbmRFcXVhdGlvbihtb2RlKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlKSkKICAgICAgICAg
cmV0dXJuOwogICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvbihtb2RlKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtOTcwLDcgKzk3MSw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCiAKIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJH
QiwgR0MzRGVudW0gbW9kZUFscGhhKQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZh
bGlkYXRlQmxlbmRFcXVhdGlvbihtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKG1v
ZGVBbHBoYSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0
aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9kZVJHQikgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigi
YmxlbmRFcXVhdGlvbiIsIG1vZGVBbHBoYSkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRl
eHQtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC05NzksNyArOTgwLDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdC
LCBHQzNEZW51bSBtb2QKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuYyhH
QzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQogewotICAgIGlmIChpc0NvbnRleHRM
b3N0KCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhzZmFjdG9yLCBkZmFjdG9yKSkKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoImJsZW5k
RnVuYyIsIHNmYWN0b3IsIGRmYWN0b3IpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0
LT5ibGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKQEAgLTk4Nyw3ICs5ODgsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpCiAKIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0Is
IEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQog
ewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhz
cmNSR0IsIGRzdFJHQikpCisgICAgLy8gTm90ZTogQWxwaGEgZG9lcyBub3QgaGF2ZSB0aGUgc2Ft
ZSByZXN0cmljdGlvbnMgYXMgUkdCLgorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlk
YXRlQmxlbmRGdW5jRmFjdG9ycygiYmxlbmRGdW5jIiwgc3JjUkdCLCBkc3RSR0IpKQogICAgICAg
ICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJH
Qiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwpAQCAtOTk4LDE2ICsxMDAwLDE2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
dWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIEdDM0RlCiAgICAg
VU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1
cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRl
cnModGFyZ2V0LCB1c2FnZSk7CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVm
ZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKICAgICBpZiAo
IWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChzaXplIDwgMCkgewotICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPCAwIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsK
ICAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoc2l6ZSkpIHsKLSAgICAg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDIxLDE2ICsxMDIzLDE2
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgQXJyYXlCdWZmZXIqIGRhdGEsIEdDM0RlCiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1
ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnModGFyZ2V0LCB1c2FnZSk7CisgICAg
V2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZl
ckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJu
OwogICAgIGlmICghZGF0YSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgIm5v
IGRhdGEiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIWlzRXJyb3JHZW5lcmF0
ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewogICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2Np
YXRlQnVmZmVyRGF0YShkYXRhKSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZl
ckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgIH0KQEAgLTEwNDQsMTYgKzEwNDYsMTYgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEcK
ICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFy
YW1ldGVycyh0YXJnZXQsIHVzYWdlKTsKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRh
dGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyRGF0YSIsIHRhcmdldCwgdXNhZ2UpOwogICAg
IGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFkYXRhKSB7Ci0gICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAibm8gZGF0YSIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7
CiAgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7Ci0gICAg
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA2NywxOCArMTA2OSwx
OCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBBcgogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBi
dWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKHRhcmdldCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVC
dWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyU3ViRGF0YSIsIHRhcmdldCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwog
ICAgIGlmIChvZmZzZXQgPCAwKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEi
LCAib2Zmc2V0IDwgMCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghZGF0YSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNB
Y2Nlc3NlcygpKSB7CiAgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRh
KG9mZnNldCwgZGF0YSkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJE
YXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0KQEAgLTEwOTIsMTggKzEwOTQsMTggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwg
QXIKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRh
UGFyYW1ldGVycyh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7CisgICAg
V2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZl
clN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7CiAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAob2Zmc2V0IDwgMCkgewotICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAo
IWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewogICAgICAgICBpZiAo
IWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShvZmZzZXQsIGRhdGEpKSB7Ci0gICAgICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgb3V0IG9mIHJhbmdl
Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTE3LDcgKzEx
MTksNyBAQCBHQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoR0MzRGVudW0gdGFyZ2V0KQogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAg
aWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiLCAiaW52YWxpZCB0YXJnZXQiKTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwg
IW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKQEAgLTExMzUsMTEgKzExMzcsMTEgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQogICAg
IGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobWFzayAmIH4o
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQp
KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyIiwgImludmFsaWQgbWFzayIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNl
U2FmZSgpKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJB
VElPTiwgImNsZWFyIiwgImNhbiBub3QgcmVuZGVyIHRvIGZyYW1lYnVmZmVyIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgaWYgKCFjbGVhcklmQ29tcG9zaXRlZChtYXNrKSkKQEAgLTEy
MDAsNyArMTIwMiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb2xvck1hc2soR0Mz
RGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJjb21waWxlU2hhZGVyIiwgc2hhZGVyKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihvYmplY3RPclplcm8o
c2hhZGVyKSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTEyMTMs
NyArMTIxNSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1h
Z2UyRChHQzNEZW51bSAvKnRhcmdldCovLCBHQzNEaW50IC8qCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcy4KLSAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1h
Z2UyRCIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSAvKnRhcmdldCovLCBH
QzNEaW50IC8qbGV2ZWwqLywgR0MzRGludCAvKnhvZmZzZXQqLywgR0MzRGludCAvKnlvZmZzZXQq
LywKQEAgLTEyMjMsMjggKzEyMjUsMjggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNv
bXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIC8qdGFyZ2V0Ki8sIEdDM0RpbnQKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzLgotICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7Cisg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNv
bXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgImludmFsaWQgZm9ybWF0Iik7CiB9CiAKIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKIHsKICAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0
ZVRleEZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGludGVybmFsZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSkpCisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJjb3B5VGV4SW1h
Z2UyRCIsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3Jk
ZXIsIGludGVybmFsZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcodGFyZ2V0LCB0cnVlKTsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4
dHVyZUJpbmRpbmcoImNvcHlUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKICAgICBpZiAoIXRl
eCkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVm
ZmVyQ29tYmluYXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNv
bG9yRm9ybWF0KCkpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleEltYWdl
MkQiLCAiZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSAmJiBsZXZlbCAmJiBXZWJH
TFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJj
b3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUo
KSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04s
ICJjb3B5VGV4SW1hZ2UyRCIsICJmcmFtZWJ1ZmZlciBub3QgcmVhZGFibGUiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwpAQCAtMTI3NCwyMyArMTI3
NiwyMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQwogewogICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKHRhcmdl
dCwgbGV2ZWwpKQorICAgIGlmICghdmFsaWRhdGVUZXhGdW5jTGV2ZWwoImNvcHlUZXhTdWJJbWFn
ZTJEIiwgdGFyZ2V0LCBsZXZlbCkpCiAgICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUq
IHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcodGFyZ2V0LCB0cnVlKTsKKyAgICBXZWJHTFRl
eHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvcHlUZXhTdWJJbWFnZTJEIiwg
dGFyZ2V0LCB0cnVlKTsKICAgICBpZiAoIXRleCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
dmFsaWRhdGVTaXplKHhvZmZzZXQsIHlvZmZzZXQpIHx8ICF2YWxpZGF0ZVNpemUod2lkdGgsIGhl
aWdodCkpCisgICAgaWYgKCF2YWxpZGF0ZVNpemUoImNvcHlUZXhTdWJJbWFnZTJEIiwgeG9mZnNl
dCwgeW9mZnNldCkgfHwgIXZhbGlkYXRlU2l6ZSgiY29weVRleFN1YkltYWdlMkQiLCB3aWR0aCwg
aGVpZ2h0KSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXgt
PmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXgtPmdldEhl
aWdodCh0YXJnZXQsIGxldmVsKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1h
Z2UyRCIsICJyZWN0YW5nbGUgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgaWYgKCFpc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlk
KHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCksIGdldEJvdW5kRnJhbWVidWZm
ZXJDb2xvckZvcm1hdCgpKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhT
dWJJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJj
ZVNhZmUoKSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04sICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJmcmFtZWJ1ZmZlciBub3QgcmVhZGFibGUiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwpAQCAtMTMw
OCwxMiArMTMxMCwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQwogICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBzaXplOwogICAgICAgICAgICAgICAgIEdDM0RlbnVtIGVycm9yID0gbV9j
b250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWln
aHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmc2l6ZSwgMCk7CiAgICAgICAgICAgICAgICAgaWYgKGVy
cm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJiYWQgZGlt
ZW5zaW9ucyIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIHplcm8gPSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZCBjaGFy
W3NpemVdKTsKICAgICAgICAgICAgICAgICBpZiAoIXplcm8pIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAib3V0IG9mIG1l
bW9yeSIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKQEAgLTEzODMsNyAr
MTM4NSw3IEBAIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUsIEV4Y2VwCiAgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlZFUlRFWF9TSEFERVIgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hB
REVSKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjcmVhdGVTaGFkZXIiLCAiaW52YWxpZCBzaGFkZXIg
dHlwZSIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTE0MDUsNyArMTQwNyw3IEBA
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVPYmplY3QoV2ViR0xPYmplY3QqIG9i
amVjdCkKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFvYmplY3QpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMp
KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGVsZXRlIiwgIm9iamVjdCBkb2VzIG5v
dCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgaWYgKG9iamVjdC0+b2JqZWN0KCkpCkBAIC0xNTExLDcgKzE1MTMsNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhSYW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9h
dCB6RmFyKQogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKICAgICBp
ZiAoek5lYXIgPiB6RmFyKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGVwdGhSYW5n
ZSIsICJ6TmVhciA+IHpGYXIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRl
eHQtPmRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwpAQCAtMTUyMSwxMCArMTUyMywxMCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhSYW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0Rm
bG9hdCB6RmFyKQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcihXZWJH
TFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChzaGFk
ZXIpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImRl
dGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJkZXRhY2hTaGFk
ZXIiLCBzaGFkZXIpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFwcm9ncmFtLT5kZXRhY2hT
aGFkZXIoc2hhZGVyKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRldGFjaFNoYWRl
ciIsICJzaGFkZXIgbm90IGF0dGFjaGVkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
bV9jb250ZXh0LT5kZXRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmplY3RPclpl
cm8oc2hhZGVyKSk7CkBAIC0xNTM0LDcgKzE1MzYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNo
YQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZShHQzNEZW51bSBjYXApCiB7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCisg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KCJkaXNhYmxlIiwg
Y2FwKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlNDSVNTT1JfVEVTVCkgewogICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7CkBAIC0x
NTUxLDcgKzE1NTMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25DbwogICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhB
dHRyaWJzKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSIs
ICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTcz
NCwxNCArMTczNiwxNCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVSZW5k
ZXJpbmdTdGF0ZShpbnQgbnVtRWxlbWVudHNSZXF1aXJlZCkKICAgICByZXR1cm4gbnVtRWxlbWVu
dHNSZXF1aXJlZCA8PSBzbWFsbGVzdE51bUVsZW1lbnRzOwogfQogCi1ib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVXZWJHTE9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQorYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlV2ViR0xPYmplY3QoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBXZWJHTE9iamVjdCogb2JqZWN0KQogewogICAgIGlmICghb2JqZWN0IHx8
ICFvYmplY3QtPm9iamVjdCgpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
bm8gb2JqZWN0IG9yIG9iamVjdCBkZWxldGVkIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewot
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAib2JqZWN0IGRvZXMgbm90
IGJlbG9uZyB0byB0aGlzIGNvbnRleHQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE3NTEsMTQgKzE3NTMsMTQgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0Mz
RHNpemVpIGMKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogCi0gICAgaWYgKGlzQ29udGV4dExv
c3QoKSB8fCAhdmFsaWRhdGVEcmF3TW9kZShtb2RlKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgp
IHx8ICF2YWxpZGF0ZURyYXdNb2RlKCJkcmF3QXJyYXlzIiwgbW9kZSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoKSkKKyAgICBpZiAoIXZhbGlk
YXRlU3RlbmNpbFNldHRpbmdzKCJkcmF3QXJyYXlzIikpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChmaXJzdCA8IDAgfHwgY291bnQgPCAwKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRyYXdB
cnJheXMiLCAiZmlyc3Qgb3IgY291bnQgPCAwIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTE3NzEsMTggKzE3NzMsMTggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdB
cnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGMKICAgICAgICAg
Q2hlY2tlZEludDxHQzNEaW50PiBjaGVja2VkQ291bnQoY291bnQpOwogICAgICAgICBDaGVja2Vk
SW50PEdDM0RpbnQ+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVja2VkQ291bnQ7CiAg
ICAgICAgIGlmICghY2hlY2tlZFN1bS52YWxpZCgpIHx8ICF2YWxpZGF0ZVJlbmRlcmluZ1N0YXRl
KGNoZWNrZWRTdW0udmFsdWUoKSkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImRyYXdBcnJheXMiLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMi
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAg
IGlmICghdmFsaWRhdGVSZW5kZXJpbmdTdGF0ZSgwKSkgewotICAgICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAiZHJhd0FycmF5cyIsICJhdHRyaWJzIG5vdCBzZXR1cCBjb3JyZWN0bHki
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBo
aWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpKSkgewotICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImRyYXdBcnJheXMiLCAiZnJhbWVidWZm
ZXIgY2FuIG5vdCBiZSByZW5kZXJlZCB0byIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0xODA1LDEwICsxODA3LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxl
bWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51CiB7CiAgICAgVU5V
U0VEX1BBUkFNKGVjKTsKIAotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlRHJh
d01vZGUobW9kZSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVEcmF3TW9k
ZSgiZHJhd0VsZW1lbnRzIiwgbW9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghdmFs
aWRhdGVTdGVuY2lsU2V0dGluZ3MoKSkKKyAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbFNldHRpbmdz
KCJkcmF3RWxlbWVudHMiKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3dpdGNoICh0eXBlKSB7
CkBAIC0xODE2LDEyICsxODE4LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3
RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51CiAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJkcmF3RWxlbWVudHMiLCAiaW52YWxpZCB0eXBl
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoY291bnQgPCAwIHx8IG9mZnNl
dCA8IDApIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0VsZW1lbnRzIiwgImNvdW50IG9yIG9m
ZnNldCA8IDAiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTgyOSw3ICsxODMxLDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2Rl
LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnUKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFt
X2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpKSB7Ci0gICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0VsZW1lbnRzIiwgIm5vIEVMRU1FTlRfQVJSQVlf
QlVGRkVSIGJvdW5kIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE4MzcsMjYgKzE4
MzksMjYgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cyhHQzNEZW51
bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnUKICAgICBpZiAoIWlzRXJyb3JHZW5lcmF0
ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewogICAgICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBh
IHZhbGlkIHJlbmRlcmluZyBzdGF0ZQogICAgICAgICBpZiAoIXZhbGlkYXRlRWxlbWVudEFycmF5
U2l6ZShjb3VudCwgdHlwZSwgb2Zmc2V0KSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAiZHJhd0VsZW1lbnRzIiwgInJlcXVlc3Qgb3V0IG9mIGJvdW5kcyBmb3IgY3VycmVu
dCBFTEVNRU5UX0FSUkFZX0JVRkZFUiIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIGlmICghY291bnQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmICgh
dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKHR5cGUsIG51bUVsZW1lbnRzKSB8fCAhdmFs
aWRhdGVSZW5kZXJpbmdTdGF0ZShudW1FbGVtZW50cykpIHsKICAgICAgICAgICAgIGlmICghdmFs
aWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cykg
fHwgIXZhbGlkYXRlUmVuZGVyaW5nU3RhdGUobnVtRWxlbWVudHMpKSB7Ci0gICAgICAgICAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRyYXdFbGVtZW50cyIsICJhdHRlbXB0IHRv
IGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghdmFs
aWRhdGVSZW5kZXJpbmdTdGF0ZSgwKSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAiZHJhd0VsZW1lbnRzIiwgImF0dHJpYnMgbm90IHNldHVwIGNvcnJlY3RseSIpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250
ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCkpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiZHJhd0VsZW1lbnRzIiwgImZyYW1lYnVmZmVyIGNh
biBub3QgYmUgcmVuZGVyZWQgdG8iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjbGVh
cklmQ29tcG9zaXRlZCgpOwpAQCAtMTg3OSw3ICsxODgxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdD
M0RlbnUKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZShHQzNEZW51bSBjYXAp
CiB7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkp
CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KCJlbmFibGUi
LCBjYXApKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9URVNUKSB7CiAgICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0cnVlOwpAQCAt
MTg5Niw3ICsxODk4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2QKICAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4
QXR0cmlicykgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSIs
ICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTky
NiwyMSArMTkyOCwyMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmx1c2goKQogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0
LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlRnJh
bWVidWZmZXJGdW5jUGFyYW1ldGVycyh0YXJnZXQsIGF0dGFjaG1lbnQpKQorICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQogICAgICAgICByZXR1cm47
CiAgICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJp
bnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChidWZmZXIg
JiYgIWJ1ZmZlci0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAibm8gYnVmZmVyIG9y
IGJ1ZmZlciBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRhdGVk
OyBhbGwgY3VycmVudAogICAgIC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVybmFs
bHkgaW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQKICAgICAvLyBGQk8uCiAgICAgaWYgKCFtX2ZyYW1l
YnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAibm8gZnJh
bWVidWZmZXIgYm91bmQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBQbGF0Zm9ybTNE
T2JqZWN0IGJ1ZmZlck9iamVjdCA9IG9iamVjdE9yWmVybyhidWZmZXIpOwpAQCAtMTk5NywyMSAr
MTk5OSwyMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdAogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0
YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIEdDM0Rp
bnQgbGV2ZWwsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0
ZXJzKHRhcmdldCwgYXR0YWNobWVudCkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFs
aWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsIHRh
cmdldCwgYXR0YWNobWVudCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobGV2ZWwpIHsKLSAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCAibGV2ZWwgbm90IDAiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodGV4dHVyZSAmJiAhdGV4dHVyZS0+dmFs
aWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCAibm8gdGV4dHVyZSBvciB0ZXh0dXJlIG5vdCBmcm9t
IHRoaXMgY29udGV4dCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIERvbid0IGFs
bG93IHRoZSBkZWZhdWx0IGZyYW1lYnVmZmVyIHRvIGJlIG11dGF0ZWQ7IGFsbCBjdXJyZW50CiAg
ICAgLy8gaW1wbGVtZW50YXRpb25zIHVzZSBhbiBGQk8gaW50ZXJuYWxseSBpbiBwbGFjZSBvZiB0
aGUgZGVmYXVsdAogICAgIC8vIEZCTy4KICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nIHx8
ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIG9iamVjdE9yWmVybyh0ZXh0dXJlKSwg
bGV2ZWwpOwpAQCAtMjAzMSwxMSArMjAzMywxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQogewogICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRl
VGV4dHVyZUJpbmRpbmcodGFyZ2V0LCBmYWxzZSk7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2
YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJnZW5lcmF0ZU1pcG1hcCIsIHRhcmdldCwgZmFsc2UpOwog
ICAgIGlmICghdGV4KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF0ZXgtPmNhbkdlbmVyYXRl
TWlwbWFwcygpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2VuZXJhdGVNaXBtYXAi
LCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBub3QgYWxsIHRoZSBzYW1lIHNpemUiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBnZW5lcmF0ZU1pcG1hcCB3b24ndCB3b3JrIHBy
b3Blcmx5IGlmIG1pbkZpbHRlciBpcyBub3QgTkVBUkVTVF9NSVBNQVBfTElORUFSCkBAIC0yMDU5
LDcgKzIwNjEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXAo
R0MzRGVudW0gdGFyZ2V0KQogUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVp
bnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkK
KyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBY3Rp
dmVBdHRyaWIiLCBwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgQWN0aXZlSW5mbyBp
bmZvOwogICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0T3JaZXJvKHBy
b2dyYW0pLCBpbmRleCwgaW5mbykpCkBAIC0yMDcwLDcgKzIwNzIsNyBAQCBQYXNzUmVmUHRyPFdl
YkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIoV2Vi
R0xQcm9ncmFtKgogUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGlu
ZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAg
aWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QWN0aXZlVW5p
Zm9ybSIsIHByb2dyYW0pKQogICAgICAgICByZXR1cm4gMDsKICAgICBBY3RpdmVJbmZvIGluZm87
CiAgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3JaZXJvKHByb2dy
YW0pLCBpbmRleCwgaW5mbykpCkBAIC0yMDg1LDcgKzIwODcsNyBAQCBib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgVmVj
dG9yPFJlZgogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgc2hhZGVyT2JqZWN0cy5jbGVh
cigpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJv
Z3JhbSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgi
Z2V0QXR0YWNoZWRTaGFkZXJzIiwgcHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGNvbnN0IEdDM0RlbnVtIHNoYWRlclR5cGVbXSA9IHsKQEAgLTIxMDQsOSArMjEwNiw5IEBA
IEdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0CiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAg
ICAgICAgcmV0dXJuIC0xOwotICAgIGlmICghdmFsaWRhdGVMb2NhdGlvbkxlbmd0aChuYW1lKSkK
KyAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldEF0dHJpYkxvY2F0aW9uIiwgbmFt
ZSkpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKG5hbWUpKQor
ICAgIGlmICghdmFsaWRhdGVTdHJpbmcoImdldEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCiAgICAg
ICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihv
YmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwogfQpAQCAtMjExNywxMiArMjExOSwxMiBAQCBX
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bQogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpBUlJBWV9CVUZGRVIgJiYgdGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5U
X0FSUkFZX0JVRkZFUikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0QnVmZmVyUGFyYW1ldGVyIiwg
ImludmFsaWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICB9
CiAKICAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJVRkZFUl9TSVpFICYmIHBu
YW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfVVNBR0UpIHsKLSAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICB9CiAKQEAgLTIyMTEsMTEgKzIyMTMsMTEg
QEAgV2ViR0xFeHRlbnNpb24qIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgbmFtZSkKIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlRnJh
bWVidWZmZXJGdW5jUGFyYW1ldGVycyh0YXJnZXQsIGF0dGFjaG1lbnQpKQorICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZ2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogCiAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGlu
ZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgIm5vIGZyYW1l
YnVmZmVyIGJvdW5kIik7CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICB9CiAK
QEAgLTIyMjUsNyArMjIyNyw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0CiAgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKTsKICAgICAgICAg
Ly8gT3BlbkdMIEVTIDIuMCBzcGVjaWZpZXMgSU5WQUxJRF9FTlVNIGluIHRoaXMgY2FzZSwgd2hp
bGUgZGVza3RvcCBHTAogICAgICAgICAvLyBzcGVjaWZpZXMgSU5WQUxJRF9PUEVSQVRJT04uCi0g
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAg
ICAgfQogCkBAIC0yMjQ1LDcgKzIyNDcsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdAogICAg
ICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwogICAgICAgICAgICAgfQog
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgdGV4dHVy
ZSBhdHRhY2htZW50Iik7CiAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgewpAQCAtMjI1NSw3ICsyMjU3LDcgQEAgV2ViR0xHZXRJbmZvIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdD
M0RlbnVtIHQKICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9PQkpFQ1RfTkFNRToKICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFz
c1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4ocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1
ZmZlcio+KG9iamVjdCkpKTsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyIG5hbWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7CiAgICAgICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNDUwLDE3ICsyNDUyLDE3
IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNE
ZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYKICAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBR01F
TlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZl
cwogICAgICAgICBpZiAobV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKQogICAgICAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEV4dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVS
X0RFUklWQVRJVkVfSElOVF9PRVMpOwotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwg
ImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBub3QgZW5h
YmxlZCIpOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgY2FzZSBXZWJHTERl
YnVnUmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9SRU5ERVJFUl9XRUJHTDoKICAgICAgICAgaWYgKG1f
d2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
bV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSKSk7Ci0gICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VC
R0xfZGVidWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOwogICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CiAgICAgY2FzZSBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9W
RU5ET1JfV0VCR0w6CiAgICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCiAgICAg
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNz
Q29udGV4dDNEOjpWRU5ET1IpKTsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5vdCBlbmFi
bGVkIik7CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6VkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTOiAvLyBPRVNfdmVydGV4X2FycmF5X29iamVj
dAogICAgICAgICBpZiAobV9vZXNWZXJ0ZXhBcnJheU9iamVjdCkgewpAQCAtMjQ2OCwxMCArMjQ3
MCwxMCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIo
R0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+KG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdCkpOwogICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwog
ICAgICAgICB9Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJh
bWV0ZXIgbmFtZSwgT0VTX3ZlcnRleF9hcnJheV9vYmplY3Qgbm90IGVuYWJsZWQiKTsKICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgfQogfQpAQCAtMjQ3OSw3ICsyNDgxLDcgQEAgV2ViR0xH
ZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1l
LCBFeGNlcHRpb25Db2RlJgogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3JhbVBhcmFtZXRl
ciIsIHByb2dyYW0pKQogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAKICAgICBXZWJH
TFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwpAQCAtMjQ5OCw3ICsyNTAwLDcgQEAgV2ViR0xH
ZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIEcKICAgICAgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0
T3JaZXJvKHByb2dyYW0pLCBwbmFtZSwgJnZhbHVlKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyh2YWx1ZSk7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFByb2dyYW1Q
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CiAgICAgfQogfQpAQCAtMjUwOCw3ICsyNTEwLDcgQEAgU3RyaW5nIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFt
LCBFeGNlcHRpb24KICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmpl
Y3QocHJvZ3JhbSkpCisgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRQcm9ncmFtSW5m
b0xvZyIsIHByb2dyYW0pKQogICAgICAgICByZXR1cm4gIiI7CiAgICAgV2ViR0xTdGF0ZVJlc3Rv
cmVyKHRoaXMsIGZhbHNlKTsKICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRQcm9ncmFtSW5mb0xv
ZyhvYmplY3RPclplcm8ocHJvZ3JhbSkpOwpAQCAtMjUyMCwxMSArMjUyMiwxMSBAQCBXZWJHTEdl
dEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0Mz
RGVudW0gdGFyZ2V0LCBHQwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKICAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
ciIsICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAg
ICAgfQogICAgIGlmICghbV9yZW5kZXJidWZmZXJCaW5kaW5nIHx8ICFtX3JlbmRlcmJ1ZmZlckJp
bmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyIiwgIm5vIHJlbmRlcmJ1ZmZlciBib3VuZCIpOwogICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgfQogCkBAIC0yNTU0LDcgKzI1NTYsNyBAQCBXZWJHTEdl
dEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0Mz
RGVudW0gdGFyZ2V0LCBHQwogICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVJfSU5URVJOQUxfRk9STUFUOgogICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyht
X3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkpOwogICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwpA
QCAtMjU3Niw3ICsyNTc4LDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MKICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOgogICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0SW50ZXJuYWxGb3Jt
YXQoKSk7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKICAgICB9CiB9CkBAIC0yNTg0LDcgKzI1ODYsNyBAQCBXZWJHTEdldEluZm8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0g
dGFyZ2V0LCBHQwogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVy
UGFyYW1ldGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKKyAgICBpZiAoaXNDb250ZXh0TG9z
dCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFkZXJQYXJhbWV0ZXIiLCBzaGFkZXIp
KQogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVy
KHRoaXMsIGZhbHNlKTsKICAgICBHQzNEaW50IHZhbHVlID0gMDsKQEAgLTI1OTgsNyArMjYwMCw3
IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclBhcmFtZXRl
cihXZWJHTFNoYWRlciogc2hhZGVyLCBHQzNECiAgICAgICAgIG1fY29udGV4dC0+Z2V0U2hhZGVy
aXYob2JqZWN0T3JaZXJvKHNoYWRlciksIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUpKTsKICAgICBkZWZh
dWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFy
YW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIH0KIH0K
QEAgLTI2MDgsNyArMjYxMCw3IEBAIFN0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNo
YWRlckluZm9Mb2coV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kCiAgICAgVU5VU0VE
X1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCisgICAgaWYgKCF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFkZXJJbmZvTG9nIiwgc2hhZGVyKSkKICAgICAgICAg
cmV0dXJuICIiOwogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CiAgICAgcmV0
dXJuIG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhvYmplY3RPclplcm8oc2hhZGVyKSk7CkBA
IC0yNjE5LDcgKzI2MjEsNyBAQCBTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFk
ZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZQogICAgIFVOVVNFRF9Q
QVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQorICAgIGlmICghdmFs
aWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVyU291cmNlIiwgc2hhZGVyKSkKICAgICAgICAgcmV0
dXJuICIiOwogICAgIHJldHVybiBzaGFkZXItPmdldFNvdXJjZSgpOwogfQpAQCAtMjY1MSw3ICsy
NjUzLDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1l
dGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG4KICAgICBVTlVTRURfUEFSQU0oZWMpOwog
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
LSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcodGFyZ2V0LCBm
YWxzZSk7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJn
ZXRUZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsKICAgICBpZiAoIXRleCkKICAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxz
ZSk7CkBAIC0yNjY0LDcgKzI2NjYsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRUZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbgogICAgICAg
ICBtX2NvbnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CiAg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1
ZSkpOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIiLCAi
aW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CiAgICAgfQogfQpAQCAtMjY3MiwxMCArMjY3NCwxMCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bgogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybShXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiB1bmlmb3JtTG9jYXRp
b24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRVbmlmb3JtIiwg
cHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBpZiAoIXVuaWZv
cm1Mb2NhdGlvbiB8fCB1bmlmb3JtTG9jYXRpb24tPnByb2dyYW0oKSAhPSBwcm9ncmFtKSB7Ci0g
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0VW5pZm9ybSIsICJubyB1bmlmb3JtbG9jYXRp
b24gb3Igbm90IHZhbGlkIGZvciB0aGlzIHByb2dyYW0iKTsKICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOwogICAgIH0KICAgICBHQzNEaW50IGxvY2F0aW9uID0gdW5pZm9ybUxvY2F0aW9u
LT5sb2NhdGlvbigpOwpAQCAtMjc3Myw3ICsyNzc1LDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFdl
YkcKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICAgICAgLy8gQ2FuJ3QgaGFuZGxlIHRoaXMgdHlwZQotICAgICAgICAg
ICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVuaGFuZGxl
ZCB0eXBlIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3dpdGNoIChiYXNlVHlwZSkgewpAQCAt
MjgwOSwxOCArMjgxMSwxOCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViRwogICAgICAgICB9CiAg
ICAgfQogICAgIC8vIElmIHdlIGdldCBoZXJlLCBzb21ldGhpbmcgd2VudCB3cm9uZyBpbiBvdXIg
dW5mb3J0dW5hdGVseSBjb21wbGV4IGxvZ2ljIGFib3ZlCi0gICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRVbmlmb3Jt
IiwgInVua25vd24gZXJyb3IiKTsKICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiB9CiAKIFBh
c3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0VW5pZm9ybUxvY2F0
aW9uIiwgcHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmICghdmFsaWRhdGVMb2Nh
dGlvbkxlbmd0aChuYW1lKSkKKyAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldFVu
aWZvcm1Mb2NhdGlvbiIsIG5hbWUpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIXZhbGlk
YXRlU3RyaW5nKG5hbWUpKQorICAgIGlmICghdmFsaWRhdGVTdHJpbmcoImdldFVuaWZvcm1Mb2Nh
dGlvbiIsIG5hbWUpKQogICAgICAgICByZXR1cm4gMDsKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIo
dGhpcywgZmFsc2UpOwogICAgIEdDM0RpbnQgdW5pZm9ybUxvY2F0aW9uID0gbV9jb250ZXh0LT5n
ZXRVbmlmb3JtTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBuYW1lKTsKQEAgLTI4MzYs
NyArMjgzOCw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRl
eEF0dHJpYihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hCiAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwogICAgIGlm
IChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0
VmVydGV4QXR0cmliIiwgImluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CiAgICAgfQogICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6
OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0
VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOwpAQCAtMjg2MCw3ICsyODYyLDcgQEAgV2ViR0xHZXRJ
bmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4
LCBHQzNEZW51bSBwbmEKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVVJSRU5UX1ZFUlRF
WF9BVFRSSUI6CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQzMkFycmF5OjpjcmVh
dGUobV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF0udmFsdWUsIDQpKTsKICAgICBkZWZhdWx0Ogot
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiZ2V0VmVydGV4QXR0cmliIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUiKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIH0KIH0KQEAgLTI4ODks
NyArMjg5MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoaW50KEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gbW9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmICghaXNW
YWxpZCkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiaGludCIsICJpbnZhbGlkIHRhcmdldCIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29udGV4dC0+aGludCh0YXJnZXQsIG1vZGUpOwpA
QCAtMjkxNCw3ICsyOTE2LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQ29udGV4
dExvc3QoKQogCiBHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxlZChH
QzNEZW51bSBjYXApCiB7Ci0gICAgaWYgKCF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSB8fCBpc0Nv
bnRleHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmls
aXR5KCJpc0VuYWJsZWQiLCBjYXApKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gbV9j
b250ZXh0LT5pc0VuYWJsZWQoY2FwKTsKIH0KQEAgLTI5NzksNyArMjk4MSw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQorICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImxpbmtQcm9ncmFtIiwgcHJvZ3Jh
bSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewogICAg
ICAgICBpZiAoIXByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpW
RVJURVhfU0hBREVSKSB8fCAhcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikpIHsKQEAgLTMwMTQsNyArMzAxNiw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBw
YXJhbSkKICAgICAgICAgaWYgKHBhcmFtID09IEdyYXBoaWNzQ29udGV4dDNEOjpCUk9XU0VSX0RF
RkFVTFRfV0VCR0wgfHwgcGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpCiAgICAgICAg
ICAgICBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID0gc3RhdGljX2Nhc3Q8R0MzRGVudW0+
KHBhcmFtKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4
ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZF
UlNJT05fV0VCR0wiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKQEAgLTMwMjgsMTIgKzMwMzAsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQogICAgICAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwogICAgICAgICAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgYWxp
Z25tZW50Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KQEAgLTMwNTUsNyAr
MzA1Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDCiAgICAgQVNTRVJUKGNhbnZhcygpLT5v
cmlnaW5DbGVhbigpKTsKICAgICAvLyBWYWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzLgogICAgIGlm
ICghcGl4ZWxzKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInJlYWRQaXhlbHMiLCAibm8gZGVzdGlu
YXRpb24gQXJyYXlCdWZmZXJWaWV3Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgc3dp
dGNoIChmb3JtYXQpIHsKQEAgLTMwNjQsNyArMzA2Niw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDCiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiaW52YWxpZCBmb3Jt
YXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTMw
NzQsMjAgKzMwNzYsMjAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMo
R0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MKICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgogICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIHR5cGUi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBIHx8IHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUp
IHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgImZvcm1hdCBub3Qg
UkdCQSBvciB0eXBlIG5vdCBVTlNJR05FRF9CWVRFIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgLy8gVmFsaWRhdGUgYXJyYXkgdHlwZSBhZ2FpbnN0IHBpeGVsIHR5cGUuCiAgICAgaWYg
KCFwaXhlbHMtPmlzVW5zaWduZWRCeXRlQXJyYXkoKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50OEFycmF5Iik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFt
X2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVz
b3VyY2VTYWZlKCkpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJmcmFtZWJ1ZmZlciBub3QgcmVhZGFibGUiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBDYWxjdWxhdGUgYXJyYXkgc2l6ZSwgdGFraW5n
IGludG8gY29uc2lkZXJhdGlvbiBvZiBQQUNLX0FMSUdOTUVOVC4KQEAgLTMwOTUsMTEgKzMwOTcs
MTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MKICAgICB1bnNpZ25lZCBpbnQgcGFkZGluZzsK
ICAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMo
Zm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVz
UmVxdWlyZWQsICZwYWRkaW5nKTsKICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
Ok5PX0VSUk9SKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3Ip
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgInJlYWRQaXhlbHMiLCAiaW52YWxp
ZCBkaW1lbnNpb25zIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHBpeGVscy0+
Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJheUJ1ZmZlclZpZXcgbm90IGxhcmdlIGVub3VnaCBm
b3IgZGltZW5zaW9ucyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNsZWFySWZDb21w
b3NpdGVkKCk7CkBAIC0zMTQwLDE0ICszMTQyLDE0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJu
CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICh0YXJn
ZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUikgewotICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGlmICghbV9yZW5kZXJidWZmZXJCaW5kaW5nIHx8ICFtX3JlbmRlcmJ1
ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVu
ZGVyYnVmZmVyU3RvcmFnZSIsICJubyBib3VuZCByZW5kZXJidWZmZXIiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlU2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBp
ZiAoIXZhbGlkYXRlU2l6ZSgicmVuZGVyYnVmZmVyU3RvcmFnZSIsIHdpZHRoLCBoZWlnaHQpKQog
ICAgICAgICByZXR1cm47CiAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgewogICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2OgpAQCAtMzE3MSw3ICszMTczLDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm4KICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5n
LT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFs
aWQgaW50ZXJuYWxmb3JtYXQiKTsKICAgICB9CiB9CiAKQEAgLTMxODcsNyArMzE4OSw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlm
ICghdmFsaWRhdGVTaXplKCJzY2lzc29yIiwgd2lkdGgsIGhlaWdodCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBtX2NvbnRleHQtPnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTMxOTYsMTAgKzMxOTgsMTAgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHMKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaGFkZXJT
b3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQorICAgIGlmIChpc0NvbnRleHRM
b3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoInNoYWRlclNvdXJjZSIsIHNoYWRlcikpCiAg
ICAgICAgIHJldHVybjsKICAgICBTdHJpbmcgc3RyaW5nV2l0aG91dENvbW1lbnRzID0gU3RyaXBD
b21tZW50cyhzdHJpbmcpLnJlc3VsdCgpOwotICAgIGlmICghdmFsaWRhdGVTdHJpbmcoc3RyaW5n
V2l0aG91dENvbW1lbnRzKSkKKyAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJzaGFkZXJTb3VyY2Ui
LCBzdHJpbmdXaXRob3V0Q29tbWVudHMpKQogICAgICAgICByZXR1cm47CiAgICAgc2hhZGVyLT5z
ZXRTb3VyY2Uoc3RyaW5nKTsKICAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShvYmplY3RPclpl
cm8oc2hhZGVyKSwgc3RyaW5nV2l0aG91dENvbW1lbnRzKTsKQEAgLTMyMTAsNyArMzIxMiw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBH
QzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTdGVuY2lsRnVuYyhmdW5jKSkKKyAgICBp
ZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5jIiwgZnVuYykpCiAgICAgICAgIHJl
dHVybjsKICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwogICAgIG1fc3RlbmNpbEZ1bmNSZWZC
YWNrID0gcmVmOwpAQCAtMzIyNCw3ICszMjI2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MK
IHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2
YWxpZGF0ZVN0ZW5jaWxGdW5jKGZ1bmMpKQorICAgIGlmICghdmFsaWRhdGVTdGVuY2lsRnVuYygi
c3RlbmNpbEZ1bmNTZXBhcmF0ZSIsIGZ1bmMpKQogICAgICAgICByZXR1cm47CiAgICAgc3dpdGNo
IChmYWNlKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfQU5EX0JBQ0s6CkBA
IC0zMjQyLDcgKzMyNDQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1
bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQwogICAgICAgICBtX3N0
ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0Ogot
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAic3RlbmNpbEZ1bmNTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jU2VwYXJh
dGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKQEAgLTMyNzUsNyArMzI3Nyw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdD
M0R1aW50IG1hc2spCiAgICAgICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gbWFzazsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxNYXNrU2VwYXJh
dGUiLCAiaW52YWxpZCBmYWNlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250
ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwpAQCAtMzMwNCwxNCArMzMwNiwx
NCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZQogewogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdl
IGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCiAgICAgZWMgPSAwOwotICAgIGlmICghdmFsaWRh
dGVUZXhGdW5jUGFyYW1ldGVycyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUpKQorICAgIGlmICghdmFsaWRhdGVUZXhGdW5j
UGFyYW1ldGVycygidGV4SW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcodGFyZ2V0LCB0cnVl
KTsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleElt
YWdlMkQiLCB0YXJnZXQsIHRydWUpOwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKSB7CiAgICAgICAgIGlmIChsZXZlbCAmJiBXZWJH
TFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgInRleEltYWdlMkQiLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0zMzM1LDcgKzMzMzcsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZQogICAgIGVjID0gMDsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0
YTsKICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgZm9ybWF0LCB0
eXBlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lv
biA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSwgZGF0YSkpIHsKLSAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQpAQCAtMzM1MCw3ICszMzUyLDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEod2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQorICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleEltYWdlMkQiLCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIHBpeGVscykpCiAgICAgICAgIHJldHVybjsKICAgICB2b2lkKiBkYXRhID0g
cGl4ZWxzID8gcGl4ZWxzLT5iYXNlQWRkcmVzcygpIDogMDsKICAgICBWZWN0b3I8dWludDhfdD4g
dGVtcERhdGE7CkBAIC0zMzgxLDcgKzMzODMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtCiAg
ICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICBpZiAoIW1fY29u
dGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlw
WSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgewotICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCkBAIC0zMzk4LDcgKzM0MDAsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtCiAgICAgZWMgPSAwOwogICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChp
bWFnZSkpCisgICAgaWYgKCF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleEltYWdlMkQiLCBp
bWFnZSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAod291bGRUYWludE9yaWdpbihpbWFnZSkp
IHsKICAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CkBAIC0zNDE2LDcgKzM0MTgsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtCiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigpKSB7Ci0gICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgInRleEltYWdlMkQiLCAibm8gY2FudmFzIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oY2FudmFzKSkgewpAQCAtMzQzNSwxMyArMzQz
NywxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtCiBQYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJhbWVUb0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVv
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIXZpZGVvIHx8ICF2aWRlby0+dmlkZW9X
aWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0
ZXhJbWFnZTJEIiwgIm5vIHZpZGVvIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBJ
bnRTaXplIHNpemUodmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCkpOwog
ICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX3ZpZGVvQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7CiAg
ICAgaWYgKCFidWYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIsICJvdXQgb2Yg
bWVtb3J5Iik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpZiAod291bGRUYWludE9y
aWdpbih2aWRlbykpIHsKQEAgLTM0NzEsNyArMzQ3Myw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp0ZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGZsCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFdl
YkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyh0YXJnZXQsIGZhbHNlKTsK
KyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFBhcmFt
ZXRlciIsIHRhcmdldCwgZmFsc2UpOwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1cm47CiAg
ICAgc3dpdGNoIChwbmFtZSkgewpAQCAtMzQ4MiwxMiArMzQ4NCwxMiBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5h
bWUsIEdDM0RmbAogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9UOgog
ICAgICAgICBpZiAoKGlzRmxvYXQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFN
UF9UT19FREdFICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFU
ICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVQRUFUKQogICAgICAgICAgICAgfHwg
KCFpc0Zsb2F0ICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAm
JiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWkg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIik7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzRmxvYXQpIHsKQEAgLTM1MTgsMTkgKzM1MjAsMTkg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MKICAgICBlYyA9IDA7CiAgICAgaWYgKGlzQ29udGV4
dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1l
dGVycyh0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlw
ZSkpCisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJ0ZXhTdWJJbWFnZTJEIiwg
dGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUpKQog
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNpemUoeG9mZnNldCwgeW9mZnNldCkp
CisgICAgaWYgKCF2YWxpZGF0ZVNpemUoInRleFN1YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0
KSkKICAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0
dXJlQmluZGluZyh0YXJnZXQsIHRydWUpOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRh
dGVUZXh0dXJlQmluZGluZygidGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CiAgICAgaWYg
KCF0ZXgpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4LT5n
ZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4LT5nZXRIZWln
aHQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIs
ICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGlmICh0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpICE9IGZvcm1hdCB8fCB0
ZXgtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgIT0gdHlwZSkgewotICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgInRleFN1YkltYWdlMkQiLCAidHlwZSBhbmQgZm9ybWF0IGRvIG5vdCBtYXRjaCB0
ZXh0dXJlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT50ZXhTdWJJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzKTsKQEAgLTM1NDYsNyArMzU0OCw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDCiAgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAg
ICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgZm9ybWF0LCB0eXBlLCBm
bGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBH
cmFwaGljc0NvbnRleHQzRDo6Tk9ORSwgZGF0YSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4
U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICB0
ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBpbWFnZS0+
d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLApAQCAtMzU1Nyw3ICszNTU5LDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJy
YXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCBwaXhlbHMpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVGV4
RnVuY0RhdGEoInRleFN1YkltYWdlMkQiLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBp
eGVscykpCiAgICAgICAgIHJldHVybjsKICAgICB2b2lkKiBkYXRhID0gcGl4ZWxzID8gcGl4ZWxz
LT5iYXNlQWRkcmVzcygpIDogMDsKICAgICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7CkBAIC0z
NTg3LDcgKzM1ODksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbgogICAgICAgICByZXR1cm47
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJ
bWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2Uy
RCIsICJiYWQgaW1hZ2UgZGF0YSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHRleFN1
YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHBpeGVscy0+d2lk
dGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwKQEAgLTM2MDAsNyArMzYwMiw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGluCiAgICAgZWMgPSAwOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChpbWFnZSkpCisg
ICAgaWYgKCF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleFN1YkltYWdlMkQiLCBpbWFnZSkp
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAod291bGRUYWludE9yaWdpbihpbWFnZSkpIHsKICAg
ICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CkBAIC0zNjE3LDcgKzM2MTksNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbgogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpZiAoIWNhbnZhcyB8fCAhY2FudmFzLT5idWZmZXIoKSkgewotICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJ0ZXhTdWJJbWFnZTJEIiwgIm5vIGNhbnZhcyIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKGNhbnZhcykpIHsKQEAgLTM2NTMsNyArMzY1NSw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNECiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChs
b2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJ1bmlmb3JtMWYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dy
YW0iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzY2NCw3ICszNjY2LDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0QKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYs
IDEpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoInVuaWZvcm0xZnYiLCBsb2NhdGlvbiwgdiwgMSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2
LT5sZW5ndGgoKSk7CkBAIC0zNjc0LDcgKzM2NzYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZs
bwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUs
IDEpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoInVuaWZvcm0xZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6
ZSk7CkBAIC0zNjg4LDcgKzM2OTAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRAogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9n
cmFtKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTFpIiwgImxvY2F0aW9u
IG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTM2OTksNyArMzcwMSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWko
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNECiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycyhsb2NhdGlvbiwgdiwgMSkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFpdiIsIGxvY2F0aW9uLCB2LCAxKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpKTsKQEAgLTM3MDksNyArMzcxMSw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgSW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdD
M0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMo
bG9jYXRpb24sIHYsIHNpemUsIDEpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlk
YXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdiwgc2l6ZSk7CkBAIC0zNzIzLDcgKzM3MjUsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0o
KSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5p
Zm9ybTJmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTM3MzQsNyArMzczNiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtMmYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNECiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAyKSkKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMmZ2Iiwg
bG9jYXRpb24sIHYsIDIpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZv
cm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAyKTsK
QEAgLTM3NDQsNyArMzc0Niw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJm
diIsIGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250
ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gMik7CkBAIC0z
NzU4LDcgKzM3NjAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRAogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0g
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTJpIiwgImxvY2F0aW9uIG5vdCBmb3Ig
Y3VycmVudCBwcm9ncmFtIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM3NjksNyAr
Mzc3MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmkoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNECiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIElu
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhs
b2NhdGlvbiwgdiwgMikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycygidW5pZm9ybTJpdiIsIGxvY2F0aW9uLCB2LCAyKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2
LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMik7CkBAIC0zNzc5LDcgKzM3ODEsNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEludAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6
ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0
aW9uLCB2LCBzaXplLCAyKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMml2IiwgbG9jYXRpb24sIHYsIHNpemUsIDIpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24tPmxvY2F0
aW9uKCksIHYsIHNpemUgLyAyKTsKQEAgLTM3OTMsNyArMzc5NSw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNECiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgp
ICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlm
b3JtM2YiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMzgwNCw3ICszODA2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0QKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDMpKQorICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zZnYiLCBs
b2NhdGlvbiwgdiwgMykpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9y
bTNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDMpOwpA
QCAtMzgxNCw3ICszODE2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0z
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG8KIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAzKSkKKyAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2Z2
IiwgbG9jYXRpb24sIHYsIHNpemUsIDMpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRl
eHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyAzKTsKQEAgLTM4
MjgsNyArMzgzMCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2koY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNECiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtM2kiLCAibG9jYXRpb24gbm90IGZvciBj
dXJyZW50IHByb2dyYW0iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzgzOSw3ICsz
ODQxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaShjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0QKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50
MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxv
Y2F0aW9uLCB2LCAzKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZv
cm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRpb24sIHYsIDMpKQogICAgICAgICByZXR1
cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYt
PmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAzKTsKQEAgLTM4NDksNyArMzg1MSw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgSW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXpl
aSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRp
b24sIHYsIHNpemUsIDMpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMykpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgdiwgc2l6ZSAvIDMpOwpAQCAtMzg2Myw3ICszODY1LDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0QKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkg
IT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZv
cm00ZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0zODc0LDcgKzM4NzYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgNCkpCisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRmdiIsIGxv
Y2F0aW9uLCB2LCA0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3Jt
NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gNCk7CkBA
IC0zODg0LDcgKzM4ODYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsbwogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIHNpemUsIDQpKQorICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00ZnYi
LCBsb2NhdGlvbiwgdiwgc2l6ZSwgNCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4
dC0+dW5pZm9ybTRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDQpOwpAQCAtMzg5
OCw3ICszOTAwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aShjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0QKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm00aSIsICJsb2NhdGlvbiBub3QgZm9yIGN1
cnJlbnQgcHJvZ3JhbSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zOTA5LDcgKzM5
MTEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpKGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQz
MkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9j
YXRpb24sIHYsIDQpKQorICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlvbiwgdiwgNCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+
ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOwpAQCAtMzkxOSw3ICszOTIxLDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBJbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVp
IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlv
biwgdiwgc2l6ZSwgNCkpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycygidW5pZm9ybTRpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB2LCBzaXplIC8gNCk7CkBAIC0zOTI5LDcgKzM5MzEsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDMwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2Us
IEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQ
YXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDQpKQorICAgIGlmIChpc0NvbnRleHRM
b3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgy
ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKICAgICAgICAgcmV0dXJuOwogICAgIG1f
Y29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3Nl
LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKQEAgLTM5MzgsNyArMzk0MCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZs
b2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1N
YXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDQpKQorICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVu
aWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCA0KSkKICAgICAg
ICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9j
YXRpb24oKSwgdHJhbnNwb3NlLCB2LCBzaXplIC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKQEAgLTM5NDcsNyArMzk0OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxv
YXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFt
ZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgOSkpCisgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIs
IGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDkpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250
ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYt
PmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA5KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwpAQCAtMzk1Niw3ICszOTU4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW8KIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQq
IHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJp
eFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgOSkpCisgICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9y
bU1hdHJpeDNmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyA5KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwpAQCAtMzk2NSw3ICszOTY3LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW8K
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMy
QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVy
cyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCAxNikpCisgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8
fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxv
Y2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDE2KSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4
dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LT5k
YXRhKCksIHYtPmxlbmd0aCgpIC8gMTYpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CkBAIC0zOTc0LDcgKzM5NzYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpbwogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4
UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCAxNikpCisgICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9y
bU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDE2KSkKICAgICAgICAg
cmV0dXJuOwogICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgdHJhbnNwb3NlLCB2LCBzaXplIC8gMTYpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CkBAIC0zOTg0LDEyICszOTg2LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBib29sIGRlbGV0ZWQ7Ci0gICAgaWYg
KCFjaGVja09iamVjdFRvQmVCb3VuZChwcm9ncmFtLCBkZWxldGVkKSkKKyAgICBpZiAoIWNoZWNr
T2JqZWN0VG9CZUJvdW5kKCJ1c2VQcm9ncmFtIiwgcHJvZ3JhbSwgZGVsZXRlZCkpCiAgICAgICAg
IHJldHVybjsKICAgICBpZiAoZGVsZXRlZCkKICAgICAgICAgcHJvZ3JhbSA9IDA7CiAgICAgaWYg
KHByb2dyYW0gJiYgIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewotICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInVzZVByb2dyYW0iLCAicHJvZ3JhbSBub3QgdmFsaWQiKTsKICAgICAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTQwMDcsNyArNDAwOSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1c2VQcm9n
cmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQorICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoInZhbGlkYXRlUHJvZ3JhbSIs
IHByb2dyYW0pKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT52YWxpZGF0ZVByb2dy
YW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwpAQCAtNDAxNSw2MiArNDAxNyw2MiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZQog
CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB2MCkKIHsKLSAgICB2ZXJ0ZXhBdHRyaWJmSW1wbChpbmRleCwgMSwgdjAs
IDAuMGYsIDAuMGYsIDEuMGYpOworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIx
ZiIsIGluZGV4LCAxLCB2MCwgMC4wZiwgMC4wZiwgMS4wZik7CiB9CiAKIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJh
eSogdikKIHsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoaW5kZXgsIHYsIDEpOworICAgIHZlcnRl
eEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMWZ2IiwgaW5kZXgsIHYsIDEpOwogfQogCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQogewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbChp
bmRleCwgdiwgc2l6ZSwgMSk7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIx
ZnYiLCBpbmRleCwgdiwgc2l6ZSwgMSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQg
djEpCiB7Ci0gICAgdmVydGV4QXR0cmliZkltcGwoaW5kZXgsIDIsIHYwLCB2MSwgMC4wZiwgMS4w
Zik7CisgICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjJmIiwgaW5kZXgsIDIsIHYw
LCB2MSwgMC4wZiwgMS4wZik7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0
ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKIHsKLSAgICB2ZXJ0
ZXhBdHRyaWJmdkltcGwoaW5kZXgsIHYsIDIpOworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVy
dGV4QXR0cmliMmZ2IiwgaW5kZXgsIHYsIDIpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0Rz
aXplaSBzaXplKQogewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbChpbmRleCwgdiwgc2l6ZSwgMik7
CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZnYiLCBpbmRleCwgdiwgc2l6
ZSwgMik7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikK
IHsKLSAgICB2ZXJ0ZXhBdHRyaWJmSW1wbChpbmRleCwgMywgdjAsIHYxLCB2MiwgMS4wZik7Cisg
ICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjNmIiwgaW5kZXgsIDMsIHYwLCB2MSwg
djIsIDEuMGYpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmli
M2Z2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCiB7Ci0gICAgdmVydGV4QXR0cmli
ZnZJbXBsKGluZGV4LCB2LCAzKTsKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJp
YjNmdiIsIGluZGV4LCB2LCAzKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6
ZSkKIHsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoaW5kZXgsIHYsIHNpemUsIDMpOworICAgIHZl
cnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliM2Z2IiwgaW5kZXgsIHYsIHNpemUsIDMpOwog
fQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGYoR0MzRHVpbnQg
aW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9h
dCB2MykKIHsKLSAgICB2ZXJ0ZXhBdHRyaWJmSW1wbChpbmRleCwgNCwgdjAsIHYxLCB2MiwgdjMp
OworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0ZiIsIGluZGV4LCA0LCB2MCwg
djEsIHYyLCB2Myk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKIHsKLSAgICB2ZXJ0ZXhBdHRy
aWJmdkltcGwoaW5kZXgsIHYsIDQpOworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0
cmliNGZ2IiwgaW5kZXgsIHYsIDQpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBz
aXplKQogewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbChpbmRleCwgdiwgc2l6ZSwgNCk7CisgICAg
dmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0ZnYiLCBpbmRleCwgdiwgc2l6ZSwgNCk7
CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdD
M0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5v
cm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCBFeGNlcHRpb25D
b2RlJiBlYykKQEAgLTQwODYsMjkgKzQwODgsMjkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MK
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKICAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiaW52YWxp
ZCB0eXBlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGluZGV4ID49IG1fbWF4
VmVydGV4QXR0cmlicykgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVy
IiwgImluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlm
IChzaXplIDwgMSB8fCBzaXplID4gNCB8fCBzdHJpZGUgPCAwIHx8IHN0cmlkZSA+IDI1NSB8fCBv
ZmZzZXQgPCAwKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAi
YmFkIHNpemUsIHN0cmlkZSBvciBvZmZzZXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBpZiAoIW1fYm91bmRBcnJheUJ1ZmZlcikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
InZlcnRleEF0dHJpYlBvaW50ZXIiLCAibm8gYm91bmQgQVJSQVlfQlVGRkVSIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZWxlbWVudHMg
dGhlIGJvdW5kIGJ1ZmZlciBjYW4gaG9sZCwgZ2l2ZW4gdGhlIG9mZnNldCwgc2l6ZSwgdHlwZSBh
bmQgc3RyaWRlCiAgICAgdW5zaWduZWQgaW50IHR5cGVTaXplID0gc2l6ZUluQnl0ZXModHlwZSk7
CiAgICAgaWYgKCF0eXBlU2l6ZSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9p
bnRlciIsICJpbnZhbGlkIHR5cGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAo
KHN0cmlkZSAlIHR5cGVTaXplKSB8fCAob2Zmc2V0ICUgdHlwZVNpemUpKSB7Ci0gICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJzdHJpZGUgb3Igb2Zmc2V0
IG5vdCB2YWxpZCBmb3IgdHlwZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEdDM0Rz
aXplaSBieXRlc1BlckVsZW1lbnQgPSBzaXplICogdHlwZVNpemU7CkBAIC00MTMyLDcgKzQxMzQs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlld3BvcnQoR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRAogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU2l6ZSh3aWR0aCwgaGVpZ2h0KSkK
KyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgidmlld3BvcnQiLCB3aWR0aCwgaGVpZ2h0KSkKICAgICAg
ICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+dmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTQxNDEsNyArNDE0Myw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNECiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Zm9yY2VMb3N0Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Okxvc3RDb250ZXh0TW9kZSBt
b2RlKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJsb3NlQ29udGV4dCIsICJjb250ZXh0IGFscmVhZHkgbG9zdCIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC00MTY2LDcgKzQxNjgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6bG9zZUNvbnRleHRJbXBsKFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRl
eHRNbwogICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFcnJvcigpID09IEdyYXBoaWNzQ29udGV4
dDNEOjpOT19FUlJPUikKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0wp
OworICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpDT05URVhUX0xPU1Rf
V0VCR0wsICJsb3NlQ29udGV4dCIsICJjb250ZXh0IGxvc3QiKTsKIAogICAgIC8vIERvbid0IGFs
bG93IHJlc3RvcmF0aW9uIHVubGVzcyB0aGUgY29udGV4dCBsb3N0IGV2ZW50IGhhcyBib3RoIGJl
ZW4KICAgICAvLyBkaXNwYXRjaGVkIGFuZCBpdHMgZGVmYXVsdCBiZWhhdmlvciBwcmV2ZW50ZWQu
CkBAIC00MTgwLDEzICs0MTgyLDEzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpsb3Nl
Q29udGV4dEltcGwoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29udGV4dE1vCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VSZXN0b3JlQ29udGV4dCgpCiB7CiAgICAgaWYgKCFp
c0NvbnRleHRMb3N0KCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29u
dGV4dCIsICJjb250ZXh0IG5vdCBsb3N0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoIW1fcmVzdG9yZUFsbG93ZWQpIHsKICAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2Rl
ID09IFN5bnRoZXRpY0xvc3RDb250ZXh0KQotICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCByZXN0b3JhdGlvbiBub3QgYWxsb3dlZCIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00NDE3LDcgKzQ0MTksNyBAQCBpbnQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCkKICAgICByZXR1
cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCkgOiBt
X2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7CiB9CiAKLVdl
YkdMVGV4dHVyZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleHR1cmVCaW5kaW5n
KEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApCitXZWJHTFRleHR1
cmUqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXh0dXJlQmluZGluZyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1
YmVNYXApCiB7CiAgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSAwOwogICAgIHN3aXRjaCAodGFyZ2V0
KSB7CkBAIC00NDMxLDU4ICs0NDMzLDU4IEBAIFdlYkdMVGV4dHVyZSogV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKEdDM0RlbnVtIHRhcmdldCwgYm9vCiAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKICAg
ICAgICAgaWYgKCF1c2VTaXhFbnVtc0ZvckN1YmVNYXApIHsKLSAgICAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7CiAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICB0ZXggPSBtX3RleHR1cmVVbml0c1ttX2Fj
dGl2ZVRleHR1cmVVbml0XS5tX3RleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUDoKICAg
ICAgICAgaWYgKHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgewotICAgICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRzW21fYWN0
aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOwogICAgICAgICBi
cmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHRleHR1cmUgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpZiAo
IXRleCkKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIHRleHR1
cmUiKTsKICAgICByZXR1cm4gdGV4OwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVMb2NhdGlvbkxlbmd0aChjb25zdCBTdHJpbmcmIHN0cmluZykKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgY29uc3QgdW5zaWduZWQgbWF4
V2ViR0xMb2NhdGlvbkxlbmd0aCA9IDI1NjsKICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpID4gbWF4
V2ViR0xMb2NhdGlvbkxlbmd0aCkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
ImxvY2F0aW9uIGxlbmd0aCA+IDI1NiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVTaXplKEdDM0RpbnQgeCwgR0MzRGludCB5KQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlU2l6ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgeCwgR0MzRGlu
dCB5KQogewogICAgIGlmICh4IDwgMCB8fCB5IDwgMCkgewotICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgInNpemUgPCAwIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYg
c3RyaW5nKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aCgpOyAr
K2kpIHsKICAgICAgICAgaWYgKCF2YWxpZGF0ZUNoYXJhY3RlcihzdHJpbmdbaV0pKSB7Ci0gICAg
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzdHJpbmcgbm90IEFTQ0lJIik7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNG
b3JtYXRBbmRUeXBlKEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlKQogewogICAgIHN3
aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CkBAIC00
NDkyLDcgKzQ0OTQsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhG
dW5jRm9ybWF0QW5kVHlwZShHQzNEZW51bSBmb3JtYXQsIEdDM0RlbgogICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkE6CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBmb3JtYXQiKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDUwNSwxMCArNDUwNywxMCBAQCBib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgogICAg
ICAgICBpZiAobV9vZXNUZXh0dXJlRmxvYXQpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTQ1MTksNyArNDUyMSw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVuCiAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgogICAgICAgICBpZiAodHlwZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQogICAgICAgICAgICAgJiYgdHlwZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBmb3JtYXQiKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTQ1Mjcs
NyArNDUyOSw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNG
b3JtYXRBbmRUeXBlKEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVuCiAgICAgICAgIGlmICh0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCiAgICAgICAgICAgICAmJiB0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNQogICAgICAgICAgICAgJiYg
dHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQpIHsKLSAgICAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBSR0IgZm9ybWF0
Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CkBAIC00NTM2LDcgKzQ1MzgsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVUZXhGdW5jRm9ybWF0QW5kVHlwZShHQzNEZW51bSBmb3JtYXQsIEdDM0RlbgogICAgICAgICAg
ICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNAog
ICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRf
NV81XzVfMQogICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQp
IHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52
YWxpZCB0eXBlIGZvciBSR0JBIGZvcm1hdCIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtNDU0NywxNiArNDU0OSwxNiBAQCBib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0xldmVs
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
KQogewogICAgIGlmIChsZXZlbCA8IDApIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJsZXZlbCA8IDAiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBzd2l0
Y2ggKHRhcmdldCkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6CiAg
ICAgICAgIGlmIChsZXZlbCA+IG1fbWF4VGV4dHVyZUxldmVsKSB7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTQ1NjcsNyAr
NDU2OSw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNMZXZl
bChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpCiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKICAgICAgICAgaWYgKGxldmVsID4g
bV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTQ1NzcsNyArNDU3OSw4IEBAIGJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNMZXZlbChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRl
eEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSkKQEAgLTQ1ODUsMTggKzQ1ODgsMTggQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGwKICAgICAv
LyBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRhdGUgdGhlIGZvcm1hdCBhbmQgdHlwZSBjb21i
aW5hdGlvbi4KICAgICAvLyBUaGUgdGV4SW1hZ2UyRCBlbnRyeSBwb2ludHMgdGFraW5nIEhUTUxJ
bWFnZSwgZXRjLiB3aWxsIHByb2R1Y2UKICAgICAvLyB0ZW1wb3JhcnkgZGF0YSBiYXNlZCBvbiB0
aGlzIGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJlIGxlZ2FsLgotICAgIGlmICghdmFsaWRhdGVU
ZXhGdW5jRm9ybWF0QW5kVHlwZShmb3JtYXQsIHR5cGUpIHx8ICF2YWxpZGF0ZVRleEZ1bmNMZXZl
bCh0YXJnZXQsIGxldmVsKSkKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUo
ZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5cGUpIHx8ICF2YWxpZGF0ZVRleEZ1bmNMZXZlbChmdW5j
dGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKICAgICBzd2l0Y2ggKHRhcmdldCkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQ6CiAgICAgICAgIGlmICh3aWR0aCA+IG1fbWF4VGV4dHVyZVNpemUgfHwgaGVp
Z2h0ID4gbV9tYXhUZXh0dXJlU2l6ZSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSIpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtNDYwNyw0MiArNDYx
MCw0MyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jUGFyYW1l
dGVycyhHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbAogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CiAgICAgICAgIGlmICh3aWR0aCAhPSBo
ZWlnaHQgfHwgd2lkdGggPiBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSkgewotICAgICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggIT0gaGVpZ2h0IG9yIHdpZHRoIG9y
IGhlaWdodCBvdXQgb2YgcmFuZ2UgZm9yIGN1YmUgbWFwIik7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAogICAgIGlmIChmb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQpIHsKLSAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCAhPSBpbnRlcm5h
bGZvcm1hdCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKGJvcmRl
cikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJvcmRlciAhPSAwIik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0RhdGEoR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMpCiB7CiAg
ICAgaWYgKCFwaXhlbHMpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCF2YWxpZGF0
ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZvcm1hdCwgdHlwZSkpCisgICAgaWYgKCF2YWxpZGF0ZVRl
eEZ1bmNGb3JtYXRBbmRUeXBlKGZ1bmN0aW9uTmFtZSwgZm9ybWF0LCB0eXBlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURToKICAgICAgICAgaWYgKCFwaXhlbHMtPmlzVW5zaWduZWRC
eXRlQXJyYXkoKSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlv
bk5hbWUsICJ0eXBlIFVOU0lHTkVEX0JZVEUgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWludDhB
cnJheSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwpAQCAtNDY1MCwxMyArNDY1NCwxMyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVUZXhGdW5jRGF0YShHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaAogICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CiAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKICAgICAgICAgaWYg
KCFwaXhlbHMtPmlzVW5zaWduZWRTaG9ydEFycmF5KCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBVTlNJR05FRF9TSE9SVCBidXQgQXJy
YXlCdWZmZXJWaWV3IG5vdCBVaW50MTZBcnJheSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAogICAgICAgICBpZiAoIXBpeGVscy0+aXNGbG9h
dEFycmF5KCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCAidHlwZSBGTE9BVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBGbG9hdDMyQXJyYXkiKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAg
LTQ2NjcsMTcgKzQ2NzEsMTcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
VGV4RnVuY0RhdGEoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2gKICAgICB1bnNpZ25l
ZCBpbnQgdG90YWxCeXRlc1JlcXVpcmVkOwogICAgIEdDM0RlbnVtIGVycm9yID0gbV9jb250ZXh0
LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1f
dW5wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKICAgICBpZiAoZXJyb3Ig
IT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoZXJyb3IpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGRpbWVuc2lvbnMiKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5
dGVzUmVxdWlyZWQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
IkFycmF5QnVmZmVyVmlldyBub3QgYmlnIGVub3VnaCBmb3IgcmVxdWVzdCIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVEcmF3TW9kZShHQzNEZW51bSBtb2RlKQorYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd01vZGUoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlBPSU5UUzoKQEAgLTQ2ODksMjEgKzQ2OTMsMjEgQEAgYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd01vZGUoR0MzRGVudW0gbW9kZSkKICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVM6CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZHJh
dyBtb2RlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAKLWJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncygpCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lKQogewogICAgIGlmIChtX3N0ZW5jaWxNYXNrICE9IG1fc3RlbmNpbE1hc2tCYWNrIHx8
IG1fc3RlbmNpbEZ1bmNSZWYgIT0gbV9zdGVuY2lsRnVuY1JlZkJhY2sgfHwgbV9zdGVuY2lsRnVu
Y01hc2sgIT0gbV9zdGVuY2lsRnVuY01hc2tCYWNrKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJmcm9udCBhbmQgYmFjayBzdGVuY2lscyBzZXR0aW5ncyBkbyBu
b3QgbWF0Y2giKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU3RlbmNpbEZ1bmMo
R0MzRGVudW0gZnVuYykKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0ZW5j
aWxGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZnVuYykKIHsKICAgICBz
d2l0Y2ggKGZ1bmMpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpORVZFUjoKQEAgLTQ3
MTYsNyArNDcyMCw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0ZW5j
aWxGdW5jKEdDM0RlbnVtIGZ1bmMpCiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxXQVlT
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIGZ1bmN0aW9uIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiB9CkBAIC00NzI2LDEwICs0NzMwLDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpwcmludFdhcm5pbmdUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIGNh
bnZhcygpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5kb21XaW5kb3coKS0+Y29uc29sZSgpLT5hZGRN
ZXNzYWdlKEhUTUxNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgV2FybmluZ01lc3NhZ2VM
ZXZlbCwgbWVzc2FnZSwgY2FudmFzKCktPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKTsKIH0K
IAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFy
YW1ldGVycyhHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50
KQogewogICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7
Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgc3dpdGNoIChhdHRhY2htZW50KSB7CkBAIC00
NzM5LDEzICs0NzQzLDEzIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZy
YW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoR0MzRGVudW0gdGFyZ2V0LCBHCiAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0
dGFjaG1lbnQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlv
bihHQzNEZW51bSBtb2RlKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxl
bmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUpCiB7CiAg
ICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19BREQ6
CkBAIC00NzUzLDI0ICs0NzU3LDI0IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZUJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpGVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgbW9kZSIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKEdDM0RlbnVtIHNyYywgR0MzRGVudW0gZHN0
KQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHNyYywgR0MzRGVudW0gZHN0KQogewog
ICAgIGlmICgoKHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1IgfHwgc3Jj
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCiAgICAgICAg
ICAmJiAoZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8fCBkc3QgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpCiAgICAgICAgIHx8
ICgoZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9DT0xPUiB8fCBkc3QgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9DT0xPUikKICAgICAgICAgICAgICYm
IChzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0FMUEhBIHx8IHNyYyA9PSBHcmFw
aGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKSkpIHsKLSAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImluY29tcGF0aWJsZSBzcmMgYW5kIGRzdCIp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDYXBhYmlsaXR5KEdDM0RlbnVtIGNh
cCkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBjYXApCiB7CiAgICAgc3dpdGNoIChjYXApIHsK
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKQEAgLTQ3ODQsNjcgKzQ3ODgsNjcg
QEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ2FwYWJpbGl0eShHQzNEZW51
bSBjYXApCiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUOgogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIGNhcGFiaWxpdHkiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IH0KIAotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYs
IEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6
ZWkgcmVxdWlyZWRNaW5TaXplKQogewogICAgIGlmICghdikgewotICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIGZh
bHNlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworICAgIHJldHVy
biB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24s
IGZhbHNlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOwogfQogCi1i
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEdDM0RzaXpl
aSByZXF1aXJlZE1pblNpemUpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVk
TWluU2l6ZSkKIHsKICAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJubyBhcnJheSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIHJldHVy
biB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0
YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXplKTsKKyAgICByZXR1cm4gdmFsaWRhdGVV
bmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdi0+
ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXplKTsKIH0KIAotYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVp
IHJlcXVpcmVkTWluU2l6ZSkKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVp
IHJlcXVpcmVkTWluU2l6ZSkKIHsKLSAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFy
YW1ldGVycyhsb2NhdGlvbiwgZmFsc2UsIHYsIHNpemUsIHJlcXVpcmVkTWluU2l6ZSk7CisgICAg
cmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2Nh
dGlvbiwgZmFsc2UsIHYsIHNpemUsIHJlcXVpcmVkTWluU2l6ZSk7CiB9CiAKLWJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9h
dDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCitib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1pblNp
emUpCiB7CiAgICAgaWYgKCF2KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
bm8gYXJyYXkiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICByZXR1cm4gdmFs
aWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRh
KCksIHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworICAgIHJldHVybiB2YWxpZGF0ZVVu
aWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIHRyYW5zcG9zZSwg
di0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXplKTsKIH0KIAotYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIHZv
aWQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQorYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgdm9pZCogdiwgR0MzRHNpemVpIHNpemUsIEdDM0Rz
aXplaSByZXF1aXJlZE1pblNpemUpCiB7CiAgICAgaWYgKCFsb2NhdGlvbikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dy
YW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9u
IGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJvZ3JhbSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIGlmICghdikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5v
IGFycmF5Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKHRyYW5zcG9z
ZSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInRyYW5zcG9zZSBub3QgRkFM
U0UiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoc2l6ZSA8IHJlcXVp
cmVkTWluU2l6ZSB8fCAoc2l6ZSAlIHJlcXVpcmVkTWluU2l6ZSkpIHsKLSAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotV2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHVzYWdlKQorV2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpCiB7CiAgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9
IDA7CiAgICAgc3dpdGNoICh0YXJnZXQpIHsKQEAgLTQ4NTUsMTEgKzQ4NTksMTEgQEAgV2ViR0xC
dWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVy
cyhHQzNEZW51bSB0YXJnZXQKICAgICAgICAgYnVmZmVyID0gbV9ib3VuZEFycmF5QnVmZmVyLmdl
dCgpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAg
ICAgaWYgKCFidWZmZXIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgIm5vIGJ1ZmZlciIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgc3dpdGNoICh1
c2FnZSkgewpAQCAtNDg2OCwzMCArNDg3MiwzMCBAQCBXZWJHTEJ1ZmZlciogV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKEdDM0RlbnVtIHRhcmdldAog
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJBVzoKICAgICAgICAgcmV0dXJu
IGJ1ZmZlcjsKICAgICB9Ci0gICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHVzYWdlIik7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUhUTUxJbWFnZUVsZW1lbnQoSFRNTEltYWdlRWxlbWVudCogaW1hZ2UpCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UpCiB7CiAgICAgaWYgKCFpbWFnZSB8fCAh
aW1hZ2UtPmNhY2hlZEltYWdlKCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJubyBpbWFnZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGNvbnN0IEtV
UkwmIHVybCA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5yZXNwb25zZSgpLnVybCgpOwogICAgIGlm
ICh1cmwuaXNOdWxsKCkgfHwgdXJsLmlzRW1wdHkoKSB8fCAhdXJsLmlzVmFsaWQoKSkgewotICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgaW1hZ2UiKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJbXBsKEdDM0R1aW50IGluZGV4LCBHQzNEc2l6
ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYy
LCBHQzNEZmxvYXQgdjMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmli
ZkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0MzRHNpemVp
IGV4cGVjdGVkU2l6ZSwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2Miwg
R0MzRGZsb2F0IHYzKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUp
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZh
bHVlcy4KQEAgLTQ5MTksMzEgKzQ5MjMsMzEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYmZJbXBsKEdDM0R1aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWQKICAg
ICBhdHRyaWJWYWx1ZS52YWx1ZVszXSA9IHYzOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliZnZJbXBsKEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYs
IEdDM0RzaXplaSBleHBlY3RlZFNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliZnZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgs
IEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSkKIHsKICAgICBpZiAoaXND
b250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF2KSB7Ci0gICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoaW5kZXgsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCks
IGV4cGVjdGVkU2l6ZSk7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKGZ1bmN0aW9uTmFtZSwgaW5k
ZXgsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIGV4cGVjdGVkU2l6ZSk7CiB9CiAKLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEdDM0RzaXplaSBleHBlY3RlZFNpemUpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZnZJbXBsKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUs
IEdDM0RzaXplaSBleHBlY3RlZFNpemUpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGlmICghdikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9u
TmFtZSwgIm5vIGFycmF5Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHNpemUg
PCBleHBlY3RlZFNpemUpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHNpemUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaW5kZXggPj0gbV9t
YXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW5k
ZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gSW4gR0ws
IHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KQEAgLTUxMDIsNyArNTEwNiw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXliZVJlc3RvcmVDb250ZXh0KFRpbWVy
PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4qKQogICAgICAgICAgICAgbV9yZXN0b3JlVGltZXIuc3Rh
cnRPbmVTaG90KHNlY29uZHNCZXR3ZWVuUmVzdG9yZUF0dGVtcHRzKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgLy8gVGhpcyBsaWtlbHkgc2hvdWxkbid0IGhhcHBlbiBidXQgaXMgdGhlIGJl
c3Qgd2F5IHRvIHJlcG9ydCBpdCB0byB0aGUgV2ViR0wgYXBwLgotICAgICAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAiIiwgImVycm9yIHJlc3RvcmluZyBjb250ZXh0Iik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTUxNTUsNiArNTE1OSw0MCBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6YnViYmxlVG9Gcm9udChpbnQgaWR4KQog
ICAgICAgICBtX2J1ZmZlcnNbaV0uc3dhcChtX2J1ZmZlcnNbaS0xXSk7CiB9CiAKK25hbWVzcGFj
ZSB7CisKKyAgICBTdHJpbmcgR2V0RXJyb3JTdHJpbmcoR0MzRGVudW0gZXJyb3IpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTToKKyAgICAgICAgICAgIHJldHVybiAiSU5WQUxJRF9FTlVNIjsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRToKKyAgICAgICAgICAgIHJl
dHVybiAiSU5WQUxJRF9WQUxVRSI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OOgorICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX09QRVJBVElPTiI7
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlk6CisgICAgICAg
ICAgICByZXR1cm4gIk9VVF9PRl9NRU1PUlkiOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoKKyAgICAgICAgICAgIHJldHVybiAi
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04iOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0w6CisgICAgICAgICAgICByZXR1cm4gIkNPTlRFWFRf
TE9TVF9XRUJHTCI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5n
Ojpmb3JtYXQoIldlYkdMIEVSUk9SKCUwNHgpIiwgZXJyb3IpOworICAgICAgICB9CisgICAgfQor
Cit9IC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQoreworICAgIGlmIChtX3N5bnRoZXNpemVkRXJy
b3JzVG9Db25zb2xlKSB7CisgICAgICBTdHJpbmcgc3RyID0gU3RyaW5nKCJXZWJHTDogIikgKyBH
ZXRFcnJvclN0cmluZyhlcnJvcikgKyAgIjogIiArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsgIjog
IiArIFN0cmluZyhkZXNjcmlwdGlvbik7CisgICAgICBwcmludFdhcm5pbmdUb0NvbnNvbGUoc3Ry
KTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihlcnJvcik7Cit9CisK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaApp
bmRleCAxODI5MWZkZDZmMjNmZTQzNTkzMGM5YmFkMjc2NjE5YjhmNTU4NzcxLi42MjBiNGQ0ZTY3
YWI5MDliZDIzN2Y5YTNiMjcwNDkwYWQwMGI1YzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaApAQCAtMzY1LDcgKzM2NSw3IEBA
IHB1YmxpYzoKICAgICAvLyBJZiBudW1FbGVtZW50cyA8PSAwLCB3ZSBvbmx5IGNoZWNrIGlmIGVh
Y2ggZW5hYmxlZCB2ZXJ0ZXggYXR0cmlidXRlIGlzIGJvdW5kIHRvIGEgYnVmZmVyLgogICAgIGJv
b2wgdmFsaWRhdGVSZW5kZXJpbmdTdGF0ZShpbnQgbnVtRWxlbWVudHMpOwogCi0gICAgYm9vbCB2
YWxpZGF0ZVdlYkdMT2JqZWN0KFdlYkdMT2JqZWN0Kik7CisgICAgYm9vbCB2YWxpZGF0ZVdlYkdM
T2JqZWN0KGNvbnN0IGNoYXIqLCBXZWJHTE9iamVjdCopOwogCiAjaWYgRU5BQkxFKFZJREVPKQog
ICAgIFBhc3NSZWZQdHI8SW1hZ2U+IHZpZGVvRnJhbWVUb0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQq
LCBFeGNlcHRpb25Db2RlJik7CkBAIC00OTEsNiArNDkxLDggQEAgcHVibGljOgogICAgIGJvb2wg
bV9pc1Jlc291cmNlU2FmZTsKICAgICBib29sIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQ7CiAK
KyAgICBib29sIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGU7CisKICAgICAvLyBFbmFibGVk
IGV4dGVuc2lvbiBvYmplY3RzLgogICAgIE93blB0cjxPRVNUZXh0dXJlRmxvYXQ+IG1fb2VzVGV4
dHVyZUZsb2F0OwogICAgIE93blB0cjxPRVNTdGFuZGFyZERlcml2YXRpdmVzPiBtX29lc1N0YW5k
YXJkRGVyaXZhdGl2ZXM7CkBAIC01NDcsMzIgKzU0OSwzMyBAQCBwdWJsaWM6CiAgICAgaW50IGdl
dEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2
ZXJpZnkgbGltaXRzIG9uIHRoZSBsZW5ndGggb2YgdW5pZm9ybSBhbmQgYXR0cmlidXRlIGxvY2F0
aW9ucy4KLSAgICBib29sIHZhbGlkYXRlTG9jYXRpb25MZW5ndGgoY29uc3QgU3RyaW5nJik7Cisg
ICAgYm9vbCB2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgU3RyaW5nJik7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgc2l6
ZSBpcyBub24tbmVnYXRpdmUuCiAgICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgYW5kIHJldHVybiBm
YWxzZSBmb3IgbmVnYXRpdmUgaW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0cnVlLgotICAgIGJv
b2wgdmFsaWRhdGVTaXplKEdDM0RpbnQgeCwgR0MzRGludCB5KTsKKyAgICBib29sIHZhbGlkYXRl
U2l6ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgeCwgR0MzRGludCB5KTsKIAog
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUg
c3RyaW5nIGJlbG9uZyB0byB0aGUKICAgICAvLyBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBpbiBH
TFNMIEVTIDEuMCBzcGVjIHNlY3Rpb24gMy4xLgotICAgIGJvb2wgdmFsaWRhdGVTdHJpbmcoY29u
c3QgU3RyaW5nJik7CisgICAgYm9vbCB2YWxpZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIGNvbnN0IFN0cmluZyYpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNr
IHRhcmdldCBhbmQgdGV4dHVyZSBib3VuZCB0byB0aGUgdGFyZ2V0LgogICAgIC8vIEdlbmVyYXRl
IEdMIGVycm9ycyBhbmQgcmV0dXJuIDAgaWYgdGFyZ2V0IGlzIGludmFsaWQgb3IgdGV4dHVyZSBi
b3VuZCBpcwogICAgIC8vIG51bGwuICBPdGhlcndpc2UsIHJldHVybiB0aGUgdGV4dHVyZSBib3Vu
ZCB0byB0aGUgdGFyZ2V0LgotICAgIFdlYkdMVGV4dHVyZSogdmFsaWRhdGVUZXh0dXJlQmluZGlu
ZyhHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKTsKKyAgICBXZWJH
TFRleHR1cmUqIHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKTsKIAogICAgIC8v
IEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBmb3JtYXQvdHlwZSBmb3IgZnVuY3Rpb25z
IHtjb3B5fVRleHtTdWJ9SW1hZ2UuCiAgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1
cm5zIGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCi0gICAgYm9vbCB2YWxpZGF0ZVRl
eEZ1bmNGb3JtYXRBbmRUeXBlKEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSk7CisgICAg
Ym9vbCB2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlKTsKIAogICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB0byBjaGVjayBpbnB1dCBsZXZlbCBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1h
Z2UuCiAgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIGxldmVs
IGlzIGludmFsaWQuCi0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNMZXZlbChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwpOworICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpOwogCiAg
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZ1bmN0
aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgogICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQg
cmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIGJvb2wgdmFsaWRh
dGVUZXhGdW5jUGFyYW1ldGVycyhHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCisgICAg
Ym9vbCB2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlKTsK
QEAgLTU4MCwxOCArNTgzLDE5IEBAIHB1YmxpYzoKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
dmFsaWRhdGUgdGhhdCB0aGUgZ2l2ZW4gQXJyYXlCdWZmZXJWaWV3CiAgICAgLy8gaXMgb2YgdGhl
IGNvcnJlY3QgdHlwZSBhbmQgY29udGFpbnMgZW5vdWdoIGRhdGEgZm9yIHRoZSB0ZXhJbWFnZSBj
YWxsLgogICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJh
bWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jRGF0YShHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNEYXRh
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKTsKIAogICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB0byB2YWxpZGF0ZSBtb2RlIGZvciBkcmF3e0FycmF5cy9FbGVtZW50c30uCi0gICAg
Ym9vbCB2YWxpZGF0ZURyYXdNb2RlKEdDM0RlbnVtKTsKKyAgICBib29sIHZhbGlkYXRlRHJhd01v
ZGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7CiAKICAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gdG8gdmFsaWRhdGUgaWYgZnJvbnQvYmFjayBzdGVuY2lsTWFzayBhbmQgc3RlbmNp
bEZ1bmMgc2V0dGluZ3MgYXJlIHRoZSBzYW1lLgotICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsU2V0
dGluZ3MoKTsKKyAgICBib29sIHZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSk7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgc3RlbmNp
bCBmdW5jLgotICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsRnVuYyhHQzNEZW51bSk7CisgICAgYm9v
bCB2YWxpZGF0ZVN0ZW5jaWxGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0p
OwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXhQYXJhbWV0ZXJmIGFuZCB0ZXhQYXJh
bWV0ZXJpLgogICAgIHZvaWQgdGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cG5hbWUsIEdDM0RmbG9hdCBwYXJhbWksIEdDM0RpbnQgcGFyYW1mLCBib29sIGlzRmxvYXQpOwpA
QCAtNjAyLDM1ICs2MDYsMzUgQEAgcHVibGljOgogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRv
IHZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZyYW1lYnVmZmVyIGZ1bmN0aW9ucy4KICAg
ICAvLyBHZW5lcmF0ZSBHTCBlcnJvciBpZiBwYXJhbWV0ZXJzIGFyZSBpbGxlZ2FsLgotICAgIGJv
b2wgdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gYXR0YWNobWVudCk7CisgICAgYm9vbCB2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFt
ZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IGF0dGFjaG1lbnQpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGJsZW5k
IGVxdWF0aW9uIG1vZGUuCi0gICAgYm9vbCB2YWxpZGF0ZUJsZW5kRXF1YXRpb24oR0MzRGVudW0p
OworICAgIGJvb2wgdmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRGVudW0pOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGJsZW5k
IGZ1bmMgZmFjdG9ycy4KLSAgICBib29sIHZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhHQzNEZW51
bSBzcmMsIEdDM0RlbnVtIGRzdCk7CisgICAgYm9vbCB2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCk7CiAK
ICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYSBHTCBjYXBhYmlsaXR5LgotICAg
IGJvb2wgdmFsaWRhdGVDYXBhYmlsaXR5KEdDM0RlbnVtKTsKKyAgICBib29sIHZhbGlkYXRlQ2Fw
YWJpbGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKIAogICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB1bmlmb3JtIGZ1
bmN0aW9ucy4KLSAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qLCBGbG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgbW9kKTsKLSAgICBib29s
IHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBJ
bnQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJh
bWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgdm9pZCosIEdDM0RzaXplaSBzaXpl
LCBHQzNEc2l6ZWkgbW9kKTsKLSAgICBib29sIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRl
cnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZs
b2F0MzJBcnJheSosIEdDM0RzaXplaSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0
cml4UGFyYW1ldGVycyhjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEdDM0Rib29sZWFuIHRy
YW5zcG9zZSwgdm9pZCosIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgbW9kKTsKKyAgICBib29s
IHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEZsb2F0MzJBcnJheSosIEdDM0RzaXplaSBtb2QpOwor
ICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgSW50MzJBcnJheSosIEdDM0RzaXplaSBt
b2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgdm9pZCosIEdDM0RzaXplaSwg
R0MzRHNpemVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJz
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSosIEdDM0RzaXplaSBtb2QpOworICAg
IGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCB2b2lkKiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKIAogICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB0byB2YWxpZGF0ZSBwYXJhbWV0ZXJzIGZvciBidWZmZXJEYXRhLgogICAgIC8vIFJldHVy
biB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFyZ2V0LCBvciAwIGlmIHBhcmFtZXRlcnMg
YXJlIGludmFsaWQuCi0gICAgV2ViR0xCdWZmZXIqIHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRl
cnMoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSB1c2FnZSk7CisgICAgV2ViR0xCdWZmZXIqIHZh
bGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHVzYWdlKTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiBm
b3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBpbWFnZSBpcyByZWFkeS4KLSAgICBib29s
IHZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50Kik7CisgICAgYm9vbCB2
YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MSW1h
Z2VFbGVtZW50Kik7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciB2ZXJ0ZXhBdHRyaWJO
Znt2fS4KLSAgICB2b2lkIHZlcnRleEF0dHJpYmZJbXBsKEdDM0R1aW50IGluZGV4LCBHQzNEc2l6
ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxv
YXQpOwotICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBsKEdDM0R1aW50IGluZGV4LCBGbG9hdDMy
QXJyYXkqLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYmZ2
SW1wbChHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiwgR0MzRHNpemVpIHNpemUsIEdDM0RzaXpl
aSBleHBlY3RlZFNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliZkltcGwoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSwgR0Mz
RGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KTsKKyAgICB2b2lkIHZlcnRl
eEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBG
bG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKTsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNE
ZmxvYXQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBleHBlY3RlZFNpemUpOwogCiAgICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIGZvciBkZWxldGUqIChkZWxldGVCdWZmZXIsIGRlbGV0ZVByb2dyYW0sIGV0
YykgZnVuY3Rpb25zLgogICAgIC8vIFJldHVybiBmYWxzZSBpZiBjYWxsZXIgc2hvdWxkIHJldHVy
biB3aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4KQEAgLTYzOSw3ICs2NDMsNyBAQCBwdWJsaWM6
CiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBiaW5kKiAoYmluZEJ1ZmZlciwgYmluZFRleHR1
cmUsIGV0YykgYW5kIHVzZVByb2dyYW0uCiAgICAgLy8gSWYgdGhlIG9iamVjdCBoYXMgYWxyZWFk
eSBiZWVuIGRlbGV0ZWQsIHNldCBkZWxldGVkIHRvIHRydWUgdXBvbiByZXR1cm4uCiAgICAgLy8g
UmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJuIHdpdGhvdXQgZnVydGhlciBwcm9j
ZXNzaW5nLgotICAgIGJvb2wgY2hlY2tPYmplY3RUb0JlQm91bmQoV2ViR0xPYmplY3QqLCBib29s
JiBkZWxldGVkKTsKKyAgICBib29sIGNoZWNrT2JqZWN0VG9CZUJvdW5kKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqLCBib29sJiBkZWxldGVkKTsKIAogICAgIC8vIEhlbHBl
cnMgZm9yIHNpbXVsYXRpbmcgdmVydGV4QXR0cmliMAogICAgIHZvaWQgaW5pdFZlcnRleEF0dHJp
YjAoKTsKQEAgLTY1NCw2ICs2NTgsMTAgQEAgcHVibGljOgogICAgIC8vIGEgU2FmYXJpIG9yIENo
cm9tZSBleHRlbnNpb24uCiAgICAgYm9vbCBhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29u
c3Q7CiAKKyAgICAvLyBXcmFwcGVyIGZvciBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdM
RXJyb3IgdGhhdCBzZW5kcyBhIG1lc3NhZ2UKKyAgICAvLyB0byB0aGUgSmF2YVNjcmlwdCBjb25z
b2xlLgorICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0sIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24pOworCiAgICAgZnJpZW5kIGNsYXNz
IFdlYkdMU3RhdGVSZXN0b3JlcjsKIH07CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>