<?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>141318</bug_id>
          
          <creation_ts>2015-02-05 18:57:37 -0800</creation_ts>
          <short_desc>WebGL 2: Texture call format, internal format, and type validation</short_desc>
          <delta_ts>2015-02-09 13:15:41 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Roger Fong">roger_fong</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>roger_fong</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1067282</commentid>
    <comment_count>0</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-02-05 18:57:37 -0800</bug_when>
    <thetext>Validate internal format, format, and type for texture calls (CopyTexImage2D, TexImage2D, TexSubImage2D) using the GLES3 spec.
This will aid in implementing the new texture calls introduced in the WebGL2 spec later.

It also will help with promoting the SRGB extension to core.

rdar://problem/19733828</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067592</commentid>
    <comment_count>1</comment_count>
      <attachid>246223</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-02-07 15:58:33 -0800</bug_when>
    <thetext>Created attachment 246223
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067593</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-07 16:01:12 -0800</bug_when>
    <thetext>Attachment 246223 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/GraphicsContext3D.h:511:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:128:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:129:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:291:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:293:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:295:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:297:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:300:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContext.cpp:401:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContext.h:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContext.h:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContext.h:50:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContext.h:52:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContext.h:54:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContext.h:57:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGL2RenderingContext.cpp:1025:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 16 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067596</commentid>
    <comment_count>3</comment_count>
      <attachid>246225</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-02-07 16:06:44 -0800</bug_when>
    <thetext>Created attachment 246225
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067597</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-07 16:09:23 -0800</bug_when>
    <thetext>Attachment 246225 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/GraphicsContext3D.h:511:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:128:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:129:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:291:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:293:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:295:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:297:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:300:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContext.cpp:401:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContext.h:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContext.h:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContext.h:50:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContext.h:52:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContext.h:54:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContext.h:57:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGL2RenderingContext.cpp:1025:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 16 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067615</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-02-07 17:33:45 -0800</bug_when>
    <thetext>I think that before we make this change, we should fix the major leaks we are seeing on the leaks bot. This might introduce more leaks. How would we know?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067616</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-02-07 17:34:32 -0800</bug_when>
    <thetext>I mean specifically leaks related to 3D Canvas, I guess they are not WebGL, but that still might be the thing to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067855</commentid>
    <comment_count>7</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-02-09 10:40:50 -0800</bug_when>
    <thetext>The majority of this patch is either copy pasting or just conditional checks for validation. I don&apos;t allocate anything new. I think this is very low risk in terms of introducing more leaks and it is blocking me from completing other important WebGL2 work, for which I have very little time to complete in the first place.

I will investigate the leaks separately but I think that we should go ahead and land this so I can at least continue to make progress on the WebGL2 implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067866</commentid>
    <comment_count>8</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-02-09 11:39:33 -0800</bug_when>
    <thetext>Bug to keep track of leaks investigation here: https://bugs.webkit.org/show_bug.cgi?id=141394</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067881</commentid>
    <comment_count>9</comment_count>
      <attachid>246225</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-09 12:26:19 -0800</bug_when>
    <thetext>Comment on attachment 246225
patch

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

r=me. It would be nice if the function declarations could be more inline with our coding style, though I know much of this is code being moved from one file to another.

&gt; Source/WebCore/html/canvas/WebGL2RenderingContext.cpp:1014
&gt; +void WebGL2RenderingContext::texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset,

It&apos;s weird that this is broken into multiple lines, but the other functions are on the same line.

&gt; Source/WebCore/html/canvas/WebGL2RenderingContext.cpp:1125
&gt; +    GC3Denum format, GC3Denum type)

Ditto. So many lines!

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:498
&gt; +    GC3Denum format, GC3Denum type)

So many lines for this function declaration!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067890</commentid>
    <comment_count>10</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-02-09 13:15:41 -0800</bug_when>
    <thetext>Committed: http://trac.webkit.org/changeset/179842</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246223</attachid>
            <date>2015-02-07 15:58:33 -0800</date>
            <delta_ts>2015-02-07 16:06:44 -0800</delta_ts>
            <desc>patch</desc>
            <filename>texvalidation.patch</filename>
            <type>text/plain</type>
            <size>120563</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3OTc4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE1LTAyLTA3ICBSb2dlciBG
b25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViR0wgMjogVGV4dHVyZSBj
YWxsIGZvcm1hdCwgaW50ZXJuYWwgZm9ybWF0LCBhbmQgdHlwZSB2YWxpZGF0aW9uLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzE4LgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMTk3MzM4Mjg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgd2lsbCBiZSBjb3ZlcmVkIGJ5IFdlYkdMMiBjb25m
b3JtYW5jZSB0ZXN0cy4KKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKTogQWRkIG1pc3NpbmcgRXhjZXB0aW9uQ29k
ZSBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNv
cHlUZXhJbWFnZTJEKTogVmFsaWRhdGUgdGV4dHVyZSBmb3JtYXRzIGJhc2VkIG9uIEdMRVMzIHNw
ZWMuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFn
ZTJEQmFzZSk6IFZhbGlkYXRlIHVzaW5nIGludGVybmFsIGZvcm1hdCBmcm9tIHRleHR1cmUgdGFy
Z2V0LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1h
Z2UyREltcGwpOiBWYWxpZGF0ZSB1c2luZyBpbnRlcm5hbCBmb3JtYXQgZnJvbSB0ZXh0dXJlIHRh
cmdldC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnRleFN1Yklt
YWdlMkQpOiBWYWxpZGF0ZSB1c2luZyBpbnRlcm5hbCBmb3JtYXQgZnJvbSB0ZXh0dXJlIHRhcmdl
dC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4
RnVuY1BhcmFtZXRlcnMpOiBEbyBleHRyYSB2YWxpZGF0aW9uIGZvciBjb3B5VGV4SW1hZ2UyRC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVu
Y0Zvcm1hdEFuZFR5cGUpOiBWYWxpZGF0ZSBpbnRlcm5hbCBmb3JtYXQsIGZvcm1hdCBhbmQgdHlw
ZSBjb21iaW5hdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlVGV4RnVuY0RhdGEpOiBWYWxpZGF0ZSBuZXcgZGF0YSB0eXBlcy4KKyAgICAgICAg
VGhpcyBtZXRob2Qgbm93IGFjY2VwdHMgYW4gaW50ZXJuYWwgZm9ybWF0IGFyZ3VtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YmFzZUludGVybmFsRm9ybWF0
RnJvbUludGVybmFsRm9ybWF0KToKKyAgICAgICAgSGVscGVyIG1ldGhvZCB0byBjb252ZXJ0IGlu
dGVybmFsIGZvcm1hdCB0byBiYXNlIGludGVybmFsIGZvcm1hdC4KKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmg6CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCk6IE1vdmVkIGZyb20gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3Vi
SW1hZ2UyREJhc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4U3ViSW1hZ2UyREltcGwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4
RnVuY0Zvcm1hdEFuZFR5cGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRGF0YSk6IERpdHRvLgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorCisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmMpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5VGV4SW1hZ2UyRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJ
bWFnZTJEQmFzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJESW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVu
Y0Zvcm1hdEFuZFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNE
YXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmg6IE1vZGlmeSB2YWxpZGF0aW9uIHR5cGUgZW51bXMgdG8gZGlmZmVyZW50aWF0ZSBi
ZXR3ZWVuIENvcHlJbWFnZSwgVGV4SW1hZ2UgYW5kIFRleFN1YkltYWdlIGNhbGxzLgorICAgICAg
ICAoV2ViQ29yZTo6U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcjo6U2NvcGVkRHJhd2luZ0J1ZmZl
ckJpbmRlcik6ICBNb3ZlZCBmcm9tIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuCisgICAgICAg
IChXZWJDb3JlOjpTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyOjp+U2NvcGVkRHJhd2luZ0J1ZmZl
ckJpbmRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y2xpcDFEKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpjbGlwMkQpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5oOiBSZW5hbWUgYSB0eXBvJ2VkIGVudW0uCisKIDIwMTUtMDIt
MDcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFN0b3AgZGlzcGF0
Y2hpbmcgZXZlbnRzIHRvIHdpdGggU1ZHRWxlbWVudEluc3RhbmNlIG9iamVjdHMgYXMgdGhlaXIg
dGFyZ2V0cwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5n
Q29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3OTYwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCwxNiArMjgsMjMgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAjaW5jbHVkZSAiV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5oIgogCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRl
ICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zM0Qu
aCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbWFnZUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCiAjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCiAjaW5jbHVkZSAiT0VTVGV4dHVy
ZUZsb2F0TGluZWFyLmgiCiAjaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgogI2luY2x1
ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIK
ICNpbmNsdWRlICJXZWJHTEFjdGl2ZUluZm8uaCIKICNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRU
ZXh0dXJlQVRDLmgiCiAjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmgiCiAj
aW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuaCIKKyNpbmNsdWRlICJXZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgog
I2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCiAjaW5jbHVkZSAiV2ViR0xEZXB0aFRleHR1
cmUuaCIKQEAgLTgyLDExICs4OSwxMiBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6Omdl
dEJ1ZmZlclN1CiAgICAgVU5VU0VEX1BBUkFNKHJldHVybmVkRGF0YSk7CiB9CiAKLVdlYkdMR2V0
SW5mbyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFt
ZSkKK1dlYkdMR2V0SW5mbyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBH
QzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRh
cmdldCk7CiAgICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnQpOwogICAgIFVOVVNFRF9QQVJBTShw
bmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CiB9CiAKQEAgLTkwMCw2ICs5MDgsODIyIEBAIFZlY3RvcjxTdHJpbmc+IFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OmcKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBSZWZQdHI8V2ViR0xD
b250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Cisg
ICAgR0MzRGVudW0gYnVmZmVyRm9ybWF0ID0gYXR0cmlidXRlcy0+YWxwaGEoKSA/IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBIDogR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKKyAgICBpZiAoIXZhbGlk
YXRlVGV4RnVuY1BhcmFtZXRlcnMoImNvcHlUZXhJbWFnZTJEIiwgQ29weVRleEltYWdlLCB0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBidWZmZXJG
b3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgiY29weVRleEltYWdlMkQiLCBp
bnRlcm5hbGZvcm1hdCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9
IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvcHlUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsK
KyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNUZXhJbnRlcm5hbEZv
cm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRG
cmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgImZy
YW1lYnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJl
Ojppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+
IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBj
aGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3ND
b250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJB
VElPTiwgImNvcHlUZXhJbWFnZTJEIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7Cisg
ICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5n
ZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICBtX2NvbnRleHQtPmNv
cHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFNjb3BlZERyYXdpbmdCdWZm
ZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRp
bmcuZ2V0KCkpOworICAgICAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKKyAgICAgICAg
R0MzRHNpemVpIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKKyAgICAgICAgaWYgKGNsaXAy
RCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91
bmRGcmFtZWJ1ZmZlckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0
aCwgJmNsaXBwZWRIZWlnaHQpKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkRS
ZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGJvcmRlciwKKyAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIG1fdW5wYWNrQWxpZ25tZW50KTsKKyAgICAgICAgICAgIGlmIChj
bGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7CisgICAgICAgICAgICAgICAg
bV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjbGlwcGVkWCAtIHgs
IGNsaXBwZWRZIC0geSwKKyAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBj
bGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgfQorICAg
IC8vIEZJWE1FOiBpZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9mIHRo
ZSBiZWxvdyBzaG91bGQgYmUgZXhlY3V0ZWQuCisgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFKTsKK30KKwordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhT
dWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOwor
ICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1Bh
cmFtZXRlcnMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZSwgdGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQodmFsaWRhdGVTaXplKCJ0ZXhTdWJJbWFnZTJEIiwgeG9mZnNldCwg
eW9mZnNldCkpOworICAgIEFTU0VSVCh2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhTdWJJ
bWFnZTJEIiwgZm9ybWF0KSk7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1
cmVCaW5kaW5nKCJ0ZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkg
eworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBBU1NFUlQoKHhvZmZzZXQgKyB3aWR0aCkgPj0gMCk7CisgICAgQVNTRVJUKCh5b2Zmc2V0
ICsgaGVpZ2h0KSA+PSAwKTsKKyAgICBBU1NFUlQodGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVs
KSA+PSAoeG9mZnNldCArIHdpZHRoKSk7CisgICAgQVNTRVJUKHRleC0+Z2V0SGVpZ2h0KHRhcmdl
dCwgbGV2ZWwpID49ICh5b2Zmc2V0ICsgaGVpZ2h0KSk7CisgICAgQVNTRVJUKHRleC0+Z2V0SW50
ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkgPT0gZm9ybWF0KTsKKyAgICBBU1NFUlQodGV4LT5n
ZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09IHR5cGUpOworICAgIG1fY29udGV4dC0+dGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHBpeGVscyk7Cit9CisKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dGV4
U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJ
bWFnZSogaW1hZ2UsIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291
cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIGVjID0gMDsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBHcmFwaGlj
c0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJj
ZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFw
aGljc0NvbnRleHQzRDo6Tk9ORSk7CisgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3Vj
Y2VlZGVkKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IHNvdXJjZURh
dGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZUZvcm1hdCgpOworICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhh
T3AoKTsKKyAgICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0YSA9IGltYWdlRXh0cmFjdG9yLmlt
YWdlUGl4ZWxEYXRhKCk7CisgICAgCisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Cisg
ICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNl
RGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4
dDNEOjpBbHBoYURvTm90aGluZyAmJiAhZmxpcFkpCisgICAgICAgIG5lZWRDb252ZXJzaW9uID0g
ZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRh
KGltYWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291
cmNlRGF0YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rv
ci5pbWFnZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVu
dCgpLCBkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKG1fdW5w
YWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAgIAorICAgIFdlYkdMVGV4dHVy
ZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwg
dHJ1ZSk7CisgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQgPSB0ZXgtPmdldEludGVybmFsRm9y
bWF0KHRhcmdldCwgbGV2ZWwpOworICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIGludGVy
bmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsICBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDog
aW1hZ2VQaXhlbERhdGEsIGVjKTsKKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAg
ICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FM
SUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworfQorCit2b2lkIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsCisgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1
ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVUZXhGdW5jRGF0YSgidGV4U3ViSW1hZ2UyRCIs
IGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMsIE51bGxOb3RBbGxvd2VkKSB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJ
bWFnZTJEIiwgVGV4U3ViSW1hZ2UsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZl
bCwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlw
ZSwgeG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB2b2lkKiBk
YXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0
YTsKKyAgICBib29sIGNoYW5nZVVucGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIGlmIChkYXRh
ICYmIChtX3VucGFja0ZsaXBZIHx8IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAg
ICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RUZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsCisgICAgICAgICAgICBtX3VucGFja0FsaWdubWVudCwKKyAgICAgICAgICAgIG1f
dW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwKKyAgICAgICAgICAgIGRhdGEs
CisgICAgICAgICAgICB0ZW1wRGF0YSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRh
dGEgPSB0ZW1wRGF0YS5kYXRhKCk7CisgICAgICAgIGNoYW5nZVVucGFja0FsaWdubWVudCA9IHRy
dWU7CisgICAgfQorICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1fY29u
dGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEp
OworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4U3Vi
SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQgPSB0
ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOworICAgIHRleFN1YkltYWdlMkRC
YXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGludGVy
bmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGRhdGEsIGVjKTsKKyAgICBpZiAoY2hhbmdlVW5wYWNr
QWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4
dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cit9CisKK3ZvaWQgV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICFwaXhlbHMgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdl
LCBTb3VyY2VJbWFnZURhdGEsIHRhcmdldCwgbGV2ZWwsIEdyYXBoaWNzQ29udGV4dDNEOjpOT05F
LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhv
ZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgVmVjdG9yPHVpbnQ4
X3Q+IGRhdGE7CisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7CisgICAgLy8gVGhlIGRh
dGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1hdCBSR0JBOC4KKyAgICAvLyBObyBj
b252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3JtYXQgaXMgUkdCQSBhbmQgdHlw
ZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVsdGlwbHkgb3BlcmF0aW9uIGlz
IHJlcXVpcmVkLgorICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYg
dHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiAhbV91bnBhY2tGbGlw
WSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKQorICAgICAgICBuZWVkQ29udmVyc2lvbiA9
IGZhbHNlOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdl
RGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0
aXBseUFscGhhLCBkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSBk
YXRhIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1f
dW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAgIAorICAgIFdlYkdMVGV4
dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4U3ViSW1hZ2UyRCIsIHRhcmdl
dCwgdHJ1ZSk7CisgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQgPSB0ZXgtPmdldEludGVybmFs
Rm9ybWF0KHRhcmdldCwgbGV2ZWwpOworICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwg
aW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEo
KSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCksIGVjKTsKKyAgICBpZiAobV91bnBhY2tBbGlnbm1l
bnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQz
RDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworfQorCit2b2lkIFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgaW1hZ2UsIGVj
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5k
ZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVy
ZXIoKSk7CisgICAgaWYgKGltYWdlRm9yUmVuZGVyLT5pc1NWR0ltYWdlKCkpCisgICAgICAgIGlt
YWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1ZmZlcihpbWFnZUZvclJlbmRlci5nZXQoKSwg
aW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMSk7CisgICAgCisgICAgaWYgKCFpbWFn
ZUZvclJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1h
Z2UsIFNvdXJjZUhUTUxJbWFnZUVsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIEdyYXBoaWNzQ29udGV4
dDNEOjpOT05FLCBpbWFnZUZvclJlbmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdo
dCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZUZvclJlbmRlci5nZXQoKSwgR3JhcGhpY3NDb250ZXh0
M0Q6Okh0bWxEb21JbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhh
LCBlYyk7Cit9CisKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0LAorICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0Vs
ZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQo
InRleFN1YkltYWdlMkQiLCBjYW52YXMsIGVjKQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5j
KCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UsIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LCB0
YXJnZXQsIGxldmVsLCBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSwgY2FudmFzLT53aWR0aCgpLCBj
YW52YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gY2Fu
dmFzLT5nZXRJbWFnZURhdGEoKTsKKyAgICBpZiAoaW1hZ2VEYXRhKQorICAgICAgICB0ZXhTdWJJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1h
Z2VEYXRhLmdldCgpLCBlYyk7CisgICAgZWxzZQorICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29w
aWVkSW1hZ2UoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21DYW52YXMsIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOworfQorCisjaWYgRU5BQkxFKFZJREVP
KQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRl
bywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudCgidGV4U3ViSW1hZ2Uy
RCIsIHZpZGVvLCBlYykKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2Uy
RCIsIFRleFN1YkltYWdlLCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBH
cmFwaGljc0NvbnRleHQzRDo6Tk9ORSwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVv
SGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2Uo
dmlkZW8sIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpLCBlYyk7CisgICAgaWYgKCFp
bWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNz
Q29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwgZWMpOworfQorI2VuZGlmCisKK2Jvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAg
VGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLAorICAgIEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwKKyAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAg
ICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAorICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKK3sKKyAgICBpZiAoZnVuY3Rpb25UeXBl
ID09IENvcHlUZXhJbWFnZSkgeworICAgICAgICBHQzNEZW51bSBmcmFtZWJ1ZmZlckludGVybmFs
Rm9ybWF0ID0gMDsKKyAgICAgICAgV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCA9IG1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5nZXRBdHRhY2htZW50T2JqZWN0KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9BVFRBQ0hNRU5UMCk7CisgICAgICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7CisgICAg
ICAgICAgICBXZWJHTFRleHR1cmUqIHRleHR1cmUgPSByZWludGVycHJldF9jYXN0PFdlYkdMVGV4
dHVyZSo+KG9iamVjdCk7CisgICAgICAgICAgICBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0ID0g
YmFzZUludGVybmFsRm9ybWF0RnJvbUludGVybmFsRm9ybWF0KHRleHR1cmUtPmdldEludGVybmFs
Rm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAob2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigpKSB7CisgICAgICAgICAgICBXZWJHTFJlbmRl
cmJ1ZmZlciogcmVuZGVyQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZl
cio+KG9iamVjdCk7CisgICAgICAgICAgICBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0ID0gYmFz
ZUludGVybmFsRm9ybWF0RnJvbUludGVybmFsRm9ybWF0KHJlbmRlckJ1ZmZlci0+Z2V0SW50ZXJu
YWxGb3JtYXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEdDM0RlbnVtIGJhc2VU
ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSBiYXNlSW50ZXJuYWxGb3JtYXRGcm9tSW50ZXJuYWxGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQpOworICAgICAgICBib29sIHZhbGlkRm9ybWF0Q29tYmluYXRpb24g
PSB0cnVlOworICAgICAgICBzd2l0Y2ggKGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXQpIHsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEOgorICAgICAgICAgICAgaWYgKGJhc2VU
ZXh0dXJlSW50ZXJuYWxGb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRSAmJiBi
YXNlVGV4dHVyZUludGVybmFsRm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRUQpCisgICAg
ICAgICAgICAgICAgdmFsaWRGb3JtYXRDb21iaW5hdGlvbiA9IGZhbHNlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOgorICAgICAgICAgICAg
aWYgKGJhc2VUZXh0dXJlSW50ZXJuYWxGb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlO
QU5DRSAmJiBiYXNlVGV4dHVyZUludGVybmFsRm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpS
RUQgJiBiYXNlVGV4dHVyZUludGVybmFsRm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRykK
KyAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdENvbWJpbmF0aW9uID0gZmFsc2U7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgICAg
ICAgICAgaWYgKGJhc2VUZXh0dXJlSW50ZXJuYWxGb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkxVTUlOQU5DRSAmJiBiYXNlVGV4dHVyZUludGVybmFsRm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpSRUQgJiYgYmFzZVRleHR1cmVJbnRlcm5hbEZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6UkcgJiYgYmFzZVRleHR1cmVJbnRlcm5hbEZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCKQorICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Q29tYmluYXRpb24gPSBmYWxzZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgor
ICAgICAgICAgICAgaWYgKGJhc2VUZXh0dXJlSW50ZXJuYWxGb3JtYXQgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkFMUEhBICYmIGJhc2VUZXh0dXJlSW50ZXJuYWxGb3JtYXQgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkxVTUlOQU5DRSAmJiBiYXNlVGV4dHVyZUludGVybmFsRm9ybWF0ICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEEgJiYgYmFzZVRleHR1cmVJbnRlcm5hbEZvcm1hdCAh
PSBHcmFwaGljc0NvbnRleHQzRDo6UkVEICYmIGJhc2VUZXh0dXJlSW50ZXJuYWxGb3JtYXQgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlJHICYmIGJhc2VUZXh0dXJlSW50ZXJuYWxGb3JtYXQgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQiAmJiBiYXNlVGV4dHVyZUludGVybmFsRm9ybWF0ICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBKQorICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Q29tYmluYXRp
b24gPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICB2YWxpZEZvcm1hdENvbWJpbmF0
aW9uID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfU1RFTkNJTDoKKyAgICAgICAgICAgIHZhbGlkRm9ybWF0Q29tYmluYXRp
b24gPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoIXZhbGlkRm9ybWF0Q29tYmluYXRpb24pIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCAiY29weVRleEltYWdlOiBpbnZhbGlkIGNvbWJpbmF0aW9uIG9mIGZyYW1lYnVmZmVyIGFu
ZCB0ZXh0dXJlIGZvcm1hdHMiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgIGJvb2wgaXNTUkdCID0gKGdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkcsIGVjKS5nZXRJbnQo
KSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQik7CisgICAgICAgIGlmIChpc1NSR0IgIT0gKGZy
YW1lYnVmZmVySW50ZXJuYWxGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4IHx8IGZy
YW1lYnVmZmVySW50ZXJuYWxGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4X0FMUEhB
OCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZnJhbWVidWZmZXIgYXR0YWNobWVudCBj
b2xvciBlbmNvZGluZyBhbmQgaW50ZXJuYWwgZm9ybWF0IGRvIG5vdCBtYXRjaCIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gV2UgYWJzb2x1
dGVseSBoYXZlIHRvIHZhbGlkYXRlIHRoZSBmb3JtYXQgYW5kIHR5cGUgY29tYmluYXRpb24uCisg
ICAgLy8gVGhlIHRleEltYWdlMkQgZW50cnkgcG9pbnRzIHRha2luZyBIVE1MSW1hZ2UsIGV0Yy4g
d2lsbCBwcm9kdWNlCisgICAgLy8gdGVtcG9yYXJ5IGRhdGEgYmFzZWQgb24gdGhpcyBjb21iaW5h
dGlvbiwgc28gaXQgbXVzdCBiZSBsZWdhbC4KKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1h
dEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBsZXZl
bCkgfHwgIXZhbGlkYXRlVGV4RnVuY0xldmVsKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdo
dCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBHQzNEaW50IG1heFRleHR1cmVTaXpl
Rm9yTGV2ZWwgPSBwb3coMi4wLCBtX21heFRleHR1cmVMZXZlbCAtIDEgLSBsZXZlbCk7CisgICAg
c3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
OgorICAgICAgICBpZiAod2lkdGggPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsIHx8IGhlaWdodCA+
IG1heFRleHR1cmVTaXplRm9yTGV2ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBv
ciBoZWlnaHQgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIGlmIChmdW5jdGlvblR5cGUgIT0g
VGV4U3ViSW1hZ2UgJiYgd2lkdGggIT0gaGVpZ2h0KSB7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
d2lkdGggIT0gaGVpZ2h0IGZvciBjdWJlIG1hcCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgaGVpZ2h0IGhlcmUuIEZv
ciB0ZXhJbWFnZSB3aWR0aCA9PSBoZWlnaHQuCisgICAgICAgIC8vIEZvciB0ZXhTdWJJbWFnZSB0
aGF0IHdpbGwgYmUgY2hlY2tlZCB3aGVuIGNoZWNraW5nIHlvZmZzZXQgKyBoZWlnaHQgaXMgaW4g
cmFuZ2UuCisgICAgICAgIGlmICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwpIHsKKyAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJhbmdlIGZvciBjdWJl
IG1hcCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKGJvcmRlcikgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAiYm9yZGVyICE9IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK2Jvb2wgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEdDM0RpbnQgbGV2ZWwpCit7CisgICAgLy8gVmVyaWZ5IHRoYXQgYSB2YWxpZCBmb3Jt
YXQgaGFzIGJlZW4gcHJvdmlkZWQuCisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpBTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1J
TkFOQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkFfSU5URUdFUjoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R19JTlRFR0VSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRF9JTlRFR0VSOgorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgaWYg
KG1fd2ViZ2xEZXB0aFRleHR1cmUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1l
LCAiZGVwdGggdGV4dHVyZSBmb3JtYXRzIG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgZm9y
bWF0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgLy8gVmVyaWZ5
IHRoYXQgYSB2YWxpZCB0eXBlIGhhcyBiZWVuIHByb3ZpZGVkLgorICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yXzEw
XzEwXzEwX1JFVjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMTBG
XzExRl8xMUZfUkVWOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF81
XzlfOV85X1JFVjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81
XzZfNToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgICAg
ICBpZiAobV9vZXNUZXh0dXJlRmxvYXQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6SEFMRl9GTE9BVF9PRVM6CisgICAgICAgIGlmIChtX29lc1RleHR1cmVIYWxmRmxv
YXQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJl
IHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0lOVF8yNF84OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FU
XzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVjoKKyAgICAgICAgaWYgKGlzRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0
ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgCisgICAgLy8gVmVyeWlmeSB0aGF0IGEgdmFsaWQgaW50ZXJuYWwgZm9y
bWF0IGhhcyBiZWVuIHByb3ZpZGVkLgorICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMkk6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMyVUk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQTE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZVSToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQThVSToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxMF9BMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0IxMF9BMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0Ogor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2SToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Ukc4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOEk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6Ukc4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjMySToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNlVJOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4
SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSOFVJOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCODoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1NjU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZGOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMkk6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0IxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTZJOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4SToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U1JHQjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjExRl9HMTFGX0IxMEY6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOV9FNToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRzMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2RjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhfU05PUk06CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZGOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfSU5ERVg4OgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9DT01QT05FTlQxNjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9DT01QT05FTlQzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09N
UE9ORU5UMjQ6CisgICAgICAgIGlmIChtX3dlYmdsRGVwdGhUZXh0dXJlKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImRlcHRoIHRleHR1cmUgZm9ybWF0cyBub3QgZW5hYmxl
ZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEgzMkZfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEgyNF9T
VEVOQ0lMODoKKyAgICAgICAgaWYgKGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGludGVybmFsIGZv
cm1hdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Tk9ORToKKyAgICAgICAgLy8gV2hlbiBjYWxsaW5nIHZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFu
ZFR5cGUgd2l0aCBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSwgdGhl
IGludGVudCBpcworICAgICAgICAvLyBvbmx5IHRvIGNoZWNrIGZvciB3aGV0aGVyIG9yIG5vdCB0
aGUgZm9ybWF0IGFuZCB0eXBlIGFyZSB2YWxpZCB0eXBlcywgd2hpY2ggd2UgaGF2ZSBhbHJlYWR5
IGRvbmUgYXQgdGhpcyBwb2ludC4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBpbnRlcm5h
bCBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFZlcmlm
eSB0aGF0IHRoZSBjb21iaW5hdGlvbiBvZiBmb3JtYXQsIGludGVybmFsZm9ybWF0IGFuZCB0eXBl
IGlzIHN1cHBvcnRlZC4KKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkE6CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFCisgICAgICAgICAgICAmJiAoaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEgfHwgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkE4IHx8IGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1X0ExIHx8IGlu
dGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNCB8fCBpbnRlcm5hbGZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjhfQUxQSEE4KSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QllURSAmJiBpbnRlcm5h
bGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQThfU05PUk0pCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NI
T1JUXzRfNF80XzQKKyAgICAgICAgICAgICYmIChpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSB8fCBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QTQpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xCisgICAgICAgICAgICAmJiAoaW50ZXJuYWxm
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgfHwgaW50ZXJuYWxmb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQjVfQTEpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlm
ICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYK
KyAgICAgICAgICAgICYmIChpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
MTBfQTIgfHwgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTEpKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgodHlwZSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6SEFMRl9GTE9BVCB8fCB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09F
UykgJiYgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNkYpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUCisgICAgICAgICAgICAmJiAoaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEzMkYgfHwgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNkYp
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3Jt
YXQsIGludGVybmFsZm9ybWF0LCBhbmQgdHlwZSBjb21iaW5hdGlvbiIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQV9JTlRFR0VSOgorICAg
ICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBpbnRl
cm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQThVSSkKKyAgICAgICAgYnJlYWs7
CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFICYmIGludGVybmFs
Zm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOEkpCisgICAgICAgIGJyZWFrOworICAg
ICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQgJiYgaW50
ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNlVJKQorICAgICAgICBicmVh
azsKKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUICYmIGludGVy
bmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZJKQorICAgICAgICBicmVhazsK
KyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCAmJiBp
bnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMyVUkpCisgICAgICAgIGJy
ZWFrOworICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SU5UICYmIGludGVy
bmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJJKQorICAgICAgICBicmVhazsK
KyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yXzEw
XzEwXzEwX1JFViAmJiBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTBf
QTJVSSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
Zm9ybWF0LCBpbnRlcm5hbGZvcm1hdCwgYW5kIHR5cGUgY29tYmluYXRpb24iKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICAgICAg
aWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgICAg
ICYmIChpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCIHx8IGludGVybmFs
Zm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4IHx8IGludGVybmFsZm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0I1NjUKKyAgICAgICAgICAgIHx8IGludGVybmFsZm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCOCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
aWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEUgJiYgaW50ZXJuYWxmb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQjhfU05PUk0pCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81Cisg
ICAgICAgICAgICAmJiAoaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8
fCBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNTY1KSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfSU5UXzEwRl8xMUZfMTFGX1JFViAmJiBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6UjExRl9HMTFGX0IxMEYpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKHR5
cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF81XzlfOV85X1JFViAmJiBpbnRl
cm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOV9FNSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBpZiAoKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQg
fHwgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpCisgICAgICAgICAg
ICAmJiAoaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2RiB8fCBpbnRl
cm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UjExRl9HMTFGX0IxMEYgfHwgaW50ZXJu
YWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjlfRTUpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAorICAgICAg
ICAgICAgJiYgKGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMkYgfHwg
aW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2RiB8fCBpbnRlcm5hbGZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UjExRl9HMTFGX0IxMEYgfHwgaW50ZXJuYWxmb3Jt
YXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjlfRTUpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQsIGludGVybmFsZm9ybWF0LCBhbmQg
dHlwZSBjb21iaW5hdGlvbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCX0lOVEVHRVI6CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0I4VUkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKHR5cGUgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkJZVEUgJiYgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQjhJKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICh0eXBlID09IEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCAmJiBpbnRlcm5hbGZvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCMTZVSSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAo
dHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQgJiYgaW50ZXJuYWxmb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQjE2SSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAo
dHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UICYmIGludGVybmFsZm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMlVJKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQgJiYgaW50ZXJuYWxmb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjMySSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LCBpbnRlcm5hbGZvcm1hdCwgYW5kIHR5cGUg
Y29tYmluYXRpb24iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHOgorICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSAmJiBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4KQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNE
OjpCWVRFICYmIGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSRzhfU05PUk0p
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCh0eXBlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpIQUxGX0ZMT0FUIHx8IHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRf
T0VTKSAmJiBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNkYpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUCisgICAgICAgICAgICAmJiAoaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJHMzJGIHx8IGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2RikpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdCwg
aW50ZXJuYWxmb3JtYXQsIGFuZCB0eXBlIGNvbWJpbmF0aW9uIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR19JTlRFR0VSOgorICAgICAgICBp
ZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBpbnRlcm5hbGZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4VUkpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEUgJiYgaW50ZXJuYWxmb3Jt
YXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHOEkpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUICYmIGludGVy
bmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2VUkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUICYmIGludGVy
bmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2SSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UICYm
IGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSRzMyVUkpCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVCAmJiBp
bnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkczMkkpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdCwgaW50ZXJuYWxmb3Jt
YXQsIGFuZCB0eXBlIGNvbWJpbmF0aW9uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRUQ6CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpSOCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAodHlwZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6QllURSAmJiBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6UjhfU05PUk0pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCh0eXBlID09IEdy
YXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUIHx8IHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkhBTEZfRkxPQVRfT0VTKSAmJiBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
UjE2RikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQKKyAgICAgICAgICAgICYmIChpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6UjMyRiB8fCBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
UjE2RikpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IGZvcm1hdCwgaW50ZXJuYWxmb3JtYXQsIGFuZCB0eXBlIGNvbWJpbmF0aW9uIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRURfSU5URUdFUjoK
KyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYg
aW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlI4VUkpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEUgJiYgaW50
ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlI4SSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQg
JiYgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlIxNlVJKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVCAm
JiBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UjE2SSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
SU5UICYmIGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSMzJVSSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SU5U
ICYmIGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSMzJJKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQsIGludGVybmFs
Zm9ybWF0LCBhbmQgdHlwZSBjb21iaW5hdGlvbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UOgorICAgICAgICBpZiAo
IW1fd2ViZ2xEZXB0aFRleHR1cmUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9y
bWF0LiBERVBUSF9DT01QT05FTlQgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlQgJiYgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX0NPTVBPTkVOVDE2KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICh0eXBlID09
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQKKyAgICAgICAgICAgICYmIChpbnRlcm5h
bGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMjQgfHwgaW50ZXJu
YWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2KSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQgJiYgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVO
VDMyRikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobGV2ZWwgPiAwKSB7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhfQ09NUE9ORU5U
IGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQsIGludGVybmFsZm9ybWF0LCBhbmQgdHlwZSBj
b21iaW5hdGlvbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfU1RFTkNJTDoKKyAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJl
IHx8ICFpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpKSB7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIGZvcm1hdC4gREVQVEhfU1RFTkNJTCBub3QgZW5hYmxlZCIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfOCAmJiBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEgyNF9TVEVOQ0lMOCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBp
ZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfMzJfVU5TSUdORURfSU5UXzI0Xzhf
UkVWICYmIGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDMyRl9TVEVO
Q0lMOCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
Zm9ybWF0LCBpbnRlcm5hbGZvcm1hdCwgYW5kIHR5cGUgY29tYmluYXRpb24iKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgIGlmICgodHlwZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSB8fCB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZM
T0FUX09FUyB8fCB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUIHx8IHR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUKSAmJiBpbnRlcm5hbGZvcm1hdCA9PSBmb3JtYXQp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1h
dCwgaW50ZXJuYWxmb3JtYXQsIGFuZCB0eXBlIGNvbWJpbmF0aW9uIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBs
ZXZlbCwKKyAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKKyAgICBB
cnJheUJ1ZmZlclZpZXcqIHBpeGVscywKKyAgICBOdWxsRGlzcG9zaXRpb24gZGlzcG9zaXRpb24p
Cit7CisgICAgaWYgKCFwaXhlbHMpIHsKKyAgICAgICAgaWYgKGRpc3Bvc2l0aW9uID09IE51bGxB
bGxvd2VkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBw
aXhlbHMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghdmFsaWRh
dGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGludGVybmFsZm9ybWF0LCBmb3Jt
YXQsIHR5cGUsIGxldmVsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghdmFsaWRh
dGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpCWVRFOgorICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBl
SW50OCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEJZVEUgYnV0IEFycmF5QnVm
ZmVyVmlldyBub3QgSW50OEFycmF5Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURToKKyAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQ4
KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5TSUdORURfQllURSBidXQgQXJy
YXlCdWZmZXJWaWV3IG5vdCBVaW50OEFycmF5Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U0hPUlQ6CisgICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVJbnQxNikg
eworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIFNIT1JUIGJ1dCBBcnJheUJ1ZmZlclZp
ZXcgbm90IEludDE2QXJyYXkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAg
IGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50MTYpIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAidHlwZSBVTlNJR05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5v
dCBVaW50MTZBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKKyAgICAgICAg
aWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZUludDMyKSB7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgInR5cGUgSU5UIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IEludDMyQXJyYXki
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6CisgICAgICAgIGlm
IChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50MzIpIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAidHlwZSBVTlNJR05FRF9JTlQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWlu
dDMyQXJyYXkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBl
KCkgIT0gSlNDOjpUeXBlRmxvYXQzMikgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBl
IEZMT0FUIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IEZsb2F0MzJBcnJheSIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0
CisgICAgICAgIC8vIEFzIHBlciB0aGUgc3BlY2lmaWNhdGlvbiwgQXJyYXlCdWZmZXJWaWV3IHNo
b3VsZCBiZSBudWxsIHdoZW4KKyAgICAgICAgLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdCBpcyBl
bmFibGVkLgorICAgICAgICBpZiAocGl4ZWxzKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
InR5cGUgSEFMRl9GTE9BVF9PRVMgYnV0IEFycmF5QnVmZmVyVmlldyBpcyBub3QgTlVMTCIpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAg
ICB1bnNpZ25lZCB0b3RhbEJ5dGVzUmVxdWlyZWQ7CisgICAgR0MzRGVudW0gZXJyb3IgPSBtX2Nv
bnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdo
dCwgbV91bnBhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVzUmVxdWlyZWQsIDApOworICAgIGlmIChl
cnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoZXJyb3IsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBkaW1lbnNpb25z
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHBpeGVscy0+Ynl0ZUxl
bmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7CisgICAgICAgIGlmIChtX3VucGFja0FsaWdu
bWVudCAhPSAxKSB7CisgICAgICAgICAgICBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdl
U2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCAmdG90YWxCeXRlc1Jl
cXVpcmVkLCAwKTsKKyAgICAgICAgICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSA9PSB0b3Rh
bEJ5dGVzUmVxdWlyZWQpIHsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVm
ZmVyVmlldyBub3QgYmlnIGVub3VnaCBmb3IgcmVxdWVzdCB3aXRoIFVOUEFDS19BTElHTk1FTlQg
PiAxIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5v
dWdoIGZvciByZXF1ZXN0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0dDM0RlbnVtIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmJhc2VJbnRl
cm5hbEZvcm1hdEZyb21JbnRlcm5hbEZvcm1hdChHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCkKK3sK
KyAgICAvLyBIYW5kbGVzIHNpemVkLCB1bnNpemVkLCBhbmQgY29tcHJlc3NlZCBpbnRlcm5hbCBm
b3JtYXRzLgorICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSOF9TTk9STToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlIzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjhJOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlI4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2SToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMlVJOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNTRURfUjExX0VBQzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDOgorICAgICAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0M0Q6OlJFRDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzg6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJGOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6Ukc4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNkk6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJVSToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1JHMTFfRUFDOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDOgorICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjg6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0I1NjU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjg6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4SToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2VUk6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQjMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNTRURfUkdCOF9FVEMyOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTVBSRVNTRURfU1JHQjhfRVRDMjoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0I7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOF9TTk9STToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxMF9BMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0IxMF9BMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4X0FM
UEhBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZGOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QThJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4VUk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQTE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
MTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJJOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEzMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9SR0I4X1BVTkNIVEhS
T1VHSF9BTFBIQTFfRVRDMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VE
X1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpDT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOgorICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
Q09NUE9ORU5UMTY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5U
MjQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMzJGOgorICAg
ICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDI0X1NURU5DSUw4OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIMzJGX1NURU5DSUw4OgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX1NURU5DSUw7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5B
TkNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKKyAgICAgICAgcmV0dXJuIGludGVybmFsZm9y
bWF0OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkU7CisgICAgfQorfQorCiBXZWJHTEdldElu
Zm8gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAko
cmV2aXNpb24gMTc5NjA5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGdldEJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50NjQgb2Zm
c2V0LCBBcnJheUJ1ZmZlciogcmV0dXJuZWREYXRhKTsKICAgICAKICAgICAvKiBGcmFtZWJ1ZmZl
ciBvYmplY3RzICovCi0gICAgV2ViR0xHZXRJbmZvIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBu
YW1lKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihHQzNEaW50IHNyY1gwLCBH
QzNEaW50IHNyY1kwLCBHQzNEaW50IHNyY1gxLCBHQzNEaW50IHNyY1kxLCBHQzNEaW50IGRzdFgw
LCBHQzNEaW50IGRzdFkwLCBHQzNEaW50IGRzdFgxLCBHQzNEaW50IGRzdFkxLCBHQzNEYml0Zmll
bGQgbWFzaywgR0MzRGVudW0gZmlsdGVyKTsKICAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZUxh
eWVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRHVpbnQgdGV4dHVy
ZSwgR0MzRGludCBsZXZlbCwgR0MzRGludCBsYXllcik7CiAgICAgV2ViR0xHZXRJbmZvIGdldElu
dGVybmFsZm9ybWF0UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDM0RlbnVtIHBuYW1lKTsKQEAgLTE2OSw3ICsxNjksNDEgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpIG92ZXJyaWRl
OwogCiAgICAgdmlydHVhbCBXZWJHTEdldEluZm8gZ2V0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1l
LCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCB2YWxpZGF0ZUNhcGFiaWxpdHko
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBjYXApIG92ZXJyaWRlOworICAgIAor
ICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIHRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2Rl
Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRleHQz
RDo6SW1hZ2VIdG1sRG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEs
IEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LAorICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3Kiwg
RXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB0ZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsCisgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VE
YXRhKiwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB0ZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsCisgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRl
OworI2lmIEVOQUJMRShWSURFTykKKyAgICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LAorICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0Vs
ZW1lbnQqLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGU7CisjZW5kaWYKKworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgR0MzRGludCBsZXZlbCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAorICAg
ICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSwKKyAgICAgICAgR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLAorICAgICAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAg
ICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwK
KyAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGJvb2wgdmFsaWRhdGVUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RpbnQgbGV2ZWwsCisgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwKKyAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwKKyAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsCisgICAgICAgIE51
bGxEaXNwb3NpdGlvbikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHZhbGlkYXRlQ2FwYWJp
bGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGNhcCkgb3ZlcnJpZGU7Cisg
ICAgCitwcml2YXRlOgorICAgIEdDM0RlbnVtIGJhc2VJbnRlcm5hbEZvcm1hdEZyb21JbnRlcm5h
bEZvcm1hdChHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3OTYwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDEyICsyOSwxNyBAQAogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogCiAj
aW5jbHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5o
IgogI2luY2x1ZGUgIkVYVEJsZW5kTWluTWF4LmgiCiAjaW5jbHVkZSAiRVhURnJhZ0RlcHRoLmgi
CiAjaW5jbHVkZSAiRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgogI2luY2x1ZGUgIkVYVFRleHR1cmVG
aWx0ZXJBbmlzb3Ryb3BpYy5oIgogI2luY2x1ZGUgIkVYVHNSR0IuaCIKICNpbmNsdWRlICJFeHRl
bnNpb25zM0QuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiT0VTRWxlbWVudEluZGV4VWludC5oIgogI2luY2x1
ZGUgIk9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCIKICNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXQu
aCIKQEAgLTQyLDYgKzQ3LDcgQEAKICNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0LmgiCiAj
aW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oIgogI2luY2x1ZGUgIk9FU1ZlcnRl
eEFycmF5T2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiV2ViR0xD
b21wcmVzc2VkVGV4dHVyZUFUQy5oIgogI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVQ
VlJUQy5oIgogI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCkBAIC0yODEs
NiArMjg3LDQ2NCBAQCBWZWN0b3I8U3RyaW5nPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdlCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlU
ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRl
cnMoImNvcHlUZXhJbWFnZTJEIiwgQ29weVRleEltYWdlLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxp
ZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4SW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSkK
KyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJl
QmluZGluZygiY29weVRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4KQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJD
b21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JG
b3JtYXQoKSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQiLCAiZnJhbWVidWZmZXIgaXMgaW5j
b21wYXRpYmxlIGZvcm1hdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghaXNH
TEVTMk5QT1RTdHJpY3QoKSAmJiBsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwg
aGVpZ2h0KSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhJbWFnZTJEIiwgImxldmVsID4gMCBub3QgcG93ZXIgb2Yg
MiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJm
cmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
IW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNS
ZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY29weVRleElt
YWdlMkQiLCByZWFzb24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNsZWFySWZDb21w
b3NpdGVkKCk7CisgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpIHsKKyAgICAgICAgU2NvcGVkRHJh
d2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVm
ZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIo
bV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAg
ICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOworICAgICAgICBHQzNEc2l6ZWkgY2xpcHBl
ZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OworICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVp
Z2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdo
dCkpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZSh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLAorICAgICAg
ICAgICAgICAgIGludGVybmFsZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgbV91bnBhY2tBbGlnbm1lbnQpOworICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAg
JiYgY2xpcHBlZEhlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlU
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGNsaXBwZWRYIC0geCwgY2xpcHBlZFkgLSB5LAor
ICAgICAgICAgICAgICAgICAgICBjbGlwcGVkWCwgY2xpcHBlZFksIGNsaXBwZWRXaWR0aCwgY2xp
cHBlZEhlaWdodCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
bV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
eCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKyAgICB9CisgICAgLy8gRklYTUU6IGlmIHRo
ZSBmcmFtZWJ1ZmZlciBpcyBub3QgY29tcGxldGUsIG5vbmUgb2YgdGhlIGJlbG93IHNob3VsZCBi
ZSBleGVjdXRlZC4KKyAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREJhc2UoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhl
bHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbGZvcm1h
dCk7CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQK
KyAgICBlYyA9IDA7CisgICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOworICAgIEFTU0VSVCh2
YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UsIHRh
cmdldCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlKSk7Cisg
ICAgQVNTRVJUKHZhbGlkYXRlU2l6ZSgidGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQp
KTsKKyAgICBBU1NFUlQodmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4U3ViSW1hZ2UyRCIs
IGZvcm1hdCkpOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGlu
ZygidGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXgpIHsKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNT
RVJUKCh4b2Zmc2V0ICsgd2lkdGgpID49IDApOworICAgIEFTU0VSVCgoeW9mZnNldCArIGhlaWdo
dCkgPj0gMCk7CisgICAgQVNTRVJUKHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgPj0gKHhv
ZmZzZXQgKyB3aWR0aCkpOworICAgIEFTU0VSVCh0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVs
KSA+PSAoeW9mZnNldCArIGhlaWdodCkpOworICAgIEFTU0VSVCh0ZXgtPmdldEludGVybmFsRm9y
bWF0KHRhcmdldCwgbGV2ZWwpID09IGZvcm1hdCk7CisgICAgQVNTRVJUKHRleC0+Z2V0VHlwZSh0
YXJnZXQsIGxldmVsKSA9PSB0eXBlKTsKKyAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBwaXhlbHMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2Uy
REltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1h
Z2UsIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29s
IGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IGVjID0gMDsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBHcmFwaGljc0NvbnRleHQz
RDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVs
dGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6Tk9ORSk7CisgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQg
PSBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZUZvcm1hdCgpOworICAgIEdyYXBoaWNzQ29udGV4
dDNEOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKKyAg
ICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxE
YXRhKCk7CisgICAgCisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7CisgICAgaWYgKHR5
cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBo
YURvTm90aGluZyAmJiAhZmxpcFkpCisgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7Cisg
ICAgZWxzZSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdlLCBp
bWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291cmNlRGF0YUZv
cm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZUhl
aWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpLCBkYXRh
KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKG1fdW5wYWNrQWxpZ25t
ZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0
M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOworCisgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQo
KSwgZm9ybWF0LCBmb3JtYXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBp
bWFnZVBpeGVsRGF0YSwgZWMpOworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAg
ICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJ
R05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGlu
dCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LAorICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZm
ZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleFN1YkltYWdlMkQiLCBs
ZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBmb3JtYXQsIHR5cGUsIHBpeGVscywgTnVsbE5v
dEFsbG93ZWQpIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFn
ZSwgU291cmNlQXJyYXlCdWZmZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOworICAgIFZl
Y3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKKyAgICBib29sIGNoYW5nZVVucGFja0FsaWdubWVudCA9
IGZhbHNlOworICAgIGlmIChkYXRhICYmIChtX3VucGFja0ZsaXBZIHx8IG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSkpIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RUZXh0dXJlRGF0
YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsCisgICAgICAgICAgICBtX3VucGFja0FsaWdu
bWVudCwKKyAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBo
YSwKKyAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICB0ZW1wRGF0YSkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGRhdGEgPSB0ZW1wRGF0YS5kYXRhKCk7CisgICAgICAgIGNoYW5n
ZVVucGFja0FsaWdubWVudCA9IHRydWU7CisgICAgfQorICAgIGlmIChjaGFuZ2VVbnBhY2tBbGln
bm1lbnQpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19BTElHTk1FTlQsIDEpOworCisgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBmb3JtYXQsIHR5
cGUsIGRhdGEsIGVjKTsKKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCBtX3VucGFja0FsaWdubWVudCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zm
c2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXBpeGVscyB8fCAhdmFsaWRhdGVU
ZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UsIFNvdXJjZUltYWdlRGF0YSwgdGFy
Z2V0LCBsZXZlbCwgZm9ybWF0LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAw
LCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRy
dWU7CisgICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1hdCBS
R0JBOC4KKyAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3Jt
YXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVs
dGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSAmJiAhbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKQorICAgICAg
ICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fY29u
dGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlw
WSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgeworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFn
ZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4
dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwor
ICAgIAorICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgZm9ybWF0LCBmb3JtYXQsIHR5
cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgp
LCBlYyk7CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4
dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5w
YWNrQWxpZ25tZW50KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwKKyAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJ
bWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MSW1hZ2VFbGVt
ZW50KCJ0ZXhTdWJJbWFnZTJEIiwgaW1hZ2UsIGVjKSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+
aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKGltYWdlRm9yUmVu
ZGVyLT5pc1NWR0ltYWdlKCkpCisgICAgICAgIGltYWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50
b0J1ZmZlcihpbWFnZUZvclJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWln
aHQoKSwgMSk7CisgICAgCisgICAgaWYgKCFpbWFnZUZvclJlbmRlciB8fCAhdmFsaWRhdGVUZXhG
dW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UsIFNvdXJjZUhUTUxJbWFnZUVsZW1lbnQs
IHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXItPndpZHRoKCksIGltYWdlRm9y
UmVuZGVyLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdy
YXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSwgZWMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LAorICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMg
PSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTENh
bnZhc0VsZW1lbnQoInRleFN1YkltYWdlMkQiLCBjYW52YXMsIGVjKQorICAgICAgICB8fCAhdmFs
aWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UsIFNvdXJjZUhUTUxDYW52
YXNFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFz
LT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGNhbnZhcy0+
Z2V0SW1hZ2VEYXRhKCk7CisgICAgaWYgKGltYWdlRGF0YSkKKyAgICAgICAgdGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRGF0
YS5nZXQoKSwgZWMpOworICAgIGVsc2UKKyAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZElt
YWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tQ2FudmFzLCBtX3VucGFja0ZsaXBZLCBt
X3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIHZp
ZGVvLCBlYykKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRl
eFN1YkltYWdlLCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQs
IHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVmUHRy
PEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFz
dENvcHlJbWFnZU1vZGUoKSwgZWMpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsK
KyAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBm
b3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbVZpZGVv
LCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKyNlbmRp
ZgorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVy
cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlv
blR5cGUgZnVuY3Rpb25UeXBlLAorICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwK
KyAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAorICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSkKK3sKKyAgICAvLyBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRhdGUgdGhlIGZv
cm1hdCBhbmQgdHlwZSBjb21iaW5hdGlvbi4KKyAgICAvLyBUaGUgdGV4SW1hZ2UyRCBlbnRyeSBw
b2ludHMgdGFraW5nIEhUTUxJbWFnZSwgZXRjLiB3aWxsIHByb2R1Y2UKKyAgICAvLyB0ZW1wb3Jh
cnkgZGF0YSBiYXNlZCBvbiB0aGlzIGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJlIGxlZ2FsLgor
ICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGludGVy
bmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGxldmVsKSB8fCAhdmFsaWRhdGVUZXhGdW5jTGV2ZWwo
ZnVuY3Rpb25OYW1lLCB0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
d2lkdGggb3IgaGVpZ2h0IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIEdDM0RpbnQgbWF4VGV4dHVyZVNpemVGb3JMZXZlbCA9IHBvdygyLjAsIG1fbWF4VGV4
dHVyZUxldmVsIC0gMSAtIGxldmVsKTsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6CisgICAgICAgIGlmICh3aWR0aCA+IG1heFRl
eHR1cmVTaXplRm9yTGV2ZWwgfHwgaGVpZ2h0ID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBvdXQgb2YgcmFuZ2UiKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoK
KyAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSAhPSBUZXhTdWJJbWFnZSAmJiB3aWR0aCAhPSBoZWln
aHQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCAhPSBoZWlnaHQgZm9yIGN1YmUgbWFw
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8gTm8g
bmVlZCB0byBjaGVjayBoZWlnaHQgaGVyZS4gRm9yIHRleEltYWdlIHdpZHRoID09IGhlaWdodC4K
KyAgICAgICAgLy8gRm9yIHRleFN1YkltYWdlIHRoYXQgd2lsbCBiZSBjaGVja2VkIHdoZW4gY2hl
Y2tpbmcgeW9mZnNldCArIGhlaWdodCBpcyBpbiByYW5nZS4KKyAgICAgICAgaWYgKHdpZHRoID4g
bWF4VGV4dHVyZVNpemVGb3JMZXZlbCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9y
IGhlaWdodCBvdXQgb2YgcmFuZ2UgZm9yIGN1YmUgbWFwIik7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmIChmb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJmb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoYm9yZGVyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJib3JkZXIg
IT0gMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRm9y
bWF0QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsKKyAgICBzd2l0Y2ggKGZvcm1hdCkgewor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkxVTUlOQU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0Vf
QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX1NURU5DSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
Q09NUE9ORU5UOgorICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJkZXB0aCB0ZXh0dXJlIGZvcm1hdHMgbm90IGVuYWJs
ZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdC
X0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQ6CisgICAgZGVmYXVs
dDoKKyAgICAgICAgaWYgKChmb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCX0VYVCB8fCBmb3Jt
YXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVCkKKyAgICAgICAgICAgICYmIG1fZXh0
c1JHQikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1
cmUgZm9ybWF0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgICAgICBpZiAobV9vZXNU
ZXh0dXJlRmxvYXQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOgorICAgICAgICBpZiAobV9vZXNUZXh0dXJlSGFs
ZkZsb2F0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4
dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfSU5UXzI0Xzg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6
CisgICAgICAgIGlmIChtX3dlYmdsRGVwdGhUZXh0dXJlKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlw
ZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8vIFZlcmlmeSB0
aGF0IHRoZSBjb21iaW5hdGlvbiBvZiBmb3JtYXQgYW5kIHR5cGUgaXMgc3VwcG9ydGVkLgorICAg
IHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpIQUxGX0ZMT0FUX09FUykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5
cGUgZm9yIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQ6CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNQorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgdHlwZSBmb3IgUkdCIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6
CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUOgorICAgICAgICBpZiAodHlw
ZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQorICAgICAgICAgICAgJiYgdHlw
ZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNAorICAgICAgICAg
ICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMQor
ICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKKyAgICAgICAg
ICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgUkdCQSBmb3JtYXQiKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgIGlmICghbV93
ZWJnbERlcHRoVGV4dHVyZSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQu
IERFUFRIX0NPTVBPTkVOVCBub3QgZW5hYmxlZCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfSU5UKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3Ig
REVQVEhfQ09NUE9ORU5UIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGlmIChsZXZlbCA+IDApIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAibGV2ZWwgbXVzdCBiZSAwIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0Iik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKKyAgICAgICAgaWYgKCFtX3dlYmdsRGVw
dGhUZXh0dXJlKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdC4gREVQVEhf
U1RFTkNJTCBub3QgZW5hYmxlZCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRf
MjRfOCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIERFUFRI
X1NURU5DSUwgZm9ybWF0Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGxldmVsID4gMCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZl
bCBtdXN0IGJlIDAgZm9yIERFUFRIX1NURU5DSUwgZm9ybWF0Iik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRGF0YShjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgbGV2ZWwsCisgICAgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCisgICAgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsCisg
ICAgTnVsbERpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uKQoreworICAgIGlmICghcGl4ZWxzKSB7Cisg
ICAgICAgIGlmIChkaXNwb3NpdGlvbiA9PSBOdWxsQWxsb3dlZCkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoZnVu
Y3Rpb25OYW1lLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBsZXZlbCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rp
b25OYW1lLCBmb3JtYXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAg
ICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQ4KSB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5TSUdORURfQllURSBidXQgQXJyYXlCdWZmZXJWaWV3
IG5vdCBVaW50OEFycmF5Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hP
UlRfNV82XzU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80
XzRfNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8x
OgorICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDE2KSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5TSUdORURfU0hPUlQgYnV0IEFycmF5QnVm
ZmVyVmlldyBub3QgVWludDE2QXJyYXkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VDogLy8gT0VTX3RleHR1cmVfZmxvYXQKKyAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9
IEpTQzo6VHlwZUZsb2F0MzIpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBGTE9B
VCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBGbG9hdDMyQXJyYXkiKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdAorICAg
ICAgICAvLyBBcyBwZXIgdGhlIHNwZWNpZmljYXRpb24sIEFycmF5QnVmZmVyVmlldyBzaG91bGQg
YmUgbnVsbCB3aGVuCisgICAgICAgIC8vIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQgaXMgZW5hYmxl
ZC4KKyAgICAgICAgaWYgKHBpeGVscykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBl
IEhBTEZfRkxPQVRfT0VTIGJ1dCBBcnJheUJ1ZmZlclZpZXcgaXMgbm90IE5VTEwiKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgdW5z
aWduZWQgdG90YWxCeXRlc1JlcXVpcmVkOworICAgIEdDM0RlbnVtIGVycm9yID0gbV9jb250ZXh0
LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1f
dW5wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKKyAgICBpZiAoZXJyb3Ig
IT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKGVycm9yLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgZGltZW5zaW9ucyIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgo
KSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkgeworICAgICAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQg
IT0gMSkgeworICAgICAgICAgICAgZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJ
bkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgJnRvdGFsQnl0ZXNSZXF1aXJl
ZCwgMCk7CisgICAgICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPT0gdG90YWxCeXRl
c1JlcXVpcmVkKSB7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJBcnJheUJ1ZmZlclZp
ZXcgbm90IGJpZyBlbm91Z2ggZm9yIHJlcXVlc3Qgd2l0aCBVTlBBQ0tfQUxJR05NRU5UID4gMSIp
OworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgYmlnIGVub3VnaCBm
b3IgcmVxdWVzdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0
ZXIoR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJB
TShlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMTc5NjA5KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcg
KzM5LDM4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYkdMRXh0ZW5zaW9uKiBnZXRFeHRlbnNp
b24oY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBXZWJHTEdldEluZm8gZ2V0
UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCBWZWN0b3I8U3RyaW5nPiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCkgb3ZlcnJpZGU7
Ci0gICAgYm9vbCB2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEZW51bSBjYXApIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGNvcHlUZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RpbnQgYm9yZGVyKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2Uy
REJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2
b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxp
cFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJy
YXlCdWZmZXJWaWV3KiwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqLCBFeGNlcHRpb25Db2Rl
Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50
KiwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlOworI2lmIEVOQUJMRShWSURFTykKKyAgICB2aXJ0
dWFsIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCos
IEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCBib29sIHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLAorICAgICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSwKKyAgICAgICAgR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLAorICAgICAgICBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwKKyAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50
IGJvcmRlciwKKyAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Ym9vbCB2YWxpZGF0ZVRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGlu
dCBsZXZlbCwKKyAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAg
ICAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLAorICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywKKyAgICAgICAgTnVsbERpc3Bv
c2l0aW9uKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGVDYXBhYmlsaXR5KGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gY2FwKSBvdmVycmlkZTsKIH07CiAgICAg
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24g
MTc5NjA5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYwICs5OSwxMiBAQCBjb25zdCBkb3Vi
bGUgc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wCiBjb25zdCBpbnQgbWF4R0xFcnJvcnNBbGxv
d2VkVG9Db25zb2xlID0gMjU2OwogCiBuYW1lc3BhY2UgewotCi0gICAgY2xhc3MgU2NvcGVkRHJh
d2luZ0J1ZmZlckJpbmRlciB7Ci0gICAgcHVibGljOgotICAgICAgICBTY29wZWREcmF3aW5nQnVm
ZmVyQmluZGVyKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIsIFdlYkdMRnJhbWVidWZmZXIq
IGZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgICAgIDogbV9kcmF3aW5nQnVmZmVyKGRyYXdp
bmdCdWZmZXIpCi0gICAgICAgICAgICAsIG1fZnJhbWVidWZmZXJCaW5kaW5nKGZyYW1lYnVmZmVy
QmluZGluZykKLSAgICAgICAgewotICAgICAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIg
aWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGluZykKLSAgICAgICAgICAgIGlmICghbV9m
cmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQotICAgICAgICAgICAgICAgIG1f
ZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB+U2NvcGVkRHJh
d2luZ0J1ZmZlckJpbmRlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJlc3RvcmUgRHJh
d2luZ0J1ZmZlciBpZiBuZWVkZWQKLSAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgbV9kcmF3aW5nQnVmZmVyKQotICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
YmluZCgpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBEcmF3aW5nQnVmZmVy
KiBtX2RyYXdpbmdCdWZmZXI7Ci0gICAgICAgIFdlYkdMRnJhbWVidWZmZXIqIG1fZnJhbWVidWZm
ZXJCaW5kaW5nOwotICAgIH07Ci0KKyAgICAKICAgICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9y
WmVybyhXZWJHTE9iamVjdCogb2JqZWN0KQogICAgIHsKICAgICAgICAgcmV0dXJuIG9iamVjdCA/
IG9iamVjdC0+b2JqZWN0KCkgOiAwOwogICAgIH0KIAotICAgIHZvaWQgY2xpcDFEKEdDM0RpbnQg
c3RhcnQsIEdDM0RzaXplaSByYW5nZSwgR0MzRHNpemVpIHNvdXJjZVJhbmdlLCBHQzNEaW50KiBj
bGlwcGVkU3RhcnQsIEdDM0RzaXplaSogY2xpcHBlZFJhbmdlKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKGNsaXBwZWRTdGFydCAmJiBjbGlwcGVkUmFuZ2UpOwotICAgICAgICBpZiAoc3RhcnQgPCAw
KSB7Ci0gICAgICAgICAgICByYW5nZSArPSBzdGFydDsKLSAgICAgICAgICAgIHN0YXJ0ID0gMDsK
LSAgICAgICAgfQotICAgICAgICBHQzNEaW50IGVuZCA9IHN0YXJ0ICsgcmFuZ2U7Ci0gICAgICAg
IGlmIChlbmQgPiBzb3VyY2VSYW5nZSkKLSAgICAgICAgICAgIHJhbmdlIC09IGVuZCAtIHNvdXJj
ZVJhbmdlOwotICAgICAgICAqY2xpcHBlZFN0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgICpjbGlwcGVk
UmFuZ2UgPSByYW5nZTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIG5vIGNsaXBw
aW5nIGlzIG5lY2Vzc2FyeSwgaS5lLiwgeCwgeSwgd2lkdGgsIGhlaWdodCBzdGF5IHRoZSBzYW1l
LgotICAgIGJvb2wgY2xpcDJEKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgR0MzRHNpemVpIHNvdXJjZVdpZHRo
LCBHQzNEc2l6ZWkgc291cmNlSGVpZ2h0LAotICAgICAgICAgICAgICAgIEdDM0RpbnQqIGNsaXBw
ZWRYLCBHQzNEaW50KiBjbGlwcGVkWSwgR0MzRHNpemVpKiBjbGlwcGVkV2lkdGgsIEdDM0RzaXpl
aSpjbGlwcGVkSGVpZ2h0KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNsaXBwZWRYICYmIGNsaXBw
ZWRZICYmIGNsaXBwZWRXaWR0aCAmJiBjbGlwcGVkSGVpZ2h0KTsKLSAgICAgICAgY2xpcDFEKHgs
IHdpZHRoLCBzb3VyY2VXaWR0aCwgY2xpcHBlZFgsIGNsaXBwZWRXaWR0aCk7Ci0gICAgICAgIGNs
aXAxRCh5LCBoZWlnaHQsIHNvdXJjZUhlaWdodCwgY2xpcHBlZFksIGNsaXBwZWRIZWlnaHQpOwot
ICAgICAgICByZXR1cm4gKCpjbGlwcGVkWCAhPSB4IHx8ICpjbGlwcGVkWSAhPSB5IHx8ICpjbGlw
cGVkV2lkdGggIT0gd2lkdGggfHwgKmNsaXBwZWRIZWlnaHQgIT0gaGVpZ2h0KTsKLSAgICB9Ci0K
ICAgICBHQzNEaW50IGNsYW1wKEdDM0RpbnQgdmFsdWUsIEdDM0RpbnQgbWluLCBHQzNEaW50IG1h
eCkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSA8IG1pbikKQEAgLTE0NDIsNTIgKzEzOTQsNiBA
QCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29weVRleEltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGludCBib3JkZXIpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygiY29weVRl
eEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNl
dHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4SW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGlu
ZygiY29weVRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlmICghdGV4KQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCFpc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5h
dGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQo
KSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQiLCAiZnJhbWVidWZmZXIgaXMgaW5jb21wYXRp
YmxlIGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghaXNHTEVTMk5Q
T1RTdHJpY3QoKSAmJiBsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0
KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImNvcHlUZXhJbWFnZTJEIiwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1
ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJj
ZVNhZmUoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQi
LCByZWFzb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNsZWFySWZDb21wb3NpdGVk
KCk7Ci0gICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpIHsKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1
ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmlu
ZGluZy5nZXQoKSk7Ci0gICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3
aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgIEdD
M0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOwotICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRo
LCBjbGlwcGVkSGVpZ2h0OwotICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQs
IGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCks
ICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsK
LSAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZSh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0LCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgbV91bnBhY2tBbGlnbm1lbnQpOwotICAgICAgICAg
ICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYgY2xpcHBlZEhlaWdodCA+IDApIHsKLSAgICAgICAg
ICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGNsaXBw
ZWRYIC0geCwgY2xpcHBlZFkgLSB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWln
aHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4
dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0gICAgfQotICAgIC8vIEZJWE1FOiBpZiB0aGUgZnJhbWVi
dWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9mIHRoZSBiZWxvdyBzaG91bGQgYmUgZXhlY3V0
ZWQuCi0gICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKLX0KLQog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCkBAIC0zNTQ3LDcgKzM0NTMs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlCiAgICAgLy8gRklY
TUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQuCiAgICAgZWMgPSAwOwog
ICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2Uy
RCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgQVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMo
InRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUpKTsKKyAgICBBU1NFUlQo
dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4SW1hZ2UyRCIsIFRleEltYWdlLCB0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5
cGUpKTsKICAgICBBU1NFUlQodGV4KTsKICAgICBBU1NFUlQoIWxldmVsIHx8ICFXZWJHTFRleHR1
cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSk7CiAgICAgaWYgKCFwaXhlbHMpIHsKQEAgLTM2MTYs
NyArMzUyMiw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGUKICAg
ICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChmdW5jdGlv
blR5cGUgPT0gTm90VGV4U3ViSW1hZ2UyRCkgeworICAgIGlmIChmdW5jdGlvblR5cGUgIT0gVGV4
U3ViSW1hZ2UpIHsKICAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdp
ZHRoLCBoZWlnaHQpKSB7CiAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPiAwIG5vdCBwb3dl
ciBvZiAyIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNjU0LDggKzM1NjAsOCBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVs
cywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVUZXhGdW5jRGF0YSgidGV4SW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscywgTnVsbEFsbG93ZWQpCi0gICAgICAgIHx8ICF2YWxp
ZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1
ZmZlclZpZXcsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVUZXhGdW5jRGF0YSgidGV4SW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwg
aGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxBbGxvd2Vk
KQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgVGV4SW1hZ2UsIFNv
dXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMgPyBwaXhlbHMtPmJhc2VBZGRyZXNzKCkgOiAwOwogICAg
IFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKQEAgLTM2ODIsNyArMzU4OCw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRh
KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFwaXhlbHMgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4
SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUltYWdlRGF0YSwgdGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwg
Zm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICFwaXhlbHMgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIFRleEltYWdlLCBTb3Vy
Y2VJbWFnZURhdGEsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRo
KCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICBib29sIG5lZWRDb252ZXJzaW9u
ID0gdHJ1ZTsKQEAgLTM3MzAsNyArMzYzNiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dGV4SW1hZ2UKICAgICBpZiAoaW1hZ2VGb3JSZW5kZXItPmlzU1ZHSW1hZ2UoKSkKICAg
ICAgICAgaW1hZ2VGb3JSZW5kZXIgPSBkcmF3SW1hZ2VJbnRvQnVmZmVyKGltYWdlRm9yUmVuZGVy
LmdldCgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxKTsKIAotICAgIGlmICgh
aW1hZ2VGb3JSZW5kZXIgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1
YkltYWdlMkQsIFNvdXJjZUhUTUxJbWFnZUVsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCBpbWFnZUZvclJlbmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdodCgp
LCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQorICAgIGlmICghaW1hZ2VGb3JSZW5kZXIgfHwgIXZh
bGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIFRleEltYWdlLCBTb3VyY2VIVE1MSW1hZ2VFbGVt
ZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXItPndpZHRo
KCksIGltYWdlRm9yUmVuZGVyLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSwgZWMpOwpAQCAtMzc0MCw3ICszNjQ2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp0ZXhJbWFnZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFz
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4SW1hZ2UyRCIs
IGNhbnZhcywgZWMpIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJ
bWFnZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBl
LCAwLCAwKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhU
TUxDYW52YXNFbGVtZW50KCJ0ZXhJbWFnZTJEIiwgY2FudmFzLCBlYykgfHwgIXZhbGlkYXRlVGV4
RnVuYygidGV4SW1hZ2UyRCIsIFRleEltYWdlLCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWln
aHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgV2Vi
R0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIs
IHRhcmdldCwgdHJ1ZSk7CkBAIC0zNzg1LDcgKzM2OTEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnRleEltYWdlCiB7CiAgICAgZWMgPSAwOwogICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudCgidGV4SW1hZ2UyRCIs
IHZpZGVvLCBlYykKLSAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5v
dFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwg
MCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4
SW1hZ2UyRCIsIFRleEltYWdlLCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0
KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEdv
IHRocm91Z2ggdGhlIGZhc3QgcGF0aCBkb2luZyBhIEdQVS1HUFUgdGV4dHVyZXMgY29weSB3aXRo
b3V0IGEgcmVhZGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBpZiBwb3NzaWJsZS4KQEAgLTM4NjAsMTU5
ICszNzY2LDYgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhQYXJhbQogICAg
IHRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCAwLCBwYXJhbSwgZmFsc2UpOwogfQogCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIC8v
IEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCi0gICAgZWMgPSAw
OwotICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKLSAgICBBU1NFUlQodmFsaWRhdGVUZXhG
dW5jUGFyYW1ldGVycygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2
ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlKSk7Ci0gICAgQVNTRVJU
KHZhbGlkYXRlU2l6ZSgidGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQpKTsKLSAgICBB
U1NFUlQodmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4U3ViSW1hZ2UyRCIsIGZvcm1hdCkp
OwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4U3Vi
SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpIHsKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKCh4b2Zm
c2V0ICsgd2lkdGgpID49IDApOwotICAgIEFTU0VSVCgoeW9mZnNldCArIGhlaWdodCkgPj0gMCk7
Ci0gICAgQVNTRVJUKHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgPj0gKHhvZmZzZXQgKyB3
aWR0aCkpOwotICAgIEFTU0VSVCh0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSA+PSAoeW9m
ZnNldCArIGhlaWdodCkpOwotICAgIEFTU0VSVCh0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdl
dCwgbGV2ZWwpID09IGZvcm1hdCk7Ci0gICAgQVNTRVJUKHRleC0+Z2V0VHlwZSh0YXJnZXQsIGxl
dmVsKSA9PSB0eXBlKTsKLSAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkRJbXBs
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBH
cmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlw
WSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9
IDA7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6Oklt
YWdlRXh0cmFjdG9yIGltYWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5
QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6
Ok5PTkUpOyAgCi0gICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBp
bWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZUZvcm1hdCgpOwotICAgIEdyYXBoaWNzQ29udGV4dDNE
OjpBbHBoYU9wIGFscGhhT3AgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKLSAgICBj
b25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxEYXRh
KCk7Ci0KLSAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKLSAgICBpZiAodHlwZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3Ro
aW5nICYmICFmbGlwWSkKLSAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBlbHNl
IHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4
ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBp
bWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCks
IGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQot
ICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tf
QUxJR05NRU5ULCAxKTsKLSAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCBmb3JtYXQsIHR5
cGUsICBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsK
LSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhl
bFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGln
bm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlC
dWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleFN1YkltYWdlMkQi
LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxOb3RBbGxv
d2VkKQotICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3Vi
SW1hZ2UyRCwgU291cmNlQXJyYXlCdWZmZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAgICAg
IHJldHVybjsKLSAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOwotICAgIFZl
Y3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKLSAgICBib29sIGNoYW5nZVVucGFja0FsaWdubWVudCA9
IGZhbHNlOwotICAgIGlmIChkYXRhICYmIChtX3VucGFja0ZsaXBZIHx8IG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSkpIHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RUZXh0dXJlRGF0
YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcERhdGEpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkYXRhID0gdGVtcERhdGEuZGF0YSgpOwotICAg
ICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoY2hhbmdl
VW5wYWNrQWxpZ25tZW50KQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIGRhdGEsIGVjKTsKLSAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQotICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCBtX3VucGFja0FsaWdubWVudCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQg
eG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBp
eGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXBpeGVscyB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJ
bWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBm
b3JtYXQsICBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlw
ZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3Rvcjx1aW50
OF90PiBkYXRhOwotICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIC8vIFRoZSBk
YXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5cyBvZiBmb3JtYXQgUkdCQTguCi0gICAgLy8gTm8g
Y29udmVyc2lvbiBpcyBuZWVkZWQgaWYgZGVzdGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5
cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBubyBGbGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBp
cyByZXF1aXJlZC4KLSAgICBpZiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYm
IHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgIW1fdW5wYWNrRmxp
cFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgbmVlZENvbnZlcnNpb24g
PSBmYWxzZTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFn
ZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSwgZGF0YSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2Ug
ZGF0YSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICht
X3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICB0ZXhTdWJJbWFnZTJE
QmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBwaXhlbHMtPndpZHRoKCksIHBp
eGVscy0+aGVpZ2h0KCksIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEo
KSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCksIGVjKTsKLSAgICBpZiAobV91bnBhY2tBbGlnbm1l
bnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQz
RDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhU
TUxJbWFnZUVsZW1lbnQoInRleFN1YkltYWdlMkQiLCBpbWFnZSwgZWMpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyID0gaW1hZ2UtPmNhY2hlZElt
YWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVyKCkpOwotICAgIGlmIChpbWFn
ZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQotICAgICAgICBpbWFnZUZvclJlbmRlciA9IGRyYXdJ
bWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIGltYWdlLT53aWR0aCgpLCBpbWFn
ZS0+aGVpZ2h0KCksIDEpOwotCi0gICAgaWYgKCFpbWFnZUZvclJlbmRlciB8fCAhdmFsaWRhdGVU
ZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTEltYWdlRWxl
bWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBpbWFnZUZvclJlbmRlci0+d2lkdGgoKSwgaW1h
Z2VGb3JSZW5kZXItPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLmdldCgpLCBH
cmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVt
ZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KCJ0
ZXhTdWJJbWFnZTJEIiwgY2FudmFzLCBlYykKLSAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygi
dGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LCB0
YXJnZXQsIGxldmVsLCBmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwg
MCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gY2FudmFzLT5nZXRJbWFnZURhdGEoKTsK
LSAgICBpZiAoaW1hZ2VEYXRhKQotICAgICAgICB0ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VEYXRhLmdldCgpLCBlYyk7Ci0g
ICAgZWxzZQotICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwgR3JhcGhpY3ND
b250ZXh0M0Q6Okh0bWxEb21DYW52YXMsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwgZWMpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhU
TUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9F
bGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgdmlkZW8sIGVjKQotICAgICAgICB8fCAhdmFsaWRhdGVU
ZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTFZpZGVvRWxl
bWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+
dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdl
KHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSwgZWMpOwotICAgIGlmICgh
aW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGlj
c0NvbnRleHQzRDo6SHRtbERvbVZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEsIGVjKTsKLX0KLSNlbmRpZgotCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rm
bG9hdCB4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwpAQCAt
NDg2MywxMjggKzQ2MTYsNiBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlk
YXRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBsZXZlbCkKLXsKLSAgICBz
d2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UOgotICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4
dHVyZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJkZXB0aCB0ZXh0dXJl
IGZvcm1hdHMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpTUkdCX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBI
QV9FWFQ6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKChmb3JtYXQgPT0gRXh0ZW5zaW9uczNE
OjpTUkdCX0VYVCB8fCBmb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVCkKLSAg
ICAgICAgICAgICYmIG1fZXh0c1JHQikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIHRleHR1cmUgZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
XzVfNl81OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80
XzQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6Ci0gICAg
ICAgIGlmIChtX29lc1RleHR1cmVGbG9hdCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgIGlmICht
X29lc1RleHR1cmVIYWxmRmxvYXQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1l
LCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEZXB0aFRleHR1cmUpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgdGV4dHVyZSB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAv
LyBWZXJpZnkgdGhhdCB0aGUgY29tYmluYXRpb24gb2YgZm9ybWF0IGFuZCB0eXBlIGlzIHN1cHBv
cnRlZC4KLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkFMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgIGlmICh0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAmJiB0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCB0eXBlIGZvciBmb3JtYXQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUOgotICAgICAgICBpZiAodHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQotICAgICAgICAgICAgJiYgdHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzUKLSAgICAgICAgICAgICYmIHR5
cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUykgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIHR5cGUgZm9yIFJHQiBmb3JtYXQiKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVDoKLSAgICAg
ICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKLSAgICAgICAg
ICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQK
LSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
XzVfNV81XzEKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FU
Ci0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09F
UykgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIFJHQkEgZm9y
bWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UOgotICAgICAg
ICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1cmUpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgZm9ybWF0LiBERVBUSF9DT01QT05FTlQgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlQKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHR5cGUgZm9yIERFUFRIX0NPTVBPTkVOVCBmb3JtYXQiKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobGV2ZWwgPiAwKSB7Ci0gICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJsZXZlbCBtdXN0IGJlIDAgZm9yIERFUFRIX0NPTVBPTkVOVCBmb3JtYXQiKTsK
LSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKLSAgICAgICAgaWYgKCFtX3dl
YmdsRGVwdGhUZXh0dXJlKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdC4g
REVQVEhfU1RFTkNJTCBub3QgZW5hYmxlZCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9JTlRfMjRfOCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9y
IERFUFRIX1NURU5DSUwgZm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKGxldmVsID4gMCkgewotICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
bGV2ZWwgbXVzdCBiZSAwIGZvciBERVBUSF9TVEVOQ0lMIGZvcm1hdCIpOwotICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNMZXZlbChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCkK
IHsKICAgICBpZiAobGV2ZWwgPCAwKSB7CkBAIC01MDE1LDEzOCArNDY0Niw2IEBAIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJz
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlIGZ1
bmN0aW9uVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKLXsKLSAgICAvLyBXZSBhYnNvbHV0ZWx5IGhh
dmUgdG8gdmFsaWRhdGUgdGhlIGZvcm1hdCBhbmQgdHlwZSBjb21iaW5hdGlvbi4KLSAgICAvLyBU
aGUgdGV4SW1hZ2UyRCBlbnRyeSBwb2ludHMgdGFraW5nIEhUTUxJbWFnZSwgZXRjLiB3aWxsIHBy
b2R1Y2UKLSAgICAvLyB0ZW1wb3JhcnkgZGF0YSBiYXNlZCBvbiB0aGlzIGNvbWJpbmF0aW9uLCBz
byBpdCBtdXN0IGJlIGxlZ2FsLgotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlw
ZShmdW5jdGlvbk5hbWUsIGZvcm1hdCwgdHlwZSwgbGV2ZWwpIHx8ICF2YWxpZGF0ZVRleEZ1bmNM
ZXZlbChmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
IndpZHRoIG9yIGhlaWdodCA8IDAiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIEdDM0RpbnQgbWF4VGV4dHVyZVNpemVGb3JMZXZlbCA9IHBvdygyLjAsIG1fbWF4VGV4dHVy
ZUxldmVsIC0gMSAtIGxldmVsKTsKLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIGlmICh3aWR0aCA+IG1heFRleHR1
cmVTaXplRm9yTGV2ZWwgfHwgaGVpZ2h0ID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAg
ICAgICAgaWYgKGZ1bmN0aW9uVHlwZSAhPSBUZXhTdWJJbWFnZTJEICYmIHdpZHRoICE9IGhlaWdo
dCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoICE9IGhlaWdodCBmb3IgY3ViZSBtYXAi
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAvLyBObyBu
ZWVkIHRvIGNoZWNrIGhlaWdodCBoZXJlLiBGb3IgdGV4SW1hZ2Ugd2lkdGggPT0gaGVpZ2h0Lgot
ICAgICAgICAvLyBGb3IgdGV4U3ViSW1hZ2UgdGhhdCB3aWxsIGJlIGNoZWNrZWQgd2hlbiBjaGVj
a2luZyB5b2Zmc2V0ICsgaGVpZ2h0IGlzIGluIHJhbmdlLgotICAgICAgICBpZiAod2lkdGggPiBt
YXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3Ig
aGVpZ2h0IG91dCBvZiByYW5nZSBmb3IgY3ViZSBtYXAiKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgImZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaWYgKGJvcmRlcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYm9yZGVyICE9IDAi
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0RhdGEoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IGxldmVsLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsRGlzcG9zaXRpb24g
ZGlzcG9zaXRpb24pCi17Ci0gICAgaWYgKCFwaXhlbHMpIHsKLSAgICAgICAgaWYgKGRpc3Bvc2l0
aW9uID09IE51bGxBbGxvd2VkKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJubyBwaXhlbHMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGZvcm1hdCwg
dHlwZSwgbGV2ZWwpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF2YWxpZGF0ZVNl
dHRhYmxlVGV4Rm9ybWF0KGZ1bmN0aW9uTmFtZSwgZm9ybWF0KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURToKLSAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlw
ZVVpbnQ4KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5TSUdORURfQllURSBi
dXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50OEFycmF5Iik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlND
OjpUeXBlVWludDE2KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5TSUdORURf
U0hPUlQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWludDE2QXJyYXkiKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQKLSAgICAgICAgaWYgKHBp
eGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZUZsb2F0MzIpIHsKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAidHlwZSBGTE9BVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBGbG9hdDMyQXJyYXki
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1
cmVfaGFsZl9mbG9hdAotICAgICAgICAvLyBBcyBwZXIgdGhlIHNwZWNpZmljYXRpb24sIEFycmF5
QnVmZmVyVmlldyBzaG91bGQgYmUgbnVsbCB3aGVuCi0gICAgICAgIC8vIE9FU190ZXh0dXJlX2hh
bGZfZmxvYXQgaXMgZW5hYmxlZC4KLSAgICAgICAgaWYgKHBpeGVscykgewotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJ0eXBlIEhBTEZfRkxPQVRfT0VTIGJ1dCBBcnJheUJ1ZmZlclZpZXcgaXMg
bm90IE5VTEwiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgdG90YWxCeXRlc1JlcXVpcmVkOwotICAgIEdDM0RlbnVt
IGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUs
IHdpZHRoLCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVpcmVkLCAw
KTsKLSAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1
cmUgZGltZW5zaW9ucyIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChw
aXhlbHMtPmJ5dGVMZW5ndGgoKSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkgewotICAgICAgICBpZiAo
bV91bnBhY2tBbGlnbm1lbnQgIT0gMSkgewotICAgICAgICAgIGVycm9yID0gbV9jb250ZXh0LT5j
b21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEsICZ0
b3RhbEJ5dGVzUmVxdWlyZWQsIDApOwotICAgICAgICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgo
KSA9PSB0b3RhbEJ5dGVzUmVxdWlyZWQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiQXJy
YXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0IHdpdGggVU5QQUNLX0FMSUdO
TUVOVCA+IDEiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJBcnJheUJ1ZmZlclZpZXcgbm90IGJpZyBlbm91
Z2ggZm9yIHJlcXVlc3QiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNv
bXByZXNzZWRUZXhGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQogewogICAgIHJldHVybiBtX2NvbXBy
ZXNzZWRUZXh0dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAko
cmV2aXNpb24gMTc5NjA5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIldlYkdM
R2V0SW5mby5oIgorI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCiAjaW5jbHVkZSA8bWVtb3J5Pgog
I2luY2x1ZGUgPHJ1bnRpbWUvRmxvYXQzMkFycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9JbnQz
MkFycmF5Lmg+CkBAIC04NSw2ICs4Niw1NCBAQCBjbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0
T0VTOwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCitjbGFzcyBTY29wZWREcmF3aW5n
QnVmZmVyQmluZGVyIHsKK3B1YmxpYzoKKyAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyKERy
YXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIsIFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVy
QmluZGluZykKKyAgICAgICAgOiBtX2RyYXdpbmdCdWZmZXIoZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgLCBtX2ZyYW1lYnVmZmVyQmluZGluZyhmcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgeworICAg
ICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNh
bXBsaW5nKQorICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1
ZmZlcikKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisgICAgfQorICAg
IAorICAgIH5TY29wZWREcmF3aW5nQnVmZmVyQmluZGVyKCkKKyAgICB7CisgICAgICAgIC8vIFJl
c3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXIt
PmJpbmQoKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIERyYXdpbmdCdWZmZXIqIG1fZHJh
d2luZ0J1ZmZlcjsKKyAgICBXZWJHTEZyYW1lYnVmZmVyKiBtX2ZyYW1lYnVmZmVyQmluZGluZzsK
K307CisKK2lubGluZSB2b2lkIGNsaXAxRChHQzNEaW50IHN0YXJ0LCBHQzNEc2l6ZWkgcmFuZ2Us
IEdDM0RzaXplaSBzb3VyY2VSYW5nZSwgR0MzRGludCogY2xpcHBlZFN0YXJ0LCBHQzNEc2l6ZWkq
IGNsaXBwZWRSYW5nZSkKK3sKKyAgICBBU1NFUlQoY2xpcHBlZFN0YXJ0ICYmIGNsaXBwZWRSYW5n
ZSk7CisgICAgaWYgKHN0YXJ0IDwgMCkgeworICAgICAgICByYW5nZSArPSBzdGFydDsKKyAgICAg
ICAgc3RhcnQgPSAwOworICAgIH0KKyAgICBHQzNEaW50IGVuZCA9IHN0YXJ0ICsgcmFuZ2U7Cisg
ICAgaWYgKGVuZCA+IHNvdXJjZVJhbmdlKQorICAgICAgICByYW5nZSAtPSBlbmQgLSBzb3VyY2VS
YW5nZTsKKyAgICAqY2xpcHBlZFN0YXJ0ID0gc3RhcnQ7CisgICAgKmNsaXBwZWRSYW5nZSA9IHJh
bmdlOworfQorCisvLyBSZXR1cm5zIGZhbHNlIGlmIG5vIGNsaXBwaW5nIGlzIG5lY2Vzc2FyeSwg
aS5lLiwgeCwgeSwgd2lkdGgsIGhlaWdodCBzdGF5IHRoZSBzYW1lLgoraW5saW5lIGJvb2wgY2xp
cDJEKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsCisgICBHQzNEc2l6ZWkgc291cmNlV2lkdGgsIEdDM0RzaXplaSBzb3VyY2VIZWlnaHQsCisg
ICBHQzNEaW50KiBjbGlwcGVkWCwgR0MzRGludCogY2xpcHBlZFksIEdDM0RzaXplaSogY2xpcHBl
ZFdpZHRoLCBHQzNEc2l6ZWkqY2xpcHBlZEhlaWdodCkKK3sKKyAgICBBU1NFUlQoY2xpcHBlZFgg
JiYgY2xpcHBlZFkgJiYgY2xpcHBlZFdpZHRoICYmIGNsaXBwZWRIZWlnaHQpOworICAgIGNsaXAx
RCh4LCB3aWR0aCwgc291cmNlV2lkdGgsIGNsaXBwZWRYLCBjbGlwcGVkV2lkdGgpOworICAgIGNs
aXAxRCh5LCBoZWlnaHQsIHNvdXJjZUhlaWdodCwgY2xpcHBlZFksIGNsaXBwZWRIZWlnaHQpOwor
ICAgIHJldHVybiAoKmNsaXBwZWRYICE9IHggfHwgKmNsaXBwZWRZICE9IHkgfHwgKmNsaXBwZWRX
aWR0aCAhPSB3aWR0aCB8fCAqY2xpcHBlZEhlaWdodCAhPSBoZWlnaHQpOworfQorCiBjbGFzcyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQs
IHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4gY3JlYXRlKEhUTUxDYW52YXNFbGVtZW50
KiwgV2ViR0xDb250ZXh0QXR0cmlidXRlcyosIGNvbnN0IFN0cmluZyYpOwpAQCAtMTMyLDcgKzE4
MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKTsKIAot
ICAgIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpOworICAgIHZpcnR1YWwgdm9p
ZCBjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikgPSAwOwogICAgIHZvaWQgY29weVRleFN1
YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCk7CiAKICAgICBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBjcmVhdGVC
dWZmZXIoKTsKQEAgLTIzNywxOCArMjg2LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIHRleFBhcmFt
ZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtKTsK
ICAgICB2b2lkIHRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwg
R0MzRGludCBwYXJhbSk7CiAKLSAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICB2
aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSos
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1h
Z2VFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LAotICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEhUTUxDYW52YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyos
IEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBJbWFnZURhdGEqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0
ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zm
c2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxl
bWVudCosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQg
dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdmlydHVhbCB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50
KiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICNlbmRpZgogCiAgICAgdm9pZCB1bmlmb3JtMWYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgRXhjZXB0aW9u
Q29kZSYpOwpAQCAtNTg0LDggKzYzMyw4IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgdGV4SW1h
Z2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291
cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lk
KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkRJbXBsKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBHcmFwaGljc0Nv
bnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5
QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2UyREJh
c2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lk
KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRleFN1Yklt
YWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2Uq
LCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlLCBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKICAgICB2b2lkIGNoZWNr
VGV4dHVyZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFyKiwgYm9vbCk7CiAKQEAgLTYyNCwxNSArNjcz
LDE2IEBAIHByb3RlY3RlZDoKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1
dCBmb3JtYXQvdHlwZSBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCiAgICAgLy8g
R2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJlIGlu
dmFsaWQuCi0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxl
dmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpID0gMDsKIAogICAgIC8vIEhlbHBl
ciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBsZXZlbCBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtT
dWJ9SW1hZ2UuCiAgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlm
IGxldmVsIGlzIGludmFsaWQuCiAgICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNMZXZlbChjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCk7CiAKICAg
ICBlbnVtIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlIHsKLSAgICAgICAgTm90VGV4U3Vi
SW1hZ2UyRCwKLSAgICAgICAgVGV4U3ViSW1hZ2UyRCwKKyAgICAgICAgVGV4SW1hZ2UsCisgICAg
ICAgIFRleFN1YkltYWdlLAorICAgICAgICBDb3B5VGV4SW1hZ2UKICAgICB9OwogCiAgICAgZW51
bSBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgewpAQCAtNjUwLDEyICs3MDAsMTIgQEAgcHJv
dGVjdGVkOgogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IHBhcmFtZXRl
cnMgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgogICAgIC8vIEdlbmVyYXRlcyBH
TCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgotICAg
IGJvb2wgdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleEZ1bmNWYWxpZGF0aW9uRnVu
Y3Rpb25UeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUpOworICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlv
blR5cGUsCisgICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwKKyAgICAgICAg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCisgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSkgPSAwOwogCiAgICAgZW51bSBOdWxsRGlzcG9zaXRpb24gewogICAgICAgICBO
dWxsQWxsb3dlZCwKQEAgLTY2NSwxMSArNzE1LDExIEBAIHByb3RlY3RlZDoKICAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhhdCB0aGUgZ2l2ZW4gQXJyYXlCdWZmZXJWaWV3CiAg
ICAgLy8gaXMgb2YgdGhlIGNvcnJlY3QgdHlwZSBhbmQgY29udGFpbnMgZW5vdWdoIGRhdGEgZm9y
IHRoZSB0ZXhJbWFnZSBjYWxsLgogICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJu
cyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIGJvb2wgdmFsaWRhdGVUZXhG
dW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgbGV2ZWwsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIHBpeGVs
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVsbERpc3Bvc2l0aW9uKTsKKyAgICB2
aXJ0dWFsIGJvb2wgdmFsaWRhdGVUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RpbnQgbGV2ZWwsCisgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwKKyAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwKKyAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsCisgICAgICAgIE51
bGxEaXNwb3NpdGlvbikgPSAwOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRl
IGEgZ2l2ZW4gdGV4dHVyZSBmb3JtYXQgaXMgc2V0dGFibGUgYXMgaW4KICAgICAvLyB5b3UgY2Fu
IHN1cHBseSBkYXRhIHRvIHRleEltYWdlMkQsIG9yIGNhbGwgdGV4SW1hZ2UyRCwgY29weVRleElt
YWdlMkQgYW5kCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDE3OTYwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkK
QEAgLTUwOCw3ICs1MDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIENPTVBBUkVfUkVGX1RPX1RFWFRV
UkUgPSAweDg4NEUsCiAgICAgICAgIFJHQkEzMkYgPSAweDg4MTQsCiAgICAgICAgIFJHQjMyRiA9
IDB4ODgxNSwKLSAgICAgICAgUkdCQTE2ID0gMHg4ODFBLAorICAgICAgICBSR0JBMTZGID0gMHg4
ODFBLAogICAgICAgICBSR0IxNkYgPSAweDg4MUIsCiAgICAgICAgIFZFUlRFWF9BVFRSSUJfQVJS
QVlfSU5URUdFUiA9IDB4ODhGRCwKICAgICAgICAgTUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTID0g
MHg4OEZGLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246225</attachid>
            <date>2015-02-07 16:06:44 -0800</date>
            <delta_ts>2015-02-09 12:26:19 -0800</delta_ts>
            <desc>patch</desc>
            <filename>texvalidation.patch</filename>
            <type>text/plain</type>
            <size>120564</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3OTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE1LTAyLTA3ICBSb2dlciBG
b25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViR0wgMjogVGV4dHVyZSBj
YWxsIGZvcm1hdCwgaW50ZXJuYWwgZm9ybWF0LCBhbmQgdHlwZSB2YWxpZGF0aW9uLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzE4LgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMTk3MzM4Mjg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgd2lsbCBiZSBjb3ZlcmVkIGJ5IFdlYkdMMiBjb25m
b3JtYW5jZSB0ZXN0cy4KKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKTogQWRkIG1pc3NpbmcgRXhjZXB0aW9uQ29k
ZSBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNv
cHlUZXhJbWFnZTJEKTogVmFsaWRhdGUgdGV4dHVyZSBmb3JtYXRzIGJhc2VkIG9uIEdMRVMzIHNw
ZWMuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFn
ZTJEQmFzZSk6IFZhbGlkYXRlIHVzaW5nIGludGVybmFsIGZvcm1hdCBmcm9tIHRleHR1cmUgdGFy
Z2V0LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1h
Z2UyREltcGwpOiBWYWxpZGF0ZSB1c2luZyBpbnRlcm5hbCBmb3JtYXQgZnJvbSB0ZXh0dXJlIHRh
cmdldC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnRleFN1Yklt
YWdlMkQpOiBWYWxpZGF0ZSB1c2luZyBpbnRlcm5hbCBmb3JtYXQgZnJvbSB0ZXh0dXJlIHRhcmdl
dC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4
RnVuY1BhcmFtZXRlcnMpOiBEbyBleHRyYSB2YWxpZGF0aW9uIGZvciBjb3B5VGV4SW1hZ2UyRC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVu
Y0Zvcm1hdEFuZFR5cGUpOiBWYWxpZGF0ZSBpbnRlcm5hbCBmb3JtYXQsIGZvcm1hdCBhbmQgdHlw
ZSBjb21iaW5hdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlVGV4RnVuY0RhdGEpOiBWYWxpZGF0ZSBuZXcgZGF0YSB0eXBlcy4KKyAgICAgICAg
VGhpcyBtZXRob2Qgbm93IGFjY2VwdHMgYW4gaW50ZXJuYWwgZm9ybWF0IGFyZ3VtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YmFzZUludGVybmFsRm9ybWF0
RnJvbUludGVybmFsRm9ybWF0KToKKyAgICAgICAgSGVscGVyIG1ldGhvZCB0byBjb252ZXJ0IGlu
dGVybmFsIGZvcm1hdCB0byBiYXNlIGludGVybmFsIGZvcm1hdC4KKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmg6CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCk6IE1vdmVkIGZyb20gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3Vi
SW1hZ2UyREJhc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4U3ViSW1hZ2UyREltcGwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4
RnVuY0Zvcm1hdEFuZFR5cGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRGF0YSk6IERpdHRvLgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorCisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmMpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5VGV4SW1hZ2UyRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJ
bWFnZTJEQmFzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJESW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVu
Y0Zvcm1hdEFuZFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNE
YXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmg6IE1vZGlmeSB2YWxpZGF0aW9uIHR5cGUgZW51bXMgdG8gZGlmZmVyZW50aWF0ZSBi
ZXR3ZWVuIENvcHlJbWFnZSwgVGV4SW1hZ2UgYW5kIFRleFN1YkltYWdlIGNhbGxzLgorICAgICAg
ICAoV2ViQ29yZTo6U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcjo6U2NvcGVkRHJhd2luZ0J1ZmZl
ckJpbmRlcik6ICBNb3ZlZCBmcm9tIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuCisgICAgICAg
IChXZWJDb3JlOjpTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyOjp+U2NvcGVkRHJhd2luZ0J1ZmZl
ckJpbmRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y2xpcDFEKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpjbGlwMkQpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5oOiBSZW5hbWUgYSB0eXBvJ2VkIGVudW0uCisKIDIwMTUtMDIt
MDcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFN0b3AgZGlzcGF0
Y2hpbmcgZXZlbnRzIHRvIHdpdGggU1ZHRWxlbWVudEluc3RhbmNlIG9iamVjdHMgYXMgdGhlaXIg
dGFyZ2V0cwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5n
Q29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3OTc4NikKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCwxNiArMjgsMjMgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAjaW5jbHVkZSAiV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5oIgogCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRl
ICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zM0Qu
aCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbWFnZUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCiAjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCiAjaW5jbHVkZSAiT0VTVGV4dHVy
ZUZsb2F0TGluZWFyLmgiCiAjaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgogI2luY2x1
ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIK
ICNpbmNsdWRlICJXZWJHTEFjdGl2ZUluZm8uaCIKICNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRU
ZXh0dXJlQVRDLmgiCiAjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmgiCiAj
aW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuaCIKKyNpbmNsdWRlICJXZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgog
I2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCiAjaW5jbHVkZSAiV2ViR0xEZXB0aFRleHR1
cmUuaCIKQEAgLTgyLDExICs4OSwxMiBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6Omdl
dEJ1ZmZlclN1CiAgICAgVU5VU0VEX1BBUkFNKHJldHVybmVkRGF0YSk7CiB9CiAKLVdlYkdMR2V0
SW5mbyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFt
ZSkKK1dlYkdMR2V0SW5mbyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBH
QzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRh
cmdldCk7CiAgICAgVU5VU0VEX1BBUkFNKGF0dGFjaG1lbnQpOwogICAgIFVOVVNFRF9QQVJBTShw
bmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CiB9CiAKQEAgLTkwMCw2ICs5MDgsODIyIEBAIFZlY3RvcjxTdHJpbmc+IFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OmcKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBSZWZQdHI8V2ViR0xD
b250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Cisg
ICAgR0MzRGVudW0gYnVmZmVyRm9ybWF0ID0gYXR0cmlidXRlcy0+YWxwaGEoKSA/IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBIDogR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKKyAgICBpZiAoIXZhbGlk
YXRlVGV4RnVuY1BhcmFtZXRlcnMoImNvcHlUZXhJbWFnZTJEIiwgQ29weVRleEltYWdlLCB0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBidWZmZXJG
b3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgiY29weVRleEltYWdlMkQiLCBp
bnRlcm5hbGZvcm1hdCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9
IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvcHlUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsK
KyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNUZXhJbnRlcm5hbEZv
cm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRG
cmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgImZy
YW1lYnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJl
Ojppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+
IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBj
aGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3ND
b250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJB
VElPTiwgImNvcHlUZXhJbWFnZTJEIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7Cisg
ICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5n
ZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICBtX2NvbnRleHQtPmNv
cHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFNjb3BlZERyYXdpbmdCdWZm
ZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRp
bmcuZ2V0KCkpOworICAgICAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKKyAgICAgICAg
R0MzRHNpemVpIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKKyAgICAgICAgaWYgKGNsaXAy
RCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91
bmRGcmFtZWJ1ZmZlckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0
aCwgJmNsaXBwZWRIZWlnaHQpKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkRS
ZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGJvcmRlciwKKyAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIG1fdW5wYWNrQWxpZ25tZW50KTsKKyAgICAgICAgICAgIGlmIChj
bGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7CisgICAgICAgICAgICAgICAg
bV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjbGlwcGVkWCAtIHgs
IGNsaXBwZWRZIC0geSwKKyAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBj
bGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgfQorICAg
IC8vIEZJWE1FOiBpZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9mIHRo
ZSBiZWxvdyBzaG91bGQgYmUgZXhlY3V0ZWQuCisgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFKTsKK30KKwordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhT
dWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOwor
ICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1Bh
cmFtZXRlcnMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZSwgdGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQodmFsaWRhdGVTaXplKCJ0ZXhTdWJJbWFnZTJEIiwgeG9mZnNldCwg
eW9mZnNldCkpOworICAgIEFTU0VSVCh2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhTdWJJ
bWFnZTJEIiwgZm9ybWF0KSk7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1
cmVCaW5kaW5nKCJ0ZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkg
eworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBBU1NFUlQoKHhvZmZzZXQgKyB3aWR0aCkgPj0gMCk7CisgICAgQVNTRVJUKCh5b2Zmc2V0
ICsgaGVpZ2h0KSA+PSAwKTsKKyAgICBBU1NFUlQodGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVs
KSA+PSAoeG9mZnNldCArIHdpZHRoKSk7CisgICAgQVNTRVJUKHRleC0+Z2V0SGVpZ2h0KHRhcmdl
dCwgbGV2ZWwpID49ICh5b2Zmc2V0ICsgaGVpZ2h0KSk7CisgICAgQVNTRVJUKHRleC0+Z2V0SW50
ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkgPT0gZm9ybWF0KTsKKyAgICBBU1NFUlQodGV4LT5n
ZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09IHR5cGUpOworICAgIG1fY29udGV4dC0+dGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHBpeGVscyk7Cit9CisKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dGV4
U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJ
bWFnZSogaW1hZ2UsIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291
cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIGVjID0gMDsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBHcmFwaGlj
c0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJj
ZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFw
aGljc0NvbnRleHQzRDo6Tk9ORSk7CisgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3Vj
Y2VlZGVkKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IHNvdXJjZURh
dGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZUZvcm1hdCgpOworICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhh
T3AoKTsKKyAgICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0YSA9IGltYWdlRXh0cmFjdG9yLmlt
YWdlUGl4ZWxEYXRhKCk7CisgICAgCisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Cisg
ICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNl
RGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4
dDNEOjpBbHBoYURvTm90aGluZyAmJiAhZmxpcFkpCisgICAgICAgIG5lZWRDb252ZXJzaW9uID0g
ZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRh
KGltYWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291
cmNlRGF0YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rv
ci5pbWFnZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVu
dCgpLCBkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKG1fdW5w
YWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAgIAorICAgIFdlYkdMVGV4dHVy
ZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwg
dHJ1ZSk7CisgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQgPSB0ZXgtPmdldEludGVybmFsRm9y
bWF0KHRhcmdldCwgbGV2ZWwpOworICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIGludGVy
bmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsICBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDog
aW1hZ2VQaXhlbERhdGEsIGVjKTsKKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAg
ICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FM
SUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworfQorCit2b2lkIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsCisgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1
ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVUZXhGdW5jRGF0YSgidGV4U3ViSW1hZ2UyRCIs
IGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMsIE51bGxOb3RBbGxvd2VkKSB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJ
bWFnZTJEIiwgVGV4U3ViSW1hZ2UsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZl
bCwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlw
ZSwgeG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB2b2lkKiBk
YXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0
YTsKKyAgICBib29sIGNoYW5nZVVucGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIGlmIChkYXRh
ICYmIChtX3VucGFja0ZsaXBZIHx8IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAg
ICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RUZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsCisgICAgICAgICAgICBtX3VucGFja0FsaWdubWVudCwKKyAgICAgICAgICAgIG1f
dW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwKKyAgICAgICAgICAgIGRhdGEs
CisgICAgICAgICAgICB0ZW1wRGF0YSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRh
dGEgPSB0ZW1wRGF0YS5kYXRhKCk7CisgICAgICAgIGNoYW5nZVVucGFja0FsaWdubWVudCA9IHRy
dWU7CisgICAgfQorICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1fY29u
dGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEp
OworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4U3Vi
SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQgPSB0
ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOworICAgIHRleFN1YkltYWdlMkRC
YXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGludGVy
bmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGRhdGEsIGVjKTsKKyAgICBpZiAoY2hhbmdlVW5wYWNr
QWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4
dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cit9CisKK3ZvaWQgV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICFwaXhlbHMgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdl
LCBTb3VyY2VJbWFnZURhdGEsIHRhcmdldCwgbGV2ZWwsIEdyYXBoaWNzQ29udGV4dDNEOjpOT05F
LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhv
ZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgVmVjdG9yPHVpbnQ4
X3Q+IGRhdGE7CisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7CisgICAgLy8gVGhlIGRh
dGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1hdCBSR0JBOC4KKyAgICAvLyBObyBj
b252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3JtYXQgaXMgUkdCQSBhbmQgdHlw
ZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVsdGlwbHkgb3BlcmF0aW9uIGlz
IHJlcXVpcmVkLgorICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYg
dHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiAhbV91bnBhY2tGbGlw
WSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKQorICAgICAgICBuZWVkQ29udmVyc2lvbiA9
IGZhbHNlOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdl
RGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0
aXBseUFscGhhLCBkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSBk
YXRhIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1f
dW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAgIAorICAgIFdlYkdMVGV4
dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4U3ViSW1hZ2UyRCIsIHRhcmdl
dCwgdHJ1ZSk7CisgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQgPSB0ZXgtPmdldEludGVybmFs
Rm9ybWF0KHRhcmdldCwgbGV2ZWwpOworICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwg
aW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEo
KSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCksIGVjKTsKKyAgICBpZiAobV91bnBhY2tBbGlnbm1l
bnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQz
RDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworfQorCit2b2lkIFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgaW1hZ2UsIGVj
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5k
ZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVy
ZXIoKSk7CisgICAgaWYgKGltYWdlRm9yUmVuZGVyLT5pc1NWR0ltYWdlKCkpCisgICAgICAgIGlt
YWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1ZmZlcihpbWFnZUZvclJlbmRlci5nZXQoKSwg
aW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMSk7CisgICAgCisgICAgaWYgKCFpbWFn
ZUZvclJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1h
Z2UsIFNvdXJjZUhUTUxJbWFnZUVsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIEdyYXBoaWNzQ29udGV4
dDNEOjpOT05FLCBpbWFnZUZvclJlbmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdo
dCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZUZvclJlbmRlci5nZXQoKSwgR3JhcGhpY3NDb250ZXh0
M0Q6Okh0bWxEb21JbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhh
LCBlYyk7Cit9CisKK3ZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0LAorICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0Vs
ZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQo
InRleFN1YkltYWdlMkQiLCBjYW52YXMsIGVjKQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5j
KCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UsIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LCB0
YXJnZXQsIGxldmVsLCBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSwgY2FudmFzLT53aWR0aCgpLCBj
YW52YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gY2Fu
dmFzLT5nZXRJbWFnZURhdGEoKTsKKyAgICBpZiAoaW1hZ2VEYXRhKQorICAgICAgICB0ZXhTdWJJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1h
Z2VEYXRhLmdldCgpLCBlYyk7CisgICAgZWxzZQorICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29w
aWVkSW1hZ2UoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21DYW52YXMsIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOworfQorCisjaWYgRU5BQkxFKFZJREVP
KQordm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRl
bywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudCgidGV4U3ViSW1hZ2Uy
RCIsIHZpZGVvLCBlYykKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2Uy
RCIsIFRleFN1YkltYWdlLCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBH
cmFwaGljc0NvbnRleHQzRDo6Tk9ORSwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVv
SGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2Uo
dmlkZW8sIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpLCBlYyk7CisgICAgaWYgKCFp
bWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNz
Q29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwgZWMpOworfQorI2VuZGlmCisKK2Jvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAg
VGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLAorICAgIEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwKKyAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAg
ICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAorICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKK3sKKyAgICBpZiAoZnVuY3Rpb25UeXBl
ID09IENvcHlUZXhJbWFnZSkgeworICAgICAgICBHQzNEZW51bSBmcmFtZWJ1ZmZlckludGVybmFs
Rm9ybWF0ID0gMDsKKyAgICAgICAgV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCA9IG1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5nZXRBdHRhY2htZW50T2JqZWN0KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9BVFRBQ0hNRU5UMCk7CisgICAgICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7CisgICAg
ICAgICAgICBXZWJHTFRleHR1cmUqIHRleHR1cmUgPSByZWludGVycHJldF9jYXN0PFdlYkdMVGV4
dHVyZSo+KG9iamVjdCk7CisgICAgICAgICAgICBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0ID0g
YmFzZUludGVybmFsRm9ybWF0RnJvbUludGVybmFsRm9ybWF0KHRleHR1cmUtPmdldEludGVybmFs
Rm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAob2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigpKSB7CisgICAgICAgICAgICBXZWJHTFJlbmRl
cmJ1ZmZlciogcmVuZGVyQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZl
cio+KG9iamVjdCk7CisgICAgICAgICAgICBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0ID0gYmFz
ZUludGVybmFsRm9ybWF0RnJvbUludGVybmFsRm9ybWF0KHJlbmRlckJ1ZmZlci0+Z2V0SW50ZXJu
YWxGb3JtYXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEdDM0RlbnVtIGJhc2VU
ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSBiYXNlSW50ZXJuYWxGb3JtYXRGcm9tSW50ZXJuYWxGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQpOworICAgICAgICBib29sIHZhbGlkRm9ybWF0Q29tYmluYXRpb24g
PSB0cnVlOworICAgICAgICBzd2l0Y2ggKGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXQpIHsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEOgorICAgICAgICAgICAgaWYgKGJhc2VU
ZXh0dXJlSW50ZXJuYWxGb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRSAmJiBi
YXNlVGV4dHVyZUludGVybmFsRm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRUQpCisgICAg
ICAgICAgICAgICAgdmFsaWRGb3JtYXRDb21iaW5hdGlvbiA9IGZhbHNlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOgorICAgICAgICAgICAg
aWYgKGJhc2VUZXh0dXJlSW50ZXJuYWxGb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlO
QU5DRSAmJiBiYXNlVGV4dHVyZUludGVybmFsRm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpS
RUQgJiYgYmFzZVRleHR1cmVJbnRlcm5hbEZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6Ukcp
CisgICAgICAgICAgICAgICAgdmFsaWRGb3JtYXRDb21iaW5hdGlvbiA9IGZhbHNlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICAg
ICAgICAgIGlmIChiYXNlVGV4dHVyZUludGVybmFsRm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpMVU1JTkFOQ0UgJiYgYmFzZVRleHR1cmVJbnRlcm5hbEZvcm1hdCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVEICYmIGJhc2VUZXh0dXJlSW50ZXJuYWxGb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHICYmIGJhc2VUZXh0dXJlSW50ZXJuYWxGb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQikKKyAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdENvbWJpbmF0aW9uID0gZmFsc2U7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToK
KyAgICAgICAgICAgIGlmIChiYXNlVGV4dHVyZUludGVybmFsRm9ybWF0ICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpBTFBIQSAmJiBiYXNlVGV4dHVyZUludGVybmFsRm9ybWF0ICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpMVU1JTkFOQ0UgJiYgYmFzZVRleHR1cmVJbnRlcm5hbEZvcm1hdCAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBICYmIGJhc2VUZXh0dXJlSW50ZXJuYWxGb3JtYXQg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFRCAmJiBiYXNlVGV4dHVyZUludGVybmFsRm9ybWF0ICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpSRyAmJiBiYXNlVGV4dHVyZUludGVybmFsRm9ybWF0ICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0IgJiYgYmFzZVRleHR1cmVJbnRlcm5hbEZvcm1hdCAhPSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSkKKyAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdENvbWJpbmF0
aW9uID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgdmFsaWRGb3JtYXRDb21iaW5h
dGlvbiA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6CisgICAgICAgICAgICB2YWxpZEZvcm1hdENvbWJpbmF0
aW9uID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKCF2YWxpZEZvcm1hdENvbWJpbmF0aW9uKSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImNvcHlUZXhJbWFnZTogaW52YWxpZCBjb21iaW5hdGlvbiBvZiBmcmFtZWJ1ZmZlciBh
bmQgdGV4dHVyZSBmb3JtYXRzIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICBFeGNlcHRpb25Db2RlIGVjOworICAgICAgICBib29sIGlzU1JHQiA9IChn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HLCBlYykuZ2V0SW50
KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0IpOworICAgICAgICBpZiAoaXNTUkdCICE9IChm
cmFtZWJ1ZmZlckludGVybmFsRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCOCB8fCBm
cmFtZWJ1ZmZlckludGVybmFsRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCOF9BTFBI
QTgpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZyYW1lYnVmZmVyIGF0dGFjaG1lbnQg
Y29sb3IgZW5jb2RpbmcgYW5kIGludGVybmFsIGZvcm1hdCBkbyBub3QgbWF0Y2giKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFdlIGFic29s
dXRlbHkgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgZm9ybWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9uLgor
ICAgIC8vIFRoZSB0ZXhJbWFnZTJEIGVudHJ5IHBvaW50cyB0YWtpbmcgSFRNTEltYWdlLCBldGMu
IHdpbGwgcHJvZHVjZQorICAgIC8vIHRlbXBvcmFyeSBkYXRhIGJhc2VkIG9uIHRoaXMgY29tYmlu
YXRpb24sIHNvIGl0IG11c3QgYmUgbGVnYWwuCisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3Jt
YXRBbmRUeXBlKGZ1bmN0aW9uTmFtZSwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgbGV2
ZWwpIHx8ICF2YWxpZGF0ZVRleEZ1bmNMZXZlbChmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWln
aHQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgR0MzRGludCBtYXhUZXh0dXJlU2l6
ZUZvckxldmVsID0gcG93KDIuMCwgbV9tYXhUZXh0dXJlTGV2ZWwgLSAxIC0gbGV2ZWwpOworICAg
IHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RDoKKyAgICAgICAgaWYgKHdpZHRoID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCB8fCBoZWlnaHQg
PiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGgg
b3IgaGVpZ2h0IG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICBpZiAoZnVuY3Rpb25UeXBlICE9
IFRleFN1YkltYWdlICYmIHdpZHRoICE9IGhlaWdodCkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
IndpZHRoICE9IGhlaWdodCBmb3IgY3ViZSBtYXAiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGhlaWdodCBoZXJlLiBG
b3IgdGV4SW1hZ2Ugd2lkdGggPT0gaGVpZ2h0LgorICAgICAgICAvLyBGb3IgdGV4U3ViSW1hZ2Ug
dGhhdCB3aWxsIGJlIGNoZWNrZWQgd2hlbiBjaGVja2luZyB5b2Zmc2V0ICsgaGVpZ2h0IGlzIGlu
IHJhbmdlLgorICAgICAgICBpZiAod2lkdGggPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSBmb3IgY3Vi
ZSBtYXAiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmIChib3JkZXIpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImJvcmRlciAhPSAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisgICAgCitib29sIFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBHQzNEaW50IGxldmVsKQoreworICAgIC8vIFZlcmlmeSB0aGF0IGEgdmFsaWQgZm9y
bWF0IGhhcyBiZWVuIHByb3ZpZGVkLgorICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVN
SU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBX0lOVEVHRVI6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdfSU5URUdFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRURfSU5URUdFUjoKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgIGlm
IChtX3dlYmdsRGVwdGhUZXh0dXJlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImRlcHRoIHRleHR1cmUgZm9ybWF0cyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGZv
cm1hdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8vIFZlcmlm
eSB0aGF0IGEgdmFsaWQgdHlwZSBoYXMgYmVlbiBwcm92aWRlZC4KKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkJZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OklOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMl8x
MF8xMF8xMF9SRVY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzEw
Rl8xMUZfMTFGX1JFVjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRf
NV85XzlfOV9SRVY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRf
NV82XzU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRf
NDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAg
ICAgaWYgKG1fb2VzVGV4dHVyZUZsb2F0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOgorICAgICAgICBpZiAobV9vZXNUZXh0dXJlSGFsZkZs
b2F0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVy
ZSB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9JTlRfMjRfODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVY6CisgICAgICAgIGlmIChpc0RlcHRoU3RlbmNpbFN1
cHBvcnRlZCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
dGV4dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAorICAgIC8vIFZlcnlpZnkgdGhhdCBhIHZhbGlkIGludGVybmFsIGZv
cm1hdCBoYXMgYmVlbiBwcm92aWRlZC4KKyAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpBTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJJOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMlVJOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkExNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2VUk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTg6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQThJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4VUk6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTBfQTI6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCMTBfQTJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRzMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNkk6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhJOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMkk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjMyVUk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UjE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZVSToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
OEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjhVSToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0I1X0ExOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjg6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2RjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0IzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMzJJOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjMyVUk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2SToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQjhfU05PUk06CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOEk6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNSR0I4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxMUZfRzExRl9CMTBG
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjlfRTU6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkczMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNkY6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlIzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2RjoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX0lOREVYODoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQ09NUE9ORU5UMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NP
TVBPTkVOVDI0OgorICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJkZXB0aCB0ZXh0dXJlIGZvcm1hdHMgbm90IGVuYWJs
ZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIMzJGX1NURU5DSUw4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIMjRf
U1RFTkNJTDg6CisgICAgICAgIGlmIChpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBpbnRlcm5hbCBm
b3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PTkU6CisgICAgICAgIC8vIFdoZW4gY2FsbGluZyB2YWxpZGF0ZVRleEZ1bmNGb3JtYXRB
bmRUeXBlIHdpdGggaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUsIHRo
ZSBpbnRlbnQgaXMKKyAgICAgICAgLy8gb25seSB0byBjaGVjayBmb3Igd2hldGhlciBvciBub3Qg
dGhlIGZvcm1hdCBhbmQgdHlwZSBhcmUgdmFsaWQgdHlwZXMsIHdoaWNoIHdlIGhhdmUgYWxyZWFk
eSBkb25lIGF0IHRoaXMgcG9pbnQuCisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgaW50ZXJu
YWwgZm9ybWF0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBWZXJp
ZnkgdGhhdCB0aGUgY29tYmluYXRpb24gb2YgZm9ybWF0LCBpbnRlcm5hbGZvcm1hdCBhbmQgdHlw
ZSBpcyBzdXBwb3J0ZWQuCisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBOgorICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURQorICAgICAgICAgICAgJiYgKGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBIHx8IGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBOCB8fCBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMSB8fCBp
bnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQgfHwgaW50ZXJuYWxmb3Jt
YXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4X0FMUEhBOCkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEUgJiYgaW50ZXJu
YWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4X1NOT1JNKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVF80XzRfNF80CisgICAgICAgICAgICAmJiAoaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEgfHwgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkE0KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMQorICAgICAgICAgICAgJiYgKGludGVybmFs
Zm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IGludGVybmFsZm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0I1X0ExKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBp
ZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVW
CisgICAgICAgICAgICAmJiAoaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjEwX0EyIHx8IGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1X0ExKSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkhBTEZfRkxPQVQgfHwgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9P
RVMpICYmIGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZGKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpG
TE9BVAorICAgICAgICAgICAgJiYgKGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBMzJGIHx8IGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZG
KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9y
bWF0LCBpbnRlcm5hbGZvcm1hdCwgYW5kIHR5cGUgY29tYmluYXRpb24iKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkFfSU5URUdFUjoKKyAg
ICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgaW50
ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4VUkpCisgICAgICAgIGJyZWFr
OworICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QllURSAmJiBpbnRlcm5h
bGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQThJKQorICAgICAgICBicmVhazsKKyAg
ICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUICYmIGlu
dGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZVSSkKKyAgICAgICAgYnJl
YWs7CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVCAmJiBpbnRl
cm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2SSkKKyAgICAgICAgYnJlYWs7
CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQgJiYg
aW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMlVJKQorICAgICAgICBi
cmVhazsKKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVCAmJiBpbnRl
cm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMySSkKKyAgICAgICAgYnJlYWs7
CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMl8x
MF8xMF8xMF9SRVYgJiYgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEw
X0EyVUkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IGZvcm1hdCwgaW50ZXJuYWxmb3JtYXQsIGFuZCB0eXBlIGNvbWJpbmF0aW9uIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgICAg
IGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCisgICAgICAgICAg
ICAmJiAoaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBpbnRlcm5h
bGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOCB8fCBpbnRlcm5hbGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCNTY1CisgICAgICAgICAgICB8fCBpbnRlcm5hbGZvcm1hdCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFICYmIGludGVybmFsZm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4X1NOT1JNKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNQor
ICAgICAgICAgICAgJiYgKGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0Ig
fHwgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjU2NSkpCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0lOVF8xMEZfMTFGXzExRl9SRVYgJiYgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlIxMUZfRzExRl9CMTBGKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICh0
eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfNV85XzlfOV9SRVYgJiYgaW50
ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjlfRTUpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgaWYgKCh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FU
IHx8IHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKQorICAgICAgICAg
ICAgJiYgKGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxNkYgfHwgaW50
ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlIxMUZfRzExRl9CMTBGIHx8IGludGVy
bmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I5X0U1KSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKKyAgICAg
ICAgICAgICYmIChpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMzJGIHx8
IGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxNkYgfHwgaW50ZXJuYWxm
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlIxMUZfRzExRl9CMTBGIHx8IGludGVybmFsZm9y
bWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I5X0U1KSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LCBpbnRlcm5hbGZvcm1hdCwgYW5k
IHR5cGUgY29tYmluYXRpb24iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQl9JTlRFR0VSOgorICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCOFVJKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICh0eXBlID09
IEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFICYmIGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0I4SSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAodHlwZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQgJiYgaW50ZXJuYWxmb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQjE2VUkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYg
KHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUICYmIGludGVybmFsZm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0IxNkkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYg
KHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCAmJiBpbnRlcm5hbGZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMzJVSSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SU5UICYmIGludGVybmFsZm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMkkpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdCwgaW50ZXJuYWxmb3JtYXQsIGFuZCB0eXBl
IGNvbWJpbmF0aW9uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRzoKKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUgJiYgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHOCkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6QllURSAmJiBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4X1NOT1JN
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgodHlwZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6SEFMRl9GTE9BVCB8fCB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FU
X09FUykgJiYgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZGKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpG
TE9BVAorICAgICAgICAgICAgJiYgKGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpSRzMyRiB8fCBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNkYpKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQs
IGludGVybmFsZm9ybWF0LCBhbmQgdHlwZSBjb21iaW5hdGlvbiIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdfSU5URUdFUjoKKyAgICAgICAg
aWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgaW50ZXJuYWxm
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHOFVJKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFICYmIGludGVybmFsZm9y
bWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSRzhJKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCAmJiBpbnRl
cm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNlVJKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVCAmJiBpbnRl
cm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNkkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCAm
JiBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkczMlVJKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQgJiYg
aW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJJKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQsIGludGVybmFsZm9y
bWF0LCBhbmQgdHlwZSBjb21iaW5hdGlvbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEOgorICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6UjgpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKHR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkJZVEUgJiYgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlI4X1NOT1JNKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgodHlwZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCB8fCB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNE
OjpIQUxGX0ZMT0FUX09FUykgJiYgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlIxNkYpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUCisgICAgICAgICAgICAmJiAoaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlIzMkYgfHwgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlIxNkYpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCBmb3JtYXQsIGludGVybmFsZm9ybWF0LCBhbmQgdHlwZSBjb21iaW5hdGlvbiIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0lOVEVHRVI6
CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYm
IGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSOFVJKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFICYmIGlu
dGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSOEkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
ICYmIGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSMTZVSSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQg
JiYgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkkpCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0lOVCAmJiBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UjMyVUkpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OklO
VCAmJiBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UjMySSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LCBpbnRlcm5h
bGZvcm1hdCwgYW5kIHR5cGUgY29tYmluYXRpb24iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgaWYg
KCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZv
cm1hdC4gREVQVEhfQ09NUE9ORU5UIG5vdCBlbmFibGVkIik7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUICYmIGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9DT01QT05FTlQxNikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAodHlwZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UCisgICAgICAgICAgICAmJiAoaW50ZXJu
YWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDI0IHx8IGludGVy
bmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNikpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUICYmIGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05F
TlQzMkYpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGxldmVsID4gMCkgeworICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJlIDAgZm9yIERFUFRIX0NPTVBPTkVO
VCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LCBpbnRlcm5hbGZvcm1hdCwgYW5kIHR5cGUg
Y29tYmluYXRpb24iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6CisgICAgICAgIGlmICghbV93ZWJnbERlcHRoVGV4dHVy
ZSB8fCAhaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCBmb3JtYXQuIERFUFRIX1NURU5DSUwgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UXzI0XzggJiYgaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIMjRfU1RFTkNJTDgpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
aWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84
X1JFViAmJiBpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEgzMkZfU1RF
TkNJTDgpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IGZvcm1hdCwgaW50ZXJuYWxmb3JtYXQsIGFuZCB0eXBlIGNvbWJpbmF0aW9uIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICBpZiAoKHR5cGUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgfHwgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9G
TE9BVF9PRVMgfHwgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCB8fCB0eXBl
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCkgJiYgaW50ZXJuYWxmb3JtYXQgPT0gZm9ybWF0
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3Jt
YXQsIGludGVybmFsZm9ybWF0LCBhbmQgdHlwZSBjb21iaW5hdGlvbiIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQg
bGV2ZWwsCisgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCisgICAg
QXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsCisgICAgTnVsbERpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9u
KQoreworICAgIGlmICghcGl4ZWxzKSB7CisgICAgICAgIGlmIChkaXNwb3NpdGlvbiA9PSBOdWxs
QWxsb3dlZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8g
cGl4ZWxzIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIXZhbGlk
YXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBsZXZlbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXZhbGlk
YXRlU2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QllURToKKyAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlw
ZUludDgpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBCWVRFIGJ1dCBBcnJheUJ1
ZmZlclZpZXcgbm90IEludDhBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEU6CisgICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50
OCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX0JZVEUgYnV0IEFy
cmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNIT1JUOgorICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlSW50MTYp
IHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBTSE9SVCBidXQgQXJyYXlCdWZmZXJW
aWV3IG5vdCBJbnQxNkFycmF5Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
U0hPUlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAg
ICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDE2KSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5TSUdORURfU0hPUlQgYnV0IEFycmF5QnVmZmVyVmlldyBu
b3QgVWludDE2QXJyYXkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6CisgICAgICAg
IGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVJbnQzMikgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJ0eXBlIElOVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBJbnQzMkFycmF5
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWOgorICAgICAgICBp
ZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDMyKSB7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgInR5cGUgVU5TSUdORURfSU5UIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVp
bnQzMkFycmF5Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlw
ZSgpICE9IEpTQzo6VHlwZUZsb2F0MzIpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlw
ZSBGTE9BVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBGbG9hdDMyQXJyYXkiKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9h
dAorICAgICAgICAvLyBBcyBwZXIgdGhlIHNwZWNpZmljYXRpb24sIEFycmF5QnVmZmVyVmlldyBz
aG91bGQgYmUgbnVsbCB3aGVuCisgICAgICAgIC8vIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQgaXMg
ZW5hYmxlZC4KKyAgICAgICAgaWYgKHBpeGVscykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
ICJ0eXBlIEhBTEZfRkxPQVRfT0VTIGJ1dCBBcnJheUJ1ZmZlclZpZXcgaXMgbm90IE5VTEwiKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisg
ICAgdW5zaWduZWQgdG90YWxCeXRlc1JlcXVpcmVkOworICAgIEdDM0RlbnVtIGVycm9yID0gbV9j
b250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWln
aHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKKyAgICBpZiAo
ZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKGVycm9yLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgZGltZW5zaW9u
cyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChwaXhlbHMtPmJ5dGVM
ZW5ndGgoKSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkgeworICAgICAgICBpZiAobV91bnBhY2tBbGln
bm1lbnQgIT0gMSkgeworICAgICAgICAgICAgZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFn
ZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgJnRvdGFsQnl0ZXNS
ZXF1aXJlZCwgMCk7CisgICAgICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPT0gdG90
YWxCeXRlc1JlcXVpcmVkKSB7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJBcnJheUJ1
ZmZlclZpZXcgbm90IGJpZyBlbm91Z2ggZm9yIHJlcXVlc3Qgd2l0aCBVTlBBQ0tfQUxJR05NRU5U
ID4gMSIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgYmlnIGVu
b3VnaCBmb3IgcmVxdWVzdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitHQzNEZW51bSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpiYXNlSW50
ZXJuYWxGb3JtYXRGcm9tSW50ZXJuYWxGb3JtYXQoR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQpCit7
CisgICAgLy8gSGFuZGxlcyBzaXplZCwgdW5zaXplZCwgYW5kIGNvbXByZXNzZWQgaW50ZXJuYWwg
Zm9ybWF0cy4KKyAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6Ujg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjhfU05PUk06Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4SToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2VUk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UjMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMzJVSToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1IxMV9FQUM6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9TSUdORURfUjExX0VBQzoKKyAgICAgICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dDNEOjpSRUQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOF9TTk9STToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRzE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMyRjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZJOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRzMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMyVUk6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9SRzExX0VBQzoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQzoKKyAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDNEOjpSRzsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4Ogor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjhfU05PUk06CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4Ogor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0IzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOEk6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxNlVJOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0IzMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1JHQjhfRVRDMjoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDT01QUkVTU0VEX1NSR0I4X0VUQzI6CisgICAgICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQThfU05PUk06Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTBfQTI6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCMTBfQTJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCOF9B
TFBIQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2RjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkE4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOFVJOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkExNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QTE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMySToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNTRURfUkdCOF9QVU5DSFRI
Uk9VR0hfQUxQSEExX0VUQzI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NF
RF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6Q09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzoKKyAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0NPTVBPTkVOVDE2OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVO
VDI0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDMyRjoKKyAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEgyNF9TVEVOQ0lMODoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSDMyRl9TVEVOQ0lMODoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9TVEVOQ0lMOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlO
QU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAgICAgIHJldHVybiBpbnRlcm5hbGZv
cm1hdDsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT05FOworICAgIH0KK30KKwogV2ViR0xHZXRJ
bmZvIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgJ
KHJldmlzaW9uIDE3OTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJl
bmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBnZXRCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludDY0IG9m
ZnNldCwgQXJyYXlCdWZmZXIqIHJldHVybmVkRGF0YSk7CiAgICAgCiAgICAgLyogRnJhbWVidWZm
ZXIgb2JqZWN0cyAqLwotICAgIFdlYkdMR2V0SW5mbyBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBw
bmFtZSk7CisgICAgV2ViR0xHZXRJbmZvIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBibGl0RnJhbWVidWZmZXIoR0MzRGludCBzcmNYMCwg
R0MzRGludCBzcmNZMCwgR0MzRGludCBzcmNYMSwgR0MzRGludCBzcmNZMSwgR0MzRGludCBkc3RY
MCwgR0MzRGludCBkc3RZMCwgR0MzRGludCBkc3RYMSwgR0MzRGludCBkc3RZMSwgR0MzRGJpdGZp
ZWxkIG1hc2ssIEdDM0RlbnVtIGZpbHRlcik7CiAgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmVM
YXllcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0R1aW50IHRleHR1
cmUsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgbGF5ZXIpOwogICAgIFdlYkdMR2V0SW5mbyBnZXRJ
bnRlcm5hbGZvcm1hdFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LCBHQzNEZW51bSBwbmFtZSk7CkBAIC0xNjksNyArMTY5LDQxIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKSBvdmVycmlk
ZTsKIAogICAgIHZpcnR1YWwgV2ViR0xHZXRJbmZvIGdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFt
ZSwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlOwotICAgIGJvb2wgdmFsaWRhdGVDYXBhYmlsaXR5
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gY2FwKSBvdmVycmlkZTsKKyAgICAK
KyAgICB2aXJ0dWFsIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCB0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29k
ZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHRleFN1YkltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCwKKyAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAor
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyos
IEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LAorICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdl
RGF0YSosIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdGV4U3Vi
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LAorICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlk
ZTsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdmlydHVhbCB2b2lkIHRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwKKyAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9F
bGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlOworI2VuZGlmCisKK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9v
bCB2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAg
ICAgICAgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUsCisgICAgICAgIEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwKKyAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisg
ICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
CisgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBib29sIHZhbGlkYXRlVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEaW50IGxldmVsLAorICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsCisgICAgICAgIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsCisgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAorICAgICAgICBO
dWxsRGlzcG9zaXRpb24pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZUNhcGFi
aWxpdHkoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBjYXApIG92ZXJyaWRlOwor
ICAgIAorcHJpdmF0ZToKKyAgICBHQzNEZW51bSBiYXNlSW50ZXJuYWxGb3JtYXRGcm9tSW50ZXJu
YWxGb3JtYXQoR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNzk3ODYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSwxMiArMjksMTcgQEAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAog
I2luY2x1ZGUgIkFOR0xFSW5zdGFuY2VkQXJyYXlzLmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2Uu
aCIKICNpbmNsdWRlICJFWFRCbGVuZE1pbk1heC5oIgogI2luY2x1ZGUgIkVYVEZyYWdEZXB0aC5o
IgogI2luY2x1ZGUgIkVYVFNoYWRlclRleHR1cmVMT0QuaCIKICNpbmNsdWRlICJFWFRUZXh0dXJl
RmlsdGVyQW5pc290cm9waWMuaCIKICNpbmNsdWRlICJFWFRzUkdCLmgiCiAjaW5jbHVkZSAiRXh0
ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgorI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIk9FU0VsZW1lbnRJbmRleFVpbnQuaCIKICNpbmNs
dWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCiAjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0
LmgiCkBAIC00Miw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgog
I2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKICNpbmNsdWRlICJPRVNWZXJ0
ZXhBcnJheU9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIldlYkdM
Q29tcHJlc3NlZFRleHR1cmVBVEMuaCIKICNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJl
UFZSVEMuaCIKICNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgpAQCAtMjgx
LDYgKzI4Nyw0NjQgQEAgVmVjdG9yPFN0cmluZz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5
VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0
ZXJzKCJjb3B5VGV4SW1hZ2UyRCIsIENvcHlUZXhJbWFnZSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFs
aWRhdGVTZXR0YWJsZVRleEZvcm1hdCgiY29weVRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkp
CisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVy
ZUJpbmRpbmcoImNvcHlUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVy
Q29tYmluYXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9y
Rm9ybWF0KCkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGlu
Y29tcGF0aWJsZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlz
R0xFUzJOUE9UU3RyaWN0KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgs
IGhlaWdodCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJjb3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9m
IDIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAi
ZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYm
ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlz
UmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhJ
bWFnZTJEIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjbGVhcklmQ29t
cG9zaXRlZCgpOworICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7CisgICAgICAgIFNjb3BlZERy
YXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1
ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVy
KG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAg
ICAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKKyAgICAgICAgR0MzRHNpemVpIGNsaXBw
ZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKKyAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhl
aWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWln
aHQpKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwKKyAgICAg
ICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsIG1fdW5wYWNrQWxpZ25tZW50KTsKKyAgICAgICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAw
ICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5
VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjbGlwcGVkWCAtIHgsIGNsaXBwZWRZIC0geSwK
KyAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNs
aXBwZWRIZWlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgfQorICAgIC8vIEZJWE1FOiBpZiB0
aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9mIHRoZSBiZWxvdyBzaG91bGQg
YmUgZXhlY3V0ZWQuCisgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4
ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3Jt
YXQpOworICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVk
CisgICAgZWMgPSAwOworICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBBU1NFUlQo
dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlLCB0
YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSkpOwor
ICAgIEFTU0VSVCh2YWxpZGF0ZVNpemUoInRleFN1YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0
KSk7CisgICAgQVNTRVJUKHZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleFN1YkltYWdlMkQi
LCBmb3JtYXQpKTsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRp
bmcoInRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4KSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFT
U0VSVCgoeG9mZnNldCArIHdpZHRoKSA+PSAwKTsKKyAgICBBU1NFUlQoKHlvZmZzZXQgKyBoZWln
aHQpID49IDApOworICAgIEFTU0VSVCh0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpID49ICh4
b2Zmc2V0ICsgd2lkdGgpKTsKKyAgICBBU1NFUlQodGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZl
bCkgPj0gKHlvZmZzZXQgKyBoZWlnaHQpKTsKKyAgICBBU1NFUlQodGV4LT5nZXRJbnRlcm5hbEZv
cm1hdCh0YXJnZXQsIGxldmVsKSA9PSBmb3JtYXQpOworICAgIEFTU0VSVCh0ZXgtPmdldFR5cGUo
dGFyZ2V0LCBsZXZlbCkgPT0gdHlwZSk7CisgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdl
MkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGlt
YWdlLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9v
bCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBlYyA9IDA7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgR3JhcGhpY3NDb250ZXh0
M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11
bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PTkUpOworICAgIGlmICghaW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgp
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0
ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKKyAgICBHcmFwaGljc0NvbnRl
eHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9wKCk7Cisg
ICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVBpeGVs
RGF0YSgpOworICAgIAorICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOworICAgIGlmICh0
eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3Jt
YXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFEb05vdGhpbmcgJiYgIWZsaXBZKQorICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwor
ICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwg
aW1hZ2VQaXhlbERhdGEsIGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFG
b3JtYXQsIGltYWdlRXh0cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VI
ZWlnaHQoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0
YSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChtX3VucGFja0FsaWdu
bWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4
dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKworICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0
KCksIGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDog
aW1hZ2VQaXhlbERhdGEsIGVjKTsKKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAg
ICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FM
SUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwKKyAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVm
ZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhTdWJJbWFnZTJEIiwg
bGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxO
b3RBbGxvd2VkKSB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1h
Z2UsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgdm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJlc3MoKTsKKyAgICBW
ZWN0b3I8dWludDhfdD4gdGVtcERhdGE7CisgICAgYm9vbCBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQg
PSBmYWxzZTsKKyAgICBpZiAoZGF0YSAmJiAobV91bnBhY2tGbGlwWSB8fCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEpKSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0VGV4dHVyZURh
dGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLAorICAgICAgICAgICAgbV91bnBhY2tBbGln
bm1lbnQsCisgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxw
aGEsCisgICAgICAgICAgICBkYXRhLAorICAgICAgICAgICAgdGVtcERhdGEpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBkYXRhID0gdGVtcERhdGEuZGF0YSgpOworICAgICAgICBjaGFu
Z2VVbnBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0KKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxp
Z25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNE
OjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKworICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZm9ybWF0LCB0
eXBlLCBkYXRhLCBlYyk7CisgICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKKyAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgbV91bnBhY2tBbGlnbm1lbnQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFwaXhlbHMgfHwgIXZhbGlkYXRl
VGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlLCBTb3VyY2VJbWFnZURhdGEsIHRh
cmdldCwgbGV2ZWwsIGZvcm1hdCwgIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwg
MCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0
cnVlOworICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5cyBvZiBmb3JtYXQg
UkdCQTguCisgICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYgZGVzdGluYXRpb24gZm9y
bWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBubyBGbGlwIG9yIFByZW11
bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KKyAgICBpZiAoZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUgJiYgIW1fdW5wYWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkKKyAgICAg
ICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFtX2Nv
bnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKKyAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1h
Z2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsK
KyAgICAKKyAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIGZvcm1hdCwgZm9ybWF0LCB0
eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRhdGEo
KSwgZWMpOworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3Vu
cGFja0FsaWdubWVudCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsCisgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1M
SW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxl
bWVudCgidGV4U3ViSW1hZ2UyRCIsIGltYWdlLCBlYykpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCkt
PmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVyKCkpOworICAgIGlmIChpbWFnZUZvclJl
bmRlci0+aXNTVkdJbWFnZSgpKQorICAgICAgICBpbWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUlu
dG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVp
Z2h0KCksIDEpOworICAgIAorICAgIGlmICghaW1hZ2VGb3JSZW5kZXIgfHwgIXZhbGlkYXRlVGV4
RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlLCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50
LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZv
clJlbmRlci0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLmdldCgpLCBH
cmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVj
ID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxD
YW52YXNFbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgY2FudmFzLCBlYykKKyAgICAgICAgfHwgIXZh
bGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlLCBTb3VyY2VIVE1MQ2Fu
dmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZh
cy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMt
PmdldEltYWdlRGF0YSgpOworICAgIGlmIChpbWFnZURhdGEpCisgICAgICAgIHRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZURh
dGEuZ2V0KCksIGVjKTsKKyAgICBlbHNlCisgICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJ
bWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tGbGlwWSwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoInRleFN1YkltYWdlMkQiLCB2
aWRlbywgZWMpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBU
ZXhTdWJJbWFnZSwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0
LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0
eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZh
c3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47
CisgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
Zm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRl
bywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisjZW5k
aWYKKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRl
cnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAorICAgIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rp
b25UeXBlIGZ1bmN0aW9uVHlwZSwKKyAgICBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
CisgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUpCit7CisgICAgLy8gV2UgYWJzb2x1dGVseSBoYXZlIHRvIHZhbGlkYXRlIHRoZSBm
b3JtYXQgYW5kIHR5cGUgY29tYmluYXRpb24uCisgICAgLy8gVGhlIHRleEltYWdlMkQgZW50cnkg
cG9pbnRzIHRha2luZyBIVE1MSW1hZ2UsIGV0Yy4gd2lsbCBwcm9kdWNlCisgICAgLy8gdGVtcG9y
YXJ5IGRhdGEgYmFzZWQgb24gdGhpcyBjb21iaW5hdGlvbiwgc28gaXQgbXVzdCBiZSBsZWdhbC4K
KyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBpbnRl
cm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBsZXZlbCkgfHwgIXZhbGlkYXRlVGV4RnVuY0xldmVs
KGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
IndpZHRoIG9yIGhlaWdodCA8IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICBHQzNEaW50IG1heFRleHR1cmVTaXplRm9yTGV2ZWwgPSBwb3coMi4wLCBtX21heFRl
eHR1cmVMZXZlbCAtIDEgLSBsZXZlbCk7CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICBpZiAod2lkdGggPiBtYXhU
ZXh0dXJlU2l6ZUZvckxldmVsIHx8IGhlaWdodCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwpIHsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJhbmdlIik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6
CisgICAgICAgIGlmIChmdW5jdGlvblR5cGUgIT0gVGV4U3ViSW1hZ2UgJiYgd2lkdGggIT0gaGVp
Z2h0KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggIT0gaGVpZ2h0IGZvciBjdWJlIG1h
cCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIE5v
IG5lZWQgdG8gY2hlY2sgaGVpZ2h0IGhlcmUuIEZvciB0ZXhJbWFnZSB3aWR0aCA9PSBoZWlnaHQu
CisgICAgICAgIC8vIEZvciB0ZXhTdWJJbWFnZSB0aGF0IHdpbGwgYmUgY2hlY2tlZCB3aGVuIGNo
ZWNraW5nIHlvZmZzZXQgKyBoZWlnaHQgaXMgaW4gcmFuZ2UuCisgICAgICAgIGlmICh3aWR0aCA+
IG1heFRleHR1cmVTaXplRm9yTGV2ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBv
ciBoZWlnaHQgb3V0IG9mIHJhbmdlIGZvciBjdWJlIG1hcCIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAoZm9ybWF0ICE9IGludGVybmFsZm9ybWF0KSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCAiZm9ybWF0ICE9IGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgCisgICAgaWYgKGJvcmRlcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYm9yZGVy
ICE9IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0Zv
cm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKQorewor
ICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbGZvcm1hdCk7CisgICAgc3dpdGNoIChmb3JtYXQpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpMVU1JTkFOQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNF
X0FMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9TVEVOQ0lMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0NPTVBPTkVOVDoKKyAgICAgICAgaWYgKG1fd2ViZ2xEZXB0aFRleHR1cmUpCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiZGVwdGggdGV4dHVyZSBmb3JtYXRzIG5vdCBlbmFi
bGVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JH
Ql9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUOgorICAgIGRlZmF1
bHQ6CisgICAgICAgIGlmICgoZm9ybWF0ID09IEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQgfHwgZm9y
bWF0ID09IEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQpCisgICAgICAgICAgICAmJiBtX2V4
dHNSR0IpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0
dXJlIGZvcm1hdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgaWYgKG1fb2Vz
VGV4dHVyZUZsb2F0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgaWYgKG1fb2VzVGV4dHVyZUhh
bGZGbG9hdCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRl
eHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0lOVF8yNF84OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
OgorICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5
cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICAvLyBWZXJpZnkg
dGhhdCB0aGUgY29tYmluYXRpb24gb2YgZm9ybWF0IGFuZCB0eXBlIGlzIHN1cHBvcnRlZC4KKyAg
ICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQz
RDo6SEFMRl9GTE9BVF9PRVMpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0
eXBlIGZvciBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUOgorICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURQorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzUKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpIQUxGX0ZMT0FUX09FUykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHR5cGUgZm9yIFJHQiBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
OgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVDoKKyAgICAgICAgaWYgKHR5
cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgICAgICYmIHR5
cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQKKyAgICAgICAg
ICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzEK
KyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUCisgICAgICAg
ICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUykgeworICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIFJHQkEgZm9ybWF0Iik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UOgorICAgICAgICBpZiAoIW1f
d2ViZ2xEZXB0aFRleHR1cmUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0
LiBERVBUSF9DT01QT05FTlQgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlQKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0lOVCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9y
IERFUFRIX0NPTVBPTkVOVCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAobGV2ZWwgPiAwKSB7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhfQ09NUE9ORU5UIGZvcm1hdCIpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6CisgICAgICAgIGlmICghbV93ZWJnbERl
cHRoVGV4dHVyZSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQuIERFUFRI
X1NURU5DSUwgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5U
XzI0XzgpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBERVBU
SF9TVEVOQ0lMIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGlmIChsZXZlbCA+IDApIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibGV2
ZWwgbXVzdCBiZSAwIGZvciBERVBUSF9TVEVOQ0lMIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0RhdGEoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IGxldmVsLAorICAgIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLAorICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAor
ICAgIE51bGxEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbikKK3sKKyAgICBpZiAoIXBpeGVscykgewor
ICAgICAgICBpZiAoZGlzcG9zaXRpb24gPT0gTnVsbEFsbG93ZWQpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVscyIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZ1
bmN0aW9uTmFtZSwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgbGV2ZWwpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGZ1bmN0
aW9uTmFtZSwgZm9ybWF0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Cisg
ICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX0JZVEUgYnV0IEFycmF5QnVmZmVyVmll
dyBub3QgVWludDhBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NI
T1JUXzVfNl81OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRf
NF80XzQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVf
MToKKyAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQxNikgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX1NIT1JUIGJ1dCBBcnJheUJ1
ZmZlclZpZXcgbm90IFVpbnQxNkFycmF5Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0CisgICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAh
PSBKU0M6OlR5cGVGbG9hdDMyKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgRkxP
QVQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgRmxvYXQzMkFycmF5Iik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQKKyAg
ICAgICAgLy8gQXMgcGVyIHRoZSBzcGVjaWZpY2F0aW9uLCBBcnJheUJ1ZmZlclZpZXcgc2hvdWxk
IGJlIG51bGwgd2hlbgorICAgICAgICAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGlzIGVuYWJs
ZWQuCisgICAgICAgIGlmIChwaXhlbHMpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlw
ZSBIQUxGX0ZMT0FUX09FUyBidXQgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBOVUxMIik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIHRvdGFsQnl0ZXNSZXF1aXJlZDsKKyAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4
dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBt
X3VucGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7CisgICAgaWYgKGVycm9y
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihlcnJvciwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGRpbWVuc2lvbnMiKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3Ro
KCkgPCB0b3RhbEJ5dGVzUmVxdWlyZWQpIHsKKyAgICAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50
ICE9IDEpIHsKKyAgICAgICAgICAgIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXpl
SW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEsICZ0b3RhbEJ5dGVzUmVxdWly
ZWQsIDApOworICAgICAgICAgICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpID09IHRvdGFsQnl0
ZXNSZXF1aXJlZCkgeworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiQXJyYXlCdWZmZXJW
aWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0IHdpdGggVU5QQUNLX0FMSUdOTUVOVCA+IDEi
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJBcnJheUJ1ZmZlclZpZXcgbm90IGJpZyBlbm91Z2gg
Zm9yIHJlcXVlc3QiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1l
dGVyKEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE3OTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3
ICszOSwzOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJHTEV4dGVuc2lvbiogZ2V0RXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgV2ViR0xHZXRJbmZvIGdl
dFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpIG92ZXJyaWRl
OwotICAgIGJvb2wgdmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRGVudW0gY2FwKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlcikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHRleFN1YkltYWdl
MkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qg
dm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IHRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGlu
dCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlLCBib29sIGZs
aXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFy
cmF5QnVmZmVyVmlldyosIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQg
eG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiwgRXhjZXB0aW9uQ29k
ZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVu
dCosIEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdmly
dHVhbCB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQq
LCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGU7CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgYm9vbCB2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwKKyAgICAgICAgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUsCisgICAgICAgIEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwKKyAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsCisgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGlu
dCBib3JkZXIsCisgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIHZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IGJvb2wgdmFsaWRhdGVUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0Rp
bnQgbGV2ZWwsCisgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKKyAg
ICAgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwKKyAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsCisgICAgICAgIE51bGxEaXNw
b3NpdGlvbikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHZhbGlkYXRlQ2FwYWJpbGl0eShj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGNhcCkgb3ZlcnJpZGU7CiB9OwogICAg
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHJldmlzaW9u
IDE3OTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2MCArOTksMTIgQEAgY29uc3QgZG91
YmxlIHNlY29uZHNCZXR3ZWVuUmVzdG9yZUF0dGVtcAogY29uc3QgaW50IG1heEdMRXJyb3JzQWxs
b3dlZFRvQ29uc29sZSA9IDI1NjsKIAogbmFtZXNwYWNlIHsKLQotICAgIGNsYXNzIFNjb3BlZERy
YXdpbmdCdWZmZXJCaW5kZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1
ZmZlckJpbmRlcihEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBXZWJHTEZyYW1lYnVmZmVy
KiBmcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICA6IG1fZHJhd2luZ0J1ZmZlcihkcmF3
aW5nQnVmZmVyKQotICAgICAgICAgICAgLCBtX2ZyYW1lYnVmZmVyQmluZGluZyhmcmFtZWJ1ZmZl
ckJpbmRpbmcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVy
IGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcpCi0gICAgICAgICAgICBpZiAoIW1f
ZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgflNjb3BlZERy
YXdpbmdCdWZmZXJCaW5kZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBSZXN0b3JlIERy
YXdpbmdCdWZmZXIgaWYgbmVlZGVkCi0gICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5k
aW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXIt
PmJpbmQoKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRHJhd2luZ0J1ZmZl
ciogbV9kcmF3aW5nQnVmZmVyOwotICAgICAgICBXZWJHTEZyYW1lYnVmZmVyKiBtX2ZyYW1lYnVm
ZmVyQmluZGluZzsKLSAgICB9OwotCisgICAgCiAgICAgUGxhdGZvcm0zRE9iamVjdCBvYmplY3RP
clplcm8oV2ViR0xPYmplY3QqIG9iamVjdCkKICAgICB7CiAgICAgICAgIHJldHVybiBvYmplY3Qg
PyBvYmplY3QtPm9iamVjdCgpIDogMDsKICAgICB9CiAKLSAgICB2b2lkIGNsaXAxRChHQzNEaW50
IHN0YXJ0LCBHQzNEc2l6ZWkgcmFuZ2UsIEdDM0RzaXplaSBzb3VyY2VSYW5nZSwgR0MzRGludCog
Y2xpcHBlZFN0YXJ0LCBHQzNEc2l6ZWkqIGNsaXBwZWRSYW5nZSkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChjbGlwcGVkU3RhcnQgJiYgY2xpcHBlZFJhbmdlKTsKLSAgICAgICAgaWYgKHN0YXJ0IDwg
MCkgewotICAgICAgICAgICAgcmFuZ2UgKz0gc3RhcnQ7Ci0gICAgICAgICAgICBzdGFydCA9IDA7
Ci0gICAgICAgIH0KLSAgICAgICAgR0MzRGludCBlbmQgPSBzdGFydCArIHJhbmdlOwotICAgICAg
ICBpZiAoZW5kID4gc291cmNlUmFuZ2UpCi0gICAgICAgICAgICByYW5nZSAtPSBlbmQgLSBzb3Vy
Y2VSYW5nZTsKLSAgICAgICAgKmNsaXBwZWRTdGFydCA9IHN0YXJ0OwotICAgICAgICAqY2xpcHBl
ZFJhbmdlID0gcmFuZ2U7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJucyBmYWxzZSBpZiBubyBjbGlw
cGluZyBpcyBuZWNlc3NhcnksIGkuZS4sIHgsIHksIHdpZHRoLCBoZWlnaHQgc3RheSB0aGUgc2Ft
ZS4KLSAgICBib29sIGNsaXAyRChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgIEdDM0RzaXplaSBzb3VyY2VXaWR0
aCwgR0MzRHNpemVpIHNvdXJjZUhlaWdodCwKLSAgICAgICAgICAgICAgICBHQzNEaW50KiBjbGlw
cGVkWCwgR0MzRGludCogY2xpcHBlZFksIEdDM0RzaXplaSogY2xpcHBlZFdpZHRoLCBHQzNEc2l6
ZWkqY2xpcHBlZEhlaWdodCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChjbGlwcGVkWCAmJiBjbGlw
cGVkWSAmJiBjbGlwcGVkV2lkdGggJiYgY2xpcHBlZEhlaWdodCk7Ci0gICAgICAgIGNsaXAxRCh4
LCB3aWR0aCwgc291cmNlV2lkdGgsIGNsaXBwZWRYLCBjbGlwcGVkV2lkdGgpOwotICAgICAgICBj
bGlwMUQoeSwgaGVpZ2h0LCBzb3VyY2VIZWlnaHQsIGNsaXBwZWRZLCBjbGlwcGVkSGVpZ2h0KTsK
LSAgICAgICAgcmV0dXJuICgqY2xpcHBlZFggIT0geCB8fCAqY2xpcHBlZFkgIT0geSB8fCAqY2xp
cHBlZFdpZHRoICE9IHdpZHRoIHx8ICpjbGlwcGVkSGVpZ2h0ICE9IGhlaWdodCk7Ci0gICAgfQot
CiAgICAgR0MzRGludCBjbGFtcChHQzNEaW50IHZhbHVlLCBHQzNEaW50IG1pbiwgR0MzRGludCBt
YXgpCiAgICAgewogICAgICAgICBpZiAodmFsdWUgPCBtaW4pCkBAIC0xNDQyLDUyICsxMzk0LDYg
QEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZQogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvcHlUZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RpbnQgYm9yZGVyKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoImNvcHlU
ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVT
ZXR0YWJsZVRleEZvcm1hdCgiY29weVRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRp
bmcoImNvcHlUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAoIXRleCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmlu
YXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0
KCkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29tcGF0
aWJsZSBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzR0xFUzJO
UE9UU3RyaWN0KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdo
dCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJjb3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVi
dWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2Zy
YW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3Vy
Y2VTYWZlKCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJE
IiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjbGVhcklmQ29tcG9zaXRl
ZCgpOwotICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7Ci0gICAgICAgIFNjb3BlZERyYXdpbmdC
dWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJp
bmRpbmcuZ2V0KCkpOwotICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJh
d2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwotICAgICAgICBH
QzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKLSAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRXaWR0
aCwgY2xpcHBlZEhlaWdodDsKLSAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgp
LCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIG1fdW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAg
ICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7Ci0gICAgICAg
ICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjbGlw
cGVkWCAtIHgsIGNsaXBwZWRZIC0geSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVp
Z2h0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2NvbnRl
eHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIH0KLSAgICAvLyBGSVhNRTogaWYgdGhlIGZyYW1l
YnVmZmVyIGlzIG5vdCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4ZWN1
dGVkLgotICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci19Ci0K
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNl
dCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQpAQCAtMzU0Nyw3ICszNDUz
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZQogICAgIC8vIEZJ
WE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkLgogICAgIGVjID0gMDsK
ICAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdl
MkQiLCB0YXJnZXQsIHRydWUpOwotICAgIEFTU0VSVCh2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJz
KCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlKSk7CisgICAgQVNTRVJU
KHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleEltYWdlMkQiLCBUZXhJbWFnZSwgdGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0
eXBlKSk7CiAgICAgQVNTRVJUKHRleCk7CiAgICAgQVNTRVJUKCFsZXZlbCB8fCAhV2ViR0xUZXh0
dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpOwogICAgIGlmICghcGl4ZWxzKSB7CkBAIC0zNjE2
LDcgKzM1MjIsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlCiAg
ICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZnVuY3Rp
b25UeXBlID09IE5vdFRleFN1YkltYWdlMkQpIHsKKyAgICBpZiAoZnVuY3Rpb25UeXBlICE9IFRl
eFN1YkltYWdlKSB7CiAgICAgICAgIGlmIChsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3
aWR0aCwgaGVpZ2h0KSkgewogICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsID4gMCBub3QgcG93
ZXIgb2YgMiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzY1NCw4ICszNTYwLDgg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhl
bHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleEltYWdlMkQiLCBsZXZlbCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxBbGxvd2VkKQotICAgICAgICB8fCAhdmFs
aWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNlQXJyYXlC
dWZmZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIDAsIDApKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleEltYWdlMkQiLCBsZXZlbCwgd2lkdGgs
IGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBOdWxsQWxsb3dl
ZCkKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIFRleEltYWdlLCBT
b3VyY2VBcnJheUJ1ZmZlclZpZXcsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCiAgICAgICAgIHJldHVybjsK
ICAgICB2b2lkKiBkYXRhID0gcGl4ZWxzID8gcGl4ZWxzLT5iYXNlQWRkcmVzcygpIDogMDsKICAg
ICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7CkBAIC0zNjgyLDcgKzM1ODgsNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0
YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhcGl4ZWxzIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRl
eEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VJbWFnZURhdGEsIHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAs
IGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhcGl4ZWxzIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBUZXhJbWFnZSwgU291
cmNlSW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgcGl4ZWxzLT53aWR0
aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQogICAgICAgICBy
ZXR1cm47CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgYm9vbCBuZWVkQ29udmVyc2lv
biA9IHRydWU7CkBAIC0zNzMwLDcgKzM2MzYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleEltYWdlCiAgICAgaWYgKGltYWdlRm9yUmVuZGVyLT5pc1NWR0ltYWdlKCkpCiAg
ICAgICAgIGltYWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1ZmZlcihpbWFnZUZvclJlbmRl
ci5nZXQoKSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMSk7CiAKLSAgICBpZiAo
IWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhT
dWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXItPndpZHRoKCksIGltYWdlRm9yUmVuZGVyLT5oZWlnaHQo
KSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2
YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBUZXhJbWFnZSwgU291cmNlSFRNTEltYWdlRWxl
bWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0
aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0Nv
bnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGEsIGVjKTsKQEAgLTM3NDAsNyArMzY0Niw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dGV4SW1hZ2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZh
cywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoInRleEltYWdlMkQi
LCBjYW52YXMsIGVjKSB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3Vi
SW1hZ2UyRCwgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlw
ZSwgMCwgMCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVI
VE1MQ2FudmFzRWxlbWVudCgidGV4SW1hZ2UyRCIsIGNhbnZhcywgZWMpIHx8ICF2YWxpZGF0ZVRl
eEZ1bmMoInRleEltYWdlMkQiLCBUZXhJbWFnZSwgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsIHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVp
Z2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFdl
YkdMVGV4dHVyZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQi
LCB0YXJnZXQsIHRydWUpOwpAQCAtMzc4NSw3ICszNjkxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp0ZXhJbWFnZQogewogICAgIGVjID0gMDsKICAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoInRleEltYWdlMkQi
LCB2aWRlbywgZWMpCi0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBO
b3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCks
IDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRl
eEltYWdlMkQiLCBUZXhJbWFnZSwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdo
dCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBH
byB0aHJvdWdoIHRoZSBmYXN0IHBhdGggZG9pbmcgYSBHUFUtR1BVIHRleHR1cmVzIGNvcHkgd2l0
aG91dCBhIHJlYWRiYWNrIHRvIHN5c3RlbSBtZW1vcnkgaWYgcG9zc2libGUuCkBAIC0zODYwLDE1
OSArMzc2Niw2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4UGFyYW0KICAg
ICB0ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgMCwgcGFyYW0sIGZhbHNlKTsKIH0KIAotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAv
LyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAotICAgIGVjID0g
MDsKLSAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7Ci0gICAgQVNTRVJUKHZhbGlkYXRlVGV4
RnVuY1BhcmFtZXRlcnMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxl
dmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSkpOwotICAgIEFTU0VS
VCh2YWxpZGF0ZVNpemUoInRleFN1YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSk7Ci0gICAg
QVNTRVJUKHZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleFN1YkltYWdlMkQiLCBmb3JtYXQp
KTsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFN1
YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlmICghdGV4KSB7Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVCgoeG9m
ZnNldCArIHdpZHRoKSA+PSAwKTsKLSAgICBBU1NFUlQoKHlvZmZzZXQgKyBoZWlnaHQpID49IDAp
OwotICAgIEFTU0VSVCh0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpID49ICh4b2Zmc2V0ICsg
d2lkdGgpKTsKLSAgICBBU1NFUlQodGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkgPj0gKHlv
ZmZzZXQgKyBoZWlnaHQpKTsKLSAgICBBU1NFUlQodGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJn
ZXQsIGxldmVsKSA9PSBmb3JtYXQpOwotICAgIEFTU0VSVCh0ZXgtPmdldFR5cGUodGFyZ2V0LCBs
ZXZlbCkgPT0gdHlwZSk7Ci0gICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxz
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJESW1w
bChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBpbWFnZSwg
R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wgZmxp
cFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMg
PSAwOwotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJ
bWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9tU291cmNlLCBwcmVtdWx0aXBs
eUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNE
OjpOT05FKTsgIAotICAgIGlmICghaW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgpKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0g
aW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKLSAgICBHcmFwaGljc0NvbnRleHQz
RDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9wKCk7Ci0gICAg
Y29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVBpeGVsRGF0
YSgpOwotCi0gICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0gICAgaWYgKHR5cGUgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90
aGluZyAmJiAhZmxpcFkpCi0gICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdlLCBpbWFnZVBp
eGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291cmNlRGF0YUZvcm1hdCwg
aW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZUhlaWdodCgp
LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpLCBkYXRhKSkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkK
LSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNL
X0FMSUdOTUVOVCwgMSk7Ci0gICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgZm9ybWF0LCB0
eXBlLCAgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IGltYWdlUGl4ZWxEYXRhLCBlYyk7
Ci0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5
QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhTdWJJbWFnZTJE
IiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBOdWxsTm90QWxs
b3dlZCkKLSAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1
YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAg
ICByZXR1cm47Ci0gICAgdm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJlc3MoKTsKLSAgICBW
ZWN0b3I8dWludDhfdD4gdGVtcERhdGE7Ci0gICAgYm9vbCBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQg
PSBmYWxzZTsKLSAgICBpZiAoZGF0YSAmJiAobV91bnBhY2tGbGlwWSB8fCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEpKSB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0VGV4dHVyZURh
dGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrQWxpZ25tZW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGF0YSA9IHRlbXBEYXRhLmRhdGEoKTsKLSAg
ICAgICAgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGNoYW5n
ZVVucGFja0FsaWdubWVudCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGlj
c0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgdGV4U3ViSW1hZ2UyREJhc2Uo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBkYXRhLCBlYyk7Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKLSAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBw
aXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFwaXhlbHMgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3Vi
SW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUltYWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwg
Zm9ybWF0LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8dWlu
dDhfdD4gZGF0YTsKLSAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKLSAgICAvLyBUaGUg
ZGF0YSBmcm9tIEltYWdlRGF0YSBpcyBhbHdheXMgb2YgZm9ybWF0IFJHQkE4LgotICAgIC8vIE5v
IGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRlc3RpbmF0aW9uIGZvcm1hdCBpcyBSR0JBIGFuZCB0
eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8gRmxpcCBvciBQcmVtdWx0aXBseSBvcGVyYXRpb24g
aXMgcmVxdWlyZWQuCi0gICAgaWYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAm
JiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmICFtX3VucGFja0Zs
aXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgIG5lZWRDb252ZXJzaW9u
ID0gZmFsc2U7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1h
Z2VEYXRhKHBpeGVscywgZm9ybWF0LCB0eXBlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEsIGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiYmFkIGltYWdl
IGRhdGEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAo
bV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShH
cmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgdGV4U3ViSW1hZ2Uy
REJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgcGl4ZWxzLT53aWR0aCgpLCBw
aXhlbHMtPmhlaWdodCgpLCBmb3JtYXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRh
KCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBlYyk7Ci0gICAgaWYgKG1fdW5wYWNrQWxpZ25t
ZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0
M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVI
VE1MSW1hZ2VFbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgaW1hZ2UsIGVjKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlciA9IGltYWdlLT5jYWNoZWRJ
bWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKTsKLSAgICBpZiAoaW1h
Z2VGb3JSZW5kZXItPmlzU1ZHSW1hZ2UoKSkKLSAgICAgICAgaW1hZ2VGb3JSZW5kZXIgPSBkcmF3
SW1hZ2VJbnRvQnVmZmVyKGltYWdlRm9yUmVuZGVyLmdldCgpLCBpbWFnZS0+d2lkdGgoKSwgaW1h
Z2UtPmhlaWdodCgpLCAxKTsKLQotICAgIGlmICghaW1hZ2VGb3JSZW5kZXIgfHwgIXZhbGlkYXRl
VGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxJbWFnZUVs
ZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXItPndpZHRoKCksIGlt
YWdlRm9yUmVuZGVyLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZUZvclJlbmRlci5nZXQoKSwg
R3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21JbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQg
eG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxl
bWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCgi
dGV4U3ViSW1hZ2UyRCIsIGNhbnZhcywgZWMpCi0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMo
InRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwg
dGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCks
IDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGNhbnZhcy0+Z2V0SW1hZ2VEYXRhKCk7
Ci0gICAgaWYgKGltYWdlRGF0YSkKLSAgICAgICAgdGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOwot
ICAgIGVsc2UKLSAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNz
Q29udGV4dDNEOjpIdG1sRG9tQ2FudmFzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEsIGVjKTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBI
VE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAw
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTFZpZGVv
RWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIHZpZGVvLCBlYykKLSAgICAgICAgfHwgIXZhbGlkYXRl
VGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxWaWRlb0Vs
ZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8t
PnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFn
ZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKLSAgICBpZiAo
IWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhp
Y3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0
aXBseUFscGhhLCBlYyk7Ci19Ci0jZW5kaWYKLQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNE
ZmxvYXQgeCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKQEAg
LTQ4NjMsMTI4ICs0NjE2LDYgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpCi17Ci0gICAg
c3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEZXB0aFRl
eHR1cmUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiZGVwdGggdGV4dHVy
ZSBmb3JtYXRzIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQ
SEFfRVhUOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICgoZm9ybWF0ID09IEV4dGVuc2lvbnMz
RDo6U1JHQl9FWFQgfHwgZm9ybWF0ID09IEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQpCi0g
ICAgICAgICAgICAmJiBtX2V4dHNSR0IpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0ZXh0dXJlIGZvcm1hdCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VF81XzZfNToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRf
NF80OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgotICAg
ICAgICBpZiAobV9vZXNUZXh0dXJlRmxvYXQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOgotICAgICAgICBpZiAo
bV9vZXNUZXh0dXJlSGFsZkZsb2F0KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UXzI0Xzg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlQ6Ci0gICAgICAgIGlmIChtX3dlYmdsRGVwdGhUZXh0dXJlKQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHRleHR1cmUgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
Ly8gVmVyaWZ5IHRoYXQgdGhlIGNvbWJpbmF0aW9uIG9mIGZvcm1hdCBhbmQgdHlwZSBpcyBzdXBw
b3J0ZWQuCi0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpBTFBIQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgotICAgICAgICBpZiAodHlwZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQotICAgICAgICAgICAgJiYgdHlwZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdHlwZSBmb3IgZm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
OgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0VYVDoKLSAgICAgICAgaWYgKHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKLSAgICAgICAgICAgICYmIHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81Ci0gICAgICAgICAgICAmJiB0
eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAotICAgICAgICAgICAgJiYgdHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0eXBlIGZvciBSR0IgZm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQToKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQ6Ci0gICAg
ICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0gICAgICAg
ICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80
Ci0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VF81XzVfNV8xCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9P
RVMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBSR0JBIGZv
cm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICAg
ICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIGZvcm1hdC4gREVQVEhfQ09NUE9ORU5UIG5vdCBlbmFibGVkIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB0eXBlIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxldmVsID4gMCkgewotICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAibGV2ZWwgbXVzdCBiZSAwIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0Iik7
Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6Ci0gICAgICAgIGlmICghbV93
ZWJnbERlcHRoVGV4dHVyZSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQu
IERFUFRIX1NURU5DSUwgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfSU5UXzI0XzgpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZv
ciBERVBUSF9TVEVOQ0lMIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChsZXZlbCA+IDApIHsKLSAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhfU1RFTkNJTCBmb3JtYXQiKTsKLSAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwp
CiB7CiAgICAgaWYgKGxldmVsIDwgMCkgewpAQCAtNTAxNSwxMzggKzQ2NDYsNiBAQCBib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVy
cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSBm
dW5jdGlvblR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpCi17Ci0gICAgLy8gV2UgYWJzb2x1dGVseSBo
YXZlIHRvIHZhbGlkYXRlIHRoZSBmb3JtYXQgYW5kIHR5cGUgY29tYmluYXRpb24uCi0gICAgLy8g
VGhlIHRleEltYWdlMkQgZW50cnkgcG9pbnRzIHRha2luZyBIVE1MSW1hZ2UsIGV0Yy4gd2lsbCBw
cm9kdWNlCi0gICAgLy8gdGVtcG9yYXJ5IGRhdGEgYmFzZWQgb24gdGhpcyBjb21iaW5hdGlvbiwg
c28gaXQgbXVzdCBiZSBsZWdhbC4KLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5
cGUoZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5cGUsIGxldmVsKSB8fCAhdmFsaWRhdGVUZXhGdW5j
TGV2ZWwoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBHQzNEaW50IG1heFRleHR1cmVTaXplRm9yTGV2ZWwgPSBwb3coMi4wLCBtX21heFRleHR1
cmVMZXZlbCAtIDEgLSBsZXZlbCk7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgotICAgICAgICBpZiAod2lkdGggPiBtYXhUZXh0
dXJlU2l6ZUZvckxldmVsIHx8IGhlaWdodCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJhbmdlIik7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0g
ICAgICAgIGlmIChmdW5jdGlvblR5cGUgIT0gVGV4U3ViSW1hZ2UyRCAmJiB3aWR0aCAhPSBoZWln
aHQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCAhPSBoZWlnaHQgZm9yIGN1YmUgbWFw
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gTm8g
bmVlZCB0byBjaGVjayBoZWlnaHQgaGVyZS4gRm9yIHRleEltYWdlIHdpZHRoID09IGhlaWdodC4K
LSAgICAgICAgLy8gRm9yIHRleFN1YkltYWdlIHRoYXQgd2lsbCBiZSBjaGVja2VkIHdoZW4gY2hl
Y2tpbmcgeW9mZnNldCArIGhlaWdodCBpcyBpbiByYW5nZS4KLSAgICAgICAgaWYgKHdpZHRoID4g
bWF4VGV4dHVyZVNpemVGb3JMZXZlbCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9y
IGhlaWdodCBvdXQgb2YgcmFuZ2UgZm9yIGN1YmUgbWFwIik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGlmIChmb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJmb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmIChib3JkZXIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJvcmRlciAhPSAw
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNEYXRhKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVsbERpc3Bvc2l0aW9u
IGRpc3Bvc2l0aW9uKQotewotICAgIGlmICghcGl4ZWxzKSB7Ci0gICAgICAgIGlmIChkaXNwb3Np
dGlvbiA9PSBOdWxsQWxsb3dlZCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAibm8gcGl4ZWxzIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBmb3JtYXQs
IHR5cGUsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghdmFsaWRhdGVT
ZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEU6Ci0gICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5
cGVVaW50OCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX0JZVEUg
YnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpT
Qzo6VHlwZVVpbnQxNikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVE
X1NIT1JUIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQxNkFycmF5Iik7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0Ci0gICAgICAgIGlmIChw
aXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVGbG9hdDMyKSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgInR5cGUgRkxPQVQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgRmxvYXQzMkFycmF5
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0
dXJlX2hhbGZfZmxvYXQKLSAgICAgICAgLy8gQXMgcGVyIHRoZSBzcGVjaWZpY2F0aW9uLCBBcnJh
eUJ1ZmZlclZpZXcgc2hvdWxkIGJlIG51bGwgd2hlbgotICAgICAgICAvLyBPRVNfdGV4dHVyZV9o
YWxmX2Zsb2F0IGlzIGVuYWJsZWQuCi0gICAgICAgIGlmIChwaXhlbHMpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAidHlwZSBIQUxGX0ZMT0FUX09FUyBidXQgQXJyYXlCdWZmZXJWaWV3IGlz
IG5vdCBOVUxMIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgfQotCi0gICAgdW5zaWduZWQgaW50IHRvdGFsQnl0ZXNSZXF1aXJlZDsKLSAgICBHQzNEZW51
bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBl
LCB3aWR0aCwgaGVpZ2h0LCBtX3VucGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwg
MCk7Ci0gICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0
dXJlIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAo
cGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVxdWlyZWQpIHsKLSAgICAgICAgaWYg
KG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpIHsKLSAgICAgICAgICBlcnJvciA9IG1fY29udGV4dC0+
Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCAm
dG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKLSAgICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3Ro
KCkgPT0gdG90YWxCeXRlc1JlcXVpcmVkKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFy
cmF5QnVmZmVyVmlldyBub3QgYmlnIGVub3VnaCBmb3IgcmVxdWVzdCB3aXRoIFVOUEFDS19BTElH
Tk1FTlQgPiAxIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5v
dWdoIGZvciByZXF1ZXN0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVD
b21wcmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKIHsKICAgICByZXR1cm4gbV9jb21w
cmVzc2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJ
KHJldmlzaW9uIDE3OTc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJXZWJH
TEdldEluZm8uaCIKKyNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgogI2luY2x1ZGUgPG1lbW9yeT4K
ICNpbmNsdWRlIDxydW50aW1lL0Zsb2F0MzJBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSW50
MzJBcnJheS5oPgpAQCAtODUsNiArODYsNTQgQEAgY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUzsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAorY2xhc3MgU2NvcGVkRHJhd2lu
Z0J1ZmZlckJpbmRlciB7CitwdWJsaWM6CisgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcihE
cmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZl
ckJpbmRpbmcpCisgICAgICAgIDogbV9kcmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCisgICAg
ICAgICwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcoZnJhbWVidWZmZXJCaW5kaW5nKQorICAgIHsKKyAg
ICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlz
YW1wbGluZykKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdC
dWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIH0KKyAg
ICAKKyAgICB+U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcigpCisgICAgeworICAgICAgICAvLyBS
ZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5iaW5kKCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBEcmF3aW5nQnVmZmVyKiBtX2Ry
YXdpbmdCdWZmZXI7CisgICAgV2ViR0xGcmFtZWJ1ZmZlciogbV9mcmFtZWJ1ZmZlckJpbmRpbmc7
Cit9OworCitpbmxpbmUgdm9pZCBjbGlwMUQoR0MzRGludCBzdGFydCwgR0MzRHNpemVpIHJhbmdl
LCBHQzNEc2l6ZWkgc291cmNlUmFuZ2UsIEdDM0RpbnQqIGNsaXBwZWRTdGFydCwgR0MzRHNpemVp
KiBjbGlwcGVkUmFuZ2UpCit7CisgICAgQVNTRVJUKGNsaXBwZWRTdGFydCAmJiBjbGlwcGVkUmFu
Z2UpOworICAgIGlmIChzdGFydCA8IDApIHsKKyAgICAgICAgcmFuZ2UgKz0gc3RhcnQ7CisgICAg
ICAgIHN0YXJ0ID0gMDsKKyAgICB9CisgICAgR0MzRGludCBlbmQgPSBzdGFydCArIHJhbmdlOwor
ICAgIGlmIChlbmQgPiBzb3VyY2VSYW5nZSkKKyAgICAgICAgcmFuZ2UgLT0gZW5kIC0gc291cmNl
UmFuZ2U7CisgICAgKmNsaXBwZWRTdGFydCA9IHN0YXJ0OworICAgICpjbGlwcGVkUmFuZ2UgPSBy
YW5nZTsKK30KKworLy8gUmV0dXJucyBmYWxzZSBpZiBubyBjbGlwcGluZyBpcyBuZWNlc3Nhcnks
IGkuZS4sIHgsIHksIHdpZHRoLCBoZWlnaHQgc3RheSB0aGUgc2FtZS4KK2lubGluZSBib29sIGNs
aXAyRChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LAorICAgR0MzRHNpemVpIHNvdXJjZVdpZHRoLCBHQzNEc2l6ZWkgc291cmNlSGVpZ2h0LAor
ICAgR0MzRGludCogY2xpcHBlZFgsIEdDM0RpbnQqIGNsaXBwZWRZLCBHQzNEc2l6ZWkqIGNsaXBw
ZWRXaWR0aCwgR0MzRHNpemVpKmNsaXBwZWRIZWlnaHQpCit7CisgICAgQVNTRVJUKGNsaXBwZWRY
ICYmIGNsaXBwZWRZICYmIGNsaXBwZWRXaWR0aCAmJiBjbGlwcGVkSGVpZ2h0KTsKKyAgICBjbGlw
MUQoeCwgd2lkdGgsIHNvdXJjZVdpZHRoLCBjbGlwcGVkWCwgY2xpcHBlZFdpZHRoKTsKKyAgICBj
bGlwMUQoeSwgaGVpZ2h0LCBzb3VyY2VIZWlnaHQsIGNsaXBwZWRZLCBjbGlwcGVkSGVpZ2h0KTsK
KyAgICByZXR1cm4gKCpjbGlwcGVkWCAhPSB4IHx8ICpjbGlwcGVkWSAhPSB5IHx8ICpjbGlwcGVk
V2lkdGggIT0gd2lkdGggfHwgKmNsaXBwZWRIZWlnaHQgIT0gaGVpZ2h0KTsKK30KKwogY2xhc3Mg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSA6IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0
LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+IGNyZWF0ZShIVE1MQ2FudmFzRWxlbWVu
dCosIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqLCBjb25zdCBTdHJpbmcmKTsKQEAgLTEzMiw3ICsx
ODEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSk7CiAK
LSAgICB2b2lkIGNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpID0gMDsKICAgICB2b2lkIGNvcHlUZXhT
dWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQpOwogCiAgICAgUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gY3JlYXRl
QnVmZmVyKCk7CkBAIC0yMzcsMTggKzI4NiwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXhQYXJh
bWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSk7
CiAgICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQgcGFyYW0pOwogCi0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAg
dmlydHVhbCB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyosIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEq
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTElt
YWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcq
LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0ZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgSW1hZ2VEYXRhKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0Vs
ZW1lbnQqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lk
IHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZpcnR1YWwgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVu
dCosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAjZW5kaWYKIAogICAgIHZvaWQgdW5pZm9ybTFmKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4Y2VwdGlv
bkNvZGUmKTsKQEAgLTU4NCw4ICs2MzMsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIHRleElt
YWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3Jk
ZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCB0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNv
dXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9p
ZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJESW1wbChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHRleFN1YkltYWdlMkRC
YXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9p
ZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0ZXhTdWJJ
bWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdl
KiwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCiAgICAgdm9pZCBjaGVj
a1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3QgY2hhciosIGJvb2wpOwogCkBAIC02MjQsMTUgKzY3
MywxNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5w
dXQgZm9ybWF0L3R5cGUgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgogICAgIC8v
IEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBp
bnZhbGlkLgotICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBs
ZXZlbCk7CisgICAgdmlydHVhbCBib29sIHZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKSA9IDA7CiAKICAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQgbGV2ZWwgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7
U3VifUltYWdlLgogICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBp
ZiBsZXZlbCBpcyBpbnZhbGlkLgogICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpOwogCiAg
ICAgZW51bSBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSB7Ci0gICAgICAgIE5vdFRleFN1
YkltYWdlMkQsCi0gICAgICAgIFRleFN1YkltYWdlMkQsCisgICAgICAgIFRleEltYWdlLAorICAg
ICAgICBUZXhTdWJJbWFnZSwKKyAgICAgICAgQ29weVRleEltYWdlCiAgICAgfTsKIAogICAgIGVu
dW0gVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlIHsKQEAgLTY1MCwxMiArNzAwLDEyIEBAIHBy
b3RlY3RlZDoKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBwYXJhbWV0
ZXJzIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KICAgICAvLyBHZW5lcmF0ZXMg
R0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAg
ICBib29sIHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1
bmN0aW9uVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgICAgIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rp
b25UeXBlLAorICAgICAgICBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCisgICAgICAg
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAorICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUpID0gMDsKIAogICAgIGVudW0gTnVsbERpc3Bvc2l0aW9uIHsKICAgICAgICAg
TnVsbEFsbG93ZWQsCkBAIC02NjUsMTEgKzcxNSwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGdpdmVuIEFycmF5QnVmZmVyVmlldwog
ICAgIC8vIGlzIG9mIHRoZSBjb3JyZWN0IHR5cGUgYW5kIGNvbnRhaW5zIGVub3VnaCBkYXRhIGZv
ciB0aGUgdGV4SW1hZ2UgY2FsbC4KICAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVy
bnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAgICBib29sIHZhbGlkYXRlVGV4
RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IGxldmVsLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBwaXhl
bHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bGxEaXNwb3NpdGlvbik7CisgICAg
dmlydHVhbCBib29sIHZhbGlkYXRlVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEaW50IGxldmVsLAorICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsCisgICAgICAgIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsCisgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAorICAgICAgICBO
dWxsRGlzcG9zaXRpb24pID0gMDsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0
ZSBhIGdpdmVuIHRleHR1cmUgZm9ybWF0IGlzIHNldHRhYmxlIGFzIGluCiAgICAgLy8geW91IGNh
biBzdXBwbHkgZGF0YSB0byB0ZXhJbWFnZTJELCBvciBjYWxsIHRleEltYWdlMkQsIGNvcHlUZXhJ
bWFnZTJEIGFuZApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiAxNzk3ODYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MDgsNyArNTA4LDcgQEAgcHVibGljOgogICAgICAgICBDT01QQVJFX1JFRl9UT19URVhU
VVJFID0gMHg4ODRFLAogICAgICAgICBSR0JBMzJGID0gMHg4ODE0LAogICAgICAgICBSR0IzMkYg
PSAweDg4MTUsCi0gICAgICAgIFJHQkExNiA9IDB4ODgxQSwKKyAgICAgICAgUkdCQTE2RiA9IDB4
ODgxQSwKICAgICAgICAgUkdCMTZGID0gMHg4ODFCLAogICAgICAgICBWRVJURVhfQVRUUklCX0FS
UkFZX0lOVEVHRVIgPSAweDg4RkQsCiAgICAgICAgIE1BWF9BUlJBWV9URVhUVVJFX0xBWUVSUyA9
IDB4ODhGRiwK
</data>
<flag name="review"
          id="271157"
          type_id="1"
          status="+"
          setter="bfulgham"
    />
          </attachment>
      

    </bug>

</bugzilla>