<?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>109849</bug_id>
          
          <creation_ts>2013-02-14 11:15:01 -0800</creation_ts>
          <short_desc>AX: Split WebAccessibilityObjectWrapper so code can be shared with iOS</short_desc>
          <delta_ts>2013-02-21 09:53:35 -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>Accessibility</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>
          <dependson>109986</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="chris fleizach">cfleizach</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>buildbot</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>jdiggs</cc>
    
    <cc>mario</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>833257</commentid>
    <comment_count>0</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-02-14 11:15:01 -0800</bug_when>
    <thetext>We need to split out some of the common routines in WebAccessibilityObject, like how we fetch titles and descriptions, into a shared location so iOS can share it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833384</commentid>
    <comment_count>1</comment_count>
      <attachid>188419</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-02-14 13:54:06 -0800</bug_when>
    <thetext>Created attachment 188419
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834264</commentid>
    <comment_count>2</comment_count>
      <attachid>188419</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-15 12:16:14 -0800</bug_when>
    <thetext>Comment on attachment 188419
patch

Attachment 188419 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16585249

New failing tests:
platform/mac/accessibility/aria-liveregions-removedelement.html
platform/mac/accessibility/aria-listbox-selectedchildren-change.html
platform/mac/accessibility/aria-liveregions-notifications-always-sent.html
accessibility/aria-invalid.html
accessibility/loading-iframe-sends-notification.html
accessibility/notification-listeners.html
platform/mac/accessibility/aria-liveregions-notifications.html
platform/mac/accessibility/aria-liveregions-changedtext.html
platform/mac/accessibility/selected-rows-table.html
platform/mac/accessibility/aria-liveregion-on-image.html
platform/mac/accessibility/textbox-role-reports-notifications.html
platform/mac/accessibility/combobox-activedescendant-notifications.html
platform/mac/accessibility/aria-liveregions-addedelement.html
platform/mac/accessibility/aria-liveregions-changedalt.html
platform/mac/accessibility/aria-expanded-notifications.html
platform/mac/accessibility/html-slider-indicator.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834329</commentid>
    <comment_count>3</comment_count>
      <attachid>188419</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-02-15 13:28:09 -0800</bug_when>
    <thetext>Comment on attachment 188419
patch

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

r=me

&gt; Source/WebCore/ChangeLog:19
&gt; +        * accessibility/mac/WebAccessibilityObjectWrapper.h:
&gt; +        * accessibility/mac/WebAccessibilityObjectWrapper.mm:

For shared code between iOS and Mac, we still need to come up with a name.  When we do, these files should move a subdirectory named that (like /apple/).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834466</commentid>
    <comment_count>4</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-02-15 16:19:48 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/143066</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834489</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-02-15 16:38:50 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; http://trac.webkit.org/changeset/143066

Broke Apple Lion build (at least):

http://build.webkit.org/builders/Apple%20Lion%20%28Leaks%29/builds/3849/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834545</commentid>
    <comment_count>6</comment_count>
      <attachid>188675</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-02-15 17:40:49 -0800</bug_when>
    <thetext>Created attachment 188675
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834633</commentid>
    <comment_count>7</comment_count>
      <attachid>188675</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-15 21:58:11 -0800</bug_when>
    <thetext>Comment on attachment 188675
patch for landing

Clearing flags on attachment: 188675

Committed r143098: &lt;http://trac.webkit.org/changeset/143098&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838525</commentid>
    <comment_count>8</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-02-21 09:53:35 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/143230</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188419</attachid>
            <date>2013-02-14 13:54:06 -0800</date>
            <delta_ts>2013-02-15 13:28:09 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>326467</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MjkwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNiBAQAorMjAxMy0wMi0xNCAgQ2hyaXMg
RmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIEFYOiBTcGxpdCBXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBzbyBjb2RlIGNhbiBiZSBzaGFyZWQgd2l0aCBpT1MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTg0OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0IHVw
IHRoZSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBzbyB0aGF0IGlPUyBjYW4gc2hhcmUg
bW9yZSAKKyAgICAgICAgY29kZSB3aXRoIE1hY09TLiBJIGltYWdpbmUgb3ZlciB0aW1lLCBtb3Jl
IGNvZGUgd2lsbCBtb3ZlIGludG8gdGhpcyBiYXNlIGNsYXNzLAorICAgICAgICBidXQgZm9yIG5v
dyB0aGlzIHdpbGwgYmUgYSBnb29kIHN0YXJ0LgorCisgICAgICAgIEEgYmFzZSBjbGFzcyBjYWxs
ZWQgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgbm93IGV4aXN0cywgYW5kIE1hYyBoYXMg
YSBzdWJjbGFzcworICAgICAgICBvZiB0aGF0LiBpT1Mgd2lsbCBiZSBhYmxlIHRvIGRvIHRoZSBz
YW1lLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5oOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkZXRhY2hdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYXR0YWNobWVudFZpZXddKToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eU9iamVjdF0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5UG9z
dGVkTm90aWZpY2F0aW9uOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciB0aXRsZVRhZ1Nob3VsZEJlVXNlZEluRGVzY3JpcHRpb25GaWVsZF0pOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5VGl0bGVdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eURlc2Ny
aXB0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vz
c2liaWxpdHlIZWxwVGV4dF0pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmg6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm06IEFkZGVkLgorICAgICAg
ICAoc3RkKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgZGV0
YWNoXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIGF0dGFj
aG1lbnRWaWV3XSk6CisgICAgICAgIChDRkF1dG9yZWxlYXNlSGVscGVyKToKKyAgICAgICAgKEFY
T2JqZWN0SXNUZXh0TWFya2VyKToKKyAgICAgICAgKEFYT2JqZWN0SXNUZXh0TWFya2VyUmFuZ2Up
OgorICAgICAgICAoQVhUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAoQVhUZXh0TWFya2VyUmFu
Z2VTdGFydCk6CisgICAgICAgIChBWFRleHRNYXJrZXJSYW5nZUVuZCk6CisgICAgICAgIChTZWFy
Y2hLZXlFbnRyeSk6CisgICAgICAgIChjcmVhdGVBY2Nlc3NpYmlsaXR5U2VhcmNoS2V5TWFwKToK
KyAgICAgICAgKGFjY2Vzc2liaWxpdHlTZWFyY2hLZXlGb3JTdHJpbmcpOgorICAgICAgICAodGV4
dE1hcmtlckZvclZpc2libGVQb3NpdGlvbik6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyTWFjIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246XSk6CisgICAgICAg
ICh2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjpdKToKKyAg
ICAgICAgKHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2UpOgorICAgICAg
ICAodmlzaWJsZVBvc2l0aW9uRm9yRW5kT2ZUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAodGV4
dE1hcmtlclJhbmdlRnJvbU1hcmtlcnMpOgorICAgICAgICAoQVhBdHRyaWJ1dGVkU3RyaW5nUmFu
Z2VJc1ZhbGlkKToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udCk6CisgICAgICAg
IChDcmVhdGVDR0NvbG9ySWZEaWZmZXJlbnQpOgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdT
ZXRDb2xvcik6CisgICAgICAgIChBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcik6CisgICAgICAg
IChBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5n
U2V0QmxvY2txdW90ZUxldmVsKToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0U3BlbGxp
bmcpOgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRIZWFkaW5nTGV2ZWwpOgorICAgICAg
ICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRFbGVtZW50KToKKyAgICAgICAgKEFYQXR0cmlidXRlZFN0
cmluZ0FwcGVuZFRleHQpOgorICAgICAgICAobnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUpOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyBkb0FYQXR0cmlidXRlZFN0
cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpdKToKKyAgICAgICAgKHRleHRNYXJrZXJSYW5nZUZyb21W
aXNpYmxlUG9zaXRpb25zKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6ZW5kUG9zaXRpb246XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIGFjY2Vzc2liaWxp
dHlBY3Rpb25OYW1lc10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYyBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVO
YW1lc10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyB2aXNp
YmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgcmVuZGVyV2lkZ2V0Q2hpbGRyZW5dKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgcmVtb3RlQWNjZXNzaWJpbGl0
eVBhcmVudE9iamVjdF0pOgorICAgICAgICAoY29udmVydFRvVmVjdG9yKToKKyAgICAgICAgKGNv
bnZlcnRUb05TQXJyYXkpOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYyB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgcG9zaXRpb25dKToKKyAgICAgICAgKGNyZWF0ZUFjY2Vz
c2liaWxpdHlSb2xlTWFwKToKKyAgICAgICAgKHJvbGVWYWx1ZVRvTlNTdHJpbmcpOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyByb2xlXSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIHN1YnJvbGVdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgcm9sZURlc2NyaXB0aW9uXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIHNjcm9sbFZpZXdQYXJlbnRd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgdGl0bGVUYWdT
aG91bGRCZVVzZWRJbkRlc2NyaXB0aW9uRmllbGRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMgYWNjZXNzaWJpbGl0eVRpdGxlXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbl0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyBhY2Nlc3NpYmls
aXR5SGVscFRleHRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJN
YWMgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYyBhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudF0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyBhY2Nlc3NpYmlsaXR5
SGl0VGVzdDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMg
YWNjZXNzaWJpbGl0eUlzQXR0cmlidXRlU2V0dGFibGU6XSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgYWNjZXNzaWJpbGl0eVBhcmFt
ZXRlcml6ZWRBdHRyaWJ1dGVOYW1lc10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYyBhY2Nlc3NpYmlsaXR5UGVyZm9ybVByZXNzQWN0aW9uXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIGFjY2Vzc2liaWxpdHlQZXJmb3Jt
SW5jcmVtZW50QWN0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyTWFjIGFjY2Vzc2liaWxpdHlQZXJmb3JtRGVjcmVtZW50QWN0aW9uXSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIGFjY2Vzc2liaWxpdHlQZXJmb3JtU2hv
d01lbnVBY3Rpb25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJN
YWMgYWNjZXNzaWJpbGl0eVNob3dDb250ZXh0TWVudV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYyBhY2Nlc3NpYmlsaXR5UGVyZm9ybUFjdGlvbjpdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgYWNjZXNzaWJpbGl0eVNl
dFZhbHVlOmZvckF0dHJpYnV0ZTpdKToKKyAgICAgICAgKHJlbmRlcmVyRm9yVmlldyk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIF9hY2Nlc3NpYmlsaXR5UGFy
ZW50Rm9yU3VidmlldzpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMgYWNjZXNzaWJpbGl0eUFjdGlvbkRlc2NyaXB0aW9uOl0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclJhbmdl
Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyBfY29udmVy
dFRvTlNSYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJN
YWMgX2luZGV4Rm9yVGV4dE1hcmtlcjpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMgX3RleHRNYXJrZXJGb3JJbmRleDpdKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgZG9BWFJURkZvclJhbmdlOl0pOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyBhY2Nlc3NpYmlsaXR5QXR0cmlidXRl
VmFsdWU6Zm9yUGFyYW1ldGVyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYyBhY2Nlc3NpYmlsaXR5U3VwcG9ydHNPdmVycmlkZGVuQXR0cmlidXRlc10pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyBhY2Nlc3NpYmlsaXR5
U2hvdWxkVXNlVW5pcXVlSWRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMgYWNjZXNzaWJpbGl0eUluZGV4T2ZDaGlsZDpdKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgYWNjZXNzaWJpbGl0eUFycmF5QXR0cmlidXRlQ291
bnQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIGFjY2Vz
c2liaWxpdHlBcnJheUF0dHJpYnV0ZVZhbHVlczppbmRleDptYXhDb3VudDpdKToKKyAgICAgICAg
KCtbV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgYWNjZXNzaWJpbGl0eVNldFNob3Vs
ZFJlcG9zdE5vdGlmaWNhdGlvbnM6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyTWFjIGFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmljYXRpb246XSk6CisKIDIwMTMt
MDItMTQgIENvc21pbiBUcnV0YSAgPGN0cnV0YUByaW0uY29tPgogCiAgICAgICAgIE51bWVyaWMg
aWRlbnRpZmllcnMgb2YgZXZlbnRzIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9t
YWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIuaAkocmV2aXNpb24gMTQyNzU1KQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQxLDEyIEBACiAtIChpZClpbml0V2l0
aEFjY2Vzc2liaWxpdHlPYmplY3Q6KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3QqKWF4T2Jq
ZWN0OwogLSAodm9pZClkZXRhY2g7CiAtIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Kilh
Y2Nlc3NpYmlsaXR5T2JqZWN0OwotKyAodm9pZClhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0
Tm90aWZpY2F0aW9uczooQk9PTClyZXBvc3Q7CistIChCT09MKXVwZGF0ZU9iamVjdEJhY2tpbmdT
dG9yZTsKIAorLSAoaWQpYXR0YWNobWVudFZpZXc7CiAvLyBVc2VkIHRvIGluZm9ybSBhbiBlbGVt
ZW50IHdoZW4gYSBub3RpZmljYXRpb24gaXMgcG9zdGVkIGZvciBpdC4gVXNlZCBieSBEUlQuCiAt
ICh2b2lkKWFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmljYXRpb246KE5TU3RyaW5nICopbm90aWZp
Y2F0aW9uTmFtZTsKIAotLSAoTlNWaWV3KilhdHRhY2htZW50VmlldzsKLQogQGVuZAogCiAjZW5k
aWYgLy8gV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJfaApJbmRleDogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hY19oCisjZGVmaW5lIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjX2gK
KworI2ltcG9ydCAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIuaCIKKworQGludGVyZmFj
ZSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyA6IFdlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyCisKKysgKHZvaWQpYWNjZXNzaWJpbGl0eVNldFNob3VsZFJlcG9zdE5vdGlmaWNh
dGlvbnM6KEJPT0wpcmVwb3N0OworCitAZW5kCisKKyNlbmRpZiAvLyBXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlck1hY19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21h
Yy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5t
bQkocmV2aXNpb24gMTQyODk1KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTc3LDI4
OCArNzcsNiBAQAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiAKLS8vIENlbGwgVGFibGVzCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2Vs
bHNBdHRyaWJ1dGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDZWxsc0F0dHJpYnV0
ZSBAIkFYU2VsZWN0ZWRDZWxscyIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVZp
c2libGVDZWxsc0F0dHJpYnV0ZQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2VsbHNB
dHRyaWJ1dGUgQCJBWFZpc2libGVDZWxscyIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJp
bGl0eVJvd0hlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5
Um93SGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZSBAIkFYUm93SGVhZGVyVUlFbGVtZW50cyIKLSNl
bmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVJvd0luZGV4UmFuZ2VBdHRyaWJ1dGUKLSNk
ZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Um93SW5kZXhSYW5nZUF0dHJpYnV0ZSBAIkFYUm93SW5kZXhS
YW5nZSIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUNvbHVtbkluZGV4UmFuZ2VB
dHRyaWJ1dGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Q29sdW1uSW5kZXhSYW5nZUF0dHJpYnV0
ZSBAIkFYQ29sdW1uSW5kZXhSYW5nZSIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0
eUNlbGxGb3JDb2x1bW5BbmRSb3dQYXJhbWV0ZXJpemVkQXR0cmlidXRlCi0jZGVmaW5lIE5TQWNj
ZXNzaWJpbGl0eUNlbGxGb3JDb2x1bW5BbmRSb3dQYXJhbWV0ZXJpemVkQXR0cmlidXRlIEAiQVhD
ZWxsRm9yQ29sdW1uQW5kUm93IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Q2Vs
bFJvbGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Q2VsbFJvbGUgQCJBWENlbGwiCi0jZW5kaWYK
LQotLy8gTGlzdHMKLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Q29udGVudExpc3RTdWJyb2xlCi0j
ZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUNvbnRlbnRMaXN0U3Vicm9sZSBAIkFYQ29udGVudExpc3Qi
Ci0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkxpc3RTdWJyb2xl
Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uTGlzdFN1YnJvbGUgQCJBWERlc2Ny
aXB0aW9uTGlzdCIKLSNlbmRpZgotCi0vLyBNaXNjZWxsYW5lb3VzCi0jaWZuZGVmIE5TQWNjZXNz
aWJpbGl0eUJsb2NrUXVvdGVMZXZlbEF0dHJpYnV0ZQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlC
bG9ja1F1b3RlTGV2ZWxBdHRyaWJ1dGUgQCJBWEJsb2NrUXVvdGVMZXZlbCIKLSNlbmRpZgotCi0j
aWZuZGVmIE5TQWNjZXNzaWJpbGl0eUFjY2Vzc0tleUF0dHJpYnV0ZQotI2RlZmluZSBOU0FjY2Vz
c2liaWxpdHlBY2Nlc3NLZXlBdHRyaWJ1dGUgQCJBWEFjY2Vzc0tleSIKLSNlbmRpZgotCi0jaWZu
ZGVmIE5TQWNjZXNzaWJpbGl0eUxhbmd1YWdlQXR0cmlidXRlCi0jZGVmaW5lIE5TQWNjZXNzaWJp
bGl0eUxhbmd1YWdlQXR0cmlidXRlIEAiQVhMYW5ndWFnZSIKLSNlbmRpZgotCi0jaWZuZGVmIE5T
QWNjZXNzaWJpbGl0eVJlcXVpcmVkQXR0cmlidXRlCi0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVJl
cXVpcmVkQXR0cmlidXRlIEAiQVhSZXF1aXJlZCIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNz
aWJpbGl0eUludmFsaWRBdHRyaWJ1dGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5SW52YWxpZEF0
dHJpYnV0ZSBAIkFYSW52YWxpZCIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eU93
bnNBdHRyaWJ1dGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5T3duc0F0dHJpYnV0ZSBAIkFYT3du
cyIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUdyYWJiZWRBdHRyaWJ1dGUKLSNk
ZWZpbmUgTlNBY2Nlc3NpYmlsaXR5R3JhYmJlZEF0dHJpYnV0ZSBAIkFYR3JhYmJlZCIKLSNlbmRp
ZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRlCi0jZGVmaW5l
IE5TQWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRlIEAiQVhEcm9wRWZmZWN0cyIKLSNl
bmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUFSSUFMaXZlQXR0cmlidXRlCi0jZGVmaW5l
IE5TQWNjZXNzaWJpbGl0eUFSSUFMaXZlQXR0cmlidXRlIEAiQVhBUklBTGl2ZSIKLSNlbmRpZgot
Ci0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUFSSUFBdG9taWNBdHRyaWJ1dGUKLSNkZWZpbmUgTlNB
Y2Nlc3NpYmlsaXR5QVJJQUF0b21pY0F0dHJpYnV0ZSBAIkFYQVJJQUF0b21pYyIKLSNlbmRpZgot
Ci0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUFSSUFSZWxldmFudEF0dHJpYnV0ZQotI2RlZmluZSBO
U0FjY2Vzc2liaWxpdHlBUklBUmVsZXZhbnRBdHRyaWJ1dGUgQCJBWEFSSUFSZWxldmFudCIKLSNl
bmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUFSSUFCdXN5QXR0cmlidXRlCi0jZGVmaW5l
IE5TQWNjZXNzaWJpbGl0eUFSSUFCdXN5QXR0cmlidXRlIEAiQVhBUklBQnVzeSIKLSNlbmRpZgot
Ci0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUxvYWRpbmdQcm9ncmVzc0F0dHJpYnV0ZQotI2RlZmlu
ZSBOU0FjY2Vzc2liaWxpdHlMb2FkaW5nUHJvZ3Jlc3NBdHRyaWJ1dGUgQCJBWExvYWRpbmdQcm9n
cmVzcyIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUhhc1BvcHVwQXR0cmlidXRl
Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUhhc1BvcHVwQXR0cmlidXRlIEAiQVhIYXNQb3B1cCIK
LSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVBsYWNlaG9sZGVyVmFsdWVBdHRyaWJ1
dGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5UGxhY2Vob2xkZXJWYWx1ZUF0dHJpYnV0ZSBAIkFY
UGxhY2Vob2xkZXJWYWx1ZSIKLSNlbmRpZgotCi0vLyBTZWFyY2gKLSNpZm5kZWYgTlNBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50c0ZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUK
LSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50c0ZvclNlYXJjaFByZWRpY2F0ZVBhcmFt
ZXRlcml6ZWRBdHRyaWJ1dGUgQCJBWFVJRWxlbWVudHNGb3JTZWFyY2hQcmVkaWNhdGUiCi0jZW5k
aWYKLQotLy8gU2VhcmNoIEtleXMKLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5QW55VHlwZVNlYXJj
aEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlBbnlUeXBlU2VhcmNoS2V5IEAiQVhBbnlUeXBl
U2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5QmxvY2txdW90ZVNh
bWVMZXZlbFNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlCbG9ja3F1b3RlU2FtZUxl
dmVsU2VhcmNoS2V5IEAiQVhCbG9ja3F1b3RlU2FtZUxldmVsU2VhcmNoS2V5IgotI2VuZGlmCi0K
LSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5QmxvY2txdW90ZVNlYXJjaEtleQotI2RlZmluZSBOU0Fj
Y2Vzc2liaWxpdHlCbG9ja3F1b3RlU2VhcmNoS2V5IEAiQVhCbG9ja3F1b3RlU2VhcmNoS2V5Igot
I2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Qm9sZEZvbnRTZWFyY2hLZXkKLSNkZWZp
bmUgTlNBY2Nlc3NpYmlsaXR5Qm9sZEZvbnRTZWFyY2hLZXkgQCJBWEJvbGRGb250U2VhcmNoS2V5
IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5QnV0dG9uU2VhcmNoS2V5Ci0jZGVm
aW5lIE5TQWNjZXNzaWJpbGl0eUJ1dHRvblNlYXJjaEtleSBAIkFYQnV0dG9uU2VhcmNoS2V5Igot
I2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Q2hlY2tCb3hTZWFyY2hLZXkKLSNkZWZp
bmUgTlNBY2Nlc3NpYmlsaXR5Q2hlY2tCb3hTZWFyY2hLZXkgQCJBWENoZWNrQm94U2VhcmNoS2V5
IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Q29udHJvbFNlYXJjaEtleQotI2Rl
ZmluZSBOU0FjY2Vzc2liaWxpdHlDb250cm9sU2VhcmNoS2V5IEAiQVhDb250cm9sU2VhcmNoS2V5
IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5RGlmZmVyZW50VHlwZVNlYXJjaEtl
eQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlEaWZmZXJlbnRUeXBlU2VhcmNoS2V5IEAiQVhEaWZm
ZXJlbnRUeXBlU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Rm9u
dENoYW5nZVNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlGb250Q2hhbmdlU2VhcmNo
S2V5IEAiQVhGb250Q2hhbmdlU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3Np
YmlsaXR5Rm9udENvbG9yQ2hhbmdlU2VhcmNoS2V5Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUZv
bnRDb2xvckNoYW5nZVNlYXJjaEtleSBAIkFYRm9udENvbG9yQ2hhbmdlU2VhcmNoS2V5IgotI2Vu
ZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5RnJhbWVTZWFyY2hLZXkKLSNkZWZpbmUgTlNB
Y2Nlc3NpYmlsaXR5RnJhbWVTZWFyY2hLZXkgQCJBWEZyYW1lU2VhcmNoS2V5IgotI2VuZGlmCi0K
LSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5R3JhcGhpY1NlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vz
c2liaWxpdHlHcmFwaGljU2VhcmNoS2V5IEAiQVhHcmFwaGljU2VhcmNoS2V5IgotI2VuZGlmCi0K
LSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsMVNlYXJjaEtleQotI2RlZmluZSBO
U0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWwxU2VhcmNoS2V5IEAiQVhIZWFkaW5nTGV2ZWwxU2Vh
cmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsMlNl
YXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWwyU2VhcmNoS2V5IEAi
QVhIZWFkaW5nTGV2ZWwyU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmls
aXR5SGVhZGluZ0xldmVsM1NlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlIZWFkaW5n
TGV2ZWwzU2VhcmNoS2V5IEAiQVhIZWFkaW5nTGV2ZWwzU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNp
Zm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsNFNlYXJjaEtleQotI2RlZmluZSBOU0Fj
Y2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWw0U2VhcmNoS2V5IEAiQVhIZWFkaW5nTGV2ZWw0U2VhcmNo
S2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsNVNlYXJj
aEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWw1U2VhcmNoS2V5IEAiQVhI
ZWFkaW5nTGV2ZWw1U2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5
SGVhZGluZ0xldmVsNlNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2
ZWw2U2VhcmNoS2V5IEAiQVhIZWFkaW5nTGV2ZWw2U2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5k
ZWYgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ1NhbWVMZXZlbFNlYXJjaEtleQotI2RlZmluZSBOU0Fj
Y2Vzc2liaWxpdHlIZWFkaW5nU2FtZUxldmVsU2VhcmNoS2V5IEAiQVhIZWFkaW5nU2FtZUxldmVs
U2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ1NlYXJj
aEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nU2VhcmNoS2V5IEAiQVhIZWFkaW5n
U2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGlnaGxpZ2h0ZWRT
ZWFyY2hLZXkKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5SGlnaGxpZ2h0ZWRTZWFyY2hLZXkgQCJB
WEhpZ2hsaWdodGVkU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5
SXRhbGljRm9udFNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlJdGFsaWNGb250U2Vh
cmNoS2V5IEAiQVhJdGFsaWNGb250U2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nl
c3NpYmlsaXR5TGFuZG1hcmtTZWFyY2hLZXkKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5TGFuZG1h
cmtTZWFyY2hLZXkgQCJBWExhbmRtYXJrU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNB
Y2Nlc3NpYmlsaXR5TGlua1NlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlMaW5rU2Vh
cmNoS2V5IEAiQVhMaW5rU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmls
aXR5TGlzdFNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlMaXN0U2VhcmNoS2V5IEAi
QVhMaXN0U2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5TGl2ZVJl
Z2lvblNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlMaXZlUmVnaW9uU2VhcmNoS2V5
IEAiQVhMaXZlUmVnaW9uU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmls
aXR5TWlzc3BlbGxlZFdvcmRTZWFyY2hLZXkKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5TWlzc3Bl
bGxlZFdvcmRTZWFyY2hLZXkgQCJBWE1pc3NwZWxsZWRXb3JkU2VhcmNoS2V5IgotI2VuZGlmCi0K
LSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5UGxhaW5UZXh0U2VhcmNoS2V5Ci0jZGVmaW5lIE5TQWNj
ZXNzaWJpbGl0eVBsYWluVGV4dFNlYXJjaEtleSBAIkFYUGxhaW5UZXh0U2VhcmNoS2V5IgotI2Vu
ZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5UmFkaW9Hcm91cFNlYXJjaEtleQotI2RlZmlu
ZSBOU0FjY2Vzc2liaWxpdHlSYWRpb0dyb3VwU2VhcmNoS2V5IEAiQVhSYWRpb0dyb3VwU2VhcmNo
S2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5U2FtZVR5cGVTZWFyY2hLZXkK
LSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5U2FtZVR5cGVTZWFyY2hLZXkgQCJBWFNhbWVUeXBlU2Vh
cmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5U3RhdGljVGV4dFNlYXJj
aEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlTdGF0aWNUZXh0U2VhcmNoS2V5IEAiQVhTdGF0
aWNUZXh0U2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5U3R5bGVD
aGFuZ2VTZWFyY2hLZXkKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5U3R5bGVDaGFuZ2VTZWFyY2hL
ZXkgQCJBWFN0eWxlQ2hhbmdlU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3Np
YmlsaXR5VGFibGVTYW1lTGV2ZWxTZWFyY2hLZXkKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VGFi
bGVTYW1lTGV2ZWxTZWFyY2hLZXkgQCJBWFRhYmxlU2FtZUxldmVsU2VhcmNoS2V5IgotI2VuZGlm
Ci0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5VGFibGVTZWFyY2hLZXkKLSNkZWZpbmUgTlNBY2Nl
c3NpYmlsaXR5VGFibGVTZWFyY2hLZXkgQCJBWFRhYmxlU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNp
Zm5kZWYgTlNBY2Nlc3NpYmlsaXR5VGV4dEZpZWxkU2VhcmNoS2V5Ci0jZGVmaW5lIE5TQWNjZXNz
aWJpbGl0eVRleHRGaWVsZFNlYXJjaEtleSBAIkFYVGV4dEZpZWxkU2VhcmNoS2V5IgotI2VuZGlm
Ci0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5VW5kZXJsaW5lU2VhcmNoS2V5Ci0jZGVmaW5lIE5T
QWNjZXNzaWJpbGl0eVVuZGVybGluZVNlYXJjaEtleSBAIkFYVW5kZXJsaW5lU2VhcmNoS2V5Igot
I2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5VW52aXNpdGVkTGlua1NlYXJjaEtleQot
I2RlZmluZSBOU0FjY2Vzc2liaWxpdHlVbnZpc2l0ZWRMaW5rU2VhcmNoS2V5IEAiQVhVbnZpc2l0
ZWRMaW5rU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5VmlzaXRl
ZExpbmtTZWFyY2hLZXkKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VmlzaXRlZExpbmtTZWFyY2hL
ZXkgQCJBWFZpc2l0ZWRMaW5rU2VhcmNoS2V5IgotI2VuZGlmCi0KLSNkZWZpbmUgTlNBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlcklzVmFsaWRQYXJhbWV0ZXJpemVkQXR0cmlidXRlIEAiQVhUZXh0TWFy
a2VySXNWYWxpZCIKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5SW5kZXhGb3JUZXh0TWFya2VyUGFy
YW1ldGVyaXplZEF0dHJpYnV0ZSBAIkFYSW5kZXhGb3JUZXh0TWFya2VyIgotI2RlZmluZSBOU0Fj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyRm9ySW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlIEAiQVhU
ZXh0TWFya2VyRm9ySW5kZXgiCi0KLS8vIE1hdGggYXR0cmlidXRlcwotI2RlZmluZSBOU0FjY2Vz
c2liaWxpdHlNYXRoUm9vdFJhZGljYW5kQXR0cmlidXRlIEAiQVhNYXRoUm9vdFJhZGljYW5kIgot
I2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNYXRoUm9vdEluZGV4QXR0cmlidXRlIEAiQVhNYXRoUm9v
dEluZGV4IgotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNYXRoRnJhY3Rpb25EZW5vbWluYXRvckF0
dHJpYnV0ZSBAIkFYTWF0aEZyYWN0aW9uRGVub21pbmF0b3IiCi0jZGVmaW5lIE5TQWNjZXNzaWJp
bGl0eU1hdGhGcmFjdGlvbk51bWVyYXRvckF0dHJpYnV0ZSBAIkFYTWF0aEZyYWN0aW9uTnVtZXJh
dG9yIgotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNYXRoQmFzZUF0dHJpYnV0ZSBAIkFYTWF0aEJh
c2UiCi0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eU1hdGhTdWJzY3JpcHRBdHRyaWJ1dGUgQCJBWE1h
dGhTdWJzY3JpcHQiCi0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eU1hdGhTdXBlcnNjcmlwdEF0dHJp
YnV0ZSBAIkFYTWF0aFN1cGVyc2NyaXB0IgotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNYXRoVW5k
ZXJBdHRyaWJ1dGUgQCJBWE1hdGhVbmRlciIKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5TWF0aE92
ZXJBdHRyaWJ1dGUgQCJBWE1hdGhPdmVyIgotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNYXRoRmVu
Y2VkT3BlbkF0dHJpYnV0ZSBAIkFYTWF0aEZlbmNlZE9wZW4iCi0jZGVmaW5lIE5TQWNjZXNzaWJp
bGl0eU1hdGhGZW5jZWRDbG9zZUF0dHJpYnV0ZSBAIkFYTWF0aEZlbmNlZENsb3NlIgotCi1AaW50
ZXJmYWNlIE5TT2JqZWN0IChXZWJLaXRBY2Nlc3NpYmlsaXR5QXJyYXlDYXRlZ29yeSkKLQotLSAo
TlNVSW50ZWdlcilhY2Nlc3NpYmlsaXR5SW5kZXhPZkNoaWxkOihpZCljaGlsZDsKLS0gKE5TVUlu
dGVnZXIpYWNjZXNzaWJpbGl0eUFycmF5QXR0cmlidXRlQ291bnQ6KE5TU3RyaW5nICopYXR0cmli
dXRlOwotLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZVZhbHVlczooTlNT
dHJpbmcgKilhdHRyaWJ1dGUgaW5kZXg6KE5TVUludGVnZXIpaW5kZXggbWF4Q291bnQ6KE5TVUlu
dGVnZXIpbWF4Q291bnQ7Ci0KLUBlbmQKLQogQGltcGxlbWVudGF0aW9uIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyCiAKIC0gKGlkKWluaXRXaXRoQWNjZXNzaWJpbGl0eU9iamVjdDooQWNj
ZXNzaWJpbGl0eU9iamVjdCopYXhPYmplY3QKQEAgLTM3MCwxOCArODgsOCBAQAogICAgIHJldHVy
biBzZWxmOwogfQogCi0tICh2b2lkKXVucmVnaXN0ZXJVbmlxdWVJZEZvclVJRWxlbWVudAotewot
ICAgIHdrVW5yZWdpc3RlclVuaXF1ZUlkRm9yRWxlbWVudChzZWxmKTsKLX0KLQogLSAodm9pZClk
ZXRhY2gKIHsKLSAgICAvLyBTZW5kIHVucmVnaXN0ZXJVbmlxdWVJZEZvclVJRWxlbWVudCB1bmNv
bmRpdGlvbmFsbHkgYmVjYXVzZSBpZiBpdCBpcwotICAgIC8vIGV2ZXIgYWNjaWRlbnRhbGx5IG5v
dCBkb25lICh2aWEgb3RoZXIgYnVncyBpbiBvdXIgQVggaW1wbGVtZW50YXRpb24pIHlvdQotICAg
IC8vIGVuZCB1cCB3aXRoIGEgY3Jhc2ggbGlrZSA8cmRhcjovL3Byb2JsZW0vNDI3MzE0OT4uICBJ
dCBpcyBzYWZlIGFuZCBub3QKLSAgICAvLyBleHBlbnNpdmUgdG8gc2VuZCBldmVuIGlmIHRoZSBv
YmplY3QgaXMgbm90IHJlZ2lzdGVyZWQuCi0gICAgW3NlbGYgdW5yZWdpc3RlclVuaXF1ZUlkRm9y
VUlFbGVtZW50XTsKICAgICBtX29iamVjdCA9IDA7CiB9CiAKQEAgLTQwMSwxNTI5ICsxMDksMjAg
QEAKICAgICByZXR1cm4gWUVTOwogfQogCi0tIChBY2Nlc3NpYmlsaXR5T2JqZWN0KilhY2Nlc3Np
YmlsaXR5T2JqZWN0CistIChpZClhdHRhY2htZW50VmlldwogewotICAgIHJldHVybiBtX29iamVj
dDsKLX0KLQotLSAoTlNWaWV3KilhdHRhY2htZW50VmlldwotewotICAgIEFTU0VSVChtX29iamVj
dC0+aXNBdHRhY2htZW50KCkpOwotICAgIFdpZGdldCogd2lkZ2V0ID0gbV9vYmplY3QtPndpZGdl
dEZvckF0dGFjaG1lbnRWaWV3KCk7Ci0gICAgaWYgKCF3aWRnZXQpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVVuaWdub3JlZERlc2NlbmRhbnQod2lkZ2V0
LT5wbGF0Zm9ybVdpZGdldCgpKTsKLX0KLQotI3ByYWdtYSBtYXJrIFN5c3RlbUludGVyZmFjZSB3
cmFwcGVycwotCi1zdGF0aWMgaW5saW5lIGlkIENGQXV0b3JlbGVhc2VIZWxwZXIoQ0ZUeXBlUmVm
IG9iaikKLXsKLSAgICBpZiAob2JqKQotICAgICAgICBDRk1ha2VDb2xsZWN0YWJsZShvYmopOwot
ICAgIFsoaWQpb2JqIGF1dG9yZWxlYXNlXTsKLSAgICByZXR1cm4gKGlkKW9iajsKLX0KLQotc3Rh
dGljIGlubGluZSBCT09MIEFYT2JqZWN0SXNUZXh0TWFya2VyKGlkIG9iaikKLXsKLSAgICByZXR1
cm4gb2JqICE9IG5pbCAmJiBDRkdldFR5cGVJRChvYmopID09IHdrR2V0QVhUZXh0TWFya2VyVHlw
ZUlEKCk7ICAgIAotfQotCi1zdGF0aWMgaW5saW5lIEJPT0wgQVhPYmplY3RJc1RleHRNYXJrZXJS
YW5nZShpZCBvYmopCi17Ci0gICAgcmV0dXJuIG9iaiAhPSBuaWwgJiYgQ0ZHZXRUeXBlSUQob2Jq
KSA9PSB3a0dldEFYVGV4dE1hcmtlclJhbmdlVHlwZUlEKCk7ICAgIAotfQotCi1zdGF0aWMgaWQg
QVhUZXh0TWFya2VyUmFuZ2UoaWQgc3RhcnRNYXJrZXIsIGlkIGVuZE1hcmtlcikKLXsKLSAgICBB
U1NFUlQoc3RhcnRNYXJrZXIgIT0gbmlsKTsKLSAgICBBU1NFUlQoZW5kTWFya2VyICE9IG5pbCk7
Ci0gICAgQVNTRVJUKENGR2V0VHlwZUlEKHN0YXJ0TWFya2VyKSA9PSB3a0dldEFYVGV4dE1hcmtl
clR5cGVJRCgpKTsKLSAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQoZW5kTWFya2VyKSA9PSB3a0dldEFY
VGV4dE1hcmtlclR5cGVJRCgpKTsKLSAgICByZXR1cm4gQ0ZBdXRvcmVsZWFzZUhlbHBlcih3a0Ny
ZWF0ZUFYVGV4dE1hcmtlclJhbmdlKChDRlR5cGVSZWYpc3RhcnRNYXJrZXIsIChDRlR5cGVSZWYp
ZW5kTWFya2VyKSk7Ci19Ci0KLXN0YXRpYyBpZCBBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KGlkIHJh
bmdlKQotewotICAgIEFTU0VSVChyYW5nZSAhPSBuaWwpOwotICAgIEFTU0VSVChDRkdldFR5cGVJ
RChyYW5nZSkgPT0gd2tHZXRBWFRleHRNYXJrZXJSYW5nZVR5cGVJRCgpKTsKLSAgICByZXR1cm4g
Q0ZBdXRvcmVsZWFzZUhlbHBlcih3a0NvcHlBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KHJhbmdlKSk7
ICAgIAotfQotCi1zdGF0aWMgaWQgQVhUZXh0TWFya2VyUmFuZ2VFbmQoaWQgcmFuZ2UpCi17Ci0g
ICAgQVNTRVJUKHJhbmdlICE9IG5pbCk7Ci0gICAgQVNTRVJUKENGR2V0VHlwZUlEKHJhbmdlKSA9
PSB3a0dldEFYVGV4dE1hcmtlclJhbmdlVHlwZUlEKCkpOwotICAgIHJldHVybiBDRkF1dG9yZWxl
YXNlSGVscGVyKHdrQ29weUFYVGV4dE1hcmtlclJhbmdlRW5kKHJhbmdlKSk7ICAgIAotfQotCi0j
cHJhZ21hIG1hcmsgU2VhcmNoIGhlbHBlcnMKLQotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQWNj
ZXNzaWJpbGl0eVNlYXJjaEtleT4gQWNjZXNzaWJpbGl0eVNlYXJjaEtleU1hcDsKLQotc3RydWN0
IFNlYXJjaEtleUVudHJ5IHsKLSAgICBTdHJpbmcga2V5OwotICAgIEFjY2Vzc2liaWxpdHlTZWFy
Y2hLZXkgdmFsdWU7Ci19OwotCi1zdGF0aWMgQWNjZXNzaWJpbGl0eVNlYXJjaEtleU1hcCogY3Jl
YXRlQWNjZXNzaWJpbGl0eVNlYXJjaEtleU1hcCgpCi17Ci0gICAgY29uc3QgU2VhcmNoS2V5RW50
cnkgc2VhcmNoS2V5c1tdID0gewotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUFueVR5cGVTZWFy
Y2hLZXksIEFueVR5cGVTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlCbG9j
a3F1b3RlU2FtZUxldmVsU2VhcmNoS2V5LCBCbG9ja3F1b3RlU2FtZUxldmVsU2VhcmNoS2V5IH0s
Ci0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5QmxvY2txdW90ZVNlYXJjaEtleSwgQmxvY2txdW90
ZVNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUJvbGRGb250U2VhcmNoS2V5
LCBCb2xkRm9udFNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUJ1dHRvblNl
YXJjaEtleSwgQnV0dG9uU2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5Q2hl
Y2tCb3hTZWFyY2hLZXksIENoZWNrQm94U2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3Np
YmlsaXR5Q29udHJvbFNlYXJjaEtleSwgQ29udHJvbFNlYXJjaEtleSB9LAotICAgICAgICB7IE5T
QWNjZXNzaWJpbGl0eURpZmZlcmVudFR5cGVTZWFyY2hLZXksIERpZmZlcmVudFR5cGVTZWFyY2hL
ZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlGb250Q2hhbmdlU2VhcmNoS2V5LCBGb250
Q2hhbmdlU2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5Rm9udENvbG9yQ2hh
bmdlU2VhcmNoS2V5LCBGb250Q29sb3JDaGFuZ2VTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0Fj
Y2Vzc2liaWxpdHlGcmFtZVNlYXJjaEtleSwgRnJhbWVTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBO
U0FjY2Vzc2liaWxpdHlHcmFwaGljU2VhcmNoS2V5LCBHcmFwaGljU2VhcmNoS2V5IH0sCi0gICAg
ICAgIHsgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsMVNlYXJjaEtleSwgSGVhZGluZ0xldmVs
MVNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDJTZWFy
Y2hLZXksIEhlYWRpbmdMZXZlbDJTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxp
dHlIZWFkaW5nTGV2ZWwzU2VhcmNoS2V5LCBIZWFkaW5nTGV2ZWwzU2VhcmNoS2V5IH0sCi0gICAg
ICAgIHsgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsNFNlYXJjaEtleSwgSGVhZGluZ0xldmVs
NFNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDVTZWFy
Y2hLZXksIEhlYWRpbmdMZXZlbDVTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxp
dHlIZWFkaW5nTGV2ZWw2U2VhcmNoS2V5LCBIZWFkaW5nTGV2ZWw2U2VhcmNoS2V5IH0sCi0gICAg
ICAgIHsgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ1NhbWVMZXZlbFNlYXJjaEtleSwgSGVhZGluZ1Nh
bWVMZXZlbFNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdTZWFy
Y2hLZXksIEhlYWRpbmdTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlIaWdo
bGlnaHRlZFNlYXJjaEtleSwgSGlnaGxpZ2h0ZWRTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0Fj
Y2Vzc2liaWxpdHlJdGFsaWNGb250U2VhcmNoS2V5LCBJdGFsaWNGb250U2VhcmNoS2V5IH0sCi0g
ICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5TGFuZG1hcmtTZWFyY2hLZXksIExhbmRtYXJrU2VhcmNo
S2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5TGlua1NlYXJjaEtleSwgTGlua1NlYXJj
aEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUxpc3RTZWFyY2hLZXksIExpc3RTZWFy
Y2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlMaXZlUmVnaW9uU2VhcmNoS2V5LCBM
aXZlUmVnaW9uU2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5TWlzc3BlbGxl
ZFdvcmRTZWFyY2hLZXksIE1pc3NwZWxsZWRXb3JkU2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNB
Y2Nlc3NpYmlsaXR5UGxhaW5UZXh0U2VhcmNoS2V5LCBQbGFpblRleHRTZWFyY2hLZXkgfSwKLSAg
ICAgICAgeyBOU0FjY2Vzc2liaWxpdHlSYWRpb0dyb3VwU2VhcmNoS2V5LCBSYWRpb0dyb3VwU2Vh
cmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5U2FtZVR5cGVTZWFyY2hLZXksIFNh
bWVUeXBlU2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5U3RhdGljVGV4dFNl
YXJjaEtleSwgU3RhdGljVGV4dFNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0
eVN0eWxlQ2hhbmdlU2VhcmNoS2V5LCBTdHlsZUNoYW5nZVNlYXJjaEtleSB9LAotICAgICAgICB7
IE5TQWNjZXNzaWJpbGl0eVRhYmxlU2FtZUxldmVsU2VhcmNoS2V5LCBUYWJsZVNhbWVMZXZlbFNl
YXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eVRhYmxlU2VhcmNoS2V5LCBUYWJs
ZVNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eVRleHRGaWVsZFNlYXJjaEtl
eSwgVGV4dEZpZWxkU2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5VW5kZXJs
aW5lU2VhcmNoS2V5LCBVbmRlcmxpbmVTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2li
aWxpdHlVbnZpc2l0ZWRMaW5rU2VhcmNoS2V5LCBVbnZpc2l0ZWRMaW5rU2VhcmNoS2V5IH0sCi0g
ICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5VmlzaXRlZExpbmtTZWFyY2hLZXksIFZpc2l0ZWRMaW5r
U2VhcmNoS2V5IH0KLSAgICB9OwotICAgIAotICAgIEFjY2Vzc2liaWxpdHlTZWFyY2hLZXlNYXAq
IHNlYXJjaEtleU1hcCA9IG5ldyBBY2Nlc3NpYmlsaXR5U2VhcmNoS2V5TWFwOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChzZWFyY2hLZXlzKTsgaSsrKQotICAg
ICAgICBzZWFyY2hLZXlNYXAtPnNldChzZWFyY2hLZXlzW2ldLmtleSwgc2VhcmNoS2V5c1tpXS52
YWx1ZSk7Ci0gICAgCi0gICAgcmV0dXJuIHNlYXJjaEtleU1hcDsKLX0KLQotc3RhdGljIEFjY2Vz
c2liaWxpdHlTZWFyY2hLZXkgYWNjZXNzaWJpbGl0eVNlYXJjaEtleUZvclN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBBbnlUeXBlU2VhcmNoS2V5OwotICAgIAotICAgIHN0YXRpYyBjb25zdCBBY2Nlc3NpYmlsaXR5
U2VhcmNoS2V5TWFwKiBzZWFyY2hLZXlNYXAgPSBjcmVhdGVBY2Nlc3NpYmlsaXR5U2VhcmNoS2V5
TWFwKCk7Ci0gICAgCi0gICAgQWNjZXNzaWJpbGl0eVNlYXJjaEtleSBzZWFyY2hLZXkgPSBzZWFy
Y2hLZXlNYXAtPmdldCh2YWx1ZSk7Ci0gICAgCi0gICAgcmV0dXJuIHNlYXJjaEtleSA/IHNlYXJj
aEtleSA6IEFueVR5cGVTZWFyY2hLZXk7Ci19Ci0KLSNwcmFnbWEgbWFyayBUZXh0IE1hcmtlciBo
ZWxwZXJzCi0KLXN0YXRpYyBpZCB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKEFYT2JqZWN0
Q2FjaGUqIGNhY2hlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3MpCi17Ci0gICAg
QVNTRVJUKGNhY2hlKTsKLSAgICAKLSAgICBUZXh0TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsK
LSAgICBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRpb24odGV4dE1hcmtlckRh
dGEsIHZpc2libGVQb3MpOwotICAgIGlmICghdGV4dE1hcmtlckRhdGEuYXhJRCkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICAKLSAgICByZXR1cm4gQ0ZBdXRvcmVsZWFzZUhlbHBlcih3a0NyZWF0
ZUFYVGV4dE1hcmtlcigmdGV4dE1hcmtlckRhdGEsIHNpemVvZih0ZXh0TWFya2VyRGF0YSkpKTsK
LX0KLQotLSAoaWQpdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjooY29uc3QgVmlzaWJsZVBv
c2l0aW9uICYpdmlzaWJsZVBvcwotewotICAgIHJldHVybiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBv
c2l0aW9uKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHZpc2libGVQb3MpOwotfQotCi1zdGF0
aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoQVhPYmplY3RD
YWNoZSogY2FjaGUsIENGVHlwZVJlZiB0ZXh0TWFya2VyKQotewotICAgIEFTU0VSVChjYWNoZSk7
Ci0KLSAgICBpZiAoIXRleHRNYXJrZXIpCi0gICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
KTsKLSAgICBUZXh0TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKLSAgICBpZiAoIXdrR2V0Qnl0
ZXNGcm9tQVhUZXh0TWFya2VyKHRleHRNYXJrZXIsICZ0ZXh0TWFya2VyRGF0YSwgc2l6ZW9mKHRl
eHRNYXJrZXJEYXRhKSkpCi0gICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKLSAgICAK
LSAgICByZXR1cm4gY2FjaGUtPnZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXJEYXRhKHRleHRN
YXJrZXJEYXRhKTsKLX0KLQotLSAoVmlzaWJsZVBvc2l0aW9uKXZpc2libGVQb3NpdGlvbkZvclRl
eHRNYXJrZXI6KGlkKXRleHRNYXJrZXIKLXsKLSAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uRm9y
VGV4dE1hcmtlcihtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2VyKTsKLX0KLQot
c3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JTdGFydE9mVGV4dE1hcmtl
clJhbmdlKEFYT2JqZWN0Q2FjaGUgKmNhY2hlLCBpZCB0ZXh0TWFya2VyUmFuZ2UpCi17Ci0gICAg
cmV0dXJuIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoY2FjaGUsIEFYVGV4dE1hcmtlclJh
bmdlU3RhcnQodGV4dE1hcmtlclJhbmdlKSk7Ci19Ci0KLXN0YXRpYyBWaXNpYmxlUG9zaXRpb24g
dmlzaWJsZVBvc2l0aW9uRm9yRW5kT2ZUZXh0TWFya2VyUmFuZ2UoQVhPYmplY3RDYWNoZSAqY2Fj
aGUsIGlkIHRleHRNYXJrZXJSYW5nZSkKLXsKLSAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uRm9y
VGV4dE1hcmtlcihjYWNoZSwgQVhUZXh0TWFya2VyUmFuZ2VFbmQodGV4dE1hcmtlclJhbmdlKSk7
Ci19Ci0KLXN0YXRpYyBpZCB0ZXh0TWFya2VyUmFuZ2VGcm9tTWFya2VycyhpZCB0ZXh0TWFya2Vy
MSwgaWQgdGV4dE1hcmtlcjIpCi17Ci0gICAgaWYgKCF0ZXh0TWFya2VyMSB8fCAhdGV4dE1hcmtl
cjIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIAotICAgIHJldHVybiBBWFRleHRNYXJr
ZXJSYW5nZSh0ZXh0TWFya2VyMSwgdGV4dE1hcmtlcjIpOwotfQotCi0vLyBXaGVuIG1vZGlmeWlu
ZyBhdHRyaWJ1dGVkIHN0cmluZ3MsIHRoZSByYW5nZSBjYW4gY29tZSBmcm9tIGEgc291cmNlIHdo
aWNoIG1heSBwcm92aWRlIGZhdWx0eSBpbmZvcm1hdGlvbiAoZS5nLiB0aGUgc3BlbGwgY2hlY2tl
cikuCi0vLyBUbyBwcm90ZWN0IGFnYWluc3Qgc3VjaCBjYXNlcyB0aGUgcmFuZ2Ugc2hvdWxkIGJl
IHZhbGlkYXRlZCBiZWZvcmUgYWRkaW5nIG9yIHJlbW92aW5nIGF0dHJpYnV0ZXMuCi1zdGF0aWMg
Qk9PTCBBWEF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzVmFsaWQoTlNBdHRyaWJ1dGVkU3RyaW5nKiBh
dHRyU3RyaW5nLCBOU1JhbmdlIHJhbmdlKQotewotICAgIHJldHVybiAocmFuZ2UubG9jYXRpb24g
PCBbYXR0clN0cmluZyBsZW5ndGhdICYmIE5TTWF4UmFuZ2UocmFuZ2UpIDw9IFthdHRyU3RyaW5n
IGxlbmd0aF0pOwotfQotCi1zdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoTlNN
dXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywgTlNTdHJpbmcqIGF0dHJpYnV0ZSwg
TlNGb250KiBmb250LCBOU1JhbmdlIHJhbmdlKQotewotICAgIGlmICghQVhBdHRyaWJ1dGVkU3Ry
aW5nUmFuZ2VJc1ZhbGlkKGF0dHJTdHJpbmcsIHJhbmdlKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGlmIChmb250KSB7Ci0gICAgICAgIE5TRGljdGlvbmFyeSogZGljdCA9IFtOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKLSAgICAgICAgICAgIFtmb250IGZv
bnROYW1lXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBOU0FjY2Vzc2liaWxpdHlGb250
TmFtZUtleSwKLSAgICAgICAgICAgIFtmb250IGZhbWlseU5hbWVdICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCBOU0FjY2Vzc2liaWxpdHlGb250RmFtaWx5S2V5LAotICAgICAgICAgICAgW2Zv
bnQgZGlzcGxheU5hbWVdICAgICAgICAgICAgICAgICAgICAgICAgICAsIE5TQWNjZXNzaWJpbGl0
eVZpc2libGVOYW1lS2V5LAotICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpb
Zm9udCBwb2ludFNpemVdXSAsIE5TQWNjZXNzaWJpbGl0eUZvbnRTaXplS2V5LAotICAgICAgICBu
aWxdOwotCi0gICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTphdHRyaWJ1dGUgdmFsdWU6
ZGljdCByYW5nZTpyYW5nZV07Ci0gICAgfSBlbHNlCi0gICAgICAgIFthdHRyU3RyaW5nIHJlbW92
ZUF0dHJpYnV0ZTphdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOwotICAgIAotfQotCi1zdGF0aWMgQ0dD
b2xvclJlZiBDcmVhdGVDR0NvbG9ySWZEaWZmZXJlbnQoTlNDb2xvciogbnNDb2xvciwgQ0dDb2xv
clJlZiBleGlzdGluZ0NvbG9yKQotewotICAgIC8vIGdldCBjb2xvciBpbmZvcm1hdGlvbiBhc3N1
bWluZyBOU0RldmljZVJHQkNvbG9yU3BhY2UgCi0gICAgTlNDb2xvciogcmdiQ29sb3IgPSBbbnND
b2xvciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKLSAg
ICBpZiAocmdiQ29sb3IgPT0gbmlsKQotICAgICAgICByZ2JDb2xvciA9IFtOU0NvbG9yIGJsYWNr
Q29sb3JdOwotICAgIENHRmxvYXQgY29tcG9uZW50c1s0XTsKLSAgICBbcmdiQ29sb3IgZ2V0UmVk
OiZjb21wb25lbnRzWzBdIGdyZWVuOiZjb21wb25lbnRzWzFdIGJsdWU6JmNvbXBvbmVudHNbMl0g
YWxwaGE6JmNvbXBvbmVudHNbM11dOwotICAgIAotICAgIC8vIGNyZWF0ZSBhIG5ldyBDR0NvbG9y
UmVmIHRvIHJldHVybgotICAgIENHQ29sb3JTcGFjZVJlZiBjZ0NvbG9yU3BhY2UgPSBDR0NvbG9y
U3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKLSAgICBDR0NvbG9yUmVmIGNnQ29sb3IgPSBDR0NvbG9y
Q3JlYXRlKGNnQ29sb3JTcGFjZSwgY29tcG9uZW50cyk7Ci0gICAgQ0dDb2xvclNwYWNlUmVsZWFz
ZShjZ0NvbG9yU3BhY2UpOwotICAgIAotICAgIC8vIGNoZWNrIGZvciBtYXRjaCB3aXRoIGV4aXN0
aW5nIGNvbG9yCi0gICAgaWYgKGV4aXN0aW5nQ29sb3IgJiYgQ0dDb2xvckVxdWFsVG9Db2xvcihj
Z0NvbG9yLCBleGlzdGluZ0NvbG9yKSkgewotICAgICAgICBDR0NvbG9yUmVsZWFzZShjZ0NvbG9y
KTsKLSAgICAgICAgY2dDb2xvciA9IDA7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjZ0NvbG9y
OwotfQotCi1zdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKE5TTXV0YWJsZUF0
dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIE5TU3RyaW5nKiBhdHRyaWJ1dGUsIE5TQ29sb3Iq
IGNvbG9yLCBOU1JhbmdlIHJhbmdlKQotewotICAgIGlmICghQVhBdHRyaWJ1dGVkU3RyaW5nUmFu
Z2VJc1ZhbGlkKGF0dHJTdHJpbmcsIHJhbmdlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGNvbG9yKSB7Ci0gICAgICAgIENHQ29sb3JSZWYgZXhpc3RpbmdDb2xvciA9IChDR0NvbG9yUmVm
KSBbYXR0clN0cmluZyBhdHRyaWJ1dGU6YXR0cmlidXRlIGF0SW5kZXg6cmFuZ2UubG9jYXRpb24g
ZWZmZWN0aXZlUmFuZ2U6bmlsXTsKLSAgICAgICAgQ0dDb2xvclJlZiBjZ0NvbG9yID0gQ3JlYXRl
Q0dDb2xvcklmRGlmZmVyZW50KGNvbG9yLCBleGlzdGluZ0NvbG9yKTsKLSAgICAgICAgaWYgKGNn
Q29sb3IpIHsKLSAgICAgICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTphdHRyaWJ1dGUg
dmFsdWU6KGlkKWNnQ29sb3IgcmFuZ2U6cmFuZ2VdOwotICAgICAgICAgICAgQ0dDb2xvclJlbGVh
c2UoY2dDb2xvcik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgW2F0dHJTdHJpbmcg
cmVtb3ZlQXR0cmlidXRlOmF0dHJpYnV0ZSByYW5nZTpyYW5nZV07Ci19Ci0KLXN0YXRpYyB2b2lk
IEFYQXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0
dHJTdHJpbmcsIE5TU3RyaW5nKiBhdHRyaWJ1dGUsIE5TTnVtYmVyKiBudW1iZXIsIE5TUmFuZ2Ug
cmFuZ2UpCi17Ci0gICAgaWYgKCFBWEF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzVmFsaWQoYXR0clN0
cmluZywgcmFuZ2UpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobnVtYmVyKQotICAgICAg
ICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6YXR0cmlidXRlIHZhbHVlOm51bWJlciByYW5nZTpy
YW5nZV07Ci0gICAgZWxzZQotICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6YXR0
cmlidXRlIHJhbmdlOnJhbmdlXTsKLX0KLQotc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdT
ZXRTdHlsZShOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBOU1JhbmdlIHJhbmdlKQotewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IHJlbmRlcmVyLT5zdHlsZSgpOwotCi0gICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5mbwotICAgIEFY
QXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb250VGV4
dEF0dHJpYnV0ZSwgc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSwgcmFu
Z2UpOwotCi0gICAgLy8gc2V0IGJhc2ljIGNvbG9ycwotICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0
Q29sb3IoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9yZWdyb3VuZENvbG9yVGV4dEF0dHJp
YnV0ZSwgbnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29s
b3IpKSwgcmFuZ2UpOwotICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoYXR0clN0cmluZywg
TlNBY2Nlc3NpYmlsaXR5QmFja2dyb3VuZENvbG9yVGV4dEF0dHJpYnV0ZSwgbnNDb2xvcihzdHls
ZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSksIHJh
bmdlKTsKLQotICAgIC8vIHNldCBzdXBlci9zdWIgc2NyaXB0aW5nCi0gICAgRVZlcnRpY2FsQWxp
Z24gYWxpZ25tZW50ID0gc3R5bGUtPnZlcnRpY2FsQWxpZ24oKTsKLSAgICBpZiAoYWxpZ25tZW50
ID09IFNVQikKLSAgICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywg
TlNBY2Nlc3NpYmlsaXR5U3VwZXJzY3JpcHRUZXh0QXR0cmlidXRlLCBbTlNOdW1iZXIgbnVtYmVy
V2l0aEludDooLTEpXSwgcmFuZ2UpOwotICAgIGVsc2UgaWYgKGFsaWdubWVudCA9PSBTVVBFUikK
LSAgICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgTlNBY2Nlc3Np
YmlsaXR5U3VwZXJzY3JpcHRUZXh0QXR0cmlidXRlLCBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDox
XSwgcmFuZ2UpOwotICAgIGVsc2UKLSAgICAgICAgW2F0dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRl
Ok5TQWNjZXNzaWJpbGl0eVN1cGVyc2NyaXB0VGV4dEF0dHJpYnV0ZSByYW5nZTpyYW5nZV07Ci0g
ICAgCi0gICAgLy8gc2V0IHNoYWRvdwotICAgIGlmIChzdHlsZS0+dGV4dFNoYWRvdygpKQotICAg
ICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxp
dHlTaGFkb3dUZXh0QXR0cmlidXRlLCBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgcmFu
Z2UpOwotICAgIGVsc2UKLSAgICAgICAgW2F0dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRlOk5TQWNj
ZXNzaWJpbGl0eVNoYWRvd1RleHRBdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOwotICAgIAotICAgIC8v
IHNldCB1bmRlcmxpbmUgYW5kIHN0cmlrZXRocm91Z2gKLSAgICBpbnQgZGVjb3IgPSBzdHlsZS0+
dGV4dERlY29yYXRpb25zSW5FZmZlY3QoKTsKLSAgICBpZiAoKGRlY29yICYgVU5ERVJMSU5FKSA9
PSAwKSB7Ci0gICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxp
dHlVbmRlcmxpbmVUZXh0QXR0cmlidXRlIHJhbmdlOnJhbmdlXTsKLSAgICAgICAgW2F0dHJTdHJp
bmcgcmVtb3ZlQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eVVuZGVybGluZUNvbG9yVGV4dEF0dHJp
YnV0ZSByYW5nZTpyYW5nZV07Ci0gICAgfQotICAgIAotICAgIGlmICgoZGVjb3IgJiBMSU5FX1RI
Uk9VR0gpID09IDApIHsKLSAgICAgICAgW2F0dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRlOk5TQWNj
ZXNzaWJpbGl0eVN0cmlrZXRocm91Z2hUZXh0QXR0cmlidXRlIHJhbmdlOnJhbmdlXTsKLSAgICAg
ICAgW2F0dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eVN0cmlrZXRocm91
Z2hDb2xvclRleHRBdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOwotICAgIH0KLQotICAgIGlmICgoZGVj
b3IgJiAoVU5ERVJMSU5FIHwgTElORV9USFJPVUdIKSkgIT0gMCkgewotICAgICAgICAvLyBmaW5k
IGNvbG9ycyB1c2luZyBxdWlyayBtb2RlIGFwcHJvYWNoIChzdHJpY3QgbW9kZSB3b3VsZCB1c2Ug
Y3VycmVudAotICAgICAgICAvLyBjb2xvciBmb3IgYWxsIGJ1dCB0aGUgcm9vdCBsaW5lIGJveCwg
d2hpY2ggd291bGQgdXNlIGdldFRleHREZWNvcmF0aW9uQ29sb3JzKQotICAgICAgICBDb2xvciB1
bmRlcmxpbmUsIG92ZXJsaW5lLCBsaW5ldGhyb3VnaDsKLSAgICAgICAgcmVuZGVyZXItPmdldFRl
eHREZWNvcmF0aW9uQ29sb3JzKGRlY29yLCB1bmRlcmxpbmUsIG92ZXJsaW5lLCBsaW5ldGhyb3Vn
aCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoKGRlY29yICYgVU5ERVJMSU5FKSAhPSAwKSB7Ci0g
ICAgICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vz
c2liaWxpdHlVbmRlcmxpbmVUZXh0QXR0cmlidXRlLCBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6
WUVTXSwgcmFuZ2UpOwotICAgICAgICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRDb2xvcihhdHRy
U3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlVbmRlcmxpbmVDb2xvclRleHRBdHRyaWJ1dGUsIG5zQ29s
b3IodW5kZXJsaW5lKSwgcmFuZ2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChkZWNvciAm
IExJTkVfVEhST1VHSCkgIT0gMCkgewotICAgICAgICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRO
dW1iZXIoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5U3RyaWtldGhyb3VnaFRleHRBdHRyaWJ1
dGUsIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCByYW5nZSk7Ci0gICAgICAgICAgICBB
WEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eVN0cmlr
ZXRocm91Z2hDb2xvclRleHRBdHRyaWJ1dGUsIG5zQ29sb3IobGluZXRocm91Z2gpLCByYW5nZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gSW5kaWNhdGUgYmFja2dyb3VuZCBoaWdo
bGlnaHRpbmcuCi0gICAgZm9yIChOb2RlKiBub2RlID0gcmVuZGVyZXItPm5vZGUoKTsgbm9kZTsg
bm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFt
ZShtYXJrVGFnKSkKLSAgICAgICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKGF0dHJT
dHJpbmcsIEAiQVhIaWdobGlnaHQiLCBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgcmFu
Z2UpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRCbG9ja3F1
b3RlTGV2ZWwoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciwgTlNSYW5nZSByYW5nZSkKLXsKLSAgICBpZiAoIUFYQXR0cmlidXRlZFN0
cmluZ1JhbmdlSXNWYWxpZChhdHRyU3RyaW5nLCByYW5nZSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLT5heE9i
amVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlcmVyKTsKLSAgICBpbnQgcXVvdGVMZXZlbCA9
IG9iai0+YmxvY2txdW90ZUxldmVsKCk7Ci0gICAgCi0gICAgaWYgKHF1b3RlTGV2ZWwpCi0gICAg
ICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlCbG9ja1F1b3RlTGV2
ZWxBdHRyaWJ1dGUgdmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6cXVvdGVMZXZlbF0gcmFu
Z2U6cmFuZ2VdOwotICAgIGVsc2UKLSAgICAgICAgW2F0dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRl
Ok5TQWNjZXNzaWJpbGl0eUJsb2NrUXVvdGVMZXZlbEF0dHJpYnV0ZSByYW5nZTpyYW5nZV07Ci19
Ci0KLXN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0U3BlbGxpbmcoTlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZyogYXR0clN0cmluZywgTm9kZSogbm9kZSwgY29uc3QgVUNoYXIqIGNoYXJz
LCBpbnQgY2hhckxlbmd0aCwgTlNSYW5nZSByYW5nZSkKLXsKLSAgICBpZiAodW5pZmllZFRleHRD
aGVja2VyRW5hYmxlZChub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKSkgewotICAgICAgICAvLyBD
aGVjayB0aGUgc3BlbGxpbmcgZGlyZWN0bHkgc2luY2UgZG9jdW1lbnQtPm1hcmtlcnNGb3JOb2Rl
KCkgZG9lcyBub3Qgc3RvcmUgdGhlIG1pc3NwZWxsZWQgbWFya2luZyB3aGVuIHRoZSBjdXJzb3Ig
aXMgaW4gYSB3b3JkLgotICAgICAgICBUZXh0Q2hlY2tlckNsaWVudCogY2hlY2tlciA9IG5vZGUt
PmRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT50ZXh0Q2hlY2tlcigpOwotCi0gICAgICAg
IC8vIGNoZWNrVGV4dE9mUGFyYWdyYXBoIGlzIHRoZSBvbmx5IHNwZWxsaW5nL2dyYW1tYXIgY2hl
Y2tlciBpbXBsZW1lbnRlZCBpbiBXSzEgYW5kIFdLMgotICAgICAgICBWZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0PiByZXN1bHRzOwotICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaChjaGVja2Vy
LCBjaGFycywgY2hhckxlbmd0aCwgVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nLCByZXN1bHRzKTsK
LQotICAgICAgICBzaXplX3Qgc2l6ZSA9IHJlc3VsdHMuc2l6ZSgpOwotICAgICAgICBOU051bWJl
ciogdHJ1ZVZhbHVlID0gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU107Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IFRl
eHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0ID0gcmVzdWx0c1tpXTsKLSAgICAgICAgICAgIEFYQXR0
cmlidXRlU3RyaW5nU2V0TnVtYmVyKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eU1pc3NwZWxs
ZWRUZXh0QXR0cmlidXRlLCB0cnVlVmFsdWUsIE5TTWFrZVJhbmdlKHJlc3VsdC5sb2NhdGlvbiAr
IHJhbmdlLmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGludCBjdXJyZW50UG9zaXRpb24gPSAwOwotICAgIHdoaWxlIChj
aGFyTGVuZ3RoID4gMCkgewotICAgICAgICBjb25zdCBVQ2hhciogY2hhckRhdGEgPSBjaGFycyAr
IGN1cnJlbnRQb3NpdGlvbjsKLSAgICAgICAgVGV4dENoZWNrZXJDbGllbnQqIGNoZWNrZXIgPSBu
b2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+dGV4dENoZWNrZXIoKTsKLSAgICAg
ICAgCi0gICAgICAgIGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7Ci0gICAgICAgIGludCBt
aXNzcGVsbGluZ0xlbmd0aCA9IDA7Ci0gICAgICAgIGNoZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0
cmluZyhjaGFyRGF0YSwgY2hhckxlbmd0aCwgJm1pc3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVs
bGluZ0xlbmd0aCk7Ci0gICAgICAgIGlmIChtaXNzcGVsbGluZ0xvY2F0aW9uID09IC0xIHx8ICFt
aXNzcGVsbGluZ0xlbmd0aCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAg
TlNSYW5nZSBzcGVsbFJhbmdlID0gTlNNYWtlUmFuZ2UocmFuZ2UubG9jYXRpb24gKyBjdXJyZW50
UG9zaXRpb24gKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAg
ICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0
eU1pc3NwZWxsZWRUZXh0QXR0cmlidXRlLCBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwg
c3BlbGxSYW5nZSk7Ci0gICAgICAgIGNoYXJMZW5ndGggLT0gKG1pc3NwZWxsaW5nTG9jYXRpb24g
KyBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgICAgIGN1cnJlbnRQb3NpdGlvbiArPSAobWlzc3Bl
bGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2
b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0SGVhZGluZ0xldmVsKE5TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcqIGF0dHJTdHJpbmcsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIE5TUmFuZ2UgcmFuZ2Up
Ci17Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICgh
QVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKGF0dHJTdHJpbmcsIHJhbmdlKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIC8vIFNvbWV0aW1lcyB0aGVyZSBhcmUgb2JqZWN0cyBiZXR3
ZWVuIHRoZSB0ZXh0IGFuZCB0aGUgaGVhZGluZy4gCi0gICAgLy8gSW4gdGhvc2UgY2FzZXMgdGhl
IHBhcmVudCBoaWVyYXJjaHkgc2hvdWxkIGJlIHF1ZXJpZWQgdG8gc2VlIGlmIHRoZXJlIGlzIGEg
aGVhZGluZyBsZXZlbC4KLSAgICBpbnQgcGFyZW50SGVhZGluZ0xldmVsID0gMDsKLSAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBwYXJlbnRPYmplY3QgPSByZW5kZXJlci0+ZG9jdW1lbnQoKS0+YXhP
YmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZW5kZXJlci0+cGFyZW50KCkpOwotICAgIGZvciAo
OyBwYXJlbnRPYmplY3Q7IHBhcmVudE9iamVjdCA9IHBhcmVudE9iamVjdC0+cGFyZW50T2JqZWN0
KCkpIHsKLSAgICAgICAgcGFyZW50SGVhZGluZ0xldmVsID0gcGFyZW50T2JqZWN0LT5oZWFkaW5n
TGV2ZWwoKTsKLSAgICAgICAgaWYgKHBhcmVudEhlYWRpbmdMZXZlbCkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICAKLSAgICBpZiAocGFyZW50SGVhZGluZ0xldmVsKQotICAgICAgICBb
YXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6QCJBWEhlYWRpbmdMZXZlbCIgdmFsdWU6W05TTnVtYmVy
IG51bWJlcldpdGhJbnQ6cGFyZW50SGVhZGluZ0xldmVsXSByYW5nZTpyYW5nZV07Ci0gICAgZWxz
ZQotICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6QCJBWEhlYWRpbmdMZXZlbCIg
cmFuZ2U6cmFuZ2VdOwotfQotCi1zdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldEVsZW1l
bnQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywgTlNTdHJpbmcqIGF0dHJp
YnV0ZSwgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBOU1JhbmdlIHJhbmdlKQotewotICAg
IGlmICghQVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKGF0dHJTdHJpbmcsIHJhbmdlKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG9iamVjdCAmJiBvYmplY3QtPmlzQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdCgpKSB7Ci0gICAgICAgIC8vIG1ha2UgYSBzZXJpYWxpemFibGUgQVgg
b2JqZWN0Ci0gICAgICAgIAotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gc3RhdGlj
X2Nhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCo+KG9iamVjdCktPnJlbmRlcmVyKCk7Ci0g
ICAgICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAg
ICAgICBEb2N1bWVudCogZG9jID0gcmVuZGVyZXItPmRvY3VtZW50KCk7Ci0gICAgICAgIGlmICgh
ZG9jKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgQVhPYmplY3RDYWNo
ZSogY2FjaGUgPSBkb2MtPmF4T2JqZWN0Q2FjaGUoKTsKLSAgICAgICAgaWYgKCFjYWNoZSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBBWFVJRWxlbWVudFJlZiBheEVsZW1lbnQgPSB3
a0NyZWF0ZUFYVUlFbGVtZW50UmVmKG9iamVjdC0+d3JhcHBlcigpKTsKLSAgICAgICAgaWYgKGF4
RWxlbWVudCkgewotICAgICAgICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0cmlidXRlOmF0dHJpYnV0
ZSB2YWx1ZTooaWQpYXhFbGVtZW50IHJhbmdlOnJhbmdlXTsKLSAgICAgICAgICAgIENGUmVsZWFz
ZShheEVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIFthdHRyU3RyaW5n
IHJlbW92ZUF0dHJpYnV0ZTphdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOwotfQotCi1zdGF0aWMgdm9p
ZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcq
IGF0dHJTdHJpbmcsIE5vZGUqIG5vZGUsIGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbmd0aCkK
LXsKLSAgICAvLyBza2lwIGludmlzaWJsZSB0ZXh0Ci0gICAgaWYgKCFub2RlLT5yZW5kZXJlcigp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBlYXNpZXIgdG8gY2FsY3VsYXRlIHRoZSByYW5n
ZSBiZWZvcmUgYXBwZW5kaW5nIHRoZSBzdHJpbmcKLSAgICBOU1JhbmdlIGF0dHJTdHJpbmdSYW5n
ZSA9IE5TTWFrZVJhbmdlKFthdHRyU3RyaW5nIGxlbmd0aF0sIGxlbmd0aCk7Ci0gICAgCi0gICAg
Ly8gYXBwZW5kIHRoZSBzdHJpbmcgZnJvbSB0aGlzIG5vZGUKLSAgICBbW2F0dHJTdHJpbmcgbXV0
YWJsZVN0cmluZ10gYXBwZW5kU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczpj
aGFycyBsZW5ndGg6bGVuZ3RoXV07Ci0KLSAgICAvLyBhZGQgbmV3IGF0dHJpYnV0ZXMgYW5kIHJl
bW92ZSBpcnJlbGV2YW50IGluaGVyaXRlZCBvbmVzCi0gICAgLy8gTk9URTogY29sb3IgYXR0cmli
dXRlcyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYmVjYXVzZSAtW05TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcgYWRkQXR0cmlidXRlOiB2YWx1ZTogcmFuZ2U6XSBkb2VzIG5vdCBtZXJnZQotICAgIC8v
IGlkZW50aWNhbCBjb2xvcnMuICBXb3JrYXJvdW5kIGlzIHRvIG5vdCByZXBsYWNlIGFuIGV4aXN0
aW5nIGNvbG9yIGF0dHJpYnV0ZSBpZiBpdCBtYXRjaGVzIHdoYXQgd2UgYXJlIGFkZGluZy4gIFRo
aXMgYWxzbyBtZWFucwotICAgIC8vIHdlIGNhbm5vdCBqdXN0IHByZS1yZW1vdmUgYWxsIGluaGVy
aXRlZCBhdHRyaWJ1dGVzIG9uIHRoZSBhcHBlbmRlZCBzdHJpbmcsIHNvIHdlIGhhdmUgdG8gcmVt
b3ZlIHRoZSBpcnJlbGV2YW50IG9uZXMgaW5kaXZpZHVhbGx5LgotCi0gICAgLy8gcmVtb3ZlIGlu
aGVyaXRlZCBhdHRhY2htZW50IGZyb20gcHJpb3IgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kUmVw
bGFjZWQKLSAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5QXR0
YWNobWVudFRleHRBdHRyaWJ1dGUgcmFuZ2U6YXR0clN0cmluZ1JhbmdlXTsKLSAgICBbYXR0clN0
cmluZyByZW1vdmVBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5TWlzc3BlbGxlZFRleHRBdHRyaWJ1
dGUgcmFuZ2U6YXR0clN0cmluZ1JhbmdlXTsKLSAgICAKLSAgICAvLyBzZXQgbmV3IGF0dHJpYnV0
ZXMKLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKGF0dHJTdHJpbmcsIG5vZGUtPnJlbmRl
cmVyKCksIGF0dHJTdHJpbmdSYW5nZSk7Ci0gICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRIZWFkaW5n
TGV2ZWwoYXR0clN0cmluZywgbm9kZS0+cmVuZGVyZXIoKSwgYXR0clN0cmluZ1JhbmdlKTsKLSAg
ICBBWEF0dHJpYnV0ZVN0cmluZ1NldEJsb2NrcXVvdGVMZXZlbChhdHRyU3RyaW5nLCBub2RlLT5y
ZW5kZXJlcigpLCBhdHRyU3RyaW5nUmFuZ2UpOwotICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0RWxl
bWVudChhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlMaW5rVGV4dEF0dHJpYnV0ZSwgQWNjZXNz
aWJpbGl0eU9iamVjdDo6YW5jaG9yRWxlbWVudEZvck5vZGUobm9kZSksIGF0dHJTdHJpbmdSYW5n
ZSk7Ci0gICAgCi0gICAgLy8gZG8gc3BlbGxpbmcgbGFzdCBiZWNhdXNlIGl0IHRlbmRzIHRvIGJy
ZWFrIHVwIHRoZSByYW5nZQotICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0U3BlbGxpbmcoYXR0clN0
cmluZywgbm9kZSwgY2hhcnMsIGxlbmd0aCwgYXR0clN0cmluZ1JhbmdlKTsKLX0KLQotc3RhdGlj
IE5TU3RyaW5nKiBuc1N0cmluZ0ZvclJlcGxhY2VkTm9kZShOb2RlKiByZXBsYWNlZE5vZGUpCi17
Ci0gICAgLy8gd2Ugc2hvdWxkIGFsd2F5cyBiZSBnaXZlbiBhIHJlbmRlcmVkIG5vZGUgYW5kIGEg
cmVwbGFjZWQgbm9kZSwgYnV0IGJlIHNhZmUKLSAgICAvLyByZXBsYWNlZCBub2RlcyBhcmUgZWl0
aGVyIGF0dGFjaG1lbnRzICh3aWRnZXRzKSBvciBpbWFnZXMKLSAgICBpZiAoIXJlcGxhY2VkTm9k
ZSB8fCAhcmVwbGFjZWROb2RlLT5yZW5kZXJlcigpIHx8ICFyZXBsYWNlZE5vZGUtPnJlbmRlcmVy
KCktPmlzUmVwbGFjZWQoKSB8fCByZXBsYWNlZE5vZGUtPmlzVGV4dE5vZGUoKSkgewotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAg
ICAvLyBjcmVhdGUgYW4gQVggb2JqZWN0LCBidXQgc2tpcCBpdCBpZiBpdCBpcyBub3Qgc3VwcG9z
ZWQgdG8gYmUgc2VlbgotICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmogPSByZXBs
YWNlZE5vZGUtPnJlbmRlcmVyKCktPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JD
cmVhdGUocmVwbGFjZWROb2RlLT5yZW5kZXJlcigpKTsKLSAgICBpZiAob2JqLT5hY2Nlc3NpYmls
aXR5SXNJZ25vcmVkKCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgLy8gdXNlIHRo
ZSBhdHRhY2htZW50Q2hhcmFjdGVyIHRvIHJlcHJlc2VudCB0aGUgcmVwbGFjZWQgbm9kZQotICAg
IGNvbnN0IFVuaUNoYXIgYXR0YWNobWVudENoYXIgPSBOU0F0dGFjaG1lbnRDaGFyYWN0ZXI7Ci0g
ICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczomYXR0YWNobWVudENoYXIg
bGVuZ3RoOjFdOwotfQotCi0tIChOU0F0dHJpYnV0ZWRTdHJpbmcqKWRvQVhBdHRyaWJ1dGVkU3Ry
aW5nRm9yVGV4dE1hcmtlclJhbmdlOihpZCl0ZXh0TWFya2VyUmFuZ2UKLXsKLSAgICBpZiAoIW1f
b2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIC8vIGV4dHJhY3QgdGhlIHN0
YXJ0IGFuZCBlbmQgVmlzaWJsZVBvc2l0aW9uCi0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0Vmlz
aWJsZVBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yU3RhcnRPZlRleHRNYXJrZXJSYW5nZSht
X29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2VyUmFuZ2UpOwotICAgIGlmIChzdGFy
dFZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFZp
c2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JFbmRP
ZlRleHRNYXJrZXJSYW5nZShtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2VyUmFu
Z2UpOwotICAgIGlmIChlbmRWaXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZShz
dGFydFZpc2libGVQb3NpdGlvbiwgZW5kVmlzaWJsZVBvc2l0aW9uKTsKLSAgICAvLyBpdGVyYXRl
IG92ZXIgdGhlIHJhbmdlIHRvIGJ1aWxkIHRoZSBBWCBhdHRyaWJ1dGVkIHN0cmluZwotICAgIE5T
TXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcgPSBbW05TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcgYWxsb2NdIGluaXRdOwotICAgIFRleHRJdGVyYXRvciBpdChtYWtlUmFuZ2Uoc3Rh
cnRWaXNpYmxlUG9zaXRpb24sIGVuZFZpc2libGVQb3NpdGlvbikuZ2V0KCkpOwotICAgIHdoaWxl
ICghaXQuYXRFbmQoKSkgewotICAgICAgICAvLyBsb2NhdGUgdGhlIG5vZGUgYW5kIHN0YXJ0aW5n
IG9mZnNldCBmb3IgdGhpcyByYW5nZQotICAgICAgICBpbnQgZXhjZXB0aW9uID0gMDsKLSAgICAg
ICAgTm9kZSogbm9kZSA9IGl0LnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbik7Ci0g
ICAgICAgIEFTU0VSVChub2RlID09IGl0LnJhbmdlKCktPmVuZENvbnRhaW5lcihleGNlcHRpb24p
KTsKLSAgICAgICAgaW50IG9mZnNldCA9IGl0LnJhbmdlKCktPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlv
bik7Ci0KLSAgICAgICAgLy8gbm9uLXplcm8gbGVuZ3RoIG1lYW5zIHRleHR1YWwgbm9kZSwgemVy
byBsZW5ndGggbWVhbnMgcmVwbGFjZWQgbm9kZSAoQUtBICJhdHRhY2htZW50cyIgaW4gQVgpCi0g
ICAgICAgIGlmIChpdC5sZW5ndGgoKSAhPSAwKSB7Ci0gICAgICAgICAgICAvLyBBZGQgdGhlIHRl
eHQgb2YgdGhlIGxpc3QgbWFya2VyIGl0ZW0gaWYgbmVjZXNzYXJ5LgotICAgICAgICAgICAgU3Ry
aW5nIGxpc3RNYXJrZXJUZXh0ID0gbV9vYmplY3QtPmxpc3RNYXJrZXJUZXh0Rm9yTm9kZUFuZFBv
c2l0aW9uKG5vZGUsIFZpc2libGVQb3NpdGlvbihpdC5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCkp
KTsKLSAgICAgICAgICAgIGlmICghbGlzdE1hcmtlclRleHQuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgICAgIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoYXR0clN0cmluZywgbm9kZSwgbGlz
dE1hcmtlclRleHQuY2hhcmFjdGVycygpLCBsaXN0TWFya2VyVGV4dC5sZW5ndGgoKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoYXR0clN0
cmluZywgbm9kZSwgaXQuY2hhcmFjdGVycygpLCBpdC5sZW5ndGgoKSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBOb2RlKiByZXBsYWNlZE5vZGUgPSBub2RlLT5jaGlsZE5vZGUob2Zm
c2V0KTsKLSAgICAgICAgICAgIE5TU3RyaW5nICphdHRhY2htZW50U3RyaW5nID0gbnNTdHJpbmdG
b3JSZXBsYWNlZE5vZGUocmVwbGFjZWROb2RlKTsKLSAgICAgICAgICAgIGlmIChhdHRhY2htZW50
U3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgTlNSYW5nZSBhdHRyU3RyaW5nUmFuZ2UgPSBOU01h
a2VSYW5nZShbYXR0clN0cmluZyBsZW5ndGhdLCBbYXR0YWNobWVudFN0cmluZyBsZW5ndGhdKTsK
LQotICAgICAgICAgICAgICAgIC8vIGFwcGVuZCB0aGUgcGxhY2Vob2xkZXIgc3RyaW5nCi0gICAg
ICAgICAgICAgICAgW1thdHRyU3RyaW5nIG11dGFibGVTdHJpbmddIGFwcGVuZFN0cmluZzphdHRh
Y2htZW50U3RyaW5nXTsKLQotICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbGwgaW5oZXJpdGVk
IGF0dHJpYnV0ZXMKLSAgICAgICAgICAgICAgICBbYXR0clN0cmluZyBzZXRBdHRyaWJ1dGVzOm5p
bCByYW5nZTphdHRyU3RyaW5nUmFuZ2VdOwotCi0gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBh
dHRhY2htZW50IGF0dHJpYnV0ZQotICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IG9iaiA9IHJlcGxhY2VkTm9kZS0+cmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNo
ZSgpLT5nZXRPckNyZWF0ZShyZXBsYWNlZE5vZGUtPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAg
ICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0RWxlbWVudChhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxp
dHlBdHRhY2htZW50VGV4dEF0dHJpYnV0ZSwgb2JqLCBhdHRyU3RyaW5nUmFuZ2UpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGl0LmFkdmFuY2UoKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gW2F0dHJTdHJpbmcgYXV0b3JlbGVhc2VdOwotfQotCi1zdGF0aWMgaWQgdGV4dE1hcmtl
clJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMoQVhPYmplY3RDYWNoZSAqY2FjaGUsIFZpc2libGVQ
b3NpdGlvbiBzdGFydFBvc2l0aW9uLCBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24pCi17Ci0g
ICAgaWQgc3RhcnRUZXh0TWFya2VyID0gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihjYWNo
ZSwgc3RhcnRQb3NpdGlvbik7Ci0gICAgaWQgZW5kVGV4dE1hcmtlciA9IHRleHRNYXJrZXJGb3JW
aXNpYmxlUG9zaXRpb24oY2FjaGUsIGVuZFBvc2l0aW9uKTsKLSAgICByZXR1cm4gdGV4dE1hcmtl
clJhbmdlRnJvbU1hcmtlcnMoc3RhcnRUZXh0TWFya2VyLCBlbmRUZXh0TWFya2VyKTsKLX0KLQot
LSAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6KFZpc2libGVQb3NpdGlv
bilzdGFydFBvc2l0aW9uIGVuZFBvc2l0aW9uOihWaXNpYmxlUG9zaXRpb24pZW5kUG9zaXRpb24K
LXsKLSAgICByZXR1cm4gdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMobV9vYmpl
Y3QtPmF4T2JqZWN0Q2FjaGUoKSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwotfQotCi0t
IChOU0FycmF5KilhY2Nlc3NpYmlsaXR5QWN0aW9uTmFtZXMKLXsKLSAgICBpZiAoIVtzZWxmIHVw
ZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBzdGF0
aWMgTlNBcnJheSogYWN0aW9uRWxlbWVudEFjdGlvbnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRX
aXRoT2JqZWN0czogTlNBY2Nlc3NpYmlsaXR5UHJlc3NBY3Rpb24sIE5TQWNjZXNzaWJpbGl0eVNo
b3dNZW51QWN0aW9uLCBuaWxdOwotICAgIHN0YXRpYyBOU0FycmF5KiBkZWZhdWx0RWxlbWVudEFj
dGlvbnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czogTlNBY2Nlc3NpYmlsaXR5
U2hvd01lbnVBY3Rpb24sIG5pbF07Ci0gICAgc3RhdGljIE5TQXJyYXkqIG1lbnVFbGVtZW50QWN0
aW9ucyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOiBOU0FjY2Vzc2liaWxpdHlD
YW5jZWxBY3Rpb24sIE5TQWNjZXNzaWJpbGl0eVByZXNzQWN0aW9uLCBuaWxdOwotICAgIHN0YXRp
YyBOU0FycmF5KiBzbGlkZXJBY3Rpb25zID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVj
dHM6IE5TQWNjZXNzaWJpbGl0eUluY3JlbWVudEFjdGlvbiwgTlNBY2Nlc3NpYmlsaXR5RGVjcmVt
ZW50QWN0aW9uLCBuaWxdOwotCi0gICAgTlNBcnJheSAqYWN0aW9uczsKLSAgICBpZiAobV9vYmpl
Y3QtPmFjdGlvbkVsZW1lbnQoKSB8fCBtX29iamVjdC0+aXNCdXR0b24oKSkgCi0gICAgICAgIGFj
dGlvbnMgPSBhY3Rpb25FbGVtZW50QWN0aW9uczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNN
ZW51UmVsYXRlZCgpKQotICAgICAgICBhY3Rpb25zID0gbWVudUVsZW1lbnRBY3Rpb25zOwotICAg
IGVsc2UgaWYgKG1fb2JqZWN0LT5pc1NsaWRlcigpKQotICAgICAgICBhY3Rpb25zID0gc2xpZGVy
QWN0aW9uczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50KCkpCi0gICAgICAg
IGFjdGlvbnMgPSBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlBY3Rpb25OYW1l
c107Ci0gICAgZWxzZQotICAgICAgICBhY3Rpb25zID0gZGVmYXVsdEVsZW1lbnRBY3Rpb25zOwot
Ci0gICAgcmV0dXJuIGFjdGlvbnM7Ci19Ci0KLS0gKE5TQXJyYXkqKWFkZGl0aW9uYWxBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlTmFtZXMKLXsKLSAgICBpZiAoIW1fb2JqZWN0KQotICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgTlNNdXRhYmxlQXJyYXkgKmFkZGl0aW9uYWwgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXldOwotICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNBUklBT3ducygpKQotICAgICAg
ICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5T3duc0F0dHJpYnV0ZV07Ci0K
LSAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzQVJJQUV4cGFuZGVkKCkpCi0gICAgICAgIFthZGRp
dGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlFeHBhbmRlZEF0dHJpYnV0ZV07Ci0gICAg
Ci0gICAgaWYgKG1fb2JqZWN0LT5pc1Njcm9sbGJhcigpKQotICAgICAgICBbYWRkaXRpb25hbCBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25BdHRyaWJ1dGVdOwotICAgIAotICAg
IGlmIChtX29iamVjdC0+c3VwcG9ydHNBUklBRHJhZ2dpbmcoKSkKLSAgICAgICAgW2FkZGl0aW9u
YWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUdyYWJiZWRBdHRyaWJ1dGVdOwotCi0gICAgaWYg
KG1fb2JqZWN0LT5zdXBwb3J0c0FSSUFEcm9wcGluZygpKQotICAgICAgICBbYWRkaXRpb25hbCBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RHJvcEVmZmVjdHNBdHRyaWJ1dGVdOwotCi0gICAgaWYg
KG1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlUYWJsZSgpICYmIHN0YXRpY19jYXN0PEFjY2Vzc2li
aWxpdHlUYWJsZSo+KG1fb2JqZWN0KS0+c3VwcG9ydHNTZWxlY3RlZFJvd3MoKSkKLSAgICAgICAg
W2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0
ZV07ICAgICAgICAKLSAgICAKLSAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzQVJJQUxpdmVSZWdp
b24oKSkgewotICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5QVJJ
QUxpdmVBdHRyaWJ1dGVdOwotICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5QVJJQVJlbGV2YW50QXR0cmlidXRlXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fb2Jq
ZWN0LT5zb3J0RGlyZWN0aW9uKCkgIT0gU29ydERpcmVjdGlvbk5vbmUpCi0gICAgICAgIFthZGRp
dGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uQXR0cmlidXRlXTsK
LSAgICAgICAgCi0gICAgLy8gSWYgYW4gb2JqZWN0IGlzIGEgY2hpbGQgb2YgYSBsaXZlIHJlZ2lv
biwgdGhlbiBhZGQgdGhlc2UKLSAgICBpZiAobV9vYmplY3QtPmlzSW5zaWRlQVJJQUxpdmVSZWdp
b24oKSkKLSAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUFSSUFB
dG9taWNBdHRyaWJ1dGVdOwotICAgIC8vIEFsbCBvYmplY3RzIHNob3VsZCBleHBvc2UgdGhlIEFS
SUEgYnVzeSBhdHRyaWJ1dGUgKEFSSUEgMS4xIHdpdGggSVNTVUUtNTM4KS4KLSAgICBbYWRkaXRp
b25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5QVJJQUJ1c3lBdHRyaWJ1dGVdOwotICAgIAot
ICAgIC8vIFBvcHVwIGJ1dHRvbnMgb24gdGhlIE1hYyBleHBvc2UgdGhlIHZhbHVlIGF0dHJpYnV0
ZS4KLSAgICBpZiAobV9vYmplY3QtPmlzUG9wVXBCdXR0b24oKSkKLSAgICAgICAgW2FkZGl0aW9u
YWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXTsKLQotICAgIGlmICht
X29iamVjdC0+YXJpYUhhc1BvcHVwKCkpCi0gICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpO
U0FjY2Vzc2liaWxpdHlIYXNQb3B1cEF0dHJpYnV0ZV07Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0
LT5pc01hdGhSb290KCkpIHsKLSAgICAgICAgLy8gVGhlIGluZGV4IG9mIGEgc3F1YXJlIHJvb3Qg
aXMgYWx3YXlzIGtub3duLCBzbyB0aGVyZSdzIG5vIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggaXQu
Ci0gICAgICAgIGlmICghbV9vYmplY3QtPmlzTWF0aFNxdWFyZVJvb3QoKSkKLSAgICAgICAgICAg
IFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoUm9vdEluZGV4QXR0cmli
dXRlXTsKLSAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhS
b290UmFkaWNhbmRBdHRyaWJ1dGVdOwotICAgIH0gZWxzZSBpZiAobV9vYmplY3QtPmlzTWF0aEZy
YWN0aW9uKCkpIHsKLSAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0
eU1hdGhGcmFjdGlvbk51bWVyYXRvckF0dHJpYnV0ZV07Ci0gICAgICAgIFthZGRpdGlvbmFsIGFk
ZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoRnJhY3Rpb25EZW5vbWluYXRvckF0dHJpYnV0ZV07
Ci0gICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSkg
ewotICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aEJhc2VB
dHRyaWJ1dGVdOwotICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
TWF0aFN1YnNjcmlwdEF0dHJpYnV0ZV07Ci0gICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpO
U0FjY2Vzc2liaWxpdHlNYXRoU3VwZXJzY3JpcHRBdHRyaWJ1dGVdOwotICAgIH0gZWxzZSBpZiAo
bV9vYmplY3QtPmlzTWF0aFVuZGVyT3ZlcigpKSB7Ci0gICAgICAgIFthZGRpdGlvbmFsIGFkZE9i
amVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoQmFzZUF0dHJpYnV0ZV07Ci0gICAgICAgIFthZGRpdGlv
bmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoVW5kZXJBdHRyaWJ1dGVdOwotICAgICAg
ICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aE92ZXJBdHRyaWJ1dGVd
OwotICAgIH0gZWxzZSBpZiAobV9vYmplY3QtPmlzTWF0aEZlbmNlZCgpKSB7Ci0gICAgICAgIFth
ZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoRmVuY2VkT3BlbkF0dHJpYnV0
ZV07Ci0gICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoRmVu
Y2VkQ2xvc2VBdHRyaWJ1dGVdOwotICAgIH0KLQotICAgIHJldHVybiBhZGRpdGlvbmFsOwotfQot
Ci0tIChOU0FycmF5KilhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMKLXsKLSAgICBpZiAoIVtz
ZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
Ci0gICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKLSAgICAgICAgcmV0dXJuIFtbc2Vs
ZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXTsKLQotICAgIHN0
YXRpYyBOU0FycmF5KiBhdHRyaWJ1dGVzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiBhbmNo
b3JBdHRycyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSogd2ViQXJlYUF0dHJzID0gbmlsOwot
ICAgIHN0YXRpYyBOU0FycmF5KiB0ZXh0QXR0cnMgPSBuaWw7Ci0gICAgc3RhdGljIE5TQXJyYXkq
IGxpc3RBdHRycyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSogbGlzdEJveEF0dHJzID0gbmls
OwotICAgIHN0YXRpYyBOU0FycmF5KiByYW5nZUF0dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0Fy
cmF5KiBjb21tb25NZW51QXR0cnMgPSBuaWw7Ci0gICAgc3RhdGljIE5TQXJyYXkqIG1lbnVBdHRy
cyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSogbWVudUJhckF0dHJzID0gbmlsOwotICAgIHN0
YXRpYyBOU0FycmF5KiBtZW51SXRlbUF0dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiBt
ZW51QnV0dG9uQXR0cnMgPSBuaWw7Ci0gICAgc3RhdGljIE5TQXJyYXkqIGNvbnRyb2xBdHRycyA9
IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSogdGFibGVBdHRycyA9IG5pbDsKLSAgICBzdGF0aWMg
TlNBcnJheSogdGFibGVSb3dBdHRycyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSogdGFibGVD
b2xBdHRycyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSogdGFibGVDZWxsQXR0cnMgPSBuaWw7
Ci0gICAgc3RhdGljIE5TQXJyYXkqIGdyb3VwQXR0cnMgPSBuaWw7Ci0gICAgc3RhdGljIE5TQXJy
YXkqIGlucHV0SW1hZ2VBdHRycyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSogcGFzc3dvcmRG
aWVsZEF0dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiB0YWJMaXN0QXR0cnMgPSBuaWw7
Ci0gICAgc3RhdGljIE5TQXJyYXkqIGNvbWJvQm94QXR0cnMgPSBuaWw7Ci0gICAgc3RhdGljIE5T
QXJyYXkqIG91dGxpbmVBdHRycyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSogb3V0bGluZVJv
d0F0dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiBidXR0b25BdHRycyA9IG5pbDsKLSAg
ICBzdGF0aWMgTlNBcnJheSogc2Nyb2xsVmlld0F0dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0Fy
cmF5KiBpbmNyZW1lbnRvckF0dHJzID0gbmlsOwotICAgIE5TTXV0YWJsZUFycmF5KiB0ZW1wQXJy
YXk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMgPT0gbmlsKSB7Ci0gICAgICAgIGF0dHJpYnV0ZXMgPSBb
W05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czogTlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJp
YnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlTdWJyb2xlQXR0cmli
dXRlLAotICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlv
bkF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlDaGlsZHJl
bkF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlIZWxwQXR0
cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJp
YnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlQb3NpdGlvbkF0dHJp
YnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlTaXplQXR0cmlidXRl
LAotICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVRpdGxlQXR0cmlidXRlLAot
ICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRl
LAotICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlLAot
ICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1dGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5RW5hYmxlZEF0dHJpYnV0ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlXaW5kb3dBdHRyaWJ1dGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgQCJBWFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlIiwKLSAgICAgICAg
ICAgICAgICAgICAgICBAIkFYU3RhcnRUZXh0TWFya2VyIiwKLSAgICAgICAgICAgICAgICAgICAg
ICBAIkFYRW5kVGV4dE1hcmtlciIsCi0gICAgICAgICAgICAgICAgICAgICAgQCJBWFZpc2l0ZWQi
LAotICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUxpbmtlZFVJRWxlbWVudHNB
dHRyaWJ1dGUsCi0gICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRB
dHRyaWJ1dGUsCi0gICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5QmxvY2tRdW90
ZUxldmVsQXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVRv
cExldmVsVUlFbGVtZW50QXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgIG5pbF07Ci0g
ICAgfQotICAgIGlmIChjb21tb25NZW51QXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIGNvbW1vbk1l
bnVBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOiBOU0FjY2Vzc2liaWxp
dHlSb2xlQXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJp
bGl0eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOU0FjY2Vzc2liaWxpdHlQYXJlbnRBdHRyaWJ1dGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5RW5hYmxlZEF0dHJpYnV0ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlQb3NpdGlvbkF0dHJpYnV0ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlTaXplQXR0cmlidXRlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF07Ci0gICAgfQotICAgIGlmIChhbmNob3JBdHRy
cyA9PSBuaWwpIHsKLSAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6
TlNBY2Nlc3NpYmlsaXR5VVJMQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5QWNjZXNzS2V5QXR0cmlidXRlXTsKLSAgICAgICAgYW5jaG9yQXR0
cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKLSAgICAgICAg
W3RlbXBBcnJheSByZWxlYXNlXTsKLSAgICB9Ci0gICAgaWYgKHdlYkFyZWFBdHRycyA9PSBuaWwp
IHsKLSAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhB
cnJheTphdHRyaWJ1dGVzXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6QCJBWExpbmtV
SUVsZW1lbnRzIl07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OkAiQVhMb2FkZWQiXTsK
LSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6QCJBWExheW91dENvdW50Il07Ci0gICAgICAg
IFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUxvYWRpbmdQcm9ncmVzc0F0dHJp
YnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVVSTEF0
dHJpYnV0ZV07Ci0gICAgICAgIHdlYkFyZWFBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdp
dGhBcnJheTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwotICAgIH0K
LSAgICBpZiAodGV4dEF0dHJzID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOwotICAgICAgICBbdGVt
cEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlOdW1iZXJPZkNoYXJhY3RlcnNBdHRyaWJ1
dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZWxlY3Rl
ZFRleHRBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRk
T2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZV07Ci0g
ICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUluc2VydGlvblBvaW50
TGluZU51bWJlckF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNj
ZXNzaWJpbGl0eVRpdGxlVUlFbGVtZW50QXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5QWNjZXNzS2V5QXR0cmlidXRlXTsKLSAgICAgICAgW3Rl
bXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5UmVxdWlyZWRBdHRyaWJ1dGVdOwotICAg
ICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlJbnZhbGlkQXR0cmlidXRl
XTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5UGxhY2Vob2xk
ZXJWYWx1ZUF0dHJpYnV0ZV07Ci0gICAgICAgIHRleHRBdHRycyA9IFtbTlNBcnJheSBhbGxvY10g
aW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwot
ICAgIH0KLSAgICBpZiAobGlzdEF0dHJzID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOwotICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENoaWxkcmVuQXR0
cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5Vmlz
aWJsZUNoaWxkcmVuQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNB
Y2Nlc3NpYmlsaXR5T3JpZW50YXRpb25BdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFk
ZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUaXRsZVVJRWxlbWVudEF0dHJpYnV0ZV07Ci0gICAgICAg
IGxpc3RBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOwot
ICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwotICAgIH0KLSAgICBpZiAobGlzdEJveEF0dHJz
ID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0V2l0aEFycmF5Omxpc3RBdHRyc107ICAgIAotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVj
dDpOU0FjY2Vzc2liaWxpdHlBY2Nlc3NLZXlBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlSZXF1aXJlZEF0dHJpYnV0ZV07Ci0gICAgICAgIFt0
ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUludmFsaWRBdHRyaWJ1dGVdOwotICAg
ICAgICBsaXN0Qm94QXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFy
cmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKLSAgICB9Ci0gICAgaWYgKHJhbmdl
QXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eU1pblZhbHVlQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJh
eSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF4VmFsdWVBdHRyaWJ1dGVdOwotICAgICAgICBb
dGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0ZV07
Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZhbHVlRGVzY3Jp
cHRpb25BdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlUaXRsZVVJRWxlbWVudEF0dHJpYnV0ZV07Ci0gICAgICAgIHJhbmdlQXR0cnMgPSBbW05T
QXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJh
eSByZWxlYXNlXTsKLSAgICB9Ci0gICAgaWYgKG1lbnVCYXJBdHRycyA9PSBuaWwpIHsKLSAgICAg
ICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTpjb21t
b25NZW51QXR0cnNdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxp
dHlTZWxlY3RlZENoaWxkcmVuQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoaWxkcmVuQXR0cmlidXRlXTsKLSAgICAgICAgW3Rl
bXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VGl0bGVVSUVsZW1lbnRBdHRyaWJ1dGVd
OwotICAgICAgICBtZW51QmFyQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6
dGVtcEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKLSAgICB9Ci0gICAgaWYg
KG1lbnVBdHRycyA9PSBuaWwpIHsKLSAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdFdpdGhBcnJheTpjb21tb25NZW51QXR0cnNdOwotICAgICAgICBbdGVtcEFy
cmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENoaWxkcmVuQXR0cmlidXRlXTsK
LSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoaWxk
cmVuQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5VGl0bGVVSUVsZW1lbnRBdHRyaWJ1dGVdOwotICAgICAgICBtZW51QXR0cnMgPSBbW05TQXJy
YXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSBy
ZWxlYXNlXTsKLSAgICB9Ci0gICAgaWYgKG1lbnVJdGVtQXR0cnMgPT0gbmlsKSB7Ci0gICAgICAg
IHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6Y29tbW9u
TWVudUF0dHJzXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
VGl0bGVBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlIZWxwQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5U2VsZWN0ZWRBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVj
dDooTlNTdHJpbmcqKWtBWE1lbnVJdGVtQ21kQ2hhckF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1w
QXJyYXkgYWRkT2JqZWN0OihOU1N0cmluZyopa0FYTWVudUl0ZW1DbWRWaXJ0dWFsS2V5QXR0cmli
dXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nKilrQVhNZW51SXRl
bUNtZEdseXBoQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5TU3Ry
aW5nKilrQVhNZW51SXRlbUNtZE1vZGlmaWVyc0F0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJy
YXkgYWRkT2JqZWN0OihOU1N0cmluZyopa0FYTWVudUl0ZW1NYXJrQ2hhckF0dHJpYnV0ZV07Ci0g
ICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihOU1N0cmluZyopa0FYTWVudUl0ZW1QcmltYXJ5
VUlFbGVtZW50QXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5U2VydmVzQXNUaXRsZUZvclVJRWxlbWVudHNBdHRyaWJ1dGVdOwotICAgICAgICBt
ZW51SXRlbUF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07
Ci0gICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07Ci0gICAgfQotICAgIGlmIChtZW51QnV0dG9u
QXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIG1lbnVCdXR0b25BdHRycyA9IFtbTlNBcnJheSBhbGxv
Y10gaW5pdFdpdGhPYmplY3RzOk5TQWNjZXNzaWJpbGl0eVJvbGVBdHRyaWJ1dGUsCi0gICAgICAg
ICAgICBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb25BdHRyaWJ1dGUsCi0gICAgICAgICAg
ICBOU0FjY2Vzc2liaWxpdHlQYXJlbnRBdHRyaWJ1dGUsCi0gICAgICAgICAgICBOU0FjY2Vzc2li
aWxpdHlQb3NpdGlvbkF0dHJpYnV0ZSwKLSAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNpemVB
dHRyaWJ1dGUsCi0gICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlXaW5kb3dBdHRyaWJ1dGUsCi0g
ICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlLAotICAgICAgICAgICAg
TlNBY2Nlc3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZSwKLSAgICAgICAgICAgIE5TQWNjZXNzaWJp
bGl0eVRpdGxlQXR0cmlidXRlLAotICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5B
dHRyaWJ1dGUsIG5pbF07Ci0gICAgfQotICAgIGlmIChjb250cm9sQXR0cnMgPT0gbmlsKSB7Ci0g
ICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6
YXR0cmlidXRlc107Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0
eVRpdGxlVUlFbGVtZW50QXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6
TlNBY2Nlc3NpYmlsaXR5QWNjZXNzS2V5QXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5UmVxdWlyZWRBdHRyaWJ1dGVdOwotICAgICAgICBbdGVt
cEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlJbnZhbGlkQXR0cmlidXRlXTsKLSAgICAg
ICAgY29udHJvbEF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJh
eV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07Ci0gICAgfQotICAgIGlmIChpbmNyZW1l
bnRvckF0dHJzID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOwotICAgICAgICBbdGVtcEFycmF5IGFk
ZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlJbmNyZW1lbnRCdXR0b25BdHRyaWJ1dGVdOwotICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlEZWNyZW1lbnRCdXR0b25BdHRy
aWJ1dGVdOwotICAgICAgICBpbmNyZW1lbnRvckF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0
V2l0aEFycmF5OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07Ci0gICAg
fQotICAgIGlmIChidXR0b25BdHRycyA9PSBuaWwpIHsKLSAgICAgICAgdGVtcEFycmF5ID0gW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzXTsKLSAgICAgICAg
Ly8gQnV0dG9ucyBzaG91bGQgbm90IGV4cG9zZSBBWFZhbHVlLgotICAgICAgICBbdGVtcEFycmF5
IHJlbW92ZU9iamVjdDpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV07Ci0gICAgICAgIFt0
ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVRpdGxlVUlFbGVtZW50QXR0cmlidXRl
XTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5QWNjZXNzS2V5
QXR0cmlidXRlXTsKLSAgICAgICAgYnV0dG9uQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRX
aXRoQXJyYXk6dGVtcEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKLSAgICB9
Ci0gICAgaWYgKGNvbWJvQm94QXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIHRlbXBBcnJheSA9IFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6Y29udHJvbEF0dHJzXTsKLSAgICAg
ICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RXhwYW5kZWRBdHRyaWJ1dGVd
OwotICAgICAgICBjb21ib0JveEF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5
OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07ICAgICAgICAKLSAgICB9
Ci0gICAgaWYgKHRhYmxlQXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIHRlbXBBcnJheSA9IFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107Ci0gICAgICAgIFt0
ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVJvd3NBdHRyaWJ1dGVdOwotICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWaXNpYmxlUm93c0F0dHJpYnV0
ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUNvbHVtbnNB
dHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlW
aXNpYmxlQ29sdW1uc0F0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eVZpc2libGVDZWxsc0F0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkg
YWRkT2JqZWN0OihOU1N0cmluZyAqKWtBWENvbHVtbkhlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGVd
OwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlSb3dIZWFkZXJV
SUVsZW1lbnRzQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5SGVhZGVyQXR0cmlidXRlXTsKLSAgICAgICAgdGFibGVBdHRycyA9IFtbTlNBcnJh
eSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJl
bGVhc2VdOwotICAgIH0KLSAgICBpZiAodGFibGVSb3dBdHRycyA9PSBuaWwpIHsKLSAgICAgICAg
dGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1
dGVzXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SW5kZXhB
dHRyaWJ1dGVdOwotICAgICAgICB0YWJsZVJvd0F0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0
V2l0aEFycmF5OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07Ci0gICAg
fQotICAgIGlmICh0YWJsZUNvbEF0dHJzID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOwotICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlJbmRleEF0dHJpYnV0ZV07Ci0g
ICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUhlYWRlckF0dHJpYnV0
ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVJvd3NBdHRy
aWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWaXNp
YmxlUm93c0F0dHJpYnV0ZV07Ci0gICAgICAgIHRhYmxlQ29sQXR0cnMgPSBbW05TQXJyYXkgYWxs
b2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNl
XTsKLSAgICB9Ci0gICAgaWYgKHRhYmxlQ2VsbEF0dHJzID09IG5pbCkgewotICAgICAgICB0ZW1w
QXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNd
OwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlSb3dJbmRleFJh
bmdlQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5Q29sdW1uSW5kZXhSYW5nZUF0dHJpYnV0ZV07Ci0gICAgICAgIHRhYmxlQ2VsbEF0dHJzID0g
W1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1w
QXJyYXkgcmVsZWFzZV07ICAgICAgICAKLSAgICB9Ci0gICAgaWYgKGdyb3VwQXR0cnMgPT0gbmls
KSB7Ci0gICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRo
QXJyYXk6YXR0cmlidXRlc107Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eVRpdGxlVUlFbGVtZW50QXR0cmlidXRlXTsKLSAgICAgICAgZ3JvdXBBdHRycyA9IFtb
TlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFy
cmF5IHJlbGVhc2VdOwotICAgIH0KLSAgICBpZiAoaW5wdXRJbWFnZUF0dHJzID09IG5pbCkgewot
ICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5
OmJ1dHRvbkF0dHJzXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5VVJMQXR0cmlidXRlXTsKLSAgICAgICAgaW5wdXRJbWFnZUF0dHJzID0gW1tOU0FycmF5IGFs
bG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFz
ZV07Ci0gICAgfQotICAgIGlmIChwYXNzd29yZEZpZWxkQXR0cnMgPT0gbmlsKSB7Ci0gICAgICAg
IHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmli
dXRlc107Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVRpdGxl
VUlFbGVtZW50QXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5UmVxdWlyZWRBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVj
dDpOU0FjY2Vzc2liaWxpdHlJbnZhbGlkQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5UGxhY2Vob2xkZXJWYWx1ZUF0dHJpYnV0ZV07Ci0gICAg
ICAgIHBhc3N3b3JkRmllbGRBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0
ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwotICAgIH0KLSAgICBpZiAo
dGFiTGlzdEF0dHJzID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOwotICAgICAgICBbdGVtcEFycmF5
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUYWJzQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBB
cnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5Q29udGVudHNBdHRyaWJ1dGVdOwotICAgICAg
ICB0YWJMaXN0QXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5
XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsgICAgICAgIAotICAgIH0KLSAgICBpZiAo
b3V0bGluZUF0dHJzID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOwotICAgICAgICBbdGVtcEFycmF5
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVdOwotICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlSb3dzQXR0cmlidXRlXTsKLSAg
ICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5Q29sdW1uc0F0dHJpYnV0
ZV07Ci0gICAgICAgIG91dGxpbmVBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJh
eTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwotICAgIH0KLSAgICBp
ZiAob3V0bGluZVJvd0F0dHJzID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRhYmxlUm93QXR0cnNdOwotICAgICAgICBb
dGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zaW5nQXR0cmlidXRlXTsK
LSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc2VkQnlS
b3dBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxp
dHlEaXNjbG9zdXJlTGV2ZWxBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVj
dDpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zZWRSb3dzQXR0cmlidXRlXTsKLSAgICAgICAgb3V0bGlu
ZVJvd0F0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07Ci0g
ICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07Ci0gICAgfQotICAgIGlmIChzY3JvbGxWaWV3QXR0
cnMgPT0gbmlsKSB7Ci0gICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0
Ok5TQWNjZXNzaWJpbGl0eUNvbnRlbnRzQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SG9yaXpvbnRhbFNjcm9sbEJhckF0dHJpYnV0ZV07Ci0g
ICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZlcnRpY2FsU2Nyb2xs
QmFyQXR0cmlidXRlXTsKLSAgICAgICAgc2Nyb2xsVmlld0F0dHJzID0gW1tOU0FycmF5IGFsbG9j
XSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07
Ci0gICAgfQotICAgIAotICAgIE5TQXJyYXkgKm9iamVjdEF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVz
OwotICAgIAotICAgIGlmIChtX29iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkpCi0gICAgICAgIG9i
amVjdEF0dHJpYnV0ZXMgPSBwYXNzd29yZEZpZWxkQXR0cnM7Ci0KLSAgICBlbHNlIGlmIChtX29i
amVjdC0+aXNXZWJBcmVhKCkpCi0gICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB3ZWJBcmVhQXR0
cnM7Ci0gICAgCi0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzVGV4dENvbnRyb2woKSkKLSAgICAg
ICAgb2JqZWN0QXR0cmlidXRlcyA9IHRleHRBdHRyczsKLQotICAgIGVsc2UgaWYgKG1fb2JqZWN0
LT5pc0FuY2hvcigpIHx8IG1fb2JqZWN0LT5pc0ltYWdlKCkgfHwgbV9vYmplY3QtPmlzTGluaygp
KQotICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gYW5jaG9yQXR0cnM7Ci0KLSAgICBlbHNlIGlm
IChtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSkKLSAgICAgICAgb2JqZWN0QXR0cmli
dXRlcyA9IHRhYmxlQXR0cnM7Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzVGFibGVDb2x1bW4o
KSkKLSAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHRhYmxlQ29sQXR0cnM7Ci0gICAgZWxzZSBp
ZiAobV9vYmplY3QtPmlzVGFibGVDZWxsKCkpCi0gICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB0
YWJsZUNlbGxBdHRyczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNUYWJsZVJvdygpKSB7Ci0g
ICAgICAgIC8vIEFuIEFSSUEgdGFibGUgcm93IGNhbiBiZSBjb2xsYXBzZWQgYW5kIGV4cGFuZGVk
LCBzbyBpdCBuZWVkcyB0aGUgZXh0cmEgYXR0cmlidXRlcy4KLSAgICAgICAgaWYgKG1fb2JqZWN0
LT5pc0FSSUFUcmVlR3JpZFJvdygpKQotICAgICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IG91
dGxpbmVSb3dBdHRyczsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb2JqZWN0QXR0cmlidXRl
cyA9IHRhYmxlUm93QXR0cnM7Ci0gICAgfQotICAgIAotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5p
c1RyZWUoKSkKLSAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IG91dGxpbmVBdHRyczsKLSAgICBl
bHNlIGlmIChtX29iamVjdC0+aXNUcmVlSXRlbSgpKQotICAgICAgICBvYmplY3RBdHRyaWJ1dGVz
ID0gb3V0bGluZVJvd0F0dHJzOwotICAgIAotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc0xpc3RC
b3goKSkKLSAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGxpc3RCb3hBdHRyczsKLSAgICBlbHNl
IGlmIChtX29iamVjdC0+aXNMaXN0KCkpCi0gICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBsaXN0
QXR0cnM7Ci0gICAgCi0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzQ29tYm9Cb3goKSkKLSAgICAg
ICAgb2JqZWN0QXR0cmlidXRlcyA9IGNvbWJvQm94QXR0cnM7Ci0gICAgCi0gICAgZWxzZSBpZiAo
bV9vYmplY3QtPmlzUHJvZ3Jlc3NJbmRpY2F0b3IoKSB8fCBtX29iamVjdC0+aXNTbGlkZXIoKSkK
LSAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHJhbmdlQXR0cnM7Ci0KLSAgICAvLyBUaGVzZSBh
cmUgcHJvY2Vzc2VkIGluIG9yZGVyIGJlY2F1c2UgYW4gaW5wdXQgaW1hZ2UgaXMgYSBidXR0b24s
IGFuZCBhIGJ1dHRvbiBpcyBhIGNvbnRyb2wuCi0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzSW5w
dXRJbWFnZSgpKQotICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gaW5wdXRJbWFnZUF0dHJzOwot
ICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc0J1dHRvbigpKQotICAgICAgICBvYmplY3RBdHRyaWJ1
dGVzID0gYnV0dG9uQXR0cnM7Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzQ29udHJvbCgpKQot
ICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gY29udHJvbEF0dHJzOwotICAgIAotICAgIGVsc2Ug
aWYgKG1fb2JqZWN0LT5pc0dyb3VwKCkgfHwgbV9vYmplY3QtPmlzTGlzdEl0ZW0oKSkKLSAgICAg
ICAgb2JqZWN0QXR0cmlidXRlcyA9IGdyb3VwQXR0cnM7Ci0gICAgZWxzZSBpZiAobV9vYmplY3Qt
PmlzVGFiTGlzdCgpKQotICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFiTGlzdEF0dHJzOwot
ICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkKLSAgICAgICAgb2JqZWN0QXR0
cmlidXRlcyA9IHNjcm9sbFZpZXdBdHRyczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNTcGlu
QnV0dG9uKCkpCi0gICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBpbmNyZW1lbnRvckF0dHJzOwot
ICAgIAotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc01lbnUoKSkKLSAgICAgICAgb2JqZWN0QXR0
cmlidXRlcyA9IG1lbnVBdHRyczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNNZW51QmFyKCkp
Ci0gICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBtZW51QmFyQXR0cnM7Ci0gICAgZWxzZSBpZiAo
bV9vYmplY3QtPmlzTWVudUJ1dHRvbigpKQotICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gbWVu
dUJ1dHRvbkF0dHJzOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc01lbnVJdGVtKCkpCi0gICAg
ICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBtZW51SXRlbUF0dHJzOwotICAgIAotICAgIE5TQXJyYXkg
KmFkZGl0aW9uYWxBdHRyaWJ1dGVzID0gW3NlbGYgYWRkaXRpb25hbEFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVOYW1lc107Ci0gICAgaWYgKFthZGRpdGlvbmFsQXR0cmlidXRlcyBjb3VudF0pCi0gICAg
ICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBbb2JqZWN0QXR0cmlidXRlcyBhcnJheUJ5QWRkaW5nT2Jq
ZWN0c0Zyb21BcnJheTphZGRpdGlvbmFsQXR0cmlidXRlc107Ci0gICAgCi0gICAgcmV0dXJuIG9i
amVjdEF0dHJpYnV0ZXM7Ci19Ci0KLS0gKFZpc2libGVQb3NpdGlvblJhbmdlKXZpc2libGVQb3Np
dGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOihpZCl0ZXh0TWFya2VyUmFuZ2UKLXsKLSAgICBp
ZiAoIXRleHRNYXJrZXJSYW5nZSkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdl
KCk7Ci0gICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgp
OwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zaXRpb25Gb3JTdGFy
dE9mVGV4dE1hcmtlclJhbmdlKGNhY2hlLCB0ZXh0TWFya2VyUmFuZ2UpLCB2aXNpYmxlUG9zaXRp
b25Gb3JFbmRPZlRleHRNYXJrZXJSYW5nZShjYWNoZSwgdGV4dE1hcmtlclJhbmdlKSk7Ci19Ci0K
LS0gKE5TQXJyYXkqKXJlbmRlcldpZGdldENoaWxkcmVuCi17Ci0gICAgV2lkZ2V0KiB3aWRnZXQg
PSBtX29iamVjdC0+d2lkZ2V0KCk7Ci0gICAgaWYgKCF3aWRnZXQpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgcmV0dXJuIFsod2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKSBhY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWU6IE5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXTsKLX0KLQot
LSAoaWQpcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdAotewotICAgIGlmICghbV9vYmpl
Y3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
bV9vYmplY3QtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBp
ZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIHJldHVybiBmcmFtZS0+
bG9hZGVyKCktPmNsaWVudCgpLT5hY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGNvbnZlcnRUb1ZlY3RvcihOU0FycmF5KiBhcnJheSwgQWNjZXNzaWJpbGl0eU9i
amVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiB2ZWN0b3IpCi17Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gW2FycmF5IGNvdW50XTsKLSAgICB2ZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShsZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBbW2FycmF5IG9iamVjdEF0SW5k
ZXg6aV0gYWNjZXNzaWJpbGl0eU9iamVjdF07Ci0gICAgICAgIGlmIChvYmopCi0gICAgICAgICAg
ICB2ZWN0b3IuYXBwZW5kKG9iaik7Ci0gICAgfQotfQotCi1zdGF0aWMgTlNNdXRhYmxlQXJyYXkq
IGNvbnZlcnRUb05TQXJyYXkoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yJiB2ZWN0b3IpCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gdmVjdG9y
LnNpemUoKTsKLSAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJy
YXlXaXRoQ2FwYWNpdHk6IGxlbmd0aF07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7Ci0gICAgICAgIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFw
cGVyID0gdmVjdG9yW2ldLT53cmFwcGVyKCk7Ci0gICAgICAgIEFTU0VSVCh3cmFwcGVyKTsKLSAg
ICAgICAgaWYgKHdyYXBwZXIpIHsKLSAgICAgICAgICAgIC8vIHdlIHdhbnQgdG8gcmV0dXJuIHRo
ZSBhdHRhY2htZW50IHZpZXcgaW5zdGVhZCBvZiB0aGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUg
YXR0YWNobWVudC4KLSAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgd2UgZ2V0IHBhbGluZHJvbWUg
ZXJyb3JzIGluIHRoZSBBWCBoaWVyYXJjaHkKLSAgICAgICAgICAgIGlmICh2ZWN0b3JbaV0tPmlz
QXR0YWNobWVudCgpICYmIFt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XSkKLSAgICAgICAgICAgICAg
ICBbYXJyYXkgYWRkT2JqZWN0Olt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XV07Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDp3cmFwcGVyXTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLS0gKGlkKXRleHRNYXJrZXJSYW5n
ZUZvclNlbGVjdGlvbgotewotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9vYmpl
Y3QtPnNlbGVjdGlvbigpOwotICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9z
aXRpb25zOnNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSBlbmRQb3NpdGlvbjpzZWxlY3Rpb24udmlz
aWJsZUVuZCgpXTsKLX0KLQotLSAoTlNWYWx1ZSAqKXBvc2l0aW9uCi17Ci0gICAgSW50UmVjdCBy
ZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChtX29iamVjdC0+ZWxlbWVudFJlY3QoKSk7Ci0gICAg
TlNQb2ludCBwb2ludDsKLSAgICAKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fb2JqZWN0
LT5kb2N1bWVudEZyYW1lVmlldygpOwotCi0gICAgLy8gV2ViS2l0MSBjb2RlIHBhdGguLi4gcGxh
dGZvcm1XaWRnZXQoKSBleGlzdHMuCi0gICAgaWYgKGZyYW1lVmlldyAmJiBmcmFtZVZpZXctPnBs
YXRmb3JtV2lkZ2V0KCkpIHsKLSAgICAKLSAgICAgICAgLy8gVGhlIENvY29hIGFjY2Vzc2liaWxp
dHkgQVBJIHdhbnRzIHRoZSBsb3dlci1sZWZ0IGNvcm5lci4KLSAgICAgICAgcG9pbnQgPSBOU01h
a2VQb2ludChyZWN0LngoKSwgcmVjdC5tYXhZKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGZy
YW1lVmlldykgewotICAgICAgICAgICAgTlNWaWV3KiB2aWV3ID0gZnJhbWVWaWV3LT5kb2N1bWVu
dFZpZXcoKTsKLSAgICAgICAgICAgIHBvaW50ID0gW1t2aWV3IHdpbmRvd10gY29udmVydEJhc2VU
b1NjcmVlbjpbdmlldyBjb252ZXJ0UG9pbnQ6IHBvaW50IHRvVmlldzpuaWxdXTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSB7Ci0gICAgICAgIAotICAgICAgICAvLyBGaW5kIHRoZSBhcHByb3ByaWF0
ZSBzY3JvbGwgdmlldyB0byB1c2UgdG8gY29udmVydCB0aGUgY29udGVudHMgdG8gdGhlIHdpbmRv
dy4KLSAgICAgICAgU2Nyb2xsVmlldyogc2Nyb2xsVmlldyA9IDA7Ci0gICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIHBhcmVudCA9IDA7Ci0gICAgICAgIGZvciAocGFyZW50ID0gbV9vYmplY3Qt
PnBhcmVudE9iamVjdCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkp
IHsKLSAgICAgICAgICAgIGlmIChwYXJlbnQtPmlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSkg
ewotICAgICAgICAgICAgICAgIHNjcm9sbFZpZXcgPSB0b0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3
KHBhcmVudCktPnNjcm9sbFZpZXcoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzY3JvbGxWaWV3KQotICAgICAgICAgICAg
cmVjdCA9IHNjcm9sbFZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhyZWN0KTsKLSAgICAgICAgCi0g
ICAgICAgIFBhZ2UqIHBhZ2UgPSBtX29iamVjdC0+cGFnZSgpOwotICAgICAgICAKLSAgICAgICAg
Ly8gSWYgd2UgaGF2ZSBhbiBlbXB0eSBjaHJvbWUgY2xpZW50IChsaWtlIFNWRykgdGhlbiB3ZSBz
aG91bGQgdXNlIHRoZSBwYWdlCi0gICAgICAgIC8vIG9mIHRoZSBzY3JvbGwgdmlldyBwYXJlbnQg
dG8gaGVscCB1cyBnZXQgdG8gdGhlIHNjcmVlbiByZWN0LgotICAgICAgICBpZiAocGFyZW50ICYm
IHBhZ2UgJiYgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5pc0VtcHR5Q2hyb21lQ2xpZW50KCkp
Ci0gICAgICAgICAgICBwYWdlID0gcGFyZW50LT5wYWdlKCk7Ci0KLSAgICAgICAgaWYgKHBhZ2Up
Ci0gICAgICAgICAgICBwb2ludCA9IHBhZ2UtPmNocm9tZSgpLT5yb290Vmlld1RvU2NyZWVuKHJl
Y3QpLmxvY2F0aW9uKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBvaW50ID0gcmVjdC5s
b2NhdGlvbigpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUG9p
bnQ6cG9pbnRdOwotfQotCi10eXBlZGVmIEhhc2hNYXA8aW50LCBOU1N0cmluZyo+IEFjY2Vzc2li
aWxpdHlSb2xlTWFwOwotCi1zdGF0aWMgY29uc3QgQWNjZXNzaWJpbGl0eVJvbGVNYXAmIGNyZWF0
ZUFjY2Vzc2liaWxpdHlSb2xlTWFwKCkKLXsKLSAgICBzdHJ1Y3QgUm9sZUVudHJ5IHsKLSAgICAg
ICAgQWNjZXNzaWJpbGl0eVJvbGUgdmFsdWU7Ci0gICAgICAgIE5TU3RyaW5nKiBzdHJpbmc7Ci0g
ICAgfTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgUm9sZUVudHJ5IHJvbGVzW10gPSB7Ci0gICAg
ICAgIHsgVW5rbm93blJvbGUsIE5TQWNjZXNzaWJpbGl0eVVua25vd25Sb2xlIH0sCi0gICAgICAg
IHsgQnV0dG9uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5QnV0dG9uUm9sZSB9LAotICAgICAgICB7IFJh
ZGlvQnV0dG9uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5UmFkaW9CdXR0b25Sb2xlIH0sCi0gICAgICAg
IHsgQ2hlY2tCb3hSb2xlLCBOU0FjY2Vzc2liaWxpdHlDaGVja0JveFJvbGUgfSwKLSAgICAgICAg
eyBTbGlkZXJSb2xlLCBOU0FjY2Vzc2liaWxpdHlTbGlkZXJSb2xlIH0sCi0gICAgICAgIHsgVGFi
R3JvdXBSb2xlLCBOU0FjY2Vzc2liaWxpdHlUYWJHcm91cFJvbGUgfSwKLSAgICAgICAgeyBUZXh0
RmllbGRSb2xlLCBOU0FjY2Vzc2liaWxpdHlUZXh0RmllbGRSb2xlIH0sCi0gICAgICAgIHsgU3Rh
dGljVGV4dFJvbGUsIE5TQWNjZXNzaWJpbGl0eVN0YXRpY1RleHRSb2xlIH0sCi0gICAgICAgIHsg
VGV4dEFyZWFSb2xlLCBOU0FjY2Vzc2liaWxpdHlUZXh0QXJlYVJvbGUgfSwKLSAgICAgICAgeyBT
Y3JvbGxBcmVhUm9sZSwgTlNBY2Nlc3NpYmlsaXR5U2Nyb2xsQXJlYVJvbGUgfSwKLSAgICAgICAg
eyBQb3BVcEJ1dHRvblJvbGUsIE5TQWNjZXNzaWJpbGl0eVBvcFVwQnV0dG9uUm9sZSB9LAotICAg
ICAgICB7IE1lbnVCdXR0b25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlNZW51QnV0dG9uUm9sZSB9LAot
ICAgICAgICB7IFRhYmxlUm9sZSwgTlNBY2Nlc3NpYmlsaXR5VGFibGVSb2xlIH0sCi0gICAgICAg
IHsgQXBwbGljYXRpb25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlBcHBsaWNhdGlvblJvbGUgfSwKLSAg
ICAgICAgeyBHcm91cFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7
IFJhZGlvR3JvdXBSb2xlLCBOU0FjY2Vzc2liaWxpdHlSYWRpb0dyb3VwUm9sZSB9LAotICAgICAg
ICB7IExpc3RSb2xlLCBOU0FjY2Vzc2liaWxpdHlMaXN0Um9sZSB9LAotICAgICAgICB7IERpcmVj
dG9yeVJvbGUsIE5TQWNjZXNzaWJpbGl0eUxpc3RSb2xlIH0sCi0gICAgICAgIHsgU2Nyb2xsQmFy
Um9sZSwgTlNBY2Nlc3NpYmlsaXR5U2Nyb2xsQmFyUm9sZSB9LAotICAgICAgICB7IFZhbHVlSW5k
aWNhdG9yUm9sZSwgTlNBY2Nlc3NpYmlsaXR5VmFsdWVJbmRpY2F0b3JSb2xlIH0sCi0gICAgICAg
IHsgSW1hZ2VSb2xlLCBOU0FjY2Vzc2liaWxpdHlJbWFnZVJvbGUgfSwKLSAgICAgICAgeyBNZW51
QmFyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5TWVudUJhclJvbGUgfSwKLSAgICAgICAgeyBNZW51Um9s
ZSwgTlNBY2Nlc3NpYmlsaXR5TWVudVJvbGUgfSwKLSAgICAgICAgeyBNZW51SXRlbVJvbGUsIE5T
QWNjZXNzaWJpbGl0eU1lbnVJdGVtUm9sZSB9LAotICAgICAgICB7IENvbHVtblJvbGUsIE5TQWNj
ZXNzaWJpbGl0eUNvbHVtblJvbGUgfSwKLSAgICAgICAgeyBSb3dSb2xlLCBOU0FjY2Vzc2liaWxp
dHlSb3dSb2xlIH0sCi0gICAgICAgIHsgVG9vbGJhclJvbGUsIE5TQWNjZXNzaWJpbGl0eVRvb2xi
YXJSb2xlIH0sCi0gICAgICAgIHsgQnVzeUluZGljYXRvclJvbGUsIE5TQWNjZXNzaWJpbGl0eUJ1
c3lJbmRpY2F0b3JSb2xlIH0sCi0gICAgICAgIHsgUHJvZ3Jlc3NJbmRpY2F0b3JSb2xlLCBOU0Fj
Y2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvclJvbGUgfSwKLSAgICAgICAgeyBXaW5kb3dSb2xl
LCBOU0FjY2Vzc2liaWxpdHlXaW5kb3dSb2xlIH0sCi0gICAgICAgIHsgRHJhd2VyUm9sZSwgTlNB
Y2Nlc3NpYmlsaXR5RHJhd2VyUm9sZSB9LAotICAgICAgICB7IFN5c3RlbVdpZGVSb2xlLCBOU0Fj
Y2Vzc2liaWxpdHlTeXN0ZW1XaWRlUm9sZSB9LAotICAgICAgICB7IE91dGxpbmVSb2xlLCBOU0Fj
Y2Vzc2liaWxpdHlPdXRsaW5lUm9sZSB9LAotICAgICAgICB7IEluY3JlbWVudG9yUm9sZSwgTlNB
Y2Nlc3NpYmlsaXR5SW5jcmVtZW50b3JSb2xlIH0sCi0gICAgICAgIHsgQnJvd3NlclJvbGUsIE5T
QWNjZXNzaWJpbGl0eUJyb3dzZXJSb2xlIH0sCi0gICAgICAgIHsgQ29tYm9Cb3hSb2xlLCBOU0Fj
Y2Vzc2liaWxpdHlDb21ib0JveFJvbGUgfSwKLSAgICAgICAgeyBTcGxpdEdyb3VwUm9sZSwgTlNB
Y2Nlc3NpYmlsaXR5U3BsaXRHcm91cFJvbGUgfSwKLSAgICAgICAgeyBTcGxpdHRlclJvbGUsIE5T
QWNjZXNzaWJpbGl0eVNwbGl0dGVyUm9sZSB9LAotICAgICAgICB7IENvbG9yV2VsbFJvbGUsIE5T
QWNjZXNzaWJpbGl0eUNvbG9yV2VsbFJvbGUgfSwKLSAgICAgICAgeyBHcm93QXJlYVJvbGUsIE5T
QWNjZXNzaWJpbGl0eUdyb3dBcmVhUm9sZSB9LAotICAgICAgICB7IFNoZWV0Um9sZSwgTlNBY2Nl
c3NpYmlsaXR5U2hlZXRSb2xlIH0sCi0gICAgICAgIHsgSGVscFRhZ1JvbGUsIE5TQWNjZXNzaWJp
bGl0eUhlbHBUYWdSb2xlIH0sCi0gICAgICAgIHsgTWF0dGVSb2xlLCBOU0FjY2Vzc2liaWxpdHlN
YXR0ZVJvbGUgfSwgCi0gICAgICAgIHsgUnVsZXJSb2xlLCBOU0FjY2Vzc2liaWxpdHlSdWxlclJv
bGUgfSwKLSAgICAgICAgeyBSdWxlck1hcmtlclJvbGUsIE5TQWNjZXNzaWJpbGl0eVJ1bGVyTWFy
a2VyUm9sZSB9LAotICAgICAgICB7IExpbmtSb2xlLCBOU0FjY2Vzc2liaWxpdHlMaW5rUm9sZSB9
LAotICAgICAgICB7IERpc2Nsb3N1cmVUcmlhbmdsZVJvbGUsIE5TQWNjZXNzaWJpbGl0eURpc2Ns
b3N1cmVUcmlhbmdsZVJvbGUgfSwKLSAgICAgICAgeyBHcmlkUm9sZSwgTlNBY2Nlc3NpYmlsaXR5
R3JpZFJvbGUgfSwKLSAgICAgICAgeyBXZWJDb3JlTGlua1JvbGUsIE5TQWNjZXNzaWJpbGl0eUxp
bmtSb2xlIH0sIAotICAgICAgICB7IEltYWdlTWFwTGlua1JvbGUsIE5TQWNjZXNzaWJpbGl0eUxp
bmtSb2xlIH0sCi0gICAgICAgIHsgSW1hZ2VNYXBSb2xlLCBAIkFYSW1hZ2VNYXAiIH0sCi0gICAg
ICAgIHsgTGlzdE1hcmtlclJvbGUsIEAiQVhMaXN0TWFya2VyIiB9LAotICAgICAgICB7IFdlYkFy
ZWFSb2xlLCBAIkFYV2ViQXJlYSIgfSwKLSAgICAgICAgeyBTZWFtbGVzc1dlYkFyZWFSb2xlLCBO
U0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBIZWFkaW5nUm9sZSwgQCJBWEhl
YWRpbmciIH0sCi0gICAgICAgIHsgTGlzdEJveFJvbGUsIE5TQWNjZXNzaWJpbGl0eUxpc3RSb2xl
IH0sCi0gICAgICAgIHsgTGlzdEJveE9wdGlvblJvbGUsIE5TQWNjZXNzaWJpbGl0eVN0YXRpY1Rl
eHRSb2xlIH0sCi0gICAgICAgIHsgQ2VsbFJvbGUsIE5TQWNjZXNzaWJpbGl0eUNlbGxSb2xlIH0s
Ci0gICAgICAgIHsgVGFibGVIZWFkZXJDb250YWluZXJSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91
cFJvbGUgfSwKLSAgICAgICAgeyBSb3dIZWFkZXJSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJv
bGUgfSwKLSAgICAgICAgeyBEZWZpbml0aW9uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xl
IH0sCi0gICAgICAgIHsgRGVzY3JpcHRpb25MaXN0RGV0YWlsUm9sZSwgTlNBY2Nlc3NpYmlsaXR5
R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgRGVzY3JpcHRpb25MaXN0VGVybVJvbGUsIE5TQWNjZXNz
aWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IFNsaWRlclRodW1iUm9sZSwgTlNBY2Nlc3Np
YmlsaXR5VmFsdWVJbmRpY2F0b3JSb2xlIH0sCi0gICAgICAgIHsgTGFuZG1hcmtBcHBsaWNhdGlv
blJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IExhbmRtYXJrQmFu
bmVyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgTGFuZG1hcmtD
b21wbGVtZW50YXJ5Um9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsg
TGFuZG1hcmtDb250ZW50SW5mb1JvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAg
ICAgICB7IExhbmRtYXJrTWFpblJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAg
ICAgICB7IExhbmRtYXJrTmF2aWdhdGlvblJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9
LAotICAgICAgICB7IExhbmRtYXJrU2VhcmNoUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xl
IH0sCi0gICAgICAgIHsgQXBwbGljYXRpb25BbGVydFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3Vw
Um9sZSB9LAotICAgICAgICB7IEFwcGxpY2F0aW9uQWxlcnREaWFsb2dSb2xlLCBOU0FjY2Vzc2li
aWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBBcHBsaWNhdGlvbkRpYWxvZ1JvbGUsIE5TQWNj
ZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IEFwcGxpY2F0aW9uTG9nUm9sZSwgTlNB
Y2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgQXBwbGljYXRpb25NYXJxdWVlUm9s
ZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgQXBwbGljYXRpb25TdGF0
dXNSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBBcHBsaWNhdGlv
blRpbWVyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgRG9jdW1l
bnRSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBEb2N1bWVudEFy
dGljbGVSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBEb2N1bWVu
dE1hdGhSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBEb2N1bWVu
dE5vdGVSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBEb2N1bWVu
dFJlZ2lvblJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IFVzZXJJ
bnRlcmZhY2VUb29sdGlwUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAg
IHsgVGFiUm9sZSwgTlNBY2Nlc3NpYmlsaXR5UmFkaW9CdXR0b25Sb2xlIH0sCi0gICAgICAgIHsg
VGFiTGlzdFJvbGUsIE5TQWNjZXNzaWJpbGl0eVRhYkdyb3VwUm9sZSB9LAotICAgICAgICB7IFRh
YlBhbmVsUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgVHJlZVJv
bGUsIE5TQWNjZXNzaWJpbGl0eU91dGxpbmVSb2xlIH0sCi0gICAgICAgIHsgVHJlZUl0ZW1Sb2xl
LCBOU0FjY2Vzc2liaWxpdHlSb3dSb2xlIH0sCi0gICAgICAgIHsgTGlzdEl0ZW1Sb2xlLCBOU0Fj
Y2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBQYXJhZ3JhcGhSb2xlLCBOU0FjY2Vz
c2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBMYWJlbFJvbGUsIE5TQWNjZXNzaWJpbGl0
eUdyb3VwUm9sZSB9LAotICAgICAgICB7IERpdlJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9s
ZSB9LAotICAgICAgICB7IEZvcm1Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAg
ICAgICAgeyBTcGluQnV0dG9uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5SW5jcmVtZW50b3JSb2xlIH0s
Ci0gICAgICAgIHsgRm9vdGVyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAg
ICAgIHsgVG9nZ2xlQnV0dG9uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5QnV0dG9uUm9sZSB9LAotICAg
ICAgICB7IENhbnZhc1JvbGUsIE5TQWNjZXNzaWJpbGl0eUltYWdlUm9sZSB9LAotICAgICAgICB7
IFNWR1Jvb3RSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBMZWdl
bmRSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBNYXRoRWxlbWVu
dFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9Ci0gICAgfTsKLSAgICBBY2Nlc3NpYmls
aXR5Um9sZU1hcCYgcm9sZU1hcCA9ICpuZXcgQWNjZXNzaWJpbGl0eVJvbGVNYXA7Ci0gICAgCi0g
ICAgY29uc3QgdW5zaWduZWQgbnVtUm9sZXMgPSBzaXplb2Yocm9sZXMpIC8gc2l6ZW9mKHJvbGVz
WzBdKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUm9sZXM7ICsraSkKLSAgICAg
ICAgcm9sZU1hcC5zZXQocm9sZXNbaV0udmFsdWUsIHJvbGVzW2ldLnN0cmluZyk7Ci0gICAgcmV0
dXJuIHJvbGVNYXA7Ci19Ci0KLXN0YXRpYyBOU1N0cmluZyogcm9sZVZhbHVlVG9OU1N0cmluZyhB
Y2Nlc3NpYmlsaXR5Um9sZSB2YWx1ZSkKLXsKLSAgICBBU1NFUlQodmFsdWUpOwotICAgIHN0YXRp
YyBjb25zdCBBY2Nlc3NpYmlsaXR5Um9sZU1hcCYgcm9sZU1hcCA9IGNyZWF0ZUFjY2Vzc2liaWxp
dHlSb2xlTWFwKCk7Ci0gICAgcmV0dXJuIHJvbGVNYXAuZ2V0KHZhbHVlKTsKLX0KLQotLSAoTlNT
dHJpbmcqKXJvbGUKLXsKLSAgICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKQotICAgICAg
ICByZXR1cm4gW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFs
dWU6TlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZV07Ci0gICAgQWNjZXNzaWJpbGl0eVJvbGUg
cm9sZSA9IG1fb2JqZWN0LT5yb2xlVmFsdWUoKTsKLSAgICBpZiAocm9sZSA9PSBDYW52YXNSb2xl
ICYmIG1fb2JqZWN0LT5jYW52YXNIYXNGYWxsYmFja0NvbnRlbnQoKSkKLSAgICAgICAgcm9sZSA9
IEdyb3VwUm9sZTsKLSAgICBOU1N0cmluZyogc3RyaW5nID0gcm9sZVZhbHVlVG9OU1N0cmluZyhy
b2xlKTsKLSAgICBpZiAoc3RyaW5nICE9IG5pbCkKLSAgICAgICAgcmV0dXJuIHN0cmluZzsKLSAg
ICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VW5rbm93blJvbGU7Ci19Ci0KLS0gKE5TU3RyaW5nKilz
dWJyb2xlCi17Ci0gICAgaWYgKG1fb2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSkKLSAgICAgICAg
cmV0dXJuIE5TQWNjZXNzaWJpbGl0eVNlY3VyZVRleHRGaWVsZFN1YnJvbGU7Ci0gICAgaWYgKG1f
b2JqZWN0LT5pc1NlYXJjaEZpZWxkKCkpCi0gICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlT
ZWFyY2hGaWVsZFN1YnJvbGU7Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQo
KSkgewotICAgICAgICBOU1ZpZXcqIGF0dGFjaFZpZXcgPSBbc2VsZiBhdHRhY2htZW50Vmlld107
Ci0gICAgICAgIGlmIChbW2F0dGFjaFZpZXcgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSBj
b250YWluc09iamVjdDpOU0FjY2Vzc2liaWxpdHlTdWJyb2xlQXR0cmlidXRlXSkgewotICAgICAg
ICAgICAgcmV0dXJuIFthdHRhY2hWaWV3IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0Fj
Y2Vzc2liaWxpdHlTdWJyb2xlQXR0cmlidXRlXTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAg
ICBpZiAobV9vYmplY3QtPmlzU3BpbkJ1dHRvblBhcnQoKSkgewotICAgICAgICBpZiAodG9BY2Nl
c3NpYmlsaXR5U3BpbkJ1dHRvblBhcnQobV9vYmplY3QpLT5pc0luY3JlbWVudG9yKCkpCi0gICAg
ICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5SW5jcmVtZW50QXJyb3dTdWJyb2xlOwotCi0g
ICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlEZWNyZW1lbnRBcnJvd1N1YnJvbGU7Ci0gICAg
fQotICAgIAotICAgIGlmIChtX29iamVjdC0+aXNGaWxlVXBsb2FkQnV0dG9uKCkpCi0gICAgICAg
IHJldHVybiBAIkFYRmlsZVVwbG9hZEJ1dHRvbiI7Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0LT5p
c1RyZWVJdGVtKCkpCi0gICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlPdXRsaW5lUm93U3Vi
cm9sZTsKLSAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzTGlzdCgpKSB7Ci0gICAgICAgIEFjY2Vz
c2liaWxpdHlMaXN0KiBsaXN0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUxpc3Qq
PihtX29iamVjdCk7Ci0gICAgICAgIGlmIChsaXN0T2JqZWN0LT5pc1Vub3JkZXJlZExpc3QoKSB8
fCBsaXN0T2JqZWN0LT5pc09yZGVyZWRMaXN0KCkpCi0gICAgICAgICAgICByZXR1cm4gTlNBY2Nl
c3NpYmlsaXR5Q29udGVudExpc3RTdWJyb2xlOwotICAgICAgICBpZiAobGlzdE9iamVjdC0+aXNE
ZXNjcmlwdGlvbkxpc3QoKSkKLSAgICAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlEZXNj
cmlwdGlvbkxpc3RTdWJyb2xlOwotICAgIH0KLSAgICAKLSAgICAvLyBBUklBIGNvbnRlbnQgc3Vi
cm9sZXMuCi0gICAgc3dpdGNoIChtX29iamVjdC0+cm9sZVZhbHVlKCkpIHsKLSAgICAgICAgY2Fz
ZSBMYW5kbWFya0FwcGxpY2F0aW9uUm9sZToKLSAgICAgICAgICAgIHJldHVybiBAIkFYTGFuZG1h
cmtBcHBsaWNhdGlvbiI7Ci0gICAgICAgIGNhc2UgTGFuZG1hcmtCYW5uZXJSb2xlOgotICAgICAg
ICAgICAgcmV0dXJuIEAiQVhMYW5kbWFya0Jhbm5lciI7Ci0gICAgICAgIGNhc2UgTGFuZG1hcmtD
b21wbGVtZW50YXJ5Um9sZToKLSAgICAgICAgICAgIHJldHVybiBAIkFYTGFuZG1hcmtDb21wbGVt
ZW50YXJ5IjsKLSAgICAgICAgLy8gRm9vdGVyIHJvbGVzIHNob3VsZCBhcHBlYXIgYXMgY29udGVu
dCBpbmZvIHR5cGVzLgotICAgICAgICBjYXNlIEZvb3RlclJvbGU6Ci0gICAgICAgIGNhc2UgTGFu
ZG1hcmtDb250ZW50SW5mb1JvbGU6Ci0gICAgICAgICAgICByZXR1cm4gQCJBWExhbmRtYXJrQ29u
dGVudEluZm8iOwotICAgICAgICBjYXNlIExhbmRtYXJrTWFpblJvbGU6Ci0gICAgICAgICAgICBy
ZXR1cm4gQCJBWExhbmRtYXJrTWFpbiI7Ci0gICAgICAgIGNhc2UgTGFuZG1hcmtOYXZpZ2F0aW9u
Um9sZToKLSAgICAgICAgICAgIHJldHVybiBAIkFYTGFuZG1hcmtOYXZpZ2F0aW9uIjsKLSAgICAg
ICAgY2FzZSBMYW5kbWFya1NlYXJjaFJvbGU6Ci0gICAgICAgICAgICByZXR1cm4gQCJBWExhbmRt
YXJrU2VhcmNoIjsKLSAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkFsZXJ0Um9sZToKLSAgICAgICAg
ICAgIHJldHVybiBAIkFYQXBwbGljYXRpb25BbGVydCI7Ci0gICAgICAgIGNhc2UgQXBwbGljYXRp
b25BbGVydERpYWxvZ1JvbGU6Ci0gICAgICAgICAgICByZXR1cm4gQCJBWEFwcGxpY2F0aW9uQWxl
cnREaWFsb2ciOwotICAgICAgICBjYXNlIEFwcGxpY2F0aW9uRGlhbG9nUm9sZToKLSAgICAgICAg
ICAgIHJldHVybiBAIkFYQXBwbGljYXRpb25EaWFsb2ciOwotICAgICAgICBjYXNlIEFwcGxpY2F0
aW9uTG9nUm9sZToKLSAgICAgICAgICAgIHJldHVybiBAIkFYQXBwbGljYXRpb25Mb2ciOwotICAg
ICAgICBjYXNlIEFwcGxpY2F0aW9uTWFycXVlZVJvbGU6Ci0gICAgICAgICAgICByZXR1cm4gQCJB
WEFwcGxpY2F0aW9uTWFycXVlZSI7Ci0gICAgICAgIGNhc2UgQXBwbGljYXRpb25TdGF0dXNSb2xl
OgotICAgICAgICAgICAgcmV0dXJuIEAiQVhBcHBsaWNhdGlvblN0YXR1cyI7Ci0gICAgICAgIGNh
c2UgQXBwbGljYXRpb25UaW1lclJvbGU6Ci0gICAgICAgICAgICByZXR1cm4gQCJBWEFwcGxpY2F0
aW9uVGltZXIiOwotICAgICAgICBjYXNlIERvY3VtZW50Um9sZToKLSAgICAgICAgICAgIHJldHVy
biBAIkFYRG9jdW1lbnQiOwotICAgICAgICBjYXNlIERvY3VtZW50QXJ0aWNsZVJvbGU6Ci0gICAg
ICAgICAgICByZXR1cm4gQCJBWERvY3VtZW50QXJ0aWNsZSI7Ci0gICAgICAgIGNhc2UgRG9jdW1l
bnRNYXRoUm9sZToKLSAgICAgICAgICAgIHJldHVybiBAIkFYRG9jdW1lbnRNYXRoIjsKLSAgICAg
ICAgY2FzZSBEb2N1bWVudE5vdGVSb2xlOgotICAgICAgICAgICAgcmV0dXJuIEAiQVhEb2N1bWVu
dE5vdGUiOwotICAgICAgICBjYXNlIERvY3VtZW50UmVnaW9uUm9sZToKLSAgICAgICAgICAgIHJl
dHVybiBAIkFYRG9jdW1lbnRSZWdpb24iOwotICAgICAgICBjYXNlIFVzZXJJbnRlcmZhY2VUb29s
dGlwUm9sZToKLSAgICAgICAgICAgIHJldHVybiBAIkFYVXNlckludGVyZmFjZVRvb2x0aXAiOwot
ICAgICAgICBjYXNlIFRhYlBhbmVsUm9sZToKLSAgICAgICAgICAgIHJldHVybiBAIkFYVGFiUGFu
ZWwiOwotICAgICAgICBjYXNlIERlZmluaXRpb25Sb2xlOgotICAgICAgICAgICAgcmV0dXJuIEAi
QVhEZWZpbml0aW9uIjsKLSAgICAgICAgY2FzZSBEZXNjcmlwdGlvbkxpc3RUZXJtUm9sZToKLSAg
ICAgICAgICAgIHJldHVybiBAIkFYVGVybSI7Ci0gICAgICAgIGNhc2UgRGVzY3JpcHRpb25MaXN0
RGV0YWlsUm9sZToKLSAgICAgICAgICAgIHJldHVybiBAIkFYRGVzY3JpcHRpb24iOwotICAgICAg
ICAvLyBEZWZhdWx0IGRvZXNuJ3QgcmV0dXJuIGFueXRoaW5nLCBzbyByb2xlcyBkZWZpbmVkIGJl
bG93IGNhbiBiZSBjaG9zZW4uCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBNYXRoRWxlbWVu
dFJvbGUpIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhGcmFjdGlvbigpKQotICAgICAg
ICAgICAgcmV0dXJuIEAiQVhNYXRoRnJhY3Rpb24iOwotICAgICAgICBpZiAobV9vYmplY3QtPmlz
TWF0aEZlbmNlZCgpKQotICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoRmVuY2VkIjsKLSAgICAg
ICAgaWYgKG1fb2JqZWN0LT5pc01hdGhTdWJzY3JpcHRTdXBlcnNjcmlwdCgpKQotICAgICAgICAg
ICAgcmV0dXJuIEAiQVhNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQiOwotICAgICAgICBpZiAobV9v
YmplY3QtPmlzTWF0aFJvdygpKQotICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoUm93IjsKLSAg
ICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhVbmRlck92ZXIoKSkKLSAgICAgICAgICAgIHJldHVy
biBAIkFYTWF0aFVuZGVyT3ZlciI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoU3F1YXJl
Um9vdCgpKQotICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoU3F1YXJlUm9vdCI7Ci0gICAgICAg
IGlmIChtX29iamVjdC0+aXNNYXRoUm9vdCgpKQotICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRo
Um9vdCI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoVGV4dCgpKQotICAgICAgICAgICAg
cmV0dXJuIEAiQVhNYXRoVGV4dCI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoTnVtYmVy
KCkpCi0gICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhOdW1iZXIiOwotICAgICAgICBpZiAobV9v
YmplY3QtPmlzTWF0aElkZW50aWZpZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aElk
ZW50aWZpZXIiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFRhYmxlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gQCJBWE1hdGhUYWJsZSI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRo
VGFibGVSb3coKSkKLSAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFRhYmxlUm93IjsKLSAgICAg
ICAgaWYgKG1fb2JqZWN0LT5pc01hdGhUYWJsZUNlbGwoKSkKLSAgICAgICAgICAgIHJldHVybiBA
IkFYTWF0aFRhYmxlQ2VsbCI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoRmVuY2VPcGVy
YXRvcigpKQotICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoRmVuY2VPcGVyYXRvciI7Ci0gICAg
ICAgIGlmIChtX29iamVjdC0+aXNNYXRoU2VwYXJhdG9yT3BlcmF0b3IoKSkKLSAgICAgICAgICAg
IHJldHVybiBAIkFYTWF0aFNlcGFyYXRvck9wZXJhdG9yIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0
LT5pc01hdGhPcGVyYXRvcigpKQotICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoT3BlcmF0b3Ii
OwotICAgIH0KLSAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzTWVkaWFUaW1lbGluZSgpKQotICAg
ICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VGltZWxpbmVTdWJyb2xlOwotCiAgICAgcmV0dXJu
IG5pbDsKIH0KIAotLSAoTlNTdHJpbmcqKXJvbGVEZXNjcmlwdGlvbgorLSAoQWNjZXNzaWJpbGl0
eU9iamVjdCopYWNjZXNzaWJpbGl0eU9iamVjdAogewotICAgIGlmICghbV9vYmplY3QpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0KLSAgICAvLyBhdHRhY2htZW50cyBoYXZlIHRoZSBBWEltYWdlIHJv
bGUsIGJ1dCBhIGRpZmZlcmVudCBzdWJyb2xlCi0gICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1l
bnQoKSkKLSAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZV07
Ci0gICAgCi0gICAgTlNTdHJpbmcqIGF4Um9sZSA9IFtzZWxmIHJvbGVdOwotICAgIAotICAgIGlm
IChbYXhSb2xlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGVdKSB7Ci0g
ICAgICAgIHN3aXRjaCAobV9vYmplY3QtPnJvbGVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRp
b24oTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlLCBbc2VsZiBzdWJyb2xlXSk7Ci0gICAgICAgICAg
ICBjYXNlIExhbmRtYXJrQXBwbGljYXRpb25Sb2xlOgotICAgICAgICAgICAgICAgIHJldHVybiBB
WEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUxhbmRtYXJrQXBwbGljYXRpb24iKTsKLSAgICAg
ICAgICAgIGNhc2UgTGFuZG1hcmtCYW5uZXJSb2xlOgotICAgICAgICAgICAgICAgIHJldHVybiBB
WEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUxhbmRtYXJrQmFubmVyIik7Ci0gICAgICAgICAg
ICBjYXNlIExhbmRtYXJrQ29tcGxlbWVudGFyeVJvbGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBTGFuZG1hcmtDb21wbGVtZW50YXJ5Iik7Ci0g
ICAgICAgICAgICBjYXNlIExhbmRtYXJrQ29udGVudEluZm9Sb2xlOgotICAgICAgICAgICAgICAg
IHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUxhbmRtYXJrQ29udGVudEluZm8i
KTsKLSAgICAgICAgICAgIGNhc2UgTGFuZG1hcmtNYWluUm9sZToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFMYW5kbWFya01haW4iKTsKLSAgICAg
ICAgICAgIGNhc2UgTGFuZG1hcmtOYXZpZ2F0aW9uUm9sZToKLSAgICAgICAgICAgICAgICByZXR1
cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFMYW5kbWFya05hdmlnYXRpb24iKTsKLSAg
ICAgICAgICAgIGNhc2UgTGFuZG1hcmtTZWFyY2hSb2xlOgotICAgICAgICAgICAgICAgIHJldHVy
biBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUxhbmRtYXJrU2VhcmNoIik7Ci0gICAgICAg
ICAgICBjYXNlIEFwcGxpY2F0aW9uQWxlcnRSb2xlOgotICAgICAgICAgICAgICAgIHJldHVybiBB
WEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUFwcGxpY2F0aW9uQWxlcnQiKTsKLSAgICAgICAg
ICAgIGNhc2UgQXBwbGljYXRpb25BbGVydERpYWxvZ1JvbGU6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBQXBwbGljYXRpb25BbGVydERpYWxvZyIp
OwotICAgICAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkRpYWxvZ1JvbGU6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBQXBwbGljYXRpb25EaWFsb2ci
KTsKLSAgICAgICAgICAgIGNhc2UgQXBwbGljYXRpb25Mb2dSb2xlOgotICAgICAgICAgICAgICAg
IHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUFwcGxpY2F0aW9uTG9nIik7Ci0g
ICAgICAgICAgICBjYXNlIEFwcGxpY2F0aW9uTWFycXVlZVJvbGU6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBQXBwbGljYXRpb25NYXJxdWVlIik7
Ci0gICAgICAgICAgICBjYXNlIEFwcGxpY2F0aW9uU3RhdHVzUm9sZToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFBcHBsaWNhdGlvblN0YXR1cyIp
OwotICAgICAgICAgICAgY2FzZSBBcHBsaWNhdGlvblRpbWVyUm9sZToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFBcHBsaWNhdGlvblRpbWVyIik7
Ci0gICAgICAgICAgICBjYXNlIERvY3VtZW50Um9sZToKLSAgICAgICAgICAgICAgICByZXR1cm4g
QVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFEb2N1bWVudCIpOwotICAgICAgICAgICAgY2Fz
ZSBEb2N1bWVudEFydGljbGVSb2xlOgotICAgICAgICAgICAgICAgIHJldHVybiBBWEFSSUFDb250
ZW50R3JvdXBUZXh0KEAiQVJJQURvY3VtZW50QXJ0aWNsZSIpOwotICAgICAgICAgICAgY2FzZSBE
b2N1bWVudE1hdGhSb2xlOgotICAgICAgICAgICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50R3Jv
dXBUZXh0KEAiQVJJQURvY3VtZW50TWF0aCIpOwotICAgICAgICAgICAgY2FzZSBEb2N1bWVudE5v
dGVSb2xlOgotICAgICAgICAgICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAi
QVJJQURvY3VtZW50Tm90ZSIpOwotICAgICAgICAgICAgY2FzZSBEb2N1bWVudFJlZ2lvblJvbGU6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBRG9j
dW1lbnRSZWdpb24iKTsKLSAgICAgICAgICAgIGNhc2UgVXNlckludGVyZmFjZVRvb2x0aXBSb2xl
OgotICAgICAgICAgICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQVVz
ZXJJbnRlcmZhY2VUb29sdGlwIik7Ci0gICAgICAgICAgICBjYXNlIFRhYlBhbmVsUm9sZToKLSAg
ICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFUYWJQYW5l
bCIpOwotICAgICAgICAgICAgY2FzZSBEZWZpbml0aW9uUm9sZToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gQVhEZWZpbml0aW9uVGV4dCgpOwotICAgICAgICAgICAgY2FzZSBEZXNjcmlwdGlvbkxp
c3RUZXJtUm9sZToKLSAgICAgICAgICAgICAgICByZXR1cm4gQVhEZXNjcmlwdGlvbkxpc3RUZXJt
VGV4dCgpOwotICAgICAgICAgICAgY2FzZSBEZXNjcmlwdGlvbkxpc3REZXRhaWxSb2xlOgotICAg
ICAgICAgICAgICAgIHJldHVybiBBWERlc2NyaXB0aW9uTGlzdERldGFpbFRleHQoKTsKLSAgICAg
ICAgICAgIGNhc2UgRm9vdGVyUm9sZToKLSAgICAgICAgICAgICAgICByZXR1cm4gQVhGb290ZXJS
b2xlRGVzY3JpcHRpb25UZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9ICAgICAgICAKLSAgICAKLSAg
ICBpZiAoW2F4Um9sZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFdlYkFyZWEiXSkKLSAgICAgICAgcmV0
dXJuIEFYV2ViQXJlYVRleHQoKTsKLSAgICAKLSAgICBpZiAoW2F4Um9sZSBpc0VxdWFsVG9TdHJp
bmc6QCJBWExpbmsiXSkKLSAgICAgICAgcmV0dXJuIEFYTGlua1RleHQoKTsKLSAgICAKLSAgICBp
ZiAoW2F4Um9sZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExpc3RNYXJrZXIiXSkKLSAgICAgICAgcmV0
dXJuIEFYTGlzdE1hcmtlclRleHQoKTsKLSAgICAKLSAgICBpZiAoW2F4Um9sZSBpc0VxdWFsVG9T
dHJpbmc6QCJBWEltYWdlTWFwIl0pCi0gICAgICAgIHJldHVybiBBWEltYWdlTWFwVGV4dCgpOwot
Ci0gICAgaWYgKFtheFJvbGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhIZWFkaW5nIl0pCi0gICAgICAg
IHJldHVybiBBWEhlYWRpbmdUZXh0KCk7Ci0KLSAgICBpZiAobV9vYmplY3QtPmlzRmlsZVVwbG9h
ZEJ1dHRvbigpKQotICAgICAgICByZXR1cm4gQVhGaWxlVXBsb2FkQnV0dG9uVGV4dCgpOwotICAg
IAotICAgIC8vIEFwcEtpdCBhbHNvIHJldHVybnMgQVhUYWIgZm9yIHRoZSByb2xlIGRlc2NyaXB0
aW9uIGZvciBhIHRhYiBpdGVtLgotICAgIGlmIChtX29iamVjdC0+aXNUYWJJdGVtKCkpCi0gICAg
ICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb24oQCJBWFRhYiIsIG5pbCk7
Ci0gICAgCi0gICAgLy8gV2Ugc2hvdWxkIHRyeSB0aGUgc3lzdGVtIGRlZmF1bHQgcm9sZSBkZXNj
cmlwdGlvbiBmb3IgYWxsIG90aGVyIHJvbGVzLgotICAgIC8vIElmIHdlIGdldCB0aGUgc2FtZSBz
dHJpbmcgYmFjaywgdGhlbiBhcyBhIGxhc3QgcmVzb3J0LCByZXR1cm4gdW5rbm93bi4KLSAgICBO
U1N0cmluZyogZGVmYXVsdFJvbGVEZXNjcmlwdGlvbiA9IE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNj
cmlwdGlvbihheFJvbGUsIFtzZWxmIHN1YnJvbGVdKTsKLSAgICAKLSAgICAvLyBPbiBlYXJsaWVy
IE1hYyB2ZXJzaW9ucyAoTGlvbiksIHVzaW5nIGEgbm9uLXN0YW5kYXJkIHN1YnJvbGUgd291bGQg
cmVzdWx0IGluIGEgcm9sZSBkZXNjcmlwdGlvbgotICAgIC8vIGJlaW5nIHJldHVybmVkIHRoYXQg
bG9va2VkIGxpa2UgQVhSb2xlOkFYU3Vicm9sZS4gVG8gbWFrZSBhbGwgcGxhdGZvcm1zIGhhdmUg
dGhlIHNhbWUgcm9sZSBkZXNjcmlwdGlvbnMKLSAgICAvLyB3ZSBzaG91bGQgZmFsbGJhY2sgb24g
YSByb2xlIGRlc2NyaXB0aW9uIGlnbm9yaW5nIHRoZSBzdWJyb2xlIGluIHRoZXNlIGNhc2VzLgot
ICAgIGlmIChbZGVmYXVsdFJvbGVEZXNjcmlwdGlvbiBpc0VxdWFsVG9TdHJpbmc6W05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDolQCIsIGF4Um9sZSwgW3NlbGYgc3Vicm9sZV1dXSkKLSAg
ICAgICAgZGVmYXVsdFJvbGVEZXNjcmlwdGlvbiA9IE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlw
dGlvbihheFJvbGUsIG5pbCk7Ci0gICAgCi0gICAgaWYgKCFbZGVmYXVsdFJvbGVEZXNjcmlwdGlv
biBpc0VxdWFsVG9TdHJpbmc6YXhSb2xlXSkKLSAgICAgICAgcmV0dXJuIGRlZmF1bHRSb2xlRGVz
Y3JpcHRpb247Ci0KLSAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uKE5T
QWNjZXNzaWJpbGl0eVVua25vd25Sb2xlLCBuaWwpOworICAgIHJldHVybiBtX29iamVjdDsKIH0K
IAotLSAoaWQpc2Nyb2xsVmlld1BhcmVudAorLSAodm9pZClhY2Nlc3NpYmlsaXR5UG9zdGVkTm90
aWZpY2F0aW9uOihOU1N0cmluZyAqKW5vdGlmaWNhdGlvbk5hbWUKIHsKLSAgICBpZiAoIW1fb2Jq
ZWN0IHx8ICFtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldygpKQotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIAotICAgIC8vIElmIHRoaXMgc2Nyb2xsIHZpZXcgcHJvdmlkZXMgaXQn
cyBwYXJlbnQgb2JqZWN0IChiZWNhdXNlIGl0J3MgYSBzdWItZnJhbWUpLCB0aGVuCi0gICAgLy8g
d2Ugc2hvdWxkIG5vdCBmaW5kIHRoZSByZW1vdGVBY2Nlc3NpYmlsaXR5UGFyZW50LgotICAgIGlm
IChtX29iamVjdC0+cGFyZW50T2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0g
ICAgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcqIHNjcm9sbFZpZXcgPSB0b0FjY2Vzc2liaWxpdHlT
Y3JvbGxWaWV3KG1fb2JqZWN0KTsKLSAgICBTY3JvbGxWaWV3KiBzY3JvbGwgPSBzY3JvbGxWaWV3
LT5zY3JvbGxWaWV3KCk7Ci0gICAgaWYgKCFzY3JvbGwpCi0gICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgCi0gICAgaWYgKHNjcm9sbC0+cGxhdGZvcm1XaWRnZXQoKSkKLSAgICAgICAgcmV0dXJuIE5T
QWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKHNjcm9sbC0+cGxhdGZvcm1XaWRnZXQoKSk7
Ci0KLSAgICByZXR1cm4gW3NlbGYgcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdF07Cisg
ICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbk5hbWUpOworICAgIHJldHVybjsKIH0KIAogLy8g
RklYTUU6IERpZmZlcmVudCBraW5kcyBvZiBlbGVtZW50cyBhcmUgcHV0dGluZyB0aGUgdGl0bGUg
dGFnIHRvIHVzZSBpbiBkaWZmZXJlbnQKQEAgLTIwMzMsMTU1OCArMjMyLDYgQEAKICAgICByZXR1
cm4gW05TU3RyaW5nIHN0cmluZ107CiB9CiAKLS8vIEZJWE1FOiBzcGxpdCB1cCB0aGlzIGZ1bmN0
aW9uIGluIGEgYmV0dGVyIHdheS4gIAotLy8gc3VnZ2VzdGlvbnM6IFVzZSBhIGhhc2ggdGFibGUg
dGhhdCBtYXBzIGF0dHJpYnV0ZSBuYW1lcyB0byBmdW5jdGlvbiBjYWxscywKLS8vIG9yIG1heWJl
IHBvaW50ZXJzIHRvIG1lbWJlciBmdW5jdGlvbnMKLS0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWUKLXsKLSAgICBpZiAoIVtzZWxmIHVwZGF0
ZU9iamVjdEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJp
YnV0ZV0pCi0gICAgICAgIHJldHVybiBbc2VsZiByb2xlXTsKLQotICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVN1YnJvbGVBdHRyaWJ1dGVdKQot
ICAgICAgICByZXR1cm4gW3NlbGYgc3Vicm9sZV07Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb25BdHRyaWJ1dGVd
KQotICAgICAgICByZXR1cm4gW3NlbGYgcm9sZURlc2NyaXB0aW9uXTsKLQotICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0
ZV0pIHsKLQotICAgICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIHRoZSBwYXJlbnQgb2YgdGhlIEFY
V2ViQXJlYSwgaWYgdGhpcyBpcyBhIHdlYiBhcmVhLgotICAgICAgICBpZCBzY3JvbGxWaWV3UGFy
ZW50ID0gW3NlbGYgc2Nyb2xsVmlld1BhcmVudF07Ci0gICAgICAgIGlmIChzY3JvbGxWaWV3UGFy
ZW50KQotICAgICAgICAgICAgcmV0dXJuIHNjcm9sbFZpZXdQYXJlbnQ7Ci0gICAgICAgIAotICAg
ICAgICAvLyBUcmVlIGl0ZW0gKGNoYW5nZWQgdG8gQVhSb3dzKSBjYW4gb25seSByZXBvcnQgdGhl
IHRyZWUgKEFYT3V0bGluZSkgYXMgaXRzIHBhcmVudC4KLSAgICAgICAgaWYgKG1fb2JqZWN0LT5p
c1RyZWVJdGVtKCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9
IG1fb2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKLSAgICAgICAgICAgIHdoaWxlIChw
YXJlbnQpIHsKLSAgICAgICAgICAgICAgICBpZiAocGFyZW50LT5pc1RyZWUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwotICAgICAgICAgICAgICAgIHBh
cmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9
IG1fb2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKLSAgICAgICAgaWYgKCFwYXJlbnQp
Ci0gICAgICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgICAgIC8vIEluIFdlYktpdDEsIHRoZSBz
Y3JvbGwgdmlldyBpcyBwcm92aWRlZCBieSB0aGUgc3lzdGVtICh0aGUgYXR0YWNobWVudCB2aWV3
KSwgc28gdGhlIHBhcmVudAotICAgICAgICAvLyBzaG91bGQgYmUgcmVwb3J0ZWQgZGlyZWN0bHkg
YXMgc3VjaC4KLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1dlYkFyZWEoKSAmJiBwYXJlbnQtPmlz
QXR0YWNobWVudCgpKQotICAgICAgICAgICAgcmV0dXJuIFtwYXJlbnQtPndyYXBwZXIoKSBhdHRh
Y2htZW50Vmlld107Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7
Ci0gICAgfQotCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChtX29iamVjdC0+Y2hp
bGRyZW4oKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIE5TQXJyYXkqIGNoaWxkcmVuID0gW3Nl
bGYgcmVuZGVyV2lkZ2V0Q2hpbGRyZW5dOwotICAgICAgICAgICAgaWYgKGNoaWxkcmVuICE9IG5p
bCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBUaGUgdHJlZSdzIChBWE91dGxpbmUpIGNoaWxkcmVuIGFyZSBzdXBwb3NlZCB0byBiZSBp
dHMgcm93cyBhbmQgY29sdW1ucy4KLSAgICAgICAgLy8gVGhlIEFSSUEgc3BlYyBkb2Vzbid0IGhh
dmUgY29sdW1ucywgc28gd2UganVzdCBuZWVkIHJvd3MuCi0gICAgICAgIGlmIChtX29iamVjdC0+
aXNUcmVlKCkpCi0gICAgICAgICAgICByZXR1cm4gW3NlbGYgYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVJvd3NBdHRyaWJ1dGVdOwotCi0gICAgICAgIC8vIEEgdHJl
ZSBpdGVtIHNob3VsZCBvbmx5IGV4cG9zZSBpdHMgY29udGVudCBhcyBpdHMgY2hpbGRyZW4gKG5v
dCBpdHMgcm93cykKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsKLSAgICAg
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBj
b250ZW50Q29weTsKLSAgICAgICAgICAgIG1fb2JqZWN0LT5hcmlhVHJlZUl0ZW1Db250ZW50KGNv
bnRlbnRDb3B5KTsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGNvbnRlbnRD
b3B5KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJy
YXkobV9vYmplY3QtPmNoaWxkcmVuKCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENoaWxkcmVuQXR0
cmlidXRlXSkgewotICAgICAgICBpZiAobV9vYmplY3QtPmlzTGlzdEJveCgpKSB7Ci0gICAgICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2Vs
ZWN0ZWRDaGlsZHJlbkNvcHk7Ci0gICAgICAgICAgICBtX29iamVjdC0+c2VsZWN0ZWRDaGlsZHJl
bihzZWxlY3RlZENoaWxkcmVuQ29weSk7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNB
cnJheShzZWxlY3RlZENoaWxkcmVuQ29weSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzog
TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoaWxkcmVuQXR0cmlidXRlXSkgewotICAgICAgICBpZiAo
bV9vYmplY3QtPmlzTGlzdEJveCgpKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdmlzaWJsZUNoaWxkcmVuQ29weTsKLSAgICAg
ICAgICAgIG1fb2JqZWN0LT52aXNpYmxlQ2hpbGRyZW4odmlzaWJsZUNoaWxkcmVuQ29weSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheSh2aXNpYmxlQ2hpbGRyZW5Db3B5KTsK
LSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtX29iamVjdC0+aXNMaXN0KCkpCi0gICAgICAg
ICAgICByZXR1cm4gW3NlbGYgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJp
bGl0eUNoaWxkcmVuQXR0cmlidXRlXTsKLQotICAgICAgICByZXR1cm4gbmlsOwotICAgIH0KLSAg
ICAKLSAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzV2ViQXJlYSgpKSB7Ci0gICAgICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExpbmtVSUVsZW1lbnRzIl0pIHsKLSAg
ICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciBsaW5rczsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QqPihtX29iamVjdCktPmdldERvY3VtZW50TGlua3MobGlua3MpOwotICAgICAgICAgICAgcmV0
dXJuIGNvbnZlcnRUb05TQXJyYXkobGlua3MpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExvYWRlZCJdKQotICAgICAgICAgICAgcmV0
dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNMb2FkZWQoKV07Ci0gICAg
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExheW91dENvdW50Il0p
Ci0gICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bV9vYmplY3QtPmxh
eW91dENvdW50KCldOwotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eUxvYWRpbmdQcm9ncmVzc0F0dHJpYnV0ZV0pCi0gICAgICAgICAgICBy
ZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6bV9vYmplY3QtPmVzdGltYXRlZExvYWRp
bmdQcm9ncmVzcygpXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc1RleHRDb250
cm9sKCkpIHsKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNB
Y2Nlc3NpYmlsaXR5TnVtYmVyT2ZDaGFyYWN0ZXJzQXR0cmlidXRlXSkgewotICAgICAgICAgICAg
aW50IGxlbmd0aCA9IG1fb2JqZWN0LT50ZXh0TGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAobGVu
Z3RoIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAgICAgcmV0dXJu
IFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6bGVuZ3RoXTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlT
ZWxlY3RlZFRleHRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0
ID0gbV9vYmplY3QtPnNlbGVjdGVkVGV4dCgpOwotICAgICAgICAgICAgaWYgKHNlbGVjdGVkVGV4
dC5pc051bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAgICAgcmV0
dXJuIChOU1N0cmluZyopc2VsZWN0ZWRUZXh0OwotICAgICAgICB9Ci0gICAgICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dFJh
bmdlQXR0cmlidXRlXSkgewotICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0g
bV9vYmplY3QtPnNlbGVjdGVkVGV4dFJhbmdlKCk7Ci0gICAgICAgICAgICBpZiAodGV4dFJhbmdl
LmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5n
ZTpOU01ha2VSYW5nZSgwLCAwKV07Ci0gICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVX
aXRoUmFuZ2U6TlNNYWtlUmFuZ2UodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2UubGVuZ3RoKV07
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVE9ETzogR2V0IGFjdHVhbCB2aXNpYmxlIHJhbmdlLiA8
cmRhcjovL3Byb2JsZW0vNDcxMjEwMT4KLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmlidXRl
XSkKLSAgICAgICAgICAgIHJldHVybiBtX29iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkgPyBuaWwg
OiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTogTlNNYWtlUmFuZ2UoMCwgbV9vYmplY3QtPnRleHRM
ZW5ndGgoKSldOwotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBO
U0FjY2Vzc2liaWxpdHlJbnNlcnRpb25Qb2ludExpbmVOdW1iZXJBdHRyaWJ1dGVdKSB7Ci0gICAg
ICAgICAgICAvLyBpZiBzZWxlY3Rpb25FbmQgPiAwLCB0aGVuIHRoZXJlIGlzIHNlbGVjdGVkIHRl
eHQgYW5kIHRoaXMgcXVlc3Rpb24gc2hvdWxkIG5vdCBiZSBhbnN3ZXJlZAotICAgICAgICAgICAg
aWYgKG1fb2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSB8fCBtX29iamVjdC0+c2VsZWN0aW9uRW5k
KCkgPiAwKQotICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGZvY3VzZWRPYmplY3QgPSBtX29iamVjdC0+Zm9jdXNlZFVJRWxlbWVu
dCgpOwotICAgICAgICAgICAgaWYgKGZvY3VzZWRPYmplY3QgIT0gbV9vYmplY3QpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZvY3Vz
ZWRQb3NpdGlvbiA9IGZvY3VzZWRPYmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KGZvY3Vz
ZWRPYmplY3QtPnNlbGVjdGlvblN0YXJ0KCksIHRydWUpOwotICAgICAgICAgICAgaW50IGxpbmVO
dW1iZXIgPSBtX29iamVjdC0+bGluZUZvclBvc2l0aW9uKGZvY3VzZWRQb3NpdGlvbik7Ci0gICAg
ICAgICAgICBpZiAobGluZU51bWJlciA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OmxpbmVOdW1iZXJd
OwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVVSTEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgS1VSTCB1
cmwgPSBtX29iamVjdC0+dXJsKCk7Ci0gICAgICAgIGlmICh1cmwuaXNOdWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm4gbmlsOwotICAgICAgICByZXR1cm4gKE5TVVJMKil1cmw7Ci0gICAgfQotCi0g
ICAgaWYgKG1fb2JqZWN0LT5pc1NwaW5CdXR0b24oKSkgewotICAgICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUluY3JlbWVudEJ1dHRvbkF0dHJp
YnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gdG9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbihtX29i
amVjdCktPmluY3JlbWVudEJ1dHRvbigpLT53cmFwcGVyKCk7Ci0gICAgICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGVjcmVtZW50QnV0dG9uQXR0
cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiB0b0FjY2Vzc2liaWxpdHlTcGluQnV0dG9uKG1f
b2JqZWN0KS0+ZGVjcmVtZW50QnV0dG9uKCktPndyYXBwZXIoKTsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogQCJBWFZpc2l0ZWQiXSkKLSAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDogbV9vYmplY3QtPmlzVmlzaXRlZCgp
XTsKLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vz
c2liaWxpdHlUaXRsZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFj
aG1lbnQoKSkgewotICAgICAgICAgICAgaWYgKFtbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVOYW1lc10gY29udGFpbnNPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VGl0
bGVBdHRyaWJ1dGVdKSAKLSAgICAgICAgICAgICAgICByZXR1cm4gW1tzZWxmIGF0dGFjaG1lbnRW
aWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5VGl0bGVBdHRy
aWJ1dGVdOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gW3NlbGYgYWNjZXNz
aWJpbGl0eVRpdGxlXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdKSB7Ci0gICAg
ICAgIGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChbW1tz
ZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdIGNvbnRhaW5z
T2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRlXSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRl
VmFsdWU6TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBbc2VsZiBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25dOwotICAgIH0KLQot
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVZh
bHVlQXR0cmlidXRlXSkgewotICAgICAgICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKSB7
Ci0gICAgICAgICAgICBpZiAoW1tbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZU5hbWVzXSBjb250YWluc09iamVjdDpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0
ZV0pIAotICAgICAgICAgICAgICAgIHJldHVybiBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV07Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c1JhbmdlVmFsdWUoKSkKLSAg
ICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Om1fb2JqZWN0LT52YWx1
ZUZvclJhbmdlKCldOwotICAgICAgICBpZiAobV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IFNsaWRl
clRodW1iUm9sZSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0
Om1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKS0+dmFsdWVGb3JSYW5nZSgpXTsKLSAgICAgICAgaWYg
KG1fb2JqZWN0LT5pc0hlYWRpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVt
YmVyV2l0aEludDptX29iamVjdC0+aGVhZGluZ0xldmVsKCldOwotICAgICAgICAKLSAgICAgICAg
aWYgKG1fb2JqZWN0LT5pc0NoZWNrYm94T3JSYWRpbygpKSB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KG1fb2JqZWN0LT5jaGVja2JveE9yUmFkaW9WYWx1ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEJ1
dHRvblN0YXRlT2ZmOgotICAgICAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0
aEludDowXTsKLSAgICAgICAgICAgIGNhc2UgQnV0dG9uU3RhdGVPbjoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6MV07Ci0gICAgICAgICAgICBjYXNlIEJ1
dHRvblN0YXRlTWl4ZWQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJX
aXRoSW50OjJdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gcmFkaW8g
Z3JvdXBzIHJldHVybiB0aGUgc2VsZWN0ZWQgcmFkaW8gYnV0dG9uIGFzIHRoZSBBWFZhbHVlCi0g
ICAgICAgIGlmIChtX29iamVjdC0+aXNSYWRpb0dyb3VwKCkpIHsKLSAgICAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIHJhZGlvQnV0dG9uID0gbV9vYmplY3QtPnNlbGVjdGVkUmFkaW9CdXR0
b24oKTsKLSAgICAgICAgICAgIGlmICghcmFkaW9CdXR0b24pCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICAgICAgICAgIHJldHVybiByYWRpb0J1dHRvbi0+d3JhcHBlcigpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9vYmplY3QtPmlzVGFiTGlzdCgpKSB7Ci0g
ICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB0YWJJdGVtID0gbV9vYmplY3QtPnNlbGVj
dGVkVGFiSXRlbSgpOwotICAgICAgICAgICAgaWYgKCF0YWJJdGVtKQotICAgICAgICAgICAgICAg
IHJldHVybiBuaWw7Ci0gICAgICAgICAgICByZXR1cm4gdGFiSXRlbS0+d3JhcHBlcigpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9vYmplY3QtPmlzVGFiSXRlbSgpKQotICAg
ICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Om1fb2JqZWN0LT5pc1NlbGVj
dGVkKCldOwotCi0gICAgICAgIGlmIChtX29iamVjdC0+aXNDb2xvcldlbGwoKSkgewotICAgICAg
ICAgICAgaW50IHIsIGcsIGI7Ci0gICAgICAgICAgICBtX29iamVjdC0+Y29sb3JWYWx1ZShyLCBn
LCBiKTsKLSAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJn
YiAlNy41ZiAlNy41ZiAlNy41ZiAxIiwgciAvIDI1NS4sIGcgLyAyNTUuLCBiIC8gMjU1Ll07Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+c3RyaW5nVmFsdWUo
KTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0Fj
Y2Vzc2liaWxpdHlNaW5WYWx1ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0Om1fb2JqZWN0LT5taW5WYWx1ZUZvclJhbmdlKCldOwotCi0gICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5TWF4VmFsdWVB
dHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDptX29i
amVjdC0+bWF4VmFsdWVGb3JSYW5nZSgpXTsKLQotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUhlbHBBdHRyaWJ1dGVdKQotICAgICAgICByZXR1
cm4gW3NlbGYgYWNjZXNzaWJpbGl0eUhlbHBUZXh0XTsKLQotICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1dGVdKQotICAg
ICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOiBtX29iamVjdC0+aXNGb2N1c2Vk
KCldOwotCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3Np
YmlsaXR5RW5hYmxlZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aEJvb2w6IG1fb2JqZWN0LT5pc0VuYWJsZWQoKV07Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTaXplQXR0cmlidXRlXSkgewotICAg
ICAgICBJbnRTaXplIHMgPSBtX29iamVjdC0+cGl4ZWxTbmFwcGVkU2l6ZSgpOwotICAgICAgICBy
ZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoU2l6ZTogTlNNYWtlU2l6ZShzLndpZHRoKCksIHMuaGVp
Z2h0KCkpXTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
OiBOU0FjY2Vzc2liaWxpdHlQb3NpdGlvbkF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbc2Vs
ZiBwb3NpdGlvbl07Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBO
U0FjY2Vzc2liaWxpdHlXaW5kb3dBdHRyaWJ1dGVdIHx8Ci0gICAgICAgIFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VG9wTGV2ZWxVSUVsZW1lbnRBdHRyaWJ1
dGVdKSB7Ci0gICAgICAgIAotICAgICAgICBpZCByZW1vdGVQYXJlbnQgPSBbc2VsZiByZW1vdGVB
Y2Nlc3NpYmlsaXR5UGFyZW50T2JqZWN0XTsKLSAgICAgICAgaWYgKHJlbW90ZVBhcmVudCkKLSAg
ICAgICAgICAgIHJldHVybiBbcmVtb3RlUGFyZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZTphdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgCi0gICAgICAgIEZyYW1lVmlldyogZnYgPSBtX29i
amVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKLSAgICAgICAgaWYgKGZ2KQotICAgICAgICAgICAg
cmV0dXJuIFtmdi0+cGxhdGZvcm1XaWRnZXQoKSB3aW5kb3ddOwotICAgICAgICByZXR1cm4gbmls
OwotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUFjY2Vzc0tleUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQXRvbWljU3RyaW5n
IGFjY2Vzc0tleSA9IG1fb2JqZWN0LT5hY2Nlc3NLZXkoKTsKLSAgICAgICAgaWYgKGFjY2Vzc0tl
eS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIHJldHVybiBhY2Nl
c3NLZXk7Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5VGFic0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0
LT5pc1RhYkxpc3QoKSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIHRhYnNDaGlsZHJlbjsKLSAgICAgICAgICAgIG1fb2JqZWN0
LT50YWJDaGlsZHJlbih0YWJzQ2hpbGRyZW4pOwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRU
b05TQXJyYXkodGFic0NoaWxkcmVuKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNvbnRlbnRzQXR0
cmlidXRlXSkgewotICAgICAgICAvLyBUaGUgY29udGVudHMgb2YgYSB0YWIgbGlzdCBhcmUgYWxs
IHRoZSBjaGlsZHJlbiBleGNlcHQgdGhlIHRhYnMuCi0gICAgICAgIGlmIChtX29iamVjdC0+aXNU
YWJMaXN0KCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOwotICAgICAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHRh
YnNDaGlsZHJlbjsKLSAgICAgICAgICAgIG1fb2JqZWN0LT50YWJDaGlsZHJlbih0YWJzQ2hpbGRy
ZW4pOwotCi0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgY29udGVudHM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGlsZHJlblNpemUg
PSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwg
Y2hpbGRyZW5TaXplOyArK2spIHsKLSAgICAgICAgICAgICAgICBpZiAodGFic0NoaWxkcmVuLmZp
bmQoY2hpbGRyZW5ba10pID09IFdURjo6bm90Rm91bmQpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRlbnRzLmFwcGVuZChjaGlsZHJlbltrXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXR1cm4gY29udmVydFRvTlNBcnJheShjb250ZW50cyk7Ci0gICAgICAgIH0gZWxzZSBpZiAobV9v
YmplY3QtPmlzU2Nyb2xsVmlldygpKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRy
ZW4oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQSBzY3JvbGxWaWV3J3MgY29udGVu
dHMgYXJlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBzY3JvbGwgYmFycy4KLSAgICAgICAgICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb250ZW50czsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGNoaWxkcmVuU2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBjaGlsZHJlblNpemU7ICsraykgewot
ICAgICAgICAgICAgICAgIGlmICghY2hpbGRyZW5ba10tPmlzU2Nyb2xsYmFyKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRlbnRzLmFwcGVuZChjaGlsZHJlbltrXSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShjb250ZW50cyk7ICAgICAgICAg
ICAgCi0gICAgICAgIH0KLSAgICB9ICAgIAotICAgIAotICAgIGlmIChtX29iamVjdC0+aXNBY2Nl
c3NpYmlsaXR5VGFibGUoKSkgewotICAgICAgICAvLyBUT0RPOiBkaXN0aW5ndWlzaCBiZXR3ZWVu
IHZpc2libGUgYW5kIG5vbi12aXNpYmxlIHJvd3MKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb3dzQXR0cmlidXRlXSB8fCAKLSAgICAg
ICAgICAgIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWaXNp
YmxlUm93c0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5
KHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KG1fb2JqZWN0KS0+cm93cygpKTsKLSAg
ICAgICAgfQotICAgICAgICAvLyBUT0RPOiBkaXN0aW5ndWlzaCBiZXR3ZWVuIHZpc2libGUgYW5k
IG5vbi12aXNpYmxlIGNvbHVtbnMKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb2x1bW5zQXR0cmlidXRlXSB8fCAKLSAgICAgICAgICAg
IFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ29s
dW1uc0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHN0
YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KG1fb2JqZWN0KS0+Y29sdW1ucygpKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0
ZWRDaGlsZHJlbkNvcHk7Ci0gICAgICAgICAgICBtX29iamVjdC0+c2VsZWN0ZWRDaGlsZHJlbihz
ZWxlY3RlZENoaWxkcmVuQ29weSk7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJh
eShzZWxlY3RlZENoaWxkcmVuQ29weSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8v
IEhUTUwgdGFibGVzIGRvbid0IHN1cHBvcnQgdGhlc2UKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENvbHVtbnNBdHRyaWJ1
dGVdIHx8IAotICAgICAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eVNlbGVjdGVkQ2VsbHNBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICAgICAgCi0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
KE5TU3RyaW5nICopa0FYQ29sdW1uSGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZV0pIHsKLSAgICAg
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBj
b2x1bW5IZWFkZXJzOwotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxl
Kj4obV9vYmplY3QpLT5jb2x1bW5IZWFkZXJzKGNvbHVtbkhlYWRlcnMpOwotICAgICAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29sdW1uSGVhZGVycyk7ICAgICAgICAgICAgCi0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5SGVhZGVyQXR0cmlidXRlXSkgewotICAgICAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogaGVhZGVyQ29udGFpbmVyID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0
eVRhYmxlKj4obV9vYmplY3QpLT5oZWFkZXJDb250YWluZXIoKTsKLSAgICAgICAgICAgIGlmICho
ZWFkZXJDb250YWluZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGhlYWRlckNvbnRhaW5lci0+
d3JhcHBlcigpOwotICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93SGVh
ZGVyVUlFbGVtZW50c0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dIZWFkZXJzOwotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4obV9vYmplY3QpLT5yb3dIZWFkZXJzKHJv
d0hlYWRlcnMpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkocm93SGVhZGVy
cyk7ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJs
ZUNlbGxzQXR0cmlidXRlXSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNlbGxzOwotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
QWNjZXNzaWJpbGl0eVRhYmxlKj4obV9vYmplY3QpLT5jZWxscyhjZWxscyk7Ci0gICAgICAgICAg
ICByZXR1cm4gY29udmVydFRvTlNBcnJheShjZWxscyk7Ci0gICAgICAgIH0gICAgICAgIAotICAg
IH0KLSAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzVGFibGVDb2x1bW4oKSkgewotICAgICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUluZGV4QXR0
cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpzdGF0
aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4qPihtX29iamVjdCktPmNvbHVtbkluZGV4
KCldOwotICAgICAgICAKLSAgICAgICAgLy8gcm93cyBhdHRyaWJ1dGUgZm9yIGEgY29sdW1uIGlz
IHRoZSBsaXN0IG9mIGFsbCB0aGUgZWxlbWVudHMgaW4gdGhhdCBjb2x1bW4gYXQgZWFjaCByb3cK
LSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlSb3dzQXR0cmlidXRlXSB8fCAKLSAgICAgICAgICAgIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWaXNpYmxlUm93c0F0dHJpYnV0ZV0pIHsKLSAgICAgICAg
ICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJs
ZUNvbHVtbio+KG1fb2JqZWN0KS0+Y2hpbGRyZW4oKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlIZWFkZXJBdHRy
aWJ1dGVdKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXIgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4qPihtX29iamVjdCktPmhlYWRlck9iamVj
dCgpOwotICAgICAgICAgICAgaWYgKCFoZWFkZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICAgICAgICAgIHJldHVybiBoZWFkZXItPndyYXBwZXIoKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzVGFibGVDZWxsKCkpIHsKLSAgICAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb3dJbmRleFJh
bmdlQXR0cmlidXRlXSkgewotICAgICAgICAgICAgcGFpcjxpbnQsIGludD4gcm93UmFuZ2U7Ci0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKj4obV9vYmplY3Qp
LT5yb3dJbmRleFJhbmdlKHJvd1JhbmdlKTsKLSAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2
YWx1ZVdpdGhSYW5nZTpOU01ha2VSYW5nZShyb3dSYW5nZS5maXJzdCwgcm93UmFuZ2Uuc2Vjb25k
KV07Ci0gICAgICAgIH0gIAotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eUNvbHVtbkluZGV4UmFuZ2VBdHRyaWJ1dGVdKSB7Ci0gICAgICAg
ICAgICBwYWlyPGludCwgaW50PiBjb2x1bW5SYW5nZTsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqPihtX29iamVjdCktPmNvbHVtbkluZGV4UmFuZ2UoY29s
dW1uUmFuZ2UpOwotICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOk5T
TWFrZVJhbmdlKGNvbHVtblJhbmdlLmZpcnN0LCBjb2x1bW5SYW5nZS5zZWNvbmQpXTsKLSAgICAg
ICAgfSAgCi0gICAgfQotICAgIAotICAgIGlmIChtX29iamVjdC0+aXNUcmVlKCkpIHsKLSAgICAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxl
Y3RlZFJvd3NBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRDaGlsZHJlbkNvcHk7Ci0gICAgICAg
ICAgICBtX29iamVjdC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuQ29weSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShzZWxlY3RlZENoaWxkcmVuQ29weSk7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlSb3dzQXR0cmlidXRlXSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3NDb3B5OwotICAgICAgICAg
ICAgbV9vYmplY3QtPmFyaWFUcmVlUm93cyhyb3dzQ29weSk7Ci0gICAgICAgICAgICByZXR1cm4g
Y29udmVydFRvTlNBcnJheShyb3dzQ29weSk7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIC8vIFRyZWVSb2xlcyBkbyBub3Qgc3VwcG9ydCBjb2x1bW5zLCBidXQgTWFj
IEFYIGV4cGVjdHMgdG8gYmUgYWJsZSB0byBhc2sgYWJvdXQgY29sdW1ucyBhdCB0aGUgbGVhc3Qu
Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5Q29sdW1uc0F0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXld
OwotICAgIH0KLQotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNUcmVl
SXRlbSgpKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29i
amVjdC0+cGFyZW50T2JqZWN0KCk7Ci0gICAgICAgICAgICBmb3IgKDsgcGFyZW50ICYmICFwYXJl
bnQtPmlzVHJlZSgpOyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKQotICAgICAgICAg
ICAgeyB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghcGFyZW50KQotICAgICAgICAg
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZpbmQgdGhl
IGluZGV4IG9mIHRoaXMgaXRlbSBieSBpdGVyYXRpbmcgdGhlIHBhcmVudHMuCi0gICAgICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93c0Nv
cHk7Ci0gICAgICAgICAgICBwYXJlbnQtPmFyaWFUcmVlUm93cyhyb3dzQ29weSk7Ci0gICAgICAg
ICAgICBzaXplX3QgY291bnQgPSByb3dzQ29weS5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNp
emVfdCBrID0gMDsgayA8IGNvdW50OyArK2spCi0gICAgICAgICAgICAgICAgaWYgKHJvd3NDb3B5
W2tdLT53cmFwcGVyKCkgPT0gc2VsZikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6a107Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IHJldHVybiBuaWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RhYmxlUm93
KCkpIHsKLSAgICAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdKQotICAgICAgICAgICAgICAgIHJldHVybiBbTlNO
dW1iZXIgbnVtYmVyV2l0aEludDpzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVSb3cqPiht
X29iamVjdCktPnJvd0luZGV4KCldOwotICAgICAgICB9Ci0gICAgfSAgICAKLSAgICAKLSAgICAv
LyBUaGUgcm93cyB0aGF0IGFyZSBjb25zaWRlcmVkIGluc2lkZSB0aGlzIHJvdy4gCi0gICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zZWRS
b3dzQXR0cmlidXRlXSkgewotICAgICAgICBpZiAobV9vYmplY3QtPmlzVHJlZUl0ZW0oKSkgewot
ICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yIHJvd3NDb3B5OwotICAgICAgICAgICAgbV9vYmplY3QtPmFyaWFUcmVlSXRlbURpc2Nsb3Nl
ZFJvd3Mocm93c0NvcHkpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkocm93
c0NvcHkpOyAgICAKLSAgICAgICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNBUklBVHJlZUdyaWRS
b3coKSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIHJvd3NDb3B5OwotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8QWNjZXNzaWJp
bGl0eUFSSUFHcmlkUm93Kj4obV9vYmplY3QpLT5kaXNjbG9zZWRSb3dzKHJvd3NDb3B5KTsKLSAg
ICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHJvd3NDb3B5KTsgICAgCi0gICAgICAg
IH0KLSAgICB9Ci0gICAgCi0gICAgLy8gVGhlIHJvdyB0aGF0IGNvbnRhaW5zIHRoaXMgcm93LiBJ
dCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IHBhcmVudCB0aGF0IGlzIGEgdHJlZWl0
ZW0uCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlEaXNjbG9zZWRCeVJvd0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1Ry
ZWVJdGVtKCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1f
b2JqZWN0LT5wYXJlbnRPYmplY3QoKTsKLSAgICAgICAgICAgIHdoaWxlIChwYXJlbnQpIHsKLSAg
ICAgICAgICAgICAgICBpZiAocGFyZW50LT5pc1RyZWVJdGVtKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUg
cGFyZW50IGlzIHRoZSB0cmVlIGl0c2VsZiwgdGhlbiB0aGlzIHZhbHVlID09IG5pbC4KLSAgICAg
ICAgICAgICAgICBpZiAocGFyZW50LT5pc1RyZWUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgfSBlbHNl
IGlmIChtX29iamVjdC0+aXNBUklBVHJlZUdyaWRSb3coKSkgewotICAgICAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogcm93ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93
Kj4obV9vYmplY3QpLT5kaXNjbG9zZWRCeVJvdygpOwotICAgICAgICAgICAgaWYgKCFyb3cpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgICAgIHJldHVybiByb3ctPndyYXBw
ZXIoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc3VyZUxldmVsQXR0cmlidXRlXSkgewotICAg
ICAgICAvLyBDb252ZXJ0IGZyb20gMS1iYXNlZCBsZXZlbCAoZnJvbSBhcmlhLWxldmVsIHNwZWMp
IHRvIDAtYmFzZWQgbGV2ZWwgKE1hYykKLSAgICAgICAgaW50IGxldmVsID0gbV9vYmplY3QtPmhp
ZXJhcmNoaWNhbExldmVsKCk7Ci0gICAgICAgIGlmIChsZXZlbCA+IDApCi0gICAgICAgICAgICBs
ZXZlbCAtPSAxOwotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bGV2ZWxd
OwotICAgIH0KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eURpc2Nsb3NpbmdBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51
bWJlcldpdGhCb29sOm1fb2JqZWN0LT5pc0V4cGFuZGVkKCldOwotICAgIAotICAgIGlmICgobV9v
YmplY3QtPmlzTGlzdEJveCgpIHx8IG1fb2JqZWN0LT5pc0xpc3QoKSkgJiYgW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uQXR0cmlidXRlXSkK
LSAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVZlcnRpY2FsT3JpZW50YXRpb25WYWx1ZTsK
LQotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhTZWxlY3RlZFRl
eHRNYXJrZXJSYW5nZSJdKQotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRm9y
U2VsZWN0aW9uXTsKLSAgICAKLSAgICBpZiAobV9vYmplY3QtPnJlbmRlcmVyKCkpIHsKLSAgICAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogQCJBWFN0YXJ0VGV4dE1hcmtl
ciJdKQotICAgICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRp
b246c3RhcnRPZkRvY3VtZW50KG1fb2JqZWN0LT5yZW5kZXJlcigpLT5kb2N1bWVudCgpKV07Ci0g
ICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhFbmRUZXh0TWFy
a2VyIl0pCi0gICAgICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3Np
dGlvbjplbmRPZkRvY3VtZW50KG1fb2JqZWN0LT5yZW5kZXJlcigpLT5kb2N1bWVudCgpKV07Ci0g
ICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5QmxvY2tRdW90ZUxldmVsQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoSW50Om1fb2JqZWN0LT5ibG9ja3F1b3RlTGV2ZWwoKV07Ci0gICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYVGFibGVMZXZlbCJdKQotICAgICAg
ICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bV9vYmplY3QtPnRhYmxlTGV2ZWwoKV07
Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3Np
YmlsaXR5TGlua2VkVUlFbGVtZW50c0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGxpbmtlZFVJRWxlbWVudHM7Ci0g
ICAgICAgIG1fb2JqZWN0LT5saW5rZWRVSUVsZW1lbnRzKGxpbmtlZFVJRWxlbWVudHMpOwotICAg
ICAgICBpZiAobGlua2VkVUlFbGVtZW50cy5zaXplKCkgPT0gMCkKLSAgICAgICAgICAgIHJldHVy
biBuaWw7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGxpbmtlZFVJRWxlbWVudHMp
OwotICAgIH0KLQotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNj
ZXNzaWJpbGl0eVNlbGVjdGVkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNTZWxlY3RlZCgpXTsKLQotICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlcnZlc0FzVGl0bGVGb3JV
SUVsZW1lbnRzQXR0cmlidXRlXSAmJiBtX29iamVjdC0+aXNNZW51QnV0dG9uKCkpIHsKLSAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogdWlFbGVtZW50ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdCo+KG1fb2JqZWN0KS0+bWVudUZvck1lbnVCdXR0b24oKTsKLSAgICAg
ICAgaWYgKHVpRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhP
YmplY3Q6dWlFbGVtZW50LT53cmFwcGVyKCldOwotICAgIH0KLQotICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VGl0bGVVSUVsZW1lbnRBdHRyaWJ1
dGVdKSB7Ci0gICAgICAgIGlmICghbV9vYmplY3QtPmV4cG9zZXNUaXRsZVVJRWxlbWVudCgpKQot
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgCi0gICAgICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIG9iaiA9IG1fb2JqZWN0LT50aXRsZVVJRWxlbWVudCgpOwotICAgICAgICBpZiAob2Jq
KQotICAgICAgICAgICAgcmV0dXJuIG9iai0+d3JhcHBlcigpOwotICAgICAgICByZXR1cm4gbmls
OwotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eVZhbHVlRGVzY3JpcHRpb25BdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4g
bV9vYmplY3QtPnZhbHVlRGVzY3JpcHRpb24oKTsKLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uQXR0cmlidXRlXSkg
ewotICAgICAgICBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb24gZWxlbWVudE9yaWVudGF0aW9uID0g
bV9vYmplY3QtPm9yaWVudGF0aW9uKCk7Ci0gICAgICAgIGlmIChlbGVtZW50T3JpZW50YXRpb24g
PT0gQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uVmVydGljYWwpCi0gICAgICAgICAgICByZXR1cm4g
TlNBY2Nlc3NpYmlsaXR5VmVydGljYWxPcmllbnRhdGlvblZhbHVlOwotICAgICAgICBpZiAoZWxl
bWVudE9yaWVudGF0aW9uID09IEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkhvcml6b250YWwpCi0g
ICAgICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5SG9yaXpvbnRhbE9yaWVudGF0aW9uVmFs
dWU7Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SG9yaXpvbnRhbFNjcm9sbEJhckF0
dHJpYnV0ZV0pIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogc2Nyb2xsQmFyID0gbV9v
YmplY3QtPnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25Ib3Jpem9udGFsKTsKLSAg
ICAgICAgaWYgKHNjcm9sbEJhcikKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxCYXItPndyYXBw
ZXIoKTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0gICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbFNjcm9sbEJhckF0dHJpYnV0
ZV0pIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogc2Nyb2xsQmFyID0gbV9vYmplY3Qt
PnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25WZXJ0aWNhbCk7Ci0gICAgICAgIGlm
IChzY3JvbGxCYXIpCi0gICAgICAgICAgICByZXR1cm4gc2Nyb2xsQmFyLT53cmFwcGVyKCk7Ci0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbkF0dHJpYnV0ZV0pIHsK
LSAgICAgICAgc3dpdGNoIChtX29iamVjdC0+c29ydERpcmVjdGlvbigpKSB7Ci0gICAgICAgIGNh
c2UgU29ydERpcmVjdGlvbkFzY2VuZGluZzoKLSAgICAgICAgICAgIHJldHVybiBOU0FjY2Vzc2li
aWxpdHlBc2NlbmRpbmdTb3J0RGlyZWN0aW9uVmFsdWU7Ci0gICAgICAgIGNhc2UgU29ydERpcmVj
dGlvbkRlc2NlbmRpbmc6Ci0gICAgICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5RGVzY2Vu
ZGluZ1NvcnREaXJlY3Rpb25WYWx1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBOU0FjY2Vzc2liaWxpdHlVbmtub3duU29ydERpcmVjdGlvblZhbHVlOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5TGFuZ3VhZ2VBdHRyaWJ1dGVdKSAKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0
LT5sYW5ndWFnZSgpOwotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5RXhwYW5kZWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05T
TnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5pc0V4cGFuZGVkKCldOwotICAgIAotICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UmVxdWly
ZWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1f
b2JqZWN0LT5pc1JlcXVpcmVkKCldOwotCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbnZhbGlkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJu
IG1fb2JqZWN0LT5pbnZhbGlkU3RhdHVzKCk7Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlPd25zQXR0cmlidXRlXSkgewotICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYU93
bnM7Ci0gICAgICAgIG1fb2JqZWN0LT5hcmlhT3duc0VsZW1lbnRzKGFyaWFPd25zKTsKLSAgICAg
ICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoYXJpYU93bnMpOwotICAgIH0KLSAgICAKLSAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUdyYWJiZWRB
dHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2Jq
ZWN0LT5pc0FSSUFHcmFiYmVkKCldOwotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RHJvcEVmZmVjdHNBdHRyaWJ1dGVdKSB7Ci0gICAg
ICAgIFZlY3RvcjxTdHJpbmc+IGRyb3BFZmZlY3RzOwotICAgICAgICBtX29iamVjdC0+ZGV0ZXJt
aW5lQVJJQURyb3BFZmZlY3RzKGRyb3BFZmZlY3RzKTsKLSAgICAgICAgc2l6ZV90IGxlbmd0aCA9
IGRyb3BFZmZlY3RzLnNpemUoKTsKLQotICAgICAgICBOU011dGFibGVBcnJheSogZHJvcEVmZmVj
dHNBcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpsZW5ndGhdOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgW2Ry
b3BFZmZlY3RzQXJyYXkgYWRkT2JqZWN0OmRyb3BFZmZlY3RzW2ldXTsKLSAgICAgICAgcmV0dXJu
IGRyb3BFZmZlY3RzQXJyYXk7Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UGxhY2Vob2xkZXJWYWx1ZUF0dHJpYnV0ZV0p
Ci0gICAgICAgIHJldHVybiBtX29iamVjdC0+cGxhY2Vob2xkZXJWYWx1ZSgpOwotICAgIAotICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SGFzUG9w
dXBBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1f
b2JqZWN0LT5hcmlhSGFzUG9wdXAoKV07Ci0gICAgCi0gICAgLy8gQVJJQSBMaXZlIHJlZ2lvbiBh
dHRyaWJ1dGVzLgotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5QVJJQUxpdmVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPmFy
aWFMaXZlUmVnaW9uU3RhdHVzKCk7Ci0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlBUklBUmVsZXZhbnRBdHRyaWJ1dGVdKQotICAgICAgICAgcmV0
dXJuIG1fb2JqZWN0LT5hcmlhTGl2ZVJlZ2lvblJlbGV2YW50KCk7Ci0gICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlBUklBQXRvbWljQXR0cmlidXRl
XSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+YXJp
YUxpdmVSZWdpb25BdG9taWMoKV07Ci0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlBUklBQnVzeUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBb
TlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmFyaWFMaXZlUmVnaW9uQnVzeSgpXTsK
LQotICAgIC8vIE1hdGhNTCBBdHRyaWJ1dGVzLgotICAgIGlmIChtX29iamVjdC0+aXNNYXRoRWxl
bWVudCgpKSB7Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5TWF0aFJvb3RJbmRleEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4g
KG1fb2JqZWN0LT5tYXRoUm9vdEluZGV4T2JqZWN0KCkpID8gbV9vYmplY3QtPm1hdGhSb290SW5k
ZXhPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoUm9vdFJhZGljYW5kQXR0cmlidXRlXSkK
LSAgICAgICAgICAgIHJldHVybiAobV9vYmplY3QtPm1hdGhSYWRpY2FuZE9iamVjdCgpKSA/IG1f
b2JqZWN0LT5tYXRoUmFkaWNhbmRPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKLSAgICAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoRnJhY3Rp
b25OdW1lcmF0b3JBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIChtX29iamVjdC0+bWF0
aE51bWVyYXRvck9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRoTnVtZXJhdG9yT2JqZWN0KCktPndy
YXBwZXIoKSA6IDA7Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5TWF0aEZyYWN0aW9uRGVub21pbmF0b3JBdHRyaWJ1dGVdKQotICAgICAg
ICAgICAgcmV0dXJuIChtX29iamVjdC0+bWF0aERlbm9taW5hdG9yT2JqZWN0KCkpID8gbV9vYmpl
Y3QtPm1hdGhEZW5vbWluYXRvck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwotICAgICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhCYXNlQXR0
cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiAobV9vYmplY3QtPm1hdGhCYXNlT2JqZWN0KCkp
ID8gbV9vYmplY3QtPm1hdGhCYXNlT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7Ci0gICAgICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aFN1YnNj
cmlwdEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gKG1fb2JqZWN0LT5tYXRoU3Vic2Ny
aXB0T2JqZWN0KCkpID8gbV9vYmplY3QtPm1hdGhTdWJzY3JpcHRPYmplY3QoKS0+d3JhcHBlcigp
IDogMDsKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlNYXRoU3VwZXJzY3JpcHRBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuICht
X29iamVjdC0+bWF0aFN1cGVyc2NyaXB0T2JqZWN0KCkpID8gbV9vYmplY3QtPm1hdGhTdXBlcnNj
cmlwdE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhVbmRlckF0dHJpYnV0ZV0pCi0gICAg
ICAgICAgICByZXR1cm4gKG1fb2JqZWN0LT5tYXRoVW5kZXJPYmplY3QoKSkgPyBtX29iamVjdC0+
bWF0aFVuZGVyT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7Ci0gICAgICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aE92ZXJBdHRyaWJ1dGVdKQot
ICAgICAgICAgICAgcmV0dXJuIChtX29iamVjdC0+bWF0aE92ZXJPYmplY3QoKSkgPyBtX29iamVj
dC0+bWF0aE92ZXJPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKLSAgICAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoRmVuY2VkT3BlbkF0dHJp
YnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gbV9vYmplY3QtPm1hdGhGZW5jZWRPcGVuU3RyaW5n
KCk7Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5TWF0aEZlbmNlZENsb3NlQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiBtX29i
amVjdC0+bWF0aEZlbmNlZENsb3NlU3RyaW5nKCk7Ci0gICAgfQotICAgIAotICAgIC8vIHRoaXMg
aXMgdXNlZCBvbmx5IGJ5IER1bXBSZW5kZXJUcmVlIGZvciB0ZXN0aW5nCi0gICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYQ2xpY2tQb2ludCJdKQotICAgICAgICByZXR1
cm4gW05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6bV9vYmplY3QtPmNsaWNrUG9pbnQoKV07Ci0gICAg
Ci0gICAgLy8gVGhpcyBpcyB1c2VkIGJ5IERSVCB0byB2ZXJpZnkgQ1NTMyBzcGVlY2ggd29ya3Mu
Ci0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYRFJUU3BlZWNoQXR0
cmlidXRlIl0pIHsKLSAgICAgICAgRVNwZWFrIHNwZWFrUHJvcGVydHkgPSBtX29iamVjdC0+c3Bl
YWtQcm9wZXJ0eSgpOwotICAgICAgICBzd2l0Y2ggKHNwZWFrUHJvcGVydHkpIHsKLSAgICAgICAg
Y2FzZSBTcGVha05vbmU6Ci0gICAgICAgICAgICByZXR1cm4gQCJub25lIjsKLSAgICAgICAgY2Fz
ZSBTcGVha1NwZWxsT3V0OgotICAgICAgICAgICAgcmV0dXJuIEAic3BlbGwtb3V0IjsKLSAgICAg
ICAgY2FzZSBTcGVha0RpZ2l0czoKLSAgICAgICAgICAgIHJldHVybiBAImRpZ2l0cyI7Ci0gICAg
ICAgIGNhc2UgU3BlYWtMaXRlcmFsUHVuY3R1YXRpb246Ci0gICAgICAgICAgICByZXR1cm4gQCJs
aXRlcmFsLXB1bmN0dWF0aW9uIjsKLSAgICAgICAgY2FzZSBTcGVha05vUHVuY3R1YXRpb246Ci0g
ICAgICAgICAgICByZXR1cm4gQCJuby1wdW5jdHVhdGlvbiI7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGNhc2UgU3BlYWtOb3JtYWw6Ci0gICAgICAgICAgICByZXR1cm4gQCJub3JtYWwiOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVXNlZCBieSBEUlQgdG8gZmluZCBhbiBhY2Nlc3Np
YmxlIG5vZGUgYnkgaXRzIGVsZW1lbnQgaWQuCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpAIkFYRFJURWxlbWVudElkQXR0cmlidXRlIl0pCi0gICAgICAgIHJldHVybiBt
X29iamVjdC0+Z2V0QXR0cmlidXRlKGlkQXR0cik7Ci0gICAgCi0gICAgcmV0dXJuIG5pbDsKLX0K
LQotLSAoaWQpYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQKLXsKLSAgICBpZiAoIVtzZWxm
IHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBS
ZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gZm9jdXNlZE9iaiA9IG1fb2JqZWN0LT5mb2N1c2Vk
VUlFbGVtZW50KCk7Ci0KLSAgICBpZiAoIWZvY3VzZWRPYmopCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgCi0gICAgcmV0dXJuIGZvY3VzZWRPYmotPndyYXBwZXIoKTsKLX0KLQotLSAoaWQpYWNj
ZXNzaWJpbGl0eUhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQKLXsKLSAgICBpZiAoIVtzZWxmIHVwZGF0
ZU9iamVjdEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBtX29iamVj
dC0+dXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOwotICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5
T2JqZWN0PiBheE9iamVjdCA9IG1fb2JqZWN0LT5hY2Nlc3NpYmlsaXR5SGl0VGVzdChJbnRQb2lu
dChwb2ludCkpOwotICAgIGlmIChheE9iamVjdCkKLSAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJp
bGl0eVVuaWdub3JlZEFuY2VzdG9yKGF4T2JqZWN0LT53cmFwcGVyKCkpOwotICAgIHJldHVybiBO
U0FjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihzZWxmKTsKLX0KLQotLSAoQk9PTClhY2Nl
c3NpYmlsaXR5SXNBdHRyaWJ1dGVTZXR0YWJsZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWUKLXsK
LSAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYU2Vs
ZWN0ZWRUZXh0TWFya2VyUmFuZ2UiXSkKLSAgICAgICAgcmV0dXJuIFlFUzsKLQotICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRy
aWJ1dGVdKQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhblNldEZvY3VzQXR0cmlidXRlKCk7
Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxp
dHlWYWx1ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+Y2FuU2V0VmFsdWVB
dHRyaWJ1dGUoKTsKLQotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5T
QWNjZXNzaWJpbGl0eVNlbGVjdGVkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0
LT5jYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSgpOwotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1
dGVdKQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhblNldFNlbGVjdGVkQ2hpbGRyZW5BdHRy
aWJ1dGUoKTsKLQotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5RGlzY2xvc2luZ0F0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+
Y2FuU2V0RXhwYW5kZWRBdHRyaWJ1dGUoKTsKLQotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRSb3dzQXR0cmlidXRlXSkKLSAgICAg
ICAgcmV0dXJuIFlFUzsKLQotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dEF0dHJpYnV0ZV0gfHwKLSAgICAgICAgW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRSYW5n
ZUF0dHJpYnV0ZV0gfHwKLSAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBO
U0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGVdKQotICAgICAgICBy
ZXR1cm4gbV9vYmplY3QtPmNhblNldFRleHRSYW5nZUF0dHJpYnV0ZXMoKTsKLSAgICAKLSAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUdyYWJiZWRB
dHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gWUVTOwotICAgIAotICAgIHJldHVybiBOTzsKLX0K
LQotLy8gYWNjZXNzaWJpbGl0eVNob3VsZFVzZVVuaXF1ZUlkIGlzIGFuIEFwcEtpdCBtZXRob2Qg
d2Ugb3ZlcnJpZGUgc28gdGhhdAotLy8gb2JqZWN0cyB3aWxsIGJlIGdpdmVuIGEgdW5pcXVlIElE
LCBhbmQgdGhlcmVmb3JlIGFsbG93IEFwcEtpdCB0byBrbm93IHdoZW4gdGhleQotLy8gYmVjb21l
IG9ic29sZXRlIChlLmcuIHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIHRvIGEgbmV3IHdlYiBwYWdl
LCBtYWtpbmcgdGhpcyBvbmUKLS8vIHVucmVuZGVyZWQgYnV0IG5vdCBkZWFsbG9jYXRlZCBiZWNh
dXNlIGl0IGlzIGluIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUpLgotLy8gSXQgaXMgaW1wb3J0YW50
IHRvIGNhbGwgTlNBY2Nlc3NpYmlsaXR5VW5yZWdpc3RlclVuaXF1ZUlkRm9yVUlFbGVtZW50IGlu
IHRoZQotLy8gYXBwcm9wcmlhdGUgcGxhY2UgKGUuZy4gZGVhbGxvYykgdG8gcmVtb3ZlIHRoZXNl
IG5vbi1yZXRhaW5lZCByZWZlcmVuY2VzIGZyb20KLS8vIEFwcEtpdCdzIGlkIG1hcHBpbmcgdGFi
bGVzLiBXZSBkbyB0aGlzIGluIGRldGFjaCBieSBjYWxsaW5nIHVucmVnaXN0ZXJVbmlxdWVJZEZv
clVJRWxlbWVudC4KLS8vCi0vLyBSZWdpc3RlcmluZyBhbiBvYmplY3QgaXMgYWxzbyByZXF1aXJl
ZCBmb3Igb2JzZXJ2aW5nIG5vdGlmaWNhdGlvbnMuIE9ubHkgcmVnaXN0ZXJlZCBvYmplY3RzIGNh
biBiZSBvYnNlcnZlZC4KLS0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzSWdub3JlZAotewotICAgIGlm
ICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKLSAgICAgICAgcmV0dXJuIFlFUzsK
LQotICAgIGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50KCkpCi0gICAgICAgIHJldHVybiBbW3Nl
bGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRdOwotICAgIHJldHVybiBt
X29iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOwotfQotCi0tIChOU0FycmF5KiApYWNj
ZXNzaWJpbGl0eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcwotewotICAgIGlmICghW3NlbGYg
dXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIGlm
IChtX29iamVjdC0+aXNBdHRhY2htZW50KCkpIAotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAg
c3RhdGljIE5TQXJyYXkqIHBhcmFtQXR0cnMgPSBuaWw7Ci0gICAgc3RhdGljIE5TQXJyYXkqIHRl
eHRQYXJhbUF0dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiB0YWJsZVBhcmFtQXR0cnMg
PSBuaWw7Ci0gICAgc3RhdGljIE5TQXJyYXkqIHdlYkFyZWFQYXJhbUF0dHJzID0gbmlsOwotICAg
IGlmIChwYXJhbUF0dHJzID09IG5pbCkgewotICAgICAgICBwYXJhbUF0dHJzID0gW1tOU0FycmF5
IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6Ci0gICAgICAgICAgICAgICAgICAgICAgQCJBWFVJRWxl
bWVudEZvclRleHRNYXJrZXIiLAotICAgICAgICAgICAgICAgICAgICAgIEAiQVhUZXh0TWFya2Vy
UmFuZ2VGb3JVSUVsZW1lbnQiLAotICAgICAgICAgICAgICAgICAgICAgIEAiQVhMaW5lRm9yVGV4
dE1hcmtlciIsCi0gICAgICAgICAgICAgICAgICAgICAgQCJBWFRleHRNYXJrZXJSYW5nZUZvckxp
bmUiLAotICAgICAgICAgICAgICAgICAgICAgIEAiQVhTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2Ui
LAotICAgICAgICAgICAgICAgICAgICAgIEAiQVhUZXh0TWFya2VyRm9yUG9zaXRpb24iLAotICAg
ICAgICAgICAgICAgICAgICAgIEAiQVhCb3VuZHNGb3JUZXh0TWFya2VyUmFuZ2UiLAotICAgICAg
ICAgICAgICAgICAgICAgIEAiQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlIiwK
LSAgICAgICAgICAgICAgICAgICAgICBAIkFYVGV4dE1hcmtlclJhbmdlRm9yVW5vcmRlcmVkVGV4
dE1hcmtlcnMiLAotICAgICAgICAgICAgICAgICAgICAgIEAiQVhOZXh0VGV4dE1hcmtlckZvclRl
eHRNYXJrZXIiLAotICAgICAgICAgICAgICAgICAgICAgIEAiQVhQcmV2aW91c1RleHRNYXJrZXJG
b3JUZXh0TWFya2VyIiwKLSAgICAgICAgICAgICAgICAgICAgICBAIkFYTGVmdFdvcmRUZXh0TWFy
a2VyUmFuZ2VGb3JUZXh0TWFya2VyIiwKLSAgICAgICAgICAgICAgICAgICAgICBAIkFYUmlnaHRX
b3JkVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciIsCi0gICAgICAgICAgICAgICAgICAgICAg
QCJBWExlZnRMaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciIsCi0gICAgICAgICAgICAg
ICAgICAgICAgQCJBWFJpZ2h0TGluZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiLAotICAg
ICAgICAgICAgICAgICAgICAgIEAiQVhTZW50ZW5jZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJr
ZXIiLAotICAgICAgICAgICAgICAgICAgICAgIEAiQVhQYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VG
b3JUZXh0TWFya2VyIiwKLSAgICAgICAgICAgICAgICAgICAgICBAIkFYTmV4dFdvcmRFbmRUZXh0
TWFya2VyRm9yVGV4dE1hcmtlciIsCi0gICAgICAgICAgICAgICAgICAgICAgQCJBWFByZXZpb3Vz
V29yZFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiLAotICAgICAgICAgICAgICAgICAgICAg
IEAiQVhOZXh0TGluZUVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIiwKLSAgICAgICAgICAgICAg
ICAgICAgICBAIkFYUHJldmlvdXNMaW5lU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIsCi0g
ICAgICAgICAgICAgICAgICAgICAgQCJBWE5leHRTZW50ZW5jZUVuZFRleHRNYXJrZXJGb3JUZXh0
TWFya2VyIiwKLSAgICAgICAgICAgICAgICAgICAgICBAIkFYUHJldmlvdXNTZW50ZW5jZVN0YXJ0
VGV4dE1hcmtlckZvclRleHRNYXJrZXIiLAotICAgICAgICAgICAgICAgICAgICAgIEAiQVhOZXh0
UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiLAotICAgICAgICAgICAgICAgICAg
ICAgIEAiQVhQcmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiLAot
ICAgICAgICAgICAgICAgICAgICAgIEAiQVhTdHlsZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJr
ZXIiLAotICAgICAgICAgICAgICAgICAgICAgIEAiQVhMZW5ndGhGb3JUZXh0TWFya2VyUmFuZ2Ui
LAotICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUJvdW5kc0ZvclJhbmdlUGFy
YW1ldGVyaXplZEF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxp
dHlTdHJpbmdGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgTlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50c0ZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXRl
cml6ZWRBdHRyaWJ1dGUsCi0gICAgICAgICAgICAgICAgICAgICAgbmlsXTsKLSAgICB9Ci0KLSAg
ICBpZiAodGV4dFBhcmFtQXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIE5TTXV0YWJsZUFycmF5KiB0
ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnBhcmFtQXR0
cnNdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWExpbmVGb3JJ
bmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVj
dDooTlNTdHJpbmcqKWtBWFJhbmdlRm9yTGluZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOwotICAg
ICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWFN0cmluZ0ZvclJhbmdlUGFy
YW1ldGVyaXplZEF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihOU1N0
cmluZyopa0FYUmFuZ2VGb3JQb3NpdGlvblBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOwotICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWFJhbmdlRm9ySW5kZXhQYXJhbWV0
ZXJpemVkQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5n
KilrQVhCb3VuZHNGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOwotICAgICAgICBbdGVt
cEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWFJURkZvclJhbmdlUGFyYW1ldGVyaXplZEF0
dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihOU1N0cmluZyopa0FYQXR0
cmlidXRlZFN0cmluZ0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07Ci0gICAgICAgIFt0
ZW1wQXJyYXkgYWRkT2JqZWN0OihOU1N0cmluZyopa0FYU3R5bGVSYW5nZUZvckluZGV4UGFyYW1l
dGVyaXplZEF0dHJpYnV0ZV07Ci0gICAgICAgIHRleHRQYXJhbUF0dHJzID0gW1tOU0FycmF5IGFs
bG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFz
ZV07Ci0gICAgfQotICAgIGlmICh0YWJsZVBhcmFtQXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIE5T
TXV0YWJsZUFycmF5KiB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0
aEFycmF5OnBhcmFtQXR0cnNdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vz
c2liaWxpdHlDZWxsRm9yQ29sdW1uQW5kUm93UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07Ci0gICAg
ICAgIHRhYmxlUGFyYW1BdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1w
QXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwotICAgIH0KLSAgICBpZiAoIXdl
YkFyZWFQYXJhbUF0dHJzKSB7Ci0gICAgICAgIE5TTXV0YWJsZUFycmF5KiB0ZW1wQXJyYXkgPSBb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnBhcmFtQXR0cnNdOwotICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyRm9ySW5kZXhQ
YXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlcklzVmFsaWRQYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKLSAg
ICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SW5kZXhGb3JUZXh0TWFy
a2VyUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07Ci0gICAgICAgIHdlYkFyZWFQYXJhbUF0dHJzID0g
W1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1w
QXJyYXkgcmVsZWFzZV07Ci0gICAgfQotICAgIAotICAgIGlmIChtX29iamVjdC0+aXNQYXNzd29y
ZEZpZWxkKCkpCi0gICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheV07Ci0gICAgCi0gICAgaWYg
KCFtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0gICAgICAgIHJldHVy
biBwYXJhbUF0dHJzOwotCi0gICAgaWYgKG1fb2JqZWN0LT5pc1RleHRDb250cm9sKCkpCi0gICAg
ICAgIHJldHVybiB0ZXh0UGFyYW1BdHRyczsKLSAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzQWNj
ZXNzaWJpbGl0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiB0YWJsZVBhcmFtQXR0cnM7Ci0gICAg
Ci0gICAgaWYgKG1fb2JqZWN0LT5pc01lbnVSZWxhdGVkKCkpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0KLSAgICBpZiAobV9vYmplY3QtPmlzV2ViQXJlYSgpKQotICAgICAgICByZXR1cm4gd2ViQXJl
YVBhcmFtQXR0cnM7Ci0gICAgCi0gICAgcmV0dXJuIHBhcmFtQXR0cnM7Ci19Ci0KLS0gKHZvaWQp
YWNjZXNzaWJpbGl0eVBlcmZvcm1QcmVzc0FjdGlvbgotewotICAgIGlmICghW3NlbGYgdXBkYXRl
T2JqZWN0QmFja2luZ1N0b3JlXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fb2JqZWN0
LT5pc0F0dGFjaG1lbnQoKSkKLSAgICAgICAgW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3Np
YmlsaXR5UGVyZm9ybUFjdGlvbjpOU0FjY2Vzc2liaWxpdHlQcmVzc0FjdGlvbl07Ci0gICAgZWxz
ZQotICAgICAgICBtX29iamVjdC0+cHJlc3MoKTsgICAgCi19Ci0KLS0gKHZvaWQpYWNjZXNzaWJp
bGl0eVBlcmZvcm1JbmNyZW1lbnRBY3Rpb24KLXsKLSAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVj
dEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX29iamVjdC0+aXNB
dHRhY2htZW50KCkpCi0gICAgICAgIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0
eVBlcmZvcm1BY3Rpb246TlNBY2Nlc3NpYmlsaXR5SW5jcmVtZW50QWN0aW9uXTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fb2JqZWN0LT5pbmNyZW1lbnQoKTsgICAgCi19Ci0KLS0gKHZvaWQpYWNjZXNz
aWJpbGl0eVBlcmZvcm1EZWNyZW1lbnRBY3Rpb24KLXsKLSAgICBpZiAoIVtzZWxmIHVwZGF0ZU9i
amVjdEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX29iamVjdC0+
aXNBdHRhY2htZW50KCkpCi0gICAgICAgIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJp
bGl0eVBlcmZvcm1BY3Rpb246TlNBY2Nlc3NpYmlsaXR5RGVjcmVtZW50QWN0aW9uXTsKLSAgICBl
bHNlCi0gICAgICAgIG1fb2JqZWN0LT5kZWNyZW1lbnQoKTsgICAgCi19Ci0KLS0gKHZvaWQpYWNj
ZXNzaWJpbGl0eVBlcmZvcm1TaG93TWVudUFjdGlvbgotewotICAgIGlmIChtX29iamVjdC0+cm9s
ZVZhbHVlKCkgPT0gQ29tYm9Cb3hSb2xlKQotICAgICAgICBtX29iamVjdC0+c2V0SXNFeHBhbmRl
ZCh0cnVlKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gVGhpcyBuZWVkcyB0byBiZSBwZXJmb3Jt
ZWQgaW4gYW4gaXRlcmF0aW9uIG9mIHRoZSBydW4gbG9vcCB0aGF0IGRpZCBub3Qgc3RhcnQgZnJv
bSBhbiBBWCBjYWxsLiAKLSAgICAgICAgLy8gSWYgaXQncyB0aGUgc2FtZSBydW4gbG9vcCBpdGVy
YXRpb24sIHRoZSBtZW51IG9wZW4gbm90aWZpY2F0aW9uIHdvbid0IGJlIHNlbnQKLSAgICAgICAg
W3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihhY2Nlc3NpYmlsaXR5U2hvd0NvbnRleHRN
ZW51KSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OjAuMF07Ci0gICAgfQotfQotCi0tICh2b2lk
KWFjY2Vzc2liaWxpdHlTaG93Q29udGV4dE1lbnUKLXsgICAgCi0gICAgUGFnZSogcGFnZSA9IG1f
b2JqZWN0LT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgSW50UmVjdCByZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChtX29iamVjdC0+ZWxlbWVudFJl
Y3QoKSk7Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX29iamVjdC0+ZG9jdW1lbnRGcmFt
ZVZpZXcoKTsKLQotICAgIC8vIE9uIFdLMiwgd2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGUgc2Ny
b2xsIHBvc2l0aW9uLgotICAgIC8vIE9uIFdLMSwgdGhpcyBpc24ndCBuZWNlc3NhcnksIGl0J3Mg
dGFrZW4gY2FyZSBvZiBieSB0aGUgYXR0YWNobWVudCB2aWV3cy4KLSAgICBpZiAoZnJhbWVWaWV3
ICYmICFmcmFtZVZpZXctPnBsYXRmb3JtV2lkZ2V0KCkpIHsKLSAgICAgICAgLy8gRmluZCB0aGUg
YXBwcm9wcmlhdGUgc2Nyb2xsIHZpZXcgdG8gdXNlIHRvIGNvbnZlcnQgdGhlIGNvbnRlbnRzIHRv
IHRoZSB3aW5kb3cuCi0gICAgICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0g
bV9vYmplY3QtPnBhcmVudE9iamVjdCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50
T2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGlmIChwYXJlbnQtPmlzQWNjZXNzaWJpbGl0eVNjcm9s
bFZpZXcoKSkgewotICAgICAgICAgICAgICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcgPSB0b0Fj
Y2Vzc2liaWxpdHlTY3JvbGxWaWV3KHBhcmVudCktPnNjcm9sbFZpZXcoKTsKLSAgICAgICAgICAg
ICAgICByZWN0ID0gc2Nyb2xsVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJlY3QpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAot
ICAgIHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5zaG93Q29udGV4dE1lbnVBdChwYWdl
LT5tYWluRnJhbWUoKSwgcmVjdC5jZW50ZXIoKSk7Ci19Ci0KLS0gKHZvaWQpYWNjZXNzaWJpbGl0
eVBlcmZvcm1BY3Rpb246KE5TU3RyaW5nKilhY3Rpb24KLXsKLSAgICBpZiAoIVtzZWxmIHVwZGF0
ZU9iamVjdEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChbYWN0aW9u
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlQcmVzc0FjdGlvbl0pCi0gICAgICAgIFtz
ZWxmIGFjY2Vzc2liaWxpdHlQZXJmb3JtUHJlc3NBY3Rpb25dOwotICAgIAotICAgIGVsc2UgaWYg
KFthY3Rpb24gaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNob3dNZW51QWN0aW9uXSkK
LSAgICAgICAgW3NlbGYgYWNjZXNzaWJpbGl0eVBlcmZvcm1TaG93TWVudUFjdGlvbl07Ci0KLSAg
ICBlbHNlIGlmIChbYWN0aW9uIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmNyZW1l
bnRBY3Rpb25dKQotICAgICAgICBbc2VsZiBhY2Nlc3NpYmlsaXR5UGVyZm9ybUluY3JlbWVudEFj
dGlvbl07Ci0KLSAgICBlbHNlIGlmIChbYWN0aW9uIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlEZWNyZW1lbnRBY3Rpb25dKQotICAgICAgICBbc2VsZiBhY2Nlc3NpYmlsaXR5UGVyZm9y
bURlY3JlbWVudEFjdGlvbl07Ci19Ci0KLS0gKHZvaWQpYWNjZXNzaWJpbGl0eVNldFZhbHVlOihp
ZCl2YWx1ZSBmb3JBdHRyaWJ1dGU6KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lCi17Ci0gICAgaWYg
KCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZCB0ZXh0TWFya2VyUmFuZ2UgPSBuaWw7Ci0gICAgTlNOdW1iZXIqICAgICAgICAgICAgICAg
bnVtYmVyID0gbmlsOwotICAgIE5TU3RyaW5nKiAgICAgICAgICAgICAgIHN0cmluZyA9IG5pbDsK
LSAgICBOU1JhbmdlICAgICAgICAgICAgICAgICByYW5nZSA9IHswLCAwfTsKLSAgICBOU0FycmF5
KiAgICAgICAgICAgICAgICBhcnJheSA9IG5pbDsKLSAgICAKLSAgICAvLyBkZWNvZGUgdGhlIHBh
cmFtZXRlcgotICAgIGlmIChBWE9iamVjdElzVGV4dE1hcmtlclJhbmdlKHZhbHVlKSkKLSAgICAg
ICAgdGV4dE1hcmtlclJhbmdlID0gdmFsdWU7Ci0KLSAgICBlbHNlIGlmIChbdmFsdWUgaXNLaW5k
T2ZDbGFzczpbTlNOdW1iZXIgc2VsZl1dKQotICAgICAgICBudW1iZXIgPSB2YWx1ZTsKLQotICAg
IGVsc2UgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBzZWxmXV0pCi0gICAgICAg
IHN0cmluZyA9IHZhbHVlOwotICAgIAotICAgIGVsc2UgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNz
OltOU1ZhbHVlIHNlbGZdXSkKLSAgICAgICAgcmFuZ2UgPSBbdmFsdWUgcmFuZ2VWYWx1ZV07Ci0g
ICAgCi0gICAgZWxzZSBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgc2VsZl1dKQot
ICAgICAgICBhcnJheSA9IHZhbHVlOwotICAgIAotICAgIC8vIGhhbmRsZSB0aGUgY29tbWFuZAot
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhTZWxlY3RlZFRleHRN
YXJrZXJSYW5nZSJdKSB7Ci0gICAgICAgIEFTU0VSVCh0ZXh0TWFya2VyUmFuZ2UpOwotICAgICAg
ICBtX29iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShbc2VsZiB2aXNpYmxl
UG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdKTsgICAgICAg
IAotICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vz
c2liaWxpdHlGb2N1c2VkQXR0cmlidXRlXSkgewotICAgICAgICBBU1NFUlQobnVtYmVyKTsKLSAg
ICAgICAgbV9vYmplY3QtPnNldEZvY3VzZWQoW251bWJlciBpbnRWYWx1ZV0gIT0gMCk7Ci0gICAg
fSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0
eVZhbHVlQXR0cmlidXRlXSkgewotICAgICAgICBpZiAobnVtYmVyICYmIG1fb2JqZWN0LT5jYW5T
ZXROdW1lcmljVmFsdWUoKSkKLSAgICAgICAgICAgIG1fb2JqZWN0LT5zZXRWYWx1ZShbbnVtYmVy
IGZsb2F0VmFsdWVdKTsKLSAgICAgICAgZWxzZSBpZiAoc3RyaW5nKQotICAgICAgICAgICAgbV9v
YmplY3QtPnNldFZhbHVlKHN0cmluZyk7Ci0gICAgfSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQXR0cmlidXRlXSkgewotICAg
ICAgICBpZiAoIW51bWJlcikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9vYmplY3Qt
PnNldFNlbGVjdGVkKFtudW1iZXIgYm9vbFZhbHVlXSk7Ci0gICAgfSBlbHNlIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2hpbGRyZW5B
dHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmICghYXJyYXkgfHwgbV9vYmplY3QtPnJvbGVWYWx1ZSgp
ICE9IExpc3RCb3hSb2xlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRDaGlsZHJlbjsK
LSAgICAgICAgY29udmVydFRvVmVjdG9yKGFycmF5LCBzZWxlY3RlZENoaWxkcmVuKTsKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUxpc3RCb3gqPihtX29iamVjdCktPnNldFNlbGVj
dGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbik7Ci0gICAgfSBlbHNlIGlmIChtX29iamVjdC0+
aXNUZXh0Q29udHJvbCgpKSB7Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dEF0dHJpYnV0ZV0pIHsKLSAgICAgICAg
ICAgIG1fb2JqZWN0LT5zZXRTZWxlY3RlZFRleHQoc3RyaW5nKTsKLSAgICAgICAgfSBlbHNlIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVk
VGV4dFJhbmdlQXR0cmlidXRlXSkgewotICAgICAgICAgICAgbV9vYmplY3QtPnNldFNlbGVjdGVk
VGV4dFJhbmdlKFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpKTsK
LSAgICAgICAgfSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNj
ZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAg
IG1fb2JqZWN0LT5tYWtlUmFuZ2VWaXNpYmxlKFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9u
LCByYW5nZS5sZW5ndGgpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURpc2Nsb3NpbmdBdHRyaWJ1dGVdKQot
ICAgICAgICBtX29iamVjdC0+c2V0SXNFeHBhbmRlZChbbnVtYmVyIGJvb2xWYWx1ZV0pOwotICAg
IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlT
ZWxlY3RlZFJvd3NBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZFJvd3M7Ci0gICAgICAgIGNvbnZlcnRU
b1ZlY3RvcihhcnJheSwgc2VsZWN0ZWRSb3dzKTsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1Ry
ZWUoKSB8fCBtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSkKLSAgICAgICAgICAgIG1f
b2JqZWN0LT5zZXRTZWxlY3RlZFJvd3Moc2VsZWN0ZWRSb3dzKTsKLSAgICB9IGVsc2UgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlHcmFiYmVkQXR0cmli
dXRlXSkKLSAgICAgICAgbV9vYmplY3QtPnNldEFSSUFHcmFiYmVkKFtudW1iZXIgYm9vbFZhbHVl
XSk7Ci19Ci0KLXN0YXRpYyBSZW5kZXJPYmplY3QqIHJlbmRlcmVyRm9yVmlldyhOU1ZpZXcqIHZp
ZXcpCi17Ci0gICAgaWYgKCFbdmlldyBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKFdlYkNv
cmVGcmFtZVZpZXcpXSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBOU1ZpZXc8V2ViQ29yZUZy
YW1lVmlldz4qIGZyYW1lVmlldyA9IChOU1ZpZXc8V2ViQ29yZUZyYW1lVmlldz4qKXZpZXc7Ci0g
ICAgRnJhbWUqIGZyYW1lID0gW2ZyYW1lVmlldyBfd2ViX2ZyYW1lXTsKLSAgICBpZiAoIWZyYW1l
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIE5vZGUqIG5vZGUgPSBmcmFtZS0+ZG9jdW1lbnQo
KS0+b3duZXJFbGVtZW50KCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIHJldHVybiBub2RlLT5yZW5kZXJlcigpOwotfQotCi0tIChpZClfYWNjZXNzaWJpbGl0eVBh
cmVudEZvclN1YnZpZXc6KE5TVmlldyopc3VidmlldwoteyAgIAotICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSByZW5kZXJlckZvclZpZXcoc3Vidmlldyk7Ci0gICAgaWYgKCFyZW5kZXJlcikK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IHJl
bmRlcmVyLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlcmVy
KTsKLSAgICBpZiAob2JqKQotICAgICAgICByZXR1cm4gb2JqLT5wYXJlbnRPYmplY3RVbmlnbm9y
ZWQoKS0+d3JhcHBlcigpOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKE5TU3RyaW5nKilhY2Nl
c3NpYmlsaXR5QWN0aW9uRGVzY3JpcHRpb246KE5TU3RyaW5nKilhY3Rpb24KLXsKLSAgICAvLyB3
ZSBoYXZlIG5vIGN1c3RvbSBhY3Rpb25zCi0gICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eUFjdGlv
bkRlc2NyaXB0aW9uKGFjdGlvbik7Ci19Ci0KLS8vIFRoZSBDRkF0dHJpYnV0ZWRTdHJpbmdUeXBl
IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjY2Vzc2li
aWxpdHkKLS8vIG9iamVjdCB0aGF0IGlzIHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4gcmFuZ2UuCi0t
IChOU0F0dHJpYnV0ZWRTdHJpbmcqKWRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6KE5TUmFu
Z2UpcmFuZ2UKLXsKLSAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBQbGFpblRleHRSYW5n
ZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKLSAgICBWaXNpYmxlUG9zaXRpb25SYW5n
ZSB2aXNpYmxlUG9zUmFuZ2UgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5n
ZSh0ZXh0UmFuZ2UpOwotICAgIHJldHVybiBbc2VsZiBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRl
eHRNYXJrZXJSYW5nZTpbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2
aXNpYmxlUG9zUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dmlzaWJsZVBvc1JhbmdlLmVuZF1dOwot
fQotCi0tIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihSYW5nZSopcmFuZ2UKLXsKLSAgICBO
U1JhbmdlIHJlc3VsdCA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAgIGlmICghcmFu
Z2UgfHwgIXJhbmdlLT5zdGFydENvbnRhaW5lcigpKQotICAgICAgICByZXR1cm4gcmVzdWx0Owot
Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9vYmplY3QtPmRvY3VtZW50KCk7Ci0gICAgaWYg
KCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIHNpemVfdCBsb2NhdGlv
bjsKLSAgICBzaXplX3QgbGVuZ3RoOwotICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRM
ZW5ndGhGcm9tUmFuZ2UoZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCByYW5nZSwgbG9jYXRp
b24sIGxlbmd0aCk7Ci0gICAgcmVzdWx0LmxvY2F0aW9uID0gbG9jYXRpb247Ci0gICAgcmVzdWx0
Lmxlbmd0aCA9IGxlbmd0aDsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKE5TSW50ZWdl
cilfaW5kZXhGb3JUZXh0TWFya2VyOihpZCltYXJrZXIKLXsKLSAgICBpZiAoIW1hcmtlcikKLSAg
ICAgICAgcmV0dXJuIE5TTm90Rm91bmQ7Ci0gICAgCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24oW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjptYXJrZXJdKTsgICAgCi0g
ICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOnNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpXS5sb2NhdGlvbjsKLX0KLQotLSAoaWQpX3RleHRNYXJrZXJGb3JJbmRleDoo
TlNJbnRlZ2VyKXRleHRJbmRleAotewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fb2JqZWN0
LT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgCi0gICAgUGFzc1JlZlB0cjxSYW5nZT4gdGV4dFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUZyb21Mb2NhdGlvbkFuZExlbmd0aChkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIHRleHRJ
bmRleCwgMCk7Ci0gICAgaWYgKCF0ZXh0UmFuZ2UgfHwgIXRleHRSYW5nZS0+Ym91bmRhcnlQb2lu
dHNWYWxpZCgpKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uIHBv
c2l0aW9uKHRleHRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICByZXR1cm4gW3NlbGYgdGV4
dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpwb3NpdGlvbl07Ci19Ci0KLS8vIFRoZSBSVEYgcmVw
cmVzZW50YXRpb24gb2YgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWNjZXNzaWJpbGl0
eSBvYmplY3QgdGhhdCBpcwotLy8gc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiByYW5nZS4KLS0gKE5T
RGF0YSopZG9BWFJURkZvclJhbmdlOihOU1JhbmdlKXJhbmdlCi17Ci0gICAgTlNBdHRyaWJ1dGVk
U3RyaW5nKiBhdHRyU3RyaW5nID0gW3NlbGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZTpy
YW5nZV07Ci0gICAgcmV0dXJuIFthdHRyU3RyaW5nIFJURkZyb21SYW5nZTogTlNNYWtlUmFuZ2Uo
MCwgW2F0dHJTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOiBuaWxdOwotfQotCi0t
IChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1dGUgZm9y
UGFyYW1ldGVyOihpZClwYXJhbWV0ZXIKLXsKLSAgICBpZCB0ZXh0TWFya2VyID0gbmlsOwotICAg
IGlkIHRleHRNYXJrZXJSYW5nZSA9IG5pbDsKLSAgICBOU051bWJlciogbnVtYmVyID0gbmlsOwot
ICAgIE5TQXJyYXkqIGFycmF5ID0gbmlsOwotICAgIE5TRGljdGlvbmFyeSogZGljdGlvbmFyeSA9
IG5pbDsKLSAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gdWlFbGVtZW50ID0gMDsKLSAg
ICBOU1BvaW50IHBvaW50ID0gTlNaZXJvUG9pbnQ7Ci0gICAgYm9vbCBwb2ludFNldCA9IGZhbHNl
OwotICAgIE5TUmFuZ2UgcmFuZ2UgPSB7MCwgMH07Ci0gICAgYm9vbCByYW5nZVNldCA9IGZhbHNl
OwotICAgIAotICAgIC8vIGJhc2ljIHBhcmFtZXRlciB2YWxpZGF0aW9uCi0gICAgaWYgKCFtX29i
amVjdCB8fCAhYXR0cmlidXRlIHx8ICFwYXJhbWV0ZXIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0K
LSAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgCi0gICAgLy8gY29tbW9uIHBhcmFtZXRlciB0eXBlIGNoZWNrL2Nhc3Rpbmcu
ICBOaWwgY2hlY2tzIGluIGhhbmRsZXJzIGNhdGNoIHdyb25nIHR5cGUgY2FzZS4KLSAgICAvLyBO
T1RFOiBUaGlzIGFzc3VtZXMgbmlsIGlzIG5vdCBhIHZhbGlkIHBhcmFtZXRlciwgYmVjYXVzZSBp
dCBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tCi0gICAgLy8gYSBwYXJhbWV0ZXIgb2YgdGhlIHdy
b25nIHR5cGUuCi0gICAgaWYgKEFYT2JqZWN0SXNUZXh0TWFya2VyKHBhcmFtZXRlcikpCi0gICAg
ICAgIHRleHRNYXJrZXIgPSBwYXJhbWV0ZXI7Ci0KLSAgICBlbHNlIGlmIChBWE9iamVjdElzVGV4
dE1hcmtlclJhbmdlKHBhcmFtZXRlcikpCi0gICAgICAgIHRleHRNYXJrZXJSYW5nZSA9IHBhcmFt
ZXRlcjsKLQotICAgIGVsc2UgaWYgKFtwYXJhbWV0ZXIgaXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgc2VsZl1dKQotICAgICAgICB1aUVsZW1lbnQgPSBbKFdlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilwYXJhbWV0ZXIgYWNjZXNzaWJpbGl0eU9iamVjdF07
Ci0KLSAgICBlbHNlIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIHNlbGZd
XSkKLSAgICAgICAgbnVtYmVyID0gcGFyYW1ldGVyOwotCi0gICAgZWxzZSBpZiAoW3BhcmFtZXRl
ciBpc0tpbmRPZkNsYXNzOltOU0FycmF5IHNlbGZdXSkKLSAgICAgICAgYXJyYXkgPSBwYXJhbWV0
ZXI7Ci0KLSAgICBlbHNlIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFy
eSBzZWxmXV0pCi0gICAgICAgIGRpY3Rpb25hcnkgPSBwYXJhbWV0ZXI7Ci0KLSAgICBlbHNlIGlm
IChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUgc2VsZl1dICYmIHN0cmNtcChbKE5T
VmFsdWUqKXBhcmFtZXRlciBvYmpDVHlwZV0sIEBlbmNvZGUoTlNQb2ludCkpID09IDApIHsKLSAg
ICAgICAgcG9pbnRTZXQgPSB0cnVlOwotICAgICAgICBwb2ludCA9IFsoTlNWYWx1ZSopcGFyYW1l
dGVyIHBvaW50VmFsdWVdOwotCi0gICAgfSBlbHNlIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xh
c3M6W05TVmFsdWUgc2VsZl1dICYmIHN0cmNtcChbKE5TVmFsdWUqKXBhcmFtZXRlciBvYmpDVHlw
ZV0sIEBlbmNvZGUoTlNSYW5nZSkpID09IDApIHsKLSAgICAgICAgcmFuZ2VTZXQgPSB0cnVlOwot
ICAgICAgICByYW5nZSA9IFsoTlNWYWx1ZSopcGFyYW1ldGVyIHJhbmdlVmFsdWVdOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIC8vIEF0dHJpYnV0ZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuIEFsbG93
IHN1cGVyIHRvIGhhbmRsZS4KLSAgICAgICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXR0
cmlidXRlVmFsdWU6YXR0cmlidXRlIGZvclBhcmFtZXRlcjpwYXJhbWV0ZXJdOwotICAgIH0KLSAg
ICAKLSAgICAvLyBkaXNwYXRjaAotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRzRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0
dHJpYnV0ZV0pIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogc3RhcnRPYmplY3QgPSAw
OwotICAgICAgICBpZiAoW1tkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAIkFYU3RhcnRFbGVtZW50
Il0gaXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc2VsZl1dKQot
ICAgICAgICAgICAgc3RhcnRPYmplY3QgPSBbKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
KilbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QCJBWFN0YXJ0RWxlbWVudCJdIGFjY2Vzc2liaWxp
dHlPYmplY3RdOwotICAgICAgICAKLSAgICAgICAgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlv
biBzZWFyY2hEaXJlY3Rpb24gPSBTZWFyY2hEaXJlY3Rpb25OZXh0OwotICAgICAgICBpZiAoW1tk
aWN0aW9uYXJ5IG9iamVjdEZvcktleTpAIkFYRGlyZWN0aW9uIl0gaXNLaW5kT2ZDbGFzczpbTlNT
dHJpbmcgc2VsZl1dKQotICAgICAgICAgICAgc2VhcmNoRGlyZWN0aW9uID0gKFsoTlNTdHJpbmcq
KVtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAIkFYRGlyZWN0aW9uIl0gaXNFcXVhbFRvU3RyaW5n
OkAiQVhEaXJlY3Rpb25OZXh0Il0pID8gU2VhcmNoRGlyZWN0aW9uTmV4dCA6IFNlYXJjaERpcmVj
dGlvblByZXZpb3VzOwotICAgICAgICAKLSAgICAgICAgQWNjZXNzaWJpbGl0eVNlYXJjaEtleSBz
ZWFyY2hLZXkgPSBBbnlUeXBlU2VhcmNoS2V5OwotICAgICAgICBpZiAoW1tkaWN0aW9uYXJ5IG9i
amVjdEZvcktleTpAIkFYU2VhcmNoS2V5Il0gaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgc2VsZl1d
KQotICAgICAgICAgICAgc2VhcmNoS2V5ID0gYWNjZXNzaWJpbGl0eVNlYXJjaEtleUZvclN0cmlu
ZygoQ0ZTdHJpbmdSZWYpW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkAiQVhTZWFyY2hLZXkiXSk7
Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgc2VhcmNoVGV4dDsKLSAgICAgICAgaWYgKFtbZGlj
dGlvbmFyeSBvYmplY3RGb3JLZXk6QCJBWFNlYXJjaFRleHQiXSBpc0tpbmRPZkNsYXNzOltOU1N0
cmluZyBzZWxmXV0pCi0gICAgICAgICAgICBzZWFyY2hUZXh0ID0gKENGU3RyaW5nUmVmKVtkaWN0
aW9uYXJ5IG9iamVjdEZvcktleTpAIkFYU2VhcmNoVGV4dCJdOwotICAgICAgICAKLSAgICAgICAg
dW5zaWduZWQgcmVzdWx0c0xpbWl0ID0gMDsKLSAgICAgICAgaWYgKFtbZGljdGlvbmFyeSBvYmpl
Y3RGb3JLZXk6QCJBWFJlc3VsdHNMaW1pdCJdIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIHNlbGZd
XSkKLSAgICAgICAgICAgIHJlc3VsdHNMaW1pdCA9IFsoTlNOdW1iZXIqKVtkaWN0aW9uYXJ5IG9i
amVjdEZvcktleTpAIkFYUmVzdWx0c0xpbWl0Il0gdW5zaWduZWRJbnRWYWx1ZV07Ci0gICAgICAg
IAotICAgICAgICBBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWEgY3JpdGVyaWEgPSB7c3RhcnRP
YmplY3QsIHNlYXJjaERpcmVjdGlvbiwgc2VhcmNoS2V5LCAmc2VhcmNoVGV4dCwgcmVzdWx0c0xp
bWl0fTsKLQotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3IgcmVzdWx0czsKLSAgICAgICAgbV9vYmplY3QtPmZpbmRNYXRjaGluZ09iamVjdHMo
JmNyaXRlcmlhLCByZXN1bHRzKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9O
U0FycmF5KHJlc3VsdHMpOwotICAgIH0KLQotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0TWFya2VySXNWYWxpZFBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGVdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRp
b25Gb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOwotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51
bWJlcldpdGhCb29sOiFwb3MuaXNOdWxsKCldOwotICAgIH0KLSAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhGb3JUZXh0TWFya2VyUGFyYW1ldGVy
aXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50
ZWdlcjpbc2VsZiBfaW5kZXhGb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdXTsKLSAgICB9Ci0gICAg
aWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJG
b3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIHJldHVybiBbc2VsZiBf
dGV4dE1hcmtlckZvckluZGV4OltudW1iZXIgaW50ZWdlclZhbHVlXV07Ci0gICAgfQotICAgIAot
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYVUlFbGVtZW50Rm9yVGV4dE1h
cmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlz
aWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBheE9iamVjdCA9IG1fb2JqZWN0LT5hY2Nlc3NpYmlsaXR5T2JqZWN0Rm9y
UG9zaXRpb24odmlzaWJsZVBvcyk7Ci0gICAgICAgIGlmICghYXhPYmplY3QpCi0gICAgICAgICAg
ICByZXR1cm4gbmlsOwotICAgICAgICByZXR1cm4gYXhPYmplY3QtPndyYXBwZXIoKTsKLSAgICB9
Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFRleHRNYXJrZXJSYW5n
ZUZvclVJRWxlbWVudCJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2Ug
PSB1aUVsZW1lbnQuZ2V0KCktPnZpc2libGVQb3NpdGlvblJhbmdlKCk7Ci0gICAgICAgIHJldHVy
biBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0
IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6QCJBWExpbmVGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2Vy
Oih0ZXh0TWFya2VyKV07Ci0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2ln
bmVkSW50Om1fb2JqZWN0LT5saW5lRm9yUG9zaXRpb24odmlzaWJsZVBvcyldOwotICAgIH0KLQot
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYVGV4dE1hcmtlclJhbmdlRm9y
TGluZSJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBtX29iamVj
dC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JMaW5lKFtudW1iZXIgaW50VmFsdWVdKTsKLSAgICAg
ICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZwUmFu
Z2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwotICAgIH0KLQotICAgIGlmIChbYXR0
cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlIl0pIHsK
LSAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc1JhbmdlID0gW3NlbGYgdmlz
aWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKLSAg
ICAgICAgcmV0dXJuIG1fb2JqZWN0LT5zdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNp
YmxlUG9zUmFuZ2UpOwotICAgIH0KLQotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpAIkFYVGV4dE1hcmtlckZvclBvc2l0aW9uIl0pIHsKLSAgICAgICAgSW50UG9pbnQgd2ViQ29y
ZVBvaW50ID0gSW50UG9pbnQocG9pbnQpOwotICAgICAgICByZXR1cm4gcG9pbnRTZXQgPyBbc2Vs
ZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25G
b3JQb2ludCh3ZWJDb3JlUG9pbnQpXSA6IG5pbDsKLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEJvdW5kc0ZvclRleHRNYXJrZXJSYW5nZSJdKSB7Ci0gICAg
ICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IFtzZWxmIHZpc2libGVQ
b3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07Ci0gICAgICAg
IE5TUmVjdCByZWN0ID0gbV9vYmplY3QtPmJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHZp
c2libGVQb3NSYW5nZSk7Ci0gICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnJl
Y3RdOwotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5Qm91bmRzRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9y
SW5kZXgocmFuZ2UubG9jYXRpb24pOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0gbV9v
YmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KHJhbmdlLmxvY2F0aW9uK3JhbmdlLmxlbmd0
aCk7Ci0gICAgICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm4gbmlsOwotICAgICAgICBOU1JlY3QgcmVjdCA9IG1fb2JqZWN0LT5ib3VuZHNG
b3JWaXNpYmxlUG9zaXRpb25SYW5nZShWaXNpYmxlUG9zaXRpb25SYW5nZShzdGFydCwgZW5kKSk7
Ci0gICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnJlY3RdOwotICAgIH0KLSAg
ICAKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U3Ry
aW5nRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAgICBWaXNpYmxlUG9z
aXRpb24gc3RhcnQgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2UubG9j
YXRpb24pOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0gbV9vYmplY3QtPnZpc2libGVQ
b3NpdGlvbkZvckluZGV4KHJhbmdlLmxvY2F0aW9uK3JhbmdlLmxlbmd0aCk7Ci0gICAgICAgIGlm
IChzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gbmls
OwotICAgICAgICByZXR1cm4gbV9vYmplY3QtPnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdl
KFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0LCBlbmQpKTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2Vy
UmFuZ2UiXSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4
dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6QCJBWFRleHRNYXJrZXJSYW5nZUZvclVub3JkZXJlZFRleHRNYXJrZXJzIl0p
IHsKLSAgICAgICAgaWYgKFthcnJheSBjb3VudF0gPCAyKQotICAgICAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgICAgICBpZCB0ZXh0TWFya2VyMSA9IFthcnJheSBvYmplY3RBdEluZGV4OjBdOwot
ICAgICAgICBpZCB0ZXh0TWFya2VyMiA9IFthcnJheSBvYmplY3RBdEluZGV4OjFdOwotICAgICAg
ICBpZiAoIUFYT2JqZWN0SXNUZXh0TWFya2VyKHRleHRNYXJrZXIxKSB8fCAhQVhPYmplY3RJc1Rl
eHRNYXJrZXIodGV4dE1hcmtlcjIpKQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvczEgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JU
ZXh0TWFya2VyOih0ZXh0TWFya2VyMSldOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVBvczIgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyMild
OwotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnZpc2li
bGVQb3NpdGlvblJhbmdlRm9yVW5vcmRlcmVkUG9zaXRpb25zKHZpc2libGVQb3MxLCB2aXNpYmxl
UG9zMik7Ci0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBv
c2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKLSAgICB9Ci0K
LSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRUZXh0TWFya2VyRm9y
VGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3Nl
bGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICBy
ZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+bmV4dFZp
c2libGVQb3NpdGlvbih2aXNpYmxlUG9zKV07Ci0gICAgfQotCi0gICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2aW91c1RleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsK
LSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRp
b25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0
TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5wcmV2aW91c1Zpc2libGVQb3NpdGlv
bih2aXNpYmxlUG9zKV07Ci0gICAgfQotCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhMZWZ0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewotICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRl
eHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBS
YW5nZSA9IG1fb2JqZWN0LT5wb3NpdGlvbk9mTGVmdFdvcmQodmlzaWJsZVBvcyk7Ci0gICAgICAg
IHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdl
LnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFJpZ2h0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRN
YXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZp
c2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT5wb3NpdGlvbk9mUmlnaHRXb3JkKHZp
c2libGVQb3MpOwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2li
bGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07Ci0gICAg
fQotCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMZWZ0TGluZVRleHRN
YXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlz
aWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIp
XTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT5sZWZ0
TGluZVZpc2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3MpOwotICAgICAgICByZXR1cm4gW3Nl
bGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQ
b3NpdGlvbjp2cFJhbmdlLmVuZF07Ci0gICAgfQotCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhSaWdodExpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsK
LSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRp
b25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIFZpc2libGVQb3NpdGlvblJh
bmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+cmlnaHRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2Uodmlz
aWJsZVBvcyk7Ci0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJs
ZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKLSAgICB9
Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFNlbnRlbmNlVGV4dE1h
cmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNp
YmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcild
OwotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnNlbnRl
bmNlRm9yUG9zaXRpb24odmlzaWJsZVBvcyk7Ci0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFy
a2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZw
UmFuZ2UuZW5kXTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
QCJBWFBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBW
aXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRN
YXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5n
ZSA9IG1fb2JqZWN0LT5wYXJhZ3JhcGhGb3JQb3NpdGlvbih2aXNpYmxlUG9zKTsKLSAgICAgICAg
cmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uu
c3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwotICAgIH0KLQotICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dFdvcmRFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtl
ciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJs
ZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICByZXR1cm4gW3Nl
bGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+bmV4dFdvcmRFbmQodmlz
aWJsZVBvcyldOwotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJp
bmc6QCJBWFByZXZpb3VzV29yZFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewotICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZv
clRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJr
ZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPnByZXZpb3VzV29yZFN0YXJ0KHZpc2libGVQ
b3MpXTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5l
eHRMaW5lRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRl
eHRNYXJrZXIpXTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9z
aXRpb246bV9vYmplY3QtPm5leHRMaW5lRW5kUG9zaXRpb24odmlzaWJsZVBvcyldOwotICAgIH0K
LQotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNMaW5lU3Rh
cnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtl
cildOwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpt
X29iamVjdC0+cHJldmlvdXNMaW5lU3RhcnRQb3NpdGlvbih2aXNpYmxlUG9zKV07Ci0gICAgfQot
Ci0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0U2VudGVuY2VFbmRU
ZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNp
YmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcild
OwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29i
amVjdC0+bmV4dFNlbnRlbmNlRW5kUG9zaXRpb24odmlzaWJsZVBvcyldOwotICAgIH0KLQotICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNTZW50ZW5jZVN0YXJ0
VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlz
aWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIp
XTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9v
YmplY3QtPnByZXZpb3VzU2VudGVuY2VTdGFydFBvc2l0aW9uKHZpc2libGVQb3MpXTsKLSAgICB9
Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRQYXJhZ3JhcGhF
bmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtl
cildOwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpt
X29iamVjdC0+bmV4dFBhcmFncmFwaEVuZFBvc2l0aW9uKHZpc2libGVQb3MpXTsKLSAgICB9Ci0K
LSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzUGFyYWdyYXBo
U3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1h
cmtlcildOwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlv
bjptX29iamVjdC0+cHJldmlvdXNQYXJhZ3JhcGhTdGFydFBvc2l0aW9uKHZpc2libGVQb3MpXTsK
LSAgICB9Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFN0eWxlVGV4
dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtl
cildOwotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnN0
eWxlUmFuZ2VGb3JQb3NpdGlvbih2aXNpYmxlUG9zKTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRl
eHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRp
b246dnBSYW5nZS5lbmRdOwotICAgIH0KLQotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpAIkFYTGVuZ3RoRm9yVGV4dE1hcmtlclJhbmdlIl0pIHsKLSAgICAgICAgVmlzaWJsZVBv
c2l0aW9uUmFuZ2UgdmlzaWJsZVBvc1JhbmdlID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uUmFuZ2VG
b3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKLSAgICAgICAgaW50IGxlbmd0aCA9
IG1fb2JqZWN0LT5sZW5ndGhGb3JWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zUmFuZ2Up
OwotICAgICAgICBpZiAobGVuZ3RoIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAg
ICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpsZW5ndGhdOwotICAgIH0KLQotICAg
IC8vIFVzZWQgb25seSBieSBEdW1wUmVuZGVyVHJlZSAoc28gZmFyKS4KLSAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5n
ZSJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IFtz
ZWxmIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5n
ZV07Ci0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOnZp
c2libGVQb3NSYW5nZS5zdGFydF07Ci0gICAgfQotCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlIl0pIHsKLSAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc1JhbmdlID0gW3NlbGYgdmlzaWJsZVBv
c2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKLSAgICAgICAg
cmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246dmlzaWJsZVBvc1Jhbmdl
LmVuZF07Ci0gICAgfQotICAgIAotICAgIGlmIChtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5VGFi
bGUoKSkgewotICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5Q2VsbEZvckNvbHVtbkFuZFJvd1BhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAg
ICAgICAgICBpZiAoYXJyYXkgPT0gbmlsIHx8IFthcnJheSBjb3VudF0gIT0gMikKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCog
Y2VsbCA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KG1fb2JqZWN0KS0+Y2VsbEZv
ckNvbHVtbkFuZFJvdyhbW2FycmF5IG9iamVjdEF0SW5kZXg6MF0gdW5zaWduZWRJbnRWYWx1ZV0s
IFtbYXJyYXkgb2JqZWN0QXRJbmRleDoxXSB1bnNpZ25lZEludFZhbHVlXSk7Ci0gICAgICAgICAg
ICBpZiAoIWNlbGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgcmV0dXJuIGNlbGwtPndyYXBwZXIoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChtX29iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7Ci0gICAgICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3RyaW5nICopa0FYTGluZUZvckluZGV4UGFyYW1ldGVy
aXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIGludCBsaW5lTnVtYmVyID0gbV9vYmplY3Qt
PmRvQVhMaW5lRm9ySW5kZXgoW251bWJlciBpbnRWYWx1ZV0pOwotICAgICAgICAgICAgaWYgKGxp
bmVOdW1iZXIgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICBy
ZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludDpsaW5lTnVtYmVyXTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3RyaW5n
ICopa0FYUmFuZ2VGb3JMaW5lUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAg
IFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKFtu
dW1iZXIgaW50VmFsdWVdKTsKLSAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhS
YW5nZTogTlNNYWtlUmFuZ2UodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2UubGVuZ3RoKV07Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0
cmluZyopa0FYU3RyaW5nRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAg
ICAgICAgUGxhaW5UZXh0UmFuZ2UgcGxhaW5UZXh0UmFuZ2UgPSBQbGFpblRleHRSYW5nZShyYW5n
ZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybiByYW5nZVNldCA/
IChpZCkobV9vYmplY3QtPmRvQVhTdHJpbmdGb3JSYW5nZShwbGFpblRleHRSYW5nZSkpIDogbmls
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAo
TlNTdHJpbmcqKWtBWFJhbmdlRm9yUG9zaXRpb25QYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewot
ICAgICAgICAgICAgaWYgKCFwb2ludFNldCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwot
ICAgICAgICAgICAgSW50UG9pbnQgd2ViQ29yZVBvaW50ID0gSW50UG9pbnQocG9pbnQpOwotICAg
ICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gbV9vYmplY3QtPmRvQVhSYW5nZUZv
clBvc2l0aW9uKHdlYkNvcmVQb2ludCk7Ci0gICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFs
dWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0
aCldOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
OiAoTlNTdHJpbmcqKWtBWFJhbmdlRm9ySW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewot
ICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gbV9vYmplY3QtPmRvQVhSYW5n
ZUZvckluZGV4KFtudW1iZXIgaW50VmFsdWVdKTsKLSAgICAgICAgICAgIHJldHVybiBbTlNWYWx1
ZSB2YWx1ZVdpdGhSYW5nZTogTlNNYWtlUmFuZ2UodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2Uu
bGVuZ3RoKV07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6IChOU1N0cmluZyopa0FYQm91bmRzRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRl
XSkgewotICAgICAgICAgICAgaWYgKCFyYW5nZVNldCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
bmlsOwotICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgcGxhaW5UZXh0UmFuZ2UgPSBQbGFpblRl
eHRSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgICAgIE5TUmVj
dCByZWN0ID0gbV9vYmplY3QtPmRvQVhCb3VuZHNGb3JSYW5nZShwbGFpblRleHRSYW5nZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpyZWN0XTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3RyaW5nKilr
QVhSVEZGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJu
IHJhbmdlU2V0ID8gW3NlbGYgZG9BWFJURkZvclJhbmdlOnJhbmdlXSA6IG5pbDsKLQotICAgICAg
ICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmluZyopa0FYQXR0cmlidXRl
ZFN0cmluZ0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1
cm4gcmFuZ2VTZXQgPyBbc2VsZiBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlOnJhbmdlXSA6
IG5pbDsKLQotICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmlu
Zyopa0FYU3R5bGVSYW5nZUZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAg
ICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5kb0FYU3R5bGVSYW5n
ZUZvckluZGV4KFtudW1iZXIgaW50VmFsdWVdKTsKLSAgICAgICAgICAgIHJldHVybiBbTlNWYWx1
ZSB2YWx1ZVdpdGhSYW5nZTogTlNNYWtlUmFuZ2UodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2Uu
bGVuZ3RoKV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGVyZSBhcmUgc29tZSBwYXJh
bWV0ZXJzIHRoYXQgc3VwZXIgaGFuZGxlcyB0aGF0IGFyZSBub3QgZXhwbGljaXRseSByZXR1cm5l
ZCBieSB0aGUgbGlzdCBvZiB0aGUgZWxlbWVudCdzIGF0dHJpYnV0ZXMuCi0gICAgLy8gSW4gdGhh
dCBjYXNlIGl0IG11c3QgYmUgcGFzc2VkIHRvIHN1cGVyLiAKLSAgICByZXR1cm4gW3N1cGVyIGFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTphdHRyaWJ1dGUgZm9yUGFyYW1ldGVyOnBhcmFtZXRl
cl07Ci19Ci0KLS0gKEJPT0wpYWNjZXNzaWJpbGl0eVN1cHBvcnRzT3ZlcnJpZGRlbkF0dHJpYnV0
ZXMKLXsKLSAgICByZXR1cm4gWUVTOwotfQotCi0tIChCT09MKWFjY2Vzc2liaWxpdHlTaG91bGRV
c2VVbmlxdWVJZAotewotICAgIC8vIEFsbCBBWCBvYmplY3Qgd3JhcHBlcnMgc2hvdWxkIHVzZSB1
bmlxdWUgSUQncyBiZWNhdXNlIGl0J3MgZmFzdGVyIHdpdGhpbiBBcHBLaXQgdG8gbG9vayB0aGVt
IHVwLgotICAgIHJldHVybiBZRVM7Ci19Ci0KLS8vIEFQSSB0aGF0IEFwcEtpdCB1c2VzIGZvciBm
YXN0ZXIgYWNjZXNzCi0tIChOU1VJbnRlZ2VyKWFjY2Vzc2liaWxpdHlJbmRleE9mQ2hpbGQ6KGlk
KWNoaWxkCi17Ci0gICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQotICAg
ICAgICByZXR1cm4gTlNOb3RGb3VuZDsKLSAgICAKLSAgICAvLyBUcmVlIG9iamVjdHMgcmV0dXJu
IHRoZWlyIHJvd3MgYXMgdGhlaXIgY2hpbGRyZW4uIFdlIGNhbiB1c2UgdGhlIG9yaWdpbmFsIG1l
dGhvZAotICAgIC8vIGhlcmUsIGJlY2F1c2Ugd2Ugd29uJ3QgZ2FpbiBhbnkgc3BlZWQgdXAuCi0g
ICAgaWYgKG1fb2JqZWN0LT5pc1RyZWUoKSkKLSAgICAgICAgcmV0dXJuIFtzdXBlciBhY2Nlc3Np
YmlsaXR5SW5kZXhPZkNoaWxkOmNoaWxkXTsKLSAgICAgICAKLSAgICBjb25zdCBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gbV9vYmpl
Y3QtPmNoaWxkcmVuKCk7Ci0gICAgICAgCi0gICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIFtbc2VsZiByZW5kZXJXaWRnZXRDaGlsZHJlbl0gaW5kZXhPZk9iamVjdDpj
aGlsZF07Ci0gICAgCi0gICAgdW5zaWduZWQgY291bnQgPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGNvdW50OyArK2spIHsKLSAgICAgICAgV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBjaGlsZHJlbltrXS0+d3JhcHBlcigpOwot
ICAgICAgICBpZiAod3JhcHBlciA9PSBjaGlsZCB8fCAoY2hpbGRyZW5ba10tPmlzQXR0YWNobWVu
dCgpICYmIFt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XSA9PSBjaGlsZCkpIAotICAgICAgICAgICAg
cmV0dXJuIGs7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5TTm90Rm91bmQ7Ci19Ci0KLS0gKE5TVUlu
dGVnZXIpYWNjZXNzaWJpbGl0eUFycmF5QXR0cmlidXRlQ291bnQ6KE5TU3RyaW5nICopYXR0cmli
dXRlCi17Ci0gICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdKSB7Ci0gICAgICAgIC8vIFRyZWUgaXRlbXMg
b2JqZWN0IHJldHVybnMgYSBkaWZmZXJlbnQgc2V0IG9mIGNoaWxkcmVuIHRoYW4gdGhvc2UgdGhh
dCBhcmUgaW4gY2hpbGRyZW4oKQotICAgICAgICAvLyBiZWNhdXNlIGFuIEFYT3V0bGluZSAodGhl
IG1hYyByb2xlIGlzIGJlY29tZXMpIGhhcyBzb21lIG9kZCBzdGlwdWxhdGlvbnMuCi0gICAgICAg
IGlmIChtX29iamVjdC0+aXNUcmVlKCkgfHwgbV9vYmplY3QtPmlzVHJlZUl0ZW0oKSkKLSAgICAg
ICAgICAgIHJldHVybiBbW3NlbGYgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNz
aWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSBjb3VudF07Ci0gICAgICAgIAotICAgICAgICBjb25z
dCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxk
cmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7Ci0gICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5
KCkpCi0gICAgICAgICAgICByZXR1cm4gW1tzZWxmIHJlbmRlcldpZGdldENoaWxkcmVuXSBjb3Vu
dF07Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2l6ZSgpOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZUNvdW50OmF0
dHJpYnV0ZV07Ci19Ci0KLS0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVW
YWx1ZXM6KE5TU3RyaW5nICopYXR0cmlidXRlIGluZGV4OihOU1VJbnRlZ2VyKWluZGV4IG1heENv
dW50OihOU1VJbnRlZ2VyKW1heENvdW50IAotewotICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0
QmFja2luZ1N0b3JlXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdKSB7
Ci0gICAgICAgIGlmIChtX29iamVjdC0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIE5TQXJyYXkgKmNoaWxkcmVuID0gW3NlbGYgcmVuZGVyV2lkZ2V0Q2hpbGRyZW5dOwotICAg
ICAgICAgICAgaWYgKCFjaGlsZHJlbikgCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgTlNVSW50ZWdlciBjaGlsZENvdW50ID0gW2NoaWxkcmVu
IGNvdW50XTsKLSAgICAgICAgICAgIGlmIChpbmRleCA+PSBjaGlsZENvdW50KQotICAgICAgICAg
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE5TVUludGVnZXIg
YXJyYXlMZW5ndGggPSBtaW4oY2hpbGRDb3VudCAtIGluZGV4LCBtYXhDb3VudCk7Ci0gICAgICAg
ICAgICByZXR1cm4gW2NoaWxkcmVuIHN1YmFycmF5V2l0aFJhbmdlOk5TTWFrZVJhbmdlKGluZGV4
LCBhcnJheUxlbmd0aCldOwotICAgICAgICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RyZWUoKSkg
ewotICAgICAgICAgICAgLy8gVHJlZSBvYmplY3RzIHJldHVybiB0aGVpciByb3dzIGFzIHRoZWly
IGNoaWxkcmVuLiBXZSBjYW4gdXNlIHRoZSBvcmlnaW5hbCBtZXRob2QgaW4gdGhpcyBjYXNlLgot
ICAgICAgICAgICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVWYWx1
ZXM6YXR0cmlidXRlIGluZGV4OmluZGV4IG1heENvdW50Om1heENvdW50XTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOwotICAgICAg
ICB1bnNpZ25lZCBjaGlsZENvdW50ID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgICAgICBpZiAoaW5k
ZXggPj0gY2hpbGRDb3VudCkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIAotICAg
ICAgICB1bnNpZ25lZCBhdmFpbGFibGUgPSBtaW4oY2hpbGRDb3VudCAtIGluZGV4LCBtYXhDb3Vu
dCk7Ci0gICAgICAgIAotICAgICAgICBOU011dGFibGVBcnJheSAqc3ViYXJyYXkgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6YXZhaWxhYmxlXTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBhZGRlZCA9IDA7IGFkZGVkIDwgYXZhaWxhYmxlOyArK2luZGV4LCArK2FkZGVkKSB7Ci0g
ICAgICAgICAgICBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogd3JhcHBlciA9IGNoaWxk
cmVuW2luZGV4XS0+d3JhcHBlcigpOwotICAgICAgICAgICAgaWYgKHdyYXBwZXIpIHsKLSAgICAg
ICAgICAgICAgICAvLyBUaGUgYXR0YWNobWVudCB2aWV3IHNob3VsZCBiZSByZXR1cm5lZCwgb3Ro
ZXJ3aXNlIEFYIHBhbGluZHJvbWUgZXJyb3JzIG9jY3VyLgotICAgICAgICAgICAgICAgIGlmIChj
aGlsZHJlbltpbmRleF0tPmlzQXR0YWNobWVudCgpICYmIFt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3
XSkKLSAgICAgICAgICAgICAgICAgICAgW3N1YmFycmF5IGFkZE9iamVjdDpbd3JhcHBlciBhdHRh
Y2htZW50Vmlld11dOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
W3N1YmFycmF5IGFkZE9iamVjdDp3cmFwcGVyXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIHN1YmFycmF5OwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZVZhbHVlczphdHRyaWJ1dGUgaW5k
ZXg6aW5kZXggbWF4Q291bnQ6bWF4Q291bnRdOwotfQotCi0vLyBUaGlzIGlzIHNldCBieSBEUlQg
d2hlbiBpdCB3YW50cyB0byBsaXN0ZW4gZm9yIG5vdGlmaWNhdGlvbnMuCi1zdGF0aWMgQk9PTCBh
Y2Nlc3NpYmlsaXR5U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczsKLSsgKHZvaWQpYWNjZXNzaWJp
bGl0eVNldFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM6KEJPT0wpcmVwb3N0Ci17Ci0gICAgYWNj
ZXNzaWJpbGl0eVNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnMgPSByZXBvc3Q7Ci19Ci0KLS0gKHZv
aWQpYWNjZXNzaWJpbGl0eVBvc3RlZE5vdGlmaWNhdGlvbjooTlNTdHJpbmcgKilub3RpZmljYXRp
b25OYW1lCi17Ci0gICAgaWYgKGFjY2Vzc2liaWxpdHlTaG91bGRSZXBvc3ROb3RpZmljYXRpb25z
KSB7Ci0gICAgICAgIE5TRGljdGlvbmFyeSogdXNlckluZm8gPSBbTlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoT2JqZWN0c0FuZEtleXM6bm90aWZpY2F0aW9uTmFtZSwgQCJub3RpZmljYXRpb25O
YW1lIiwgbmlsXTsKLSAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVy
XSBwb3N0Tm90aWZpY2F0aW9uTmFtZTpAIkFYRFJUTm90aWZpY2F0aW9uIiBvYmplY3Q6c2VsZiB1
c2VySW5mbzp1c2VySW5mb107Ci0gICAgfQotfQotCiBAZW5kCiAKICNlbmRpZiAvLyBIQVZFKEFD
Q0VTU0lCSUxJVFkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm0J
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1NTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaCIKKworI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkK
KworI2ltcG9ydCAiQVhPYmplY3RDYWNoZS5oIgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUFSSUFH
cmlkUm93LmgiCisjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5TGlzdC5oIgorI2ltcG9ydCAiQWNjZXNz
aWJpbGl0eUxpc3RCb3guaCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCIK
KyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmgiCisjaW1wb3J0ICJBY2Nlc3NpYmls
aXR5U3BpbkJ1dHRvbi5oIgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVRhYmxlLmgiCisjaW1wb3J0
ICJBY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmgiCisjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VGFibGVD
b2x1bW4uaCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlUYWJsZVJvdy5oIgorI2ltcG9ydCAiQ2hy
b21lLmgiCisjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKKyNpbXBvcnQgIkNvbG9yTWFjLmgiCisj
aW1wb3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIkZvbnQuaCIKKyNpbXBv
cnQgIkZyYW1lLmgiCisjaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2ltcG9ydCAiRnJh
bWVTZWxlY3Rpb24uaCIKKyNpbXBvcnQgIkhUTUxBbmNob3JFbGVtZW50LmgiCisjaW1wb3J0ICJI
VE1MQXJlYUVsZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgorI2lt
cG9ydCAiSFRNTEltYWdlRWxlbWVudC5oIgorI2ltcG9ydCAiSFRNTElucHV0RWxlbWVudC5oIgor
I2ltcG9ydCAiSFRNTE5hbWVzLmgiCisjaW1wb3J0ICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCisj
aW1wb3J0ICJMb2NhbGl6ZWRTdHJpbmdzLmgiCisjaW1wb3J0ICJQYWdlLmgiCisjaW1wb3J0ICJS
ZW5kZXJUZXh0Q29udHJvbC5oIgorI2ltcG9ydCAiUmVuZGVyVmlldy5oIgorI2ltcG9ydCAiUmVu
ZGVyV2lkZ2V0LmgiCisjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCisjaW1wb3J0ICJTaW1wbGVGb250
RGF0YS5oIgorI2ltcG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKKyNpbXBvcnQgIlRleHRDaGVj
a2luZ0hlbHBlci5oIgorI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCisjaW1wb3J0ICJXZWJDb3Jl
RnJhbWVWaWV3LmgiCisjaW1wb3J0ICJXZWJDb3JlT2JqQ0V4dHJhcy5oIgorI2ltcG9ydCAiV2Vi
Q29yZVN5c3RlbUludGVyZmFjZS5oIgorI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKKyNpbXBvcnQg
InZpc2libGVfdW5pdHMuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworLy8gQ2VsbCBUYWJsZXMK
KyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDZWxsc0F0dHJpYnV0ZQorI2RlZmluZSBO
U0FjY2Vzc2liaWxpdHlTZWxlY3RlZENlbGxzQXR0cmlidXRlIEAiQVhTZWxlY3RlZENlbGxzIgor
I2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNlbGxzQXR0cmlidXRlCisj
ZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVZpc2libGVDZWxsc0F0dHJpYnV0ZSBAIkFYVmlzaWJsZUNl
bGxzIgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Um93SGVhZGVyVUlFbGVtZW50
c0F0dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlSb3dIZWFkZXJVSUVsZW1lbnRzQXR0
cmlidXRlIEAiQVhSb3dIZWFkZXJVSUVsZW1lbnRzIgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nl
c3NpYmlsaXR5Um93SW5kZXhSYW5nZUF0dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlS
b3dJbmRleFJhbmdlQXR0cmlidXRlIEAiQVhSb3dJbmRleFJhbmdlIgorI2VuZGlmCisKKyNpZm5k
ZWYgTlNBY2Nlc3NpYmlsaXR5Q29sdW1uSW5kZXhSYW5nZUF0dHJpYnV0ZQorI2RlZmluZSBOU0Fj
Y2Vzc2liaWxpdHlDb2x1bW5JbmRleFJhbmdlQXR0cmlidXRlIEAiQVhDb2x1bW5JbmRleFJhbmdl
IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Q2VsbEZvckNvbHVtbkFuZFJvd1Bh
cmFtZXRlcml6ZWRBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Q2VsbEZvckNvbHVt
bkFuZFJvd1BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgQCJBWENlbGxGb3JDb2x1bW5BbmRSb3ciCisj
ZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlDZWxsUm9sZQorI2RlZmluZSBOU0FjY2Vz
c2liaWxpdHlDZWxsUm9sZSBAIkFYQ2VsbCIKKyNlbmRpZgorCisvLyBMaXN0cworI2lmbmRlZiBO
U0FjY2Vzc2liaWxpdHlDb250ZW50TGlzdFN1YnJvbGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5
Q29udGVudExpc3RTdWJyb2xlIEAiQVhDb250ZW50TGlzdCIKKyNlbmRpZgorCisjaWZuZGVmIE5T
QWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uTGlzdFN1YnJvbGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmls
aXR5RGVzY3JpcHRpb25MaXN0U3Vicm9sZSBAIkFYRGVzY3JpcHRpb25MaXN0IgorI2VuZGlmCisK
Ky8vIE1pc2NlbGxhbmVvdXMKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5QmxvY2tRdW90ZUxldmVs
QXR0cmlidXRlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUJsb2NrUXVvdGVMZXZlbEF0dHJpYnV0
ZSBAIkFYQmxvY2tRdW90ZUxldmVsIgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5
QWNjZXNzS2V5QXR0cmlidXRlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUFjY2Vzc0tleUF0dHJp
YnV0ZSBAIkFYQWNjZXNzS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5TGFu
Z3VhZ2VBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5TGFuZ3VhZ2VBdHRyaWJ1dGUg
QCJBWExhbmd1YWdlIgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5UmVxdWlyZWRB
dHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5UmVxdWlyZWRBdHRyaWJ1dGUgQCJBWFJl
cXVpcmVkIgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SW52YWxpZEF0dHJpYnV0
ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlJbnZhbGlkQXR0cmlidXRlIEAiQVhJbnZhbGlkIgor
I2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5T3duc0F0dHJpYnV0ZQorI2RlZmluZSBO
U0FjY2Vzc2liaWxpdHlPd25zQXR0cmlidXRlIEAiQVhPd25zIgorI2VuZGlmCisKKyNpZm5kZWYg
TlNBY2Nlc3NpYmlsaXR5R3JhYmJlZEF0dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlH
cmFiYmVkQXR0cmlidXRlIEAiQVhHcmFiYmVkIgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3Np
YmlsaXR5RHJvcEVmZmVjdHNBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5RHJvcEVm
ZmVjdHNBdHRyaWJ1dGUgQCJBWERyb3BFZmZlY3RzIgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nl
c3NpYmlsaXR5QVJJQUxpdmVBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5QVJJQUxp
dmVBdHRyaWJ1dGUgQCJBWEFSSUFMaXZlIgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmls
aXR5QVJJQUF0b21pY0F0dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlBUklBQXRvbWlj
QXR0cmlidXRlIEAiQVhBUklBQXRvbWljIgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmls
aXR5QVJJQVJlbGV2YW50QXR0cmlidXRlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUFSSUFSZWxl
dmFudEF0dHJpYnV0ZSBAIkFYQVJJQVJlbGV2YW50IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nl
c3NpYmlsaXR5QVJJQUJ1c3lBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5QVJJQUJ1
c3lBdHRyaWJ1dGUgQCJBWEFSSUFCdXN5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmls
aXR5TG9hZGluZ1Byb2dyZXNzQXR0cmlidXRlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUxvYWRp
bmdQcm9ncmVzc0F0dHJpYnV0ZSBAIkFYTG9hZGluZ1Byb2dyZXNzIgorI2VuZGlmCisKKyNpZm5k
ZWYgTlNBY2Nlc3NpYmlsaXR5SGFzUG9wdXBBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmls
aXR5SGFzUG9wdXBBdHRyaWJ1dGUgQCJBWEhhc1BvcHVwIgorI2VuZGlmCisKKyNpZm5kZWYgTlNB
Y2Nlc3NpYmlsaXR5UGxhY2Vob2xkZXJWYWx1ZUF0dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vzc2li
aWxpdHlQbGFjZWhvbGRlclZhbHVlQXR0cmlidXRlIEAiQVhQbGFjZWhvbGRlclZhbHVlIgorI2Vu
ZGlmCisKKy8vIFNlYXJjaAorI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRzRm9yU2Vh
cmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRzRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBAIkFY
VUlFbGVtZW50c0ZvclNlYXJjaFByZWRpY2F0ZSIKKyNlbmRpZgorCisvLyBTZWFyY2ggS2V5cwor
I2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlBbnlUeXBlU2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNz
aWJpbGl0eUFueVR5cGVTZWFyY2hLZXkgQCJBWEFueVR5cGVTZWFyY2hLZXkiCisjZW5kaWYKKwor
I2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlCbG9ja3F1b3RlU2FtZUxldmVsU2VhcmNoS2V5CisjZGVm
aW5lIE5TQWNjZXNzaWJpbGl0eUJsb2NrcXVvdGVTYW1lTGV2ZWxTZWFyY2hLZXkgQCJBWEJsb2Nr
cXVvdGVTYW1lTGV2ZWxTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxp
dHlCbG9ja3F1b3RlU2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUJsb2NrcXVvdGVT
ZWFyY2hLZXkgQCJBWEJsb2NrcXVvdGVTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0Fj
Y2Vzc2liaWxpdHlCb2xkRm9udFNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlCb2xk
Rm9udFNlYXJjaEtleSBAIkFYQm9sZEZvbnRTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBO
U0FjY2Vzc2liaWxpdHlCdXR0b25TZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5QnV0
dG9uU2VhcmNoS2V5IEAiQVhCdXR0b25TZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0Fj
Y2Vzc2liaWxpdHlDaGVja0JveFNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlDaGVj
a0JveFNlYXJjaEtleSBAIkFYQ2hlY2tCb3hTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBO
U0FjY2Vzc2liaWxpdHlDb250cm9sU2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUNv
bnRyb2xTZWFyY2hLZXkgQCJBWENvbnRyb2xTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBO
U0FjY2Vzc2liaWxpdHlEaWZmZXJlbnRUeXBlU2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNzaWJp
bGl0eURpZmZlcmVudFR5cGVTZWFyY2hLZXkgQCJBWERpZmZlcmVudFR5cGVTZWFyY2hLZXkiCisj
ZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlGb250Q2hhbmdlU2VhcmNoS2V5CisjZGVm
aW5lIE5TQWNjZXNzaWJpbGl0eUZvbnRDaGFuZ2VTZWFyY2hLZXkgQCJBWEZvbnRDaGFuZ2VTZWFy
Y2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlGb250Q29sb3JDaGFuZ2VT
ZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Rm9udENvbG9yQ2hhbmdlU2VhcmNoS2V5
IEAiQVhGb250Q29sb3JDaGFuZ2VTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vz
c2liaWxpdHlGcmFtZVNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlGcmFtZVNlYXJj
aEtleSBAIkFYRnJhbWVTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxp
dHlHcmFwaGljU2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUdyYXBoaWNTZWFyY2hL
ZXkgQCJBWEdyYXBoaWNTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxp
dHlIZWFkaW5nTGV2ZWwxU2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdM
ZXZlbDFTZWFyY2hLZXkgQCJBWEhlYWRpbmdMZXZlbDFTZWFyY2hLZXkiCisjZW5kaWYKKworI2lm
bmRlZiBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWwyU2VhcmNoS2V5CisjZGVmaW5lIE5TQWNj
ZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDJTZWFyY2hLZXkgQCJBWEhlYWRpbmdMZXZlbDJTZWFyY2hL
ZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWwzU2VhcmNo
S2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDNTZWFyY2hLZXkgQCJBWEhl
YWRpbmdMZXZlbDNTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlI
ZWFkaW5nTGV2ZWw0U2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdMZXZl
bDRTZWFyY2hLZXkgQCJBWEhlYWRpbmdMZXZlbDRTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRl
ZiBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWw1U2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNz
aWJpbGl0eUhlYWRpbmdMZXZlbDVTZWFyY2hLZXkgQCJBWEhlYWRpbmdMZXZlbDVTZWFyY2hLZXki
CisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWw2U2VhcmNoS2V5
CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDZTZWFyY2hLZXkgQCJBWEhlYWRp
bmdMZXZlbDZTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlIZWFk
aW5nU2FtZUxldmVsU2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdTYW1l
TGV2ZWxTZWFyY2hLZXkgQCJBWEhlYWRpbmdTYW1lTGV2ZWxTZWFyY2hLZXkiCisjZW5kaWYKKwor
I2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nU2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNz
aWJpbGl0eUhlYWRpbmdTZWFyY2hLZXkgQCJBWEhlYWRpbmdTZWFyY2hLZXkiCisjZW5kaWYKKwor
I2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlIaWdobGlnaHRlZFNlYXJjaEtleQorI2RlZmluZSBOU0Fj
Y2Vzc2liaWxpdHlIaWdobGlnaHRlZFNlYXJjaEtleSBAIkFYSGlnaGxpZ2h0ZWRTZWFyY2hLZXki
CisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlJdGFsaWNGb250U2VhcmNoS2V5Cisj
ZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUl0YWxpY0ZvbnRTZWFyY2hLZXkgQCJBWEl0YWxpY0ZvbnRT
ZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlMYW5kbWFya1NlYXJj
aEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlMYW5kbWFya1NlYXJjaEtleSBAIkFYTGFuZG1h
cmtTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlMaW5rU2VhcmNo
S2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUxpbmtTZWFyY2hLZXkgQCJBWExpbmtTZWFyY2hL
ZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlMaXN0U2VhcmNoS2V5CisjZGVm
aW5lIE5TQWNjZXNzaWJpbGl0eUxpc3RTZWFyY2hLZXkgQCJBWExpc3RTZWFyY2hLZXkiCisjZW5k
aWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlMaXZlUmVnaW9uU2VhcmNoS2V5CisjZGVmaW5l
IE5TQWNjZXNzaWJpbGl0eUxpdmVSZWdpb25TZWFyY2hLZXkgQCJBWExpdmVSZWdpb25TZWFyY2hL
ZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlNaXNzcGVsbGVkV29yZFNlYXJj
aEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNaXNzcGVsbGVkV29yZFNlYXJjaEtleSBAIkFY
TWlzc3BlbGxlZFdvcmRTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxp
dHlQbGFpblRleHRTZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5UGxhaW5UZXh0U2Vh
cmNoS2V5IEAiQVhQbGFpblRleHRTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vz
c2liaWxpdHlSYWRpb0dyb3VwU2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVJhZGlv
R3JvdXBTZWFyY2hLZXkgQCJBWFJhZGlvR3JvdXBTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRl
ZiBOU0FjY2Vzc2liaWxpdHlTYW1lVHlwZVNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxp
dHlTYW1lVHlwZVNlYXJjaEtleSBAIkFYU2FtZVR5cGVTZWFyY2hLZXkiCisjZW5kaWYKKworI2lm
bmRlZiBOU0FjY2Vzc2liaWxpdHlTdGF0aWNUZXh0U2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNz
aWJpbGl0eVN0YXRpY1RleHRTZWFyY2hLZXkgQCJBWFN0YXRpY1RleHRTZWFyY2hLZXkiCisjZW5k
aWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlTdHlsZUNoYW5nZVNlYXJjaEtleQorI2RlZmlu
ZSBOU0FjY2Vzc2liaWxpdHlTdHlsZUNoYW5nZVNlYXJjaEtleSBAIkFYU3R5bGVDaGFuZ2VTZWFy
Y2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUYWJsZVNhbWVMZXZlbFNl
YXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlUYWJsZVNhbWVMZXZlbFNlYXJjaEtleSBA
IkFYVGFibGVTYW1lTGV2ZWxTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2li
aWxpdHlUYWJsZVNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlUYWJsZVNlYXJjaEtl
eSBAIkFYVGFibGVTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlU
ZXh0RmllbGRTZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VGV4dEZpZWxkU2VhcmNo
S2V5IEAiQVhUZXh0RmllbGRTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2li
aWxpdHlVbmRlcmxpbmVTZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VW5kZXJsaW5l
U2VhcmNoS2V5IEAiQVhVbmRlcmxpbmVTZWFyY2hLZXkiCisjZW5kaWYKKworI2lmbmRlZiBOU0Fj
Y2Vzc2liaWxpdHlVbnZpc2l0ZWRMaW5rU2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0
eVVudmlzaXRlZExpbmtTZWFyY2hLZXkgQCJBWFVudmlzaXRlZExpbmtTZWFyY2hLZXkiCisjZW5k
aWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlWaXNpdGVkTGlua1NlYXJjaEtleQorI2RlZmlu
ZSBOU0FjY2Vzc2liaWxpdHlWaXNpdGVkTGlua1NlYXJjaEtleSBAIkFYVmlzaXRlZExpbmtTZWFy
Y2hLZXkiCisjZW5kaWYKKworI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlUZXh0TWFya2VySXNWYWxp
ZFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgQCJBWFRleHRNYXJrZXJJc1ZhbGlkIgorI2RlZmluZSBO
U0FjY2Vzc2liaWxpdHlJbmRleEZvclRleHRNYXJrZXJQYXJhbWV0ZXJpemVkQXR0cmlidXRlIEAi
QVhJbmRleEZvclRleHRNYXJrZXIiCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJG
b3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgQCJBWFRleHRNYXJrZXJGb3JJbmRleCIKKwor
Ly8gTWF0aCBhdHRyaWJ1dGVzCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eU1hdGhSb290UmFkaWNh
bmRBdHRyaWJ1dGUgQCJBWE1hdGhSb290UmFkaWNhbmQiCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0
eU1hdGhSb290SW5kZXhBdHRyaWJ1dGUgQCJBWE1hdGhSb290SW5kZXgiCisjZGVmaW5lIE5TQWNj
ZXNzaWJpbGl0eU1hdGhGcmFjdGlvbkRlbm9taW5hdG9yQXR0cmlidXRlIEAiQVhNYXRoRnJhY3Rp
b25EZW5vbWluYXRvciIKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5TWF0aEZyYWN0aW9uTnVtZXJh
dG9yQXR0cmlidXRlIEAiQVhNYXRoRnJhY3Rpb25OdW1lcmF0b3IiCisjZGVmaW5lIE5TQWNjZXNz
aWJpbGl0eU1hdGhCYXNlQXR0cmlidXRlIEAiQVhNYXRoQmFzZSIKKyNkZWZpbmUgTlNBY2Nlc3Np
YmlsaXR5TWF0aFN1YnNjcmlwdEF0dHJpYnV0ZSBAIkFYTWF0aFN1YnNjcmlwdCIKKyNkZWZpbmUg
TlNBY2Nlc3NpYmlsaXR5TWF0aFN1cGVyc2NyaXB0QXR0cmlidXRlIEAiQVhNYXRoU3VwZXJzY3Jp
cHQiCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eU1hdGhVbmRlckF0dHJpYnV0ZSBAIkFYTWF0aFVu
ZGVyIgorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNYXRoT3ZlckF0dHJpYnV0ZSBAIkFYTWF0aE92
ZXIiCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRPcGVuQXR0cmlidXRlIEAiQVhN
YXRoRmVuY2VkT3BlbiIKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZENsb3NlQXR0
cmlidXRlIEAiQVhNYXRoRmVuY2VkQ2xvc2UiCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYworCistICh2b2lkKXVucmVnaXN0ZXJVbmlxdWVJZEZvclVJ
RWxlbWVudAoreworICAgIHdrVW5yZWdpc3RlclVuaXF1ZUlkRm9yRWxlbWVudChzZWxmKTsKK30K
KworLSAodm9pZClkZXRhY2gKK3sKKyAgICAvLyBTZW5kIHVucmVnaXN0ZXJVbmlxdWVJZEZvclVJ
RWxlbWVudCB1bmNvbmRpdGlvbmFsbHkgYmVjYXVzZSBpZiBpdCBpcworICAgIC8vIGV2ZXIgYWNj
aWRlbnRhbGx5IG5vdCBkb25lICh2aWEgb3RoZXIgYnVncyBpbiBvdXIgQVggaW1wbGVtZW50YXRp
b24pIHlvdQorICAgIC8vIGVuZCB1cCB3aXRoIGEgY3Jhc2ggbGlrZSA8cmRhcjovL3Byb2JsZW0v
NDI3MzE0OT4uICBJdCBpcyBzYWZlIGFuZCBub3QKKyAgICAvLyBleHBlbnNpdmUgdG8gc2VuZCBl
dmVuIGlmIHRoZSBvYmplY3QgaXMgbm90IHJlZ2lzdGVyZWQuCisgICAgW3NlbGYgdW5yZWdpc3Rl
clVuaXF1ZUlkRm9yVUlFbGVtZW50XTsKKyAgICBbc3VwZXIgZGV0YWNoXTsKK30KKworLSAoaWQp
YXR0YWNobWVudFZpZXcKK3sKKyAgICBBU1NFUlQobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKTsK
KyAgICBXaWRnZXQqIHdpZGdldCA9IG1fb2JqZWN0LT53aWRnZXRGb3JBdHRhY2htZW50Vmlldygp
OworICAgIGlmICghd2lkZ2V0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBOU0Fj
Y2Vzc2liaWxpdHlVbmlnbm9yZWREZXNjZW5kYW50KHdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSk7
Cit9CisKKyNwcmFnbWEgbWFyayBTeXN0ZW1JbnRlcmZhY2Ugd3JhcHBlcnMKKworc3RhdGljIGlu
bGluZSBpZCBDRkF1dG9yZWxlYXNlSGVscGVyKENGVHlwZVJlZiBvYmopCit7CisgICAgaWYgKG9i
aikKKyAgICAgICAgQ0ZNYWtlQ29sbGVjdGFibGUob2JqKTsKKyAgICBbKGlkKW9iaiBhdXRvcmVs
ZWFzZV07CisgICAgcmV0dXJuIChpZClvYmo7Cit9CisKK3N0YXRpYyBpbmxpbmUgQk9PTCBBWE9i
amVjdElzVGV4dE1hcmtlcihpZCBvYmopCit7CisgICAgcmV0dXJuIG9iaiAhPSBuaWwgJiYgQ0ZH
ZXRUeXBlSUQob2JqKSA9PSB3a0dldEFYVGV4dE1hcmtlclR5cGVJRCgpOworfQorCitzdGF0aWMg
aW5saW5lIEJPT0wgQVhPYmplY3RJc1RleHRNYXJrZXJSYW5nZShpZCBvYmopCit7CisgICAgcmV0
dXJuIG9iaiAhPSBuaWwgJiYgQ0ZHZXRUeXBlSUQob2JqKSA9PSB3a0dldEFYVGV4dE1hcmtlclJh
bmdlVHlwZUlEKCk7Cit9CisKK3N0YXRpYyBpZCBBWFRleHRNYXJrZXJSYW5nZShpZCBzdGFydE1h
cmtlciwgaWQgZW5kTWFya2VyKQoreworICAgIEFTU0VSVChzdGFydE1hcmtlciAhPSBuaWwpOwor
ICAgIEFTU0VSVChlbmRNYXJrZXIgIT0gbmlsKTsKKyAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQoc3Rh
cnRNYXJrZXIpID09IHdrR2V0QVhUZXh0TWFya2VyVHlwZUlEKCkpOworICAgIEFTU0VSVChDRkdl
dFR5cGVJRChlbmRNYXJrZXIpID09IHdrR2V0QVhUZXh0TWFya2VyVHlwZUlEKCkpOworICAgIHJl
dHVybiBDRkF1dG9yZWxlYXNlSGVscGVyKHdrQ3JlYXRlQVhUZXh0TWFya2VyUmFuZ2UoKENGVHlw
ZVJlZilzdGFydE1hcmtlciwgKENGVHlwZVJlZillbmRNYXJrZXIpKTsKK30KKworc3RhdGljIGlk
IEFYVGV4dE1hcmtlclJhbmdlU3RhcnQoaWQgcmFuZ2UpCit7CisgICAgQVNTRVJUKHJhbmdlICE9
IG5pbCk7CisgICAgQVNTRVJUKENGR2V0VHlwZUlEKHJhbmdlKSA9PSB3a0dldEFYVGV4dE1hcmtl
clJhbmdlVHlwZUlEKCkpOworICAgIHJldHVybiBDRkF1dG9yZWxlYXNlSGVscGVyKHdrQ29weUFY
VGV4dE1hcmtlclJhbmdlU3RhcnQocmFuZ2UpKTsKK30KKworc3RhdGljIGlkIEFYVGV4dE1hcmtl
clJhbmdlRW5kKGlkIHJhbmdlKQoreworICAgIEFTU0VSVChyYW5nZSAhPSBuaWwpOworICAgIEFT
U0VSVChDRkdldFR5cGVJRChyYW5nZSkgPT0gd2tHZXRBWFRleHRNYXJrZXJSYW5nZVR5cGVJRCgp
KTsKKyAgICByZXR1cm4gQ0ZBdXRvcmVsZWFzZUhlbHBlcih3a0NvcHlBWFRleHRNYXJrZXJSYW5n
ZUVuZChyYW5nZSkpOworfQorCisjcHJhZ21hIG1hcmsgU2VhcmNoIGhlbHBlcnMKKwordHlwZWRl
ZiBIYXNoTWFwPFN0cmluZywgQWNjZXNzaWJpbGl0eVNlYXJjaEtleT4gQWNjZXNzaWJpbGl0eVNl
YXJjaEtleU1hcDsKKworc3RydWN0IFNlYXJjaEtleUVudHJ5IHsKKyAgICBTdHJpbmcga2V5Owor
ICAgIEFjY2Vzc2liaWxpdHlTZWFyY2hLZXkgdmFsdWU7Cit9OworCitzdGF0aWMgQWNjZXNzaWJp
bGl0eVNlYXJjaEtleU1hcCogY3JlYXRlQWNjZXNzaWJpbGl0eVNlYXJjaEtleU1hcCgpCit7Cisg
ICAgY29uc3QgU2VhcmNoS2V5RW50cnkgc2VhcmNoS2V5c1tdID0geworICAgICAgICB7IE5TQWNj
ZXNzaWJpbGl0eUFueVR5cGVTZWFyY2hLZXksIEFueVR5cGVTZWFyY2hLZXkgfSwKKyAgICAgICAg
eyBOU0FjY2Vzc2liaWxpdHlCbG9ja3F1b3RlU2FtZUxldmVsU2VhcmNoS2V5LCBCbG9ja3F1b3Rl
U2FtZUxldmVsU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5QmxvY2txdW90
ZVNlYXJjaEtleSwgQmxvY2txdW90ZVNlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJp
bGl0eUJvbGRGb250U2VhcmNoS2V5LCBCb2xkRm9udFNlYXJjaEtleSB9LAorICAgICAgICB7IE5T
QWNjZXNzaWJpbGl0eUJ1dHRvblNlYXJjaEtleSwgQnV0dG9uU2VhcmNoS2V5IH0sCisgICAgICAg
IHsgTlNBY2Nlc3NpYmlsaXR5Q2hlY2tCb3hTZWFyY2hLZXksIENoZWNrQm94U2VhcmNoS2V5IH0s
CisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5Q29udHJvbFNlYXJjaEtleSwgQ29udHJvbFNlYXJj
aEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eURpZmZlcmVudFR5cGVTZWFyY2hLZXks
IERpZmZlcmVudFR5cGVTZWFyY2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlGb250
Q2hhbmdlU2VhcmNoS2V5LCBGb250Q2hhbmdlU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nl
c3NpYmlsaXR5Rm9udENvbG9yQ2hhbmdlU2VhcmNoS2V5LCBGb250Q29sb3JDaGFuZ2VTZWFyY2hL
ZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlGcmFtZVNlYXJjaEtleSwgRnJhbWVTZWFy
Y2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlHcmFwaGljU2VhcmNoS2V5LCBHcmFw
aGljU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsMVNl
YXJjaEtleSwgSGVhZGluZ0xldmVsMVNlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJp
bGl0eUhlYWRpbmdMZXZlbDJTZWFyY2hLZXksIEhlYWRpbmdMZXZlbDJTZWFyY2hLZXkgfSwKKyAg
ICAgICAgeyBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWwzU2VhcmNoS2V5LCBIZWFkaW5nTGV2
ZWwzU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsNFNl
YXJjaEtleSwgSGVhZGluZ0xldmVsNFNlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJp
bGl0eUhlYWRpbmdMZXZlbDVTZWFyY2hLZXksIEhlYWRpbmdMZXZlbDVTZWFyY2hLZXkgfSwKKyAg
ICAgICAgeyBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWw2U2VhcmNoS2V5LCBIZWFkaW5nTGV2
ZWw2U2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ1NhbWVMZXZl
bFNlYXJjaEtleSwgSGVhZGluZ1NhbWVMZXZlbFNlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNj
ZXNzaWJpbGl0eUhlYWRpbmdTZWFyY2hLZXksIEhlYWRpbmdTZWFyY2hLZXkgfSwKKyAgICAgICAg
eyBOU0FjY2Vzc2liaWxpdHlIaWdobGlnaHRlZFNlYXJjaEtleSwgSGlnaGxpZ2h0ZWRTZWFyY2hL
ZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlJdGFsaWNGb250U2VhcmNoS2V5LCBJdGFs
aWNGb250U2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5TGFuZG1hcmtTZWFy
Y2hLZXksIExhbmRtYXJrU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5TGlu
a1NlYXJjaEtleSwgTGlua1NlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUxp
c3RTZWFyY2hLZXksIExpc3RTZWFyY2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlM
aXZlUmVnaW9uU2VhcmNoS2V5LCBMaXZlUmVnaW9uU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNB
Y2Nlc3NpYmlsaXR5TWlzc3BlbGxlZFdvcmRTZWFyY2hLZXksIE1pc3NwZWxsZWRXb3JkU2VhcmNo
S2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5UGxhaW5UZXh0U2VhcmNoS2V5LCBQbGFp
blRleHRTZWFyY2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlSYWRpb0dyb3VwU2Vh
cmNoS2V5LCBSYWRpb0dyb3VwU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5
U2FtZVR5cGVTZWFyY2hLZXksIFNhbWVUeXBlU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nl
c3NpYmlsaXR5U3RhdGljVGV4dFNlYXJjaEtleSwgU3RhdGljVGV4dFNlYXJjaEtleSB9LAorICAg
ICAgICB7IE5TQWNjZXNzaWJpbGl0eVN0eWxlQ2hhbmdlU2VhcmNoS2V5LCBTdHlsZUNoYW5nZVNl
YXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eVRhYmxlU2FtZUxldmVsU2VhcmNo
S2V5LCBUYWJsZVNhbWVMZXZlbFNlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0
eVRhYmxlU2VhcmNoS2V5LCBUYWJsZVNlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJp
bGl0eVRleHRGaWVsZFNlYXJjaEtleSwgVGV4dEZpZWxkU2VhcmNoS2V5IH0sCisgICAgICAgIHsg
TlNBY2Nlc3NpYmlsaXR5VW5kZXJsaW5lU2VhcmNoS2V5LCBVbmRlcmxpbmVTZWFyY2hLZXkgfSwK
KyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlVbnZpc2l0ZWRMaW5rU2VhcmNoS2V5LCBVbnZpc2l0
ZWRMaW5rU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5VmlzaXRlZExpbmtT
ZWFyY2hLZXksIFZpc2l0ZWRMaW5rU2VhcmNoS2V5IH0KKyAgICB9OworICAgIAorICAgIEFjY2Vz
c2liaWxpdHlTZWFyY2hLZXlNYXAqIHNlYXJjaEtleU1hcCA9IG5ldyBBY2Nlc3NpYmlsaXR5U2Vh
cmNoS2V5TWFwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChz
ZWFyY2hLZXlzKTsgaSsrKQorICAgICAgICBzZWFyY2hLZXlNYXAtPnNldChzZWFyY2hLZXlzW2ld
LmtleSwgc2VhcmNoS2V5c1tpXS52YWx1ZSk7CisgICAgCisgICAgcmV0dXJuIHNlYXJjaEtleU1h
cDsKK30KKworc3RhdGljIEFjY2Vzc2liaWxpdHlTZWFyY2hLZXkgYWNjZXNzaWJpbGl0eVNlYXJj
aEtleUZvclN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBBbnlUeXBlU2VhcmNoS2V5OworICAgIAorICAgIHN0YXRp
YyBjb25zdCBBY2Nlc3NpYmlsaXR5U2VhcmNoS2V5TWFwKiBzZWFyY2hLZXlNYXAgPSBjcmVhdGVB
Y2Nlc3NpYmlsaXR5U2VhcmNoS2V5TWFwKCk7CisgICAgCisgICAgQWNjZXNzaWJpbGl0eVNlYXJj
aEtleSBzZWFyY2hLZXkgPSBzZWFyY2hLZXlNYXAtPmdldCh2YWx1ZSk7CisgICAgCisgICAgcmV0
dXJuIHNlYXJjaEtleSA/IHNlYXJjaEtleSA6IEFueVR5cGVTZWFyY2hLZXk7Cit9CisKKyNwcmFn
bWEgbWFyayBUZXh0IE1hcmtlciBoZWxwZXJzCisKK3N0YXRpYyBpZCB0ZXh0TWFya2VyRm9yVmlz
aWJsZVBvc2l0aW9uKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHZpc2libGVQb3MpCit7CisgICAgQVNTRVJUKGNhY2hlKTsKKyAgICAKKyAgICBUZXh0TWFya2Vy
RGF0YSB0ZXh0TWFya2VyRGF0YTsKKyAgICBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxl
UG9zaXRpb24odGV4dE1hcmtlckRhdGEsIHZpc2libGVQb3MpOworICAgIGlmICghdGV4dE1hcmtl
ckRhdGEuYXhJRCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICByZXR1cm4gQ0ZBdXRv
cmVsZWFzZUhlbHBlcih3a0NyZWF0ZUFYVGV4dE1hcmtlcigmdGV4dE1hcmtlckRhdGEsIHNpemVv
Zih0ZXh0TWFya2VyRGF0YSkpKTsKK30KKworLSAoaWQpdGV4dE1hcmtlckZvclZpc2libGVQb3Np
dGlvbjooY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpdmlzaWJsZVBvcworeworICAgIHJldHVybiB0
ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHZp
c2libGVQb3MpOworfQorCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZv
clRleHRNYXJrZXIoQVhPYmplY3RDYWNoZSogY2FjaGUsIENGVHlwZVJlZiB0ZXh0TWFya2VyKQor
eworICAgIEFTU0VSVChjYWNoZSk7CisgICAgCisgICAgaWYgKCF0ZXh0TWFya2VyKQorICAgICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtl
ckRhdGE7CisgICAgaWYgKCF3a0dldEJ5dGVzRnJvbUFYVGV4dE1hcmtlcih0ZXh0TWFya2VyLCAm
dGV4dE1hcmtlckRhdGEsIHNpemVvZih0ZXh0TWFya2VyRGF0YSkpKQorICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKCk7CisgICAgCisgICAgcmV0dXJuIGNhY2hlLT52aXNpYmxlUG9zaXRp
b25Gb3JUZXh0TWFya2VyRGF0YSh0ZXh0TWFya2VyRGF0YSk7Cit9CisKKy0gKFZpc2libGVQb3Np
dGlvbil2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOihpZCl0ZXh0TWFya2VyCit7CisgICAg
cmV0dXJuIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIobV9vYmplY3QtPmF4T2JqZWN0Q2Fj
aGUoKSwgdGV4dE1hcmtlcik7Cit9CisKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBv
c2l0aW9uRm9yU3RhcnRPZlRleHRNYXJrZXJSYW5nZShBWE9iamVjdENhY2hlICpjYWNoZSwgaWQg
dGV4dE1hcmtlclJhbmdlKQoreworICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFy
a2VyKGNhY2hlLCBBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KHRleHRNYXJrZXJSYW5nZSkpOworfQor
CitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckVuZE9mVGV4dE1hcmtl
clJhbmdlKEFYT2JqZWN0Q2FjaGUgKmNhY2hlLCBpZCB0ZXh0TWFya2VyUmFuZ2UpCit7CisgICAg
cmV0dXJuIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoY2FjaGUsIEFYVGV4dE1hcmtlclJh
bmdlRW5kKHRleHRNYXJrZXJSYW5nZSkpOworfQorCitzdGF0aWMgaWQgdGV4dE1hcmtlclJhbmdl
RnJvbU1hcmtlcnMoaWQgdGV4dE1hcmtlcjEsIGlkIHRleHRNYXJrZXIyKQoreworICAgIGlmICgh
dGV4dE1hcmtlcjEgfHwgIXRleHRNYXJrZXIyKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAor
ICAgIHJldHVybiBBWFRleHRNYXJrZXJSYW5nZSh0ZXh0TWFya2VyMSwgdGV4dE1hcmtlcjIpOwor
fQorCisvLyBXaGVuIG1vZGlmeWluZyBhdHRyaWJ1dGVkIHN0cmluZ3MsIHRoZSByYW5nZSBjYW4g
Y29tZSBmcm9tIGEgc291cmNlIHdoaWNoIG1heSBwcm92aWRlIGZhdWx0eSBpbmZvcm1hdGlvbiAo
ZS5nLiB0aGUgc3BlbGwgY2hlY2tlcikuCisvLyBUbyBwcm90ZWN0IGFnYWluc3Qgc3VjaCBjYXNl
cyB0aGUgcmFuZ2Ugc2hvdWxkIGJlIHZhbGlkYXRlZCBiZWZvcmUgYWRkaW5nIG9yIHJlbW92aW5n
IGF0dHJpYnV0ZXMuCitzdGF0aWMgQk9PTCBBWEF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzVmFsaWQo
TlNBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOU1JhbmdlIHJhbmdlKQoreworICAgIHJl
dHVybiAocmFuZ2UubG9jYXRpb24gPCBbYXR0clN0cmluZyBsZW5ndGhdICYmIE5TTWF4UmFuZ2Uo
cmFuZ2UpIDw9IFthdHRyU3RyaW5nIGxlbmd0aF0pOworfQorCitzdGF0aWMgdm9pZCBBWEF0dHJp
YnV0ZVN0cmluZ1NldEZvbnQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywg
TlNTdHJpbmcqIGF0dHJpYnV0ZSwgTlNGb250KiBmb250LCBOU1JhbmdlIHJhbmdlKQoreworICAg
IGlmICghQVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKGF0dHJTdHJpbmcsIHJhbmdlKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChmb250KSB7CisgICAgICAgIE5TRGljdGlv
bmFyeSogZGljdCA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb250IGZvbnROYW1lXSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCBOU0FjY2Vzc2liaWxpdHlGb250TmFtZUtleSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFtmb250IGZhbWlseU5hbWVdICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCBOU0FjY2Vzc2liaWxpdHlGb250RmFtaWx5S2V5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgW2ZvbnQgZGlzcGxheU5hbWVdICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIE5TQWNjZXNzaWJpbGl0eVZpc2libGVOYW1lS2V5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpbZm9udCBwb2ludFNpemVdXSAsIE5T
QWNjZXNzaWJpbGl0eUZvbnRTaXplS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmlsXTsKKyAgICAgICAgCisgICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTphdHRyaWJ1
dGUgdmFsdWU6ZGljdCByYW5nZTpyYW5nZV07CisgICAgfSBlbHNlCisgICAgICAgIFthdHRyU3Ry
aW5nIHJlbW92ZUF0dHJpYnV0ZTphdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOworICAgIAorfQorCitz
dGF0aWMgQ0dDb2xvclJlZiBDcmVhdGVDR0NvbG9ySWZEaWZmZXJlbnQoTlNDb2xvciogbnNDb2xv
ciwgQ0dDb2xvclJlZiBleGlzdGluZ0NvbG9yKQoreworICAgIC8vIGdldCBjb2xvciBpbmZvcm1h
dGlvbiBhc3N1bWluZyBOU0RldmljZVJHQkNvbG9yU3BhY2UKKyAgICBOU0NvbG9yKiByZ2JDb2xv
ciA9IFtuc0NvbG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3Bh
Y2VdOworICAgIGlmIChyZ2JDb2xvciA9PSBuaWwpCisgICAgICAgIHJnYkNvbG9yID0gW05TQ29s
b3IgYmxhY2tDb2xvcl07CisgICAgQ0dGbG9hdCBjb21wb25lbnRzWzRdOworICAgIFtyZ2JDb2xv
ciBnZXRSZWQ6JmNvbXBvbmVudHNbMF0gZ3JlZW46JmNvbXBvbmVudHNbMV0gYmx1ZTomY29tcG9u
ZW50c1syXSBhbHBoYTomY29tcG9uZW50c1szXV07CisgICAgCisgICAgLy8gY3JlYXRlIGEgbmV3
IENHQ29sb3JSZWYgdG8gcmV0dXJuCisgICAgQ0dDb2xvclNwYWNlUmVmIGNnQ29sb3JTcGFjZSA9
IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICAgIENHQ29sb3JSZWYgY2dDb2xvciA9
IENHQ29sb3JDcmVhdGUoY2dDb2xvclNwYWNlLCBjb21wb25lbnRzKTsKKyAgICBDR0NvbG9yU3Bh
Y2VSZWxlYXNlKGNnQ29sb3JTcGFjZSk7CisgICAgCisgICAgLy8gY2hlY2sgZm9yIG1hdGNoIHdp
dGggZXhpc3RpbmcgY29sb3IKKyAgICBpZiAoZXhpc3RpbmdDb2xvciAmJiBDR0NvbG9yRXF1YWxU
b0NvbG9yKGNnQ29sb3IsIGV4aXN0aW5nQ29sb3IpKSB7CisgICAgICAgIENHQ29sb3JSZWxlYXNl
KGNnQ29sb3IpOworICAgICAgICBjZ0NvbG9yID0gMDsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IGNnQ29sb3I7Cit9CisKK3N0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoTlNN
dXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywgTlNTdHJpbmcqIGF0dHJpYnV0ZSwg
TlNDb2xvciogY29sb3IsIE5TUmFuZ2UgcmFuZ2UpCit7CisgICAgaWYgKCFBWEF0dHJpYnV0ZWRT
dHJpbmdSYW5nZUlzVmFsaWQoYXR0clN0cmluZywgcmFuZ2UpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgaWYgKGNvbG9yKSB7CisgICAgICAgIENHQ29sb3JSZWYgZXhpc3RpbmdDb2xvciA9
IChDR0NvbG9yUmVmKSBbYXR0clN0cmluZyBhdHRyaWJ1dGU6YXR0cmlidXRlIGF0SW5kZXg6cmFu
Z2UubG9jYXRpb24gZWZmZWN0aXZlUmFuZ2U6bmlsXTsKKyAgICAgICAgQ0dDb2xvclJlZiBjZ0Nv
bG9yID0gQ3JlYXRlQ0dDb2xvcklmRGlmZmVyZW50KGNvbG9yLCBleGlzdGluZ0NvbG9yKTsKKyAg
ICAgICAgaWYgKGNnQ29sb3IpIHsKKyAgICAgICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0
ZTphdHRyaWJ1dGUgdmFsdWU6KGlkKWNnQ29sb3IgcmFuZ2U6cmFuZ2VdOworICAgICAgICAgICAg
Q0dDb2xvclJlbGVhc2UoY2dDb2xvcik7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAg
W2F0dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRlOmF0dHJpYnV0ZSByYW5nZTpyYW5nZV07Cit9CisK
K3N0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIE5TU3RyaW5nKiBhdHRyaWJ1dGUsIE5TTnVtYmVyKiBudW1i
ZXIsIE5TUmFuZ2UgcmFuZ2UpCit7CisgICAgaWYgKCFBWEF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlz
VmFsaWQoYXR0clN0cmluZywgcmFuZ2UpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYg
KG51bWJlcikKKyAgICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0cmlidXRlOmF0dHJpYnV0ZSB2YWx1
ZTpudW1iZXIgcmFuZ2U6cmFuZ2VdOworICAgIGVsc2UKKyAgICAgICAgW2F0dHJTdHJpbmcgcmVt
b3ZlQXR0cmlidXRlOmF0dHJpYnV0ZSByYW5nZTpyYW5nZV07Cit9CisKK3N0YXRpYyB2b2lkIEFY
QXR0cmlidXRlU3RyaW5nU2V0U3R5bGUoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0
cmluZywgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgTlNSYW5nZSByYW5nZSkKK3sKKyAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICAKKyAgICAvLyBzZXQgYmFz
aWMgZm9udCBpbmZvCisgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5T
QWNjZXNzaWJpbGl0eUZvbnRUZXh0QXR0cmlidXRlLCBzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250
KCktPmdldE5TRm9udCgpLCByYW5nZSk7CisgICAgCisgICAgLy8gc2V0IGJhc2ljIGNvbG9ycwor
ICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5
Rm9yZWdyb3VuZENvbG9yVGV4dEF0dHJpYnV0ZSwgbnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSwgcmFuZ2UpOworICAgIEFYQXR0cmlidXRlU3Ry
aW5nU2V0Q29sb3IoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5QmFja2dyb3VuZENvbG9yVGV4
dEF0dHJpYnV0ZSwgbnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5QmFja2dyb3VuZENvbG9yKSksIHJhbmdlKTsKKyAgICAKKyAgICAvLyBzZXQgc3VwZXIvc3Vi
IHNjcmlwdGluZworICAgIEVWZXJ0aWNhbEFsaWduIGFsaWdubWVudCA9IHN0eWxlLT52ZXJ0aWNh
bEFsaWduKCk7CisgICAgaWYgKGFsaWdubWVudCA9PSBTVUIpCisgICAgICAgIEFYQXR0cmlidXRl
U3RyaW5nU2V0TnVtYmVyKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eVN1cGVyc2NyaXB0VGV4
dEF0dHJpYnV0ZSwgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6KC0xKV0sIHJhbmdlKTsKKyAgICBl
bHNlIGlmIChhbGlnbm1lbnQgPT0gU1VQRVIpCisgICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0
TnVtYmVyKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eVN1cGVyc2NyaXB0VGV4dEF0dHJpYnV0
ZSwgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6MV0sIHJhbmdlKTsKKyAgICBlbHNlCisgICAgICAg
IFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlTdXBlcnNjcmlwdFRl
eHRBdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOworICAgIAorICAgIC8vIHNldCBzaGFkb3cKKyAgICBp
ZiAoc3R5bGUtPnRleHRTaGFkb3coKSkKKyAgICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1i
ZXIoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5U2hhZG93VGV4dEF0dHJpYnV0ZSwgW05TTnVt
YmVyIG51bWJlcldpdGhCb29sOllFU10sIHJhbmdlKTsKKyAgICBlbHNlCisgICAgICAgIFthdHRy
U3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlTaGFkb3dUZXh0QXR0cmlidXRl
IHJhbmdlOnJhbmdlXTsKKyAgICAKKyAgICAvLyBzZXQgdW5kZXJsaW5lIGFuZCBzdHJpa2V0aHJv
dWdoCisgICAgaW50IGRlY29yID0gc3R5bGUtPnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7Cisg
ICAgaWYgKChkZWNvciAmIFVOREVSTElORSkgPT0gMCkgeworICAgICAgICBbYXR0clN0cmluZyBy
ZW1vdmVBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5VW5kZXJsaW5lVGV4dEF0dHJpYnV0ZSByYW5n
ZTpyYW5nZV07CisgICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTpOU0FjY2Vzc2li
aWxpdHlVbmRlcmxpbmVDb2xvclRleHRBdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOworICAgIH0KKyAg
ICAKKyAgICBpZiAoKGRlY29yICYgTElORV9USFJPVUdIKSA9PSAwKSB7CisgICAgICAgIFthdHRy
U3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlTdHJpa2V0aHJvdWdoVGV4dEF0
dHJpYnV0ZSByYW5nZTpyYW5nZV07CisgICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0
ZTpOU0FjY2Vzc2liaWxpdHlTdHJpa2V0aHJvdWdoQ29sb3JUZXh0QXR0cmlidXRlIHJhbmdlOnJh
bmdlXTsKKyAgICB9CisgICAgCisgICAgaWYgKChkZWNvciAmIChVTkRFUkxJTkUgfCBMSU5FX1RI
Uk9VR0gpKSAhPSAwKSB7CisgICAgICAgIC8vIGZpbmQgY29sb3JzIHVzaW5nIHF1aXJrIG1vZGUg
YXBwcm9hY2ggKHN0cmljdCBtb2RlIHdvdWxkIHVzZSBjdXJyZW50CisgICAgICAgIC8vIGNvbG9y
IGZvciBhbGwgYnV0IHRoZSByb290IGxpbmUgYm94LCB3aGljaCB3b3VsZCB1c2UgZ2V0VGV4dERl
Y29yYXRpb25Db2xvcnMpCisgICAgICAgIENvbG9yIHVuZGVybGluZSwgb3ZlcmxpbmUsIGxpbmV0
aHJvdWdoOworICAgICAgICByZW5kZXJlci0+Z2V0VGV4dERlY29yYXRpb25Db2xvcnMoZGVjb3Is
IHVuZGVybGluZSwgb3ZlcmxpbmUsIGxpbmV0aHJvdWdoKTsKKyAgICAgICAgCisgICAgICAgIGlm
ICgoZGVjb3IgJiBVTkRFUkxJTkUpICE9IDApIHsKKyAgICAgICAgICAgIEFYQXR0cmlidXRlU3Ry
aW5nU2V0TnVtYmVyKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eVVuZGVybGluZVRleHRBdHRy
aWJ1dGUsIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCByYW5nZSk7CisgICAgICAgICAg
ICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eVVu
ZGVybGluZUNvbG9yVGV4dEF0dHJpYnV0ZSwgbnNDb2xvcih1bmRlcmxpbmUpLCByYW5nZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICgoZGVjb3IgJiBMSU5FX1RIUk9VR0gpICE9
IDApIHsKKyAgICAgICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKGF0dHJTdHJpbmcs
IE5TQWNjZXNzaWJpbGl0eVN0cmlrZXRocm91Z2hUZXh0QXR0cmlidXRlLCBbTlNOdW1iZXIgbnVt
YmVyV2l0aEJvb2w6WUVTXSwgcmFuZ2UpOworICAgICAgICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdT
ZXRDb2xvcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlTdHJpa2V0aHJvdWdoQ29sb3JUZXh0
QXR0cmlidXRlLCBuc0NvbG9yKGxpbmV0aHJvdWdoKSwgcmFuZ2UpOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIC8vIEluZGljYXRlIGJhY2tncm91bmQgaGlnaGxpZ2h0aW5nLgorICAgIGZv
ciAoTm9kZSogbm9kZSA9IHJlbmRlcmVyLT5ub2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJl
bnROb2RlKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUobWFya1RhZykpCisgICAg
ICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBAIkFYSGlnaGxp
Z2h0IiwgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIHJhbmdlKTsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0QmxvY2txdW90ZUxldmVsKE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIE5T
UmFuZ2UgcmFuZ2UpCit7CisgICAgaWYgKCFBWEF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzVmFsaWQo
YXR0clN0cmluZywgcmFuZ2UpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogb2JqID0gcmVuZGVyZXItPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+
Z2V0T3JDcmVhdGUocmVuZGVyZXIpOworICAgIGludCBxdW90ZUxldmVsID0gb2JqLT5ibG9ja3F1
b3RlTGV2ZWwoKTsKKyAgICAKKyAgICBpZiAocXVvdGVMZXZlbCkKKyAgICAgICAgW2F0dHJTdHJp
bmcgYWRkQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eUJsb2NrUXVvdGVMZXZlbEF0dHJpYnV0ZSB2
YWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpxdW90ZUxldmVsXSByYW5nZTpyYW5nZV07Cisg
ICAgZWxzZQorICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6TlNBY2Nlc3NpYmls
aXR5QmxvY2tRdW90ZUxldmVsQXR0cmlidXRlIHJhbmdlOnJhbmdlXTsKK30KKworc3RhdGljIHZv
aWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTcGVsbGluZyhOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5n
KiBhdHRyU3RyaW5nLCBOb2RlKiBub2RlLCBjb25zdCBVQ2hhciogY2hhcnMsIGludCBjaGFyTGVu
Z3RoLCBOU1JhbmdlIHJhbmdlKQoreworICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVk
KG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpKSB7CisgICAgICAgIC8vIENoZWNrIHRoZSBzcGVs
bGluZyBkaXJlY3RseSBzaW5jZSBkb2N1bWVudC0+bWFya2Vyc0Zvck5vZGUoKSBkb2VzIG5vdCBz
dG9yZSB0aGUgbWlzc3BlbGxlZCBtYXJraW5nIHdoZW4gdGhlIGN1cnNvciBpcyBpbiBhIHdvcmQu
CisgICAgICAgIFRleHRDaGVja2VyQ2xpZW50KiBjaGVja2VyID0gbm9kZS0+ZG9jdW1lbnQoKS0+
ZnJhbWUoKS0+ZWRpdG9yKCktPnRleHRDaGVja2VyKCk7CisgICAgICAgIAorICAgICAgICAvLyBj
aGVja1RleHRPZlBhcmFncmFwaCBpcyB0aGUgb25seSBzcGVsbGluZy9ncmFtbWFyIGNoZWNrZXIg
aW1wbGVtZW50ZWQgaW4gV0sxIGFuZCBXSzIKKyAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jl
c3VsdD4gcmVzdWx0czsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY2hlY2tlciwgY2hh
cnMsIGNoYXJMZW5ndGgsIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZywgcmVzdWx0cyk7CisgICAg
ICAgIAorICAgICAgICBzaXplX3Qgc2l6ZSA9IHJlc3VsdHMuc2l6ZSgpOworICAgICAgICBOU051
bWJlciogdHJ1ZVZhbHVlID0gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU107CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIGNvbnN0
IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0ID0gcmVzdWx0c1tpXTsKKyAgICAgICAgICAgIEFY
QXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eU1pc3Nw
ZWxsZWRUZXh0QXR0cmlidXRlLCB0cnVlVmFsdWUsIE5TTWFrZVJhbmdlKHJlc3VsdC5sb2NhdGlv
biArIHJhbmdlLmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpbnQgY3VycmVudFBvc2l0aW9uID0gMDsKKyAgICB3
aGlsZSAoY2hhckxlbmd0aCA+IDApIHsKKyAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJEYXRhID0g
Y2hhcnMgKyBjdXJyZW50UG9zaXRpb247CisgICAgICAgIFRleHRDaGVja2VyQ2xpZW50KiBjaGVj
a2VyID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnRleHRDaGVja2VyKCk7
CisgICAgICAgIAorICAgICAgICBpbnQgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOworICAgICAg
ICBpbnQgbWlzc3BlbGxpbmdMZW5ndGggPSAwOworICAgICAgICBjaGVja2VyLT5jaGVja1NwZWxs
aW5nT2ZTdHJpbmcoY2hhckRhdGEsIGNoYXJMZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAm
bWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICBpZiAobWlzc3BlbGxpbmdMb2NhdGlvbiA9PSAt
MSB8fCAhbWlzc3BlbGxpbmdMZW5ndGgpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisg
ICAgICAgIE5TUmFuZ2Ugc3BlbGxSYW5nZSA9IE5TTWFrZVJhbmdlKHJhbmdlLmxvY2F0aW9uICsg
Y3VycmVudFBvc2l0aW9uICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgp
OworICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vz
c2liaWxpdHlNaXNzcGVsbGVkVGV4dEF0dHJpYnV0ZSwgW05TTnVtYmVyIG51bWJlcldpdGhCb29s
OllFU10sIHNwZWxsUmFuZ2UpOworICAgICAgICBjaGFyTGVuZ3RoIC09IChtaXNzcGVsbGluZ0xv
Y2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICBjdXJyZW50UG9zaXRpb24gKz0g
KG1pc3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldEhlYWRpbmdMZXZlbChOU011dGFibGVBdHRy
aWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBOU1Jhbmdl
IHJhbmdlKQoreworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBpZiAoIUFYQXR0cmlidXRlZFN0cmluZ1JhbmdlSXNWYWxpZChhdHRyU3RyaW5nLCByYW5nZSkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBTb21ldGltZXMgdGhlcmUgYXJlIG9iamVj
dHMgYmV0d2VlbiB0aGUgdGV4dCBhbmQgdGhlIGhlYWRpbmcuCisgICAgLy8gSW4gdGhvc2UgY2Fz
ZXMgdGhlIHBhcmVudCBoaWVyYXJjaHkgc2hvdWxkIGJlIHF1ZXJpZWQgdG8gc2VlIGlmIHRoZXJl
IGlzIGEgaGVhZGluZyBsZXZlbC4KKyAgICBpbnQgcGFyZW50SGVhZGluZ0xldmVsID0gMDsKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnRPYmplY3QgPSByZW5kZXJlci0+ZG9jdW1lbnQo
KS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZW5kZXJlci0+cGFyZW50KCkpOworICAg
IGZvciAoOyBwYXJlbnRPYmplY3Q7IHBhcmVudE9iamVjdCA9IHBhcmVudE9iamVjdC0+cGFyZW50
T2JqZWN0KCkpIHsKKyAgICAgICAgcGFyZW50SGVhZGluZ0xldmVsID0gcGFyZW50T2JqZWN0LT5o
ZWFkaW5nTGV2ZWwoKTsKKyAgICAgICAgaWYgKHBhcmVudEhlYWRpbmdMZXZlbCkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBpZiAocGFyZW50SGVhZGluZ0xldmVsKQorICAg
ICAgICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6QCJBWEhlYWRpbmdMZXZlbCIgdmFsdWU6W05T
TnVtYmVyIG51bWJlcldpdGhJbnQ6cGFyZW50SGVhZGluZ0xldmVsXSByYW5nZTpyYW5nZV07Cisg
ICAgZWxzZQorICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6QCJBWEhlYWRpbmdM
ZXZlbCIgcmFuZ2U6cmFuZ2VdOworfQorCitzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1Nl
dEVsZW1lbnQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywgTlNTdHJpbmcq
IGF0dHJpYnV0ZSwgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBOU1JhbmdlIHJhbmdlKQor
eworICAgIGlmICghQVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKGF0dHJTdHJpbmcsIHJh
bmdlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LT5p
c0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgeworICAgICAgICAvLyBtYWtlIGEgc2VyaWFs
aXphYmxlIEFYIG9iamVjdAorICAgICAgICAKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqPihvYmplY3QpLT5yZW5k
ZXJlcigpOworICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgRG9jdW1lbnQqIGRvYyA9IHJlbmRlcmVyLT5kb2N1bWVudCgpOworICAg
ICAgICBpZiAoIWRvYykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFY
T2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jLT5heE9iamVjdENhY2hlKCk7CisgICAgICAgIGlmICgh
Y2FjaGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBBWFVJRWxlbWVu
dFJlZiBheEVsZW1lbnQgPSB3a0NyZWF0ZUFYVUlFbGVtZW50UmVmKG9iamVjdC0+d3JhcHBlcigp
KTsKKyAgICAgICAgaWYgKGF4RWxlbWVudCkgeworICAgICAgICAgICAgW2F0dHJTdHJpbmcgYWRk
QXR0cmlidXRlOmF0dHJpYnV0ZSB2YWx1ZTooaWQpYXhFbGVtZW50IHJhbmdlOnJhbmdlXTsKKyAg
ICAgICAgICAgIENGUmVsZWFzZShheEVsZW1lbnQpOworICAgICAgICB9CisgICAgfSBlbHNlCisg
ICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTphdHRyaWJ1dGUgcmFuZ2U6cmFuZ2Vd
OworfQorCitzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIE5vZGUqIG5vZGUsIGNvbnN0IFVDaGFyKiBj
aGFycywgaW50IGxlbmd0aCkKK3sKKyAgICAvLyBza2lwIGludmlzaWJsZSB0ZXh0CisgICAgaWYg
KCFub2RlLT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gZWFzaWVy
IHRvIGNhbGN1bGF0ZSB0aGUgcmFuZ2UgYmVmb3JlIGFwcGVuZGluZyB0aGUgc3RyaW5nCisgICAg
TlNSYW5nZSBhdHRyU3RyaW5nUmFuZ2UgPSBOU01ha2VSYW5nZShbYXR0clN0cmluZyBsZW5ndGhd
LCBsZW5ndGgpOworICAgIAorICAgIC8vIGFwcGVuZCB0aGUgc3RyaW5nIGZyb20gdGhpcyBub2Rl
CisgICAgW1thdHRyU3RyaW5nIG11dGFibGVTdHJpbmddIGFwcGVuZFN0cmluZzpbTlNTdHJpbmcg
c3RyaW5nV2l0aENoYXJhY3RlcnM6Y2hhcnMgbGVuZ3RoOmxlbmd0aF1dOworICAgIAorICAgIC8v
IGFkZCBuZXcgYXR0cmlidXRlcyBhbmQgcmVtb3ZlIGlycmVsZXZhbnQgaW5oZXJpdGVkIG9uZXMK
KyAgICAvLyBOT1RFOiBjb2xvciBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBiZWNh
dXNlIC1bTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1dGU6IHZhbHVlOiByYW5n
ZTpdIGRvZXMgbm90IG1lcmdlCisgICAgLy8gaWRlbnRpY2FsIGNvbG9ycy4gIFdvcmthcm91bmQg
aXMgdG8gbm90IHJlcGxhY2UgYW4gZXhpc3RpbmcgY29sb3IgYXR0cmlidXRlIGlmIGl0IG1hdGNo
ZXMgd2hhdCB3ZSBhcmUgYWRkaW5nLiAgVGhpcyBhbHNvIG1lYW5zCisgICAgLy8gd2UgY2Fubm90
IGp1c3QgcHJlLXJlbW92ZSBhbGwgaW5oZXJpdGVkIGF0dHJpYnV0ZXMgb24gdGhlIGFwcGVuZGVk
IHN0cmluZywgc28gd2UgaGF2ZSB0byByZW1vdmUgdGhlIGlycmVsZXZhbnQgb25lcyBpbmRpdmlk
dWFsbHkuCisgICAgCisgICAgLy8gcmVtb3ZlIGluaGVyaXRlZCBhdHRhY2htZW50IGZyb20gcHJp
b3IgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kUmVwbGFjZWQKKyAgICBbYXR0clN0cmluZyByZW1v
dmVBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5QXR0YWNobWVudFRleHRBdHRyaWJ1dGUgcmFuZ2U6
YXR0clN0cmluZ1JhbmdlXTsKKyAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6TlNBY2Nl
c3NpYmlsaXR5TWlzc3BlbGxlZFRleHRBdHRyaWJ1dGUgcmFuZ2U6YXR0clN0cmluZ1JhbmdlXTsK
KyAgICAKKyAgICAvLyBzZXQgbmV3IGF0dHJpYnV0ZXMKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1Nl
dFN0eWxlKGF0dHJTdHJpbmcsIG5vZGUtPnJlbmRlcmVyKCksIGF0dHJTdHJpbmdSYW5nZSk7Cisg
ICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRIZWFkaW5nTGV2ZWwoYXR0clN0cmluZywgbm9kZS0+cmVu
ZGVyZXIoKSwgYXR0clN0cmluZ1JhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEJsb2Nr
cXVvdGVMZXZlbChhdHRyU3RyaW5nLCBub2RlLT5yZW5kZXJlcigpLCBhdHRyU3RyaW5nUmFuZ2Up
OworICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0RWxlbWVudChhdHRyU3RyaW5nLCBOU0FjY2Vzc2li
aWxpdHlMaW5rVGV4dEF0dHJpYnV0ZSwgQWNjZXNzaWJpbGl0eU9iamVjdDo6YW5jaG9yRWxlbWVu
dEZvck5vZGUobm9kZSksIGF0dHJTdHJpbmdSYW5nZSk7CisgICAgCisgICAgLy8gZG8gc3BlbGxp
bmcgbGFzdCBiZWNhdXNlIGl0IHRlbmRzIHRvIGJyZWFrIHVwIHRoZSByYW5nZQorICAgIEFYQXR0
cmlidXRlU3RyaW5nU2V0U3BlbGxpbmcoYXR0clN0cmluZywgbm9kZSwgY2hhcnMsIGxlbmd0aCwg
YXR0clN0cmluZ1JhbmdlKTsKK30KKworc3RhdGljIE5TU3RyaW5nKiBuc1N0cmluZ0ZvclJlcGxh
Y2VkTm9kZShOb2RlKiByZXBsYWNlZE5vZGUpCit7CisgICAgLy8gd2Ugc2hvdWxkIGFsd2F5cyBi
ZSBnaXZlbiBhIHJlbmRlcmVkIG5vZGUgYW5kIGEgcmVwbGFjZWQgbm9kZSwgYnV0IGJlIHNhZmUK
KyAgICAvLyByZXBsYWNlZCBub2RlcyBhcmUgZWl0aGVyIGF0dGFjaG1lbnRzICh3aWRnZXRzKSBv
ciBpbWFnZXMKKyAgICBpZiAoIXJlcGxhY2VkTm9kZSB8fCAhcmVwbGFjZWROb2RlLT5yZW5kZXJl
cigpIHx8ICFyZXBsYWNlZE5vZGUtPnJlbmRlcmVyKCktPmlzUmVwbGFjZWQoKSB8fCByZXBsYWNl
ZE5vZGUtPmlzVGV4dE5vZGUoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgCisgICAgLy8gY3JlYXRlIGFuIEFYIG9iamVj
dCwgYnV0IHNraXAgaXQgaWYgaXQgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHNlZW4KKyAgICBSZWZQ
dHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqID0gcmVwbGFjZWROb2RlLT5yZW5kZXJlcigpLT5k
b2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlcGxhY2VkTm9kZS0+cmVu
ZGVyZXIoKSk7CisgICAgaWYgKG9iai0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIAorICAgIC8vIHVzZSB0aGUgYXR0YWNobWVudENoYXJhY3RlciB0
byByZXByZXNlbnQgdGhlIHJlcGxhY2VkIG5vZGUKKyAgICBjb25zdCBVbmlDaGFyIGF0dGFjaG1l
bnRDaGFyID0gTlNBdHRhY2htZW50Q2hhcmFjdGVyOworICAgIHJldHVybiBbTlNTdHJpbmcgc3Ry
aW5nV2l0aENoYXJhY3RlcnM6JmF0dGFjaG1lbnRDaGFyIGxlbmd0aDoxXTsKK30KKworLSAoTlNB
dHRyaWJ1dGVkU3RyaW5nKilkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZToo
aWQpdGV4dE1hcmtlclJhbmdlCit7CisgICAgaWYgKCFtX29iamVjdCkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAKKyAgICAvLyBleHRyYWN0IHRoZSBzdGFydCBhbmQgZW5kIFZpc2libGVQb3Np
dGlvbgorICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlvbiA9IHZpc2libGVQ
b3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2UobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUo
KSwgdGV4dE1hcmtlclJhbmdlKTsKKyAgICBpZiAoc3RhcnRWaXNpYmxlUG9zaXRpb24uaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFZp
c2libGVQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKG1f
b2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXJSYW5nZSk7CisgICAgaWYgKGVuZFZp
c2libGVQb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBW
aXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZShzdGFydFZpc2libGVQb3Np
dGlvbiwgZW5kVmlzaWJsZVBvc2l0aW9uKTsKKyAgICAvLyBpdGVyYXRlIG92ZXIgdGhlIHJhbmdl
IHRvIGJ1aWxkIHRoZSBBWCBhdHRyaWJ1dGVkIHN0cmluZworICAgIE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcqIGF0dHJTdHJpbmcgPSBbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2Nd
IGluaXRdOworICAgIFRleHRJdGVyYXRvciBpdChtYWtlUmFuZ2Uoc3RhcnRWaXNpYmxlUG9zaXRp
b24sIGVuZFZpc2libGVQb3NpdGlvbikuZ2V0KCkpOworICAgIHdoaWxlICghaXQuYXRFbmQoKSkg
eworICAgICAgICAvLyBsb2NhdGUgdGhlIG5vZGUgYW5kIHN0YXJ0aW5nIG9mZnNldCBmb3IgdGhp
cyByYW5nZQorICAgICAgICBpbnQgZXhjZXB0aW9uID0gMDsKKyAgICAgICAgTm9kZSogbm9kZSA9
IGl0LnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbik7CisgICAgICAgIEFTU0VSVChu
b2RlID09IGl0LnJhbmdlKCktPmVuZENvbnRhaW5lcihleGNlcHRpb24pKTsKKyAgICAgICAgaW50
IG9mZnNldCA9IGl0LnJhbmdlKCktPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbik7CisgICAgICAgIAor
ICAgICAgICAvLyBub24temVybyBsZW5ndGggbWVhbnMgdGV4dHVhbCBub2RlLCB6ZXJvIGxlbmd0
aCBtZWFucyByZXBsYWNlZCBub2RlIChBS0EgImF0dGFjaG1lbnRzIiBpbiBBWCkKKyAgICAgICAg
aWYgKGl0Lmxlbmd0aCgpICE9IDApIHsKKyAgICAgICAgICAgIC8vIEFkZCB0aGUgdGV4dCBvZiB0
aGUgbGlzdCBtYXJrZXIgaXRlbSBpZiBuZWNlc3NhcnkuCisgICAgICAgICAgICBTdHJpbmcgbGlz
dE1hcmtlclRleHQgPSBtX29iamVjdC0+bGlzdE1hcmtlclRleHRGb3JOb2RlQW5kUG9zaXRpb24o
bm9kZSwgVmlzaWJsZVBvc2l0aW9uKGl0LnJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKSkpOworICAg
ICAgICAgICAgaWYgKCFsaXN0TWFya2VyVGV4dC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
QVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChhdHRyU3RyaW5nLCBub2RlLCBsaXN0TWFya2Vy
VGV4dC5jaGFyYWN0ZXJzKCksIGxpc3RNYXJrZXJUZXh0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChhdHRyU3RyaW5nLCBu
b2RlLCBpdC5jaGFyYWN0ZXJzKCksIGl0Lmxlbmd0aCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIE5vZGUqIHJlcGxhY2VkTm9kZSA9IG5vZGUtPmNoaWxkTm9kZShvZmZzZXQpOwor
ICAgICAgICAgICAgTlNTdHJpbmcgKmF0dGFjaG1lbnRTdHJpbmcgPSBuc1N0cmluZ0ZvclJlcGxh
Y2VkTm9kZShyZXBsYWNlZE5vZGUpOworICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRTdHJpbmcp
IHsKKyAgICAgICAgICAgICAgICBOU1JhbmdlIGF0dHJTdHJpbmdSYW5nZSA9IE5TTWFrZVJhbmdl
KFthdHRyU3RyaW5nIGxlbmd0aF0sIFthdHRhY2htZW50U3RyaW5nIGxlbmd0aF0pOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIGFwcGVuZCB0aGUgcGxhY2Vob2xkZXIgc3Ry
aW5nCisgICAgICAgICAgICAgICAgW1thdHRyU3RyaW5nIG11dGFibGVTdHJpbmddIGFwcGVuZFN0
cmluZzphdHRhY2htZW50U3RyaW5nXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyByZW1vdmUgYWxsIGluaGVyaXRlZCBhdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgW2F0
dHJTdHJpbmcgc2V0QXR0cmlidXRlczpuaWwgcmFuZ2U6YXR0clN0cmluZ1JhbmdlXTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIGF0dGFjaG1lbnQgYXR0cmli
dXRlCisgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gcmVwbGFjZWRO
b2RlLT5yZW5kZXJlcigpLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRl
KHJlcGxhY2VkTm9kZS0+cmVuZGVyZXIoKSk7CisgICAgICAgICAgICAgICAgQVhBdHRyaWJ1dGVT
dHJpbmdTZXRFbGVtZW50KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUF0dGFjaG1lbnRUZXh0
QXR0cmlidXRlLCBvYmosIGF0dHJTdHJpbmdSYW5nZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaXQuYWR2YW5jZSgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gW2F0dHJT
dHJpbmcgYXV0b3JlbGVhc2VdOworfQorCitzdGF0aWMgaWQgdGV4dE1hcmtlclJhbmdlRnJvbVZp
c2libGVQb3NpdGlvbnMoQVhPYmplY3RDYWNoZSAqY2FjaGUsIFZpc2libGVQb3NpdGlvbiBzdGFy
dFBvc2l0aW9uLCBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24pCit7CisgICAgaWQgc3RhcnRU
ZXh0TWFya2VyID0gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihjYWNoZSwgc3RhcnRQb3Np
dGlvbik7CisgICAgaWQgZW5kVGV4dE1hcmtlciA9IHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRp
b24oY2FjaGUsIGVuZFBvc2l0aW9uKTsKKyAgICByZXR1cm4gdGV4dE1hcmtlclJhbmdlRnJvbU1h
cmtlcnMoc3RhcnRUZXh0TWFya2VyLCBlbmRUZXh0TWFya2VyKTsKK30KKworLSAoaWQpdGV4dE1h
cmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6KFZpc2libGVQb3NpdGlvbilzdGFydFBvc2l0
aW9uIGVuZFBvc2l0aW9uOihWaXNpYmxlUG9zaXRpb24pZW5kUG9zaXRpb24KK3sKKyAgICByZXR1
cm4gdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMobV9vYmplY3QtPmF4T2JqZWN0
Q2FjaGUoKSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworfQorCistIChOU0FycmF5Kilh
Y2Nlc3NpYmlsaXR5QWN0aW9uTmFtZXMKK3sKKyAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJh
Y2tpbmdTdG9yZV0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgc3RhdGljIE5TQXJy
YXkqIGFjdGlvbkVsZW1lbnRBY3Rpb25zID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVj
dHM6IE5TQWNjZXNzaWJpbGl0eVByZXNzQWN0aW9uLCBOU0FjY2Vzc2liaWxpdHlTaG93TWVudUFj
dGlvbiwgbmlsXTsKKyAgICBzdGF0aWMgTlNBcnJheSogZGVmYXVsdEVsZW1lbnRBY3Rpb25zID0g
W1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6IE5TQWNjZXNzaWJpbGl0eVNob3dNZW51
QWN0aW9uLCBuaWxdOworICAgIHN0YXRpYyBOU0FycmF5KiBtZW51RWxlbWVudEFjdGlvbnMgPSBb
W05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czogTlNBY2Nlc3NpYmlsaXR5Q2FuY2VsQWN0
aW9uLCBOU0FjY2Vzc2liaWxpdHlQcmVzc0FjdGlvbiwgbmlsXTsKKyAgICBzdGF0aWMgTlNBcnJh
eSogc2xpZGVyQWN0aW9ucyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOiBOU0Fj
Y2Vzc2liaWxpdHlJbmNyZW1lbnRBY3Rpb24sIE5TQWNjZXNzaWJpbGl0eURlY3JlbWVudEFjdGlv
biwgbmlsXTsKKyAgICAKKyAgICBOU0FycmF5ICphY3Rpb25zOworICAgIGlmIChtX29iamVjdC0+
YWN0aW9uRWxlbWVudCgpIHx8IG1fb2JqZWN0LT5pc0J1dHRvbigpKQorICAgICAgICBhY3Rpb25z
ID0gYWN0aW9uRWxlbWVudEFjdGlvbnM7CisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTWVudVJl
bGF0ZWQoKSkKKyAgICAgICAgYWN0aW9ucyA9IG1lbnVFbGVtZW50QWN0aW9uczsKKyAgICBlbHNl
IGlmIChtX29iamVjdC0+aXNTbGlkZXIoKSkKKyAgICAgICAgYWN0aW9ucyA9IHNsaWRlckFjdGlv
bnM7CisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKQorICAgICAgICBhY3Rp
b25zID0gW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QWN0aW9uTmFtZXNdOwor
ICAgIGVsc2UKKyAgICAgICAgYWN0aW9ucyA9IGRlZmF1bHRFbGVtZW50QWN0aW9uczsKKyAgICAK
KyAgICByZXR1cm4gYWN0aW9uczsKK30KKworLSAoTlNBcnJheSopYWRkaXRpb25hbEFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVOYW1lcworeworICAgIGlmICghbV9vYmplY3QpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgCisgICAgTlNNdXRhYmxlQXJyYXkgKmFkZGl0aW9uYWwgPSBbTlNNdXRhYmxl
QXJyYXkgYXJyYXldOworICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNBUklBT3ducygpKQorICAg
ICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5T3duc0F0dHJpYnV0ZV07
CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c0FSSUFFeHBhbmRlZCgpKQorICAgICAg
ICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RXhwYW5kZWRBdHRyaWJ1dGVd
OworICAgIAorICAgIGlmIChtX29iamVjdC0+aXNTY3JvbGxiYXIoKSkKKyAgICAgICAgW2FkZGl0
aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uQXR0cmlidXRlXTsKKyAg
ICAKKyAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzQVJJQURyYWdnaW5nKCkpCisgICAgICAgIFth
ZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlHcmFiYmVkQXR0cmlidXRlXTsKKyAg
ICAKKyAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzQVJJQURyb3BwaW5nKCkpCisgICAgICAgIFth
ZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlEcm9wRWZmZWN0c0F0dHJpYnV0ZV07
CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlUYWJsZSgpICYmIHN0YXRp
Y19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KG1fb2JqZWN0KS0+c3VwcG9ydHNTZWxlY3RlZFJv
d3MoKSkKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNlbGVj
dGVkUm93c0F0dHJpYnV0ZV07CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c0FSSUFM
aXZlUmVnaW9uKCkpIHsKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJp
bGl0eUFSSUFMaXZlQXR0cmlidXRlXTsKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eUFSSUFSZWxldmFudEF0dHJpYnV0ZV07CisgICAgfQorICAgIAorICAgIGlm
IChtX29iamVjdC0+c29ydERpcmVjdGlvbigpICE9IFNvcnREaXJlY3Rpb25Ob25lKQorICAgICAg
ICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbkF0dHJp
YnV0ZV07CisgICAgCisgICAgLy8gSWYgYW4gb2JqZWN0IGlzIGEgY2hpbGQgb2YgYSBsaXZlIHJl
Z2lvbiwgdGhlbiBhZGQgdGhlc2UKKyAgICBpZiAobV9vYmplY3QtPmlzSW5zaWRlQVJJQUxpdmVS
ZWdpb24oKSkKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUFS
SUFBdG9taWNBdHRyaWJ1dGVdOworICAgIC8vIEFsbCBvYmplY3RzIHNob3VsZCBleHBvc2UgdGhl
IEFSSUEgYnVzeSBhdHRyaWJ1dGUgKEFSSUEgMS4xIHdpdGggSVNTVUUtNTM4KS4KKyAgICBbYWRk
aXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5QVJJQUJ1c3lBdHRyaWJ1dGVdOworICAg
IAorICAgIC8vIFBvcHVwIGJ1dHRvbnMgb24gdGhlIE1hYyBleHBvc2UgdGhlIHZhbHVlIGF0dHJp
YnV0ZS4KKyAgICBpZiAobV9vYmplY3QtPmlzUG9wVXBCdXR0b24oKSkKKyAgICAgICAgW2FkZGl0
aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXTsKKyAgICAKKyAg
ICBpZiAobV9vYmplY3QtPmFyaWFIYXNQb3B1cCgpKQorICAgICAgICBbYWRkaXRpb25hbCBhZGRP
YmplY3Q6TlNBY2Nlc3NpYmlsaXR5SGFzUG9wdXBBdHRyaWJ1dGVdOworICAgIAorICAgIGlmICht
X29iamVjdC0+aXNNYXRoUm9vdCgpKSB7CisgICAgICAgIC8vIFRoZSBpbmRleCBvZiBhIHNxdWFy
ZSByb290IGlzIGFsd2F5cyBrbm93biwgc28gdGhlcmUncyBubyBvYmplY3QgYXNzb2NpYXRlZCB3
aXRoIGl0LgorICAgICAgICBpZiAoIW1fb2JqZWN0LT5pc01hdGhTcXVhcmVSb290KCkpCisgICAg
ICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFJvb3RJbmRl
eEF0dHJpYnV0ZV07CisgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxp
dHlNYXRoUm9vdFJhZGljYW5kQXR0cmlidXRlXTsKKyAgICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5p
c01hdGhGcmFjdGlvbigpKSB7CisgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vz
c2liaWxpdHlNYXRoRnJhY3Rpb25OdW1lcmF0b3JBdHRyaWJ1dGVdOworICAgICAgICBbYWRkaXRp
b25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aEZyYWN0aW9uRGVub21pbmF0b3JBdHRy
aWJ1dGVdOworICAgIH0gZWxzZSBpZiAobV9vYmplY3QtPmlzTWF0aFN1YnNjcmlwdFN1cGVyc2Ny
aXB0KCkpIHsKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1h
dGhCYXNlQXR0cmlidXRlXTsKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eU1hdGhTdWJzY3JpcHRBdHRyaWJ1dGVdOworICAgICAgICBbYWRkaXRpb25hbCBhZGRP
YmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFN1cGVyc2NyaXB0QXR0cmlidXRlXTsKKyAgICB9IGVs
c2UgaWYgKG1fb2JqZWN0LT5pc01hdGhVbmRlck92ZXIoKSkgeworICAgICAgICBbYWRkaXRpb25h
bCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aEJhc2VBdHRyaWJ1dGVdOworICAgICAgICBb
YWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFVuZGVyQXR0cmlidXRlXTsK
KyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhPdmVyQXR0
cmlidXRlXTsKKyAgICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5pc01hdGhGZW5jZWQoKSkgeworICAg
ICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZE9wZW5B
dHRyaWJ1dGVdOworICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
TWF0aEZlbmNlZENsb3NlQXR0cmlidXRlXTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGFkZGl0
aW9uYWw7Cit9CisKKy0gKE5TQXJyYXkqKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcworewor
ICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKQorICAgICAgICBy
ZXR1cm4gW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNd
OworICAgIAorICAgIHN0YXRpYyBOU0FycmF5KiBhdHRyaWJ1dGVzID0gbmlsOworICAgIHN0YXRp
YyBOU0FycmF5KiBhbmNob3JBdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogd2ViQXJl
YUF0dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5KiB0ZXh0QXR0cnMgPSBuaWw7CisgICAg
c3RhdGljIE5TQXJyYXkqIGxpc3RBdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogbGlz
dEJveEF0dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5KiByYW5nZUF0dHJzID0gbmlsOwor
ICAgIHN0YXRpYyBOU0FycmF5KiBjb21tb25NZW51QXR0cnMgPSBuaWw7CisgICAgc3RhdGljIE5T
QXJyYXkqIG1lbnVBdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogbWVudUJhckF0dHJz
ID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5KiBtZW51SXRlbUF0dHJzID0gbmlsOworICAgIHN0
YXRpYyBOU0FycmF5KiBtZW51QnV0dG9uQXR0cnMgPSBuaWw7CisgICAgc3RhdGljIE5TQXJyYXkq
IGNvbnRyb2xBdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogdGFibGVBdHRycyA9IG5p
bDsKKyAgICBzdGF0aWMgTlNBcnJheSogdGFibGVSb3dBdHRycyA9IG5pbDsKKyAgICBzdGF0aWMg
TlNBcnJheSogdGFibGVDb2xBdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogdGFibGVD
ZWxsQXR0cnMgPSBuaWw7CisgICAgc3RhdGljIE5TQXJyYXkqIGdyb3VwQXR0cnMgPSBuaWw7Cisg
ICAgc3RhdGljIE5TQXJyYXkqIGlucHV0SW1hZ2VBdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNB
cnJheSogcGFzc3dvcmRGaWVsZEF0dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5KiB0YWJM
aXN0QXR0cnMgPSBuaWw7CisgICAgc3RhdGljIE5TQXJyYXkqIGNvbWJvQm94QXR0cnMgPSBuaWw7
CisgICAgc3RhdGljIE5TQXJyYXkqIG91dGxpbmVBdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNB
cnJheSogb3V0bGluZVJvd0F0dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5KiBidXR0b25B
dHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogc2Nyb2xsVmlld0F0dHJzID0gbmlsOwor
ICAgIHN0YXRpYyBOU0FycmF5KiBpbmNyZW1lbnRvckF0dHJzID0gbmlsOworICAgIE5TTXV0YWJs
ZUFycmF5KiB0ZW1wQXJyYXk7CisgICAgaWYgKGF0dHJpYnV0ZXMgPT0gbmlsKSB7CisgICAgICAg
IGF0dHJpYnV0ZXMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czogTlNBY2Nlc3Np
YmlsaXR5Um9sZUF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxp
dHlTdWJyb2xlQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0
eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vz
c2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vz
c2liaWxpdHlIZWxwQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJp
bGl0eVBhcmVudEF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxp
dHlQb3NpdGlvbkF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxp
dHlTaXplQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVRp
dGxlQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eURlc2Ny
aXB0aW9uQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVZh
bHVlQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUZvY3Vz
ZWRBdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5RW5hYmxl
ZEF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlXaW5kb3dB
dHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWFNlbGVjdGVkVGV4dE1hcmtlclJh
bmdlIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYU3RhcnRUZXh0TWFya2VyIiwKKyAgICAg
ICAgICAgICAgICAgICAgICBAIkFYRW5kVGV4dE1hcmtlciIsCisgICAgICAgICAgICAgICAgICAg
ICAgQCJBWFZpc2l0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUxp
bmtlZFVJRWxlbWVudHNBdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3Np
YmlsaXR5U2VsZWN0ZWRBdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3Np
YmlsaXR5QmxvY2tRdW90ZUxldmVsQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgIE5T
QWNjZXNzaWJpbGl0eVRvcExldmVsVUlFbGVtZW50QXR0cmlidXRlLAorICAgICAgICAgICAgICAg
ICAgICAgIG5pbF07CisgICAgfQorICAgIGlmIChjb21tb25NZW51QXR0cnMgPT0gbmlsKSB7Cisg
ICAgICAgIGNvbW1vbk1lbnVBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3Rz
OiBOU0FjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0cmlidXRlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlQYXJlbnRBdHRyaWJ1dGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1
dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlTaXplQXR0cmli
dXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsXTsKKyAgICB9CisgICAgaWYgKGFu
Y2hvckF0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOworICAgICAgICBbdGVtcEFycmF5IGFk
ZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlVUkxBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBY2Nlc3NLZXlBdHRyaWJ1dGVdOworICAgICAgICBh
bmNob3JBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOwor
ICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAgICBpZiAod2ViQXJlYUF0dHJz
ID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpA
IkFYTGlua1VJRWxlbWVudHMiXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6QCJBWExv
YWRlZCJdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpAIkFYTGF5b3V0Q291bnQiXTsK
KyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TG9hZGluZ1Byb2dy
ZXNzQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5VVJMQXR0cmlidXRlXTsKKyAgICAgICAgd2ViQXJlYUF0dHJzID0gW1tOU0FycmF5IGFsbG9j
XSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07
CisgICAgfQorICAgIGlmICh0ZXh0QXR0cnMgPT0gbmlsKSB7CisgICAgICAgIHRlbXBBcnJheSA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107CisgICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU51bWJlck9mQ2hhcmFjdGVy
c0F0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0
eVNlbGVjdGVkVGV4dEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dFJhbmdlQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBB
cnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmli
dXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SW5zZXJ0
aW9uUG9pbnRMaW5lTnVtYmVyQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5VGl0bGVVSUVsZW1lbnRBdHRyaWJ1dGVdOworICAgICAgICBbdGVt
cEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBY2Nlc3NLZXlBdHRyaWJ1dGVdOworICAg
ICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlSZXF1aXJlZEF0dHJpYnV0
ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUludmFsaWRB
dHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlQ
bGFjZWhvbGRlclZhbHVlQXR0cmlidXRlXTsKKyAgICAgICAgdGV4dEF0dHJzID0gW1tOU0FycmF5
IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAgICAgIFt0ZW1wQXJyYXkgcmVs
ZWFzZV07CisgICAgfQorICAgIGlmIChsaXN0QXR0cnMgPT0gbmlsKSB7CisgICAgICAgIHRlbXBB
cnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107
CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2hp
bGRyZW5BdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlWaXNpYmxlQ2hpbGRyZW5BdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9i
amVjdDpOU0FjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1w
QXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVRpdGxlVUlFbGVtZW50QXR0cmlidXRlXTsK
KyAgICAgICAgbGlzdEF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBB
cnJheV07CisgICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07CisgICAgfQorICAgIGlmIChsaXN0
Qm94QXR0cnMgPT0gbmlsKSB7CisgICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRXaXRoQXJyYXk6bGlzdEF0dHJzXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRP
YmplY3Q6TlNBY2Nlc3NpYmlsaXR5QWNjZXNzS2V5QXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBB
cnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5UmVxdWlyZWRBdHRyaWJ1dGVdOworICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlJbnZhbGlkQXR0cmlidXRlXTsK
KyAgICAgICAgbGlzdEJveEF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRl
bXBBcnJheV07CisgICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07CisgICAgfQorICAgIGlmIChy
YW5nZUF0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOworICAgICAgICBbdGVtcEFycmF5IGFk
ZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNaW5WYWx1ZUF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1w
QXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1heFZhbHVlQXR0cmlidXRlXTsKKyAgICAg
ICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25BdHRyaWJ1
dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWYWx1ZURl
c2NyaXB0aW9uQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5VGl0bGVVSUVsZW1lbnRBdHRyaWJ1dGVdOworICAgICAgICByYW5nZUF0dHJzID0g
W1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAgICAgIFt0ZW1w
QXJyYXkgcmVsZWFzZV07CisgICAgfQorICAgIGlmIChtZW51QmFyQXR0cnMgPT0gbmlsKSB7Cisg
ICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6
Y29tbW9uTWVudUF0dHJzXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRk
T2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGlsZHJlbkF0dHJpYnV0ZV07CisgICAgICAg
IFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVRpdGxlVUlFbGVtZW50QXR0cmli
dXRlXTsKKyAgICAgICAgbWVudUJhckF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFy
cmF5OnRlbXBBcnJheV07CisgICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07CisgICAgfQorICAg
IGlmIChtZW51QXR0cnMgPT0gbmlsKSB7CisgICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6Y29tbW9uTWVudUF0dHJzXTsKKyAgICAgICAgW3Rl
bXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0
ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZpc2libGVD
aGlsZHJlbkF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eVRpdGxlVUlFbGVtZW50QXR0cmlidXRlXTsKKyAgICAgICAgbWVudUF0dHJzID0gW1tO
U0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAgICAgIFt0ZW1wQXJy
YXkgcmVsZWFzZV07CisgICAgfQorICAgIGlmIChtZW51SXRlbUF0dHJzID09IG5pbCkgeworICAg
ICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmNv
bW1vbk1lbnVBdHRyc107CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJp
bGl0eVRpdGxlQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5SGVscEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eVNlbGVjdGVkQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRP
YmplY3Q6KE5TU3RyaW5nKilrQVhNZW51SXRlbUNtZENoYXJBdHRyaWJ1dGVdOworICAgICAgICBb
dGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWE1lbnVJdGVtQ21kVmlydHVhbEtleUF0
dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihOU1N0cmluZyopa0FYTWVu
dUl0ZW1DbWRHbHlwaEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihO
U1N0cmluZyopa0FYTWVudUl0ZW1DbWRNb2RpZmllcnNBdHRyaWJ1dGVdOworICAgICAgICBbdGVt
cEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWE1lbnVJdGVtTWFya0NoYXJBdHRyaWJ1dGVd
OworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWE1lbnVJdGVtUHJp
bWFyeVVJRWxlbWVudEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eVNlcnZlc0FzVGl0bGVGb3JVSUVsZW1lbnRzQXR0cmlidXRlXTsKKyAgICAg
ICAgbWVudUl0ZW1BdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJy
YXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAgICBpZiAobWVudUJ1
dHRvbkF0dHJzID09IG5pbCkgeworICAgICAgICBtZW51QnV0dG9uQXR0cnMgPSBbW05TQXJyYXkg
YWxsb2NdIGluaXRXaXRoT2JqZWN0czpOU0FjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0
cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5UGFyZW50
QXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5UG9z
aXRpb25BdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxp
dHlTaXplQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmls
aXR5V2luZG93QXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3Np
YmlsaXR5RW5hYmxlZEF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TQWNj
ZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBO
U0FjY2Vzc2liaWxpdHlUaXRsZUF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlLCBuaWxdOworICAgIH0KKyAgICBpZiAo
Y29udHJvbEF0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOworICAgICAgICBbdGVtcEFycmF5
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUaXRsZVVJRWxlbWVudEF0dHJpYnV0ZV07CisgICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUFjY2Vzc0tleUF0dHJpYnV0
ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVJlcXVpcmVk
QXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
SW52YWxpZEF0dHJpYnV0ZV07CisgICAgICAgIGNvbnRyb2xBdHRycyA9IFtbTlNBcnJheSBhbGxv
Y10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2Vd
OworICAgIH0KKyAgICBpZiAoaW5jcmVtZW50b3JBdHRycyA9PSBuaWwpIHsKKyAgICAgICAgdGVt
cEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1dGVz
XTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SW5jcmVtZW50
QnV0dG9uQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5RGVjcmVtZW50QnV0dG9uQXR0cmlidXRlXTsKKyAgICAgICAgaW5jcmVtZW50b3JBdHRy
cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBb
dGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAgICBpZiAoYnV0dG9uQXR0cnMgPT0gbmlsKSB7
CisgICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJy
YXk6YXR0cmlidXRlc107CisgICAgICAgIC8vIEJ1dHRvbnMgc2hvdWxkIG5vdCBleHBvc2UgQVhW
YWx1ZS4KKyAgICAgICAgW3RlbXBBcnJheSByZW1vdmVPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmFs
dWVBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxp
dHlUaXRsZVVJRWxlbWVudEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0
Ok5TQWNjZXNzaWJpbGl0eUFjY2Vzc0tleUF0dHJpYnV0ZV07CisgICAgICAgIGJ1dHRvbkF0dHJz
ID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAgICAgIFt0
ZW1wQXJyYXkgcmVsZWFzZV07CisgICAgfQorICAgIGlmIChjb21ib0JveEF0dHJzID09IG5pbCkg
eworICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFy
cmF5OmNvbnRyb2xBdHRyc107CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eUV4cGFuZGVkQXR0cmlidXRlXTsKKyAgICAgICAgY29tYm9Cb3hBdHRycyA9IFtbTlNB
cnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5
IHJlbGVhc2VdOworICAgIH0KKyAgICBpZiAodGFibGVBdHRycyA9PSBuaWwpIHsKKyAgICAgICAg
dGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1
dGVzXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5Um93c0F0
dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZp
c2libGVSb3dzQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5Q29sdW1uc0F0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0
Ok5TQWNjZXNzaWJpbGl0eVZpc2libGVDb2x1bW5zQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBB
cnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNlbGxzQXR0cmlidXRlXTsKKyAg
ICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nICopa0FYQ29sdW1uSGVhZGVyVUlF
bGVtZW50c0F0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eVJvd0hlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlIZWFkZXJBdHRyaWJ1dGVdOworICAgICAgICB0YWJs
ZUF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAg
ICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07CisgICAgfQorICAgIGlmICh0YWJsZVJvd0F0dHJzID09
IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
V2l0aEFycmF5OmF0dHJpYnV0ZXNdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0Fj
Y2Vzc2liaWxpdHlJbmRleEF0dHJpYnV0ZV07CisgICAgICAgIHRhYmxlUm93QXR0cnMgPSBbW05T
QXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKKyAgICAgICAgW3RlbXBBcnJh
eSByZWxlYXNlXTsKKyAgICB9CisgICAgaWYgKHRhYmxlQ29sQXR0cnMgPT0gbmlsKSB7CisgICAg
ICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0
cmlidXRlc107CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUlu
ZGV4QXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5SGVhZGVyQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5Um93c0F0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eVZpc2libGVSb3dzQXR0cmlidXRlXTsKKyAgICAgICAgdGFibGVDb2xBdHRy
cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBb
dGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAgICBpZiAodGFibGVDZWxsQXR0cnMgPT0gbmls
KSB7CisgICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRo
QXJyYXk6YXR0cmlidXRlc107CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eVJvd0luZGV4UmFuZ2VBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9i
amVjdDpOU0FjY2Vzc2liaWxpdHlDb2x1bW5JbmRleFJhbmdlQXR0cmlidXRlXTsKKyAgICAgICAg
dGFibGVDZWxsQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5
XTsKKyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKKyAgICB9CisgICAgaWYgKGdyb3VwQXR0
cnMgPT0gbmlsKSB7CisgICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0
Ok5TQWNjZXNzaWJpbGl0eVRpdGxlVUlFbGVtZW50QXR0cmlidXRlXTsKKyAgICAgICAgZ3JvdXBB
dHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAg
ICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAgICBpZiAoaW5wdXRJbWFnZUF0dHJzID09
IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
V2l0aEFycmF5OmJ1dHRvbkF0dHJzXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNB
Y2Nlc3NpYmlsaXR5VVJMQXR0cmlidXRlXTsKKyAgICAgICAgaW5wdXRJbWFnZUF0dHJzID0gW1tO
U0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAgICAgIFt0ZW1wQXJy
YXkgcmVsZWFzZV07CisgICAgfQorICAgIGlmIChwYXNzd29yZEZpZWxkQXR0cnMgPT0gbmlsKSB7
CisgICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJy
YXk6YXR0cmlidXRlc107CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJp
bGl0eVRpdGxlVUlFbGVtZW50QXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5UmVxdWlyZWRBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlJbnZhbGlkQXR0cmlidXRlXTsKKyAgICAgICAgW3Rl
bXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5UGxhY2Vob2xkZXJWYWx1ZUF0dHJpYnV0
ZV07CisgICAgICAgIHBhc3N3b3JkRmllbGRBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdp
dGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0K
KyAgICBpZiAodGFiTGlzdEF0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOworICAgICAgICBb
dGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUYWJzQXR0cmlidXRlXTsKKyAgICAg
ICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5Q29udGVudHNBdHRyaWJ1dGVd
OworICAgICAgICB0YWJMaXN0QXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6
dGVtcEFycmF5XTsKKyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKKyAgICB9CisgICAgaWYg
KG91dGxpbmVBdHRycyA9PSBuaWwpIHsKKyAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzXTsKKyAgICAgICAgW3RlbXBBcnJh
eSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRSb3dzQXR0cmlidXRlXTsKKyAgICAg
ICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5Um93c0F0dHJpYnV0ZV07Cisg
ICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUNvbHVtbnNBdHRyaWJ1
dGVdOworICAgICAgICBvdXRsaW5lQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJy
YXk6dGVtcEFycmF5XTsKKyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKKyAgICB9CisgICAg
aWYgKG91dGxpbmVSb3dBdHRycyA9PSBuaWwpIHsKKyAgICAgICAgdGVtcEFycmF5ID0gW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0YWJsZVJvd0F0dHJzXTsKKyAgICAgICAg
W3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc2luZ0F0dHJpYnV0ZV07
CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURpc2Nsb3NlZEJ5
Um93QXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5RGlzY2xvc3VyZUxldmVsQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc2VkUm93c0F0dHJpYnV0ZV07CisgICAgICAgIG91dGxp
bmVSb3dBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOwor
ICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAgICBpZiAoc2Nyb2xsVmlld0F0
dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVj
dDpOU0FjY2Vzc2liaWxpdHlDb250ZW50c0F0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkg
YWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUhvcml6b250YWxTY3JvbGxCYXJBdHRyaWJ1dGVdOwor
ICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbFNjcm9s
bEJhckF0dHJpYnV0ZV07CisgICAgICAgIHNjcm9sbFZpZXdBdHRycyA9IFtbTlNBcnJheSBhbGxv
Y10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2Vd
OworICAgIH0KKyAgICAKKyAgICBOU0FycmF5ICpvYmplY3RBdHRyaWJ1dGVzID0gYXR0cmlidXRl
czsKKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpKQorICAgICAgICBv
YmplY3RBdHRyaWJ1dGVzID0gcGFzc3dvcmRGaWVsZEF0dHJzOworICAgIAorICAgIGVsc2UgaWYg
KG1fb2JqZWN0LT5pc1dlYkFyZWEoKSkKKyAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHdlYkFy
ZWFBdHRyczsKKyAgICAKKyAgICBlbHNlIGlmIChtX29iamVjdC0+aXNUZXh0Q29udHJvbCgpKQor
ICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGV4dEF0dHJzOworICAgIAorICAgIGVsc2UgaWYg
KG1fb2JqZWN0LT5pc0FuY2hvcigpIHx8IG1fb2JqZWN0LT5pc0ltYWdlKCkgfHwgbV9vYmplY3Qt
PmlzTGluaygpKQorICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gYW5jaG9yQXR0cnM7CisgICAg
CisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCisgICAgICAg
IG9iamVjdEF0dHJpYnV0ZXMgPSB0YWJsZUF0dHJzOworICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5p
c1RhYmxlQ29sdW1uKCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB0YWJsZUNvbEF0dHJz
OworICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RhYmxlQ2VsbCgpKQorICAgICAgICBvYmplY3RB
dHRyaWJ1dGVzID0gdGFibGVDZWxsQXR0cnM7CisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzVGFi
bGVSb3coKSkgeworICAgICAgICAvLyBBbiBBUklBIHRhYmxlIHJvdyBjYW4gYmUgY29sbGFwc2Vk
IGFuZCBleHBhbmRlZCwgc28gaXQgbmVlZHMgdGhlIGV4dHJhIGF0dHJpYnV0ZXMuCisgICAgICAg
IGlmIChtX29iamVjdC0+aXNBUklBVHJlZUdyaWRSb3coKSkKKyAgICAgICAgICAgIG9iamVjdEF0
dHJpYnV0ZXMgPSBvdXRsaW5lUm93QXR0cnM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9i
amVjdEF0dHJpYnV0ZXMgPSB0YWJsZVJvd0F0dHJzOworICAgIH0KKyAgICAKKyAgICBlbHNlIGlm
IChtX29iamVjdC0+aXNUcmVlKCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBvdXRsaW5l
QXR0cnM7CisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzVHJlZUl0ZW0oKSkKKyAgICAgICAgb2Jq
ZWN0QXR0cmlidXRlcyA9IG91dGxpbmVSb3dBdHRyczsKKyAgICAKKyAgICBlbHNlIGlmIChtX29i
amVjdC0+aXNMaXN0Qm94KCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBsaXN0Qm94QXR0
cnM7CisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTGlzdCgpKQorICAgICAgICBvYmplY3RBdHRy
aWJ1dGVzID0gbGlzdEF0dHJzOworICAgIAorICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc0NvbWJv
Qm94KCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBjb21ib0JveEF0dHJzOworICAgIAor
ICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1Byb2dyZXNzSW5kaWNhdG9yKCkgfHwgbV9vYmplY3Qt
PmlzU2xpZGVyKCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSByYW5nZUF0dHJzOworICAg
IAorICAgIC8vIFRoZXNlIGFyZSBwcm9jZXNzZWQgaW4gb3JkZXIgYmVjYXVzZSBhbiBpbnB1dCBp
bWFnZSBpcyBhIGJ1dHRvbiwgYW5kIGEgYnV0dG9uIGlzIGEgY29udHJvbC4KKyAgICBlbHNlIGlm
IChtX29iamVjdC0+aXNJbnB1dEltYWdlKCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBp
bnB1dEltYWdlQXR0cnM7CisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzQnV0dG9uKCkpCisgICAg
ICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBidXR0b25BdHRyczsKKyAgICBlbHNlIGlmIChtX29iamVj
dC0+aXNDb250cm9sKCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBjb250cm9sQXR0cnM7
CisgICAgCisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzR3JvdXAoKSB8fCBtX29iamVjdC0+aXNM
aXN0SXRlbSgpKQorICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gZ3JvdXBBdHRyczsKKyAgICBl
bHNlIGlmIChtX29iamVjdC0+aXNUYWJMaXN0KCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMg
PSB0YWJMaXN0QXR0cnM7CisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzU2Nyb2xsVmlldygpKQor
ICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gc2Nyb2xsVmlld0F0dHJzOworICAgIGVsc2UgaWYg
KG1fb2JqZWN0LT5pc1NwaW5CdXR0b24oKSkKKyAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGlu
Y3JlbWVudG9yQXR0cnM7CisgICAgCisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTWVudSgpKQor
ICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gbWVudUF0dHJzOworICAgIGVsc2UgaWYgKG1fb2Jq
ZWN0LT5pc01lbnVCYXIoKSkKKyAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IG1lbnVCYXJBdHRy
czsKKyAgICBlbHNlIGlmIChtX29iamVjdC0+aXNNZW51QnV0dG9uKCkpCisgICAgICAgIG9iamVj
dEF0dHJpYnV0ZXMgPSBtZW51QnV0dG9uQXR0cnM7CisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlz
TWVudUl0ZW0oKSkKKyAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IG1lbnVJdGVtQXR0cnM7Cisg
ICAgCisgICAgTlNBcnJheSAqYWRkaXRpb25hbEF0dHJpYnV0ZXMgPSBbc2VsZiBhZGRpdGlvbmFs
QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXTsKKyAgICBpZiAoW2FkZGl0aW9uYWxBdHRyaWJ1
dGVzIGNvdW50XSkKKyAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IFtvYmplY3RBdHRyaWJ1dGVz
IGFycmF5QnlBZGRpbmdPYmplY3RzRnJvbUFycmF5OmFkZGl0aW9uYWxBdHRyaWJ1dGVzXTsKKyAg
ICAKKyAgICByZXR1cm4gb2JqZWN0QXR0cmlidXRlczsKK30KKworLSAoVmlzaWJsZVBvc2l0aW9u
UmFuZ2UpdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6KGlkKXRleHRNYXJr
ZXJSYW5nZQoreworICAgIGlmICghdGV4dE1hcmtlclJhbmdlKQorICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uUmFuZ2UoKTsKKyAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fb2JqZWN0
LT5heE9iamVjdENhY2hlKCk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHZpc2li
bGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2UoY2FjaGUsIHRleHRNYXJrZXJSYW5n
ZSksIHZpc2libGVQb3NpdGlvbkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKGNhY2hlLCB0ZXh0TWFy
a2VyUmFuZ2UpKTsKK30KKworLSAoTlNBcnJheSopcmVuZGVyV2lkZ2V0Q2hpbGRyZW4KK3sKKyAg
ICBXaWRnZXQqIHdpZGdldCA9IG1fb2JqZWN0LT53aWRnZXQoKTsKKyAgICBpZiAoIXdpZGdldCkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gWyh3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0
KCkpIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTogTlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5B
dHRyaWJ1dGVdOworfQorCistIChpZClyZW1vdGVBY2Nlc3NpYmlsaXR5UGFyZW50T2JqZWN0Cit7
CisgICAgaWYgKCFtX29iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBtX29iamVjdC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisg
ICAgcmV0dXJuIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmFjY2Vzc2liaWxpdHlSZW1vdGVP
YmplY3QoKTsKK30KKworc3RhdGljIHZvaWQgY29udmVydFRvVmVjdG9yKE5TQXJyYXkqIGFycmF5
LCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHZlY3Rv
cikKK3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBbYXJyYXkgY291bnRdOworICAgIHZlY3Rvci5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IFtb
YXJyYXkgb2JqZWN0QXRJbmRleDppXSBhY2Nlc3NpYmlsaXR5T2JqZWN0XTsKKyAgICAgICAgaWYg
KG9iaikKKyAgICAgICAgICAgIHZlY3Rvci5hcHBlbmQob2JqKTsKKyAgICB9Cit9CisKK3N0YXRp
YyBOU011dGFibGVBcnJheSogY29udmVydFRvTlNBcnJheShjb25zdCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHZlY3RvcikKK3sKKyAgICB1bnNpZ25l
ZCBsZW5ndGggPSB2ZWN0b3Iuc2l6ZSgpOworICAgIE5TTXV0YWJsZUFycmF5KiBhcnJheSA9IFtO
U011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTogbGVuZ3RoXTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqIHdyYXBwZXIgPSB2ZWN0b3JbaV0tPndyYXBwZXIoKTsKKyAgICAgICAgQVNT
RVJUKHdyYXBwZXIpOworICAgICAgICBpZiAod3JhcHBlcikgeworICAgICAgICAgICAgLy8gd2Ug
d2FudCB0byByZXR1cm4gdGhlIGF0dGFjaG1lbnQgdmlldyBpbnN0ZWFkIG9mIHRoZSBvYmplY3Qg
cmVwcmVzZW50aW5nIHRoZSBhdHRhY2htZW50LgorICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCB3
ZSBnZXQgcGFsaW5kcm9tZSBlcnJvcnMgaW4gdGhlIEFYIGhpZXJhcmNoeQorICAgICAgICAgICAg
aWYgKHZlY3RvcltpXS0+aXNBdHRhY2htZW50KCkgJiYgW3dyYXBwZXIgYXR0YWNobWVudFZpZXdd
KQorICAgICAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6W3dyYXBwZXIgYXR0YWNobWVudFZp
ZXddXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0
OndyYXBwZXJdOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBhcnJheTsKK30KKworLSAo
aWQpdGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uCit7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24gPSBtX29iamVjdC0+c2VsZWN0aW9uKCk7CisgICAgaWYgKHNlbGVjdGlvbi5pc05v
bmUoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJh
bmdlRnJvbVZpc2libGVQb3NpdGlvbnM6c2VsZWN0aW9uLnZpc2libGVTdGFydCgpIGVuZFBvc2l0
aW9uOnNlbGVjdGlvbi52aXNpYmxlRW5kKCldOworfQorCistIChOU1ZhbHVlICopcG9zaXRpb24K
K3sKKyAgICBJbnRSZWN0IHJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KG1fb2JqZWN0LT5lbGVt
ZW50UmVjdCgpKTsKKyAgICBOU1BvaW50IHBvaW50OworICAgIAorICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gbV9vYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CisgICAgCisgICAgLy8gV2Vi
S2l0MSBjb2RlIHBhdGguLi4gcGxhdGZvcm1XaWRnZXQoKSBleGlzdHMuCisgICAgaWYgKGZyYW1l
VmlldyAmJiBmcmFtZVZpZXctPnBsYXRmb3JtV2lkZ2V0KCkpIHsKKyAgICAgICAgCisgICAgICAg
IC8vIFRoZSBDb2NvYSBhY2Nlc3NpYmlsaXR5IEFQSSB3YW50cyB0aGUgbG93ZXItbGVmdCBjb3Ju
ZXIuCisgICAgICAgIHBvaW50ID0gTlNNYWtlUG9pbnQocmVjdC54KCksIHJlY3QubWF4WSgpKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChmcmFtZVZpZXcpIHsKKyAgICAgICAgICAgIE5TVmlldyog
dmlldyA9IGZyYW1lVmlldy0+ZG9jdW1lbnRWaWV3KCk7CisgICAgICAgICAgICBwb2ludCA9IFtb
dmlldyB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46W3ZpZXcgY29udmVydFBvaW50OiBwb2lu
dCB0b1ZpZXc6bmlsXV07CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAKKyAgICAg
ICAgLy8gRmluZCB0aGUgYXBwcm9wcmlhdGUgc2Nyb2xsIHZpZXcgdG8gdXNlIHRvIGNvbnZlcnQg
dGhlIGNvbnRlbnRzIHRvIHRoZSB3aW5kb3cuCisgICAgICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZp
ZXcgPSAwOworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSAwOworICAgICAg
ICBmb3IgKHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50OyBwYXJlbnQg
PSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAocGFyZW50LT5pc0Fj
Y2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpIHsKKyAgICAgICAgICAgICAgICBzY3JvbGxWaWV3ID0g
dG9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhwYXJlbnQpLT5zY3JvbGxWaWV3KCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmIChzY3JvbGxWaWV3KQorICAgICAgICAgICAgcmVjdCA9IHNjcm9sbFZpZXctPmNvbnRl
bnRzVG9Sb290VmlldyhyZWN0KTsKKyAgICAgICAgCisgICAgICAgIFBhZ2UqIHBhZ2UgPSBtX29i
amVjdC0+cGFnZSgpOworICAgICAgICAKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBlbXB0eSBj
aHJvbWUgY2xpZW50IChsaWtlIFNWRykgdGhlbiB3ZSBzaG91bGQgdXNlIHRoZSBwYWdlCisgICAg
ICAgIC8vIG9mIHRoZSBzY3JvbGwgdmlldyBwYXJlbnQgdG8gaGVscCB1cyBnZXQgdG8gdGhlIHNj
cmVlbiByZWN0LgorICAgICAgICBpZiAocGFyZW50ICYmIHBhZ2UgJiYgcGFnZS0+Y2hyb21lKCkt
PmNsaWVudCgpLT5pc0VtcHR5Q2hyb21lQ2xpZW50KCkpCisgICAgICAgICAgICBwYWdlID0gcGFy
ZW50LT5wYWdlKCk7CisgICAgICAgIAorICAgICAgICBpZiAocGFnZSkKKyAgICAgICAgICAgIHBv
aW50ID0gcGFnZS0+Y2hyb21lKCktPnJvb3RWaWV3VG9TY3JlZW4ocmVjdCkubG9jYXRpb24oKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9pbnQgPSByZWN0LmxvY2F0aW9uKCk7CisgICAg
fQorICAgIAorICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhQb2ludDpwb2ludF07Cit9CisK
K3R5cGVkZWYgSGFzaE1hcDxpbnQsIE5TU3RyaW5nKj4gQWNjZXNzaWJpbGl0eVJvbGVNYXA7CisK
K3N0YXRpYyBjb25zdCBBY2Nlc3NpYmlsaXR5Um9sZU1hcCYgY3JlYXRlQWNjZXNzaWJpbGl0eVJv
bGVNYXAoKQoreworICAgIHN0cnVjdCBSb2xlRW50cnkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5
Um9sZSB2YWx1ZTsKKyAgICAgICAgTlNTdHJpbmcqIHN0cmluZzsKKyAgICB9OworICAgIAorICAg
IHN0YXRpYyBjb25zdCBSb2xlRW50cnkgcm9sZXNbXSA9IHsKKyAgICAgICAgeyBVbmtub3duUm9s
ZSwgTlNBY2Nlc3NpYmlsaXR5VW5rbm93blJvbGUgfSwKKyAgICAgICAgeyBCdXR0b25Sb2xlLCBO
U0FjY2Vzc2liaWxpdHlCdXR0b25Sb2xlIH0sCisgICAgICAgIHsgUmFkaW9CdXR0b25Sb2xlLCBO
U0FjY2Vzc2liaWxpdHlSYWRpb0J1dHRvblJvbGUgfSwKKyAgICAgICAgeyBDaGVja0JveFJvbGUs
IE5TQWNjZXNzaWJpbGl0eUNoZWNrQm94Um9sZSB9LAorICAgICAgICB7IFNsaWRlclJvbGUsIE5T
QWNjZXNzaWJpbGl0eVNsaWRlclJvbGUgfSwKKyAgICAgICAgeyBUYWJHcm91cFJvbGUsIE5TQWNj
ZXNzaWJpbGl0eVRhYkdyb3VwUm9sZSB9LAorICAgICAgICB7IFRleHRGaWVsZFJvbGUsIE5TQWNj
ZXNzaWJpbGl0eVRleHRGaWVsZFJvbGUgfSwKKyAgICAgICAgeyBTdGF0aWNUZXh0Um9sZSwgTlNB
Y2Nlc3NpYmlsaXR5U3RhdGljVGV4dFJvbGUgfSwKKyAgICAgICAgeyBUZXh0QXJlYVJvbGUsIE5T
QWNjZXNzaWJpbGl0eVRleHRBcmVhUm9sZSB9LAorICAgICAgICB7IFNjcm9sbEFyZWFSb2xlLCBO
U0FjY2Vzc2liaWxpdHlTY3JvbGxBcmVhUm9sZSB9LAorICAgICAgICB7IFBvcFVwQnV0dG9uUm9s
ZSwgTlNBY2Nlc3NpYmlsaXR5UG9wVXBCdXR0b25Sb2xlIH0sCisgICAgICAgIHsgTWVudUJ1dHRv
blJvbGUsIE5TQWNjZXNzaWJpbGl0eU1lbnVCdXR0b25Sb2xlIH0sCisgICAgICAgIHsgVGFibGVS
b2xlLCBOU0FjY2Vzc2liaWxpdHlUYWJsZVJvbGUgfSwKKyAgICAgICAgeyBBcHBsaWNhdGlvblJv
bGUsIE5TQWNjZXNzaWJpbGl0eUFwcGxpY2F0aW9uUm9sZSB9LAorICAgICAgICB7IEdyb3VwUm9s
ZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgUmFkaW9Hcm91cFJvbGUs
IE5TQWNjZXNzaWJpbGl0eVJhZGlvR3JvdXBSb2xlIH0sCisgICAgICAgIHsgTGlzdFJvbGUsIE5T
QWNjZXNzaWJpbGl0eUxpc3RSb2xlIH0sCisgICAgICAgIHsgRGlyZWN0b3J5Um9sZSwgTlNBY2Nl
c3NpYmlsaXR5TGlzdFJvbGUgfSwKKyAgICAgICAgeyBTY3JvbGxCYXJSb2xlLCBOU0FjY2Vzc2li
aWxpdHlTY3JvbGxCYXJSb2xlIH0sCisgICAgICAgIHsgVmFsdWVJbmRpY2F0b3JSb2xlLCBOU0Fj
Y2Vzc2liaWxpdHlWYWx1ZUluZGljYXRvclJvbGUgfSwKKyAgICAgICAgeyBJbWFnZVJvbGUsIE5T
QWNjZXNzaWJpbGl0eUltYWdlUm9sZSB9LAorICAgICAgICB7IE1lbnVCYXJSb2xlLCBOU0FjY2Vz
c2liaWxpdHlNZW51QmFyUm9sZSB9LAorICAgICAgICB7IE1lbnVSb2xlLCBOU0FjY2Vzc2liaWxp
dHlNZW51Um9sZSB9LAorICAgICAgICB7IE1lbnVJdGVtUm9sZSwgTlNBY2Nlc3NpYmlsaXR5TWVu
dUl0ZW1Sb2xlIH0sCisgICAgICAgIHsgQ29sdW1uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5Q29sdW1u
Um9sZSB9LAorICAgICAgICB7IFJvd1JvbGUsIE5TQWNjZXNzaWJpbGl0eVJvd1JvbGUgfSwKKyAg
ICAgICAgeyBUb29sYmFyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5VG9vbGJhclJvbGUgfSwKKyAgICAg
ICAgeyBCdXN5SW5kaWNhdG9yUm9sZSwgTlNBY2Nlc3NpYmlsaXR5QnVzeUluZGljYXRvclJvbGUg
fSwKKyAgICAgICAgeyBQcm9ncmVzc0luZGljYXRvclJvbGUsIE5TQWNjZXNzaWJpbGl0eVByb2dy
ZXNzSW5kaWNhdG9yUm9sZSB9LAorICAgICAgICB7IFdpbmRvd1JvbGUsIE5TQWNjZXNzaWJpbGl0
eVdpbmRvd1JvbGUgfSwKKyAgICAgICAgeyBEcmF3ZXJSb2xlLCBOU0FjY2Vzc2liaWxpdHlEcmF3
ZXJSb2xlIH0sCisgICAgICAgIHsgU3lzdGVtV2lkZVJvbGUsIE5TQWNjZXNzaWJpbGl0eVN5c3Rl
bVdpZGVSb2xlIH0sCisgICAgICAgIHsgT3V0bGluZVJvbGUsIE5TQWNjZXNzaWJpbGl0eU91dGxp
bmVSb2xlIH0sCisgICAgICAgIHsgSW5jcmVtZW50b3JSb2xlLCBOU0FjY2Vzc2liaWxpdHlJbmNy
ZW1lbnRvclJvbGUgfSwKKyAgICAgICAgeyBCcm93c2VyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5QnJv
d3NlclJvbGUgfSwKKyAgICAgICAgeyBDb21ib0JveFJvbGUsIE5TQWNjZXNzaWJpbGl0eUNvbWJv
Qm94Um9sZSB9LAorICAgICAgICB7IFNwbGl0R3JvdXBSb2xlLCBOU0FjY2Vzc2liaWxpdHlTcGxp
dEdyb3VwUm9sZSB9LAorICAgICAgICB7IFNwbGl0dGVyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5U3Bs
aXR0ZXJSb2xlIH0sCisgICAgICAgIHsgQ29sb3JXZWxsUm9sZSwgTlNBY2Nlc3NpYmlsaXR5Q29s
b3JXZWxsUm9sZSB9LAorICAgICAgICB7IEdyb3dBcmVhUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3Jv
d0FyZWFSb2xlIH0sCisgICAgICAgIHsgU2hlZXRSb2xlLCBOU0FjY2Vzc2liaWxpdHlTaGVldFJv
bGUgfSwKKyAgICAgICAgeyBIZWxwVGFnUm9sZSwgTlNBY2Nlc3NpYmlsaXR5SGVscFRhZ1JvbGUg
fSwKKyAgICAgICAgeyBNYXR0ZVJvbGUsIE5TQWNjZXNzaWJpbGl0eU1hdHRlUm9sZSB9LAorICAg
ICAgICB7IFJ1bGVyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5UnVsZXJSb2xlIH0sCisgICAgICAgIHsg
UnVsZXJNYXJrZXJSb2xlLCBOU0FjY2Vzc2liaWxpdHlSdWxlck1hcmtlclJvbGUgfSwKKyAgICAg
ICAgeyBMaW5rUm9sZSwgTlNBY2Nlc3NpYmlsaXR5TGlua1JvbGUgfSwKKyAgICAgICAgeyBEaXNj
bG9zdXJlVHJpYW5nbGVSb2xlLCBOU0FjY2Vzc2liaWxpdHlEaXNjbG9zdXJlVHJpYW5nbGVSb2xl
IH0sCisgICAgICAgIHsgR3JpZFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyaWRSb2xlIH0sCisgICAg
ICAgIHsgV2ViQ29yZUxpbmtSb2xlLCBOU0FjY2Vzc2liaWxpdHlMaW5rUm9sZSB9LAorICAgICAg
ICB7IEltYWdlTWFwTGlua1JvbGUsIE5TQWNjZXNzaWJpbGl0eUxpbmtSb2xlIH0sCisgICAgICAg
IHsgSW1hZ2VNYXBSb2xlLCBAIkFYSW1hZ2VNYXAiIH0sCisgICAgICAgIHsgTGlzdE1hcmtlclJv
bGUsIEAiQVhMaXN0TWFya2VyIiB9LAorICAgICAgICB7IFdlYkFyZWFSb2xlLCBAIkFYV2ViQXJl
YSIgfSwKKyAgICAgICAgeyBTZWFtbGVzc1dlYkFyZWFSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91
cFJvbGUgfSwKKyAgICAgICAgeyBIZWFkaW5nUm9sZSwgQCJBWEhlYWRpbmciIH0sCisgICAgICAg
IHsgTGlzdEJveFJvbGUsIE5TQWNjZXNzaWJpbGl0eUxpc3RSb2xlIH0sCisgICAgICAgIHsgTGlz
dEJveE9wdGlvblJvbGUsIE5TQWNjZXNzaWJpbGl0eVN0YXRpY1RleHRSb2xlIH0sCisgICAgICAg
IHsgQ2VsbFJvbGUsIE5TQWNjZXNzaWJpbGl0eUNlbGxSb2xlIH0sCisgICAgICAgIHsgVGFibGVI
ZWFkZXJDb250YWluZXJSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAg
eyBSb3dIZWFkZXJSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBE
ZWZpbml0aW9uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgRGVz
Y3JpcHRpb25MaXN0RGV0YWlsUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAg
ICAgIHsgRGVzY3JpcHRpb25MaXN0VGVybVJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9
LAorICAgICAgICB7IFNsaWRlclRodW1iUm9sZSwgTlNBY2Nlc3NpYmlsaXR5VmFsdWVJbmRpY2F0
b3JSb2xlIH0sCisgICAgICAgIHsgTGFuZG1hcmtBcHBsaWNhdGlvblJvbGUsIE5TQWNjZXNzaWJp
bGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IExhbmRtYXJrQmFubmVyUm9sZSwgTlNBY2Nlc3Np
YmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgTGFuZG1hcmtDb21wbGVtZW50YXJ5Um9sZSwg
TlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgTGFuZG1hcmtDb250ZW50SW5m
b1JvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IExhbmRtYXJrTWFp
blJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IExhbmRtYXJrTmF2
aWdhdGlvblJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IExhbmRt
YXJrU2VhcmNoUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgQXBw
bGljYXRpb25BbGVydFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7
IEFwcGxpY2F0aW9uQWxlcnREaWFsb2dSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwK
KyAgICAgICAgeyBBcHBsaWNhdGlvbkRpYWxvZ1JvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9s
ZSB9LAorICAgICAgICB7IEFwcGxpY2F0aW9uTG9nUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBS
b2xlIH0sCisgICAgICAgIHsgQXBwbGljYXRpb25NYXJxdWVlUm9sZSwgTlNBY2Nlc3NpYmlsaXR5
R3JvdXBSb2xlIH0sCisgICAgICAgIHsgQXBwbGljYXRpb25TdGF0dXNSb2xlLCBOU0FjY2Vzc2li
aWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBBcHBsaWNhdGlvblRpbWVyUm9sZSwgTlNBY2Nl
c3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgRG9jdW1lbnRSb2xlLCBOU0FjY2Vzc2li
aWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBEb2N1bWVudEFydGljbGVSb2xlLCBOU0FjY2Vz
c2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBEb2N1bWVudE1hdGhSb2xlLCBOU0FjY2Vz
c2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBEb2N1bWVudE5vdGVSb2xlLCBOU0FjY2Vz
c2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBEb2N1bWVudFJlZ2lvblJvbGUsIE5TQWNj
ZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IFVzZXJJbnRlcmZhY2VUb29sdGlwUm9s
ZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgVGFiUm9sZSwgTlNBY2Nl
c3NpYmlsaXR5UmFkaW9CdXR0b25Sb2xlIH0sCisgICAgICAgIHsgVGFiTGlzdFJvbGUsIE5TQWNj
ZXNzaWJpbGl0eVRhYkdyb3VwUm9sZSB9LAorICAgICAgICB7IFRhYlBhbmVsUm9sZSwgTlNBY2Nl
c3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgVHJlZVJvbGUsIE5TQWNjZXNzaWJpbGl0
eU91dGxpbmVSb2xlIH0sCisgICAgICAgIHsgVHJlZUl0ZW1Sb2xlLCBOU0FjY2Vzc2liaWxpdHlS
b3dSb2xlIH0sCisgICAgICAgIHsgTGlzdEl0ZW1Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJv
bGUgfSwKKyAgICAgICAgeyBQYXJhZ3JhcGhSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUg
fSwKKyAgICAgICAgeyBMYWJlbFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAg
ICAgICB7IERpdlJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IEZv
cm1Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBTcGluQnV0dG9u
Um9sZSwgTlNBY2Nlc3NpYmlsaXR5SW5jcmVtZW50b3JSb2xlIH0sCisgICAgICAgIHsgRm9vdGVy
Um9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgVG9nZ2xlQnV0dG9u
Um9sZSwgTlNBY2Nlc3NpYmlsaXR5QnV0dG9uUm9sZSB9LAorICAgICAgICB7IENhbnZhc1JvbGUs
IE5TQWNjZXNzaWJpbGl0eUltYWdlUm9sZSB9LAorICAgICAgICB7IFNWR1Jvb3RSb2xlLCBOU0Fj
Y2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBMZWdlbmRSb2xlLCBOU0FjY2Vzc2li
aWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBNYXRoRWxlbWVudFJvbGUsIE5TQWNjZXNzaWJp
bGl0eUdyb3VwUm9sZSB9CisgICAgfTsKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZU1hcCYgcm9sZU1h
cCA9ICpuZXcgQWNjZXNzaWJpbGl0eVJvbGVNYXA7CisgICAgCisgICAgY29uc3QgdW5zaWduZWQg
bnVtUm9sZXMgPSBzaXplb2Yocm9sZXMpIC8gc2l6ZW9mKHJvbGVzWzBdKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtUm9sZXM7ICsraSkKKyAgICAgICAgcm9sZU1hcC5zZXQocm9s
ZXNbaV0udmFsdWUsIHJvbGVzW2ldLnN0cmluZyk7CisgICAgcmV0dXJuIHJvbGVNYXA7Cit9CisK
K3N0YXRpYyBOU1N0cmluZyogcm9sZVZhbHVlVG9OU1N0cmluZyhBY2Nlc3NpYmlsaXR5Um9sZSB2
YWx1ZSkKK3sKKyAgICBBU1NFUlQodmFsdWUpOworICAgIHN0YXRpYyBjb25zdCBBY2Nlc3NpYmls
aXR5Um9sZU1hcCYgcm9sZU1hcCA9IGNyZWF0ZUFjY2Vzc2liaWxpdHlSb2xlTWFwKCk7CisgICAg
cmV0dXJuIHJvbGVNYXAuZ2V0KHZhbHVlKTsKK30KKworLSAoTlNTdHJpbmcqKXJvbGUKK3sKKyAg
ICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKQorICAgICAgICByZXR1cm4gW1tzZWxmIGF0
dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5
Um9sZUF0dHJpYnV0ZV07CisgICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IG1fb2JqZWN0LT5y
b2xlVmFsdWUoKTsKKyAgICBpZiAocm9sZSA9PSBDYW52YXNSb2xlICYmIG1fb2JqZWN0LT5jYW52
YXNIYXNGYWxsYmFja0NvbnRlbnQoKSkKKyAgICAgICAgcm9sZSA9IEdyb3VwUm9sZTsKKyAgICBO
U1N0cmluZyogc3RyaW5nID0gcm9sZVZhbHVlVG9OU1N0cmluZyhyb2xlKTsKKyAgICBpZiAoc3Ry
aW5nICE9IG5pbCkKKyAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICByZXR1cm4gTlNBY2Nlc3Np
YmlsaXR5VW5rbm93blJvbGU7Cit9CisKKy0gKE5TU3RyaW5nKilzdWJyb2xlCit7CisgICAgaWYg
KG1fb2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSkKKyAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJp
bGl0eVNlY3VyZVRleHRGaWVsZFN1YnJvbGU7CisgICAgaWYgKG1fb2JqZWN0LT5pc1NlYXJjaEZp
ZWxkKCkpCisgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlTZWFyY2hGaWVsZFN1YnJvbGU7
CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkgeworICAgICAgICBOU1Zp
ZXcqIGF0dGFjaFZpZXcgPSBbc2VsZiBhdHRhY2htZW50Vmlld107CisgICAgICAgIGlmIChbW2F0
dGFjaFZpZXcgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSBjb250YWluc09iamVjdDpOU0Fj
Y2Vzc2liaWxpdHlTdWJyb2xlQXR0cmlidXRlXSkgeworICAgICAgICAgICAgcmV0dXJuIFthdHRh
Y2hWaWV3IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlTdWJyb2xl
QXR0cmlidXRlXTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlz
U3BpbkJ1dHRvblBhcnQoKSkgeworICAgICAgICBpZiAodG9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRv
blBhcnQobV9vYmplY3QpLT5pc0luY3JlbWVudG9yKCkpCisgICAgICAgICAgICByZXR1cm4gTlNB
Y2Nlc3NpYmlsaXR5SW5jcmVtZW50QXJyb3dTdWJyb2xlOworICAgICAgICAKKyAgICAgICAgcmV0
dXJuIE5TQWNjZXNzaWJpbGl0eURlY3JlbWVudEFycm93U3Vicm9sZTsKKyAgICB9CisgICAgCisg
ICAgaWYgKG1fb2JqZWN0LT5pc0ZpbGVVcGxvYWRCdXR0b24oKSkKKyAgICAgICAgcmV0dXJuIEAi
QVhGaWxlVXBsb2FkQnV0dG9uIjsKKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlzVHJlZUl0ZW0o
KSkKKyAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eU91dGxpbmVSb3dTdWJyb2xlOworICAg
IAorICAgIGlmIChtX29iamVjdC0+aXNMaXN0KCkpIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eUxp
c3QqIGxpc3RPYmplY3QgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5TGlzdCo+KG1fb2JqZWN0
KTsKKyAgICAgICAgaWYgKGxpc3RPYmplY3QtPmlzVW5vcmRlcmVkTGlzdCgpIHx8IGxpc3RPYmpl
Y3QtPmlzT3JkZXJlZExpc3QoKSkKKyAgICAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlD
b250ZW50TGlzdFN1YnJvbGU7CisgICAgICAgIGlmIChsaXN0T2JqZWN0LT5pc0Rlc2NyaXB0aW9u
TGlzdCgpKQorICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uTGlz
dFN1YnJvbGU7CisgICAgfQorICAgIAorICAgIC8vIEFSSUEgY29udGVudCBzdWJyb2xlcy4KKyAg
ICBzd2l0Y2ggKG1fb2JqZWN0LT5yb2xlVmFsdWUoKSkgeworICAgICAgICBjYXNlIExhbmRtYXJr
QXBwbGljYXRpb25Sb2xlOgorICAgICAgICAgICAgcmV0dXJuIEAiQVhMYW5kbWFya0FwcGxpY2F0
aW9uIjsKKyAgICAgICAgY2FzZSBMYW5kbWFya0Jhbm5lclJvbGU6CisgICAgICAgICAgICByZXR1
cm4gQCJBWExhbmRtYXJrQmFubmVyIjsKKyAgICAgICAgY2FzZSBMYW5kbWFya0NvbXBsZW1lbnRh
cnlSb2xlOgorICAgICAgICAgICAgcmV0dXJuIEAiQVhMYW5kbWFya0NvbXBsZW1lbnRhcnkiOwor
ICAgICAgICAgICAgLy8gRm9vdGVyIHJvbGVzIHNob3VsZCBhcHBlYXIgYXMgY29udGVudCBpbmZv
IHR5cGVzLgorICAgICAgICBjYXNlIEZvb3RlclJvbGU6CisgICAgICAgIGNhc2UgTGFuZG1hcmtD
b250ZW50SW5mb1JvbGU6CisgICAgICAgICAgICByZXR1cm4gQCJBWExhbmRtYXJrQ29udGVudElu
Zm8iOworICAgICAgICBjYXNlIExhbmRtYXJrTWFpblJvbGU6CisgICAgICAgICAgICByZXR1cm4g
QCJBWExhbmRtYXJrTWFpbiI7CisgICAgICAgIGNhc2UgTGFuZG1hcmtOYXZpZ2F0aW9uUm9sZToK
KyAgICAgICAgICAgIHJldHVybiBAIkFYTGFuZG1hcmtOYXZpZ2F0aW9uIjsKKyAgICAgICAgY2Fz
ZSBMYW5kbWFya1NlYXJjaFJvbGU6CisgICAgICAgICAgICByZXR1cm4gQCJBWExhbmRtYXJrU2Vh
cmNoIjsKKyAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkFsZXJ0Um9sZToKKyAgICAgICAgICAgIHJl
dHVybiBAIkFYQXBwbGljYXRpb25BbGVydCI7CisgICAgICAgIGNhc2UgQXBwbGljYXRpb25BbGVy
dERpYWxvZ1JvbGU6CisgICAgICAgICAgICByZXR1cm4gQCJBWEFwcGxpY2F0aW9uQWxlcnREaWFs
b2ciOworICAgICAgICBjYXNlIEFwcGxpY2F0aW9uRGlhbG9nUm9sZToKKyAgICAgICAgICAgIHJl
dHVybiBAIkFYQXBwbGljYXRpb25EaWFsb2ciOworICAgICAgICBjYXNlIEFwcGxpY2F0aW9uTG9n
Um9sZToKKyAgICAgICAgICAgIHJldHVybiBAIkFYQXBwbGljYXRpb25Mb2ciOworICAgICAgICBj
YXNlIEFwcGxpY2F0aW9uTWFycXVlZVJvbGU6CisgICAgICAgICAgICByZXR1cm4gQCJBWEFwcGxp
Y2F0aW9uTWFycXVlZSI7CisgICAgICAgIGNhc2UgQXBwbGljYXRpb25TdGF0dXNSb2xlOgorICAg
ICAgICAgICAgcmV0dXJuIEAiQVhBcHBsaWNhdGlvblN0YXR1cyI7CisgICAgICAgIGNhc2UgQXBw
bGljYXRpb25UaW1lclJvbGU6CisgICAgICAgICAgICByZXR1cm4gQCJBWEFwcGxpY2F0aW9uVGlt
ZXIiOworICAgICAgICBjYXNlIERvY3VtZW50Um9sZToKKyAgICAgICAgICAgIHJldHVybiBAIkFY
RG9jdW1lbnQiOworICAgICAgICBjYXNlIERvY3VtZW50QXJ0aWNsZVJvbGU6CisgICAgICAgICAg
ICByZXR1cm4gQCJBWERvY3VtZW50QXJ0aWNsZSI7CisgICAgICAgIGNhc2UgRG9jdW1lbnRNYXRo
Um9sZToKKyAgICAgICAgICAgIHJldHVybiBAIkFYRG9jdW1lbnRNYXRoIjsKKyAgICAgICAgY2Fz
ZSBEb2N1bWVudE5vdGVSb2xlOgorICAgICAgICAgICAgcmV0dXJuIEAiQVhEb2N1bWVudE5vdGUi
OworICAgICAgICBjYXNlIERvY3VtZW50UmVnaW9uUm9sZToKKyAgICAgICAgICAgIHJldHVybiBA
IkFYRG9jdW1lbnRSZWdpb24iOworICAgICAgICBjYXNlIFVzZXJJbnRlcmZhY2VUb29sdGlwUm9s
ZToKKyAgICAgICAgICAgIHJldHVybiBAIkFYVXNlckludGVyZmFjZVRvb2x0aXAiOworICAgICAg
ICBjYXNlIFRhYlBhbmVsUm9sZToKKyAgICAgICAgICAgIHJldHVybiBAIkFYVGFiUGFuZWwiOwor
ICAgICAgICBjYXNlIERlZmluaXRpb25Sb2xlOgorICAgICAgICAgICAgcmV0dXJuIEAiQVhEZWZp
bml0aW9uIjsKKyAgICAgICAgY2FzZSBEZXNjcmlwdGlvbkxpc3RUZXJtUm9sZToKKyAgICAgICAg
ICAgIHJldHVybiBAIkFYVGVybSI7CisgICAgICAgIGNhc2UgRGVzY3JpcHRpb25MaXN0RGV0YWls
Um9sZToKKyAgICAgICAgICAgIHJldHVybiBAIkFYRGVzY3JpcHRpb24iOworICAgICAgICAgICAg
Ly8gRGVmYXVsdCBkb2Vzbid0IHJldHVybiBhbnl0aGluZywgc28gcm9sZXMgZGVmaW5lZCBiZWxv
dyBjYW4gYmUgY2hvc2VuLgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIAorICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVlKCkgPT0gTWF0aEVsZW1lbnRS
b2xlKSB7CisgICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoRnJhY3Rpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybiBAIkFYTWF0aEZyYWN0aW9uIjsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01h
dGhGZW5jZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aEZlbmNlZCI7CisgICAgICAg
IGlmIChtX29iamVjdC0+aXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSkKKyAgICAgICAgICAg
IHJldHVybiBAIkFYTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0IjsKKyAgICAgICAgaWYgKG1fb2Jq
ZWN0LT5pc01hdGhSb3coKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFJvdyI7CisgICAg
ICAgIGlmIChtX29iamVjdC0+aXNNYXRoVW5kZXJPdmVyKCkpCisgICAgICAgICAgICByZXR1cm4g
QCJBWE1hdGhVbmRlck92ZXIiOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFNxdWFyZVJv
b3QoKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFNxdWFyZVJvb3QiOworICAgICAgICBp
ZiAobV9vYmplY3QtPmlzTWF0aFJvb3QoKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFJv
b3QiOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFRleHQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBAIkFYTWF0aFRleHQiOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aE51bWJlcigp
KQorICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoTnVtYmVyIjsKKyAgICAgICAgaWYgKG1fb2Jq
ZWN0LT5pc01hdGhJZGVudGlmaWVyKCkpCisgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhJZGVu
dGlmaWVyIjsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhUYWJsZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIEAiQVhNYXRoVGFibGUiOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFRh
YmxlUm93KCkpCisgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhUYWJsZVJvdyI7CisgICAgICAg
IGlmIChtX29iamVjdC0+aXNNYXRoVGFibGVDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gQCJB
WE1hdGhUYWJsZUNlbGwiOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aEZlbmNlT3BlcmF0
b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aEZlbmNlT3BlcmF0b3IiOworICAgICAg
ICBpZiAobV9vYmplY3QtPmlzTWF0aFNlcGFyYXRvck9wZXJhdG9yKCkpCisgICAgICAgICAgICBy
ZXR1cm4gQCJBWE1hdGhTZXBhcmF0b3JPcGVyYXRvciI7CisgICAgICAgIGlmIChtX29iamVjdC0+
aXNNYXRoT3BlcmF0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aE9wZXJhdG9yIjsK
KyAgICB9CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc01lZGlhVGltZWxpbmUoKSkKKyAgICAg
ICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVRpbWVsaW5lU3Vicm9sZTsKKyAgICAKKyAgICByZXR1
cm4gbmlsOworfQorCistIChOU1N0cmluZyopcm9sZURlc2NyaXB0aW9uCit7CisgICAgaWYgKCFt
X29iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICAvLyBhdHRhY2htZW50cyBo
YXZlIHRoZSBBWEltYWdlIHJvbGUsIGJ1dCBhIGRpZmZlcmVudCBzdWJyb2xlCisgICAgaWYgKG1f
b2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKKyAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50
Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVJvbGVEZXNj
cmlwdGlvbkF0dHJpYnV0ZV07CisgICAgCisgICAgTlNTdHJpbmcqIGF4Um9sZSA9IFtzZWxmIHJv
bGVdOworICAgIAorICAgIGlmIChbYXhSb2xlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlHcm91cFJvbGVdKSB7CisgICAgICAgIHN3aXRjaCAobV9vYmplY3QtPnJvbGVWYWx1ZSgpKSB7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBOU0FjY2Vzc2li
aWxpdHlSb2xlRGVzY3JpcHRpb24oTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlLCBbc2VsZiBzdWJy
b2xlXSk7CisgICAgICAgICAgICBjYXNlIExhbmRtYXJrQXBwbGljYXRpb25Sb2xlOgorICAgICAg
ICAgICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUxhbmRtYXJrQXBw
bGljYXRpb24iKTsKKyAgICAgICAgICAgIGNhc2UgTGFuZG1hcmtCYW5uZXJSb2xlOgorICAgICAg
ICAgICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUxhbmRtYXJrQmFu
bmVyIik7CisgICAgICAgICAgICBjYXNlIExhbmRtYXJrQ29tcGxlbWVudGFyeVJvbGU6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBTGFuZG1hcmtD
b21wbGVtZW50YXJ5Iik7CisgICAgICAgICAgICBjYXNlIExhbmRtYXJrQ29udGVudEluZm9Sb2xl
OgorICAgICAgICAgICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUxh
bmRtYXJrQ29udGVudEluZm8iKTsKKyAgICAgICAgICAgIGNhc2UgTGFuZG1hcmtNYWluUm9sZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFMYW5k
bWFya01haW4iKTsKKyAgICAgICAgICAgIGNhc2UgTGFuZG1hcmtOYXZpZ2F0aW9uUm9sZToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFMYW5kbWFy
a05hdmlnYXRpb24iKTsKKyAgICAgICAgICAgIGNhc2UgTGFuZG1hcmtTZWFyY2hSb2xlOgorICAg
ICAgICAgICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUxhbmRtYXJr
U2VhcmNoIik7CisgICAgICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQWxlcnRSb2xlOgorICAgICAg
ICAgICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUFwcGxpY2F0aW9u
QWxlcnQiKTsKKyAgICAgICAgICAgIGNhc2UgQXBwbGljYXRpb25BbGVydERpYWxvZ1JvbGU6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBQXBwbGlj
YXRpb25BbGVydERpYWxvZyIpOworICAgICAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkRpYWxvZ1Jv
bGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklB
QXBwbGljYXRpb25EaWFsb2ciKTsKKyAgICAgICAgICAgIGNhc2UgQXBwbGljYXRpb25Mb2dSb2xl
OgorICAgICAgICAgICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUFw
cGxpY2F0aW9uTG9nIik7CisgICAgICAgICAgICBjYXNlIEFwcGxpY2F0aW9uTWFycXVlZVJvbGU6
CisgICAgICAgICAgICAgICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBQXBw
bGljYXRpb25NYXJxdWVlIik7CisgICAgICAgICAgICBjYXNlIEFwcGxpY2F0aW9uU3RhdHVzUm9s
ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFB
cHBsaWNhdGlvblN0YXR1cyIpOworICAgICAgICAgICAgY2FzZSBBcHBsaWNhdGlvblRpbWVyUm9s
ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFB
cHBsaWNhdGlvblRpbWVyIik7CisgICAgICAgICAgICBjYXNlIERvY3VtZW50Um9sZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFEb2N1bWVudCIp
OworICAgICAgICAgICAgY2FzZSBEb2N1bWVudEFydGljbGVSb2xlOgorICAgICAgICAgICAgICAg
IHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQURvY3VtZW50QXJ0aWNsZSIpOwor
ICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hdGhSb2xlOgorICAgICAgICAgICAgICAgIHJldHVy
biBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQURvY3VtZW50TWF0aCIpOworICAgICAgICAg
ICAgY2FzZSBEb2N1bWVudE5vdGVSb2xlOgorICAgICAgICAgICAgICAgIHJldHVybiBBWEFSSUFD
b250ZW50R3JvdXBUZXh0KEAiQVJJQURvY3VtZW50Tm90ZSIpOworICAgICAgICAgICAgY2FzZSBE
b2N1bWVudFJlZ2lvblJvbGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRH
cm91cFRleHQoQCJBUklBRG9jdW1lbnRSZWdpb24iKTsKKyAgICAgICAgICAgIGNhc2UgVXNlcklu
dGVyZmFjZVRvb2x0aXBSb2xlOgorICAgICAgICAgICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50
R3JvdXBUZXh0KEAiQVJJQVVzZXJJbnRlcmZhY2VUb29sdGlwIik7CisgICAgICAgICAgICBjYXNl
IFRhYlBhbmVsUm9sZToKKyAgICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3Vw
VGV4dChAIkFSSUFUYWJQYW5lbCIpOworICAgICAgICAgICAgY2FzZSBEZWZpbml0aW9uUm9sZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gQVhEZWZpbml0aW9uVGV4dCgpOworICAgICAgICAgICAg
Y2FzZSBEZXNjcmlwdGlvbkxpc3RUZXJtUm9sZToKKyAgICAgICAgICAgICAgICByZXR1cm4gQVhE
ZXNjcmlwdGlvbkxpc3RUZXJtVGV4dCgpOworICAgICAgICAgICAgY2FzZSBEZXNjcmlwdGlvbkxp
c3REZXRhaWxSb2xlOgorICAgICAgICAgICAgICAgIHJldHVybiBBWERlc2NyaXB0aW9uTGlzdERl
dGFpbFRleHQoKTsKKyAgICAgICAgICAgIGNhc2UgRm9vdGVyUm9sZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gQVhGb290ZXJSb2xlRGVzY3JpcHRpb25UZXh0KCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgaWYgKFtheFJvbGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhXZWJBcmVhIl0pCisg
ICAgICAgIHJldHVybiBBWFdlYkFyZWFUZXh0KCk7CisgICAgCisgICAgaWYgKFtheFJvbGUgaXNF
cXVhbFRvU3RyaW5nOkAiQVhMaW5rIl0pCisgICAgICAgIHJldHVybiBBWExpbmtUZXh0KCk7Cisg
ICAgCisgICAgaWYgKFtheFJvbGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMaXN0TWFya2VyIl0pCisg
ICAgICAgIHJldHVybiBBWExpc3RNYXJrZXJUZXh0KCk7CisgICAgCisgICAgaWYgKFtheFJvbGUg
aXNFcXVhbFRvU3RyaW5nOkAiQVhJbWFnZU1hcCJdKQorICAgICAgICByZXR1cm4gQVhJbWFnZU1h
cFRleHQoKTsKKyAgICAKKyAgICBpZiAoW2F4Um9sZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEhlYWRp
bmciXSkKKyAgICAgICAgcmV0dXJuIEFYSGVhZGluZ1RleHQoKTsKKyAgICAKKyAgICBpZiAobV9v
YmplY3QtPmlzRmlsZVVwbG9hZEJ1dHRvbigpKQorICAgICAgICByZXR1cm4gQVhGaWxlVXBsb2Fk
QnV0dG9uVGV4dCgpOworICAgIAorICAgIC8vIEFwcEtpdCBhbHNvIHJldHVybnMgQVhUYWIgZm9y
IHRoZSByb2xlIGRlc2NyaXB0aW9uIGZvciBhIHRhYiBpdGVtLgorICAgIGlmIChtX29iamVjdC0+
aXNUYWJJdGVtKCkpCisgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRp
b24oQCJBWFRhYiIsIG5pbCk7CisgICAgCisgICAgLy8gV2Ugc2hvdWxkIHRyeSB0aGUgc3lzdGVt
IGRlZmF1bHQgcm9sZSBkZXNjcmlwdGlvbiBmb3IgYWxsIG90aGVyIHJvbGVzLgorICAgIC8vIElm
IHdlIGdldCB0aGUgc2FtZSBzdHJpbmcgYmFjaywgdGhlbiBhcyBhIGxhc3QgcmVzb3J0LCByZXR1
cm4gdW5rbm93bi4KKyAgICBOU1N0cmluZyogZGVmYXVsdFJvbGVEZXNjcmlwdGlvbiA9IE5TQWNj
ZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbihheFJvbGUsIFtzZWxmIHN1YnJvbGVdKTsKKyAgICAK
KyAgICAvLyBPbiBlYXJsaWVyIE1hYyB2ZXJzaW9ucyAoTGlvbiksIHVzaW5nIGEgbm9uLXN0YW5k
YXJkIHN1YnJvbGUgd291bGQgcmVzdWx0IGluIGEgcm9sZSBkZXNjcmlwdGlvbgorICAgIC8vIGJl
aW5nIHJldHVybmVkIHRoYXQgbG9va2VkIGxpa2UgQVhSb2xlOkFYU3Vicm9sZS4gVG8gbWFrZSBh
bGwgcGxhdGZvcm1zIGhhdmUgdGhlIHNhbWUgcm9sZSBkZXNjcmlwdGlvbnMKKyAgICAvLyB3ZSBz
aG91bGQgZmFsbGJhY2sgb24gYSByb2xlIGRlc2NyaXB0aW9uIGlnbm9yaW5nIHRoZSBzdWJyb2xl
IGluIHRoZXNlIGNhc2VzLgorICAgIGlmIChbZGVmYXVsdFJvbGVEZXNjcmlwdGlvbiBpc0VxdWFs
VG9TdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDolQCIsIGF4Um9sZSwgW3Nl
bGYgc3Vicm9sZV1dXSkKKyAgICAgICAgZGVmYXVsdFJvbGVEZXNjcmlwdGlvbiA9IE5TQWNjZXNz
aWJpbGl0eVJvbGVEZXNjcmlwdGlvbihheFJvbGUsIG5pbCk7CisgICAgCisgICAgaWYgKCFbZGVm
YXVsdFJvbGVEZXNjcmlwdGlvbiBpc0VxdWFsVG9TdHJpbmc6YXhSb2xlXSkKKyAgICAgICAgcmV0
dXJuIGRlZmF1bHRSb2xlRGVzY3JpcHRpb247CisgICAgCisgICAgcmV0dXJuIE5TQWNjZXNzaWJp
bGl0eVJvbGVEZXNjcmlwdGlvbihOU0FjY2Vzc2liaWxpdHlVbmtub3duUm9sZSwgbmlsKTsKK30K
KworLSAoaWQpc2Nyb2xsVmlld1BhcmVudAoreworICAgIGlmICghbV9vYmplY3QgfHwgIW1fb2Jq
ZWN0LT5pc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgCisgICAgLy8gSWYgdGhpcyBzY3JvbGwgdmlldyBwcm92aWRlcyBpdCdzIHBhcmVudCBvYmpl
Y3QgKGJlY2F1c2UgaXQncyBhIHN1Yi1mcmFtZSksIHRoZW4KKyAgICAvLyB3ZSBzaG91bGQgbm90
IGZpbmQgdGhlIHJlbW90ZUFjY2Vzc2liaWxpdHlQYXJlbnQuCisgICAgaWYgKG1fb2JqZWN0LT5w
YXJlbnRPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBBY2Nlc3NpYmls
aXR5U2Nyb2xsVmlldyogc2Nyb2xsVmlldyA9IHRvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcobV9v
YmplY3QpOworICAgIFNjcm9sbFZpZXcqIHNjcm9sbCA9IHNjcm9sbFZpZXctPnNjcm9sbFZpZXco
KTsKKyAgICBpZiAoIXNjcm9sbCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBpZiAo
c2Nyb2xsLT5wbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5
VW5pZ25vcmVkQW5jZXN0b3Ioc2Nyb2xsLT5wbGF0Zm9ybVdpZGdldCgpKTsKKyAgICAKKyAgICBy
ZXR1cm4gW3NlbGYgcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdF07Cit9CisKKy8vIEZJ
WE1FOiBEaWZmZXJlbnQga2luZHMgb2YgZWxlbWVudHMgYXJlIHB1dHRpbmcgdGhlIHRpdGxlIHRh
ZyB0byB1c2UgaW4gZGlmZmVyZW50CisvLyBBWCBmaWVsZHMuIFRoaXMgc2hvdWxkIGJlIHJlY3Rp
ZmllZCwgYnV0IGluIHRoZSBpbml0aWFsIHBhdGNoIEkgd2FudCB0byBhY2hpZXZlCisvLyBwYXJp
dHkgd2l0aCBleGlzdGluZyBiZWhhdmlvci4KKy0gKEJPT0wpdGl0bGVUYWdTaG91bGRCZVVzZWRJ
bkRlc2NyaXB0aW9uRmllbGQKK3sKKyAgICByZXR1cm4gKG1fb2JqZWN0LT5pc0xpbmsoKSAmJiAh
bV9vYmplY3QtPmlzSW1hZ2VNYXBMaW5rKCkpIHx8IG1fb2JqZWN0LT5pc0ltYWdlKCk7Cit9CisK
Ky8vIFRoaXMgc2hvdWxkIGJlIHRoZSAidmlzaWJsZSIgdGV4dCB0aGF0J3MgYWN0dWFsbHkgb24g
dGhlIHNjcmVlbiBpZiBwb3NzaWJsZS4KKy8vIElmIHRoZXJlJ3MgYWx0ZXJuYXRpdmUgdGV4dCwg
dGhhdCBjYW4gb3ZlcnJpZGUgdGhlIHRpdGxlLgorLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5
VGl0bGUKK3sKKyAgICAvLyBTdGF0aWMgdGV4dCBvYmplY3RzIHNob3VsZCBub3QgaGF2ZSBhIHRp
dGxlLiBJdHMgY29udGVudCBpcyBjb21tdW5pY2F0ZWQgaW4gaXRzIEFYVmFsdWUuCisgICAgaWYg
KG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBTdGF0aWNUZXh0Um9sZSkKKyAgICAgICAgcmV0dXJu
IFtOU1N0cmluZyBzdHJpbmddOworICAgIAorICAgIC8vIEEgZmlsZSB1cGxvYWQgYnV0dG9uIHBy
ZXNlbnRzIGEgY2hhbGxlbmdlIGJlY2F1c2UgaXQgaGFzIGJ1dHRvbiB0ZXh0IGFuZCBhIHZhbHVl
LCBidXQgdGhlCisgICAgLy8gQVBJIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIHBhcmFkaWdtLgorICAg
IC8vIFRoZSBjb21wcm9taXNlIGlzIHRvIHJldHVybiB0aGUgYnV0dG9uIHR5cGUgaW4gdGhlIHJv
bGUgZGVzY3JpcHRpb24gYW5kIHRoZSB2YWx1ZSBvZiB0aGUgZmlsZSBwYXRoIGluIHRoZSB0aXRs
ZQorICAgIGlmIChtX29iamVjdC0+aXNGaWxlVXBsb2FkQnV0dG9uKCkpCisgICAgICAgIHJldHVy
biBtX29iamVjdC0+c3RyaW5nVmFsdWUoKTsKKyAgICAKKyAgICBWZWN0b3I8QWNjZXNzaWJpbGl0
eVRleHQ+IHRleHRPcmRlcjsKKyAgICBtX29iamVjdC0+YWNjZXNzaWJpbGl0eVRleHQodGV4dE9y
ZGVyKTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0T3JkZXIuc2l6ZSgpOworICAg
IGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGg7IGsrKykgeworICAgICAgICBjb25zdCBB
Y2Nlc3NpYmlsaXR5VGV4dCYgdGV4dCA9IHRleHRPcmRlcltrXTsKKyAgICAgICAgCisgICAgICAg
IC8vIElmIHdlIGhhdmUgYWx0ZXJuYXRpdmUgdGV4dCwgdGhlbiB3ZSBzaG91bGQgbm90IGV4cG9z
ZSBhIHRpdGxlLgorICAgICAgICBpZiAodGV4dC50ZXh0U291cmNlID09IEFsdGVybmF0aXZlVGV4
dCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgLy8gT25jZSB3ZSBlbmNv
dW50ZXIgdmlzaWJsZSB0ZXh0LCBvciB0aGUgdGV4dCBmcm9tIG91ciBjaGlsZHJlbiB0aGF0IHNo
b3VsZCBiZSB1c2VkIGZvcmVtb3N0LgorICAgICAgICBpZiAodGV4dC50ZXh0U291cmNlID09IFZp
c2libGVUZXh0IHx8IHRleHQudGV4dFNvdXJjZSA9PSBDaGlsZHJlblRleHQpCisgICAgICAgICAg
ICByZXR1cm4gdGV4dC50ZXh0OworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhlcmUncyBhbiBl
bGVtZW50IHRoYXQgbGFiZWxzIHRoaXMgb2JqZWN0IGFuZCBpdCdzIG5vdCBleHBvc2VkLCB0aGVu
IHdlIHNob3VsZCB1c2UKKyAgICAgICAgLy8gdGhhdCB0ZXh0IGFzIG91ciB0aXRsZS4KKyAgICAg
ICAgaWYgKHRleHQudGV4dFNvdXJjZSA9PSBMYWJlbEJ5RWxlbWVudFRleHQgJiYgIW1fb2JqZWN0
LT5leHBvc2VzVGl0bGVVSUVsZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXh0LnRleHQ7
CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhlIHRpdGxlIHRhZyBpcyB1c2VkIGluIGNl
cnRhaW4gY2FzZXMgZm9yIHRoZSB0aXRsZS4gVGhpcyB1c2FnZSBzaG91bGQKKyAgICAgICAgLy8g
cHJvYmFibHkgYmUgaW4gdGhlIGRlc2NyaXB0aW9uIGZpZWxkIHNpbmNlIGl0J3Mgbm90ICJ2aXNp
YmxlIi4KKyAgICAgICAgaWYgKHRleHQudGV4dFNvdXJjZSA9PSBUaXRsZVRhZ1RleHQgJiYgIVtz
ZWxmIHRpdGxlVGFnU2hvdWxkQmVVc2VkSW5EZXNjcmlwdGlvbkZpZWxkXSkKKyAgICAgICAgICAg
IHJldHVybiB0ZXh0LnRleHQ7CisgICAgfQorICAgIAorICAgIHJldHVybiBbTlNTdHJpbmcgc3Ry
aW5nXTsKK30KKworLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24KK3sKKyAg
ICAvLyBTdGF0aWMgdGV4dCBvYmplY3RzIHNob3VsZCBub3QgaGF2ZSBhIGRlc2NyaXB0aW9uLiBJ
dHMgY29udGVudCBpcyBjb21tdW5pY2F0ZWQgaW4gaXRzIEFYVmFsdWUuCisgICAgLy8gT25lIGV4
Y2VwdGlvbiBpcyB0aGUgbWVkaWEgY29udHJvbCBsYWJlbHMgdGhhdCBoYXZlIGEgdmFsdWUgYW5k
IGEgZGVzY3JpcHRpb24uIFRob3NlIGFyZSBzZXQgcHJvZ3JhbWF0aWNhbGx5LgorICAgIGlmICht
X29iamVjdC0+cm9sZVZhbHVlKCkgPT0gU3RhdGljVGV4dFJvbGUgJiYgIW1fb2JqZWN0LT5pc01l
ZGlhQ29udHJvbExhYmVsKCkpCisgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nXTsKKyAg
ICAKKyAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eVRleHQ+IHRleHRPcmRlcjsKKyAgICBtX29iamVj
dC0+YWNjZXNzaWJpbGl0eVRleHQodGV4dE9yZGVyKTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5n
dGggPSB0ZXh0T3JkZXIuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5n
dGg7IGsrKykgeworICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5VGV4dCYgdGV4dCA9IHRleHRP
cmRlcltrXTsKKyAgICAgICAgCisgICAgICAgIGlmICh0ZXh0LnRleHRTb3VyY2UgPT0gQWx0ZXJu
YXRpdmVUZXh0KQorICAgICAgICAgICAgcmV0dXJuIHRleHQudGV4dDsKKyAgICAgICAgCisgICAg
ICAgIGlmICh0ZXh0LnRleHRTb3VyY2UgPT0gVGl0bGVUYWdUZXh0ICYmIFtzZWxmIHRpdGxlVGFn
U2hvdWxkQmVVc2VkSW5EZXNjcmlwdGlvbkZpZWxkXSkKKyAgICAgICAgICAgIHJldHVybiB0ZXh0
LnRleHQ7CisgICAgfQorICAgIAorICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nXTsKK30KKwor
LSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5SGVscFRleHQKK3sKKyAgICBWZWN0b3I8QWNjZXNz
aWJpbGl0eVRleHQ+IHRleHRPcmRlcjsKKyAgICBtX29iamVjdC0+YWNjZXNzaWJpbGl0eVRleHQo
dGV4dE9yZGVyKTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0T3JkZXIuc2l6ZSgp
OworICAgIGJvb2wgZGVzY3JpcHRpdmVUZXh0QXZhaWxhYmxlID0gZmFsc2U7CisgICAgZm9yICh1
bnNpZ25lZCBrID0gMDsgayA8IGxlbmd0aDsgaysrKSB7CisgICAgICAgIGNvbnN0IEFjY2Vzc2li
aWxpdHlUZXh0JiB0ZXh0ID0gdGV4dE9yZGVyW2tdOworICAgICAgICAKKyAgICAgICAgaWYgKHRl
eHQudGV4dFNvdXJjZSA9PSBIZWxwVGV4dCB8fCB0ZXh0LnRleHRTb3VyY2UgPT0gU3VtbWFyeVRl
eHQpCisgICAgICAgICAgICByZXR1cm4gdGV4dC50ZXh0OworICAgICAgICAKKyAgICAgICAgLy8g
SWYgYW4gZWxlbWVudCBkb2VzIE5PVCBoYXZlIG90aGVyIGRlc2NyaXB0aXZlIHRleHQgdGhlIHRp
dGxlIHRhZyBzaG91bGQgYmUgdXNlZCBhcyBpdHMgZGVzY3JpcHRpdmUgdGV4dC4KKyAgICAgICAg
Ly8gQnV0LCBpZiB0aG9zZSBBUkUgYXZhaWxhYmxlLCB0aGVuIHRoZSB0aXRsZSB0YWcgc2hvdWxk
IGJlIHVzZWQgZm9yIGhlbHAgdGV4dCBpbnN0ZWFkLgorICAgICAgICBzd2l0Y2ggKHRleHQudGV4
dFNvdXJjZSkgeworICAgICAgICAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHQ6CisgICAgICAgICAg
ICBjYXNlIFZpc2libGVUZXh0OgorICAgICAgICAgICAgY2FzZSBDaGlsZHJlblRleHQ6CisgICAg
ICAgICAgICBjYXNlIExhYmVsQnlFbGVtZW50VGV4dDoKKyAgICAgICAgICAgICAgICBkZXNjcmlw
dGl2ZVRleHRBdmFpbGFibGUgPSB0cnVlOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHRleHQudGV4
dFNvdXJjZSA9PSBUaXRsZVRhZ1RleHQgJiYgZGVzY3JpcHRpdmVUZXh0QXZhaWxhYmxlKQorICAg
ICAgICAgICAgcmV0dXJuIHRleHQudGV4dDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIFtOU1N0
cmluZyBzdHJpbmddOworfQorCisvLyBGSVhNRTogc3BsaXQgdXAgdGhpcyBmdW5jdGlvbiBpbiBh
IGJldHRlciB3YXkuCisvLyBzdWdnZXN0aW9uczogVXNlIGEgaGFzaCB0YWJsZSB0aGF0IG1hcHMg
YXR0cmlidXRlIG5hbWVzIHRvIGZ1bmN0aW9uIGNhbGxzLAorLy8gb3IgbWF5YmUgcG9pbnRlcnMg
dG8gbWVtYmVyIGZ1bmN0aW9ucworLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihO
U1N0cmluZyopYXR0cmlidXRlTmFtZQoreworICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFj
a2luZ1N0b3JlXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlXSkKKyAg
ICAgICAgcmV0dXJuIFtzZWxmIHJvbGVdOworICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVN1YnJvbGVBdHRyaWJ1dGVdKQorICAgICAg
ICByZXR1cm4gW3NlbGYgc3Vicm9sZV07CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0cmlidXRlXSkK
KyAgICAgICAgcmV0dXJuIFtzZWxmIHJvbGVEZXNjcmlwdGlvbl07CisgICAgCisgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5UGFyZW50QXR0cmli
dXRlXSkgeworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiB0aGUgcGFyZW50
IG9mIHRoZSBBWFdlYkFyZWEsIGlmIHRoaXMgaXMgYSB3ZWIgYXJlYS4KKyAgICAgICAgaWQgc2Ny
b2xsVmlld1BhcmVudCA9IFtzZWxmIHNjcm9sbFZpZXdQYXJlbnRdOworICAgICAgICBpZiAoc2Ny
b2xsVmlld1BhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxWaWV3UGFyZW50OworICAg
ICAgICAKKyAgICAgICAgLy8gVHJlZSBpdGVtIChjaGFuZ2VkIHRvIEFYUm93cykgY2FuIG9ubHkg
cmVwb3J0IHRoZSB0cmVlIChBWE91dGxpbmUpIGFzIGl0cyBwYXJlbnQuCisgICAgICAgIGlmICht
X29iamVjdC0+aXNUcmVlSXRlbSgpKSB7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CisgICAgICAgICAg
ICB3aGlsZSAocGFyZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNUcmVlKCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKKyAgICAgICAg
ICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CisgICAgICAgIGlm
ICghcGFyZW50KQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgCisgICAgICAgIC8v
IEluIFdlYktpdDEsIHRoZSBzY3JvbGwgdmlldyBpcyBwcm92aWRlZCBieSB0aGUgc3lzdGVtICh0
aGUgYXR0YWNobWVudCB2aWV3KSwgc28gdGhlIHBhcmVudAorICAgICAgICAvLyBzaG91bGQgYmUg
cmVwb3J0ZWQgZGlyZWN0bHkgYXMgc3VjaC4KKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1dlYkFy
ZWEoKSAmJiBwYXJlbnQtPmlzQXR0YWNobWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIFtwYXJl
bnQtPndyYXBwZXIoKSBhdHRhY2htZW50Vmlld107CisgICAgICAgIAorICAgICAgICByZXR1cm4g
cGFyZW50LT53cmFwcGVyKCk7CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSkgeworICAg
ICAgICBpZiAobV9vYmplY3QtPmNoaWxkcmVuKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBO
U0FycmF5KiBjaGlsZHJlbiA9IFtzZWxmIHJlbmRlcldpZGdldENoaWxkcmVuXTsKKyAgICAgICAg
ICAgIGlmIChjaGlsZHJlbiAhPSBuaWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBUaGUgdHJlZSdzIChBWE91dGxpbmUp
IGNoaWxkcmVuIGFyZSBzdXBwb3NlZCB0byBiZSBpdHMgcm93cyBhbmQgY29sdW1ucy4KKyAgICAg
ICAgLy8gVGhlIEFSSUEgc3BlYyBkb2Vzbid0IGhhdmUgY29sdW1ucywgc28gd2UganVzdCBuZWVk
IHJvd3MuCisgICAgICAgIGlmIChtX29iamVjdC0+aXNUcmVlKCkpCisgICAgICAgICAgICByZXR1
cm4gW3NlbGYgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVJvd3NB
dHRyaWJ1dGVdOworICAgICAgICAKKyAgICAgICAgLy8gQSB0cmVlIGl0ZW0gc2hvdWxkIG9ubHkg
ZXhwb3NlIGl0cyBjb250ZW50IGFzIGl0cyBjaGlsZHJlbiAobm90IGl0cyByb3dzKQorICAgICAg
ICBpZiAobV9vYmplY3QtPmlzVHJlZUl0ZW0oKSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbnRlbnRDb3B5OworICAgICAg
ICAgICAgbV9vYmplY3QtPmFyaWFUcmVlSXRlbUNvbnRlbnQoY29udGVudENvcHkpOworICAgICAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29udGVudENvcHkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShtX29iamVjdC0+Y2hpbGRy
ZW4oKSk7CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGVdKSB7CisgICAgICAg
IGlmIChtX29iamVjdC0+aXNMaXN0Qm94KCkpIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZENoaWxkcmVuQ29weTsK
KyAgICAgICAgICAgIG1fb2JqZWN0LT5zZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW5D
b3B5KTsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHNlbGVjdGVkQ2hpbGRy
ZW5Db3B5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICAKKyAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlWaXNp
YmxlQ2hpbGRyZW5BdHRyaWJ1dGVdKSB7CisgICAgICAgIGlmIChtX29iamVjdC0+aXNMaXN0Qm94
KCkpIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciB2aXNpYmxlQ2hpbGRyZW5Db3B5OworICAgICAgICAgICAgbV9vYmplY3QtPnZp
c2libGVDaGlsZHJlbih2aXNpYmxlQ2hpbGRyZW5Db3B5KTsKKyAgICAgICAgICAgIHJldHVybiBj
b252ZXJ0VG9OU0FycmF5KHZpc2libGVDaGlsZHJlbkNvcHkpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKG1fb2JqZWN0LT5pc0xpc3QoKSkKKyAgICAgICAgICAgIHJldHVybiBbc2VsZiBh
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1
dGVdOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgCisgICAgCisg
ICAgaWYgKG1fb2JqZWN0LT5pc1dlYkFyZWEoKSkgeworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMaW5rVUlFbGVtZW50cyJdKSB7CisgICAgICAgICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgbGlua3M7Cisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Kj4obV9vYmpl
Y3QpLT5nZXREb2N1bWVudExpbmtzKGxpbmtzKTsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0
VG9OU0FycmF5KGxpbmtzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOkAiQVhMb2FkZWQiXSkKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmlzTG9hZGVkKCldOworICAgICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMYXlvdXRDb3VudCJdKQorICAgICAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Om1fb2JqZWN0LT5sYXlvdXRDb3VudCgp
XTsKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlMb2FkaW5nUHJvZ3Jlc3NBdHRyaWJ1dGVdKQorICAgICAgICAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoRG91YmxlOm1fb2JqZWN0LT5lc3RpbWF0ZWRMb2FkaW5nUHJvZ3Jlc3Mo
KV07CisgICAgfQorICAgIAorICAgIGlmIChtX29iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7Cisg
ICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0
eU51bWJlck9mQ2hhcmFjdGVyc0F0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIGludCBsZW5ndGgg
PSBtX29iamVjdC0+dGV4dExlbmd0aCgpOworICAgICAgICAgICAgaWYgKGxlbmd0aCA8IDApCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIg
bnVtYmVyV2l0aFVuc2lnbmVkSW50Omxlbmd0aF07CisgICAgICAgIH0KKyAgICAgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0
QXR0cmlidXRlXSkgeworICAgICAgICAgICAgU3RyaW5nIHNlbGVjdGVkVGV4dCA9IG1fb2JqZWN0
LT5zZWxlY3RlZFRleHQoKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3RlZFRleHQuaXNOdWxsKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgICAgIHJldHVybiAoTlNTdHJp
bmcqKXNlbGVjdGVkVGV4dDsKKyAgICAgICAgfQorICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0dHJpYnV0
ZV0pIHsKKyAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5z
ZWxlY3RlZFRleHRSYW5nZSgpOworICAgICAgICAgICAgaWYgKHRleHRSYW5nZS5pc051bGwoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6TlNNYWtlUmFu
Z2UoMCwgMCldOworICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOk5T
TWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0aCldOworICAgICAgICB9
CisgICAgICAgIC8vIFRPRE86IEdldCBhY3R1YWwgdmlzaWJsZSByYW5nZS4gPHJkYXI6Ly9wcm9i
bGVtLzQ3MTIxMDE+CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
IE5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZV0pCisgICAgICAg
ICAgICByZXR1cm4gbV9vYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpID8gbmlsIDogW05TVmFsdWUg
dmFsdWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdlKDAsIG1fb2JqZWN0LT50ZXh0TGVuZ3RoKCkpXTsK
KyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmls
aXR5SW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyQXR0cmlidXRlXSkgeworICAgICAgICAgICAgLy8g
aWYgc2VsZWN0aW9uRW5kID4gMCwgdGhlbiB0aGVyZSBpcyBzZWxlY3RlZCB0ZXh0IGFuZCB0aGlz
IHF1ZXN0aW9uIHNob3VsZCBub3QgYmUgYW5zd2VyZWQKKyAgICAgICAgICAgIGlmIChtX29iamVj
dC0+aXNQYXNzd29yZEZpZWxkKCkgfHwgbV9vYmplY3QtPnNlbGVjdGlvbkVuZCgpID4gMCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgCisgICAgICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBmb2N1c2VkT2JqZWN0ID0gbV9vYmplY3QtPmZvY3VzZWRVSUVsZW1l
bnQoKTsKKyAgICAgICAgICAgIGlmIChmb2N1c2VkT2JqZWN0ICE9IG1fb2JqZWN0KQorICAgICAg
ICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBmb2N1c2VkUG9zaXRpb24gPSBmb2N1c2VkT2JqZWN0LT52aXNpYmxlUG9zaXRpb25G
b3JJbmRleChmb2N1c2VkT2JqZWN0LT5zZWxlY3Rpb25TdGFydCgpLCB0cnVlKTsKKyAgICAgICAg
ICAgIGludCBsaW5lTnVtYmVyID0gbV9vYmplY3QtPmxpbmVGb3JQb3NpdGlvbihmb2N1c2VkUG9z
aXRpb24pOworICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPCAwKQorICAgICAgICAgICAgICAg
IHJldHVybiBuaWw7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIg
bnVtYmVyV2l0aEludDpsaW5lTnVtYmVyXTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlVUkxBdHRy
aWJ1dGVdKSB7CisgICAgICAgIEtVUkwgdXJsID0gbV9vYmplY3QtPnVybCgpOworICAgICAgICBp
ZiAodXJsLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJu
IChOU1VSTCopdXJsOworICAgIH0KKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlzU3BpbkJ1dHRv
bigpKSB7CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5SW5jcmVtZW50QnV0dG9uQXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVybiB0
b0FjY2Vzc2liaWxpdHlTcGluQnV0dG9uKG1fb2JqZWN0KS0+aW5jcmVtZW50QnV0dG9uKCktPndy
YXBwZXIoKTsKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlEZWNyZW1lbnRCdXR0b25BdHRyaWJ1dGVdKQorICAgICAgICAgICAgcmV0dXJu
IHRvQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24obV9vYmplY3QpLT5kZWNyZW1lbnRCdXR0b24oKS0+
d3JhcHBlcigpOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOiBAIkFYVmlzaXRlZCJdKQorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldp
dGhCb29sOiBtX29iamVjdC0+aXNWaXNpdGVkKCldOworICAgIAorICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVRpdGxlQXR0cmlidXRlXSkgewor
ICAgICAgICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKSB7CisgICAgICAgICAgICBpZiAo
W1tbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSBjb250
YWluc09iamVjdDpOU0FjY2Vzc2liaWxpdHlUaXRsZUF0dHJpYnV0ZV0pCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZh
bHVlOk5TQWNjZXNzaWJpbGl0eVRpdGxlQXR0cmlidXRlXTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIFtzZWxmIGFjY2Vzc2liaWxpdHlUaXRsZV07CisgICAgfQorICAgIAor
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eURl
c2NyaXB0aW9uQXR0cmlidXRlXSkgeworICAgICAgICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVu
dCgpKSB7CisgICAgICAgICAgICBpZiAoW1tbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZU5hbWVzXSBjb250YWluc09iamVjdDpOU0FjY2Vzc2liaWxpdHlEZXNjcmlw
dGlvbkF0dHJpYnV0ZV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50
Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eURlc2NyaXB0
aW9uQXR0cmlidXRlXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gW3NlbGYgYWNjZXNzaWJp
bGl0eURlc2NyaXB0aW9uXTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdKSB7CisgICAgICAg
IGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChbW1tzZWxm
IGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdIGNvbnRhaW5zT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNB
Y2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdOworICAgICAgICB9CisgICAgICAgIGlmIChtX29i
amVjdC0+c3VwcG9ydHNSYW5nZVZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVy
IG51bWJlcldpdGhGbG9hdDptX29iamVjdC0+dmFsdWVGb3JSYW5nZSgpXTsKKyAgICAgICAgaWYg
KG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBTbGlkZXJUaHVtYlJvbGUpCisgICAgICAgICAgICBy
ZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDptX29iamVjdC0+cGFyZW50T2JqZWN0KCkt
PnZhbHVlRm9yUmFuZ2UoKV07CisgICAgICAgIGlmIChtX29iamVjdC0+aXNIZWFkaW5nKCkpCisg
ICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bV9vYmplY3QtPmhlYWRp
bmdMZXZlbCgpXTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX29iamVjdC0+aXNDaGVja2JveE9y
UmFkaW8oKSkgeworICAgICAgICAgICAgc3dpdGNoIChtX29iamVjdC0+Y2hlY2tib3hPclJhZGlv
VmFsdWUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQnV0dG9uU3RhdGVPZmY6CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDowXTsKKyAgICAgICAg
ICAgICAgICBjYXNlIEJ1dHRvblN0YXRlT246CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBb
TlNOdW1iZXIgbnVtYmVyV2l0aEludDoxXTsKKyAgICAgICAgICAgICAgICBjYXNlIEJ1dHRvblN0
YXRlTWl4ZWQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0
aEludDoyXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
cmFkaW8gZ3JvdXBzIHJldHVybiB0aGUgc2VsZWN0ZWQgcmFkaW8gYnV0dG9uIGFzIHRoZSBBWFZh
bHVlCisgICAgICAgIGlmIChtX29iamVjdC0+aXNSYWRpb0dyb3VwKCkpIHsKKyAgICAgICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIHJhZGlvQnV0dG9uID0gbV9vYmplY3QtPnNlbGVjdGVkUmFk
aW9CdXR0b24oKTsKKyAgICAgICAgICAgIGlmICghcmFkaW9CdXR0b24pCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAgICAgICAgIHJldHVybiByYWRpb0J1dHRvbi0+d3JhcHBlcigp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9vYmplY3QtPmlzVGFiTGlzdCgp
KSB7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB0YWJJdGVtID0gbV9vYmplY3Qt
PnNlbGVjdGVkVGFiSXRlbSgpOworICAgICAgICAgICAgaWYgKCF0YWJJdGVtKQorICAgICAgICAg
ICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICByZXR1cm4gdGFiSXRlbS0+d3JhcHBlcigp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9vYmplY3QtPmlzVGFiSXRlbSgp
KQorICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Om1fb2JqZWN0LT5p
c1NlbGVjdGVkKCldOworICAgICAgICAKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc0NvbG9yV2Vs
bCgpKSB7CisgICAgICAgICAgICBpbnQgciwgZywgYjsKKyAgICAgICAgICAgIG1fb2JqZWN0LT5j
b2xvclZhbHVlKHIsIGcsIGIpOworICAgICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAicmdiICU3LjVmICU3LjVmICU3LjVmIDEiLCByIC8gMjU1LiwgZyAvIDI1NS4s
IGIgLyAyNTUuXTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0
LT5zdHJpbmdWYWx1ZSgpOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlNaW5WYWx1ZUF0dHJpYnV0ZV0pCisgICAgICAg
IHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Om1fb2JqZWN0LT5taW5WYWx1ZUZvclJh
bmdlKCldOworICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5T
QWNjZXNzaWJpbGl0eU1heFZhbHVlQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtOU051bWJl
ciBudW1iZXJXaXRoRmxvYXQ6bV9vYmplY3QtPm1heFZhbHVlRm9yUmFuZ2UoKV07CisgICAgCisg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5SGVs
cEF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbc2VsZiBhY2Nlc3NpYmlsaXR5SGVscFRleHRd
OworICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNz
aWJpbGl0eUZvY3VzZWRBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJl
cldpdGhCb29sOiBtX29iamVjdC0+aXNGb2N1c2VkKCldOworICAgIAorICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGVd
KQorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOiBtX29iamVjdC0+aXNF
bmFibGVkKCldOworICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
IE5TQWNjZXNzaWJpbGl0eVNpemVBdHRyaWJ1dGVdKSB7CisgICAgICAgIEludFNpemUgcyA9IG1f
b2JqZWN0LT5waXhlbFNuYXBwZWRTaXplKCk7CisgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1
ZVdpdGhTaXplOiBOU01ha2VTaXplKHMud2lkdGgoKSwgcy5oZWlnaHQoKSldOworICAgIH0KKyAg
ICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxp
dHlQb3NpdGlvbkF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbc2VsZiBwb3NpdGlvbl07Cisg
ICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmls
aXR5V2luZG93QXR0cmlidXRlXSB8fAorICAgICAgICBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6IE5TQWNjZXNzaWJpbGl0eVRvcExldmVsVUlFbGVtZW50QXR0cmlidXRlXSkgeworICAg
ICAgICAKKyAgICAgICAgaWQgcmVtb3RlUGFyZW50ID0gW3NlbGYgcmVtb3RlQWNjZXNzaWJpbGl0
eVBhcmVudE9iamVjdF07CisgICAgICAgIGlmIChyZW1vdGVQYXJlbnQpCisgICAgICAgICAgICBy
ZXR1cm4gW3JlbW90ZVBhcmVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6YXR0cmlidXRl
TmFtZV07CisgICAgICAgIAorICAgICAgICBGcmFtZVZpZXcqIGZ2ID0gbV9vYmplY3QtPmRvY3Vt
ZW50RnJhbWVWaWV3KCk7CisgICAgICAgIGlmIChmdikKKyAgICAgICAgICAgIHJldHVybiBbZnYt
PnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93XTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9Cisg
ICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlBY2Nlc3NLZXlBdHRyaWJ1dGVdKSB7CisgICAgICAgIEF0b21pY1N0cmluZyBhY2Nlc3NLZXkg
PSBtX29iamVjdC0+YWNjZXNzS2V5KCk7CisgICAgICAgIGlmIChhY2Nlc3NLZXkuaXNOdWxsKCkp
CisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gYWNjZXNzS2V5OworICAg
IH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eVRhYnNBdHRyaWJ1dGVdKSB7CisgICAgICAgIGlmIChtX29iamVjdC0+aXNUYWJMaXN0
KCkpIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciB0YWJzQ2hpbGRyZW47CisgICAgICAgICAgICBtX29iamVjdC0+dGFiQ2hpbGRy
ZW4odGFic0NoaWxkcmVuKTsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHRh
YnNDaGlsZHJlbik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb250ZW50c0F0dHJpYnV0ZV0pIHsK
KyAgICAgICAgLy8gVGhlIGNvbnRlbnRzIG9mIGEgdGFiIGxpc3QgYXJlIGFsbCB0aGUgY2hpbGRy
ZW4gZXhjZXB0IHRoZSB0YWJzLgorICAgICAgICBpZiAobV9vYmplY3QtPmlzVGFiTGlzdCgpKSB7
CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3IgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB0YWJzQ2hpbGRyZW47
CisgICAgICAgICAgICBtX29iamVjdC0+dGFiQ2hpbGRyZW4odGFic0NoaWxkcmVuKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIGNvbnRlbnRzOworICAgICAgICAgICAgdW5zaWduZWQgY2hpbGRyZW5TaXpl
ID0gY2hpbGRyZW4uc2l6ZSgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8
IGNoaWxkcmVuU2l6ZTsgKytrKSB7CisgICAgICAgICAgICAgICAgaWYgKHRhYnNDaGlsZHJlbi5m
aW5kKGNoaWxkcmVuW2tdKSA9PSBXVEY6Om5vdEZvdW5kKQorICAgICAgICAgICAgICAgICAgICBj
b250ZW50cy5hcHBlbmQoY2hpbGRyZW5ba10pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29udGVudHMpOworICAgICAgICB9IGVsc2UgaWYgKG1f
b2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxk
cmVuKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEEgc2Nyb2xsVmlldydzIGNvbnRl
bnRzIGFyZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgc2Nyb2xsIGJhcnMuCisgICAgICAgICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29udGVudHM7
CisgICAgICAgICAgICB1bnNpZ25lZCBjaGlsZHJlblNpemUgPSBjaGlsZHJlbi5zaXplKCk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY2hpbGRyZW5TaXplOyArK2spIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuW2tdLT5pc1Njcm9sbGJhcigpKQorICAgICAg
ICAgICAgICAgICAgICBjb250ZW50cy5hcHBlbmQoY2hpbGRyZW5ba10pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29udGVudHMpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIGlmIChtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUo
KSkgeworICAgICAgICAvLyBUT0RPOiBkaXN0aW5ndWlzaCBiZXR3ZWVuIHZpc2libGUgYW5kIG5v
bi12aXNpYmxlIHJvd3MKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlSb3dzQXR0cmlidXRlXSB8fAorICAgICAgICAgICAgW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZpc2libGVSb3dzQXR0cmlidXRl
XSkgeworICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoc3RhdGljX2Nhc3Q8QWNj
ZXNzaWJpbGl0eVRhYmxlKj4obV9vYmplY3QpLT5yb3dzKCkpOworICAgICAgICB9CisgICAgICAg
IC8vIFRPRE86IGRpc3Rpbmd1aXNoIGJldHdlZW4gdmlzaWJsZSBhbmQgbm9uLXZpc2libGUgY29s
dW1ucworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eUNvbHVtbnNBdHRyaWJ1dGVdIHx8CisgICAgICAgICAgICBbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNvbHVtbnNBdHRyaWJ1dGVdKSB7
CisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShzdGF0aWNfY2FzdDxBY2Nlc3Np
YmlsaXR5VGFibGUqPihtX29iamVjdCktPmNvbHVtbnMoKSk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5U2VsZWN0ZWRSb3dzQXR0cmlidXRlXSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkQ2hpbGRyZW5Db3B5Owor
ICAgICAgICAgICAgbV9vYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbkNv
cHkpOworICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoc2VsZWN0ZWRDaGlsZHJl
bkNvcHkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBIVE1MIHRhYmxlcyBkb24n
dCBzdXBwb3J0IHRoZXNlCisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDb2x1bW5zQXR0cmlidXRlXSB8fAorICAgICAgICAg
ICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVk
Q2VsbHNBdHRyaWJ1dGVdKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgCisgICAg
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICopa0FYQ29s
dW1uSGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb2x1bW5IZWFkZXJzOworICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4obV9vYmplY3QpLT5jb2x1
bW5IZWFkZXJzKGNvbHVtbkhlYWRlcnMpOworICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05T
QXJyYXkoY29sdW1uSGVhZGVycyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SGVhZGVyQXR0cmli
dXRlXSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogaGVhZGVyQ29udGFpbmVy
ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4obV9vYmplY3QpLT5oZWFkZXJDb250
YWluZXIoKTsKKyAgICAgICAgICAgIGlmIChoZWFkZXJDb250YWluZXIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGhlYWRlckNvbnRhaW5lci0+d3JhcHBlcigpOworICAgICAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb3dIZWFkZXJVSUVsZW1lbnRzQXR0cmlidXRl
XSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIHJvd0hlYWRlcnM7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGUqPihtX29iamVjdCktPnJvd0hlYWRlcnMocm93SGVhZGVycyk7CisgICAgICAgICAg
ICByZXR1cm4gY29udmVydFRvTlNBcnJheShyb3dIZWFkZXJzKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlWaXNpYmxlQ2VsbHNBdHRyaWJ1dGVdKSB7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2VsbHM7CisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihtX29iamVjdCktPmNlbGxzKGNlbGxzKTsK
KyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGNlbGxzKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlzVGFibGVDb2x1bW4oKSkgeworICAgICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUluZGV4
QXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpz
dGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4qPihtX29iamVjdCktPmNvbHVtbklu
ZGV4KCldOworICAgICAgICAKKyAgICAgICAgLy8gcm93cyBhdHRyaWJ1dGUgZm9yIGEgY29sdW1u
IGlzIHRoZSBsaXN0IG9mIGFsbCB0aGUgZWxlbWVudHMgaW4gdGhhdCBjb2x1bW4gYXQgZWFjaCBy
b3cKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlSb3dzQXR0cmlidXRlXSB8fAorICAgICAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZpc2libGVSb3dzQXR0cmlidXRlXSkgeworICAgICAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlQ29sdW1uKj4obV9vYmplY3QpLT5jaGlsZHJlbigpKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUhlYWRlckF0
dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlciA9IHN0
YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbio+KG1fb2JqZWN0KS0+aGVhZGVyT2Jq
ZWN0KCk7CisgICAgICAgICAgICBpZiAoIWhlYWRlcikKKyAgICAgICAgICAgICAgICByZXR1cm4g
bmlsOworICAgICAgICAgICAgcmV0dXJuIGhlYWRlci0+d3JhcHBlcigpOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIGlmIChtX29iamVjdC0+aXNUYWJsZUNlbGwoKSkgeworICAgICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvd0luZGV4
UmFuZ2VBdHRyaWJ1dGVdKSB7CisgICAgICAgICAgICBwYWlyPGludCwgaW50PiByb3dSYW5nZTsK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqPihtX29iamVj
dCktPnJvd0luZGV4UmFuZ2Uocm93UmFuZ2UpOworICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVl
IHZhbHVlV2l0aFJhbmdlOk5TTWFrZVJhbmdlKHJvd1JhbmdlLmZpcnN0LCByb3dSYW5nZS5zZWNv
bmQpXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eUNvbHVtbkluZGV4UmFuZ2VBdHRyaWJ1dGVdKSB7CisgICAgICAg
ICAgICBwYWlyPGludCwgaW50PiBjb2x1bW5SYW5nZTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqPihtX29iamVjdCktPmNvbHVtbkluZGV4UmFuZ2UoY29s
dW1uUmFuZ2UpOworICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOk5T
TWFrZVJhbmdlKGNvbHVtblJhbmdlLmZpcnN0LCBjb2x1bW5SYW5nZS5zZWNvbmQpXTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlzVHJlZSgpKSB7CisgICAgICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0
ZWRSb3dzQXR0cmlidXRlXSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkQ2hpbGRyZW5Db3B5OworICAgICAgICAg
ICAgbV9vYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOworICAg
ICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5Um93c0F0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dzQ29weTsKKyAgICAgICAgICAg
IG1fb2JqZWN0LT5hcmlhVHJlZVJvd3Mocm93c0NvcHkpOworICAgICAgICAgICAgcmV0dXJuIGNv
bnZlcnRUb05TQXJyYXkocm93c0NvcHkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBUcmVlUm9sZXMgZG8gbm90IHN1cHBvcnQgY29sdW1ucywgYnV0IE1hYyBBWCBleHBlY3RzIHRv
IGJlIGFibGUgdG8gYXNrIGFib3V0IGNvbHVtbnMgYXQgdGhlIGxlYXN0LgorICAgICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNvbHVtbnNBdHRy
aWJ1dGVdKQorICAgICAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5XTsKKyAgICB9CisgICAg
CisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJ
bmRleEF0dHJpYnV0ZV0pIHsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsK
KyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1fb2JqZWN0LT5wYXJl
bnRPYmplY3QoKTsKKyAgICAgICAgICAgIGZvciAoOyBwYXJlbnQgJiYgIXBhcmVudC0+aXNUcmVl
KCk7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpCisgICAgICAgICAgICB7IH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFwYXJlbnQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRmluZCB0aGUgaW5kZXggb2Yg
dGhpcyBpdGVtIGJ5IGl0ZXJhdGluZyB0aGUgcGFyZW50cy4KKyAgICAgICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dzQ29weTsKKyAgICAg
ICAgICAgIHBhcmVudC0+YXJpYVRyZWVSb3dzKHJvd3NDb3B5KTsKKyAgICAgICAgICAgIHNpemVf
dCBjb3VudCA9IHJvd3NDb3B5LnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGsgPSAw
OyBrIDwgY291bnQ7ICsraykKKyAgICAgICAgICAgICAgICBpZiAocm93c0NvcHlba10tPndyYXBw
ZXIoKSA9PSBzZWxmKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJl
cldpdGhVbnNpZ25lZEludDprXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9vYmplY3QtPmlzVGFibGVSb3coKSkgeworICAg
ICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlJbmRleEF0dHJpYnV0ZV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1i
ZXJXaXRoSW50OnN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZVJvdyo+KG1fb2JqZWN0KS0+
cm93SW5kZXgoKV07CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHJvd3MgdGhh
dCBhcmUgY29uc2lkZXJlZCBpbnNpZGUgdGhpcyByb3cuCisgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zZWRSb3dzQXR0cmlidXRlXSkg
eworICAgICAgICBpZiAobV9vYmplY3QtPmlzVHJlZUl0ZW0oKSkgeworICAgICAgICAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3NDb3B5Owor
ICAgICAgICAgICAgbV9vYmplY3QtPmFyaWFUcmVlSXRlbURpc2Nsb3NlZFJvd3Mocm93c0NvcHkp
OworICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkocm93c0NvcHkpOworICAgICAg
ICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5pc0FSSUFUcmVlR3JpZFJvdygpKSB7CisgICAgICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93c0Nv
cHk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cqPiht
X29iamVjdCktPmRpc2Nsb3NlZFJvd3Mocm93c0NvcHkpOworICAgICAgICAgICAgcmV0dXJuIGNv
bnZlcnRUb05TQXJyYXkocm93c0NvcHkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8v
IFRoZSByb3cgdGhhdCBjb250YWlucyB0aGlzIHJvdy4gSXQgc2hvdWxkIGJlIHRoZSBzYW1lIGFz
IHRoZSBmaXJzdCBwYXJlbnQgdGhhdCBpcyBhIHRyZWVpdGVtLgorICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc2VkQnlSb3dBdHRyaWJ1
dGVdKSB7CisgICAgICAgIGlmIChtX29iamVjdC0+aXNUcmVlSXRlbSgpKSB7CisgICAgICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7
CisgICAgICAgICAgICB3aGlsZSAocGFyZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcmVu
dC0+aXNUcmVlSXRlbSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50LT53cmFw
cGVyKCk7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmVudCBpcyB0aGUgdHJlZSBpdHNl
bGYsIHRoZW4gdGhpcyB2YWx1ZSA9PSBuaWwuCisgICAgICAgICAgICAgICAgaWYgKHBhcmVudC0+
aXNUcmVlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICAg
ICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0gZWxzZSBpZiAobV9vYmplY3QtPmlzQVJJQVRy
ZWVHcmlkUm93KCkpIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvdyA9IHN0
YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdyo+KG1fb2JqZWN0KS0+ZGlzY2xvc2Vk
QnlSb3coKTsKKyAgICAgICAgICAgIGlmICghcm93KQorICAgICAgICAgICAgICAgIHJldHVybiBu
aWw7CisgICAgICAgICAgICByZXR1cm4gcm93LT53cmFwcGVyKCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlEaXNjbG9zdXJlTGV2ZWxBdHRyaWJ1dGVdKSB7CisgICAgICAgIC8vIENvbnZlcnQgZnJv
bSAxLWJhc2VkIGxldmVsIChmcm9tIGFyaWEtbGV2ZWwgc3BlYykgdG8gMC1iYXNlZCBsZXZlbCAo
TWFjKQorICAgICAgICBpbnQgbGV2ZWwgPSBtX29iamVjdC0+aGllcmFyY2hpY2FsTGV2ZWwoKTsK
KyAgICAgICAgaWYgKGxldmVsID4gMCkKKyAgICAgICAgICAgIGxldmVsIC09IDE7CisgICAgICAg
IHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpsZXZlbF07CisgICAgfQorICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc2luZ0F0
dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmpl
Y3QtPmlzRXhwYW5kZWQoKV07CisgICAgCisgICAgaWYgKChtX29iamVjdC0+aXNMaXN0Qm94KCkg
fHwgbV9vYmplY3QtPmlzTGlzdCgpKSAmJiBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25BdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gTlNB
Y2Nlc3NpYmlsaXR5VmVydGljYWxPcmllbnRhdGlvblZhbHVlOworICAgIAorICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhTZWxlY3RlZFRleHRNYXJrZXJSYW5nZSJd
KQorICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uXTsKKyAg
ICAKKyAgICBpZiAobV9vYmplY3QtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogQCJBWFN0YXJ0VGV4dE1hcmtlciJdKQorICAgICAgICAg
ICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246c3RhcnRPZkRvY3Vt
ZW50KG1fb2JqZWN0LT5yZW5kZXJlcigpLT5kb2N1bWVudCgpKV07CisgICAgICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhFbmRUZXh0TWFya2VyIl0pCisgICAgICAg
ICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjplbmRPZkRvY3Vt
ZW50KG1fb2JqZWN0LT5yZW5kZXJlcigpLT5kb2N1bWVudCgpKV07CisgICAgfQorICAgIAorICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QmxvY2tR
dW90ZUxldmVsQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRo
SW50Om1fb2JqZWN0LT5ibG9ja3F1b3RlTGV2ZWwoKV07CisgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpAIkFYVGFibGVMZXZlbCJdKQorICAgICAgICByZXR1cm4gW05TTnVt
YmVyIG51bWJlcldpdGhJbnQ6bV9vYmplY3QtPnRhYmxlTGV2ZWwoKV07CisgICAgCisgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5TGlua2VkVUlF
bGVtZW50c0F0dHJpYnV0ZV0pIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIGxpbmtlZFVJRWxlbWVudHM7CisgICAgICAgIG1fb2JqZWN0
LT5saW5rZWRVSUVsZW1lbnRzKGxpbmtlZFVJRWxlbWVudHMpOworICAgICAgICBpZiAobGlua2Vk
VUlFbGVtZW50cy5zaXplKCkgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAg
IHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGxpbmtlZFVJRWxlbWVudHMpOworICAgIH0KKyAgICAK
KyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlT
ZWxlY3RlZEF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJv
b2w6bV9vYmplY3QtPmlzU2VsZWN0ZWQoKV07CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VydmVzQXNUaXRsZUZvclVJRWxlbWVu
dHNBdHRyaWJ1dGVdICYmIG1fb2JqZWN0LT5pc01lbnVCdXR0b24oKSkgeworICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiB1aUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Kj4obV9vYmplY3QpLT5tZW51Rm9yTWVudUJ1dHRvbigpOworICAgICAgICBpZiAo
dWlFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDp1
aUVsZW1lbnQtPndyYXBwZXIoKV07CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VGl0bGVVSUVsZW1lbnRBdHRyaWJ1dGVd
KSB7CisgICAgICAgIGlmICghbV9vYmplY3QtPmV4cG9zZXNUaXRsZVVJRWxlbWVudCgpKQorICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgCisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iaiA9IG1fb2JqZWN0LT50aXRsZVVJRWxlbWVudCgpOworICAgICAgICBpZiAob2JqKQor
ICAgICAgICAgICAgcmV0dXJuIG9iai0+d3JhcHBlcigpOworICAgICAgICByZXR1cm4gbmlsOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eVZhbHVlRGVzY3JpcHRpb25BdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gbV9v
YmplY3QtPnZhbHVlRGVzY3JpcHRpb24oKTsKKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uQXR0cmlidXRlXSkgewor
ICAgICAgICBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb24gZWxlbWVudE9yaWVudGF0aW9uID0gbV9v
YmplY3QtPm9yaWVudGF0aW9uKCk7CisgICAgICAgIGlmIChlbGVtZW50T3JpZW50YXRpb24gPT0g
QWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uVmVydGljYWwpCisgICAgICAgICAgICByZXR1cm4gTlNB
Y2Nlc3NpYmlsaXR5VmVydGljYWxPcmllbnRhdGlvblZhbHVlOworICAgICAgICBpZiAoZWxlbWVu
dE9yaWVudGF0aW9uID09IEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkhvcml6b250YWwpCisgICAg
ICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5SG9yaXpvbnRhbE9yaWVudGF0aW9uVmFsdWU7
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SG9yaXpvbnRhbFNjcm9sbEJhckF0dHJp
YnV0ZV0pIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogc2Nyb2xsQmFyID0gbV9vYmpl
Y3QtPnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25Ib3Jpem9udGFsKTsKKyAgICAg
ICAgaWYgKHNjcm9sbEJhcikKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxCYXItPndyYXBwZXIo
KTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbFNjcm9sbEJhckF0dHJpYnV0ZV0p
IHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogc2Nyb2xsQmFyID0gbV9vYmplY3QtPnNj
cm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25WZXJ0aWNhbCk7CisgICAgICAgIGlmIChz
Y3JvbGxCYXIpCisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsQmFyLT53cmFwcGVyKCk7CisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbkF0dHJpYnV0ZV0pIHsKKyAg
ICAgICAgc3dpdGNoIChtX29iamVjdC0+c29ydERpcmVjdGlvbigpKSB7CisgICAgICAgICAgICBj
YXNlIFNvcnREaXJlY3Rpb25Bc2NlbmRpbmc6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5TQWNj
ZXNzaWJpbGl0eUFzY2VuZGluZ1NvcnREaXJlY3Rpb25WYWx1ZTsKKyAgICAgICAgICAgIGNhc2Ug
U29ydERpcmVjdGlvbkRlc2NlbmRpbmc6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNz
aWJpbGl0eURlc2NlbmRpbmdTb3J0RGlyZWN0aW9uVmFsdWU7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlVbmtub3duU29ydERpcmVj
dGlvblZhbHVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TGFuZ3VhZ2VBdHRyaWJ1dGVdKQorICAg
ICAgICByZXR1cm4gbV9vYmplY3QtPmxhbmd1YWdlKCk7CisgICAgCisgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlFeHBhbmRlZEF0dHJpYnV0ZV0p
CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmlzRXhw
YW5kZWQoKV07CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlSZXF1aXJlZEF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmlzUmVxdWlyZWQoKV07CisgICAgCisgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbnZhbGlkQXR0
cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5pbnZhbGlkU3RhdHVzKCk7CisgICAg
CisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlP
d25zQXR0cmlidXRlXSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3IgYXJpYU93bnM7CisgICAgICAgIG1fb2JqZWN0LT5hcmlhT3duc0Vs
ZW1lbnRzKGFyaWFPd25zKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoYXJpYU93
bnMpOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eUdyYWJiZWRBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW05TTnVt
YmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5pc0FSSUFHcmFiYmVkKCldOworICAgIAorICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RHJvcEVm
ZmVjdHNBdHRyaWJ1dGVdKSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGRyb3BFZmZlY3RzOwor
ICAgICAgICBtX29iamVjdC0+ZGV0ZXJtaW5lQVJJQURyb3BFZmZlY3RzKGRyb3BFZmZlY3RzKTsK
KyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IGRyb3BFZmZlY3RzLnNpemUoKTsKKyAgICAgICAgCisg
ICAgICAgIE5TTXV0YWJsZUFycmF5KiBkcm9wRWZmZWN0c0FycmF5ID0gW05TTXV0YWJsZUFycmF5
IGFycmF5V2l0aENhcGFjaXR5Omxlbmd0aF07CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBbZHJvcEVmZmVjdHNBcnJheSBhZGRPYmplY3Q6
ZHJvcEVmZmVjdHNbaV1dOworICAgICAgICByZXR1cm4gZHJvcEVmZmVjdHNBcnJheTsKKyAgICB9
CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlQbGFjZWhvbGRlclZhbHVlQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0
LT5wbGFjZWhvbGRlclZhbHVlKCk7CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlIYXNQb3B1cEF0dHJpYnV0ZV0pCisgICAgICAgIHJl
dHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmFyaWFIYXNQb3B1cCgpXTsK
KyAgICAKKyAgICAvLyBBUklBIExpdmUgcmVnaW9uIGF0dHJpYnV0ZXMuCisgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlBUklBTGl2ZUF0dHJpYnV0
ZV0pCisgICAgICAgIHJldHVybiBtX29iamVjdC0+YXJpYUxpdmVSZWdpb25TdGF0dXMoKTsKKyAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFS
ZWxldmFudEF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBtX29iamVjdC0+YXJpYUxpdmVSZWdp
b25SZWxldmFudCgpOworICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5QVJJQUF0b21pY0F0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmFyaWFMaXZlUmVnaW9uQXRvbWljKCldOworICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQUJ1
c3lBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1f
b2JqZWN0LT5hcmlhTGl2ZVJlZ2lvbkJ1c3koKV07CisgICAgCisgICAgLy8gTWF0aE1MIEF0dHJp
YnV0ZXMuCisgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhFbGVtZW50KCkpIHsKKyAgICAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoUm9vdElu
ZGV4QXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVybiAobV9vYmplY3QtPm1hdGhSb290SW5k
ZXhPYmplY3QoKSkgPyBtX29iamVjdC0+bWF0aFJvb3RJbmRleE9iamVjdCgpLT53cmFwcGVyKCkg
OiAwOworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eU1hdGhSb290UmFkaWNhbmRBdHRyaWJ1dGVdKQorICAgICAgICAgICAgcmV0dXJuICht
X29iamVjdC0+bWF0aFJhZGljYW5kT2JqZWN0KCkpID8gbV9vYmplY3QtPm1hdGhSYWRpY2FuZE9i
amVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhGcmFjdGlvbk51bWVyYXRvckF0dHJpYnV0ZV0p
CisgICAgICAgICAgICByZXR1cm4gKG1fb2JqZWN0LT5tYXRoTnVtZXJhdG9yT2JqZWN0KCkpID8g
bV9vYmplY3QtPm1hdGhOdW1lcmF0b3JPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoRnJh
Y3Rpb25EZW5vbWluYXRvckF0dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4gKG1fb2JqZWN0
LT5tYXRoRGVub21pbmF0b3JPYmplY3QoKSkgPyBtX29iamVjdC0+bWF0aERlbm9taW5hdG9yT2Jq
ZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aEJhc2VBdHRyaWJ1dGVdKQorICAgICAgICAgICAg
cmV0dXJuIChtX29iamVjdC0+bWF0aEJhc2VPYmplY3QoKSkgPyBtX29iamVjdC0+bWF0aEJhc2VP
YmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoU3Vic2NyaXB0QXR0cmlidXRlXSkKKyAgICAg
ICAgICAgIHJldHVybiAobV9vYmplY3QtPm1hdGhTdWJzY3JpcHRPYmplY3QoKSkgPyBtX29iamVj
dC0+bWF0aFN1YnNjcmlwdE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhTdXBlcnNjcmlw
dEF0dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4gKG1fb2JqZWN0LT5tYXRoU3VwZXJzY3Jp
cHRPYmplY3QoKSkgPyBtX29iamVjdC0+bWF0aFN1cGVyc2NyaXB0T2JqZWN0KCktPndyYXBwZXIo
KSA6IDA7CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5TWF0aFVuZGVyQXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVybiAobV9vYmpl
Y3QtPm1hdGhVbmRlck9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRoVW5kZXJPYmplY3QoKS0+d3Jh
cHBlcigpIDogMDsKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlNYXRoT3ZlckF0dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4gKG1f
b2JqZWN0LT5tYXRoT3Zlck9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRoT3Zlck9iamVjdCgpLT53
cmFwcGVyKCkgOiAwOworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRPcGVuQXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJl
dHVybiBtX29iamVjdC0+bWF0aEZlbmNlZE9wZW5TdHJpbmcoKTsKKyAgICAgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoRmVuY2VkQ2xvc2VB
dHRyaWJ1dGVdKQorICAgICAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoRmVuY2VkQ2xvc2VT
dHJpbmcoKTsKKyAgICB9CisgICAgCisgICAgLy8gdGhpcyBpcyB1c2VkIG9ubHkgYnkgRHVtcFJl
bmRlclRyZWUgZm9yIHRlc3RpbmcKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhDbGlja1BvaW50Il0pCisgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhQ
b2ludDptX29iamVjdC0+Y2xpY2tQb2ludCgpXTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIHVzZWQg
YnkgRFJUIHRvIHZlcmlmeSBDU1MzIHNwZWVjaCB3b3Jrcy4KKyAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhEUlRTcGVlY2hBdHRyaWJ1dGUiXSkgeworICAgICAgICBF
U3BlYWsgc3BlYWtQcm9wZXJ0eSA9IG1fb2JqZWN0LT5zcGVha1Byb3BlcnR5KCk7CisgICAgICAg
IHN3aXRjaCAoc3BlYWtQcm9wZXJ0eSkgeworICAgICAgICAgICAgY2FzZSBTcGVha05vbmU6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEAibm9uZSI7CisgICAgICAgICAgICBjYXNlIFNwZWFrU3Bl
bGxPdXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEAic3BlbGwtb3V0IjsKKyAgICAgICAgICAg
IGNhc2UgU3BlYWtEaWdpdHM6CisgICAgICAgICAgICAgICAgcmV0dXJuIEAiZGlnaXRzIjsKKyAg
ICAgICAgICAgIGNhc2UgU3BlYWtMaXRlcmFsUHVuY3R1YXRpb246CisgICAgICAgICAgICAgICAg
cmV0dXJuIEAibGl0ZXJhbC1wdW5jdHVhdGlvbiI7CisgICAgICAgICAgICBjYXNlIFNwZWFrTm9Q
dW5jdHVhdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gQCJuby1wdW5jdHVhdGlvbiI7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgY2FzZSBTcGVha05vcm1hbDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gQCJub3JtYWwiOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IC8vIFVzZWQgYnkgRFJUIHRvIGZpbmQgYW4gYWNjZXNzaWJsZSBub2RlIGJ5IGl0cyBlbGVtZW50
IGlkLgorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWERSVEVsZW1l
bnRJZEF0dHJpYnV0ZSJdKQorICAgICAgICByZXR1cm4gbV9vYmplY3QtPmdldEF0dHJpYnV0ZShp
ZEF0dHIpOworICAgIAorICAgIHJldHVybiBuaWw7Cit9CisKKy0gKGlkKWFjY2Vzc2liaWxpdHlG
b2N1c2VkVUlFbGVtZW50Cit7CisgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3Rv
cmVdKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5
T2JqZWN0PiBmb2N1c2VkT2JqID0gbV9vYmplY3QtPmZvY3VzZWRVSUVsZW1lbnQoKTsKKyAgICAK
KyAgICBpZiAoIWZvY3VzZWRPYmopCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgcmV0
dXJuIGZvY3VzZWRPYmotPndyYXBwZXIoKTsKK30KKworLSAoaWQpYWNjZXNzaWJpbGl0eUhpdFRl
c3Q6KE5TUG9pbnQpcG9pbnQKK3sKKyAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdT
dG9yZV0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgbV9vYmplY3QtPnVwZGF0ZUNo
aWxkcmVuSWZOZWNlc3NhcnkoKTsKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gYXhP
YmplY3QgPSBtX29iamVjdC0+YWNjZXNzaWJpbGl0eUhpdFRlc3QoSW50UG9pbnQocG9pbnQpKTsK
KyAgICBpZiAoYXhPYmplY3QpCisgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlVbmlnbm9y
ZWRBbmNlc3RvcihheE9iamVjdC0+d3JhcHBlcigpKTsKKyAgICByZXR1cm4gTlNBY2Nlc3NpYmls
aXR5VW5pZ25vcmVkQW5jZXN0b3Ioc2VsZik7Cit9CisKKy0gKEJPT0wpYWNjZXNzaWJpbGl0eUlz
QXR0cmlidXRlU2V0dGFibGU6KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lCit7CisgICAgaWYgKCFb
c2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhTZWxlY3RlZFRl
eHRNYXJrZXJSYW5nZSJdKQorICAgICAgICByZXR1cm4gWUVTOworICAgIAorICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1
dGVdKQorICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhblNldEZvY3VzQXR0cmlidXRlKCk7Cisg
ICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmls
aXR5VmFsdWVBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhblNldFZhbHVl
QXR0cmlidXRlKCk7CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gbV9v
YmplY3QtPmNhblNldFNlbGVjdGVkQXR0cmlidXRlKCk7CisgICAgCisgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDaGlsZHJlbkF0
dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBtX29iamVjdC0+Y2FuU2V0U2VsZWN0ZWRDaGlsZHJl
bkF0dHJpYnV0ZSgpOworICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc2luZ0F0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBt
X29iamVjdC0+Y2FuU2V0RXhwYW5kZWRBdHRyaWJ1dGUoKTsKKyAgICAKKyAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJp
YnV0ZV0pCisgICAgICAgIHJldHVybiBZRVM7CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0QXR0cmlidXRlXSB8
fAorICAgICAgICBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0
eVNlbGVjdGVkVGV4dFJhbmdlQXR0cmlidXRlXSB8fAorICAgICAgICBbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJp
YnV0ZV0pCisgICAgICAgIHJldHVybiBtX29iamVjdC0+Y2FuU2V0VGV4dFJhbmdlQXR0cmlidXRl
cygpOworICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5R3JhYmJlZEF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBZRVM7CisgICAgCisg
ICAgcmV0dXJuIE5POworfQorCisvLyBhY2Nlc3NpYmlsaXR5U2hvdWxkVXNlVW5pcXVlSWQgaXMg
YW4gQXBwS2l0IG1ldGhvZCB3ZSBvdmVycmlkZSBzbyB0aGF0CisvLyBvYmplY3RzIHdpbGwgYmUg
Z2l2ZW4gYSB1bmlxdWUgSUQsIGFuZCB0aGVyZWZvcmUgYWxsb3cgQXBwS2l0IHRvIGtub3cgd2hl
biB0aGV5CisvLyBiZWNvbWUgb2Jzb2xldGUgKGUuZy4gd2hlbiB0aGUgdXNlciBuYXZpZ2F0ZXMg
dG8gYSBuZXcgd2ViIHBhZ2UsIG1ha2luZyB0aGlzIG9uZQorLy8gdW5yZW5kZXJlZCBidXQgbm90
IGRlYWxsb2NhdGVkIGJlY2F1c2UgaXQgaXMgaW4gdGhlIGJhY2svZm9yd2FyZCBjYWNoZSkuCisv
LyBJdCBpcyBpbXBvcnRhbnQgdG8gY2FsbCBOU0FjY2Vzc2liaWxpdHlVbnJlZ2lzdGVyVW5pcXVl
SWRGb3JVSUVsZW1lbnQgaW4gdGhlCisvLyBhcHByb3ByaWF0ZSBwbGFjZSAoZS5nLiBkZWFsbG9j
KSB0byByZW1vdmUgdGhlc2Ugbm9uLXJldGFpbmVkIHJlZmVyZW5jZXMgZnJvbQorLy8gQXBwS2l0
J3MgaWQgbWFwcGluZyB0YWJsZXMuIFdlIGRvIHRoaXMgaW4gZGV0YWNoIGJ5IGNhbGxpbmcgdW5y
ZWdpc3RlclVuaXF1ZUlkRm9yVUlFbGVtZW50LgorLy8KKy8vIFJlZ2lzdGVyaW5nIGFuIG9iamVj
dCBpcyBhbHNvIHJlcXVpcmVkIGZvciBvYnNlcnZpbmcgbm90aWZpY2F0aW9ucy4gT25seSByZWdp
c3RlcmVkIG9iamVjdHMgY2FuIGJlIG9ic2VydmVkLgorLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkCit7CisgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQorICAg
ICAgICByZXR1cm4gWUVTOworICAgIAorICAgIGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50KCkp
CisgICAgICAgIHJldHVybiBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlJc0ln
bm9yZWRdOworICAgIHJldHVybiBtX29iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOwor
fQorCistIChOU0FycmF5KiApYWNjZXNzaWJpbGl0eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1l
cworeworICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHN0YXRpYyBOU0FycmF5KiBwYXJhbUF0dHJzID0g
bmlsOworICAgIHN0YXRpYyBOU0FycmF5KiB0ZXh0UGFyYW1BdHRycyA9IG5pbDsKKyAgICBzdGF0
aWMgTlNBcnJheSogdGFibGVQYXJhbUF0dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5KiB3
ZWJBcmVhUGFyYW1BdHRycyA9IG5pbDsKKyAgICBpZiAocGFyYW1BdHRycyA9PSBuaWwpIHsKKyAg
ICAgICAgcGFyYW1BdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgorICAg
ICAgICAgICAgICAgICAgICAgIEAiQVhVSUVsZW1lbnRGb3JUZXh0TWFya2VyIiwKKyAgICAgICAg
ICAgICAgICAgICAgICBAIkFYVGV4dE1hcmtlclJhbmdlRm9yVUlFbGVtZW50IiwKKyAgICAgICAg
ICAgICAgICAgICAgICBAIkFYTGluZUZvclRleHRNYXJrZXIiLAorICAgICAgICAgICAgICAgICAg
ICAgIEAiQVhUZXh0TWFya2VyUmFuZ2VGb3JMaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICBA
IkFYU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFY
VGV4dE1hcmtlckZvclBvc2l0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYQm91bmRz
Rm9yVGV4dE1hcmtlclJhbmdlIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYQXR0cmlidXRl
ZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWFRl
eHRNYXJrZXJSYW5nZUZvclVub3JkZXJlZFRleHRNYXJrZXJzIiwKKyAgICAgICAgICAgICAgICAg
ICAgICBAIkFYTmV4dFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIiwKKyAgICAgICAgICAgICAgICAg
ICAgICBAIkFYUHJldmlvdXNUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIsCisgICAgICAgICAgICAg
ICAgICAgICAgQCJBWExlZnRXb3JkVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciIsCisgICAg
ICAgICAgICAgICAgICAgICAgQCJBWFJpZ2h0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJr
ZXIiLAorICAgICAgICAgICAgICAgICAgICAgIEAiQVhMZWZ0TGluZVRleHRNYXJrZXJSYW5nZUZv
clRleHRNYXJrZXIiLAorICAgICAgICAgICAgICAgICAgICAgIEAiQVhSaWdodExpbmVUZXh0TWFy
a2VyUmFuZ2VGb3JUZXh0TWFya2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYU2VudGVu
Y2VUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICBA
IkFYUGFyYWdyYXBoVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciIsCisgICAgICAgICAgICAg
ICAgICAgICAgQCJBWE5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiLAorICAgICAg
ICAgICAgICAgICAgICAgIEAiQVhQcmV2aW91c1dvcmRTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFy
a2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYTmV4dExpbmVFbmRUZXh0TWFya2VyRm9y
VGV4dE1hcmtlciIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWFByZXZpb3VzTGluZVN0YXJ0
VGV4dE1hcmtlckZvclRleHRNYXJrZXIiLAorICAgICAgICAgICAgICAgICAgICAgIEAiQVhOZXh0
U2VudGVuY2VFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIsCisgICAgICAgICAgICAgICAgICAg
ICAgQCJBWFByZXZpb3VzU2VudGVuY2VTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIiwKKyAg
ICAgICAgICAgICAgICAgICAgICBAIkFYTmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0
TWFya2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYUHJldmlvdXNQYXJhZ3JhcGhTdGFy
dFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYU3R5
bGVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICBA
IkFYTGVuZ3RoRm9yVGV4dE1hcmtlclJhbmdlIiwKKyAgICAgICAgICAgICAgICAgICAgICBOU0Fj
Y2Vzc2liaWxpdHlCb3VuZHNGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUsCisgICAgICAg
ICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U3RyaW5nRm9yUmFuZ2VQYXJhbWV0ZXJpemVk
QXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dHNGb3JTZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlLAorICAgICAgICAgICAg
ICAgICAgICAgIG5pbF07CisgICAgfQorICAgIAorICAgIGlmICh0ZXh0UGFyYW1BdHRycyA9PSBu
aWwpIHsKKyAgICAgICAgTlNNdXRhYmxlQXJyYXkqIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6cGFyYW1BdHRyc107CisgICAgICAgIFt0ZW1wQXJyYXkg
YWRkT2JqZWN0OihOU1N0cmluZyopa0FYTGluZUZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0
ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihOU1N0cmluZyopa0FYUmFuZ2VGb3JM
aW5lUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0
OihOU1N0cmluZyopa0FYU3RyaW5nRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKKyAg
ICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nKilrQVhSYW5nZUZvclBvc2l0aW9u
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihO
U1N0cmluZyopa0FYUmFuZ2VGb3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOworICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWEJvdW5kc0ZvclJhbmdlUGFyYW1l
dGVyaXplZEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihOU1N0cmlu
Zyopa0FYUlRGRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBB
cnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nKilrQVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2VQYXJh
bWV0ZXJpemVkQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5TU3Ry
aW5nKilrQVhTdHlsZVJhbmdlRm9ySW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKKyAgICAg
ICAgdGV4dFBhcmFtQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFy
cmF5XTsKKyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKKyAgICB9CisgICAgaWYgKHRhYmxl
UGFyYW1BdHRycyA9PSBuaWwpIHsKKyAgICAgICAgTlNNdXRhYmxlQXJyYXkqIHRlbXBBcnJheSA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6cGFyYW1BdHRyc107CisgICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUNlbGxGb3JDb2x1bW5BbmRS
b3dQYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKKyAgICAgICAgdGFibGVQYXJhbUF0dHJzID0gW1tO
U0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAgICAgIFt0ZW1wQXJy
YXkgcmVsZWFzZV07CisgICAgfQorICAgIGlmICghd2ViQXJlYVBhcmFtQXR0cnMpIHsKKyAgICAg
ICAgTlNNdXRhYmxlQXJyYXkqIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQXJyYXk6cGFyYW1BdHRyc107CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJGb3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOwor
ICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUZXh0TWFya2VySXNW
YWxpZFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVj
dDpOU0FjY2Vzc2liaWxpdHlJbmRleEZvclRleHRNYXJrZXJQYXJhbWV0ZXJpemVkQXR0cmlidXRl
XTsKKyAgICAgICAgd2ViQXJlYVBhcmFtQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRo
QXJyYXk6dGVtcEFycmF5XTsKKyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSkKKyAgICAgICAgcmV0dXJu
IFtOU0FycmF5IGFycmF5XTsKKyAgICAKKyAgICBpZiAoIW1fb2JqZWN0LT5pc0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIHBhcmFtQXR0cnM7CisgICAgCisgICAg
aWYgKG1fb2JqZWN0LT5pc1RleHRDb250cm9sKCkpCisgICAgICAgIHJldHVybiB0ZXh0UGFyYW1B
dHRyczsKKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCisg
ICAgICAgIHJldHVybiB0YWJsZVBhcmFtQXR0cnM7CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5p
c01lbnVSZWxhdGVkKCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgaWYgKG1fb2Jq
ZWN0LT5pc1dlYkFyZWEoKSkKKyAgICAgICAgcmV0dXJuIHdlYkFyZWFQYXJhbUF0dHJzOworICAg
IAorICAgIHJldHVybiBwYXJhbUF0dHJzOworfQorCistICh2b2lkKWFjY2Vzc2liaWxpdHlQZXJm
b3JtUHJlc3NBY3Rpb24KK3sKKyAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9y
ZV0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVu
dCgpKQorICAgICAgICBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlQZXJmb3Jt
QWN0aW9uOk5TQWNjZXNzaWJpbGl0eVByZXNzQWN0aW9uXTsKKyAgICBlbHNlCisgICAgICAgIG1f
b2JqZWN0LT5wcmVzcygpOworfQorCistICh2b2lkKWFjY2Vzc2liaWxpdHlQZXJmb3JtSW5jcmVt
ZW50QWN0aW9uCit7CisgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkK
KyAgICAgICAgW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5UGVyZm9ybUFjdGlv
bjpOU0FjY2Vzc2liaWxpdHlJbmNyZW1lbnRBY3Rpb25dOworICAgIGVsc2UKKyAgICAgICAgbV9v
YmplY3QtPmluY3JlbWVudCgpOworfQorCistICh2b2lkKWFjY2Vzc2liaWxpdHlQZXJmb3JtRGVj
cmVtZW50QWN0aW9uCit7CisgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVd
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQo
KSkKKyAgICAgICAgW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5UGVyZm9ybUFj
dGlvbjpOU0FjY2Vzc2liaWxpdHlEZWNyZW1lbnRBY3Rpb25dOworICAgIGVsc2UKKyAgICAgICAg
bV9vYmplY3QtPmRlY3JlbWVudCgpOworfQorCistICh2b2lkKWFjY2Vzc2liaWxpdHlQZXJmb3Jt
U2hvd01lbnVBY3Rpb24KK3sKKyAgICBpZiAobV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IENvbWJv
Qm94Um9sZSkKKyAgICAgICAgbV9vYmplY3QtPnNldElzRXhwYW5kZWQodHJ1ZSk7CisgICAgZWxz
ZSB7CisgICAgICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgcGVyZm9ybWVkIGluIGFuIGl0ZXJhdGlv
biBvZiB0aGUgcnVuIGxvb3AgdGhhdCBkaWQgbm90IHN0YXJ0IGZyb20gYW4gQVggY2FsbC4KKyAg
ICAgICAgLy8gSWYgaXQncyB0aGUgc2FtZSBydW4gbG9vcCBpdGVyYXRpb24sIHRoZSBtZW51IG9w
ZW4gbm90aWZpY2F0aW9uIHdvbid0IGJlIHNlbnQKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVj
dG9yOkBzZWxlY3RvcihhY2Nlc3NpYmlsaXR5U2hvd0NvbnRleHRNZW51KSB3aXRoT2JqZWN0Om5p
bCBhZnRlckRlbGF5OjAuMF07CisgICAgfQorfQorCistICh2b2lkKWFjY2Vzc2liaWxpdHlTaG93
Q29udGV4dE1lbnUKK3sKKyAgICBQYWdlKiBwYWdlID0gbV9vYmplY3QtPnBhZ2UoKTsKKyAgICBp
ZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBJbnRSZWN0IHJlY3QgPSBwaXhl
bFNuYXBwZWRJbnRSZWN0KG1fb2JqZWN0LT5lbGVtZW50UmVjdCgpKTsKKyAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IG1fb2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOworICAgIAorICAgIC8v
IE9uIFdLMiwgd2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGUgc2Nyb2xsIHBvc2l0aW9uLgorICAg
IC8vIE9uIFdLMSwgdGhpcyBpc24ndCBuZWNlc3NhcnksIGl0J3MgdGFrZW4gY2FyZSBvZiBieSB0
aGUgYXR0YWNobWVudCB2aWV3cy4KKyAgICBpZiAoZnJhbWVWaWV3ICYmICFmcmFtZVZpZXctPnBs
YXRmb3JtV2lkZ2V0KCkpIHsKKyAgICAgICAgLy8gRmluZCB0aGUgYXBwcm9wcmlhdGUgc2Nyb2xs
IHZpZXcgdG8gdXNlIHRvIGNvbnZlcnQgdGhlIGNvbnRlbnRzIHRvIHRoZSB3aW5kb3cuCisgICAg
ICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9i
amVjdCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKKyAgICAg
ICAgICAgIGlmIChwYXJlbnQtPmlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSkgeworICAgICAg
ICAgICAgICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcgPSB0b0FjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3KHBhcmVudCktPnNjcm9sbFZpZXcoKTsKKyAgICAgICAgICAgICAgICByZWN0ID0gc2Nyb2xs
Vmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJlY3QpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHBhZ2UtPmNvbnRleHRN
ZW51Q29udHJvbGxlcigpLT5zaG93Q29udGV4dE1lbnVBdChwYWdlLT5tYWluRnJhbWUoKSwgcmVj
dC5jZW50ZXIoKSk7Cit9CisKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eVBlcmZvcm1BY3Rpb246KE5T
U3RyaW5nKilhY3Rpb24KK3sKKyAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9y
ZV0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoW2FjdGlvbiBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5UHJlc3NBY3Rpb25dKQorICAgICAgICBbc2VsZiBhY2Nlc3NpYmls
aXR5UGVyZm9ybVByZXNzQWN0aW9uXTsKKyAgICAKKyAgICBlbHNlIGlmIChbYWN0aW9uIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTaG93TWVudUFjdGlvbl0pCisgICAgICAgIFtzZWxm
IGFjY2Vzc2liaWxpdHlQZXJmb3JtU2hvd01lbnVBY3Rpb25dOworICAgIAorICAgIGVsc2UgaWYg
KFthY3Rpb24gaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUluY3JlbWVudEFjdGlvbl0p
CisgICAgICAgIFtzZWxmIGFjY2Vzc2liaWxpdHlQZXJmb3JtSW5jcmVtZW50QWN0aW9uXTsKKyAg
ICAKKyAgICBlbHNlIGlmIChbYWN0aW9uIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlE
ZWNyZW1lbnRBY3Rpb25dKQorICAgICAgICBbc2VsZiBhY2Nlc3NpYmlsaXR5UGVyZm9ybURlY3Jl
bWVudEFjdGlvbl07Cit9CisKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eVNldFZhbHVlOihpZCl2YWx1
ZSBmb3JBdHRyaWJ1dGU6KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lCit7CisgICAgaWYgKCFbc2Vs
ZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
aWQgdGV4dE1hcmtlclJhbmdlID0gbmlsOworICAgIE5TTnVtYmVyKiAgICAgICAgICAgICAgIG51
bWJlciA9IG5pbDsKKyAgICBOU1N0cmluZyogICAgICAgICAgICAgICBzdHJpbmcgPSBuaWw7Cisg
ICAgTlNSYW5nZSAgICAgICAgICAgICAgICAgcmFuZ2UgPSB7MCwgMH07CisgICAgTlNBcnJheSog
ICAgICAgICAgICAgICAgYXJyYXkgPSBuaWw7CisgICAgCisgICAgLy8gZGVjb2RlIHRoZSBwYXJh
bWV0ZXIKKyAgICBpZiAoQVhPYmplY3RJc1RleHRNYXJrZXJSYW5nZSh2YWx1ZSkpCisgICAgICAg
IHRleHRNYXJrZXJSYW5nZSA9IHZhbHVlOworICAgIAorICAgIGVsc2UgaWYgKFt2YWx1ZSBpc0tp
bmRPZkNsYXNzOltOU051bWJlciBzZWxmXV0pCisgICAgICAgIG51bWJlciA9IHZhbHVlOworICAg
IAorICAgIGVsc2UgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBzZWxmXV0pCisg
ICAgICAgIHN0cmluZyA9IHZhbHVlOworICAgIAorICAgIGVsc2UgaWYgKFt2YWx1ZSBpc0tpbmRP
ZkNsYXNzOltOU1ZhbHVlIHNlbGZdXSkKKyAgICAgICAgcmFuZ2UgPSBbdmFsdWUgcmFuZ2VWYWx1
ZV07CisgICAgCisgICAgZWxzZSBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgc2Vs
Zl1dKQorICAgICAgICBhcnJheSA9IHZhbHVlOworICAgIAorICAgIC8vIGhhbmRsZSB0aGUgY29t
bWFuZAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhTZWxlY3Rl
ZFRleHRNYXJrZXJSYW5nZSJdKSB7CisgICAgICAgIEFTU0VSVCh0ZXh0TWFya2VyUmFuZ2UpOwor
ICAgICAgICBtX29iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShbc2VsZiB2
aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdKTsK
KyAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3Np
YmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZV0pIHsKKyAgICAgICAgQVNTRVJUKG51bWJlcik7CisgICAg
ICAgIG1fb2JqZWN0LT5zZXRGb2N1c2VkKFtudW1iZXIgaW50VmFsdWVdICE9IDApOworICAgIH0g
ZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlW
YWx1ZUF0dHJpYnV0ZV0pIHsKKyAgICAgICAgaWYgKG51bWJlciAmJiBtX29iamVjdC0+Y2FuU2V0
TnVtZXJpY1ZhbHVlKCkpCisgICAgICAgICAgICBtX29iamVjdC0+c2V0VmFsdWUoW251bWJlciBm
bG9hdFZhbHVlXSk7CisgICAgICAgIGVsc2UgaWYgKHN0cmluZykKKyAgICAgICAgICAgIG1fb2Jq
ZWN0LT5zZXRWYWx1ZShzdHJpbmcpOworICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZEF0dHJpYnV0ZV0pIHsKKyAgICAg
ICAgaWYgKCFudW1iZXIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fb2JqZWN0LT5z
ZXRTZWxlY3RlZChbbnVtYmVyIGJvb2xWYWx1ZV0pOworICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENoaWxkcmVuQXR0
cmlidXRlXSkgeworICAgICAgICBpZiAoIWFycmF5IHx8IG1fb2JqZWN0LT5yb2xlVmFsdWUoKSAh
PSBMaXN0Qm94Um9sZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkQ2hpbGRyZW47Cisg
ICAgICAgIGNvbnZlcnRUb1ZlY3RvcihhcnJheSwgc2VsZWN0ZWRDaGlsZHJlbik7CisgICAgICAg
IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94Kj4obV9vYmplY3QpLT5zZXRTZWxlY3Rl
ZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW4pOworICAgIH0gZWxzZSBpZiAobV9vYmplY3QtPmlz
VGV4dENvbnRyb2woKSkgeworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGVdKSB7CisgICAgICAgICAg
ICBtX29iamVjdC0+c2V0U2VsZWN0ZWRUZXh0KHN0cmluZyk7CisgICAgICAgIH0gZWxzZSBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRl
eHRSYW5nZUF0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIG1fb2JqZWN0LT5zZXRTZWxlY3RlZFRl
eHRSYW5nZShQbGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vz
c2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGVdKSB7CisgICAgICAgICAgICBt
X29iamVjdC0+bWFrZVJhbmdlVmlzaWJsZShQbGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlvbiwg
cmFuZ2UubGVuZ3RoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zaW5nQXR0cmlidXRlXSkKKyAg
ICAgICAgbV9vYmplY3QtPnNldElzRXhwYW5kZWQoW251bWJlciBib29sVmFsdWVdKTsKKyAgICBl
bHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2Vs
ZWN0ZWRSb3dzQXR0cmlidXRlXSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRSb3dzOworICAgICAgICBjb252ZXJ0VG9W
ZWN0b3IoYXJyYXksIHNlbGVjdGVkUm93cyk7CisgICAgICAgIGlmIChtX29iamVjdC0+aXNUcmVl
KCkgfHwgbV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCisgICAgICAgICAgICBtX29i
amVjdC0+c2V0U2VsZWN0ZWRSb3dzKHNlbGVjdGVkUm93cyk7CisgICAgfSBlbHNlIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5R3JhYmJlZEF0dHJpYnV0
ZV0pCisgICAgICAgIG1fb2JqZWN0LT5zZXRBUklBR3JhYmJlZChbbnVtYmVyIGJvb2xWYWx1ZV0p
OworfQorCitzdGF0aWMgUmVuZGVyT2JqZWN0KiByZW5kZXJlckZvclZpZXcoTlNWaWV3KiB2aWV3
KQoreworICAgIGlmICghW3ZpZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChXZWJDb3Jl
RnJhbWVWaWV3KV0pCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIE5TVmlldzxXZWJDb3Jl
RnJhbWVWaWV3PiogZnJhbWVWaWV3ID0gKE5TVmlldzxXZWJDb3JlRnJhbWVWaWV3PiopdmlldzsK
KyAgICBGcmFtZSogZnJhbWUgPSBbZnJhbWVWaWV3IF93ZWJfZnJhbWVdOworICAgIGlmICghZnJh
bWUpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIE5vZGUqIG5vZGUgPSBmcmFtZS0+ZG9j
dW1lbnQoKS0+b3duZXJFbGVtZW50KCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKTsKK30KKworLSAoaWQpX2FjY2Vz
c2liaWxpdHlQYXJlbnRGb3JTdWJ2aWV3OihOU1ZpZXcqKXN1YnZpZXcKK3sKKyAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gcmVuZGVyZXJGb3JWaWV3KHN1YnZpZXcpOworICAgIGlmICghcmVu
ZGVyZXIpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogb2JqID0gcmVuZGVyZXItPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVh
dGUocmVuZGVyZXIpOworICAgIGlmIChvYmopCisgICAgICAgIHJldHVybiBvYmotPnBhcmVudE9i
amVjdFVuaWdub3JlZCgpLT53cmFwcGVyKCk7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoTlNT
dHJpbmcqKWFjY2Vzc2liaWxpdHlBY3Rpb25EZXNjcmlwdGlvbjooTlNTdHJpbmcqKWFjdGlvbgor
eworICAgIC8vIHdlIGhhdmUgbm8gY3VzdG9tIGFjdGlvbnMKKyAgICByZXR1cm4gTlNBY2Nlc3Np
YmlsaXR5QWN0aW9uRGVzY3JpcHRpb24oYWN0aW9uKTsKK30KKworLy8gVGhlIENGQXR0cmlidXRl
ZFN0cmluZ1R5cGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRo
aXMgYWNjZXNzaWJpbGl0eQorLy8gb2JqZWN0IHRoYXQgaXMgc3BlY2lmaWVkIGJ5IHRoZSBnaXZl
biByYW5nZS4KKy0gKE5TQXR0cmlidXRlZFN0cmluZyopZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JS
YW5nZTooTlNSYW5nZSlyYW5nZQoreworICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IFBs
YWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpOworICAgIFZpc2libGVQ
b3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25S
YW5nZUZvclJhbmdlKHRleHRSYW5nZSk7CisgICAgcmV0dXJuIFtzZWxmIGRvQVhBdHRyaWJ1dGVk
U3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlOltzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxl
UG9zaXRpb25zOnZpc2libGVQb3NSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2aXNpYmxlUG9zUmFu
Z2UuZW5kXV07Cit9CisKKy0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJhbmdlKilyYW5n
ZQoreworICAgIE5TUmFuZ2UgcmVzdWx0ID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Cisg
ICAgaWYgKCFyYW5nZSB8fCAhcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9vYmplY3QtPmRvY3Vt
ZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAK
KyAgICBzaXplX3QgbG9jYXRpb247CisgICAgc2l6ZV90IGxlbmd0aDsKKyAgICBUZXh0SXRlcmF0
b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKGRvY3VtZW50LT5kb2N1bWVudEVsZW1l
bnQoKSwgcmFuZ2UsIGxvY2F0aW9uLCBsZW5ndGgpOworICAgIHJlc3VsdC5sb2NhdGlvbiA9IGxv
Y2F0aW9uOworICAgIHJlc3VsdC5sZW5ndGggPSBsZW5ndGg7CisgICAgCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworLSAoTlNJbnRlZ2VyKV9pbmRleEZvclRleHRNYXJrZXI6KGlkKW1hcmtlcgor
eworICAgIGlmICghbWFya2VyKQorICAgICAgICByZXR1cm4gTlNOb3RGb3VuZDsKKyAgICAKKyAg
ICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0
TWFya2VyOm1hcmtlcl0pOworICAgIHJldHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZTpzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKV0ubG9jYXRpb247Cit9CisKKy0gKGlkKV90
ZXh0TWFya2VyRm9ySW5kZXg6KE5TSW50ZWdlcil0ZXh0SW5kZXgKK3sKKyAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBtX29iamVjdC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIAorICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHRleHRSYW5nZSA9
IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoZG9jdW1lbnQtPmRvY3Vt
ZW50RWxlbWVudCgpLCB0ZXh0SW5kZXgsIDApOworICAgIGlmICghdGV4dFJhbmdlIHx8ICF0ZXh0
UmFuZ2UtPmJvdW5kYXJ5UG9pbnRzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAK
KyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24odGV4dFJhbmdlLT5zdGFydFBvc2l0aW9uKCkp
OworICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOnBvc2l0aW9u
XTsKK30KKworLy8gVGhlIFJURiByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGV4dCBhc3NvY2lhdGVk
IHdpdGggdGhpcyBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0aGF0IGlzCisvLyBzcGVjaWZpZWQgYnkg
dGhlIGdpdmVuIHJhbmdlLgorLSAoTlNEYXRhKilkb0FYUlRGRm9yUmFuZ2U6KE5TUmFuZ2UpcmFu
Z2UKK3sKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcgPSBbc2VsZiBkb0FYQXR0
cmlidXRlZFN0cmluZ0ZvclJhbmdlOnJhbmdlXTsKKyAgICByZXR1cm4gW2F0dHJTdHJpbmcgUlRG
RnJvbVJhbmdlOiBOU01ha2VSYW5nZSgwLCBbYXR0clN0cmluZyBsZW5ndGhdKSBkb2N1bWVudEF0
dHJpYnV0ZXM6IG5pbF07Cit9CisKKy0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZToo
TlNTdHJpbmcqKWF0dHJpYnV0ZSBmb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcgoreworICAgIGlk
IHRleHRNYXJrZXIgPSBuaWw7CisgICAgaWQgdGV4dE1hcmtlclJhbmdlID0gbmlsOworICAgIE5T
TnVtYmVyKiBudW1iZXIgPSBuaWw7CisgICAgTlNBcnJheSogYXJyYXkgPSBuaWw7CisgICAgTlNE
aWN0aW9uYXJ5KiBkaWN0aW9uYXJ5ID0gbmlsOworICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0PiB1aUVsZW1lbnQgPSAwOworICAgIE5TUG9pbnQgcG9pbnQgPSBOU1plcm9Qb2ludDsKKyAg
ICBib29sIHBvaW50U2V0ID0gZmFsc2U7CisgICAgTlNSYW5nZSByYW5nZSA9IHswLCAwfTsKKyAg
ICBib29sIHJhbmdlU2V0ID0gZmFsc2U7CisgICAgCisgICAgLy8gYmFzaWMgcGFyYW1ldGVyIHZh
bGlkYXRpb24KKyAgICBpZiAoIW1fb2JqZWN0IHx8ICFhdHRyaWJ1dGUgfHwgIXBhcmFtZXRlcikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJh
Y2tpbmdTdG9yZV0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgLy8gY29tbW9uIHBh
cmFtZXRlciB0eXBlIGNoZWNrL2Nhc3RpbmcuICBOaWwgY2hlY2tzIGluIGhhbmRsZXJzIGNhdGNo
IHdyb25nIHR5cGUgY2FzZS4KKyAgICAvLyBOT1RFOiBUaGlzIGFzc3VtZXMgbmlsIGlzIG5vdCBh
IHZhbGlkIHBhcmFtZXRlciwgYmVjYXVzZSBpdCBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tCisg
ICAgLy8gYSBwYXJhbWV0ZXIgb2YgdGhlIHdyb25nIHR5cGUuCisgICAgaWYgKEFYT2JqZWN0SXNU
ZXh0TWFya2VyKHBhcmFtZXRlcikpCisgICAgICAgIHRleHRNYXJrZXIgPSBwYXJhbWV0ZXI7Cisg
ICAgCisgICAgZWxzZSBpZiAoQVhPYmplY3RJc1RleHRNYXJrZXJSYW5nZShwYXJhbWV0ZXIpKQor
ICAgICAgICB0ZXh0TWFya2VyUmFuZ2UgPSBwYXJhbWV0ZXI7CisgICAgCisgICAgZWxzZSBpZiAo
W3BhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBz
ZWxmXV0pCisgICAgICAgIHVpRWxlbWVudCA9IFsoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIqKXBhcmFtZXRlciBhY2Nlc3NpYmlsaXR5T2JqZWN0XTsKKyAgICAKKyAgICBlbHNlIGlmIChb
cGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIHNlbGZdXSkKKyAgICAgICAgbnVtYmVy
ID0gcGFyYW1ldGVyOworICAgIAorICAgIGVsc2UgaWYgKFtwYXJhbWV0ZXIgaXNLaW5kT2ZDbGFz
czpbTlNBcnJheSBzZWxmXV0pCisgICAgICAgIGFycmF5ID0gcGFyYW1ldGVyOworICAgIAorICAg
IGVsc2UgaWYgKFtwYXJhbWV0ZXIgaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IHNlbGZdXSkK
KyAgICAgICAgZGljdGlvbmFyeSA9IHBhcmFtZXRlcjsKKyAgICAKKyAgICBlbHNlIGlmIChbcGFy
YW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUgc2VsZl1dICYmIHN0cmNtcChbKE5TVmFsdWUq
KXBhcmFtZXRlciBvYmpDVHlwZV0sIEBlbmNvZGUoTlNQb2ludCkpID09IDApIHsKKyAgICAgICAg
cG9pbnRTZXQgPSB0cnVlOworICAgICAgICBwb2ludCA9IFsoTlNWYWx1ZSopcGFyYW1ldGVyIHBv
aW50VmFsdWVdOworICAgICAgICAKKyAgICB9IGVsc2UgaWYgKFtwYXJhbWV0ZXIgaXNLaW5kT2ZD
bGFzczpbTlNWYWx1ZSBzZWxmXV0gJiYgc3RyY21wKFsoTlNWYWx1ZSopcGFyYW1ldGVyIG9iakNU
eXBlXSwgQGVuY29kZShOU1JhbmdlKSkgPT0gMCkgeworICAgICAgICByYW5nZVNldCA9IHRydWU7
CisgICAgICAgIHJhbmdlID0gWyhOU1ZhbHVlKilwYXJhbWV0ZXIgcmFuZ2VWYWx1ZV07CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gQXR0cmlidXRlIHR5cGUgaXMgbm90IHN1cHBvcnRlZC4gQWxs
b3cgc3VwZXIgdG8gaGFuZGxlLgorICAgICAgICByZXR1cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVWYWx1ZTphdHRyaWJ1dGUgZm9yUGFyYW1ldGVyOnBhcmFtZXRlcl07CisgICAgfQor
ICAgIAorICAgIC8vIGRpc3BhdGNoCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eVVJRWxlbWVudHNGb3JTZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVk
QXR0cmlidXRlXSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzdGFydE9iamVjdCA9
IDA7CisgICAgICAgIGlmIChbW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkAiQVhTdGFydEVsZW1l
bnQiXSBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBzZWxmXV0p
CisgICAgICAgICAgICBzdGFydE9iamVjdCA9IFsoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIqKVtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAIkFYU3RhcnRFbGVtZW50Il0gYWNjZXNzaWJp
bGl0eU9iamVjdF07CisgICAgICAgIAorICAgICAgICBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0
aW9uIHNlYXJjaERpcmVjdGlvbiA9IFNlYXJjaERpcmVjdGlvbk5leHQ7CisgICAgICAgIGlmIChb
W2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkAiQVhEaXJlY3Rpb24iXSBpc0tpbmRPZkNsYXNzOltO
U1N0cmluZyBzZWxmXV0pCisgICAgICAgICAgICBzZWFyY2hEaXJlY3Rpb24gPSAoWyhOU1N0cmlu
ZyopW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkAiQVhEaXJlY3Rpb24iXSBpc0VxdWFsVG9TdHJp
bmc6QCJBWERpcmVjdGlvbk5leHQiXSkgPyBTZWFyY2hEaXJlY3Rpb25OZXh0IDogU2VhcmNoRGly
ZWN0aW9uUHJldmlvdXM7CisgICAgICAgIAorICAgICAgICBBY2Nlc3NpYmlsaXR5U2VhcmNoS2V5
IHNlYXJjaEtleSA9IEFueVR5cGVTZWFyY2hLZXk7CisgICAgICAgIGlmIChbW2RpY3Rpb25hcnkg
b2JqZWN0Rm9yS2V5OkAiQVhTZWFyY2hLZXkiXSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBzZWxm
XV0pCisgICAgICAgICAgICBzZWFyY2hLZXkgPSBhY2Nlc3NpYmlsaXR5U2VhcmNoS2V5Rm9yU3Ry
aW5nKChDRlN0cmluZ1JlZilbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QCJBWFNlYXJjaEtleSJd
KTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBzZWFyY2hUZXh0OworICAgICAgICBpZiAoW1tk
aWN0aW9uYXJ5IG9iamVjdEZvcktleTpAIkFYU2VhcmNoVGV4dCJdIGlzS2luZE9mQ2xhc3M6W05T
U3RyaW5nIHNlbGZdXSkKKyAgICAgICAgICAgIHNlYXJjaFRleHQgPSAoQ0ZTdHJpbmdSZWYpW2Rp
Y3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkAiQVhTZWFyY2hUZXh0Il07CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCByZXN1bHRzTGltaXQgPSAwOworICAgICAgICBpZiAoW1tkaWN0aW9uYXJ5IG9i
amVjdEZvcktleTpAIkFYUmVzdWx0c0xpbWl0Il0gaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgc2Vs
Zl1dKQorICAgICAgICAgICAgcmVzdWx0c0xpbWl0ID0gWyhOU051bWJlciopW2RpY3Rpb25hcnkg
b2JqZWN0Rm9yS2V5OkAiQVhSZXN1bHRzTGltaXQiXSB1bnNpZ25lZEludFZhbHVlXTsKKyAgICAg
ICAgCisgICAgICAgIEFjY2Vzc2liaWxpdHlTZWFyY2hDcml0ZXJpYSBjcml0ZXJpYSA9IHtzdGFy
dE9iamVjdCwgc2VhcmNoRGlyZWN0aW9uLCBzZWFyY2hLZXksICZzZWFyY2hUZXh0LCByZXN1bHRz
TGltaXR9OworICAgICAgICAKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yIHJlc3VsdHM7CisgICAgICAgIG1fb2JqZWN0LT5maW5kTWF0Y2hp
bmdPYmplY3RzKCZjcml0ZXJpYSwgcmVzdWx0cyk7CisgICAgICAgIAorICAgICAgICByZXR1cm4g
Y29udmVydFRvTlNBcnJheShyZXN1bHRzKTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJJc1ZhbGlkUGFyYW1l
dGVyaXplZEF0dHJpYnV0ZV0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyA9IFtzZWxm
IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl07CisgICAgICAgIHJldHVy
biBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IXBvcy5pc051bGwoKV07CisgICAgfQorICAgIGlm
IChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmRleEZvclRleHRN
YXJrZXJQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgeworICAgICAgICByZXR1cm4gW05TTnVtYmVy
IG51bWJlcldpdGhJbnRlZ2VyOltzZWxmIF9pbmRleEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl1d
OworICAgIH0KKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlckZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKKyAgICAgICAg
cmV0dXJuIFtzZWxmIF90ZXh0TWFya2VyRm9ySW5kZXg6W251bWJlciBpbnRlZ2VyVmFsdWVdXTsK
KyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhVSUVs
ZW1lbnRGb3JUZXh0TWFya2VyIl0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQ
b3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Cisg
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4T2JqZWN0ID0gbV9vYmplY3QtPmFjY2Vzc2li
aWxpdHlPYmplY3RGb3JQb3NpdGlvbih2aXNpYmxlUG9zKTsKKyAgICAgICAgaWYgKCFheE9iamVj
dCkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiBheE9iamVjdC0+d3Jh
cHBlcigpOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
QCJBWFRleHRNYXJrZXJSYW5nZUZvclVJRWxlbWVudCJdKSB7CisgICAgICAgIFZpc2libGVQb3Np
dGlvblJhbmdlIHZwUmFuZ2UgPSB1aUVsZW1lbnQuZ2V0KCktPnZpc2libGVQb3NpdGlvblJhbmdl
KCk7CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0
aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKKyAgICB9CisgICAg
CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMaW5lRm9yVGV4dE1hcmtl
ciJdKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJs
ZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOworICAgICAgICByZXR1cm4gW05T
TnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludDptX29iamVjdC0+bGluZUZvclBvc2l0aW9uKHZp
c2libGVQb3MpXTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhUZXh0TWFya2VyUmFuZ2VGb3JMaW5lIl0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUo
W251bWJlciBpbnRWYWx1ZV0pOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdl
RnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVu
ZF07CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFY
U3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlIl0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFu
Z2UgdmlzaWJsZVBvc1JhbmdlID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFy
a2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5zdHJp
bmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zUmFuZ2UpOworICAgIH0KKyAgICAK
KyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFRleHRNYXJrZXJGb3JQb3Np
dGlvbiJdKSB7CisgICAgICAgIEludFBvaW50IHdlYkNvcmVQb2ludCA9IEludFBvaW50KHBvaW50
KTsKKyAgICAgICAgcmV0dXJuIHBvaW50U2V0ID8gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQ
b3NpdGlvbjptX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQod2ViQ29yZVBvaW50KV0g
OiBuaWw7CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpA
IkFYQm91bmRzRm9yVGV4dE1hcmtlclJhbmdlIl0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgdmlzaWJsZVBvc1JhbmdlID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0
TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKKyAgICAgICAgTlNSZWN0IHJlY3QgPSBtX29i
amVjdC0+Ym91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvc1JhbmdlKTsKKyAg
ICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6cmVjdF07CisgICAgfQorICAgIAor
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlCb3VuZHNG
b3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlv
biBzdGFydCA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5sb2NhdGlv
bik7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmQgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0
aW9uRm9ySW5kZXgocmFuZ2UubG9jYXRpb24rcmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgaWYgKHN0
YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgICAgIE5TUmVjdCByZWN0ID0gbV9vYmplY3QtPmJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJh
bmdlKFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0LCBlbmQpKTsKKyAgICAgICAgcmV0dXJuIFtO
U1ZhbHVlIHZhbHVlV2l0aFJlY3Q6cmVjdF07CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTdHJpbmdGb3JSYW5nZVBhcmFtZXRl
cml6ZWRBdHRyaWJ1dGVdKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9IG1fb2Jq
ZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5sb2NhdGlvbik7CisgICAgICAgIFZp
c2libGVQb3NpdGlvbiBlbmQgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFu
Z2UubG9jYXRpb24rcmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8
IGVuZC5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiBt
X29iamVjdC0+c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoVmlzaWJsZVBvc2l0aW9uUmFu
Z2Uoc3RhcnQsIGVuZCkpOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6QCJBWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UiXSkKKyAgICAg
ICAgcmV0dXJuIFtzZWxmIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlOnRl
eHRNYXJrZXJSYW5nZV07CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
OkAiQVhUZXh0TWFya2VyUmFuZ2VGb3JVbm9yZGVyZWRUZXh0TWFya2VycyJdKSB7CisgICAgICAg
IGlmIChbYXJyYXkgY291bnRdIDwgMikKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAg
IAorICAgICAgICBpZCB0ZXh0TWFya2VyMSA9IFthcnJheSBvYmplY3RBdEluZGV4OjBdOworICAg
ICAgICBpZCB0ZXh0TWFya2VyMiA9IFthcnJheSBvYmplY3RBdEluZGV4OjFdOworICAgICAgICBp
ZiAoIUFYT2JqZWN0SXNUZXh0TWFya2VyKHRleHRNYXJrZXIxKSB8fCAhQVhPYmplY3RJc1RleHRN
YXJrZXIodGV4dE1hcmtlcjIpKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgCisg
ICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zMSA9IFtzZWxmIHZpc2libGVQb3NpdGlv
bkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIxKV07CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlUG9zMiA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJr
ZXIyKV07CisgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+
dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JVbm9yZGVyZWRQb3NpdGlvbnModmlzaWJsZVBvczEsIHZp
c2libGVQb3MyKTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNp
YmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOworICAg
IH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRUZXh0
TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
UG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwor
ICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVj
dC0+bmV4dFZpc2libGVQb3NpdGlvbih2aXNpYmxlUG9zKV07CisgICAgfQorICAgIAorICAgIGlm
IChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNUZXh0TWFya2VyRm9yVGV4
dE1hcmtlciJdKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYg
dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOworICAgICAgICByZXR1
cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+cHJldmlvdXNW
aXNpYmxlUG9zaXRpb24odmlzaWJsZVBvcyldOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExlZnRXb3JkVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1h
cmtlciJdKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlz
aWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOworICAgICAgICBWaXNpYmxl
UG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnBvc2l0aW9uT2ZMZWZ0V29yZCh2aXNp
YmxlUG9zKTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxl
UG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOworICAgIH0K
KyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFJpZ2h0V29yZFRl
eHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24g
dmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJr
ZXIpXTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT5w
b3NpdGlvbk9mUmlnaHRXb3JkKHZpc2libGVQb3MpOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4
dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlv
bjp2cFJhbmdlLmVuZF07CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxU
b1N0cmluZzpAIkFYTGVmdExpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKKyAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25G
b3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdl
IHZwUmFuZ2UgPSBtX29iamVjdC0+bGVmdExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxl
UG9zKTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9z
aXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOworICAgIH0KKyAg
ICAKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFJpZ2h0TGluZVRleHRN
YXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlz
aWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIp
XTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT5yaWdo
dExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zKTsKKyAgICAgICAgcmV0dXJuIFtz
ZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5k
UG9zaXRpb246dnBSYW5nZS5lbmRdOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6QCJBWFNlbnRlbmNlVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJd
KSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBv
c2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOworICAgICAgICBWaXNpYmxlUG9zaXRp
b25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnNlbnRlbmNlRm9yUG9zaXRpb24odmlzaWJsZVBv
cyk7CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0
aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKKyAgICB9CisgICAg
CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQYXJhZ3JhcGhUZXh0TWFy
a2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07
CisgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+cGFyYWdy
YXBoRm9yUG9zaXRpb24odmlzaWJsZVBvcyk7CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFy
a2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZw
UmFuZ2UuZW5kXTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhOZXh0V29yZEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKKyAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0
TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9y
VmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5uZXh0V29yZEVuZCh2aXNpYmxlUG9zKV07CisgICAg
fQorICAgIAorICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNX
b3JkU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7CisgICAgICAgIFZpc2libGVQb3Np
dGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4
dE1hcmtlcildOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3Np
dGlvbjptX29iamVjdC0+cHJldmlvdXNXb3JkU3RhcnQodmlzaWJsZVBvcyldOworICAgIH0KKyAg
ICAKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRMaW5lRW5kVGV4
dE1hcmtlckZvclRleHRNYXJrZXIiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsK
KyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmpl
Y3QtPm5leHRMaW5lRW5kUG9zaXRpb24odmlzaWJsZVBvcyldOworICAgIH0KKyAgICAKKyAgICBp
ZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzTGluZVN0YXJ0VGV4dE1h
cmtlckZvclRleHRNYXJrZXIiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBv
cyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKKyAg
ICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3Qt
PnByZXZpb3VzTGluZVN0YXJ0UG9zaXRpb24odmlzaWJsZVBvcyldOworICAgIH0KKyAgICAKKyAg
ICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRTZW50ZW5jZUVuZFRleHRN
YXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQ
b3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Cisg
ICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0
LT5uZXh0U2VudGVuY2VFbmRQb3NpdGlvbih2aXNpYmxlUG9zKV07CisgICAgfQorICAgIAorICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNTZW50ZW5jZVN0YXJ0
VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlz
aWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIp
XTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9v
YmplY3QtPnByZXZpb3VzU2VudGVuY2VTdGFydFBvc2l0aW9uKHZpc2libGVQb3MpXTsKKyAgICB9
CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0UGFyYWdy
YXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRN
YXJrZXIpXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRp
b246bV9vYmplY3QtPm5leHRQYXJhZ3JhcGhFbmRQb3NpdGlvbih2aXNpYmxlUG9zKV07CisgICAg
fQorICAgIAorICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNQ
YXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKKyAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2Vy
Oih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJs
ZVBvc2l0aW9uOm1fb2JqZWN0LT5wcmV2aW91c1BhcmFncmFwaFN0YXJ0UG9zaXRpb24odmlzaWJs
ZVBvcyldOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
QCJBWFN0eWxlVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7CisgICAgICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtl
cjoodGV4dE1hcmtlcildOworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0g
bV9vYmplY3QtPnN0eWxlUmFuZ2VGb3JQb3NpdGlvbih2aXNpYmxlUG9zKTsKKyAgICAgICAgcmV0
dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3Rh
cnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExlbmd0aEZvclRleHRNYXJrZXJSYW5nZSJdKSB7Cisg
ICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IFtzZWxmIHZpc2li
bGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07CisgICAg
ICAgIGludCBsZW5ndGggPSBtX29iamVjdC0+bGVuZ3RoRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
dmlzaWJsZVBvc1JhbmdlKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgICAgICBy
ZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bGVuZ3Ro
XTsKKyAgICB9CisgICAgCisgICAgLy8gVXNlZCBvbmx5IGJ5IER1bXBSZW5kZXJUcmVlIChzbyBm
YXIpLgorICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYU3RhcnRUZXh0TWFy
a2VyRm9yVGV4dE1hcmtlclJhbmdlIl0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ug
dmlzaWJsZVBvc1JhbmdlID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2Vy
UmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJG
b3JWaXNpYmxlUG9zaXRpb246dmlzaWJsZVBvc1JhbmdlLnN0YXJ0XTsKKyAgICB9CisgICAgCisg
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhFbmRUZXh0TWFya2VyRm9yVGV4
dE1hcmtlclJhbmdlIl0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBv
c1JhbmdlID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4
dE1hcmtlclJhbmdlXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxl
UG9zaXRpb246dmlzaWJsZVBvc1JhbmdlLmVuZF07CisgICAgfQorICAgIAorICAgIGlmIChtX29i
amVjdC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSkgeworICAgICAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2VsbEZvckNvbHVtbkFuZFJvd1BhcmFtZXRl
cml6ZWRBdHRyaWJ1dGVdKSB7CisgICAgICAgICAgICBpZiAoYXJyYXkgPT0gbmlsIHx8IFthcnJh
eSBjb3VudF0gIT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAg
QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlU
YWJsZSo+KG1fb2JqZWN0KS0+Y2VsbEZvckNvbHVtbkFuZFJvdyhbW2FycmF5IG9iamVjdEF0SW5k
ZXg6MF0gdW5zaWduZWRJbnRWYWx1ZV0sIFtbYXJyYXkgb2JqZWN0QXRJbmRleDoxXSB1bnNpZ25l
ZEludFZhbHVlXSk7CisgICAgICAgICAgICBpZiAoIWNlbGwpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGNlbGwtPndyYXBwZXIo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlzVGV4dENvbnRy
b2woKSkgeworICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmlu
ZyAqKWtBWExpbmVGb3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CisgICAgICAgICAg
ICBpbnQgbGluZU51bWJlciA9IG1fb2JqZWN0LT5kb0FYTGluZUZvckluZGV4KFtudW1iZXIgaW50
VmFsdWVdKTsKKyAgICAgICAgICAgIGlmIChsaW5lTnVtYmVyIDwgMCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbmlsOworICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoVW5z
aWduZWRJbnQ6bGluZU51bWJlcl07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChb
YXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3RyaW5nICopa0FYUmFuZ2VGb3JMaW5lUGFy
YW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRS
YW5nZSA9IG1fb2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKFtudW1iZXIgaW50VmFsdWVdKTsKKyAg
ICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTogTlNNYWtlUmFuZ2UodGV4
dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2UubGVuZ3RoKV07CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3RyaW5nKilrQVhTdHJp
bmdGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CisgICAgICAgICAgICBQbGFpblRl
eHRSYW5nZSBwbGFpblRleHRSYW5nZSA9IFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCBy
YW5nZS5sZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIHJhbmdlU2V0ID8gKGlkKShtX29iamVj
dC0+ZG9BWFN0cmluZ0ZvclJhbmdlKHBsYWluVGV4dFJhbmdlKSkgOiBuaWw7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3Ry
aW5nKilrQVhSYW5nZUZvclBvc2l0aW9uUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKKyAgICAg
ICAgICAgIGlmICghcG9pbnRTZXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAg
ICAgICAgIEludFBvaW50IHdlYkNvcmVQb2ludCA9IEludFBvaW50KHBvaW50KTsKKyAgICAgICAg
ICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5kb0FYUmFuZ2VGb3JQb3Np
dGlvbih3ZWJDb3JlUG9pbnQpOworICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0
aFJhbmdlOiBOU01ha2VSYW5nZSh0ZXh0UmFuZ2Uuc3RhcnQsIHRleHRSYW5nZS5sZW5ndGgpXTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOiAoTlNTdHJpbmcqKWtBWFJhbmdlRm9ySW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkg
eworICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gbV9vYmplY3QtPmRvQVhS
YW5nZUZvckluZGV4KFtudW1iZXIgaW50VmFsdWVdKTsKKyAgICAgICAgICAgIHJldHVybiBbTlNW
YWx1ZSB2YWx1ZVdpdGhSYW5nZTogTlNNYWtlUmFuZ2UodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFu
Z2UubGVuZ3RoKV07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzogKE5TU3RyaW5nKilrQVhCb3VuZHNGb3JSYW5nZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVdKSB7CisgICAgICAgICAgICBpZiAoIXJhbmdlU2V0KQorICAgICAgICAgICAg
ICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICBQbGFpblRleHRSYW5nZSBwbGFpblRleHRSYW5n
ZSA9IFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpOworICAgICAg
ICAgICAgTlNSZWN0IHJlY3QgPSBtX29iamVjdC0+ZG9BWEJvdW5kc0ZvclJhbmdlKHBsYWluVGV4
dFJhbmdlKTsKKyAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnJlY3Rd
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6IChOU1N0cmluZyopa0FYUlRGRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkK
KyAgICAgICAgICAgIHJldHVybiByYW5nZVNldCA/IFtzZWxmIGRvQVhSVEZGb3JSYW5nZTpyYW5n
ZV0gOiBuaWw7CisgICAgICAgIAorICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJp
bmc6IChOU1N0cmluZyopa0FYQXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0
dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4gcmFuZ2VTZXQgPyBbc2VsZiBkb0FYQXR0cmli
dXRlZFN0cmluZ0ZvclJhbmdlOnJhbmdlXSA6IG5pbDsKKyAgICAgICAgCisgICAgICAgIGlmIChb
YXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3RyaW5nKilrQVhTdHlsZVJhbmdlRm9ySW5k
ZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgeworICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2Ug
dGV4dFJhbmdlID0gbV9vYmplY3QtPmRvQVhTdHlsZVJhbmdlRm9ySW5kZXgoW251bWJlciBpbnRW
YWx1ZV0pOworICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOiBOU01h
a2VSYW5nZSh0ZXh0UmFuZ2Uuc3RhcnQsIHRleHRSYW5nZS5sZW5ndGgpXTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICAvLyBUaGVyZSBhcmUgc29tZSBwYXJhbWV0ZXJzIHRoYXQgc3VwZXIg
aGFuZGxlcyB0aGF0IGFyZSBub3QgZXhwbGljaXRseSByZXR1cm5lZCBieSB0aGUgbGlzdCBvZiB0
aGUgZWxlbWVudCdzIGF0dHJpYnV0ZXMuCisgICAgLy8gSW4gdGhhdCBjYXNlIGl0IG11c3QgYmUg
cGFzc2VkIHRvIHN1cGVyLgorICAgIHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOmF0dHJpYnV0ZSBmb3JQYXJhbWV0ZXI6cGFyYW1ldGVyXTsKK30KKworLSAoQk9PTClh
Y2Nlc3NpYmlsaXR5U3VwcG9ydHNPdmVycmlkZGVuQXR0cmlidXRlcworeworICAgIHJldHVybiBZ
RVM7Cit9CisKKy0gKEJPT0wpYWNjZXNzaWJpbGl0eVNob3VsZFVzZVVuaXF1ZUlkCit7CisgICAg
Ly8gQWxsIEFYIG9iamVjdCB3cmFwcGVycyBzaG91bGQgdXNlIHVuaXF1ZSBJRCdzIGJlY2F1c2Ug
aXQncyBmYXN0ZXIgd2l0aGluIEFwcEtpdCB0byBsb29rIHRoZW0gdXAuCisgICAgcmV0dXJuIFlF
UzsKK30KKworLy8gQVBJIHRoYXQgQXBwS2l0IHVzZXMgZm9yIGZhc3RlciBhY2Nlc3MKKy0gKE5T
VUludGVnZXIpYWNjZXNzaWJpbGl0eUluZGV4T2ZDaGlsZDooaWQpY2hpbGQKK3sKKyAgICBpZiAo
IVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCisgICAgICAgIHJldHVybiBOU05vdEZv
dW5kOworICAgIAorICAgIC8vIFRyZWUgb2JqZWN0cyByZXR1cm4gdGhlaXIgcm93cyBhcyB0aGVp
ciBjaGlsZHJlbi4gV2UgY2FuIHVzZSB0aGUgb3JpZ2luYWwgbWV0aG9kCisgICAgLy8gaGVyZSwg
YmVjYXVzZSB3ZSB3b24ndCBnYWluIGFueSBzcGVlZCB1cC4KKyAgICBpZiAobV9vYmplY3QtPmlz
VHJlZSgpKQorICAgICAgICByZXR1cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlJbmRleE9mQ2hpbGQ6
Y2hpbGRdOworICAgIAorICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICAK
KyAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gW1tzZWxmIHJlbmRl
cldpZGdldENoaWxkcmVuXSBpbmRleE9mT2JqZWN0OmNoaWxkXTsKKyAgICAKKyAgICB1bnNpZ25l
ZCBjb3VudCA9IGNoaWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwg
Y291bnQ7ICsraykgeworICAgICAgICBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogd3Jh
cHBlciA9IGNoaWxkcmVuW2tdLT53cmFwcGVyKCk7CisgICAgICAgIGlmICh3cmFwcGVyID09IGNo
aWxkIHx8IChjaGlsZHJlbltrXS0+aXNBdHRhY2htZW50KCkgJiYgW3dyYXBwZXIgYXR0YWNobWVu
dFZpZXddID09IGNoaWxkKSkKKyAgICAgICAgICAgIHJldHVybiBrOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gTlNOb3RGb3VuZDsKK30KKworLSAoTlNVSW50ZWdlcilhY2Nlc3NpYmlsaXR5QXJy
YXlBdHRyaWJ1dGVDb3VudDooTlNTdHJpbmcgKilhdHRyaWJ1dGUKK3sKKyAgICBpZiAoIVtzZWxm
IHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCisgICAgICAgIHJldHVybiAwOworICAgIAorICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0
dHJpYnV0ZV0pIHsKKyAgICAgICAgLy8gVHJlZSBpdGVtcyBvYmplY3QgcmV0dXJucyBhIGRpZmZl
cmVudCBzZXQgb2YgY2hpbGRyZW4gdGhhbiB0aG9zZSB0aGF0IGFyZSBpbiBjaGlsZHJlbigpCisg
ICAgICAgIC8vIGJlY2F1c2UgYW4gQVhPdXRsaW5lICh0aGUgbWFjIHJvbGUgaXMgYmVjb21lcykg
aGFzIHNvbWUgb2RkIHN0aXB1bGF0aW9ucy4KKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWUo
KSB8fCBtX29iamVjdC0+aXNUcmVlSXRlbSgpKQorICAgICAgICAgICAgcmV0dXJuIFtbc2VsZiBh
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1
dGVdIGNvdW50XTsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRy
ZW4oKTsKKyAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVy
biBbW3NlbGYgcmVuZGVyV2lkZ2V0Q2hpbGRyZW5dIGNvdW50XTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiBjaGlsZHJlbi5zaXplKCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBbc3VwZXIg
YWNjZXNzaWJpbGl0eUFycmF5QXR0cmlidXRlQ291bnQ6YXR0cmlidXRlXTsKK30KKworLSAoTlNB
cnJheSAqKWFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZVZhbHVlczooTlNTdHJpbmcgKilhdHRy
aWJ1dGUgaW5kZXg6KE5TVUludGVnZXIpaW5kZXggbWF4Q291bnQ6KE5TVUludGVnZXIpbWF4Q291
bnQKK3sKKyAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSkgeworICAgICAgICBpZiAobV9vYmplY3Qt
PmNoaWxkcmVuKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBOU0FycmF5ICpjaGlsZHJlbiA9
IFtzZWxmIHJlbmRlcldpZGdldENoaWxkcmVuXTsKKyAgICAgICAgICAgIGlmICghY2hpbGRyZW4p
CisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
TlNVSW50ZWdlciBjaGlsZENvdW50ID0gW2NoaWxkcmVuIGNvdW50XTsKKyAgICAgICAgICAgIGlm
IChpbmRleCA+PSBjaGlsZENvdW50KQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIE5TVUludGVnZXIgYXJyYXlMZW5ndGggPSBtaW4oY2hpbGRD
b3VudCAtIGluZGV4LCBtYXhDb3VudCk7CisgICAgICAgICAgICByZXR1cm4gW2NoaWxkcmVuIHN1
YmFycmF5V2l0aFJhbmdlOk5TTWFrZVJhbmdlKGluZGV4LCBhcnJheUxlbmd0aCldOworICAgICAg
ICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RyZWUoKSkgeworICAgICAgICAgICAgLy8gVHJlZSBv
YmplY3RzIHJldHVybiB0aGVpciByb3dzIGFzIHRoZWlyIGNoaWxkcmVuLiBXZSBjYW4gdXNlIHRo
ZSBvcmlnaW5hbCBtZXRob2QgaW4gdGhpcyBjYXNlLgorICAgICAgICAgICAgcmV0dXJuIFtzdXBl
ciBhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVWYWx1ZXM6YXR0cmlidXRlIGluZGV4OmluZGV4
IG1heENvdW50Om1heENvdW50XTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY29uc3Qg
QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJl
biA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOworICAgICAgICB1bnNpZ25lZCBjaGlsZENvdW50ID0g
Y2hpbGRyZW4uc2l6ZSgpOworICAgICAgICBpZiAoaW5kZXggPj0gY2hpbGRDb3VudCkKKyAgICAg
ICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBhdmFpbGFibGUg
PSBtaW4oY2hpbGRDb3VudCAtIGluZGV4LCBtYXhDb3VudCk7CisgICAgICAgIAorICAgICAgICBO
U011dGFibGVBcnJheSAqc3ViYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNp
dHk6YXZhaWxhYmxlXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhZGRlZCA9IDA7IGFkZGVkIDwg
YXZhaWxhYmxlOyArK2luZGV4LCArK2FkZGVkKSB7CisgICAgICAgICAgICBXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciogd3JhcHBlciA9IGNoaWxkcmVuW2luZGV4XS0+d3JhcHBlcigpOwor
ICAgICAgICAgICAgaWYgKHdyYXBwZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgYXR0YWNo
bWVudCB2aWV3IHNob3VsZCBiZSByZXR1cm5lZCwgb3RoZXJ3aXNlIEFYIHBhbGluZHJvbWUgZXJy
b3JzIG9jY3VyLgorICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbltpbmRleF0tPmlzQXR0YWNo
bWVudCgpICYmIFt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XSkKKyAgICAgICAgICAgICAgICAgICAg
W3N1YmFycmF5IGFkZE9iamVjdDpbd3JhcHBlciBhdHRhY2htZW50Vmlld11dOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgW3N1YmFycmF5IGFkZE9iamVjdDp3cmFw
cGVyXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHN1YmFycmF5OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlB
cnJheUF0dHJpYnV0ZVZhbHVlczphdHRyaWJ1dGUgaW5kZXg6aW5kZXggbWF4Q291bnQ6bWF4Q291
bnRdOworfQorCisvLyBUaGlzIGlzIHNldCBieSBEUlQgd2hlbiBpdCB3YW50cyB0byBsaXN0ZW4g
Zm9yIG5vdGlmaWNhdGlvbnMuCitzdGF0aWMgQk9PTCBhY2Nlc3NpYmlsaXR5U2hvdWxkUmVwb3N0
Tm90aWZpY2F0aW9uczsKKysgKHZvaWQpYWNjZXNzaWJpbGl0eVNldFNob3VsZFJlcG9zdE5vdGlm
aWNhdGlvbnM6KEJPT0wpcmVwb3N0Cit7CisgICAgYWNjZXNzaWJpbGl0eVNob3VsZFJlcG9zdE5v
dGlmaWNhdGlvbnMgPSByZXBvc3Q7Cit9CisKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eVBvc3RlZE5v
dGlmaWNhdGlvbjooTlNTdHJpbmcgKilub3RpZmljYXRpb25OYW1lCit7CisgICAgaWYgKGFjY2Vz
c2liaWxpdHlTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zKSB7CisgICAgICAgIE5TRGljdGlvbmFy
eSogdXNlckluZm8gPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6
bm90aWZpY2F0aW9uTmFtZSwgQCJub3RpZmljYXRpb25OYW1lIiwgbmlsXTsKKyAgICAgICAgW1tO
U05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBwb3N0Tm90aWZpY2F0aW9uTmFtZTpA
IkFYRFJUTm90aWZpY2F0aW9uIiBvYmplY3Q6c2VsZiB1c2VySW5mbzp1c2VySW5mb107CisgICAg
fQorfQorCitAZW5kCisKKyNlbmRpZiAvLyBIQVZFKEFDQ0VTU0lCSUxJVFkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMu
bW0JKHJldmlzaW9uIDE0Mjg5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFj
L0FYT2JqZWN0Q2FjaGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAog
I2ltcG9ydCAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgogI2ltcG9ydCAiUmVuZGVyT2JqZWN0Lmgi
Ci0jaW1wb3J0ICJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5oIgorI2ltcG9ydCAiV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UuaCIKIAogI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTUxLDcgKzUxLDcg
QEAKIAogdm9pZCBBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iaikKIHsKLSAgICBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+
IHdyYXBwZXIoQWRvcHROUywgW1tXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhbGxvY10g
aW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0Om9ial0pOworICAgIFJldGFpblB0cjxXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4gd3JhcHBlcihBZG9wdE5TLCBbW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjIGFsbG9jXSBpbml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6b2Jq
XSk7CiAgICAgb2JqLT5zZXRXcmFwcGVyKHdyYXBwZXIuZ2V0KCkpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxNDI3NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ2NTAsNiArNDY1MCw4IEBACiAJCUFBMkE1QUQ1
MTZBNDg2MTQwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUEyQTVBQkQxNkE0ODVENTAwOTc1QTI1IC8q
IFNwZWVjaFN5bnRoZXNpcy5jcHAgKi87IH07CiAJCUFBMkE1QUQ2MTZBNDg2MTYwMDk3NUEyNSAv
KiBET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFBMkE1QUI5MTZBNDg1RDUwMDk3NUEyNSAvKiBET01XaW5kb3dT
cGVlY2hTeW50aGVzaXMuaCAqLzsgfTsKIAkJQUEyQTVBRDcxNkE0ODYxQTAwOTc1QTI1IC8qIERP
TVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBQTJBNUFCODE2QTQ4NUQ1MDA5NzVBMjUgLyogRE9NV2luZG93U3Bl
ZWNoU3ludGhlc2lzLmNwcCAqLzsgfTsKKwkJQUE0NzhBN0YxNkNENzBDMzAwN0QxQkI0IC8qIFdl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTQ3OEE3RDE2Q0Q3MEMzMDA3RDFCQjQgLyogV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaCAqLzsgfTsKKwkJQUE0NzhBODAxNkNENzBDMzAw
N0QxQkI0IC8qIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTQ3OEE3RTE2Q0Q3MEMzMDA3RDFC
QjQgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubSAqLzsgfTsKIAkJQUE0QzNB
NzYwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTRDM0E3NDBCMkIxNjc5MDAyMzM0QTIgLyog
U3R5bGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJQUE0QzNBNzcwQjJCMTY3OTAwMjMzNEEyIC8qIFN0
eWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQUE0QzNBNzUwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5oICovOyB9OwogCQlB
QTczMTgzRTE1OTI1NUI5MDBBOTNFNkUgLyogSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE3MzE4M0Mx
NTkyNTVCOTAwQTkzRTZFIC8qIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcCAqLzsgfTsK
QEAgLTY1MTksMTQgKzY1MjEsMTQgQEAKIAkJRkM1NEQwNTgxNkE3Njc2RTAwNTc1RTREIC8qIEpT
Q1NTU3VwcG9ydHNSdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGQzg0ODAyRTE2N0FCNDQ0MDA4Q0QxMDAgLyogSlNDU1NTdXBwb3J0c1J1bGUuaCAq
LzsgfTsKIAkJRkM2M0JEQjMxNjdBQUJBQzAwRjkzODBGIC8qIENTU1N1cHBvcnRzUnVsZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQzYzQkRCMDE2
N0FBQkFDMDBGOTM4MEYgLyogQ1NTU3VwcG9ydHNSdWxlLmNwcCAqLzsgfTsKIAkJRkM3RTY2RTkx
NjgwRUYxRjAwMjgzNzE2IC8qIEpTQ1NTU3VwcG9ydHNSdWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZDODQ4MDJEMTY3QUI0NDQwMDhDRDEwMCAv
KiBKU0NTU1N1cHBvcnRzUnVsZS5jcHAgKi87IH07CisJCUZDOUEwRjc0MTY0MDk0Q0YwMDNENkI4
RCAvKiBET01XaW5kb3dDU1MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkM5QTBGNzExNjQwOTRDRjAwM0Q2QjhEIC8qIERPTVdpbmRvd0NTUy5jcHAg
Ki87IH07CisJCUZDOUEwRjc1MTY0MDk0Q0YwMDNENkI4RCAvKiBET01XaW5kb3dDU1MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZDOUEwRjcyMTY0MDk0
Q0YwMDNENkI4RCAvKiBET01XaW5kb3dDU1MuaCAqLzsgfTsKKwkJRkM5RTBFNEQxNjQxOUMxRTAw
MzkyQkUzIC8qIEpTRE9NV2luZG93Q1NTLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQzlFMEU0QjE2NDE5QzFFMDAzOTJCRTMgLyogSlNET01XaW5kb3dD
U1MuaCAqLzsgfTsKKwkJRkM5RTBFNTExNjQxOUM3RjAwMzkyQkUzIC8qIEpTRE9NV2luZG93Q1NT
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZDOUUw
RTRBMTY0MTlDMUUwMDM5MkJFMyAvKiBKU0RPTVdpbmRvd0NTUy5jcHAgKi87IH07CiAJCUZDRDg4
MzJBMTZBNDlGODIwMDk2MjIyNyAvKiBET01DU1NTdXBwb3J0c1J1bGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZDRDg4MzI4MTZBNDlGODIwMDk2MjIy
NyAvKiBET01DU1NTdXBwb3J0c1J1bGUuaCAqLzsgfTsKIAkJRkNEODgzMkIxNkE0OUY4MjAwOTYy
MjI3IC8qIERPTUNTU1N1cHBvcnRzUnVsZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZDRDg4MzI5MTZBNDlGODIwMDk2MjIyNyAvKiBET01DU1NTdXBw
b3J0c1J1bGUubW0gKi87IH07CiAJCUZDRDg4MzJDMTZBNDlGQjAwMDk2MjIyNyAvKiBET01DU1NT
dXBwb3J0c1J1bGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZDRDg4MzI4MTZBNDlGODIwMDk2MjIyNyAvKiBET01DU1NTdXBw
b3J0c1J1bGUuaCAqLzsgfTsKIAkJRkNFQkJBQUIxNkE0OTY3QTAwRkEyMEE2IC8qIERPTUNTU1N1
cHBvcnRzUnVsZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGQ0VCQkFBQTE2QTQ5NjdBMDBGQTIwQTYgLyogRE9NQ1NTU3VwcG9ydHNSdWxl
SW50ZXJuYWwuaCAqLzsgfTsKLQkJRkM5QTBGNzQxNjQwOTRDRjAwM0Q2QjhEIC8qIERPTVdpbmRv
d0NTUy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QzlBMEY3MTE2NDA5NENGMDAzRDZCOEQgLyogRE9NV2luZG93Q1NTLmNwcCAqLzsgfTsKLQkJRkM5
QTBGNzUxNjQwOTRDRjAwM0Q2QjhEIC8qIERPTVdpbmRvd0NTUy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkM5QTBGNzIxNjQwOTRDRjAwM0Q2QjhEIC8q
IERPTVdpbmRvd0NTUy5oICovOyB9OwotCQlGQzlFMEU0RDE2NDE5QzFFMDAzOTJCRTMgLyogSlNE
T01XaW5kb3dDU1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZDOUUwRTRCMTY0MTlDMUUwMDM5MkJFMyAvKiBKU0RPTVdpbmRvd0NTUy5oICovOyB9Owot
CQlGQzlFMEU1MTE2NDE5QzdGMDAzOTJCRTMgLyogSlNET01XaW5kb3dDU1MuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkM5RTBFNEExNjQxOUMxRTAw
MzkyQkUzIC8qIEpTRE9NV2luZG93Q1NTLmNwcCAqLzsgfTsKIAkJRkQwMEQ3QTQxNEEzRjYxOTAw
NzM0MDExIC8qIFNpbmNSZXNhbXBsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkQwMEQ3QTIxNEEzRjYxOTAwNzM0MDExIC8qIFNpbmNSZXNhbXBs
ZXIuY3BwICovOyB9OwogCQlGRDAwRDdBNTE0QTNGNjE5MDA3MzQwMTEgLyogU2luY1Jlc2FtcGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwMEQ3
QTMxNEEzRjYxOTAwNzM0MDExIC8qIFNpbmNSZXNhbXBsZXIuaCAqLzsgfTsKIAkJRkQwNkRGQTUx
MzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA2REZBMzEzNEE0REVG
MDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCAqLzsgfTsKQEAgLTEy
MDMwLDYgKzEyMDMyLDggQEAKIAkJQUEyQTVBQzYxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5
bnRoZXNpc1ZvaWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNwZWVjaFN5bnRoZXNpc1ZvaWNl
LmNwcDsgcGF0aCA9IE1vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpc1ZvaWNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUEyQTVBQzcxNkE0ODVENTAwOTc1QTI1IC8qIFNw
ZWVjaFN5bnRoZXNpc1ZvaWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNwZWVjaFN5bnRoZXNpc1ZvaWNl
Lmg7IHBhdGggPSBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNWb2ljZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBQTJBNUFDODE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNo
U3ludGhlc2lzVm9pY2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFNwZWVjaFN5bnRoZXNpc1ZvaWNlLmlkbDsgcGF0aCA9
IE1vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpc1ZvaWNlLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQUE0NzhBN0QxNkNENzBDMzAwN0QxQkI0IC8qIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUFBNDc4QTdFMTZDRDcwQzMwMDdEMUJCNCAvKiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBQTRDM0E3NDBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUVsZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBQTRDM0E3NTBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVF
bGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUVsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUE3MzE4M0MxNTkyNTVCOTAwQTkzRTZF
IC8qIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MjE5LDE0ICsxNDIyMywxNCBAQAogCQlGQzYzQkRCMjE2
N0FBQkFDMDBGOTM4MEYgLyogQ1NTU3VwcG9ydHNSdWxlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBDU1NTdXBwb3J0c1J1bGUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
Qzg0ODAyRDE2N0FCNDQ0MDA4Q0QxMDAgLyogSlNDU1NTdXBwb3J0c1J1bGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NTdXBwb3J0c1J1bGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQzg0ODAyRTE2N0FCNDQ0MDA4Q0QxMDAgLyogSlND
U1NTdXBwb3J0c1J1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NT
dXBwb3J0c1J1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkNEODgzMjgxNkE0
OUY4MjAwOTYyMjI3IC8qIERPTUNTU1N1cHBvcnRzUnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01DU1NTdXBwb3J0c1J1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkNEODgzMjkxNkE0OUY4MjAwOTYyMjI3IC8qIERPTUNTU1N1cHBvcnRzUnVsZS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTUNTU1N1cHBvcnRz
UnVsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkNFQkJBQUExNkE0OTY3QTAw
RkEyMEE2IC8qIERPTUNTU1N1cHBvcnRzUnVsZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERPTUNTU1N1cHBvcnRzUnVsZUludGVybmFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZDOUEwRjcxMTY0MDk0Q0YwMDNENkI4RCAvKiBET01XaW5kb3dD
U1MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NV2luZG93Q1NT
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkM5QTBGNzIxNjQwOTRDRjAwM0Q2
QjhEIC8qIERPTVdpbmRvd0NTUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
T01XaW5kb3dDU1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkM5QTBGNzMxNjQw
OTRDRjAwM0Q2QjhEIC8qIERPTVdpbmRvd0NTUy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
RE9NV2luZG93Q1NTLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkM5RTBFNEEx
NjQxOUMxRTAwMzkyQkUzIC8qIEpTRE9NV2luZG93Q1NTLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NV2luZG93Q1NTLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkM5RTBFNEIxNjQxOUMxRTAwMzkyQkUzIC8qIEpTRE9NV2luZG93Q1NTLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NV2luZG93Q1NTLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZDRDg4MzI4MTZBNDlGODIwMDk2MjIyNyAvKiBET01D
U1NTdXBwb3J0c1J1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NQ1NT
U3VwcG9ydHNSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZDRDg4MzI5MTZB
NDlGODIwMDk2MjIyNyAvKiBET01DU1NTdXBwb3J0c1J1bGUubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01DU1NTdXBwb3J0c1J1bGUubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZDRUJCQUFBMTZBNDk2N0EwMEZBMjBBNiAvKiBET01DU1NTdXBw
b3J0c1J1bGVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01D
U1NTdXBwb3J0c1J1bGVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
Q0VCQ0Q3MTE2MjNBNzkxMDAyOTk2NUUgLyogQ1NTR3JhbW1hci55LmluICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS55YWNjOyBwYXRoID0gQ1NTR3JhbW1hci55LmluOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGQ0VCQ0Q3MjE2MjNBNzkxMDAyOTk2NUUgLyogQ1NTR3JhbW1hci55LmluY2x1
ZGVzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS55YWNjOyBwYXRoID0gQ1NTR3JhbW1hci55LmluY2x1
ZGVzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDAwRDdBMjE0QTNGNjE5MDA3MzQw
MTEgLyogU2luY1Jlc2FtcGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTaW5jUmVzYW1wbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1
Mzg3LDYgKzE1MzkxLDggQEAKIAkJCQkyOUE4MTI0NzBGQkI5Q0E5MDA1MTAyOTMgLyogQVhPYmpl
Y3RDYWNoZU1hYy5tbSAqLywKIAkJCQkyOUE4MTI0NTBGQkI5Q0E5MDA1MTAyOTMgLyogV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIuaCAqLywKIAkJCQkyOUE4MTI0NjBGQkI5Q0E5MDA1MTAy
OTMgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0gKi8sCisJCQkJQUE0NzhBN0Qx
NkNENzBDMzAwN0QxQkI0IC8qIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmggKi8s
CisJCQkJQUE0NzhBN0UxNkNENzBDMzAwN0QxQkI0IC8qIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CkBAIC0yNDg5MCw2ICsyNDg5Niw3IEBACiAJCQkJMUFFMkFCMjIwQTFDRTYzQjAw
QjQyQjI1IC8qIEpTSFRNTExhYmVsRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMkFC
MjQwQTFDRTYzQjAwQjQyQjI1IC8qIEpTSFRNTExlZ2VuZEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBRTJBQjI2MEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMSUVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUFBNDc4QTdGMTZDRDcwQzMwMDdEMUJCNCAvKiBXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTdCMEQwQTE5RDYw
NjAwN0ZCOEM1IC8qIEpTSFRNTExpbmtFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUy
QUIyODBBMUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTWFwRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkM0OTFCNzkwQzAyM0VGRDAwOUQ2MzE2IC8qIEpTSFRNTE1hcnF1ZWVFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTI5MTIzLDYgKzI5MTMwLDcgQEAKIAkJCQk5MzFDQkQxMDE2MUE0
NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVUcmVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTFBRjYyRjI1MTREQUZFOUUwMDQxNTU2QyAvKiBTY3JvbGxpbmdUaHJlYWQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUFGNjJGMjQxNERBRkU5MTAwNDE1NTZDIC8qIFNjcm9sbGluZ1RocmVhZE1h
Yy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUFBNDc4QTgwMTZDRDcwQzMwMDdEMUJCNCAvKiBXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBQURE
QTMxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTNDMzhDMDQxNjQ0NzNERDAwMDkxRUIyIC8qIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUubW0g
aW4gU291cmNlcyAqLywKIAkJCQkxQUFBRERFMzE0REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5n
VHJlZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>
<flag name="review"
          id="208525"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
    <flag name="commit-queue"
          id="208788"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188675</attachid>
            <date>2013-02-15 17:40:49 -0800</date>
            <delta_ts>2013-02-15 21:58:11 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>319286</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MzA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNiBAQAorMjAxMy0wMi0xNSAgQ2hyaXMg
RmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIEFYOiBTcGxpdCBXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBzbyBjb2RlIGNhbiBiZSBzaGFyZWQgd2l0aCBpT1MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTg0OQor
CisgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEtpbHplci4KKworICAgICAgICBTcGxpdCB1cCB0
aGUgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc28gdGhhdCBpT1MgY2FuIHNoYXJlIG1v
cmUgCisgICAgICAgIGNvZGUgd2l0aCBNYWNPUy4gSSBpbWFnaW5lIG92ZXIgdGltZSwgbW9yZSBj
b2RlIHdpbGwgbW92ZSBpbnRvIHRoaXMgYmFzZSBjbGFzcywKKyAgICAgICAgYnV0IGZvciBub3cg
dGhpcyB3aWxsIGJlIGEgZ29vZCBzdGFydC4KKworICAgICAgICBBIGJhc2UgY2xhc3MgY2FsbGVk
IFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIG5vdyBleGlzdHMsIGFuZCBNYWMgaGFzIGEg
c3ViY2xhc3MKKyAgICAgICAgb2YgdGhhdC4gaU9TIHdpbGwgYmUgYWJsZSB0byBkbyB0aGUgc2Ft
ZS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6QVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcik6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIuaDoKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZGV0YWNoXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGF0dGFjaG1lbnRWaWV3XSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlPYmplY3RdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVBvc3Rl
ZE5vdGlmaWNhdGlvbjpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgdGl0bGVUYWdTaG91bGRCZVVzZWRJbkRlc2NyaXB0aW9uRmllbGRdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVRpdGxlXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlEZXNjcmlw
dGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3Np
YmlsaXR5SGVscFRleHRdKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5oOiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbTogQWRkZWQuCisgICAgICAg
IChzdGQpOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyBkZXRh
Y2hdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgYXR0YWNo
bWVudFZpZXddKToKKyAgICAgICAgKENGQXV0b3JlbGVhc2VIZWxwZXIpOgorICAgICAgICAoQVhP
YmplY3RJc1RleHRNYXJrZXIpOgorICAgICAgICAoQVhPYmplY3RJc1RleHRNYXJrZXJSYW5nZSk6
CisgICAgICAgIChBWFRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgIChBWFRleHRNYXJrZXJSYW5n
ZVN0YXJ0KToKKyAgICAgICAgKEFYVGV4dE1hcmtlclJhbmdlRW5kKToKKyAgICAgICAgKFNlYXJj
aEtleUVudHJ5KToKKyAgICAgICAgKGNyZWF0ZUFjY2Vzc2liaWxpdHlTZWFyY2hLZXlNYXApOgor
ICAgICAgICAoYWNjZXNzaWJpbGl0eVNlYXJjaEtleUZvclN0cmluZyk6CisgICAgICAgICh0ZXh0
TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpdKToKKyAgICAgICAg
KHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIpOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlck1hYyB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOl0pOgorICAg
ICAgICAodmlzaWJsZVBvc2l0aW9uRm9yU3RhcnRPZlRleHRNYXJrZXJSYW5nZSk6CisgICAgICAg
ICh2aXNpYmxlUG9zaXRpb25Gb3JFbmRPZlRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgICh0ZXh0
TWFya2VyUmFuZ2VGcm9tTWFya2Vycyk6CisgICAgICAgIChBWEF0dHJpYnV0ZWRTdHJpbmdSYW5n
ZUlzVmFsaWQpOgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KToKKyAgICAgICAg
KENyZWF0ZUNHQ29sb3JJZkRpZmZlcmVudCk6CisgICAgICAgIChBWEF0dHJpYnV0ZVN0cmluZ1Nl
dENvbG9yKToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKToKKyAgICAgICAg
KEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUpOgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdT
ZXRCbG9ja3F1b3RlTGV2ZWwpOgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRTcGVsbGlu
Zyk6CisgICAgICAgIChBWEF0dHJpYnV0ZVN0cmluZ1NldEhlYWRpbmdMZXZlbCk6CisgICAgICAg
IChBWEF0dHJpYnV0ZVN0cmluZ1NldEVsZW1lbnQpOgorICAgICAgICAoQVhBdHRyaWJ1dGVkU3Ry
aW5nQXBwZW5kVGV4dCk6CisgICAgICAgIChuc1N0cmluZ0ZvclJlcGxhY2VkTm9kZSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIGRvQVhBdHRyaWJ1dGVkU3Ry
aW5nRm9yVGV4dE1hcmtlclJhbmdlOl0pOgorICAgICAgICAodGV4dE1hcmtlclJhbmdlRnJvbVZp
c2libGVQb3NpdGlvbnMpOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYyB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczplbmRQb3NpdGlvbjpdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgYWNjZXNzaWJpbGl0
eUFjdGlvbk5hbWVzXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
TWFjIGFkZGl0aW9uYWxBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5h
bWVzXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIHZpc2li
bGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOl0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyByZW5kZXJXaWRnZXRDaGlsZHJlbl0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyByZW1vdGVBY2Nlc3NpYmlsaXR5
UGFyZW50T2JqZWN0XSk6CisgICAgICAgIChjb252ZXJ0VG9WZWN0b3IpOgorICAgICAgICAoY29u
dmVydFRvTlNBcnJheSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
TWFjIHRleHRNYXJrZXJSYW5nZUZvclNlbGVjdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYyBwb3NpdGlvbl0pOgorICAgICAgICAoY3JlYXRlQWNjZXNz
aWJpbGl0eVJvbGVNYXApOgorICAgICAgICAocm9sZVZhbHVlVG9OU1N0cmluZyk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIHJvbGVdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgc3Vicm9sZV0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyByb2xlRGVzY3JpcHRpb25dKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgc2Nyb2xsVmlld1BhcmVudF0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyB0aXRsZVRhZ1No
b3VsZEJlVXNlZEluRGVzY3JpcHRpb25GaWVsZF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlck1hYyBhY2Nlc3NpYmlsaXR5VGl0bGVdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uXSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIGFjY2Vzc2liaWxp
dHlIZWxwVGV4dF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1h
YyBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyTWFjIGFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50XSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIGFjY2Vzc2liaWxpdHlI
aXRUZXN0Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyBh
Y2Nlc3NpYmlsaXR5SXNBdHRyaWJ1dGVTZXR0YWJsZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgYWNjZXNzaWJpbGl0eUlzSWdub3JlZF0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyBhY2Nlc3NpYmlsaXR5UGFyYW1l
dGVyaXplZEF0dHJpYnV0ZU5hbWVzXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyTWFjIGFjY2Vzc2liaWxpdHlQZXJmb3JtUHJlc3NBY3Rpb25dKToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgYWNjZXNzaWJpbGl0eVBlcmZvcm1J
bmNyZW1lbnRBY3Rpb25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMgYWNjZXNzaWJpbGl0eVBlcmZvcm1EZWNyZW1lbnRBY3Rpb25dKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgYWNjZXNzaWJpbGl0eVBlcmZvcm1TaG93
TWVudUFjdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1h
YyBhY2Nlc3NpYmlsaXR5U2hvd0NvbnRleHRNZW51XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyTWFjIGFjY2Vzc2liaWxpdHlQZXJmb3JtQWN0aW9uOl0pOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyBhY2Nlc3NpYmlsaXR5U2V0
VmFsdWU6Zm9yQXR0cmlidXRlOl0pOgorICAgICAgICAocmVuZGVyZXJGb3JWaWV3KToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgX2FjY2Vzc2liaWxpdHlQYXJl
bnRGb3JTdWJ2aWV3Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYyBhY2Nlc3NpYmlsaXR5QWN0aW9uRGVzY3JpcHRpb246XSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIF9jb252ZXJ0
VG9OU1JhbmdlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1h
YyBfaW5kZXhGb3JUZXh0TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYyBfdGV4dE1hcmtlckZvckluZGV4Ol0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyBkb0FYUlRGRm9yUmFuZ2U6XSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZTpmb3JQYXJhbWV0ZXI6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjIGFjY2Vzc2liaWxpdHlTdXBwb3J0c092ZXJyaWRkZW5BdHRyaWJ1dGVzXSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIGFjY2Vzc2liaWxpdHlT
aG91bGRVc2VVbmlxdWVJZF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlck1hYyBhY2Nlc3NpYmlsaXR5SW5kZXhPZkNoaWxkOl0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyBhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVDb3Vu
dDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMgYWNjZXNz
aWJpbGl0eUFycmF5QXR0cmlidXRlVmFsdWVzOmluZGV4Om1heENvdW50Ol0pOgorICAgICAgICAo
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjIGFjY2Vzc2liaWxpdHlTZXRTaG91bGRS
ZXBvc3ROb3RpZmljYXRpb25zOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYyBhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOl0pOgorCiAyMDEzLTAy
LTE1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJF
R1JFU1NJT04gKHIxNDI1MDU/KTogQ3Jhc2hlcyBpbiBXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZU5v
ZGU6OmFwcGVuZENoaWxkIHdoZW4gdXNpbmcgYmFjay9mb3J3YXJkIGJ1dHRvbnMKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE0MzA3NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDY2NCw2ICs0NjY0LDggQEAKIAkJQUEyQTVB
RDUxNkE0ODYxNDAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpcy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTJBNUFCRDE2QTQ4NUQ1MDA5NzVBMjUg
LyogU3BlZWNoU3ludGhlc2lzLmNwcCAqLzsgfTsKIAkJQUEyQTVBRDYxNkE0ODYxNjAwOTc1QTI1
IC8qIERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQUEyQTVBQjkxNkE0ODVENTAwOTc1QTI1IC8qIERPTVdpbmRv
d1NwZWVjaFN5bnRoZXNpcy5oICovOyB9OwogCQlBQTJBNUFENzE2QTQ4NjFBMDA5NzVBMjUgLyog
RE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFBMkE1QUI4MTZBNDg1RDUwMDk3NUEyNSAvKiBET01XaW5kb3dT
cGVlY2hTeW50aGVzaXMuY3BwICovOyB9OworCQlBQTQ3OEE3RjE2Q0Q3MEMzMDA3RDFCQjQgLyog
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBNDc4QTdEMTZDRDcwQzMwMDdEMUJCNCAvKiBXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5oICovOyB9OworCQlBQTQ3OEE4MDE2Q0Q3MEMz
MDA3RDFCQjQgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTQ3OEE3RTE2Q0Q3MEMzMDA3
RDFCQjQgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gKi87IH07CiAJCUFB
NEMzQTc2MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE0QzNBNzQwQjJCMTY3OTAwMjMzNEEy
IC8qIFN0eWxlRWxlbWVudC5jcHAgKi87IH07CiAJCUFBNEMzQTc3MEIyQjE2NzkwMDIzMzRBMiAv
KiBTdHlsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFBNEMzQTc1MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuaCAqLzsgfTsK
IAkJQUE3MzE4M0UxNTkyNTVCOTAwQTkzRTZFIC8qIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBNzMx
ODNDMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5jcHAgKi87
IH07CkBAIC0xMjA1OCw2ICsxMjA2MCw4IEBACiAJCUFBMkE1QUM2MTZBNDg1RDUwMDk3NUEyNSAv
KiBTcGVlY2hTeW50aGVzaXNWb2ljZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTcGVlY2hTeW50
aGVzaXNWb2ljZS5jcHA7IHBhdGggPSBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNWb2lj
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBMkE1QUM3MTZBNDg1RDUwMDk3
NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNWb2ljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTcGVlY2hTeW50
aGVzaXNWb2ljZS5oOyBwYXRoID0gTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVm9pY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUEyQTVBQzgxNkE0ODVENTAwOTc1QTI1
IC8qIFNwZWVjaFN5bnRoZXNpc1ZvaWNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBTcGVlY2hTeW50aGVzaXNWb2ljZS5p
ZGw7IHBhdGggPSBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNWb2ljZS5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBNDc4QTdEMTZDRDcwQzMwMDdEMUJCNCAvKiBXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBQTQ3OEE3RTE2Q0Q3MEMzMDA3RDFCQjQgLyogV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgZmlsZUVuY29kaW5nID0gNDsg
cGF0aCA9IFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBQTRDM0E3NDBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQTRDM0E3NTBCMkIxNjc5MDAyMzM0
QTIgLyogU3R5bGVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHlsZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUE3MzE4M0MxNTky
NTVCOTAwQTkzRTZFIC8qIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NDE1LDYgKzE1NDE5LDggQEAKIAkJ
CQkyOUE4MTI0NzBGQkI5Q0E5MDA1MTAyOTMgLyogQVhPYmplY3RDYWNoZU1hYy5tbSAqLywKIAkJ
CQkyOUE4MTI0NTBGQkI5Q0E5MDA1MTAyOTMgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIuaCAqLywKIAkJCQkyOUE4MTI0NjBGQkI5Q0E5MDA1MTAyOTMgLyogV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIubW0gKi8sCisJCQkJQUE0NzhBN0QxNkNENzBDMzAwN0QxQkI0IC8qIFdl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmggKi8sCisJCQkJQUE0NzhBN0UxNkNENzBD
MzAwN0QxQkI0IC8qIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tICovLAogCQkJ
KTsKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjQ5MzEs
NiArMjQ5MzcsNyBAQAogCQkJCTFBRTJBQjIyMEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMYWJl
bEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTJBQjI0MEExQ0U2M0IwMEI0MkIyNSAv
KiBKU0hUTUxMZWdlbmRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyQUIyNjBBMUNF
NjNCMDBCNDJCMjUgLyogSlNIVE1MTElFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlBQTQ3
OEE3RjE2Q0Q3MEMzMDA3RDFCQjQgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU3QjBEMEExOUQ2MDYwMDdGQjhDNSAvKiBKU0hUTUxM
aW5rRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMkFCMjgwQTFDRTYzQjAwQjQyQjI1
IC8qIEpTSFRNTE1hcEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDkxQjc5MEMwMjNF
RkQwMDlENjMxNiAvKiBKU0hUTUxNYXJxdWVlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
OTE2OCw2ICsyOTE3NSw3IEBACiAJCQkJOTMxQ0JEMTAxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9s
bGluZ1N0YXRlVHJlZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUY2MkYyNTE0REFGRTlFMDA0
MTU1NkMgLyogU2Nyb2xsaW5nVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRjYyRjI0
MTREQUZFOTEwMDQxNTU2QyAvKiBTY3JvbGxpbmdUaHJlYWRNYWMubW0gaW4gU291cmNlcyAqLywK
KwkJCQlBQTQ3OEE4MDE2Q0Q3MEMzMDA3RDFCQjQgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUFBRERBMzE0REI0MDlGMDBBRjY0QjMg
LyogU2Nyb2xsaW5nVHJlZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0MzOEMwNDE2NDQ3M0RE
MDAwOTFFQjIgLyogU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTFBQUFEREUzMTREQzhDOEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZS5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIuaAkocmV2aXNpb24g
MTQzMDcwKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQxLDEyIEBACiAt
IChpZClpbml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3QqKWF4T2JqZWN0OwogLSAodm9pZClkZXRhY2g7CiAtIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0KilhY2Nlc3NpYmlsaXR5T2JqZWN0OwotKyAodm9pZClhY2Nlc3NpYmlsaXR5U2V0
U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczooQk9PTClyZXBvc3Q7CistIChCT09MKXVwZGF0ZU9i
amVjdEJhY2tpbmdTdG9yZTsKIAorLSAoaWQpYXR0YWNobWVudFZpZXc7CiAvLyBVc2VkIHRvIGlu
Zm9ybSBhbiBlbGVtZW50IHdoZW4gYSBub3RpZmljYXRpb24gaXMgcG9zdGVkIGZvciBpdC4gVXNl
ZCBieSBEUlQuCiAtICh2b2lkKWFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmljYXRpb246KE5TU3Ry
aW5nICopbm90aWZpY2F0aW9uTmFtZTsKIAotLSAoTlNWaWV3KilhdHRhY2htZW50VmlldzsKLQog
QGVuZAogCiAjZW5kaWYgLy8gV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJfaApJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21h
Yy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hY19oCisjZGVmaW5lIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjX2gKKworI2ltcG9ydCAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIuaCIK
KworQGludGVyZmFjZSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYyA6IFdlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyCisKK0BlbmQKKworI2VuZGlmIC8vIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
Lm1tCShyZXZpc2lvbiAxNDMwNzApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21h
Yy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNzcs
Mjg4ICs3Nyw2IEBACiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIAotLy8gQ2VsbCBUYWJsZXMKLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRD
ZWxsc0F0dHJpYnV0ZQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENlbGxzQXR0cmli
dXRlIEAiQVhTZWxlY3RlZENlbGxzIgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5
VmlzaWJsZUNlbGxzQXR0cmlidXRlCi0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVZpc2libGVDZWxs
c0F0dHJpYnV0ZSBAIkFYVmlzaWJsZUNlbGxzIgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3Np
YmlsaXR5Um93SGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZQotI2RlZmluZSBOU0FjY2Vzc2liaWxp
dHlSb3dIZWFkZXJVSUVsZW1lbnRzQXR0cmlidXRlIEAiQVhSb3dIZWFkZXJVSUVsZW1lbnRzIgot
I2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Um93SW5kZXhSYW5nZUF0dHJpYnV0ZQot
I2RlZmluZSBOU0FjY2Vzc2liaWxpdHlSb3dJbmRleFJhbmdlQXR0cmlidXRlIEAiQVhSb3dJbmRl
eFJhbmdlIgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Q29sdW1uSW5kZXhSYW5n
ZUF0dHJpYnV0ZQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlDb2x1bW5JbmRleFJhbmdlQXR0cmli
dXRlIEAiQVhDb2x1bW5JbmRleFJhbmdlIgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmls
aXR5Q2VsbEZvckNvbHVtbkFuZFJvd1BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUKLSNkZWZpbmUgTlNB
Y2Nlc3NpYmlsaXR5Q2VsbEZvckNvbHVtbkFuZFJvd1BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgQCJB
WENlbGxGb3JDb2x1bW5BbmRSb3ciCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlD
ZWxsUm9sZQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlDZWxsUm9sZSBAIkFYQ2VsbCIKLSNlbmRp
ZgotCi0vLyBMaXN0cwotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlDb250ZW50TGlzdFN1YnJvbGUK
LSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Q29udGVudExpc3RTdWJyb2xlIEAiQVhDb250ZW50TGlz
dCIKLSNlbmRpZgotCi0jaWZuZGVmIE5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uTGlzdFN1YnJv
bGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25MaXN0U3Vicm9sZSBAIkFYRGVz
Y3JpcHRpb25MaXN0IgotI2VuZGlmCi0KLS8vIE1pc2NlbGxhbmVvdXMKLSNpZm5kZWYgTlNBY2Nl
c3NpYmlsaXR5QmxvY2tRdW90ZUxldmVsQXR0cmlidXRlCi0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0
eUJsb2NrUXVvdGVMZXZlbEF0dHJpYnV0ZSBAIkFYQmxvY2tRdW90ZUxldmVsIgotI2VuZGlmCi0K
LSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5QWNjZXNzS2V5QXR0cmlidXRlCi0jZGVmaW5lIE5TQWNj
ZXNzaWJpbGl0eUFjY2Vzc0tleUF0dHJpYnV0ZSBAIkFYQWNjZXNzS2V5IgotI2VuZGlmCi0KLSNp
Zm5kZWYgTlNBY2Nlc3NpYmlsaXR5TGFuZ3VhZ2VBdHRyaWJ1dGUKLSNkZWZpbmUgTlNBY2Nlc3Np
YmlsaXR5TGFuZ3VhZ2VBdHRyaWJ1dGUgQCJBWExhbmd1YWdlIgotI2VuZGlmCi0KLSNpZm5kZWYg
TlNBY2Nlc3NpYmlsaXR5UmVxdWlyZWRBdHRyaWJ1dGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5
UmVxdWlyZWRBdHRyaWJ1dGUgQCJBWFJlcXVpcmVkIgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nl
c3NpYmlsaXR5SW52YWxpZEF0dHJpYnV0ZQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlJbnZhbGlk
QXR0cmlidXRlIEAiQVhJbnZhbGlkIgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5
T3duc0F0dHJpYnV0ZQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlPd25zQXR0cmlidXRlIEAiQVhP
d25zIgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5R3JhYmJlZEF0dHJpYnV0ZQot
I2RlZmluZSBOU0FjY2Vzc2liaWxpdHlHcmFiYmVkQXR0cmlidXRlIEAiQVhHcmFiYmVkIgotI2Vu
ZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5RHJvcEVmZmVjdHNBdHRyaWJ1dGUKLSNkZWZp
bmUgTlNBY2Nlc3NpYmlsaXR5RHJvcEVmZmVjdHNBdHRyaWJ1dGUgQCJBWERyb3BFZmZlY3RzIgot
I2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5QVJJQUxpdmVBdHRyaWJ1dGUKLSNkZWZp
bmUgTlNBY2Nlc3NpYmlsaXR5QVJJQUxpdmVBdHRyaWJ1dGUgQCJBWEFSSUFMaXZlIgotI2VuZGlm
Ci0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5QVJJQUF0b21pY0F0dHJpYnV0ZQotI2RlZmluZSBO
U0FjY2Vzc2liaWxpdHlBUklBQXRvbWljQXR0cmlidXRlIEAiQVhBUklBQXRvbWljIgotI2VuZGlm
Ci0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5QVJJQVJlbGV2YW50QXR0cmlidXRlCi0jZGVmaW5l
IE5TQWNjZXNzaWJpbGl0eUFSSUFSZWxldmFudEF0dHJpYnV0ZSBAIkFYQVJJQVJlbGV2YW50Igot
I2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5QVJJQUJ1c3lBdHRyaWJ1dGUKLSNkZWZp
bmUgTlNBY2Nlc3NpYmlsaXR5QVJJQUJ1c3lBdHRyaWJ1dGUgQCJBWEFSSUFCdXN5IgotI2VuZGlm
Ci0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5TG9hZGluZ1Byb2dyZXNzQXR0cmlidXRlCi0jZGVm
aW5lIE5TQWNjZXNzaWJpbGl0eUxvYWRpbmdQcm9ncmVzc0F0dHJpYnV0ZSBAIkFYTG9hZGluZ1By
b2dyZXNzIgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGFzUG9wdXBBdHRyaWJ1
dGUKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5SGFzUG9wdXBBdHRyaWJ1dGUgQCJBWEhhc1BvcHVw
IgotI2VuZGlmCi0KLSNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5UGxhY2Vob2xkZXJWYWx1ZUF0dHJp
YnV0ZQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlQbGFjZWhvbGRlclZhbHVlQXR0cmlidXRlIEAi
QVhQbGFjZWhvbGRlclZhbHVlIgotI2VuZGlmCi0KLS8vIFNlYXJjaAotI2lmbmRlZiBOU0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRzRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0
ZQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRzRm9yU2VhcmNoUHJlZGljYXRlUGFy
YW1ldGVyaXplZEF0dHJpYnV0ZSBAIkFYVUlFbGVtZW50c0ZvclNlYXJjaFByZWRpY2F0ZSIKLSNl
bmRpZgotCi0vLyBTZWFyY2ggS2V5cwotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlBbnlUeXBlU2Vh
cmNoS2V5Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUFueVR5cGVTZWFyY2hLZXkgQCJBWEFueVR5
cGVTZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlCbG9ja3F1b3Rl
U2FtZUxldmVsU2VhcmNoS2V5Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUJsb2NrcXVvdGVTYW1l
TGV2ZWxTZWFyY2hLZXkgQCJBWEJsb2NrcXVvdGVTYW1lTGV2ZWxTZWFyY2hLZXkiCi0jZW5kaWYK
LQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlCbG9ja3F1b3RlU2VhcmNoS2V5Ci0jZGVmaW5lIE5T
QWNjZXNzaWJpbGl0eUJsb2NrcXVvdGVTZWFyY2hLZXkgQCJBWEJsb2NrcXVvdGVTZWFyY2hLZXki
Ci0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlCb2xkRm9udFNlYXJjaEtleQotI2Rl
ZmluZSBOU0FjY2Vzc2liaWxpdHlCb2xkRm9udFNlYXJjaEtleSBAIkFYQm9sZEZvbnRTZWFyY2hL
ZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlCdXR0b25TZWFyY2hLZXkKLSNk
ZWZpbmUgTlNBY2Nlc3NpYmlsaXR5QnV0dG9uU2VhcmNoS2V5IEAiQVhCdXR0b25TZWFyY2hLZXki
Ci0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlDaGVja0JveFNlYXJjaEtleQotI2Rl
ZmluZSBOU0FjY2Vzc2liaWxpdHlDaGVja0JveFNlYXJjaEtleSBAIkFYQ2hlY2tCb3hTZWFyY2hL
ZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlDb250cm9sU2VhcmNoS2V5Ci0j
ZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUNvbnRyb2xTZWFyY2hLZXkgQCJBWENvbnRyb2xTZWFyY2hL
ZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlEaWZmZXJlbnRUeXBlU2VhcmNo
S2V5Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eURpZmZlcmVudFR5cGVTZWFyY2hLZXkgQCJBWERp
ZmZlcmVudFR5cGVTZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlG
b250Q2hhbmdlU2VhcmNoS2V5Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUZvbnRDaGFuZ2VTZWFy
Y2hLZXkgQCJBWEZvbnRDaGFuZ2VTZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vz
c2liaWxpdHlGb250Q29sb3JDaGFuZ2VTZWFyY2hLZXkKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5
Rm9udENvbG9yQ2hhbmdlU2VhcmNoS2V5IEAiQVhGb250Q29sb3JDaGFuZ2VTZWFyY2hLZXkiCi0j
ZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlGcmFtZVNlYXJjaEtleQotI2RlZmluZSBO
U0FjY2Vzc2liaWxpdHlGcmFtZVNlYXJjaEtleSBAIkFYRnJhbWVTZWFyY2hLZXkiCi0jZW5kaWYK
LQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlHcmFwaGljU2VhcmNoS2V5Ci0jZGVmaW5lIE5TQWNj
ZXNzaWJpbGl0eUdyYXBoaWNTZWFyY2hLZXkgQCJBWEdyYXBoaWNTZWFyY2hLZXkiCi0jZW5kaWYK
LQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWwxU2VhcmNoS2V5Ci0jZGVmaW5l
IE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDFTZWFyY2hLZXkgQCJBWEhlYWRpbmdMZXZlbDFT
ZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWwy
U2VhcmNoS2V5Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDJTZWFyY2hLZXkg
QCJBWEhlYWRpbmdMZXZlbDJTZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2li
aWxpdHlIZWFkaW5nTGV2ZWwzU2VhcmNoS2V5Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUhlYWRp
bmdMZXZlbDNTZWFyY2hLZXkgQCJBWEhlYWRpbmdMZXZlbDNTZWFyY2hLZXkiCi0jZW5kaWYKLQot
I2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWw0U2VhcmNoS2V5Ci0jZGVmaW5lIE5T
QWNjZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDRTZWFyY2hLZXkgQCJBWEhlYWRpbmdMZXZlbDRTZWFy
Y2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWw1U2Vh
cmNoS2V5Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDVTZWFyY2hLZXkgQCJB
WEhlYWRpbmdMZXZlbDVTZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxp
dHlIZWFkaW5nTGV2ZWw2U2VhcmNoS2V5Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdM
ZXZlbDZTZWFyY2hLZXkgQCJBWEhlYWRpbmdMZXZlbDZTZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lm
bmRlZiBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nU2FtZUxldmVsU2VhcmNoS2V5Ci0jZGVmaW5lIE5T
QWNjZXNzaWJpbGl0eUhlYWRpbmdTYW1lTGV2ZWxTZWFyY2hLZXkgQCJBWEhlYWRpbmdTYW1lTGV2
ZWxTZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nU2Vh
cmNoS2V5Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdTZWFyY2hLZXkgQCJBWEhlYWRp
bmdTZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlIaWdobGlnaHRl
ZFNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlIaWdobGlnaHRlZFNlYXJjaEtleSBA
IkFYSGlnaGxpZ2h0ZWRTZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxp
dHlJdGFsaWNGb250U2VhcmNoS2V5Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUl0YWxpY0ZvbnRT
ZWFyY2hLZXkgQCJBWEl0YWxpY0ZvbnRTZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0Fj
Y2Vzc2liaWxpdHlMYW5kbWFya1NlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlMYW5k
bWFya1NlYXJjaEtleSBAIkFYTGFuZG1hcmtTZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBO
U0FjY2Vzc2liaWxpdHlMaW5rU2VhcmNoS2V5Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUxpbmtT
ZWFyY2hLZXkgQCJBWExpbmtTZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2li
aWxpdHlMaXN0U2VhcmNoS2V5Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUxpc3RTZWFyY2hLZXkg
QCJBWExpc3RTZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlMaXZl
UmVnaW9uU2VhcmNoS2V5Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUxpdmVSZWdpb25TZWFyY2hL
ZXkgQCJBWExpdmVSZWdpb25TZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2li
aWxpdHlNaXNzcGVsbGVkV29yZFNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNaXNz
cGVsbGVkV29yZFNlYXJjaEtleSBAIkFYTWlzc3BlbGxlZFdvcmRTZWFyY2hLZXkiCi0jZW5kaWYK
LQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlQbGFpblRleHRTZWFyY2hLZXkKLSNkZWZpbmUgTlNB
Y2Nlc3NpYmlsaXR5UGxhaW5UZXh0U2VhcmNoS2V5IEAiQVhQbGFpblRleHRTZWFyY2hLZXkiCi0j
ZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlSYWRpb0dyb3VwU2VhcmNoS2V5Ci0jZGVm
aW5lIE5TQWNjZXNzaWJpbGl0eVJhZGlvR3JvdXBTZWFyY2hLZXkgQCJBWFJhZGlvR3JvdXBTZWFy
Y2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlTYW1lVHlwZVNlYXJjaEtl
eQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlTYW1lVHlwZVNlYXJjaEtleSBAIkFYU2FtZVR5cGVT
ZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlTdGF0aWNUZXh0U2Vh
cmNoS2V5Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVN0YXRpY1RleHRTZWFyY2hLZXkgQCJBWFN0
YXRpY1RleHRTZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlTdHls
ZUNoYW5nZVNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlTdHlsZUNoYW5nZVNlYXJj
aEtleSBAIkFYU3R5bGVDaGFuZ2VTZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vz
c2liaWxpdHlUYWJsZVNhbWVMZXZlbFNlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlU
YWJsZVNhbWVMZXZlbFNlYXJjaEtleSBAIkFYVGFibGVTYW1lTGV2ZWxTZWFyY2hLZXkiCi0jZW5k
aWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUYWJsZVNlYXJjaEtleQotI2RlZmluZSBOU0Fj
Y2Vzc2liaWxpdHlUYWJsZVNlYXJjaEtleSBAIkFYVGFibGVTZWFyY2hLZXkiCi0jZW5kaWYKLQot
I2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlUZXh0RmllbGRTZWFyY2hLZXkKLSNkZWZpbmUgTlNBY2Nl
c3NpYmlsaXR5VGV4dEZpZWxkU2VhcmNoS2V5IEAiQVhUZXh0RmllbGRTZWFyY2hLZXkiCi0jZW5k
aWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlVbmRlcmxpbmVTZWFyY2hLZXkKLSNkZWZpbmUg
TlNBY2Nlc3NpYmlsaXR5VW5kZXJsaW5lU2VhcmNoS2V5IEAiQVhVbmRlcmxpbmVTZWFyY2hLZXki
Ci0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlVbnZpc2l0ZWRMaW5rU2VhcmNoS2V5
Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVVudmlzaXRlZExpbmtTZWFyY2hLZXkgQCJBWFVudmlz
aXRlZExpbmtTZWFyY2hLZXkiCi0jZW5kaWYKLQotI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlWaXNp
dGVkTGlua1NlYXJjaEtleQotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlWaXNpdGVkTGlua1NlYXJj
aEtleSBAIkFYVmlzaXRlZExpbmtTZWFyY2hLZXkiCi0jZW5kaWYKLQotI2RlZmluZSBOU0FjY2Vz
c2liaWxpdHlUZXh0TWFya2VySXNWYWxpZFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgQCJBWFRleHRN
YXJrZXJJc1ZhbGlkIgotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlJbmRleEZvclRleHRNYXJrZXJQ
YXJhbWV0ZXJpemVkQXR0cmlidXRlIEAiQVhJbmRleEZvclRleHRNYXJrZXIiCi0jZGVmaW5lIE5T
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJGb3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgQCJB
WFRleHRNYXJrZXJGb3JJbmRleCIKLQotLy8gTWF0aCBhdHRyaWJ1dGVzCi0jZGVmaW5lIE5TQWNj
ZXNzaWJpbGl0eU1hdGhSb290UmFkaWNhbmRBdHRyaWJ1dGUgQCJBWE1hdGhSb290UmFkaWNhbmQi
Ci0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eU1hdGhSb290SW5kZXhBdHRyaWJ1dGUgQCJBWE1hdGhS
b290SW5kZXgiCi0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eU1hdGhGcmFjdGlvbkRlbm9taW5hdG9y
QXR0cmlidXRlIEAiQVhNYXRoRnJhY3Rpb25EZW5vbWluYXRvciIKLSNkZWZpbmUgTlNBY2Nlc3Np
YmlsaXR5TWF0aEZyYWN0aW9uTnVtZXJhdG9yQXR0cmlidXRlIEAiQVhNYXRoRnJhY3Rpb25OdW1l
cmF0b3IiCi0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eU1hdGhCYXNlQXR0cmlidXRlIEAiQVhNYXRo
QmFzZSIKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5TWF0aFN1YnNjcmlwdEF0dHJpYnV0ZSBAIkFY
TWF0aFN1YnNjcmlwdCIKLSNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5TWF0aFN1cGVyc2NyaXB0QXR0
cmlidXRlIEAiQVhNYXRoU3VwZXJzY3JpcHQiCi0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eU1hdGhV
bmRlckF0dHJpYnV0ZSBAIkFYTWF0aFVuZGVyIgotI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNYXRo
T3ZlckF0dHJpYnV0ZSBAIkFYTWF0aE92ZXIiCi0jZGVmaW5lIE5TQWNjZXNzaWJpbGl0eU1hdGhG
ZW5jZWRPcGVuQXR0cmlidXRlIEAiQVhNYXRoRmVuY2VkT3BlbiIKLSNkZWZpbmUgTlNBY2Nlc3Np
YmlsaXR5TWF0aEZlbmNlZENsb3NlQXR0cmlidXRlIEAiQVhNYXRoRmVuY2VkQ2xvc2UiCi0KLUBp
bnRlcmZhY2UgTlNPYmplY3QgKFdlYktpdEFjY2Vzc2liaWxpdHlBcnJheUNhdGVnb3J5KQotCi0t
IChOU1VJbnRlZ2VyKWFjY2Vzc2liaWxpdHlJbmRleE9mQ2hpbGQ6KGlkKWNoaWxkOwotLSAoTlNV
SW50ZWdlcilhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVDb3VudDooTlNTdHJpbmcgKilhdHRy
aWJ1dGU7Ci0tIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUFycmF5QXR0cmlidXRlVmFsdWVzOihO
U1N0cmluZyAqKWF0dHJpYnV0ZSBpbmRleDooTlNVSW50ZWdlcilpbmRleCBtYXhDb3VudDooTlNV
SW50ZWdlciltYXhDb3VudDsKLQotQGVuZAotCiBAaW1wbGVtZW50YXRpb24gV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIKIAogLSAoaWQpaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0OihB
Y2Nlc3NpYmlsaXR5T2JqZWN0KilheE9iamVjdApAQCAtMzcwLDE4ICs4OCw4IEBACiAgICAgcmV0
dXJuIHNlbGY7CiB9CiAKLS0gKHZvaWQpdW5yZWdpc3RlclVuaXF1ZUlkRm9yVUlFbGVtZW50Ci17
Ci0gICAgd2tVbnJlZ2lzdGVyVW5pcXVlSWRGb3JFbGVtZW50KHNlbGYpOwotfQotCiAtICh2b2lk
KWRldGFjaAogewotICAgIC8vIFNlbmQgdW5yZWdpc3RlclVuaXF1ZUlkRm9yVUlFbGVtZW50IHVu
Y29uZGl0aW9uYWxseSBiZWNhdXNlIGlmIGl0IGlzCi0gICAgLy8gZXZlciBhY2NpZGVudGFsbHkg
bm90IGRvbmUgKHZpYSBvdGhlciBidWdzIGluIG91ciBBWCBpbXBsZW1lbnRhdGlvbikgeW91Ci0g
ICAgLy8gZW5kIHVwIHdpdGggYSBjcmFzaCBsaWtlIDxyZGFyOi8vcHJvYmxlbS80MjczMTQ5Pi4g
IEl0IGlzIHNhZmUgYW5kIG5vdAotICAgIC8vIGV4cGVuc2l2ZSB0byBzZW5kIGV2ZW4gaWYgdGhl
IG9iamVjdCBpcyBub3QgcmVnaXN0ZXJlZC4KLSAgICBbc2VsZiB1bnJlZ2lzdGVyVW5pcXVlSWRG
b3JVSUVsZW1lbnRdOwogICAgIG1fb2JqZWN0ID0gMDsKIH0KIApAQCAtNDAxLDE1MzEgKzEwOSwx
NiBAQAogICAgIHJldHVybiBZRVM7CiB9CiAKLS0gKEFjY2Vzc2liaWxpdHlPYmplY3QqKWFjY2Vz
c2liaWxpdHlPYmplY3QKKy0gKGlkKWF0dGFjaG1lbnRWaWV3CiB7Ci0gICAgcmV0dXJuIG1fb2Jq
ZWN0OwotfQotCi0tIChOU1ZpZXcqKWF0dGFjaG1lbnRWaWV3Ci17Ci0gICAgQVNTRVJUKG1fb2Jq
ZWN0LT5pc0F0dGFjaG1lbnQoKSk7Ci0gICAgV2lkZ2V0KiB3aWRnZXQgPSBtX29iamVjdC0+d2lk
Z2V0Rm9yQXR0YWNobWVudFZpZXcoKTsKLSAgICBpZiAoIXdpZGdldCkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkRGVzY2VuZGFudCh3aWRn
ZXQtPnBsYXRmb3JtV2lkZ2V0KCkpOwotfQotCi0jcHJhZ21hIG1hcmsgU3lzdGVtSW50ZXJmYWNl
IHdyYXBwZXJzCi0KLXN0YXRpYyBpbmxpbmUgaWQgQ0ZBdXRvcmVsZWFzZUhlbHBlcihDRlR5cGVS
ZWYgb2JqKQotewotICAgIGlmIChvYmopCi0gICAgICAgIENGTWFrZUNvbGxlY3RhYmxlKG9iaik7
Ci0gICAgWyhpZClvYmogYXV0b3JlbGVhc2VdOwotICAgIHJldHVybiAoaWQpb2JqOwotfQotCi1z
dGF0aWMgaW5saW5lIEJPT0wgQVhPYmplY3RJc1RleHRNYXJrZXIoaWQgb2JqKQotewotICAgIHJl
dHVybiBvYmogIT0gbmlsICYmIENGR2V0VHlwZUlEKG9iaikgPT0gd2tHZXRBWFRleHRNYXJrZXJU
eXBlSUQoKTsgICAgCi19Ci0KLXN0YXRpYyBpbmxpbmUgQk9PTCBBWE9iamVjdElzVGV4dE1hcmtl
clJhbmdlKGlkIG9iaikKLXsKLSAgICByZXR1cm4gb2JqICE9IG5pbCAmJiBDRkdldFR5cGVJRChv
YmopID09IHdrR2V0QVhUZXh0TWFya2VyUmFuZ2VUeXBlSUQoKTsgICAgCi19Ci0KLXN0YXRpYyBp
ZCBBWFRleHRNYXJrZXJSYW5nZShpZCBzdGFydE1hcmtlciwgaWQgZW5kTWFya2VyKQotewotICAg
IEFTU0VSVChzdGFydE1hcmtlciAhPSBuaWwpOwotICAgIEFTU0VSVChlbmRNYXJrZXIgIT0gbmls
KTsKLSAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQoc3RhcnRNYXJrZXIpID09IHdrR2V0QVhUZXh0TWFy
a2VyVHlwZUlEKCkpOwotICAgIEFTU0VSVChDRkdldFR5cGVJRChlbmRNYXJrZXIpID09IHdrR2V0
QVhUZXh0TWFya2VyVHlwZUlEKCkpOwotICAgIHJldHVybiBDRkF1dG9yZWxlYXNlSGVscGVyKHdr
Q3JlYXRlQVhUZXh0TWFya2VyUmFuZ2UoKENGVHlwZVJlZilzdGFydE1hcmtlciwgKENGVHlwZVJl
ZillbmRNYXJrZXIpKTsKLX0KLQotc3RhdGljIGlkIEFYVGV4dE1hcmtlclJhbmdlU3RhcnQoaWQg
cmFuZ2UpCi17Ci0gICAgQVNTRVJUKHJhbmdlICE9IG5pbCk7Ci0gICAgQVNTRVJUKENGR2V0VHlw
ZUlEKHJhbmdlKSA9PSB3a0dldEFYVGV4dE1hcmtlclJhbmdlVHlwZUlEKCkpOwotICAgIHJldHVy
biBDRkF1dG9yZWxlYXNlSGVscGVyKHdrQ29weUFYVGV4dE1hcmtlclJhbmdlU3RhcnQocmFuZ2Up
KTsgICAgCi19Ci0KLXN0YXRpYyBpZCBBWFRleHRNYXJrZXJSYW5nZUVuZChpZCByYW5nZSkKLXsK
LSAgICBBU1NFUlQocmFuZ2UgIT0gbmlsKTsKLSAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQocmFuZ2Up
ID09IHdrR2V0QVhUZXh0TWFya2VyUmFuZ2VUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIENGQXV0b3Jl
bGVhc2VIZWxwZXIod2tDb3B5QVhUZXh0TWFya2VyUmFuZ2VFbmQocmFuZ2UpKTsgICAgCi19Ci0K
LSNwcmFnbWEgbWFyayBTZWFyY2ggaGVscGVycwotCi10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBB
Y2Nlc3NpYmlsaXR5U2VhcmNoS2V5PiBBY2Nlc3NpYmlsaXR5U2VhcmNoS2V5TWFwOwotCi1zdHJ1
Y3QgU2VhcmNoS2V5RW50cnkgewotICAgIFN0cmluZyBrZXk7Ci0gICAgQWNjZXNzaWJpbGl0eVNl
YXJjaEtleSB2YWx1ZTsKLX07Ci0KLXN0YXRpYyBBY2Nlc3NpYmlsaXR5U2VhcmNoS2V5TWFwKiBj
cmVhdGVBY2Nlc3NpYmlsaXR5U2VhcmNoS2V5TWFwKCkKLXsKLSAgICBjb25zdCBTZWFyY2hLZXlF
bnRyeSBzZWFyY2hLZXlzW10gPSB7Ci0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5QW55VHlwZVNl
YXJjaEtleSwgQW55VHlwZVNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUJs
b2NrcXVvdGVTYW1lTGV2ZWxTZWFyY2hLZXksIEJsb2NrcXVvdGVTYW1lTGV2ZWxTZWFyY2hLZXkg
fSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlCbG9ja3F1b3RlU2VhcmNoS2V5LCBCbG9ja3F1
b3RlU2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5Qm9sZEZvbnRTZWFyY2hL
ZXksIEJvbGRGb250U2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5QnV0dG9u
U2VhcmNoS2V5LCBCdXR0b25TZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlD
aGVja0JveFNlYXJjaEtleSwgQ2hlY2tCb3hTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vz
c2liaWxpdHlDb250cm9sU2VhcmNoS2V5LCBDb250cm9sU2VhcmNoS2V5IH0sCi0gICAgICAgIHsg
TlNBY2Nlc3NpYmlsaXR5RGlmZmVyZW50VHlwZVNlYXJjaEtleSwgRGlmZmVyZW50VHlwZVNlYXJj
aEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUZvbnRDaGFuZ2VTZWFyY2hLZXksIEZv
bnRDaGFuZ2VTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlGb250Q29sb3JD
aGFuZ2VTZWFyY2hLZXksIEZvbnRDb2xvckNoYW5nZVNlYXJjaEtleSB9LAotICAgICAgICB7IE5T
QWNjZXNzaWJpbGl0eUZyYW1lU2VhcmNoS2V5LCBGcmFtZVNlYXJjaEtleSB9LAotICAgICAgICB7
IE5TQWNjZXNzaWJpbGl0eUdyYXBoaWNTZWFyY2hLZXksIEdyYXBoaWNTZWFyY2hLZXkgfSwKLSAg
ICAgICAgeyBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWwxU2VhcmNoS2V5LCBIZWFkaW5nTGV2
ZWwxU2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsMlNl
YXJjaEtleSwgSGVhZGluZ0xldmVsMlNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJp
bGl0eUhlYWRpbmdMZXZlbDNTZWFyY2hLZXksIEhlYWRpbmdMZXZlbDNTZWFyY2hLZXkgfSwKLSAg
ICAgICAgeyBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWw0U2VhcmNoS2V5LCBIZWFkaW5nTGV2
ZWw0U2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsNVNl
YXJjaEtleSwgSGVhZGluZ0xldmVsNVNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJp
bGl0eUhlYWRpbmdMZXZlbDZTZWFyY2hLZXksIEhlYWRpbmdMZXZlbDZTZWFyY2hLZXkgfSwKLSAg
ICAgICAgeyBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nU2FtZUxldmVsU2VhcmNoS2V5LCBIZWFkaW5n
U2FtZUxldmVsU2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ1Nl
YXJjaEtleSwgSGVhZGluZ1NlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUhp
Z2hsaWdodGVkU2VhcmNoS2V5LCBIaWdobGlnaHRlZFNlYXJjaEtleSB9LAotICAgICAgICB7IE5T
QWNjZXNzaWJpbGl0eUl0YWxpY0ZvbnRTZWFyY2hLZXksIEl0YWxpY0ZvbnRTZWFyY2hLZXkgfSwK
LSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlMYW5kbWFya1NlYXJjaEtleSwgTGFuZG1hcmtTZWFy
Y2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlMaW5rU2VhcmNoS2V5LCBMaW5rU2Vh
cmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5TGlzdFNlYXJjaEtleSwgTGlzdFNl
YXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUxpdmVSZWdpb25TZWFyY2hLZXks
IExpdmVSZWdpb25TZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlNaXNzcGVs
bGVkV29yZFNlYXJjaEtleSwgTWlzc3BlbGxlZFdvcmRTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBO
U0FjY2Vzc2liaWxpdHlQbGFpblRleHRTZWFyY2hLZXksIFBsYWluVGV4dFNlYXJjaEtleSB9LAot
ICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eVJhZGlvR3JvdXBTZWFyY2hLZXksIFJhZGlvR3JvdXBT
ZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlTYW1lVHlwZVNlYXJjaEtleSwg
U2FtZVR5cGVTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlTdGF0aWNUZXh0
U2VhcmNoS2V5LCBTdGF0aWNUZXh0U2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmls
aXR5U3R5bGVDaGFuZ2VTZWFyY2hLZXksIFN0eWxlQ2hhbmdlU2VhcmNoS2V5IH0sCi0gICAgICAg
IHsgTlNBY2Nlc3NpYmlsaXR5VGFibGVTYW1lTGV2ZWxTZWFyY2hLZXksIFRhYmxlU2FtZUxldmVs
U2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5VGFibGVTZWFyY2hLZXksIFRh
YmxlU2VhcmNoS2V5IH0sCi0gICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5VGV4dEZpZWxkU2VhcmNo
S2V5LCBUZXh0RmllbGRTZWFyY2hLZXkgfSwKLSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlVbmRl
cmxpbmVTZWFyY2hLZXksIFVuZGVybGluZVNlYXJjaEtleSB9LAotICAgICAgICB7IE5TQWNjZXNz
aWJpbGl0eVVudmlzaXRlZExpbmtTZWFyY2hLZXksIFVudmlzaXRlZExpbmtTZWFyY2hLZXkgfSwK
LSAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlWaXNpdGVkTGlua1NlYXJjaEtleSwgVmlzaXRlZExp
bmtTZWFyY2hLZXkgfQotICAgIH07Ci0gICAgCi0gICAgQWNjZXNzaWJpbGl0eVNlYXJjaEtleU1h
cCogc2VhcmNoS2V5TWFwID0gbmV3IEFjY2Vzc2liaWxpdHlTZWFyY2hLZXlNYXA7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKHNlYXJjaEtleXMpOyBpKyspCi0g
ICAgICAgIHNlYXJjaEtleU1hcC0+c2V0KHNlYXJjaEtleXNbaV0ua2V5LCBzZWFyY2hLZXlzW2ld
LnZhbHVlKTsKLSAgICAKLSAgICByZXR1cm4gc2VhcmNoS2V5TWFwOwotfQotCi1zdGF0aWMgQWNj
ZXNzaWJpbGl0eVNlYXJjaEtleSBhY2Nlc3NpYmlsaXR5U2VhcmNoS2V5Rm9yU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIEFueVR5cGVTZWFyY2hLZXk7Ci0gICAgCi0gICAgc3RhdGljIGNvbnN0IEFjY2Vzc2liaWxp
dHlTZWFyY2hLZXlNYXAqIHNlYXJjaEtleU1hcCA9IGNyZWF0ZUFjY2Vzc2liaWxpdHlTZWFyY2hL
ZXlNYXAoKTsKLSAgICAKLSAgICBBY2Nlc3NpYmlsaXR5U2VhcmNoS2V5IHNlYXJjaEtleSA9IHNl
YXJjaEtleU1hcC0+Z2V0KHZhbHVlKTsKLSAgICAKLSAgICByZXR1cm4gc2VhcmNoS2V5ID8gc2Vh
cmNoS2V5IDogQW55VHlwZVNlYXJjaEtleTsKLX0KLQotI3ByYWdtYSBtYXJrIFRleHQgTWFya2Vy
IGhlbHBlcnMKLQotc3RhdGljIGlkIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24oQVhPYmpl
Y3RDYWNoZSogY2FjaGUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykKLXsKLSAg
ICBBU1NFUlQoY2FjaGUpOwotICAgIAotICAgIFRleHRNYXJrZXJEYXRhIHRleHRNYXJrZXJEYXRh
OwotICAgIGNhY2hlLT50ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbih0ZXh0TWFya2Vy
RGF0YSwgdmlzaWJsZVBvcyk7Ci0gICAgaWYgKCF0ZXh0TWFya2VyRGF0YS5heElEKQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIAotICAgIHJldHVybiBDRkF1dG9yZWxlYXNlSGVscGVyKHdrQ3Jl
YXRlQVhUZXh0TWFya2VyKCZ0ZXh0TWFya2VyRGF0YSwgc2l6ZW9mKHRleHRNYXJrZXJEYXRhKSkp
OwotfQotCi0tIChpZCl0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOihjb25zdCBWaXNpYmxl
UG9zaXRpb24gJil2aXNpYmxlUG9zCi17Ci0gICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxl
UG9zaXRpb24obV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdmlzaWJsZVBvcyk7Ci19Ci0KLXN0
YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihBWE9iamVj
dENhY2hlKiBjYWNoZSwgQ0ZUeXBlUmVmIHRleHRNYXJrZXIpCi17Ci0gICAgQVNTRVJUKGNhY2hl
KTsKLQotICAgIGlmICghdGV4dE1hcmtlcikKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bigpOwotICAgIFRleHRNYXJrZXJEYXRhIHRleHRNYXJrZXJEYXRhOwotICAgIGlmICghd2tHZXRC
eXRlc0Zyb21BWFRleHRNYXJrZXIodGV4dE1hcmtlciwgJnRleHRNYXJrZXJEYXRhLCBzaXplb2Yo
dGV4dE1hcmtlckRhdGEpKSkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwotICAg
IAotICAgIHJldHVybiBjYWNoZS0+dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRhdGEodGV4
dE1hcmtlckRhdGEpOwotfQotCi0tIChWaXNpYmxlUG9zaXRpb24pdmlzaWJsZVBvc2l0aW9uRm9y
VGV4dE1hcmtlcjooaWQpdGV4dE1hcmtlcgotewotICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25G
b3JUZXh0TWFya2VyKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXIpOwotfQot
Ci1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFy
a2VyUmFuZ2UoQVhPYmplY3RDYWNoZSAqY2FjaGUsIGlkIHRleHRNYXJrZXJSYW5nZSkKLXsKLSAg
ICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihjYWNoZSwgQVhUZXh0TWFya2Vy
UmFuZ2VTdGFydCh0ZXh0TWFya2VyUmFuZ2UpKTsKLX0KLQotc3RhdGljIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlUG9zaXRpb25Gb3JFbmRPZlRleHRNYXJrZXJSYW5nZShBWE9iamVjdENhY2hlICpj
YWNoZSwgaWQgdGV4dE1hcmtlclJhbmdlKQotewotICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25G
b3JUZXh0TWFya2VyKGNhY2hlLCBBWFRleHRNYXJrZXJSYW5nZUVuZCh0ZXh0TWFya2VyUmFuZ2Up
KTsKLX0KLQotc3RhdGljIGlkIHRleHRNYXJrZXJSYW5nZUZyb21NYXJrZXJzKGlkIHRleHRNYXJr
ZXIxLCBpZCB0ZXh0TWFya2VyMikKLXsKLSAgICBpZiAoIXRleHRNYXJrZXIxIHx8ICF0ZXh0TWFy
a2VyMikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgCi0gICAgcmV0dXJuIEFYVGV4dE1h
cmtlclJhbmdlKHRleHRNYXJrZXIxLCB0ZXh0TWFya2VyMik7Ci19Ci0KLS8vIFdoZW4gbW9kaWZ5
aW5nIGF0dHJpYnV0ZWQgc3RyaW5ncywgdGhlIHJhbmdlIGNhbiBjb21lIGZyb20gYSBzb3VyY2Ug
d2hpY2ggbWF5IHByb3ZpZGUgZmF1bHR5IGluZm9ybWF0aW9uIChlLmcuIHRoZSBzcGVsbCBjaGVj
a2VyKS4KLS8vIFRvIHByb3RlY3QgYWdhaW5zdCBzdWNoIGNhc2VzIHRoZSByYW5nZSBzaG91bGQg
YmUgdmFsaWRhdGVkIGJlZm9yZSBhZGRpbmcgb3IgcmVtb3ZpbmcgYXR0cmlidXRlcy4KLXN0YXRp
YyBCT09MIEFYQXR0cmlidXRlZFN0cmluZ1JhbmdlSXNWYWxpZChOU0F0dHJpYnV0ZWRTdHJpbmcq
IGF0dHJTdHJpbmcsIE5TUmFuZ2UgcmFuZ2UpCi17Ci0gICAgcmV0dXJuIChyYW5nZS5sb2NhdGlv
biA8IFthdHRyU3RyaW5nIGxlbmd0aF0gJiYgTlNNYXhSYW5nZShyYW5nZSkgPD0gW2F0dHJTdHJp
bmcgbGVuZ3RoXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChO
U011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOU1N0cmluZyogYXR0cmlidXRl
LCBOU0ZvbnQqIGZvbnQsIE5TUmFuZ2UgcmFuZ2UpCi17Ci0gICAgaWYgKCFBWEF0dHJpYnV0ZWRT
dHJpbmdSYW5nZUlzVmFsaWQoYXR0clN0cmluZywgcmFuZ2UpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgaWYgKGZvbnQpIHsKLSAgICAgICAgTlNEaWN0aW9uYXJ5KiBkaWN0ID0gW05TRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgotICAgICAgICAgICAgW2ZvbnQg
Zm9udE5hbWVdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIE5TQWNjZXNzaWJpbGl0eUZv
bnROYW1lS2V5LAotICAgICAgICAgICAgW2ZvbnQgZmFtaWx5TmFtZV0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIE5TQWNjZXNzaWJpbGl0eUZvbnRGYW1pbHlLZXksCi0gICAgICAgICAgICBb
Zm9udCBkaXNwbGF5TmFtZV0gICAgICAgICAgICAgICAgICAgICAgICAgICwgTlNBY2Nlc3NpYmls
aXR5VmlzaWJsZU5hbWVLZXksCi0gICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0
Oltmb250IHBvaW50U2l6ZV1dICwgTlNBY2Nlc3NpYmlsaXR5Rm9udFNpemVLZXksCi0gICAgICAg
IG5pbF07Ci0KLSAgICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0cmlidXRlOmF0dHJpYnV0ZSB2YWx1
ZTpkaWN0IHJhbmdlOnJhbmdlXTsKLSAgICB9IGVsc2UKLSAgICAgICAgW2F0dHJTdHJpbmcgcmVt
b3ZlQXR0cmlidXRlOmF0dHJpYnV0ZSByYW5nZTpyYW5nZV07Ci0gICAgCi19Ci0KLXN0YXRpYyBD
R0NvbG9yUmVmIENyZWF0ZUNHQ29sb3JJZkRpZmZlcmVudChOU0NvbG9yKiBuc0NvbG9yLCBDR0Nv
bG9yUmVmIGV4aXN0aW5nQ29sb3IpCi17Ci0gICAgLy8gZ2V0IGNvbG9yIGluZm9ybWF0aW9uIGFz
c3VtaW5nIE5TRGV2aWNlUkdCQ29sb3JTcGFjZSAKLSAgICBOU0NvbG9yKiByZ2JDb2xvciA9IFtu
c0NvbG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdOwot
ICAgIGlmIChyZ2JDb2xvciA9PSBuaWwpCi0gICAgICAgIHJnYkNvbG9yID0gW05TQ29sb3IgYmxh
Y2tDb2xvcl07Ci0gICAgQ0dGbG9hdCBjb21wb25lbnRzWzRdOwotICAgIFtyZ2JDb2xvciBnZXRS
ZWQ6JmNvbXBvbmVudHNbMF0gZ3JlZW46JmNvbXBvbmVudHNbMV0gYmx1ZTomY29tcG9uZW50c1sy
XSBhbHBoYTomY29tcG9uZW50c1szXV07Ci0gICAgCi0gICAgLy8gY3JlYXRlIGEgbmV3IENHQ29s
b3JSZWYgdG8gcmV0dXJuCi0gICAgQ0dDb2xvclNwYWNlUmVmIGNnQ29sb3JTcGFjZSA9IENHQ29s
b3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwotICAgIENHQ29sb3JSZWYgY2dDb2xvciA9IENHQ29s
b3JDcmVhdGUoY2dDb2xvclNwYWNlLCBjb21wb25lbnRzKTsKLSAgICBDR0NvbG9yU3BhY2VSZWxl
YXNlKGNnQ29sb3JTcGFjZSk7Ci0gICAgCi0gICAgLy8gY2hlY2sgZm9yIG1hdGNoIHdpdGggZXhp
c3RpbmcgY29sb3IKLSAgICBpZiAoZXhpc3RpbmdDb2xvciAmJiBDR0NvbG9yRXF1YWxUb0NvbG9y
KGNnQ29sb3IsIGV4aXN0aW5nQ29sb3IpKSB7Ci0gICAgICAgIENHQ29sb3JSZWxlYXNlKGNnQ29s
b3IpOwotICAgICAgICBjZ0NvbG9yID0gMDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNnQ29s
b3I7Ci19Ci0KLXN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoTlNNdXRhYmxl
QXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywgTlNTdHJpbmcqIGF0dHJpYnV0ZSwgTlNDb2xv
ciogY29sb3IsIE5TUmFuZ2UgcmFuZ2UpCi17Ci0gICAgaWYgKCFBWEF0dHJpYnV0ZWRTdHJpbmdS
YW5nZUlzVmFsaWQoYXR0clN0cmluZywgcmFuZ2UpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoY29sb3IpIHsKLSAgICAgICAgQ0dDb2xvclJlZiBleGlzdGluZ0NvbG9yID0gKENHQ29sb3JS
ZWYpIFthdHRyU3RyaW5nIGF0dHJpYnV0ZTphdHRyaWJ1dGUgYXRJbmRleDpyYW5nZS5sb2NhdGlv
biBlZmZlY3RpdmVSYW5nZTpuaWxdOwotICAgICAgICBDR0NvbG9yUmVmIGNnQ29sb3IgPSBDcmVh
dGVDR0NvbG9ySWZEaWZmZXJlbnQoY29sb3IsIGV4aXN0aW5nQ29sb3IpOwotICAgICAgICBpZiAo
Y2dDb2xvcikgewotICAgICAgICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0cmlidXRlOmF0dHJpYnV0
ZSB2YWx1ZTooaWQpY2dDb2xvciByYW5nZTpyYW5nZV07Ci0gICAgICAgICAgICBDR0NvbG9yUmVs
ZWFzZShjZ0NvbG9yKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBbYXR0clN0cmlu
ZyByZW1vdmVBdHRyaWJ1dGU6YXR0cmlidXRlIHJhbmdlOnJhbmdlXTsKLX0KLQotc3RhdGljIHZv
aWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1iZXIoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyog
YXR0clN0cmluZywgTlNTdHJpbmcqIGF0dHJpYnV0ZSwgTlNOdW1iZXIqIG51bWJlciwgTlNSYW5n
ZSByYW5nZSkKLXsKLSAgICBpZiAoIUFYQXR0cmlidXRlZFN0cmluZ1JhbmdlSXNWYWxpZChhdHRy
U3RyaW5nLCByYW5nZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChudW1iZXIpCi0gICAg
ICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTphdHRyaWJ1dGUgdmFsdWU6bnVtYmVyIHJhbmdl
OnJhbmdlXTsKLSAgICBlbHNlCi0gICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTph
dHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOwotfQotCi1zdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmlu
Z1NldFN0eWxlKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIE5TUmFuZ2UgcmFuZ2UpCi17Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0KLSAgICAvLyBzZXQgYmFzaWMgZm9udCBpbmZvCi0gICAg
QVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvbnRU
ZXh0QXR0cmlidXRlLCBzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250KCktPmdldE5TRm9udCgpLCBy
YW5nZSk7Ci0KLSAgICAvLyBzZXQgYmFzaWMgY29sb3JzCi0gICAgQVhBdHRyaWJ1dGVTdHJpbmdT
ZXRDb2xvcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb3JlZ3JvdW5kQ29sb3JUZXh0QXR0
cmlidXRlLCBuc0NvbG9yKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlD
b2xvcikpLCByYW5nZSk7Ci0gICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRDb2xvcihhdHRyU3RyaW5n
LCBOU0FjY2Vzc2liaWxpdHlCYWNrZ3JvdW5kQ29sb3JUZXh0QXR0cmlidXRlLCBuc0NvbG9yKHN0
eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKSwg
cmFuZ2UpOwotCi0gICAgLy8gc2V0IHN1cGVyL3N1YiBzY3JpcHRpbmcKLSAgICBFVmVydGljYWxB
bGlnbiBhbGlnbm1lbnQgPSBzdHlsZS0+dmVydGljYWxBbGlnbigpOwotICAgIGlmIChhbGlnbm1l
bnQgPT0gU1VCKQotICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5n
LCBOU0FjY2Vzc2liaWxpdHlTdXBlcnNjcmlwdFRleHRBdHRyaWJ1dGUsIFtOU051bWJlciBudW1i
ZXJXaXRoSW50OigtMSldLCByYW5nZSk7Ci0gICAgZWxzZSBpZiAoYWxpZ25tZW50ID09IFNVUEVS
KQotICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vz
c2liaWxpdHlTdXBlcnNjcmlwdFRleHRBdHRyaWJ1dGUsIFtOU051bWJlciBudW1iZXJXaXRoSW50
OjFdLCByYW5nZSk7Ci0gICAgZWxzZQotICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1
dGU6TlNBY2Nlc3NpYmlsaXR5U3VwZXJzY3JpcHRUZXh0QXR0cmlidXRlIHJhbmdlOnJhbmdlXTsK
LSAgICAKLSAgICAvLyBzZXQgc2hhZG93Ci0gICAgaWYgKHN0eWxlLT50ZXh0U2hhZG93KCkpCi0g
ICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJp
bGl0eVNoYWRvd1RleHRBdHRyaWJ1dGUsIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBy
YW5nZSk7Ci0gICAgZWxzZQotICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6TlNB
Y2Nlc3NpYmlsaXR5U2hhZG93VGV4dEF0dHJpYnV0ZSByYW5nZTpyYW5nZV07Ci0gICAgCi0gICAg
Ly8gc2V0IHVuZGVybGluZSBhbmQgc3RyaWtldGhyb3VnaAotICAgIGludCBkZWNvciA9IHN0eWxl
LT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwotICAgIGlmICgoZGVjb3IgJiBVTkRFUkxJTkUp
ID09IDApIHsKLSAgICAgICAgW2F0dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRlOk5TQWNjZXNzaWJp
bGl0eVVuZGVybGluZVRleHRBdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOwotICAgICAgICBbYXR0clN0
cmluZyByZW1vdmVBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5VW5kZXJsaW5lQ29sb3JUZXh0QXR0
cmlidXRlIHJhbmdlOnJhbmdlXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKChkZWNvciAmIExJTkVf
VEhST1VHSCkgPT0gMCkgewotICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6TlNB
Y2Nlc3NpYmlsaXR5U3RyaWtldGhyb3VnaFRleHRBdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOwotICAg
ICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5U3RyaWtldGhy
b3VnaENvbG9yVGV4dEF0dHJpYnV0ZSByYW5nZTpyYW5nZV07Ci0gICAgfQotCi0gICAgaWYgKChk
ZWNvciAmIChVTkRFUkxJTkUgfCBMSU5FX1RIUk9VR0gpKSAhPSAwKSB7Ci0gICAgICAgIC8vIGZp
bmQgY29sb3JzIHVzaW5nIHF1aXJrIG1vZGUgYXBwcm9hY2ggKHN0cmljdCBtb2RlIHdvdWxkIHVz
ZSBjdXJyZW50Ci0gICAgICAgIC8vIGNvbG9yIGZvciBhbGwgYnV0IHRoZSByb290IGxpbmUgYm94
LCB3aGljaCB3b3VsZCB1c2UgZ2V0VGV4dERlY29yYXRpb25Db2xvcnMpCi0gICAgICAgIENvbG9y
IHVuZGVybGluZSwgb3ZlcmxpbmUsIGxpbmV0aHJvdWdoOwotICAgICAgICByZW5kZXJlci0+Z2V0
VGV4dERlY29yYXRpb25Db2xvcnMoZGVjb3IsIHVuZGVybGluZSwgb3ZlcmxpbmUsIGxpbmV0aHJv
dWdoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICgoZGVjb3IgJiBVTkRFUkxJTkUpICE9IDApIHsK
LSAgICAgICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKGF0dHJTdHJpbmcsIE5TQWNj
ZXNzaWJpbGl0eVVuZGVybGluZVRleHRBdHRyaWJ1dGUsIFtOU051bWJlciBudW1iZXJXaXRoQm9v
bDpZRVNdLCByYW5nZSk7Ci0gICAgICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKGF0
dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eVVuZGVybGluZUNvbG9yVGV4dEF0dHJpYnV0ZSwgbnND
b2xvcih1bmRlcmxpbmUpLCByYW5nZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKGRlY29y
ICYgTElORV9USFJPVUdIKSAhPSAwKSB7Ci0gICAgICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1Nl
dE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlTdHJpa2V0aHJvdWdoVGV4dEF0dHJp
YnV0ZSwgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIHJhbmdlKTsKLSAgICAgICAgICAg
IEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5U3Ry
aWtldGhyb3VnaENvbG9yVGV4dEF0dHJpYnV0ZSwgbnNDb2xvcihsaW5ldGhyb3VnaCksIHJhbmdl
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBJbmRpY2F0ZSBiYWNrZ3JvdW5kIGhp
Z2hsaWdodGluZy4KLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByZW5kZXJlci0+bm9kZSgpOyBub2Rl
OyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChub2RlLT5oYXNUYWdO
YW1lKG1hcmtUYWcpKQotICAgICAgICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1iZXIoYXR0
clN0cmluZywgQCJBWEhpZ2hsaWdodCIsIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBy
YW5nZSk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldEJsb2Nr
cXVvdGVMZXZlbChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBOU1JhbmdlIHJhbmdlKQotewotICAgIGlmICghQVhBdHRyaWJ1dGVk
U3RyaW5nUmFuZ2VJc1ZhbGlkKGF0dHJTdHJpbmcsIHJhbmdlKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gcmVuZGVyZXItPmRvY3VtZW50KCktPmF4
T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocmVuZGVyZXIpOwotICAgIGludCBxdW90ZUxldmVs
ID0gb2JqLT5ibG9ja3F1b3RlTGV2ZWwoKTsKLSAgICAKLSAgICBpZiAocXVvdGVMZXZlbCkKLSAg
ICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eUJsb2NrUXVvdGVM
ZXZlbEF0dHJpYnV0ZSB2YWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpxdW90ZUxldmVsXSBy
YW5nZTpyYW5nZV07Ci0gICAgZWxzZQotICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1
dGU6TlNBY2Nlc3NpYmlsaXR5QmxvY2tRdW90ZUxldmVsQXR0cmlidXRlIHJhbmdlOnJhbmdlXTsK
LX0KLQotc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTcGVsbGluZyhOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOb2RlKiBub2RlLCBjb25zdCBVQ2hhciogY2hh
cnMsIGludCBjaGFyTGVuZ3RoLCBOU1JhbmdlIHJhbmdlKQotewotICAgIGlmICh1bmlmaWVkVGV4
dENoZWNrZXJFbmFibGVkKG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpKSB7Ci0gICAgICAgIC8v
IENoZWNrIHRoZSBzcGVsbGluZyBkaXJlY3RseSBzaW5jZSBkb2N1bWVudC0+bWFya2Vyc0Zvck5v
ZGUoKSBkb2VzIG5vdCBzdG9yZSB0aGUgbWlzc3BlbGxlZCBtYXJraW5nIHdoZW4gdGhlIGN1cnNv
ciBpcyBpbiBhIHdvcmQuCi0gICAgICAgIFRleHRDaGVja2VyQ2xpZW50KiBjaGVja2VyID0gbm9k
ZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnRleHRDaGVja2VyKCk7Ci0KLSAgICAg
ICAgLy8gY2hlY2tUZXh0T2ZQYXJhZ3JhcGggaXMgdGhlIG9ubHkgc3BlbGxpbmcvZ3JhbW1hciBj
aGVja2VyIGltcGxlbWVudGVkIGluIFdLMSBhbmQgV0syCi0gICAgICAgIFZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNoZWNr
ZXIsIGNoYXJzLCBjaGFyTGVuZ3RoLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcsIHJlc3VsdHMp
OwotCi0gICAgICAgIHNpemVfdCBzaXplID0gcmVzdWx0cy5zaXplKCk7Ci0gICAgICAgIE5TTnVt
YmVyKiB0cnVlVmFsdWUgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgY29uc3Qg
VGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQgPSByZXN1bHRzW2ldOwotICAgICAgICAgICAgQVhB
dHRyaWJ1dGVTdHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5TWlzc3Bl
bGxlZFRleHRBdHRyaWJ1dGUsIHRydWVWYWx1ZSwgTlNNYWtlUmFuZ2UocmVzdWx0LmxvY2F0aW9u
ICsgcmFuZ2UubG9jYXRpb24sIHJlc3VsdC5sZW5ndGgpKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGN1cnJlbnRQb3NpdGlvbiA9IDA7Ci0gICAgd2hpbGUg
KGNoYXJMZW5ndGggPiAwKSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyRGF0YSA9IGNoYXJz
ICsgY3VycmVudFBvc2l0aW9uOwotICAgICAgICBUZXh0Q2hlY2tlckNsaWVudCogY2hlY2tlciA9
IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT50ZXh0Q2hlY2tlcigpOwotICAg
ICAgICAKLSAgICAgICAgaW50IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKLSAgICAgICAgaW50
IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKLSAgICAgICAgY2hlY2tlci0+Y2hlY2tTcGVsbGluZ09m
U3RyaW5nKGNoYXJEYXRhLCBjaGFyTGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3Nw
ZWxsaW5nTGVuZ3RoKTsKLSAgICAgICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24gPT0gLTEgfHwg
IW1pc3NwZWxsaW5nTGVuZ3RoKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAg
ICBOU1JhbmdlIHNwZWxsUmFuZ2UgPSBOU01ha2VSYW5nZShyYW5nZS5sb2NhdGlvbiArIGN1cnJl
bnRQb3NpdGlvbiArIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAg
ICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgTlNBY2Nlc3NpYmls
aXR5TWlzc3BlbGxlZFRleHRBdHRyaWJ1dGUsIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNd
LCBzcGVsbFJhbmdlKTsKLSAgICAgICAgY2hhckxlbmd0aCAtPSAobWlzc3BlbGxpbmdMb2NhdGlv
biArIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAgICAgICAgY3VycmVudFBvc2l0aW9uICs9IChtaXNz
cGVsbGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGgpOwotICAgIH0KLX0KLQotc3RhdGlj
IHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRIZWFkaW5nTGV2ZWwoTlNNdXRhYmxlQXR0cmlidXRl
ZFN0cmluZyogYXR0clN0cmluZywgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgTlNSYW5nZSByYW5n
ZSkKLXsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYg
KCFBWEF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzVmFsaWQoYXR0clN0cmluZywgcmFuZ2UpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gU29tZXRpbWVzIHRoZXJlIGFyZSBvYmplY3RzIGJl
dHdlZW4gdGhlIHRleHQgYW5kIHRoZSBoZWFkaW5nLiAKLSAgICAvLyBJbiB0aG9zZSBjYXNlcyB0
aGUgcGFyZW50IGhpZXJhcmNoeSBzaG91bGQgYmUgcXVlcmllZCB0byBzZWUgaWYgdGhlcmUgaXMg
YSBoZWFkaW5nIGxldmVsLgotICAgIGludCBwYXJlbnRIZWFkaW5nTGV2ZWwgPSAwOwotICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudE9iamVjdCA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLT5h
eE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlcmVyLT5wYXJlbnQoKSk7Ci0gICAgZm9y
ICg7IHBhcmVudE9iamVjdDsgcGFyZW50T2JqZWN0ID0gcGFyZW50T2JqZWN0LT5wYXJlbnRPYmpl
Y3QoKSkgewotICAgICAgICBwYXJlbnRIZWFkaW5nTGV2ZWwgPSBwYXJlbnRPYmplY3QtPmhlYWRp
bmdMZXZlbCgpOwotICAgICAgICBpZiAocGFyZW50SGVhZGluZ0xldmVsKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIAotICAgIGlmIChwYXJlbnRIZWFkaW5nTGV2ZWwpCi0gICAgICAg
IFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTpAIkFYSGVhZGluZ0xldmVsIiB2YWx1ZTpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEludDpwYXJlbnRIZWFkaW5nTGV2ZWxdIHJhbmdlOnJhbmdlXTsKLSAgICBl
bHNlCi0gICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTpAIkFYSGVhZGluZ0xldmVs
IiByYW5nZTpyYW5nZV07Ci19Ci0KLXN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0RWxl
bWVudChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOU1N0cmluZyogYXR0
cmlidXRlLCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIE5TUmFuZ2UgcmFuZ2UpCi17Ci0g
ICAgaWYgKCFBWEF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzVmFsaWQoYXR0clN0cmluZywgcmFuZ2Up
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAob2JqZWN0ICYmIG9iamVjdC0+aXNBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKLSAgICAgICAgLy8gbWFrZSBhIHNlcmlhbGl6YWJsZSBB
WCBvYmplY3QKLSAgICAgICAgCi0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Kj4ob2JqZWN0KS0+cmVuZGVyZXIoKTsK
LSAgICAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0g
ICAgICAgIERvY3VtZW50KiBkb2MgPSByZW5kZXJlci0+ZG9jdW1lbnQoKTsKLSAgICAgICAgaWYg
KCFkb2MpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBBWE9iamVjdENh
Y2hlKiBjYWNoZSA9IGRvYy0+YXhPYmplY3RDYWNoZSgpOwotICAgICAgICBpZiAoIWNhY2hlKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEFYVUlFbGVtZW50UmVmIGF4RWxlbWVudCA9
IHdrQ3JlYXRlQVhVSUVsZW1lbnRSZWYob2JqZWN0LT53cmFwcGVyKCkpOwotICAgICAgICBpZiAo
YXhFbGVtZW50KSB7Ci0gICAgICAgICAgICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6YXR0cmli
dXRlIHZhbHVlOihpZClheEVsZW1lbnQgcmFuZ2U6cmFuZ2VdOwotICAgICAgICAgICAgQ0ZSZWxl
YXNlKGF4RWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgW2F0dHJTdHJp
bmcgcmVtb3ZlQXR0cmlidXRlOmF0dHJpYnV0ZSByYW5nZTpyYW5nZV07Ci19Ci0KLXN0YXRpYyB2
b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmlu
ZyogYXR0clN0cmluZywgTm9kZSogbm9kZSwgY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuZ3Ro
KQotewotICAgIC8vIHNraXAgaW52aXNpYmxlIHRleHQKLSAgICBpZiAoIW5vZGUtPnJlbmRlcmVy
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIGVhc2llciB0byBjYWxjdWxhdGUgdGhlIHJh
bmdlIGJlZm9yZSBhcHBlbmRpbmcgdGhlIHN0cmluZwotICAgIE5TUmFuZ2UgYXR0clN0cmluZ1Jh
bmdlID0gTlNNYWtlUmFuZ2UoW2F0dHJTdHJpbmcgbGVuZ3RoXSwgbGVuZ3RoKTsKLSAgICAKLSAg
ICAvLyBhcHBlbmQgdGhlIHN0cmluZyBmcm9tIHRoaXMgbm9kZQotICAgIFtbYXR0clN0cmluZyBt
dXRhYmxlU3RyaW5nXSBhcHBlbmRTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJz
OmNoYXJzIGxlbmd0aDpsZW5ndGhdXTsKLQotICAgIC8vIGFkZCBuZXcgYXR0cmlidXRlcyBhbmQg
cmVtb3ZlIGlycmVsZXZhbnQgaW5oZXJpdGVkIG9uZXMKLSAgICAvLyBOT1RFOiBjb2xvciBhdHRy
aWJ1dGVzIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBiZWNhdXNlIC1bTlNNdXRhYmxlQXR0cmlidXRl
ZFN0cmluZyBhZGRBdHRyaWJ1dGU6IHZhbHVlOiByYW5nZTpdIGRvZXMgbm90IG1lcmdlCi0gICAg
Ly8gaWRlbnRpY2FsIGNvbG9ycy4gIFdvcmthcm91bmQgaXMgdG8gbm90IHJlcGxhY2UgYW4gZXhp
c3RpbmcgY29sb3IgYXR0cmlidXRlIGlmIGl0IG1hdGNoZXMgd2hhdCB3ZSBhcmUgYWRkaW5nLiAg
VGhpcyBhbHNvIG1lYW5zCi0gICAgLy8gd2UgY2Fubm90IGp1c3QgcHJlLXJlbW92ZSBhbGwgaW5o
ZXJpdGVkIGF0dHJpYnV0ZXMgb24gdGhlIGFwcGVuZGVkIHN0cmluZywgc28gd2UgaGF2ZSB0byBy
ZW1vdmUgdGhlIGlycmVsZXZhbnQgb25lcyBpbmRpdmlkdWFsbHkuCi0KLSAgICAvLyByZW1vdmUg
aW5oZXJpdGVkIGF0dGFjaG1lbnQgZnJvbSBwcmlvciBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRS
ZXBsYWNlZAotICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlB
dHRhY2htZW50VGV4dEF0dHJpYnV0ZSByYW5nZTphdHRyU3RyaW5nUmFuZ2VdOwotICAgIFthdHRy
U3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlNaXNzcGVsbGVkVGV4dEF0dHJp
YnV0ZSByYW5nZTphdHRyU3RyaW5nUmFuZ2VdOwotICAgIAotICAgIC8vIHNldCBuZXcgYXR0cmli
dXRlcwotICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUoYXR0clN0cmluZywgbm9kZS0+cmVu
ZGVyZXIoKSwgYXR0clN0cmluZ1JhbmdlKTsKLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEhlYWRp
bmdMZXZlbChhdHRyU3RyaW5nLCBub2RlLT5yZW5kZXJlcigpLCBhdHRyU3RyaW5nUmFuZ2UpOwot
ICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0QmxvY2txdW90ZUxldmVsKGF0dHJTdHJpbmcsIG5vZGUt
PnJlbmRlcmVyKCksIGF0dHJTdHJpbmdSYW5nZSk7Ci0gICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRF
bGVtZW50KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUxpbmtUZXh0QXR0cmlidXRlLCBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjphbmNob3JFbGVtZW50Rm9yTm9kZShub2RlKSwgYXR0clN0cmluZ1Jh
bmdlKTsKLSAgICAKLSAgICAvLyBkbyBzcGVsbGluZyBsYXN0IGJlY2F1c2UgaXQgdGVuZHMgdG8g
YnJlYWsgdXAgdGhlIHJhbmdlCi0gICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTcGVsbGluZyhhdHRy
U3RyaW5nLCBub2RlLCBjaGFycywgbGVuZ3RoLCBhdHRyU3RyaW5nUmFuZ2UpOwotfQotCi1zdGF0
aWMgTlNTdHJpbmcqIG5zU3RyaW5nRm9yUmVwbGFjZWROb2RlKE5vZGUqIHJlcGxhY2VkTm9kZSkK
LXsKLSAgICAvLyB3ZSBzaG91bGQgYWx3YXlzIGJlIGdpdmVuIGEgcmVuZGVyZWQgbm9kZSBhbmQg
YSByZXBsYWNlZCBub2RlLCBidXQgYmUgc2FmZQotICAgIC8vIHJlcGxhY2VkIG5vZGVzIGFyZSBl
aXRoZXIgYXR0YWNobWVudHMgKHdpZGdldHMpIG9yIGltYWdlcwotICAgIGlmICghcmVwbGFjZWRO
b2RlIHx8ICFyZXBsYWNlZE5vZGUtPnJlbmRlcmVyKCkgfHwgIXJlcGxhY2VkTm9kZS0+cmVuZGVy
ZXIoKS0+aXNSZXBsYWNlZCgpIHx8IHJlcGxhY2VkTm9kZS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gbmlsOwotICAgIH0KLQot
ICAgIC8vIGNyZWF0ZSBhbiBBWCBvYmplY3QsIGJ1dCBza2lwIGl0IGlmIGl0IGlzIG5vdCBzdXBw
b3NlZCB0byBiZSBzZWVuCi0gICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9iaiA9IHJl
cGxhY2VkTm9kZS0+cmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5nZXRP
ckNyZWF0ZShyZXBsYWNlZE5vZGUtPnJlbmRlcmVyKCkpOwotICAgIGlmIChvYmotPmFjY2Vzc2li
aWxpdHlJc0lnbm9yZWQoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICAvLyB1c2Ug
dGhlIGF0dGFjaG1lbnRDaGFyYWN0ZXIgdG8gcmVwcmVzZW50IHRoZSByZXBsYWNlZCBub2RlCi0g
ICAgY29uc3QgVW5pQ2hhciBhdHRhY2htZW50Q2hhciA9IE5TQXR0YWNobWVudENoYXJhY3RlcjsK
LSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOiZhdHRhY2htZW50Q2hh
ciBsZW5ndGg6MV07Ci19Ci0KLS0gKE5TQXR0cmlidXRlZFN0cmluZyopZG9BWEF0dHJpYnV0ZWRT
dHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6KGlkKXRleHRNYXJrZXJSYW5nZQotewotICAgIGlmICgh
bV9vYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgLy8gZXh0cmFjdCB0aGUg
c3RhcnQgYW5kIGVuZCBWaXNpYmxlUG9zaXRpb24KLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRW
aXNpYmxlUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JTdGFydE9mVGV4dE1hcmtlclJhbmdl
KG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXJSYW5nZSk7Ci0gICAgaWYgKHN0
YXJ0VmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAg
VmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvckVu
ZE9mVGV4dE1hcmtlclJhbmdlKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXJS
YW5nZSk7Ci0gICAgaWYgKGVuZFZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLQotICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdl
KHN0YXJ0VmlzaWJsZVBvc2l0aW9uLCBlbmRWaXNpYmxlUG9zaXRpb24pOwotICAgIC8vIGl0ZXJh
dGUgb3ZlciB0aGUgcmFuZ2UgdG8gYnVpbGQgdGhlIEFYIGF0dHJpYnV0ZWQgc3RyaW5nCi0gICAg
TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZyA9IFtbTlNNdXRhYmxlQXR0cmli
dXRlZFN0cmluZyBhbGxvY10gaW5pdF07Ci0gICAgVGV4dEl0ZXJhdG9yIGl0KG1ha2VSYW5nZShz
dGFydFZpc2libGVQb3NpdGlvbiwgZW5kVmlzaWJsZVBvc2l0aW9uKS5nZXQoKSk7Ci0gICAgd2hp
bGUgKCFpdC5hdEVuZCgpKSB7Ci0gICAgICAgIC8vIGxvY2F0ZSB0aGUgbm9kZSBhbmQgc3RhcnRp
bmcgb2Zmc2V0IGZvciB0aGlzIHJhbmdlCi0gICAgICAgIGludCBleGNlcHRpb24gPSAwOwotICAg
ICAgICBOb2RlKiBub2RlID0gaXQucmFuZ2UoKS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKTsK
LSAgICAgICAgQVNTRVJUKG5vZGUgPT0gaXQucmFuZ2UoKS0+ZW5kQ29udGFpbmVyKGV4Y2VwdGlv
bikpOwotICAgICAgICBpbnQgb2Zmc2V0ID0gaXQucmFuZ2UoKS0+c3RhcnRPZmZzZXQoZXhjZXB0
aW9uKTsKLQotICAgICAgICAvLyBub24temVybyBsZW5ndGggbWVhbnMgdGV4dHVhbCBub2RlLCB6
ZXJvIGxlbmd0aCBtZWFucyByZXBsYWNlZCBub2RlIChBS0EgImF0dGFjaG1lbnRzIiBpbiBBWCkK
LSAgICAgICAgaWYgKGl0Lmxlbmd0aCgpICE9IDApIHsKLSAgICAgICAgICAgIC8vIEFkZCB0aGUg
dGV4dCBvZiB0aGUgbGlzdCBtYXJrZXIgaXRlbSBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAgICBT
dHJpbmcgbGlzdE1hcmtlclRleHQgPSBtX29iamVjdC0+bGlzdE1hcmtlclRleHRGb3JOb2RlQW5k
UG9zaXRpb24obm9kZSwgVmlzaWJsZVBvc2l0aW9uKGl0LnJhbmdlKCktPnN0YXJ0UG9zaXRpb24o
KSkpOwotICAgICAgICAgICAgaWYgKCFsaXN0TWFya2VyVGV4dC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChhdHRyU3RyaW5nLCBub2RlLCBs
aXN0TWFya2VyVGV4dC5jaGFyYWN0ZXJzKCksIGxpc3RNYXJrZXJUZXh0Lmxlbmd0aCgpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChhdHRy
U3RyaW5nLCBub2RlLCBpdC5jaGFyYWN0ZXJzKCksIGl0Lmxlbmd0aCgpKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIE5vZGUqIHJlcGxhY2VkTm9kZSA9IG5vZGUtPmNoaWxkTm9kZShv
ZmZzZXQpOwotICAgICAgICAgICAgTlNTdHJpbmcgKmF0dGFjaG1lbnRTdHJpbmcgPSBuc1N0cmlu
Z0ZvclJlcGxhY2VkTm9kZShyZXBsYWNlZE5vZGUpOwotICAgICAgICAgICAgaWYgKGF0dGFjaG1l
bnRTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBOU1JhbmdlIGF0dHJTdHJpbmdSYW5nZSA9IE5T
TWFrZVJhbmdlKFthdHRyU3RyaW5nIGxlbmd0aF0sIFthdHRhY2htZW50U3RyaW5nIGxlbmd0aF0p
OwotCi0gICAgICAgICAgICAgICAgLy8gYXBwZW5kIHRoZSBwbGFjZWhvbGRlciBzdHJpbmcKLSAg
ICAgICAgICAgICAgICBbW2F0dHJTdHJpbmcgbXV0YWJsZVN0cmluZ10gYXBwZW5kU3RyaW5nOmF0
dGFjaG1lbnRTdHJpbmddOwotCi0gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGFsbCBpbmhlcml0
ZWQgYXR0cmlidXRlcwotICAgICAgICAgICAgICAgIFthdHRyU3RyaW5nIHNldEF0dHJpYnV0ZXM6
bmlsIHJhbmdlOmF0dHJTdHJpbmdSYW5nZV07Ci0KLSAgICAgICAgICAgICAgICAvLyBhZGQgdGhl
IGF0dGFjaG1lbnQgYXR0cmlidXRlCi0gICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogb2JqID0gcmVwbGFjZWROb2RlLT5yZW5kZXJlcigpLT5kb2N1bWVudCgpLT5heE9iamVjdENh
Y2hlKCktPmdldE9yQ3JlYXRlKHJlcGxhY2VkTm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAg
ICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRFbGVtZW50KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJp
bGl0eUF0dGFjaG1lbnRUZXh0QXR0cmlidXRlLCBvYmosIGF0dHJTdHJpbmdSYW5nZSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaXQuYWR2YW5jZSgpOwotICAgIH0KLQotICAg
IHJldHVybiBbYXR0clN0cmluZyBhdXRvcmVsZWFzZV07Ci19Ci0KLXN0YXRpYyBpZCB0ZXh0TWFy
a2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyhBWE9iamVjdENhY2hlICpjYWNoZSwgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24sIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbikKLXsK
LSAgICBpZCBzdGFydFRleHRNYXJrZXIgPSB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKGNh
Y2hlLCBzdGFydFBvc2l0aW9uKTsKLSAgICBpZCBlbmRUZXh0TWFya2VyID0gdGV4dE1hcmtlckZv
clZpc2libGVQb3NpdGlvbihjYWNoZSwgZW5kUG9zaXRpb24pOwotICAgIHJldHVybiB0ZXh0TWFy
a2VyUmFuZ2VGcm9tTWFya2VycyhzdGFydFRleHRNYXJrZXIsIGVuZFRleHRNYXJrZXIpOwotfQot
Ci0tIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczooVmlzaWJsZVBvc2l0
aW9uKXN0YXJ0UG9zaXRpb24gZW5kUG9zaXRpb246KFZpc2libGVQb3NpdGlvbillbmRQb3NpdGlv
bgotewotICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyhtX29i
amVjdC0+YXhPYmplY3RDYWNoZSgpLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7Ci19Ci0K
LS0gKE5TQXJyYXkqKWFjY2Vzc2liaWxpdHlBY3Rpb25OYW1lcwotewotICAgIGlmICghW3NlbGYg
dXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHN0
YXRpYyBOU0FycmF5KiBhY3Rpb25FbGVtZW50QWN0aW9ucyA9IFtbTlNBcnJheSBhbGxvY10gaW5p
dFdpdGhPYmplY3RzOiBOU0FjY2Vzc2liaWxpdHlQcmVzc0FjdGlvbiwgTlNBY2Nlc3NpYmlsaXR5
U2hvd01lbnVBY3Rpb24sIG5pbF07Ci0gICAgc3RhdGljIE5TQXJyYXkqIGRlZmF1bHRFbGVtZW50
QWN0aW9ucyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOiBOU0FjY2Vzc2liaWxp
dHlTaG93TWVudUFjdGlvbiwgbmlsXTsKLSAgICBzdGF0aWMgTlNBcnJheSogbWVudUVsZW1lbnRB
Y3Rpb25zID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6IE5TQWNjZXNzaWJpbGl0
eUNhbmNlbEFjdGlvbiwgTlNBY2Nlc3NpYmlsaXR5UHJlc3NBY3Rpb24sIG5pbF07Ci0gICAgc3Rh
dGljIE5TQXJyYXkqIHNsaWRlckFjdGlvbnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2Jq
ZWN0czogTlNBY2Nlc3NpYmlsaXR5SW5jcmVtZW50QWN0aW9uLCBOU0FjY2Vzc2liaWxpdHlEZWNy
ZW1lbnRBY3Rpb24sIG5pbF07Ci0KLSAgICBOU0FycmF5ICphY3Rpb25zOwotICAgIGlmIChtX29i
amVjdC0+YWN0aW9uRWxlbWVudCgpIHx8IG1fb2JqZWN0LT5pc0J1dHRvbigpKSAKLSAgICAgICAg
YWN0aW9ucyA9IGFjdGlvbkVsZW1lbnRBY3Rpb25zOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5p
c01lbnVSZWxhdGVkKCkpCi0gICAgICAgIGFjdGlvbnMgPSBtZW51RWxlbWVudEFjdGlvbnM7Ci0g
ICAgZWxzZSBpZiAobV9vYmplY3QtPmlzU2xpZGVyKCkpCi0gICAgICAgIGFjdGlvbnMgPSBzbGlk
ZXJBY3Rpb25zOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKLSAgICAg
ICAgYWN0aW9ucyA9IFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUFjdGlvbk5h
bWVzXTsKLSAgICBlbHNlCi0gICAgICAgIGFjdGlvbnMgPSBkZWZhdWx0RWxlbWVudEFjdGlvbnM7
Ci0KLSAgICByZXR1cm4gYWN0aW9uczsKLX0KLQotLSAoTlNBcnJheSopYWRkaXRpb25hbEFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVOYW1lcwotewotICAgIGlmICghbV9vYmplY3QpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICBOU011dGFibGVBcnJheSAqYWRkaXRpb25hbCA9IFtOU011dGFibGVB
cnJheSBhcnJheV07Ci0gICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c0FSSUFPd25zKCkpCi0gICAg
ICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlPd25zQXR0cmlidXRlXTsK
LQotICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNBUklBRXhwYW5kZWQoKSkKLSAgICAgICAgW2Fk
ZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUV4cGFuZGVkQXR0cmlidXRlXTsKLSAg
ICAKLSAgICBpZiAobV9vYmplY3QtPmlzU2Nyb2xsYmFyKCkpCi0gICAgICAgIFthZGRpdGlvbmFs
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0ZV07Ci0gICAgCi0g
ICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c0FSSUFEcmFnZ2luZygpKQotICAgICAgICBbYWRkaXRp
b25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5R3JhYmJlZEF0dHJpYnV0ZV07Ci0KLSAgICBp
ZiAobV9vYmplY3QtPnN1cHBvcnRzQVJJQURyb3BwaW5nKCkpCi0gICAgICAgIFthZGRpdGlvbmFs
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlEcm9wRWZmZWN0c0F0dHJpYnV0ZV07Ci0KLSAgICBp
ZiAobV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgJiYgc3RhdGljX2Nhc3Q8QWNjZXNz
aWJpbGl0eVRhYmxlKj4obV9vYmplY3QpLT5zdXBwb3J0c1NlbGVjdGVkUm93cygpKQotICAgICAg
ICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRSb3dzQXR0cmli
dXRlXTsgICAgICAgIAotICAgIAotICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNBUklBTGl2ZVJl
Z2lvbigpKSB7Ci0gICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlB
UklBTGl2ZUF0dHJpYnV0ZV07Ci0gICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vz
c2liaWxpdHlBUklBUmVsZXZhbnRBdHRyaWJ1dGVdOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9v
YmplY3QtPnNvcnREaXJlY3Rpb24oKSAhPSBTb3J0RGlyZWN0aW9uTm9uZSkKLSAgICAgICAgW2Fk
ZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb25BdHRyaWJ1dGVd
OwotICAgICAgICAKLSAgICAvLyBJZiBhbiBvYmplY3QgaXMgYSBjaGlsZCBvZiBhIGxpdmUgcmVn
aW9uLCB0aGVuIGFkZCB0aGVzZQotICAgIGlmIChtX29iamVjdC0+aXNJbnNpZGVBUklBTGl2ZVJl
Z2lvbigpKQotICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5QVJJ
QUF0b21pY0F0dHJpYnV0ZV07Ci0gICAgLy8gQWxsIG9iamVjdHMgc2hvdWxkIGV4cG9zZSB0aGUg
QVJJQSBidXN5IGF0dHJpYnV0ZSAoQVJJQSAxLjEgd2l0aCBJU1NVRS01MzgpLgotICAgIFthZGRp
dGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBUklBQnVzeUF0dHJpYnV0ZV07Ci0gICAg
Ci0gICAgLy8gUG9wdXAgYnV0dG9ucyBvbiB0aGUgTWFjIGV4cG9zZSB0aGUgdmFsdWUgYXR0cmli
dXRlLgotICAgIGlmIChtX29iamVjdC0+aXNQb3BVcEJ1dHRvbigpKQotICAgICAgICBbYWRkaXRp
b25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdOwotCi0gICAgaWYg
KG1fb2JqZWN0LT5hcmlhSGFzUG9wdXAoKSkKLSAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0
Ok5TQWNjZXNzaWJpbGl0eUhhc1BvcHVwQXR0cmlidXRlXTsKLSAgICAKLSAgICBpZiAobV9vYmpl
Y3QtPmlzTWF0aFJvb3QoKSkgewotICAgICAgICAvLyBUaGUgaW5kZXggb2YgYSBzcXVhcmUgcm9v
dCBpcyBhbHdheXMga25vd24sIHNvIHRoZXJlJ3Mgbm8gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCBp
dC4KLSAgICAgICAgaWYgKCFtX29iamVjdC0+aXNNYXRoU3F1YXJlUm9vdCgpKQotICAgICAgICAg
ICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhSb290SW5kZXhBdHRy
aWJ1dGVdOwotICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0
aFJvb3RSYWRpY2FuZEF0dHJpYnV0ZV07Ci0gICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNNYXRo
RnJhY3Rpb24oKSkgewotICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5TWF0aEZyYWN0aW9uTnVtZXJhdG9yQXR0cmlidXRlXTsKLSAgICAgICAgW2FkZGl0aW9uYWwg
YWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhGcmFjdGlvbkRlbm9taW5hdG9yQXR0cmlidXRl
XTsKLSAgICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5pc01hdGhTdWJzY3JpcHRTdXBlcnNjcmlwdCgp
KSB7Ci0gICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoQmFz
ZUF0dHJpYnV0ZV07Ci0gICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxp
dHlNYXRoU3Vic2NyaXB0QXR0cmlidXRlXTsKLSAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0
Ok5TQWNjZXNzaWJpbGl0eU1hdGhTdXBlcnNjcmlwdEF0dHJpYnV0ZV07Ci0gICAgfSBlbHNlIGlm
IChtX29iamVjdC0+aXNNYXRoVW5kZXJPdmVyKCkpIHsKLSAgICAgICAgW2FkZGl0aW9uYWwgYWRk
T2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhCYXNlQXR0cmlidXRlXTsKLSAgICAgICAgW2FkZGl0
aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhVbmRlckF0dHJpYnV0ZV07Ci0gICAg
ICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoT3ZlckF0dHJpYnV0
ZV07Ci0gICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNNYXRoRmVuY2VkKCkpIHsKLSAgICAgICAg
W2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRPcGVuQXR0cmli
dXRlXTsKLSAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhG
ZW5jZWRDbG9zZUF0dHJpYnV0ZV07Ci0gICAgfQotCi0gICAgcmV0dXJuIGFkZGl0aW9uYWw7Ci19
Ci0KLS0gKE5TQXJyYXkqKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcwotewotICAgIGlmICgh
W3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICAKLSAgICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKQotICAgICAgICByZXR1cm4gW1tz
ZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdOwotCi0gICAg
c3RhdGljIE5TQXJyYXkqIGF0dHJpYnV0ZXMgPSBuaWw7Ci0gICAgc3RhdGljIE5TQXJyYXkqIGFu
Y2hvckF0dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiB3ZWJBcmVhQXR0cnMgPSBuaWw7
Ci0gICAgc3RhdGljIE5TQXJyYXkqIHRleHRBdHRycyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJh
eSogbGlzdEF0dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiBsaXN0Qm94QXR0cnMgPSBu
aWw7Ci0gICAgc3RhdGljIE5TQXJyYXkqIHJhbmdlQXR0cnMgPSBuaWw7Ci0gICAgc3RhdGljIE5T
QXJyYXkqIGNvbW1vbk1lbnVBdHRycyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSogbWVudUF0
dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiBtZW51QmFyQXR0cnMgPSBuaWw7Ci0gICAg
c3RhdGljIE5TQXJyYXkqIG1lbnVJdGVtQXR0cnMgPSBuaWw7Ci0gICAgc3RhdGljIE5TQXJyYXkq
IG1lbnVCdXR0b25BdHRycyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSogY29udHJvbEF0dHJz
ID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiB0YWJsZUF0dHJzID0gbmlsOwotICAgIHN0YXRp
YyBOU0FycmF5KiB0YWJsZVJvd0F0dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiB0YWJs
ZUNvbEF0dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiB0YWJsZUNlbGxBdHRycyA9IG5p
bDsKLSAgICBzdGF0aWMgTlNBcnJheSogZ3JvdXBBdHRycyA9IG5pbDsKLSAgICBzdGF0aWMgTlNB
cnJheSogaW5wdXRJbWFnZUF0dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiBwYXNzd29y
ZEZpZWxkQXR0cnMgPSBuaWw7Ci0gICAgc3RhdGljIE5TQXJyYXkqIHRhYkxpc3RBdHRycyA9IG5p
bDsKLSAgICBzdGF0aWMgTlNBcnJheSogY29tYm9Cb3hBdHRycyA9IG5pbDsKLSAgICBzdGF0aWMg
TlNBcnJheSogb3V0bGluZUF0dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiBvdXRsaW5l
Um93QXR0cnMgPSBuaWw7Ci0gICAgc3RhdGljIE5TQXJyYXkqIGJ1dHRvbkF0dHJzID0gbmlsOwot
ICAgIHN0YXRpYyBOU0FycmF5KiBzY3JvbGxWaWV3QXR0cnMgPSBuaWw7Ci0gICAgc3RhdGljIE5T
QXJyYXkqIGluY3JlbWVudG9yQXR0cnMgPSBuaWw7Ci0gICAgTlNNdXRhYmxlQXJyYXkqIHRlbXBB
cnJheTsKLSAgICBpZiAoYXR0cmlidXRlcyA9PSBuaWwpIHsKLSAgICAgICAgYXR0cmlidXRlcyA9
IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOiBOU0FjY2Vzc2liaWxpdHlSb2xlQXR0
cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVN1YnJvbGVBdHRy
aWJ1dGUsCi0gICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0
aW9uQXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUNoaWxk
cmVuQXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUhlbHBB
dHRyaWJ1dGUsCi0gICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5UGFyZW50QXR0
cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVBvc2l0aW9uQXR0
cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNpemVBdHRyaWJ1
dGUsCi0gICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5VGl0bGVBdHRyaWJ1dGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1
dGUsCi0gICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZSwK
LSAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlLAot
ICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVdpbmRvd0F0dHJpYnV0ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICBAIkFYU2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UiLAotICAgICAg
ICAgICAgICAgICAgICAgIEAiQVhTdGFydFRleHRNYXJrZXIiLAotICAgICAgICAgICAgICAgICAg
ICAgIEAiQVhFbmRUZXh0TWFya2VyIiwKLSAgICAgICAgICAgICAgICAgICAgICBAIkFYVmlzaXRl
ZCIsCi0gICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5TGlua2VkVUlFbGVtZW50
c0F0dHJpYnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlTZWxlY3Rl
ZEF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlCbG9ja1F1
b3RlTGV2ZWxBdHRyaWJ1dGUsCi0gICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5
VG9wTGV2ZWxVSUVsZW1lbnRBdHRyaWJ1dGUsCi0gICAgICAgICAgICAgICAgICAgICAgbmlsXTsK
LSAgICB9Ci0gICAgaWYgKGNvbW1vbk1lbnVBdHRycyA9PSBuaWwpIHsKLSAgICAgICAgY29tbW9u
TWVudUF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6IE5TQWNjZXNzaWJp
bGl0eVJvbGVBdHRyaWJ1dGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3Np
YmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVBvc2l0aW9uQXR0cmlidXRlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNpemVBdHRyaWJ1dGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsXTsKLSAgICB9Ci0gICAgaWYgKGFuY2hvckF0
dHJzID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVj
dDpOU0FjY2Vzc2liaWxpdHlVUkxBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9i
amVjdDpOU0FjY2Vzc2liaWxpdHlBY2Nlc3NLZXlBdHRyaWJ1dGVdOwotICAgICAgICBhbmNob3JB
dHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOwotICAgICAg
ICBbdGVtcEFycmF5IHJlbGVhc2VdOwotICAgIH0KLSAgICBpZiAod2ViQXJlYUF0dHJzID09IG5p
bCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0
aEFycmF5OmF0dHJpYnV0ZXNdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpAIkFYTGlu
a1VJRWxlbWVudHMiXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6QCJBWExvYWRlZCJd
OwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpAIkFYTGF5b3V0Q291bnQiXTsKLSAgICAg
ICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TG9hZGluZ1Byb2dyZXNzQXR0
cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VVJM
QXR0cmlidXRlXTsKLSAgICAgICAgd2ViQXJlYUF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0
V2l0aEFycmF5OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07Ci0gICAg
fQotICAgIGlmICh0ZXh0QXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIHRlbXBBcnJheSA9IFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107Ci0gICAgICAgIFt0
ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU51bWJlck9mQ2hhcmFjdGVyc0F0dHJp
YnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNlbGVj
dGVkVGV4dEF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eVNlbGVjdGVkVGV4dFJhbmdlQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmlidXRlXTsK
LSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SW5zZXJ0aW9uUG9p
bnRMaW5lTnVtYmVyQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNB
Y2Nlc3NpYmlsaXR5VGl0bGVVSUVsZW1lbnRBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBY2Nlc3NLZXlBdHRyaWJ1dGVdOwotICAgICAgICBb
dGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlSZXF1aXJlZEF0dHJpYnV0ZV07Ci0g
ICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUludmFsaWRBdHRyaWJ1
dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlQbGFjZWhv
bGRlclZhbHVlQXR0cmlidXRlXTsKLSAgICAgICAgdGV4dEF0dHJzID0gW1tOU0FycmF5IGFsbG9j
XSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07
Ci0gICAgfQotICAgIGlmIChsaXN0QXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIHRlbXBBcnJheSA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107Ci0gICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2hpbGRyZW5B
dHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlW
aXNpYmxlQ2hpbGRyZW5BdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpO
U0FjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkg
YWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVRpdGxlVUlFbGVtZW50QXR0cmlidXRlXTsKLSAgICAg
ICAgbGlzdEF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07
Ci0gICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07Ci0gICAgfQotICAgIGlmIChsaXN0Qm94QXR0
cnMgPT0gbmlsKSB7Ci0gICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQXJyYXk6bGlzdEF0dHJzXTsgICAgCi0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eUFjY2Vzc0tleUF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJy
YXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVJlcXVpcmVkQXR0cmlidXRlXTsKLSAgICAgICAg
W3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SW52YWxpZEF0dHJpYnV0ZV07Ci0g
ICAgICAgIGxpc3RCb3hBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1w
QXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwotICAgIH0KLSAgICBpZiAocmFu
Z2VBdHRycyA9PSBuaWwpIHsKLSAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRP
YmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWluVmFsdWVBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFy
cmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXhWYWx1ZUF0dHJpYnV0ZV07Ci0gICAgICAg
IFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uQXR0cmlidXRl
XTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmFsdWVEZXNj
cmlwdGlvbkF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eVRpdGxlVUlFbGVtZW50QXR0cmlidXRlXTsKLSAgICAgICAgcmFuZ2VBdHRycyA9IFtb
TlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFy
cmF5IHJlbGVhc2VdOwotICAgIH0KLSAgICBpZiAobWVudUJhckF0dHJzID09IG5pbCkgewotICAg
ICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmNv
bW1vbk1lbnVBdHRyc107Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJp
bGl0eVNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9i
amVjdDpOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hpbGRyZW5BdHRyaWJ1dGVdOwotICAgICAgICBb
dGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUaXRsZVVJRWxlbWVudEF0dHJpYnV0
ZV07Ci0gICAgICAgIG1lbnVCYXJBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJh
eTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwotICAgIH0KLSAgICBp
ZiAobWVudUF0dHJzID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmNvbW1vbk1lbnVBdHRyc107Ci0gICAgICAgIFt0ZW1w
QXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGVd
OwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hp
bGRyZW5BdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlUaXRsZVVJRWxlbWVudEF0dHJpYnV0ZV07Ci0gICAgICAgIG1lbnVBdHRycyA9IFtbTlNB
cnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFycmF5
IHJlbGVhc2VdOwotICAgIH0KLSAgICBpZiAobWVudUl0ZW1BdHRycyA9PSBuaWwpIHsKLSAgICAg
ICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTpjb21t
b25NZW51QXR0cnNdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxp
dHlUaXRsZUF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eUhlbHBBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0Fj
Y2Vzc2liaWxpdHlTZWxlY3RlZEF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2Jq
ZWN0OihOU1N0cmluZyopa0FYTWVudUl0ZW1DbWRDaGFyQXR0cmlidXRlXTsKLSAgICAgICAgW3Rl
bXBBcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nKilrQVhNZW51SXRlbUNtZFZpcnR1YWxLZXlBdHRy
aWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWE1lbnVJ
dGVtQ21kR2x5cGhBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNT
dHJpbmcqKWtBWE1lbnVJdGVtQ21kTW9kaWZpZXJzQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBB
cnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nKilrQVhNZW51SXRlbU1hcmtDaGFyQXR0cmlidXRlXTsK
LSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nKilrQVhNZW51SXRlbVByaW1h
cnlVSUVsZW1lbnRBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0Fj
Y2Vzc2liaWxpdHlTZXJ2ZXNBc1RpdGxlRm9yVUlFbGVtZW50c0F0dHJpYnV0ZV07Ci0gICAgICAg
IG1lbnVJdGVtQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5
XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKLSAgICB9Ci0gICAgaWYgKG1lbnVCdXR0
b25BdHRycyA9PSBuaWwpIHsKLSAgICAgICAgbWVudUJ1dHRvbkF0dHJzID0gW1tOU0FycmF5IGFs
bG9jXSBpbml0V2l0aE9iamVjdHM6TlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZSwKLSAgICAg
ICAgICAgIE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZSwKLSAgICAgICAg
ICAgIE5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZSwKLSAgICAgICAgICAgIE5TQWNjZXNz
aWJpbGl0eVBvc2l0aW9uQXR0cmlidXRlLAotICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2l6
ZUF0dHJpYnV0ZSwKLSAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVdpbmRvd0F0dHJpYnV0ZSwK
LSAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGUsCi0gICAgICAgICAg
ICBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRlLAotICAgICAgICAgICAgTlNBY2Nlc3Np
YmlsaXR5VGl0bGVBdHRyaWJ1dGUsCi0gICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlDaGlsZHJl
bkF0dHJpYnV0ZSwgbmlsXTsKLSAgICB9Ci0gICAgaWYgKGNvbnRyb2xBdHRycyA9PSBuaWwpIHsK
LSAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJh
eTphdHRyaWJ1dGVzXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5VGl0bGVVSUVsZW1lbnRBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVj
dDpOU0FjY2Vzc2liaWxpdHlBY2Nlc3NLZXlBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlSZXF1aXJlZEF0dHJpYnV0ZV07Ci0gICAgICAgIFt0
ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUludmFsaWRBdHRyaWJ1dGVdOwotICAg
ICAgICBjb250cm9sQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFy
cmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKLSAgICB9Ci0gICAgaWYgKGluY3Jl
bWVudG9yQXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107Ci0gICAgICAgIFt0ZW1wQXJyYXkg
YWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUluY3JlbWVudEJ1dHRvbkF0dHJpYnV0ZV07Ci0gICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURlY3JlbWVudEJ1dHRvbkF0
dHJpYnV0ZV07Ci0gICAgICAgIGluY3JlbWVudG9yQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKLSAg
ICB9Ci0gICAgaWYgKGJ1dHRvbkF0dHJzID09IG5pbCkgewotICAgICAgICB0ZW1wQXJyYXkgPSBb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOwotICAgICAg
ICAvLyBCdXR0b25zIHNob3VsZCBub3QgZXhwb3NlIEFYVmFsdWUuCi0gICAgICAgIFt0ZW1wQXJy
YXkgcmVtb3ZlT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXTsKLSAgICAgICAg
W3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VGl0bGVVSUVsZW1lbnRBdHRyaWJ1
dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBY2Nlc3NL
ZXlBdHRyaWJ1dGVdOwotICAgICAgICBidXR0b25BdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5p
dFdpdGhBcnJheTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwotICAg
IH0KLSAgICBpZiAoY29tYm9Cb3hBdHRycyA9PSBuaWwpIHsKLSAgICAgICAgdGVtcEFycmF5ID0g
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTpjb250cm9sQXR0cnNdOwotICAg
ICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlFeHBhbmRlZEF0dHJpYnV0
ZV07Ci0gICAgICAgIGNvbWJvQm94QXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJy
YXk6dGVtcEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsgICAgICAgIAotICAg
IH0KLSAgICBpZiAodGFibGVBdHRycyA9PSBuaWwpIHsKLSAgICAgICAgdGVtcEFycmF5ID0gW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzXTsKLSAgICAgICAg
W3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5Um93c0F0dHJpYnV0ZV07Ci0gICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZpc2libGVSb3dzQXR0cmli
dXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5Q29sdW1u
c0F0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0
eVZpc2libGVDb2x1bW5zQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6
TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNlbGxzQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJh
eSBhZGRPYmplY3Q6KE5TU3RyaW5nICopa0FYQ29sdW1uSGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0
ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVJvd0hlYWRl
clVJRWxlbWVudHNBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0Fj
Y2Vzc2liaWxpdHlIZWFkZXJBdHRyaWJ1dGVdOwotICAgICAgICB0YWJsZUF0dHJzID0gW1tOU0Fy
cmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1wQXJyYXkg
cmVsZWFzZV07Ci0gICAgfQotICAgIGlmICh0YWJsZVJvd0F0dHJzID09IG5pbCkgewotICAgICAg
ICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJp
YnV0ZXNdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlJbmRl
eEF0dHJpYnV0ZV07Ci0gICAgICAgIHRhYmxlUm93QXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKLSAg
ICB9Ci0gICAgaWYgKHRhYmxlQ29sQXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIHRlbXBBcnJheSA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107Ci0gICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUluZGV4QXR0cmlidXRlXTsK
LSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SGVhZGVyQXR0cmli
dXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5Um93c0F0
dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZp
c2libGVSb3dzQXR0cmlidXRlXTsKLSAgICAgICAgdGFibGVDb2xBdHRycyA9IFtbTlNBcnJheSBh
bGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVh
c2VdOwotICAgIH0KLSAgICBpZiAodGFibGVDZWxsQXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIHRl
bXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRl
c107Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVJvd0luZGV4
UmFuZ2VBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlDb2x1bW5JbmRleFJhbmdlQXR0cmlidXRlXTsKLSAgICAgICAgdGFibGVDZWxsQXR0cnMg
PSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKLSAgICAgICAgW3Rl
bXBBcnJheSByZWxlYXNlXTsgICAgICAgIAotICAgIH0KLSAgICBpZiAoZ3JvdXBBdHRycyA9PSBu
aWwpIHsKLSAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdp
dGhBcnJheTphdHRyaWJ1dGVzXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5VGl0bGVVSUVsZW1lbnRBdHRyaWJ1dGVdOwotICAgICAgICBncm91cEF0dHJzID0g
W1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1w
QXJyYXkgcmVsZWFzZV07Ci0gICAgfQotICAgIGlmIChpbnB1dEltYWdlQXR0cnMgPT0gbmlsKSB7
Ci0gICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJy
YXk6YnV0dG9uQXR0cnNdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlVUkxBdHRyaWJ1dGVdOwotICAgICAgICBpbnB1dEltYWdlQXR0cnMgPSBbW05TQXJyYXkg
YWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxl
YXNlXTsKLSAgICB9Ci0gICAgaWYgKHBhc3N3b3JkRmllbGRBdHRycyA9PSBuaWwpIHsKLSAgICAg
ICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRy
aWJ1dGVzXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VGl0
bGVVSUVsZW1lbnRBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0Fj
Y2Vzc2liaWxpdHlSZXF1aXJlZEF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eUludmFsaWRBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlQbGFjZWhvbGRlclZhbHVlQXR0cmlidXRlXTsKLSAg
ICAgICAgcGFzc3dvcmRGaWVsZEF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5
OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07Ci0gICAgfQotICAgIGlm
ICh0YWJMaXN0QXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107Ci0gICAgICAgIFt0ZW1wQXJy
YXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVRhYnNBdHRyaWJ1dGVdOwotICAgICAgICBbdGVt
cEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlDb250ZW50c0F0dHJpYnV0ZV07Ci0gICAg
ICAgIHRhYkxpc3RBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJy
YXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOyAgICAgICAgCi0gICAgfQotICAgIGlm
IChvdXRsaW5lQXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107Ci0gICAgICAgIFt0ZW1wQXJy
YXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV07Ci0gICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVJvd3NBdHRyaWJ1dGVdOwot
ICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlDb2x1bW5zQXR0cmli
dXRlXTsKLSAgICAgICAgb3V0bGluZUF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFy
cmF5OnRlbXBBcnJheV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07Ci0gICAgfQotICAg
IGlmIChvdXRsaW5lUm93QXR0cnMgPT0gbmlsKSB7Ci0gICAgICAgIHRlbXBBcnJheSA9IFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGFibGVSb3dBdHRyc107Ci0gICAgICAg
IFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURpc2Nsb3NpbmdBdHRyaWJ1dGVd
OwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zZWRC
eVJvd0F0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJp
bGl0eURpc2Nsb3N1cmVMZXZlbEF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eURpc2Nsb3NlZFJvd3NBdHRyaWJ1dGVdOwotICAgICAgICBvdXRs
aW5lUm93QXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsK
LSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKLSAgICB9Ci0gICAgaWYgKHNjcm9sbFZpZXdB
dHRycyA9PSBuaWwpIHsKLSAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5Q29udGVudHNBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlIb3Jpem9udGFsU2Nyb2xsQmFyQXR0cmlidXRlXTsK
LSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmVydGljYWxTY3Jv
bGxCYXJBdHRyaWJ1dGVdOwotICAgICAgICBzY3JvbGxWaWV3QXR0cnMgPSBbW05TQXJyYXkgYWxs
b2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNl
XTsKLSAgICB9Ci0gICAgCi0gICAgTlNBcnJheSAqb2JqZWN0QXR0cmlidXRlcyA9IGF0dHJpYnV0
ZXM7Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSkKLSAgICAgICAg
b2JqZWN0QXR0cmlidXRlcyA9IHBhc3N3b3JkRmllbGRBdHRyczsKLQotICAgIGVsc2UgaWYgKG1f
b2JqZWN0LT5pc1dlYkFyZWEoKSkKLSAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHdlYkFyZWFB
dHRyczsKLSAgICAKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNUZXh0Q29udHJvbCgpKQotICAg
ICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGV4dEF0dHJzOwotCi0gICAgZWxzZSBpZiAobV9vYmpl
Y3QtPmlzQW5jaG9yKCkgfHwgbV9vYmplY3QtPmlzSW1hZ2UoKSB8fCBtX29iamVjdC0+aXNMaW5r
KCkpCi0gICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBhbmNob3JBdHRyczsKLQotICAgIGVsc2Ug
aWYgKG1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlUYWJsZSgpKQotICAgICAgICBvYmplY3RBdHRy
aWJ1dGVzID0gdGFibGVBdHRyczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNUYWJsZUNvbHVt
bigpKQotICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFibGVDb2xBdHRyczsKLSAgICBlbHNl
IGlmIChtX29iamVjdC0+aXNUYWJsZUNlbGwoKSkKLSAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9
IHRhYmxlQ2VsbEF0dHJzOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RhYmxlUm93KCkpIHsK
LSAgICAgICAgLy8gQW4gQVJJQSB0YWJsZSByb3cgY2FuIGJlIGNvbGxhcHNlZCBhbmQgZXhwYW5k
ZWQsIHNvIGl0IG5lZWRzIHRoZSBleHRyYSBhdHRyaWJ1dGVzLgotICAgICAgICBpZiAobV9vYmpl
Y3QtPmlzQVJJQVRyZWVHcmlkUm93KCkpCi0gICAgICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0g
b3V0bGluZVJvd0F0dHJzOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvYmplY3RBdHRyaWJ1
dGVzID0gdGFibGVSb3dBdHRyczsKLSAgICB9Ci0gICAgCi0gICAgZWxzZSBpZiAobV9vYmplY3Qt
PmlzVHJlZSgpKQotICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gb3V0bGluZUF0dHJzOwotICAg
IGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpCi0gICAgICAgIG9iamVjdEF0dHJpYnV0
ZXMgPSBvdXRsaW5lUm93QXR0cnM7Ci0gICAgCi0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTGlz
dEJveCgpKQotICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gbGlzdEJveEF0dHJzOwotICAgIGVs
c2UgaWYgKG1fb2JqZWN0LT5pc0xpc3QoKSkKLSAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGxp
c3RBdHRyczsKLSAgICAKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNDb21ib0JveCgpKQotICAg
ICAgICBvYmplY3RBdHRyaWJ1dGVzID0gY29tYm9Cb3hBdHRyczsKLSAgICAKLSAgICBlbHNlIGlm
IChtX29iamVjdC0+aXNQcm9ncmVzc0luZGljYXRvcigpIHx8IG1fb2JqZWN0LT5pc1NsaWRlcigp
KQotICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gcmFuZ2VBdHRyczsKLQotICAgIC8vIFRoZXNl
IGFyZSBwcm9jZXNzZWQgaW4gb3JkZXIgYmVjYXVzZSBhbiBpbnB1dCBpbWFnZSBpcyBhIGJ1dHRv
biwgYW5kIGEgYnV0dG9uIGlzIGEgY29udHJvbC4KLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNJ
bnB1dEltYWdlKCkpCi0gICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBpbnB1dEltYWdlQXR0cnM7
Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzQnV0dG9uKCkpCi0gICAgICAgIG9iamVjdEF0dHJp
YnV0ZXMgPSBidXR0b25BdHRyczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNDb250cm9sKCkp
Ci0gICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBjb250cm9sQXR0cnM7Ci0gICAgCi0gICAgZWxz
ZSBpZiAobV9vYmplY3QtPmlzR3JvdXAoKSB8fCBtX29iamVjdC0+aXNMaXN0SXRlbSgpKQotICAg
ICAgICBvYmplY3RBdHRyaWJ1dGVzID0gZ3JvdXBBdHRyczsKLSAgICBlbHNlIGlmIChtX29iamVj
dC0+aXNUYWJMaXN0KCkpCi0gICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB0YWJMaXN0QXR0cnM7
Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzU2Nyb2xsVmlldygpKQotICAgICAgICBvYmplY3RB
dHRyaWJ1dGVzID0gc2Nyb2xsVmlld0F0dHJzOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1Nw
aW5CdXR0b24oKSkKLSAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGluY3JlbWVudG9yQXR0cnM7
Ci0gICAgCi0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTWVudSgpKQotICAgICAgICBvYmplY3RB
dHRyaWJ1dGVzID0gbWVudUF0dHJzOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc01lbnVCYXIo
KSkKLSAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IG1lbnVCYXJBdHRyczsKLSAgICBlbHNlIGlm
IChtX29iamVjdC0+aXNNZW51QnV0dG9uKCkpCi0gICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBt
ZW51QnV0dG9uQXR0cnM7Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTWVudUl0ZW0oKSkKLSAg
ICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IG1lbnVJdGVtQXR0cnM7Ci0gICAgCi0gICAgTlNBcnJh
eSAqYWRkaXRpb25hbEF0dHJpYnV0ZXMgPSBbc2VsZiBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZU5hbWVzXTsKLSAgICBpZiAoW2FkZGl0aW9uYWxBdHRyaWJ1dGVzIGNvdW50XSkKLSAg
ICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IFtvYmplY3RBdHRyaWJ1dGVzIGFycmF5QnlBZGRpbmdP
YmplY3RzRnJvbUFycmF5OmFkZGl0aW9uYWxBdHRyaWJ1dGVzXTsKLSAgICAKLSAgICByZXR1cm4g
b2JqZWN0QXR0cmlidXRlczsKLX0KLQotLSAoVmlzaWJsZVBvc2l0aW9uUmFuZ2UpdmlzaWJsZVBv
c2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6KGlkKXRleHRNYXJrZXJSYW5nZQotewotICAg
IGlmICghdGV4dE1hcmtlclJhbmdlKQotICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFu
Z2UoKTsKLSAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hl
KCk7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3NpdGlvbkZvclN0
YXJ0T2ZUZXh0TWFya2VyUmFuZ2UoY2FjaGUsIHRleHRNYXJrZXJSYW5nZSksIHZpc2libGVQb3Np
dGlvbkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKGNhY2hlLCB0ZXh0TWFya2VyUmFuZ2UpKTsKLX0K
LQotLSAoTlNBcnJheSopcmVuZGVyV2lkZ2V0Q2hpbGRyZW4KLXsKLSAgICBXaWRnZXQqIHdpZGdl
dCA9IG1fb2JqZWN0LT53aWRnZXQoKTsKLSAgICBpZiAoIXdpZGdldCkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICByZXR1cm4gWyh3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpIGFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZTogTlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdOwotfQot
Ci0tIChpZClyZW1vdGVBY2Nlc3NpYmlsaXR5UGFyZW50T2JqZWN0Ci17Ci0gICAgaWYgKCFtX29i
amVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBtX29iamVjdC0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIAotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgcmV0dXJuIGZyYW1l
LT5sb2FkZXIoKS0+Y2xpZW50KCktPmFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKTsKLX0KLQot
c3RhdGljIHZvaWQgY29udmVydFRvVmVjdG9yKE5TQXJyYXkqIGFycmF5LCBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHZlY3RvcikKLXsKLSAgICB1bnNp
Z25lZCBsZW5ndGggPSBbYXJyYXkgY291bnRdOwotICAgIHZlY3Rvci5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IFtbYXJyYXkgb2JqZWN0QXRJ
bmRleDppXSBhY2Nlc3NpYmlsaXR5T2JqZWN0XTsKLSAgICAgICAgaWYgKG9iaikKLSAgICAgICAg
ICAgIHZlY3Rvci5hcHBlbmQob2JqKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBOU011dGFibGVBcnJh
eSogY29udmVydFRvTlNBcnJheShjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3ImIHZlY3RvcikKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB2ZWN0
b3Iuc2l6ZSgpOwotICAgIE5TTXV0YWJsZUFycmF5KiBhcnJheSA9IFtOU011dGFibGVBcnJheSBh
cnJheVdpdGhDYXBhY2l0eTogbGVuZ3RoXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdy
YXBwZXIgPSB2ZWN0b3JbaV0tPndyYXBwZXIoKTsKLSAgICAgICAgQVNTRVJUKHdyYXBwZXIpOwot
ICAgICAgICBpZiAod3JhcHBlcikgewotICAgICAgICAgICAgLy8gd2Ugd2FudCB0byByZXR1cm4g
dGhlIGF0dGFjaG1lbnQgdmlldyBpbnN0ZWFkIG9mIHRoZSBvYmplY3QgcmVwcmVzZW50aW5nIHRo
ZSBhdHRhY2htZW50LgotICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCB3ZSBnZXQgcGFsaW5kcm9t
ZSBlcnJvcnMgaW4gdGhlIEFYIGhpZXJhcmNoeQotICAgICAgICAgICAgaWYgKHZlY3RvcltpXS0+
aXNBdHRhY2htZW50KCkgJiYgW3dyYXBwZXIgYXR0YWNobWVudFZpZXddKQotICAgICAgICAgICAg
ICAgIFthcnJheSBhZGRPYmplY3Q6W3dyYXBwZXIgYXR0YWNobWVudFZpZXddXTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OndyYXBwZXJdOwotICAg
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhcnJheTsKLX0KLQotLSAoaWQpdGV4dE1hcmtlclJh
bmdlRm9yU2VsZWN0aW9uCi17Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX29i
amVjdC0+c2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQ
b3NpdGlvbnM6c2VsZWN0aW9uLnZpc2libGVTdGFydCgpIGVuZFBvc2l0aW9uOnNlbGVjdGlvbi52
aXNpYmxlRW5kKCldOwotfQotCi0tIChOU1ZhbHVlICopcG9zaXRpb24KLXsKLSAgICBJbnRSZWN0
IHJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KG1fb2JqZWN0LT5lbGVtZW50UmVjdCgpKTsKLSAg
ICBOU1BvaW50IHBvaW50OwotICAgIAotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9vYmpl
Y3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7Ci0KLSAgICAvLyBXZWJLaXQxIGNvZGUgcGF0aC4uLiBw
bGF0Zm9ybVdpZGdldCgpIGV4aXN0cy4KLSAgICBpZiAoZnJhbWVWaWV3ICYmIGZyYW1lVmlldy0+
cGxhdGZvcm1XaWRnZXQoKSkgewotICAgIAotICAgICAgICAvLyBUaGUgQ29jb2EgYWNjZXNzaWJp
bGl0eSBBUEkgd2FudHMgdGhlIGxvd2VyLWxlZnQgY29ybmVyLgotICAgICAgICBwb2ludCA9IE5T
TWFrZVBvaW50KHJlY3QueCgpLCByZWN0Lm1heFkoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
ZnJhbWVWaWV3KSB7Ci0gICAgICAgICAgICBOU1ZpZXcqIHZpZXcgPSBmcmFtZVZpZXctPmRvY3Vt
ZW50VmlldygpOwotICAgICAgICAgICAgcG9pbnQgPSBbW3ZpZXcgd2luZG93XSBjb252ZXJ0QmFz
ZVRvU2NyZWVuOlt2aWV3IGNvbnZlcnRQb2ludDogcG9pbnQgdG9WaWV3Om5pbF1dOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgCi0gICAgICAgIC8vIEZpbmQgdGhlIGFwcHJvcHJp
YXRlIHNjcm9sbCB2aWV3IHRvIHVzZSB0byBjb252ZXJ0IHRoZSBjb250ZW50cyB0byB0aGUgd2lu
ZG93LgotICAgICAgICBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3ID0gMDsKLSAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogcGFyZW50ID0gMDsKLSAgICAgICAgZm9yIChwYXJlbnQgPSBtX29iamVj
dC0+cGFyZW50T2JqZWN0KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3Qo
KSkgewotICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldygp
KSB7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsVmlldyA9IHRvQWNjZXNzaWJpbGl0eVNjcm9sbFZp
ZXcocGFyZW50KS0+c2Nyb2xsVmlldygpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNjcm9sbFZpZXcpCi0gICAgICAgICAg
ICByZWN0ID0gc2Nyb2xsVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJlY3QpOwotICAgICAgICAK
LSAgICAgICAgUGFnZSogcGFnZSA9IG1fb2JqZWN0LT5wYWdlKCk7Ci0gICAgICAgIAotICAgICAg
ICAvLyBJZiB3ZSBoYXZlIGFuIGVtcHR5IGNocm9tZSBjbGllbnQgKGxpa2UgU1ZHKSB0aGVuIHdl
IHNob3VsZCB1c2UgdGhlIHBhZ2UKLSAgICAgICAgLy8gb2YgdGhlIHNjcm9sbCB2aWV3IHBhcmVu
dCB0byBoZWxwIHVzIGdldCB0byB0aGUgc2NyZWVuIHJlY3QuCi0gICAgICAgIGlmIChwYXJlbnQg
JiYgcGFnZSAmJiBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmlzRW1wdHlDaHJvbWVDbGllbnQo
KSkKLSAgICAgICAgICAgIHBhZ2UgPSBwYXJlbnQtPnBhZ2UoKTsKLQotICAgICAgICBpZiAocGFn
ZSkKLSAgICAgICAgICAgIHBvaW50ID0gcGFnZS0+Y2hyb21lKCktPnJvb3RWaWV3VG9TY3JlZW4o
cmVjdCkubG9jYXRpb24oKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcG9pbnQgPSByZWN0
LmxvY2F0aW9uKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhQ
b2ludDpwb2ludF07Ci19Ci0KLXR5cGVkZWYgSGFzaE1hcDxpbnQsIE5TU3RyaW5nKj4gQWNjZXNz
aWJpbGl0eVJvbGVNYXA7Ci0KLXN0YXRpYyBjb25zdCBBY2Nlc3NpYmlsaXR5Um9sZU1hcCYgY3Jl
YXRlQWNjZXNzaWJpbGl0eVJvbGVNYXAoKQotewotICAgIHN0cnVjdCBSb2xlRW50cnkgewotICAg
ICAgICBBY2Nlc3NpYmlsaXR5Um9sZSB2YWx1ZTsKLSAgICAgICAgTlNTdHJpbmcqIHN0cmluZzsK
LSAgICB9OwotICAgIAotICAgIHN0YXRpYyBjb25zdCBSb2xlRW50cnkgcm9sZXNbXSA9IHsKLSAg
ICAgICAgeyBVbmtub3duUm9sZSwgTlNBY2Nlc3NpYmlsaXR5VW5rbm93blJvbGUgfSwKLSAgICAg
ICAgeyBCdXR0b25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlCdXR0b25Sb2xlIH0sCi0gICAgICAgIHsg
UmFkaW9CdXR0b25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlSYWRpb0J1dHRvblJvbGUgfSwKLSAgICAg
ICAgeyBDaGVja0JveFJvbGUsIE5TQWNjZXNzaWJpbGl0eUNoZWNrQm94Um9sZSB9LAotICAgICAg
ICB7IFNsaWRlclJvbGUsIE5TQWNjZXNzaWJpbGl0eVNsaWRlclJvbGUgfSwKLSAgICAgICAgeyBU
YWJHcm91cFJvbGUsIE5TQWNjZXNzaWJpbGl0eVRhYkdyb3VwUm9sZSB9LAotICAgICAgICB7IFRl
eHRGaWVsZFJvbGUsIE5TQWNjZXNzaWJpbGl0eVRleHRGaWVsZFJvbGUgfSwKLSAgICAgICAgeyBT
dGF0aWNUZXh0Um9sZSwgTlNBY2Nlc3NpYmlsaXR5U3RhdGljVGV4dFJvbGUgfSwKLSAgICAgICAg
eyBUZXh0QXJlYVJvbGUsIE5TQWNjZXNzaWJpbGl0eVRleHRBcmVhUm9sZSB9LAotICAgICAgICB7
IFNjcm9sbEFyZWFSb2xlLCBOU0FjY2Vzc2liaWxpdHlTY3JvbGxBcmVhUm9sZSB9LAotICAgICAg
ICB7IFBvcFVwQnV0dG9uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5UG9wVXBCdXR0b25Sb2xlIH0sCi0g
ICAgICAgIHsgTWVudUJ1dHRvblJvbGUsIE5TQWNjZXNzaWJpbGl0eU1lbnVCdXR0b25Sb2xlIH0s
Ci0gICAgICAgIHsgVGFibGVSb2xlLCBOU0FjY2Vzc2liaWxpdHlUYWJsZVJvbGUgfSwKLSAgICAg
ICAgeyBBcHBsaWNhdGlvblJvbGUsIE5TQWNjZXNzaWJpbGl0eUFwcGxpY2F0aW9uUm9sZSB9LAot
ICAgICAgICB7IEdyb3VwUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAg
IHsgUmFkaW9Hcm91cFJvbGUsIE5TQWNjZXNzaWJpbGl0eVJhZGlvR3JvdXBSb2xlIH0sCi0gICAg
ICAgIHsgTGlzdFJvbGUsIE5TQWNjZXNzaWJpbGl0eUxpc3RSb2xlIH0sCi0gICAgICAgIHsgRGly
ZWN0b3J5Um9sZSwgTlNBY2Nlc3NpYmlsaXR5TGlzdFJvbGUgfSwKLSAgICAgICAgeyBTY3JvbGxC
YXJSb2xlLCBOU0FjY2Vzc2liaWxpdHlTY3JvbGxCYXJSb2xlIH0sCi0gICAgICAgIHsgVmFsdWVJ
bmRpY2F0b3JSb2xlLCBOU0FjY2Vzc2liaWxpdHlWYWx1ZUluZGljYXRvclJvbGUgfSwKLSAgICAg
ICAgeyBJbWFnZVJvbGUsIE5TQWNjZXNzaWJpbGl0eUltYWdlUm9sZSB9LAotICAgICAgICB7IE1l
bnVCYXJSb2xlLCBOU0FjY2Vzc2liaWxpdHlNZW51QmFyUm9sZSB9LAotICAgICAgICB7IE1lbnVS
b2xlLCBOU0FjY2Vzc2liaWxpdHlNZW51Um9sZSB9LAotICAgICAgICB7IE1lbnVJdGVtUm9sZSwg
TlNBY2Nlc3NpYmlsaXR5TWVudUl0ZW1Sb2xlIH0sCi0gICAgICAgIHsgQ29sdW1uUm9sZSwgTlNB
Y2Nlc3NpYmlsaXR5Q29sdW1uUm9sZSB9LAotICAgICAgICB7IFJvd1JvbGUsIE5TQWNjZXNzaWJp
bGl0eVJvd1JvbGUgfSwKLSAgICAgICAgeyBUb29sYmFyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5VG9v
bGJhclJvbGUgfSwKLSAgICAgICAgeyBCdXN5SW5kaWNhdG9yUm9sZSwgTlNBY2Nlc3NpYmlsaXR5
QnVzeUluZGljYXRvclJvbGUgfSwKLSAgICAgICAgeyBQcm9ncmVzc0luZGljYXRvclJvbGUsIE5T
QWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yUm9sZSB9LAotICAgICAgICB7IFdpbmRvd1Jv
bGUsIE5TQWNjZXNzaWJpbGl0eVdpbmRvd1JvbGUgfSwKLSAgICAgICAgeyBEcmF3ZXJSb2xlLCBO
U0FjY2Vzc2liaWxpdHlEcmF3ZXJSb2xlIH0sCi0gICAgICAgIHsgU3lzdGVtV2lkZVJvbGUsIE5T
QWNjZXNzaWJpbGl0eVN5c3RlbVdpZGVSb2xlIH0sCi0gICAgICAgIHsgT3V0bGluZVJvbGUsIE5T
QWNjZXNzaWJpbGl0eU91dGxpbmVSb2xlIH0sCi0gICAgICAgIHsgSW5jcmVtZW50b3JSb2xlLCBO
U0FjY2Vzc2liaWxpdHlJbmNyZW1lbnRvclJvbGUgfSwKLSAgICAgICAgeyBCcm93c2VyUm9sZSwg
TlNBY2Nlc3NpYmlsaXR5QnJvd3NlclJvbGUgfSwKLSAgICAgICAgeyBDb21ib0JveFJvbGUsIE5T
QWNjZXNzaWJpbGl0eUNvbWJvQm94Um9sZSB9LAotICAgICAgICB7IFNwbGl0R3JvdXBSb2xlLCBO
U0FjY2Vzc2liaWxpdHlTcGxpdEdyb3VwUm9sZSB9LAotICAgICAgICB7IFNwbGl0dGVyUm9sZSwg
TlNBY2Nlc3NpYmlsaXR5U3BsaXR0ZXJSb2xlIH0sCi0gICAgICAgIHsgQ29sb3JXZWxsUm9sZSwg
TlNBY2Nlc3NpYmlsaXR5Q29sb3JXZWxsUm9sZSB9LAotICAgICAgICB7IEdyb3dBcmVhUm9sZSwg
TlNBY2Nlc3NpYmlsaXR5R3Jvd0FyZWFSb2xlIH0sCi0gICAgICAgIHsgU2hlZXRSb2xlLCBOU0Fj
Y2Vzc2liaWxpdHlTaGVldFJvbGUgfSwKLSAgICAgICAgeyBIZWxwVGFnUm9sZSwgTlNBY2Nlc3Np
YmlsaXR5SGVscFRhZ1JvbGUgfSwKLSAgICAgICAgeyBNYXR0ZVJvbGUsIE5TQWNjZXNzaWJpbGl0
eU1hdHRlUm9sZSB9LCAKLSAgICAgICAgeyBSdWxlclJvbGUsIE5TQWNjZXNzaWJpbGl0eVJ1bGVy
Um9sZSB9LAotICAgICAgICB7IFJ1bGVyTWFya2VyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5UnVsZXJN
YXJrZXJSb2xlIH0sCi0gICAgICAgIHsgTGlua1JvbGUsIE5TQWNjZXNzaWJpbGl0eUxpbmtSb2xl
IH0sCi0gICAgICAgIHsgRGlzY2xvc3VyZVRyaWFuZ2xlUm9sZSwgTlNBY2Nlc3NpYmlsaXR5RGlz
Y2xvc3VyZVRyaWFuZ2xlUm9sZSB9LAotICAgICAgICB7IEdyaWRSb2xlLCBOU0FjY2Vzc2liaWxp
dHlHcmlkUm9sZSB9LAotICAgICAgICB7IFdlYkNvcmVMaW5rUm9sZSwgTlNBY2Nlc3NpYmlsaXR5
TGlua1JvbGUgfSwgCi0gICAgICAgIHsgSW1hZ2VNYXBMaW5rUm9sZSwgTlNBY2Nlc3NpYmlsaXR5
TGlua1JvbGUgfSwKLSAgICAgICAgeyBJbWFnZU1hcFJvbGUsIEAiQVhJbWFnZU1hcCIgfSwKLSAg
ICAgICAgeyBMaXN0TWFya2VyUm9sZSwgQCJBWExpc3RNYXJrZXIiIH0sCi0gICAgICAgIHsgV2Vi
QXJlYVJvbGUsIEAiQVhXZWJBcmVhIiB9LAotICAgICAgICB7IFNlYW1sZXNzV2ViQXJlYVJvbGUs
IE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IEhlYWRpbmdSb2xlLCBAIkFY
SGVhZGluZyIgfSwKLSAgICAgICAgeyBMaXN0Qm94Um9sZSwgTlNBY2Nlc3NpYmlsaXR5TGlzdFJv
bGUgfSwKLSAgICAgICAgeyBMaXN0Qm94T3B0aW9uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5U3RhdGlj
VGV4dFJvbGUgfSwKLSAgICAgICAgeyBDZWxsUm9sZSwgTlNBY2Nlc3NpYmlsaXR5Q2VsbFJvbGUg
fSwKLSAgICAgICAgeyBUYWJsZUhlYWRlckNvbnRhaW5lclJvbGUsIE5TQWNjZXNzaWJpbGl0eUdy
b3VwUm9sZSB9LAotICAgICAgICB7IFJvd0hlYWRlclJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3Vw
Um9sZSB9LAotICAgICAgICB7IERlZmluaXRpb25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJv
bGUgfSwKLSAgICAgICAgeyBEZXNjcmlwdGlvbkxpc3REZXRhaWxSb2xlLCBOU0FjY2Vzc2liaWxp
dHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBEZXNjcmlwdGlvbkxpc3RUZXJtUm9sZSwgTlNBY2Nl
c3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgU2xpZGVyVGh1bWJSb2xlLCBOU0FjY2Vz
c2liaWxpdHlWYWx1ZUluZGljYXRvclJvbGUgfSwKLSAgICAgICAgeyBMYW5kbWFya0FwcGxpY2F0
aW9uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgTGFuZG1hcmtC
YW5uZXJSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBMYW5kbWFy
a0NvbXBsZW1lbnRhcnlSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAg
eyBMYW5kbWFya0NvbnRlbnRJbmZvUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0g
ICAgICAgIHsgTGFuZG1hcmtNYWluUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0g
ICAgICAgIHsgTGFuZG1hcmtOYXZpZ2F0aW9uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xl
IH0sCi0gICAgICAgIHsgTGFuZG1hcmtTZWFyY2hSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJv
bGUgfSwKLSAgICAgICAgeyBBcHBsaWNhdGlvbkFsZXJ0Um9sZSwgTlNBY2Nlc3NpYmlsaXR5R3Jv
dXBSb2xlIH0sCi0gICAgICAgIHsgQXBwbGljYXRpb25BbGVydERpYWxvZ1JvbGUsIE5TQWNjZXNz
aWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IEFwcGxpY2F0aW9uRGlhbG9nUm9sZSwgTlNB
Y2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgQXBwbGljYXRpb25Mb2dSb2xlLCBO
U0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBBcHBsaWNhdGlvbk1hcnF1ZWVS
b2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBBcHBsaWNhdGlvblN0
YXR1c1JvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IEFwcGxpY2F0
aW9uVGltZXJSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBEb2N1
bWVudFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IERvY3VtZW50
QXJ0aWNsZVJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IERvY3Vt
ZW50TWF0aFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IERvY3Vt
ZW50Tm90ZVJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IERvY3Vt
ZW50UmVnaW9uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgVXNl
ckludGVyZmFjZVRvb2x0aXBSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAg
ICAgeyBUYWJSb2xlLCBOU0FjY2Vzc2liaWxpdHlSYWRpb0J1dHRvblJvbGUgfSwKLSAgICAgICAg
eyBUYWJMaXN0Um9sZSwgTlNBY2Nlc3NpYmlsaXR5VGFiR3JvdXBSb2xlIH0sCi0gICAgICAgIHsg
VGFiUGFuZWxSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBUcmVl
Um9sZSwgTlNBY2Nlc3NpYmlsaXR5T3V0bGluZVJvbGUgfSwKLSAgICAgICAgeyBUcmVlSXRlbVJv
bGUsIE5TQWNjZXNzaWJpbGl0eVJvd1JvbGUgfSwKLSAgICAgICAgeyBMaXN0SXRlbVJvbGUsIE5T
QWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IFBhcmFncmFwaFJvbGUsIE5TQWNj
ZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IExhYmVsUm9sZSwgTlNBY2Nlc3NpYmls
aXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgRGl2Um9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBS
b2xlIH0sCi0gICAgICAgIHsgRm9ybVJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAot
ICAgICAgICB7IFNwaW5CdXR0b25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlJbmNyZW1lbnRvclJvbGUg
fSwKLSAgICAgICAgeyBGb290ZXJSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAg
ICAgICAgeyBUb2dnbGVCdXR0b25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlCdXR0b25Sb2xlIH0sCi0g
ICAgICAgIHsgQ2FudmFzUm9sZSwgTlNBY2Nlc3NpYmlsaXR5SW1hZ2VSb2xlIH0sCi0gICAgICAg
IHsgU1ZHUm9vdFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IExl
Z2VuZFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAotICAgICAgICB7IE1hdGhFbGVt
ZW50Um9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0KLSAgICB9OwotICAgIEFjY2Vzc2li
aWxpdHlSb2xlTWFwJiByb2xlTWFwID0gKm5ldyBBY2Nlc3NpYmlsaXR5Um9sZU1hcDsKLSAgICAK
LSAgICBjb25zdCB1bnNpZ25lZCBudW1Sb2xlcyA9IHNpemVvZihyb2xlcykgLyBzaXplb2Yocm9s
ZXNbMF0pOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Sb2xlczsgKytpKQotICAg
ICAgICByb2xlTWFwLnNldChyb2xlc1tpXS52YWx1ZSwgcm9sZXNbaV0uc3RyaW5nKTsKLSAgICBy
ZXR1cm4gcm9sZU1hcDsKLX0KLQotc3RhdGljIE5TU3RyaW5nKiByb2xlVmFsdWVUb05TU3RyaW5n
KEFjY2Vzc2liaWxpdHlSb2xlIHZhbHVlKQotewotICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgc3Rh
dGljIGNvbnN0IEFjY2Vzc2liaWxpdHlSb2xlTWFwJiByb2xlTWFwID0gY3JlYXRlQWNjZXNzaWJp
bGl0eVJvbGVNYXAoKTsKLSAgICByZXR1cm4gcm9sZU1hcC5nZXQodmFsdWUpOwotfQotCi0tIChO
U1N0cmluZyopcm9sZQotewotICAgIGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50KCkpCi0gICAg
ICAgIHJldHVybiBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZTpOU0FjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlXTsKLSAgICBBY2Nlc3NpYmlsaXR5Um9s
ZSByb2xlID0gbV9vYmplY3QtPnJvbGVWYWx1ZSgpOwotICAgIGlmIChyb2xlID09IENhbnZhc1Jv
bGUgJiYgbV9vYmplY3QtPmNhbnZhc0hhc0ZhbGxiYWNrQ29udGVudCgpKQotICAgICAgICByb2xl
ID0gR3JvdXBSb2xlOwotICAgIE5TU3RyaW5nKiBzdHJpbmcgPSByb2xlVmFsdWVUb05TU3RyaW5n
KHJvbGUpOwotICAgIGlmIChzdHJpbmcgIT0gbmlsKQotICAgICAgICByZXR1cm4gc3RyaW5nOwot
ICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlVbmtub3duUm9sZTsKLX0KLQotLSAoTlNTdHJpbmcq
KXN1YnJvbGUKLXsKLSAgICBpZiAobV9vYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpKQotICAgICAg
ICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5U2VjdXJlVGV4dEZpZWxkU3Vicm9sZTsKLSAgICBpZiAo
bV9vYmplY3QtPmlzU2VhcmNoRmllbGQoKSkKLSAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0
eVNlYXJjaEZpZWxkU3Vicm9sZTsKLSAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVu
dCgpKSB7Ci0gICAgICAgIE5TVmlldyogYXR0YWNoVmlldyA9IFtzZWxmIGF0dGFjaG1lbnRWaWV3
XTsKLSAgICAgICAgaWYgKFtbYXR0YWNoVmlldyBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNd
IGNvbnRhaW5zT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVN1YnJvbGVBdHRyaWJ1dGVdKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gW2F0dGFjaFZpZXcgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5T
QWNjZXNzaWJpbGl0eVN1YnJvbGVBdHRyaWJ1dGVdOwotICAgICAgICB9Ci0gICAgfQotICAgIAot
ICAgIGlmIChtX29iamVjdC0+aXNTcGluQnV0dG9uUGFydCgpKSB7Ci0gICAgICAgIGlmICh0b0Fj
Y2Vzc2liaWxpdHlTcGluQnV0dG9uUGFydChtX29iamVjdCktPmlzSW5jcmVtZW50b3IoKSkKLSAg
ICAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlJbmNyZW1lbnRBcnJvd1N1YnJvbGU7Ci0K
LSAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eURlY3JlbWVudEFycm93U3Vicm9sZTsKLSAg
ICB9Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc0ZpbGVVcGxvYWRCdXR0b24oKSkKLSAgICAg
ICAgcmV0dXJuIEAiQVhGaWxlVXBsb2FkQnV0dG9uIjsKLSAgICAKLSAgICBpZiAobV9vYmplY3Qt
PmlzVHJlZUl0ZW0oKSkKLSAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eU91dGxpbmVSb3dT
dWJyb2xlOwotICAgIAotICAgIGlmIChtX29iamVjdC0+aXNMaXN0KCkpIHsKLSAgICAgICAgQWNj
ZXNzaWJpbGl0eUxpc3QqIGxpc3RPYmplY3QgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5TGlz
dCo+KG1fb2JqZWN0KTsKLSAgICAgICAgaWYgKGxpc3RPYmplY3QtPmlzVW5vcmRlcmVkTGlzdCgp
IHx8IGxpc3RPYmplY3QtPmlzT3JkZXJlZExpc3QoKSkKLSAgICAgICAgICAgIHJldHVybiBOU0Fj
Y2Vzc2liaWxpdHlDb250ZW50TGlzdFN1YnJvbGU7Ci0gICAgICAgIGlmIChsaXN0T2JqZWN0LT5p
c0Rlc2NyaXB0aW9uTGlzdCgpKQotICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eURl
c2NyaXB0aW9uTGlzdFN1YnJvbGU7Ci0gICAgfQotICAgIAotICAgIC8vIEFSSUEgY29udGVudCBz
dWJyb2xlcy4KLSAgICBzd2l0Y2ggKG1fb2JqZWN0LT5yb2xlVmFsdWUoKSkgewotICAgICAgICBj
YXNlIExhbmRtYXJrQXBwbGljYXRpb25Sb2xlOgotICAgICAgICAgICAgcmV0dXJuIEAiQVhMYW5k
bWFya0FwcGxpY2F0aW9uIjsKLSAgICAgICAgY2FzZSBMYW5kbWFya0Jhbm5lclJvbGU6Ci0gICAg
ICAgICAgICByZXR1cm4gQCJBWExhbmRtYXJrQmFubmVyIjsKLSAgICAgICAgY2FzZSBMYW5kbWFy
a0NvbXBsZW1lbnRhcnlSb2xlOgotICAgICAgICAgICAgcmV0dXJuIEAiQVhMYW5kbWFya0NvbXBs
ZW1lbnRhcnkiOwotICAgICAgICAvLyBGb290ZXIgcm9sZXMgc2hvdWxkIGFwcGVhciBhcyBjb250
ZW50IGluZm8gdHlwZXMuCi0gICAgICAgIGNhc2UgRm9vdGVyUm9sZToKLSAgICAgICAgY2FzZSBM
YW5kbWFya0NvbnRlbnRJbmZvUm9sZToKLSAgICAgICAgICAgIHJldHVybiBAIkFYTGFuZG1hcmtD
b250ZW50SW5mbyI7Ci0gICAgICAgIGNhc2UgTGFuZG1hcmtNYWluUm9sZToKLSAgICAgICAgICAg
IHJldHVybiBAIkFYTGFuZG1hcmtNYWluIjsKLSAgICAgICAgY2FzZSBMYW5kbWFya05hdmlnYXRp
b25Sb2xlOgotICAgICAgICAgICAgcmV0dXJuIEAiQVhMYW5kbWFya05hdmlnYXRpb24iOwotICAg
ICAgICBjYXNlIExhbmRtYXJrU2VhcmNoUm9sZToKLSAgICAgICAgICAgIHJldHVybiBAIkFYTGFu
ZG1hcmtTZWFyY2giOwotICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQWxlcnRSb2xlOgotICAgICAg
ICAgICAgcmV0dXJuIEAiQVhBcHBsaWNhdGlvbkFsZXJ0IjsKLSAgICAgICAgY2FzZSBBcHBsaWNh
dGlvbkFsZXJ0RGlhbG9nUm9sZToKLSAgICAgICAgICAgIHJldHVybiBAIkFYQXBwbGljYXRpb25B
bGVydERpYWxvZyI7Ci0gICAgICAgIGNhc2UgQXBwbGljYXRpb25EaWFsb2dSb2xlOgotICAgICAg
ICAgICAgcmV0dXJuIEAiQVhBcHBsaWNhdGlvbkRpYWxvZyI7Ci0gICAgICAgIGNhc2UgQXBwbGlj
YXRpb25Mb2dSb2xlOgotICAgICAgICAgICAgcmV0dXJuIEAiQVhBcHBsaWNhdGlvbkxvZyI7Ci0g
ICAgICAgIGNhc2UgQXBwbGljYXRpb25NYXJxdWVlUm9sZToKLSAgICAgICAgICAgIHJldHVybiBA
IkFYQXBwbGljYXRpb25NYXJxdWVlIjsKLSAgICAgICAgY2FzZSBBcHBsaWNhdGlvblN0YXR1c1Jv
bGU6Ci0gICAgICAgICAgICByZXR1cm4gQCJBWEFwcGxpY2F0aW9uU3RhdHVzIjsKLSAgICAgICAg
Y2FzZSBBcHBsaWNhdGlvblRpbWVyUm9sZToKLSAgICAgICAgICAgIHJldHVybiBAIkFYQXBwbGlj
YXRpb25UaW1lciI7Ci0gICAgICAgIGNhc2UgRG9jdW1lbnRSb2xlOgotICAgICAgICAgICAgcmV0
dXJuIEAiQVhEb2N1bWVudCI7Ci0gICAgICAgIGNhc2UgRG9jdW1lbnRBcnRpY2xlUm9sZToKLSAg
ICAgICAgICAgIHJldHVybiBAIkFYRG9jdW1lbnRBcnRpY2xlIjsKLSAgICAgICAgY2FzZSBEb2N1
bWVudE1hdGhSb2xlOgotICAgICAgICAgICAgcmV0dXJuIEAiQVhEb2N1bWVudE1hdGgiOwotICAg
ICAgICBjYXNlIERvY3VtZW50Tm90ZVJvbGU6Ci0gICAgICAgICAgICByZXR1cm4gQCJBWERvY3Vt
ZW50Tm90ZSI7Ci0gICAgICAgIGNhc2UgRG9jdW1lbnRSZWdpb25Sb2xlOgotICAgICAgICAgICAg
cmV0dXJuIEAiQVhEb2N1bWVudFJlZ2lvbiI7Ci0gICAgICAgIGNhc2UgVXNlckludGVyZmFjZVRv
b2x0aXBSb2xlOgotICAgICAgICAgICAgcmV0dXJuIEAiQVhVc2VySW50ZXJmYWNlVG9vbHRpcCI7
Ci0gICAgICAgIGNhc2UgVGFiUGFuZWxSb2xlOgotICAgICAgICAgICAgcmV0dXJuIEAiQVhUYWJQ
YW5lbCI7Ci0gICAgICAgIGNhc2UgRGVmaW5pdGlvblJvbGU6Ci0gICAgICAgICAgICByZXR1cm4g
QCJBWERlZmluaXRpb24iOwotICAgICAgICBjYXNlIERlc2NyaXB0aW9uTGlzdFRlcm1Sb2xlOgot
ICAgICAgICAgICAgcmV0dXJuIEAiQVhUZXJtIjsKLSAgICAgICAgY2FzZSBEZXNjcmlwdGlvbkxp
c3REZXRhaWxSb2xlOgotICAgICAgICAgICAgcmV0dXJuIEAiQVhEZXNjcmlwdGlvbiI7Ci0gICAg
ICAgIC8vIERlZmF1bHQgZG9lc24ndCByZXR1cm4gYW55dGhpbmcsIHNvIHJvbGVzIGRlZmluZWQg
YmVsb3cgY2FuIGJlIGNob3Nlbi4KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICAKLSAgICBpZiAobV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IE1hdGhFbGVt
ZW50Um9sZSkgewotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aEZyYWN0aW9uKCkpCi0gICAg
ICAgICAgICByZXR1cm4gQCJBWE1hdGhGcmFjdGlvbiI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+
aXNNYXRoRmVuY2VkKCkpCi0gICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhGZW5jZWQiOwotICAg
ICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkpCi0gICAgICAg
ICAgICByZXR1cm4gQCJBWE1hdGhTdWJzY3JpcHRTdXBlcnNjcmlwdCI7Ci0gICAgICAgIGlmICht
X29iamVjdC0+aXNNYXRoUm93KCkpCi0gICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhSb3ciOwot
ICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFVuZGVyT3ZlcigpKQotICAgICAgICAgICAgcmV0
dXJuIEAiQVhNYXRoVW5kZXJPdmVyIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhTcXVh
cmVSb290KCkpCi0gICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhTcXVhcmVSb290IjsKLSAgICAg
ICAgaWYgKG1fb2JqZWN0LT5pc01hdGhSb290KCkpCi0gICAgICAgICAgICByZXR1cm4gQCJBWE1h
dGhSb290IjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhUZXh0KCkpCi0gICAgICAgICAg
ICByZXR1cm4gQCJBWE1hdGhUZXh0IjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhOdW1i
ZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aE51bWJlciI7Ci0gICAgICAgIGlmICht
X29iamVjdC0+aXNNYXRoSWRlbnRpZmllcigpKQotICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRo
SWRlbnRpZmllciI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoVGFibGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBAIkFYTWF0aFRhYmxlIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01h
dGhUYWJsZVJvdygpKQotICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoVGFibGVSb3ciOwotICAg
ICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFRhYmxlQ2VsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IEAiQVhNYXRoVGFibGVDZWxsIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhGZW5jZU9w
ZXJhdG9yKCkpCi0gICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhGZW5jZU9wZXJhdG9yIjsKLSAg
ICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhTZXBhcmF0b3JPcGVyYXRvcigpKQotICAgICAgICAg
ICAgcmV0dXJuIEAiQVhNYXRoU2VwYXJhdG9yT3BlcmF0b3IiOwotICAgICAgICBpZiAobV9vYmpl
Y3QtPmlzTWF0aE9wZXJhdG9yKCkpCi0gICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhPcGVyYXRv
ciI7Ci0gICAgfQotICAgIAotICAgIGlmIChtX29iamVjdC0+aXNNZWRpYVRpbWVsaW5lKCkpCi0g
ICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlUaW1lbGluZVN1YnJvbGU7Ci0KICAgICByZXR1
cm4gbmlsOwogfQogCi0tIChOU1N0cmluZyopcm9sZURlc2NyaXB0aW9uCistIChBY2Nlc3NpYmls
aXR5T2JqZWN0KilhY2Nlc3NpYmlsaXR5T2JqZWN0CiB7Ci0gICAgaWYgKCFtX29iamVjdCkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLQotICAgIC8vIGF0dGFjaG1lbnRzIGhhdmUgdGhlIEFYSW1hZ2Ug
cm9sZSwgYnV0IGEgZGlmZmVyZW50IHN1YnJvbGUKLSAgICBpZiAobV9vYmplY3QtPmlzQXR0YWNo
bWVudCgpKQotICAgICAgICByZXR1cm4gW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0cmlidXRl
XTsKLSAgICAKLSAgICBOU1N0cmluZyogYXhSb2xlID0gW3NlbGYgcm9sZV07Ci0gICAgCi0gICAg
aWYgKFtheFJvbGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZV0pIHsK
LSAgICAgICAgc3dpdGNoIChtX29iamVjdC0+cm9sZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlw
dGlvbihOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUsIFtzZWxmIHN1YnJvbGVdKTsKLSAgICAgICAg
ICAgIGNhc2UgTGFuZG1hcmtBcHBsaWNhdGlvblJvbGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBTGFuZG1hcmtBcHBsaWNhdGlvbiIpOwotICAg
ICAgICAgICAgY2FzZSBMYW5kbWFya0Jhbm5lclJvbGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBTGFuZG1hcmtCYW5uZXIiKTsKLSAgICAgICAg
ICAgIGNhc2UgTGFuZG1hcmtDb21wbGVtZW50YXJ5Um9sZToKLSAgICAgICAgICAgICAgICByZXR1
cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFMYW5kbWFya0NvbXBsZW1lbnRhcnkiKTsK
LSAgICAgICAgICAgIGNhc2UgTGFuZG1hcmtDb250ZW50SW5mb1JvbGU6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBTGFuZG1hcmtDb250ZW50SW5m
byIpOwotICAgICAgICAgICAgY2FzZSBMYW5kbWFya01haW5Sb2xlOgotICAgICAgICAgICAgICAg
IHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUxhbmRtYXJrTWFpbiIpOwotICAg
ICAgICAgICAgY2FzZSBMYW5kbWFya05hdmlnYXRpb25Sb2xlOgotICAgICAgICAgICAgICAgIHJl
dHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUxhbmRtYXJrTmF2aWdhdGlvbiIpOwot
ICAgICAgICAgICAgY2FzZSBMYW5kbWFya1NlYXJjaFJvbGU6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBTGFuZG1hcmtTZWFyY2giKTsKLSAgICAg
ICAgICAgIGNhc2UgQXBwbGljYXRpb25BbGVydFJvbGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBQXBwbGljYXRpb25BbGVydCIpOwotICAgICAg
ICAgICAgY2FzZSBBcHBsaWNhdGlvbkFsZXJ0RGlhbG9nUm9sZToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFBcHBsaWNhdGlvbkFsZXJ0RGlhbG9n
Iik7Ci0gICAgICAgICAgICBjYXNlIEFwcGxpY2F0aW9uRGlhbG9nUm9sZToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFBcHBsaWNhdGlvbkRpYWxv
ZyIpOwotICAgICAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkxvZ1JvbGU6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBQXBwbGljYXRpb25Mb2ciKTsK
LSAgICAgICAgICAgIGNhc2UgQXBwbGljYXRpb25NYXJxdWVlUm9sZToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFBcHBsaWNhdGlvbk1hcnF1ZWUi
KTsKLSAgICAgICAgICAgIGNhc2UgQXBwbGljYXRpb25TdGF0dXNSb2xlOgotICAgICAgICAgICAg
ICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUFwcGxpY2F0aW9uU3RhdHVz
Iik7Ci0gICAgICAgICAgICBjYXNlIEFwcGxpY2F0aW9uVGltZXJSb2xlOgotICAgICAgICAgICAg
ICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUFwcGxpY2F0aW9uVGltZXIi
KTsKLSAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRSb2xlOgotICAgICAgICAgICAgICAgIHJldHVy
biBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQURvY3VtZW50Iik7Ci0gICAgICAgICAgICBj
YXNlIERvY3VtZW50QXJ0aWNsZVJvbGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFYQVJJQUNv
bnRlbnRHcm91cFRleHQoQCJBUklBRG9jdW1lbnRBcnRpY2xlIik7Ci0gICAgICAgICAgICBjYXNl
IERvY3VtZW50TWF0aFJvbGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRH
cm91cFRleHQoQCJBUklBRG9jdW1lbnRNYXRoIik7Ci0gICAgICAgICAgICBjYXNlIERvY3VtZW50
Tm90ZVJvbGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQo
QCJBUklBRG9jdW1lbnROb3RlIik7Ci0gICAgICAgICAgICBjYXNlIERvY3VtZW50UmVnaW9uUm9s
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFE
b2N1bWVudFJlZ2lvbiIpOwotICAgICAgICAgICAgY2FzZSBVc2VySW50ZXJmYWNlVG9vbHRpcFJv
bGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklB
VXNlckludGVyZmFjZVRvb2x0aXAiKTsKLSAgICAgICAgICAgIGNhc2UgVGFiUGFuZWxSb2xlOgot
ICAgICAgICAgICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQVRhYlBh
bmVsIik7Ci0gICAgICAgICAgICBjYXNlIERlZmluaXRpb25Sb2xlOgotICAgICAgICAgICAgICAg
IHJldHVybiBBWERlZmluaXRpb25UZXh0KCk7Ci0gICAgICAgICAgICBjYXNlIERlc2NyaXB0aW9u
TGlzdFRlcm1Sb2xlOgotICAgICAgICAgICAgICAgIHJldHVybiBBWERlc2NyaXB0aW9uTGlzdFRl
cm1UZXh0KCk7Ci0gICAgICAgICAgICBjYXNlIERlc2NyaXB0aW9uTGlzdERldGFpbFJvbGU6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIEFYRGVzY3JpcHRpb25MaXN0RGV0YWlsVGV4dCgpOwotICAg
ICAgICAgICAgY2FzZSBGb290ZXJSb2xlOgotICAgICAgICAgICAgICAgIHJldHVybiBBWEZvb3Rl
clJvbGVEZXNjcmlwdGlvblRleHQoKTsKLSAgICAgICAgfQotICAgIH0gICAgICAgIAotICAgIAot
ICAgIGlmIChbYXhSb2xlIGlzRXF1YWxUb1N0cmluZzpAIkFYV2ViQXJlYSJdKQotICAgICAgICBy
ZXR1cm4gQVhXZWJBcmVhVGV4dCgpOwotICAgIAotICAgIGlmIChbYXhSb2xlIGlzRXF1YWxUb1N0
cmluZzpAIkFYTGluayJdKQotICAgICAgICByZXR1cm4gQVhMaW5rVGV4dCgpOwotICAgIAotICAg
IGlmIChbYXhSb2xlIGlzRXF1YWxUb1N0cmluZzpAIkFYTGlzdE1hcmtlciJdKQotICAgICAgICBy
ZXR1cm4gQVhMaXN0TWFya2VyVGV4dCgpOwotICAgIAotICAgIGlmIChbYXhSb2xlIGlzRXF1YWxU
b1N0cmluZzpAIkFYSW1hZ2VNYXAiXSkKLSAgICAgICAgcmV0dXJuIEFYSW1hZ2VNYXBUZXh0KCk7
Ci0KLSAgICBpZiAoW2F4Um9sZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEhlYWRpbmciXSkKLSAgICAg
ICAgcmV0dXJuIEFYSGVhZGluZ1RleHQoKTsKLQotICAgIGlmIChtX29iamVjdC0+aXNGaWxlVXBs
b2FkQnV0dG9uKCkpCi0gICAgICAgIHJldHVybiBBWEZpbGVVcGxvYWRCdXR0b25UZXh0KCk7Ci0g
ICAgCi0gICAgLy8gQXBwS2l0IGFsc28gcmV0dXJucyBBWFRhYiBmb3IgdGhlIHJvbGUgZGVzY3Jp
cHRpb24gZm9yIGEgdGFiIGl0ZW0uCi0gICAgaWYgKG1fb2JqZWN0LT5pc1RhYkl0ZW0oKSkKLSAg
ICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbihAIkFYVGFiIiwgbmls
KTsKLSAgICAKLSAgICAvLyBXZSBzaG91bGQgdHJ5IHRoZSBzeXN0ZW0gZGVmYXVsdCByb2xlIGRl
c2NyaXB0aW9uIGZvciBhbGwgb3RoZXIgcm9sZXMuCi0gICAgLy8gSWYgd2UgZ2V0IHRoZSBzYW1l
IHN0cmluZyBiYWNrLCB0aGVuIGFzIGEgbGFzdCByZXNvcnQsIHJldHVybiB1bmtub3duLgotICAg
IE5TU3RyaW5nKiBkZWZhdWx0Um9sZURlc2NyaXB0aW9uID0gTlNBY2Nlc3NpYmlsaXR5Um9sZURl
c2NyaXB0aW9uKGF4Um9sZSwgW3NlbGYgc3Vicm9sZV0pOwotICAgIAotICAgIC8vIE9uIGVhcmxp
ZXIgTWFjIHZlcnNpb25zIChMaW9uKSwgdXNpbmcgYSBub24tc3RhbmRhcmQgc3Vicm9sZSB3b3Vs
ZCByZXN1bHQgaW4gYSByb2xlIGRlc2NyaXB0aW9uCi0gICAgLy8gYmVpbmcgcmV0dXJuZWQgdGhh
dCBsb29rZWQgbGlrZSBBWFJvbGU6QVhTdWJyb2xlLiBUbyBtYWtlIGFsbCBwbGF0Zm9ybXMgaGF2
ZSB0aGUgc2FtZSByb2xlIGRlc2NyaXB0aW9ucwotICAgIC8vIHdlIHNob3VsZCBmYWxsYmFjayBv
biBhIHJvbGUgZGVzY3JpcHRpb24gaWdub3JpbmcgdGhlIHN1YnJvbGUgaW4gdGhlc2UgY2FzZXMu
Ci0gICAgaWYgKFtkZWZhdWx0Um9sZURlc2NyaXB0aW9uIGlzRXF1YWxUb1N0cmluZzpbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOiVAIiwgYXhSb2xlLCBbc2VsZiBzdWJyb2xlXV1dKQot
ICAgICAgICBkZWZhdWx0Um9sZURlc2NyaXB0aW9uID0gTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2Ny
aXB0aW9uKGF4Um9sZSwgbmlsKTsKLSAgICAKLSAgICBpZiAoIVtkZWZhdWx0Um9sZURlc2NyaXB0
aW9uIGlzRXF1YWxUb1N0cmluZzpheFJvbGVdKQotICAgICAgICByZXR1cm4gZGVmYXVsdFJvbGVE
ZXNjcmlwdGlvbjsKLQotICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb24o
TlNBY2Nlc3NpYmlsaXR5VW5rbm93blJvbGUsIG5pbCk7CisgICAgcmV0dXJuIG1fb2JqZWN0Owog
fQogCi0tIChpZClzY3JvbGxWaWV3UGFyZW50Ci17Ci0gICAgaWYgKCFtX29iamVjdCB8fCAhbV9v
YmplY3QtPmlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICAKLSAgICAvLyBJZiB0aGlzIHNjcm9sbCB2aWV3IHByb3ZpZGVzIGl0J3MgcGFyZW50IG9i
amVjdCAoYmVjYXVzZSBpdCdzIGEgc3ViLWZyYW1lKSwgdGhlbgotICAgIC8vIHdlIHNob3VsZCBu
b3QgZmluZCB0aGUgcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudC4KLSAgICBpZiAobV9vYmplY3Qt
PnBhcmVudE9iamVjdCgpKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIEFjY2Vzc2li
aWxpdHlTY3JvbGxWaWV3KiBzY3JvbGxWaWV3ID0gdG9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyht
X29iamVjdCk7Ci0gICAgU2Nyb2xsVmlldyogc2Nyb2xsID0gc2Nyb2xsVmlldy0+c2Nyb2xsVmll
dygpOwotICAgIGlmICghc2Nyb2xsKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIGlm
IChzY3JvbGwtPnBsYXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxp
dHlVbmlnbm9yZWRBbmNlc3RvcihzY3JvbGwtPnBsYXRmb3JtV2lkZ2V0KCkpOwotCi0gICAgcmV0
dXJuIFtzZWxmIHJlbW90ZUFjY2Vzc2liaWxpdHlQYXJlbnRPYmplY3RdOwotfQotCiAvLyBGSVhN
RTogRGlmZmVyZW50IGtpbmRzIG9mIGVsZW1lbnRzIGFyZSBwdXR0aW5nIHRoZSB0aXRsZSB0YWcg
dG8gdXNlIGluIGRpZmZlcmVudAogLy8gQVggZmllbGRzLiBUaGlzIHNob3VsZCBiZSByZWN0aWZp
ZWQsIGJ1dCBpbiB0aGUgaW5pdGlhbCBwYXRjaCBJIHdhbnQgdG8gYWNoaWV2ZQogLy8gcGFyaXR5
IHdpdGggZXhpc3RpbmcgYmVoYXZpb3IuCkBAIC0yMDMzLDE1NDMgKzIyNiw2IEBACiAgICAgcmV0
dXJuIFtOU1N0cmluZyBzdHJpbmddOwogfQogCi0vLyBGSVhNRTogc3BsaXQgdXAgdGhpcyBmdW5j
dGlvbiBpbiBhIGJldHRlciB3YXkuICAKLS8vIHN1Z2dlc3Rpb25zOiBVc2UgYSBoYXNoIHRhYmxl
IHRoYXQgbWFwcyBhdHRyaWJ1dGUgbmFtZXMgdG8gZnVuY3Rpb24gY2FsbHMsCi0vLyBvciBtYXli
ZSBwb2ludGVycyB0byBtZW1iZXIgZnVuY3Rpb25zCi0tIChpZClhY2Nlc3NpYmlsaXR5QXR0cmli
dXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lCi17Ci0gICAgaWYgKCFbc2VsZiB1cGRh
dGVPYmplY3RCYWNraW5nU3RvcmVdKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVJvbGVBdHRy
aWJ1dGVdKQotICAgICAgICByZXR1cm4gW3NlbGYgcm9sZV07Ci0KLSAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTdWJyb2xlQXR0cmlidXRlXSkK
LSAgICAgICAgcmV0dXJuIFtzZWxmIHN1YnJvbGVdOwotCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0cmlidXRl
XSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIHJvbGVEZXNjcmlwdGlvbl07Ci0KLSAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlQYXJlbnRBdHRyaWJ1
dGVdKSB7Ci0KLSAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiB0aGUgcGFyZW50IG9mIHRoZSBB
WFdlYkFyZWEsIGlmIHRoaXMgaXMgYSB3ZWIgYXJlYS4KLSAgICAgICAgaWQgc2Nyb2xsVmlld1Bh
cmVudCA9IFtzZWxmIHNjcm9sbFZpZXdQYXJlbnRdOwotICAgICAgICBpZiAoc2Nyb2xsVmlld1Bh
cmVudCkKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxWaWV3UGFyZW50OwotICAgICAgICAKLSAg
ICAgICAgLy8gVHJlZSBpdGVtIChjaGFuZ2VkIHRvIEFYUm93cykgY2FuIG9ubHkgcmVwb3J0IHRo
ZSB0cmVlIChBWE91dGxpbmUpIGFzIGl0cyBwYXJlbnQuCi0gICAgICAgIGlmIChtX29iamVjdC0+
aXNUcmVlSXRlbSgpKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQg
PSBtX29iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7Ci0gICAgICAgICAgICB3aGlsZSAo
cGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNUcmVlKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKLSAgICAgICAgICAgICAgICBw
YXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQg
PSBtX29iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7Ci0gICAgICAgIGlmICghcGFyZW50
KQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgICAgICAvLyBJbiBXZWJLaXQxLCB0aGUg
c2Nyb2xsIHZpZXcgaXMgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbSAodGhlIGF0dGFjaG1lbnQgdmll
dyksIHNvIHRoZSBwYXJlbnQKLSAgICAgICAgLy8gc2hvdWxkIGJlIHJlcG9ydGVkIGRpcmVjdGx5
IGFzIHN1Y2guCi0gICAgICAgIGlmIChtX29iamVjdC0+aXNXZWJBcmVhKCkgJiYgcGFyZW50LT5p
c0F0dGFjaG1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBbcGFyZW50LT53cmFwcGVyKCkgYXR0
YWNobWVudFZpZXddOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigp
OwotICAgIH0KLQotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNj
ZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSkgewotICAgICAgICBpZiAobV9vYmplY3QtPmNo
aWxkcmVuKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBOU0FycmF5KiBjaGlsZHJlbiA9IFtz
ZWxmIHJlbmRlcldpZGdldENoaWxkcmVuXTsKLSAgICAgICAgICAgIGlmIChjaGlsZHJlbiAhPSBu
aWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gVGhlIHRyZWUncyAoQVhPdXRsaW5lKSBjaGlsZHJlbiBhcmUgc3VwcG9zZWQgdG8gYmUg
aXRzIHJvd3MgYW5kIGNvbHVtbnMuCi0gICAgICAgIC8vIFRoZSBBUklBIHNwZWMgZG9lc24ndCBo
YXZlIGNvbHVtbnMsIHNvIHdlIGp1c3QgbmVlZCByb3dzLgotICAgICAgICBpZiAobV9vYmplY3Qt
PmlzVHJlZSgpKQotICAgICAgICAgICAgcmV0dXJuIFtzZWxmIGFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlSb3dzQXR0cmlidXRlXTsKLQotICAgICAgICAvLyBBIHRy
ZWUgaXRlbSBzaG91bGQgb25seSBleHBvc2UgaXRzIGNvbnRlbnQgYXMgaXRzIGNoaWxkcmVuIChu
b3QgaXRzIHJvd3MpCi0gICAgICAgIGlmIChtX29iamVjdC0+aXNUcmVlSXRlbSgpKSB7Ci0gICAg
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
Y29udGVudENvcHk7Ci0gICAgICAgICAgICBtX29iamVjdC0+YXJpYVRyZWVJdGVtQ29udGVudChj
b250ZW50Q29weSk7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShjb250ZW50
Q29weSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0Fy
cmF5KG1fb2JqZWN0LT5jaGlsZHJlbigpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDaGlsZHJlbkF0
dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc0xpc3RCb3goKSkgewotICAgICAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNl
bGVjdGVkQ2hpbGRyZW5Db3B5OwotICAgICAgICAgICAgbV9vYmplY3QtPnNlbGVjdGVkQ2hpbGRy
ZW4oc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05T
QXJyYXkoc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
IE5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGlsZHJlbkF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYg
KG1fb2JqZWN0LT5pc0xpc3RCb3goKSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHZpc2libGVDaGlsZHJlbkNvcHk7Ci0gICAg
ICAgICAgICBtX29iamVjdC0+dmlzaWJsZUNoaWxkcmVuKHZpc2libGVDaGlsZHJlbkNvcHkpOwot
ICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkodmlzaWJsZUNoaWxkcmVuQ29weSk7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTGlzdCgpKQotICAgICAg
ICAgICAgcmV0dXJuIFtzZWxmIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2li
aWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV07Ci0KLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0g
ICAgCi0gICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc1dlYkFyZWEoKSkgewotICAgICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMaW5rVUlFbGVtZW50cyJdKSB7Ci0g
ICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgbGlua3M7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Kj4obV9vYmplY3QpLT5nZXREb2N1bWVudExpbmtzKGxpbmtzKTsKLSAgICAgICAgICAgIHJl
dHVybiBjb252ZXJ0VG9OU0FycmF5KGxpbmtzKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMb2FkZWQiXSkKLSAgICAgICAgICAgIHJl
dHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmlzTG9hZGVkKCldOwotICAg
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMYXlvdXRDb3VudCJd
KQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Om1fb2JqZWN0LT5s
YXlvdXRDb3VudCgpXTsKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlMb2FkaW5nUHJvZ3Jlc3NBdHRyaWJ1dGVdKQotICAgICAgICAgICAg
cmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOm1fb2JqZWN0LT5lc3RpbWF0ZWRMb2Fk
aW5nUHJvZ3Jlc3MoKV07Ci0gICAgfQotICAgIAotICAgIGlmIChtX29iamVjdC0+aXNUZXh0Q29u
dHJvbCgpKSB7Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5T
QWNjZXNzaWJpbGl0eU51bWJlck9mQ2hhcmFjdGVyc0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAg
IGludCBsZW5ndGggPSBtX29iamVjdC0+dGV4dExlbmd0aCgpOwotICAgICAgICAgICAgaWYgKGxl
bmd0aCA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgICAgIHJldHVy
biBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50Omxlbmd0aF07Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5
U2VsZWN0ZWRUZXh0QXR0cmlidXRlXSkgewotICAgICAgICAgICAgU3RyaW5nIHNlbGVjdGVkVGV4
dCA9IG1fb2JqZWN0LT5zZWxlY3RlZFRleHQoKTsKLSAgICAgICAgICAgIGlmIChzZWxlY3RlZFRl
eHQuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgICAgIHJl
dHVybiAoTlNTdHJpbmcqKXNlbGVjdGVkVGV4dDsKLSAgICAgICAgfQotICAgICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRS
YW5nZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9
IG1fb2JqZWN0LT5zZWxlY3RlZFRleHRSYW5nZSgpOwotICAgICAgICAgICAgaWYgKHRleHRSYW5n
ZS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmFu
Z2U6TlNNYWtlUmFuZ2UoMCwgMCldOwotICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVl
V2l0aFJhbmdlOk5TTWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0aCld
OwotICAgICAgICB9Ci0gICAgICAgIC8vIFRPRE86IEdldCBhY3R1YWwgdmlzaWJsZSByYW5nZS4g
PHJkYXI6Ly9wcm9ibGVtLzQ3MTIxMDE+Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0
ZV0pCi0gICAgICAgICAgICByZXR1cm4gbV9vYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpID8gbmls
IDogW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdlKDAsIG1fb2JqZWN0LT50ZXh0
TGVuZ3RoKCkpXTsKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzog
TlNBY2Nlc3NpYmlsaXR5SW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyQXR0cmlidXRlXSkgewotICAg
ICAgICAgICAgLy8gaWYgc2VsZWN0aW9uRW5kID4gMCwgdGhlbiB0aGVyZSBpcyBzZWxlY3RlZCB0
ZXh0IGFuZCB0aGlzIHF1ZXN0aW9uIHNob3VsZCBub3QgYmUgYW5zd2VyZWQKLSAgICAgICAgICAg
IGlmIChtX29iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkgfHwgbV9vYmplY3QtPnNlbGVjdGlvbkVu
ZCgpID4gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBmb2N1c2VkT2JqZWN0ID0gbV9vYmplY3QtPmZvY3VzZWRVSUVsZW1l
bnQoKTsKLSAgICAgICAgICAgIGlmIChmb2N1c2VkT2JqZWN0ICE9IG1fb2JqZWN0KQotICAgICAg
ICAgICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBmb2N1
c2VkUG9zaXRpb24gPSBmb2N1c2VkT2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChmb2N1
c2VkT2JqZWN0LT5zZWxlY3Rpb25TdGFydCgpLCB0cnVlKTsKLSAgICAgICAgICAgIGludCBsaW5l
TnVtYmVyID0gbV9vYmplY3QtPmxpbmVGb3JQb3NpdGlvbihmb2N1c2VkUG9zaXRpb24pOwotICAg
ICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBuaWw7
Ci0KLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpsaW5lTnVtYmVy
XTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlVUkxBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEtVUkwg
dXJsID0gbV9vYmplY3QtPnVybCgpOwotICAgICAgICBpZiAodXJsLmlzTnVsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgcmV0dXJuIChOU1VSTCopdXJsOwotICAgIH0KLQot
ICAgIGlmIChtX29iamVjdC0+aXNTcGluQnV0dG9uKCkpIHsKLSAgICAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmNyZW1lbnRCdXR0b25BdHRy
aWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIHRvQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24obV9v
YmplY3QpLT5pbmNyZW1lbnRCdXR0b24oKS0+d3JhcHBlcigpOwotICAgICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURlY3JlbWVudEJ1dHRvbkF0
dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gdG9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbiht
X29iamVjdCktPmRlY3JlbWVudEJ1dHRvbigpLT53cmFwcGVyKCk7Ci0gICAgfQotICAgIAotICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhWaXNpdGVkIl0pCi0gICAg
ICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IG1fb2JqZWN0LT5pc1Zpc2l0ZWQo
KV07Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nl
c3NpYmlsaXR5VGl0bGVBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNBdHRh
Y2htZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChbW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nl
c3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdIGNvbnRhaW5zT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVRp
dGxlQXR0cmlidXRlXSkgCi0gICAgICAgICAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50
Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVRpdGxlQXR0
cmlidXRlXTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFtzZWxmIGFjY2Vz
c2liaWxpdHlUaXRsZV07Ci0gICAgfQotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRlXSkgewotICAg
ICAgICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoW1tb
c2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSBjb250YWlu
c09iamVjdDpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV0pCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRlXTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gW3NlbGYgYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uXTsKLSAgICB9Ci0K
LSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlW
YWx1ZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkg
ewotICAgICAgICAgICAgaWYgKFtbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVOYW1lc10gY29udGFpbnNPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1
dGVdKSAKLSAgICAgICAgICAgICAgICByZXR1cm4gW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nl
c3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNSYW5nZVZhbHVlKCkpCi0g
ICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDptX29iamVjdC0+dmFs
dWVGb3JSYW5nZSgpXTsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBTbGlk
ZXJUaHVtYlJvbGUpCi0gICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9h
dDptX29iamVjdC0+cGFyZW50T2JqZWN0KCktPnZhbHVlRm9yUmFuZ2UoKV07Ci0gICAgICAgIGlm
IChtX29iamVjdC0+aXNIZWFkaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51
bWJlcldpdGhJbnQ6bV9vYmplY3QtPmhlYWRpbmdMZXZlbCgpXTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChtX29iamVjdC0+aXNDaGVja2JveE9yUmFkaW8oKSkgewotICAgICAgICAgICAgc3dpdGNo
IChtX29iamVjdC0+Y2hlY2tib3hPclJhZGlvVmFsdWUoKSkgewotICAgICAgICAgICAgY2FzZSBC
dXR0b25TdGF0ZU9mZjoKLSAgICAgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6MF07Ci0gICAgICAgICAgICBjYXNlIEJ1dHRvblN0YXRlT246Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OjFdOwotICAgICAgICAgICAgY2FzZSBC
dXR0b25TdGF0ZU1peGVkOgotICAgICAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aEludDoyXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIHJhZGlv
IGdyb3VwcyByZXR1cm4gdGhlIHNlbGVjdGVkIHJhZGlvIGJ1dHRvbiBhcyB0aGUgQVhWYWx1ZQot
ICAgICAgICBpZiAobV9vYmplY3QtPmlzUmFkaW9Hcm91cCgpKSB7Ci0gICAgICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiByYWRpb0J1dHRvbiA9IG1fb2JqZWN0LT5zZWxlY3RlZFJhZGlvQnV0
dG9uKCk7Ci0gICAgICAgICAgICBpZiAoIXJhZGlvQnV0dG9uKQotICAgICAgICAgICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgICAgICAgICByZXR1cm4gcmFkaW9CdXR0b24tPndyYXBwZXIoKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RhYkxpc3QoKSkgewot
ICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogdGFiSXRlbSA9IG1fb2JqZWN0LT5zZWxl
Y3RlZFRhYkl0ZW0oKTsKLSAgICAgICAgICAgIGlmICghdGFiSXRlbSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbmlsOwotICAgICAgICAgICAgcmV0dXJuIHRhYkl0ZW0tPndyYXBwZXIoKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RhYkl0ZW0oKSkKLSAg
ICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX29iamVjdC0+aXNTZWxl
Y3RlZCgpXTsKLQotICAgICAgICBpZiAobV9vYmplY3QtPmlzQ29sb3JXZWxsKCkpIHsKLSAgICAg
ICAgICAgIGludCByLCBnLCBiOwotICAgICAgICAgICAgbV9vYmplY3QtPmNvbG9yVmFsdWUociwg
ZywgYik7Ci0gICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJy
Z2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIsIHIgLyAyNTUuLCBnIC8gMjU1LiwgYiAvIDI1NS5dOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbV9vYmplY3QtPnN0cmluZ1ZhbHVl
KCk7Ci0gICAgfQotCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNB
Y2Nlc3NpYmlsaXR5TWluVmFsdWVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVy
IG51bWJlcldpdGhGbG9hdDptX29iamVjdC0+bWluVmFsdWVGb3JSYW5nZSgpXTsKLQotICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eU1heFZhbHVl
QXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6bV9v
YmplY3QtPm1heFZhbHVlRm9yUmFuZ2UoKV07Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlIZWxwQXR0cmlidXRlXSkKLSAgICAgICAgcmV0
dXJuIFtzZWxmIGFjY2Vzc2liaWxpdHlIZWxwVGV4dF07Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRlXSkKLSAg
ICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDogbV9vYmplY3QtPmlzRm9jdXNl
ZCgpXTsKLQotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNz
aWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJl
cldpdGhCb29sOiBtX29iamVjdC0+aXNFbmFibGVkKCldOwotCi0gICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZV0pIHsKLSAg
ICAgICAgSW50U2l6ZSBzID0gbV9vYmplY3QtPnBpeGVsU25hcHBlZFNpemUoKTsKLSAgICAgICAg
cmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFNpemU6IE5TTWFrZVNpemUocy53aWR0aCgpLCBzLmhl
aWdodCgpKV07Ci0gICAgfQotCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzogTlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW3Nl
bGYgcG9zaXRpb25dOwotCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzog
TlNBY2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRlXSB8fAotICAgICAgICBbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVRvcExldmVsVUlFbGVtZW50QXR0cmli
dXRlXSkgewotICAgICAgICAKLSAgICAgICAgaWQgcmVtb3RlUGFyZW50ID0gW3NlbGYgcmVtb3Rl
QWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdF07Ci0gICAgICAgIGlmIChyZW1vdGVQYXJlbnQpCi0g
ICAgICAgICAgICByZXR1cm4gW3JlbW90ZVBhcmVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFs
dWU6YXR0cmlidXRlTmFtZV07Ci0gICAgICAgIAotICAgICAgICBGcmFtZVZpZXcqIGZ2ID0gbV9v
YmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7Ci0gICAgICAgIGlmIChmdikKLSAgICAgICAgICAg
IHJldHVybiBbZnYtPnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93XTsKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlBY2Nlc3NLZXlBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEF0b21pY1N0cmlu
ZyBhY2Nlc3NLZXkgPSBtX29iamVjdC0+YWNjZXNzS2V5KCk7Ci0gICAgICAgIGlmIChhY2Nlc3NL
ZXkuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICByZXR1cm4gYWNj
ZXNzS2V5OwotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eVRhYnNBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChtX29iamVj
dC0+aXNUYWJMaXN0KCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciB0YWJzQ2hpbGRyZW47Ci0gICAgICAgICAgICBtX29iamVj
dC0+dGFiQ2hpbGRyZW4odGFic0NoaWxkcmVuKTsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0
VG9OU0FycmF5KHRhYnNDaGlsZHJlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb250ZW50c0F0
dHJpYnV0ZV0pIHsKLSAgICAgICAgLy8gVGhlIGNvbnRlbnRzIG9mIGEgdGFiIGxpc3QgYXJlIGFs
bCB0aGUgY2hpbGRyZW4gZXhjZXB0IHRoZSB0YWJzLgotICAgICAgICBpZiAobV9vYmplY3QtPmlz
VGFiTGlzdCgpKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKLSAgICAg
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB0
YWJzQ2hpbGRyZW47Ci0gICAgICAgICAgICBtX29iamVjdC0+dGFiQ2hpbGRyZW4odGFic0NoaWxk
cmVuKTsKLQotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIGNvbnRlbnRzOwotICAgICAgICAgICAgdW5zaWduZWQgY2hpbGRyZW5TaXpl
ID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8
IGNoaWxkcmVuU2l6ZTsgKytrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRhYnNDaGlsZHJlbi5m
aW5kKGNoaWxkcmVuW2tdKSA9PSBXVEY6Om5vdEZvdW5kKQotICAgICAgICAgICAgICAgICAgICBj
b250ZW50cy5hcHBlbmQoY2hpbGRyZW5ba10pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29udGVudHMpOwotICAgICAgICB9IGVsc2UgaWYgKG1f
b2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxk
cmVuKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEEgc2Nyb2xsVmlldydzIGNvbnRl
bnRzIGFyZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgc2Nyb2xsIGJhcnMuCi0gICAgICAgICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29udGVudHM7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGlsZHJlblNpemUgPSBjaGlsZHJlbi5zaXplKCk7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY2hpbGRyZW5TaXplOyArK2spIHsK
LSAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuW2tdLT5pc1Njcm9sbGJhcigpKQotICAgICAg
ICAgICAgICAgICAgICBjb250ZW50cy5hcHBlbmQoY2hpbGRyZW5ba10pOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29udGVudHMpOyAgICAgICAg
ICAgIAotICAgICAgICB9Ci0gICAgfSAgICAKLSAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzQWNj
ZXNzaWJpbGl0eVRhYmxlKCkpIHsKLSAgICAgICAgLy8gVE9ETzogZGlzdGluZ3Vpc2ggYmV0d2Vl
biB2aXNpYmxlIGFuZCBub24tdmlzaWJsZSByb3dzCi0gICAgICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93c0F0dHJpYnV0ZV0gfHwgCi0gICAg
ICAgICAgICBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Vmlz
aWJsZVJvd3NBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJh
eShzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihtX29iamVjdCktPnJvd3MoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgLy8gVE9ETzogZGlzdGluZ3Vpc2ggYmV0d2VlbiB2aXNpYmxlIGFu
ZCBub24tdmlzaWJsZSBjb2x1bW5zCi0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q29sdW1uc0F0dHJpYnV0ZV0gfHwgCi0gICAgICAgICAg
ICBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNv
bHVtbnNBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShz
dGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihtX29iamVjdCktPmNvbHVtbnMoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRSb3dzQXR0cmlidXRlXSkgewotICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVj
dGVkQ2hpbGRyZW5Db3B5OwotICAgICAgICAgICAgbV9vYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4o
c2VsZWN0ZWRDaGlsZHJlbkNvcHkpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJy
YXkoc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAv
LyBIVE1MIHRhYmxlcyBkb24ndCBzdXBwb3J0IHRoZXNlCi0gICAgICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDb2x1bW5zQXR0cmli
dXRlXSB8fCAKLSAgICAgICAgICAgIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlTZWxlY3RlZENlbGxzQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiBu
aWw7Ci0gICAgICAgIAotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
OihOU1N0cmluZyAqKWtBWENvbHVtbkhlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGVdKSB7Ci0gICAg
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
Y29sdW1uSGVhZGVyczsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJs
ZSo+KG1fb2JqZWN0KS0+Y29sdW1uSGVhZGVycyhjb2x1bW5IZWFkZXJzKTsKLSAgICAgICAgICAg
IHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGNvbHVtbkhlYWRlcnMpOyAgICAgICAgICAgIAotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eUhlYWRlckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGhlYWRlckNvbnRhaW5lciA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZSo+KG1fb2JqZWN0KS0+aGVhZGVyQ29udGFpbmVyKCk7Ci0gICAgICAgICAgICBpZiAo
aGVhZGVyQ29udGFpbmVyKQotICAgICAgICAgICAgICAgIHJldHVybiBoZWFkZXJDb250YWluZXIt
PndyYXBwZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvd0hl
YWRlclVJRWxlbWVudHNBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93SGVhZGVyczsKLSAgICAgICAgICAg
IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KG1fb2JqZWN0KS0+cm93SGVhZGVycyhy
b3dIZWFkZXJzKTsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHJvd0hlYWRl
cnMpOyAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZpc2li
bGVDZWxsc0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjZWxsczsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PEFjY2Vzc2liaWxpdHlUYWJsZSo+KG1fb2JqZWN0KS0+Y2VsbHMoY2VsbHMpOwotICAgICAgICAg
ICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY2VsbHMpOwotICAgICAgICB9ICAgICAgICAKLSAg
ICB9Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc1RhYmxlQ29sdW1uKCkpIHsKLSAgICAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmRleEF0
dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c3Rh
dGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uKj4obV9vYmplY3QpLT5jb2x1bW5JbmRl
eCgpXTsKLSAgICAgICAgCi0gICAgICAgIC8vIHJvd3MgYXR0cmlidXRlIGZvciBhIGNvbHVtbiBp
cyB0aGUgbGlzdCBvZiBhbGwgdGhlIGVsZW1lbnRzIGluIHRoYXQgY29sdW1uIGF0IGVhY2ggcm93
Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5Um93c0F0dHJpYnV0ZV0gfHwgCi0gICAgICAgICAgICBbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZVJvd3NBdHRyaWJ1dGVdKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFi
bGVDb2x1bW4qPihtX29iamVjdCktPmNoaWxkcmVuKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SGVhZGVyQXR0
cmlidXRlXSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogaGVhZGVyID0gc3Rh
dGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uKj4obV9vYmplY3QpLT5oZWFkZXJPYmpl
Y3QoKTsKLSAgICAgICAgICAgIGlmICghaGVhZGVyKQotICAgICAgICAgICAgICAgIHJldHVybiBu
aWw7Ci0gICAgICAgICAgICByZXR1cm4gaGVhZGVyLT53cmFwcGVyKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc1RhYmxlQ2VsbCgpKSB7Ci0gICAgICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93SW5kZXhS
YW5nZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIHBhaXI8aW50LCBpbnQ+IHJvd1JhbmdlOwot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCo+KG1fb2JqZWN0
KS0+cm93SW5kZXhSYW5nZShyb3dSYW5nZSk7Ci0gICAgICAgICAgICByZXR1cm4gW05TVmFsdWUg
dmFsdWVXaXRoUmFuZ2U6TlNNYWtlUmFuZ2Uocm93UmFuZ2UuZmlyc3QsIHJvd1JhbmdlLnNlY29u
ZCldOwotICAgICAgICB9ICAKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlDb2x1bW5JbmRleFJhbmdlQXR0cmlidXRlXSkgewotICAgICAg
ICAgICAgcGFpcjxpbnQsIGludD4gY29sdW1uUmFuZ2U7Ci0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKj4obV9vYmplY3QpLT5jb2x1bW5JbmRleFJhbmdlKGNv
bHVtblJhbmdlKTsKLSAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpO
U01ha2VSYW5nZShjb2x1bW5SYW5nZS5maXJzdCwgY29sdW1uUmFuZ2Uuc2Vjb25kKV07Ci0gICAg
ICAgIH0gIAotICAgIH0KLSAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzVHJlZSgpKSB7Ci0gICAg
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2Vs
ZWN0ZWRSb3dzQXR0cmlidXRlXSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkQ2hpbGRyZW5Db3B5OwotICAgICAg
ICAgICAgbV9vYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOwot
ICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoc2VsZWN0ZWRDaGlsZHJlbkNvcHkp
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5Um93c0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dzQ29weTsKLSAgICAgICAg
ICAgIG1fb2JqZWN0LT5hcmlhVHJlZVJvd3Mocm93c0NvcHkpOwotICAgICAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb05TQXJyYXkocm93c0NvcHkpOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICAvLyBUcmVlUm9sZXMgZG8gbm90IHN1cHBvcnQgY29sdW1ucywgYnV0IE1h
YyBBWCBleHBlY3RzIHRvIGJlIGFibGUgdG8gYXNrIGFib3V0IGNvbHVtbnMgYXQgdGhlIGxlYXN0
LgotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eUNvbHVtbnNBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5
XTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eUluZGV4QXR0cmlidXRlXSkgewotICAgICAgICBpZiAobV9vYmplY3QtPmlzVHJl
ZUl0ZW0oKSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9v
YmplY3QtPnBhcmVudE9iamVjdCgpOwotICAgICAgICAgICAgZm9yICg7IHBhcmVudCAmJiAhcGFy
ZW50LT5pc1RyZWUoKTsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkKLSAgICAgICAg
ICAgIHsgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXBhcmVudCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGaW5kIHRo
ZSBpbmRleCBvZiB0aGlzIGl0ZW0gYnkgaXRlcmF0aW5nIHRoZSBwYXJlbnRzLgotICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3ND
b3B5OwotICAgICAgICAgICAgcGFyZW50LT5hcmlhVHJlZVJvd3Mocm93c0NvcHkpOwotICAgICAg
ICAgICAgc2l6ZV90IGNvdW50ID0gcm93c0NvcHkuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChz
aXplX3QgayA9IDA7IGsgPCBjb3VudDsgKytrKQotICAgICAgICAgICAgICAgIGlmIChyb3dzQ29w
eVtrXS0+d3JhcHBlcigpID09IHNlbGYpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBbTlNO
dW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50OmtdOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICByZXR1cm4gbmlsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNUYWJsZVJv
dygpKSB7Ci0gICAgICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUluZGV4QXR0cmlidXRlXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gW05T
TnVtYmVyIG51bWJlcldpdGhJbnQ6c3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlUm93Kj4o
bV9vYmplY3QpLT5yb3dJbmRleCgpXTsKLSAgICAgICAgfQotICAgIH0gICAgCi0gICAgCi0gICAg
Ly8gVGhlIHJvd3MgdGhhdCBhcmUgY29uc2lkZXJlZCBpbnNpZGUgdGhpcyByb3cuIAotICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc2Vk
Um93c0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsK
LSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciByb3dzQ29weTsKLSAgICAgICAgICAgIG1fb2JqZWN0LT5hcmlhVHJlZUl0ZW1EaXNjbG9z
ZWRSb3dzKHJvd3NDb3B5KTsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHJv
d3NDb3B5KTsgICAgCi0gICAgICAgIH0gZWxzZSBpZiAobV9vYmplY3QtPmlzQVJJQVRyZWVHcmlk
Um93KCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciByb3dzQ29weTsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEFjY2Vzc2li
aWxpdHlBUklBR3JpZFJvdyo+KG1fb2JqZWN0KS0+ZGlzY2xvc2VkUm93cyhyb3dzQ29weSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShyb3dzQ29weSk7ICAgIAotICAgICAg
ICB9Ci0gICAgfQotICAgIAotICAgIC8vIFRoZSByb3cgdGhhdCBjb250YWlucyB0aGlzIHJvdy4g
SXQgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBwYXJlbnQgdGhhdCBpcyBhIHRyZWVp
dGVtLgotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5RGlzY2xvc2VkQnlSb3dBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNU
cmVlSXRlbSgpKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBt
X29iamVjdC0+cGFyZW50T2JqZWN0KCk7Ci0gICAgICAgICAgICB3aGlsZSAocGFyZW50KSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNUcmVlSXRlbSgpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhl
IHBhcmVudCBpcyB0aGUgdHJlZSBpdHNlbGYsIHRoZW4gdGhpcyB2YWx1ZSA9PSBuaWwuCi0gICAg
ICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNUcmVlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3Qo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIH0gZWxz
ZSBpZiAobV9vYmplY3QtPmlzQVJJQVRyZWVHcmlkUm93KCkpIHsKLSAgICAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIHJvdyA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlBUklBR3JpZFJv
dyo+KG1fb2JqZWN0KS0+ZGlzY2xvc2VkQnlSb3coKTsKLSAgICAgICAgICAgIGlmICghcm93KQot
ICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICByZXR1cm4gcm93LT53cmFw
cGVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURpc2Nsb3N1cmVMZXZlbEF0dHJpYnV0ZV0pIHsKLSAg
ICAgICAgLy8gQ29udmVydCBmcm9tIDEtYmFzZWQgbGV2ZWwgKGZyb20gYXJpYS1sZXZlbCBzcGVj
KSB0byAwLWJhc2VkIGxldmVsIChNYWMpCi0gICAgICAgIGludCBsZXZlbCA9IG1fb2JqZWN0LT5o
aWVyYXJjaGljYWxMZXZlbCgpOwotICAgICAgICBpZiAobGV2ZWwgPiAwKQotICAgICAgICAgICAg
bGV2ZWwgLT0gMTsKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OmxldmVs
XTsKLSAgICB9Ci0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlEaXNjbG9zaW5nQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNFeHBhbmRlZCgpXTsKLSAgICAKLSAgICBpZiAoKG1f
b2JqZWN0LT5pc0xpc3RCb3goKSB8fCBtX29iamVjdC0+aXNMaXN0KCkpICYmIFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0ZV0p
Ci0gICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbE9yaWVudGF0aW9uVmFsdWU7
Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYU2VsZWN0ZWRU
ZXh0TWFya2VyUmFuZ2UiXSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZv
clNlbGVjdGlvbl07Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0LT5yZW5kZXJlcigpKSB7Ci0gICAg
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhTdGFydFRleHRNYXJr
ZXIiXSkKLSAgICAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0
aW9uOnN0YXJ0T2ZEb2N1bWVudChtX29iamVjdC0+cmVuZGVyZXIoKS0+ZG9jdW1lbnQoKSldOwot
ICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYRW5kVGV4dE1h
cmtlciJdKQotICAgICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9z
aXRpb246ZW5kT2ZEb2N1bWVudChtX29iamVjdC0+cmVuZGVyZXIoKS0+ZG9jdW1lbnQoKSldOwot
ICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eUJsb2NrUXVvdGVMZXZlbEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNO
dW1iZXIgbnVtYmVyV2l0aEludDptX29iamVjdC0+YmxvY2txdW90ZUxldmVsKCldOwotICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFRhYmxlTGV2ZWwiXSkKLSAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Om1fb2JqZWN0LT50YWJsZUxldmVsKCld
OwotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNz
aWJpbGl0eUxpbmtlZFVJRWxlbWVudHNBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBsaW5rZWRVSUVsZW1lbnRzOwot
ICAgICAgICBtX29iamVjdC0+bGlua2VkVUlFbGVtZW50cyhsaW5rZWRVSUVsZW1lbnRzKTsKLSAg
ICAgICAgaWYgKGxpbmtlZFVJRWxlbWVudHMuc2l6ZSgpID09IDApCi0gICAgICAgICAgICByZXR1
cm4gbmlsOwotICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShsaW5rZWRVSUVsZW1lbnRz
KTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0Fj
Y2Vzc2liaWxpdHlTZWxlY3RlZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIg
bnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmlzU2VsZWN0ZWQoKV07Ci0KLSAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZXJ2ZXNBc1RpdGxlRm9y
VUlFbGVtZW50c0F0dHJpYnV0ZV0gJiYgbV9vYmplY3QtPmlzTWVudUJ1dHRvbigpKSB7Ci0gICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHVpRWxlbWVudCA9IHN0YXRpY19jYXN0PEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QqPihtX29iamVjdCktPm1lbnVGb3JNZW51QnV0dG9uKCk7Ci0gICAg
ICAgIGlmICh1aUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRo
T2JqZWN0OnVpRWxlbWVudC0+d3JhcHBlcigpXTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRpdGxlVUlFbGVtZW50QXR0cmli
dXRlXSkgewotICAgICAgICBpZiAoIW1fb2JqZWN0LT5leHBvc2VzVGl0bGVVSUVsZW1lbnQoKSkK
LSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIAotICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmogPSBtX29iamVjdC0+dGl0bGVVSUVsZW1lbnQoKTsKLSAgICAgICAgaWYgKG9i
aikKLSAgICAgICAgICAgIHJldHVybiBvYmotPndyYXBwZXIoKTsKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlWYWx1ZURlc2NyaXB0aW9uQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJu
IG1fb2JqZWN0LT52YWx1ZURlc2NyaXB0aW9uKCk7Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0ZV0p
IHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uIGVsZW1lbnRPcmllbnRhdGlvbiA9
IG1fb2JqZWN0LT5vcmllbnRhdGlvbigpOwotICAgICAgICBpZiAoZWxlbWVudE9yaWVudGF0aW9u
ID09IEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvblZlcnRpY2FsKQotICAgICAgICAgICAgcmV0dXJu
IE5TQWNjZXNzaWJpbGl0eVZlcnRpY2FsT3JpZW50YXRpb25WYWx1ZTsKLSAgICAgICAgaWYgKGVs
ZW1lbnRPcmllbnRhdGlvbiA9PSBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25Ib3Jpem9udGFsKQot
ICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eUhvcml6b250YWxPcmllbnRhdGlvblZh
bHVlOwotICAgICAgICByZXR1cm4gbmlsOwotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUhvcml6b250YWxTY3JvbGxCYXJB
dHRyaWJ1dGVdKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbEJhciA9IG1f
b2JqZWN0LT5zY3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uSG9yaXpvbnRhbCk7Ci0g
ICAgICAgIGlmIChzY3JvbGxCYXIpCi0gICAgICAgICAgICByZXR1cm4gc2Nyb2xsQmFyLT53cmFw
cGVyKCk7Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmVydGljYWxTY3JvbGxCYXJBdHRyaWJ1
dGVdKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbEJhciA9IG1fb2JqZWN0
LT5zY3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uVmVydGljYWwpOwotICAgICAgICBp
ZiAoc2Nyb2xsQmFyKQotICAgICAgICAgICAgcmV0dXJuIHNjcm9sbEJhci0+d3JhcHBlcigpOwot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb25BdHRyaWJ1dGVdKSB7
Ci0gICAgICAgIHN3aXRjaCAobV9vYmplY3QtPnNvcnREaXJlY3Rpb24oKSkgewotICAgICAgICBj
YXNlIFNvcnREaXJlY3Rpb25Bc2NlbmRpbmc6Ci0gICAgICAgICAgICByZXR1cm4gTlNBY2Nlc3Np
YmlsaXR5QXNjZW5kaW5nU29ydERpcmVjdGlvblZhbHVlOwotICAgICAgICBjYXNlIFNvcnREaXJl
Y3Rpb25EZXNjZW5kaW5nOgotICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eURlc2Nl
bmRpbmdTb3J0RGlyZWN0aW9uVmFsdWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VW5rbm93blNvcnREaXJlY3Rpb25WYWx1ZTsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUxhbmd1YWdlQXR0cmlidXRlXSkgCi0gICAgICAgIHJldHVybiBtX29iamVj
dC0+bGFuZ3VhZ2UoKTsKLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eUV4cGFuZGVkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtO
U051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNFeHBhbmRlZCgpXTsKLSAgICAKLSAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJlcXVp
cmVkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpt
X29iamVjdC0+aXNSZXF1aXJlZCgpXTsKLQotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW52YWxpZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVy
biBtX29iamVjdC0+aW52YWxpZFN0YXR1cygpOwotICAgIAotICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5T3duc0F0dHJpYnV0ZV0pIHsKLSAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFP
d25zOwotICAgICAgICBtX29iamVjdC0+YXJpYU93bnNFbGVtZW50cyhhcmlhT3ducyk7Ci0gICAg
ICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGFyaWFPd25zKTsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlHcmFiYmVk
QXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29i
amVjdC0+aXNBUklBR3JhYmJlZCgpXTsKLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRlXSkgewotICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBkcm9wRWZmZWN0czsKLSAgICAgICAgbV9vYmplY3QtPmRldGVy
bWluZUFSSUFEcm9wRWZmZWN0cyhkcm9wRWZmZWN0cyk7Ci0gICAgICAgIHNpemVfdCBsZW5ndGgg
PSBkcm9wRWZmZWN0cy5zaXplKCk7Ci0KLSAgICAgICAgTlNNdXRhYmxlQXJyYXkqIGRyb3BFZmZl
Y3RzQXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6bGVuZ3RoXTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIFtk
cm9wRWZmZWN0c0FycmF5IGFkZE9iamVjdDpkcm9wRWZmZWN0c1tpXV07Ci0gICAgICAgIHJldHVy
biBkcm9wRWZmZWN0c0FycmF5OwotICAgIH0KLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVBsYWNlaG9sZGVyVmFsdWVBdHRyaWJ1dGVd
KQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPnBsYWNlaG9sZGVyVmFsdWUoKTsKLSAgICAKLSAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUhhc1Bv
cHVwQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpt
X29iamVjdC0+YXJpYUhhc1BvcHVwKCldOwotICAgIAotICAgIC8vIEFSSUEgTGl2ZSByZWdpb24g
YXR0cmlidXRlcy4KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eUFSSUFMaXZlQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5h
cmlhTGl2ZVJlZ2lvblN0YXR1cygpOwotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQVJlbGV2YW50QXR0cmlidXRlXSkKLSAgICAgICAgIHJl
dHVybiBtX29iamVjdC0+YXJpYUxpdmVSZWdpb25SZWxldmFudCgpOwotICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQUF0b21pY0F0dHJpYnV0
ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmFy
aWFMaXZlUmVnaW9uQXRvbWljKCldOwotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQUJ1c3lBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5hcmlhTGl2ZVJlZ2lvbkJ1c3koKV07
Ci0KLSAgICAvLyBNYXRoTUwgQXR0cmlidXRlcy4KLSAgICBpZiAobV9vYmplY3QtPmlzTWF0aEVs
ZW1lbnQoKSkgewotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eU1hdGhSb290SW5kZXhBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJu
IChtX29iamVjdC0+bWF0aFJvb3RJbmRleE9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRoUm9vdElu
ZGV4T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aFJvb3RSYWRpY2FuZEF0dHJpYnV0ZV0p
Ci0gICAgICAgICAgICByZXR1cm4gKG1fb2JqZWN0LT5tYXRoUmFkaWNhbmRPYmplY3QoKSkgPyBt
X29iamVjdC0+bWF0aFJhZGljYW5kT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7Ci0gICAgICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aEZyYWN0
aW9uTnVtZXJhdG9yQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiAobV9vYmplY3QtPm1h
dGhOdW1lcmF0b3JPYmplY3QoKSkgPyBtX29iamVjdC0+bWF0aE51bWVyYXRvck9iamVjdCgpLT53
cmFwcGVyKCkgOiAwOwotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eU1hdGhGcmFjdGlvbkRlbm9taW5hdG9yQXR0cmlidXRlXSkKLSAgICAg
ICAgICAgIHJldHVybiAobV9vYmplY3QtPm1hdGhEZW5vbWluYXRvck9iamVjdCgpKSA/IG1fb2Jq
ZWN0LT5tYXRoRGVub21pbmF0b3JPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKLSAgICAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoQmFzZUF0
dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gKG1fb2JqZWN0LT5tYXRoQmFzZU9iamVjdCgp
KSA/IG1fb2JqZWN0LT5tYXRoQmFzZU9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwotICAgICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhTdWJz
Y3JpcHRBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIChtX29iamVjdC0+bWF0aFN1YnNj
cmlwdE9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRoU3Vic2NyaXB0T2JqZWN0KCktPndyYXBwZXIo
KSA6IDA7Ci0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5TWF0aFN1cGVyc2NyaXB0QXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiAo
bV9vYmplY3QtPm1hdGhTdXBlcnNjcmlwdE9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRoU3VwZXJz
Y3JpcHRPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoVW5kZXJBdHRyaWJ1dGVdKQotICAg
ICAgICAgICAgcmV0dXJuIChtX29iamVjdC0+bWF0aFVuZGVyT2JqZWN0KCkpID8gbV9vYmplY3Qt
Pm1hdGhVbmRlck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwotICAgICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhPdmVyQXR0cmlidXRlXSkK
LSAgICAgICAgICAgIHJldHVybiAobV9vYmplY3QtPm1hdGhPdmVyT2JqZWN0KCkpID8gbV9vYmpl
Y3QtPm1hdGhPdmVyT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7Ci0gICAgICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZE9wZW5BdHRy
aWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoRmVuY2VkT3BlblN0cmlu
ZygpOwotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eU1hdGhGZW5jZWRDbG9zZUF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gbV9v
YmplY3QtPm1hdGhGZW5jZWRDbG9zZVN0cmluZygpOwotICAgIH0KLSAgICAKLSAgICAvLyB0aGlz
IGlzIHVzZWQgb25seSBieSBEdW1wUmVuZGVyVHJlZSBmb3IgdGVzdGluZwotICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWENsaWNrUG9pbnQiXSkKLSAgICAgICAgcmV0
dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFBvaW50Om1fb2JqZWN0LT5jbGlja1BvaW50KCldOwotICAg
IAotICAgIC8vIFRoaXMgaXMgdXNlZCBieSBEUlQgdG8gdmVyaWZ5IENTUzMgc3BlZWNoIHdvcmtz
LgotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWERSVFNwZWVjaEF0
dHJpYnV0ZSJdKSB7Ci0gICAgICAgIEVTcGVhayBzcGVha1Byb3BlcnR5ID0gbV9vYmplY3QtPnNw
ZWFrUHJvcGVydHkoKTsKLSAgICAgICAgc3dpdGNoIChzcGVha1Byb3BlcnR5KSB7Ci0gICAgICAg
IGNhc2UgU3BlYWtOb25lOgotICAgICAgICAgICAgcmV0dXJuIEAibm9uZSI7Ci0gICAgICAgIGNh
c2UgU3BlYWtTcGVsbE91dDoKLSAgICAgICAgICAgIHJldHVybiBAInNwZWxsLW91dCI7Ci0gICAg
ICAgIGNhc2UgU3BlYWtEaWdpdHM6Ci0gICAgICAgICAgICByZXR1cm4gQCJkaWdpdHMiOwotICAg
ICAgICBjYXNlIFNwZWFrTGl0ZXJhbFB1bmN0dWF0aW9uOgotICAgICAgICAgICAgcmV0dXJuIEAi
bGl0ZXJhbC1wdW5jdHVhdGlvbiI7Ci0gICAgICAgIGNhc2UgU3BlYWtOb1B1bmN0dWF0aW9uOgot
ICAgICAgICAgICAgcmV0dXJuIEAibm8tcHVuY3R1YXRpb24iOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICBjYXNlIFNwZWFrTm9ybWFsOgotICAgICAgICAgICAgcmV0dXJuIEAibm9ybWFsIjsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFVzZWQgYnkgRFJUIHRvIGZpbmQgYW4gYWNjZXNz
aWJsZSBub2RlIGJ5IGl0cyBlbGVtZW50IGlkLgotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6QCJBWERSVEVsZW1lbnRJZEF0dHJpYnV0ZSJdKQotICAgICAgICByZXR1cm4g
bV9vYmplY3QtPmdldEF0dHJpYnV0ZShpZEF0dHIpOwotICAgIAotICAgIHJldHVybiBuaWw7Ci19
Ci0KLS0gKGlkKWFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50Ci17Ci0gICAgaWYgKCFbc2Vs
ZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAg
UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGZvY3VzZWRPYmogPSBtX29iamVjdC0+Zm9jdXNl
ZFVJRWxlbWVudCgpOwotCi0gICAgaWYgKCFmb2N1c2VkT2JqKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIAotICAgIHJldHVybiBmb2N1c2VkT2JqLT53cmFwcGVyKCk7Ci19Ci0KLS0gKGlkKWFj
Y2Vzc2liaWxpdHlIaXRUZXN0OihOU1BvaW50KXBvaW50Ci17Ci0gICAgaWYgKCFbc2VsZiB1cGRh
dGVPYmplY3RCYWNraW5nU3RvcmVdKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgbV9vYmpl
Y3QtPnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKLSAgICBSZWZQdHI8QWNjZXNzaWJpbGl0
eU9iamVjdD4gYXhPYmplY3QgPSBtX29iamVjdC0+YWNjZXNzaWJpbGl0eUhpdFRlc3QoSW50UG9p
bnQocG9pbnQpKTsKLSAgICBpZiAoYXhPYmplY3QpCi0gICAgICAgIHJldHVybiBOU0FjY2Vzc2li
aWxpdHlVbmlnbm9yZWRBbmNlc3RvcihheE9iamVjdC0+d3JhcHBlcigpKTsKLSAgICByZXR1cm4g
TlNBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3Ioc2VsZik7Ci19Ci0KLS0gKEJPT0wpYWNj
ZXNzaWJpbGl0eUlzQXR0cmlidXRlU2V0dGFibGU6KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lCi17
Ci0gICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQotICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogQCJBWFNl
bGVjdGVkVGV4dE1hcmtlclJhbmdlIl0pCi0gICAgICAgIHJldHVybiBZRVM7Ci0KLSAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0
cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5TZXRGb2N1c0F0dHJpYnV0ZSgp
OwotCi0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmls
aXR5VmFsdWVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhblNldFZhbHVl
QXR0cmlidXRlKCk7Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBO
U0FjY2Vzc2liaWxpdHlTZWxlY3RlZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVj
dC0+Y2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUoKTsKLSAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENoaWxkcmVuQXR0cmli
dXRlXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5TZXRTZWxlY3RlZENoaWxkcmVuQXR0
cmlidXRlKCk7Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eURpc2Nsb3NpbmdBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gbV9vYmplY3Qt
PmNhblNldEV4cGFuZGVkQXR0cmlidXRlKCk7Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV0pCi0gICAg
ICAgIHJldHVybiBZRVM7Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
OiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGVdIHx8Ci0gICAgICAgIFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0UmFu
Z2VBdHRyaWJ1dGVdIHx8Ci0gICAgICAgIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzog
TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmlidXRlXSkKLSAgICAgICAg
cmV0dXJuIG1fb2JqZWN0LT5jYW5TZXRUZXh0UmFuZ2VBdHRyaWJ1dGVzKCk7Ci0gICAgCi0gICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlHcmFiYmVk
QXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICAKLSAgICByZXR1cm4gTk87Ci19
Ci0KLS8vIGFjY2Vzc2liaWxpdHlTaG91bGRVc2VVbmlxdWVJZCBpcyBhbiBBcHBLaXQgbWV0aG9k
IHdlIG92ZXJyaWRlIHNvIHRoYXQKLS8vIG9iamVjdHMgd2lsbCBiZSBnaXZlbiBhIHVuaXF1ZSBJ
RCwgYW5kIHRoZXJlZm9yZSBhbGxvdyBBcHBLaXQgdG8ga25vdyB3aGVuIHRoZXkKLS8vIGJlY29t
ZSBvYnNvbGV0ZSAoZS5nLiB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyB0byBhIG5ldyB3ZWIgcGFn
ZSwgbWFraW5nIHRoaXMgb25lCi0vLyB1bnJlbmRlcmVkIGJ1dCBub3QgZGVhbGxvY2F0ZWQgYmVj
YXVzZSBpdCBpcyBpbiB0aGUgYmFjay9mb3J3YXJkIGNhY2hlKS4KLS8vIEl0IGlzIGltcG9ydGFu
dCB0byBjYWxsIE5TQWNjZXNzaWJpbGl0eVVucmVnaXN0ZXJVbmlxdWVJZEZvclVJRWxlbWVudCBp
biB0aGUKLS8vIGFwcHJvcHJpYXRlIHBsYWNlIChlLmcuIGRlYWxsb2MpIHRvIHJlbW92ZSB0aGVz
ZSBub24tcmV0YWluZWQgcmVmZXJlbmNlcyBmcm9tCi0vLyBBcHBLaXQncyBpZCBtYXBwaW5nIHRh
Ymxlcy4gV2UgZG8gdGhpcyBpbiBkZXRhY2ggYnkgY2FsbGluZyB1bnJlZ2lzdGVyVW5pcXVlSWRG
b3JVSUVsZW1lbnQuCi0vLwotLy8gUmVnaXN0ZXJpbmcgYW4gb2JqZWN0IGlzIGFsc28gcmVxdWly
ZWQgZm9yIG9ic2VydmluZyBub3RpZmljYXRpb25zLiBPbmx5IHJlZ2lzdGVyZWQgb2JqZWN0cyBj
YW4gYmUgb2JzZXJ2ZWQuCi0tIChCT09MKWFjY2Vzc2liaWxpdHlJc0lnbm9yZWQKLXsKLSAgICBp
ZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVybiBZRVM7
Ci0KLSAgICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKQotICAgICAgICByZXR1cm4gW1tz
ZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkXTsKLSAgICByZXR1cm4g
bV9vYmplY3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsKLX0KLQotLSAoTlNBcnJheSogKWFj
Y2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMKLXsKLSAgICBpZiAoIVtzZWxm
IHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBp
ZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKSAKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAg
IHN0YXRpYyBOU0FycmF5KiBwYXJhbUF0dHJzID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiB0
ZXh0UGFyYW1BdHRycyA9IG5pbDsKLSAgICBzdGF0aWMgTlNBcnJheSogdGFibGVQYXJhbUF0dHJz
ID0gbmlsOwotICAgIHN0YXRpYyBOU0FycmF5KiB3ZWJBcmVhUGFyYW1BdHRycyA9IG5pbDsKLSAg
ICBpZiAocGFyYW1BdHRycyA9PSBuaWwpIHsKLSAgICAgICAgcGFyYW1BdHRycyA9IFtbTlNBcnJh
eSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgotICAgICAgICAgICAgICAgICAgICAgIEAiQVhVSUVs
ZW1lbnRGb3JUZXh0TWFya2VyIiwKLSAgICAgICAgICAgICAgICAgICAgICBAIkFYVGV4dE1hcmtl
clJhbmdlRm9yVUlFbGVtZW50IiwKLSAgICAgICAgICAgICAgICAgICAgICBAIkFYTGluZUZvclRl
eHRNYXJrZXIiLAotICAgICAgICAgICAgICAgICAgICAgIEAiQVhUZXh0TWFya2VyUmFuZ2VGb3JM
aW5lIiwKLSAgICAgICAgICAgICAgICAgICAgICBAIkFYU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdl
IiwKLSAgICAgICAgICAgICAgICAgICAgICBAIkFYVGV4dE1hcmtlckZvclBvc2l0aW9uIiwKLSAg
ICAgICAgICAgICAgICAgICAgICBAIkFYQm91bmRzRm9yVGV4dE1hcmtlclJhbmdlIiwKLSAgICAg
ICAgICAgICAgICAgICAgICBAIkFYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSIs
Ci0gICAgICAgICAgICAgICAgICAgICAgQCJBWFRleHRNYXJrZXJSYW5nZUZvclVub3JkZXJlZFRl
eHRNYXJrZXJzIiwKLSAgICAgICAgICAgICAgICAgICAgICBAIkFYTmV4dFRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyIiwKLSAgICAgICAgICAgICAgICAgICAgICBAIkFYUHJldmlvdXNUZXh0TWFya2Vy
Rm9yVGV4dE1hcmtlciIsCi0gICAgICAgICAgICAgICAgICAgICAgQCJBWExlZnRXb3JkVGV4dE1h
cmtlclJhbmdlRm9yVGV4dE1hcmtlciIsCi0gICAgICAgICAgICAgICAgICAgICAgQCJBWFJpZ2h0
V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiLAotICAgICAgICAgICAgICAgICAgICAg
IEAiQVhMZWZ0TGluZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiLAotICAgICAgICAgICAg
ICAgICAgICAgIEAiQVhSaWdodExpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIiwKLSAg
ICAgICAgICAgICAgICAgICAgICBAIkFYU2VudGVuY2VUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFy
a2VyIiwKLSAgICAgICAgICAgICAgICAgICAgICBAIkFYUGFyYWdyYXBoVGV4dE1hcmtlclJhbmdl
Rm9yVGV4dE1hcmtlciIsCi0gICAgICAgICAgICAgICAgICAgICAgQCJBWE5leHRXb3JkRW5kVGV4
dE1hcmtlckZvclRleHRNYXJrZXIiLAotICAgICAgICAgICAgICAgICAgICAgIEAiQVhQcmV2aW91
c1dvcmRTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIiwKLSAgICAgICAgICAgICAgICAgICAg
ICBAIkFYTmV4dExpbmVFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIsCi0gICAgICAgICAgICAg
ICAgICAgICAgQCJBWFByZXZpb3VzTGluZVN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiLAot
ICAgICAgICAgICAgICAgICAgICAgIEAiQVhOZXh0U2VudGVuY2VFbmRUZXh0TWFya2VyRm9yVGV4
dE1hcmtlciIsCi0gICAgICAgICAgICAgICAgICAgICAgQCJBWFByZXZpb3VzU2VudGVuY2VTdGFy
dFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIiwKLSAgICAgICAgICAgICAgICAgICAgICBAIkFYTmV4
dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIiwKLSAgICAgICAgICAgICAgICAg
ICAgICBAIkFYUHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIiwK
LSAgICAgICAgICAgICAgICAgICAgICBAIkFYU3R5bGVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFy
a2VyIiwKLSAgICAgICAgICAgICAgICAgICAgICBAIkFYTGVuZ3RoRm9yVGV4dE1hcmtlclJhbmdl
IiwKLSAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlCb3VuZHNGb3JSYW5nZVBh
cmFtZXRlcml6ZWRBdHRyaWJ1dGUsCi0gICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmls
aXR5U3RyaW5nRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlLAotICAgICAgICAgICAgICAg
ICAgICAgIE5TQWNjZXNzaWJpbGl0eVVJRWxlbWVudHNGb3JTZWFyY2hQcmVkaWNhdGVQYXJhbWV0
ZXJpemVkQXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgIG5pbF07Ci0gICAgfQotCi0g
ICAgaWYgKHRleHRQYXJhbUF0dHJzID09IG5pbCkgewotICAgICAgICBOU011dGFibGVBcnJheSog
dGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTpwYXJhbUF0
dHJzXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nKilrQVhMaW5lRm9y
SW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmpl
Y3Q6KE5TU3RyaW5nKilrQVhSYW5nZUZvckxpbmVQYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKLSAg
ICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nKilrQVhTdHJpbmdGb3JSYW5nZVBh
cmFtZXRlcml6ZWRBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNT
dHJpbmcqKWtBWFJhbmdlRm9yUG9zaXRpb25QYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKLSAgICAg
ICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nKilrQVhSYW5nZUZvckluZGV4UGFyYW1l
dGVyaXplZEF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihOU1N0cmlu
Zyopa0FYQm91bmRzRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKLSAgICAgICAgW3Rl
bXBBcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nKilrQVhSVEZGb3JSYW5nZVBhcmFtZXRlcml6ZWRB
dHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWEF0
dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOwotICAgICAgICBb
dGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWFN0eWxlUmFuZ2VGb3JJbmRleFBhcmFt
ZXRlcml6ZWRBdHRyaWJ1dGVdOwotICAgICAgICB0ZXh0UGFyYW1BdHRycyA9IFtbTlNBcnJheSBh
bGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVtcEFycmF5IHJlbGVh
c2VdOwotICAgIH0KLSAgICBpZiAodGFibGVQYXJhbUF0dHJzID09IG5pbCkgewotICAgICAgICBO
U011dGFibGVBcnJheSogdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdp
dGhBcnJheTpwYXJhbUF0dHJzXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5Q2VsbEZvckNvbHVtbkFuZFJvd1BhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOwotICAg
ICAgICB0YWJsZVBhcmFtQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVt
cEFycmF5XTsKLSAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKLSAgICB9Ci0gICAgaWYgKCF3
ZWJBcmVhUGFyYW1BdHRycykgewotICAgICAgICBOU011dGFibGVBcnJheSogdGVtcEFycmF5ID0g
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTpwYXJhbUF0dHJzXTsKLSAgICAg
ICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlckZvckluZGV4
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07Ci0gICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJJc1ZhbGlkUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07Ci0g
ICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUluZGV4Rm9yVGV4dE1h
cmtlclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOwotICAgICAgICB3ZWJBcmVhUGFyYW1BdHRycyA9
IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOwotICAgICAgICBbdGVt
cEFycmF5IHJlbGVhc2VdOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzUGFzc3dv
cmRGaWVsZCgpKQotICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXldOwotICAgIAotICAgIGlm
ICghbV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQotICAgICAgICByZXR1
cm4gcGFyYW1BdHRyczsKLQotICAgIGlmIChtX29iamVjdC0+aXNUZXh0Q29udHJvbCgpKQotICAg
ICAgICByZXR1cm4gdGV4dFBhcmFtQXR0cnM7Ci0gICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc0Fj
Y2Vzc2liaWxpdHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gdGFibGVQYXJhbUF0dHJzOwotICAg
IAotICAgIGlmIChtX29iamVjdC0+aXNNZW51UmVsYXRlZCgpKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgaWYgKG1fb2JqZWN0LT5pc1dlYkFyZWEoKSkKLSAgICAgICAgcmV0dXJuIHdlYkFy
ZWFQYXJhbUF0dHJzOwotICAgIAotICAgIHJldHVybiBwYXJhbUF0dHJzOwotfQotCi0tICh2b2lk
KWFjY2Vzc2liaWxpdHlQZXJmb3JtUHJlc3NBY3Rpb24KLXsKLSAgICBpZiAoIVtzZWxmIHVwZGF0
ZU9iamVjdEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX29iamVj
dC0+aXNBdHRhY2htZW50KCkpCi0gICAgICAgIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNz
aWJpbGl0eVBlcmZvcm1BY3Rpb246TlNBY2Nlc3NpYmlsaXR5UHJlc3NBY3Rpb25dOwotICAgIGVs
c2UKLSAgICAgICAgbV9vYmplY3QtPnByZXNzKCk7ICAgIAotfQotCi0tICh2b2lkKWFjY2Vzc2li
aWxpdHlQZXJmb3JtSW5jcmVtZW50QWN0aW9uCi17Ci0gICAgaWYgKCFbc2VsZiB1cGRhdGVPYmpl
Y3RCYWNraW5nU3RvcmVdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9vYmplY3QtPmlz
QXR0YWNobWVudCgpKQotICAgICAgICBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxp
dHlQZXJmb3JtQWN0aW9uOk5TQWNjZXNzaWJpbGl0eUluY3JlbWVudEFjdGlvbl07Ci0gICAgZWxz
ZQotICAgICAgICBtX29iamVjdC0+aW5jcmVtZW50KCk7ICAgIAotfQotCi0tICh2b2lkKWFjY2Vz
c2liaWxpdHlQZXJmb3JtRGVjcmVtZW50QWN0aW9uCi17Ci0gICAgaWYgKCFbc2VsZiB1cGRhdGVP
YmplY3RCYWNraW5nU3RvcmVdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9vYmplY3Qt
PmlzQXR0YWNobWVudCgpKQotICAgICAgICBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2li
aWxpdHlQZXJmb3JtQWN0aW9uOk5TQWNjZXNzaWJpbGl0eURlY3JlbWVudEFjdGlvbl07Ci0gICAg
ZWxzZQotICAgICAgICBtX29iamVjdC0+ZGVjcmVtZW50KCk7ICAgIAotfQotCi0tICh2b2lkKWFj
Y2Vzc2liaWxpdHlQZXJmb3JtU2hvd01lbnVBY3Rpb24KLXsKLSAgICBpZiAobV9vYmplY3QtPnJv
bGVWYWx1ZSgpID09IENvbWJvQm94Um9sZSkKLSAgICAgICAgbV9vYmplY3QtPnNldElzRXhwYW5k
ZWQodHJ1ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgcGVyZm9y
bWVkIGluIGFuIGl0ZXJhdGlvbiBvZiB0aGUgcnVuIGxvb3AgdGhhdCBkaWQgbm90IHN0YXJ0IGZy
b20gYW4gQVggY2FsbC4gCi0gICAgICAgIC8vIElmIGl0J3MgdGhlIHNhbWUgcnVuIGxvb3AgaXRl
cmF0aW9uLCB0aGUgbWVudSBvcGVuIG5vdGlmaWNhdGlvbiB3b24ndCBiZSBzZW50Ci0gICAgICAg
IFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoYWNjZXNzaWJpbGl0eVNob3dDb250ZXh0
TWVudSkgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTowLjBdOwotICAgIH0KLX0KLQotLSAodm9p
ZClhY2Nlc3NpYmlsaXR5U2hvd0NvbnRleHRNZW51Ci17ICAgIAotICAgIFBhZ2UqIHBhZ2UgPSBt
X29iamVjdC0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIEludFJlY3QgcmVjdCA9IHBpeGVsU25hcHBlZEludFJlY3QobV9vYmplY3QtPmVsZW1lbnRS
ZWN0KCkpOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9vYmplY3QtPmRvY3VtZW50RnJh
bWVWaWV3KCk7Ci0KLSAgICAvLyBPbiBXSzIsIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhlIHNj
cm9sbCBwb3NpdGlvbi4KLSAgICAvLyBPbiBXSzEsIHRoaXMgaXNuJ3QgbmVjZXNzYXJ5LCBpdCdz
IHRha2VuIGNhcmUgb2YgYnkgdGhlIGF0dGFjaG1lbnQgdmlld3MuCi0gICAgaWYgKGZyYW1lVmll
dyAmJiAhZnJhbWVWaWV3LT5wbGF0Zm9ybVdpZGdldCgpKSB7Ci0gICAgICAgIC8vIEZpbmQgdGhl
IGFwcHJvcHJpYXRlIHNjcm9sbCB2aWV3IHRvIHVzZSB0byBjb252ZXJ0IHRoZSBjb250ZW50cyB0
byB0aGUgd2luZG93LgotICAgICAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9
IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVu
dE9iamVjdCgpKSB7Ci0gICAgICAgICAgICBpZiAocGFyZW50LT5pc0FjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3KCkpIHsKLSAgICAgICAgICAgICAgICBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3ID0gdG9B
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhwYXJlbnQpLT5zY3JvbGxWaWV3KCk7Ci0gICAgICAgICAg
ICAgICAgcmVjdCA9IHNjcm9sbFZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhyZWN0KTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+c2hvd0NvbnRleHRNZW51QXQocGFn
ZS0+bWFpbkZyYW1lKCksIHJlY3QuY2VudGVyKCkpOwotfQotCi0tICh2b2lkKWFjY2Vzc2liaWxp
dHlQZXJmb3JtQWN0aW9uOihOU1N0cmluZyopYWN0aW9uCi17Ci0gICAgaWYgKCFbc2VsZiB1cGRh
dGVPYmplY3RCYWNraW5nU3RvcmVdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoW2FjdGlv
biBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UHJlc3NBY3Rpb25dKQotICAgICAgICBb
c2VsZiBhY2Nlc3NpYmlsaXR5UGVyZm9ybVByZXNzQWN0aW9uXTsKLSAgICAKLSAgICBlbHNlIGlm
IChbYWN0aW9uIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTaG93TWVudUFjdGlvbl0p
Ci0gICAgICAgIFtzZWxmIGFjY2Vzc2liaWxpdHlQZXJmb3JtU2hvd01lbnVBY3Rpb25dOwotCi0g
ICAgZWxzZSBpZiAoW2FjdGlvbiBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5jcmVt
ZW50QWN0aW9uXSkKLSAgICAgICAgW3NlbGYgYWNjZXNzaWJpbGl0eVBlcmZvcm1JbmNyZW1lbnRB
Y3Rpb25dOwotCi0gICAgZWxzZSBpZiAoW2FjdGlvbiBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5RGVjcmVtZW50QWN0aW9uXSkKLSAgICAgICAgW3NlbGYgYWNjZXNzaWJpbGl0eVBlcmZv
cm1EZWNyZW1lbnRBY3Rpb25dOwotfQotCi0tICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRWYWx1ZToo
aWQpdmFsdWUgZm9yQXR0cmlidXRlOihOU1N0cmluZyopYXR0cmlidXRlTmFtZQotewotICAgIGlm
ICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWQgdGV4dE1hcmtlclJhbmdlID0gbmlsOwotICAgIE5TTnVtYmVyKiAgICAgICAgICAgICAg
IG51bWJlciA9IG5pbDsKLSAgICBOU1N0cmluZyogICAgICAgICAgICAgICBzdHJpbmcgPSBuaWw7
Ci0gICAgTlNSYW5nZSAgICAgICAgICAgICAgICAgcmFuZ2UgPSB7MCwgMH07Ci0gICAgTlNBcnJh
eSogICAgICAgICAgICAgICAgYXJyYXkgPSBuaWw7Ci0gICAgCi0gICAgLy8gZGVjb2RlIHRoZSBw
YXJhbWV0ZXIKLSAgICBpZiAoQVhPYmplY3RJc1RleHRNYXJrZXJSYW5nZSh2YWx1ZSkpCi0gICAg
ICAgIHRleHRNYXJrZXJSYW5nZSA9IHZhbHVlOwotCi0gICAgZWxzZSBpZiAoW3ZhbHVlIGlzS2lu
ZE9mQ2xhc3M6W05TTnVtYmVyIHNlbGZdXSkKLSAgICAgICAgbnVtYmVyID0gdmFsdWU7Ci0KLSAg
ICBlbHNlIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgc2VsZl1dKQotICAgICAg
ICBzdHJpbmcgPSB2YWx1ZTsKLSAgICAKLSAgICBlbHNlIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFz
czpbTlNWYWx1ZSBzZWxmXV0pCi0gICAgICAgIHJhbmdlID0gW3ZhbHVlIHJhbmdlVmFsdWVdOwot
ICAgIAotICAgIGVsc2UgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0FycmF5IHNlbGZdXSkK
LSAgICAgICAgYXJyYXkgPSB2YWx1ZTsKLSAgICAKLSAgICAvLyBoYW5kbGUgdGhlIGNvbW1hbmQK
LSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYU2VsZWN0ZWRUZXh0
TWFya2VyUmFuZ2UiXSkgewotICAgICAgICBBU1NFUlQodGV4dE1hcmtlclJhbmdlKTsKLSAgICAg
ICAgbV9vYmplY3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoW3NlbGYgdmlzaWJs
ZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXSk7ICAgICAg
ICAKLSAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nl
c3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQVNTRVJUKG51bWJlcik7Ci0g
ICAgICAgIG1fb2JqZWN0LT5zZXRGb2N1c2VkKFtudW1iZXIgaW50VmFsdWVdICE9IDApOwotICAg
IH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxp
dHlWYWx1ZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG51bWJlciAmJiBtX29iamVjdC0+Y2Fu
U2V0TnVtZXJpY1ZhbHVlKCkpCi0gICAgICAgICAgICBtX29iamVjdC0+c2V0VmFsdWUoW251bWJl
ciBmbG9hdFZhbHVlXSk7Ci0gICAgICAgIGVsc2UgaWYgKHN0cmluZykKLSAgICAgICAgICAgIG1f
b2JqZWN0LT5zZXRWYWx1ZShzdHJpbmcpOwotICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZEF0dHJpYnV0ZV0pIHsKLSAg
ICAgICAgaWYgKCFudW1iZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fb2JqZWN0
LT5zZXRTZWxlY3RlZChbbnVtYmVyIGJvb2xWYWx1ZV0pOwotICAgIH0gZWxzZSBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENoaWxkcmVu
QXR0cmlidXRlXSkgewotICAgICAgICBpZiAoIWFycmF5IHx8IG1fb2JqZWN0LT5yb2xlVmFsdWUo
KSAhPSBMaXN0Qm94Um9sZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkQ2hpbGRyZW47
Ci0gICAgICAgIGNvbnZlcnRUb1ZlY3RvcihhcnJheSwgc2VsZWN0ZWRDaGlsZHJlbik7Ci0gICAg
ICAgIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94Kj4obV9vYmplY3QpLT5zZXRTZWxl
Y3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW4pOwotICAgIH0gZWxzZSBpZiAobV9vYmplY3Qt
PmlzVGV4dENvbnRyb2woKSkgewotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGVdKSB7Ci0gICAgICAg
ICAgICBtX29iamVjdC0+c2V0U2VsZWN0ZWRUZXh0KHN0cmluZyk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3Rl
ZFRleHRSYW5nZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIG1fb2JqZWN0LT5zZXRTZWxlY3Rl
ZFRleHRSYW5nZShQbGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKSk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0Fj
Y2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAg
ICBtX29iamVjdC0+bWFrZVJhbmdlVmlzaWJsZShQbGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlv
biwgcmFuZ2UubGVuZ3RoKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zaW5nQXR0cmlidXRlXSkK
LSAgICAgICAgbV9vYmplY3QtPnNldElzRXhwYW5kZWQoW251bWJlciBib29sVmFsdWVdKTsKLSAg
ICBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
U2VsZWN0ZWRSb3dzQXR0cmlidXRlXSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRSb3dzOwotICAgICAgICBjb252ZXJ0
VG9WZWN0b3IoYXJyYXksIHNlbGVjdGVkUm93cyk7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNU
cmVlKCkgfHwgbV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCi0gICAgICAgICAgICBt
X29iamVjdC0+c2V0U2VsZWN0ZWRSb3dzKHNlbGVjdGVkUm93cyk7Ci0gICAgfSBlbHNlIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5R3JhYmJlZEF0dHJp
YnV0ZV0pCi0gICAgICAgIG1fb2JqZWN0LT5zZXRBUklBR3JhYmJlZChbbnVtYmVyIGJvb2xWYWx1
ZV0pOwotfQotCi1zdGF0aWMgUmVuZGVyT2JqZWN0KiByZW5kZXJlckZvclZpZXcoTlNWaWV3KiB2
aWV3KQotewotICAgIGlmICghW3ZpZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChXZWJD
b3JlRnJhbWVWaWV3KV0pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgTlNWaWV3PFdlYkNvcmVG
cmFtZVZpZXc+KiBmcmFtZVZpZXcgPSAoTlNWaWV3PFdlYkNvcmVGcmFtZVZpZXc+Kil2aWV3Owot
ICAgIEZyYW1lKiBmcmFtZSA9IFtmcmFtZVZpZXcgX3dlYl9mcmFtZV07Ci0gICAgaWYgKCFmcmFt
ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBOb2RlKiBub2RlID0gZnJhbWUtPmRvY3VtZW50
KCktPm93bmVyRWxlbWVudCgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKTsKLX0KLQotLSAoaWQpX2FjY2Vzc2liaWxpdHlQ
YXJlbnRGb3JTdWJ2aWV3OihOU1ZpZXcqKXN1YnZpZXcKLXsgICAKLSAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gcmVuZGVyZXJGb3JWaWV3KHN1YnZpZXcpOwotICAgIGlmICghcmVuZGVyZXIp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBy
ZW5kZXJlci0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZW5kZXJl
cik7Ci0gICAgaWYgKG9iaikKLSAgICAgICAgcmV0dXJuIG9iai0+cGFyZW50T2JqZWN0VW5pZ25v
cmVkKCktPndyYXBwZXIoKTsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChOU1N0cmluZyopYWNj
ZXNzaWJpbGl0eUFjdGlvbkRlc2NyaXB0aW9uOihOU1N0cmluZyopYWN0aW9uCi17Ci0gICAgLy8g
d2UgaGF2ZSBubyBjdXN0b20gYWN0aW9ucwotICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlBY3Rp
b25EZXNjcmlwdGlvbihhY3Rpb24pOwotfQotCi0vLyBUaGUgQ0ZBdHRyaWJ1dGVkU3RyaW5nVHlw
ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBhY2Nlc3Np
YmlsaXR5Ci0vLyBvYmplY3QgdGhhdCBpcyBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuIHJhbmdlLgot
LSAoTlNBdHRyaWJ1dGVkU3RyaW5nKilkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlOihOU1Jh
bmdlKXJhbmdlCi17Ci0gICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gUGxhaW5UZXh0UmFu
Z2UocmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFu
Z2UgdmlzaWJsZVBvc1JhbmdlID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFu
Z2UodGV4dFJhbmdlKTsKLSAgICByZXR1cm4gW3NlbGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JU
ZXh0TWFya2VyUmFuZ2U6W3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6
dmlzaWJsZVBvc1JhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZpc2libGVQb3NSYW5nZS5lbmRdXTsK
LX0KLQotLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooUmFuZ2UqKXJhbmdlCi17Ci0gICAg
TlNSYW5nZSByZXN1bHQgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLSAgICBpZiAoIXJh
bmdlIHx8ICFyYW5nZS0+c3RhcnRDb250YWluZXIoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fb2JqZWN0LT5kb2N1bWVudCgpOwotICAgIGlm
ICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBzaXplX3QgbG9jYXRp
b247Ci0gICAgc2l6ZV90IGxlbmd0aDsKLSAgICBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5k
TGVuZ3RoRnJvbVJhbmdlKGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgcmFuZ2UsIGxvY2F0
aW9uLCBsZW5ndGgpOwotICAgIHJlc3VsdC5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICAgIHJlc3Vs
dC5sZW5ndGggPSBsZW5ndGg7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0tIChOU0ludGVn
ZXIpX2luZGV4Rm9yVGV4dE1hcmtlcjooaWQpbWFya2VyCi17Ci0gICAgaWYgKCFtYXJrZXIpCi0g
ICAgICAgIHJldHVybiBOU05vdEZvdW5kOwotICAgIAotICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uKFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6bWFya2VyXSk7ICAgIAot
ICAgIHJldHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZTpzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKV0ubG9jYXRpb247Ci19Ci0KLS0gKGlkKV90ZXh0TWFya2VyRm9ySW5kZXg6
KE5TSW50ZWdlcil0ZXh0SW5kZXgKLXsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX29iamVj
dC0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIAotICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHRleHRSYW5nZSA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCB0ZXh0
SW5kZXgsIDApOwotICAgIGlmICghdGV4dFJhbmdlIHx8ICF0ZXh0UmFuZ2UtPmJvdW5kYXJ5UG9p
bnRzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFZpc2libGVQb3NpdGlvbiBw
b3NpdGlvbih0ZXh0UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgcmV0dXJuIFtzZWxmIHRl
eHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246cG9zaXRpb25dOwotfQotCi0vLyBUaGUgUlRGIHJl
cHJlc2VudGF0aW9uIG9mIHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjY2Vzc2liaWxp
dHkgb2JqZWN0IHRoYXQgaXMKLS8vIHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4gcmFuZ2UuCi0tIChO
U0RhdGEqKWRvQVhSVEZGb3JSYW5nZTooTlNSYW5nZSlyYW5nZQotewotICAgIE5TQXR0cmlidXRl
ZFN0cmluZyogYXR0clN0cmluZyA9IFtzZWxmIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6
cmFuZ2VdOwotICAgIHJldHVybiBbYXR0clN0cmluZyBSVEZGcm9tUmFuZ2U6IE5TTWFrZVJhbmdl
KDAsIFthdHRyU3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczogbmlsXTsKLX0KLQot
LSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyopYXR0cmlidXRlIGZv
clBhcmFtZXRlcjooaWQpcGFyYW1ldGVyCi17Ci0gICAgaWQgdGV4dE1hcmtlciA9IG5pbDsKLSAg
ICBpZCB0ZXh0TWFya2VyUmFuZ2UgPSBuaWw7Ci0gICAgTlNOdW1iZXIqIG51bWJlciA9IG5pbDsK
LSAgICBOU0FycmF5KiBhcnJheSA9IG5pbDsKLSAgICBOU0RpY3Rpb25hcnkqIGRpY3Rpb25hcnkg
PSBuaWw7Ci0gICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IHVpRWxlbWVudCA9IDA7Ci0g
ICAgTlNQb2ludCBwb2ludCA9IE5TWmVyb1BvaW50OwotICAgIGJvb2wgcG9pbnRTZXQgPSBmYWxz
ZTsKLSAgICBOU1JhbmdlIHJhbmdlID0gezAsIDB9OwotICAgIGJvb2wgcmFuZ2VTZXQgPSBmYWxz
ZTsKLSAgICAKLSAgICAvLyBiYXNpYyBwYXJhbWV0ZXIgdmFsaWRhdGlvbgotICAgIGlmICghbV9v
YmplY3QgfHwgIWF0dHJpYnV0ZSB8fCAhcGFyYW1ldGVyKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIAotICAgIC8vIGNvbW1vbiBwYXJhbWV0ZXIgdHlwZSBjaGVjay9jYXN0aW5n
LiAgTmlsIGNoZWNrcyBpbiBoYW5kbGVycyBjYXRjaCB3cm9uZyB0eXBlIGNhc2UuCi0gICAgLy8g
Tk9URTogVGhpcyBhc3N1bWVzIG5pbCBpcyBub3QgYSB2YWxpZCBwYXJhbWV0ZXIsIGJlY2F1c2Ug
aXQgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbQotICAgIC8vIGEgcGFyYW1ldGVyIG9mIHRoZSB3
cm9uZyB0eXBlLgotICAgIGlmIChBWE9iamVjdElzVGV4dE1hcmtlcihwYXJhbWV0ZXIpKQotICAg
ICAgICB0ZXh0TWFya2VyID0gcGFyYW1ldGVyOwotCi0gICAgZWxzZSBpZiAoQVhPYmplY3RJc1Rl
eHRNYXJrZXJSYW5nZShwYXJhbWV0ZXIpKQotICAgICAgICB0ZXh0TWFya2VyUmFuZ2UgPSBwYXJh
bWV0ZXI7Ci0KLSAgICBlbHNlIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIHNlbGZdXSkKLSAgICAgICAgdWlFbGVtZW50ID0gWyhXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopcGFyYW1ldGVyIGFjY2Vzc2liaWxpdHlPYmplY3Rd
OwotCi0gICAgZWxzZSBpZiAoW3BhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltOU051bWJlciBzZWxm
XV0pCi0gICAgICAgIG51bWJlciA9IHBhcmFtZXRlcjsKLQotICAgIGVsc2UgaWYgKFtwYXJhbWV0
ZXIgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBzZWxmXV0pCi0gICAgICAgIGFycmF5ID0gcGFyYW1l
dGVyOwotCi0gICAgZWxzZSBpZiAoW3BhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25h
cnkgc2VsZl1dKQotICAgICAgICBkaWN0aW9uYXJ5ID0gcGFyYW1ldGVyOwotCi0gICAgZWxzZSBp
ZiAoW3BhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltOU1ZhbHVlIHNlbGZdXSAmJiBzdHJjbXAoWyhO
U1ZhbHVlKilwYXJhbWV0ZXIgb2JqQ1R5cGVdLCBAZW5jb2RlKE5TUG9pbnQpKSA9PSAwKSB7Ci0g
ICAgICAgIHBvaW50U2V0ID0gdHJ1ZTsKLSAgICAgICAgcG9pbnQgPSBbKE5TVmFsdWUqKXBhcmFt
ZXRlciBwb2ludFZhbHVlXTsKLQotICAgIH0gZWxzZSBpZiAoW3BhcmFtZXRlciBpc0tpbmRPZkNs
YXNzOltOU1ZhbHVlIHNlbGZdXSAmJiBzdHJjbXAoWyhOU1ZhbHVlKilwYXJhbWV0ZXIgb2JqQ1R5
cGVdLCBAZW5jb2RlKE5TUmFuZ2UpKSA9PSAwKSB7Ci0gICAgICAgIHJhbmdlU2V0ID0gdHJ1ZTsK
LSAgICAgICAgcmFuZ2UgPSBbKE5TVmFsdWUqKXBhcmFtZXRlciByYW5nZVZhbHVlXTsKLSAgICB9
IGVsc2UgewotICAgICAgICAvLyBBdHRyaWJ1dGUgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLiBBbGxv
dyBzdXBlciB0byBoYW5kbGUuCi0gICAgICAgIHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZSBmb3JQYXJhbWV0ZXI6cGFyYW1ldGVyXTsKLSAgICB9Ci0g
ICAgCi0gICAgLy8gZGlzcGF0Y2gKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50c0ZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRB
dHRyaWJ1dGVdKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHN0YXJ0T2JqZWN0ID0g
MDsKLSAgICAgICAgaWYgKFtbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QCJBWFN0YXJ0RWxlbWVu
dCJdIGlzS2luZE9mQ2xhc3M6W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHNlbGZdXSkK
LSAgICAgICAgICAgIHN0YXJ0T2JqZWN0ID0gWyhXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciopW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkAiQVhTdGFydEVsZW1lbnQiXSBhY2Nlc3NpYmls
aXR5T2JqZWN0XTsKLSAgICAgICAgCi0gICAgICAgIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rp
b24gc2VhcmNoRGlyZWN0aW9uID0gU2VhcmNoRGlyZWN0aW9uTmV4dDsKLSAgICAgICAgaWYgKFtb
ZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QCJBWERpcmVjdGlvbiJdIGlzS2luZE9mQ2xhc3M6W05T
U3RyaW5nIHNlbGZdXSkKLSAgICAgICAgICAgIHNlYXJjaERpcmVjdGlvbiA9IChbKE5TU3RyaW5n
KilbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QCJBWERpcmVjdGlvbiJdIGlzRXF1YWxUb1N0cmlu
ZzpAIkFYRGlyZWN0aW9uTmV4dCJdKSA/IFNlYXJjaERpcmVjdGlvbk5leHQgOiBTZWFyY2hEaXJl
Y3Rpb25QcmV2aW91czsKLSAgICAgICAgCi0gICAgICAgIEFjY2Vzc2liaWxpdHlTZWFyY2hLZXkg
c2VhcmNoS2V5ID0gQW55VHlwZVNlYXJjaEtleTsKLSAgICAgICAgaWYgKFtbZGljdGlvbmFyeSBv
YmplY3RGb3JLZXk6QCJBWFNlYXJjaEtleSJdIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIHNlbGZd
XSkKLSAgICAgICAgICAgIHNlYXJjaEtleSA9IGFjY2Vzc2liaWxpdHlTZWFyY2hLZXlGb3JTdHJp
bmcoKENGU3RyaW5nUmVmKVtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAIkFYU2VhcmNoS2V5Il0p
OwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIHNlYXJjaFRleHQ7Ci0gICAgICAgIGlmIChbW2Rp
Y3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkAiQVhTZWFyY2hUZXh0Il0gaXNLaW5kT2ZDbGFzczpbTlNT
dHJpbmcgc2VsZl1dKQotICAgICAgICAgICAgc2VhcmNoVGV4dCA9IChDRlN0cmluZ1JlZilbZGlj
dGlvbmFyeSBvYmplY3RGb3JLZXk6QCJBWFNlYXJjaFRleHQiXTsKLSAgICAgICAgCi0gICAgICAg
IHVuc2lnbmVkIHJlc3VsdHNMaW1pdCA9IDA7Ci0gICAgICAgIGlmIChbW2RpY3Rpb25hcnkgb2Jq
ZWN0Rm9yS2V5OkAiQVhSZXN1bHRzTGltaXQiXSBpc0tpbmRPZkNsYXNzOltOU051bWJlciBzZWxm
XV0pCi0gICAgICAgICAgICByZXN1bHRzTGltaXQgPSBbKE5TTnVtYmVyKilbZGljdGlvbmFyeSBv
YmplY3RGb3JLZXk6QCJBWFJlc3VsdHNMaW1pdCJdIHVuc2lnbmVkSW50VmFsdWVdOwotICAgICAg
ICAKLSAgICAgICAgQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhIGNyaXRlcmlhID0ge3N0YXJ0
T2JqZWN0LCBzZWFyY2hEaXJlY3Rpb24sIHNlYXJjaEtleSwgJnNlYXJjaFRleHQsIHJlc3VsdHNM
aW1pdH07Ci0KLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIHJlc3VsdHM7Ci0gICAgICAgIG1fb2JqZWN0LT5maW5kTWF0Y2hpbmdPYmplY3Rz
KCZjcml0ZXJpYSwgcmVzdWx0cyk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gY29udmVydFRv
TlNBcnJheShyZXN1bHRzKTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcklzVmFsaWRQYXJhbWV0ZXJpemVkQXR0cmli
dXRlXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0
aW9uRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXTsKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoQm9vbDohcG9zLmlzTnVsbCgpXTsKLSAgICB9Ci0gICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUluZGV4Rm9yVGV4dE1hcmtlclBhcmFtZXRl
cml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aElu
dGVnZXI6W3NlbGYgX2luZGV4Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXV07Ci0gICAgfQotICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
Rm9ySW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAgICByZXR1cm4gW3NlbGYg
X3RleHRNYXJrZXJGb3JJbmRleDpbbnVtYmVyIGludGVnZXJWYWx1ZV1dOwotICAgIH0KLSAgICAK
LSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFVJRWxlbWVudEZvclRleHRN
YXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZp
c2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogYXhPYmplY3QgPSBtX29iamVjdC0+YWNjZXNzaWJpbGl0eU9iamVjdEZv
clBvc2l0aW9uKHZpc2libGVQb3MpOwotICAgICAgICBpZiAoIWF4T2JqZWN0KQotICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICAgICAgcmV0dXJuIGF4T2JqZWN0LT53cmFwcGVyKCk7Ci0gICAg
fQotCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhUZXh0TWFya2VyUmFu
Z2VGb3JVSUVsZW1lbnQiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdl
ID0gdWlFbGVtZW50LmdldCgpLT52aXNpYmxlUG9zaXRpb25SYW5nZSgpOwotICAgICAgICByZXR1
cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFy
dCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07Ci0gICAgfQotCi0gICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOkAiQVhMaW5lRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtl
cjoodGV4dE1hcmtlcildOwotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhVbnNp
Z25lZEludDptX29iamVjdC0+bGluZUZvclBvc2l0aW9uKHZpc2libGVQb3MpXTsKLSAgICB9Ci0K
LSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFRleHRNYXJrZXJSYW5nZUZv
ckxpbmUiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmpl
Y3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZShbbnVtYmVyIGludFZhbHVlXSk7Ci0gICAg
ICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJh
bmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSJdKSB7
Ci0gICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IFtzZWxmIHZp
c2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07Ci0g
ICAgICAgIHJldHVybiBtX29iamVjdC0+c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2Uodmlz
aWJsZVBvc1JhbmdlKTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJp
bmc6QCJBWFRleHRNYXJrZXJGb3JQb3NpdGlvbiJdKSB7Ci0gICAgICAgIEludFBvaW50IHdlYkNv
cmVQb2ludCA9IEludFBvaW50KHBvaW50KTsKLSAgICAgICAgcmV0dXJuIHBvaW50U2V0ID8gW3Nl
bGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+dmlzaWJsZVBvc2l0aW9u
Rm9yUG9pbnQod2ViQ29yZVBvaW50KV0gOiBuaWw7Ci0gICAgfQotCi0gICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhCb3VuZHNGb3JUZXh0TWFya2VyUmFuZ2UiXSkgewotICAg
ICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zUmFuZ2UgPSBbc2VsZiB2aXNpYmxl
UG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwotICAgICAg
ICBOU1JlY3QgcmVjdCA9IG1fb2JqZWN0LT5ib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZSh2
aXNpYmxlUG9zUmFuZ2UpOwotICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpy
ZWN0XTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUJvdW5kc0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvbkZv
ckluZGV4KHJhbmdlLmxvY2F0aW9uKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IG1f
b2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5sb2NhdGlvbityYW5nZS5sZW5n
dGgpOwotICAgICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgTlNSZWN0IHJlY3QgPSBtX29iamVjdC0+Ym91bmRz
Rm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnQsIGVuZCkp
OwotICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpyZWN0XTsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVN0
cmluZ0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0ID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KHJhbmdlLmxv
Y2F0aW9uKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IG1fb2JqZWN0LT52aXNpYmxl
UG9zaXRpb25Gb3JJbmRleChyYW5nZS5sb2NhdGlvbityYW5nZS5sZW5ndGgpOwotICAgICAgICBp
ZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5zdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5n
ZShWaXNpYmxlUG9zaXRpb25SYW5nZShzdGFydCwgZW5kKSk7Ci0gICAgfQotCi0gICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtl
clJhbmdlIl0pCi0gICAgICAgIHJldHVybiBbc2VsZiBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRl
eHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwotCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNF
cXVhbFRvU3RyaW5nOkAiQVhUZXh0TWFya2VyUmFuZ2VGb3JVbm9yZGVyZWRUZXh0TWFya2VycyJd
KSB7Ci0gICAgICAgIGlmIChbYXJyYXkgY291bnRdIDwgMikKLSAgICAgICAgICAgIHJldHVybiBu
aWw7Ci0KLSAgICAgICAgaWQgdGV4dE1hcmtlcjEgPSBbYXJyYXkgb2JqZWN0QXRJbmRleDowXTsK
LSAgICAgICAgaWQgdGV4dE1hcmtlcjIgPSBbYXJyYXkgb2JqZWN0QXRJbmRleDoxXTsKLSAgICAg
ICAgaWYgKCFBWE9iamVjdElzVGV4dE1hcmtlcih0ZXh0TWFya2VyMSkgfHwgIUFYT2JqZWN0SXNU
ZXh0TWFya2VyKHRleHRNYXJrZXIyKSkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MxID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9y
VGV4dE1hcmtlcjoodGV4dE1hcmtlcjEpXTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVQb3MyID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcjIp
XTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT52aXNp
YmxlUG9zaXRpb25SYW5nZUZvclVub3JkZXJlZFBvc2l0aW9ucyh2aXNpYmxlUG9zMSwgdmlzaWJs
ZVBvczIpOwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQ
b3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07Ci0gICAgfQot
Ci0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0VGV4dE1hcmtlckZv
clRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtz
ZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAg
cmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPm5leHRW
aXNpYmxlUG9zaXRpb24odmlzaWJsZVBvcyldOwotICAgIH0KLQotICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7
Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0
aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4
dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+cHJldmlvdXNWaXNpYmxlUG9zaXRp
b24odmlzaWJsZVBvcyldOwotICAgIH0KLQotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpAIkFYTGVmdFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JU
ZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZw
UmFuZ2UgPSBtX29iamVjdC0+cG9zaXRpb25PZkxlZnRXb3JkKHZpc2libGVQb3MpOwotICAgICAg
ICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5n
ZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07Ci0gICAgfQotCi0gICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhSaWdodFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0
TWFya2VyIl0pIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2
aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIFZpc2li
bGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+cG9zaXRpb25PZlJpZ2h0V29yZCh2
aXNpYmxlUG9zKTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNp
YmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwotICAg
IH0KLQotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTGVmdExpbmVUZXh0
TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2Vy
KV07Ci0gICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+bGVm
dExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zKTsKLSAgICAgICAgcmV0dXJuIFtz
ZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5k
UG9zaXRpb246dnBSYW5nZS5lbmRdOwotICAgIH0KLQotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzpAIkFYUmlnaHRMaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7
Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0
aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICBWaXNpYmxlUG9zaXRpb25S
YW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnJpZ2h0TGluZVZpc2libGVQb3NpdGlvblJhbmdlKHZp
c2libGVQb3MpOwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2li
bGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07Ci0gICAg
fQotCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTZW50ZW5jZVRleHRN
YXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlz
aWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIp
XTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT5zZW50
ZW5jZUZvclBvc2l0aW9uKHZpc2libGVQb3MpOwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1h
cmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2
cFJhbmdlLmVuZF07Ci0gICAgfQotCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
OkAiQVhQYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0
TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFu
Z2UgPSBtX29iamVjdC0+cGFyYWdyYXBoRm9yUG9zaXRpb24odmlzaWJsZVBvcyk7Ci0gICAgICAg
IHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdl
LnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRNYXJr
ZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2li
bGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAgcmV0dXJuIFtz
ZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPm5leHRXb3JkRW5kKHZp
c2libGVQb3MpXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhQcmV2aW91c1dvcmRTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKLSAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25G
b3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFy
a2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5wcmV2aW91c1dvcmRTdGFydCh2aXNpYmxl
UG9zKV07Ci0gICAgfQotCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhO
ZXh0TGluZUVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0
ZXh0TWFya2VyKV07Ci0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBv
c2l0aW9uOm1fb2JqZWN0LT5uZXh0TGluZUVuZFBvc2l0aW9uKHZpc2libGVQb3MpXTsKLSAgICB9
Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzTGluZVN0
YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24g
dmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJr
ZXIpXTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246
bV9vYmplY3QtPnByZXZpb3VzTGluZVN0YXJ0UG9zaXRpb24odmlzaWJsZVBvcyldOwotICAgIH0K
LQotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dFNlbnRlbmNlRW5k
VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlz
aWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIp
XTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9v
YmplY3QtPm5leHRTZW50ZW5jZUVuZFBvc2l0aW9uKHZpc2libGVQb3MpXTsKLSAgICB9Ci0KLSAg
ICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzU2VudGVuY2VTdGFy
dFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2Vy
KV07Ci0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1f
b2JqZWN0LT5wcmV2aW91c1NlbnRlbmNlU3RhcnRQb3NpdGlvbih2aXNpYmxlUG9zKV07Ci0gICAg
fQotCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0UGFyYWdyYXBo
RW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24g
dmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJr
ZXIpXTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246
bV9vYmplY3QtPm5leHRQYXJhZ3JhcGhFbmRQb3NpdGlvbih2aXNpYmxlUG9zKV07Ci0gICAgfQot
Ci0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2aW91c1BhcmFncmFw
aFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRN
YXJrZXIpXTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRp
b246bV9vYmplY3QtPnByZXZpb3VzUGFyYWdyYXBoU3RhcnRQb3NpdGlvbih2aXNpYmxlUG9zKV07
Ci0gICAgfQotCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdHlsZVRl
eHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24g
dmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJr
ZXIpXTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT5z
dHlsZVJhbmdlRm9yUG9zaXRpb24odmlzaWJsZVBvcyk7Ci0gICAgICAgIHJldHVybiBbc2VsZiB0
ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0
aW9uOnZwUmFuZ2UuZW5kXTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6QCJBWExlbmd0aEZvclRleHRNYXJrZXJSYW5nZSJdKSB7Ci0gICAgICAgIFZpc2libGVQ
b3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IFtzZWxmIHZpc2libGVQb3NpdGlvblJhbmdl
Rm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07Ci0gICAgICAgIGludCBsZW5ndGgg
PSBtX29iamVjdC0+bGVuZ3RoRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvc1Jhbmdl
KTsKLSAgICAgICAgaWYgKGxlbmd0aCA8IDApCi0gICAgICAgICAgICByZXR1cm4gbmlsOwotICAg
ICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bGVuZ3RoXTsKLSAgICB9Ci0KLSAg
ICAvLyBVc2VkIG9ubHkgYnkgRHVtcFJlbmRlclRyZWUgKHNvIGZhcikuCi0gICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFu
Z2UiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zUmFuZ2UgPSBb
c2VsZiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFu
Z2VdOwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjp2
aXNpYmxlUG9zUmFuZ2Uuc3RhcnRdOwotICAgIH0KLQotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzpAIkFYRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSJdKSB7Ci0gICAg
ICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IFtzZWxmIHZpc2libGVQ
b3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07Ci0gICAgICAg
IHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOnZpc2libGVQb3NSYW5n
ZS5lbmRdOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRh
YmxlKCkpIHsKLSAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eUNlbGxGb3JDb2x1bW5BbmRSb3dQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAg
ICAgICAgICAgaWYgKGFycmF5ID09IG5pbCB8fCBbYXJyYXkgY291bnRdICE9IDIpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwq
IGNlbGwgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihtX29iamVjdCktPmNlbGxG
b3JDb2x1bW5BbmRSb3coW1thcnJheSBvYmplY3RBdEluZGV4OjBdIHVuc2lnbmVkSW50VmFsdWVd
LCBbW2FycmF5IG9iamVjdEF0SW5kZXg6MV0gdW5zaWduZWRJbnRWYWx1ZV0pOwotICAgICAgICAg
ICAgaWYgKCFjZWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHJldHVybiBjZWxsLT53cmFwcGVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAobV9vYmplY3QtPmlzVGV4dENvbnRyb2woKSkgewotICAgICAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmluZyAqKWtBWExpbmVGb3JJbmRleFBhcmFtZXRl
cml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IG1fb2JqZWN0
LT5kb0FYTGluZUZvckluZGV4KFtudW1iZXIgaW50VmFsdWVdKTsKLSAgICAgICAgICAgIGlmIChs
aW5lTnVtYmVyIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAgICAg
cmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6bGluZU51bWJlcl07Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmlu
ZyAqKWtBWFJhbmdlRm9yTGluZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAg
ICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+ZG9BWFJhbmdlRm9yTGluZShb
bnVtYmVyIGludFZhbHVlXSk7Ci0gICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRo
UmFuZ2U6IE5TTWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0aCldOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNT
dHJpbmcqKWtBWFN0cmluZ0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAg
ICAgICAgIFBsYWluVGV4dFJhbmdlIHBsYWluVGV4dFJhbmdlID0gUGxhaW5UZXh0UmFuZ2UocmFu
Z2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCk7Ci0gICAgICAgICAgICByZXR1cm4gcmFuZ2VTZXQg
PyAoaWQpKG1fb2JqZWN0LT5kb0FYU3RyaW5nRm9yUmFuZ2UocGxhaW5UZXh0UmFuZ2UpKSA6IG5p
bDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzog
KE5TU3RyaW5nKilrQVhSYW5nZUZvclBvc2l0aW9uUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsK
LSAgICAgICAgICAgIGlmICghcG9pbnRTZXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICAgICAgICAgIEludFBvaW50IHdlYkNvcmVQb2ludCA9IEludFBvaW50KHBvaW50KTsKLSAg
ICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5kb0FYUmFuZ2VG
b3JQb3NpdGlvbih3ZWJDb3JlUG9pbnQpOwotICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZh
bHVlV2l0aFJhbmdlOiBOU01ha2VSYW5nZSh0ZXh0UmFuZ2Uuc3RhcnQsIHRleHRSYW5nZS5sZW5n
dGgpXTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzogKE5TU3RyaW5nKilrQVhSYW5nZUZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsK
LSAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5kb0FYUmFu
Z2VGb3JJbmRleChbbnVtYmVyIGludFZhbHVlXSk7Ci0gICAgICAgICAgICByZXR1cm4gW05TVmFs
dWUgdmFsdWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdl
Lmxlbmd0aCldOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRv
U3RyaW5nOiAoTlNTdHJpbmcqKWtBWEJvdW5kc0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0
ZV0pIHsKLSAgICAgICAgICAgIGlmICghcmFuZ2VTZXQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHBsYWluVGV4dFJhbmdlID0gUGxhaW5U
ZXh0UmFuZ2UocmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCk7Ci0gICAgICAgICAgICBOU1Jl
Y3QgcmVjdCA9IG1fb2JqZWN0LT5kb0FYQm91bmRzRm9yUmFuZ2UocGxhaW5UZXh0UmFuZ2UpOwot
ICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6cmVjdF07Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmluZyop
a0FYUlRGRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVy
biByYW5nZVNldCA/IFtzZWxmIGRvQVhSVEZGb3JSYW5nZTpyYW5nZV0gOiBuaWw7Ci0KLSAgICAg
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNTdHJpbmcqKWtBWEF0dHJpYnV0
ZWRTdHJpbmdGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0
dXJuIHJhbmdlU2V0ID8gW3NlbGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZTpyYW5nZV0g
OiBuaWw7Ci0KLSAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNTdHJp
bmcqKWtBWFN0eWxlUmFuZ2VGb3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAg
ICAgICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+ZG9BWFN0eWxlUmFu
Z2VGb3JJbmRleChbbnVtYmVyIGludFZhbHVlXSk7Ci0gICAgICAgICAgICByZXR1cm4gW05TVmFs
dWUgdmFsdWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdl
Lmxlbmd0aCldOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlcmUgYXJlIHNvbWUgcGFy
YW1ldGVycyB0aGF0IHN1cGVyIGhhbmRsZXMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkgcmV0dXJu
ZWQgYnkgdGhlIGxpc3Qgb2YgdGhlIGVsZW1lbnQncyBhdHRyaWJ1dGVzLgotICAgIC8vIEluIHRo
YXQgY2FzZSBpdCBtdXN0IGJlIHBhc3NlZCB0byBzdXBlci4gCi0gICAgcmV0dXJuIFtzdXBlciBh
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6YXR0cmlidXRlIGZvclBhcmFtZXRlcjpwYXJhbWV0
ZXJdOwotfQotCi0tIChCT09MKWFjY2Vzc2liaWxpdHlTdXBwb3J0c092ZXJyaWRkZW5BdHRyaWJ1
dGVzCi17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAoQk9PTClhY2Nlc3NpYmlsaXR5U2hvdWxk
VXNlVW5pcXVlSWQKLXsKLSAgICAvLyBBbGwgQVggb2JqZWN0IHdyYXBwZXJzIHNob3VsZCB1c2Ug
dW5pcXVlIElEJ3MgYmVjYXVzZSBpdCdzIGZhc3RlciB3aXRoaW4gQXBwS2l0IHRvIGxvb2sgdGhl
bSB1cC4KLSAgICByZXR1cm4gWUVTOwotfQotCi0vLyBBUEkgdGhhdCBBcHBLaXQgdXNlcyBmb3Ig
ZmFzdGVyIGFjY2VzcwotLSAoTlNVSW50ZWdlcilhY2Nlc3NpYmlsaXR5SW5kZXhPZkNoaWxkOihp
ZCljaGlsZAotewotICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKLSAg
ICAgICAgcmV0dXJuIE5TTm90Rm91bmQ7Ci0gICAgCi0gICAgLy8gVHJlZSBvYmplY3RzIHJldHVy
biB0aGVpciByb3dzIGFzIHRoZWlyIGNoaWxkcmVuLiBXZSBjYW4gdXNlIHRoZSBvcmlnaW5hbCBt
ZXRob2QKLSAgICAvLyBoZXJlLCBiZWNhdXNlIHdlIHdvbid0IGdhaW4gYW55IHNwZWVkIHVwLgot
ICAgIGlmIChtX29iamVjdC0+aXNUcmVlKCkpCi0gICAgICAgIHJldHVybiBbc3VwZXIgYWNjZXNz
aWJpbGl0eUluZGV4T2ZDaGlsZDpjaGlsZF07Ci0gICAgICAgCi0gICAgY29uc3QgQWNjZXNzaWJp
bGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IG1fb2Jq
ZWN0LT5jaGlsZHJlbigpOwotICAgICAgIAotICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBbW3NlbGYgcmVuZGVyV2lkZ2V0Q2hpbGRyZW5dIGluZGV4T2ZPYmplY3Q6
Y2hpbGRdOwotICAgIAotICAgIHVuc2lnbmVkIGNvdW50ID0gY2hpbGRyZW4uc2l6ZSgpOwotICAg
IGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBjb3VudDsgKytrKSB7Ci0gICAgICAgIFdlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gY2hpbGRyZW5ba10tPndyYXBwZXIoKTsK
LSAgICAgICAgaWYgKHdyYXBwZXIgPT0gY2hpbGQgfHwgKGNoaWxkcmVuW2tdLT5pc0F0dGFjaG1l
bnQoKSAmJiBbd3JhcHBlciBhdHRhY2htZW50Vmlld10gPT0gY2hpbGQpKSAKLSAgICAgICAgICAg
IHJldHVybiBrOwotICAgIH0KLQotICAgIHJldHVybiBOU05vdEZvdW5kOwotfQotCi0tIChOU1VJ
bnRlZ2VyKWFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZUNvdW50OihOU1N0cmluZyAqKWF0dHJp
YnV0ZQotewotICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSkgewotICAgICAgICAvLyBUcmVlIGl0ZW1z
IG9iamVjdCByZXR1cm5zIGEgZGlmZmVyZW50IHNldCBvZiBjaGlsZHJlbiB0aGFuIHRob3NlIHRo
YXQgYXJlIGluIGNoaWxkcmVuKCkKLSAgICAgICAgLy8gYmVjYXVzZSBhbiBBWE91dGxpbmUgKHRo
ZSBtYWMgcm9sZSBpcyBiZWNvbWVzKSBoYXMgc29tZSBvZGQgc3RpcHVsYXRpb25zLgotICAgICAg
ICBpZiAobV9vYmplY3QtPmlzVHJlZSgpIHx8IG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpCi0gICAg
ICAgICAgICByZXR1cm4gW1tzZWxmIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vz
c2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV0gY291bnRdOwotICAgICAgICAKLSAgICAgICAgY29u
c3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGls
ZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOwotICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0
eSgpKQotICAgICAgICAgICAgcmV0dXJuIFtbc2VsZiByZW5kZXJXaWRnZXRDaGlsZHJlbl0gY291
bnRdOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNpemUoKTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVDb3VudDph
dHRyaWJ1dGVdOwotfQotCi0tIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUFycmF5QXR0cmlidXRl
VmFsdWVzOihOU1N0cmluZyAqKWF0dHJpYnV0ZSBpbmRleDooTlNVSW50ZWdlcilpbmRleCBtYXhD
b3VudDooTlNVSW50ZWdlciltYXhDb3VudCAKLXsKLSAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVj
dEJhY2tpbmdTdG9yZV0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSkg
ewotICAgICAgICBpZiAobV9vYmplY3QtPmNoaWxkcmVuKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBOU0FycmF5ICpjaGlsZHJlbiA9IFtzZWxmIHJlbmRlcldpZGdldENoaWxkcmVuXTsKLSAg
ICAgICAgICAgIGlmICghY2hpbGRyZW4pIAotICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIE5TVUludGVnZXIgY2hpbGRDb3VudCA9IFtjaGlsZHJl
biBjb3VudF07Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gY2hpbGRDb3VudCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBOU1VJbnRlZ2Vy
IGFycmF5TGVuZ3RoID0gbWluKGNoaWxkQ291bnQgLSBpbmRleCwgbWF4Q291bnQpOwotICAgICAg
ICAgICAgcmV0dXJuIFtjaGlsZHJlbiBzdWJhcnJheVdpdGhSYW5nZTpOU01ha2VSYW5nZShpbmRl
eCwgYXJyYXlMZW5ndGgpXTsKLSAgICAgICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNUcmVlKCkp
IHsKLSAgICAgICAgICAgIC8vIFRyZWUgb2JqZWN0cyByZXR1cm4gdGhlaXIgcm93cyBhcyB0aGVp
ciBjaGlsZHJlbi4gV2UgY2FuIHVzZSB0aGUgb3JpZ2luYWwgbWV0aG9kIGluIHRoaXMgY2FzZS4K
LSAgICAgICAgICAgIHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUFycmF5QXR0cmlidXRlVmFs
dWVzOmF0dHJpYnV0ZSBpbmRleDppbmRleCBtYXhDb3VudDptYXhDb3VudF07Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKLSAgICAg
ICAgdW5zaWduZWQgY2hpbGRDb3VudCA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICAgICAgaWYgKGlu
ZGV4ID49IGNoaWxkQ291bnQpCi0gICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAKLSAg
ICAgICAgdW5zaWduZWQgYXZhaWxhYmxlID0gbWluKGNoaWxkQ291bnQgLSBpbmRleCwgbWF4Q291
bnQpOwotICAgICAgICAKLSAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnN1YmFycmF5ID0gW05TTXV0
YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmF2YWlsYWJsZV07Ci0gICAgICAgIGZvciAodW5z
aWduZWQgYWRkZWQgPSAwOyBhZGRlZCA8IGF2YWlsYWJsZTsgKytpbmRleCwgKythZGRlZCkgewot
ICAgICAgICAgICAgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBjaGls
ZHJlbltpbmRleF0tPndyYXBwZXIoKTsKLSAgICAgICAgICAgIGlmICh3cmFwcGVyKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gVGhlIGF0dGFjaG1lbnQgdmlldyBzaG91bGQgYmUgcmV0dXJuZWQsIG90
aGVyd2lzZSBBWCBwYWxpbmRyb21lIGVycm9ycyBvY2N1ci4KLSAgICAgICAgICAgICAgICBpZiAo
Y2hpbGRyZW5baW5kZXhdLT5pc0F0dGFjaG1lbnQoKSAmJiBbd3JhcHBlciBhdHRhY2htZW50Vmll
d10pCi0gICAgICAgICAgICAgICAgICAgIFtzdWJhcnJheSBhZGRPYmplY3Q6W3dyYXBwZXIgYXR0
YWNobWVudFZpZXddXTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IFtzdWJhcnJheSBhZGRPYmplY3Q6d3JhcHBlcl07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHJldHVybiBzdWJhcnJheTsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVWYWx1ZXM6YXR0cmlidXRlIGlu
ZGV4OmluZGV4IG1heENvdW50Om1heENvdW50XTsKLX0KLQogLy8gVGhpcyBpcyBzZXQgYnkgRFJU
IHdoZW4gaXQgd2FudHMgdG8gbGlzdGVuIGZvciBub3RpZmljYXRpb25zLgogc3RhdGljIEJPT0wg
YWNjZXNzaWJpbGl0eVNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM7CiArICh2b2lkKWFjY2Vzc2li
aWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOihCT09MKXJlcG9zdApJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNTM3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyTWFjLmgiCisKKyNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCisKKyNpbXBvcnQgIkFYT2JqZWN0
Q2FjaGUuaCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5oIgorI2ltcG9ydCAi
QWNjZXNzaWJpbGl0eUxpc3QuaCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlMaXN0Qm94LmgiCisj
aW1wb3J0ICJBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgiCisjaW1wb3J0ICJBY2Nlc3NpYmls
aXR5U2Nyb2xsVmlldy5oIgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uaCIKKyNp
bXBvcnQgIkFjY2Vzc2liaWxpdHlUYWJsZS5oIgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVRhYmxl
Q2VsbC5oIgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmgiCisjaW1wb3J0ICJB
Y2Nlc3NpYmlsaXR5VGFibGVSb3cuaCIKKyNpbXBvcnQgIkNocm9tZS5oIgorI2ltcG9ydCAiQ2hy
b21lQ2xpZW50LmgiCisjaW1wb3J0ICJDb2xvck1hYy5oIgorI2ltcG9ydCAiQ29udGV4dE1lbnVD
b250cm9sbGVyLmgiCisjaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGcmFtZS5oIgorI2ltcG9y
dCAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW1w
b3J0ICJIVE1MQW5jaG9yRWxlbWVudC5oIgorI2ltcG9ydCAiSFRNTEFyZWFFbGVtZW50LmgiCisj
aW1wb3J0ICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxJbWFnZUVsZW1l
bnQuaCIKKyNpbXBvcnQgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxOYW1lcy5o
IgorI2ltcG9ydCAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgorI2ltcG9ydCAiTG9jYWxpemVkU3Ry
aW5ncy5oIgorI2ltcG9ydCAiUGFnZS5oIgorI2ltcG9ydCAiUmVuZGVyVGV4dENvbnRyb2wuaCIK
KyNpbXBvcnQgIlJlbmRlclZpZXcuaCIKKyNpbXBvcnQgIlJlbmRlcldpZGdldC5oIgorI2ltcG9y
dCAiU2Nyb2xsVmlldy5oIgorI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKKyNpbXBvcnQgIlRl
eHRDaGVja2VyQ2xpZW50LmgiCisjaW1wb3J0ICJUZXh0Q2hlY2tpbmdIZWxwZXIuaCIKKyNpbXBv
cnQgIlRleHRJdGVyYXRvci5oIgorI2ltcG9ydCAiV2ViQ29yZUZyYW1lVmlldy5oIgorI2ltcG9y
dCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uu
aCIKKyNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCisjaW1wb3J0ICJ2aXNpYmxlX3VuaXRzLmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKK3Vz
aW5nIG5hbWVzcGFjZSBzdGQ7CisKKy8vIENlbGwgVGFibGVzCisjaWZuZGVmIE5TQWNjZXNzaWJp
bGl0eVNlbGVjdGVkQ2VsbHNBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0
ZWRDZWxsc0F0dHJpYnV0ZSBAIkFYU2VsZWN0ZWRDZWxscyIKKyNlbmRpZgorCisjaWZuZGVmIE5T
QWNjZXNzaWJpbGl0eVZpc2libGVDZWxsc0F0dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxp
dHlWaXNpYmxlQ2VsbHNBdHRyaWJ1dGUgQCJBWFZpc2libGVDZWxscyIKKyNlbmRpZgorCisjaWZu
ZGVmIE5TQWNjZXNzaWJpbGl0eVJvd0hlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGUKKyNkZWZpbmUg
TlNBY2Nlc3NpYmlsaXR5Um93SGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZSBAIkFYUm93SGVhZGVy
VUlFbGVtZW50cyIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVJvd0luZGV4UmFu
Z2VBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Um93SW5kZXhSYW5nZUF0dHJpYnV0
ZSBAIkFYUm93SW5kZXhSYW5nZSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUNv
bHVtbkluZGV4UmFuZ2VBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Q29sdW1uSW5k
ZXhSYW5nZUF0dHJpYnV0ZSBAIkFYQ29sdW1uSW5kZXhSYW5nZSIKKyNlbmRpZgorCisjaWZuZGVm
IE5TQWNjZXNzaWJpbGl0eUNlbGxGb3JDb2x1bW5BbmRSb3dQYXJhbWV0ZXJpemVkQXR0cmlidXRl
CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUNlbGxGb3JDb2x1bW5BbmRSb3dQYXJhbWV0ZXJpemVk
QXR0cmlidXRlIEAiQVhDZWxsRm9yQ29sdW1uQW5kUm93IgorI2VuZGlmCisKKyNpZm5kZWYgTlNB
Y2Nlc3NpYmlsaXR5Q2VsbFJvbGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Q2VsbFJvbGUgQCJB
WENlbGwiCisjZW5kaWYKKworLy8gTGlzdHMKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Q29udGVu
dExpc3RTdWJyb2xlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUNvbnRlbnRMaXN0U3Vicm9sZSBA
IkFYQ29udGVudExpc3QiCisjZW5kaWYKKworI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlEZXNjcmlw
dGlvbkxpc3RTdWJyb2xlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uTGlzdFN1
YnJvbGUgQCJBWERlc2NyaXB0aW9uTGlzdCIKKyNlbmRpZgorCisvLyBNaXNjZWxsYW5lb3VzCisj
aWZuZGVmIE5TQWNjZXNzaWJpbGl0eUJsb2NrUXVvdGVMZXZlbEF0dHJpYnV0ZQorI2RlZmluZSBO
U0FjY2Vzc2liaWxpdHlCbG9ja1F1b3RlTGV2ZWxBdHRyaWJ1dGUgQCJBWEJsb2NrUXVvdGVMZXZl
bCIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUFjY2Vzc0tleUF0dHJpYnV0ZQor
I2RlZmluZSBOU0FjY2Vzc2liaWxpdHlBY2Nlc3NLZXlBdHRyaWJ1dGUgQCJBWEFjY2Vzc0tleSIK
KyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUxhbmd1YWdlQXR0cmlidXRlCisjZGVm
aW5lIE5TQWNjZXNzaWJpbGl0eUxhbmd1YWdlQXR0cmlidXRlIEAiQVhMYW5ndWFnZSIKKyNlbmRp
ZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVJlcXVpcmVkQXR0cmlidXRlCisjZGVmaW5lIE5T
QWNjZXNzaWJpbGl0eVJlcXVpcmVkQXR0cmlidXRlIEAiQVhSZXF1aXJlZCIKKyNlbmRpZgorCisj
aWZuZGVmIE5TQWNjZXNzaWJpbGl0eUludmFsaWRBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3Np
YmlsaXR5SW52YWxpZEF0dHJpYnV0ZSBAIkFYSW52YWxpZCIKKyNlbmRpZgorCisjaWZuZGVmIE5T
QWNjZXNzaWJpbGl0eU93bnNBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5T3duc0F0
dHJpYnV0ZSBAIkFYT3ducyIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUdyYWJi
ZWRBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5R3JhYmJlZEF0dHJpYnV0ZSBAIkFY
R3JhYmJlZCIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0
cmlidXRlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRlIEAiQVhE
cm9wRWZmZWN0cyIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUFSSUFMaXZlQXR0
cmlidXRlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUFSSUFMaXZlQXR0cmlidXRlIEAiQVhBUklB
TGl2ZSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUFSSUFBdG9taWNBdHRyaWJ1
dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5QVJJQUF0b21pY0F0dHJpYnV0ZSBAIkFYQVJJQUF0
b21pYyIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUFSSUFSZWxldmFudEF0dHJp
YnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlBUklBUmVsZXZhbnRBdHRyaWJ1dGUgQCJBWEFS
SUFSZWxldmFudCIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUFSSUFCdXN5QXR0
cmlidXRlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUFSSUFCdXN5QXR0cmlidXRlIEAiQVhBUklB
QnVzeSIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUxvYWRpbmdQcm9ncmVzc0F0
dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlMb2FkaW5nUHJvZ3Jlc3NBdHRyaWJ1dGUg
QCJBWExvYWRpbmdQcm9ncmVzcyIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUhh
c1BvcHVwQXR0cmlidXRlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUhhc1BvcHVwQXR0cmlidXRl
IEAiQVhIYXNQb3B1cCIKKyNlbmRpZgorCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVBsYWNlaG9s
ZGVyVmFsdWVBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5UGxhY2Vob2xkZXJWYWx1
ZUF0dHJpYnV0ZSBAIkFYUGxhY2Vob2xkZXJWYWx1ZSIKKyNlbmRpZgorCisvLyBTZWFyY2gKKyNp
Zm5kZWYgTlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50c0ZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXRl
cml6ZWRBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50c0ZvclNlYXJj
aFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgQCJBWFVJRWxlbWVudHNGb3JTZWFyY2hQ
cmVkaWNhdGUiCisjZW5kaWYKKworLy8gU2VhcmNoIEtleXMKKyNpZm5kZWYgTlNBY2Nlc3NpYmls
aXR5QW55VHlwZVNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlBbnlUeXBlU2VhcmNo
S2V5IEAiQVhBbnlUeXBlU2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmls
aXR5QmxvY2txdW90ZVNhbWVMZXZlbFNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlC
bG9ja3F1b3RlU2FtZUxldmVsU2VhcmNoS2V5IEAiQVhCbG9ja3F1b3RlU2FtZUxldmVsU2VhcmNo
S2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5QmxvY2txdW90ZVNlYXJjaEtl
eQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlCbG9ja3F1b3RlU2VhcmNoS2V5IEAiQVhCbG9ja3F1
b3RlU2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Qm9sZEZvbnRT
ZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Qm9sZEZvbnRTZWFyY2hLZXkgQCJBWEJv
bGRGb250U2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5QnV0dG9u
U2VhcmNoS2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUJ1dHRvblNlYXJjaEtleSBAIkFYQnV0
dG9uU2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Q2hlY2tCb3hT
ZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Q2hlY2tCb3hTZWFyY2hLZXkgQCJBWENo
ZWNrQm94U2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5Q29udHJv
bFNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlDb250cm9sU2VhcmNoS2V5IEAiQVhD
b250cm9sU2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5RGlmZmVy
ZW50VHlwZVNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlEaWZmZXJlbnRUeXBlU2Vh
cmNoS2V5IEAiQVhEaWZmZXJlbnRUeXBlU2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNB
Y2Nlc3NpYmlsaXR5Rm9udENoYW5nZVNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlG
b250Q2hhbmdlU2VhcmNoS2V5IEAiQVhGb250Q2hhbmdlU2VhcmNoS2V5IgorI2VuZGlmCisKKyNp
Zm5kZWYgTlNBY2Nlc3NpYmlsaXR5Rm9udENvbG9yQ2hhbmdlU2VhcmNoS2V5CisjZGVmaW5lIE5T
QWNjZXNzaWJpbGl0eUZvbnRDb2xvckNoYW5nZVNlYXJjaEtleSBAIkFYRm9udENvbG9yQ2hhbmdl
U2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5RnJhbWVTZWFyY2hL
ZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5RnJhbWVTZWFyY2hLZXkgQCJBWEZyYW1lU2VhcmNo
S2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5R3JhcGhpY1NlYXJjaEtleQor
I2RlZmluZSBOU0FjY2Vzc2liaWxpdHlHcmFwaGljU2VhcmNoS2V5IEAiQVhHcmFwaGljU2VhcmNo
S2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsMVNlYXJj
aEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWwxU2VhcmNoS2V5IEAiQVhI
ZWFkaW5nTGV2ZWwxU2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5
SGVhZGluZ0xldmVsMlNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2
ZWwyU2VhcmNoS2V5IEAiQVhIZWFkaW5nTGV2ZWwyU2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5k
ZWYgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsM1NlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vz
c2liaWxpdHlIZWFkaW5nTGV2ZWwzU2VhcmNoS2V5IEAiQVhIZWFkaW5nTGV2ZWwzU2VhcmNoS2V5
IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsNFNlYXJjaEtl
eQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWw0U2VhcmNoS2V5IEAiQVhIZWFk
aW5nTGV2ZWw0U2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGVh
ZGluZ0xldmVsNVNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWw1
U2VhcmNoS2V5IEAiQVhIZWFkaW5nTGV2ZWw1U2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYg
TlNBY2Nlc3NpYmlsaXR5SGVhZGluZ0xldmVsNlNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2li
aWxpdHlIZWFkaW5nTGV2ZWw2U2VhcmNoS2V5IEAiQVhIZWFkaW5nTGV2ZWw2U2VhcmNoS2V5Igor
I2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SGVhZGluZ1NhbWVMZXZlbFNlYXJjaEtl
eQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nU2FtZUxldmVsU2VhcmNoS2V5IEAiQVhI
ZWFkaW5nU2FtZUxldmVsU2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmls
aXR5SGVhZGluZ1NlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nU2VhcmNo
S2V5IEAiQVhIZWFkaW5nU2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmls
aXR5SGlnaGxpZ2h0ZWRTZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5SGlnaGxpZ2h0
ZWRTZWFyY2hLZXkgQCJBWEhpZ2hsaWdodGVkU2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYg
TlNBY2Nlc3NpYmlsaXR5SXRhbGljRm9udFNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxp
dHlJdGFsaWNGb250U2VhcmNoS2V5IEAiQVhJdGFsaWNGb250U2VhcmNoS2V5IgorI2VuZGlmCisK
KyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5TGFuZG1hcmtTZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nl
c3NpYmlsaXR5TGFuZG1hcmtTZWFyY2hLZXkgQCJBWExhbmRtYXJrU2VhcmNoS2V5IgorI2VuZGlm
CisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5TGlua1NlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vz
c2liaWxpdHlMaW5rU2VhcmNoS2V5IEAiQVhMaW5rU2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5k
ZWYgTlNBY2Nlc3NpYmlsaXR5TGlzdFNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlM
aXN0U2VhcmNoS2V5IEAiQVhMaXN0U2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nl
c3NpYmlsaXR5TGl2ZVJlZ2lvblNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlMaXZl
UmVnaW9uU2VhcmNoS2V5IEAiQVhMaXZlUmVnaW9uU2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5k
ZWYgTlNBY2Nlc3NpYmlsaXR5TWlzc3BlbGxlZFdvcmRTZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nl
c3NpYmlsaXR5TWlzc3BlbGxlZFdvcmRTZWFyY2hLZXkgQCJBWE1pc3NwZWxsZWRXb3JkU2VhcmNo
S2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5UGxhaW5UZXh0U2VhcmNoS2V5
CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVBsYWluVGV4dFNlYXJjaEtleSBAIkFYUGxhaW5UZXh0
U2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5UmFkaW9Hcm91cFNl
YXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlSYWRpb0dyb3VwU2VhcmNoS2V5IEAiQVhS
YWRpb0dyb3VwU2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5U2Ft
ZVR5cGVTZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5U2FtZVR5cGVTZWFyY2hLZXkg
QCJBWFNhbWVUeXBlU2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5
U3RhdGljVGV4dFNlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlTdGF0aWNUZXh0U2Vh
cmNoS2V5IEAiQVhTdGF0aWNUZXh0U2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nl
c3NpYmlsaXR5U3R5bGVDaGFuZ2VTZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5U3R5
bGVDaGFuZ2VTZWFyY2hLZXkgQCJBWFN0eWxlQ2hhbmdlU2VhcmNoS2V5IgorI2VuZGlmCisKKyNp
Zm5kZWYgTlNBY2Nlc3NpYmlsaXR5VGFibGVTYW1lTGV2ZWxTZWFyY2hLZXkKKyNkZWZpbmUgTlNB
Y2Nlc3NpYmlsaXR5VGFibGVTYW1lTGV2ZWxTZWFyY2hLZXkgQCJBWFRhYmxlU2FtZUxldmVsU2Vh
cmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5VGFibGVTZWFyY2hLZXkK
KyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VGFibGVTZWFyY2hLZXkgQCJBWFRhYmxlU2VhcmNoS2V5
IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5VGV4dEZpZWxkU2VhcmNoS2V5Cisj
ZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVRleHRGaWVsZFNlYXJjaEtleSBAIkFYVGV4dEZpZWxkU2Vh
cmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5VW5kZXJsaW5lU2VhcmNo
S2V5CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVVuZGVybGluZVNlYXJjaEtleSBAIkFYVW5kZXJs
aW5lU2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5VW52aXNpdGVk
TGlua1NlYXJjaEtleQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlVbnZpc2l0ZWRMaW5rU2VhcmNo
S2V5IEAiQVhVbnZpc2l0ZWRMaW5rU2VhcmNoS2V5IgorI2VuZGlmCisKKyNpZm5kZWYgTlNBY2Nl
c3NpYmlsaXR5VmlzaXRlZExpbmtTZWFyY2hLZXkKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5Vmlz
aXRlZExpbmtTZWFyY2hLZXkgQCJBWFZpc2l0ZWRMaW5rU2VhcmNoS2V5IgorI2VuZGlmCisKKyNk
ZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcklzVmFsaWRQYXJhbWV0ZXJpemVkQXR0cmli
dXRlIEAiQVhUZXh0TWFya2VySXNWYWxpZCIKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5SW5kZXhG
b3JUZXh0TWFya2VyUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBAIkFYSW5kZXhGb3JUZXh0TWFya2Vy
IgorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyRm9ySW5kZXhQYXJhbWV0ZXJpemVk
QXR0cmlidXRlIEAiQVhUZXh0TWFya2VyRm9ySW5kZXgiCisKKy8vIE1hdGggYXR0cmlidXRlcwor
I2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNYXRoUm9vdFJhZGljYW5kQXR0cmlidXRlIEAiQVhNYXRo
Um9vdFJhZGljYW5kIgorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNYXRoUm9vdEluZGV4QXR0cmli
dXRlIEAiQVhNYXRoUm9vdEluZGV4IgorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNYXRoRnJhY3Rp
b25EZW5vbWluYXRvckF0dHJpYnV0ZSBAIkFYTWF0aEZyYWN0aW9uRGVub21pbmF0b3IiCisjZGVm
aW5lIE5TQWNjZXNzaWJpbGl0eU1hdGhGcmFjdGlvbk51bWVyYXRvckF0dHJpYnV0ZSBAIkFYTWF0
aEZyYWN0aW9uTnVtZXJhdG9yIgorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlNYXRoQmFzZUF0dHJp
YnV0ZSBAIkFYTWF0aEJhc2UiCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eU1hdGhTdWJzY3JpcHRB
dHRyaWJ1dGUgQCJBWE1hdGhTdWJzY3JpcHQiCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eU1hdGhT
dXBlcnNjcmlwdEF0dHJpYnV0ZSBAIkFYTWF0aFN1cGVyc2NyaXB0IgorI2RlZmluZSBOU0FjY2Vz
c2liaWxpdHlNYXRoVW5kZXJBdHRyaWJ1dGUgQCJBWE1hdGhVbmRlciIKKyNkZWZpbmUgTlNBY2Nl
c3NpYmlsaXR5TWF0aE92ZXJBdHRyaWJ1dGUgQCJBWE1hdGhPdmVyIgorI2RlZmluZSBOU0FjY2Vz
c2liaWxpdHlNYXRoRmVuY2VkT3BlbkF0dHJpYnV0ZSBAIkFYTWF0aEZlbmNlZE9wZW4iCisjZGVm
aW5lIE5TQWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRDbG9zZUF0dHJpYnV0ZSBAIkFYTWF0aEZlbmNl
ZENsb3NlIgorCitAaW1wbGVtZW50YXRpb24gV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJN
YWMKKworLSAodm9pZCl1bnJlZ2lzdGVyVW5pcXVlSWRGb3JVSUVsZW1lbnQKK3sKKyAgICB3a1Vu
cmVnaXN0ZXJVbmlxdWVJZEZvckVsZW1lbnQoc2VsZik7Cit9CisKKy0gKHZvaWQpZGV0YWNoCit7
CisgICAgLy8gU2VuZCB1bnJlZ2lzdGVyVW5pcXVlSWRGb3JVSUVsZW1lbnQgdW5jb25kaXRpb25h
bGx5IGJlY2F1c2UgaWYgaXQgaXMKKyAgICAvLyBldmVyIGFjY2lkZW50YWxseSBub3QgZG9uZSAo
dmlhIG90aGVyIGJ1Z3MgaW4gb3VyIEFYIGltcGxlbWVudGF0aW9uKSB5b3UKKyAgICAvLyBlbmQg
dXAgd2l0aCBhIGNyYXNoIGxpa2UgPHJkYXI6Ly9wcm9ibGVtLzQyNzMxNDk+LiAgSXQgaXMgc2Fm
ZSBhbmQgbm90CisgICAgLy8gZXhwZW5zaXZlIHRvIHNlbmQgZXZlbiBpZiB0aGUgb2JqZWN0IGlz
IG5vdCByZWdpc3RlcmVkLgorICAgIFtzZWxmIHVucmVnaXN0ZXJVbmlxdWVJZEZvclVJRWxlbWVu
dF07CisgICAgW3N1cGVyIGRldGFjaF07Cit9CisKKy0gKGlkKWF0dGFjaG1lbnRWaWV3Cit7Cisg
ICAgQVNTRVJUKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSk7CisgICAgV2lkZ2V0KiB3aWRnZXQg
PSBtX29iamVjdC0+d2lkZ2V0Rm9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBpZiAoIXdpZGdldCkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VW5pZ25vcmVk
RGVzY2VuZGFudCh3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpOworfQorCisjcHJhZ21hIG1hcmsg
U3lzdGVtSW50ZXJmYWNlIHdyYXBwZXJzCisKK3N0YXRpYyBpbmxpbmUgaWQgQ0ZBdXRvcmVsZWFz
ZUhlbHBlcihDRlR5cGVSZWYgb2JqKQoreworICAgIGlmIChvYmopCisgICAgICAgIENGTWFrZUNv
bGxlY3RhYmxlKG9iaik7CisgICAgWyhpZClvYmogYXV0b3JlbGVhc2VdOworICAgIHJldHVybiAo
aWQpb2JqOworfQorCitzdGF0aWMgaW5saW5lIEJPT0wgQVhPYmplY3RJc1RleHRNYXJrZXIoaWQg
b2JqKQoreworICAgIHJldHVybiBvYmogIT0gbmlsICYmIENGR2V0VHlwZUlEKG9iaikgPT0gd2tH
ZXRBWFRleHRNYXJrZXJUeXBlSUQoKTsKK30KKworc3RhdGljIGlubGluZSBCT09MIEFYT2JqZWN0
SXNUZXh0TWFya2VyUmFuZ2UoaWQgb2JqKQoreworICAgIHJldHVybiBvYmogIT0gbmlsICYmIENG
R2V0VHlwZUlEKG9iaikgPT0gd2tHZXRBWFRleHRNYXJrZXJSYW5nZVR5cGVJRCgpOworfQorCitz
dGF0aWMgaWQgQVhUZXh0TWFya2VyUmFuZ2UoaWQgc3RhcnRNYXJrZXIsIGlkIGVuZE1hcmtlcikK
K3sKKyAgICBBU1NFUlQoc3RhcnRNYXJrZXIgIT0gbmlsKTsKKyAgICBBU1NFUlQoZW5kTWFya2Vy
ICE9IG5pbCk7CisgICAgQVNTRVJUKENGR2V0VHlwZUlEKHN0YXJ0TWFya2VyKSA9PSB3a0dldEFY
VGV4dE1hcmtlclR5cGVJRCgpKTsKKyAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQoZW5kTWFya2VyKSA9
PSB3a0dldEFYVGV4dE1hcmtlclR5cGVJRCgpKTsKKyAgICByZXR1cm4gQ0ZBdXRvcmVsZWFzZUhl
bHBlcih3a0NyZWF0ZUFYVGV4dE1hcmtlclJhbmdlKChDRlR5cGVSZWYpc3RhcnRNYXJrZXIsIChD
RlR5cGVSZWYpZW5kTWFya2VyKSk7Cit9CisKK3N0YXRpYyBpZCBBWFRleHRNYXJrZXJSYW5nZVN0
YXJ0KGlkIHJhbmdlKQoreworICAgIEFTU0VSVChyYW5nZSAhPSBuaWwpOworICAgIEFTU0VSVChD
RkdldFR5cGVJRChyYW5nZSkgPT0gd2tHZXRBWFRleHRNYXJrZXJSYW5nZVR5cGVJRCgpKTsKKyAg
ICByZXR1cm4gQ0ZBdXRvcmVsZWFzZUhlbHBlcih3a0NvcHlBWFRleHRNYXJrZXJSYW5nZVN0YXJ0
KHJhbmdlKSk7Cit9CisKK3N0YXRpYyBpZCBBWFRleHRNYXJrZXJSYW5nZUVuZChpZCByYW5nZSkK
K3sKKyAgICBBU1NFUlQocmFuZ2UgIT0gbmlsKTsKKyAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQocmFu
Z2UpID09IHdrR2V0QVhUZXh0TWFya2VyUmFuZ2VUeXBlSUQoKSk7CisgICAgcmV0dXJuIENGQXV0
b3JlbGVhc2VIZWxwZXIod2tDb3B5QVhUZXh0TWFya2VyUmFuZ2VFbmQocmFuZ2UpKTsKK30KKwor
I3ByYWdtYSBtYXJrIFNlYXJjaCBoZWxwZXJzCisKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEFj
Y2Vzc2liaWxpdHlTZWFyY2hLZXk+IEFjY2Vzc2liaWxpdHlTZWFyY2hLZXlNYXA7CisKK3N0cnVj
dCBTZWFyY2hLZXlFbnRyeSB7CisgICAgU3RyaW5nIGtleTsKKyAgICBBY2Nlc3NpYmlsaXR5U2Vh
cmNoS2V5IHZhbHVlOworfTsKKworc3RhdGljIEFjY2Vzc2liaWxpdHlTZWFyY2hLZXlNYXAqIGNy
ZWF0ZUFjY2Vzc2liaWxpdHlTZWFyY2hLZXlNYXAoKQoreworICAgIGNvbnN0IFNlYXJjaEtleUVu
dHJ5IHNlYXJjaEtleXNbXSA9IHsKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlBbnlUeXBlU2Vh
cmNoS2V5LCBBbnlUeXBlU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5Qmxv
Y2txdW90ZVNhbWVMZXZlbFNlYXJjaEtleSwgQmxvY2txdW90ZVNhbWVMZXZlbFNlYXJjaEtleSB9
LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUJsb2NrcXVvdGVTZWFyY2hLZXksIEJsb2NrcXVv
dGVTZWFyY2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlCb2xkRm9udFNlYXJjaEtl
eSwgQm9sZEZvbnRTZWFyY2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlCdXR0b25T
ZWFyY2hLZXksIEJ1dHRvblNlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUNo
ZWNrQm94U2VhcmNoS2V5LCBDaGVja0JveFNlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNz
aWJpbGl0eUNvbnRyb2xTZWFyY2hLZXksIENvbnRyb2xTZWFyY2hLZXkgfSwKKyAgICAgICAgeyBO
U0FjY2Vzc2liaWxpdHlEaWZmZXJlbnRUeXBlU2VhcmNoS2V5LCBEaWZmZXJlbnRUeXBlU2VhcmNo
S2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5Rm9udENoYW5nZVNlYXJjaEtleSwgRm9u
dENoYW5nZVNlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUZvbnRDb2xvckNo
YW5nZVNlYXJjaEtleSwgRm9udENvbG9yQ2hhbmdlU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNB
Y2Nlc3NpYmlsaXR5RnJhbWVTZWFyY2hLZXksIEZyYW1lU2VhcmNoS2V5IH0sCisgICAgICAgIHsg
TlNBY2Nlc3NpYmlsaXR5R3JhcGhpY1NlYXJjaEtleSwgR3JhcGhpY1NlYXJjaEtleSB9LAorICAg
ICAgICB7IE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDFTZWFyY2hLZXksIEhlYWRpbmdMZXZl
bDFTZWFyY2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWwyU2Vh
cmNoS2V5LCBIZWFkaW5nTGV2ZWwyU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmls
aXR5SGVhZGluZ0xldmVsM1NlYXJjaEtleSwgSGVhZGluZ0xldmVsM1NlYXJjaEtleSB9LAorICAg
ICAgICB7IE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdMZXZlbDRTZWFyY2hLZXksIEhlYWRpbmdMZXZl
bDRTZWFyY2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nTGV2ZWw1U2Vh
cmNoS2V5LCBIZWFkaW5nTGV2ZWw1U2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmls
aXR5SGVhZGluZ0xldmVsNlNlYXJjaEtleSwgSGVhZGluZ0xldmVsNlNlYXJjaEtleSB9LAorICAg
ICAgICB7IE5TQWNjZXNzaWJpbGl0eUhlYWRpbmdTYW1lTGV2ZWxTZWFyY2hLZXksIEhlYWRpbmdT
YW1lTGV2ZWxTZWFyY2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlIZWFkaW5nU2Vh
cmNoS2V5LCBIZWFkaW5nU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5SGln
aGxpZ2h0ZWRTZWFyY2hLZXksIEhpZ2hsaWdodGVkU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNB
Y2Nlc3NpYmlsaXR5SXRhbGljRm9udFNlYXJjaEtleSwgSXRhbGljRm9udFNlYXJjaEtleSB9LAor
ICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUxhbmRtYXJrU2VhcmNoS2V5LCBMYW5kbWFya1NlYXJj
aEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eUxpbmtTZWFyY2hLZXksIExpbmtTZWFy
Y2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlMaXN0U2VhcmNoS2V5LCBMaXN0U2Vh
cmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5TGl2ZVJlZ2lvblNlYXJjaEtleSwg
TGl2ZVJlZ2lvblNlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eU1pc3NwZWxs
ZWRXb3JkU2VhcmNoS2V5LCBNaXNzcGVsbGVkV29yZFNlYXJjaEtleSB9LAorICAgICAgICB7IE5T
QWNjZXNzaWJpbGl0eVBsYWluVGV4dFNlYXJjaEtleSwgUGxhaW5UZXh0U2VhcmNoS2V5IH0sCisg
ICAgICAgIHsgTlNBY2Nlc3NpYmlsaXR5UmFkaW9Hcm91cFNlYXJjaEtleSwgUmFkaW9Hcm91cFNl
YXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eVNhbWVUeXBlU2VhcmNoS2V5LCBT
YW1lVHlwZVNlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eVN0YXRpY1RleHRT
ZWFyY2hLZXksIFN0YXRpY1RleHRTZWFyY2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxp
dHlTdHlsZUNoYW5nZVNlYXJjaEtleSwgU3R5bGVDaGFuZ2VTZWFyY2hLZXkgfSwKKyAgICAgICAg
eyBOU0FjY2Vzc2liaWxpdHlUYWJsZVNhbWVMZXZlbFNlYXJjaEtleSwgVGFibGVTYW1lTGV2ZWxT
ZWFyY2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlUYWJsZVNlYXJjaEtleSwgVGFi
bGVTZWFyY2hLZXkgfSwKKyAgICAgICAgeyBOU0FjY2Vzc2liaWxpdHlUZXh0RmllbGRTZWFyY2hL
ZXksIFRleHRGaWVsZFNlYXJjaEtleSB9LAorICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eVVuZGVy
bGluZVNlYXJjaEtleSwgVW5kZXJsaW5lU2VhcmNoS2V5IH0sCisgICAgICAgIHsgTlNBY2Nlc3Np
YmlsaXR5VW52aXNpdGVkTGlua1NlYXJjaEtleSwgVW52aXNpdGVkTGlua1NlYXJjaEtleSB9LAor
ICAgICAgICB7IE5TQWNjZXNzaWJpbGl0eVZpc2l0ZWRMaW5rU2VhcmNoS2V5LCBWaXNpdGVkTGlu
a1NlYXJjaEtleSB9CisgICAgfTsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5U2VhcmNoS2V5TWFw
KiBzZWFyY2hLZXlNYXAgPSBuZXcgQWNjZXNzaWJpbGl0eVNlYXJjaEtleU1hcDsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoc2VhcmNoS2V5cyk7IGkrKykKKyAg
ICAgICAgc2VhcmNoS2V5TWFwLT5zZXQoc2VhcmNoS2V5c1tpXS5rZXksIHNlYXJjaEtleXNbaV0u
dmFsdWUpOworICAgIAorICAgIHJldHVybiBzZWFyY2hLZXlNYXA7Cit9CisKK3N0YXRpYyBBY2Nl
c3NpYmlsaXR5U2VhcmNoS2V5IGFjY2Vzc2liaWxpdHlTZWFyY2hLZXlGb3JTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gQW55VHlwZVNlYXJjaEtleTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgQWNjZXNzaWJpbGl0
eVNlYXJjaEtleU1hcCogc2VhcmNoS2V5TWFwID0gY3JlYXRlQWNjZXNzaWJpbGl0eVNlYXJjaEtl
eU1hcCgpOworICAgIAorICAgIEFjY2Vzc2liaWxpdHlTZWFyY2hLZXkgc2VhcmNoS2V5ID0gc2Vh
cmNoS2V5TWFwLT5nZXQodmFsdWUpOworICAgIAorICAgIHJldHVybiBzZWFyY2hLZXkgPyBzZWFy
Y2hLZXkgOiBBbnlUeXBlU2VhcmNoS2V5OworfQorCisjcHJhZ21hIG1hcmsgVGV4dCBNYXJrZXIg
aGVscGVycworCitzdGF0aWMgaWQgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihBWE9iamVj
dENhY2hlKiBjYWNoZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQoreworICAg
IEFTU0VSVChjYWNoZSk7CisgICAgCisgICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7
CisgICAgY2FjaGUtPnRleHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKHRleHRNYXJrZXJE
YXRhLCB2aXNpYmxlUG9zKTsKKyAgICBpZiAoIXRleHRNYXJrZXJEYXRhLmF4SUQpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgCisgICAgcmV0dXJuIENGQXV0b3JlbGVhc2VIZWxwZXIod2tDcmVh
dGVBWFRleHRNYXJrZXIoJnRleHRNYXJrZXJEYXRhLCBzaXplb2YodGV4dE1hcmtlckRhdGEpKSk7
Cit9CisKKy0gKGlkKXRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246KGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmKXZpc2libGVQb3MKK3sKKyAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQ
b3NpdGlvbihtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB2aXNpYmxlUG9zKTsKK30KKworc3Rh
dGljIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKEFYT2JqZWN0
Q2FjaGUqIGNhY2hlLCBDRlR5cGVSZWYgdGV4dE1hcmtlcikKK3sKKyAgICBBU1NFUlQoY2FjaGUp
OworICAgIAorICAgIGlmICghdGV4dE1hcmtlcikKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbigpOworICAgIFRleHRNYXJrZXJEYXRhIHRleHRNYXJrZXJEYXRhOworICAgIGlmICghd2tH
ZXRCeXRlc0Zyb21BWFRleHRNYXJrZXIodGV4dE1hcmtlciwgJnRleHRNYXJrZXJEYXRhLCBzaXpl
b2YodGV4dE1hcmtlckRhdGEpKSkKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwor
ICAgIAorICAgIHJldHVybiBjYWNoZS0+dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRhdGEo
dGV4dE1hcmtlckRhdGEpOworfQorCistIChWaXNpYmxlUG9zaXRpb24pdmlzaWJsZVBvc2l0aW9u
Rm9yVGV4dE1hcmtlcjooaWQpdGV4dE1hcmtlcgoreworICAgIHJldHVybiB2aXNpYmxlUG9zaXRp
b25Gb3JUZXh0TWFya2VyKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXIpOwor
fQorCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0
TWFya2VyUmFuZ2UoQVhPYmplY3RDYWNoZSAqY2FjaGUsIGlkIHRleHRNYXJrZXJSYW5nZSkKK3sK
KyAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihjYWNoZSwgQVhUZXh0TWFy
a2VyUmFuZ2VTdGFydCh0ZXh0TWFya2VyUmFuZ2UpKTsKK30KKworc3RhdGljIFZpc2libGVQb3Np
dGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JFbmRPZlRleHRNYXJrZXJSYW5nZShBWE9iamVjdENhY2hl
ICpjYWNoZSwgaWQgdGV4dE1hcmtlclJhbmdlKQoreworICAgIHJldHVybiB2aXNpYmxlUG9zaXRp
b25Gb3JUZXh0TWFya2VyKGNhY2hlLCBBWFRleHRNYXJrZXJSYW5nZUVuZCh0ZXh0TWFya2VyUmFu
Z2UpKTsKK30KKworc3RhdGljIGlkIHRleHRNYXJrZXJSYW5nZUZyb21NYXJrZXJzKGlkIHRleHRN
YXJrZXIxLCBpZCB0ZXh0TWFya2VyMikKK3sKKyAgICBpZiAoIXRleHRNYXJrZXIxIHx8ICF0ZXh0
TWFya2VyMikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICByZXR1cm4gQVhUZXh0TWFy
a2VyUmFuZ2UodGV4dE1hcmtlcjEsIHRleHRNYXJrZXIyKTsKK30KKworLy8gV2hlbiBtb2RpZnlp
bmcgYXR0cmlidXRlZCBzdHJpbmdzLCB0aGUgcmFuZ2UgY2FuIGNvbWUgZnJvbSBhIHNvdXJjZSB3
aGljaCBtYXkgcHJvdmlkZSBmYXVsdHkgaW5mb3JtYXRpb24gKGUuZy4gdGhlIHNwZWxsIGNoZWNr
ZXIpLgorLy8gVG8gcHJvdGVjdCBhZ2FpbnN0IHN1Y2ggY2FzZXMgdGhlIHJhbmdlIHNob3VsZCBi
ZSB2YWxpZGF0ZWQgYmVmb3JlIGFkZGluZyBvciByZW1vdmluZyBhdHRyaWJ1dGVzLgorc3RhdGlj
IEJPT0wgQVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKE5TQXR0cmlidXRlZFN0cmluZyog
YXR0clN0cmluZywgTlNSYW5nZSByYW5nZSkKK3sKKyAgICByZXR1cm4gKHJhbmdlLmxvY2F0aW9u
IDwgW2F0dHJTdHJpbmcgbGVuZ3RoXSAmJiBOU01heFJhbmdlKHJhbmdlKSA8PSBbYXR0clN0cmlu
ZyBsZW5ndGhdKTsKK30KKworc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KE5T
TXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIE5TU3RyaW5nKiBhdHRyaWJ1dGUs
IE5TRm9udCogZm9udCwgTlNSYW5nZSByYW5nZSkKK3sKKyAgICBpZiAoIUFYQXR0cmlidXRlZFN0
cmluZ1JhbmdlSXNWYWxpZChhdHRyU3RyaW5nLCByYW5nZSkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBpZiAoZm9udCkgeworICAgICAgICBOU0RpY3Rpb25hcnkqIGRpY3QgPSBbTlNEaWN0
aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbZm9udCBmb250TmFtZV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
TlNBY2Nlc3NpYmlsaXR5Rm9udE5hbWVLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbZm9udCBmYW1pbHlOYW1lXSAgICAgICAgICAgICAgICAgICAgICAgICAgICwgTlNBY2Nlc3Np
YmlsaXR5Rm9udEZhbWlseUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb250
IGRpc3BsYXlOYW1lXSAgICAgICAgICAgICAgICAgICAgICAgICAgLCBOU0FjY2Vzc2liaWxpdHlW
aXNpYmxlTmFtZUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBu
dW1iZXJXaXRoRmxvYXQ6W2ZvbnQgcG9pbnRTaXplXV0gLCBOU0FjY2Vzc2liaWxpdHlGb250U2l6
ZUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF07CisgICAgICAgIAorICAg
ICAgICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6YXR0cmlidXRlIHZhbHVlOmRpY3QgcmFuZ2U6
cmFuZ2VdOworICAgIH0gZWxzZQorICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6
YXR0cmlidXRlIHJhbmdlOnJhbmdlXTsKKyAgICAKK30KKworc3RhdGljIENHQ29sb3JSZWYgQ3Jl
YXRlQ0dDb2xvcklmRGlmZmVyZW50KE5TQ29sb3IqIG5zQ29sb3IsIENHQ29sb3JSZWYgZXhpc3Rp
bmdDb2xvcikKK3sKKyAgICAvLyBnZXQgY29sb3IgaW5mb3JtYXRpb24gYXNzdW1pbmcgTlNEZXZp
Y2VSR0JDb2xvclNwYWNlCisgICAgTlNDb2xvciogcmdiQ29sb3IgPSBbbnNDb2xvciBjb2xvclVz
aW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKKyAgICBpZiAocmdiQ29s
b3IgPT0gbmlsKQorICAgICAgICByZ2JDb2xvciA9IFtOU0NvbG9yIGJsYWNrQ29sb3JdOworICAg
IENHRmxvYXQgY29tcG9uZW50c1s0XTsKKyAgICBbcmdiQ29sb3IgZ2V0UmVkOiZjb21wb25lbnRz
WzBdIGdyZWVuOiZjb21wb25lbnRzWzFdIGJsdWU6JmNvbXBvbmVudHNbMl0gYWxwaGE6JmNvbXBv
bmVudHNbM11dOworICAgIAorICAgIC8vIGNyZWF0ZSBhIG5ldyBDR0NvbG9yUmVmIHRvIHJldHVy
bgorICAgIENHQ29sb3JTcGFjZVJlZiBjZ0NvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVE
ZXZpY2VSR0IoKTsKKyAgICBDR0NvbG9yUmVmIGNnQ29sb3IgPSBDR0NvbG9yQ3JlYXRlKGNnQ29s
b3JTcGFjZSwgY29tcG9uZW50cyk7CisgICAgQ0dDb2xvclNwYWNlUmVsZWFzZShjZ0NvbG9yU3Bh
Y2UpOworICAgIAorICAgIC8vIGNoZWNrIGZvciBtYXRjaCB3aXRoIGV4aXN0aW5nIGNvbG9yCisg
ICAgaWYgKGV4aXN0aW5nQ29sb3IgJiYgQ0dDb2xvckVxdWFsVG9Db2xvcihjZ0NvbG9yLCBleGlz
dGluZ0NvbG9yKSkgeworICAgICAgICBDR0NvbG9yUmVsZWFzZShjZ0NvbG9yKTsKKyAgICAgICAg
Y2dDb2xvciA9IDA7CisgICAgfQorICAgIAorICAgIHJldHVybiBjZ0NvbG9yOworfQorCitzdGF0
aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJp
bmcqIGF0dHJTdHJpbmcsIE5TU3RyaW5nKiBhdHRyaWJ1dGUsIE5TQ29sb3IqIGNvbG9yLCBOU1Jh
bmdlIHJhbmdlKQoreworICAgIGlmICghQVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKGF0
dHJTdHJpbmcsIHJhbmdlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChjb2xvcikg
eworICAgICAgICBDR0NvbG9yUmVmIGV4aXN0aW5nQ29sb3IgPSAoQ0dDb2xvclJlZikgW2F0dHJT
dHJpbmcgYXR0cmlidXRlOmF0dHJpYnV0ZSBhdEluZGV4OnJhbmdlLmxvY2F0aW9uIGVmZmVjdGl2
ZVJhbmdlOm5pbF07CisgICAgICAgIENHQ29sb3JSZWYgY2dDb2xvciA9IENyZWF0ZUNHQ29sb3JJ
ZkRpZmZlcmVudChjb2xvciwgZXhpc3RpbmdDb2xvcik7CisgICAgICAgIGlmIChjZ0NvbG9yKSB7
CisgICAgICAgICAgICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6YXR0cmlidXRlIHZhbHVlOihp
ZCljZ0NvbG9yIHJhbmdlOnJhbmdlXTsKKyAgICAgICAgICAgIENHQ29sb3JSZWxlYXNlKGNnQ29s
b3IpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0
dHJpYnV0ZTphdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOworfQorCitzdGF0aWMgdm9pZCBBWEF0dHJp
YnV0ZVN0cmluZ1NldE51bWJlcihOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5n
LCBOU1N0cmluZyogYXR0cmlidXRlLCBOU051bWJlciogbnVtYmVyLCBOU1JhbmdlIHJhbmdlKQor
eworICAgIGlmICghQVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKGF0dHJTdHJpbmcsIHJh
bmdlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChudW1iZXIpCisgICAgICAgIFth
dHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTphdHRyaWJ1dGUgdmFsdWU6bnVtYmVyIHJhbmdlOnJhbmdl
XTsKKyAgICBlbHNlCisgICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTphdHRyaWJ1
dGUgcmFuZ2U6cmFuZ2VdOworfQorCitzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0
eWxlKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIE5TUmFuZ2UgcmFuZ2UpCit7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVu
ZGVyZXItPnN0eWxlKCk7CisgICAgCisgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5mbworICAgIEFY
QXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb250VGV4
dEF0dHJpYnV0ZSwgc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSwgcmFu
Z2UpOworICAgIAorICAgIC8vIHNldCBiYXNpYyBjb2xvcnMKKyAgICBBWEF0dHJpYnV0ZVN0cmlu
Z1NldENvbG9yKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xvclRleHRB
dHRyaWJ1dGUsIG5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUNvbG9yKSksIHJhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKGF0dHJTdHJp
bmcsIE5TQWNjZXNzaWJpbGl0eUJhY2tncm91bmRDb2xvclRleHRBdHRyaWJ1dGUsIG5zQ29sb3Io
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikp
LCByYW5nZSk7CisgICAgCisgICAgLy8gc2V0IHN1cGVyL3N1YiBzY3JpcHRpbmcKKyAgICBFVmVy
dGljYWxBbGlnbiBhbGlnbm1lbnQgPSBzdHlsZS0+dmVydGljYWxBbGlnbigpOworICAgIGlmIChh
bGlnbm1lbnQgPT0gU1VCKQorICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRy
U3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlTdXBlcnNjcmlwdFRleHRBdHRyaWJ1dGUsIFtOU051bWJl
ciBudW1iZXJXaXRoSW50OigtMSldLCByYW5nZSk7CisgICAgZWxzZSBpZiAoYWxpZ25tZW50ID09
IFNVUEVSKQorICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBO
U0FjY2Vzc2liaWxpdHlTdXBlcnNjcmlwdFRleHRBdHRyaWJ1dGUsIFtOU051bWJlciBudW1iZXJX
aXRoSW50OjFdLCByYW5nZSk7CisgICAgZWxzZQorICAgICAgICBbYXR0clN0cmluZyByZW1vdmVB
dHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5U3VwZXJzY3JpcHRUZXh0QXR0cmlidXRlIHJhbmdlOnJh
bmdlXTsKKyAgICAKKyAgICAvLyBzZXQgc2hhZG93CisgICAgaWYgKHN0eWxlLT50ZXh0U2hhZG93
KCkpCisgICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKGF0dHJTdHJpbmcsIE5TQWNj
ZXNzaWJpbGl0eVNoYWRvd1RleHRBdHRyaWJ1dGUsIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZ
RVNdLCByYW5nZSk7CisgICAgZWxzZQorICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1
dGU6TlNBY2Nlc3NpYmlsaXR5U2hhZG93VGV4dEF0dHJpYnV0ZSByYW5nZTpyYW5nZV07CisgICAg
CisgICAgLy8gc2V0IHVuZGVybGluZSBhbmQgc3RyaWtldGhyb3VnaAorICAgIGludCBkZWNvciA9
IHN0eWxlLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOworICAgIGlmICgoZGVjb3IgJiBVTkRF
UkxJTkUpID09IDApIHsKKyAgICAgICAgW2F0dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRlOk5TQWNj
ZXNzaWJpbGl0eVVuZGVybGluZVRleHRBdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOworICAgICAgICBb
YXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5VW5kZXJsaW5lQ29sb3JU
ZXh0QXR0cmlidXRlIHJhbmdlOnJhbmdlXTsKKyAgICB9CisgICAgCisgICAgaWYgKChkZWNvciAm
IExJTkVfVEhST1VHSCkgPT0gMCkgeworICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1
dGU6TlNBY2Nlc3NpYmlsaXR5U3RyaWtldGhyb3VnaFRleHRBdHRyaWJ1dGUgcmFuZ2U6cmFuZ2Vd
OworICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5U3Ry
aWtldGhyb3VnaENvbG9yVGV4dEF0dHJpYnV0ZSByYW5nZTpyYW5nZV07CisgICAgfQorICAgIAor
ICAgIGlmICgoZGVjb3IgJiAoVU5ERVJMSU5FIHwgTElORV9USFJPVUdIKSkgIT0gMCkgeworICAg
ICAgICAvLyBmaW5kIGNvbG9ycyB1c2luZyBxdWlyayBtb2RlIGFwcHJvYWNoIChzdHJpY3QgbW9k
ZSB3b3VsZCB1c2UgY3VycmVudAorICAgICAgICAvLyBjb2xvciBmb3IgYWxsIGJ1dCB0aGUgcm9v
dCBsaW5lIGJveCwgd2hpY2ggd291bGQgdXNlIGdldFRleHREZWNvcmF0aW9uQ29sb3JzKQorICAg
ICAgICBDb2xvciB1bmRlcmxpbmUsIG92ZXJsaW5lLCBsaW5ldGhyb3VnaDsKKyAgICAgICAgcmVu
ZGVyZXItPmdldFRleHREZWNvcmF0aW9uQ29sb3JzKGRlY29yLCB1bmRlcmxpbmUsIG92ZXJsaW5l
LCBsaW5ldGhyb3VnaCk7CisgICAgICAgIAorICAgICAgICBpZiAoKGRlY29yICYgVU5ERVJMSU5F
KSAhPSAwKSB7CisgICAgICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3Ry
aW5nLCBOU0FjY2Vzc2liaWxpdHlVbmRlcmxpbmVUZXh0QXR0cmlidXRlLCBbTlNOdW1iZXIgbnVt
YmVyV2l0aEJvb2w6WUVTXSwgcmFuZ2UpOworICAgICAgICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdT
ZXRDb2xvcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlVbmRlcmxpbmVDb2xvclRleHRBdHRy
aWJ1dGUsIG5zQ29sb3IodW5kZXJsaW5lKSwgcmFuZ2UpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoKGRlY29yICYgTElORV9USFJPVUdIKSAhPSAwKSB7CisgICAgICAgICAgICBB
WEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlTdHJp
a2V0aHJvdWdoVGV4dEF0dHJpYnV0ZSwgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIHJh
bmdlKTsKKyAgICAgICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoYXR0clN0cmluZywg
TlNBY2Nlc3NpYmlsaXR5U3RyaWtldGhyb3VnaENvbG9yVGV4dEF0dHJpYnV0ZSwgbnNDb2xvcihs
aW5ldGhyb3VnaCksIHJhbmdlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBJbmRp
Y2F0ZSBiYWNrZ3JvdW5kIGhpZ2hsaWdodGluZy4KKyAgICBmb3IgKE5vZGUqIG5vZGUgPSByZW5k
ZXJlci0+bm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKG1hcmtUYWcpKQorICAgICAgICAgICAgQVhBdHRyaWJ1dGVT
dHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgQCJBWEhpZ2hsaWdodCIsIFtOU051bWJlciBudW1i
ZXJXaXRoQm9vbDpZRVNdLCByYW5nZSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBBWEF0dHJp
YnV0ZVN0cmluZ1NldEJsb2NrcXVvdGVMZXZlbChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBh
dHRyU3RyaW5nLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBOU1JhbmdlIHJhbmdlKQoreworICAg
IGlmICghQVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKGF0dHJTdHJpbmcsIHJhbmdlKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IHJl
bmRlcmVyLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlcmVy
KTsKKyAgICBpbnQgcXVvdGVMZXZlbCA9IG9iai0+YmxvY2txdW90ZUxldmVsKCk7CisgICAgCisg
ICAgaWYgKHF1b3RlTGV2ZWwpCisgICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTpOU0Fj
Y2Vzc2liaWxpdHlCbG9ja1F1b3RlTGV2ZWxBdHRyaWJ1dGUgdmFsdWU6W05TTnVtYmVyIG51bWJl
cldpdGhJbnQ6cXVvdGVMZXZlbF0gcmFuZ2U6cmFuZ2VdOworICAgIGVsc2UKKyAgICAgICAgW2F0
dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eUJsb2NrUXVvdGVMZXZlbEF0
dHJpYnV0ZSByYW5nZTpyYW5nZV07Cit9CisKK3N0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5n
U2V0U3BlbGxpbmcoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywgTm9kZSog
bm9kZSwgY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgY2hhckxlbmd0aCwgTlNSYW5nZSByYW5nZSkK
K3sKKyAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChub2RlLT5kb2N1bWVudCgpLT5m
cmFtZSgpKSkgeworICAgICAgICAvLyBDaGVjayB0aGUgc3BlbGxpbmcgZGlyZWN0bHkgc2luY2Ug
ZG9jdW1lbnQtPm1hcmtlcnNGb3JOb2RlKCkgZG9lcyBub3Qgc3RvcmUgdGhlIG1pc3NwZWxsZWQg
bWFya2luZyB3aGVuIHRoZSBjdXJzb3IgaXMgaW4gYSB3b3JkLgorICAgICAgICBUZXh0Q2hlY2tl
ckNsaWVudCogY2hlY2tlciA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT50
ZXh0Q2hlY2tlcigpOworICAgICAgICAKKyAgICAgICAgLy8gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgg
aXMgdGhlIG9ubHkgc3BlbGxpbmcvZ3JhbW1hciBjaGVja2VyIGltcGxlbWVudGVkIGluIFdLMSBh
bmQgV0syCisgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CisgICAg
ICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNoZWNrZXIsIGNoYXJzLCBjaGFyTGVuZ3RoLCBUZXh0
Q2hlY2tpbmdUeXBlU3BlbGxpbmcsIHJlc3VsdHMpOworICAgICAgICAKKyAgICAgICAgc2l6ZV90
IHNpemUgPSByZXN1bHRzLnNpemUoKTsKKyAgICAgICAgTlNOdW1iZXIqIHRydWVWYWx1ZSA9IFtO
U051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQm
IHJlc3VsdCA9IHJlc3VsdHNbaV07CisgICAgICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51
bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlNaXNzcGVsbGVkVGV4dEF0dHJpYnV0ZSwg
dHJ1ZVZhbHVlLCBOU01ha2VSYW5nZShyZXN1bHQubG9jYXRpb24gKyByYW5nZS5sb2NhdGlvbiwg
cmVzdWx0Lmxlbmd0aCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgaW50IGN1cnJlbnRQb3NpdGlvbiA9IDA7CisgICAgd2hpbGUgKGNoYXJMZW5ndGggPiAw
KSB7CisgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyRGF0YSA9IGNoYXJzICsgY3VycmVudFBvc2l0
aW9uOworICAgICAgICBUZXh0Q2hlY2tlckNsaWVudCogY2hlY2tlciA9IG5vZGUtPmRvY3VtZW50
KCktPmZyYW1lKCktPmVkaXRvcigpLT50ZXh0Q2hlY2tlcigpOworICAgICAgICAKKyAgICAgICAg
aW50IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKKyAgICAgICAgaW50IG1pc3NwZWxsaW5nTGVu
Z3RoID0gMDsKKyAgICAgICAgY2hlY2tlci0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNoYXJEYXRh
LCBjaGFyTGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsK
KyAgICAgICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24gPT0gLTEgfHwgIW1pc3NwZWxsaW5nTGVu
Z3RoKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBOU1JhbmdlIHNwZWxs
UmFuZ2UgPSBOU01ha2VSYW5nZShyYW5nZS5sb2NhdGlvbiArIGN1cnJlbnRQb3NpdGlvbiArIG1p
c3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgQVhBdHRyaWJ1
dGVTdHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5TWlzc3BlbGxlZFRl
eHRBdHRyaWJ1dGUsIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBzcGVsbFJhbmdlKTsK
KyAgICAgICAgY2hhckxlbmd0aCAtPSAobWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5n
TGVuZ3RoKTsKKyAgICAgICAgY3VycmVudFBvc2l0aW9uICs9IChtaXNzcGVsbGluZ0xvY2F0aW9u
ICsgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgQVhBdHRyaWJ1
dGVTdHJpbmdTZXRIZWFkaW5nTGV2ZWwoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0
cmluZywgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgTlNSYW5nZSByYW5nZSkKK3sKKyAgICBpZiAo
IXJlbmRlcmVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFBWEF0dHJpYnV0ZWRT
dHJpbmdSYW5nZUlzVmFsaWQoYXR0clN0cmluZywgcmFuZ2UpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgLy8gU29tZXRpbWVzIHRoZXJlIGFyZSBvYmplY3RzIGJldHdlZW4gdGhlIHRleHQg
YW5kIHRoZSBoZWFkaW5nLgorICAgIC8vIEluIHRob3NlIGNhc2VzIHRoZSBwYXJlbnQgaGllcmFy
Y2h5IHNob3VsZCBiZSBxdWVyaWVkIHRvIHNlZSBpZiB0aGVyZSBpcyBhIGhlYWRpbmcgbGV2ZWwu
CisgICAgaW50IHBhcmVudEhlYWRpbmdMZXZlbCA9IDA7CisgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogcGFyZW50T2JqZWN0ID0gcmVuZGVyZXItPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+
Z2V0T3JDcmVhdGUocmVuZGVyZXItPnBhcmVudCgpKTsKKyAgICBmb3IgKDsgcGFyZW50T2JqZWN0
OyBwYXJlbnRPYmplY3QgPSBwYXJlbnRPYmplY3QtPnBhcmVudE9iamVjdCgpKSB7CisgICAgICAg
IHBhcmVudEhlYWRpbmdMZXZlbCA9IHBhcmVudE9iamVjdC0+aGVhZGluZ0xldmVsKCk7CisgICAg
ICAgIGlmIChwYXJlbnRIZWFkaW5nTGV2ZWwpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgCisgICAgaWYgKHBhcmVudEhlYWRpbmdMZXZlbCkKKyAgICAgICAgW2F0dHJTdHJpbmcgYWRk
QXR0cmlidXRlOkAiQVhIZWFkaW5nTGV2ZWwiIHZhbHVlOltOU051bWJlciBudW1iZXJXaXRoSW50
OnBhcmVudEhlYWRpbmdMZXZlbF0gcmFuZ2U6cmFuZ2VdOworICAgIGVsc2UKKyAgICAgICAgW2F0
dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRlOkAiQVhIZWFkaW5nTGV2ZWwiIHJhbmdlOnJhbmdlXTsK
K30KKworc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRFbGVtZW50KE5TTXV0YWJsZUF0
dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIE5TU3RyaW5nKiBhdHRyaWJ1dGUsIEFjY2Vzc2li
aWxpdHlPYmplY3QqIG9iamVjdCwgTlNSYW5nZSByYW5nZSkKK3sKKyAgICBpZiAoIUFYQXR0cmli
dXRlZFN0cmluZ1JhbmdlSXNWYWxpZChhdHRyU3RyaW5nLCByYW5nZSkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAob2JqZWN0ICYmIG9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0KCkpIHsKKyAgICAgICAgLy8gbWFrZSBhIHNlcmlhbGl6YWJsZSBBWCBvYmplY3QKKyAg
ICAgICAgCisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Kj4ob2JqZWN0KS0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYg
KCFyZW5kZXJlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIERvY3Vt
ZW50KiBkb2MgPSByZW5kZXJlci0+ZG9jdW1lbnQoKTsKKyAgICAgICAgaWYgKCFkb2MpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9
IGRvYy0+YXhPYmplY3RDYWNoZSgpOworICAgICAgICBpZiAoIWNhY2hlKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgQVhVSUVsZW1lbnRSZWYgYXhFbGVtZW50ID0gd2tD
cmVhdGVBWFVJRWxlbWVudFJlZihvYmplY3QtPndyYXBwZXIoKSk7CisgICAgICAgIGlmIChheEVs
ZW1lbnQpIHsKKyAgICAgICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTphdHRyaWJ1dGUg
dmFsdWU6KGlkKWF4RWxlbWVudCByYW5nZTpyYW5nZV07CisgICAgICAgICAgICBDRlJlbGVhc2Uo
YXhFbGVtZW50KTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBbYXR0clN0cmluZyBy
ZW1vdmVBdHRyaWJ1dGU6YXR0cmlidXRlIHJhbmdlOnJhbmdlXTsKK30KKworc3RhdGljIHZvaWQg
QVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBh
dHRyU3RyaW5nLCBOb2RlKiBub2RlLCBjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW5ndGgpCit7
CisgICAgLy8gc2tpcCBpbnZpc2libGUgdGV4dAorICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIGVhc2llciB0byBjYWxjdWxhdGUgdGhlIHJh
bmdlIGJlZm9yZSBhcHBlbmRpbmcgdGhlIHN0cmluZworICAgIE5TUmFuZ2UgYXR0clN0cmluZ1Jh
bmdlID0gTlNNYWtlUmFuZ2UoW2F0dHJTdHJpbmcgbGVuZ3RoXSwgbGVuZ3RoKTsKKyAgICAKKyAg
ICAvLyBhcHBlbmQgdGhlIHN0cmluZyBmcm9tIHRoaXMgbm9kZQorICAgIFtbYXR0clN0cmluZyBt
dXRhYmxlU3RyaW5nXSBhcHBlbmRTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJz
OmNoYXJzIGxlbmd0aDpsZW5ndGhdXTsKKyAgICAKKyAgICAvLyBhZGQgbmV3IGF0dHJpYnV0ZXMg
YW5kIHJlbW92ZSBpcnJlbGV2YW50IGluaGVyaXRlZCBvbmVzCisgICAgLy8gTk9URTogY29sb3Ig
YXR0cmlidXRlcyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYmVjYXVzZSAtW05TTXV0YWJsZUF0dHJp
YnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRlOiB2YWx1ZTogcmFuZ2U6XSBkb2VzIG5vdCBtZXJnZQor
ICAgIC8vIGlkZW50aWNhbCBjb2xvcnMuICBXb3JrYXJvdW5kIGlzIHRvIG5vdCByZXBsYWNlIGFu
IGV4aXN0aW5nIGNvbG9yIGF0dHJpYnV0ZSBpZiBpdCBtYXRjaGVzIHdoYXQgd2UgYXJlIGFkZGlu
Zy4gIFRoaXMgYWxzbyBtZWFucworICAgIC8vIHdlIGNhbm5vdCBqdXN0IHByZS1yZW1vdmUgYWxs
IGluaGVyaXRlZCBhdHRyaWJ1dGVzIG9uIHRoZSBhcHBlbmRlZCBzdHJpbmcsIHNvIHdlIGhhdmUg
dG8gcmVtb3ZlIHRoZSBpcnJlbGV2YW50IG9uZXMgaW5kaXZpZHVhbGx5LgorICAgIAorICAgIC8v
IHJlbW92ZSBpbmhlcml0ZWQgYXR0YWNobWVudCBmcm9tIHByaW9yIEFYQXR0cmlidXRlZFN0cmlu
Z0FwcGVuZFJlcGxhY2VkCisgICAgW2F0dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRlOk5TQWNjZXNz
aWJpbGl0eUF0dGFjaG1lbnRUZXh0QXR0cmlidXRlIHJhbmdlOmF0dHJTdHJpbmdSYW5nZV07Cisg
ICAgW2F0dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRlOk5TQWNjZXNzaWJpbGl0eU1pc3NwZWxsZWRU
ZXh0QXR0cmlidXRlIHJhbmdlOmF0dHJTdHJpbmdSYW5nZV07CisgICAgCisgICAgLy8gc2V0IG5l
dyBhdHRyaWJ1dGVzCisgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShhdHRyU3RyaW5nLCBu
b2RlLT5yZW5kZXJlcigpLCBhdHRyU3RyaW5nUmFuZ2UpOworICAgIEFYQXR0cmlidXRlU3RyaW5n
U2V0SGVhZGluZ0xldmVsKGF0dHJTdHJpbmcsIG5vZGUtPnJlbmRlcmVyKCksIGF0dHJTdHJpbmdS
YW5nZSk7CisgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRCbG9ja3F1b3RlTGV2ZWwoYXR0clN0cmlu
Zywgbm9kZS0+cmVuZGVyZXIoKSwgYXR0clN0cmluZ1JhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0
cmluZ1NldEVsZW1lbnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5TGlua1RleHRBdHRyaWJ1
dGUsIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFuY2hvckVsZW1lbnRGb3JOb2RlKG5vZGUpLCBhdHRy
U3RyaW5nUmFuZ2UpOworICAgIAorICAgIC8vIGRvIHNwZWxsaW5nIGxhc3QgYmVjYXVzZSBpdCB0
ZW5kcyB0byBicmVhayB1cCB0aGUgcmFuZ2UKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldFNwZWxs
aW5nKGF0dHJTdHJpbmcsIG5vZGUsIGNoYXJzLCBsZW5ndGgsIGF0dHJTdHJpbmdSYW5nZSk7Cit9
CisKK3N0YXRpYyBOU1N0cmluZyogbnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUoTm9kZSogcmVwbGFj
ZWROb2RlKQoreworICAgIC8vIHdlIHNob3VsZCBhbHdheXMgYmUgZ2l2ZW4gYSByZW5kZXJlZCBu
b2RlIGFuZCBhIHJlcGxhY2VkIG5vZGUsIGJ1dCBiZSBzYWZlCisgICAgLy8gcmVwbGFjZWQgbm9k
ZXMgYXJlIGVpdGhlciBhdHRhY2htZW50cyAod2lkZ2V0cykgb3IgaW1hZ2VzCisgICAgaWYgKCFy
ZXBsYWNlZE5vZGUgfHwgIXJlcGxhY2VkTm9kZS0+cmVuZGVyZXIoKSB8fCAhcmVwbGFjZWROb2Rl
LT5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkgfHwgcmVwbGFjZWROb2RlLT5pc1RleHROb2RlKCkp
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgfQorICAgIAorICAgIC8vIGNyZWF0ZSBhbiBBWCBvYmplY3QsIGJ1dCBza2lwIGl0IGlmIGl0
IGlzIG5vdCBzdXBwb3NlZCB0byBiZSBzZWVuCisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmpl
Y3Q+IG9iaiA9IHJlcGxhY2VkTm9kZS0+cmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RD
YWNoZSgpLT5nZXRPckNyZWF0ZShyZXBsYWNlZE5vZGUtPnJlbmRlcmVyKCkpOworICAgIGlmIChv
YmotPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAK
KyAgICAvLyB1c2UgdGhlIGF0dGFjaG1lbnRDaGFyYWN0ZXIgdG8gcmVwcmVzZW50IHRoZSByZXBs
YWNlZCBub2RlCisgICAgY29uc3QgVW5pQ2hhciBhdHRhY2htZW50Q2hhciA9IE5TQXR0YWNobWVu
dENoYXJhY3RlcjsKKyAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOiZh
dHRhY2htZW50Q2hhciBsZW5ndGg6MV07Cit9CisKKy0gKE5TQXR0cmlidXRlZFN0cmluZyopZG9B
WEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6KGlkKXRleHRNYXJrZXJSYW5nZQor
eworICAgIGlmICghbV9vYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgLy8g
ZXh0cmFjdCB0aGUgc3RhcnQgYW5kIGVuZCBWaXNpYmxlUG9zaXRpb24KKyAgICBWaXNpYmxlUG9z
aXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JTdGFydE9mVGV4
dE1hcmtlclJhbmdlKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXJSYW5nZSk7
CisgICAgaWYgKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIAorICAgIFZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24gPSB2aXNp
YmxlUG9zaXRpb25Gb3JFbmRPZlRleHRNYXJrZXJSYW5nZShtX29iamVjdC0+YXhPYmplY3RDYWNo
ZSgpLCB0ZXh0TWFya2VyUmFuZ2UpOworICAgIGlmIChlbmRWaXNpYmxlUG9zaXRpb24uaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ug
dmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRWaXNpYmxlUG9zaXRpb24sIGVuZFZpc2libGVQb3Np
dGlvbik7CisgICAgLy8gaXRlcmF0ZSBvdmVyIHRoZSByYW5nZSB0byBidWlsZCB0aGUgQVggYXR0
cmlidXRlZCBzdHJpbmcKKyAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5n
ID0gW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XTsKKyAgICBUZXh0SXRl
cmF0b3IgaXQobWFrZVJhbmdlKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLCBlbmRWaXNpYmxlUG9zaXRp
b24pLmdldCgpKTsKKyAgICB3aGlsZSAoIWl0LmF0RW5kKCkpIHsKKyAgICAgICAgLy8gbG9jYXRl
IHRoZSBub2RlIGFuZCBzdGFydGluZyBvZmZzZXQgZm9yIHRoaXMgcmFuZ2UKKyAgICAgICAgaW50
IGV4Y2VwdGlvbiA9IDA7CisgICAgICAgIE5vZGUqIG5vZGUgPSBpdC5yYW5nZSgpLT5zdGFydENv
bnRhaW5lcihleGNlcHRpb24pOworICAgICAgICBBU1NFUlQobm9kZSA9PSBpdC5yYW5nZSgpLT5l
bmRDb250YWluZXIoZXhjZXB0aW9uKSk7CisgICAgICAgIGludCBvZmZzZXQgPSBpdC5yYW5nZSgp
LT5zdGFydE9mZnNldChleGNlcHRpb24pOworICAgICAgICAKKyAgICAgICAgLy8gbm9uLXplcm8g
bGVuZ3RoIG1lYW5zIHRleHR1YWwgbm9kZSwgemVybyBsZW5ndGggbWVhbnMgcmVwbGFjZWQgbm9k
ZSAoQUtBICJhdHRhY2htZW50cyIgaW4gQVgpCisgICAgICAgIGlmIChpdC5sZW5ndGgoKSAhPSAw
KSB7CisgICAgICAgICAgICAvLyBBZGQgdGhlIHRleHQgb2YgdGhlIGxpc3QgbWFya2VyIGl0ZW0g
aWYgbmVjZXNzYXJ5LgorICAgICAgICAgICAgU3RyaW5nIGxpc3RNYXJrZXJUZXh0ID0gbV9vYmpl
Y3QtPmxpc3RNYXJrZXJUZXh0Rm9yTm9kZUFuZFBvc2l0aW9uKG5vZGUsIFZpc2libGVQb3NpdGlv
bihpdC5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCkpKTsKKyAgICAgICAgICAgIGlmICghbGlzdE1h
cmtlclRleHQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIEFYQXR0cmlidXRlZFN0cmluZ0Fw
cGVuZFRleHQoYXR0clN0cmluZywgbm9kZSwgbGlzdE1hcmtlclRleHQuY2hhcmFjdGVycygpLCBs
aXN0TWFya2VyVGV4dC5sZW5ndGgoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFYQXR0
cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoYXR0clN0cmluZywgbm9kZSwgaXQuY2hhcmFjdGVycygp
LCBpdC5sZW5ndGgoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBOb2RlKiByZXBs
YWNlZE5vZGUgPSBub2RlLT5jaGlsZE5vZGUob2Zmc2V0KTsKKyAgICAgICAgICAgIE5TU3RyaW5n
ICphdHRhY2htZW50U3RyaW5nID0gbnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUocmVwbGFjZWROb2Rl
KTsKKyAgICAgICAgICAgIGlmIChhdHRhY2htZW50U3RyaW5nKSB7CisgICAgICAgICAgICAgICAg
TlNSYW5nZSBhdHRyU3RyaW5nUmFuZ2UgPSBOU01ha2VSYW5nZShbYXR0clN0cmluZyBsZW5ndGhd
LCBbYXR0YWNobWVudFN0cmluZyBsZW5ndGhdKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAvLyBhcHBlbmQgdGhlIHBsYWNlaG9sZGVyIHN0cmluZworICAgICAgICAgICAgICAg
IFtbYXR0clN0cmluZyBtdXRhYmxlU3RyaW5nXSBhcHBlbmRTdHJpbmc6YXR0YWNobWVudFN0cmlu
Z107CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGFsbCBpbmhl
cml0ZWQgYXR0cmlidXRlcworICAgICAgICAgICAgICAgIFthdHRyU3RyaW5nIHNldEF0dHJpYnV0
ZXM6bmlsIHJhbmdlOmF0dHJTdHJpbmdSYW5nZV07CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgLy8gYWRkIHRoZSBhdHRhY2htZW50IGF0dHJpYnV0ZQorICAgICAgICAgICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IHJlcGxhY2VkTm9kZS0+cmVuZGVyZXIoKS0+ZG9j
dW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZXBsYWNlZE5vZGUtPnJlbmRl
cmVyKCkpOworICAgICAgICAgICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0RWxlbWVudChhdHRy
U3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlBdHRhY2htZW50VGV4dEF0dHJpYnV0ZSwgb2JqLCBhdHRy
U3RyaW5nUmFuZ2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGl0LmFkdmFu
Y2UoKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIFthdHRyU3RyaW5nIGF1dG9yZWxlYXNlXTsK
K30KKworc3RhdGljIGlkIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKEFYT2Jq
ZWN0Q2FjaGUgKmNhY2hlLCBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiwgVmlzaWJsZVBv
c2l0aW9uIGVuZFBvc2l0aW9uKQoreworICAgIGlkIHN0YXJ0VGV4dE1hcmtlciA9IHRleHRNYXJr
ZXJGb3JWaXNpYmxlUG9zaXRpb24oY2FjaGUsIHN0YXJ0UG9zaXRpb24pOworICAgIGlkIGVuZFRl
eHRNYXJrZXIgPSB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKGNhY2hlLCBlbmRQb3NpdGlv
bik7CisgICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZyb21NYXJrZXJzKHN0YXJ0VGV4dE1hcmtl
ciwgZW5kVGV4dE1hcmtlcik7Cit9CisKKy0gKGlkKXRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxl
UG9zaXRpb25zOihWaXNpYmxlUG9zaXRpb24pc3RhcnRQb3NpdGlvbiBlbmRQb3NpdGlvbjooVmlz
aWJsZVBvc2l0aW9uKWVuZFBvc2l0aW9uCit7CisgICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZy
b21WaXNpYmxlUG9zaXRpb25zKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHN0YXJ0UG9zaXRp
b24sIGVuZFBvc2l0aW9uKTsKK30KKworLSAoTlNBcnJheSopYWNjZXNzaWJpbGl0eUFjdGlvbk5h
bWVzCit7CisgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIAorICAgIHN0YXRpYyBOU0FycmF5KiBhY3Rpb25FbGVtZW50QWN0
aW9ucyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOiBOU0FjY2Vzc2liaWxpdHlQ
cmVzc0FjdGlvbiwgTlNBY2Nlc3NpYmlsaXR5U2hvd01lbnVBY3Rpb24sIG5pbF07CisgICAgc3Rh
dGljIE5TQXJyYXkqIGRlZmF1bHRFbGVtZW50QWN0aW9ucyA9IFtbTlNBcnJheSBhbGxvY10gaW5p
dFdpdGhPYmplY3RzOiBOU0FjY2Vzc2liaWxpdHlTaG93TWVudUFjdGlvbiwgbmlsXTsKKyAgICBz
dGF0aWMgTlNBcnJheSogbWVudUVsZW1lbnRBY3Rpb25zID0gW1tOU0FycmF5IGFsbG9jXSBpbml0
V2l0aE9iamVjdHM6IE5TQWNjZXNzaWJpbGl0eUNhbmNlbEFjdGlvbiwgTlNBY2Nlc3NpYmlsaXR5
UHJlc3NBY3Rpb24sIG5pbF07CisgICAgc3RhdGljIE5TQXJyYXkqIHNsaWRlckFjdGlvbnMgPSBb
W05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czogTlNBY2Nlc3NpYmlsaXR5SW5jcmVtZW50
QWN0aW9uLCBOU0FjY2Vzc2liaWxpdHlEZWNyZW1lbnRBY3Rpb24sIG5pbF07CisgICAgCisgICAg
TlNBcnJheSAqYWN0aW9uczsKKyAgICBpZiAobV9vYmplY3QtPmFjdGlvbkVsZW1lbnQoKSB8fCBt
X29iamVjdC0+aXNCdXR0b24oKSkKKyAgICAgICAgYWN0aW9ucyA9IGFjdGlvbkVsZW1lbnRBY3Rp
b25zOworICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc01lbnVSZWxhdGVkKCkpCisgICAgICAgIGFj
dGlvbnMgPSBtZW51RWxlbWVudEFjdGlvbnM7CisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzU2xp
ZGVyKCkpCisgICAgICAgIGFjdGlvbnMgPSBzbGlkZXJBY3Rpb25zOworICAgIGVsc2UgaWYgKG1f
b2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKKyAgICAgICAgYWN0aW9ucyA9IFtbc2VsZiBhdHRhY2ht
ZW50Vmlld10gYWNjZXNzaWJpbGl0eUFjdGlvbk5hbWVzXTsKKyAgICBlbHNlCisgICAgICAgIGFj
dGlvbnMgPSBkZWZhdWx0RWxlbWVudEFjdGlvbnM7CisgICAgCisgICAgcmV0dXJuIGFjdGlvbnM7
Cit9CisKKy0gKE5TQXJyYXkqKWFkZGl0aW9uYWxBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMK
K3sKKyAgICBpZiAoIW1fb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIE5T
TXV0YWJsZUFycmF5ICphZGRpdGlvbmFsID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICBp
ZiAobV9vYmplY3QtPnN1cHBvcnRzQVJJQU93bnMoKSkKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRk
T2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU93bnNBdHRyaWJ1dGVdOworICAgIAorICAgIGlmIChtX29i
amVjdC0+c3VwcG9ydHNBUklBRXhwYW5kZWQoKSkKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eUV4cGFuZGVkQXR0cmlidXRlXTsKKyAgICAKKyAgICBpZiAobV9v
YmplY3QtPmlzU2Nyb2xsYmFyKCkpCisgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0Fj
Y2Vzc2liaWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0ZV07CisgICAgCisgICAgaWYgKG1fb2JqZWN0
LT5zdXBwb3J0c0FSSUFEcmFnZ2luZygpKQorICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6
TlNBY2Nlc3NpYmlsaXR5R3JhYmJlZEF0dHJpYnV0ZV07CisgICAgCisgICAgaWYgKG1fb2JqZWN0
LT5zdXBwb3J0c0FSSUFEcm9wcGluZygpKQorICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6
TlNBY2Nlc3NpYmlsaXR5RHJvcEVmZmVjdHNBdHRyaWJ1dGVdOworICAgIAorICAgIGlmIChtX29i
amVjdC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSAmJiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5
VGFibGUqPihtX29iamVjdCktPnN1cHBvcnRzU2VsZWN0ZWRSb3dzKCkpCisgICAgICAgIFthZGRp
dGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVdOwor
ICAgIAorICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNBUklBTGl2ZVJlZ2lvbigpKSB7CisgICAg
ICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBUklBTGl2ZUF0dHJpYnV0
ZV07CisgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBUklBUmVs
ZXZhbnRBdHRyaWJ1dGVdOworICAgIH0KKyAgICAKKyAgICBpZiAobV9vYmplY3QtPnNvcnREaXJl
Y3Rpb24oKSAhPSBTb3J0RGlyZWN0aW9uTm9uZSkKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb25BdHRyaWJ1dGVdOworICAgIAorICAgIC8v
IElmIGFuIG9iamVjdCBpcyBhIGNoaWxkIG9mIGEgbGl2ZSByZWdpb24sIHRoZW4gYWRkIHRoZXNl
CisgICAgaWYgKG1fb2JqZWN0LT5pc0luc2lkZUFSSUFMaXZlUmVnaW9uKCkpCisgICAgICAgIFth
ZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBUklBQXRvbWljQXR0cmlidXRlXTsK
KyAgICAvLyBBbGwgb2JqZWN0cyBzaG91bGQgZXhwb3NlIHRoZSBBUklBIGJ1c3kgYXR0cmlidXRl
IChBUklBIDEuMSB3aXRoIElTU1VFLTUzOCkuCisgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eUFSSUFCdXN5QXR0cmlidXRlXTsKKyAgICAKKyAgICAvLyBQb3B1cCBidXR0
b25zIG9uIHRoZSBNYWMgZXhwb3NlIHRoZSB2YWx1ZSBhdHRyaWJ1dGUuCisgICAgaWYgKG1fb2Jq
ZWN0LT5pc1BvcFVwQnV0dG9uKCkpCisgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0Fj
Y2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV07CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5hcmlh
SGFzUG9wdXAoKSkKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0
eUhhc1BvcHVwQXR0cmlidXRlXTsKKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlzTWF0aFJvb3Qo
KSkgeworICAgICAgICAvLyBUaGUgaW5kZXggb2YgYSBzcXVhcmUgcm9vdCBpcyBhbHdheXMga25v
d24sIHNvIHRoZXJlJ3Mgbm8gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCBpdC4KKyAgICAgICAgaWYg
KCFtX29iamVjdC0+aXNNYXRoU3F1YXJlUm9vdCgpKQorICAgICAgICAgICAgW2FkZGl0aW9uYWwg
YWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhSb290SW5kZXhBdHRyaWJ1dGVdOworICAgICAg
ICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFJvb3RSYWRpY2FuZEF0
dHJpYnV0ZV07CisgICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNNYXRoRnJhY3Rpb24oKSkgewor
ICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aEZyYWN0aW9u
TnVtZXJhdG9yQXR0cmlidXRlXTsKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNj
ZXNzaWJpbGl0eU1hdGhGcmFjdGlvbkRlbm9taW5hdG9yQXR0cmlidXRlXTsKKyAgICB9IGVsc2Ug
aWYgKG1fb2JqZWN0LT5pc01hdGhTdWJzY3JpcHRTdXBlcnNjcmlwdCgpKSB7CisgICAgICAgIFth
ZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoQmFzZUF0dHJpYnV0ZV07Cisg
ICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoU3Vic2NyaXB0
QXR0cmlidXRlXTsKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0
eU1hdGhTdXBlcnNjcmlwdEF0dHJpYnV0ZV07CisgICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNN
YXRoVW5kZXJPdmVyKCkpIHsKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eU1hdGhCYXNlQXR0cmlidXRlXTsKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0
Ok5TQWNjZXNzaWJpbGl0eU1hdGhVbmRlckF0dHJpYnV0ZV07CisgICAgICAgIFthZGRpdGlvbmFs
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoT3ZlckF0dHJpYnV0ZV07CisgICAgfSBlbHNl
IGlmIChtX29iamVjdC0+aXNNYXRoRmVuY2VkKCkpIHsKKyAgICAgICAgW2FkZGl0aW9uYWwgYWRk
T2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRPcGVuQXR0cmlidXRlXTsKKyAgICAgICAg
W2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRDbG9zZUF0dHJp
YnV0ZV07CisgICAgfQorICAgIAorICAgIHJldHVybiBhZGRpdGlvbmFsOworfQorCistIChOU0Fy
cmF5KilhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMKK3sKKyAgICBpZiAoIVtzZWxmIHVwZGF0
ZU9iamVjdEJhY2tpbmdTdG9yZV0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgaWYg
KG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKKyAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2ht
ZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXTsKKyAgICAKKyAgICBzdGF0aWMg
TlNBcnJheSogYXR0cmlidXRlcyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogYW5jaG9yQXR0
cnMgPSBuaWw7CisgICAgc3RhdGljIE5TQXJyYXkqIHdlYkFyZWFBdHRycyA9IG5pbDsKKyAgICBz
dGF0aWMgTlNBcnJheSogdGV4dEF0dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5KiBsaXN0
QXR0cnMgPSBuaWw7CisgICAgc3RhdGljIE5TQXJyYXkqIGxpc3RCb3hBdHRycyA9IG5pbDsKKyAg
ICBzdGF0aWMgTlNBcnJheSogcmFuZ2VBdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSog
Y29tbW9uTWVudUF0dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5KiBtZW51QXR0cnMgPSBu
aWw7CisgICAgc3RhdGljIE5TQXJyYXkqIG1lbnVCYXJBdHRycyA9IG5pbDsKKyAgICBzdGF0aWMg
TlNBcnJheSogbWVudUl0ZW1BdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogbWVudUJ1
dHRvbkF0dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5KiBjb250cm9sQXR0cnMgPSBuaWw7
CisgICAgc3RhdGljIE5TQXJyYXkqIHRhYmxlQXR0cnMgPSBuaWw7CisgICAgc3RhdGljIE5TQXJy
YXkqIHRhYmxlUm93QXR0cnMgPSBuaWw7CisgICAgc3RhdGljIE5TQXJyYXkqIHRhYmxlQ29sQXR0
cnMgPSBuaWw7CisgICAgc3RhdGljIE5TQXJyYXkqIHRhYmxlQ2VsbEF0dHJzID0gbmlsOworICAg
IHN0YXRpYyBOU0FycmF5KiBncm91cEF0dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5KiBp
bnB1dEltYWdlQXR0cnMgPSBuaWw7CisgICAgc3RhdGljIE5TQXJyYXkqIHBhc3N3b3JkRmllbGRB
dHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogdGFiTGlzdEF0dHJzID0gbmlsOworICAg
IHN0YXRpYyBOU0FycmF5KiBjb21ib0JveEF0dHJzID0gbmlsOworICAgIHN0YXRpYyBOU0FycmF5
KiBvdXRsaW5lQXR0cnMgPSBuaWw7CisgICAgc3RhdGljIE5TQXJyYXkqIG91dGxpbmVSb3dBdHRy
cyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogYnV0dG9uQXR0cnMgPSBuaWw7CisgICAgc3Rh
dGljIE5TQXJyYXkqIHNjcm9sbFZpZXdBdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSog
aW5jcmVtZW50b3JBdHRycyA9IG5pbDsKKyAgICBOU011dGFibGVBcnJheSogdGVtcEFycmF5Owor
ICAgIGlmIChhdHRyaWJ1dGVzID09IG5pbCkgeworICAgICAgICBhdHRyaWJ1dGVzID0gW1tOU0Fy
cmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6IE5TQWNjZXNzaWJpbGl0eVJvbGVBdHRyaWJ1dGUs
CisgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U3Vicm9sZUF0dHJpYnV0ZSwK
KyAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb25BdHRy
aWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRy
aWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5SGVscEF0dHJpYnV0
ZSwKKyAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlQYXJlbnRBdHRyaWJ1dGUs
CisgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGUs
CisgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlUaXRsZUF0dHJpYnV0ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRlLAorICAgICAg
ICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGUsCisgICAgICAg
ICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRlLAorICAgICAgICAg
ICAgICAgICAgICAgIEAiQVhTZWxlY3RlZFRleHRNYXJrZXJSYW5nZSIsCisgICAgICAgICAgICAg
ICAgICAgICAgQCJBWFN0YXJ0VGV4dE1hcmtlciIsCisgICAgICAgICAgICAgICAgICAgICAgQCJB
WEVuZFRleHRNYXJrZXIiLAorICAgICAgICAgICAgICAgICAgICAgIEAiQVhWaXNpdGVkIiwKKyAg
ICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlMaW5rZWRVSUVsZW1lbnRzQXR0cmli
dXRlLAorICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQXR0cmli
dXRlLAorICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUJsb2NrUXVvdGVMZXZl
bEF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlUb3BMZXZl
bFVJRWxlbWVudEF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICBuaWxdOworICAgIH0K
KyAgICBpZiAoY29tbW9uTWVudUF0dHJzID09IG5pbCkgeworICAgICAgICBjb21tb25NZW51QXR0
cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czogTlNBY2Nlc3NpYmlsaXR5Um9s
ZUF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVJv
bGVEZXNjcmlwdGlvbkF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TQWNj
ZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlNBY2Nlc3NpYmlsaXR5UGFyZW50QXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlNBY2Nlc3NpYmlsaXR5RW5hYmxlZEF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5TQWNjZXNzaWJpbGl0eVBvc2l0aW9uQXR0cmlidXRlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5pbF07CisgICAgfQorICAgIGlmIChhbmNob3JBdHRycyA9PSBuaWwpIHsK
KyAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJh
eTphdHRyaWJ1dGVzXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5VVJMQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5QWNjZXNzS2V5QXR0cmlidXRlXTsKKyAgICAgICAgYW5jaG9yQXR0cnMgPSBbW05TQXJy
YXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKKyAgICAgICAgW3RlbXBBcnJheSBy
ZWxlYXNlXTsKKyAgICB9CisgICAgaWYgKHdlYkFyZWFBdHRycyA9PSBuaWwpIHsKKyAgICAgICAg
dGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1
dGVzXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6QCJBWExpbmtVSUVsZW1lbnRzIl07
CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OkAiQVhMb2FkZWQiXTsKKyAgICAgICAgW3Rl
bXBBcnJheSBhZGRPYmplY3Q6QCJBWExheW91dENvdW50Il07CisgICAgICAgIFt0ZW1wQXJyYXkg
YWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUxvYWRpbmdQcm9ncmVzc0F0dHJpYnV0ZV07CisgICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVVSTEF0dHJpYnV0ZV07Cisg
ICAgICAgIHdlYkFyZWFBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1w
QXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAgICBpZiAodGV4
dEF0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9i
amVjdDpOU0FjY2Vzc2liaWxpdHlOdW1iZXJPZkNoYXJhY3RlcnNBdHRyaWJ1dGVdOworICAgICAg
ICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1
dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZWxlY3Rl
ZFRleHRSYW5nZUF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNj
ZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1w
QXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUluc2VydGlvblBvaW50TGluZU51bWJlckF0
dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVRp
dGxlVUlFbGVtZW50QXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNB
Y2Nlc3NpYmlsaXR5QWNjZXNzS2V5QXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRP
YmplY3Q6TlNBY2Nlc3NpYmlsaXR5UmVxdWlyZWRBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFy
cmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlJbnZhbGlkQXR0cmlidXRlXTsKKyAgICAgICAg
W3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5UGxhY2Vob2xkZXJWYWx1ZUF0dHJp
YnV0ZV07CisgICAgICAgIHRleHRBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJh
eTp0ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAgICBp
ZiAobGlzdEF0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOworICAgICAgICBbdGVtcEFycmF5
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENoaWxkcmVuQXR0cmlidXRlXTsKKyAg
ICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoaWxkcmVu
QXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
T3JpZW50YXRpb25BdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0Fj
Y2Vzc2liaWxpdHlUaXRsZVVJRWxlbWVudEF0dHJpYnV0ZV07CisgICAgICAgIGxpc3RBdHRycyA9
IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBbdGVt
cEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAgICBpZiAobGlzdEJveEF0dHJzID09IG5pbCkgewor
ICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5
Omxpc3RBdHRyc107CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0
eUFjY2Vzc0tleUF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNj
ZXNzaWJpbGl0eVJlcXVpcmVkQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5SW52YWxpZEF0dHJpYnV0ZV07CisgICAgICAgIGxpc3RCb3hBdHRy
cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBb
dGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAgICBpZiAocmFuZ2VBdHRycyA9PSBuaWwpIHsK
KyAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJh
eTphdHRyaWJ1dGVzXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5TWluVmFsdWVBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0Fj
Y2Vzc2liaWxpdHlNYXhWYWx1ZUF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBB
cnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmFsdWVEZXNjcmlwdGlvbkF0dHJpYnV0ZV07
CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVRpdGxlVUlFbGVt
ZW50QXR0cmlidXRlXTsKKyAgICAgICAgcmFuZ2VBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5p
dFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAg
IH0KKyAgICBpZiAobWVudUJhckF0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmNvbW1vbk1lbnVBdHRyc107Cisg
ICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2hpbGRy
ZW5BdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxp
dHlWaXNpYmxlQ2hpbGRyZW5BdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVj
dDpOU0FjY2Vzc2liaWxpdHlUaXRsZVVJRWxlbWVudEF0dHJpYnV0ZV07CisgICAgICAgIG1lbnVC
YXJBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAg
ICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0KKyAgICBpZiAobWVudUF0dHJzID09IG5p
bCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0
aEFycmF5OmNvbW1vbk1lbnVBdHRyc107CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFy
cmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hpbGRyZW5BdHRyaWJ1dGVdOwor
ICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUaXRsZVVJRWxlbWVu
dEF0dHJpYnV0ZV07CisgICAgICAgIG1lbnVBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdp
dGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0K
KyAgICBpZiAobWVudUl0ZW1BdHRycyA9PSBuaWwpIHsKKyAgICAgICAgdGVtcEFycmF5ID0gW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTpjb21tb25NZW51QXR0cnNdOworICAg
ICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUaXRsZUF0dHJpYnV0ZV07
CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUhlbHBBdHRyaWJ1
dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZWxlY3Rl
ZEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihOU1N0cmluZyopa0FY
TWVudUl0ZW1DbWRDaGFyQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6
KE5TU3RyaW5nKilrQVhNZW51SXRlbUNtZFZpcnR1YWxLZXlBdHRyaWJ1dGVdOworICAgICAgICBb
dGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWE1lbnVJdGVtQ21kR2x5cGhBdHRyaWJ1
dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWE1lbnVJdGVt
Q21kTW9kaWZpZXJzQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6KE5T
U3RyaW5nKilrQVhNZW51SXRlbU1hcmtDaGFyQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJh
eSBhZGRPYmplY3Q6KE5TU3RyaW5nKilrQVhNZW51SXRlbVByaW1hcnlVSUVsZW1lbnRBdHRyaWJ1
dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZXJ2ZXNB
c1RpdGxlRm9yVUlFbGVtZW50c0F0dHJpYnV0ZV07CisgICAgICAgIG1lbnVJdGVtQXR0cnMgPSBb
W05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKKyAgICAgICAgW3RlbXBB
cnJheSByZWxlYXNlXTsKKyAgICB9CisgICAgaWYgKG1lbnVCdXR0b25BdHRycyA9PSBuaWwpIHsK
KyAgICAgICAgbWVudUJ1dHRvbkF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVj
dHM6TlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVBvc2l0aW9uQXR0cmlidXRlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVdpbmRvd0F0dHJpYnV0ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1
dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0
cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5VGl0bGVB
dHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlDaGls
ZHJlbkF0dHJpYnV0ZSwgbmlsXTsKKyAgICB9CisgICAgaWYgKGNvbnRyb2xBdHRycyA9PSBuaWwp
IHsKKyAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhB
cnJheTphdHRyaWJ1dGVzXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5VGl0bGVVSUVsZW1lbnRBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9i
amVjdDpOU0FjY2Vzc2liaWxpdHlBY2Nlc3NLZXlBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFy
cmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlSZXF1aXJlZEF0dHJpYnV0ZV07CisgICAgICAg
IFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUludmFsaWRBdHRyaWJ1dGVdOwor
ICAgICAgICBjb250cm9sQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVt
cEFycmF5XTsKKyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKKyAgICB9CisgICAgaWYgKGlu
Y3JlbWVudG9yQXR0cnMgPT0gbmlsKSB7CisgICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107CisgICAgICAgIFt0ZW1wQXJy
YXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUluY3JlbWVudEJ1dHRvbkF0dHJpYnV0ZV07Cisg
ICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURlY3JlbWVudEJ1dHRv
bkF0dHJpYnV0ZV07CisgICAgICAgIGluY3JlbWVudG9yQXR0cnMgPSBbW05TQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKKyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsK
KyAgICB9CisgICAgaWYgKGJ1dHRvbkF0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkg
PSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOworICAg
ICAgICAvLyBCdXR0b25zIHNob3VsZCBub3QgZXhwb3NlIEFYVmFsdWUuCisgICAgICAgIFt0ZW1w
QXJyYXkgcmVtb3ZlT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXTsKKyAgICAg
ICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VGl0bGVVSUVsZW1lbnRBdHRy
aWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBY2Nl
c3NLZXlBdHRyaWJ1dGVdOworICAgICAgICBidXR0b25BdHRycyA9IFtbTlNBcnJheSBhbGxvY10g
aW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOwor
ICAgIH0KKyAgICBpZiAoY29tYm9Cb3hBdHRycyA9PSBuaWwpIHsKKyAgICAgICAgdGVtcEFycmF5
ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTpjb250cm9sQXR0cnNdOwor
ICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlFeHBhbmRlZEF0dHJp
YnV0ZV07CisgICAgICAgIGNvbWJvQm94QXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRo
QXJyYXk6dGVtcEFycmF5XTsKKyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKKyAgICB9Cisg
ICAgaWYgKHRhYmxlQXR0cnMgPT0gbmlsKSB7CisgICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0cmlidXRlc107CisgICAgICAgIFt0ZW1w
QXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVJvd3NBdHRyaWJ1dGVdOworICAgICAgICBb
dGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWaXNpYmxlUm93c0F0dHJpYnV0ZV07
CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUNvbHVtbnNBdHRy
aWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWaXNp
YmxlQ29sdW1uc0F0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNj
ZXNzaWJpbGl0eVZpc2libGVDZWxsc0F0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRk
T2JqZWN0OihOU1N0cmluZyAqKWtBWENvbHVtbkhlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGVdOwor
ICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlSb3dIZWFkZXJVSUVs
ZW1lbnRzQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5SGVhZGVyQXR0cmlidXRlXTsKKyAgICAgICAgdGFibGVBdHRycyA9IFtbTlNBcnJheSBh
bGxvY10gaW5pdFdpdGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVh
c2VdOworICAgIH0KKyAgICBpZiAodGFibGVSb3dBdHRycyA9PSBuaWwpIHsKKyAgICAgICAgdGVt
cEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1dGVz
XTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRy
aWJ1dGVdOworICAgICAgICB0YWJsZVJvd0F0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0
aEFycmF5OnRlbXBBcnJheV07CisgICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07CisgICAgfQor
ICAgIGlmICh0YWJsZUNvbEF0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkgPSBbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOworICAgICAgICBb
dGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlJbmRleEF0dHJpYnV0ZV07CisgICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUhlYWRlckF0dHJpYnV0ZV07
CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVJvd3NBdHRyaWJ1
dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWaXNpYmxl
Um93c0F0dHJpYnV0ZV07CisgICAgICAgIHRhYmxlQ29sQXR0cnMgPSBbW05TQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKKyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsK
KyAgICB9CisgICAgaWYgKHRhYmxlQ2VsbEF0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJy
YXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOwor
ICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlSb3dJbmRleFJhbmdl
QXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
Q29sdW1uSW5kZXhSYW5nZUF0dHJpYnV0ZV07CisgICAgICAgIHRhYmxlQ2VsbEF0dHJzID0gW1tO
U0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAgICAgIFt0ZW1wQXJy
YXkgcmVsZWFzZV07CisgICAgfQorICAgIGlmIChncm91cEF0dHJzID09IG5pbCkgeworICAgICAg
ICB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJp
YnV0ZXNdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUaXRs
ZVVJRWxlbWVudEF0dHJpYnV0ZV07CisgICAgICAgIGdyb3VwQXR0cnMgPSBbW05TQXJyYXkgYWxs
b2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKKyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNl
XTsKKyAgICB9CisgICAgaWYgKGlucHV0SW1hZ2VBdHRycyA9PSBuaWwpIHsKKyAgICAgICAgdGVt
cEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTpidXR0b25BdHRy
c107CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVVSTEF0dHJp
YnV0ZV07CisgICAgICAgIGlucHV0SW1hZ2VBdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdp
dGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0K
KyAgICBpZiAocGFzc3dvcmRGaWVsZEF0dHJzID09IG5pbCkgeworICAgICAgICB0ZW1wQXJyYXkg
PSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXNdOworICAg
ICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUaXRsZVVJRWxlbWVudEF0
dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVJl
cXVpcmVkQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5SW52YWxpZEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eVBsYWNlaG9sZGVyVmFsdWVBdHRyaWJ1dGVdOworICAgICAgICBwYXNzd29y
ZEZpZWxkQXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsK
KyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKKyAgICB9CisgICAgaWYgKHRhYkxpc3RBdHRy
cyA9PSBuaWwpIHsKKyAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6
TlNBY2Nlc3NpYmlsaXR5VGFic0F0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eUNvbnRlbnRzQXR0cmlidXRlXTsKKyAgICAgICAgdGFiTGlzdEF0
dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAgICAg
IFt0ZW1wQXJyYXkgcmVsZWFzZV07CisgICAgfQorICAgIGlmIChvdXRsaW5lQXR0cnMgPT0gbmls
KSB7CisgICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRo
QXJyYXk6YXR0cmlidXRlc107CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eVJvd3NBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFk
ZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlDb2x1bW5zQXR0cmlidXRlXTsKKyAgICAgICAgb3V0bGlu
ZUF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAg
ICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07CisgICAgfQorICAgIGlmIChvdXRsaW5lUm93QXR0cnMg
PT0gbmlsKSB7CisgICAgICAgIHRlbXBBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQXJyYXk6dGFibGVSb3dBdHRyc107CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0
Ok5TQWNjZXNzaWJpbGl0eURpc2Nsb3NpbmdBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zZWRCeVJvd0F0dHJpYnV0ZV07CisgICAg
ICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURpc2Nsb3N1cmVMZXZlbEF0
dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURp
c2Nsb3NlZFJvd3NBdHRyaWJ1dGVdOworICAgICAgICBvdXRsaW5lUm93QXR0cnMgPSBbW05TQXJy
YXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVtcEFycmF5XTsKKyAgICAgICAgW3RlbXBBcnJheSBy
ZWxlYXNlXTsKKyAgICB9CisgICAgaWYgKHNjcm9sbFZpZXdBdHRycyA9PSBuaWwpIHsKKyAgICAg
ICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRy
aWJ1dGVzXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5Q29u
dGVudHNBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlIb3Jpem9udGFsU2Nyb2xsQmFyQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmVydGljYWxTY3JvbGxCYXJBdHRyaWJ1dGVdOworICAg
ICAgICBzY3JvbGxWaWV3QXR0cnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGVt
cEFycmF5XTsKKyAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKKyAgICB9CisgICAgCisgICAg
TlNBcnJheSAqb2JqZWN0QXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgCisgICAgaWYgKG1f
b2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSkKKyAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHBh
c3N3b3JkRmllbGRBdHRyczsKKyAgICAKKyAgICBlbHNlIGlmIChtX29iamVjdC0+aXNXZWJBcmVh
KCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB3ZWJBcmVhQXR0cnM7CisgICAgCisgICAg
ZWxzZSBpZiAobV9vYmplY3QtPmlzVGV4dENvbnRyb2woKSkKKyAgICAgICAgb2JqZWN0QXR0cmli
dXRlcyA9IHRleHRBdHRyczsKKyAgICAKKyAgICBlbHNlIGlmIChtX29iamVjdC0+aXNBbmNob3Io
KSB8fCBtX29iamVjdC0+aXNJbWFnZSgpIHx8IG1fb2JqZWN0LT5pc0xpbmsoKSkKKyAgICAgICAg
b2JqZWN0QXR0cmlidXRlcyA9IGFuY2hvckF0dHJzOworICAgIAorICAgIGVsc2UgaWYgKG1fb2Jq
ZWN0LT5pc0FjY2Vzc2liaWxpdHlUYWJsZSgpKQorICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0g
dGFibGVBdHRyczsKKyAgICBlbHNlIGlmIChtX29iamVjdC0+aXNUYWJsZUNvbHVtbigpKQorICAg
ICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFibGVDb2xBdHRyczsKKyAgICBlbHNlIGlmIChtX29i
amVjdC0+aXNUYWJsZUNlbGwoKSkKKyAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHRhYmxlQ2Vs
bEF0dHJzOworICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RhYmxlUm93KCkpIHsKKyAgICAgICAg
Ly8gQW4gQVJJQSB0YWJsZSByb3cgY2FuIGJlIGNvbGxhcHNlZCBhbmQgZXhwYW5kZWQsIHNvIGl0
IG5lZWRzIHRoZSBleHRyYSBhdHRyaWJ1dGVzLgorICAgICAgICBpZiAobV9vYmplY3QtPmlzQVJJ
QVRyZWVHcmlkUm93KCkpCisgICAgICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gb3V0bGluZVJv
d0F0dHJzOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFi
bGVSb3dBdHRyczsKKyAgICB9CisgICAgCisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzVHJlZSgp
KQorICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gb3V0bGluZUF0dHJzOworICAgIGVsc2UgaWYg
KG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBvdXRs
aW5lUm93QXR0cnM7CisgICAgCisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTGlzdEJveCgpKQor
ICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gbGlzdEJveEF0dHJzOworICAgIGVsc2UgaWYgKG1f
b2JqZWN0LT5pc0xpc3QoKSkKKyAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGxpc3RBdHRyczsK
KyAgICAKKyAgICBlbHNlIGlmIChtX29iamVjdC0+aXNDb21ib0JveCgpKQorICAgICAgICBvYmpl
Y3RBdHRyaWJ1dGVzID0gY29tYm9Cb3hBdHRyczsKKyAgICAKKyAgICBlbHNlIGlmIChtX29iamVj
dC0+aXNQcm9ncmVzc0luZGljYXRvcigpIHx8IG1fb2JqZWN0LT5pc1NsaWRlcigpKQorICAgICAg
ICBvYmplY3RBdHRyaWJ1dGVzID0gcmFuZ2VBdHRyczsKKyAgICAKKyAgICAvLyBUaGVzZSBhcmUg
cHJvY2Vzc2VkIGluIG9yZGVyIGJlY2F1c2UgYW4gaW5wdXQgaW1hZ2UgaXMgYSBidXR0b24sIGFu
ZCBhIGJ1dHRvbiBpcyBhIGNvbnRyb2wuCisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzSW5wdXRJ
bWFnZSgpKQorICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gaW5wdXRJbWFnZUF0dHJzOworICAg
IGVsc2UgaWYgKG1fb2JqZWN0LT5pc0J1dHRvbigpKQorICAgICAgICBvYmplY3RBdHRyaWJ1dGVz
ID0gYnV0dG9uQXR0cnM7CisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzQ29udHJvbCgpKQorICAg
ICAgICBvYmplY3RBdHRyaWJ1dGVzID0gY29udHJvbEF0dHJzOworICAgIAorICAgIGVsc2UgaWYg
KG1fb2JqZWN0LT5pc0dyb3VwKCkgfHwgbV9vYmplY3QtPmlzTGlzdEl0ZW0oKSkKKyAgICAgICAg
b2JqZWN0QXR0cmlidXRlcyA9IGdyb3VwQXR0cnM7CisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlz
VGFiTGlzdCgpKQorICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFiTGlzdEF0dHJzOworICAg
IGVsc2UgaWYgKG1fb2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkKKyAgICAgICAgb2JqZWN0QXR0cmli
dXRlcyA9IHNjcm9sbFZpZXdBdHRyczsKKyAgICBlbHNlIGlmIChtX29iamVjdC0+aXNTcGluQnV0
dG9uKCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBpbmNyZW1lbnRvckF0dHJzOworICAg
IAorICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc01lbnUoKSkKKyAgICAgICAgb2JqZWN0QXR0cmli
dXRlcyA9IG1lbnVBdHRyczsKKyAgICBlbHNlIGlmIChtX29iamVjdC0+aXNNZW51QmFyKCkpCisg
ICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBtZW51QmFyQXR0cnM7CisgICAgZWxzZSBpZiAobV9v
YmplY3QtPmlzTWVudUJ1dHRvbigpKQorICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gbWVudUJ1
dHRvbkF0dHJzOworICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc01lbnVJdGVtKCkpCisgICAgICAg
IG9iamVjdEF0dHJpYnV0ZXMgPSBtZW51SXRlbUF0dHJzOworICAgIAorICAgIE5TQXJyYXkgKmFk
ZGl0aW9uYWxBdHRyaWJ1dGVzID0gW3NlbGYgYWRkaXRpb25hbEFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVOYW1lc107CisgICAgaWYgKFthZGRpdGlvbmFsQXR0cmlidXRlcyBjb3VudF0pCisgICAgICAg
IG9iamVjdEF0dHJpYnV0ZXMgPSBbb2JqZWN0QXR0cmlidXRlcyBhcnJheUJ5QWRkaW5nT2JqZWN0
c0Zyb21BcnJheTphZGRpdGlvbmFsQXR0cmlidXRlc107CisgICAgCisgICAgcmV0dXJuIG9iamVj
dEF0dHJpYnV0ZXM7Cit9CisKKy0gKFZpc2libGVQb3NpdGlvblJhbmdlKXZpc2libGVQb3NpdGlv
blJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOihpZCl0ZXh0TWFya2VyUmFuZ2UKK3sKKyAgICBpZiAo
IXRleHRNYXJrZXJSYW5nZSkKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7
CisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOwor
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zaXRpb25Gb3JTdGFydE9m
VGV4dE1hcmtlclJhbmdlKGNhY2hlLCB0ZXh0TWFya2VyUmFuZ2UpLCB2aXNpYmxlUG9zaXRpb25G
b3JFbmRPZlRleHRNYXJrZXJSYW5nZShjYWNoZSwgdGV4dE1hcmtlclJhbmdlKSk7Cit9CisKKy0g
KE5TQXJyYXkqKXJlbmRlcldpZGdldENoaWxkcmVuCit7CisgICAgV2lkZ2V0KiB3aWRnZXQgPSBt
X29iamVjdC0+d2lkZ2V0KCk7CisgICAgaWYgKCF3aWRnZXQpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgcmV0dXJuIFsod2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKSBhY2Nlc3NpYmlsaXR5QXR0
cmlidXRlVmFsdWU6IE5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXTsKK30KKworLSAo
aWQpcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdAoreworICAgIGlmICghbV9vYmplY3Qp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9v
YmplY3QtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICAKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAo
IWZyYW1lKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHJldHVybiBmcmFtZS0+bG9h
ZGVyKCktPmNsaWVudCgpLT5hY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCk7Cit9CisKK3N0YXRp
YyB2b2lkIGNvbnZlcnRUb1ZlY3RvcihOU0FycmF5KiBhcnJheSwgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiB2ZWN0b3IpCit7CisgICAgdW5zaWduZWQg
bGVuZ3RoID0gW2FycmF5IGNvdW50XTsKKyAgICB2ZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShsZW5ndGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewor
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBbW2FycmF5IG9iamVjdEF0SW5kZXg6
aV0gYWNjZXNzaWJpbGl0eU9iamVjdF07CisgICAgICAgIGlmIChvYmopCisgICAgICAgICAgICB2
ZWN0b3IuYXBwZW5kKG9iaik7CisgICAgfQorfQorCitzdGF0aWMgTlNNdXRhYmxlQXJyYXkqIGNv
bnZlcnRUb05TQXJyYXkoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yJiB2ZWN0b3IpCit7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gdmVjdG9yLnNp
emUoKTsKKyAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlX
aXRoQ2FwYWNpdHk6IGxlbmd0aF07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVy
ID0gdmVjdG9yW2ldLT53cmFwcGVyKCk7CisgICAgICAgIEFTU0VSVCh3cmFwcGVyKTsKKyAgICAg
ICAgaWYgKHdyYXBwZXIpIHsKKyAgICAgICAgICAgIC8vIHdlIHdhbnQgdG8gcmV0dXJuIHRoZSBh
dHRhY2htZW50IHZpZXcgaW5zdGVhZCBvZiB0aGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgYXR0
YWNobWVudC4KKyAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgd2UgZ2V0IHBhbGluZHJvbWUgZXJy
b3JzIGluIHRoZSBBWCBoaWVyYXJjaHkKKyAgICAgICAgICAgIGlmICh2ZWN0b3JbaV0tPmlzQXR0
YWNobWVudCgpICYmIFt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XSkKKyAgICAgICAgICAgICAgICBb
YXJyYXkgYWRkT2JqZWN0Olt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XV07CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDp3cmFwcGVyXTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gYXJyYXk7Cit9CisKKy0gKGlkKXRleHRNYXJrZXJSYW5nZUZv
clNlbGVjdGlvbgoreworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9vYmplY3Qt
PnNlbGVjdGlvbigpOworICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRp
b25zOnNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSBlbmRQb3NpdGlvbjpzZWxlY3Rpb24udmlzaWJs
ZUVuZCgpXTsKK30KKworLSAoTlNWYWx1ZSAqKXBvc2l0aW9uCit7CisgICAgSW50UmVjdCByZWN0
ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChtX29iamVjdC0+ZWxlbWVudFJlY3QoKSk7CisgICAgTlNQ
b2ludCBwb2ludDsKKyAgICAKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fb2JqZWN0LT5k
b2N1bWVudEZyYW1lVmlldygpOworICAgIAorICAgIC8vIFdlYktpdDEgY29kZSBwYXRoLi4uIHBs
YXRmb3JtV2lkZ2V0KCkgZXhpc3RzLgorICAgIGlmIChmcmFtZVZpZXcgJiYgZnJhbWVWaWV3LT5w
bGF0Zm9ybVdpZGdldCgpKSB7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgQ29jb2EgYWNjZXNz
aWJpbGl0eSBBUEkgd2FudHMgdGhlIGxvd2VyLWxlZnQgY29ybmVyLgorICAgICAgICBwb2ludCA9
IE5TTWFrZVBvaW50KHJlY3QueCgpLCByZWN0Lm1heFkoKSk7CisgICAgICAgIAorICAgICAgICBp
ZiAoZnJhbWVWaWV3KSB7CisgICAgICAgICAgICBOU1ZpZXcqIHZpZXcgPSBmcmFtZVZpZXctPmRv
Y3VtZW50VmlldygpOworICAgICAgICAgICAgcG9pbnQgPSBbW3ZpZXcgd2luZG93XSBjb252ZXJ0
QmFzZVRvU2NyZWVuOlt2aWV3IGNvbnZlcnRQb2ludDogcG9pbnQgdG9WaWV3Om5pbF1dOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgCisgICAgICAgIC8vIEZpbmQgdGhlIGFwcHJv
cHJpYXRlIHNjcm9sbCB2aWV3IHRvIHVzZSB0byBjb252ZXJ0IHRoZSBjb250ZW50cyB0byB0aGUg
d2luZG93LgorICAgICAgICBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3ID0gMDsKKyAgICAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gMDsKKyAgICAgICAgZm9yIChwYXJlbnQgPSBtX29i
amVjdC0+cGFyZW50T2JqZWN0KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmpl
Y3QoKSkgeworICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmll
dygpKSB7CisgICAgICAgICAgICAgICAgc2Nyb2xsVmlldyA9IHRvQWNjZXNzaWJpbGl0eVNjcm9s
bFZpZXcocGFyZW50KS0+c2Nyb2xsVmlldygpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc2Nyb2xsVmlldykK
KyAgICAgICAgICAgIHJlY3QgPSBzY3JvbGxWaWV3LT5jb250ZW50c1RvUm9vdFZpZXcocmVjdCk7
CisgICAgICAgIAorICAgICAgICBQYWdlKiBwYWdlID0gbV9vYmplY3QtPnBhZ2UoKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gZW1wdHkgY2hyb21lIGNsaWVudCAobGlrZSBT
VkcpIHRoZW4gd2Ugc2hvdWxkIHVzZSB0aGUgcGFnZQorICAgICAgICAvLyBvZiB0aGUgc2Nyb2xs
IHZpZXcgcGFyZW50IHRvIGhlbHAgdXMgZ2V0IHRvIHRoZSBzY3JlZW4gcmVjdC4KKyAgICAgICAg
aWYgKHBhcmVudCAmJiBwYWdlICYmIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+aXNFbXB0eUNo
cm9tZUNsaWVudCgpKQorICAgICAgICAgICAgcGFnZSA9IHBhcmVudC0+cGFnZSgpOworICAgICAg
ICAKKyAgICAgICAgaWYgKHBhZ2UpCisgICAgICAgICAgICBwb2ludCA9IHBhZ2UtPmNocm9tZSgp
LT5yb290Vmlld1RvU2NyZWVuKHJlY3QpLmxvY2F0aW9uKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHBvaW50ID0gcmVjdC5sb2NhdGlvbigpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
W05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6cG9pbnRdOworfQorCit0eXBlZGVmIEhhc2hNYXA8aW50
LCBOU1N0cmluZyo+IEFjY2Vzc2liaWxpdHlSb2xlTWFwOworCitzdGF0aWMgY29uc3QgQWNjZXNz
aWJpbGl0eVJvbGVNYXAmIGNyZWF0ZUFjY2Vzc2liaWxpdHlSb2xlTWFwKCkKK3sKKyAgICBzdHJ1
Y3QgUm9sZUVudHJ5IHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eVJvbGUgdmFsdWU7CisgICAgICAg
IE5TU3RyaW5nKiBzdHJpbmc7CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgUm9sZUVu
dHJ5IHJvbGVzW10gPSB7CisgICAgICAgIHsgVW5rbm93blJvbGUsIE5TQWNjZXNzaWJpbGl0eVVu
a25vd25Sb2xlIH0sCisgICAgICAgIHsgQnV0dG9uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5QnV0dG9u
Um9sZSB9LAorICAgICAgICB7IFJhZGlvQnV0dG9uUm9sZSwgTlNBY2Nlc3NpYmlsaXR5UmFkaW9C
dXR0b25Sb2xlIH0sCisgICAgICAgIHsgQ2hlY2tCb3hSb2xlLCBOU0FjY2Vzc2liaWxpdHlDaGVj
a0JveFJvbGUgfSwKKyAgICAgICAgeyBTbGlkZXJSb2xlLCBOU0FjY2Vzc2liaWxpdHlTbGlkZXJS
b2xlIH0sCisgICAgICAgIHsgVGFiR3JvdXBSb2xlLCBOU0FjY2Vzc2liaWxpdHlUYWJHcm91cFJv
bGUgfSwKKyAgICAgICAgeyBUZXh0RmllbGRSb2xlLCBOU0FjY2Vzc2liaWxpdHlUZXh0RmllbGRS
b2xlIH0sCisgICAgICAgIHsgU3RhdGljVGV4dFJvbGUsIE5TQWNjZXNzaWJpbGl0eVN0YXRpY1Rl
eHRSb2xlIH0sCisgICAgICAgIHsgVGV4dEFyZWFSb2xlLCBOU0FjY2Vzc2liaWxpdHlUZXh0QXJl
YVJvbGUgfSwKKyAgICAgICAgeyBTY3JvbGxBcmVhUm9sZSwgTlNBY2Nlc3NpYmlsaXR5U2Nyb2xs
QXJlYVJvbGUgfSwKKyAgICAgICAgeyBQb3BVcEJ1dHRvblJvbGUsIE5TQWNjZXNzaWJpbGl0eVBv
cFVwQnV0dG9uUm9sZSB9LAorICAgICAgICB7IE1lbnVCdXR0b25Sb2xlLCBOU0FjY2Vzc2liaWxp
dHlNZW51QnV0dG9uUm9sZSB9LAorICAgICAgICB7IFRhYmxlUm9sZSwgTlNBY2Nlc3NpYmlsaXR5
VGFibGVSb2xlIH0sCisgICAgICAgIHsgQXBwbGljYXRpb25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlB
cHBsaWNhdGlvblJvbGUgfSwKKyAgICAgICAgeyBHcm91cFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdy
b3VwUm9sZSB9LAorICAgICAgICB7IFJhZGlvR3JvdXBSb2xlLCBOU0FjY2Vzc2liaWxpdHlSYWRp
b0dyb3VwUm9sZSB9LAorICAgICAgICB7IExpc3RSb2xlLCBOU0FjY2Vzc2liaWxpdHlMaXN0Um9s
ZSB9LAorICAgICAgICB7IERpcmVjdG9yeVJvbGUsIE5TQWNjZXNzaWJpbGl0eUxpc3RSb2xlIH0s
CisgICAgICAgIHsgU2Nyb2xsQmFyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5U2Nyb2xsQmFyUm9sZSB9
LAorICAgICAgICB7IFZhbHVlSW5kaWNhdG9yUm9sZSwgTlNBY2Nlc3NpYmlsaXR5VmFsdWVJbmRp
Y2F0b3JSb2xlIH0sCisgICAgICAgIHsgSW1hZ2VSb2xlLCBOU0FjY2Vzc2liaWxpdHlJbWFnZVJv
bGUgfSwKKyAgICAgICAgeyBNZW51QmFyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5TWVudUJhclJvbGUg
fSwKKyAgICAgICAgeyBNZW51Um9sZSwgTlNBY2Nlc3NpYmlsaXR5TWVudVJvbGUgfSwKKyAgICAg
ICAgeyBNZW51SXRlbVJvbGUsIE5TQWNjZXNzaWJpbGl0eU1lbnVJdGVtUm9sZSB9LAorICAgICAg
ICB7IENvbHVtblJvbGUsIE5TQWNjZXNzaWJpbGl0eUNvbHVtblJvbGUgfSwKKyAgICAgICAgeyBS
b3dSb2xlLCBOU0FjY2Vzc2liaWxpdHlSb3dSb2xlIH0sCisgICAgICAgIHsgVG9vbGJhclJvbGUs
IE5TQWNjZXNzaWJpbGl0eVRvb2xiYXJSb2xlIH0sCisgICAgICAgIHsgQnVzeUluZGljYXRvclJv
bGUsIE5TQWNjZXNzaWJpbGl0eUJ1c3lJbmRpY2F0b3JSb2xlIH0sCisgICAgICAgIHsgUHJvZ3Jl
c3NJbmRpY2F0b3JSb2xlLCBOU0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvclJvbGUgfSwK
KyAgICAgICAgeyBXaW5kb3dSb2xlLCBOU0FjY2Vzc2liaWxpdHlXaW5kb3dSb2xlIH0sCisgICAg
ICAgIHsgRHJhd2VyUm9sZSwgTlNBY2Nlc3NpYmlsaXR5RHJhd2VyUm9sZSB9LAorICAgICAgICB7
IFN5c3RlbVdpZGVSb2xlLCBOU0FjY2Vzc2liaWxpdHlTeXN0ZW1XaWRlUm9sZSB9LAorICAgICAg
ICB7IE91dGxpbmVSb2xlLCBOU0FjY2Vzc2liaWxpdHlPdXRsaW5lUm9sZSB9LAorICAgICAgICB7
IEluY3JlbWVudG9yUm9sZSwgTlNBY2Nlc3NpYmlsaXR5SW5jcmVtZW50b3JSb2xlIH0sCisgICAg
ICAgIHsgQnJvd3NlclJvbGUsIE5TQWNjZXNzaWJpbGl0eUJyb3dzZXJSb2xlIH0sCisgICAgICAg
IHsgQ29tYm9Cb3hSb2xlLCBOU0FjY2Vzc2liaWxpdHlDb21ib0JveFJvbGUgfSwKKyAgICAgICAg
eyBTcGxpdEdyb3VwUm9sZSwgTlNBY2Nlc3NpYmlsaXR5U3BsaXRHcm91cFJvbGUgfSwKKyAgICAg
ICAgeyBTcGxpdHRlclJvbGUsIE5TQWNjZXNzaWJpbGl0eVNwbGl0dGVyUm9sZSB9LAorICAgICAg
ICB7IENvbG9yV2VsbFJvbGUsIE5TQWNjZXNzaWJpbGl0eUNvbG9yV2VsbFJvbGUgfSwKKyAgICAg
ICAgeyBHcm93QXJlYVJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3dBcmVhUm9sZSB9LAorICAgICAg
ICB7IFNoZWV0Um9sZSwgTlNBY2Nlc3NpYmlsaXR5U2hlZXRSb2xlIH0sCisgICAgICAgIHsgSGVs
cFRhZ1JvbGUsIE5TQWNjZXNzaWJpbGl0eUhlbHBUYWdSb2xlIH0sCisgICAgICAgIHsgTWF0dGVS
b2xlLCBOU0FjY2Vzc2liaWxpdHlNYXR0ZVJvbGUgfSwKKyAgICAgICAgeyBSdWxlclJvbGUsIE5T
QWNjZXNzaWJpbGl0eVJ1bGVyUm9sZSB9LAorICAgICAgICB7IFJ1bGVyTWFya2VyUm9sZSwgTlNB
Y2Nlc3NpYmlsaXR5UnVsZXJNYXJrZXJSb2xlIH0sCisgICAgICAgIHsgTGlua1JvbGUsIE5TQWNj
ZXNzaWJpbGl0eUxpbmtSb2xlIH0sCisgICAgICAgIHsgRGlzY2xvc3VyZVRyaWFuZ2xlUm9sZSwg
TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc3VyZVRyaWFuZ2xlUm9sZSB9LAorICAgICAgICB7IEdyaWRS
b2xlLCBOU0FjY2Vzc2liaWxpdHlHcmlkUm9sZSB9LAorICAgICAgICB7IFdlYkNvcmVMaW5rUm9s
ZSwgTlNBY2Nlc3NpYmlsaXR5TGlua1JvbGUgfSwKKyAgICAgICAgeyBJbWFnZU1hcExpbmtSb2xl
LCBOU0FjY2Vzc2liaWxpdHlMaW5rUm9sZSB9LAorICAgICAgICB7IEltYWdlTWFwUm9sZSwgQCJB
WEltYWdlTWFwIiB9LAorICAgICAgICB7IExpc3RNYXJrZXJSb2xlLCBAIkFYTGlzdE1hcmtlciIg
fSwKKyAgICAgICAgeyBXZWJBcmVhUm9sZSwgQCJBWFdlYkFyZWEiIH0sCisgICAgICAgIHsgU2Vh
bWxlc3NXZWJBcmVhUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsg
SGVhZGluZ1JvbGUsIEAiQVhIZWFkaW5nIiB9LAorICAgICAgICB7IExpc3RCb3hSb2xlLCBOU0Fj
Y2Vzc2liaWxpdHlMaXN0Um9sZSB9LAorICAgICAgICB7IExpc3RCb3hPcHRpb25Sb2xlLCBOU0Fj
Y2Vzc2liaWxpdHlTdGF0aWNUZXh0Um9sZSB9LAorICAgICAgICB7IENlbGxSb2xlLCBOU0FjY2Vz
c2liaWxpdHlDZWxsUm9sZSB9LAorICAgICAgICB7IFRhYmxlSGVhZGVyQ29udGFpbmVyUm9sZSwg
TlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgUm93SGVhZGVyUm9sZSwgTlNB
Y2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgRGVmaW5pdGlvblJvbGUsIE5TQWNj
ZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IERlc2NyaXB0aW9uTGlzdERldGFpbFJv
bGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IERlc2NyaXB0aW9uTGlz
dFRlcm1Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBTbGlkZXJU
aHVtYlJvbGUsIE5TQWNjZXNzaWJpbGl0eVZhbHVlSW5kaWNhdG9yUm9sZSB9LAorICAgICAgICB7
IExhbmRtYXJrQXBwbGljYXRpb25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAg
ICAgICAgeyBMYW5kbWFya0Jhbm5lclJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAor
ICAgICAgICB7IExhbmRtYXJrQ29tcGxlbWVudGFyeVJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3Vw
Um9sZSB9LAorICAgICAgICB7IExhbmRtYXJrQ29udGVudEluZm9Sb2xlLCBOU0FjY2Vzc2liaWxp
dHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBMYW5kbWFya01haW5Sb2xlLCBOU0FjY2Vzc2liaWxp
dHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBMYW5kbWFya05hdmlnYXRpb25Sb2xlLCBOU0FjY2Vz
c2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBMYW5kbWFya1NlYXJjaFJvbGUsIE5TQWNj
ZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IEFwcGxpY2F0aW9uQWxlcnRSb2xlLCBO
U0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBBcHBsaWNhdGlvbkFsZXJ0RGlh
bG9nUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgQXBwbGljYXRp
b25EaWFsb2dSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBBcHBs
aWNhdGlvbkxvZ1JvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IEFw
cGxpY2F0aW9uTWFycXVlZVJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAg
ICB7IEFwcGxpY2F0aW9uU3RhdHVzUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisg
ICAgICAgIHsgQXBwbGljYXRpb25UaW1lclJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9
LAorICAgICAgICB7IERvY3VtZW50Um9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisg
ICAgICAgIHsgRG9jdW1lbnRBcnRpY2xlUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0s
CisgICAgICAgIHsgRG9jdW1lbnRNYXRoUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0s
CisgICAgICAgIHsgRG9jdW1lbnROb3RlUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0s
CisgICAgICAgIHsgRG9jdW1lbnRSZWdpb25Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUg
fSwKKyAgICAgICAgeyBVc2VySW50ZXJmYWNlVG9vbHRpcFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdy
b3VwUm9sZSB9LAorICAgICAgICB7IFRhYlJvbGUsIE5TQWNjZXNzaWJpbGl0eVJhZGlvQnV0dG9u
Um9sZSB9LAorICAgICAgICB7IFRhYkxpc3RSb2xlLCBOU0FjY2Vzc2liaWxpdHlUYWJHcm91cFJv
bGUgfSwKKyAgICAgICAgeyBUYWJQYW5lbFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9
LAorICAgICAgICB7IFRyZWVSb2xlLCBOU0FjY2Vzc2liaWxpdHlPdXRsaW5lUm9sZSB9LAorICAg
ICAgICB7IFRyZWVJdGVtUm9sZSwgTlNBY2Nlc3NpYmlsaXR5Um93Um9sZSB9LAorICAgICAgICB7
IExpc3RJdGVtUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgUGFy
YWdyYXBoUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgTGFiZWxS
b2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBEaXZSb2xlLCBOU0Fj
Y2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKKyAgICAgICAgeyBGb3JtUm9sZSwgTlNBY2Nlc3NpYmls
aXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgU3BpbkJ1dHRvblJvbGUsIE5TQWNjZXNzaWJpbGl0
eUluY3JlbWVudG9yUm9sZSB9LAorICAgICAgICB7IEZvb3RlclJvbGUsIE5TQWNjZXNzaWJpbGl0
eUdyb3VwUm9sZSB9LAorICAgICAgICB7IFRvZ2dsZUJ1dHRvblJvbGUsIE5TQWNjZXNzaWJpbGl0
eUJ1dHRvblJvbGUgfSwKKyAgICAgICAgeyBDYW52YXNSb2xlLCBOU0FjY2Vzc2liaWxpdHlJbWFn
ZVJvbGUgfSwKKyAgICAgICAgeyBTVkdSb290Um9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xl
IH0sCisgICAgICAgIHsgTGVnZW5kUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisg
ICAgICAgIHsgTWF0aEVsZW1lbnRSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfQorICAg
IH07CisgICAgQWNjZXNzaWJpbGl0eVJvbGVNYXAmIHJvbGVNYXAgPSAqbmV3IEFjY2Vzc2liaWxp
dHlSb2xlTWFwOworICAgIAorICAgIGNvbnN0IHVuc2lnbmVkIG51bVJvbGVzID0gc2l6ZW9mKHJv
bGVzKSAvIHNpemVvZihyb2xlc1swXSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bVJvbGVzOyArK2kpCisgICAgICAgIHJvbGVNYXAuc2V0KHJvbGVzW2ldLnZhbHVlLCByb2xlc1tp
XS5zdHJpbmcpOworICAgIHJldHVybiByb2xlTWFwOworfQorCitzdGF0aWMgTlNTdHJpbmcqIHJv
bGVWYWx1ZVRvTlNTdHJpbmcoQWNjZXNzaWJpbGl0eVJvbGUgdmFsdWUpCit7CisgICAgQVNTRVJU
KHZhbHVlKTsKKyAgICBzdGF0aWMgY29uc3QgQWNjZXNzaWJpbGl0eVJvbGVNYXAmIHJvbGVNYXAg
PSBjcmVhdGVBY2Nlc3NpYmlsaXR5Um9sZU1hcCgpOworICAgIHJldHVybiByb2xlTWFwLmdldCh2
YWx1ZSk7Cit9CisKKy0gKE5TU3RyaW5nKilyb2xlCit7CisgICAgaWYgKG1fb2JqZWN0LT5pc0F0
dGFjaG1lbnQoKSkKKyAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVJvbGVBdHRyaWJ1dGVdOworICAg
IEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBtX29iamVjdC0+cm9sZVZhbHVlKCk7CisgICAgaWYg
KHJvbGUgPT0gQ2FudmFzUm9sZSAmJiBtX29iamVjdC0+Y2FudmFzSGFzRmFsbGJhY2tDb250ZW50
KCkpCisgICAgICAgIHJvbGUgPSBHcm91cFJvbGU7CisgICAgTlNTdHJpbmcqIHN0cmluZyA9IHJv
bGVWYWx1ZVRvTlNTdHJpbmcocm9sZSk7CisgICAgaWYgKHN0cmluZyAhPSBuaWwpCisgICAgICAg
IHJldHVybiBzdHJpbmc7CisgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVVua25vd25Sb2xlOwor
fQorCistIChOU1N0cmluZyopc3Vicm9sZQoreworICAgIGlmIChtX29iamVjdC0+aXNQYXNzd29y
ZEZpZWxkKCkpCisgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlTZWN1cmVUZXh0RmllbGRT
dWJyb2xlOworICAgIGlmIChtX29iamVjdC0+aXNTZWFyY2hGaWVsZCgpKQorICAgICAgICByZXR1
cm4gTlNBY2Nlc3NpYmlsaXR5U2VhcmNoRmllbGRTdWJyb2xlOworICAgIAorICAgIGlmIChtX29i
amVjdC0+aXNBdHRhY2htZW50KCkpIHsKKyAgICAgICAgTlNWaWV3KiBhdHRhY2hWaWV3ID0gW3Nl
bGYgYXR0YWNobWVudFZpZXddOworICAgICAgICBpZiAoW1thdHRhY2hWaWV3IGFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVOYW1lc10gY29udGFpbnNPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5U3Vicm9sZUF0
dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIHJldHVybiBbYXR0YWNoVmlldyBhY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5U3Vicm9sZUF0dHJpYnV0ZV07CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc1NwaW5CdXR0b25QYXJ0KCkpIHsK
KyAgICAgICAgaWYgKHRvQWNjZXNzaWJpbGl0eVNwaW5CdXR0b25QYXJ0KG1fb2JqZWN0KS0+aXNJ
bmNyZW1lbnRvcigpKQorICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eUluY3JlbWVu
dEFycm93U3Vicm9sZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlE
ZWNyZW1lbnRBcnJvd1N1YnJvbGU7CisgICAgfQorICAgIAorICAgIGlmIChtX29iamVjdC0+aXNG
aWxlVXBsb2FkQnV0dG9uKCkpCisgICAgICAgIHJldHVybiBAIkFYRmlsZVVwbG9hZEJ1dHRvbiI7
CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpCisgICAgICAgIHJldHVybiBO
U0FjY2Vzc2liaWxpdHlPdXRsaW5lUm93U3Vicm9sZTsKKyAgICAKKyAgICBpZiAobV9vYmplY3Qt
PmlzTGlzdCgpKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlMaXN0KiBsaXN0T2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUxpc3QqPihtX29iamVjdCk7CisgICAgICAgIGlmIChsaXN0
T2JqZWN0LT5pc1Vub3JkZXJlZExpc3QoKSB8fCBsaXN0T2JqZWN0LT5pc09yZGVyZWRMaXN0KCkp
CisgICAgICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5Q29udGVudExpc3RTdWJyb2xlOwor
ICAgICAgICBpZiAobGlzdE9iamVjdC0+aXNEZXNjcmlwdGlvbkxpc3QoKSkKKyAgICAgICAgICAg
IHJldHVybiBOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkxpc3RTdWJyb2xlOworICAgIH0KKyAg
ICAKKyAgICAvLyBBUklBIGNvbnRlbnQgc3Vicm9sZXMuCisgICAgc3dpdGNoIChtX29iamVjdC0+
cm9sZVZhbHVlKCkpIHsKKyAgICAgICAgY2FzZSBMYW5kbWFya0FwcGxpY2F0aW9uUm9sZToKKyAg
ICAgICAgICAgIHJldHVybiBAIkFYTGFuZG1hcmtBcHBsaWNhdGlvbiI7CisgICAgICAgIGNhc2Ug
TGFuZG1hcmtCYW5uZXJSb2xlOgorICAgICAgICAgICAgcmV0dXJuIEAiQVhMYW5kbWFya0Jhbm5l
ciI7CisgICAgICAgIGNhc2UgTGFuZG1hcmtDb21wbGVtZW50YXJ5Um9sZToKKyAgICAgICAgICAg
IHJldHVybiBAIkFYTGFuZG1hcmtDb21wbGVtZW50YXJ5IjsKKyAgICAgICAgICAgIC8vIEZvb3Rl
ciByb2xlcyBzaG91bGQgYXBwZWFyIGFzIGNvbnRlbnQgaW5mbyB0eXBlcy4KKyAgICAgICAgY2Fz
ZSBGb290ZXJSb2xlOgorICAgICAgICBjYXNlIExhbmRtYXJrQ29udGVudEluZm9Sb2xlOgorICAg
ICAgICAgICAgcmV0dXJuIEAiQVhMYW5kbWFya0NvbnRlbnRJbmZvIjsKKyAgICAgICAgY2FzZSBM
YW5kbWFya01haW5Sb2xlOgorICAgICAgICAgICAgcmV0dXJuIEAiQVhMYW5kbWFya01haW4iOwor
ICAgICAgICBjYXNlIExhbmRtYXJrTmF2aWdhdGlvblJvbGU6CisgICAgICAgICAgICByZXR1cm4g
QCJBWExhbmRtYXJrTmF2aWdhdGlvbiI7CisgICAgICAgIGNhc2UgTGFuZG1hcmtTZWFyY2hSb2xl
OgorICAgICAgICAgICAgcmV0dXJuIEAiQVhMYW5kbWFya1NlYXJjaCI7CisgICAgICAgIGNhc2Ug
QXBwbGljYXRpb25BbGVydFJvbGU6CisgICAgICAgICAgICByZXR1cm4gQCJBWEFwcGxpY2F0aW9u
QWxlcnQiOworICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQWxlcnREaWFsb2dSb2xlOgorICAgICAg
ICAgICAgcmV0dXJuIEAiQVhBcHBsaWNhdGlvbkFsZXJ0RGlhbG9nIjsKKyAgICAgICAgY2FzZSBB
cHBsaWNhdGlvbkRpYWxvZ1JvbGU6CisgICAgICAgICAgICByZXR1cm4gQCJBWEFwcGxpY2F0aW9u
RGlhbG9nIjsKKyAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkxvZ1JvbGU6CisgICAgICAgICAgICBy
ZXR1cm4gQCJBWEFwcGxpY2F0aW9uTG9nIjsKKyAgICAgICAgY2FzZSBBcHBsaWNhdGlvbk1hcnF1
ZWVSb2xlOgorICAgICAgICAgICAgcmV0dXJuIEAiQVhBcHBsaWNhdGlvbk1hcnF1ZWUiOworICAg
ICAgICBjYXNlIEFwcGxpY2F0aW9uU3RhdHVzUm9sZToKKyAgICAgICAgICAgIHJldHVybiBAIkFY
QXBwbGljYXRpb25TdGF0dXMiOworICAgICAgICBjYXNlIEFwcGxpY2F0aW9uVGltZXJSb2xlOgor
ICAgICAgICAgICAgcmV0dXJuIEAiQVhBcHBsaWNhdGlvblRpbWVyIjsKKyAgICAgICAgY2FzZSBE
b2N1bWVudFJvbGU6CisgICAgICAgICAgICByZXR1cm4gQCJBWERvY3VtZW50IjsKKyAgICAgICAg
Y2FzZSBEb2N1bWVudEFydGljbGVSb2xlOgorICAgICAgICAgICAgcmV0dXJuIEAiQVhEb2N1bWVu
dEFydGljbGUiOworICAgICAgICBjYXNlIERvY3VtZW50TWF0aFJvbGU6CisgICAgICAgICAgICBy
ZXR1cm4gQCJBWERvY3VtZW50TWF0aCI7CisgICAgICAgIGNhc2UgRG9jdW1lbnROb3RlUm9sZToK
KyAgICAgICAgICAgIHJldHVybiBAIkFYRG9jdW1lbnROb3RlIjsKKyAgICAgICAgY2FzZSBEb2N1
bWVudFJlZ2lvblJvbGU6CisgICAgICAgICAgICByZXR1cm4gQCJBWERvY3VtZW50UmVnaW9uIjsK
KyAgICAgICAgY2FzZSBVc2VySW50ZXJmYWNlVG9vbHRpcFJvbGU6CisgICAgICAgICAgICByZXR1
cm4gQCJBWFVzZXJJbnRlcmZhY2VUb29sdGlwIjsKKyAgICAgICAgY2FzZSBUYWJQYW5lbFJvbGU6
CisgICAgICAgICAgICByZXR1cm4gQCJBWFRhYlBhbmVsIjsKKyAgICAgICAgY2FzZSBEZWZpbml0
aW9uUm9sZToKKyAgICAgICAgICAgIHJldHVybiBAIkFYRGVmaW5pdGlvbiI7CisgICAgICAgIGNh
c2UgRGVzY3JpcHRpb25MaXN0VGVybVJvbGU6CisgICAgICAgICAgICByZXR1cm4gQCJBWFRlcm0i
OworICAgICAgICBjYXNlIERlc2NyaXB0aW9uTGlzdERldGFpbFJvbGU6CisgICAgICAgICAgICBy
ZXR1cm4gQCJBWERlc2NyaXB0aW9uIjsKKyAgICAgICAgICAgIC8vIERlZmF1bHQgZG9lc24ndCBy
ZXR1cm4gYW55dGhpbmcsIHNvIHJvbGVzIGRlZmluZWQgYmVsb3cgY2FuIGJlIGNob3Nlbi4KKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBpZiAo
bV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IE1hdGhFbGVtZW50Um9sZSkgeworICAgICAgICBpZiAo
bV9vYmplY3QtPmlzTWF0aEZyYWN0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhG
cmFjdGlvbiI7CisgICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoRmVuY2VkKCkpCisgICAgICAg
ICAgICByZXR1cm4gQCJBWE1hdGhGZW5jZWQiOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0
aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkpCisgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhTdWJz
Y3JpcHRTdXBlcnNjcmlwdCI7CisgICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoUm93KCkpCisg
ICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhSb3ciOworICAgICAgICBpZiAobV9vYmplY3QtPmlz
TWF0aFVuZGVyT3ZlcigpKQorICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoVW5kZXJPdmVyIjsK
KyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhTcXVhcmVSb290KCkpCisgICAgICAgICAgICBy
ZXR1cm4gQCJBWE1hdGhTcXVhcmVSb290IjsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhS
b290KCkpCisgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhSb290IjsKKyAgICAgICAgaWYgKG1f
b2JqZWN0LT5pc01hdGhUZXh0KCkpCisgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhUZXh0IjsK
KyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhOdW1iZXIoKSkKKyAgICAgICAgICAgIHJldHVy
biBAIkFYTWF0aE51bWJlciI7CisgICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoSWRlbnRpZmll
cigpKQorICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoSWRlbnRpZmllciI7CisgICAgICAgIGlm
IChtX29iamVjdC0+aXNNYXRoVGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFRh
YmxlIjsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhUYWJsZVJvdygpKQorICAgICAgICAg
ICAgcmV0dXJuIEAiQVhNYXRoVGFibGVSb3ciOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0
aFRhYmxlQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoVGFibGVDZWxsIjsKKyAg
ICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhGZW5jZU9wZXJhdG9yKCkpCisgICAgICAgICAgICBy
ZXR1cm4gQCJBWE1hdGhGZW5jZU9wZXJhdG9yIjsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01h
dGhTZXBhcmF0b3JPcGVyYXRvcigpKQorICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoU2VwYXJh
dG9yT3BlcmF0b3IiOworICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aE9wZXJhdG9yKCkpCisg
ICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhPcGVyYXRvciI7CisgICAgfQorICAgIAorICAgIGlm
IChtX29iamVjdC0+aXNNZWRpYVRpbWVsaW5lKCkpCisgICAgICAgIHJldHVybiBOU0FjY2Vzc2li
aWxpdHlUaW1lbGluZVN1YnJvbGU7CisgICAgCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoTlNT
dHJpbmcqKXJvbGVEZXNjcmlwdGlvbgoreworICAgIGlmICghbV9vYmplY3QpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgCisgICAgLy8gYXR0YWNobWVudHMgaGF2ZSB0aGUgQVhJbWFnZSByb2xl
LCBidXQgYSBkaWZmZXJlbnQgc3Vicm9sZQorICAgIGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50
KCkpCisgICAgICAgIHJldHVybiBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb25BdHRyaWJ1dGVdOwor
ICAgIAorICAgIE5TU3RyaW5nKiBheFJvbGUgPSBbc2VsZiByb2xlXTsKKyAgICAKKyAgICBpZiAo
W2F4Um9sZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlXSkgeworICAg
ICAgICBzd2l0Y2ggKG1fb2JqZWN0LT5yb2xlVmFsdWUoKSkgeworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9u
KE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSwgW3NlbGYgc3Vicm9sZV0pOworICAgICAgICAgICAg
Y2FzZSBMYW5kbWFya0FwcGxpY2F0aW9uUm9sZToKKyAgICAgICAgICAgICAgICByZXR1cm4gQVhB
UklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFMYW5kbWFya0FwcGxpY2F0aW9uIik7CisgICAgICAg
ICAgICBjYXNlIExhbmRtYXJrQmFubmVyUm9sZToKKyAgICAgICAgICAgICAgICByZXR1cm4gQVhB
UklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFMYW5kbWFya0Jhbm5lciIpOworICAgICAgICAgICAg
Y2FzZSBMYW5kbWFya0NvbXBsZW1lbnRhcnlSb2xlOgorICAgICAgICAgICAgICAgIHJldHVybiBB
WEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUxhbmRtYXJrQ29tcGxlbWVudGFyeSIpOworICAg
ICAgICAgICAgY2FzZSBMYW5kbWFya0NvbnRlbnRJbmZvUm9sZToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFMYW5kbWFya0NvbnRlbnRJbmZvIik7
CisgICAgICAgICAgICBjYXNlIExhbmRtYXJrTWFpblJvbGU6CisgICAgICAgICAgICAgICAgcmV0
dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBTGFuZG1hcmtNYWluIik7CisgICAgICAg
ICAgICBjYXNlIExhbmRtYXJrTmF2aWdhdGlvblJvbGU6CisgICAgICAgICAgICAgICAgcmV0dXJu
IEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBTGFuZG1hcmtOYXZpZ2F0aW9uIik7CisgICAg
ICAgICAgICBjYXNlIExhbmRtYXJrU2VhcmNoUm9sZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
QVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFMYW5kbWFya1NlYXJjaCIpOworICAgICAgICAg
ICAgY2FzZSBBcHBsaWNhdGlvbkFsZXJ0Um9sZToKKyAgICAgICAgICAgICAgICByZXR1cm4gQVhB
UklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFBcHBsaWNhdGlvbkFsZXJ0Iik7CisgICAgICAgICAg
ICBjYXNlIEFwcGxpY2F0aW9uQWxlcnREaWFsb2dSb2xlOgorICAgICAgICAgICAgICAgIHJldHVy
biBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUFwcGxpY2F0aW9uQWxlcnREaWFsb2ciKTsK
KyAgICAgICAgICAgIGNhc2UgQXBwbGljYXRpb25EaWFsb2dSb2xlOgorICAgICAgICAgICAgICAg
IHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUFwcGxpY2F0aW9uRGlhbG9nIik7
CisgICAgICAgICAgICBjYXNlIEFwcGxpY2F0aW9uTG9nUm9sZToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFBcHBsaWNhdGlvbkxvZyIpOworICAg
ICAgICAgICAgY2FzZSBBcHBsaWNhdGlvbk1hcnF1ZWVSb2xlOgorICAgICAgICAgICAgICAgIHJl
dHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQUFwcGxpY2F0aW9uTWFycXVlZSIpOwor
ICAgICAgICAgICAgY2FzZSBBcHBsaWNhdGlvblN0YXR1c1JvbGU6CisgICAgICAgICAgICAgICAg
cmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBQXBwbGljYXRpb25TdGF0dXMiKTsK
KyAgICAgICAgICAgIGNhc2UgQXBwbGljYXRpb25UaW1lclJvbGU6CisgICAgICAgICAgICAgICAg
cmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBQXBwbGljYXRpb25UaW1lciIpOwor
ICAgICAgICAgICAgY2FzZSBEb2N1bWVudFJvbGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEFY
QVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBRG9jdW1lbnQiKTsKKyAgICAgICAgICAgIGNhc2Ug
RG9jdW1lbnRBcnRpY2xlUm9sZToKKyAgICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVu
dEdyb3VwVGV4dChAIkFSSUFEb2N1bWVudEFydGljbGUiKTsKKyAgICAgICAgICAgIGNhc2UgRG9j
dW1lbnRNYXRoUm9sZToKKyAgICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3Vw
VGV4dChAIkFSSUFEb2N1bWVudE1hdGgiKTsKKyAgICAgICAgICAgIGNhc2UgRG9jdW1lbnROb3Rl
Um9sZToKKyAgICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFS
SUFEb2N1bWVudE5vdGUiKTsKKyAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRSZWdpb25Sb2xlOgor
ICAgICAgICAgICAgICAgIHJldHVybiBBWEFSSUFDb250ZW50R3JvdXBUZXh0KEAiQVJJQURvY3Vt
ZW50UmVnaW9uIik7CisgICAgICAgICAgICBjYXNlIFVzZXJJbnRlcmZhY2VUb29sdGlwUm9sZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gQVhBUklBQ29udGVudEdyb3VwVGV4dChAIkFSSUFVc2Vy
SW50ZXJmYWNlVG9vbHRpcCIpOworICAgICAgICAgICAgY2FzZSBUYWJQYW5lbFJvbGU6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEFYQVJJQUNvbnRlbnRHcm91cFRleHQoQCJBUklBVGFiUGFuZWwi
KTsKKyAgICAgICAgICAgIGNhc2UgRGVmaW5pdGlvblJvbGU6CisgICAgICAgICAgICAgICAgcmV0
dXJuIEFYRGVmaW5pdGlvblRleHQoKTsKKyAgICAgICAgICAgIGNhc2UgRGVzY3JpcHRpb25MaXN0
VGVybVJvbGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEFYRGVzY3JpcHRpb25MaXN0VGVybVRl
eHQoKTsKKyAgICAgICAgICAgIGNhc2UgRGVzY3JpcHRpb25MaXN0RGV0YWlsUm9sZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gQVhEZXNjcmlwdGlvbkxpc3REZXRhaWxUZXh0KCk7CisgICAgICAg
ICAgICBjYXNlIEZvb3RlclJvbGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEFYRm9vdGVyUm9s
ZURlc2NyaXB0aW9uVGV4dCgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChbYXhS
b2xlIGlzRXF1YWxUb1N0cmluZzpAIkFYV2ViQXJlYSJdKQorICAgICAgICByZXR1cm4gQVhXZWJB
cmVhVGV4dCgpOworICAgIAorICAgIGlmIChbYXhSb2xlIGlzRXF1YWxUb1N0cmluZzpAIkFYTGlu
ayJdKQorICAgICAgICByZXR1cm4gQVhMaW5rVGV4dCgpOworICAgIAorICAgIGlmIChbYXhSb2xl
IGlzRXF1YWxUb1N0cmluZzpAIkFYTGlzdE1hcmtlciJdKQorICAgICAgICByZXR1cm4gQVhMaXN0
TWFya2VyVGV4dCgpOworICAgIAorICAgIGlmIChbYXhSb2xlIGlzRXF1YWxUb1N0cmluZzpAIkFY
SW1hZ2VNYXAiXSkKKyAgICAgICAgcmV0dXJuIEFYSW1hZ2VNYXBUZXh0KCk7CisgICAgCisgICAg
aWYgKFtheFJvbGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhIZWFkaW5nIl0pCisgICAgICAgIHJldHVy
biBBWEhlYWRpbmdUZXh0KCk7CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc0ZpbGVVcGxvYWRC
dXR0b24oKSkKKyAgICAgICAgcmV0dXJuIEFYRmlsZVVwbG9hZEJ1dHRvblRleHQoKTsKKyAgICAK
KyAgICAvLyBBcHBLaXQgYWxzbyByZXR1cm5zIEFYVGFiIGZvciB0aGUgcm9sZSBkZXNjcmlwdGlv
biBmb3IgYSB0YWIgaXRlbS4KKyAgICBpZiAobV9vYmplY3QtPmlzVGFiSXRlbSgpKQorICAgICAg
ICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uKEAiQVhUYWIiLCBuaWwpOwor
ICAgIAorICAgIC8vIFdlIHNob3VsZCB0cnkgdGhlIHN5c3RlbSBkZWZhdWx0IHJvbGUgZGVzY3Jp
cHRpb24gZm9yIGFsbCBvdGhlciByb2xlcy4KKyAgICAvLyBJZiB3ZSBnZXQgdGhlIHNhbWUgc3Ry
aW5nIGJhY2ssIHRoZW4gYXMgYSBsYXN0IHJlc29ydCwgcmV0dXJuIHVua25vd24uCisgICAgTlNT
dHJpbmcqIGRlZmF1bHRSb2xlRGVzY3JpcHRpb24gPSBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3Jp
cHRpb24oYXhSb2xlLCBbc2VsZiBzdWJyb2xlXSk7CisgICAgCisgICAgLy8gT24gZWFybGllciBN
YWMgdmVyc2lvbnMgKExpb24pLCB1c2luZyBhIG5vbi1zdGFuZGFyZCBzdWJyb2xlIHdvdWxkIHJl
c3VsdCBpbiBhIHJvbGUgZGVzY3JpcHRpb24KKyAgICAvLyBiZWluZyByZXR1cm5lZCB0aGF0IGxv
b2tlZCBsaWtlIEFYUm9sZTpBWFN1YnJvbGUuIFRvIG1ha2UgYWxsIHBsYXRmb3JtcyBoYXZlIHRo
ZSBzYW1lIHJvbGUgZGVzY3JpcHRpb25zCisgICAgLy8gd2Ugc2hvdWxkIGZhbGxiYWNrIG9uIGEg
cm9sZSBkZXNjcmlwdGlvbiBpZ25vcmluZyB0aGUgc3Vicm9sZSBpbiB0aGVzZSBjYXNlcy4KKyAg
ICBpZiAoW2RlZmF1bHRSb2xlRGVzY3JpcHRpb24gaXNFcXVhbFRvU3RyaW5nOltOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiJUA6JUAiLCBheFJvbGUsIFtzZWxmIHN1YnJvbGVdXV0pCisgICAg
ICAgIGRlZmF1bHRSb2xlRGVzY3JpcHRpb24gPSBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRp
b24oYXhSb2xlLCBuaWwpOworICAgIAorICAgIGlmICghW2RlZmF1bHRSb2xlRGVzY3JpcHRpb24g
aXNFcXVhbFRvU3RyaW5nOmF4Um9sZV0pCisgICAgICAgIHJldHVybiBkZWZhdWx0Um9sZURlc2Ny
aXB0aW9uOworICAgIAorICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb24o
TlNBY2Nlc3NpYmlsaXR5VW5rbm93blJvbGUsIG5pbCk7Cit9CisKKy0gKGlkKXNjcm9sbFZpZXdQ
YXJlbnQKK3sKKyAgICBpZiAoIW1fb2JqZWN0IHx8ICFtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5
U2Nyb2xsVmlldygpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIC8vIElmIHRoaXMg
c2Nyb2xsIHZpZXcgcHJvdmlkZXMgaXQncyBwYXJlbnQgb2JqZWN0IChiZWNhdXNlIGl0J3MgYSBz
dWItZnJhbWUpLCB0aGVuCisgICAgLy8gd2Ugc2hvdWxkIG5vdCBmaW5kIHRoZSByZW1vdGVBY2Nl
c3NpYmlsaXR5UGFyZW50LgorICAgIGlmIChtX29iamVjdC0+cGFyZW50T2JqZWN0KCkpCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgCisgICAgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcqIHNjcm9s
bFZpZXcgPSB0b0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KG1fb2JqZWN0KTsKKyAgICBTY3JvbGxW
aWV3KiBzY3JvbGwgPSBzY3JvbGxWaWV3LT5zY3JvbGxWaWV3KCk7CisgICAgaWYgKCFzY3JvbGwp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgaWYgKHNjcm9sbC0+cGxhdGZvcm1XaWRn
ZXQoKSkKKyAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKHNj
cm9sbC0+cGxhdGZvcm1XaWRnZXQoKSk7CisgICAgCisgICAgcmV0dXJuIFtzZWxmIHJlbW90ZUFj
Y2Vzc2liaWxpdHlQYXJlbnRPYmplY3RdOworfQorCisvLyBGSVhNRTogRGlmZmVyZW50IGtpbmRz
IG9mIGVsZW1lbnRzIGFyZSBwdXR0aW5nIHRoZSB0aXRsZSB0YWcgdG8gdXNlIGluIGRpZmZlcmVu
dAorLy8gQVggZmllbGRzLiBUaGlzIHNob3VsZCBiZSByZWN0aWZpZWQsIGJ1dCBpbiB0aGUgaW5p
dGlhbCBwYXRjaCBJIHdhbnQgdG8gYWNoaWV2ZQorLy8gcGFyaXR5IHdpdGggZXhpc3RpbmcgYmVo
YXZpb3IuCistIChCT09MKXRpdGxlVGFnU2hvdWxkQmVVc2VkSW5EZXNjcmlwdGlvbkZpZWxkCit7
CisgICAgcmV0dXJuIChtX29iamVjdC0+aXNMaW5rKCkgJiYgIW1fb2JqZWN0LT5pc0ltYWdlTWFw
TGluaygpKSB8fCBtX29iamVjdC0+aXNJbWFnZSgpOworfQorCisvLyBUaGlzIHNob3VsZCBiZSB0
aGUgInZpc2libGUiIHRleHQgdGhhdCdzIGFjdHVhbGx5IG9uIHRoZSBzY3JlZW4gaWYgcG9zc2li
bGUuCisvLyBJZiB0aGVyZSdzIGFsdGVybmF0aXZlIHRleHQsIHRoYXQgY2FuIG92ZXJyaWRlIHRo
ZSB0aXRsZS4KKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eVRpdGxlCit7CisgICAgLy8gU3Rh
dGljIHRleHQgb2JqZWN0cyBzaG91bGQgbm90IGhhdmUgYSB0aXRsZS4gSXRzIGNvbnRlbnQgaXMg
Y29tbXVuaWNhdGVkIGluIGl0cyBBWFZhbHVlLgorICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVl
KCkgPT0gU3RhdGljVGV4dFJvbGUpCisgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nXTsK
KyAgICAKKyAgICAvLyBBIGZpbGUgdXBsb2FkIGJ1dHRvbiBwcmVzZW50cyBhIGNoYWxsZW5nZSBi
ZWNhdXNlIGl0IGhhcyBidXR0b24gdGV4dCBhbmQgYSB2YWx1ZSwgYnV0IHRoZQorICAgIC8vIEFQ
SSBkb2Vzbid0IHN1cHBvcnQgdGhpcyBwYXJhZGlnbS4KKyAgICAvLyBUaGUgY29tcHJvbWlzZSBp
cyB0byByZXR1cm4gdGhlIGJ1dHRvbiB0eXBlIGluIHRoZSByb2xlIGRlc2NyaXB0aW9uIGFuZCB0
aGUgdmFsdWUgb2YgdGhlIGZpbGUgcGF0aCBpbiB0aGUgdGl0bGUKKyAgICBpZiAobV9vYmplY3Qt
PmlzRmlsZVVwbG9hZEJ1dHRvbigpKQorICAgICAgICByZXR1cm4gbV9vYmplY3QtPnN0cmluZ1Zh
bHVlKCk7CisgICAgCisgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiB0ZXh0T3JkZXI7Cisg
ICAgbV9vYmplY3QtPmFjY2Vzc2liaWxpdHlUZXh0KHRleHRPcmRlcik7CisgICAgCisgICAgdW5z
aWduZWQgbGVuZ3RoID0gdGV4dE9yZGVyLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGsgPSAw
OyBrIDwgbGVuZ3RoOyBrKyspIHsKKyAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eVRleHQmIHRl
eHQgPSB0ZXh0T3JkZXJba107CisgICAgICAgIAorICAgICAgICAvLyBJZiB3ZSBoYXZlIGFsdGVy
bmF0aXZlIHRleHQsIHRoZW4gd2Ugc2hvdWxkIG5vdCBleHBvc2UgYSB0aXRsZS4KKyAgICAgICAg
aWYgKHRleHQudGV4dFNvdXJjZSA9PSBBbHRlcm5hdGl2ZVRleHQpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgICAgIC8vIE9uY2Ugd2UgZW5jb3VudGVyIHZpc2libGUgdGV4dCwg
b3IgdGhlIHRleHQgZnJvbSBvdXIgY2hpbGRyZW4gdGhhdCBzaG91bGQgYmUgdXNlZCBmb3JlbW9z
dC4KKyAgICAgICAgaWYgKHRleHQudGV4dFNvdXJjZSA9PSBWaXNpYmxlVGV4dCB8fCB0ZXh0LnRl
eHRTb3VyY2UgPT0gQ2hpbGRyZW5UZXh0KQorICAgICAgICAgICAgcmV0dXJuIHRleHQudGV4dDsK
KyAgICAgICAgCisgICAgICAgIC8vIElmIHRoZXJlJ3MgYW4gZWxlbWVudCB0aGF0IGxhYmVscyB0
aGlzIG9iamVjdCBhbmQgaXQncyBub3QgZXhwb3NlZCwgdGhlbiB3ZSBzaG91bGQgdXNlCisgICAg
ICAgIC8vIHRoYXQgdGV4dCBhcyBvdXIgdGl0bGUuCisgICAgICAgIGlmICh0ZXh0LnRleHRTb3Vy
Y2UgPT0gTGFiZWxCeUVsZW1lbnRUZXh0ICYmICFtX29iamVjdC0+ZXhwb3Nlc1RpdGxlVUlFbGVt
ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gdGV4dC50ZXh0OworICAgICAgICAKKyAgICAgICAg
Ly8gRklYTUU6IFRoZSB0aXRsZSB0YWcgaXMgdXNlZCBpbiBjZXJ0YWluIGNhc2VzIGZvciB0aGUg
dGl0bGUuIFRoaXMgdXNhZ2Ugc2hvdWxkCisgICAgICAgIC8vIHByb2JhYmx5IGJlIGluIHRoZSBk
ZXNjcmlwdGlvbiBmaWVsZCBzaW5jZSBpdCdzIG5vdCAidmlzaWJsZSIuCisgICAgICAgIGlmICh0
ZXh0LnRleHRTb3VyY2UgPT0gVGl0bGVUYWdUZXh0ICYmICFbc2VsZiB0aXRsZVRhZ1Nob3VsZEJl
VXNlZEluRGVzY3JpcHRpb25GaWVsZF0pCisgICAgICAgICAgICByZXR1cm4gdGV4dC50ZXh0Owor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ107Cit9CisKKy0gKE5TU3Ry
aW5nICopYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uCit7CisgICAgLy8gU3RhdGljIHRleHQgb2Jq
ZWN0cyBzaG91bGQgbm90IGhhdmUgYSBkZXNjcmlwdGlvbi4gSXRzIGNvbnRlbnQgaXMgY29tbXVu
aWNhdGVkIGluIGl0cyBBWFZhbHVlLgorICAgIC8vIE9uZSBleGNlcHRpb24gaXMgdGhlIG1lZGlh
IGNvbnRyb2wgbGFiZWxzIHRoYXQgaGF2ZSBhIHZhbHVlIGFuZCBhIGRlc2NyaXB0aW9uLiBUaG9z
ZSBhcmUgc2V0IHByb2dyYW1hdGljYWxseS4KKyAgICBpZiAobV9vYmplY3QtPnJvbGVWYWx1ZSgp
ID09IFN0YXRpY1RleHRSb2xlICYmICFtX29iamVjdC0+aXNNZWRpYUNvbnRyb2xMYWJlbCgpKQor
ICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ107CisgICAgCisgICAgVmVjdG9yPEFjY2Vz
c2liaWxpdHlUZXh0PiB0ZXh0T3JkZXI7CisgICAgbV9vYmplY3QtPmFjY2Vzc2liaWxpdHlUZXh0
KHRleHRPcmRlcik7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dE9yZGVyLnNpemUo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoOyBrKyspIHsKKyAgICAgICAg
Y29uc3QgQWNjZXNzaWJpbGl0eVRleHQmIHRleHQgPSB0ZXh0T3JkZXJba107CisgICAgICAgIAor
ICAgICAgICBpZiAodGV4dC50ZXh0U291cmNlID09IEFsdGVybmF0aXZlVGV4dCkKKyAgICAgICAg
ICAgIHJldHVybiB0ZXh0LnRleHQ7CisgICAgICAgIAorICAgICAgICBpZiAodGV4dC50ZXh0U291
cmNlID09IFRpdGxlVGFnVGV4dCAmJiBbc2VsZiB0aXRsZVRhZ1Nob3VsZEJlVXNlZEluRGVzY3Jp
cHRpb25GaWVsZF0pCisgICAgICAgICAgICByZXR1cm4gdGV4dC50ZXh0OworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ107Cit9CisKKy0gKE5TU3RyaW5nICopYWNjZXNz
aWJpbGl0eUhlbHBUZXh0Cit7CisgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiB0ZXh0T3Jk
ZXI7CisgICAgbV9vYmplY3QtPmFjY2Vzc2liaWxpdHlUZXh0KHRleHRPcmRlcik7CisgICAgCisg
ICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dE9yZGVyLnNpemUoKTsKKyAgICBib29sIGRlc2NyaXB0
aXZlVGV4dEF2YWlsYWJsZSA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBs
ZW5ndGg7IGsrKykgeworICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5VGV4dCYgdGV4dCA9IHRl
eHRPcmRlcltrXTsKKyAgICAgICAgCisgICAgICAgIGlmICh0ZXh0LnRleHRTb3VyY2UgPT0gSGVs
cFRleHQgfHwgdGV4dC50ZXh0U291cmNlID09IFN1bW1hcnlUZXh0KQorICAgICAgICAgICAgcmV0
dXJuIHRleHQudGV4dDsKKyAgICAgICAgCisgICAgICAgIC8vIElmIGFuIGVsZW1lbnQgZG9lcyBO
T1QgaGF2ZSBvdGhlciBkZXNjcmlwdGl2ZSB0ZXh0IHRoZSB0aXRsZSB0YWcgc2hvdWxkIGJlIHVz
ZWQgYXMgaXRzIGRlc2NyaXB0aXZlIHRleHQuCisgICAgICAgIC8vIEJ1dCwgaWYgdGhvc2UgQVJF
IGF2YWlsYWJsZSwgdGhlbiB0aGUgdGl0bGUgdGFnIHNob3VsZCBiZSB1c2VkIGZvciBoZWxwIHRl
eHQgaW5zdGVhZC4KKyAgICAgICAgc3dpdGNoICh0ZXh0LnRleHRTb3VyY2UpIHsKKyAgICAgICAg
ICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0OgorICAgICAgICAgICAgY2FzZSBWaXNpYmxlVGV4dDoK
KyAgICAgICAgICAgIGNhc2UgQ2hpbGRyZW5UZXh0OgorICAgICAgICAgICAgY2FzZSBMYWJlbEJ5
RWxlbWVudFRleHQ6CisgICAgICAgICAgICAgICAgZGVzY3JpcHRpdmVUZXh0QXZhaWxhYmxlID0g
dHJ1ZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh0ZXh0LnRleHRTb3VyY2UgPT0gVGl0bGVUYWdU
ZXh0ICYmIGRlc2NyaXB0aXZlVGV4dEF2YWlsYWJsZSkKKyAgICAgICAgICAgIHJldHVybiB0ZXh0
LnRleHQ7CisgICAgfQorICAgIAorICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nXTsKK30KKwor
Ly8gRklYTUU6IHNwbGl0IHVwIHRoaXMgZnVuY3Rpb24gaW4gYSBiZXR0ZXIgd2F5LgorLy8gc3Vn
Z2VzdGlvbnM6IFVzZSBhIGhhc2ggdGFibGUgdGhhdCBtYXBzIGF0dHJpYnV0ZSBuYW1lcyB0byBm
dW5jdGlvbiBjYWxscywKKy8vIG9yIG1heWJlIHBvaW50ZXJzIHRvIG1lbWJlciBmdW5jdGlvbnMK
Ky0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5h
bWUKK3sKKyAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzogTlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbc2VsZiBy
b2xlXTsKKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0Fj
Y2Vzc2liaWxpdHlTdWJyb2xlQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtzZWxmIHN1YnJv
bGVdOworICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNj
ZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbc2Vs
ZiByb2xlRGVzY3JpcHRpb25dOworICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZV0pIHsKKyAgICAgICAgCisg
ICAgICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gdGhlIHBhcmVudCBvZiB0aGUgQVhXZWJBcmVhLCBp
ZiB0aGlzIGlzIGEgd2ViIGFyZWEuCisgICAgICAgIGlkIHNjcm9sbFZpZXdQYXJlbnQgPSBbc2Vs
ZiBzY3JvbGxWaWV3UGFyZW50XTsKKyAgICAgICAgaWYgKHNjcm9sbFZpZXdQYXJlbnQpCisgICAg
ICAgICAgICByZXR1cm4gc2Nyb2xsVmlld1BhcmVudDsKKyAgICAgICAgCisgICAgICAgIC8vIFRy
ZWUgaXRlbSAoY2hhbmdlZCB0byBBWFJvd3MpIGNhbiBvbmx5IHJlcG9ydCB0aGUgdHJlZSAoQVhP
dXRsaW5lKSBhcyBpdHMgcGFyZW50LgorICAgICAgICBpZiAobV9vYmplY3QtPmlzVHJlZUl0ZW0o
KSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9vYmplY3Qt
PnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAgICAgICAgICAgd2hpbGUgKHBhcmVudCkgewor
ICAgICAgICAgICAgICAgIGlmIChwYXJlbnQtPmlzVHJlZSgpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CisgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFy
ZW50LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9vYmplY3Qt
PnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAgICAgICBpZiAoIXBhcmVudCkKKyAgICAgICAg
ICAgIHJldHVybiBuaWw7CisgICAgICAgIAorICAgICAgICAvLyBJbiBXZWJLaXQxLCB0aGUgc2Ny
b2xsIHZpZXcgaXMgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbSAodGhlIGF0dGFjaG1lbnQgdmlldyks
IHNvIHRoZSBwYXJlbnQKKyAgICAgICAgLy8gc2hvdWxkIGJlIHJlcG9ydGVkIGRpcmVjdGx5IGFz
IHN1Y2guCisgICAgICAgIGlmIChtX29iamVjdC0+aXNXZWJBcmVhKCkgJiYgcGFyZW50LT5pc0F0
dGFjaG1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBbcGFyZW50LT53cmFwcGVyKCkgYXR0YWNo
bWVudFZpZXddOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0Fj
Y2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV0pIHsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5j
aGlsZHJlbigpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgTlNBcnJheSogY2hpbGRyZW4gPSBb
c2VsZiByZW5kZXJXaWRnZXRDaGlsZHJlbl07CisgICAgICAgICAgICBpZiAoY2hpbGRyZW4gIT0g
bmlsKQorICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gVGhlIHRyZWUncyAoQVhPdXRsaW5lKSBjaGlsZHJlbiBhcmUgc3VwcG9z
ZWQgdG8gYmUgaXRzIHJvd3MgYW5kIGNvbHVtbnMuCisgICAgICAgIC8vIFRoZSBBUklBIHNwZWMg
ZG9lc24ndCBoYXZlIGNvbHVtbnMsIHNvIHdlIGp1c3QgbmVlZCByb3dzLgorICAgICAgICBpZiAo
bV9vYmplY3QtPmlzVHJlZSgpKQorICAgICAgICAgICAgcmV0dXJuIFtzZWxmIGFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlSb3dzQXR0cmlidXRlXTsKKyAgICAgICAg
CisgICAgICAgIC8vIEEgdHJlZSBpdGVtIHNob3VsZCBvbmx5IGV4cG9zZSBpdHMgY29udGVudCBh
cyBpdHMgY2hpbGRyZW4gKG5vdCBpdHMgcm93cykKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1Ry
ZWVJdGVtKCkpIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciBjb250ZW50Q29weTsKKyAgICAgICAgICAgIG1fb2JqZWN0LT5hcmlh
VHJlZUl0ZW1Db250ZW50KGNvbnRlbnRDb3B5KTsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0
VG9OU0FycmF5KGNvbnRlbnRDb3B5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIGNvbnZlcnRUb05TQXJyYXkobV9vYmplY3QtPmNoaWxkcmVuKCkpOworICAgIH0KKyAgICAK
KyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlT
ZWxlY3RlZENoaWxkcmVuQXR0cmlidXRlXSkgeworICAgICAgICBpZiAobV9vYmplY3QtPmlzTGlz
dEJveCgpKSB7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRDaGlsZHJlbkNvcHk7CisgICAgICAgICAgICBtX29iamVj
dC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuQ29weSk7CisgICAgICAgICAgICBy
ZXR1cm4gY29udmVydFRvTlNBcnJheShzZWxlY3RlZENoaWxkcmVuQ29weSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoaWxkcmVuQXR0cmlidXRl
XSkgeworICAgICAgICBpZiAobV9vYmplY3QtPmlzTGlzdEJveCgpKSB7CisgICAgICAgICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdmlzaWJsZUNo
aWxkcmVuQ29weTsKKyAgICAgICAgICAgIG1fb2JqZWN0LT52aXNpYmxlQ2hpbGRyZW4odmlzaWJs
ZUNoaWxkcmVuQ29weSk7CisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheSh2aXNp
YmxlQ2hpbGRyZW5Db3B5KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtX29iamVjdC0+
aXNMaXN0KCkpCisgICAgICAgICAgICByZXR1cm4gW3NlbGYgYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXTsKKyAgICAgICAgCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIAorICAgIAorICAgIGlmIChtX29iamVjdC0+aXNX
ZWJBcmVhKCkpIHsKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpA
IkFYTGlua1VJRWxlbWVudHMiXSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGxpbmtzOworICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCo+KG1fb2JqZWN0KS0+Z2V0RG9jdW1lbnRMaW5r
cyhsaW5rcyk7CisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShsaW5rcyk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFY
TG9hZGVkIl0pCisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1f
b2JqZWN0LT5pc0xvYWRlZCgpXTsKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpAIkFYTGF5b3V0Q291bnQiXSkKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIg
bnVtYmVyV2l0aEludDptX29iamVjdC0+bGF5b3V0Q291bnQoKV07CisgICAgICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TG9hZGluZ1Byb2dyZXNz
QXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJs
ZTptX29iamVjdC0+ZXN0aW1hdGVkTG9hZGluZ1Byb2dyZXNzKCldOworICAgIH0KKyAgICAKKyAg
ICBpZiAobV9vYmplY3QtPmlzVGV4dENvbnRyb2woKSkgeworICAgICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlOdW1iZXJPZkNoYXJhY3RlcnNB
dHRyaWJ1dGVdKSB7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gbV9vYmplY3QtPnRleHRMZW5n
dGgoKTsKKyAgICAgICAgICAgIGlmIChsZW5ndGggPCAwKQorICAgICAgICAgICAgICAgIHJldHVy
biBuaWw7CisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZElu
dDpsZW5ndGhdOworICAgICAgICB9CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dEF0dHJpYnV0ZV0pIHsKKyAgICAg
ICAgICAgIFN0cmluZyBzZWxlY3RlZFRleHQgPSBtX29iamVjdC0+c2VsZWN0ZWRUZXh0KCk7Cisg
ICAgICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0LmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBuaWw7CisgICAgICAgICAgICByZXR1cm4gKE5TU3RyaW5nKilzZWxlY3RlZFRleHQ7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNB
Y2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0UmFuZ2VBdHRyaWJ1dGVdKSB7CisgICAgICAgICAgICBQ
bGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+c2VsZWN0ZWRUZXh0UmFuZ2UoKTsK
KyAgICAgICAgICAgIGlmICh0ZXh0UmFuZ2UuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApXTsKKyAgICAgICAg
ICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpOU01ha2VSYW5nZSh0ZXh0UmFuZ2Uu
c3RhcnQsIHRleHRSYW5nZS5sZW5ndGgpXTsKKyAgICAgICAgfQorICAgICAgICAvLyBUT0RPOiBH
ZXQgYWN0dWFsIHZpc2libGUgcmFuZ2UuIDxyZGFyOi8vcHJvYmxlbS80NzEyMTAxPgorICAgICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlWaXNp
YmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGVdKQorICAgICAgICAgICAgcmV0dXJuIG1fb2JqZWN0
LT5pc1Bhc3N3b3JkRmllbGQoKSA/IG5pbCA6IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOiBOU01h
a2VSYW5nZSgwLCBtX29iamVjdC0+dGV4dExlbmd0aCgpKV07CisgICAgICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUluc2VydGlvblBvaW50TGlu
ZU51bWJlckF0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIC8vIGlmIHNlbGVjdGlvbkVuZCA+IDAs
IHRoZW4gdGhlcmUgaXMgc2VsZWN0ZWQgdGV4dCBhbmQgdGhpcyBxdWVzdGlvbiBzaG91bGQgbm90
IGJlIGFuc3dlcmVkCisgICAgICAgICAgICBpZiAobV9vYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgp
IHx8IG1fb2JqZWN0LT5zZWxlY3Rpb25FbmQoKSA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZm9j
dXNlZE9iamVjdCA9IG1fb2JqZWN0LT5mb2N1c2VkVUlFbGVtZW50KCk7CisgICAgICAgICAgICBp
ZiAoZm9jdXNlZE9iamVjdCAhPSBtX29iamVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmls
OworICAgICAgICAgICAgCisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gZm9jdXNlZFBvc2l0
aW9uID0gZm9jdXNlZE9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoZm9jdXNlZE9iamVj
dC0+c2VsZWN0aW9uU3RhcnQoKSwgdHJ1ZSk7CisgICAgICAgICAgICBpbnQgbGluZU51bWJlciA9
IG1fb2JqZWN0LT5saW5lRm9yUG9zaXRpb24oZm9jdXNlZFBvc2l0aW9uKTsKKyAgICAgICAgICAg
IGlmIChsaW5lTnVtYmVyIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAg
ICAgICAgCisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bGluZU51
bWJlcl07CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VVJMQXR0cmlidXRlXSkgeworICAgICAgICBL
VVJMIHVybCA9IG1fb2JqZWN0LT51cmwoKTsKKyAgICAgICAgaWYgKHVybC5pc051bGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiAoTlNVUkwqKXVybDsKKyAgICB9
CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc1NwaW5CdXR0b24oKSkgeworICAgICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUluY3JlbWVudEJ1
dHRvbkF0dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4gdG9BY2Nlc3NpYmlsaXR5U3BpbkJ1
dHRvbihtX29iamVjdCktPmluY3JlbWVudEJ1dHRvbigpLT53cmFwcGVyKCk7CisgICAgICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGVjcmVtZW50
QnV0dG9uQXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVybiB0b0FjY2Vzc2liaWxpdHlTcGlu
QnV0dG9uKG1fb2JqZWN0KS0+ZGVjcmVtZW50QnV0dG9uKCktPndyYXBwZXIoKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogQCJBWFZpc2l0ZWQi
XSkKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDogbV9vYmplY3QtPmlz
VmlzaXRlZCgpXTsKKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
OiBOU0FjY2Vzc2liaWxpdHlUaXRsZUF0dHJpYnV0ZV0pIHsKKyAgICAgICAgaWYgKG1fb2JqZWN0
LT5pc0F0dGFjaG1lbnQoKSkgeworICAgICAgICAgICAgaWYgKFtbW3NlbGYgYXR0YWNobWVudFZp
ZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc10gY29udGFpbnNPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5VGl0bGVBdHRyaWJ1dGVdKQorICAgICAgICAgICAgICAgIHJldHVybiBbW3NlbGYgYXR0
YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlU
aXRsZUF0dHJpYnV0ZV07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBbc2Vs
ZiBhY2Nlc3NpYmlsaXR5VGl0bGVdOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV0p
IHsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkgeworICAgICAgICAgICAg
aWYgKFtbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc10g
Y29udGFpbnNPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdKQorICAg
ICAgICAgICAgICAgIHJldHVybiBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV07CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIFtzZWxmIGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbl07Cisg
ICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNj
ZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXSkgeworICAgICAgICBpZiAobV9vYmplY3QtPmlzQXR0
YWNobWVudCgpKSB7CisgICAgICAgICAgICBpZiAoW1tbc2VsZiBhdHRhY2htZW50Vmlld10gYWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSBjb250YWluc09iamVjdDpOU0FjY2Vzc2liaWxpdHlW
YWx1ZUF0dHJpYnV0ZV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50
Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0
cmlidXRlXTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzUmFuZ2VW
YWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6bV9v
YmplY3QtPnZhbHVlRm9yUmFuZ2UoKV07CisgICAgICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVl
KCkgPT0gU2xpZGVyVGh1bWJSb2xlKQorICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1i
ZXJXaXRoRmxvYXQ6bV9vYmplY3QtPnBhcmVudE9iamVjdCgpLT52YWx1ZUZvclJhbmdlKCldOwor
ICAgICAgICBpZiAobV9vYmplY3QtPmlzSGVhZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIFtO
U051bWJlciBudW1iZXJXaXRoSW50Om1fb2JqZWN0LT5oZWFkaW5nTGV2ZWwoKV07CisgICAgICAg
IAorICAgICAgICBpZiAobV9vYmplY3QtPmlzQ2hlY2tib3hPclJhZGlvKCkpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9vYmplY3QtPmNoZWNrYm94T3JSYWRpb1ZhbHVlKCkpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIEJ1dHRvblN0YXRlT2ZmOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6MF07CisgICAgICAgICAgICAgICAgY2FzZSBCdXR0b25T
dGF0ZU9uOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJ
bnQ6MV07CisgICAgICAgICAgICAgICAgY2FzZSBCdXR0b25TdGF0ZU1peGVkOgorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6Ml07CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIHJhZGlvIGdyb3VwcyByZXR1cm4g
dGhlIHNlbGVjdGVkIHJhZGlvIGJ1dHRvbiBhcyB0aGUgQVhWYWx1ZQorICAgICAgICBpZiAobV9v
YmplY3QtPmlzUmFkaW9Hcm91cCgpKSB7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiByYWRpb0J1dHRvbiA9IG1fb2JqZWN0LT5zZWxlY3RlZFJhZGlvQnV0dG9uKCk7CisgICAgICAg
ICAgICBpZiAoIXJhZGlvQnV0dG9uKQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAg
ICAgICAgICByZXR1cm4gcmFkaW9CdXR0b24tPndyYXBwZXIoKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RhYkxpc3QoKSkgeworICAgICAgICAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogdGFiSXRlbSA9IG1fb2JqZWN0LT5zZWxlY3RlZFRhYkl0ZW0oKTsK
KyAgICAgICAgICAgIGlmICghdGFiSXRlbSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwor
ICAgICAgICAgICAgcmV0dXJuIHRhYkl0ZW0tPndyYXBwZXIoKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RhYkl0ZW0oKSkKKyAgICAgICAgICAgIHJldHVy
biBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX29iamVjdC0+aXNTZWxlY3RlZCgpXTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChtX29iamVjdC0+aXNDb2xvcldlbGwoKSkgeworICAgICAgICAgICAg
aW50IHIsIGcsIGI7CisgICAgICAgICAgICBtX29iamVjdC0+Y29sb3JWYWx1ZShyLCBnLCBiKTsK
KyAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41
ZiAlNy41ZiAlNy41ZiAxIiwgciAvIDI1NS4sIGcgLyAyNTUuLCBiIC8gMjU1Ll07CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX29iamVjdC0+c3RyaW5nVmFsdWUoKTsKKyAg
ICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nl
c3NpYmlsaXR5TWluVmFsdWVBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51
bWJlcldpdGhGbG9hdDptX29iamVjdC0+bWluVmFsdWVGb3JSYW5nZSgpXTsKKyAgICAKKyAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlNYXhWYWx1
ZUF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Om1f
b2JqZWN0LT5tYXhWYWx1ZUZvclJhbmdlKCldOworICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUhlbHBBdHRyaWJ1dGVdKQorICAgICAg
ICByZXR1cm4gW3NlbGYgYWNjZXNzaWJpbGl0eUhlbHBUZXh0XTsKKyAgICAKKyAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmli
dXRlXSkKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDogbV9vYmplY3Qt
PmlzRm9jdXNlZCgpXTsKKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOiBOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtO
U051bWJlciBudW1iZXJXaXRoQm9vbDogbV9vYmplY3QtPmlzRW5hYmxlZCgpXTsKKyAgICAKKyAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTaXpl
QXR0cmlidXRlXSkgeworICAgICAgICBJbnRTaXplIHMgPSBtX29iamVjdC0+cGl4ZWxTbmFwcGVk
U2l6ZSgpOworICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoU2l6ZTogTlNNYWtlU2l6
ZShzLndpZHRoKCksIHMuaGVpZ2h0KCkpXTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVd
KQorICAgICAgICByZXR1cm4gW3NlbGYgcG9zaXRpb25dOworICAgIAorICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVdpbmRvd0F0dHJpYnV0ZV0g
fHwKKyAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxp
dHlUb3BMZXZlbFVJRWxlbWVudEF0dHJpYnV0ZV0pIHsKKyAgICAgICAgCisgICAgICAgIGlkIHJl
bW90ZVBhcmVudCA9IFtzZWxmIHJlbW90ZUFjY2Vzc2liaWxpdHlQYXJlbnRPYmplY3RdOworICAg
ICAgICBpZiAocmVtb3RlUGFyZW50KQorICAgICAgICAgICAgcmV0dXJuIFtyZW1vdGVQYXJlbnQg
YWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZU5hbWVdOworICAgICAgICAKKyAg
ICAgICAgRnJhbWVWaWV3KiBmdiA9IG1fb2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOworICAg
ICAgICBpZiAoZnYpCisgICAgICAgICAgICByZXR1cm4gW2Z2LT5wbGF0Zm9ybVdpZGdldCgpIHdp
bmRvd107CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QWNjZXNzS2V5QXR0cmlidXRl
XSkgeworICAgICAgICBBdG9taWNTdHJpbmcgYWNjZXNzS2V5ID0gbV9vYmplY3QtPmFjY2Vzc0tl
eSgpOworICAgICAgICBpZiAoYWNjZXNzS2V5LmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAgICAgcmV0dXJuIGFjY2Vzc0tleTsKKyAgICB9CisgICAgCisgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUYWJzQXR0cmlidXRl
XSkgeworICAgICAgICBpZiAobV9vYmplY3QtPmlzVGFiTGlzdCgpKSB7CisgICAgICAgICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdGFic0NoaWxk
cmVuOworICAgICAgICAgICAgbV9vYmplY3QtPnRhYkNoaWxkcmVuKHRhYnNDaGlsZHJlbik7Cisg
ICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheSh0YWJzQ2hpbGRyZW4pOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5Q29udGVudHNBdHRyaWJ1dGVdKSB7CisgICAgICAgIC8vIFRoZSBjb250
ZW50cyBvZiBhIHRhYiBsaXN0IGFyZSBhbGwgdGhlIGNoaWxkcmVuIGV4Y2VwdCB0aGUgdGFicy4K
KyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RhYkxpc3QoKSkgeworICAgICAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gbV9v
YmplY3QtPmNoaWxkcmVuKCk7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdGFic0NoaWxkcmVuOworICAgICAgICAgICAgbV9vYmpl
Y3QtPnRhYkNoaWxkcmVuKHRhYnNDaGlsZHJlbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjb250ZW50
czsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoaWxkcmVuU2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBjaGlsZHJlblNpemU7ICsraykg
eworICAgICAgICAgICAgICAgIGlmICh0YWJzQ2hpbGRyZW4uZmluZChjaGlsZHJlbltrXSkgPT0g
V1RGOjpub3RGb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGVudHMuYXBwZW5kKGNoaWxk
cmVuW2tdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0Fy
cmF5KGNvbnRlbnRzKTsKKyAgICAgICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNTY3JvbGxWaWV3
KCkpIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBBIHNjcm9sbFZpZXcncyBjb250ZW50cyBhcmUgZXZlcnl0aGluZyBl
eGNlcHQgdGhlIHNjcm9sbCBiYXJzLgorICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbnRlbnRzOworICAgICAgICAgICAgdW5zaWdu
ZWQgY2hpbGRyZW5TaXplID0gY2hpbGRyZW4uc2l6ZSgpOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBrID0gMDsgayA8IGNoaWxkcmVuU2l6ZTsgKytrKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFjaGlsZHJlbltrXS0+aXNTY3JvbGxiYXIoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGVu
dHMuYXBwZW5kKGNoaWxkcmVuW2tdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBjb252ZXJ0VG9OU0FycmF5KGNvbnRlbnRzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBpZiAobV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpIHsKKyAgICAgICAgLy8gVE9E
TzogZGlzdGluZ3Vpc2ggYmV0d2VlbiB2aXNpYmxlIGFuZCBub24tdmlzaWJsZSByb3dzCisgICAg
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93
c0F0dHJpYnV0ZV0gfHwKKyAgICAgICAgICAgIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlWaXNpYmxlUm93c0F0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIHJl
dHVybiBjb252ZXJ0VG9OU0FycmF5KHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KG1f
b2JqZWN0KS0+cm93cygpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBUT0RPOiBkaXN0aW5ndWlz
aCBiZXR3ZWVuIHZpc2libGUgYW5kIG5vbi12aXNpYmxlIGNvbHVtbnMKKyAgICAgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb2x1bW5zQXR0cmli
dXRlXSB8fAorICAgICAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eVZpc2libGVDb2x1bW5zQXR0cmlidXRlXSkgeworICAgICAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb05TQXJyYXkoc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4obV9vYmpl
Y3QpLT5jb2x1bW5zKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJp
YnV0ZV0pIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciBzZWxlY3RlZENoaWxkcmVuQ29weTsKKyAgICAgICAgICAgIG1fb2JqZWN0
LT5zZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW5Db3B5KTsKKyAgICAgICAgICAgIHJl
dHVybiBjb252ZXJ0VG9OU0FycmF5KHNlbGVjdGVkQ2hpbGRyZW5Db3B5KTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gSFRNTCB0YWJsZXMgZG9uJ3Qgc3VwcG9ydCB0aGVzZQorICAg
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNl
bGVjdGVkQ29sdW1uc0F0dHJpYnV0ZV0gfHwKKyAgICAgICAgICAgIFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENlbGxzQXR0cmlidXRlXSkKKyAg
ICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIAorICAgICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKWtBWENvbHVtbkhlYWRlclVJRWxlbWVudHNB
dHRyaWJ1dGVdKSB7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3IgY29sdW1uSGVhZGVyczsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PEFjY2Vzc2liaWxpdHlUYWJsZSo+KG1fb2JqZWN0KS0+Y29sdW1uSGVhZGVycyhjb2x1bW5IZWFk
ZXJzKTsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGNvbHVtbkhlYWRlcnMp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUhlYWRlckF0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlckNvbnRhaW5lciA9IHN0YXRpY19jYXN0PEFjY2Vz
c2liaWxpdHlUYWJsZSo+KG1fb2JqZWN0KS0+aGVhZGVyQ29udGFpbmVyKCk7CisgICAgICAgICAg
ICBpZiAoaGVhZGVyQ29udGFpbmVyKQorICAgICAgICAgICAgICAgIHJldHVybiBoZWFkZXJDb250
YWluZXItPndyYXBwZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5Um93SGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dIZWFkZXJz
OworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4obV9vYmplY3Qp
LT5yb3dIZWFkZXJzKHJvd0hlYWRlcnMpOworICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05T
QXJyYXkocm93SGVhZGVycyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNlbGxzQXR0
cmlidXRlXSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yIGNlbGxzOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8QWNjZXNzaWJp
bGl0eVRhYmxlKj4obV9vYmplY3QpLT5jZWxscyhjZWxscyk7CisgICAgICAgICAgICByZXR1cm4g
Y29udmVydFRvTlNBcnJheShjZWxscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYg
KG1fb2JqZWN0LT5pc1RhYmxlQ29sdW1uKCkpIHsKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmRleEF0dHJpYnV0ZV0pCisgICAgICAg
ICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c3RhdGljX2Nhc3Q8QWNjZXNzaWJp
bGl0eVRhYmxlQ29sdW1uKj4obV9vYmplY3QpLT5jb2x1bW5JbmRleCgpXTsKKyAgICAgICAgCisg
ICAgICAgIC8vIHJvd3MgYXR0cmlidXRlIGZvciBhIGNvbHVtbiBpcyB0aGUgbGlzdCBvZiBhbGwg
dGhlIGVsZW1lbnRzIGluIHRoYXQgY29sdW1uIGF0IGVhY2ggcm93CisgICAgICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93c0F0dHJpYnV0ZV0g
fHwKKyAgICAgICAgICAgIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlWaXNpYmxlUm93c0F0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0
VG9OU0FycmF5KHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbio+KG1fb2JqZWN0
KS0+Y2hpbGRyZW4oKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlIZWFkZXJBdHRyaWJ1dGVdKSB7CisgICAgICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGVDb2x1bW4qPihtX29iamVjdCktPmhlYWRlck9iamVjdCgpOworICAgICAgICAgICAg
aWYgKCFoZWFkZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgICAgIHJl
dHVybiBoZWFkZXItPndyYXBwZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAo
bV9vYmplY3QtPmlzVGFibGVDZWxsKCkpIHsKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb3dJbmRleFJhbmdlQXR0cmlidXRlXSkgewor
ICAgICAgICAgICAgcGFpcjxpbnQsIGludD4gcm93UmFuZ2U7CisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKj4obV9vYmplY3QpLT5yb3dJbmRleFJhbmdlKHJv
d1JhbmdlKTsKKyAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpOU01h
a2VSYW5nZShyb3dSYW5nZS5maXJzdCwgcm93UmFuZ2Uuc2Vjb25kKV07CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlD
b2x1bW5JbmRleFJhbmdlQXR0cmlidXRlXSkgeworICAgICAgICAgICAgcGFpcjxpbnQsIGludD4g
Y29sdW1uUmFuZ2U7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVD
ZWxsKj4obV9vYmplY3QpLT5jb2x1bW5JbmRleFJhbmdlKGNvbHVtblJhbmdlKTsKKyAgICAgICAg
ICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpOU01ha2VSYW5nZShjb2x1bW5SYW5n
ZS5maXJzdCwgY29sdW1uUmFuZ2Uuc2Vjb25kKV07CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgaWYgKG1fb2JqZWN0LT5pc1RyZWUoKSkgeworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV0pIHsK
KyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBzZWxlY3RlZENoaWxkcmVuQ29weTsKKyAgICAgICAgICAgIG1fb2JqZWN0LT5zZWxlY3Rl
ZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW5Db3B5KTsKKyAgICAgICAgICAgIHJldHVybiBjb252
ZXJ0VG9OU0FycmF5KHNlbGVjdGVkQ2hpbGRyZW5Db3B5KTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvd3NBdHRy
aWJ1dGVdKSB7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3Igcm93c0NvcHk7CisgICAgICAgICAgICBtX29iamVjdC0+YXJpYVRyZWVS
b3dzKHJvd3NDb3B5KTsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHJvd3ND
b3B5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVHJlZVJvbGVzIGRvIG5vdCBz
dXBwb3J0IGNvbHVtbnMsIGJ1dCBNYWMgQVggZXhwZWN0cyB0byBiZSBhYmxlIHRvIGFzayBhYm91
dCBjb2x1bW5zIGF0IHRoZSBsZWFzdC4KKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDb2x1bW5zQXR0cmlidXRlXSkKKyAgICAgICAgICAg
IHJldHVybiBbTlNBcnJheSBhcnJheV07CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdKSB7Cisg
ICAgICAgIGlmIChtX29iamVjdC0+aXNUcmVlSXRlbSgpKSB7CisgICAgICAgICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7CisgICAgICAg
ICAgICBmb3IgKDsgcGFyZW50ICYmICFwYXJlbnQtPmlzVHJlZSgpOyBwYXJlbnQgPSBwYXJlbnQt
PnBhcmVudE9iamVjdCgpKQorICAgICAgICAgICAgeyB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmICghcGFyZW50KQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIEZpbmQgdGhlIGluZGV4IG9mIHRoaXMgaXRlbSBieSBpdGVyYXRp
bmcgdGhlIHBhcmVudHMuCisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93c0NvcHk7CisgICAgICAgICAgICBwYXJlbnQtPmFyaWFU
cmVlUm93cyhyb3dzQ29weSk7CisgICAgICAgICAgICBzaXplX3QgY291bnQgPSByb3dzQ29weS5z
aXplKCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGNvdW50OyArK2spCisg
ICAgICAgICAgICAgICAgaWYgKHJvd3NDb3B5W2tdLT53cmFwcGVyKCkgPT0gc2VsZikKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6a107
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG1fb2JqZWN0LT5pc1RhYmxlUm93KCkpIHsKKyAgICAgICAgICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdKQor
ICAgICAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpzdGF0aWNfY2Fz
dDxBY2Nlc3NpYmlsaXR5VGFibGVSb3cqPihtX29iamVjdCktPnJvd0luZGV4KCldOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIC8vIFRoZSByb3dzIHRoYXQgYXJlIGNvbnNpZGVyZWQgaW5z
aWRlIHRoaXMgcm93LgorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5RGlzY2xvc2VkUm93c0F0dHJpYnV0ZV0pIHsKKyAgICAgICAgaWYgKG1fb2Jq
ZWN0LT5pc1RyZWVJdGVtKCkpIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dzQ29weTsKKyAgICAgICAgICAgIG1fb2JqZWN0
LT5hcmlhVHJlZUl0ZW1EaXNjbG9zZWRSb3dzKHJvd3NDb3B5KTsKKyAgICAgICAgICAgIHJldHVy
biBjb252ZXJ0VG9OU0FycmF5KHJvd3NDb3B5KTsKKyAgICAgICAgfSBlbHNlIGlmIChtX29iamVj
dC0+aXNBUklBVHJlZUdyaWRSb3coKSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3NDb3B5OworICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93Kj4obV9vYmplY3QpLT5kaXNjbG9zZWRS
b3dzKHJvd3NDb3B5KTsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHJvd3ND
b3B5KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBUaGUgcm93IHRoYXQgY29udGFp
bnMgdGhpcyByb3cuIEl0IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgZmlyc3QgcGFyZW50IHRo
YXQgaXMgYSB0cmVlaXRlbS4KKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eURpc2Nsb3NlZEJ5Um93QXR0cmlidXRlXSkgeworICAgICAgICBpZiAo
bV9vYmplY3QtPmlzVHJlZUl0ZW0oKSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogcGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdCgpOworICAgICAgICAgICAgd2hpbGUg
KHBhcmVudCkgeworICAgICAgICAgICAgICAgIGlmIChwYXJlbnQtPmlzVHJlZUl0ZW0oKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOworICAgICAgICAgICAg
ICAgIC8vIElmIHRoZSBwYXJlbnQgaXMgdGhlIHRyZWUgaXRzZWxmLCB0aGVuIHRoaXMgdmFsdWUg
PT0gbmlsLgorICAgICAgICAgICAgICAgIGlmIChwYXJlbnQtPmlzVHJlZSgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC0+
cGFyZW50T2JqZWN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbmlsOwor
ICAgICAgICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5pc0FSSUFUcmVlR3JpZFJvdygpKSB7CisgICAg
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiByb3cgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmls
aXR5QVJJQUdyaWRSb3cqPihtX29iamVjdCktPmRpc2Nsb3NlZEJ5Um93KCk7CisgICAgICAgICAg
ICBpZiAoIXJvdykKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgcmV0
dXJuIHJvdy0+d3JhcHBlcigpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc3VyZUxldmVs
QXR0cmlidXRlXSkgeworICAgICAgICAvLyBDb252ZXJ0IGZyb20gMS1iYXNlZCBsZXZlbCAoZnJv
bSBhcmlhLWxldmVsIHNwZWMpIHRvIDAtYmFzZWQgbGV2ZWwgKE1hYykKKyAgICAgICAgaW50IGxl
dmVsID0gbV9vYmplY3QtPmhpZXJhcmNoaWNhbExldmVsKCk7CisgICAgICAgIGlmIChsZXZlbCA+
IDApCisgICAgICAgICAgICBsZXZlbCAtPSAxOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51
bWJlcldpdGhJbnQ6bGV2ZWxdOworICAgIH0KKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURpc2Nsb3NpbmdBdHRyaWJ1dGVdKQorICAgICAgICBy
ZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5pc0V4cGFuZGVkKCldOwor
ICAgIAorICAgIGlmICgobV9vYmplY3QtPmlzTGlzdEJveCgpIHx8IG1fb2JqZWN0LT5pc0xpc3Qo
KSkgJiYgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU9yaWVu
dGF0aW9uQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVZlcnRpY2Fs
T3JpZW50YXRpb25WYWx1ZTsKKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOiBAIkFYU2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UiXSkKKyAgICAgICAgcmV0dXJuIFtz
ZWxmIHRleHRNYXJrZXJSYW5nZUZvclNlbGVjdGlvbl07CisgICAgCisgICAgaWYgKG1fb2JqZWN0
LT5yZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6IEAiQVhTdGFydFRleHRNYXJrZXIiXSkKKyAgICAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0
TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOnN0YXJ0T2ZEb2N1bWVudChtX29iamVjdC0+cmVuZGVy
ZXIoKS0+ZG9jdW1lbnQoKSldOworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOiBAIkFYRW5kVGV4dE1hcmtlciJdKQorICAgICAgICAgICAgcmV0dXJuIFtzZWxmIHRl
eHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246ZW5kT2ZEb2N1bWVudChtX29iamVjdC0+cmVuZGVy
ZXIoKS0+ZG9jdW1lbnQoKSldOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUJsb2NrUXVvdGVMZXZlbEF0dHJpYnV0ZV0p
CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX29iamVjdC0+YmxvY2tx
dW90ZUxldmVsKCldOworICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJB
WFRhYmxlTGV2ZWwiXSkKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Om1f
b2JqZWN0LT50YWJsZUxldmVsKCldOworICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUxpbmtlZFVJRWxlbWVudHNBdHRyaWJ1dGVdKSB7
CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciBsaW5rZWRVSUVsZW1lbnRzOworICAgICAgICBtX29iamVjdC0+bGlua2VkVUlFbGVtZW50cyhs
aW5rZWRVSUVsZW1lbnRzKTsKKyAgICAgICAgaWYgKGxpbmtlZFVJRWxlbWVudHMuc2l6ZSgpID09
IDApCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gY29udmVydFRvTlNB
cnJheShsaW5rZWRVSUVsZW1lbnRzKTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRBdHRyaWJ1dGVdKQor
ICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5pc1NlbGVj
dGVkKCldOworICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5T
QWNjZXNzaWJpbGl0eVNlcnZlc0FzVGl0bGVGb3JVSUVsZW1lbnRzQXR0cmlidXRlXSAmJiBtX29i
amVjdC0+aXNNZW51QnV0dG9uKCkpIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogdWlF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCo+KG1fb2JqZWN0
KS0+bWVudUZvck1lbnVCdXR0b24oKTsKKyAgICAgICAgaWYgKHVpRWxlbWVudCkKKyAgICAgICAg
ICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6dWlFbGVtZW50LT53cmFwcGVyKCld
OworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eVRpdGxlVUlFbGVtZW50QXR0cmlidXRlXSkgeworICAgICAgICBpZiAoIW1f
b2JqZWN0LT5leHBvc2VzVGl0bGVVSUVsZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7
CisgICAgICAgIAorICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBtX29iamVjdC0+
dGl0bGVVSUVsZW1lbnQoKTsKKyAgICAgICAgaWYgKG9iaikKKyAgICAgICAgICAgIHJldHVybiBv
YmotPndyYXBwZXIoKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgCisgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWYWx1ZURlc2Ny
aXB0aW9uQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT52YWx1ZURlc2NyaXB0
aW9uKCk7CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0ZV0pIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0
eU9yaWVudGF0aW9uIGVsZW1lbnRPcmllbnRhdGlvbiA9IG1fb2JqZWN0LT5vcmllbnRhdGlvbigp
OworICAgICAgICBpZiAoZWxlbWVudE9yaWVudGF0aW9uID09IEFjY2Vzc2liaWxpdHlPcmllbnRh
dGlvblZlcnRpY2FsKQorICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVZlcnRpY2Fs
T3JpZW50YXRpb25WYWx1ZTsKKyAgICAgICAgaWYgKGVsZW1lbnRPcmllbnRhdGlvbiA9PSBBY2Nl
c3NpYmlsaXR5T3JpZW50YXRpb25Ib3Jpem9udGFsKQorICAgICAgICAgICAgcmV0dXJuIE5TQWNj
ZXNzaWJpbGl0eUhvcml6b250YWxPcmllbnRhdGlvblZhbHVlOworICAgICAgICByZXR1cm4gbmls
OworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUhvcml6b250YWxTY3JvbGxCYXJBdHRyaWJ1dGVdKSB7CisgICAgICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbEJhciA9IG1fb2JqZWN0LT5zY3JvbGxCYXIoQWNjZXNz
aWJpbGl0eU9yaWVudGF0aW9uSG9yaXpvbnRhbCk7CisgICAgICAgIGlmIChzY3JvbGxCYXIpCisg
ICAgICAgICAgICByZXR1cm4gc2Nyb2xsQmFyLT53cmFwcGVyKCk7CisgICAgICAgIHJldHVybiBu
aWw7CisgICAgfQorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5VmVydGljYWxTY3JvbGxCYXJBdHRyaWJ1dGVdKSB7CisgICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIHNjcm9sbEJhciA9IG1fb2JqZWN0LT5zY3JvbGxCYXIoQWNjZXNzaWJpbGl0
eU9yaWVudGF0aW9uVmVydGljYWwpOworICAgICAgICBpZiAoc2Nyb2xsQmFyKQorICAgICAgICAg
ICAgcmV0dXJuIHNjcm9sbEJhci0+d3JhcHBlcigpOworICAgICAgICByZXR1cm4gbmlsOworICAg
IH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eVNvcnREaXJlY3Rpb25BdHRyaWJ1dGVdKSB7CisgICAgICAgIHN3aXRjaCAobV9vYmpl
Y3QtPnNvcnREaXJlY3Rpb24oKSkgeworICAgICAgICAgICAgY2FzZSBTb3J0RGlyZWN0aW9uQXNj
ZW5kaW5nOgorICAgICAgICAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlBc2NlbmRpbmdT
b3J0RGlyZWN0aW9uVmFsdWU7CisgICAgICAgICAgICBjYXNlIFNvcnREaXJlY3Rpb25EZXNjZW5k
aW5nOgorICAgICAgICAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlEZXNjZW5kaW5nU29y
dERpcmVjdGlvblZhbHVlOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VW5rbm93blNvcnREaXJlY3Rpb25WYWx1ZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUxhbmd1YWdlQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0
LT5sYW5ndWFnZSgpOworICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5RXhwYW5kZWRBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW05T
TnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5pc0V4cGFuZGVkKCldOworICAgIAorICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UmVxdWly
ZWRBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1f
b2JqZWN0LT5pc1JlcXVpcmVkKCldOworICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW52YWxpZEF0dHJpYnV0ZV0pCisgICAgICAgIHJl
dHVybiBtX29iamVjdC0+aW52YWxpZFN0YXR1cygpOworICAgIAorICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5T3duc0F0dHJpYnV0ZV0pIHsKKyAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFy
aWFPd25zOworICAgICAgICBtX29iamVjdC0+YXJpYU93bnNFbGVtZW50cyhhcmlhT3ducyk7Cisg
ICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGFyaWFPd25zKTsKKyAgICB9CisgICAgCisg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlHcmFi
YmVkQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpt
X29iamVjdC0+aXNBUklBR3JhYmJlZCgpXTsKKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRlXSkgewor
ICAgICAgICBWZWN0b3I8U3RyaW5nPiBkcm9wRWZmZWN0czsKKyAgICAgICAgbV9vYmplY3QtPmRl
dGVybWluZUFSSUFEcm9wRWZmZWN0cyhkcm9wRWZmZWN0cyk7CisgICAgICAgIHNpemVfdCBsZW5n
dGggPSBkcm9wRWZmZWN0cy5zaXplKCk7CisgICAgICAgIAorICAgICAgICBOU011dGFibGVBcnJh
eSogZHJvcEVmZmVjdHNBcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTps
ZW5ndGhdOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAg
ICAgICAgICAgW2Ryb3BFZmZlY3RzQXJyYXkgYWRkT2JqZWN0OmRyb3BFZmZlY3RzW2ldXTsKKyAg
ICAgICAgcmV0dXJuIGRyb3BFZmZlY3RzQXJyYXk7CisgICAgfQorICAgIAorICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UGxhY2Vob2xkZXJWYWx1
ZUF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBtX29iamVjdC0+cGxhY2Vob2xkZXJWYWx1ZSgp
OworICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5SGFzUG9wdXBBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJl
cldpdGhCb29sOm1fb2JqZWN0LT5hcmlhSGFzUG9wdXAoKV07CisgICAgCisgICAgLy8gQVJJQSBM
aXZlIHJlZ2lvbiBhdHRyaWJ1dGVzLgorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQUxpdmVBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4g
bV9vYmplY3QtPmFyaWFMaXZlUmVnaW9uU3RhdHVzKCk7CisgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlBUklBUmVsZXZhbnRBdHRyaWJ1dGVdKQor
ICAgICAgICByZXR1cm4gbV9vYmplY3QtPmFyaWFMaXZlUmVnaW9uUmVsZXZhbnQoKTsKKyAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFBdG9t
aWNBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1f
b2JqZWN0LT5hcmlhTGl2ZVJlZ2lvbkF0b21pYygpXTsKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFCdXN5QXR0cmlidXRlXSkKKyAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+YXJpYUxpdmVSZWdp
b25CdXN5KCldOworICAgIAorICAgIC8vIE1hdGhNTCBBdHRyaWJ1dGVzLgorICAgIGlmIChtX29i
amVjdC0+aXNNYXRoRWxlbWVudCgpKSB7CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aFJvb3RJbmRleEF0dHJpYnV0ZV0pCisgICAg
ICAgICAgICByZXR1cm4gKG1fb2JqZWN0LT5tYXRoUm9vdEluZGV4T2JqZWN0KCkpID8gbV9vYmpl
Y3QtPm1hdGhSb290SW5kZXhPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICAgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoUm9vdFJhZGlj
YW5kQXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVybiAobV9vYmplY3QtPm1hdGhSYWRpY2Fu
ZE9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRoUmFkaWNhbmRPYmplY3QoKS0+d3JhcHBlcigpIDog
MDsKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlNYXRoRnJhY3Rpb25OdW1lcmF0b3JBdHRyaWJ1dGVdKQorICAgICAgICAgICAgcmV0dXJu
IChtX29iamVjdC0+bWF0aE51bWVyYXRvck9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRoTnVtZXJh
dG9yT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aEZyYWN0aW9uRGVub21pbmF0b3JBdHRy
aWJ1dGVdKQorICAgICAgICAgICAgcmV0dXJuIChtX29iamVjdC0+bWF0aERlbm9taW5hdG9yT2Jq
ZWN0KCkpID8gbV9vYmplY3QtPm1hdGhEZW5vbWluYXRvck9iamVjdCgpLT53cmFwcGVyKCkgOiAw
OworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eU1hdGhCYXNlQXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVybiAobV9vYmplY3QtPm1h
dGhCYXNlT2JqZWN0KCkpID8gbV9vYmplY3QtPm1hdGhCYXNlT2JqZWN0KCktPndyYXBwZXIoKSA6
IDA7CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5TWF0aFN1YnNjcmlwdEF0dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4gKG1fb2Jq
ZWN0LT5tYXRoU3Vic2NyaXB0T2JqZWN0KCkpID8gbV9vYmplY3QtPm1hdGhTdWJzY3JpcHRPYmpl
Y3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoU3VwZXJzY3JpcHRBdHRyaWJ1dGVdKQorICAgICAg
ICAgICAgcmV0dXJuIChtX29iamVjdC0+bWF0aFN1cGVyc2NyaXB0T2JqZWN0KCkpID8gbV9vYmpl
Y3QtPm1hdGhTdXBlcnNjcmlwdE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhVbmRlckF0
dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4gKG1fb2JqZWN0LT5tYXRoVW5kZXJPYmplY3Qo
KSkgPyBtX29iamVjdC0+bWF0aFVuZGVyT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aE92
ZXJBdHRyaWJ1dGVdKQorICAgICAgICAgICAgcmV0dXJuIChtX29iamVjdC0+bWF0aE92ZXJPYmpl
Y3QoKSkgPyBtX29iamVjdC0+bWF0aE92ZXJPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRo
RmVuY2VkT3BlbkF0dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4gbV9vYmplY3QtPm1hdGhG
ZW5jZWRPcGVuU3RyaW5nKCk7CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZENsb3NlQXR0cmlidXRlXSkKKyAgICAgICAg
ICAgIHJldHVybiBtX29iamVjdC0+bWF0aEZlbmNlZENsb3NlU3RyaW5nKCk7CisgICAgfQorICAg
IAorICAgIC8vIHRoaXMgaXMgdXNlZCBvbmx5IGJ5IER1bXBSZW5kZXJUcmVlIGZvciB0ZXN0aW5n
CisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYQ2xpY2tQb2ludCJd
KQorICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6bV9vYmplY3QtPmNsaWNr
UG9pbnQoKV07CisgICAgCisgICAgLy8gVGhpcyBpcyB1c2VkIGJ5IERSVCB0byB2ZXJpZnkgQ1NT
MyBzcGVlY2ggd29ya3MuCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpA
IkFYRFJUU3BlZWNoQXR0cmlidXRlIl0pIHsKKyAgICAgICAgRVNwZWFrIHNwZWFrUHJvcGVydHkg
PSBtX29iamVjdC0+c3BlYWtQcm9wZXJ0eSgpOworICAgICAgICBzd2l0Y2ggKHNwZWFrUHJvcGVy
dHkpIHsKKyAgICAgICAgICAgIGNhc2UgU3BlYWtOb25lOgorICAgICAgICAgICAgICAgIHJldHVy
biBAIm5vbmUiOworICAgICAgICAgICAgY2FzZSBTcGVha1NwZWxsT3V0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBAInNwZWxsLW91dCI7CisgICAgICAgICAgICBjYXNlIFNwZWFrRGlnaXRzOgor
ICAgICAgICAgICAgICAgIHJldHVybiBAImRpZ2l0cyI7CisgICAgICAgICAgICBjYXNlIFNwZWFr
TGl0ZXJhbFB1bmN0dWF0aW9uOgorICAgICAgICAgICAgICAgIHJldHVybiBAImxpdGVyYWwtcHVu
Y3R1YXRpb24iOworICAgICAgICAgICAgY2FzZSBTcGVha05vUHVuY3R1YXRpb246CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEAibm8tcHVuY3R1YXRpb24iOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIGNhc2UgU3BlYWtOb3JtYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIEAi
bm9ybWFsIjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBVc2VkIGJ5IERSVCB0byBm
aW5kIGFuIGFjY2Vzc2libGUgbm9kZSBieSBpdHMgZWxlbWVudCBpZC4KKyAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhEUlRFbGVtZW50SWRBdHRyaWJ1dGUiXSkKKyAg
ICAgICAgcmV0dXJuIG1fb2JqZWN0LT5nZXRBdHRyaWJ1dGUoaWRBdHRyKTsKKyAgICAKKyAgICBy
ZXR1cm4gbmlsOworfQorCistIChpZClhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudAorewor
ICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gZm9jdXNlZE9iaiA9
IG1fb2JqZWN0LT5mb2N1c2VkVUlFbGVtZW50KCk7CisgICAgCisgICAgaWYgKCFmb2N1c2VkT2Jq
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHJldHVybiBmb2N1c2VkT2JqLT53cmFw
cGVyKCk7Cit9CisKKy0gKGlkKWFjY2Vzc2liaWxpdHlIaXRUZXN0OihOU1BvaW50KXBvaW50Cit7
CisgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIAorICAgIG1fb2JqZWN0LT51cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCk7
CisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGF4T2JqZWN0ID0gbV9vYmplY3QtPmFj
Y2Vzc2liaWxpdHlIaXRUZXN0KEludFBvaW50KHBvaW50KSk7CisgICAgaWYgKGF4T2JqZWN0KQor
ICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoYXhPYmplY3Qt
PndyYXBwZXIoKSk7CisgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9y
KHNlbGYpOworfQorCistIChCT09MKWFjY2Vzc2liaWxpdHlJc0F0dHJpYnV0ZVNldHRhYmxlOihO
U1N0cmluZyopYXR0cmlidXRlTmFtZQoreworICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFj
a2luZ1N0b3JlXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYU2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UiXSkKKyAg
ICAgICAgcmV0dXJuIFlFUzsKKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJu
IG1fb2JqZWN0LT5jYW5TZXRGb2N1c0F0dHJpYnV0ZSgpOworICAgIAorICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXSkK
KyAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5TZXRWYWx1ZUF0dHJpYnV0ZSgpOworICAgIAor
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNl
bGVjdGVkQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5TZXRTZWxlY3Rl
ZEF0dHJpYnV0ZSgpOworICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGVdKQorICAgICAgICBy
ZXR1cm4gbV9vYmplY3QtPmNhblNldFNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGUoKTsKKyAgICAK
KyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURp
c2Nsb3NpbmdBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhblNldEV4cGFu
ZGVkQXR0cmlidXRlKCk7CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVdKQorICAgICAgICByZXR1
cm4gWUVTOworICAgIAorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5T
QWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dEF0dHJpYnV0ZV0gfHwKKyAgICAgICAgW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0
dHJpYnV0ZV0gfHwKKyAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0Fj
Y2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGVdKQorICAgICAgICByZXR1
cm4gbV9vYmplY3QtPmNhblNldFRleHRSYW5nZUF0dHJpYnV0ZXMoKTsKKyAgICAKKyAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUdyYWJiZWRBdHRy
aWJ1dGVdKQorICAgICAgICByZXR1cm4gWUVTOworICAgIAorICAgIHJldHVybiBOTzsKK30KKwor
Ly8gYWNjZXNzaWJpbGl0eVNob3VsZFVzZVVuaXF1ZUlkIGlzIGFuIEFwcEtpdCBtZXRob2Qgd2Ug
b3ZlcnJpZGUgc28gdGhhdAorLy8gb2JqZWN0cyB3aWxsIGJlIGdpdmVuIGEgdW5pcXVlIElELCBh
bmQgdGhlcmVmb3JlIGFsbG93IEFwcEtpdCB0byBrbm93IHdoZW4gdGhleQorLy8gYmVjb21lIG9i
c29sZXRlIChlLmcuIHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIHRvIGEgbmV3IHdlYiBwYWdlLCBt
YWtpbmcgdGhpcyBvbmUKKy8vIHVucmVuZGVyZWQgYnV0IG5vdCBkZWFsbG9jYXRlZCBiZWNhdXNl
IGl0IGlzIGluIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUpLgorLy8gSXQgaXMgaW1wb3J0YW50IHRv
IGNhbGwgTlNBY2Nlc3NpYmlsaXR5VW5yZWdpc3RlclVuaXF1ZUlkRm9yVUlFbGVtZW50IGluIHRo
ZQorLy8gYXBwcm9wcmlhdGUgcGxhY2UgKGUuZy4gZGVhbGxvYykgdG8gcmVtb3ZlIHRoZXNlIG5v
bi1yZXRhaW5lZCByZWZlcmVuY2VzIGZyb20KKy8vIEFwcEtpdCdzIGlkIG1hcHBpbmcgdGFibGVz
LiBXZSBkbyB0aGlzIGluIGRldGFjaCBieSBjYWxsaW5nIHVucmVnaXN0ZXJVbmlxdWVJZEZvclVJ
RWxlbWVudC4KKy8vCisvLyBSZWdpc3RlcmluZyBhbiBvYmplY3QgaXMgYWxzbyByZXF1aXJlZCBm
b3Igb2JzZXJ2aW5nIG5vdGlmaWNhdGlvbnMuIE9ubHkgcmVnaXN0ZXJlZCBvYmplY3RzIGNhbiBi
ZSBvYnNlcnZlZC4KKy0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzSWdub3JlZAoreworICAgIGlmICgh
W3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAg
ICAKKyAgICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKQorICAgICAgICByZXR1cm4gW1tz
ZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkXTsKKyAgICByZXR1cm4g
bV9vYmplY3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsKK30KKworLSAoTlNBcnJheSogKWFj
Y2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMKK3sKKyAgICBpZiAoIVtzZWxm
IHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisg
ICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICAKKyAgICBzdGF0aWMgTlNBcnJheSogcGFyYW1BdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNB
cnJheSogdGV4dFBhcmFtQXR0cnMgPSBuaWw7CisgICAgc3RhdGljIE5TQXJyYXkqIHRhYmxlUGFy
YW1BdHRycyA9IG5pbDsKKyAgICBzdGF0aWMgTlNBcnJheSogd2ViQXJlYVBhcmFtQXR0cnMgPSBu
aWw7CisgICAgaWYgKHBhcmFtQXR0cnMgPT0gbmlsKSB7CisgICAgICAgIHBhcmFtQXR0cnMgPSBb
W05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czoKKyAgICAgICAgICAgICAgICAgICAgICBA
IkFYVUlFbGVtZW50Rm9yVGV4dE1hcmtlciIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWFRl
eHRNYXJrZXJSYW5nZUZvclVJRWxlbWVudCIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWExp
bmVGb3JUZXh0TWFya2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYVGV4dE1hcmtlclJh
bmdlRm9yTGluZSIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWFN0cmluZ0ZvclRleHRNYXJr
ZXJSYW5nZSIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWFRleHRNYXJrZXJGb3JQb3NpdGlv
biIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWEJvdW5kc0ZvclRleHRNYXJrZXJSYW5nZSIs
CisgICAgICAgICAgICAgICAgICAgICAgQCJBWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2Vy
UmFuZ2UiLAorICAgICAgICAgICAgICAgICAgICAgIEAiQVhUZXh0TWFya2VyUmFuZ2VGb3JVbm9y
ZGVyZWRUZXh0TWFya2VycyIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWE5leHRUZXh0TWFy
a2VyRm9yVGV4dE1hcmtlciIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWFByZXZpb3VzVGV4
dE1hcmtlckZvclRleHRNYXJrZXIiLAorICAgICAgICAgICAgICAgICAgICAgIEAiQVhMZWZ0V29y
ZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiLAorICAgICAgICAgICAgICAgICAgICAgIEAi
QVhSaWdodFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIiwKKyAgICAgICAgICAgICAg
ICAgICAgICBAIkFYTGVmdExpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIiwKKyAgICAg
ICAgICAgICAgICAgICAgICBAIkFYUmlnaHRMaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtl
ciIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWFNlbnRlbmNlVGV4dE1hcmtlclJhbmdlRm9y
VGV4dE1hcmtlciIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWFBhcmFncmFwaFRleHRNYXJr
ZXJSYW5nZUZvclRleHRNYXJrZXIiLAorICAgICAgICAgICAgICAgICAgICAgIEAiQVhOZXh0V29y
ZEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFY
UHJldmlvdXNXb3JkU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIsCisgICAgICAgICAgICAg
ICAgICAgICAgQCJBWE5leHRMaW5lRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiLAorICAgICAg
ICAgICAgICAgICAgICAgIEAiQVhQcmV2aW91c0xpbmVTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFy
a2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICBAIkFYTmV4dFNlbnRlbmNlRW5kVGV4dE1hcmtl
ckZvclRleHRNYXJrZXIiLAorICAgICAgICAgICAgICAgICAgICAgIEAiQVhQcmV2aW91c1NlbnRl
bmNlU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIsCisgICAgICAgICAgICAgICAgICAgICAg
QCJBWE5leHRQYXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIsCisgICAgICAgICAg
ICAgICAgICAgICAgQCJBWFByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1h
cmtlciIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWFN0eWxlVGV4dE1hcmtlclJhbmdlRm9y
VGV4dE1hcmtlciIsCisgICAgICAgICAgICAgICAgICAgICAgQCJBWExlbmd0aEZvclRleHRNYXJr
ZXJSYW5nZSIsCisgICAgICAgICAgICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Qm91bmRzRm9y
UmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgIE5TQWNj
ZXNzaWJpbGl0eVN0cmluZ0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRzRm9yU2VhcmNoUHJlZGljYXRl
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICBuaWxdOworICAg
IH0KKyAgICAKKyAgICBpZiAodGV4dFBhcmFtQXR0cnMgPT0gbmlsKSB7CisgICAgICAgIE5TTXV0
YWJsZUFycmF5KiB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFy
cmF5OnBhcmFtQXR0cnNdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcq
KWtBWExpbmVGb3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOworICAgICAgICBbdGVtcEFy
cmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWFJhbmdlRm9yTGluZVBhcmFtZXRlcml6ZWRBdHRy
aWJ1dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWFN0cmlu
Z0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRk
T2JqZWN0OihOU1N0cmluZyopa0FYUmFuZ2VGb3JQb3NpdGlvblBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGVdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWFJhbmdlRm9y
SW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmpl
Y3Q6KE5TU3RyaW5nKilrQVhCb3VuZHNGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOwor
ICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDooTlNTdHJpbmcqKWtBWFJURkZvclJhbmdlUGFy
YW1ldGVyaXplZEF0dHJpYnV0ZV07CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihOU1N0
cmluZyopa0FYQXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07
CisgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0OihOU1N0cmluZyopa0FYU3R5bGVSYW5nZUZv
ckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07CisgICAgICAgIHRleHRQYXJhbUF0dHJzID0g
W1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07CisgICAgICAgIFt0ZW1w
QXJyYXkgcmVsZWFzZV07CisgICAgfQorICAgIGlmICh0YWJsZVBhcmFtQXR0cnMgPT0gbmlsKSB7
CisgICAgICAgIE5TTXV0YWJsZUFycmF5KiB0ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aEFycmF5OnBhcmFtQXR0cnNdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9i
amVjdDpOU0FjY2Vzc2liaWxpdHlDZWxsRm9yQ29sdW1uQW5kUm93UGFyYW1ldGVyaXplZEF0dHJp
YnV0ZV07CisgICAgICAgIHRhYmxlUGFyYW1BdHRycyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdp
dGhBcnJheTp0ZW1wQXJyYXldOworICAgICAgICBbdGVtcEFycmF5IHJlbGVhc2VdOworICAgIH0K
KyAgICBpZiAoIXdlYkFyZWFQYXJhbUF0dHJzKSB7CisgICAgICAgIE5TTXV0YWJsZUFycmF5KiB0
ZW1wQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnBhcmFtQXR0
cnNdOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyRm9ySW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBh
ZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcklzVmFsaWRQYXJhbWV0ZXJpemVkQXR0
cmlidXRlXTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SW5k
ZXhGb3JUZXh0TWFya2VyUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07CisgICAgICAgIHdlYkFyZWFQ
YXJhbUF0dHJzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OnRlbXBBcnJheV07Cisg
ICAgICAgIFt0ZW1wQXJyYXkgcmVsZWFzZV07CisgICAgfQorICAgIAorICAgIGlmIChtX29iamVj
dC0+aXNQYXNzd29yZEZpZWxkKCkpCisgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheV07Cisg
ICAgCisgICAgaWYgKCFtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisg
ICAgICAgIHJldHVybiBwYXJhbUF0dHJzOworICAgIAorICAgIGlmIChtX29iamVjdC0+aXNUZXh0
Q29udHJvbCgpKQorICAgICAgICByZXR1cm4gdGV4dFBhcmFtQXR0cnM7CisgICAgCisgICAgaWYg
KG1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlUYWJsZSgpKQorICAgICAgICByZXR1cm4gdGFibGVQ
YXJhbUF0dHJzOworICAgIAorICAgIGlmIChtX29iamVjdC0+aXNNZW51UmVsYXRlZCgpKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIAorICAgIGlmIChtX29iamVjdC0+aXNXZWJBcmVhKCkpCisg
ICAgICAgIHJldHVybiB3ZWJBcmVhUGFyYW1BdHRyczsKKyAgICAKKyAgICByZXR1cm4gcGFyYW1B
dHRyczsKK30KKworLSAodm9pZClhY2Nlc3NpYmlsaXR5UGVyZm9ybVByZXNzQWN0aW9uCit7Cisg
ICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKKyAgICAgICAgW1tzZWxm
IGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5UGVyZm9ybUFjdGlvbjpOU0FjY2Vzc2liaWxp
dHlQcmVzc0FjdGlvbl07CisgICAgZWxzZQorICAgICAgICBtX29iamVjdC0+cHJlc3MoKTsKK30K
KworLSAodm9pZClhY2Nlc3NpYmlsaXR5UGVyZm9ybUluY3JlbWVudEFjdGlvbgoreworICAgIGlm
ICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50KCkpCisgICAgICAgIFtbc2VsZiBhdHRh
Y2htZW50Vmlld10gYWNjZXNzaWJpbGl0eVBlcmZvcm1BY3Rpb246TlNBY2Nlc3NpYmlsaXR5SW5j
cmVtZW50QWN0aW9uXTsKKyAgICBlbHNlCisgICAgICAgIG1fb2JqZWN0LT5pbmNyZW1lbnQoKTsK
K30KKworLSAodm9pZClhY2Nlc3NpYmlsaXR5UGVyZm9ybURlY3JlbWVudEFjdGlvbgoreworICAg
IGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50KCkpCisgICAgICAgIFtbc2VsZiBh
dHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eVBlcmZvcm1BY3Rpb246TlNBY2Nlc3NpYmlsaXR5
RGVjcmVtZW50QWN0aW9uXTsKKyAgICBlbHNlCisgICAgICAgIG1fb2JqZWN0LT5kZWNyZW1lbnQo
KTsKK30KKworLSAodm9pZClhY2Nlc3NpYmlsaXR5UGVyZm9ybVNob3dNZW51QWN0aW9uCit7Cisg
ICAgaWYgKG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBDb21ib0JveFJvbGUpCisgICAgICAgIG1f
b2JqZWN0LT5zZXRJc0V4cGFuZGVkKHRydWUpOworICAgIGVsc2UgeworICAgICAgICAvLyBUaGlz
IG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBpbiBhbiBpdGVyYXRpb24gb2YgdGhlIHJ1biBsb29wIHRo
YXQgZGlkIG5vdCBzdGFydCBmcm9tIGFuIEFYIGNhbGwuCisgICAgICAgIC8vIElmIGl0J3MgdGhl
IHNhbWUgcnVuIGxvb3AgaXRlcmF0aW9uLCB0aGUgbWVudSBvcGVuIG5vdGlmaWNhdGlvbiB3b24n
dCBiZSBzZW50CisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoYWNjZXNz
aWJpbGl0eVNob3dDb250ZXh0TWVudSkgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTowLjBdOwor
ICAgIH0KK30KKworLSAodm9pZClhY2Nlc3NpYmlsaXR5U2hvd0NvbnRleHRNZW51Cit7CisgICAg
UGFnZSogcGFnZSA9IG1fb2JqZWN0LT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgSW50UmVjdCByZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChtX29i
amVjdC0+ZWxlbWVudFJlY3QoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX29iamVj
dC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKKyAgICAKKyAgICAvLyBPbiBXSzIsIHdlIG5lZWQgdG8g
YWNjb3VudCBmb3IgdGhlIHNjcm9sbCBwb3NpdGlvbi4KKyAgICAvLyBPbiBXSzEsIHRoaXMgaXNu
J3QgbmVjZXNzYXJ5LCBpdCdzIHRha2VuIGNhcmUgb2YgYnkgdGhlIGF0dGFjaG1lbnQgdmlld3Mu
CisgICAgaWYgKGZyYW1lVmlldyAmJiAhZnJhbWVWaWV3LT5wbGF0Zm9ybVdpZGdldCgpKSB7Cisg
ICAgICAgIC8vIEZpbmQgdGhlIGFwcHJvcHJpYXRlIHNjcm9sbCB2aWV3IHRvIHVzZSB0byBjb252
ZXJ0IHRoZSBjb250ZW50cyB0byB0aGUgd2luZG93LgorICAgICAgICBmb3IgKEFjY2Vzc2liaWxp
dHlPYmplY3QqIHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50OyBwYXJl
bnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAocGFyZW50LT5p
c0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpIHsKKyAgICAgICAgICAgICAgICBTY3JvbGxWaWV3
KiBzY3JvbGxWaWV3ID0gdG9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhwYXJlbnQpLT5zY3JvbGxW
aWV3KCk7CisgICAgICAgICAgICAgICAgcmVjdCA9IHNjcm9sbFZpZXctPmNvbnRlbnRzVG9Sb290
VmlldyhyZWN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+c2hv
d0NvbnRleHRNZW51QXQocGFnZS0+bWFpbkZyYW1lKCksIHJlY3QuY2VudGVyKCkpOworfQorCist
ICh2b2lkKWFjY2Vzc2liaWxpdHlQZXJmb3JtQWN0aW9uOihOU1N0cmluZyopYWN0aW9uCit7Cisg
ICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKFthY3Rpb24gaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVBy
ZXNzQWN0aW9uXSkKKyAgICAgICAgW3NlbGYgYWNjZXNzaWJpbGl0eVBlcmZvcm1QcmVzc0FjdGlv
bl07CisgICAgCisgICAgZWxzZSBpZiAoW2FjdGlvbiBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5U2hvd01lbnVBY3Rpb25dKQorICAgICAgICBbc2VsZiBhY2Nlc3NpYmlsaXR5UGVyZm9y
bVNob3dNZW51QWN0aW9uXTsKKyAgICAKKyAgICBlbHNlIGlmIChbYWN0aW9uIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlJbmNyZW1lbnRBY3Rpb25dKQorICAgICAgICBbc2VsZiBhY2Nl
c3NpYmlsaXR5UGVyZm9ybUluY3JlbWVudEFjdGlvbl07CisgICAgCisgICAgZWxzZSBpZiAoW2Fj
dGlvbiBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGVjcmVtZW50QWN0aW9uXSkKKyAg
ICAgICAgW3NlbGYgYWNjZXNzaWJpbGl0eVBlcmZvcm1EZWNyZW1lbnRBY3Rpb25dOworfQorCist
ICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFsdWUgZm9yQXR0cmlidXRlOihOU1N0
cmluZyopYXR0cmlidXRlTmFtZQoreworICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2lu
Z1N0b3JlXSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlkIHRleHRNYXJrZXJSYW5nZSA9
IG5pbDsKKyAgICBOU051bWJlciogICAgICAgICAgICAgICBudW1iZXIgPSBuaWw7CisgICAgTlNT
dHJpbmcqICAgICAgICAgICAgICAgc3RyaW5nID0gbmlsOworICAgIE5TUmFuZ2UgICAgICAgICAg
ICAgICAgIHJhbmdlID0gezAsIDB9OworICAgIE5TQXJyYXkqICAgICAgICAgICAgICAgIGFycmF5
ID0gbmlsOworICAgIAorICAgIC8vIGRlY29kZSB0aGUgcGFyYW1ldGVyCisgICAgaWYgKEFYT2Jq
ZWN0SXNUZXh0TWFya2VyUmFuZ2UodmFsdWUpKQorICAgICAgICB0ZXh0TWFya2VyUmFuZ2UgPSB2
YWx1ZTsKKyAgICAKKyAgICBlbHNlIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIg
c2VsZl1dKQorICAgICAgICBudW1iZXIgPSB2YWx1ZTsKKyAgICAKKyAgICBlbHNlIGlmIChbdmFs
dWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgc2VsZl1dKQorICAgICAgICBzdHJpbmcgPSB2YWx1
ZTsKKyAgICAKKyAgICBlbHNlIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNWYWx1ZSBzZWxm
XV0pCisgICAgICAgIHJhbmdlID0gW3ZhbHVlIHJhbmdlVmFsdWVdOworICAgIAorICAgIGVsc2Ug
aWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0FycmF5IHNlbGZdXSkKKyAgICAgICAgYXJyYXkg
PSB2YWx1ZTsKKyAgICAKKyAgICAvLyBoYW5kbGUgdGhlIGNvbW1hbmQKKyAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYU2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UiXSkg
eworICAgICAgICBBU1NFUlQodGV4dE1hcmtlclJhbmdlKTsKKyAgICAgICAgbV9vYmplY3QtPnNl
dFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoW3NlbGYgdmlzaWJsZVBvc2l0aW9uUmFuZ2VG
b3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXSk7CisgICAgfSBlbHNlIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1
dGVdKSB7CisgICAgICAgIEFTU0VSVChudW1iZXIpOworICAgICAgICBtX29iamVjdC0+c2V0Rm9j
dXNlZChbbnVtYmVyIGludFZhbHVlXSAhPSAwKTsKKyAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdKSB7Cisg
ICAgICAgIGlmIChudW1iZXIgJiYgbV9vYmplY3QtPmNhblNldE51bWVyaWNWYWx1ZSgpKQorICAg
ICAgICAgICAgbV9vYmplY3QtPnNldFZhbHVlKFtudW1iZXIgZmxvYXRWYWx1ZV0pOworICAgICAg
ICBlbHNlIGlmIChzdHJpbmcpCisgICAgICAgICAgICBtX29iamVjdC0+c2V0VmFsdWUoc3RyaW5n
KTsKKyAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nl
c3NpYmlsaXR5U2VsZWN0ZWRBdHRyaWJ1dGVdKSB7CisgICAgICAgIGlmICghbnVtYmVyKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBtX29iamVjdC0+c2V0U2VsZWN0ZWQoW251bWJlciBi
b29sVmFsdWVdKTsKKyAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZV0pIHsKKyAgICAgICAg
aWYgKCFhcnJheSB8fCBtX29iamVjdC0+cm9sZVZhbHVlKCkgIT0gTGlzdEJveFJvbGUpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZENoaWxkcmVuOworICAgICAgICBjb252ZXJ0VG9WZWN0
b3IoYXJyYXksIHNlbGVjdGVkQ2hpbGRyZW4pOworICAgICAgICBzdGF0aWNfY2FzdDxBY2Nlc3Np
YmlsaXR5TGlzdEJveCo+KG1fb2JqZWN0KS0+c2V0U2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENo
aWxkcmVuKTsKKyAgICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsKKyAg
ICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5
U2VsZWN0ZWRUZXh0QXR0cmlidXRlXSkgeworICAgICAgICAgICAgbV9vYmplY3QtPnNldFNlbGVj
dGVkVGV4dChzdHJpbmcpOworICAgICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0UmFuZ2VBdHRyaWJ1dGVdKSB7
CisgICAgICAgICAgICBtX29iamVjdC0+c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoUGxhaW5UZXh0UmFu
Z2UocmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCkpOworICAgICAgICB9IGVsc2UgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJh
Y3RlclJhbmdlQXR0cmlidXRlXSkgeworICAgICAgICAgICAgbV9vYmplY3QtPm1ha2VSYW5nZVZp
c2libGUoUGxhaW5UZXh0UmFuZ2UocmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCkpOworICAg
ICAgICB9CisgICAgfSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5RGlzY2xvc2luZ0F0dHJpYnV0ZV0pCisgICAgICAgIG1fb2JqZWN0LT5zZXRJ
c0V4cGFuZGVkKFtudW1iZXIgYm9vbFZhbHVlXSk7CisgICAgZWxzZSBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV0p
IHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yIHNlbGVjdGVkUm93czsKKyAgICAgICAgY29udmVydFRvVmVjdG9yKGFycmF5LCBzZWxlY3Rl
ZFJvd3MpOworICAgICAgICBpZiAobV9vYmplY3QtPmlzVHJlZSgpIHx8IG1fb2JqZWN0LT5pc0Fj
Y2Vzc2liaWxpdHlUYWJsZSgpKQorICAgICAgICAgICAgbV9vYmplY3QtPnNldFNlbGVjdGVkUm93
cyhzZWxlY3RlZFJvd3MpOworICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eUdyYWJiZWRBdHRyaWJ1dGVdKQorICAgICAgICBtX29iamVj
dC0+c2V0QVJJQUdyYWJiZWQoW251bWJlciBib29sVmFsdWVdKTsKK30KKworc3RhdGljIFJlbmRl
ck9iamVjdCogcmVuZGVyZXJGb3JWaWV3KE5TVmlldyogdmlldykKK3sKKyAgICBpZiAoIVt2aWV3
IGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woV2ViQ29yZUZyYW1lVmlldyldKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICAKKyAgICBOU1ZpZXc8V2ViQ29yZUZyYW1lVmlldz4qIGZyYW1lVmll
dyA9IChOU1ZpZXc8V2ViQ29yZUZyYW1lVmlldz4qKXZpZXc7CisgICAgRnJhbWUqIGZyYW1lID0g
W2ZyYW1lVmlldyBfd2ViX2ZyYW1lXTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICBOb2RlKiBub2RlID0gZnJhbWUtPmRvY3VtZW50KCktPm93bmVyRWxlbWVu
dCgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJu
IG5vZGUtPnJlbmRlcmVyKCk7Cit9CisKKy0gKGlkKV9hY2Nlc3NpYmlsaXR5UGFyZW50Rm9yU3Vi
dmlldzooTlNWaWV3KilzdWJ2aWV3Cit7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHJl
bmRlcmVyRm9yVmlldyhzdWJ2aWV3KTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIAorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IHJlbmRlcmVyLT5k
b2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlcmVyKTsKKyAgICBp
ZiAob2JqKQorICAgICAgICByZXR1cm4gb2JqLT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKS0+d3Jh
cHBlcigpOworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKE5TU3RyaW5nKilhY2Nlc3NpYmlsaXR5
QWN0aW9uRGVzY3JpcHRpb246KE5TU3RyaW5nKilhY3Rpb24KK3sKKyAgICAvLyB3ZSBoYXZlIG5v
IGN1c3RvbSBhY3Rpb25zCisgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eUFjdGlvbkRlc2NyaXB0
aW9uKGFjdGlvbik7Cit9CisKKy8vIFRoZSBDRkF0dHJpYnV0ZWRTdHJpbmdUeXBlIHJlcHJlc2Vu
dGF0aW9uIG9mIHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjY2Vzc2liaWxpdHkKKy8v
IG9iamVjdCB0aGF0IGlzIHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4gcmFuZ2UuCistIChOU0F0dHJp
YnV0ZWRTdHJpbmcqKWRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UK
K3sKKyAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBQbGFpblRleHRSYW5nZShyYW5nZS5s
b2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxl
UG9zUmFuZ2UgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZSh0ZXh0UmFu
Z2UpOworICAgIHJldHVybiBbc2VsZiBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJS
YW5nZTpbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2aXNpYmxlUG9z
UmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dmlzaWJsZVBvc1JhbmdlLmVuZF1dOworfQorCistIChO
U1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihSYW5nZSopcmFuZ2UKK3sKKyAgICBOU1JhbmdlIHJl
c3VsdCA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOworICAgIGlmICghcmFuZ2UgfHwgIXJh
bmdlLT5zdGFydENvbnRhaW5lcigpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIAorICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IG1fb2JqZWN0LT5kb2N1bWVudCgpOworICAgIGlmICghZG9j
dW1lbnQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgCisgICAgc2l6ZV90IGxvY2F0aW9u
OworICAgIHNpemVfdCBsZW5ndGg7CisgICAgVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExl
bmd0aEZyb21SYW5nZShkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIHJhbmdlLCBsb2NhdGlv
biwgbGVuZ3RoKTsKKyAgICByZXN1bHQubG9jYXRpb24gPSBsb2NhdGlvbjsKKyAgICByZXN1bHQu
bGVuZ3RoID0gbGVuZ3RoOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKE5TSW50
ZWdlcilfaW5kZXhGb3JUZXh0TWFya2VyOihpZCltYXJrZXIKK3sKKyAgICBpZiAoIW1hcmtlcikK
KyAgICAgICAgcmV0dXJuIE5TTm90Rm91bmQ7CisgICAgCisgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24oW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjptYXJrZXJdKTsKKyAg
ICByZXR1cm4gW3NlbGYgX2NvbnZlcnRUb05TUmFuZ2U6c2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCldLmxvY2F0aW9uOworfQorCistIChpZClfdGV4dE1hcmtlckZvckluZGV4OihO
U0ludGVnZXIpdGV4dEluZGV4Cit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9vYmplY3Qt
PmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICAKKyAgICBQYXNzUmVmUHRyPFJhbmdlPiB0ZXh0UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdl
RnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgdGV4dElu
ZGV4LCAwKTsKKyAgICBpZiAoIXRleHRSYW5nZSB8fCAhdGV4dFJhbmdlLT5ib3VuZGFyeVBvaW50
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgVmlzaWJsZVBvc2l0aW9u
IHBvc2l0aW9uKHRleHRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICByZXR1cm4gW3NlbGYg
dGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpwb3NpdGlvbl07Cit9CisKKy8vIFRoZSBSVEYg
cmVwcmVzZW50YXRpb24gb2YgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWNjZXNzaWJp
bGl0eSBvYmplY3QgdGhhdCBpcworLy8gc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiByYW5nZS4KKy0g
KE5TRGF0YSopZG9BWFJURkZvclJhbmdlOihOU1JhbmdlKXJhbmdlCit7CisgICAgTlNBdHRyaWJ1
dGVkU3RyaW5nKiBhdHRyU3RyaW5nID0gW3NlbGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5n
ZTpyYW5nZV07CisgICAgcmV0dXJuIFthdHRyU3RyaW5nIFJURkZyb21SYW5nZTogTlNNYWtlUmFu
Z2UoMCwgW2F0dHJTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOiBuaWxdOworfQor
CistIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1dGUg
Zm9yUGFyYW1ldGVyOihpZClwYXJhbWV0ZXIKK3sKKyAgICBpZCB0ZXh0TWFya2VyID0gbmlsOwor
ICAgIGlkIHRleHRNYXJrZXJSYW5nZSA9IG5pbDsKKyAgICBOU051bWJlciogbnVtYmVyID0gbmls
OworICAgIE5TQXJyYXkqIGFycmF5ID0gbmlsOworICAgIE5TRGljdGlvbmFyeSogZGljdGlvbmFy
eSA9IG5pbDsKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gdWlFbGVtZW50ID0gMDsK
KyAgICBOU1BvaW50IHBvaW50ID0gTlNaZXJvUG9pbnQ7CisgICAgYm9vbCBwb2ludFNldCA9IGZh
bHNlOworICAgIE5TUmFuZ2UgcmFuZ2UgPSB7MCwgMH07CisgICAgYm9vbCByYW5nZVNldCA9IGZh
bHNlOworICAgIAorICAgIC8vIGJhc2ljIHBhcmFtZXRlciB2YWxpZGF0aW9uCisgICAgaWYgKCFt
X29iamVjdCB8fCAhYXR0cmlidXRlIHx8ICFwYXJhbWV0ZXIpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgCisgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIAorICAgIC8vIGNvbW1vbiBwYXJhbWV0ZXIgdHlwZSBjaGVjay9j
YXN0aW5nLiAgTmlsIGNoZWNrcyBpbiBoYW5kbGVycyBjYXRjaCB3cm9uZyB0eXBlIGNhc2UuCisg
ICAgLy8gTk9URTogVGhpcyBhc3N1bWVzIG5pbCBpcyBub3QgYSB2YWxpZCBwYXJhbWV0ZXIsIGJl
Y2F1c2UgaXQgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbQorICAgIC8vIGEgcGFyYW1ldGVyIG9m
IHRoZSB3cm9uZyB0eXBlLgorICAgIGlmIChBWE9iamVjdElzVGV4dE1hcmtlcihwYXJhbWV0ZXIp
KQorICAgICAgICB0ZXh0TWFya2VyID0gcGFyYW1ldGVyOworICAgIAorICAgIGVsc2UgaWYgKEFY
T2JqZWN0SXNUZXh0TWFya2VyUmFuZ2UocGFyYW1ldGVyKSkKKyAgICAgICAgdGV4dE1hcmtlclJh
bmdlID0gcGFyYW1ldGVyOworICAgIAorICAgIGVsc2UgaWYgKFtwYXJhbWV0ZXIgaXNLaW5kT2ZD
bGFzczpbV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc2VsZl1dKQorICAgICAgICB1aUVs
ZW1lbnQgPSBbKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilwYXJhbWV0ZXIgYWNjZXNz
aWJpbGl0eU9iamVjdF07CisgICAgCisgICAgZWxzZSBpZiAoW3BhcmFtZXRlciBpc0tpbmRPZkNs
YXNzOltOU051bWJlciBzZWxmXV0pCisgICAgICAgIG51bWJlciA9IHBhcmFtZXRlcjsKKyAgICAK
KyAgICBlbHNlIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgc2VsZl1dKQor
ICAgICAgICBhcnJheSA9IHBhcmFtZXRlcjsKKyAgICAKKyAgICBlbHNlIGlmIChbcGFyYW1ldGVy
IGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBzZWxmXV0pCisgICAgICAgIGRpY3Rpb25hcnkg
PSBwYXJhbWV0ZXI7CisgICAgCisgICAgZWxzZSBpZiAoW3BhcmFtZXRlciBpc0tpbmRPZkNsYXNz
OltOU1ZhbHVlIHNlbGZdXSAmJiBzdHJjbXAoWyhOU1ZhbHVlKilwYXJhbWV0ZXIgb2JqQ1R5cGVd
LCBAZW5jb2RlKE5TUG9pbnQpKSA9PSAwKSB7CisgICAgICAgIHBvaW50U2V0ID0gdHJ1ZTsKKyAg
ICAgICAgcG9pbnQgPSBbKE5TVmFsdWUqKXBhcmFtZXRlciBwb2ludFZhbHVlXTsKKyAgICAgICAg
CisgICAgfSBlbHNlIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUgc2VsZl1d
ICYmIHN0cmNtcChbKE5TVmFsdWUqKXBhcmFtZXRlciBvYmpDVHlwZV0sIEBlbmNvZGUoTlNSYW5n
ZSkpID09IDApIHsKKyAgICAgICAgcmFuZ2VTZXQgPSB0cnVlOworICAgICAgICByYW5nZSA9IFso
TlNWYWx1ZSopcGFyYW1ldGVyIHJhbmdlVmFsdWVdOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IEF0dHJpYnV0ZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuIEFsbG93IHN1cGVyIHRvIGhhbmRsZS4K
KyAgICAgICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6YXR0cmli
dXRlIGZvclBhcmFtZXRlcjpwYXJhbWV0ZXJdOworICAgIH0KKyAgICAKKyAgICAvLyBkaXNwYXRj
aAorICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRzRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKKyAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogc3RhcnRPYmplY3QgPSAwOworICAgICAgICBpZiAoW1tk
aWN0aW9uYXJ5IG9iamVjdEZvcktleTpAIkFYU3RhcnRFbGVtZW50Il0gaXNLaW5kT2ZDbGFzczpb
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc2VsZl1dKQorICAgICAgICAgICAgc3RhcnRP
YmplY3QgPSBbKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilbZGljdGlvbmFyeSBvYmpl
Y3RGb3JLZXk6QCJBWFN0YXJ0RWxlbWVudCJdIGFjY2Vzc2liaWxpdHlPYmplY3RdOworICAgICAg
ICAKKyAgICAgICAgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbiBzZWFyY2hEaXJlY3Rpb24g
PSBTZWFyY2hEaXJlY3Rpb25OZXh0OworICAgICAgICBpZiAoW1tkaWN0aW9uYXJ5IG9iamVjdEZv
cktleTpAIkFYRGlyZWN0aW9uIl0gaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgc2VsZl1dKQorICAg
ICAgICAgICAgc2VhcmNoRGlyZWN0aW9uID0gKFsoTlNTdHJpbmcqKVtkaWN0aW9uYXJ5IG9iamVj
dEZvcktleTpAIkFYRGlyZWN0aW9uIl0gaXNFcXVhbFRvU3RyaW5nOkAiQVhEaXJlY3Rpb25OZXh0
Il0pID8gU2VhcmNoRGlyZWN0aW9uTmV4dCA6IFNlYXJjaERpcmVjdGlvblByZXZpb3VzOworICAg
ICAgICAKKyAgICAgICAgQWNjZXNzaWJpbGl0eVNlYXJjaEtleSBzZWFyY2hLZXkgPSBBbnlUeXBl
U2VhcmNoS2V5OworICAgICAgICBpZiAoW1tkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAIkFYU2Vh
cmNoS2V5Il0gaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgc2VsZl1dKQorICAgICAgICAgICAgc2Vh
cmNoS2V5ID0gYWNjZXNzaWJpbGl0eVNlYXJjaEtleUZvclN0cmluZygoQ0ZTdHJpbmdSZWYpW2Rp
Y3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkAiQVhTZWFyY2hLZXkiXSk7CisgICAgICAgIAorICAgICAg
ICBTdHJpbmcgc2VhcmNoVGV4dDsKKyAgICAgICAgaWYgKFtbZGljdGlvbmFyeSBvYmplY3RGb3JL
ZXk6QCJBWFNlYXJjaFRleHQiXSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBzZWxmXV0pCisgICAg
ICAgICAgICBzZWFyY2hUZXh0ID0gKENGU3RyaW5nUmVmKVtkaWN0aW9uYXJ5IG9iamVjdEZvcktl
eTpAIkFYU2VhcmNoVGV4dCJdOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0c0xp
bWl0ID0gMDsKKyAgICAgICAgaWYgKFtbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QCJBWFJlc3Vs
dHNMaW1pdCJdIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIHNlbGZdXSkKKyAgICAgICAgICAgIHJl
c3VsdHNMaW1pdCA9IFsoTlNOdW1iZXIqKVtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAIkFYUmVz
dWx0c0xpbWl0Il0gdW5zaWduZWRJbnRWYWx1ZV07CisgICAgICAgIAorICAgICAgICBBY2Nlc3Np
YmlsaXR5U2VhcmNoQ3JpdGVyaWEgY3JpdGVyaWEgPSB7c3RhcnRPYmplY3QsIHNlYXJjaERpcmVj
dGlvbiwgc2VhcmNoS2V5LCAmc2VhcmNoVGV4dCwgcmVzdWx0c0xpbWl0fTsKKyAgICAgICAgCisg
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBy
ZXN1bHRzOworICAgICAgICBtX29iamVjdC0+ZmluZE1hdGNoaW5nT2JqZWN0cygmY3JpdGVyaWEs
IHJlc3VsdHMpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkocmVz
dWx0cyk7CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlUZXh0TWFya2VySXNWYWxpZFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7
CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JU
ZXh0TWFya2VyOnRleHRNYXJrZXJdOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldp
dGhCb29sOiFwb3MuaXNOdWxsKCldOworICAgIH0KKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhGb3JUZXh0TWFya2VyUGFyYW1ldGVyaXplZEF0
dHJpYnV0ZV0pIHsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpb
c2VsZiBfaW5kZXhGb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdXTsKKyAgICB9CisgICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJGb3JJbmRl
eFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CisgICAgICAgIHJldHVybiBbc2VsZiBfdGV4dE1h
cmtlckZvckluZGV4OltudW1iZXIgaW50ZWdlclZhbHVlXV07CisgICAgfQorICAgIAorICAgIGlm
IChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYVUlFbGVtZW50Rm9yVGV4dE1hcmtlciJd
KSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBv
c2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOworICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBheE9iamVjdCA9IG1fb2JqZWN0LT5hY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yUG9zaXRp
b24odmlzaWJsZVBvcyk7CisgICAgICAgIGlmICghYXhPYmplY3QpCisgICAgICAgICAgICByZXR1
cm4gbmlsOworICAgICAgICByZXR1cm4gYXhPYmplY3QtPndyYXBwZXIoKTsKKyAgICB9CisgICAg
CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhUZXh0TWFya2VyUmFuZ2VG
b3JVSUVsZW1lbnQiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0g
dWlFbGVtZW50LmdldCgpLT52aXNpYmxlUG9zaXRpb25SYW5nZSgpOworICAgICAgICByZXR1cm4g
W3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBl
bmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYTGluZUZvclRleHRNYXJrZXIiXSkgeworICAgICAgICBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJr
ZXI6KHRleHRNYXJrZXIpXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoVW5z
aWduZWRJbnQ6bV9vYmplY3QtPmxpbmVGb3JQb3NpdGlvbih2aXNpYmxlUG9zKV07CisgICAgfQor
ICAgIAorICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYVGV4dE1hcmtlclJh
bmdlRm9yTGluZSJdKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBt
X29iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JMaW5lKFtudW1iZXIgaW50VmFsdWVdKTsK
KyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25z
OnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOworICAgIH0KKyAgICAKKyAg
ICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFN0cmluZ0ZvclRleHRNYXJrZXJS
YW5nZSJdKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9
IFtzZWxmIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJS
YW5nZV07CisgICAgICAgIHJldHVybiBtX29iamVjdC0+c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9u
UmFuZ2UodmlzaWJsZVBvc1JhbmdlKTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOkAiQVhUZXh0TWFya2VyRm9yUG9zaXRpb24iXSkgeworICAgICAgICBJ
bnRQb2ludCB3ZWJDb3JlUG9pbnQgPSBJbnRQb2ludChwb2ludCk7CisgICAgICAgIHJldHVybiBw
b2ludFNldCA/IFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPnZp
c2libGVQb3NpdGlvbkZvclBvaW50KHdlYkNvcmVQb2ludCldIDogbmlsOworICAgIH0KKyAgICAK
KyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEJvdW5kc0ZvclRleHRNYXJr
ZXJSYW5nZSJdKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5n
ZSA9IFtzZWxmIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJr
ZXJSYW5nZV07CisgICAgICAgIE5TUmVjdCByZWN0ID0gbV9vYmplY3QtPmJvdW5kc0ZvclZpc2li
bGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3NSYW5nZSk7CisgICAgICAgIHJldHVybiBbTlNWYWx1
ZSB2YWx1ZVdpdGhSZWN0OnJlY3RdOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Qm91bmRzRm9yUmFuZ2VQYXJhbWV0ZXJpemVk
QXR0cmlidXRlXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBtX29iamVjdC0+
dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2UubG9jYXRpb24pOworICAgICAgICBWaXNpYmxl
UG9zaXRpb24gZW5kID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KHJhbmdlLmxv
Y2F0aW9uK3JhbmdlLmxlbmd0aCk7CisgICAgICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBlbmQu
aXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICBOU1JlY3QgcmVjdCA9
IG1fb2JqZWN0LT5ib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShWaXNpYmxlUG9zaXRpb25S
YW5nZShzdGFydCwgZW5kKSk7CisgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0
OnJlY3RdOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5U3RyaW5nRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewor
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9u
Rm9ySW5kZXgocmFuZ2UubG9jYXRpb24pOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0g
bV9vYmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KHJhbmdlLmxvY2F0aW9uK3JhbmdlLmxl
bmd0aCk7CisgICAgICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCkpCisgICAg
ICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gbV9vYmplY3QtPnN0cmluZ0ZvclZp
c2libGVQb3NpdGlvblJhbmdlKFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0LCBlbmQpKTsKKyAg
ICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhBdHRyaWJ1
dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlIl0pCisgICAgICAgIHJldHVybiBbc2VsZiBkb0FY
QXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOworICAg
IAorICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYVGV4dE1hcmtlclJhbmdl
Rm9yVW5vcmRlcmVkVGV4dE1hcmtlcnMiXSkgeworICAgICAgICBpZiAoW2FycmF5IGNvdW50XSA8
IDIpCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAKKyAgICAgICAgaWQgdGV4dE1h
cmtlcjEgPSBbYXJyYXkgb2JqZWN0QXRJbmRleDowXTsKKyAgICAgICAgaWQgdGV4dE1hcmtlcjIg
PSBbYXJyYXkgb2JqZWN0QXRJbmRleDoxXTsKKyAgICAgICAgaWYgKCFBWE9iamVjdElzVGV4dE1h
cmtlcih0ZXh0TWFya2VyMSkgfHwgIUFYT2JqZWN0SXNUZXh0TWFya2VyKHRleHRNYXJrZXIyKSkK
KyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIAorICAgICAgICBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVBvczEgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0
TWFya2VyMSldOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvczIgPSBbc2VsZiB2
aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyMildOworICAgICAgICBWaXNp
YmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdl
Rm9yVW5vcmRlcmVkUG9zaXRpb25zKHZpc2libGVQb3MxLCB2aXNpYmxlUG9zMik7CisgICAgICAg
IHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdl
LnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKKyAgICB9CisgICAgCisgICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0VGV4dE1hcmtlckZvclRleHRNYXJrZXIi
XSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQ
b3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKKyAgICAgICAgcmV0dXJuIFtzZWxm
IHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPm5leHRWaXNpYmxlUG9zaXRp
b24odmlzaWJsZVBvcyldOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6QCJBWFByZXZpb3VzVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgeworICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRl
eHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJG
b3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPnByZXZpb3VzVmlzaWJsZVBvc2l0aW9uKHZpc2li
bGVQb3MpXTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
OkAiQVhMZWZ0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgeworICAgICAgICBW
aXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRN
YXJrZXI6KHRleHRNYXJrZXIpXTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5n
ZSA9IG1fb2JqZWN0LT5wb3NpdGlvbk9mTGVmdFdvcmQodmlzaWJsZVBvcyk7CisgICAgICAgIHJl
dHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0
YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhSaWdodFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0
TWFya2VyIl0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2
aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIFZpc2li
bGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+cG9zaXRpb25PZlJpZ2h0V29yZCh2
aXNpYmxlUG9zKTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNp
YmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOworICAg
IH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExlZnRMaW5l
VGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1h
cmtlcildOworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3Qt
PmxlZnRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvcyk7CisgICAgICAgIHJldHVy
biBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0
IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhSaWdodExpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFy
a2VyIl0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNp
YmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIFZpc2libGVQ
b3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+cmlnaHRMaW5lVmlzaWJsZVBvc2l0aW9u
UmFuZ2UodmlzaWJsZVBvcyk7CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VG
cm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5k
XTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhT
ZW50ZW5jZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgeworICAgICAgICBWaXNpYmxl
UG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6
KHRleHRNYXJrZXIpXTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1f
b2JqZWN0LT5zZW50ZW5jZUZvclBvc2l0aW9uKHZpc2libGVQb3MpOworICAgICAgICByZXR1cm4g
W3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBl
bmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYUGFyYWdyYXBoVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtl
ciJdKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJs
ZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOworICAgICAgICBWaXNpYmxlUG9z
aXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnBhcmFncmFwaEZvclBvc2l0aW9uKHZpc2li
bGVQb3MpOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQ
b3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CisgICAgfQor
ICAgIAorICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dFdvcmRFbmRU
ZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNp
YmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcild
OworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29i
amVjdC0+bmV4dFdvcmRFbmQodmlzaWJsZVBvcyldOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzV29yZFN0YXJ0VGV4dE1hcmtlckZv
clRleHRNYXJrZXIiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtz
ZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKKyAgICAgICAg
cmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPnByZXZp
b3VzV29yZFN0YXJ0KHZpc2libGVQb3MpXTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0TGluZUVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2Vy
Il0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxl
UG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVybiBbc2Vs
ZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5uZXh0TGluZUVuZFBvc2l0
aW9uKHZpc2libGVQb3MpXTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhQcmV2aW91c0xpbmVTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0p
IHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9z
aXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0
ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5wcmV2aW91c0xpbmVTdGFydFBv
c2l0aW9uKHZpc2libGVQb3MpXTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUgaXNF
cXVhbFRvU3RyaW5nOkAiQVhOZXh0U2VudGVuY2VFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJd
KSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBv
c2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOworICAgICAgICByZXR1cm4gW3NlbGYg
dGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+bmV4dFNlbnRlbmNlRW5kUG9z
aXRpb24odmlzaWJsZVBvcyldOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzU2VudGVuY2VTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFy
a2VyIl0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNp
YmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVybiBb
c2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5wcmV2aW91c1NlbnRl
bmNlU3RhcnRQb3NpdGlvbih2aXNpYmxlUG9zKV07CisgICAgfQorICAgIAorICAgIGlmIChbYXR0
cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyIl0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2Vs
ZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIHJl
dHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5uZXh0UGFy
YWdyYXBoRW5kUG9zaXRpb24odmlzaWJsZVBvcyldOworICAgIH0KKyAgICAKKyAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFy
a2VyRm9yVGV4dE1hcmtlciJdKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9z
ID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOworICAg
ICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+
cHJldmlvdXNQYXJhZ3JhcGhTdGFydFBvc2l0aW9uKHZpc2libGVQb3MpXTsKKyAgICB9CisgICAg
CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdHlsZVRleHRNYXJrZXJS
YW5nZUZvclRleHRNYXJrZXIiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBv
cyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKKyAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT5zdHlsZVJhbmdl
Rm9yUG9zaXRpb24odmlzaWJsZVBvcyk7CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vy
UmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFu
Z2UuZW5kXTsKKyAgICB9CisgICAgCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
OkAiQVhMZW5ndGhGb3JUZXh0TWFya2VyUmFuZ2UiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRp
b25SYW5nZSB2aXNpYmxlUG9zUmFuZ2UgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRl
eHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOworICAgICAgICBpbnQgbGVuZ3RoID0gbV9v
YmplY3QtPmxlbmd0aEZvclZpc2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3NSYW5nZSk7Cisg
ICAgICAgIGlmIChsZW5ndGggPCAwKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAg
cmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Omxlbmd0aF07CisgICAgfQorICAgIAorICAg
IC8vIFVzZWQgb25seSBieSBEdW1wUmVuZGVyVHJlZSAoc28gZmFyKS4KKyAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5n
ZSJdKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IFtz
ZWxmIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5n
ZV07CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOnZp
c2libGVQb3NSYW5nZS5zdGFydF07CisgICAgfQorICAgIAorICAgIGlmIChbYXR0cmlidXRlIGlz
RXF1YWxUb1N0cmluZzpAIkFYRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSJdKSB7Cisg
ICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IFtzZWxmIHZpc2li
bGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07CisgICAg
ICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOnZpc2libGVQb3NS
YW5nZS5lbmRdOworICAgIH0KKyAgICAKKyAgICBpZiAobV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0
eVRhYmxlKCkpIHsKKyAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eUNlbGxGb3JDb2x1bW5BbmRSb3dQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewor
ICAgICAgICAgICAgaWYgKGFycmF5ID09IG5pbCB8fCBbYXJyYXkgY291bnRdICE9IDIpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNl
bGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihtX29iamVjdCktPmNl
bGxGb3JDb2x1bW5BbmRSb3coW1thcnJheSBvYmplY3RBdEluZGV4OjBdIHVuc2lnbmVkSW50VmFs
dWVdLCBbW2FycmF5IG9iamVjdEF0SW5kZXg6MV0gdW5zaWduZWRJbnRWYWx1ZV0pOworICAgICAg
ICAgICAgaWYgKCFjZWxsKQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiBjZWxsLT53cmFwcGVyKCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsKKyAgICAgICAgaWYg
KFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNTdHJpbmcgKilrQVhMaW5lRm9ySW5kZXhQ
YXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgeworICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSBt
X29iamVjdC0+ZG9BWExpbmVGb3JJbmRleChbbnVtYmVyIGludFZhbHVlXSk7CisgICAgICAgICAg
ICBpZiAobGluZU51bWJlciA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAg
ICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50OmxpbmVOdW1iZXJd
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6IChOU1N0cmluZyAqKWtBWFJhbmdlRm9yTGluZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVd
KSB7CisgICAgICAgICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+ZG9B
WFJhbmdlRm9yTGluZShbbnVtYmVyIGludFZhbHVlXSk7CisgICAgICAgICAgICByZXR1cm4gW05T
VmFsdWUgdmFsdWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJh
bmdlLmxlbmd0aCldOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmluZyopa0FYU3RyaW5nRm9yUmFuZ2VQYXJhbWV0ZXJp
emVkQXR0cmlidXRlXSkgeworICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgcGxhaW5UZXh0UmFu
Z2UgPSBQbGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKKyAgICAg
ICAgICAgIHJldHVybiByYW5nZVNldCA/IChpZCkobV9vYmplY3QtPmRvQVhTdHJpbmdGb3JSYW5n
ZShwbGFpblRleHRSYW5nZSkpIDogbmlsOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmluZyopa0FYUmFuZ2VGb3JQb3Np
dGlvblBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CisgICAgICAgICAgICBpZiAoIXBvaW50U2V0
KQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICBJbnRQb2ludCB3ZWJD
b3JlUG9pbnQgPSBJbnRQb2ludChwb2ludCk7CisgICAgICAgICAgICBQbGFpblRleHRSYW5nZSB0
ZXh0UmFuZ2UgPSBtX29iamVjdC0+ZG9BWFJhbmdlRm9yUG9zaXRpb24od2ViQ29yZVBvaW50KTsK
KyAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTogTlNNYWtlUmFuZ2Uo
dGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2UubGVuZ3RoKV07CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3RyaW5nKilrQVhS
YW5nZUZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKKyAgICAgICAgICAgIFBsYWlu
VGV4dFJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5kb0FYUmFuZ2VGb3JJbmRleChbbnVtYmVy
IGludFZhbHVlXSk7CisgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6
IE5TTWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0aCldOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChO
U1N0cmluZyopa0FYQm91bmRzRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgeworICAg
ICAgICAgICAgaWYgKCFyYW5nZVNldCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAg
ICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgcGxhaW5UZXh0UmFuZ2UgPSBQbGFpblRleHRSYW5nZShy
YW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgICAgIE5TUmVjdCByZWN0ID0g
bV9vYmplY3QtPmRvQVhCb3VuZHNGb3JSYW5nZShwbGFpblRleHRSYW5nZSk7CisgICAgICAgICAg
ICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpyZWN0XTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNTdHJpbmcqKWtB
WFJURkZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pCisgICAgICAgICAgICByZXR1cm4g
cmFuZ2VTZXQgPyBbc2VsZiBkb0FYUlRGRm9yUmFuZ2U6cmFuZ2VdIDogbmlsOworICAgICAgICAK
KyAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNTdHJpbmcqKWtBWEF0
dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKQorICAgICAgICAg
ICAgcmV0dXJuIHJhbmdlU2V0ID8gW3NlbGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZTpy
YW5nZV0gOiBuaWw7CisgICAgICAgIAorICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6IChOU1N0cmluZyopa0FYU3R5bGVSYW5nZUZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJp
YnV0ZV0pIHsKKyAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0
LT5kb0FYU3R5bGVSYW5nZUZvckluZGV4KFtudW1iZXIgaW50VmFsdWVdKTsKKyAgICAgICAgICAg
IHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTogTlNNYWtlUmFuZ2UodGV4dFJhbmdlLnN0
YXJ0LCB0ZXh0UmFuZ2UubGVuZ3RoKV07CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8g
VGhlcmUgYXJlIHNvbWUgcGFyYW1ldGVycyB0aGF0IHN1cGVyIGhhbmRsZXMgdGhhdCBhcmUgbm90
IGV4cGxpY2l0bHkgcmV0dXJuZWQgYnkgdGhlIGxpc3Qgb2YgdGhlIGVsZW1lbnQncyBhdHRyaWJ1
dGVzLgorICAgIC8vIEluIHRoYXQgY2FzZSBpdCBtdXN0IGJlIHBhc3NlZCB0byBzdXBlci4KKyAg
ICByZXR1cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTphdHRyaWJ1dGUgZm9y
UGFyYW1ldGVyOnBhcmFtZXRlcl07Cit9CisKKy0gKEJPT0wpYWNjZXNzaWJpbGl0eVN1cHBvcnRz
T3ZlcnJpZGRlbkF0dHJpYnV0ZXMKK3sKKyAgICByZXR1cm4gWUVTOworfQorCistIChCT09MKWFj
Y2Vzc2liaWxpdHlTaG91bGRVc2VVbmlxdWVJZAoreworICAgIC8vIEFsbCBBWCBvYmplY3Qgd3Jh
cHBlcnMgc2hvdWxkIHVzZSB1bmlxdWUgSUQncyBiZWNhdXNlIGl0J3MgZmFzdGVyIHdpdGhpbiBB
cHBLaXQgdG8gbG9vayB0aGVtIHVwLgorICAgIHJldHVybiBZRVM7Cit9CisKKy8vIEFQSSB0aGF0
IEFwcEtpdCB1c2VzIGZvciBmYXN0ZXIgYWNjZXNzCistIChOU1VJbnRlZ2VyKWFjY2Vzc2liaWxp
dHlJbmRleE9mQ2hpbGQ6KGlkKWNoaWxkCit7CisgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RC
YWNraW5nU3RvcmVdKQorICAgICAgICByZXR1cm4gTlNOb3RGb3VuZDsKKyAgICAKKyAgICAvLyBU
cmVlIG9iamVjdHMgcmV0dXJuIHRoZWlyIHJvd3MgYXMgdGhlaXIgY2hpbGRyZW4uIFdlIGNhbiB1
c2UgdGhlIG9yaWdpbmFsIG1ldGhvZAorICAgIC8vIGhlcmUsIGJlY2F1c2Ugd2Ugd29uJ3QgZ2Fp
biBhbnkgc3BlZWQgdXAuCisgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWUoKSkKKyAgICAgICAgcmV0
dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5SW5kZXhPZkNoaWxkOmNoaWxkXTsKKyAgICAKKyAgICBj
b25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNo
aWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7CisgICAgCisgICAgaWYgKGNoaWxkcmVuLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFtbc2VsZiByZW5kZXJXaWRnZXRDaGlsZHJlbl0gaW5k
ZXhPZk9iamVjdDpjaGlsZF07CisgICAgCisgICAgdW5zaWduZWQgY291bnQgPSBjaGlsZHJlbi5z
aXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGNvdW50OyArK2spIHsKKyAgICAg
ICAgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBjaGlsZHJlbltrXS0+
d3JhcHBlcigpOworICAgICAgICBpZiAod3JhcHBlciA9PSBjaGlsZCB8fCAoY2hpbGRyZW5ba10t
PmlzQXR0YWNobWVudCgpICYmIFt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XSA9PSBjaGlsZCkpCisg
ICAgICAgICAgICByZXR1cm4gazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIE5TTm90Rm91bmQ7
Cit9CisKKy0gKE5TVUludGVnZXIpYWNjZXNzaWJpbGl0eUFycmF5QXR0cmlidXRlQ291bnQ6KE5T
U3RyaW5nICopYXR0cmlidXRlCit7CisgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5n
U3RvcmVdKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdKSB7CisgICAgICAg
IC8vIFRyZWUgaXRlbXMgb2JqZWN0IHJldHVybnMgYSBkaWZmZXJlbnQgc2V0IG9mIGNoaWxkcmVu
IHRoYW4gdGhvc2UgdGhhdCBhcmUgaW4gY2hpbGRyZW4oKQorICAgICAgICAvLyBiZWNhdXNlIGFu
IEFYT3V0bGluZSAodGhlIG1hYyByb2xlIGlzIGJlY29tZXMpIGhhcyBzb21lIG9kZCBzdGlwdWxh
dGlvbnMuCisgICAgICAgIGlmIChtX29iamVjdC0+aXNUcmVlKCkgfHwgbV9vYmplY3QtPmlzVHJl
ZUl0ZW0oKSkKKyAgICAgICAgICAgIHJldHVybiBbW3NlbGYgYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSBjb3VudF07CisgICAgICAg
IAorICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3ImIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7CisgICAgICAgIGlmIChj
aGlsZHJlbi5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gW1tzZWxmIHJlbmRlcldpZGdl
dENoaWxkcmVuXSBjb3VudF07CisgICAgICAgIAorICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2l6
ZSgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlBcnJheUF0
dHJpYnV0ZUNvdW50OmF0dHJpYnV0ZV07Cit9CisKKy0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5
QXJyYXlBdHRyaWJ1dGVWYWx1ZXM6KE5TU3RyaW5nICopYXR0cmlidXRlIGluZGV4OihOU1VJbnRl
Z2VyKWluZGV4IG1heENvdW50OihOU1VJbnRlZ2VyKW1heENvdW50Cit7CisgICAgaWYgKCFbc2Vs
ZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAor
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDaGlsZHJl
bkF0dHJpYnV0ZV0pIHsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5jaGlsZHJlbigpLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgTlNBcnJheSAqY2hpbGRyZW4gPSBbc2VsZiByZW5kZXJXaWRnZXRD
aGlsZHJlbl07CisgICAgICAgICAgICBpZiAoIWNoaWxkcmVuKQorICAgICAgICAgICAgICAgIHJl
dHVybiBuaWw7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5TVUludGVnZXIgY2hpbGRDb3Vu
dCA9IFtjaGlsZHJlbiBjb3VudF07CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gY2hpbGRDb3Vu
dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBOU1VJbnRlZ2VyIGFycmF5TGVuZ3RoID0gbWluKGNoaWxkQ291bnQgLSBpbmRleCwgbWF4Q291
bnQpOworICAgICAgICAgICAgcmV0dXJuIFtjaGlsZHJlbiBzdWJhcnJheVdpdGhSYW5nZTpOU01h
a2VSYW5nZShpbmRleCwgYXJyYXlMZW5ndGgpXTsKKyAgICAgICAgfSBlbHNlIGlmIChtX29iamVj
dC0+aXNUcmVlKCkpIHsKKyAgICAgICAgICAgIC8vIFRyZWUgb2JqZWN0cyByZXR1cm4gdGhlaXIg
cm93cyBhcyB0aGVpciBjaGlsZHJlbi4gV2UgY2FuIHVzZSB0aGUgb3JpZ2luYWwgbWV0aG9kIGlu
IHRoaXMgY2FzZS4KKyAgICAgICAgICAgIHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUFycmF5
QXR0cmlidXRlVmFsdWVzOmF0dHJpYnV0ZSBpbmRleDppbmRleCBtYXhDb3VudDptYXhDb3VudF07
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRy
ZW4oKTsKKyAgICAgICAgdW5zaWduZWQgY2hpbGRDb3VudCA9IGNoaWxkcmVuLnNpemUoKTsKKyAg
ICAgICAgaWYgKGluZGV4ID49IGNoaWxkQ291bnQpCisgICAgICAgICAgICByZXR1cm4gbmlsOwor
ICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgYXZhaWxhYmxlID0gbWluKGNoaWxkQ291bnQgLSBp
bmRleCwgbWF4Q291bnQpOworICAgICAgICAKKyAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnN1YmFy
cmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmF2YWlsYWJsZV07CisgICAg
ICAgIGZvciAodW5zaWduZWQgYWRkZWQgPSAwOyBhZGRlZCA8IGF2YWlsYWJsZTsgKytpbmRleCwg
KythZGRlZCkgeworICAgICAgICAgICAgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdy
YXBwZXIgPSBjaGlsZHJlbltpbmRleF0tPndyYXBwZXIoKTsKKyAgICAgICAgICAgIGlmICh3cmFw
cGVyKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGF0dGFjaG1lbnQgdmlldyBzaG91bGQgYmUg
cmV0dXJuZWQsIG90aGVyd2lzZSBBWCBwYWxpbmRyb21lIGVycm9ycyBvY2N1ci4KKyAgICAgICAg
ICAgICAgICBpZiAoY2hpbGRyZW5baW5kZXhdLT5pc0F0dGFjaG1lbnQoKSAmJiBbd3JhcHBlciBh
dHRhY2htZW50Vmlld10pCisgICAgICAgICAgICAgICAgICAgIFtzdWJhcnJheSBhZGRPYmplY3Q6
W3dyYXBwZXIgYXR0YWNobWVudFZpZXddXTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIFtzdWJhcnJheSBhZGRPYmplY3Q6d3JhcHBlcl07CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBzdWJhcnJheTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVWYWx1ZXM6
YXR0cmlidXRlIGluZGV4OmluZGV4IG1heENvdW50Om1heENvdW50XTsKK30KKworQGVuZAorCisj
ZW5kaWYgLy8gSEFWRShBQ0NFU1NJQklMSVRZKQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCShyZXZpc2lvbiAxNDMw
NzApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbXBvcnQgIkFjY2Vzc2li
aWxpdHlPYmplY3QuaCIKICNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgotI2ltcG9ydCAiV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIuaCIKKyNpbXBvcnQgIldlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyTWFjLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAKICNp
bXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC01MSw3ICs1MSw3IEBACiAKIHZvaWQgQVhPYmpl
Y3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmopCiB7Ci0gICAg
UmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPiB3cmFwcGVyKEFkb3B0TlMs
IFtbV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWxsb2NdIGluaXRXaXRoQWNjZXNzaWJp
bGl0eU9iamVjdDpvYmpdKTsKKyAgICBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXI+IHdyYXBwZXIoQWRvcHROUywgW1tXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1h
YyBhbGxvY10gaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0Om9ial0pOwogICAgIG9iai0+c2V0
V3JhcHBlcih3cmFwcGVyLmdldCgpKTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>