<?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>42764</bug_id>
          
          <creation_ts>2010-07-21 09:48:21 -0700</creation_ts>
          <short_desc>Rename CSSStyleSelector to StyleResolver.</short_desc>
          <delta_ts>2012-04-25 15:40:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>84734</dependson>
    
    <dependson>84765</dependson>
    
    <dependson>84814</dependson>
          <blocked>46590</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Alexis Menard (darktears)">menard</assigned_to>
          <cc>arv</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>hyatt</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mitz</cc>
    
    <cc>rakuco</cc>
    
    <cc>rolandsteiner</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>254357</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-07-21 09:48:21 -0700</bug_when>
    <thetext>Rename CSSStyleSelector to RenderStyleResolver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254360</commentid>
    <comment_count>1</comment_count>
      <attachid>62201</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-07-21 09:51:54 -0700</bug_when>
    <thetext>Created attachment 62201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254366</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-21 09:54:32 -0700</bug_when>
    <thetext>Attachment 62201 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/css/SVGCSSStyleSelector.cpp:32:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/css/RenderStyleResolver.h:83:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 2 in 94 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254371</commentid>
    <comment_count>3</comment_count>
      <attachid>62201</attachid>
    <who name="">mitz</who>
    <bug_when>2010-07-21 09:57:16 -0700</bug_when>
    <thetext>Comment on attachment 62201
Patch

Please explain the motivation and the benefit of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254373</commentid>
    <comment_count>4</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-07-21 10:02:30 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 62201 [details])
&gt; Please explain the motivation and the benefit of this patch.

Ah, good point. I should&apos;ve included a more detailed ChangeLog entry. Looking at CSSStyleSelector, I understand that its primary use is to determine the RenderStyle for an element (CSSStyleSelector::[pseudo]styleForFoo) -- and a bunch of helpers around that. So RenderStyleResolver seems to fit better. Plus, it seems to me that the name is a bit confusing, since CSSStyleSelector could be interpreted as an encapsulation of CSS Selector, which it&apos;s not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254377</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-07-21 10:05:40 -0700</bug_when>
    <thetext>Another possibility is CSSStyleResolver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254857</commentid>
    <comment_count>6</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-07-22 09:54:57 -0700</bug_when>
    <thetext>I’d be fine with CSSStyleResolver, but I’d like to know what Dave Hyatt thinks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514691</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-12-04 08:14:10 -0800</bug_when>
    <thetext>StyleResolver perhaps. I think CSS prefix should mainly be reserved for cssom types. 

CSSStyleApplyProperty needs a new name too. StyleBuilder might be good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514692</commentid>
    <comment_count>8</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-12-04 08:16:26 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; StyleResolver perhaps. I think CSS prefix should mainly be reserved for cssom types. 
&gt; 
&gt; CSSStyleApplyProperty needs a new name too. StyleBuilder might be good.

I like StyleResolver. And StyleBuilder, for that matter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514867</commentid>
    <comment_count>9</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-12-04 20:48:30 -0800</bug_when>
    <thetext>@_@ I can haz review for &lt;style scoped&gt; really, really fast, plz?!?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608753</commentid>
    <comment_count>10</comment_count>
      <attachid>138578</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-04-24 09:27:31 -0700</bug_when>
    <thetext>Created attachment 138578
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608757</commentid>
    <comment_count>11</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-04-24 09:32:32 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=138578) [details]
&gt; Patch

As requested I&apos;ll make child bugs for each of the patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608845</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-04-24 10:58:22 -0700</bug_when>
    <thetext>I think it&apos;s more interesting to split out the logic into a new class instead of renaming the existing one.  CSSStyleSelector has a whole bunch of per-element and per-selector state.  None of which the pure &quot;resolver&quot; would need.  One of my goals after I finally land seamless is to rip a bunch of that state out to simplify the object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608859</commentid>
    <comment_count>13</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-24 11:10:47 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; I think it&apos;s more interesting to split out the logic into a new class instead of renaming the existing one.  CSSStyleSelector has a whole bunch of per-element and per-selector state.  None of which the pure &quot;resolver&quot; would need.  One of my goals after I finally land seamless is to rip a bunch of that state out to simplify the object.

Sure but that is a completely orthogonal task. We still don&apos;t want to have silly names around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610105</commentid>
    <comment_count>14</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-04-25 15:40:59 -0700</bug_when>
    <thetext>All patches have landed. Done!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62201</attachid>
            <date>2010-07-21 09:51:54 -0700</date>
            <delta_ts>2012-04-24 09:27:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42764-20100721095153.patch</filename>
            <type>text/plain</type>
            <size>804854</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzgzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzM0IEBACisyMDEwLTA3LTIxICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVuYW1lIENTU1N0eWxlU2VsZWN0b3IgdG8gUmVuZGVyU3R5bGVSZXNvbHZlci4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyNzY0CisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgorICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwOgorICAg
ICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpw
YXJzZVNpemVQYXJhbWV0ZXIpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5oOiBSZW1vdmVkLgorICAg
ICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWwpOgorICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXZhbHVh
dG9yLmg6CisgICAgICAgICogY3NzL1JlbmRlclN0eWxlUmVzb2x2ZXIuY3BwOiBDb3BpZWQgZnJv
bSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclN0eWxlUmVzb2x2ZXI6OlJlbmRlclN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6YWRkS2V5ZnJhbWVTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clN0eWxlUmVzb2x2ZXI6On5SZW5kZXJTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclN0eWxlUmVzb2x2ZXI6OmFkZE1hdGNoZWREZWNsYXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFibGVzRm9yRGVjbGFyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6bWF0Y2hSdWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjptYXRjaFJ1bGVzRm9yTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlUmVzb2x2ZXI6OlNlbGVjdG9yQ2hl
Y2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxl
UmVzb2x2ZXI6OmluaXRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlUmVz
b2x2ZXI6OmluaXRGb3JTdHlsZVJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5
bGVSZXNvbHZlcjo6U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNrZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6U2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVM
aW5rU3RhdGVTbG93Q2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVy
OjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU3R5bGVSZXNvbHZlcjo6bG9jYXRlQ291c2luTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5
bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlUmVzb2x2ZXI6OnN0
eWxlRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjpwc2V1
ZG9TdHlsZUZvckRhdGFHcmlkQ29sdW1uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxl
UmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRGF0YUdyaWRDb2x1bW5IZWFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjpjYWNoZUJvcmRlckFuZEJhY2tncm91bmQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6c3R5bGVSdWxlc0ZvckVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVS
dWxlc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6
Y2hlY2tTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjpT
ZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU3R5bGVSZXNvbHZlcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0Ns
YXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlUmVzb2x2ZXI6OmFkZFZhcmlhYmxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFi
bGVEZXBlbmRlbnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NSdWxlU2V0OjphZGRSdWxl
c0Zyb21TaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjphcHBs
eURlY2xhcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjpt
YXRjaFBhZ2VSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjpt
YXRjaFBhZ2VSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNv
bHZlcjo6aXNMZWZ0UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVy
Ojppc0ZpcnN0UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjpw
YWdlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5VG9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlUmVzb2x2ZXI6OmFw
cGx5UGFnZVNpemVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29s
dmVyOjpwYWdlU2l6ZUZyb21OYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlUmVz
b2x2ZXI6Om1tTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlUmVzb2x2ZXI6
OmluY2hMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6bWFw
RmlsbEF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6
bWFwRmlsbENsaXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6bWFw
RmlsbENvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjpt
YXBGaWxsT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlUmVzb2x2ZXI6OnN0
eWxlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6bWFwRmls
bEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxS
ZXBlYXRYKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxS
ZXBlYXRZKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxYUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFlQ
b3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjptYXBBbmlt
YXRpb25EZWxheSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjptYXBB
bmltYXRpb25EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZl
cjo6bWFwQW5pbWF0aW9uRHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVS
ZXNvbHZlcjo6bWFwQW5pbWF0aW9uRmlsbE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uTmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25QbGF5U3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uUHJvcGVydHkp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uVGlt
aW5nRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6bWFw
TmluZVBpZWNlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6
Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJl
c29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5
bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlUmVzb2x2ZXI6OmZvbnRTaXplRm9yS2V5d29y
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjpsYXJnZXJGb250U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjpzbWFsbGVyRm9udFNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6Z2V0Q29sb3JGcm9t
UHJpbWl0aXZlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVSZXNvbHZlcjo6
aGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVS
ZXNvbHZlcjo6YWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclN0eWxlUmVzb2x2ZXI6OmFmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjpTZWxlY3RvckNoZWNrZXI6
OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGVS
ZXNvbHZlcjo6U2VsZWN0b3JDaGVja2VyOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclN0eWxlUmVzb2x2ZXI6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMp
OgorICAgICAgICAqIGNzcy9SZW5kZXJTdHlsZVJlc29sdmVyLmg6IENvcGllZCBmcm9tIFdlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaC4KKyAgICAgICAgKiBjc3MvU1ZHQ1NTU3R5bGVTZWxl
Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZVJlc29sdmVyOjphcHBseVNW
R1Byb3BlcnR5KToKKyAgICAgICAgKiBjc3MvU3R5bGVNZWRpYS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZU1lZGlhOjptYXRjaE1lZGl1bSk6CisgICAgICAgICogY3NzL1dlYktpdENTU0tl
eWZyYW1lc1J1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZTo6c2V0TmFtZSk6CisgICAgICAgICogY3NzL1dlYktpdENTU01hdHJpeC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJLaXRDU1NNYXRyaXg6OnNldE1hdHJpeFZhbHVlKToKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlY2FsY1N0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjcmVhdGVTdHlsZVNlbGVjdG9yKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzdHls
ZVNlbGVjdG9yKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50Ojp3ZWJraXRNYXRjaGVzU2VsZWN0b3IpOgorICAgICAgICAqIGRvbS9JbnB1dEVs
ZW1lbnQuY3BwOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OnF1ZXJ5U2VsZWN0b3IpOgorICAgICAgICAqIGRvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNlbGVjdG9yTm9kZUxpc3QpOgorICAgICAgICAqIGRv
bS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6Zm9jdXNlZE9y
QWN0aXZlU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAg
ICAgICogaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnN0eWxl
U2VsZWN0b3IpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAg
KiBodG1sL0hUTUxEb2N1bWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MTm9TY3JpcHRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwOgorICAgICAg
ICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3R5
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9y
UHNldWRvRWxlbWVudHMpOgorICAgICAgICAqIGxvYWRlci9QbGFjZWhvbGRlckRvY3VtZW50LmNw
cDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgICogcGFnZS9GcmFtZVZp
ZXcuY3BwOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
OjphbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnZpc2l0
ZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRl
QW5pbWF0aW9ucyk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24u
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvUmVuZGVyVGhlbWVBbmRyb2lkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6YWRqdXN0QnV0dG9uU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1c3RUZXh0RmllbGRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJvaWQ6OmFkanVzdFRleHRB
cmVhU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1c3RT
ZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6
YWRqdXN0TGlzdGJveFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9p
ZDo6YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFu
ZHJvaWQ6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAqIHBsYXRmb3JtL2Fu
ZHJvaWQvUmVuZGVyVGhlbWVBbmRyb2lkLmg6CisgICAgICAgICogcGxhdGZvcm0vZWZsL1JlbmRl
clRoZW1lRWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjphZGp1c3RD
aGVja2JveFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjphZGp1c3RS
YWRpb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjphZGp1c3RCdXR0
b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0TWVudUxp
c3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0VGV4dEZp
ZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFkanVzdFRleHRB
cmVhU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJj
aEZpZWxkRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZs
OjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjphZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVF
ZmwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RUZXh0RmllbGRTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmg6CisgICAgICAgICogcGxhdGZv
cm0vaGFpa3UvUmVuZGVyVGhlbWVIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUhhaWt1OjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlr
dS9SZW5kZXJUaGVtZUhhaWt1Lmg6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RCdXR0b25TdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RUZXh0RmllbGRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RUZXh0QXJlYVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdE1lbnVMaXN0U3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0TWVudUxpc3RCdXR0b25T
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RQcm9ncmVzc0Jh
clN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdFNsaWRlclRy
YWNrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVy
VGh1bWJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RTZWFy
Y2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRdDo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0Lmg6CisgICAgICAgICogcGxh
dGZvcm0vd3gvUmVuZGVyVGhlbWVXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVd4OjphZGp1c3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVd4
OjphZGp1c3RUZXh0RmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVd4
OjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV3g6
OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJE
YXRhR3JpZC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklucHV0U3BlZWNoLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklucHV0U3BlZWNoOjphZGp1c3RJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbnB1dFNwZWVjaC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0Q2hlY2tib3hTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0UmFkaW9TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RPdXRlclNwaW5CdXR0b25TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFRleHRBcmVhU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdElucHV0RmllbGRTcGVlY2hCdXR0b25TdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0TWV0ZXJTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25T
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRE
ZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtTGludXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1
bUxpbnV4OjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVz
dFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtV2luOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjphZGp1c3RQcm9ncmVzc0JhclN0eWxl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzZXRGb250
RnJvbUNvbnRyb2xTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1
c3RUZXh0RmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0VGV4dEFyZWFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0UHJvZ3Jlc3NCYXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9u
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVNhZmFyaTo6c2V0Rm9udEZyb21Db250cm9sU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTbGlkZXJUaHVtYlN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hG
aWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lU2FmYXJpLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RNZW51TGlzdFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVs
ZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2lu
OjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRqdXN0QnV0dG9uU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdFRleHRGaWVsZFN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5jZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVdpbmNlOjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lV2luY2U6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVXaW5jZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25T
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbmNlOjphZGp1c3RTZWFyY2hG
aWVsZERlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbmNl
OjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVXaW5jZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW5jZTo6YWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luY2UuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luY2U6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luY2U6OmFkanVzdFRleHRGaWVsZFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luY2U6OmFkanVzdFRleHRBcmVhU3R5bGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OmlzT3ZlcmZsb3dIaWRkZW4pOgorICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
dHlsZTo6aXNTdHlsZUF2YWlsYWJsZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIHJlbmRlcmluZy9zdHls
ZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oOgorICAgICAgICAqIHN2Zy9TVkdDbGlwUGF0
aEVsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwOgorICAg
ICAgICAqIHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdNYXNr
RWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAg
ICAqIHN2Zy9TVkdVc2VFbGVtZW50LmNwcDoKKwogMjAxMC0wNy0yMCAgQWxleGV5IFByb3NrdXJ5
YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
SW5kZXg6IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQu
bWsJKHJldmlzaW9uIDYzODIwKQorKysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkp
CkBAIC02MSw3ICs2MSw3IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSBcCiAJY3NzL0NTU1NlbGVjdG9y
TGlzdC5jcHAgXAogCWNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBcCiAJY3NzL0NTU1N0eWxl
UnVsZS5jcHAgXAotCWNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBcCisJY3NzL1JlbmRlclN0eWxl
UmVzb2x2ZXIuY3BwIFwKIAljc3MvQ1NTU3R5bGVTaGVldC5jcHAgXAogCWNzcy9DU1NUaW1pbmdG
dW5jdGlvblZhbHVlLmNwcCBcCiAJY3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcCBcCkluZGV4
OiBXZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ01ha2VMaXN0
cy50eHQJKHJldmlzaW9uIDYzODIwKQorKysgV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtNzM4LDcgKzczOCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBjc3Mv
Q1NTU2VsZWN0b3JMaXN0LmNwcAogICAgIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAogICAg
IGNzcy9DU1NTdHlsZVJ1bGUuY3BwCi0gICAgY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisgICAg
Y3NzL1JlbmRlclN0eWxlUmVzb2x2ZXIuY3BwCiAgICAgY3NzL0NTU1N0eWxlU2hlZXQuY3BwCiAg
ICAgY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwCiAgICAgY3NzL0NTU1VuaWNvZGVSYW5n
ZVZhbHVlLmNwcApAQCAtMTc2OSw3ICsxNzY5LDcgQEAgQUREX1NPVVJDRV9ERVJJVkVEX0RFUEVO
REVOQ0lFUygke1dFQkNPUgogQUREX1NPVVJDRV9ERVJJVkVEX0RFUEVOREVOQ0lFUygke1dFQkNP
UkVfRElSfS9odG1sL0xlZ2FjeVByZWxvYWRTY2FubmVyLmNwcCBIVE1MRW50aXR5TmFtZXMuY3Bw
KQogQUREX1NPVVJDRV9ERVJJVkVEX0RFUEVOREVOQ0lFUygke1dFQkNPUkVfRElSfS9odG1sL0hU
TUxFbnRpdHlQYXJzZXIuY3BwIEhUTUxFbnRpdHlOYW1lcy5jcHApCiBBRERfU09VUkNFX0RFUklW
RURfREVQRU5ERU5DSUVTKCR7V0VCQ09SRV9ESVJ9L2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcCBN
YXRoTUxOYW1lcy5jcHApCi1BRERfU09VUkNFX0RFUklWRURfREVQRU5ERU5DSUVTKCR7V0VCQ09S
RV9ESVJ9L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBVc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEu
Y3BwIFVzZXJBZ2VudFN0eWxlU2hlZXRzLmgpCitBRERfU09VUkNFX0RFUklWRURfREVQRU5ERU5D
SUVTKCR7V0VCQ09SRV9ESVJ9L2Nzcy9SZW5kZXJTdHlsZVJlc29sdmVyLmNwcCBVc2VyQWdlbnRT
dHlsZVNoZWV0c0RhdGEuY3BwIFVzZXJBZ2VudFN0eWxlU2hlZXRzLmgpCiAKIEdFTkVSQVRFX0RP
TV9OQU1FU19GQUNUT1JZKEhUTUwgJHtXRUJDT1JFX0RJUn0vaHRtbC9IVE1MVGFnTmFtZXMuaW4g
JHtXRUJDT1JFX0RJUn0vaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4gIiR7SFRNTF9GRUFUVVJF
U30iKQogR0VORVJBVEVfRE9NX05BTUVTX0ZBQ1RPUlkoTWF0aE1MICR7V0VCQ09SRV9ESVJ9L21h
dGhtbC9tYXRodGFncy5pbiAke1dFQkNPUkVfRElSfS9tYXRobWwvbWF0aGF0dHJzLmluICIke01B
VEhNTF9GRUFUVVJFU30iKQpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA2MzgyMCkKKysrIFdlYkNvcmUv
R05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTkwOCw4ICs5MDgsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaCBcCiAJV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcCBcCiAJV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmgg
XAotCVdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIFwKLQlXZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmggXAorCVdlYkNvcmUvY3NzL1JlbmRlclN0eWxlUmVzb2x2ZXIuY3BwIFwK
KwlXZWJDb3JlL2Nzcy9SZW5kZXJTdHlsZVJlc29sdmVyLmggXAogCVdlYkNvcmUvY3NzL0NTU1N0
eWxlU2hlZXQuY3BwIFwKIAlXZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmggXAogCVdlYkNvcmUv
Y3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5n
eXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA2MzgyMCkK
KysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAzLDggKzEwMDMs
OCBAQAogICAgICAgICAgICAgJ2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgnLAogICAgICAgICAg
ICAgJ2Nzcy9DU1NTdHlsZVJ1bGUuY3BwJywKICAgICAgICAgICAgICdjc3MvQ1NTU3R5bGVSdWxl
LmgnLAotICAgICAgICAgICAgJ2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCcsCi0gICAgICAgICAg
ICAnY3NzL0NTU1N0eWxlU2VsZWN0b3IuaCcsCisgICAgICAgICAgICAnY3NzL1JlbmRlclN0eWxl
UmVzb2x2ZXIuY3BwJywKKyAgICAgICAgICAgICdjc3MvUmVuZGVyU3R5bGVSZXNvbHZlci5oJywK
ICAgICAgICAgICAgICdjc3MvQ1NTU3R5bGVTaGVldC5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9D
U1NTdHlsZVNoZWV0LmgnLAogICAgICAgICAgICAgJ2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVl
LmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS5wcm8JKHJldmlzaW9uIDYzODIwKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29y
a2luZyBjb3B5KQpAQCAtNDMwLDcgKzQzMCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGNzcy9DU1NT
ZWdtZW50ZWRGb250RmFjZS5jcHAgXAogICAgIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBc
CiAgICAgY3NzL0NTU1N0eWxlUnVsZS5jcHAgXAotICAgIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cCBcCisgICAgY3NzL1JlbmRlclN0eWxlUmVzb2x2ZXIuY3BwIFwKICAgICBjc3MvQ1NTU3R5bGVT
aGVldC5jcHAgXAogICAgIGNzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCBcCiAgICAgY3Nz
L0NTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcCBcCkBAIC0xMTkxLDcgKzExOTEsNyBAQCBIRUFERVJT
ICs9IFwKICAgICBjc3MvQ1NTU2VsZWN0b3JMaXN0LmggXAogICAgIGNzcy9DU1NTdHlsZURlY2xh
cmF0aW9uLmggXAogICAgIGNzcy9DU1NTdHlsZVJ1bGUuaCBcCi0gICAgY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuaCBcCisgICAgY3NzL1JlbmRlclN0eWxlUmVzb2x2ZXIuaCBcCiAgICAgY3NzL0NTU1N0
eWxlU2hlZXQuaCBcCiAgICAgY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCBcCiAgICAgY3Nz
L0NTU1VuaWNvZGVSYW5nZVZhbHVlLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCShyZXZpc2lvbiA2MzgyMCkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI4NTMzLDExICsyODUzMywxMSBAQAogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcQ1NT
U3R5bGVTZWxlY3Rvci5jcHAiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFJlbmRlclN0eWxl
UmVzb2x2ZXIuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cY3NzXENTU1N0eWxlU2VsZWN0b3IuaCINCisJCQkJUmVsYXRpdmVQYXRoPSIu
Llxjc3NcUmVuZGVyU3R5bGVSZXNvbHZlci5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxG
aWxlDQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDYzODIwKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTQ2MDEsOCArNDYwMSw4IEBACiAJCUJDNzcyQjNDMEM0RUE5
MUUwMDgzMjg1RiAvKiBDU1NIZWxwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDNzcyQjM2MEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NIZWxwZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzc3MkIz
RDBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNzcyQjM3MEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQ
YXJzZXIuY3BwICovOyB9OwogCQlCQzc3MkIzRTBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTUGFyc2Vy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkIz
ODBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTUGFyc2VyLmggKi87IH07Ci0JCUJDNzcyQjNGMEM0RUE5
MUUwMDgzMjg1RiAvKiBDU1NTdHlsZVNlbGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNzcyQjM5MEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NT
dHlsZVNlbGVjdG9yLmNwcCAqLzsgfTsKLQkJQkM3NzJCNDAwQzRFQTkxRTAwODMyODVGIC8qIENT
U1N0eWxlU2VsZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDNzcyQjNBMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NTdHlsZVNlbGVjdG9yLmggKi87
IH07CisJCUJDNzcyQjNGMEM0RUE5MUUwMDgzMjg1RiAvKiBSZW5kZXJTdHlsZVJlc29sdmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNzcyQjM5
MEM0RUE5MUUwMDgzMjg1RiAvKiBSZW5kZXJTdHlsZVJlc29sdmVyLmNwcCAqLzsgfTsKKwkJQkM3
NzJCNDAwQzRFQTkxRTAwODMyODVGIC8qIFJlbmRlclN0eWxlUmVzb2x2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNzcyQjNBMEM0RUE5MUUwMDgz
Mjg1RiAvKiBSZW5kZXJTdHlsZVJlc29sdmVyLmggKi87IH07CiAJCUJDNzcyQzQ2MEM0RUIyQzYw
MDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkM0NDBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJl
cXVlc3QuY3BwICovOyB9OwogCQlCQzc3MkM0NzBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJl
cXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
NzcyQzQ1MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5oICovOyB9OwogCQlCQzc3
MkM0RTBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkM0QzBDNEVCMzA0MDA4MzI4
NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5jcHAgKi87IH07CkBAIC0xMDIyNyw4ICsxMDIyNyw4IEBA
CiAJCUJDNzcyQjM2MEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NIZWxwZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0hlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzc3MkIzNzBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTUGFyc2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQYXJzZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzc3MkIzODBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTUGFyc2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NQYXJzZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM3NzJCMzkwQzRFQTkxRTAwODMyODVGIC8qIENTU1N0
eWxlU2VsZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENT
U1N0eWxlU2VsZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzc3MkIz
QTBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTU3R5bGVTZWxlY3Rvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ1NTU3R5bGVTZWxlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCQzc3MkIzOTBDNEVBOTFFMDA4MzI4NUYgLyogUmVuZGVyU3R5bGVSZXNvbHZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU3R5bGVS
ZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDNzcyQjNBMEM0RUE5
MUUwMDgzMjg1RiAvKiBSZW5kZXJTdHlsZVJlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJTdHlsZVJlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDNzcyQzQ0MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MSHR0cFJlcXVlc3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzc3MkM0NTBDNEVCMkM2MDA4MzI4NUYg
LyogWE1MSHR0cFJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhN
TEh0dHBSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNzcyQzRDMEM0
RUIzMDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBNSU1FVHlwZVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE2NTAwLDggKzE2NTAwLDggQEAKIAkJCQlBODBFNkNDNTBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTU3R5bGVSdWxlLmNwcCAqLywKIAkJCQlBODBFNkNFMjBBMTk4OUNBMDA3
RkI4QzUgLyogQ1NTU3R5bGVSdWxlLmggKi8sCiAJCQkJODVDNTZDQTEwQUE4OUFCNDAwRDk1NzU1
IC8qIENTU1N0eWxlUnVsZS5pZGwgKi8sCi0JCQkJQkM3NzJCMzkwQzRFQTkxRTAwODMyODVGIC8q
IENTU1N0eWxlU2VsZWN0b3IuY3BwICovLAotCQkJCUJDNzcyQjNBMEM0RUE5MUUwMDgzMjg1RiAv
KiBDU1NTdHlsZVNlbGVjdG9yLmggKi8sCisJCQkJQkM3NzJCMzkwQzRFQTkxRTAwODMyODVGIC8q
IFJlbmRlclN0eWxlUmVzb2x2ZXIuY3BwICovLAorCQkJCUJDNzcyQjNBMEM0RUE5MUUwMDgzMjg1
RiAvKiBSZW5kZXJTdHlsZVJlc29sdmVyLmggKi8sCiAJCQkJQThFQTgwMDAwQTE5NTE2RTAwQThF
RjVGIC8qIENTU1N0eWxlU2hlZXQuY3BwICovLAogCQkJCUE4RUE3RkZGMEExOTUxNkUwMEE4RUY1
RiAvKiBDU1NTdHlsZVNoZWV0LmggKi8sCiAJCQkJODU4QzM5MTAwQUE4RkYwMDAwQjE4N0E0IC8q
IENTU1N0eWxlU2hlZXQuaWRsICovLApAQCAtMTczOTQsNyArMTczOTQsNyBAQAogCQkJCUU0QzE3
ODlCMEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NTZWxlY3Rvckxpc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4MEU2RTBGMEExOTkxMUMwMDdGQjhDNSAvKiBDU1NTdHlsZURlY2xhcmF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODBFNkQwQzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTU3R5bGVSdWxl
LmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzc3MkI0MDBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTU3R5
bGVTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkM3NzJCNDAwQzRFQTkxRTAwODMyODVG
IC8qIFJlbmRlclN0eWxlUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE4MDA3MEEx
OTUxNkUwMEE4RUY1RiAvKiBDU1NTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzgw
Qzk4ODBDRDI5NEVFMDBBMEI3QjMgLyogQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzcxRjUzRTkwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZh
bHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTIwMzA4LDcgKzIwMzA4LDcgQEAKIAkJCQlFNEMxNzg5
QTBFRTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4MEU2RTEwMEExOTkxMUMwMDdGQjhDNSAvKiBDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4MEU2Q0VGMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NTdHlsZVJ1
bGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkM3NzJCM0YwQzRFQTkxRTAwODMyODVGIC8qIENT
U1N0eWxlU2VsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkM3NzJCM0YwQzRFQTkxRTAw
ODMyODVGIC8qIFJlbmRlclN0eWxlUmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThF
QTgwMDgwQTE5NTE2RTAwQThFRjVGIC8qIENTU1N0eWxlU2hlZXQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM4MEM5ODcwQ0QyOTRFRTAwQTBCN0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzcxRjUzRUEwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1Vu
aWNvZGVSYW5nZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9jc3MvQ1NT
R3JhZGllbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRW
YWx1ZS5jcHAJKHJldmlzaW9uIDYzODIwKQorKysgV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJDU1NHcmFkaWVudFZhbHVlLmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNl
bGVjdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIkdl
bmVyYXRlZEltYWdlLmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJJbWFnZS5o
IgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuY3BwCShyZXZpc2lvbiA2MzgyMCkKKysrIFdlYkNvcmUvY3NzL0NTU1Bh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNjksNyArMjI2OSw3IEBAIENTU1BhcnNlcjo6
U2l6ZVBhcmFtZXRlclR5cGUgQ1NTUGFyc2VyOjoKICAgICBjYXNlIENTU1ZhbHVlTGV0dGVyOgog
ICAgICAgICBpZiAocHJldlBhcmFtVHlwZSA9PSBOb25lIHx8IHByZXZQYXJhbVR5cGUgPT0gT3Jp
ZW50YXRpb24pIHsKICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0byBQYWdlIFNpemUgdGhlbiBP
cmllbnRhdGlvbiBvcmRlciBieSBwcmVwZW5kaW5nLgotICAgICAgICAgICAgLy8gVGhpcyBpcyBu
b3Qgc3BlY2lmaWVkIGJ5IHRoZSBDU1MzIFBhZ2VkIE1lZGlhIHNwZWNpZmljYXRpb24sIGJ1dCBm
b3Igc2ltcGxlciBwcm9jZXNzaW5nIGxhdGVyIChDU1NTdHlsZVNlbGVjdG9yOjphcHBseVBhZ2VT
aXplUHJvcGVydHkpLgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qgc3BlY2lmaWVkIGJ5IHRo
ZSBDU1MzIFBhZ2VkIE1lZGlhIHNwZWNpZmljYXRpb24sIGJ1dCBmb3Igc2ltcGxlciBwcm9jZXNz
aW5nIGxhdGVyIChSZW5kZXJTdHlsZVJlc29sdmVyOjphcHBseVBhZ2VTaXplUHJvcGVydHkpLgog
ICAgICAgICAgICAgcGFyc2VkVmFsdWVzLT5wcmVwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGVJZGVudGlmaWVyKHZhbHVlLT5pZCkpOwogICAgICAgICAgICAgcmV0dXJuIFBhZ2VTaXplOwog
ICAgICAgICB9CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gNjM4MjAp
CisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2NzA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEpl
bnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNo
b2xhcyBTaGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Vi
a2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCi0KLSNpbmNsdWRl
ICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJDU1NCb3JkZXJJbWFnZVZhbHVlLmgiCi0jaW5jbHVk
ZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ZvbnRGYWNlUnVsZS5oIgot
I2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJDU1NNZWRpYVJ1bGUuaCIKLSNp
bmNsdWRlICJDU1NQYWdlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1BhcnNlci5oIgotI2luY2x1ZGUg
IkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVz
LmgiCi0jaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUnVsZUxpc3Qu
aCIKLSNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5o
IgotI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIK
LSNpbmNsdWRlICJDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVM
aXN0LmgiCi0jaW5jbHVkZSAiQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZS5oIgotI2luY2x1ZGUg
IkNTU1ZhcmlhYmxlc0RlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTVmFyaWFibGVzUnVsZS5o
IgotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiQ291bnRlci5oIgotI2luY2x1
ZGUgIkNvdW50ZXJDb250ZW50LmgiCi0jaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCi0jaW5j
bHVkZSAiRm9udEZhbWlseVZhbHVlLmgiCi0jaW5jbHVkZSAiRm9udFZhbHVlLmgiCi0jaW5jbHVk
ZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1l
bnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCi0jaW5jbHVkZSAiTGlua0hhc2guaCIK
LSNpbmNsdWRlICJNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIk1hdHJp
eFRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgotI2luY2x1ZGUg
Ik1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKLSNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKLSNp
bmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiUGFpci5o
IgotI2luY2x1ZGUgIlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAi
UmVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgotI2luY2x1ZGUgIlJlbmRlclNj
cm9sbGJhclRoZW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKLSNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5o
IgotI2luY2x1ZGUgIlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiU2VsZWN0
aW9uQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2hhZG93
VmFsdWUuaCIKLSNpbmNsdWRlICJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAi
U3R5bGVDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1hZ2UuaCIKLSNp
bmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgotI2luY2x1ZGUgIlRleHQuaCIKLSNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbi5oIgotI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCi0jaW5jbHVkZSAiV2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlLmgiCi0jaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5o
IgotI2luY2x1ZGUgIldlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgiCi0jaW5jbHVkZSAiWE1MTmFt
ZXMuaCIKLSNpbmNsdWRlICJsb2FkZXIuaCIKLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JU
KQotI2luY2x1ZGUgIkRhc2hib2FyZFJlZ2lvbi5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU1ZH
KQotI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2VuZGlm
Ci0KLSNpZiBFTkFCTEUoV01MKQotI2luY2x1ZGUgIldNTE5hbWVzLmgiCi0jZW5kaWYKLQotI2lm
IFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPHF3ZWJoaXN0b3J5aW50ZXJmYWNlLmg+Ci0jZW5kaWYK
LQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwotCi0vLyAjZGVmaW5lIFNUWUxFX1NIQVJJTkdfU1RBVFMgMQot
Ci0jZGVmaW5lIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKLWlmIChpc0luaGVyaXQpIHsg
XAotICAgIG1fc3R5bGUtPnNldCMjUHJvcChtX3BhcmVudFN0eWxlLT5wcm9wKCkpOyBcCi0gICAg
cmV0dXJuOyBcCi19Ci0KLSNkZWZpbmUgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwg
UHJvcCkgXAotSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAotaWYgKGlzSW5pdGlhbCkgeyBc
Ci0gICAgbV9zdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBc
Ci0gICAgcmV0dXJuOyBcCi19Ci0KLSNkZWZpbmUgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxf
V0lUSF9WQUxVRShwcm9wLCBQcm9wLCBWYWx1ZSkgXAotSEFORExFX0lOSEVSSVQocHJvcCwgUHJv
cCkgXAotaWYgKGlzSW5pdGlhbCkgeyBcCi0gICAgbV9zdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0
eWxlOjppbml0aWFsIyNWYWx1ZSgpKTtcCi0gICAgcmV0dXJuO1wKLX0KLQotI2RlZmluZSBIQU5E
TEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKHByb3AsIFByb3ApIFwKLUhBTkRM
RV9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKLWlmIChwcmltaXRpdmVWYWx1ZSkg
XAotICAgIG1fc3R5bGUtPnNldCMjUHJvcCgqcHJpbWl0aXZlVmFsdWUpOwotCi0jZGVmaW5lIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkVfV0lUSF9WQUxVRShwcm9wLCBQ
cm9wLCBWYWx1ZSkgXAotSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfV0lUSF9WQUxVRShwcm9w
LCBQcm9wLCBWYWx1ZSkgXAotaWYgKHByaW1pdGl2ZVZhbHVlKSBcCi0gICAgbV9zdHlsZS0+c2V0
IyNQcm9wKCpwcmltaXRpdmVWYWx1ZSk7Ci0KLSNkZWZpbmUgSEFORExFX0ZJTExfTEFZRVJfSU5I
RVJJVF9BTkRfSU5JVElBTChsYXllclR5cGUsIExheWVyVHlwZSwgcHJvcCwgUHJvcCkgXAotaWYg
KGlzSW5oZXJpdCkgeyBcCi0gICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSBtX3N0eWxlLT5hY2Nl
c3MjI0xheWVyVHlwZSMjTGF5ZXJzKCk7IFwKLSAgICBGaWxsTGF5ZXIqIHByZXZDaGlsZCA9IDA7
IFwKLSAgICBjb25zdCBGaWxsTGF5ZXIqIGN1cnJQYXJlbnQgPSBtX3BhcmVudFN0eWxlLT5sYXll
clR5cGUjI0xheWVycygpOyBcCi0gICAgd2hpbGUgKGN1cnJQYXJlbnQgJiYgY3VyclBhcmVudC0+
aXMjI1Byb3AjI1NldCgpKSB7IFwKLSAgICAgICAgaWYgKCFjdXJyQ2hpbGQpIHsgXAotICAgICAg
ICAgICAgLyogTmVlZCB0byBtYWtlIGEgbmV3IGxheWVyLiovIFwKLSAgICAgICAgICAgIGN1cnJD
aGlsZCA9IG5ldyBGaWxsTGF5ZXIoTGF5ZXJUeXBlIyNGaWxsTGF5ZXIpOyBcCi0gICAgICAgICAg
ICBwcmV2Q2hpbGQtPnNldE5leHQoY3VyckNoaWxkKTsgXAotICAgICAgICB9IFwKLSAgICAgICAg
Y3VyckNoaWxkLT5zZXQjI1Byb3AoY3VyclBhcmVudC0+cHJvcCgpKTsgXAotICAgICAgICBwcmV2
Q2hpbGQgPSBjdXJyQ2hpbGQ7IFwKLSAgICAgICAgY3VyckNoaWxkID0gcHJldkNoaWxkLT5uZXh0
KCk7IFwKLSAgICAgICAgY3VyclBhcmVudCA9IGN1cnJQYXJlbnQtPm5leHQoKTsgXAotICAgIH0g
XAotICAgIFwKLSAgICB3aGlsZSAoY3VyckNoaWxkKSB7IFwKLSAgICAgICAgLyogUmVzZXQgYW55
IHJlbWFpbmluZyBsYXllcnMgdG8gbm90IGhhdmUgdGhlIHByb3BlcnR5IHNldC4gKi8gXAotICAg
ICAgICBjdXJyQ2hpbGQtPmNsZWFyIyNQcm9wKCk7IFwKLSAgICAgICAgY3VyckNoaWxkID0gY3Vy
ckNoaWxkLT5uZXh0KCk7IFwKLSAgICB9IFwKLX0gZWxzZSBpZiAoaXNJbml0aWFsKSB7IFwKLSAg
ICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IG1fc3R5bGUtPmFjY2VzcyMjTGF5ZXJUeXBlIyNMYXll
cnMoKTsgXAotICAgIGN1cnJDaGlsZC0+c2V0IyNQcm9wKEZpbGxMYXllcjo6aW5pdGlhbEZpbGwj
I1Byb3AoTGF5ZXJUeXBlIyNGaWxsTGF5ZXIpKTsgXAotICAgIGZvciAoY3VyckNoaWxkID0gY3Vy
ckNoaWxkLT5uZXh0KCk7IGN1cnJDaGlsZDsgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCkp
IFwKLSAgICAgICAgY3VyckNoaWxkLT5jbGVhciMjUHJvcCgpOyBcCi19Ci0KLSNkZWZpbmUgSEFO
RExFX0ZJTExfTEFZRVJfVkFMVUUobGF5ZXJUeXBlLCBMYXllclR5cGUsIHByb3AsIFByb3AsIHZh
bHVlKSB7IFwKLUhBTkRMRV9GSUxMX0xBWUVSX0lOSEVSSVRfQU5EX0lOSVRJQUwobGF5ZXJUeXBl
LCBMYXllclR5cGUsIHByb3AsIFByb3ApIFwKLWlmIChpc0luaGVyaXQgfHwgaXNJbml0aWFsKSBc
Ci0gICAgcmV0dXJuOyBcCi1GaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IG1fc3R5bGUtPmFjY2VzcyMj
TGF5ZXJUeXBlIyNMYXllcnMoKTsgXAotRmlsbExheWVyKiBwcmV2Q2hpbGQgPSAwOyBcCi1pZiAo
dmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsgXAotICAgIC8qIFdhbGsgZWFjaCB2YWx1ZSBhbmQgcHV0
IGl0IGludG8gYSBsYXllciwgY3JlYXRpbmcgbmV3IGxheWVycyBhcyBuZWVkZWQuICovIFwKLSAg
ICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZh
bHVlKTsgXAotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdmFsdWVMaXN0LT5sZW5n
dGgoKTsgaSsrKSB7IFwKLSAgICAgICAgaWYgKCFjdXJyQ2hpbGQpIHsgXAotICAgICAgICAgICAg
LyogTmVlZCB0byBtYWtlIGEgbmV3IGxheWVyIHRvIGhvbGQgdGhpcyB2YWx1ZSAqLyBcCi0gICAg
ICAgICAgICBjdXJyQ2hpbGQgPSBuZXcgRmlsbExheWVyKExheWVyVHlwZSMjRmlsbExheWVyKTsg
XAotICAgICAgICAgICAgcHJldkNoaWxkLT5zZXROZXh0KGN1cnJDaGlsZCk7IFwKLSAgICAgICAg
fSBcCi0gICAgICAgIG1hcEZpbGwjI1Byb3AoY3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soaSkpOyBcCi0gICAgICAgIHByZXZDaGlsZCA9IGN1cnJDaGlsZDsgXAot
ICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgXAotICAgIH0gXAotfSBlbHNl
IHsgXAotICAgIG1hcEZpbGwjI1Byb3AoY3VyckNoaWxkLCB2YWx1ZSk7IFwKLSAgICBjdXJyQ2hp
bGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgXAotfSBcCi13aGlsZSAoY3VyckNoaWxkKSB7IFwKLSAg
ICAvKiBSZXNldCBhbGwgcmVtYWluaW5nIGxheWVycyB0byBub3QgaGF2ZSB0aGUgcHJvcGVydHkg
c2V0LiAqLyBcCi0gICAgY3VyckNoaWxkLT5jbGVhciMjUHJvcCgpOyBcCi0gICAgY3VyckNoaWxk
ID0gY3VyckNoaWxkLT5uZXh0KCk7IFwKLX0gfQotCi0jZGVmaW5lIEhBTkRMRV9CQUNLR1JPVU5E
X0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJvcCkgXAotSEFORExFX0ZJTExfTEFZRVJfSU5I
RVJJVF9BTkRfSU5JVElBTChiYWNrZ3JvdW5kLCBCYWNrZ3JvdW5kLCBwcm9wLCBQcm9wKQotCi0j
ZGVmaW5lIEhBTkRMRV9CQUNLR1JPVU5EX1ZBTFVFKHByb3AsIFByb3AsIHZhbHVlKSBcCi1IQU5E
TEVfRklMTF9MQVlFUl9WQUxVRShiYWNrZ3JvdW5kLCBCYWNrZ3JvdW5kLCBwcm9wLCBQcm9wLCB2
YWx1ZSkKLQotI2RlZmluZSBIQU5ETEVfTUFTS19JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFBy
b3ApIFwKLUhBTkRMRV9GSUxMX0xBWUVSX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFzaywgTWFzaywg
cHJvcCwgUHJvcCkKLQotI2RlZmluZSBIQU5ETEVfTUFTS19WQUxVRShwcm9wLCBQcm9wLCB2YWx1
ZSkgXAotSEFORExFX0ZJTExfTEFZRVJfVkFMVUUobWFzaywgTWFzaywgcHJvcCwgUHJvcCwgdmFs
dWUpCi0KLSNkZWZpbmUgSEFORExFX0FOSU1BVElPTl9JTkhFUklUX0FORF9JTklUSUFMKHByb3As
IFByb3ApIFwKLWlmIChpc0luaGVyaXQpIHsgXAotICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBt
X3N0eWxlLT5hY2Nlc3NBbmltYXRpb25zKCk7IFwKLSAgICBjb25zdCBBbmltYXRpb25MaXN0KiBw
YXJlbnRMaXN0ID0gbV9wYXJlbnRTdHlsZS0+YW5pbWF0aW9ucygpOyBcCi0gICAgc2l6ZV90IGkg
PSAwLCBwYXJlbnRTaXplID0gcGFyZW50TGlzdCA/IHBhcmVudExpc3QtPnNpemUoKSA6IDA7IFwK
LSAgICBmb3IgKCA7IGkgPCBwYXJlbnRTaXplICYmIHBhcmVudExpc3QtPmFuaW1hdGlvbihpKS0+
aXMjI1Byb3AjI1NldCgpOyArK2kpIHsgXAotICAgICAgICBpZiAobGlzdC0+c2l6ZSgpIDw9IGkp
IFwKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgpKTsgXAotICAg
ICAgICBsaXN0LT5hbmltYXRpb24oaSktPnNldCMjUHJvcChwYXJlbnRMaXN0LT5hbmltYXRpb24o
aSktPnByb3AoKSk7IFwKLSAgICB9IFwKLSAgICBcCi0gICAgLyogUmVzZXQgYW55IHJlbWFpbmlu
ZyBhbmltYXRpb25zIHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICovIFwKLSAgICBmb3Ig
KCA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgXAotICAgICAgICBsaXN0LT5hbmltYXRpb24oaSkt
PmNsZWFyIyNQcm9wKCk7IFwKLX0gZWxzZSBpZiAoaXNJbml0aWFsKSB7IFwKLSAgICBBbmltYXRp
b25MaXN0KiBsaXN0ID0gbV9zdHlsZS0+YWNjZXNzQW5pbWF0aW9ucygpOyBcCi0gICAgaWYgKGxp
c3QtPmlzRW1wdHkoKSkgXAotICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUo
KSk7IFwKLSAgICBsaXN0LT5hbmltYXRpb24oMCktPnNldCMjUHJvcChBbmltYXRpb246OmluaXRp
YWxBbmltYXRpb24jI1Byb3AoKSk7IFwKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGxpc3Qt
PnNpemUoKTsgKytpKSBcCi0gICAgICAgIGxpc3QtPmFuaW1hdGlvbigwKS0+Y2xlYXIjI1Byb3Ao
KTsgXAotfQotCi0jZGVmaW5lIEhBTkRMRV9BTklNQVRJT05fVkFMVUUocHJvcCwgUHJvcCwgdmFs
dWUpIHsgXAotSEFORExFX0FOSU1BVElPTl9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3Ap
IFwKLWlmIChpc0luaGVyaXQgfHwgaXNJbml0aWFsKSBcCi0gICAgcmV0dXJuOyBcCi1BbmltYXRp
b25MaXN0KiBsaXN0ID0gbV9zdHlsZS0+YWNjZXNzQW5pbWF0aW9ucygpOyBcCi1zaXplX3QgY2hp
bGRJbmRleCA9IDA7IFwKLWlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgeyBcCi0gICAgLyogV2Fs
ayBlYWNoIHZhbHVlIGFuZCBwdXQgaXQgaW50byBhbiBhbmltYXRpb24sIGNyZWF0aW5nIG5ldyBh
bmltYXRpb25zIGFzIG5lZWRlZC4gKi8gXAotICAgIENTU1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0g
c3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOyBcCi0gICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCB2YWx1ZUxpc3QtPmxlbmd0aCgpOyBpKyspIHsgXAotICAgICAgICBpZiAo
Y2hpbGRJbmRleCA8PSBsaXN0LT5zaXplKCkpIFwKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChB
bmltYXRpb246OmNyZWF0ZSgpKTsgXAotICAgICAgICBtYXBBbmltYXRpb24jI1Byb3AobGlzdC0+
YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
aSkpOyBcCi0gICAgICAgICsrY2hpbGRJbmRleDsgXAotICAgIH0gXAotfSBlbHNlIHsgXAotICAg
IGlmIChsaXN0LT5pc0VtcHR5KCkpIFwKLSAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6
Y3JlYXRlKCkpOyBcCi0gICAgbWFwQW5pbWF0aW9uIyNQcm9wKGxpc3QtPmFuaW1hdGlvbihjaGls
ZEluZGV4KSwgdmFsdWUpOyBcCi0gICAgY2hpbGRJbmRleCA9IDE7IFwKLX0gXAotZm9yICggOyBj
aGlsZEluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK2NoaWxkSW5kZXgpIHsgXAotICAgIC8qIFJlc2V0
IGFsbCByZW1haW5pbmcgYW5pbWF0aW9ucyB0byBub3QgaGF2ZSB0aGUgcHJvcGVydHkgc2V0LiAq
LyBcCi0gICAgbGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLT5jbGVhciMjUHJvcCgpOyBcCi19
IFwKLX0KLQotI2RlZmluZSBIQU5ETEVfVFJBTlNJVElPTl9JTkhFUklUX0FORF9JTklUSUFMKHBy
b3AsIFByb3ApIFwKLWlmIChpc0luaGVyaXQpIHsgXAotICAgIEFuaW1hdGlvbkxpc3QqIGxpc3Qg
PSBtX3N0eWxlLT5hY2Nlc3NUcmFuc2l0aW9ucygpOyBcCi0gICAgY29uc3QgQW5pbWF0aW9uTGlz
dCogcGFyZW50TGlzdCA9IG1fcGFyZW50U3R5bGUtPnRyYW5zaXRpb25zKCk7IFwKLSAgICBzaXpl
X3QgaSA9IDAsIHBhcmVudFNpemUgPSBwYXJlbnRMaXN0ID8gcGFyZW50TGlzdC0+c2l6ZSgpIDog
MDsgXAotICAgIGZvciAoIDsgaSA8IHBhcmVudFNpemUgJiYgcGFyZW50TGlzdC0+YW5pbWF0aW9u
KGkpLT5pcyMjUHJvcCMjU2V0KCk7ICsraSkgeyBcCi0gICAgICAgIGlmIChsaXN0LT5zaXplKCkg
PD0gaSkgXAotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOyBc
Ci0gICAgICAgIGxpc3QtPmFuaW1hdGlvbihpKS0+c2V0IyNQcm9wKHBhcmVudExpc3QtPmFuaW1h
dGlvbihpKS0+cHJvcCgpKTsgXAotICAgIH0gXAotICAgIFwKLSAgICAvKiBSZXNldCBhbnkgcmVt
YWluaW5nIHRyYW5zaXRpb25zIHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICovIFwKLSAg
ICBmb3IgKCA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgXAotICAgICAgICBsaXN0LT5hbmltYXRp
b24oaSktPmNsZWFyIyNQcm9wKCk7IFwKLX0gZWxzZSBpZiAoaXNJbml0aWFsKSB7IFwKLSAgICBB
bmltYXRpb25MaXN0KiBsaXN0ID0gbV9zdHlsZS0+YWNjZXNzVHJhbnNpdGlvbnMoKTsgXAotICAg
IGlmIChsaXN0LT5pc0VtcHR5KCkpIFwKLSAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6
Y3JlYXRlKCkpOyBcCi0gICAgbGlzdC0+YW5pbWF0aW9uKDApLT5zZXQjI1Byb3AoQW5pbWF0aW9u
Ojppbml0aWFsQW5pbWF0aW9uIyNQcm9wKCkpOyBcCi0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkg
PCBsaXN0LT5zaXplKCk7ICsraSkgXAotICAgICAgICBsaXN0LT5hbmltYXRpb24oMCktPmNsZWFy
IyNQcm9wKCk7IFwKLX0KLQotI2RlZmluZSBIQU5ETEVfVFJBTlNJVElPTl9WQUxVRShwcm9wLCBQ
cm9wLCB2YWx1ZSkgeyBcCi1IQU5ETEVfVFJBTlNJVElPTl9JTkhFUklUX0FORF9JTklUSUFMKHBy
b3AsIFByb3ApIFwKLWlmIChpc0luaGVyaXQgfHwgaXNJbml0aWFsKSBcCi0gICAgcmV0dXJuOyBc
Ci1BbmltYXRpb25MaXN0KiBsaXN0ID0gbV9zdHlsZS0+YWNjZXNzVHJhbnNpdGlvbnMoKTsgXAot
c2l6ZV90IGNoaWxkSW5kZXggPSAwOyBcCi1pZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsgXAot
ICAgIC8qIFdhbGsgZWFjaCB2YWx1ZSBhbmQgcHV0IGl0IGludG8gYSB0cmFuc2l0aW9uLCBjcmVh
dGluZyBuZXcgYW5pbWF0aW9ucyBhcyBuZWVkZWQuICovIFwKLSAgICBDU1NWYWx1ZUxpc3QqIHZh
bHVlTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsgXAotICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdmFsdWVMaXN0LT5sZW5ndGgoKTsgaSsrKSB7IFwKLSAg
ICAgICAgaWYgKGNoaWxkSW5kZXggPD0gbGlzdC0+c2l6ZSgpKSBcCi0gICAgICAgICAgICBsaXN0
LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7IFwKLSAgICAgICAgbWFwQW5pbWF0aW9uIyNQ
cm9wKGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKGkpKTsgXAotICAgICAgICArK2NoaWxkSW5kZXg7IFwKLSAgICB9IFwKLX0gZWxz
ZSB7IFwKLSAgICBpZiAobGlzdC0+aXNFbXB0eSgpKSBcCi0gICAgICAgIGxpc3QtPmFwcGVuZChB
bmltYXRpb246OmNyZWF0ZSgpKTsgXAotICAgIG1hcEFuaW1hdGlvbiMjUHJvcChsaXN0LT5hbmlt
YXRpb24oY2hpbGRJbmRleCksIHZhbHVlKTsgXAotICAgIGNoaWxkSW5kZXggPSAxOyBcCi19IFwK
LWZvciAoIDsgY2hpbGRJbmRleCA8IGxpc3QtPnNpemUoKTsgKytjaGlsZEluZGV4KSB7IFwKLSAg
ICAvKiBSZXNldCBhbGwgcmVtYWluaW5nIHRyYW5zaXRpb25zIHRvIG5vdCBoYXZlIHRoZSBwcm9w
ZXJ0eSBzZXQuICovIFwKLSAgICBsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCktPmNsZWFyIyNQ
cm9wKCk7IFwKLX0gXAotfQotCi0jZGVmaW5lIEhBTkRMRV9JTkhFUklUX0NPTkQocHJvcElELCBw
cm9wLCBQcm9wKSBcCi1pZiAoaWQgPT0gcHJvcElEKSB7IFwKLSAgICBtX3N0eWxlLT5zZXQjI1By
b3AobV9wYXJlbnRTdHlsZS0+cHJvcCgpKTsgXAotICAgIHJldHVybjsgXAotfQotICAgIAotI2Rl
ZmluZSBIQU5ETEVfSU5IRVJJVF9DT05EX1dJVEhfQkFDS1VQKHByb3BJRCwgcHJvcCwgcHJvcEFs
dCwgUHJvcCkgXAotaWYgKGlkID09IHByb3BJRCkgeyBcCi0gICAgaWYgKG1fcGFyZW50U3R5bGUt
PnByb3AoKS5pc1ZhbGlkKCkpIFwKLSAgICAgICAgbV9zdHlsZS0+c2V0IyNQcm9wKG1fcGFyZW50
U3R5bGUtPnByb3AoKSk7IFwKLSAgICBlbHNlIFwKLSAgICAgICAgbV9zdHlsZS0+c2V0IyNQcm9w
KG1fcGFyZW50U3R5bGUtPnByb3BBbHQoKSk7IFwKLSAgICByZXR1cm47IFwKLX0KLQotI2RlZmlu
ZSBIQU5ETEVfSU5JVElBTF9DT05EKHByb3BJRCwgUHJvcCkgXAotaWYgKGlkID09IHByb3BJRCkg
eyBcCi0gICAgbV9zdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkp
OyBcCi0gICAgcmV0dXJuOyBcCi19Ci0KLSNkZWZpbmUgSEFORExFX0lOSVRJQUxfQ09ORF9XSVRI
X1ZBTFVFKHByb3BJRCwgUHJvcCwgVmFsdWUpIFwKLWlmIChpZCA9PSBwcm9wSUQpIHsgXAotICAg
IG1fc3R5bGUtPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjVmFsdWUoKSk7IFwKLSAg
ICByZXR1cm47IFwKLX0KLQotY2xhc3MgQ1NTUnVsZVNldCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7
Ci1wdWJsaWM6Ci0gICAgQ1NTUnVsZVNldCgpOwotICAgIH5DU1NSdWxlU2V0KCk7Ci0gICAgCi0g
ICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBDU1NSdWxlRGF0YUxpc3QqPiBB
dG9tUnVsZU1hcDsKLSAgICAKLSAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hl
ZXQqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgQ1NTU3R5bGVTZWxlY3RvciogPSAwKTsK
LQotICAgIHZvaWQgYWRkU3R5bGVSdWxlKFN0eWxlQmFzZSogaXRlbSk7Ci0gICAgdm9pZCBhZGRS
dWxlKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCk7Ci0gICAgdm9pZCBhZGRQ
YWdlUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpOwotICAgIHZvaWQg
YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwKLSAg
ICAgICAgICAgICAgICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwp
OwotICAgIAotICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0SURSdWxlcyhBdG9taWNTdHJpbmdJbXBs
KiBrZXkpIHsgcmV0dXJuIG1faWRSdWxlcy5nZXQoa2V5KTsgfQotICAgIENTU1J1bGVEYXRhTGlz
dCogZ2V0Q2xhc3NSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIG1fY2xhc3NS
dWxlcy5nZXQoa2V5KTsgfQotICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0VGFnUnVsZXMoQXRvbWlj
U3RyaW5nSW1wbCoga2V5KSB7IHJldHVybiBtX3RhZ1J1bGVzLmdldChrZXkpOyB9Ci0gICAgQ1NT
UnVsZURhdGFMaXN0KiBnZXRVbml2ZXJzYWxSdWxlcygpIHsgcmV0dXJuIG1fdW5pdmVyc2FsUnVs
ZXM7IH0KLSAgICBDU1NSdWxlRGF0YUxpc3QqIGdldFBhZ2VSdWxlcygpIHsgcmV0dXJuIG1fcGFn
ZVJ1bGVzOyB9Ci0gICAgCi1wdWJsaWM6Ci0gICAgQXRvbVJ1bGVNYXAgbV9pZFJ1bGVzOwotICAg
IEF0b21SdWxlTWFwIG1fY2xhc3NSdWxlczsKLSAgICBBdG9tUnVsZU1hcCBtX3RhZ1J1bGVzOwot
ICAgIENTU1J1bGVEYXRhTGlzdCogbV91bml2ZXJzYWxSdWxlczsKLSAgICBDU1NSdWxlRGF0YUxp
c3QqIG1fcGFnZVJ1bGVzOwotICAgIHVuc2lnbmVkIG1fcnVsZUNvdW50OwotICAgIHVuc2lnbmVk
IG1fcGFnZVJ1bGVDb3VudDsKLX07Ci0KLXN0YXRpYyBDU1NSdWxlU2V0KiBkZWZhdWx0U3R5bGU7
Ci1zdGF0aWMgQ1NTUnVsZVNldCogZGVmYXVsdFF1aXJrc1N0eWxlOwotc3RhdGljIENTU1J1bGVT
ZXQqIGRlZmF1bHRQcmludFN0eWxlOwotc3RhdGljIENTU1J1bGVTZXQqIGRlZmF1bHRWaWV3U291
cmNlU3R5bGU7Ci1zdGF0aWMgQ1NTU3R5bGVTaGVldCogc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQ7
Ci0KLVJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpzX3N0eWxlTm90WWV0QXZhaWxhYmxl
OwotCi1zdGF0aWMgdm9pZCBsb2FkRnVsbERlZmF1bHRTdHlsZSgpOwotc3RhdGljIHZvaWQgbG9h
ZFNpbXBsZURlZmF1bHRTdHlsZSgpOwotLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgdG8gdXNl
IHNvbWUgbWVjaGFuaXNtIHRoYXQgZ3VhcmFudGVlcyB0aGlzIGlzIGluIHN5bmMgd2l0aCB0aGUg
cmVhbCBVQSBzdHlsZXNoZWV0Lgotc3RhdGljIGNvbnN0IGNoYXIqIHNpbXBsZVVzZXJBZ2VudFN0
eWxlU2hlZXQgPSAiaHRtbCxib2R5LGRpdntkaXNwbGF5OmJsb2NrfWJvZHl7bWFyZ2luOjhweH1k
aXY6Zm9jdXMsc3Bhbjpmb2N1c3tvdXRsaW5lOmF1dG8gNXB4IC13ZWJraXQtZm9jdXMtcmluZy1j
b2xvcn1hOi13ZWJraXQtYW55LWxpbmt7Y29sb3I6LXdlYmtpdC1saW5rO3RleHQtZGVjb3JhdGlv
bjp1bmRlcmxpbmV9YTotd2Via2l0LWFueS1saW5rOmFjdGl2ZXtjb2xvcjotd2Via2l0LWFjdGl2
ZWxpbmt9IjsKLQotc3RhdGljIGJvb2wgZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHlsZShF
bGVtZW50KiBlKQotewotICAgIHJldHVybiBlLT5oYXNUYWdOYW1lKGh0bWxUYWcpIHx8IGUtPmhh
c1RhZ05hbWUoYm9keVRhZykgfHwgZS0+aGFzVGFnTmFtZShkaXZUYWcpIHx8IGUtPmhhc1RhZ05h
bWUoc3BhblRhZykgfHwgZS0+aGFzVGFnTmFtZShiclRhZykgfHwgZS0+aGFzVGFnTmFtZShhVGFn
KTsKLX0KLQotc3RhdGljIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIHNjcmVlbkV2YWwoKQot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciwgc3Rh
dGljU2NyZWVuRXZhbCwgKCJzY3JlZW4iKSk7Ci0gICAgcmV0dXJuIHN0YXRpY1NjcmVlbkV2YWw7
Ci19Ci0KLXN0YXRpYyBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBwcmludEV2YWwoKQotewot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciwgc3RhdGlj
UHJpbnRFdmFsLCAoInByaW50IikpOwotICAgIHJldHVybiBzdGF0aWNQcmludEV2YWw7Ci19Ci0K
LUNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvYywgU3R5bGVT
aGVldExpc3QqIHN0eWxlU2hlZXRzLCBDU1NTdHlsZVNoZWV0KiBtYXBwZWRFbGVtZW50U2hlZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1N0eWxlU2hlZXQqIHBhZ2VV
c2VyU2hlZXQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogcGFnZUdyb3Vw
VXNlclNoZWV0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdHJp
Y3RQYXJzaW5nLCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICA6IG1fYmFja2dy
b3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikKLSAgICAsIG1fY2hlY2tlcihkb2MsIHN0cmlj
dFBhcnNpbmcpCi0gICAgLCBtX2VsZW1lbnQoMCkKLSAgICAsIG1fc3R5bGVkRWxlbWVudCgwKQot
ICAgICwgbV9lbGVtZW50TGlua1N0YXRlKE5vdEluc2lkZUxpbmspCi0gICAgLCBtX2ZvbnRTZWxl
Y3RvcihDU1NGb250U2VsZWN0b3I6OmNyZWF0ZShkb2MpKQotewotICAgIGluaXQoKTsKLSAgICAg
ICAgCi0gICAgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgPSBtYXRjaEF1dGhvckFuZFVzZXJT
dHlsZXM7Ci0gICAgCi0gICAgRWxlbWVudCogcm9vdCA9IGRvYy0+ZG9jdW1lbnRFbGVtZW50KCk7
Ci0KLSAgICBpZiAoIWRlZmF1bHRTdHlsZSkgewotICAgICAgICBpZiAoIXJvb3QgfHwgZWxlbWVu
dENhblVzZVNpbXBsZURlZmF1bHRTdHlsZShyb290KSkKLSAgICAgICAgICAgIGxvYWRTaW1wbGVE
ZWZhdWx0U3R5bGUoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9hZEZ1bGxEZWZhdWx0
U3R5bGUoKTsKLSAgICB9Ci0KLSAgICBtX3VzZXJTdHlsZSA9IDA7Ci0KLSAgICAvLyBjb25zdHJ1
Y3QgZG9jdW1lbnQgcm9vdCBlbGVtZW50IGRlZmF1bHQgc3R5bGUuIHRoaXMgaXMgbmVlZGVkCi0g
ICAgLy8gdG8gZXZhbHVhdGUgbWVkaWEgcXVlcmllcyB0aGF0IGNvbnRhaW4gcmVsYXRpdmUgY29u
c3RyYWludHMsIGxpa2UgInNjcmVlbiBhbmQgKG1heC13aWR0aDogMTBlbSkiCi0gICAgLy8gVGhp
cyBpcyBoZXJlIGluc3RlYWQgb2YgY29uc3RydWN0b3IsIGJlY2F1c2Ugd2hlbiBjb25zdHJ1Y3Rv
ciBpcyBydW4sCi0gICAgLy8gZG9jdW1lbnQgZG9lc24ndCBoYXZlIGRvY3VtZW50RWxlbWVudAot
ICAgIC8vIE5PVEU6IHRoaXMgYXNzdW1lcyB0aGF0IGVsZW1lbnQgdGhhdCBnZXRzIHBhc3NlZCB0
byBzdHlsZUZvckVsZW1lbnQgLWNhbGwKLSAgICAvLyBpcyBhbHdheXMgZnJvbSB0aGUgZG9jdW1l
bnQgdGhhdCBvd25zIHRoZSBzdHlsZSBzZWxlY3RvcgotICAgIEZyYW1lVmlldyogdmlldyA9IGRv
Yy0+dmlldygpOwotICAgIGlmICh2aWV3KQotICAgICAgICBtX21lZGl1bSA9IG5ldyBNZWRpYVF1
ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fbWVk
aXVtID0gbmV3IE1lZGlhUXVlcnlFdmFsdWF0b3IoImFsbCIpOwotCi0gICAgaWYgKHJvb3QpCi0g
ICAgICAgIG1fcm9vdERlZmF1bHRTdHlsZSA9IHN0eWxlRm9yRWxlbWVudChyb290LCAwLCBmYWxz
ZSwgdHJ1ZSk7IC8vIGRvbid0IHJlZiwgYmVjYXVzZSB0aGUgUmVuZGVyU3R5bGUgaXMgYWxsb2Nh
dGVkIGZyb20gZ2xvYmFsIGhlYXAKLQotICAgIGlmIChtX3Jvb3REZWZhdWx0U3R5bGUgJiYgdmll
dykgewotICAgICAgICBkZWxldGUgbV9tZWRpdW07Ci0gICAgICAgIG1fbWVkaXVtID0gbmV3IE1l
ZGlhUXVlcnlFdmFsdWF0b3Iodmlldy0+bWVkaWFUeXBlKCksIHZpZXctPmZyYW1lKCksIG1fcm9v
dERlZmF1bHRTdHlsZS5nZXQoKSk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRoaXMgc3Vja3Mh
IFRoZSB1c2VyIHNoZWV0IGlzIHJlcGFyc2VkIGV2ZXJ5IHRpbWUhCi0gICAgaWYgKHBhZ2VVc2Vy
U2hlZXQgfHwgcGFnZUdyb3VwVXNlclNoZWV0cykgewotICAgICAgICBtX3VzZXJTdHlsZSA9IG5l
dyBDU1NSdWxlU2V0KCk7Ci0gICAgICAgIGlmIChwYWdlVXNlclNoZWV0KQotICAgICAgICAgICAg
bV91c2VyU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VVc2VyU2hlZXQsICptX21lZGl1bSwg
dGhpcyk7Ci0gICAgICAgIGlmIChwYWdlR3JvdXBVc2VyU2hlZXRzKSB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSBwYWdlR3JvdXBVc2VyU2hlZXRzLT5zaXplKCk7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAg
bV91c2VyU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VHcm91cFVzZXJTaGVldHMtPmF0KGkp
LmdldCgpLCAqbV9tZWRpdW0sIHRoaXMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gYWRk
IHN0eWxlc2hlZXRzIGZyb20gZG9jdW1lbnQKLSAgICBtX2F1dGhvclN0eWxlID0gbmV3IENTU1J1
bGVTZXQoKTsKLSAgICAKLSAgICAvLyBBZGQgcnVsZXMgZnJvbSBlbGVtZW50cyBsaWtlIFNWRydz
IDxmb250LWZhY2U+Ci0gICAgaWYgKG1hcHBlZEVsZW1lbnRTaGVldCkKLSAgICAgICAgbV9hdXRo
b3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWFwcGVkRWxlbWVudFNoZWV0LCAqbV9tZWRpdW0s
IHRoaXMpOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3R5bGVTaGVldHMtPmxlbmd0aCgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBTdHls
ZVNoZWV0KiBzaGVldCA9IHN0eWxlU2hlZXRzLT5pdGVtKGkpOwotICAgICAgICBpZiAoc2hlZXQt
PmlzQ1NTU3R5bGVTaGVldCgpICYmICFzaGVldC0+ZGlzYWJsZWQoKSkKLSAgICAgICAgICAgIG1f
YXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQq
PihzaGVldCksICptX21lZGl1bSwgdGhpcyk7Ci0gICAgfQotICAgIAotICAgIGlmIChkb2MtPnJl
bmRlcmVyKCkgJiYgZG9jLT5yZW5kZXJlcigpLT5zdHlsZSgpKQotICAgICAgICBkb2MtPnJlbmRl
cmVyKCktPnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwotfQotCi0vLyBU
aGlzIGlzIGEgc2ltcGxpZmllZCBzdHlsZSBzZXR0aW5nIGZ1bmN0aW9uIGZvciBrZXlmcmFtZSBz
dHlsZXMKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkS2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRy
PFdlYktpdENTU0tleWZyYW1lc1J1bGU+IHJ1bGUpCi17Ci0gICAgQXRvbWljU3RyaW5nIHMocnVs
ZS0+bmFtZSgpKTsKLSAgICBtX2tleWZyYW1lc1J1bGVNYXAuYWRkKHMuaW1wbCgpLCBydWxlKTsK
LX0KLQotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0KCkKLXsKLSAgICBpbml0RWxlbWVudCgw
KTsKLSAgICBtX21hdGNoZWREZWNscy5jbGVhcigpOwotICAgIG1fcnVsZUxpc3QgPSAwOwotICAg
IG1fcm9vdERlZmF1bHRTdHlsZSA9IDA7Ci0gICAgbV9tZWRpdW0gPSAwOwotfQotCi1DU1NTdHls
ZVNlbGVjdG9yOjp+Q1NTU3R5bGVTZWxlY3RvcigpCi17Ci0gICAgbV9mb250U2VsZWN0b3ItPmNs
ZWFyRG9jdW1lbnQoKTsKLSAgICBkZWxldGUgbV9tZWRpdW07Ci0gICAgZGVsZXRlIG1fYXV0aG9y
U3R5bGU7Ci0gICAgZGVsZXRlIG1fdXNlclN0eWxlOwotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3Zp
ZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMpOwotICAgIG1fa2V5ZnJhbWVzUnVsZU1h
cC5jbGVhcigpOwotfQotCi1zdGF0aWMgQ1NTU3R5bGVTaGVldCogcGFyc2VVQVNoZWV0KGNvbnN0
IFN0cmluZyYgc3RyKQotewotICAgIENTU1N0eWxlU2hlZXQqIHNoZWV0ID0gQ1NTU3R5bGVTaGVl
dDo6Y3JlYXRlKCkucmVsZWFzZVJlZigpOyAvLyBsZWFrIHRoZSBzaGVldCBvbiBwdXJwb3NlCi0g
ICAgc2hlZXQtPnBhcnNlU3RyaW5nKHN0cik7Ci0gICAgcmV0dXJuIHNoZWV0OwotfQotCi1zdGF0
aWMgQ1NTU3R5bGVTaGVldCogcGFyc2VVQVNoZWV0KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIHNpemUpCi17Ci0gICAgcmV0dXJuIHBhcnNlVUFTaGVldChTdHJpbmcoY2hhcmFjdGVy
cywgc2l6ZSkpOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkRnVsbERlZmF1bHRTdHlsZSgpCi17Ci0g
ICAgaWYgKHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0KSB7Ci0gICAgICAgIEFTU0VSVChkZWZhdWx0
U3R5bGUpOwotICAgICAgICBkZWxldGUgZGVmYXVsdFN0eWxlOwotICAgICAgICBzaW1wbGVEZWZh
dWx0U3R5bGVTaGVldC0+ZGVyZWYoKTsKLSAgICAgICAgZGVmYXVsdFN0eWxlID0gbmV3IENTU1J1
bGVTZXQ7Ci0gICAgICAgIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0ID0gMDsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBBU1NFUlQoIWRlZmF1bHRTdHlsZSk7Ci0gICAgICAgIGRlZmF1bHRTdHlsZSA9
IG5ldyBDU1NSdWxlU2V0OwotICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZSA9IG5ldyBDU1NSdWxl
U2V0OwotICAgICAgICBkZWZhdWx0UXVpcmtzU3R5bGUgPSBuZXcgQ1NTUnVsZVNldDsKLSAgICB9
Ci0KLSAgICAvLyBTdHJpY3QtbW9kZSBydWxlcy4KLSAgICBTdHJpbmcgZGVmYXVsdFJ1bGVzID0g
U3RyaW5nKGh0bWxVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YoaHRtbFVzZXJBZ2VudFN0eWxl
U2hlZXQpKSArIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+ZXh0cmFEZWZhdWx0U3R5bGVT
aGVldCgpOwotICAgIENTU1N0eWxlU2hlZXQqIGRlZmF1bHRTaGVldCA9IHBhcnNlVUFTaGVldChk
ZWZhdWx0UnVsZXMpOwotICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoZGVmYXVs
dFNoZWV0LCBzY3JlZW5FdmFsKCkpOwotICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zy
b21TaGVldChkZWZhdWx0U2hlZXQsIHByaW50RXZhbCgpKTsKLQotICAgIC8vIFF1aXJrcy1tb2Rl
IHJ1bGVzLgotICAgIFN0cmluZyBxdWlya3NSdWxlcyA9IFN0cmluZyhxdWlya3NVc2VyQWdlbnRT
dHlsZVNoZWV0LCBzaXplb2YocXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhl
bWU6OmRlZmF1bHRUaGVtZSgpLT5leHRyYVF1aXJrc1N0eWxlU2hlZXQoKTsKLSAgICBDU1NTdHls
ZVNoZWV0KiBxdWlya3NTaGVldCA9IHBhcnNlVUFTaGVldChxdWlya3NSdWxlcyk7Ci0gICAgZGVm
YXVsdFF1aXJrc1N0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChxdWlya3NTaGVldCwgc2NyZWVuRXZh
bCgpKTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZFNpbXBsZURlZmF1bHRTdHlsZSgpCi17Ci0gICAg
QVNTRVJUKCFkZWZhdWx0U3R5bGUpOwotICAgIEFTU0VSVCghc2ltcGxlRGVmYXVsdFN0eWxlU2hl
ZXQpOwotICAgIAotICAgIGRlZmF1bHRTdHlsZSA9IG5ldyBDU1NSdWxlU2V0OwotICAgIGRlZmF1
bHRQcmludFN0eWxlID0gbmV3IENTU1J1bGVTZXQ7Ci0gICAgZGVmYXVsdFF1aXJrc1N0eWxlID0g
bmV3IENTU1J1bGVTZXQ7Ci0KLSAgICBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCA9IHBhcnNlVUFT
aGVldChzaW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0LCBzdHJsZW4oc2ltcGxlVXNlckFnZW50U3R5
bGVTaGVldCkpOwotICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2ltcGxlRGVm
YXVsdFN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7Ci0gICAgCi0gICAgLy8gTm8gbmVlZCB0byBp
bml0aWFsaXplIHF1aXJrcyBzaGVldCB5ZXQgYXMgdGhlcmUgYXJlIG5vIHF1aXJrIHJ1bGVzIGZv
ciBlbGVtZW50cyBhbGxvd2VkIGluIHNpbXBsZSBkZWZhdWx0IHN0eWxlLgotfQotICAgIAotc3Rh
dGljIHZvaWQgbG9hZFZpZXdTb3VyY2VTdHlsZSgpCi17Ci0gICAgQVNTRVJUKCFkZWZhdWx0Vmll
d1NvdXJjZVN0eWxlKTsKLSAgICBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlID0gbmV3IENTU1J1bGVT
ZXQ7Ci0gICAgZGVmYXVsdFZpZXdTb3VyY2VTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFyc2VV
QVNoZWV0KHNvdXJjZVVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihzb3VyY2VVc2VyQWdlbnRT
dHlsZVNoZWV0KSksIHNjcmVlbkV2YWwoKSk7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
YWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsKQot
ewotICAgIGlmICghZGVjbC0+aGFzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKSB7Ci0gICAgICAg
IG1fbWF0Y2hlZERlY2xzLmFwcGVuZChkZWNsKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGFscmVhZHkgcmVzb2x2ZWQgdGhlIHZhcmlhYmxlcyBpbiB0
aGlzIGRlY2xhcmF0aW9uLgotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiByZXNvbHZl
ZERlY2wgPSBtX3Jlc29sdmVkVmFyaWFibGVzRGVjbGFyYXRpb25zLmdldChkZWNsKS5nZXQoKTsK
LSAgICBpZiAocmVzb2x2ZWREZWNsKSB7Ci0gICAgICAgIG1fbWF0Y2hlZERlY2xzLmFwcGVuZChy
ZXNvbHZlZERlY2wpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgdGhpcyBk
ZWNsYXJhdGlvbiBoYXMgYW55IHZhcmlhYmxlcyBpbiBpdCwgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ug
YSBjbG9uZWQKLSAgICAvLyBkZWNsYXJhdGlvbiB3aXRoIGFzIG1hbnkgdmFyaWFibGVzIHJlc29s
dmVkIGFzIHBvc3NpYmxlIGZvciB0aGlzIHN0eWxlIHNlbGVjdG9yJ3MgbWVkaWEuCi0gICAgUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBuZXdEZWNsID0gQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OmNyZWF0ZShkZWNsLT5wYXJlbnRSdWxlKCkpOwotICAgIG1fbWF0Y2hlZERl
Y2xzLmFwcGVuZChuZXdEZWNsLmdldCgpKTsKLSAgICBtX3Jlc29sdmVkVmFyaWFibGVzRGVjbGFy
YXRpb25zLnNldChkZWNsLCBuZXdEZWNsKTsKLQotICAgIEhhc2hTZXQ8U3RyaW5nPiB1c2VkQmxv
Y2tWYXJpYWJsZXM7Ci0gICAgcmVzb2x2ZVZhcmlhYmxlc0ZvckRlY2xhcmF0aW9uKGRlY2wsIG5l
d0RlY2wuZ2V0KCksIHVzZWRCbG9ja1ZhcmlhYmxlcyk7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6cmVzb2x2ZVZhcmlhYmxlc0ZvckRlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBkZWNsLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogbmV3RGVjbCwgSGFzaFNl
dDxTdHJpbmc+JiB1c2VkQmxvY2tWYXJpYWJsZXMpCi17Ci0gICAgLy8gTm93IGl0ZXJhdGUgb3Zl
ciB0aGUgcHJvcGVydGllcyBpbiB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24uICBBcyB3ZSByZXNv
bHZlIHZhcmlhYmxlcyB3ZSdsbCBlbmQgdXAKLSAgICAvLyBtdXRhdGluZyB0aGUgbmV3IGRlY2xh
cmF0aW9uIChwb3NzaWJseSBleHBhbmRpbmcgc2hvcnRoYW5kcykuICBUaGUgbmV3IGRlY2xhcmF0
aW9uIGhhcyBubyBtX25vZGUKLSAgICAvLyB0aG91Z2gsIHNvIGl0IGNhbid0IG1pc3Rha2VubHkg
Y2FsbCBzZXRDaGFuZ2VkIG9uIGFueXRoaW5nLgotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBkZWNsLT5lbmQoKTsKLSAgICBmb3IgKENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IGRlY2wtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgY3VycmVudCA9ICpp
dDsKLSAgICAgICAgaWYgKCFjdXJyZW50LnZhbHVlKCktPmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1
ZSgpKSB7Ci0gICAgICAgICAgICAvLyBXZSBjYW4ganVzdCBhZGQgdGhlIHBhcnNlZCBwcm9wZXJ0
eSBkaXJlY3RseS4KLSAgICAgICAgICAgIG5ld0RlY2wtPmFkZFBhcnNlZFByb3BlcnR5KGN1cnJl
bnQpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgQ1NTVmFsdWVM
aXN0KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlKj4o
Y3VycmVudC52YWx1ZSgpKS0+dmFsdWVMaXN0KCk7Ci0gICAgICAgIGlmICghdmFsdWVMaXN0KQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCByZXNvbHZl
ZFZhbHVlTGlzdDsKLSAgICAgICAgdW5zaWduZWQgcyA9IHZhbHVlTGlzdC0+bGVuZ3RoKCk7Ci0g
ICAgICAgIGJvb2wgZnVsbHlSZXNvbHZlZCA9IHRydWU7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzOyArK2kpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiB2YWwgPSB2YWx1ZUxp
c3QtPml0ZW0oaSk7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUgPSB2YWwtPmlzUHJpbWl0aXZlVmFsdWUoKSA/IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsKSA6IDA7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0
aXZlVmFsdWUtPmlzVmFyaWFibGUoKSkgewotICAgICAgICAgICAgICAgIENTU1ZhcmlhYmxlc1J1
bGUqIHJ1bGUgPSBtX3ZhcmlhYmxlc01hcC5nZXQocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1Zh
bHVlKCkpOwotICAgICAgICAgICAgICAgIGlmICghcnVsZSB8fCAhcnVsZS0+dmFyaWFibGVzKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgZnVsbHlSZXNvbHZlZCA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuaWQoKSA9PSBDU1NQcm9wZXJ0eVdlYmtpdFZhcmlh
YmxlRGVjbGFyYXRpb25CbG9jayAmJiBzID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgZnVs
bHlSZXNvbHZlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZWRCbG9ja1Zh
cmlhYmxlcy5jb250YWlucyhwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsQmxv
Y2sgPSBydWxlLT52YXJpYWJsZXMoKS0+Z2V0UGFyc2VkVmFyaWFibGVEZWNsYXJhdGlvbkJsb2Nr
KHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChkZWNsQmxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkQmxv
Y2tWYXJpYWJsZXMuYWRkKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlVmFyaWFibGVzRm9yRGVjbGFyYXRpb24oZGVj
bEJsb2NrLCBuZXdEZWNsLCB1c2VkQmxvY2tWYXJpYWJsZXMpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiByZXNvbHZlZFZhcmlhYmxlID0gcnVsZS0+dmFyaWFi
bGVzKCktPmdldFBhcnNlZFZhcmlhYmxlKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlc29sdmVkVmFyaWFibGUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZnVsbHlSZXNvbHZlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgdmFsdWVTaXpl
ID0gcmVzb2x2ZWRWYXJpYWJsZS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IHZhbHVlU2l6ZTsgKytqKQotICAgICAgICAgICAgICAgICAgICByZXNv
bHZlZFZhbHVlTGlzdC5hZGRWYWx1ZShyZXNvbHZlZFZhcmlhYmxlLT5pdGVtKGopLT5wYXJzZXJW
YWx1ZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJlc29sdmVkVmFs
dWVMaXN0LmFkZFZhbHVlKHZhbC0+cGFyc2VyVmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGlmICghZnVsbHlSZXNvbHZlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIC8vIFdlIG5vdyBoYXZlIGEgZnVsbHkgcmVzb2x2ZWQgbmV3IHZhbHVlIGxpc3QuICBX
ZSB3YW50IHRoZSBwYXJzZXIgdG8gdXNlIHRoaXMgdmFsdWUgbGlzdAotICAgICAgICAvLyBhbmQg
cGFyc2Ugb3VyIG5ldyBkZWNsYXJhdGlvbi4KLSAgICAgICAgQ1NTUGFyc2VyKG1fY2hlY2tlci5t
X3N0cmljdFBhcnNpbmcpLnBhcnNlUHJvcGVydHlXaXRoUmVzb2x2ZWRWYXJpYWJsZXMoY3VycmVu
dC5pZCgpLCBjdXJyZW50LmlzSW1wb3J0YW50KCksIG5ld0RlY2wsICZyZXNvbHZlZFZhbHVlTGlz
dCk7Ci0gICAgfQotfQotCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoQ1NTUnVs
ZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCkKLXsK
LSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwotCi0gICAgaWYgKCFydWxlcyB8fCAhbV9lbGVt
ZW50KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gV2UgbmVlZCB0byBjb2xsZWN0IHRo
ZSBydWxlcyBmb3IgaWQsIGNsYXNzLCB0YWcsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1
ZmZlciBhbmQKLSAgICAvLyB0aGVuIHNvcnQgdGhlIGJ1ZmZlci4KLSAgICBpZiAobV9lbGVtZW50
LT5oYXNJRCgpKQotICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0SURSdWxlcyht
X2VsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgs
IGxhc3RSdWxlSW5kZXgpOwotICAgIGlmIChtX2VsZW1lbnQtPmhhc0NsYXNzKCkpIHsKLSAgICAg
ICAgQVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7Ci0gICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJp
bmcmIGNsYXNzTmFtZXMgPSBtX3N0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKTsKLSAgICAgICAg
c2l6ZV90IHNpemUgPSBjbGFzc05hbWVzLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+
Z2V0Q2xhc3NSdWxlcyhjbGFzc05hbWVzW2ldLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0
UnVsZUluZGV4KTsKLSAgICB9Ci0gICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFRhZ1J1
bGVzKG1fZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RS
dWxlSW5kZXgpOwotICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRVbml2ZXJzYWxSdWxl
cygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7Ci0gICAgCi0gICAgLy8gSWYgd2Ug
ZGlkbid0IG1hdGNoIGFueSBydWxlcywgd2UncmUgZG9uZS4KLSAgICBpZiAobV9tYXRjaGVkUnVs
ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gU29ydCB0aGUgc2V0
IG9mIG1hdGNoZWQgcnVsZXMuCi0gICAgc29ydE1hdGNoZWRSdWxlcygwLCBtX21hdGNoZWRSdWxl
cy5zaXplKCkpOwotICAgIAotICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQg
cnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNscy4KLSAgICBpZiAoIW1fY2hlY2tlci5tX2Nv
bGxlY3RSdWxlc09ubHkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0
Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9u
KG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmRlY2xhcmF0aW9uKCkpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7
IGkrKykgewotICAgICAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQotICAgICAgICAgICAgICAgIG1f
cnVsZUxpc3QgPSBDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBtX3J1bGVMaXN0
LT5hcHBlbmQobV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QoQ1NTUnVsZURhdGFM
aXN0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4KQotewot
ICAgIGlmICghcnVsZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoQ1NTUnVsZURhdGEq
IGQgPSBydWxlcy0+Zmlyc3QoKTsgZDsgZCA9IGQtPm5leHQoKSkgewotICAgICAgICBDU1NTdHls
ZVJ1bGUqIHJ1bGUgPSBkLT5ydWxlKCk7Ci0gICAgICAgIGlmIChjaGVja1NlbGVjdG9yKGQtPnNl
bGVjdG9yKCkpKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGll
cyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQuCi0gICAgICAgICAgICBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiogZGVjbCA9IHJ1bGUtPmRlY2xhcmF0aW9uKCk7Ci0gICAgICAgICAgICBpZiAo
IWRlY2wgfHwgIWRlY2wtPmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBJZiB3ZSdyZSBtYXRjaGluZyBub3JtYWwgcnVsZXMs
IHNldCBhIHBzZXVkbyBiaXQgaWYgCi0gICAgICAgICAgICAvLyB3ZSByZWFsbHkganVzdCBtYXRj
aGVkIGEgcHNldWRvLWVsZW1lbnQuCi0gICAgICAgICAgICBpZiAobV9keW5hbWljUHNldWRvICE9
IE5PUFNFVURPICYmIG1fY2hlY2tlci5tX3BzZXVkb1N0eWxlID09IE5PUFNFVURPKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fY2hlY2tlci5tX2NvbGxlY3RSdWxlc09ubHkpCi0gICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8g
PCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0SGFzUHNldWRvU3R5bGUobV9keW5hbWljUHNldWRvKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgLy8gVXBkYXRlIG91ciBmaXJzdC9sYXN0IHJ1bGUgaW5kaWNlcyBp
biB0aGUgbWF0Y2hlZCBydWxlcyBhcnJheS4KLSAgICAgICAgICAgICAgICBsYXN0UnVsZUluZGV4
ID0gbV9tYXRjaGVkRGVjbHMuc2l6ZSgpICsgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOwotICAgICAg
ICAgICAgICAgIGlmIChmaXJzdFJ1bGVJbmRleCA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAg
Zmlyc3RSdWxlSW5kZXggPSBsYXN0UnVsZUluZGV4OwotCi0gICAgICAgICAgICAgICAgLy8gQWRk
IHRoaXMgcnVsZSB0byBvdXIgbGlzdCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgICAgICAgICAgICAg
IGFkZE1hdGNoZWRSdWxlKGQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQot
Ci1zdGF0aWMgYm9vbCBvcGVyYXRvciA+KENTU1J1bGVEYXRhJiByMSwgQ1NTUnVsZURhdGEmIHIy
KQotewotICAgIGludCBzcGVjMSA9IHIxLnNlbGVjdG9yKCktPnNwZWNpZmljaXR5KCk7Ci0gICAg
aW50IHNwZWMyID0gcjIuc2VsZWN0b3IoKS0+c3BlY2lmaWNpdHkoKTsKLSAgICByZXR1cm4gKHNw
ZWMxID09IHNwZWMyKSA/IHIxLnBvc2l0aW9uKCkgPiByMi5wb3NpdGlvbigpIDogc3BlYzEgPiBz
cGVjMjsgCi19Ci0gICAgCi1zdGF0aWMgYm9vbCBvcGVyYXRvciA8PShDU1NSdWxlRGF0YSYgcjEs
IENTU1J1bGVEYXRhJiByMikKLXsKLSAgICByZXR1cm4gIShyMSA+IHIyKTsKLX0KLQotdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjpzb3J0TWF0Y2hlZFJ1bGVzKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBlbmQpCi17Ci0gICAgaWYgKHN0YXJ0ID49IGVuZCB8fCAoZW5kIC0gc3RhcnQgPT0gMSkpCi0g
ICAgICAgIHJldHVybjsgLy8gU2FuaXR5IGNoZWNrLgotCi0gICAgaWYgKGVuZCAtIHN0YXJ0IDw9
IDYpIHsKLSAgICAgICAgLy8gQXBwbHkgYSBidWJibGUgc29ydCBmb3Igc21hbGxlciBsaXN0cy4K
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kIC0gMTsgaSA+IHN0YXJ0OyBpLS0pIHsKLSAg
ICAgICAgICAgIGJvb2wgc29ydGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IHN0YXJ0OyBqIDwgaTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgQ1NTUnVsZURhdGEqIGVs
dCA9IG1fbWF0Y2hlZFJ1bGVzW2pdOwotICAgICAgICAgICAgICAgIENTU1J1bGVEYXRhKiBlbHQy
ID0gbV9tYXRjaGVkUnVsZXNbaiArIDFdOwotICAgICAgICAgICAgICAgIGlmICgqZWx0ID4gKmVs
dDIpIHsKLSAgICAgICAgICAgICAgICAgICAgc29ydGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fbWF0Y2hlZFJ1bGVzW2pdID0gZWx0MjsKLSAgICAgICAgICAgICAgICAgICAgbV9t
YXRjaGVkUnVsZXNbaiArIDFdID0gZWx0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChzb3J0ZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBQZXJmb3JtIGEgbWVyZ2Ug
c29ydCBmb3IgbGFyZ2VyIGxpc3RzLgotICAgIHVuc2lnbmVkIG1pZCA9IChzdGFydCArIGVuZCkg
LyAyOwotICAgIHNvcnRNYXRjaGVkUnVsZXMoc3RhcnQsIG1pZCk7Ci0gICAgc29ydE1hdGNoZWRS
dWxlcyhtaWQsIGVuZCk7Ci0gICAgCi0gICAgQ1NTUnVsZURhdGEqIGVsdCA9IG1fbWF0Y2hlZFJ1
bGVzW21pZCAtIDFdOwotICAgIENTU1J1bGVEYXRhKiBlbHQyID0gbV9tYXRjaGVkUnVsZXNbbWlk
XTsKLSAgICAKLSAgICAvLyBIYW5kbGUgdGhlIGZhc3QgY29tbW9uIGNhc2UgKG9mIGVxdWFsIHNw
ZWNpZmljaXR5KS4gIFRoZSBsaXN0IG1heSBhbHJlYWR5Ci0gICAgLy8gYmUgY29tcGxldGVseSBz
b3J0ZWQuCi0gICAgaWYgKCplbHQgPD0gKmVsdDIpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICAvLyBXZSBoYXZlIHRvIG1lcmdlIHNvcnQuICBFbnN1cmUgb3VyIG1lcmdlIGJ1ZmZlciBpcyBi
aWcgZW5vdWdoIHRvIGhvbGQKLSAgICAvLyBhbGwgdGhlIGl0ZW1zLgotICAgIFZlY3RvcjxDU1NS
dWxlRGF0YSo+IHJ1bGVzTWVyZ2VCdWZmZXI7Ci0gICAgcnVsZXNNZXJnZUJ1ZmZlci5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGVuZCAtIHN0YXJ0KTsgCi0KLSAgICB1bnNpZ25lZCBpMSA9IHN0YXJ0
OwotICAgIHVuc2lnbmVkIGkyID0gbWlkOwotICAgIAotICAgIGVsdCA9IG1fbWF0Y2hlZFJ1bGVz
W2kxXTsKLSAgICBlbHQyID0gbV9tYXRjaGVkUnVsZXNbaTJdOwotICAgIAotICAgIHdoaWxlIChp
MSA8IG1pZCB8fCBpMiA8IGVuZCkgewotICAgICAgICBpZiAoaTEgPCBtaWQgJiYgKGkyID09IGVu
ZCB8fCAqZWx0IDw9ICplbHQyKSkgewotICAgICAgICAgICAgcnVsZXNNZXJnZUJ1ZmZlci5hcHBl
bmQoZWx0KTsKLSAgICAgICAgICAgIGlmICgrK2kxIDwgbWlkKQotICAgICAgICAgICAgICAgIGVs
dCA9IG1fbWF0Y2hlZFJ1bGVzW2kxXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJ1
bGVzTWVyZ2VCdWZmZXIuYXBwZW5kKGVsdDIpOwotICAgICAgICAgICAgaWYgKCsraTIgPCBlbmQp
Ci0gICAgICAgICAgICAgICAgZWx0MiA9IG1fbWF0Y2hlZFJ1bGVzW2kyXTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKQot
ICAgICAgICBtX21hdGNoZWRSdWxlc1tpXSA9IHJ1bGVzTWVyZ2VCdWZmZXJbaSAtIHN0YXJ0XTsK
LX0KLQotaW5saW5lIEVJbnNpZGVMaW5rIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tl
cjo6ZGV0ZXJtaW5lTGlua1N0YXRlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgaWYg
KCFlbGVtZW50IHx8ICFlbGVtZW50LT5pc0xpbmsoKSkKLSAgICAgICAgcmV0dXJuIE5vdEluc2lk
ZUxpbms7Ci0gICAgcmV0dXJuIGRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKGVsZW1lbnQpOwot
fQotICAgIAotaW5saW5lIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEVsZW1lbnQoRWxlbWVu
dCogZSkKLXsKLSAgICBpZiAobV9lbGVtZW50ICE9IGUpIHsKLSAgICAgICAgbV9lbGVtZW50ID0g
ZTsKLSAgICAgICAgbV9zdHlsZWRFbGVtZW50ID0gbV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNT
dHlsZWRFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obV9lbGVtZW50KSA6
IDA7Ci0gICAgICAgIG1fZWxlbWVudExpbmtTdGF0ZSA9IG1fY2hlY2tlci5kZXRlcm1pbmVMaW5r
U3RhdGUobV9lbGVtZW50KTsKLSAgICB9Ci19Ci0KLWlubGluZSB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlLCBQc2V1ZG9JZCBwc2V1ZG9JRCkKLXsKLSAgICBtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSA9
IHBzZXVkb0lEOwotCi0gICAgbV9wYXJlbnROb2RlID0gZSA/IGUtPnBhcmVudE5vZGUoKSA6IDA7
Ci0KLSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmICghbV9wYXJlbnROb2RlICYmIGUgJiYgZS0+aXNT
VkdFbGVtZW50KCkgJiYgZS0+aXNTaGFkb3dOb2RlKCkpCi0gICAgICAgIG1fcGFyZW50Tm9kZSA9
IGUtPnNoYWRvd1BhcmVudE5vZGUoKTsKLSNlbmRpZgotCi0gICAgaWYgKHBhcmVudFN0eWxlKQot
ICAgICAgICBtX3BhcmVudFN0eWxlID0gcGFyZW50U3R5bGU7Ci0gICAgZWxzZQotICAgICAgICBt
X3BhcmVudFN0eWxlID0gbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgp
IDogMDsKLQotICAgIE5vZGUqIGRvY0VsZW1lbnQgPSBlID8gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1l
bnRFbGVtZW50KCkgOiAwOwotICAgIFJlbmRlclN0eWxlKiBkb2NTdHlsZSA9IG1fY2hlY2tlci5t
X2RvY3VtZW50LT5yZW5kZXJTdHlsZSgpOwotICAgIG1fcm9vdEVsZW1lbnRTdHlsZSA9IGRvY0Vs
ZW1lbnQgJiYgZSAhPSBkb2NFbGVtZW50ID8gZG9jRWxlbWVudC0+cmVuZGVyU3R5bGUoKSA6IGRv
Y1N0eWxlOwotCi0gICAgbV9zdHlsZSA9IDA7Ci0KLSAgICBtX21hdGNoZWREZWNscy5jbGVhcigp
OwotCi0gICAgbV9ydWxlTGlzdCA9IDA7Ci0KLSAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOwotfQot
Ci1zdGF0aWMgaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyogbGlua0F0dHJpYnV0ZShOb2RlKiBu
b2RlKQotewotICAgIGlmICghbm9kZS0+aXNMaW5rKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgQVNTRVJUKG5vZGUtPmlzRWxlbWVudE5vZGUoKSk7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKLSAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxl
bWVudCgpKQotICAgICAgICByZXR1cm4gJmVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoaHJlZkF0
dHIpOwotCi0jaWYgRU5BQkxFKFdNTCkKLSAgICBpZiAoZWxlbWVudC0+aXNXTUxFbGVtZW50KCkp
IHsKLSAgICAgICAgLy8gPGFuY2hvcj4gZWxlbWVudHMgZG9uJ3QgaGF2ZSBocmVmIGF0dHJpYnV0
ZXMsIGJ1dCB3ZSBzdGlsbCB3YW50IHRvCi0gICAgICAgIC8vIGFwcGVhciBhcyBsaW5rLCBzbyBs
aW5rQXR0cmlidXRlKCkgaGFzIHRvIHJldHVybiBhIG5vbi1udWxsIHZhbHVlIQotICAgICAgICBp
ZiAoZWxlbWVudC0+aGFzVGFnTmFtZShXTUxOYW1lczo6YW5jaG9yVGFnKSkKLSAgICAgICAgICAg
IHJldHVybiAmZW1wdHlBdG9tOwotCi0gICAgICAgIHJldHVybiAmZWxlbWVudC0+ZmFzdEdldEF0
dHJpYnV0ZShocmVmQXR0cik7Ci0gICAgfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU1ZHKQotICAg
IGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuICZlbGVtZW50LT5m
YXN0R2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKLSNlbmRpZgotCi0gICAgcmV0
dXJuIDA7Ci19Ci0KLUNTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JD
aGVja2VyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBzdHJpY3RQYXJzaW5nKQotICAgIDogbV9k
b2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1fc3RyaWN0UGFyc2luZyhzdHJpY3RQYXJzaW5nKQot
ICAgICwgbV9jb2xsZWN0UnVsZXNPbmx5KGZhbHNlKQotICAgICwgbV9wc2V1ZG9TdHlsZShOT1BT
RVVETykKLSAgICAsIG1fZG9jdW1lbnRJc0hUTUwoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkp
Ci0gICAgLCBtX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzKGZhbHNlKQotewotfQotCi1FSW5zaWRl
TGluayBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0
ZVNsb3dDYXNlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGVsZW1lbnQt
PmlzTGluaygpKTsKLSAgICAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcqIGF0dHIgPSBsaW5rQXR0
cmlidXRlKGVsZW1lbnQpOwotICAgIGlmICghYXR0ciB8fCBhdHRyLT5pc051bGwoKSkKLSAgICAg
ICAgcmV0dXJuIE5vdEluc2lkZUxpbms7Ci0KLSNpZiBQTEFURk9STShRVCkKLSAgICBWZWN0b3I8
VUNoYXIsIDUxMj4gdXJsOwotICAgIHZpc2l0ZWRVUkwobV9kb2N1bWVudC0+YmFzZVVSTCgpLCAq
YXR0ciwgdXJsKTsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEluc2lk
ZVVudmlzaXRlZExpbms7Ci0KLSAgICAvLyBJZiB0aGUgUXQ0LjQgaW50ZXJmYWNlIGZvciB0aGUg
aGlzdG9yeSBpcyB1c2VkLCB3ZSB3aWxsIGhhdmUgdG8gZmFsbGJhY2sKLSAgICAvLyB0byB0aGUg
b2xkIGdsb2JhbCBoaXN0b3J5LgotICAgIFFXZWJIaXN0b3J5SW50ZXJmYWNlKiBpZmFjZSA9IFFX
ZWJIaXN0b3J5SW50ZXJmYWNlOjpkZWZhdWx0SW50ZXJmYWNlKCk7Ci0gICAgaWYgKGlmYWNlKQot
ICAgICAgICByZXR1cm4gaWZhY2UtPmhpc3RvcnlDb250YWlucyhRU3RyaW5nKHJlaW50ZXJwcmV0
X2Nhc3Q8UUNoYXIqPih1cmwuZGF0YSgpKSwgdXJsLnNpemUoKSkpID8gSW5zaWRlVmlzaXRlZExp
bmsgOiBJbnNpZGVVbnZpc2l0ZWRMaW5rOwotCi0gICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRM
aW5rSGFzaCh1cmwuZGF0YSgpLCB1cmwuc2l6ZSgpKTsKLSAgICBpZiAoIWhhc2gpCi0gICAgICAg
IHJldHVybiBJbnNpZGVVbnZpc2l0ZWRMaW5rOwotI2Vsc2UKLSAgICBMaW5rSGFzaCBoYXNoID0g
dmlzaXRlZExpbmtIYXNoKG1fZG9jdW1lbnQtPmJhc2VVUkwoKSwgKmF0dHIpOwotICAgIGlmICgh
aGFzaCkKLSAgICAgICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7Ci0jZW5kaWYKLQotICAg
IEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7Ci0KLSAgICBQYWdlKiBwYWdlID0gZnJh
bWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBJbnNpZGVVbnZpc2l0
ZWRMaW5rOwotCi0gICAgbV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGUuYWRkKGhhc2gpOwot
ICAgIHJldHVybiBwYWdlLT5ncm91cCgpLmlzTGlua1Zpc2l0ZWQoaGFzaCkgPyBJbnNpZGVWaXNp
dGVkTGluayA6IEluc2lkZVVudmlzaXRlZExpbms7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVTZWxlY3Rv
cjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgUHNldWRvSWQgZHluYW1pY1BzZXVkbyA9IE5PUFNF
VURPOwotICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZWxlbWVudCwgMCwgZHluYW1pY1Bz
ZXVkbywgZmFsc2UsIGZhbHNlKSA9PSBTZWxlY3Rvck1hdGNoZXM7Ci19Ci0KLSNpZmRlZiBTVFlM
RV9TSEFSSU5HX1NUQVRTCi1zdGF0aWMgaW50IGZyYWN0aW9uID0gMDsKLXN0YXRpYyBpbnQgdG90
YWwgPSAwOwotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hUaHJl
c2hvbGQgPSAxMDsKLQotTm9kZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luTGlzdChF
bGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkIGRlcHRoKQotewotICAgIGlmIChwYXJlbnQgJiYgcGFy
ZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkgewotICAgICAgICBTdHlsZWRFbGVtZW50KiBwID0gc3Rh
dGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHBhcmVudCk7Ci0gICAgICAgIGlmICghcC0+aW5saW5l
U3R5bGVEZWNsKCkgJiYgIXAtPmhhc0lEKCkpIHsKLSAgICAgICAgICAgIE5vZGUqIHIgPSBwLT5w
cmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHN1YmNvdW50ID0gMDsKLSAg
ICAgICAgICAgIFJlbmRlclN0eWxlKiBzdCA9IHAtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAg
ICB3aGlsZSAocikgewotICAgICAgICAgICAgICAgIGlmIChyLT5yZW5kZXJTdHlsZSgpID09IHN0
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gci0+bGFzdENoaWxkKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHN1YmNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICByID0gci0+cHJldmlvdXNTaWJs
aW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXIgJiYgZGVwdGggPCBjU3R5
bGVTZWFyY2hUaHJlc2hvbGQpCi0gICAgICAgICAgICAgICAgciA9IGxvY2F0ZUNvdXNpbkxpc3Qo
cGFyZW50LT5wYXJlbnRFbGVtZW50KCksIGRlcHRoICsgMSk7Ci0gICAgICAgICAgICB3aGlsZSAo
cikgewotICAgICAgICAgICAgICAgIGlmIChyLT5yZW5kZXJTdHlsZSgpID09IHN0KQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gci0+bGFzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHN1YmNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICByID0gci0+cHJldmlvdXNTaWJsaW5nKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wg
Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KE5vZGUqIG4pCi17Ci0g
ICAgaWYgKG4tPmlzU3R5bGVkRWxlbWVudCgpKSB7Ci0gICAgICAgIFN0eWxlZEVsZW1lbnQqIHMg
PSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obik7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IHMtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgIGlmIChzdHlsZSAmJiAhc3R5bGUtPnVu
aXF1ZSgpICYmCi0gICAgICAgICAgICAocy0+dGFnUU5hbWUoKSA9PSBtX2VsZW1lbnQtPnRhZ1FO
YW1lKCkpICYmICFzLT5oYXNJRCgpICYmCi0gICAgICAgICAgICAocy0+aGFzQ2xhc3MoKSA9PSBt
X2VsZW1lbnQtPmhhc0NsYXNzKCkpICYmICFzLT5pbmxpbmVTdHlsZURlY2woKSAmJgotICAgICAg
ICAgICAgKHMtPmhhc01hcHBlZEF0dHJpYnV0ZXMoKSA9PSBtX3N0eWxlZEVsZW1lbnQtPmhhc01h
cHBlZEF0dHJpYnV0ZXMoKSkgJiYKLSAgICAgICAgICAgIChzLT5pc0xpbmsoKSA9PSBtX2VsZW1l
bnQtPmlzTGluaygpKSAmJiAKLSAgICAgICAgICAgICFzdHlsZS0+YWZmZWN0ZWRCeUF0dHJpYnV0
ZVNlbGVjdG9ycygpICYmCi0gICAgICAgICAgICAocy0+aG92ZXJlZCgpID09IG1fZWxlbWVudC0+
aG92ZXJlZCgpKSAmJgotICAgICAgICAgICAgKHMtPmFjdGl2ZSgpID09IG1fZWxlbWVudC0+YWN0
aXZlKCkpICYmCi0gICAgICAgICAgICAocy0+Zm9jdXNlZCgpID09IG1fZWxlbWVudC0+Zm9jdXNl
ZCgpKSAmJgotICAgICAgICAgICAgKHMgIT0gcy0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkgJiYg
bV9lbGVtZW50ICE9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpICYmCi0gICAg
ICAgICAgICAocy0+ZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cikgPT0gbV9lbGVtZW50LT5mYXN0
R2V0QXR0cmlidXRlKHR5cGVBdHRyKSkgJiYKLSAgICAgICAgICAgIChzLT5mYXN0R2V0QXR0cmli
dXRlKFhNTE5hbWVzOjpsYW5nQXR0cikgPT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhN
TE5hbWVzOjpsYW5nQXR0cikpICYmCi0gICAgICAgICAgICAocy0+ZmFzdEdldEF0dHJpYnV0ZShs
YW5nQXR0cikgPT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSkgJiYKLSAg
ICAgICAgICAgIChzLT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikgPT0gbV9lbGVtZW50
LT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikpICYmCi0gICAgICAgICAgICAocy0+ZmFz
dEdldEF0dHJpYnV0ZShjZWxscGFkZGluZ0F0dHIpID09IG1fZWxlbWVudC0+ZmFzdEdldEF0dHJp
YnV0ZShjZWxscGFkZGluZ0F0dHIpKSkgewotICAgICAgICAgICAgYm9vbCBpc0NvbnRyb2wgPSBz
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpOwotICAgICAgICAgICAgaWYgKGlzQ29udHJvbCAhPSBt
X2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgaWYgKGlzQ29udHJvbCkgewotICAgICAgICAgICAgICAgIElu
cHV0RWxlbWVudCogdGhpc0lucHV0RWxlbWVudCA9IHRvSW5wdXRFbGVtZW50KHMpOwotICAgICAg
ICAgICAgICAgIElucHV0RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQgPSB0b0lucHV0RWxlbWVu
dChtX2VsZW1lbnQpOwotICAgICAgICAgICAgICAgIGlmICh0aGlzSW5wdXRFbGVtZW50ICYmIG90
aGVySW5wdXRFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgodGhpc0lucHV0RWxl
bWVudC0+aXNBdXRvZmlsbGVkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmlzQXV0b2ZpbGxlZCgp
KSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXNJbnB1dEVsZW1lbnQtPmlzQ2hlY2tl
ZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5pc0NoZWNrZWQoKSkgfHwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICh0aGlzSW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUoKSAhPSBvdGhlcklu
cHV0RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICAgICAgICAgIGlmIChzLT5pc0VuYWJsZWRGb3JtQ29udHJv
bCgpICE9IG1fZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgaWYgKHMtPmlzRGVmYXVsdEJ1
dHRvbkZvckZvcm0oKSAhPSBtX2VsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmICghbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jb250YWluc1ZhbGlkaXR5U3R5
bGVSdWxlcygpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgYm9vbCB3aWxsVmFsaWRhdGUgPSBzLT53aWxsVmFsaWRh
dGUoKTsKLSAgICAgICAgICAgICAgICBpZiAod2lsbFZhbGlkYXRlICE9IG1fZWxlbWVudC0+d2ls
bFZhbGlkYXRlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAod2lsbFZhbGlkYXRlICYmIChzLT5pc1ZhbGlk
Rm9ybUNvbnRyb2xFbGVtZW50KCkgIT0gbV9lbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVt
ZW50KCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChzdHlsZS0+dHJhbnNpdGlvbnMoKSB8fCBzdHlsZS0+YW5pbWF0
aW9ucygpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgYm9v
bCBjbGFzc2VzTWF0Y2ggPSB0cnVlOwotICAgICAgICAgICAgaWYgKHMtPmhhc0NsYXNzKCkpIHsK
LSAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNsYXNzMSA9IG1fZWxlbWVudC0+
ZmFzdEdldEF0dHJpYnV0ZShjbGFzc0F0dHIpOwotICAgICAgICAgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgY2xhc3MyID0gcy0+ZmFzdEdldEF0dHJpYnV0ZShjbGFzc0F0dHIpOwotICAgICAg
ICAgICAgICAgIGNsYXNzZXNNYXRjaCA9IChjbGFzczEgPT0gY2xhc3MyKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGNsYXNzZXNNYXRjaCkgewotICAgICAg
ICAgICAgICAgIGJvb2wgbWFwcGVkQXR0cnNNYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
aWYgKHMtPmhhc01hcHBlZEF0dHJpYnV0ZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgbWFwcGVk
QXR0cnNNYXRjaCA9IHMtPmF0dHJpYnV0ZU1hcCgpLT5tYXBwZWRNYXBzRXF1aXZhbGVudChtX3N0
eWxlZEVsZW1lbnQtPmF0dHJpYnV0ZU1hcCgpKTsKLSAgICAgICAgICAgICAgICBpZiAobWFwcGVk
QXR0cnNNYXRjaCkgewotICAgICAgICAgICAgICAgICAgICBpZiAocy0+aXNMaW5rKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2VsZW1lbnRMaW5rU3RhdGUgIT0gc3R5bGUtPmlu
c2lkZUxpbmsoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotQUxXQVlTX0lOTElORSBSZW5kZXJTdHlsZSogQ1NTU3R5bGVTZWxl
Y3Rvcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQotewotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQgJiYg
IW1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkgJiYgIW1fc3R5bGVkRWxlbWVudC0+
aGFzSUQoKSAmJiAhbV9zdHlsZWRFbGVtZW50LT5kb2N1bWVudCgpLT51c2VzU2libGluZ1J1bGVz
KCkpIHsKLSAgICAgICAgLy8gQ2hlY2sgcHJldmlvdXMgc2libGluZ3MuCi0gICAgICAgIHVuc2ln
bmVkIGNvdW50ID0gMDsKLSAgICAgICAgTm9kZSogbjsKLSAgICAgICAgZm9yIChuID0gbV9lbGVt
ZW50LT5wcmV2aW91c1NpYmxpbmcoKTsgbiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpOyBuID0gbi0+
cHJldmlvdXNTaWJsaW5nKCkpIHsgfQotICAgICAgICB3aGlsZSAobikgewotICAgICAgICAgICAg
aWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChuKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
bi0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgIGlmIChjb3VudCsrID09IGNTdHlsZVNlYXJj
aFRocmVzaG9sZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGZvciAo
biA9IG4tPnByZXZpb3VzU2libGluZygpOyBuICYmICFuLT5pc0VsZW1lbnROb2RlKCk7IG4gPSBu
LT5wcmV2aW91c1NpYmxpbmcoKSkgeyB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFuKSAKLSAg
ICAgICAgICAgIG4gPSBsb2NhdGVDb3VzaW5MaXN0KG1fZWxlbWVudC0+cGFyZW50RWxlbWVudCgp
KTsKLSAgICAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAgICAgIGlmIChjYW5TaGFyZVN0eWxlV2l0
aEVsZW1lbnQobikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG4tPnJlbmRlclN0eWxlKCk7Ci0g
ICAgICAgICAgICBpZiAoY291bnQrKyA9PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBmb3IgKG4gPSBuLT5wcmV2aW91c1NpYmxp
bmcoKTsgbiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpOyBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCkp
IHsgfQotICAgICAgICB9ICAgICAgICAKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hVQVJ1bGVzKGludCYgZmlyc3RVQVJ1bGUsIGludCYgbGFz
dFVBUnVsZSkKLXsKLSAgICAvLyBGaXJzdCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB1c2VyIGFn
ZW50IHNoZWV0LgotICAgIENTU1J1bGVTZXQqIHVzZXJBZ2VudFN0eWxlU2hlZXQgPSBtX21lZGl1
bS0+bWVkaWFUeXBlTWF0Y2hTcGVjaWZpYygicHJpbnQiKQotICAgICAgICA/IGRlZmF1bHRQcmlu
dFN0eWxlIDogZGVmYXVsdFN0eWxlOwotICAgIG1hdGNoUnVsZXModXNlckFnZW50U3R5bGVTaGVl
dCwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwotCi0gICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdl
IG1hdGNoIHJ1bGVzIGZyb20gdGhlIHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0LgotICAgIGlmICgh
bV9jaGVja2VyLm1fc3RyaWN0UGFyc2luZykKLSAgICAgICAgbWF0Y2hSdWxlcyhkZWZhdWx0UXVp
cmtzU3R5bGUsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKLSAgICAgICAgCi0gICAgLy8gSWYg
d2UncmUgaW4gdmlldyBzb3VyY2UgbW9kZSwgdGhlbiB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB2
aWV3IHNvdXJjZSBzdHlsZSBzaGVldC4KLSAgICBpZiAobV9jaGVja2VyLm1fZG9jdW1lbnQtPmZy
YW1lKCkgJiYgbV9jaGVja2VyLm1fZG9jdW1lbnQtPmZyYW1lKCktPmluVmlld1NvdXJjZU1vZGUo
KSkgewotICAgICAgICBpZiAoIWRlZmF1bHRWaWV3U291cmNlU3R5bGUpCi0gICAgICAgICAgICBs
b2FkVmlld1NvdXJjZVN0eWxlKCk7Ci0gICAgICAgIG1hdGNoUnVsZXMoZGVmYXVsdFZpZXdTb3Vy
Y2VTdHlsZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwotICAgIH0KLX0KLQotUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JEb2N1bWVudChEb2N1bWVu
dCogZG9jdW1lbnQpCi17Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsK
LQotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gZG9jdW1lbnRTdHlsZSA9IFJlbmRlclN0eWxlOjpj
cmVhdGUoKTsKLSAgICBkb2N1bWVudFN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLSAgICBkb2N1
bWVudFN0eWxlLT5zZXRWaXN1YWxseU9yZGVyZWQoZG9jdW1lbnQtPnZpc3VhbGx5T3JkZXJlZCgp
KTsKLSAgICBkb2N1bWVudFN0eWxlLT5zZXRab29tKHZpZXcgPyB2aWV3LT5wYWdlWm9vbUZhY3Rv
cigpIDogMSk7Ci0gICAgCi0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKLSAg
ICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQtPnByaW50aW5nKCkp
OwotICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3MoKSkgewot
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJl
bmRlcmluZ01vZGUoKSk7Ci0gICAgICAgIGlmIChkb2N1bWVudC0+cHJpbnRpbmcoKSAmJiAhc2V0
dGluZ3MtPnNob3VsZFByaW50QmFja2dyb3VuZHMoKSkKLSAgICAgICAgICAgIGRvY3VtZW50U3R5
bGUtPnNldEZvcmNlQmFja2dyb3VuZHNUb1doaXRlKHRydWUpOwotICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHN0ZGZvbnQgPSBzZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KCk7Ci0gICAg
ICAgIGlmICghc3RkZm9udC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5maXJzdEZhbWlseSgpLnNldEZhbWlseShzdGRmb250KTsKLSAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5maXJzdEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKLSAgICAgICAgfQotICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1
ZVh4U21hbGwgKyAxKTsKLSAgICAgICAgaW50IHNpemUgPSBDU1NTdHlsZVNlbGVjdG9yOjpmb250
U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQsIENTU1ZhbHVlTWVkaXVtLCBmYWxzZSk7Ci0gICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgICAgICBib29sIHVz
ZVNWR1pvb21SdWxlcyA9IGRvY3VtZW50LT5pc1NWR0RvY3VtZW50KCk7Ci0gICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1NTU3R5bGVTZWxlY3Rvcjo6Z2V0Q29tcHV0ZWRT
aXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQsIGRvY3VtZW50U3R5bGUuZ2V0KCksIGZvbnRE
ZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1c2VTVkdab29tUnVsZXMpKTsKLSAg
ICB9Ci0KLSAgICBkb2N1bWVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKLSAgICBkb2N1bWVudFN0eWxlLT5mb250KCkudXBkYXRlKDApOwotICAgIGlmIChkb2N1
bWVudC0+aW5Db21wYXRNb2RlKCkpCi0gICAgICAgIGRvY3VtZW50U3R5bGUtPnNldEh0bWxIYWNr
cyh0cnVlKTsgLy8gZW5hYmxlIGh0bWwgc3BlY2lmaWMgcmVuZGVyaW5nIHRyaWNrcwotICAgICAg
ICAKLSAgICByZXR1cm4gZG9jdW1lbnRTdHlsZS5yZWxlYXNlKCk7Ci19Ci0KLS8vIElmIHJlc29s
dmVGb3JSb290RGVmYXVsdCBpcyB0cnVlLCBzdHlsZSBiYXNlZCBvbiB1c2VyIGFnZW50IHN0eWxl
IHNoZWV0IG9ubHkuIFRoaXMgaXMgdXNlZCBpbiBtZWRpYSBxdWVyaWVzLCB3aGVyZQotLy8gcmVs
YXRpdmUgdW5pdHMgYXJlIGludGVycHJldGVkIGFjY29yZGluZyB0byBkb2N1bWVudCByb290IGVs
ZW1lbnQgc3R5bGUsIHN0eWxlZCBvbmx5IHdpdGggVUEgc3R5bGVzaGVldAotCi1QYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCog
ZSwgUmVuZGVyU3R5bGUqIGRlZmF1bHRQYXJlbnQsIGJvb2wgYWxsb3dTaGFyaW5nLCBib29sIHJl
c29sdmVGb3JSb290RGVmYXVsdCwgYm9vbCBtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcykKLXsKLSAg
ICAvLyBPbmNlIGFuIGVsZW1lbnQgaGFzIGEgcmVuZGVyZXIsIHdlIGRvbid0IHRyeSB0byBkZXN0
cm95IGl0LCBzaW5jZSBvdGhlcndpc2UgdGhlIHJlbmRlcmVyCi0gICAgLy8gd2lsbCB2YW5pc2gg
aWYgYSBzdHlsZSByZWNhbGMgaGFwcGVucyBkdXJpbmcgbG9hZGluZy4KLSAgICBpZiAoYWxsb3dT
aGFyaW5nICYmICFlLT5kb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSAmJiAhZS0+
cmVuZGVyZXIoKSkgewotICAgICAgICBpZiAoIXNfc3R5bGVOb3RZZXRBdmFpbGFibGUpIHsKLSAg
ICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCku
cmVsZWFzZVJlZigpOwotICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+cmVmKCk7
Ci0gICAgICAgICAgICBzX3N0eWxlTm90WWV0QXZhaWxhYmxlLT5zZXREaXNwbGF5KE5PTkUpOwot
ICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRT
ZWxlY3Rvcik7Ci0gICAgICAgIH0KLSAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+cmVm
KCk7Ci0gICAgICAgIGUtPmRvY3VtZW50KCktPnNldEhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5
bGUoKTsKLSAgICAgICAgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7Ci0gICAgfQotCi0g
ICAgaW5pdEVsZW1lbnQoZSk7Ci0gICAgaWYgKGFsbG93U2hhcmluZykgewotICAgICAgICBSZW5k
ZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZSgpOwotICAgICAgICBpZiAo
c2hhcmVkU3R5bGUpCi0gICAgICAgICAgICByZXR1cm4gc2hhcmVkU3R5bGU7Ci0gICAgfQotICAg
IGluaXRGb3JTdHlsZVJlc29sdmUoZSwgZGVmYXVsdFBhcmVudCk7Ci0KLSAgICAvLyBDb21wdXRl
IG91ciBzdHlsZSBhbGxvd2luZyA6dmlzaXRlZCB0byBtYXRjaCBmaXJzdC4KLSAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IHZpc2l0ZWRTdHlsZTsKLSAgICBpZiAoIW1hdGNoVmlzaXRlZFBzZXVkb0Ns
YXNzICYmIG1fcGFyZW50U3R5bGUgJiYgKG1fcGFyZW50U3R5bGUtPmluc2lkZUxpbmsoKSB8fCBl
LT5pc0xpbmsoKSkgJiYgZS0+ZG9jdW1lbnQoKS0+dXNlc0xpbmtSdWxlcygpKSB7Ci0gICAgICAg
IC8vIEZldGNoIG91ciBwYXJlbnQgc3R5bGUuCi0gICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSA9IG1fcGFyZW50U3R5bGU7Ci0gICAgICAgIGlmICghZS0+aXNMaW5rKCkpIHsKLSAgICAg
ICAgICAgIC8vIFVzZSB0aGUgcGFyZW50J3MgdmlzaXRlZCBzdHlsZSBpZiBvbmUgZXhpc3RzLgot
ICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFZpc2l0ZWRTdHlsZSA9IG1fcGFyZW50U3R5
bGUtPmdldENhY2hlZFBzZXVkb1N0eWxlKFZJU0lURURfTElOSyk7Ci0gICAgICAgICAgICBpZiAo
cGFyZW50VmlzaXRlZFN0eWxlKQotICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlID0gcGFyZW50
VmlzaXRlZFN0eWxlOwotICAgICAgICB9Ci0gICAgICAgIHZpc2l0ZWRTdHlsZSA9IHN0eWxlRm9y
RWxlbWVudChlLCBwYXJlbnRTdHlsZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgaWYg
KHZpc2l0ZWRTdHlsZSkgewotICAgICAgICAgICAgaWYgKG1fZWxlbWVudExpbmtTdGF0ZSA9PSBJ
bnNpZGVVbnZpc2l0ZWRMaW5rKQotICAgICAgICAgICAgICAgIHZpc2l0ZWRTdHlsZSA9IDA7ICAv
LyBXZSBtYWRlIHRoZSBzdHlsZSB0byBhdm9pZCB0aW1pbmcgYXR0YWNrcy4gSnVzdCB0aHJvdyBp
dCBhd2F5IG5vdyB0aGF0IHdlIGRpZCB0aGF0LCBzaW5jZSB3ZSBkb24ndCBuZWVkIGl0LgotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHZpc2l0ZWRTdHlsZS0+c2V0U3R5bGVUeXBl
KFZJU0lURURfTElOSyk7Ci0gICAgICAgIH0KLSAgICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShl
LCBkZWZhdWx0UGFyZW50KTsKLSAgICB9Ci0KLSAgICBtX2NoZWNrZXIubV9tYXRjaFZpc2l0ZWRQ
c2V1ZG9DbGFzcyA9IG1hdGNoVmlzaXRlZFBzZXVkb0NsYXNzOwotCi0gICAgbV9zdHlsZSA9IFJl
bmRlclN0eWxlOjpjcmVhdGUoKTsKLQotICAgIGlmIChtX3BhcmVudFN0eWxlKQotICAgICAgICBt
X3N0eWxlLT5pbmhlcml0RnJvbShtX3BhcmVudFN0eWxlKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
cGFyZW50U3R5bGUgPSBzdHlsZSgpOwotCi0gICAgaWYgKGUtPmlzTGluaygpKSB7Ci0gICAgICAg
IG1fc3R5bGUtPnNldElzTGluayh0cnVlKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0SW5zaWRlTGlu
ayhtX2VsZW1lbnRMaW5rU3RhdGUpOwotICAgIH0KLSAgICAKLSAgICBpZiAoc2ltcGxlRGVmYXVs
dFN0eWxlU2hlZXQgJiYgIWVsZW1lbnRDYW5Vc2VTaW1wbGVEZWZhdWx0U3R5bGUoZSkpCi0gICAg
ICAgIGxvYWRGdWxsRGVmYXVsdFN0eWxlKCk7Ci0KLSNpZiBFTkFCTEUoU1ZHKQotICAgIHN0YXRp
YyBib29sIGxvYWRlZFNWR1VzZXJBZ2VudFNoZWV0OwotICAgIGlmIChlLT5pc1NWR0VsZW1lbnQo
KSAmJiAhbG9hZGVkU1ZHVXNlckFnZW50U2hlZXQpIHsKLSAgICAgICAgLy8gU1ZHIHJ1bGVzLgot
ICAgICAgICBsb2FkZWRTVkdVc2VyQWdlbnRTaGVldCA9IHRydWU7Ci0gICAgICAgIENTU1N0eWxl
U2hlZXQqIHN2Z1NoZWV0ID0gcGFyc2VVQVNoZWV0KHN2Z1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNp
emVvZihzdmdVc2VyQWdlbnRTdHlsZVNoZWV0KSk7Ci0gICAgICAgIGRlZmF1bHRTdHlsZS0+YWRk
UnVsZXNGcm9tU2hlZXQoc3ZnU2hlZXQsIHNjcmVlbkV2YWwoKSk7Ci0gICAgICAgIGRlZmF1bHRQ
cmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzdmdTaGVldCwgcHJpbnRFdmFsKCkpOwotICAg
IH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKE1BVEhNTCkKLSAgICBzdGF0aWMgYm9vbCBsb2FkZWRN
YXRoTUxVc2VyQWdlbnRTaGVldDsKLSAgICBpZiAoZS0+aXNNYXRoTUxFbGVtZW50KCkgJiYgIWxv
YWRlZE1hdGhNTFVzZXJBZ2VudFNoZWV0KSB7Ci0gICAgICAgIC8vIE1hdGhNTCBydWxlcy4KLSAg
ICAgICAgbG9hZGVkTWF0aE1MVXNlckFnZW50U2hlZXQgPSB0cnVlOwotICAgICAgICBDU1NTdHls
ZVNoZWV0KiBtYXRoTUxTaGVldCA9IHBhcnNlVUFTaGVldChtYXRobWxVc2VyQWdlbnRTdHlsZVNo
ZWV0LCBzaXplb2YobWF0aG1sVXNlckFnZW50U3R5bGVTaGVldCkpOwotICAgICAgICBkZWZhdWx0
U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KG1hdGhNTFNoZWV0LCBzY3JlZW5FdmFsKCkpOwotICAg
ICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWF0aE1MU2hlZXQsIHBy
aW50RXZhbCgpKTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShXTUwpCi0gICAgc3RhdGlj
IGJvb2wgbG9hZGVkV01MVXNlckFnZW50U2hlZXQ7Ci0gICAgaWYgKGUtPmlzV01MRWxlbWVudCgp
ICYmICFsb2FkZWRXTUxVc2VyQWdlbnRTaGVldCkgewotICAgICAgICAvLyBXTUwgcnVsZXMuCi0g
ICAgICAgIGxvYWRlZFdNTFVzZXJBZ2VudFNoZWV0ID0gdHJ1ZTsKLSAgICAgICAgQ1NTU3R5bGVT
aGVldCogd21sU2hlZXQgPSBwYXJzZVVBU2hlZXQod21sVXNlckFnZW50U3R5bGVTaGVldCwgc2l6
ZW9mKHdtbFVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKLSAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRS
dWxlc0Zyb21TaGVldCh3bWxTaGVldCwgc2NyZWVuRXZhbCgpKTsKLSAgICAgICAgZGVmYXVsdFBy
aW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHdtbFNoZWV0LCBwcmludEV2YWwoKSk7Ci0gICAg
fQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoVklERU8pCi0gICAgc3RhdGljIGJvb2wgbG9hZGVkTWVk
aWFTdHlsZVNoZWV0OwotICAgIGlmICghbG9hZGVkTWVkaWFTdHlsZVNoZWV0ICYmIChlLT5oYXNU
YWdOYW1lKHZpZGVvVGFnKSB8fCBlLT5oYXNUYWdOYW1lKGF1ZGlvVGFnKSkpIHsKLSAgICAgICAg
bG9hZGVkTWVkaWFTdHlsZVNoZWV0ID0gdHJ1ZTsKLSAgICAgICAgU3RyaW5nIG1lZGlhUnVsZXMg
PSBTdHJpbmcobWVkaWFDb250cm9sc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihtZWRpYUNv
bnRyb2xzVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgp
LT5leHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7Ci0gICAgICAgIENTU1N0eWxlU2hlZXQq
IG1lZGlhQ29udHJvbHNTaGVldCA9IHBhcnNlVUFTaGVldChtZWRpYVJ1bGVzKTsKLSAgICAgICAg
ZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtZWRpYUNvbnRyb2xzU2hlZXQsIHNjcmVl
bkV2YWwoKSk7Ci0gICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCht
ZWRpYUNvbnRyb2xzU2hlZXQsIHByaW50RXZhbCgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlu
dCBmaXJzdFVBUnVsZSA9IC0xLCBsYXN0VUFSdWxlID0gLTE7Ci0gICAgaW50IGZpcnN0VXNlclJ1
bGUgPSAtMSwgbGFzdFVzZXJSdWxlID0gLTE7Ci0gICAgaW50IGZpcnN0QXV0aG9yUnVsZSA9IC0x
LCBsYXN0QXV0aG9yUnVsZSA9IC0xOwotICAgIG1hdGNoVUFSdWxlcyhmaXJzdFVBUnVsZSwgbGFz
dFVBUnVsZSk7Ci0KLSAgICBpZiAoIXJlc29sdmVGb3JSb290RGVmYXVsdCkgewotICAgICAgICAv
LyA0LiBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBydWxlcy4KLSAgICAgICAgaWYgKG1fbWF0Y2hB
dXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICAgICAgbWF0Y2hSdWxlcyhtX3VzZXJTdHlsZSwg
Zmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlKTsKLQotICAgICAgICAvLyA1LiBOb3cgY2hlY2sg
YXV0aG9yIHJ1bGVzLCBiZWdpbm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRpb25hbCBhdHRyaWJ1
dGVzCi0gICAgICAgIC8vIG1hcHBlZCBmcm9tIEhUTUwuCi0gICAgICAgIGlmIChtX3N0eWxlZEVs
ZW1lbnQpIHsKLSAgICAgICAgICAgIC8vIEFzayBpZiB0aGUgSFRNTCBlbGVtZW50IGhhcyBtYXBw
ZWQgYXR0cmlidXRlcy4KLSAgICAgICAgICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhhc01hcHBl
ZEF0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAgICAgIC8vIFdhbGsgb3VyIGF0dHJpYnV0ZSBs
aXN0IGFuZCBhZGQgaW4gZWFjaCBkZWNsLgotICAgICAgICAgICAgICAgIGNvbnN0IE5hbWVkTm9k
ZU1hcCogbWFwID0gbV9zdHlsZWRFbGVtZW50LT5hdHRyaWJ1dGVNYXAoKTsKLSAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFwLT5sZW5ndGgoKTsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0ciA9IG1hcC0+YXR0cmlidXRlSXRlbShpKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHItPmlzTWFwcGVkQXR0cmlidXRlKCkgJiYgYXR0
ci0+ZGVjbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0QXV0aG9yUnVsZSA9IG1f
bWF0Y2hlZERlY2xzLnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdEF1
dGhvclJ1bGUgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RBdXRob3JS
dWxlID0gbGFzdEF1dGhvclJ1bGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRNYXRjaGVk
RGVjbGFyYXRpb24oYXR0ci0+ZGVjbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gTm93IHdlIGNoZWNr
IGFkZGl0aW9uYWwgbWFwcGVkIGRlY2xhcmF0aW9ucy4KLSAgICAgICAgICAgIC8vIFRhYmxlcyBh
bmQgdGFibGUgY2VsbHMgc2hhcmUgYW4gYWRkaXRpb25hbCBtYXBwZWQgcnVsZSB0aGF0IG11c3Qg
YmUgYXBwbGllZAotICAgICAgICAgICAgLy8gYWZ0ZXIgYWxsIGF0dHJpYnV0ZXMsIHNpbmNlIHRo
ZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2YgbXVsdGlwbGUgYXR0cmli
dXRlcy4KLSAgICAgICAgICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmNhbkhhdmVBZGRpdGlvbmFs
QXR0cmlidXRlU3R5bGVEZWNscygpKSB7Ci0gICAgICAgICAgICAgICAgbV9hZGRpdGlvbmFsQXR0
cmlidXRlU3R5bGVEZWNscy5jbGVhcigpOwotICAgICAgICAgICAgICAgIG1fc3R5bGVkRWxlbWVu
dC0+YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlRGVjbHMobV9hZGRpdGlvbmFsQXR0cmlidXRlU3R5
bGVEZWNscyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHls
ZURlY2xzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhZGRpdGlv
bmFsRGVjbHNTaXplID0gbV9hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNscy5zaXplKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdEF1dGhvclJ1bGUgPT0gLTEpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBmaXJzdEF1dGhvclJ1bGUgPSBtX21hdGNoZWREZWNscy5zaXplKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGxhc3RBdXRob3JSdWxlID0gbV9tYXRjaGVkRGVjbHMuc2l6ZSgp
ICsgYWRkaXRpb25hbERlY2xzU2l6ZSAtIDE7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhZGRpdGlvbmFsRGVjbHNTaXplOyBpKyspCi0gICAgICAgICAgICAg
ICAgICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRpb24obV9hZGRpdGlvbmFsQXR0cmlidXRlU3R5
bGVEZWNsc1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgCi0gICAgICAgIC8vIDYuIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzIG5l
eHQuCi0gICAgICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAgICAg
IG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVs
ZSk7Ci0KLSAgICAgICAgLy8gNy4gTm93IGNoZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRl
LgotICAgICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRFbGVt
ZW50KSB7Ci0gICAgICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lRGVj
bCA9IG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7Ci0gICAgICAgICAgICBpZiAo
aW5saW5lRGVjbCkgewotICAgICAgICAgICAgICAgIGxhc3RBdXRob3JSdWxlID0gbV9tYXRjaGVk
RGVjbHMuc2l6ZSgpOwotICAgICAgICAgICAgICAgIGlmIChmaXJzdEF1dGhvclJ1bGUgPT0gLTEp
Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0QXV0aG9yUnVsZSA9IGxhc3RBdXRob3JSdWxlOwot
ICAgICAgICAgICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihpbmxpbmVEZWNsKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJlc2V0IHRoZSB2YWx1ZSBiYWNr
IGJlZm9yZSBhcHBseWluZyBwcm9wZXJ0aWVzLCBzbyB0aGF0IC13ZWJraXQtbGluayBrbm93cyB3
aGF0IGNvbG9yIHRvIHVzZS4KLSAgICBtX2NoZWNrZXIubV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFz
cyA9IG1hdGNoVmlzaXRlZFBzZXVkb0NsYXNzOwotICAgIAotICAgIC8vIE5vdyB3ZSBoYXZlIGFs
bCBvZiB0aGUgbWF0Y2hlZCBydWxlcyBpbiB0aGUgYXBwcm9wcmlhdGUgb3JkZXIuICBXYWxrIHRo
ZSBydWxlcyBhbmQgYXBwbHkKLSAgICAvLyBoaWdoLXByaW9yaXR5IHByb3BlcnRpZXMgZmlyc3Qs
IGkuZS4sIHRob3NlIHByb3BlcnRpZXMgdGhhdCBvdGhlciBwcm9wZXJ0aWVzIGRlcGVuZCBvbi4K
LSAgICAvLyBUaGUgb3JkZXIgaXMgKDEpIGhpZ2gtcHJpb3JpdHkgbm90IGltcG9ydGFudCwgKDIp
IGhpZ2gtcHJpb3JpdHkgaW1wb3J0YW50LCAoMykgbm9ybWFsIG5vdCBpbXBvcnRhbnQKLSAgICAv
LyBhbmQgKDQpIG5vcm1hbCBpbXBvcnRhbnQuCi0gICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwot
ICAgIGFwcGx5RGVjbGFyYXRpb25zPHRydWU+KGZhbHNlLCAwLCBtX21hdGNoZWREZWNscy5zaXpl
KCkgLSAxKTsKLSAgICBpZiAoIXJlc29sdmVGb3JSb290RGVmYXVsdCkgewotICAgICAgICBhcHBs
eURlY2xhcmF0aW9uczx0cnVlPih0cnVlLCBmaXJzdEF1dGhvclJ1bGUsIGxhc3RBdXRob3JSdWxl
KTsKLSAgICAgICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4odHJ1ZSwgZmlyc3RVc2VyUnVsZSwg
bGFzdFVzZXJSdWxlKTsKLSAgICB9Ci0gICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4odHJ1ZSwg
Zmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwotICAgIAotICAgIC8vIElmIG91ciBmb250IGdvdCBk
aXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KLSAgICBpZiAobV9mb250RGlydHkp
Ci0gICAgICAgIHVwZGF0ZUZvbnQoKTsKLQotICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVu
IHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZQotICAgIGlmIChtX2xpbmVI
ZWlnaHRWYWx1ZSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQs
IG1fbGluZUhlaWdodFZhbHVlKTsKLQotICAgIC8vIE5vdyBkbyB0aGUgbm9ybWFsIHByaW9yaXR5
IFVBIHByb3BlcnRpZXMuCi0gICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KGZhbHNlLCBmaXJz
dFVBUnVsZSwgbGFzdFVBUnVsZSk7Ci0gICAgCi0gICAgLy8gQ2FjaGUgb3VyIGJvcmRlciBhbmQg
YmFja2dyb3VuZCBzbyB0aGF0IHdlIGNhbiBleGFtaW5lIHRoZW0gbGF0ZXIuCi0gICAgY2FjaGVC
b3JkZXJBbmRCYWNrZ3JvdW5kKCk7Ci0gICAgCi0gICAgLy8gTm93IGRvIHRoZSBhdXRob3IgYW5k
IHVzZXIgbm9ybWFsIHByaW9yaXR5IHByb3BlcnRpZXMgYW5kIGFsbCB0aGUgIWltcG9ydGFudCBw
cm9wZXJ0aWVzLgotICAgIGlmICghcmVzb2x2ZUZvclJvb3REZWZhdWx0KSB7Ci0gICAgICAgIGFw
cGx5RGVjbGFyYXRpb25zPGZhbHNlPihmYWxzZSwgbGFzdFVBUnVsZSArIDEsIG1fbWF0Y2hlZERl
Y2xzLnNpemUoKSAtIDEpOwotICAgICAgICBhcHBseURlY2xhcmF0aW9uczxmYWxzZT4odHJ1ZSwg
Zmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSk7Ci0gICAgICAgIGFwcGx5RGVjbGFyYXRp
b25zPGZhbHNlPih0cnVlLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUpOwotICAgIH0KLSAg
ICBhcHBseURlY2xhcmF0aW9uczxmYWxzZT4odHJ1ZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUp
OwotICAgIAotICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkIGJ5IG9uZSBvZiB0aGUgbm9u
LWVzc2VudGlhbCBmb250IHByb3BzLCAKLSAgICAvLyBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IGEg
c2Vjb25kIHRpbWUuCi0gICAgaWYgKG1fZm9udERpcnR5KQotICAgICAgICB1cGRhdGVGb250KCk7
Ci0gICAgCi0gICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRl
eHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVuZGVyU3R5
bGUoc3R5bGUoKSwgZSk7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGZpcnN0LWxldHRlciBwc2V1ZG8g
c3R5bGUsIGRvIG5vdCBzaGFyZSB0aGlzIHN0eWxlCi0gICAgaWYgKG1fc3R5bGUtPmhhc1BzZXVk
b1N0eWxlKEZJUlNUX0xFVFRFUikpCi0gICAgICAgIG1fc3R5bGUtPnNldFVuaXF1ZSgpOwotCi0g
ICAgaWYgKHZpc2l0ZWRTdHlsZSkgewotICAgICAgICAvLyBDb3B5IGFueSBwc2V1ZG8gYml0cyB0
aGF0IHRoZSB2aXNpdGVkIHN0eWxlIGhhcyB0byB0aGUgcHJpbWFyeSBzdHlsZSBzbyB0aGF0Ci0g
ICAgICAgIC8vIHBzZXVkbyBlbGVtZW50IHN0eWxlcyB3aWxsIGNvbnRpbnVlIHRvIHdvcmsgZm9y
IHBzZXVkbyBlbGVtZW50cyBpbnNpZGUgOnZpc2l0ZWQKLSAgICAgICAgLy8gbGlua3MuCi0gICAg
ICAgIGZvciAodW5zaWduZWQgcHNldWRvID0gRklSU1RfUFVCTElDX1BTRVVET0lEOyBwc2V1ZG8g
PCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRDsgKytwc2V1ZG8pIHsKLSAgICAgICAgICAgIGlmICh2
aXNpdGVkU3R5bGUtPmhhc1BzZXVkb1N0eWxlKHN0YXRpY19jYXN0PFBzZXVkb0lkPihwc2V1ZG8p
KSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShzdGF0aWNfY2Fz
dDxQc2V1ZG9JZD4ocHNldWRvKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEFk
ZCB0aGUgdmlzaXRlZCBzdHlsZSBvZmYgdGhlIG1haW4gc3R5bGUuCi0gICAgICAgIG1fc3R5bGUt
PmFkZENhY2hlZFBzZXVkb1N0eWxlKHZpc2l0ZWRTdHlsZS5yZWxlYXNlKCkpOwotICAgIH0KLQot
ICAgIGlmICghbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MpCi0gICAgICAgIGluaXRFbGVtZW50KDAp
OyAvLyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0IHJlc29sdmUuCi0KLSAgICAvLyBOb3cgcmV0dXJu
IHRoZSBzdHlsZS4KLSAgICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3Qg
UmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBr
ZXlmcmFtZVJ1bGUsIEtleWZyYW1lTGlzdCYgbGlzdCkKLXsKLSAgICBpZiAoa2V5ZnJhbWVSdWxl
LT5zdHlsZSgpKQotICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRpb24oa2V5ZnJhbWVSdWxlLT5z
dHlsZSgpKTsKLQotICAgIEFTU0VSVCghbV9zdHlsZSk7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIHN0
eWxlCi0gICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShlbGVtZW50U3R5bGUpOwotCi0g
ICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwotCi0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3Ro
ZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCi0gICAgLy8g
ZGVjbCwgdGhlcmUncyBub3RoaW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3Qg
cHJvcGVydGllcy4KLSAgICBpZiAoa2V5ZnJhbWVSdWxlLT5zdHlsZSgpKQotICAgICAgICBhcHBs
eURlY2xhcmF0aW9uczx0cnVlPihmYWxzZSwgMCwgbV9tYXRjaGVkRGVjbHMuc2l6ZSgpIC0gMSk7
Ci0KLSAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBp
dCBub3cuCi0gICAgaWYgKG1fZm9udERpcnR5KQotICAgICAgICB1cGRhdGVGb250KCk7Ci0KLSAg
ICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRo
ZSBmb250LXNpemUKLSAgICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7Ci0KLSAgICAv
LyBOb3cgZG8gcmVzdCBvZiB0aGUgcHJvcGVydGllcy4KLSAgICBpZiAoa2V5ZnJhbWVSdWxlLT5z
dHlsZSgpKQotICAgICAgICBhcHBseURlY2xhcmF0aW9uczxmYWxzZT4oZmFsc2UsIDAsIG1fbWF0
Y2hlZERlY2xzLnNpemUoKSAtIDEpOwotCi0gICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQg
Ynkgb25lIG9mIHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsCi0gICAgLy8gZ28gYWhlYWQg
YW5kIHVwZGF0ZSBpdCBhIHNlY29uZCB0aW1lLgotICAgIGlmIChtX2ZvbnREaXJ0eSkKLSAgICAg
ICAgdXBkYXRlRm9udCgpOwotCi0gICAgLy8gQWRkIGFsbCB0aGUgYW5pbWF0aW5nIHByb3BlcnRp
ZXMgdG8gdGhlIGxpc3QKLSAgICBpZiAoa2V5ZnJhbWVSdWxlLT5zdHlsZSgpKSB7Ci0gICAgICAg
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBrZXlmcmFt
ZVJ1bGUtPnN0eWxlKCktPmVuZCgpOwotICAgICAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IGtleWZyYW1lUnVsZS0+c3R5bGUoKS0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpbnQgcHJvcGVydHkgPSAoKml0KS5p
ZCgpOwotICAgICAgICAgICAgLy8gVGltaW5nLWZ1bmN0aW9uIHdpdGhpbiBrZXlmcmFtZXMgaXMg
c3BlY2lhbCwgYmVjYXVzZSBpdCBpcyBub3QgYW5pbWF0ZWQ7IGl0IGp1c3QKLSAgICAgICAgICAg
IC8vIGRlc2NyaWJlcyB0aGUgdGltaW5nIGZ1bmN0aW9uIGJldHdlZW4gdGhpcyBrZXlmcmFtZSBh
bmQgdGhlIG5leHQuCi0gICAgICAgICAgICBpZiAocHJvcGVydHkgIT0gQ1NTUHJvcGVydHlXZWJr
aXRBbmltYXRpb25UaW1pbmdGdW5jdGlvbikKLSAgICAgICAgICAgICAgICBsaXN0LmFkZFByb3Bl
cnR5KHByb3BlcnR5KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtX3N0eWxlLnJl
bGVhc2UoKTsKLX0KLQotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjprZXlmcmFtZVN0eWxlc0ZvckFu
aW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBLZXlm
cmFtZUxpc3QmIGxpc3QpCi17Ci0gICAgbGlzdC5jbGVhcigpOwotICAgIAotICAgIC8vIEdldCB0
aGUga2V5ZnJhbWVzUnVsZSBmb3IgdGhpcyBuYW1lCi0gICAgaWYgKCFlIHx8IGxpc3QuYW5pbWF0
aW9uTmFtZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9rZXlmcmFtZXNS
dWxlTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgIAotICAgIGlmICghbV9rZXlmcmFtZXNSdWxl
TWFwLmNvbnRhaW5zKGxpc3QuYW5pbWF0aW9uTmFtZSgpLmltcGwoKSkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAgICAgCi0gICAgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSogcnVsZSA9IG1f
a2V5ZnJhbWVzUnVsZU1hcC5maW5kKGxpc3QuYW5pbWF0aW9uTmFtZSgpLmltcGwoKSkuZ2V0KCkt
PnNlY29uZC5nZXQoKTsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGtleWZyYW1lU3R5bGU7Ci0g
ICAgCi0gICAgLy8gQ29uc3RydWN0IGFuZCBwb3B1bGF0ZSB0aGUgc3R5bGUgZm9yIGVhY2gga2V5
ZnJhbWUKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZS0+bGVuZ3RoKCk7ICsraSkg
ewotICAgICAgICAvLyBBcHBseSB0aGUgZGVjbGFyYXRpb24gdG8gdGhlIHN0eWxlLiBUaGlzIGlz
IGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHRoZSBsb2dpYyBpbiBzdHlsZUZvckVsZW1lbnQKLSAg
ICAgICAgaW5pdEVsZW1lbnQoZSk7Ci0gICAgICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSk7Ci0g
ICAgICAgIAotICAgICAgICBjb25zdCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIGtleWZyYW1lUnVs
ZSA9IHJ1bGUtPml0ZW0oaSk7Ci0gICAgICAgIAotICAgICAgICBrZXlmcmFtZVN0eWxlID0gc3R5
bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIGtleWZyYW1lUnVsZSwgbGlzdCk7Ci0KLSAgICAg
ICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUgc3R5bGUgdG8gYWxsIHRoZSBpbmRpY2F0ZWQga2V5IHRp
bWVzCi0gICAgICAgIFZlY3RvcjxmbG9hdD4ga2V5czsKLSAgICAgICAga2V5ZnJhbWVSdWxlLT5n
ZXRLZXlzKGtleXMpOwotICAgICAgICBmb3IgKHNpemVfdCBrZXlJbmRleCA9IDA7IGtleUluZGV4
IDwga2V5cy5zaXplKCk7ICsra2V5SW5kZXgpIHsKLSAgICAgICAgICAgIGZsb2F0IGtleSA9IGtl
eXNba2V5SW5kZXhdOwotICAgICAgICAgICAgbGlzdC5pbnNlcnQoa2V5LCBrZXlmcmFtZVN0eWxl
LmdldCgpKTsKLSAgICAgICAgfQotICAgICAgICBrZXlmcmFtZVN0eWxlLnJlbGVhc2UoKTsKLSAg
ICB9Ci0gICAgCi0gICAgLy8gSWYgdGhlIDAlIGtleWZyYW1lIGlzIG1pc3NpbmcsIGNyZWF0ZSBp
dCAoYnV0IG9ubHkgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG90aGVyIGtleWZyYW1lKQotICAg
IGludCBpbml0aWFsTGlzdFNpemUgPSBsaXN0LnNpemUoKTsKLSAgICBpZiAoaW5pdGlhbExpc3RT
aXplID4gMCAmJiBsaXN0LmJlZ2luS2V5ZnJhbWVzKCktPmtleSgpICE9IDApIHsKLSAgICAgICAg
UmVmUHRyPFdlYktpdENTU0tleWZyYW1lUnVsZT4ga2V5ZnJhbWUgPSBXZWJLaXRDU1NLZXlmcmFt
ZVJ1bGU6OmNyZWF0ZSgpOwotICAgICAgICBrZXlmcmFtZS0+c2V0S2V5VGV4dCgiMCUiKTsKLSAg
ICAgICAga2V5ZnJhbWVTdHlsZSA9IHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBrZXlm
cmFtZS5nZXQoKSwgbGlzdCk7Ci0gICAgICAgIGxpc3QuaW5zZXJ0KDAsIGtleWZyYW1lU3R5bGUu
cmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgMTAwJSBrZXlmcmFtZSBpcyBtaXNz
aW5nLCBjcmVhdGUgaXQgKGJ1dCBvbmx5IGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBvdGhlciBr
ZXlmcmFtZSkKLSAgICBpZiAoaW5pdGlhbExpc3RTaXplID4gMCAmJiAobGlzdC5lbmRLZXlmcmFt
ZXMoKSAtIDEpLT5rZXkoKSAhPSAxKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJLaXRDU1NLZXlmcmFt
ZVJ1bGU+IGtleWZyYW1lID0gV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpjcmVhdGUoKTsKLSAgICAg
ICAga2V5ZnJhbWUtPnNldEtleVRleHQoIjEwMCUiKTsKLSAgICAgICAga2V5ZnJhbWVTdHlsZSA9
IHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBrZXlmcmFtZS5nZXQoKSwgbGlzdCk7Ci0g
ICAgICAgIGxpc3QuaW5zZXJ0KDEsIGtleWZyYW1lU3R5bGUucmVsZWFzZSgpKTsKLSAgICB9Ci19
Ci0KLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxl
Rm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sIEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSwgYm9vbCBtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcykKLXsKLSAgICBpZiAoIWUpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgaW5pdEVsZW1lbnQoZSk7Ci0KLSAgICAvLyBDb21wdXRl
IG91ciA6dmlzaXRlZCBzdHlsZSBmaXJzdCwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgb3Igbm90
IHdlJ2xsIG5lZWQgdG8gY3JlYXRlIGEgbm9ybWFsIHN0eWxlIGp1c3QgdG8gaGFuZyBpdAotICAg
IC8vIG9mZiBvZi4KLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHZpc2l0ZWRTdHlsZTsKLSAgICBp
ZiAoIW1hdGNoVmlzaXRlZFBzZXVkb0NsYXNzICYmIHBhcmVudFN0eWxlICYmIHBhcmVudFN0eWxl
LT5pbnNpZGVMaW5rKCkpIHsKLSAgICAgICAgLy8gRmV0Y2ggb3VyIHBhcmVudCBzdHlsZSB3aXRo
IDp2aXNpdGVkIGluIGVmZmVjdC4KLSAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFZpc2l0ZWRT
dHlsZSA9IHBhcmVudFN0eWxlLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShWSVNJVEVEX0xJTkspOwot
ICAgICAgICB2aXNpdGVkU3R5bGUgPSBwc2V1ZG9TdHlsZUZvckVsZW1lbnQocHNldWRvLCBlLCBw
YXJlbnRWaXNpdGVkU3R5bGUgPyBwYXJlbnRWaXNpdGVkU3R5bGUgOiBwYXJlbnRTdHlsZSwgdHJ1
ZSk7Ci0gICAgICAgIGlmICh2aXNpdGVkU3R5bGUpIHsKLSAgICAgICAgICAgIGlmIChtX2VsZW1l
bnRMaW5rU3RhdGUgPT0gSW5zaWRlVW52aXNpdGVkTGluaykKLSAgICAgICAgICAgICAgICB2aXNp
dGVkU3R5bGUgPSAwOyAgLy8gV2UgbWFkZSB0aGUgc3R5bGUgdG8gYXZvaWQgdGltaW5nIGF0dGFj
a3MuIEp1c3QgdGhyb3cgaXQgYXdheSBub3cgdGhhdCB3ZSBkaWQgdGhhdC4KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB2aXNpdGVkU3R5bGUtPnNldFN0eWxlVHlwZShWSVNJVEVE
X0xJTkspOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCBw
YXJlbnRTdHlsZSwgcHNldWRvKTsKLSAgICBtX3N0eWxlID0gcGFyZW50U3R5bGU7Ci0gICAgCi0g
ICAgbV9jaGVja2VyLm1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBtYXRjaFZpc2l0ZWRQc2V1
ZG9DbGFzczsKLQotICAgIC8vIFNpbmNlIHdlIGRvbid0IHVzZSBwc2V1ZG8tZWxlbWVudHMgaW4g
YW55IG9mIG91ciBxdWlyay9wcmludCB1c2VyIGFnZW50IHJ1bGVzLCBkb24ndCB3YXN0ZSB0aW1l
IHdhbGtpbmcKLSAgICAvLyB0aG9zZSBydWxlcy4KLSAgICAKLSAgICAvLyBDaGVjayBVQSwgdXNl
ciBhbmQgYXV0aG9yIHJ1bGVzLgotICAgIGludCBmaXJzdFVBUnVsZSA9IC0xLCBsYXN0VUFSdWxl
ID0gLTEsIGZpcnN0VXNlclJ1bGUgPSAtMSwgbGFzdFVzZXJSdWxlID0gLTEsIGZpcnN0QXV0aG9y
UnVsZSA9IC0xLCBsYXN0QXV0aG9yUnVsZSA9IC0xOwotICAgIG1hdGNoVUFSdWxlcyhmaXJzdFVB
UnVsZSwgbGFzdFVBUnVsZSk7Ci0KLSAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMp
IHsKLSAgICAgICAgbWF0Y2hSdWxlcyhtX3VzZXJTdHlsZSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVz
ZXJSdWxlKTsKLSAgICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLCBmaXJzdEF1dGhvclJ1
bGUsIGxhc3RBdXRob3JSdWxlKTsKLSAgICB9Ci0KLSAgICBpZiAobV9tYXRjaGVkRGVjbHMuaXNF
bXB0eSgpICYmICF2aXNpdGVkU3R5bGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgbV9zdHls
ZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICBpZiAocGFyZW50U3R5bGUpCi0gICAgICAg
IG1fc3R5bGUtPmluaGVyaXRGcm9tKHBhcmVudFN0eWxlKTsKLQotICAgIG1fc3R5bGUtPnNldFN0
eWxlVHlwZShwc2V1ZG8pOwotICAgIAotICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKLSAgICAK
LSAgICAvLyBSZXNldCB0aGUgdmFsdWUgYmFjayBiZWZvcmUgYXBwbHlpbmcgcHJvcGVydGllcywg
c28gdGhhdCAtd2Via2l0LWxpbmsga25vd3Mgd2hhdCBjb2xvciB0byB1c2UuCi0gICAgbV9jaGVj
a2VyLm1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzczsK
LQotICAgIC8vIEhpZ2gtcHJpb3JpdHkgcHJvcGVydGllcy4KLSAgICBhcHBseURlY2xhcmF0aW9u
czx0cnVlPihmYWxzZSwgMCwgbV9tYXRjaGVkRGVjbHMuc2l6ZSgpIC0gMSk7Ci0gICAgYXBwbHlE
ZWNsYXJhdGlvbnM8dHJ1ZT4odHJ1ZSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSk7
Ci0gICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4odHJ1ZSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVz
ZXJSdWxlKTsKLSAgICBhcHBseURlY2xhcmF0aW9uczx0cnVlPih0cnVlLCBmaXJzdFVBUnVsZSwg
bGFzdFVBUnVsZSk7Ci0gICAgCi0gICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFo
ZWFkIGFuZCB1cGRhdGUgaXQgbm93LgotICAgIGlmIChtX2ZvbnREaXJ0eSkKLSAgICAgICAgdXBk
YXRlRm9udCgpOwotCi0gICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUg
d2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplCi0gICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQot
ICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0
VmFsdWUpOwotICAgIAotICAgIC8vIE5vdyBkbyB0aGUgbm9ybWFsIHByaW9yaXR5IHByb3BlcnRp
ZXMuCi0gICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KGZhbHNlLCBmaXJzdFVBUnVsZSwgbGFz
dFVBUnVsZSk7Ci0gICAgCi0gICAgLy8gQ2FjaGUgb3VyIGJvcmRlciBhbmQgYmFja2dyb3VuZCBz
byB0aGF0IHdlIGNhbiBleGFtaW5lIHRoZW0gbGF0ZXIuCi0gICAgY2FjaGVCb3JkZXJBbmRCYWNr
Z3JvdW5kKCk7Ci0gICAgCi0gICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KGZhbHNlLCBsYXN0
VUFSdWxlICsgMSwgbV9tYXRjaGVkRGVjbHMuc2l6ZSgpIC0gMSk7Ci0gICAgYXBwbHlEZWNsYXJh
dGlvbnM8ZmFsc2U+KHRydWUsIGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUpOwotICAg
IGFwcGx5RGVjbGFyYXRpb25zPGZhbHNlPih0cnVlLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1
bGUpOwotICAgIGFwcGx5RGVjbGFyYXRpb25zPGZhbHNlPih0cnVlLCBmaXJzdFVBUnVsZSwgbGFz
dFVBUnVsZSk7Ci0gICAgCi0gICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQgYnkgb25lIG9m
IHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsIAotICAgIC8vIGdvIGFoZWFkIGFuZCB1cGRh
dGUgaXQgYSBzZWNvbmQgdGltZS4KLSAgICBpZiAobV9mb250RGlydHkpCi0gICAgICAgIHVwZGF0
ZUZvbnQoKTsKLQotICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFu
ZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRl
clN0eWxlKHN0eWxlKCksIDApOwotCi0gICAgLy8gSGFuZyBvdXIgdmlzaXRlZCBzdHlsZSBvZmYg
bV9zdHlsZS4KLSAgICBpZiAodmlzaXRlZFN0eWxlKQotICAgICAgICBtX3N0eWxlLT5hZGRDYWNo
ZWRQc2V1ZG9TdHlsZSh2aXNpdGVkU3R5bGUucmVsZWFzZSgpKTsKLSAgICAgICAgCi0gICAgLy8g
Tm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOwotfQot
Ci1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvclBhZ2Uo
aW50IHBhZ2VJbmRleCkKLXsKLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKG1fY2hlY2tlci5tX2Rv
Y3VtZW50LT5ib2R5KCkpOwotCi0gICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsK
LSAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShtX3Jvb3RFbGVtZW50U3R5bGUpOwotCi0gICAgY29u
c3QgYm9vbCBpc0xlZnQgPSBpc0xlZnRQYWdlKHBhZ2VJbmRleCk7Ci0gICAgY29uc3QgYm9vbCBp
c0ZpcnN0ID0gaXNGaXJzdFBhZ2UocGFnZUluZGV4KTsKLSAgICBjb25zdCBTdHJpbmcgcGFnZSA9
IHBhZ2VOYW1lKHBhZ2VJbmRleCk7Ci0gICAgbWF0Y2hQYWdlUnVsZXMoZGVmYXVsdFByaW50U3R5
bGUsIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7Ci0gICAgbWF0Y2hQYWdlUnVsZXMobV91c2VyU3R5
bGUsIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7Ci0gICAgbWF0Y2hQYWdlUnVsZXMobV9hdXRob3JT
dHlsZSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7
Ci0gICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4oZmFsc2UsIDAsIG1fbWF0Y2hlZERlY2xzLnNp
emUoKSAtIDEpOwotCi0gICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFkIGFu
ZCB1cGRhdGUgaXQgbm93LgotICAgIGlmIChtX2ZvbnREaXJ0eSkKLSAgICAgICAgdXBkYXRlRm9u
dCgpOwotCi0gICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVj
aWRlZCBvbiB0aGUgZm9udC1zaXplCi0gICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQotICAgICAg
ICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUp
OwotCi0gICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KGZhbHNlLCAwLCBtX21hdGNoZWREZWNs
cy5zaXplKCkgLSAxKTsKLQotICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVy
biBtX3N0eWxlLnJlbGVhc2UoKTsKLX0KLQotI2lmIEVOQUJMRShEQVRBR1JJRCkKLQotUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JEYXRhR3Jp
ZENvbHVtbihEYXRhR3JpZENvbHVtbiosIFJlbmRlclN0eWxlKikKLXsKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENT
U1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRGF0YUdyaWRDb2x1bW5IZWFkZXIoRGF0YUdy
aWRDb2x1bW4qLCBSZW5kZXJTdHlsZSopCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudAotICAg
IHJldHVybiAwOwotfQotCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgYWRkSW50cmluc2ljTWFyZ2lu
cyhSZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0gICAgLy8gSW50cmluc2ljIG1hcmdpbiB2YWx1ZS4K
LSAgICBjb25zdCBpbnQgaW50cmluc2ljTWFyZ2luID0gMiAqIHN0eWxlLT5lZmZlY3RpdmVab29t
KCk7Ci0gICAgCi0gICAgLy8gRklYTUU6IFVzaW5nIHdpZHRoL2hlaWdodCBhbG9uZSBhbmQgbm90
IGFsc28gZGVhbGluZyB3aXRoIG1pbi13aWR0aC9tYXgtd2lkdGggaXMgZmxhd2VkLgotICAgIC8v
IEZJWE1FOiBVc2luZyAicXVpcmsiIHRvIGRlY2lkZSB0aGUgbWFyZ2luIHdhc24ndCBzZXQgaXMg
a2luZCBvZiBsYW1lLgotICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygp
KSB7Ci0gICAgICAgIGlmIChzdHlsZS0+bWFyZ2luTGVmdCgpLnF1aXJrKCkpCi0gICAgICAgICAg
ICBzdHlsZS0+c2V0TWFyZ2luTGVmdChMZW5ndGgoaW50cmluc2ljTWFyZ2luLCBGaXhlZCkpOwot
ICAgICAgICBpZiAoc3R5bGUtPm1hcmdpblJpZ2h0KCkucXVpcmsoKSkKLSAgICAgICAgICAgIHN0
eWxlLT5zZXRNYXJnaW5SaWdodChMZW5ndGgoaW50cmluc2ljTWFyZ2luLCBGaXhlZCkpOwotICAg
IH0KLQotICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpIHsKLSAgICAgICAgaWYgKHN0
eWxlLT5tYXJnaW5Ub3AoKS5xdWlyaygpKQotICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpblRv
cChMZW5ndGgoaW50cmluc2ljTWFyZ2luLCBGaXhlZCkpOwotICAgICAgICBpZiAoc3R5bGUtPm1h
cmdpbkJvdHRvbSgpLnF1aXJrKCkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luQm90dG9t
KExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZpeGVkKSk7Ci0gICAgfQotfQotCi12b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCAqZSkKLXsKLSAgICAvLyBDYWNoZSBvdXIgb3JpZ2luYWwgZGlzcGxheS4KLSAgICBzdHlsZS0+
c2V0T3JpZ2luYWxEaXNwbGF5KHN0eWxlLT5kaXNwbGF5KCkpOwotCi0gICAgaWYgKHN0eWxlLT5k
aXNwbGF5KCkgIT0gTk9ORSkgewotICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgPHRkPiB0aGF0IHNw
ZWNpZmllcyBhIGZsb2F0IHByb3BlcnR5LCBpbiBxdWlya3MgbW9kZSB3ZSBqdXN0IGRyb3AgdGhl
IGZsb2F0Ci0gICAgICAgIC8vIHByb3BlcnR5LgotICAgICAgICAvLyBTaXRlcyBhbHNvIGNvbW1v
bmx5IHVzZSBkaXNwbGF5OmlubGluZS9ibG9jayBvbiA8dGQ+cyBhbmQgPHRhYmxlPnMuICBJbiBx
dWlya3MgbW9kZSB3ZSBmb3JjZQotICAgICAgICAvLyB0aGVzZSB0YWdzIHRvIHJldGFpbiB0aGVp
ciBkaXNwbGF5IHR5cGVzLgotICAgICAgICBpZiAoIW1fY2hlY2tlci5tX3N0cmljdFBhcnNpbmcg
JiYgZSkgewotICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUodGRUYWcpKSB7Ci0gICAgICAg
ICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoVEFCTEVfQ0VMTCk7Ci0gICAgICAgICAgICAgICAg
c3R5bGUtPnNldEZsb2F0aW5nKEZOT05FKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgaWYgKGUtPmhhc1RhZ05hbWUodGFibGVUYWcpKQotICAgICAgICAgICAgICAgIHN0eWxlLT5z
ZXREaXNwbGF5KHN0eWxlLT5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkgPyBJTkxJTkVfVEFCTEUgOiBU
QUJMRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZSAmJiAoZS0+aGFzVGFnTmFtZSh0ZFRh
ZykgfHwgZS0+aGFzVGFnTmFtZSh0aFRhZykpKSB7Ci0gICAgICAgICAgICBpZiAoc3R5bGUtPndo
aXRlU3BhY2UoKSA9PSBLSFRNTF9OT1dSQVApIHsKLSAgICAgICAgICAgICAgICAvLyBGaWd1cmUg
b3V0IGlmIHdlIGFyZSByZWFsbHkgbm93cmFwcGluZyBvciBpZiB3ZSBzaG91bGQganVzdAotICAg
ICAgICAgICAgICAgIC8vIHVzZSBub3JtYWwgaW5zdGVhZC4gIElmIHRoZSB3aWR0aCBvZiB0aGUg
Y2VsbCBpcyBmaXhlZCwgdGhlbgotICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGFjdHVhbGx5
IHVzZSBOT1dSQVAuCi0gICAgICAgICAgICAgICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzRml4ZWQo
KSkKLSAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoTk9STUFMKTsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRXaGl0ZVNw
YWNlKE5PV1JBUCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUYWJs
ZXMgbmV2ZXIgc3VwcG9ydCB0aGUgLXdlYmtpdC0qIHZhbHVlcyBmb3IgdGV4dC1hbGlnbiBhbmQg
d2lsbCByZXNldCBiYWNrIHRvIHRoZSBkZWZhdWx0LgotICAgICAgICBpZiAoZSAmJiBlLT5oYXNU
YWdOYW1lKHRhYmxlVGFnKSAmJiAoc3R5bGUtPnRleHRBbGlnbigpID09IFdFQktJVF9MRUZUIHx8
IHN0eWxlLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfQ0VOVEVSIHx8IHN0eWxlLT50ZXh0QWxpZ24o
KSA9PSBXRUJLSVRfUklHSFQpKQotICAgICAgICAgICAgc3R5bGUtPnNldFRleHRBbGlnbihUQUFV
VE8pOwotCi0gICAgICAgIC8vIEZyYW1lcyBhbmQgZnJhbWVzZXRzIG5ldmVyIGhvbm9yIHBvc2l0
aW9uOnJlbGF0aXZlIG9yIHBvc2l0aW9uOmFic29sdXRlLiAgVGhpcyBpcyBuZWNlc3NhcnkgdG8K
LSAgICAgICAgLy8gZml4IGEgY3Jhc2ggd2hlcmUgYSBzaXRlIHRyaWVzIHRvIHBvc2l0aW9uIHRo
ZXNlIG9iamVjdHMuICBUaGV5IGFsc28gbmV2ZXIgaG9ub3IgZGlzcGxheS4KLSAgICAgICAgaWYg
KGUgJiYgKGUtPmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IGUtPmhhc1RhZ05hbWUoZnJhbWVzZXRU
YWcpKSkgewotICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsK
LSAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFRhYmxlIGhlYWRlcnMgd2l0aCBhIHRleHQtYWxpZ24gb2YgYXV0byB3aWxsIGNoYW5n
ZSB0aGUgdGV4dC1hbGlnbiB0byBjZW50ZXIuCi0gICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05h
bWUodGhUYWcpICYmIHN0eWxlLT50ZXh0QWxpZ24oKSA9PSBUQUFVVE8pCi0gICAgICAgICAgICBz
dHlsZS0+c2V0VGV4dEFsaWduKENFTlRFUik7Ci0KLSAgICAgICAgaWYgKGUgJiYgZS0+aGFzVGFn
TmFtZShsZWdlbmRUYWcpKQotICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwot
Ci0gICAgICAgIC8vIE11dGF0ZSB0aGUgZGlzcGxheSB0byBCTE9DSyBvciBUQUJMRSBmb3IgY2Vy
dGFpbiBjYXNlcywgZS5nLiwgaWYgc29tZW9uZSBhdHRlbXB0cyB0bwotICAgICAgICAvLyBwb3Np
dGlvbiBvciBmbG9hdCBhbiBpbmxpbmUsIGNvbXBhY3QsIG9yIHJ1bi1pbi4gIENhY2hlIHRoZSBv
cmlnaW5hbCBkaXNwbGF5LCBzaW5jZSBpdAotICAgICAgICAvLyBtYXkgYmUgbmVlZGVkIGZvciBw
b3NpdGlvbmVkIGVsZW1lbnRzIHRoYXQgaGF2ZSB0byBjb21wdXRlIHRoZWlyIHN0YXRpYyBub3Jt
YWwgZmxvdwotICAgICAgICAvLyBwb3NpdGlvbnMuICBXZSBhbHNvIGZvcmNlIGlubGluZS1sZXZl
bCByb290cyB0byBiZSBibG9jay1sZXZlbC4KLSAgICAgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkg
IT0gQkxPQ0sgJiYgc3R5bGUtPmRpc3BsYXkoKSAhPSBUQUJMRSAmJiBzdHlsZS0+ZGlzcGxheSgp
ICE9IEJPWCAmJgotICAgICAgICAgICAgKHN0eWxlLT5wb3NpdGlvbigpID09IEFic29sdXRlUG9z
aXRpb24gfHwgc3R5bGUtPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbiB8fCBzdHlsZS0+Zmxv
YXRpbmcoKSAhPSBGTk9ORSB8fAotICAgICAgICAgICAgIChlICYmIGUtPmRvY3VtZW50KCktPmRv
Y3VtZW50RWxlbWVudCgpID09IGUpKSkgewotICAgICAgICAgICAgaWYgKHN0eWxlLT5kaXNwbGF5
KCkgPT0gSU5MSU5FX1RBQkxFKQotICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KFRB
QkxFKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX0JP
WCkKLSAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShCT1gpOwotICAgICAgICAgICAg
ZWxzZSBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBMSVNUX0lURU0pIHsKLSAgICAgICAgICAgICAg
ICAvLyBJdCBpcyBhIFdpbklFIGJ1ZyB0aGF0IGZsb2F0ZWQgbGlzdCBpdGVtcyBsb3NlIHRoZWly
IGJ1bGxldHMsIHNvIHdlJ2xsIGVtdWxhdGUgdGhlIHF1aXJrLAotICAgICAgICAgICAgICAgIC8v
IGJ1dCBvbmx5IGluIHF1aXJrcyBtb2RlLgotICAgICAgICAgICAgICAgIGlmICghbV9jaGVja2Vy
Lm1fc3RyaWN0UGFyc2luZyAmJiBzdHlsZS0+ZmxvYXRpbmcoKSAhPSBGTk9ORSkKLSAgICAgICAg
ICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gQWZ0ZXIgcGVyZm9ybWluZyB0aGUgZGlz
cGxheSBtdXRhdGlvbiwgY2hlY2sgdGFibGUgcm93cy4gIFdlIGRvIG5vdCBob25vciBwb3NpdGlv
bjpyZWxhdGl2ZSBvbgotICAgICAgICAvLyB0YWJsZSByb3dzIG9yIGNlbGxzLiAgVGhpcyBoYXMg
YmVlbiBlc3RhYmxpc2hlZCBpbiBDU1MyLjEgKGFuZCBjYXVzZWQgYSBjcmFzaCBpbiBjb250YWlu
aW5nQmxvY2soKQotICAgICAgICAvLyBvbiBzb21lIHNpdGVzKS4KLSAgICAgICAgaWYgKChzdHls
ZS0+ZGlzcGxheSgpID09IFRBQkxFX0hFQURFUl9HUk9VUCB8fCBzdHlsZS0+ZGlzcGxheSgpID09
IFRBQkxFX1JPV19HUk9VUCB8fAotICAgICAgICAgICAgIHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFC
TEVfRk9PVEVSX0dST1VQIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XIHx8IHN0eWxl
LT5kaXNwbGF5KCkgPT0gVEFCTEVfQ0VMTCkgJiYKLSAgICAgICAgICAgICBzdHlsZS0+cG9zaXRp
b24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uKQotICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9u
KFN0YXRpY1Bvc2l0aW9uKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgb3VyIHotaW5kZXgg
dmFsdWUgaXMgb25seSBhcHBsaWVkIGlmIHRoZSBvYmplY3QgaXMgcG9zaXRpb25lZC4KLSAgICBp
ZiAoc3R5bGUtPnBvc2l0aW9uKCkgPT0gU3RhdGljUG9zaXRpb24pCi0gICAgICAgIHN0eWxlLT5z
ZXRIYXNBdXRvWkluZGV4KCk7Ci0KLSAgICAvLyBBdXRvIHotaW5kZXggYmVjb21lcyAwIGZvciB0
aGUgcm9vdCBlbGVtZW50IGFuZCB0cmFuc3BhcmVudCBvYmplY3RzLiAgVGhpcyBwcmV2ZW50cwot
ICAgIC8vIGNhc2VzIHdoZXJlIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgYmxlbmRlZCBhcyBhIHNp
bmdsZSB1bml0IGVuZCB1cCB3aXRoIGEgbm9uLXRyYW5zcGFyZW50Ci0gICAgLy8gb2JqZWN0IHdl
ZGdlZCBpbiBiZXR3ZWVuIHRoZW0uICBBdXRvIHotaW5kZXggYWxzbyBiZWNvbWVzIDAgZm9yIG9i
amVjdHMgdGhhdCBzcGVjaWZ5IHRyYW5zZm9ybXMvbWFza3MvcmVmbGVjdGlvbnMuCi0gICAgaWYg
KHN0eWxlLT5oYXNBdXRvWkluZGV4KCkgJiYgKChlICYmIGUtPmRvY3VtZW50KCktPmRvY3VtZW50
RWxlbWVudCgpID09IGUpIHx8IHN0eWxlLT5vcGFjaXR5KCkgPCAxLjBmIHx8IAotICAgICAgICBz
dHlsZS0+aGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkgfHwgc3R5bGUtPmhhc01hc2soKSB8
fCBzdHlsZS0+Ym94UmVmbGVjdCgpKSkKLSAgICAgICAgc3R5bGUtPnNldFpJbmRleCgwKTsKLSAg
ICAKLSAgICAvLyBCdXR0b24sIGxlZ2VuZCwgaW5wdXQsIHNlbGVjdCBhbmQgdGV4dGFyZWEgYWxs
IGNvbnNpZGVyIHdpZHRoIHZhbHVlcyBvZiAnYXV0bycgdG8gYmUgJ2ludHJpbnNpYycuCi0gICAg
Ly8gVGhpcyB3aWxsIGJlIGltcG9ydGFudCB3aGVuIHdlIHVzZSBibG9jayBmbG93cyBmb3IgYWxs
IGZvcm0gY29udHJvbHMuCi0gICAgaWYgKGUgJiYgKGUtPmhhc1RhZ05hbWUobGVnZW5kVGFnKSB8
fCBlLT5oYXNUYWdOYW1lKGJ1dHRvblRhZykgfHwgZS0+aGFzVGFnTmFtZShpbnB1dFRhZykgfHwK
LSAgICAgICAgICAgICAgZS0+aGFzVGFnTmFtZShzZWxlY3RUYWcpIHx8IGUtPmhhc1RhZ05hbWUo
dGV4dGFyZWFUYWcpIHx8IGUtPmhhc1RhZ05hbWUoZGF0YWdyaWRUYWcpCi0jaWYgRU5BQkxFKFdN
TCkKLSAgICAgICAgICAgICAgfHwgZS0+aGFzVGFnTmFtZShXTUxOYW1lczo6aW5zZXJ0ZWRMZWdl
bmRUYWcpCi0gICAgICAgICAgICAgIHx8IGUtPmhhc1RhZ05hbWUoV01MTmFtZXM6OmlucHV0VGFn
KQotI2VuZGlmCi0gICAgICAgKSkgewotICAgICAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNBdXRv
KCkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKEludHJpbnNpYykpOwotCi0g
ICAgICAgIC8vIFRleHRhcmVhIGNvbnNpZGVycyBvdmVyZmxvdyB2aXNpYmxlIGFzIGF1dG8uCi0g
ICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpKSB7Ci0gICAgICAgICAg
ICBzdHlsZS0+c2V0T3ZlcmZsb3dYKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBPVklTSUJMRSA/IE9B
VVRPIDogc3R5bGUtPm92ZXJmbG93WCgpKTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxv
d1koc3R5bGUtPm92ZXJmbG93WSgpID09IE9WSVNJQkxFID8gT0FVVE8gOiBzdHlsZS0+b3ZlcmZs
b3dZKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRmluYWxseSB1cGRhdGUgb3VyIHRl
eHQgZGVjb3JhdGlvbnMgaW4gZWZmZWN0LCBidXQgZG9uJ3QgYWxsb3cgdGV4dC1kZWNvcmF0aW9u
IHRvIHBlcmNvbGF0ZSB0aHJvdWdoCi0gICAgLy8gdGFibGVzLCBpbmxpbmUgYmxvY2tzLCBpbmxp
bmUgdGFibGVzLCBvciBydW4taW5zLgotICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxF
IHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX1RBQkxFIHx8IHN0eWxlLT5kaXNwbGF5KCkg
PT0gUlVOX0lOCi0gICAgICAgIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX0JMT0NLIHx8
IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX0JPWCkKLSAgICAgICAgc3R5bGUtPnNldFRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0KHN0eWxlLT50ZXh0RGVjb3JhdGlvbigpKTsKLSAgICBlbHNlCi0g
ICAgICAgIHN0eWxlLT5hZGRUb1RleHREZWNvcmF0aW9uc0luRWZmZWN0KHN0eWxlLT50ZXh0RGVj
b3JhdGlvbigpKTsKLSAgICAKLSAgICAvLyBJZiBlaXRoZXIgb3ZlcmZsb3cgdmFsdWUgaXMgbm90
IHZpc2libGUsIGNoYW5nZSB0byBhdXRvLgotICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0g
T01BUlFVRUUgJiYgc3R5bGUtPm92ZXJmbG93WSgpICE9IE9NQVJRVUVFKQotICAgICAgICBzdHls
ZS0+c2V0T3ZlcmZsb3dZKE9NQVJRVUVFKTsKLSAgICBlbHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dZ
KCkgPT0gT01BUlFVRUUgJiYgc3R5bGUtPm92ZXJmbG93WCgpICE9IE9NQVJRVUVFKQotICAgICAg
ICBzdHlsZS0+c2V0T3ZlcmZsb3dYKE9NQVJRVUVFKTsKLSAgICBlbHNlIGlmIChzdHlsZS0+b3Zl
cmZsb3dYKCkgPT0gT1ZJU0lCTEUgJiYgc3R5bGUtPm92ZXJmbG93WSgpICE9IE9WSVNJQkxFKQot
ICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKE9BVVRPKTsKLSAgICBlbHNlIGlmIChzdHlsZS0+
b3ZlcmZsb3dZKCkgPT0gT1ZJU0lCTEUgJiYgc3R5bGUtPm92ZXJmbG93WCgpICE9IE9WSVNJQkxF
KQotICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9BVVRPKTsKLQotICAgIC8vIFRhYmxlIHJv
d3MsIHNlY3Rpb25zIGFuZCB0aGUgdGFibGUgaXRzZWxmIHdpbGwgc3VwcG9ydCBvdmVyZmxvdzpo
aWRkZW4gYW5kIHdpbGwgaWdub3JlIHNjcm9sbC9hdXRvLgotICAgIC8vIEZJWE1FOiBFdmVudHVh
bGx5IHRhYmxlIHNlY3Rpb25zIHdpbGwgc3VwcG9ydCBhdXRvIGFuZCBzY3JvbGwuCi0gICAgaWYg
KHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBJTkxJTkVf
VEFCTEUgfHwKLSAgICAgICAgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1dfR1JPVVAgfHwg
c3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1cpIHsKLSAgICAgICAgaWYgKHN0eWxlLT5vdmVy
Zmxvd1goKSAhPSBPVklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT0hJRERFTikgCi0g
ICAgICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKE9WSVNJQkxFKTsKLSAgICAgICAgaWYgKHN0
eWxlLT5vdmVyZmxvd1koKSAhPSBPVklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dZKCkgIT0gT0hJ
RERFTikgCi0gICAgICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9WSVNJQkxFKTsKLSAgICB9
Ci0KLSAgICAvLyBNZW51bGlzdHMgc2hvdWxkIGhhdmUgdmlzaWJsZSBvdmVyZmxvdwotICAgIGlm
IChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkgewotICAgICAgICBzdHlsZS0+
c2V0T3ZlcmZsb3dYKE9WSVNJQkxFKTsKLSAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPVklT
SUJMRSk7Ci0gICAgfQotCi0gICAgLy8gQ3VsbCBvdXQgYW55IHVzZWxlc3MgbGF5ZXJzIGFuZCBh
bHNvIHJlcGVhdCBwYXR0ZXJucyBpbnRvIGFkZGl0aW9uYWwgbGF5ZXJzLgotICAgIHN0eWxlLT5h
ZGp1c3RCYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgc3R5bGUtPmFkanVzdE1hc2tMYXllcnMoKTsK
LQotICAgIC8vIERvIHRoZSBzYW1lIGZvciBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucy4KLSAg
ICBzdHlsZS0+YWRqdXN0QW5pbWF0aW9ucygpOwotICAgIHN0eWxlLT5hZGp1c3RUcmFuc2l0aW9u
cygpOwotCi0gICAgLy8gSW1wb3J0YW50OiBJbnRyaW5zaWMgbWFyZ2lucyBnZXQgYWRkZWQgdG8g
Y29udHJvbHMgYmVmb3JlIHRoZSB0aGVtZSBoYXMgYWRqdXN0ZWQgdGhlIHN0eWxlLCBzaW5jZSB0
aGUgdGhlbWUgd2lsbAotICAgIC8vIGFsdGVyIGZvbnRzIGFuZCBoZWlnaHRzL3dpZHRocy4KLSAg
ICBpZiAoZSAmJiBlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpICYmIHN0eWxlLT5mb250U2l6ZSgp
ID49IDExKSB7Ci0gICAgICAgIC8vIERvbid0IGFwcGx5IGludHJpbnNpYyBtYXJnaW5zIHRvIGlt
YWdlIGJ1dHRvbnMuICBUaGUgZGVzaWduZXIga25vd3MgaG93IGJpZyB0aGUgaW1hZ2VzIGFyZSwK
LSAgICAgICAgLy8gc28gd2UgaGF2ZSB0byB0cmVhdCBhbGwgaW1hZ2UgYnV0dG9ucyBhcyB0aG91
Z2ggdGhleSB3ZXJlIGV4cGxpY2l0bHkgc2l6ZWQuCi0gICAgICAgIGlmICghZS0+aGFzVGFnTmFt
ZShpbnB1dFRhZykgfHwgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGUpLT5pbnB1dFR5
cGUoKSAhPSBIVE1MSW5wdXRFbGVtZW50OjpJTUFHRSkKLSAgICAgICAgICAgIGFkZEludHJpbnNp
Y01hcmdpbnMoc3R5bGUpOwotICAgIH0KLQotICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBoYXZl
IGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4KLSAgICBpZiAoc3R5bGUtPmhhc0FwcGVh
cmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHls
ZSh0aGlzLCBzdHlsZSwgZSwgbV9oYXNVQUFwcGVhcmFuY2UsIG1fYm9yZGVyRGF0YSwgbV9iYWNr
Z3JvdW5kRGF0YSwgbV9iYWNrZ3JvdW5kQ29sb3IpOwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICBp
ZiAoZSAmJiBlLT5pc1NWR0VsZW1lbnQoKSkgewotICAgICAgICAvLyBTcGVjOiBodHRwOi8vd3d3
LnczLm9yZy9UUi9TVkcvbWFza2luZy5odG1sI092ZXJmbG93UHJvcGVydHkKLSAgICAgICAgaWYg
KHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPU0NST0xMKQotICAgICAgICAgICAgc3R5bGUtPnNldE92
ZXJmbG93WShPSElEREVOKTsKLSAgICAgICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJmbG93WSgpID09
IE9BVVRPKQotICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPVklTSUJMRSk7Ci0KLSAg
ICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBPU0NST0xMKQotICAgICAgICAgICAgc3R5
bGUtPnNldE92ZXJmbG93WChPSElEREVOKTsKLSAgICAgICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJm
bG93WCgpID09IE9BVVRPKQotICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPVklTSUJM
RSk7Ci0KLSAgICAgICAgLy8gT25seSB0aGUgcm9vdCA8c3ZnPiBlbGVtZW50IGluIGFuIFNWRyBk
b2N1bWVudCBmcmFnbWVudCB0cmVlIGhvbm9ycyBjc3MgcG9zaXRpb24KLSAgICAgICAgaWYgKCEo
ZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSAmJiBlLT5wYXJlbnROb2RlKCkgJiYgIWUt
PnBhcmVudE5vZGUoKS0+aXNTVkdFbGVtZW50KCkpKQotICAgICAgICAgICAgc3R5bGUtPnNldFBv
c2l0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsUG9zaXRpb24oKSk7Ci0gICAgfQotI2VuZGlmCi19
Ci0KLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6dXBkYXRlRm9udCgpCi17Ci0gICAgY2hlY2tGb3JU
ZXh0U2l6ZUFkanVzdCgpOwotICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShzdHlsZSgp
LCBtX3BhcmVudFN0eWxlKTsKLSAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUoKSwgbV9wYXJl
bnRTdHlsZSk7Ci0gICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7Ci0g
ICAgbV9mb250RGlydHkgPSBmYWxzZTsKLX0KLQotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjYWNo
ZUJvcmRlckFuZEJhY2tncm91bmQoKQotewotICAgIG1faGFzVUFBcHBlYXJhbmNlID0gbV9zdHls
ZS0+aGFzQXBwZWFyYW5jZSgpOwotICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkgewotICAgICAg
ICBtX2JvcmRlckRhdGEgPSBtX3N0eWxlLT5ib3JkZXIoKTsKLSAgICAgICAgbV9iYWNrZ3JvdW5k
RGF0YSA9ICptX3N0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgIG1fYmFja2dyb3Vu
ZENvbG9yID0gbV9zdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7Ci0gICAgfQotfQotCi1QYXNzUmVm
UHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZVJ1bGVzRm9yRWxlbWVudChF
bGVtZW50KiBlLCBib29sIGF1dGhvck9ubHkpCi17Ci0gICAgcmV0dXJuIHBzZXVkb1N0eWxlUnVs
ZXNGb3JFbGVtZW50KGUsIE5PUFNFVURPLCBhdXRob3JPbmx5KTsKLX0KLQotUGFzc1JlZlB0cjxD
U1NSdWxlTGlzdD4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQo
RWxlbWVudCogZSwgUHNldWRvSWQgcHNldWRvSWQsIGJvb2wgYXV0aG9yT25seSkKLXsKLSAgICBp
ZiAoIWUgfHwgIWUtPmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIG1fY2hlY2tlci5tX2NvbGxlY3RSdWxlc09ubHkgPSB0cnVlOwot
Ci0gICAgaW5pdEVsZW1lbnQoZSk7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCAwLCBwc2V1
ZG9JZCk7Ci0KLSAgICBpZiAoIWF1dGhvck9ubHkpIHsKLSAgICAgICAgaW50IGZpcnN0VUFSdWxl
ID0gLTEsIGxhc3RVQVJ1bGUgPSAtMTsKLSAgICAgICAgLy8gRmlyc3Qgd2UgbWF0Y2ggcnVsZXMg
ZnJvbSB0aGUgdXNlciBhZ2VudCBzaGVldC4KLSAgICAgICAgbWF0Y2hVQVJ1bGVzKGZpcnN0VUFS
dWxlLCBsYXN0VUFSdWxlKTsKLQotICAgICAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBy
dWxlcy4KLSAgICAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7Ci0gICAgICAg
ICAgICBpbnQgZmlyc3RVc2VyUnVsZSA9IC0xLCBsYXN0VXNlclJ1bGUgPSAtMTsKLSAgICAgICAg
ICAgIG1hdGNoUnVsZXMobV91c2VyU3R5bGUsIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVsZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMp
IHsKLSAgICAgICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMuCi0gICAgICAg
IGludCBmaXJzdEF1dGhvclJ1bGUgPSAtMSwgbGFzdEF1dGhvclJ1bGUgPSAtMTsKLSAgICAgICAg
bWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLCBmaXJzdEF1dGhvclJ1bGUsIGxhc3RBdXRob3JSdWxl
KTsKLSAgICB9Ci0KLSAgICBtX2NoZWNrZXIubV9jb2xsZWN0UnVsZXNPbmx5ID0gZmFsc2U7Ci0g
ICAgCi0gICAgcmV0dXJuIG1fcnVsZUxpc3QucmVsZWFzZSgpOwotfQotCi1ib29sIENTU1N0eWxl
U2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCkKLXsKLSAgICBtX2R5bmFt
aWNQc2V1ZG8gPSBOT1BTRVVETzsKLQotICAgIC8vIENoZWNrIHRoZSBzZWxlY3RvcgotICAgIFNl
bGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tTZWxlY3RvcihzZWwsIG1fZWxlbWVu
dCwgJm1fc2VsZWN0b3JBdHRycywgbV9keW5hbWljUHNldWRvLCBmYWxzZSwgZmFsc2UsIHN0eWxl
KCksIG1fcGFyZW50U3R5bGUpOwotICAgIGlmIChtYXRjaCAhPSBTZWxlY3Rvck1hdGNoZXMpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSAh
PSBOT1BTRVVETyAmJiBtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSAhPSBtX2R5bmFtaWNQc2V1ZG8p
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBSZWN1
cnNpdmUgY2hlY2sgb2Ygc2VsZWN0b3JzIGFuZCBjb21iaW5hdG9ycwotLy8gSXQgY2FuIHJldHVy
biAzIGRpZmZlcmVudCB2YWx1ZXM6Ci0vLyAqIFNlbGVjdG9yTWF0Y2hlcyAgICAgICAgIC0gdGhl
IHNlbGVjdG9yIG1hdGNoZXMgdGhlIGVsZW1lbnQgZQotLy8gKiBTZWxlY3RvckZhaWxzTG9jYWxs
eSAgICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgdGhlIGVsZW1lbnQgZQotLy8gKiBTZWxlY3Rv
ckZhaWxzQ29tcGxldGVseSAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxp
bmcgb3IgYW5jZXN0b3Igb2YgZQotQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JNYXRjaCBDU1NT
dHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3Iq
IHNlbCwgRWxlbWVudCogZSwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIHNlbGVjdG9yQXR0
cnMsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wgZW5j
b3VudGVyZWRMaW5rLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSogZWxl
bWVudFBhcmVudFN0eWxlKSBjb25zdAotewotI2lmIEVOQUJMRShTVkcpCi0gICAgLy8gU3BlYzog
Q1NTMiBzZWxlY3RvcnMgY2Fubm90IGJlIGFwcGxpZWQgdG8gdGhlIChjb25jZXB0dWFsbHkpIGNs
b25lZCBET00gdHJlZQotICAgIC8vIGJlY2F1c2UgaXRzIGNvbnRlbnRzIGFyZSBub3QgcGFydCBv
ZiB0aGUgZm9ybWFsIGRvY3VtZW50IHN0cnVjdHVyZS4KLSAgICBpZiAoZS0+aXNTVkdFbGVtZW50
KCkgJiYgZS0+aXNTaGFkb3dOb2RlKCkpCi0gICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29t
cGxldGVseTsKLSNlbmRpZgotCi0gICAgLy8gZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoCi0g
ICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKHNlbCwgZSwgc2VsZWN0b3JBdHRycywgZHluYW1pY1Bz
ZXVkbywgaXNTdWJTZWxlY3RvciwgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQot
ICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7Ci0KLSAgICAvLyBUaGUgcmVzdCBv
ZiB0aGUgc2VsZWN0b3JzIGhhcyB0byBtYXRjaAotICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiBy
ZWxhdGlvbiA9IHNlbC0+cmVsYXRpb24oKTsKLQotICAgIC8vIFByZXBhcmUgbmV4dCBzZWwKLSAg
ICBzZWwgPSBzZWwtPnRhZ0hpc3RvcnkoKTsKLSAgICBpZiAoIXNlbCkKLSAgICAgICAgcmV0dXJu
IFNlbGVjdG9yTWF0Y2hlczsKLQotICAgIGlmIChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6U3Vi
U2VsZWN0b3IpCi0gICAgICAgIC8vIEJhaWwtb3V0IGlmIHRoaXMgc2VsZWN0b3IgaXMgaXJyZWxl
dmFudCBmb3IgdGhlIHBzZXVkb1N0eWxlCi0gICAgICAgIGlmIChtX3BzZXVkb1N0eWxlICE9IE5P
UFNFVURPICYmIG1fcHNldWRvU3R5bGUgIT0gZHluYW1pY1BzZXVkbykKLSAgICAgICAgICAgIHJl
dHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLQotICAgIC8vIENoZWNrIGZvciBuZXN0ZWQg
bGlua3MuCi0gICAgaWYgKG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgJiYgIWlzU3ViU2VsZWN0
b3IpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/
IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgIGlmIChjdXJyZW50U3R5
bGUgJiYgY3VycmVudFN0eWxlLT5pbnNpZGVMaW5rKCkgJiYgZS0+aXNMaW5rKCkpIHsKLSAgICAg
ICAgICAgIGlmIChlbmNvdW50ZXJlZExpbmspCi0gICAgICAgICAgICAgICAgbV9tYXRjaFZpc2l0
ZWRQc2V1ZG9DbGFzcyA9IGZhbHNlOyAvLyBUaGlzIGxpbmsgaXMgbm90IHJlbGV2YW50IHRvIHRo
ZSBzdHlsZSBiZWluZyByZXNvbHZlZCwgc28gZGlzYWJsZSBtYXRjaGluZy4KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBlbmNvdW50ZXJlZExpbmsgPSB0cnVlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgc3dpdGNoIChyZWxhdGlvbikgewotICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpEZXNjZW5kYW50OgotICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAg
ICAgICBOb2RlKiBuID0gZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICAgICAgICAgIGlmICghbiB8
fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0
b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihuKTsKLSAgICAgICAgICAgICAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gY2hlY2tTZWxl
Y3RvcihzZWwsIGUsIHNlbGVjdG9yQXR0cnMsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50
ZXJlZExpbmspOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckZhaWxzTG9j
YWxseSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxkOgotICAg
ICAgICB7Ci0gICAgICAgICAgICBOb2RlKiBuID0gZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICAg
ICAgaWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihuKTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2Vs
ZWN0b3JBdHRycywgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGluayk7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5ICYmIGUtPnBhcmVudE5vZGUo
KSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgICAg
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRT
dHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICBp
ZiAocGFyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGls
ZHJlbkFmZmVjdGVkQnlEaXJlY3RBZGphY2VudFJ1bGVzKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICB3aGls
ZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2
aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgIGlmICghbikKLSAgICAgICAgICAgICAgICByZXR1
cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7Ci0gICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG4pOwotICAgICAgICAgICAgbV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IGZhbHNl
OwotICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBzZWxlY3RvckF0dHJz
LCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rKTsgCi0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDoKLSAgICAgICAgICAgIGlm
ICghbV9jb2xsZWN0UnVsZXNPbmx5ICYmIGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2Rl
KCktPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5v
ZGUoKS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCi0g
ICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3
YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAo
dHJ1ZSkgewotICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsK
LSAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAg
ICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFuKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7
Ci0gICAgICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAg
ICAgICAgICBtX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBzZWxlY3RvckF0
dHJzLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rKTsKLSAgICAgICAgICAg
ICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JGYWlsc0xvY2FsbHkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I6Ci0gICAgICAgICAgICAvLyBhIHNl
bGVjdG9yIGlzIGludmFsaWQgaWYgc29tZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8tZWxlbWVudAot
ICAgICAgICAgICAgLy8gV2UgbWFrZSBhbiBleGNlcHRpb24gZm9yIHNjcm9sbGJhciBwc2V1ZG8g
ZWxlbWVudHMgYW5kIGFsbG93IGEgc2V0IG9mIHBzZXVkbyBjbGFzc2VzIChidXQgbm90aGluZyBl
bHNlKQotICAgICAgICAgICAgLy8gdG8gZm9sbG93IHRoZSBwc2V1ZG8gZWxlbWVudHMuCi0gICAg
ICAgICAgICBpZiAoKGVsZW1lbnRTdHlsZSB8fCBtX2NvbGxlY3RSdWxlc09ubHkpICYmIGR5bmFt
aWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgZHluYW1pY1BzZXVkbyAhPSBTRUxFQ1RJT04gJiYKLSAg
ICAgICAgICAgICAgICAhKChSZW5kZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2
ZSgpIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRv
ID09IFJFU0laRVIpICYmIHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3Mp
KQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAg
ICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2VsZWN0b3JBdHRycywgZHluYW1p
Y1BzZXVkbywgdHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJl
bnRTdHlsZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5Owot
fQotCi1zdGF0aWMgdm9pZCBhZGRMb2NhbE5hbWVUb1NldChIYXNoU2V0PEF0b21pY1N0cmluZ0lt
cGwqPiogc2V0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSkKLXsKLSAgICBzZXQtPmFkZChx
TmFtZS5sb2NhbE5hbWUoKS5pbXBsKCkpOwotfQotCi1zdGF0aWMgSGFzaFNldDxBdG9taWNTdHJp
bmdJbXBsKj4qIGNyZWF0ZUh0bWxDYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVzU2V0KCkKLXsKLSAg
ICAvLyBUaGlzIGlzIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgaW4gSFRNTCA0LjAxIHdpdGggdmFs
dWVzIG1hcmtlZCBhcyAiW0NJXSIgb3IgY2FzZS1pbnNlbnNpdGl2ZQotICAgIC8vIE1vemlsbGEg
dHJlYXRzIGFsbCBvdGhlciB2YWx1ZXMgYXMgY2FzZS1zZW5zaXRpdmUsIHRodXMgc28gZG8gd2Uu
Ci0gICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIGF0dHJTZXQgPSBuZXcgSGFzaFNldDxB
dG9taWNTdHJpbmdJbXBsKj47Ci0KLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBhY2Nl
cHRfY2hhcnNldEF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGFjY2VwdEF0
dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGFsaWduQXR0cik7Ci0gICAgYWRk
TG9jYWxOYW1lVG9TZXQoYXR0clNldCwgYWxpbmtBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1Nl
dChhdHRyU2V0LCBheGlzQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgYmdj
b2xvckF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGNoYXJzZXRBdHRyKTsK
LSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBjaGVja2VkQXR0cik7Ci0gICAgYWRkTG9j
YWxOYW1lVG9TZXQoYXR0clNldCwgY2xlYXJBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChh
dHRyU2V0LCBjb2RldHlwZUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGNv
bG9yQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgY29tcGFjdEF0dHIpOwot
ICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGRlY2xhcmVBdHRyKTsKLSAgICBhZGRMb2Nh
bE5hbWVUb1NldChhdHRyU2V0LCBkZWZlckF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0
dHJTZXQsIGRpckF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGRpc2FibGVk
QXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZW5jdHlwZUF0dHIpOwotICAg
IGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGZhY2VBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVU
b1NldChhdHRyU2V0LCBmcmFtZUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQs
IGhyZWZsYW5nQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgaHR0cF9lcXVp
dkF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGxhbmdBdHRyKTsKLSAgICBh
ZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBsYW5ndWFnZUF0dHIpOwotICAgIGFkZExvY2FsTmFt
ZVRvU2V0KGF0dHJTZXQsIGxpbmtBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0
LCBtZWRpYUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIG1ldGhvZEF0dHIp
OwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIG11bHRpcGxlQXR0cik7Ci0gICAgYWRk
TG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbm9ocmVmQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9T
ZXQoYXR0clNldCwgbm9yZXNpemVBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0
LCBub3NoYWRlQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbm93cmFwQXR0
cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgcmVhZG9ubHlBdHRyKTsKLSAgICBh
ZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCByZWxBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1Nl
dChhdHRyU2V0LCByZXZBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBydWxl
c0F0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHNjb3BlQXR0cik7Ci0gICAg
YWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgc2Nyb2xsaW5nQXR0cik7Ci0gICAgYWRkTG9jYWxO
YW1lVG9TZXQoYXR0clNldCwgc2VsZWN0ZWRBdHRyKTsKLSAgICBhZGRMb2NhbE5hbWVUb1NldChh
dHRyU2V0LCBzaGFwZUF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHRhcmdl
dEF0dHIpOwotICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHRleHRBdHRyKTsKLSAgICBh
ZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB0eXBlQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9T
ZXQoYXR0clNldCwgdmFsaWduQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwg
dmFsdWV0eXBlQXR0cik7Ci0gICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdmxpbmtBdHRy
KTsKLQotICAgIHJldHVybiBhdHRyU2V0OwotfQotCi1zdGF0aWMgYm9vbCBodG1sQXR0cmlidXRl
SGFzQ2FzZUluc2Vuc2l0aXZlVmFsdWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cikKLXsKLSAg
ICBzdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIGh0bWxDYXNlSW5zZW5zaXRpdmVB
dHRyaWJ1dGVzU2V0ID0gY3JlYXRlSHRtbENhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQoKTsK
LSAgICBib29sIGlzUG9zc2libGVIVE1MQXR0ciA9ICFhdHRyLmhhc1ByZWZpeCgpICYmIChhdHRy
Lm5hbWVzcGFjZVVSSSgpID09IG51bGxBdG9tKTsKLSAgICByZXR1cm4gaXNQb3NzaWJsZUhUTUxB
dHRyICYmIGh0bWxDYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVzU2V0LT5jb250YWlucyhhdHRyLmxv
Y2FsTmFtZSgpLmltcGwoKSk7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JD
aGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIEhh
c2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+KiBzZWxlY3RvckF0dHJzLCBQc2V1ZG9JZCYgZHluYW1p
Y1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBS
ZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAotewotICAgIGlmICghZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHNlbC0+aGFzVGFnKCkpIHsKLSAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBzZWxMb2NhbE5hbWUgPSBzZWwtPm1fdGFnLmxvY2FsTmFtZSgp
OwotICAgICAgICBpZiAoc2VsTG9jYWxOYW1lICE9IHN0YXJBdG9tICYmIHNlbExvY2FsTmFtZSAh
PSBlLT5sb2NhbE5hbWUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBzZWxOUyA9IHNlbC0+bV90YWcubmFtZXNwYWNlVVJJKCk7Ci0gICAg
ICAgIGlmIChzZWxOUyAhPSBzdGFyQXRvbSAmJiBzZWxOUyAhPSBlLT5uYW1lc3BhY2VVUkkoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoc2VsLT5oYXNBdHRy
aWJ1dGUoKSkgewotICAgICAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFz
cykKLSAgICAgICAgICAgIHJldHVybiBlLT5oYXNDbGFzcygpICYmIHN0YXRpY19jYXN0PFN0eWxl
ZEVsZW1lbnQqPihlKS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHNlbC0+bV92YWx1ZSk7Ci0KLSAg
ICAgICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpCi0gICAgICAgICAgICBy
ZXR1cm4gZS0+aGFzSUQoKSAmJiBlLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpID09IHNlbC0+bV92
YWx1ZTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHIgPSBzZWwt
PmF0dHJpYnV0ZSgpOwotCi0gICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIGNhc2Ugd2VyZSBl
bGVtZW50U3R5bGUgaXMgMC4KLSAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSAmJiAoIWUtPmlzU3R5
bGVkRWxlbWVudCgpIHx8ICghc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGUpLT5pc01hcHBl
ZEF0dHJpYnV0ZShhdHRyKSAmJiBhdHRyICE9IHR5cGVBdHRyICYmIGF0dHIgIT0gcmVhZG9ubHlB
dHRyKSkpIHsKLSAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUF0dHJpYnV0
ZVNlbGVjdG9ycygpOyAvLyBTcGVjaWFsLWNhc2UgdGhlICJ0eXBlIiBhbmQgInJlYWRvbmx5IiBh
dHRyaWJ1dGVzIHNvIGlucHV0IGZvcm0gY29udHJvbHMgY2FuIHNoYXJlIHN0eWxlLgotICAgICAg
ICAgICAgaWYgKHNlbGVjdG9yQXR0cnMpCi0gICAgICAgICAgICAgICAgc2VsZWN0b3JBdHRycy0+
YWRkKGF0dHIubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUgPSBlLT5nZXRBdHRyaWJ1dGUoYXR0cik7Ci0gICAgICAgIGlm
ICh2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0cmlidXRl
IGlzIG5vdCBzZXQKLQotICAgICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSAhbV9kb2N1bWVudElz
SFRNTCB8fCAhaHRtbEF0dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2ZVZhbHVlKGF0dHIpOwotCi0g
ICAgICAgIHN3aXRjaCAoc2VsLT5tX21hdGNoKSB7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OkV4YWN0OgotICAgICAgICAgICAgaWYgKGNhc2VTZW5zaXRpdmUgPyBzZWwtPm1fdmFsdWUgIT0g
dmFsdWUgOiAhZXF1YWxJZ25vcmluZ0Nhc2Uoc2VsLT5tX3ZhbHVlLCB2YWx1ZSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6Okxpc3Q6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIElnbm9yZSBlbXB0
eSBzZWxlY3RvcnMgb3Igc2VsZWN0b3JzIGNvbnRhaW5pbmcgc3BhY2VzCi0gICAgICAgICAgICBp
ZiAoc2VsLT5tX3ZhbHVlLmNvbnRhaW5zKCcgJykgfHwgc2VsLT5tX3ZhbHVlLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGludCBzdGFydFNl
YXJjaEF0ID0gMDsKLSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAg
aW50IGZvdW5kUG9zID0gdmFsdWUuZmluZChzZWwtPm1fdmFsdWUsIHN0YXJ0U2VhcmNoQXQsIGNh
c2VTZW5zaXRpdmUpOwotICAgICAgICAgICAgICAgIGlmIChmb3VuZFBvcyA9PSAtMSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGlmIChmb3VuZFBv
cyA9PSAwIHx8IHZhbHVlW2ZvdW5kUG9zLTFdID09ICcgJykgewotICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBlbmRTdHIgPSBmb3VuZFBvcyArIHNlbC0+bV92YWx1ZS5sZW5ndGgoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGVuZFN0ciA9PSB2YWx1ZS5sZW5ndGgoKSB8fCB2YWx1ZVtl
bmRTdHJdID09ICcgJykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBXZSBmb3Vu
ZCBhIG1hdGNoLgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAvLyBObyBtYXRjaC4gIEtlZXAgbG9va2luZy4KLSAgICAgICAgICAgICAgICBzdGFy
dFNlYXJjaEF0ID0gZm91bmRQb3MgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q29udGFpbjoKLSAgICAg
ICAgICAgIGlmICghdmFsdWUuY29udGFpbnMoc2VsLT5tX3ZhbHVlLCBjYXNlU2Vuc2l0aXZlKSB8
fCBzZWwtPm1fdmFsdWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpCZWdpbjoKLSAg
ICAgICAgICAgIGlmICghdmFsdWUuc3RhcnRzV2l0aChzZWwtPm1fdmFsdWUsIGNhc2VTZW5zaXRp
dmUpIHx8IHNlbC0+bV92YWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkVuZDoK
LSAgICAgICAgICAgIGlmICghdmFsdWUuZW5kc1dpdGgoc2VsLT5tX3ZhbHVlLCBjYXNlU2Vuc2l0
aXZlKSB8fCBzZWwtPm1fdmFsdWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpIeXBo
ZW46Ci0gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoKCkgPCBzZWwtPm1fdmFsdWUubGVuZ3Ro
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCF2YWx1
ZS5zdGFydHNXaXRoKHNlbC0+bV92YWx1ZSwgY2FzZVNlbnNpdGl2ZSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgLy8gSXQgdGhleSBzdGFydCB0aGUgc2FtZSwg
Y2hlY2sgZm9yIGV4YWN0IG1hdGNoIG9yIGZvbGxvd2luZyAnLSc6Ci0gICAgICAgICAgICBpZiAo
dmFsdWUubGVuZ3RoKCkgIT0gc2VsLT5tX3ZhbHVlLmxlbmd0aCgpICYmIHZhbHVlW3NlbC0+bV92
YWx1ZS5sZW5ndGgoKV0gIT0gJy0nKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzczoK
LSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudDoKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChz
ZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSB7Ci0gICAgICAgIC8vIEhh
bmRsZSA6bm90IHVwIGZyb250LgotICAgICAgICBpZiAoc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb05vdCkgewotICAgICAgICAgICAgLy8gY2hlY2sgdGhlIHNpbXBsZSBz
ZWxlY3RvcgotICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsID0gc2VsLT5zaW1w
bGVTZWxlY3RvcigpOyBzdWJTZWw7IHN1YlNlbCA9IHN1YlNlbC0+dGFnSGlzdG9yeSgpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gOm5vdCBjYW5ub3QgbmVzdC4gSSBkb24ndCByZWFsbHkga25vdyB3
aHkgdGhpcyBpcyBhCi0gICAgICAgICAgICAgICAgLy8gcmVzdHJpY3Rpb24gaW4gQ1NTMywgYnV0
IGl0IGlzLCBzbyBsZXQncyBob25vciBpdC4KLSAgICAgICAgICAgICAgICAvLyB0aGUgcGFyc2Vy
IGVuZm9yY2VzIHRoYXQgdGhpcyBuZXZlciBvY2N1cnMKLSAgICAgICAgICAgICAgICBBU1NFUlQo
IXN1YlNlbC0+c2ltcGxlU2VsZWN0b3IoKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWNoZWNr
T25lU2VsZWN0b3Ioc3ViU2VsLCBlLCBzZWxlY3RvckF0dHJzLCBkeW5hbWljUHNldWRvLCB0cnVl
LCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGR5bmFtaWNQ
c2V1ZG8gIT0gTk9QU0VVRE8gJiYgKFJlbmRlclNjcm9sbGJhcjo6c2Nyb2xsYmFyRm9yU3R5bGVS
ZXNvbHZlKCkgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfQ09STkVSIHx8IGR5bmFtaWNQ
c2V1ZG8gPT0gUkVTSVpFUikpIHsKLSAgICAgICAgICAgIC8vIENTUyBzY3JvbGxiYXJzIG1hdGNo
IGEgc3BlY2lmaWMgc3Vic2V0IG9mIHBzZXVkbyBjbGFzc2VzLCBhbmQgdGhleSBoYXZlIHNwZWNp
YWxpemVkIHJ1bGVzIGZvciBlYWNoCi0gICAgICAgICAgICAvLyAoc2luY2UgdGhlcmUgYXJlIG5v
IGVsZW1lbnRzIGludm9sdmVkKS4KLSAgICAgICAgICAgIHJldHVybiBjaGVja1Njcm9sbGJhclBz
ZXVkb0NsYXNzKHNlbCwgZHluYW1pY1BzZXVkbyk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZHluYW1p
Y1BzZXVkbyA9PSBTRUxFQ1RJT04pIHsKLSAgICAgICAgICAgIGlmIChzZWwtPnBzZXVkb1R5cGUo
KSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvV2luZG93SW5hY3RpdmUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuICFtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBOb3JtYWwgZWxlbWVudCBwc2V1ZG8g
Y2xhc3MgY2hlY2tpbmcuCi0gICAgICAgIHN3aXRjaCAoc2VsLT5wc2V1ZG9UeXBlKCkpIHsKLSAg
ICAgICAgICAgIC8vIFBzZXVkbyBjbGFzc2VzOgotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvTm90OgotICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBBbHJlYWR5IGhhbmRsZWQg
dXAgYWJvdmUuCi0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbXB0eTogewot
ICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBmb3Ig
KE5vZGUqIG4gPSBlLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQq
PihuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGV4dE5vZGUtPmRhdGEoKS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
ZWxlbWVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRF
bXB0eVN0YXRlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRl
clN0eWxlKCkgJiYgKGUtPmRvY3VtZW50KCktPnVzZXNTaWJsaW5nUnVsZXMoKSB8fCBlLT5yZW5k
ZXJTdHlsZSgpLT51bmlxdWUoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBlLT5yZW5kZXJT
dHlsZSgpLT5zZXRFbXB0eVN0YXRlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdENoaWxkOiB7Ci0gICAgICAgICAgICAgICAgLy8gZmly
c3QtY2hpbGQgbWF0Y2hlcyB0aGUgZmlyc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50Ci0gICAg
ICAgICAgICAgICAgaWYgKGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxl
bWVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVs
ZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5
bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocGFyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50
U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcygpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBjaGlsZFN0eWxlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoaWxkU3R5bGUtPnNldEZpcnN0Q2hpbGRTdGF0ZSgpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RPZlR5cGU6IHsKLSAgICAgICAgICAg
ICAgICAvLyBmaXJzdC1vZi10eXBlIG1hdGNoZXMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgaXRzIHR5
cGUKLSAgICAgICAgICAgICAgICBpZiAoZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUo
KS0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBl
LT50YWdRTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNT
aWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQq
PihuKS0+aGFzVGFnTmFtZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIW4pCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAo
IW1fY29sbGVjdFJ1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+
cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHBhcmVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5z
ZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MYXN0Q2hpbGQ6IHsKLSAgICAgICAgICAgICAg
ICAvLyBsYXN0LWNoaWxkIG1hdGNoZXMgdGhlIGxhc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50
Ci0gICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRF
bGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hp
bGRyZW4oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPm5leHRTaWJs
aW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50
Tm9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxl
IDogZS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVu
dEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFy
ZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENo
aWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0ICYmIGNoaWxkU3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hpbGRTdHlsZS0+c2V0TGFzdENoaWxkU3RhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0xhc3RPZlR5cGU6IHsKLSAgICAgICAgICAgICAgICAvLyBsYXN0LW9m
LXR5cGUgbWF0Y2hlcyB0aGUgbGFzdCBlbGVtZW50IG9mIGl0cyB0eXBlCi0gICAgICAgICAgICAg
ICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVs
ZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25h
bFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgcmVz
dWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5
cGUgPSBlLT50YWdRTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+bmV4
dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG4pLT5oYXNUYWdOYW1lKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Pbmx5Q2hpbGQ6
IHsKLSAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVu
dEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBsYXN0Q2hpbGQgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1Np
YmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5v
ZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQotICAgICAgICAgICAgICAgICAgICAgICAgZmly
c3RDaGlsZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICYmIHBh
cmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbiA9IGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFuKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGlsZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxl
c09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxl
ID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHls
ZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGls
ZFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENo
aWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCAmJiBjaGlsZFN0eWxl
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3R5bGUtPnNldEZpcnN0Q2hpbGRT
dGF0ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RDaGlsZCAmJiBjaGlsZFN0
eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3R5bGUtPnNldExhc3RDaGls
ZFN0YXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZpcnN0Q2hpbGQgJiYgbGFzdENoaWxkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb09ubHlPZlR5cGU6IHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBz
ZWxlY3RvciBpcyB2ZXJ5IHNsb3cuCi0gICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVu
dEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFtX2NvbGxlY3RSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBh
cmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cGFyZW50U3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNr
d2FyZFBvc2l0aW9uYWxSdWxlcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+
aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICAgICAgYm9vbCBsYXN0Q2hpbGQgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FOYW1lKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5p
c0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5oYXNUYWdOYW1lKHR5
cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGZp
cnN0Q2hpbGQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAobikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChuLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5oYXNUYWdO
YW1lKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsYXN0Q2hpbGQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdENoaWxkICYmIGxhc3RDaGlsZDsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhDaGlsZDogewotICAgICAg
ICAgICAgICAgIGlmICghc2VsLT5wYXJzZU50aCgpKQotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVu
dEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHdoaWxlIChuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNF
bGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IHMgPSBuLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gcyA/IHMtPmNoaWxkSW5kZXgoKSA6IDA7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
dW50ICs9IGluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxl
c09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxl
ID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHls
ZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRTdHlsZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRDaGlsZEluZGV4KGNvdW50KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxl
cygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBpZiAoc2VsLT5tYXRjaE50aChjb3VudCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9OdGhPZlR5cGU6IHsKLSAgICAgICAgICAgICAgICBpZiAoIXNlbC0+cGFyc2VOdGgoKSkKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBh
cmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aW50IGNvdW50ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYg
dHlwZSA9IGUtPnRhZ1FOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5w
cmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG4pLT5oYXNUYWdOYW1lKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJs
aW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVt
ZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1
bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAo
c2VsLT5tYXRjaE50aChjb3VudCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhMYXN0Q2hpbGQ6IHsK
LSAgICAgICAgICAgICAgICBpZiAoIXNlbC0+cGFyc2VOdGgoKSkKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBl
LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RS
dWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQt
PnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZm
ZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2lu
Z0NoaWxkcmVuKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUq
IG4gPSBlLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAobikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgbiA9
IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHNlbC0+bWF0Y2hOdGgoY291bnQpKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoTGFz
dE9mVHlwZTogewotICAgICAgICAgICAgICAgIGlmICghc2VsLT5wYXJzZU50aCgpKQotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50
RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
IW1fY29sbGVjdFJ1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFy
ZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
YXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0
Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmlu
aXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMTsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FOYW1lKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAobikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVu
dE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG4gPSBuLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChzZWwtPm1hdGNoTnRoKGNvdW50KSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b1RhcmdldDoKLSAgICAgICAgICAgICAgICBpZiAoZSA9PSBlLT5kb2N1bWVudCgpLT5jc3NUYXJn
ZXQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BbnlMaW5rOgotICAg
ICAgICAgICAgICAgIGlmIChlICYmIGUtPmlzTGluaygpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0F1dG9maWxsOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFlIHx8ICFl
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBpZiAoSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0b0lucHV0RWxl
bWVudChlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+aXNBdXRv
ZmlsbGVkKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rOgotICAgICAgICAgICAgICAgIGlmIChl
ICYmIGUtPmlzTGluaygpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1fbWF0Y2hWaXNp
dGVkUHNldWRvQ2xhc3M7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgotICAgICAgICAgICAgICAgIGlmIChlICYmIGUt
PmlzTGluaygpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9tYXRjaFZpc2l0ZWRQc2V1
ZG9DbGFzczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0RyYWc6IHsKLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFN0eWxlKQot
ICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlEcmFnUnVsZXMo
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5bGUoKS0+c2V0QWZmZWN0ZWRCeURyYWdSdWxlcyh0
cnVlKTsKLSAgICAgICAgICAgICAgICBpZiAoZS0+cmVuZGVyZXIoKSAmJiBlLT5yZW5kZXJlcigp
LT5pc0RyYWdnaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRm9jdXM6Ci0gICAgICAgICAgICAgICAgaWYgKGUgJiYgZS0+Zm9jdXNlZCgp
ICYmIGUtPmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5pc0ZvY3VzZWRBbmRBY3Rp
dmUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcjogewotICAg
ICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGluIHF1aXJrcyBtb2RlLCB0aGVuIGhvdmVyIHNob3Vs
ZCBuZXZlciBtYXRjaCBhbmNob3JzIHdpdGggbm8KLSAgICAgICAgICAgICAgICAvLyBocmVmIGFu
ZCAqOmhvdmVyIHNob3VsZCBub3QgbWF0Y2ggYW55dGhpbmcuICBUaGlzIGlzIGltcG9ydGFudCBm
b3Igc2l0ZXMgbGlrZSB3c2ouY29tLgotICAgICAgICAgICAgICAgIGlmIChtX3N0cmljdFBhcnNp
bmcgfHwgaXNTdWJTZWxlY3RvciB8fCAoc2VsLT5oYXNUYWcoKSAmJiAhZS0+aGFzVGFnTmFtZShh
VGFnKSkgfHwgZS0+aXNMaW5rKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRT
dHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRC
eUhvdmVyUnVsZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRl
clN0eWxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBlLT5yZW5kZXJTdHlsZSgpLT5zZXRB
ZmZlY3RlZEJ5SG92ZXJSdWxlcyh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmhv
dmVyZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZToKLSAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiA6YWN0aXZlIHNob3VsZCBuZXZlciBtYXRjaCBh
bmNob3JzIHdpdGggbm8KLSAgICAgICAgICAgICAgICAvLyBocmVmIGFuZCAqOmFjdGl2ZSBzaG91
bGQgbm90IG1hdGNoIGFueXRoaW5nLiAKLSAgICAgICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJz
aW5nIHx8IGlzU3ViU2VsZWN0b3IgfHwgKHNlbC0+aGFzVGFnKCkgJiYgIWUtPmhhc1RhZ05hbWUo
YVRhZykpIHx8IGUtPmlzTGluaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50
U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVk
QnlBY3RpdmVSdWxlcyh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVu
ZGVyU3R5bGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNl
dEFmZmVjdGVkQnlBY3RpdmVSdWxlcyh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGUt
PmFjdGl2ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvRW5hYmxlZDoKLSAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLT5pc0Zv
cm1Db250cm9sRWxlbWVudCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS0+aXNFbmFi
bGVkRm9ybUNvbnRyb2woKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Z1bGxQYWdlTWVkaWE6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGUgJiYgZS0+ZG9jdW1lbnQoKSAmJiBlLT5kb2N1bWVudCgpLT5pc01lZGlhRG9jdW1lbnQo
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0RlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS0+aXNEZWZhdWx0
QnV0dG9uRm9yRm9ybSgpOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRGlz
YWJsZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKGUgJiYgZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQo
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFlLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvUmVhZE9ubHk6IHsKLSAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNv
bnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZS0+aXNUZXh0Rm9ybUNvbnRyb2woKSAmJiBlLT5pc1JlYWRPbmx5
Rm9ybUNvbnRyb2woKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb1JlYWRXcml0ZTogewotICAgICAgICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNG
b3JtQ29udHJvbEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIHJldHVybiBlLT5pc1RleHRGb3JtQ29udHJvbCgpICYmICFlLT5pc1Jl
YWRPbmx5Rm9ybUNvbnRyb2woKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb09wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiBlICYmIGUt
PmlzT3B0aW9uYWxGb3JtQ29udHJvbCgpOwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvUmVxdWlyZWQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS0+aXNSZXF1aXJl
ZEZvcm1Db250cm9sKCk7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WYWxp
ZDogewotICAgICAgICAgICAgICAgIGlmICghZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldENvbnRhaW5zVmFsaWRp
dHlTdHlsZVJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUtPndpbGxWYWxpZGF0ZSgp
ICYmIGUtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKTsKLSAgICAgICAgICAgIH0gY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvSW52YWxpZDogewotICAgICAgICAgICAgICAgIGlmICghZSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGUtPmRvY3Vt
ZW50KCktPnNldENvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGUtPndpbGxWYWxpZGF0ZSgpICYmICFlLT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50
KCk7Ci0gICAgICAgICAgICB9IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NoZWNrZWQ6IHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIFdp
bklFIGFsbG93cyBjaGVja2VkIGFuZCBpbmRldGVybWluYXRlIHRvIGNvLWV4aXN0LCB0aGUgQ1NT
IHNlbGVjdG9yIHNwZWMgc2F5cyB0aGF0Ci0gICAgICAgICAgICAgICAgLy8geW91IGNhbid0IGJl
IGJvdGggY2hlY2tlZCBhbmQgaW5kZXRlcm1pbmF0ZS4gIFdlIHdpbGwgYmVoYXZlIGxpa2UgV2lu
SUUgYmVoaW5kIHRoZSBzY2VuZXMgYW5kIGp1c3QKLSAgICAgICAgICAgICAgICAvLyBvYmV5IHRo
ZSBDU1Mgc3BlYyBoZXJlIGluIHRoZSB0ZXN0IGZvciBtYXRjaGluZyB0aGUgcHNldWRvLgotICAg
ICAgICAgICAgICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9JbnB1dEVsZW1lbnQo
ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPmlz
Q2hlY2tlZCgpICYmICFpbnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0luZGV0ZXJtaW5hdGU6
IHsKLSAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkp
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIElucHV0RWxlbWVu
dCogaW5wdXRFbGVtZW50ID0gdG9JbnB1dEVsZW1lbnQoZSk7Ci0gICAgICAgICAgICAgICAgaWYg
KGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Jvb3Q6Ci0gICAg
ICAgICAgICAgICAgaWYgKGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFuZzogewotICAgICAgICAgICAg
ICAgIE5vZGUqIG4gPSBlOwotICAgICAgICAgICAgICAgIEF0b21pY1N0cmluZyB2YWx1ZTsKLSAg
ICAgICAgICAgICAgICAvLyBUaGUgbGFuZ3VhZ2UgcHJvcGVydHkgaXMgaW5oZXJpdGVkLCBzbyB3
ZSBpdGVyYXRlIG92ZXIgdGhlIHBhcmVudHMKLSAgICAgICAgICAgICAgICAvLyB0byBmaW5kIHRo
ZSBmaXJzdCBsYW5ndWFnZS4KLSAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiB2YWx1ZS5pc051
bGwoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVjOiB4bWw6bGFuZyB0YWtlcyBwcmVjZWRlbmNl
IC0tIGh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS8jQ183Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+ZmFzdEdldEF0dHJpYnV0ZShY
TUxOYW1lczo6bGFuZ0F0dHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlz
TnVsbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG4pLT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChuLT5pc0RvY3VtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gY2hlY2tpbmcgdGhlIE1JTUUgY29udGVudC1sYW5ndWFnZQotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG4pLT5jb250ZW50TGFu
Z3VhZ2UoKTsKLQotICAgICAgICAgICAgICAgICAgICBuID0gbi0+cGFyZW50KCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJndW1lbnQg
PSBzZWwtPmFyZ3VtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVsbCgpIHx8
ICF2YWx1ZS5zdGFydHNXaXRoKGFyZ3VtZW50LCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgoKSAhPSBhcmd1bWVudC5s
ZW5ndGgoKSAmJiB2YWx1ZVthcmd1bWVudC5sZW5ndGgoKV0gIT0gJy0nKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Vua25vd246Ci0gICAgICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3RQYXJzZWQ6Ci0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
aWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCkgewotICAgICAg
ICBpZiAoIWVsZW1lbnRTdHlsZSAmJiAhbV9jb2xsZWN0UnVsZXNPbmx5KQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gQ1NTU2VsZWN0b3I6
OnBzZXVkb0lkKHNlbC0+cHNldWRvVHlwZSgpKTsKLSAgICAgICAgaWYgKHBzZXVkb0lkID09IEZJ
UlNUX0xFVFRFUikgewotICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGUtPmRv
Y3VtZW50KCkpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQtPnNldFVzZXNGaXJzdExldHRlclJ1
bGVzKHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwc2V1ZG9JZCAhPSBOT1BTRVVETykg
ewotICAgICAgICAgICAgZHluYW1pY1BzZXVkbyA9IHBzZXVkb0lkOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gIyMjIGFkZCB0aGUgcmVzdCBvZiB0aGUg
Y2hlY2tzLi4uCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6
U2VsZWN0b3JDaGVja2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKENTU1NlbGVjdG9yKiBz
ZWwsIFBzZXVkb0lkJikgY29uc3QKLXsKLSAgICBSZW5kZXJTY3JvbGxiYXIqIHNjcm9sbGJhciA9
IFJlbmRlclNjcm9sbGJhcjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCk7Ci0gICAgU2Nyb2xs
YmFyUGFydCBwYXJ0ID0gUmVuZGVyU2Nyb2xsYmFyOjpwYXJ0Rm9yU3R5bGVSZXNvbHZlKCk7Ci0K
LSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBoYWNrIGZvciByZXNpemVycyBhbmQg
c2Nyb2xsYmFyIGNvcm5lcnMuICBFdmVudHVhbGx5IDp3aW5kb3ctaW5hY3RpdmUgc2hvdWxkIGJl
Y29tZSBhIHJlYWwKLSAgICAvLyBwc2V1ZG8gY2xhc3MgYW5kIGp1c3QgYXBwbHkgdG8gZXZlcnl0
aGluZy4KLSAgICBpZiAoc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1dp
bmRvd0luYWN0aXZlKQotICAgICAgICByZXR1cm4gIW1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXND
b250cm9sbGVyKCktPmlzQWN0aXZlKCk7Ci0gICAgCi0gICAgaWYgKCFzY3JvbGxiYXIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgQVNTRVJUKHNlbC0+bV9tYXRjaCA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpOwotICAgIHN3aXRjaCAoc2VsLT5wc2V1ZG9UeXBlKCkp
IHsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRW5hYmxlZDoKLSAgICAgICAgICAg
IHJldHVybiBzY3JvbGxiYXItPmVuYWJsZWQoKTsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvRGlzYWJsZWQ6Ci0gICAgICAgICAgICByZXR1cm4gIXNjcm9sbGJhci0+ZW5hYmxlZCgp
OwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcjogewotICAgICAgICAgICAg
U2Nyb2xsYmFyUGFydCBob3ZlcmVkUGFydCA9IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKTsKLSAg
ICAgICAgICAgIGlmIChwYXJ0ID09IFNjcm9sbGJhckJHUGFydCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaG92ZXJlZFBhcnQgIT0gTm9QYXJ0OwotICAgICAgICAgICAgaWYgKHBhcnQgPT0gVHJh
Y2tCR1BhcnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGhvdmVyZWRQYXJ0ID09IEJhY2tUcmFj
a1BhcnQgfHwgaG92ZXJlZFBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCB8fCBob3ZlcmVkUGFydCA9
PSBUaHVtYlBhcnQ7Ci0gICAgICAgICAgICByZXR1cm4gcGFydCA9PSBob3ZlcmVkUGFydDsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6IHsKLSAgICAg
ICAgICAgIFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQgPSBzY3JvbGxiYXItPnByZXNzZWRQYXJ0
KCk7Ci0gICAgICAgICAgICBpZiAocGFydCA9PSBTY3JvbGxiYXJCR1BhcnQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHByZXNzZWRQYXJ0ICE9IE5vUGFydDsKLSAgICAgICAgICAgIGlmIChwYXJ0
ID09IFRyYWNrQkdQYXJ0KQotICAgICAgICAgICAgICAgIHJldHVybiBwcmVzc2VkUGFydCA9PSBC
YWNrVHJhY2tQYXJ0IHx8IHByZXNzZWRQYXJ0ID09IEZvcndhcmRUcmFja1BhcnQgfHwgcHJlc3Nl
ZFBhcnQgPT0gVGh1bWJQYXJ0OwotICAgICAgICAgICAgcmV0dXJuIHBhcnQgPT0gcHJlc3NlZFBh
cnQ7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG9yaXpvbnRh
bDoKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcjsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmVydGljYWw6
Ci0gICAgICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2Fs
U2Nyb2xsYmFyOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EZWNyZW1lbnQ6Ci0g
ICAgICAgICAgICByZXR1cm4gcGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0g
QmFja0J1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBCYWNrVHJhY2tQYXJ0OwotICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9JbmNyZW1lbnQ6Ci0gICAgICAgICAgICByZXR1cm4gcGFydCA9
PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQg
fHwgcGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0OwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9TdGFydDoKLSAgICAgICAgICAgIHJldHVybiBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBh
cnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNr
UGFydDsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRW5kOgotICAgICAgICAgICAg
cmV0dXJuIHBhcnQgPT0gQmFja0J1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9u
RW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRUcmFja1BhcnQ7Ci0gICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0RvdWJsZUJ1dHRvbjogewotICAgICAgICAgICAgU2Nyb2xsYmFyQnV0dG9u
c1BsYWNlbWVudCBidXR0b25zUGxhY2VtZW50ID0gc2Nyb2xsYmFyLT50aGVtZSgpLT5idXR0b25z
UGxhY2VtZW50KCk7Ci0gICAgICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0
IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEJhY2tUcmFja1Bh
cnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFy
QnV0dG9uc0RvdWJsZVN0YXJ0IHx8IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9u
c0RvdWJsZUJvdGg7Ci0gICAgICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCB8
fCBwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZFRyYWNrUGFy
dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJC
dXR0b25zRG91YmxlRW5kIHx8IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0Rv
dWJsZUJvdGg7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gCi0gICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1NpbmdsZUJ1dHRvbjogewotICAgICAgICAgICAgU2Ny
b2xsYmFyQnV0dG9uc1BsYWNlbWVudCBidXR0b25zUGxhY2VtZW50ID0gc2Nyb2xsYmFyLT50aGVt
ZSgpLT5idXR0b25zUGxhY2VtZW50KCk7Ci0gICAgICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0
dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBC
YWNrVHJhY2tQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zU2luZ2xlOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb05vQnV0dG9uOiB7Ci0gICAgICAgICAgICBTY3JvbGxiYXJCdXR0b25zUGxhY2Vt
ZW50IGJ1dHRvbnNQbGFjZW1lbnQgPSBzY3JvbGxiYXItPnRoZW1lKCktPmJ1dHRvbnNQbGFjZW1l
bnQoKTsKLSAgICAgICAgICAgIGlmIChwYXJ0ID09IEJhY2tUcmFja1BhcnQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUgfHwg
YnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlRW5kOwotICAgICAgICAg
ICAgaWYgKHBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
YnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zTm9uZSB8fCBidXR0b25zUGxhY2Vt
ZW50ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVTdGFydDsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Db3JuZXJQ
cmVzZW50OgotICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+Y2xpZW50KCktPnNjcm9sbGJh
ckNvcm5lclByZXNlbnQoKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkVmFyaWFibGVzKENT
U1ZhcmlhYmxlc1J1bGUqIHZhcmlhYmxlcykKLXsKLSAgICBDU1NWYXJpYWJsZXNEZWNsYXJhdGlv
biogZGVjbCA9IHZhcmlhYmxlcy0+dmFyaWFibGVzKCk7Ci0gICAgaWYgKCFkZWNsKQotICAgICAg
ICByZXR1cm47Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGRlY2wtPmxlbmd0aCgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBk
ZWNsLT5pdGVtKGkpOwotICAgICAgICBtX3ZhcmlhYmxlc01hcC5zZXQobmFtZSwgdmFyaWFibGVz
KTsKLSAgICB9Ci19Ci0KLUNTU1ZhbHVlKiBDU1NTdHlsZVNlbGVjdG9yOjpyZXNvbHZlVmFyaWFi
bGVEZXBlbmRlbnRWYWx1ZShDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlKikKLXsKLSAgICByZXR1
cm4gMDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTUnVsZVNldDo6Q1NTUnVsZVNldCgpCi17Ci0g
ICAgbV91bml2ZXJzYWxSdWxlcyA9IDA7Ci0gICAgbV9wYWdlUnVsZXMgPSAwOwotICAgIG1fcnVs
ZUNvdW50ID0gMDsKLSAgICBtX3BhZ2VSdWxlQ291bnQgPSAwOwotfQotCi1DU1NSdWxlU2V0Ojp+
Q1NTUnVsZVNldCgpCi17IAotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2lkUnVsZXMpOwotICAgIGRl
bGV0ZUFsbFZhbHVlcyhtX2NsYXNzUnVsZXMpOwotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3RhZ1J1
bGVzKTsKLQotICAgIGRlbGV0ZSBtX3VuaXZlcnNhbFJ1bGVzOyAKLSAgICBkZWxldGUgbV9wYWdl
UnVsZXM7Ci19Ci0KLQotdm9pZCBDU1NSdWxlU2V0OjphZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5n
SW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKQotewotICAgIGlmICgha2V5
KSByZXR1cm47Ci0gICAgQ1NTUnVsZURhdGFMaXN0KiBydWxlcyA9IG1hcC5nZXQoa2V5KTsKLSAg
ICBpZiAoIXJ1bGVzKSB7Ci0gICAgICAgIHJ1bGVzID0gbmV3IENTU1J1bGVEYXRhTGlzdChtX3J1
bGVDb3VudCsrLCBydWxlLCBzZWwpOwotICAgICAgICBtYXAuc2V0KGtleSwgcnVsZXMpOwotICAg
IH0gZWxzZQotICAgICAgICBydWxlcy0+YXBwZW5kKG1fcnVsZUNvdW50KyssIHJ1bGUsIHNlbCk7
Ci19Ci0KLXZvaWQgQ1NTUnVsZVNldDo6YWRkUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1Nl
bGVjdG9yKiBzZWwpCi17Ci0gICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQp
IHsKLSAgICAgICAgYWRkVG9SdWxlU2V0KHNlbC0+bV92YWx1ZS5pbXBsKCksIG1faWRSdWxlcywg
cnVsZSwgc2VsKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoc2VsLT5tX21hdGNo
ID09IENTU1NlbGVjdG9yOjpDbGFzcykgewotICAgICAgICBhZGRUb1J1bGVTZXQoc2VsLT5tX3Zh
bHVlLmltcGwoKSwgbV9jbGFzc1J1bGVzLCBydWxlLCBzZWwpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgICAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNlbC0+bV90
YWcubG9jYWxOYW1lKCk7Ci0gICAgaWYgKGxvY2FsTmFtZSAhPSBzdGFyQXRvbSkgewotICAgICAg
ICBhZGRUb1J1bGVTZXQobG9jYWxOYW1lLmltcGwoKSwgbV90YWdSdWxlcywgcnVsZSwgc2VsKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBKdXN0IHB1dCBpdCBpbiB0aGUg
dW5pdmVyc2FsIHJ1bGUgc2V0LgotICAgIGlmICghbV91bml2ZXJzYWxSdWxlcykKLSAgICAgICAg
bV91bml2ZXJzYWxSdWxlcyA9IG5ldyBDU1NSdWxlRGF0YUxpc3QobV9ydWxlQ291bnQrKywgcnVs
ZSwgc2VsKTsKLSAgICBlbHNlCi0gICAgICAgIG1fdW5pdmVyc2FsUnVsZXMtPmFwcGVuZChtX3J1
bGVDb3VudCsrLCBydWxlLCBzZWwpOwotfQotCi12b2lkIENTU1J1bGVTZXQ6OmFkZFBhZ2VSdWxl
KENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCkKLXsKLSAgICBpZiAoIW1fcGFn
ZVJ1bGVzKQotICAgICAgICBtX3BhZ2VSdWxlcyA9IG5ldyBDU1NSdWxlRGF0YUxpc3QobV9wYWdl
UnVsZUNvdW50KyssIHJ1bGUsIHNlbCk7Ci0gICAgZWxzZQotICAgICAgICBtX3BhZ2VSdWxlcy0+
YXBwZW5kKG1fcGFnZVJ1bGVDb3VudCsrLCBydWxlLCBzZWwpOwotfQotCi12b2lkIENTU1J1bGVT
ZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1
ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IpCi17
Ci0gICAgaWYgKCFzaGVldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTm8gbWVkaWEgaW1w
bGllcyAiYWxsIiwgYnV0IGlmIGEgbWVkaWEgbGlzdCBleGlzdHMgaXQgbXVzdAotICAgIC8vIGNv
bnRhaW4gb3VyIGN1cnJlbnQgbWVkaXVtCi0gICAgaWYgKHNoZWV0LT5tZWRpYSgpICYmICFtZWRp
dW0uZXZhbChzaGVldC0+bWVkaWEoKSwgc3R5bGVTZWxlY3RvcikpCi0gICAgICAgIHJldHVybjsg
Ly8gdGhlIHN0eWxlIHNoZWV0IGRvZXNuJ3QgYXBwbHkKLQotICAgIGludCBsZW4gPSBzaGVldC0+
bGVuZ3RoKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAg
IFN0eWxlQmFzZSogaXRlbSA9IHNoZWV0LT5pdGVtKGkpOwotICAgICAgICBpZiAoaXRlbS0+aXNT
dHlsZVJ1bGUoKSkgewotICAgICAgICAgICAgYWRkU3R5bGVSdWxlKGl0ZW0pOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgaWYgKGl0ZW0tPmlzSW1wb3J0UnVsZSgpKSB7Ci0gICAgICAgICAgICBD
U1NJbXBvcnRSdWxlKiBpbXBvcnQgPSBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4oaXRlbSk7
Ci0gICAgICAgICAgICBpZiAoIWltcG9ydC0+bWVkaWEoKSB8fCBtZWRpdW0uZXZhbChpbXBvcnQt
Pm1lZGlhKCksIHN0eWxlU2VsZWN0b3IpKQotICAgICAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNo
ZWV0KGltcG9ydC0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHN0eWxlU2VsZWN0b3IpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYgKGl0ZW0tPmlzTWVkaWFSdWxlKCkpIHsKLSAgICAgICAgICAg
IENTU01lZGlhUnVsZSogciA9IHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KGl0ZW0pOwotICAg
ICAgICAgICAgQ1NTUnVsZUxpc3QqIHJ1bGVzID0gci0+Y3NzUnVsZXMoKTsKLQotICAgICAgICAg
ICAgaWYgKCghci0+bWVkaWEoKSB8fCBtZWRpdW0uZXZhbChyLT5tZWRpYSgpLCBzdHlsZVNlbGVj
dG9yKSkgJiYgcnVsZXMpIHsKLSAgICAgICAgICAgICAgICAvLyBUcmF2ZXJzZSBjaGlsZCBlbGVt
ZW50cyBvZiB0aGUgQG1lZGlhIHJ1bGUuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gMDsgaiA8IHJ1bGVzLT5sZW5ndGgoKTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIENT
U1J1bGUgKmNoaWxkSXRlbSA9IHJ1bGVzLT5pdGVtKGopOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoY2hpbGRJdGVtLT5pc1N0eWxlUnVsZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBJdCBpcyBhIFN0eWxlUnVsZSwgc28gYXBwZW5kIGl0IHRvIG91ciBsaXN0Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoY2hpbGRJdGVtKTsKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChjaGlsZEl0ZW0tPmlzRm9udEZhY2VSdWxlKCkgJiYgc3R5bGVTZWxlY3Rv
cikgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91
ciBzZXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDU1NGb250RmFjZVJ1bGUqIGZv
bnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KGNoaWxkSXRlbSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKS0+YWRk
Rm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY2hpbGRJdGVtLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRvIG91ciBzZXQu
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxl
KHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihjaGlsZEl0ZW0pKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gICAvLyBmb3IgcnVsZXMKLSAgICAg
ICAgICAgIH0gICAvLyBpZiBydWxlcwotICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzRm9udEZh
Y2VSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgewotICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9u
dCBmYWNlIHRvIG91ciBzZXQuCi0gICAgICAgICAgICBjb25zdCBDU1NGb250RmFjZVJ1bGUqIGZv
bnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KGl0ZW0pOwotICAgICAg
ICAgICAgc3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShmb250
RmFjZVJ1bGUpOwotICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzVmFyaWFibGVzUnVsZSgpKSB7
Ci0gICAgICAgICAgICAvLyBFdmFsdWF0ZSB0aGUgbWVkaWEgcXVlcnkgYW5kIG1ha2Ugc3VyZSBp
dCBtYXRjaGVzLgotICAgICAgICAgICAgQ1NTVmFyaWFibGVzUnVsZSogdmFyaWFibGVzID0gc3Rh
dGljX2Nhc3Q8Q1NTVmFyaWFibGVzUnVsZSo+KGl0ZW0pOwotICAgICAgICAgICAgaWYgKCF2YXJp
YWJsZXMtPm1lZGlhKCkgfHwgbWVkaXVtLmV2YWwodmFyaWFibGVzLT5tZWRpYSgpLCBzdHlsZVNl
bGVjdG9yKSkKLSAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRWYXJpYWJsZXModmFy
aWFibGVzKTsKLSAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0tleWZyYW1lc1J1bGUoKSkKLSAg
ICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1lU3R5bGUoc3RhdGljX2Nhc3Q8V2Vi
S2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KGl0ZW0pKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ1NTUnVsZVNl
dDo6YWRkU3R5bGVSdWxlKFN0eWxlQmFzZSogaXRlbSkKLXsKLSAgICBpZiAoaXRlbS0+aXNQYWdl
UnVsZSgpKSB7Ci0gICAgICAgIENTU1BhZ2VSdWxlKiBwYWdlUnVsZSA9IHN0YXRpY19jYXN0PENT
U1BhZ2VSdWxlKj4oaXRlbSk7Ci0gICAgICAgIGFkZFBhZ2VSdWxlKHBhZ2VSdWxlLCBwYWdlUnVs
ZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3QoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQ1NTU3R5
bGVSdWxlKiBydWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oaXRlbSk7Ci0gICAgICAg
IGZvciAoQ1NTU2VsZWN0b3IqIHMgPSBydWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpOyBzOyBz
ID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKQotICAgICAgICAgICAgYWRkUnVsZShydWxlLCBz
KTsKLSAgICB9Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHRoaXMg
aXMgbW9zdGx5IGJvcmluZyBzdHVmZiBvbiBob3cgdG8gYXBwbHkgYSBjZXJ0YWluIHJ1bGUgdG8g
dGhlIHJlbmRlcnN0eWxlLi4uCi0KLXN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJT
dHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEsIGJvb2wgKm9rID0gMCkKLXsK
LSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHRvbGVyYW50IG9mIGEgbnVsbCBzdHlsZSB2YWx1ZS4g
VGhlIG9ubHkgcGxhY2Ugc3R5bGUgaXMgdXNlZCBpcyBpbgotICAgIC8vIGxlbmd0aCBtZWFzdXJl
bWVudHMsIGxpa2UgJ2VtcycgYW5kICdweCcuIEFuZCBpbiB0aG9zZSBjYXNlcyBzdHlsZSBpcyBv
bmx5IHVzZWQKLSAgICAvLyB3aGVuIHRoZSB1bml0cyBhcmUgRU1TIG9yIEVYUy4gU28gd2Ugd2ls
bCBqdXN0IGZhaWwgaW4gdGhvc2UgY2FzZXMuCi0gICAgTGVuZ3RoIGw7Ci0gICAgaWYgKCFwcmlt
aXRpdmVWYWx1ZSkgewotICAgICAgICBpZiAob2spCi0gICAgICAgICAgICAqb2sgPSBmYWxzZTsK
LSAgICB9IGVsc2UgewotICAgICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRp
dmVUeXBlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXN0eWxlICYmICh0eXBlID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfRU1TIHx8IHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19F
WFMgfHwgdHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JFTVMpKSB7Ci0gICAgICAgICAg
ICBpZiAob2spCi0gICAgICAgICAgICAgICAgKm9rID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoQ1NTUHJpbWl0aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgodHlwZSkpCi0gICAgICAgICAg
ICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0
eWxlLCByb290U3R5bGUsIG11bHRpcGxpZXIpLCBGaXhlZCk7Ci0gICAgICAgIGVsc2UgaWYgKHR5
cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQotICAgICAgICAgICAgbCA9
IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7Ci0gICAg
ICAgIGVsc2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCi0gICAg
ICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpICogMTAw
LjAsIFBlcmNlbnQpOwotICAgICAgICBlbHNlIGlmIChvaykKLSAgICAgICAgICAgICpvayA9IGZh
bHNlOwotICAgIH0KLSAgICByZXR1cm4gbDsKLX0KLQotdGVtcGxhdGUgPGJvb2wgYXBwbHlGaXJz
dD4KLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbnMoYm9vbCBpc0ltcG9y
dGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCkKLXsKLSAgICBpZiAoc3RhcnRJbmRl
eCA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7
IGkgPD0gZW5kSW5kZXg7IGkrKykgewotICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biogZGVjbCA9IG1fbWF0Y2hlZERlY2xzW2ldOwotICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGVjbC0+ZW5kKCk7Ci0gICAgICAgIGZvciAo
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGVjbC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYg
Y3VycmVudCA9ICppdDsKLSAgICAgICAgICAgIGlmIChpc0ltcG9ydGFudCA9PSBjdXJyZW50Lmlz
SW1wb3J0YW50KCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50Lmlk
KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlGaXJzdCkgewotICAgICAgICAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChmaXJzdENTU1Byb3BlcnR5ID09IENTU1Byb3BlcnR5Q29sb3Is
IENTU19jb2xvcl9pc19maXJzdF9wcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKENTU1Byb3BlcnR5Wm9vbSA9PSBDU1NQcm9wZXJ0eUNvbG9yICsgMTEsIENTU196
b29tX2lzX2VuZF9vZl9maXJzdF9wcm9wX3JhbmdlKTsKLSAgICAgICAgICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0ID09IENTU1Byb3BlcnR5Wm9vbSArIDEs
IENTU19saW5lX2hlaWdodF9pc19hZnRlcl96b29tKTsKLQotICAgICAgICAgICAgICAgICAgICAv
LyBnaXZlIHNwZWNpYWwgcHJpb3JpdHkgdG8gZm9udC14eHgsIGNvbG9yIHByb3BlcnRpZXMsIGV0
YwotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkgPD0gQ1NTUHJvcGVydHlMaW5lSGVp
Z2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcHBseSBsaW5lLWhlaWdodCBs
YXRlcgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5
TGluZUhlaWdodCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1
ZSA9IGN1cnJlbnQudmFsdWUoKTsgCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJy
ZW50LnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5ID4gQ1NTUHJvcGVydHlMaW5l
SGVpZ2h0KQotICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50Lmlk
KCksIGN1cnJlbnQudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1
bGVzKENTU1J1bGVTZXQqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2Us
IGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCi17Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsK
LQotICAgIGlmICghcnVsZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1hdGNoUGFnZVJ1bGVz
Rm9yTGlzdChydWxlcy0+Z2V0UGFnZVJ1bGVzKCksIGlzTGVmdFBhZ2UsIGlzRmlyc3RQYWdlLCBw
YWdlTmFtZSk7Ci0KLSAgICAvLyBJZiB3ZSBkaWRuJ3QgbWF0Y2ggYW55IHJ1bGVzLCB3ZSdyZSBk
b25lLgotICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIFNvcnQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgIHNvcnRNYXRjaGVk
UnVsZXMoMCwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpKTsKLQotICAgIC8vIE5vdyB0cmFuc2ZlciB0
aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNscy4KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspCi0gICAg
ICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5kZWNs
YXJhdGlvbigpKTsKLX0KLQotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFBhZ2VSdWxlc0Zv
ckxpc3QoQ1NTUnVsZURhdGFMaXN0KiBydWxlcywgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmly
c3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQotewotICAgIGlmICghcnVsZXMpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGZvciAoQ1NTUnVsZURhdGEqIGQgPSBydWxlcy0+Zmlyc3QoKTsg
ZDsgZCA9IGQtPm5leHQoKSkgewotICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBkLT5ydWxl
KCk7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JMb2NhbE5hbWUgPSBkLT5z
ZWxlY3RvcigpLT5tX3RhZy5sb2NhbE5hbWUoKTsKLSAgICAgICAgaWYgKHNlbGVjdG9yTG9jYWxO
YW1lICE9IHN0YXJBdG9tICYmIHNlbGVjdG9yTG9jYWxOYW1lICE9IHBhZ2VOYW1lKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlIHBzZXVkb1R5
cGUgPSBkLT5zZWxlY3RvcigpLT5wc2V1ZG9UeXBlKCk7Ci0gICAgICAgIGlmICgocHNldWRvVHlw
ZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvTGVmdFBhZ2UgJiYgIWlzTGVmdFBhZ2UpCi0gICAgICAg
ICAgICB8fCAocHNldWRvVHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvUmlnaHRQYWdlICYmIGlz
TGVmdFBhZ2UpCi0gICAgICAgICAgICB8fCAocHNldWRvVHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRmlyc3RQYWdlICYmICFpc0ZpcnN0UGFnZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBp
Z25vcmUgaXQuCi0gICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gcnVs
ZS0+ZGVjbGFyYXRpb24oKTsKLSAgICAgICAgaWYgKCFkZWNsIHx8ICFkZWNsLT5sZW5ndGgoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIEFkZCB0aGlzIHJ1bGUgdG8gb3Vy
IGxpc3Qgb2YgbWF0Y2hlZCBydWxlcy4KLSAgICAgICAgYWRkTWF0Y2hlZFJ1bGUoZCk7Ci0gICAg
fQotfQotCi1ib29sIENTU1N0eWxlU2VsZWN0b3I6OmlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkg
Y29uc3QKLXsKLSAgICBib29sIGlzRmlyc3RQYWdlTGVmdCA9IGZhbHNlOwotICAgIGlmIChtX3Jv
b3RFbGVtZW50U3R5bGUtPmRpcmVjdGlvbigpID09IFJUTCkKLSAgICAgICAgaXNGaXJzdFBhZ2VM
ZWZ0ID0gdHJ1ZTsKLQotICAgIHJldHVybiAocGFnZUluZGV4ICsgKGlzRmlyc3RQYWdlTGVmdCA/
IDEgOiAwKSkgJSAyOwotfQotCi1ib29sIENTU1N0eWxlU2VsZWN0b3I6OmlzRmlyc3RQYWdlKGlu
dCBwYWdlSW5kZXgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEluIGNhc2Ugb2YgZm9yY2VkIGxl
ZnQvcmlnaHQgcGFnZSwgcGFnZSBhdCBpbmRleCAxIChub3QgMCkgY2FuIGJlIHRoZSBmaXJzdCBw
YWdlLgotICAgIHJldHVybiAoIXBhZ2VJbmRleCk7Ci19Ci0KLVN0cmluZyBDU1NTdHlsZVNlbGVj
dG9yOjpwYWdlTmFtZShpbnQgLyogcGFnZUluZGV4ICovKSBjb25zdAotewotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgcGFnZSBpbmRleCB0byBwYWdlIG5hbWUgbWFwcGluZy4KLSAgICByZXR1cm4g
IiI7Ci19Ci0KLXN0YXRpYyB2b2lkIGFwcGx5Q291bnRlckxpc3QoUmVuZGVyU3R5bGUqIHN0eWxl
LCBDU1NWYWx1ZUxpc3QqIGxpc3QsIGJvb2wgaXNSZXNldCkKLXsKLSAgICBDb3VudGVyRGlyZWN0
aXZlTWFwJiBtYXAgPSBzdHlsZS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKLSAgICB0eXBl
ZGVmIENvdW50ZXJEaXJlY3RpdmVNYXA6Oml0ZXJhdG9yIEl0ZXJhdG9yOwotCi0gICAgSXRlcmF0
b3IgZW5kID0gbWFwLmVuZCgpOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpZiAoaXNSZXNldCkKLSAgICAgICAgICAgIGl0LT5z
ZWNvbmQubV9yZXNldCA9IGZhbHNlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpdC0+c2Vj
b25kLm1faW5jcmVtZW50ID0gZmFsc2U7Ci0KLSAgICBpbnQgbGVuZ3RoID0gbGlzdCA/IGxpc3Qt
Pmxlbmd0aCgpIDogMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIFBhaXIqIHBhaXIgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGxpc3Qt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpLT5nZXRQYWlyVmFsdWUoKTsKLSAgICAgICAgQXRv
bWljU3RyaW5nIGlkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBh
aXItPmZpcnN0KCkpLT5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICAvLyBGSVhNRTogV2hhdCBh
Ym91dCBvdmVyZmxvdz8KLSAgICAgICAgaW50IHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPihwYWlyLT5zZWNvbmQoKSktPmdldEludFZhbHVlKCk7Ci0gICAgICAgIENvdW50
ZXJEaXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgQ291
bnRlckRpcmVjdGl2ZXMoKSkuZmlyc3QtPnNlY29uZDsKLSAgICAgICAgaWYgKGlzUmVzZXQpIHsK
LSAgICAgICAgICAgIGRpcmVjdGl2ZXMubV9yZXNldCA9IHRydWU7Ci0gICAgICAgICAgICBkaXJl
Y3RpdmVzLm1fcmVzZXRWYWx1ZSA9IHZhbHVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaWYgKGRpcmVjdGl2ZXMubV9pbmNyZW1lbnQpCi0gICAgICAgICAgICAgICAgZGlyZWN0aXZl
cy5tX2luY3JlbWVudFZhbHVlICs9IHZhbHVlOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ZGlyZWN0aXZlcy5tX2luY3JlbWVudFZhbHVlID0gdmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eVRv
U3R5bGUoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAg
ICBpbml0RWxlbWVudCgwKTsKLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKDAsIHN0eWxlKTsKLSAg
ICBtX3N0eWxlID0gc3R5bGU7Ci0gICAgYXBwbHlQcm9wZXJ0eShpZCwgdmFsdWUpOwotfQotCi1p
bmxpbmUgYm9vbCBpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpbnQgaWQpCi17Ci0gICAgc3dp
dGNoKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KGlkKSkgewotICAgICAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVm
dENvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcjoKLSAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOgotICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyQm90dG9tQ29sb3I6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKLSAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcjoKLSAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvcjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFRleHRGaWxsQ29sb3I6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tl
Q29sb3I6Ci0gICAgICAgIC8vIEFsc28gYWxsb3cgc2hvcnRoYW5kcyBzbyB0aGF0IGluaGVyaXQv
aW5pdGlhbCBzdGlsbCB3b3JrLgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZDoK
LSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnQ6Ci0gICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJSaWdodDoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcDoKLSAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbToKLSAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eU91dGxpbmU6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlOgot
I2lmIEVOQUJMRShTVkcpCi0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsOgotICAgICAgICBj
YXNlIENTU1Byb3BlcnR5U3Ryb2tlOgotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludCBp
ZCwgQ1NTVmFsdWUgKnZhbHVlKQotewotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IDA7Ci0gICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHBy
aW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0K
LSAgICBmbG9hdCB6b29tRmFjdG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotCi0gICAg
Ly8gU1ZHIGhhbmRsZXMgem9vbWluZyBpbiBhIGRpZmZlcmVudCB3YXkgY29tcGFyZWQgdG8gQ1NT
LiBUaGUgd2hvbGUgZG9jdW1lbnQgaXMgc2NhbGVkIGluc3RlYWQKLSAgICAvLyBvZiBlYWNoIGlu
ZGl2aWR1YWwgbGVuZ3RoIHZhbHVlIGluIHRoZSByZW5kZXIgc3R5bGUgLyB0cmVlLiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aCooKQotICAgIC8vIG11bHRpcGxpZXMgZWFjaCByZXNv
bHZlZCBsZW5ndGggd2l0aCB0aGUgem9vbSBtdWx0aXBsaWVyIC0gc28gZm9yIFNWRyB3ZSBuZWVk
IHRvIGRpc2FibGUgdGhhdC4KLSAgICAvLyBUaG91Z2ggYWxsIENTUyB2YWx1ZXMgdGhhdCBjYW4g
YmUgYXBwbGllZCB0byBvdXRlcm1vc3QgPHN2Zz4gZWxlbWVudHMgKHdpZHRoL2hlaWdodC9ib3Jk
ZXIvcGFkZGluZy4uLikKLSAgICAvLyBuZWVkIHRvIHJlc3BlY3QgdGhlIHNjYWxpbmcuIFJlbmRl
ckJveCAodGhlIHBhcmVudCBjbGFzcyBvZiBSZW5kZXJTVkdSb290KSBncmFicyB2YWx1ZXMgbGlr
ZQotICAgIC8vIHdpZHRoL2hlaWdodC9ib3JkZXIvcGFkZGluZy8uLi4gZnJvbSB0aGUgUmVuZGVy
U3R5bGUgLT4gZm9yIFNWRyB0aGVzZSB2YWx1ZXMgd291bGQgbmV2ZXIgc2NhbGUsCi0gICAgLy8g
aWYgd2UnZCBwYXNzIGEgMS4wIHpvb20gZmFjdG9yIGV2ZXJ5aHdlcmUuIFNvIHdlIG9ubHkgcGFz
cyBhIHpvb20gZmFjdG9yIG9mIDEuMCBmb3Igc3BlY2lmaWMKLSAgICAvLyBwcm9wZXJ0aWVzIHRo
YXQgYXJlIE5PVCBhbGxvd2VkIHRvIHNjYWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQg
KGxldHRlci93b3JkLXNwYWNpbmcvZm9udC1zaXplKS4KLSAgICBib29sIHVzZVNWR1pvb21SdWxl
cyA9IG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgpOwotCi0gICAgTGVuZ3Ro
IGw7Ci0gICAgYm9vbCBhcHBseSA9IGZhbHNlOwotCi0gICAgdW5zaWduZWQgc2hvcnQgdmFsdWVU
eXBlID0gdmFsdWUtPmNzc1ZhbHVlVHlwZSgpOwotCi0gICAgYm9vbCBpc0luaGVyaXQgPSBtX3Bh
cmVudE5vZGUgJiYgdmFsdWVUeXBlID09IENTU1ZhbHVlOjpDU1NfSU5IRVJJVDsKLSAgICBib29s
IGlzSW5pdGlhbCA9IHZhbHVlVHlwZSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwgfHwgKCFtX3Bh
cmVudE5vZGUgJiYgdmFsdWVUeXBlID09IENTU1ZhbHVlOjpDU1NfSU5IRVJJVCk7Ci0gICAgCi0g
ICAgaWQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoaWQsIG1f
c3R5bGUtPmRpcmVjdGlvbigpKTsKLQotICAgIGlmIChtX2NoZWNrZXIubV9tYXRjaFZpc2l0ZWRQ
c2V1ZG9DbGFzcyAmJiAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSB7Ci0gICAgICAg
IC8vIExpbWl0IHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0aGUg
b25lcyBob25vcmVkIGJ5IDp2aXNpdGVkLgotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIC8vIFdoYXQgZm9sbG93cyBpcyBhIGxpc3QgdGhhdCBtYXBzIHRoZSBDU1MgcHJvcGVydGll
cyBpbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgZnJvbnQtZW5kCi0gICAgLy8gUmVuZGVyU3R5bGUg
dmFsdWVzLiAgU2hvcnRoYW5kcyAoZS5nLiBib3JkZXIsIGJhY2tncm91bmQpIG9jY3VyIGluIHRo
aXMgbGlzdCBhcyB3ZWxsIGFuZAotICAgIC8vIGFyZSBvbmx5IGhpdCB3aGVuIG1hcHBpbmcgImlu
aGVyaXQiIG9yICJpbml0aWFsIiBpbnRvIGZyb250LWVuZCB2YWx1ZXMuCi0gICAgc3dpdGNoIChz
dGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihpZCkpIHsKLS8vIGlkZW50IG9ubHkgcHJvcGVydGll
cwotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudDoKLSAgICAgICAgSEFO
RExFX0JBQ0tHUk9VTkRfVkFMVUUoYXR0YWNobWVudCwgQXR0YWNobWVudCwgdmFsdWUpCi0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXA6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDbGlwOgotICAgICAgICBIQU5ETEVfQkFDS0dS
T1VORF9WQUxVRShjbGlwLCBDbGlwLCB2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ29tcG9zaXRlOgotICAgICAgICBIQU5ETEVfQkFD
S0dST1VORF9WQUxVRShjb21wb3NpdGUsIENvbXBvc2l0ZSwgdmFsdWUpCi0gICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbjoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0QmFja2dyb3VuZE9yaWdpbjoKLSAgICAgICAgSEFORExFX0JBQ0tHUk9VTkRf
VkFMVUUob3JpZ2luLCBPcmlnaW4sIHZhbHVlKQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRTaXplOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNr
Z3JvdW5kU2l6ZToKLSAgICAgICAgSEFORExFX0JBQ0tHUk9VTkRfVkFMVUUoc2l6ZSwgU2l6ZSwg
dmFsdWUpCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0F0
dGFjaG1lbnQ6Ci0gICAgICAgIEhBTkRMRV9NQVNLX1ZBTFVFKGF0dGFjaG1lbnQsIEF0dGFjaG1l
bnQsIHZhbHVlKQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tDbGlwOgotICAgICAgICBIQU5ETEVfTUFTS19WQUxVRShjbGlwLCBDbGlwLCB2YWx1ZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ29tcG9zaXRlOgot
ICAgICAgICBIQU5ETEVfTUFTS19WQUxVRShjb21wb3NpdGUsIENvbXBvc2l0ZSwgdmFsdWUpCi0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdpbjoKLSAg
ICAgICAgSEFORExFX01BU0tfVkFMVUUob3JpZ2luLCBPcmlnaW4sIHZhbHVlKQotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplOgotICAgICAgICBIQU5E
TEVfTUFTS19WQUxVRShzaXplLCBTaXplLCB2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xsYXBzZToKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5E
X0lOSVRJQUwoYm9yZGVyQ29sbGFwc2UsIEJvcmRlckNvbGxhcHNlKQotICAgICAgICBpZiAoIXBy
aW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzd2l0Y2ggKHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ29sbGFw
c2U6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyQ29sbGFwc2UodHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2VwYXJhdGU6
Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyQ29sbGFwc2UoZmFsc2UpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJUb3BTdHlsZToKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5E
X1BSSU1JVElWRV9XSVRIX1ZBTFVFKGJvcmRlclRvcFN0eWxlLCBCb3JkZXJUb3BTdHlsZSwgQm9y
ZGVyU3R5bGUpCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmln
aHRTdHlsZToKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElW
RV9XSVRIX1ZBTFVFKGJvcmRlclJpZ2h0U3R5bGUsIEJvcmRlclJpZ2h0U3R5bGUsIEJvcmRlclN0
eWxlKQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVN0
eWxlOgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFX1dJ
VEhfVkFMVUUoYm9yZGVyQm90dG9tU3R5bGUsIEJvcmRlckJvdHRvbVN0eWxlLCBCb3JkZXJTdHls
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0U3R5bGU6
Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkVfV0lUSF9W
QUxVRShib3JkZXJMZWZ0U3R5bGUsIEJvcmRlckxlZnRTdHlsZSwgQm9yZGVyU3R5bGUpCi0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVN0eWxlOgotICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9XSVRIX1ZBTFVFKG91dGxpbmVTdHlsZSwgT3V0bGlu
ZVN0eWxlLCBCb3JkZXJTdHlsZSkKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7Ci0gICAg
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQot
ICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE91dGxpbmVTdHlsZShET1RURUQsIHRydWUpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE91dGxpbmVTdHls
ZSgqcHJpbWl0aXZlVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IENTU1Byb3BlcnR5Q2FwdGlvblNpZGU6Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklU
SUFMX0FORF9QUklNSVRJVkUoY2FwdGlvblNpZGUsIENhcHRpb25TaWRlKQotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNsZWFyOgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9B
TkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKGNsZWFyLCBDbGVhcikKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FO
RF9JTklUSUFMX0FORF9QUklNSVRJVkUoZGlyZWN0aW9uLCBEaXJlY3Rpb24pCi0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5RGlzcGxheToKLSAgICAgICAgSEFORExFX0lOSEVS
SVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRShkaXNwbGF5LCBEaXNwbGF5KQotI2lmIEVOQUJM
RShXQ1NTKQotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdhcE1hcnF1ZWUpIHsKLSAgICAg
ICAgICAgICAgICAvLyBJbml0aWFsaXplIFdBUCBNYXJxdWVlIHN0eWxlCi0gICAgICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0T3ZlcmZsb3dYKE9NQVJRVUVFKTsKLSAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRPdmVyZmxvd1koT01BUlFVRUUpOwotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dFdoaXRlU3BhY2UoTk9XUkFQKTsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVl
RGlyZWN0aW9uKE1MRUZUKTsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3Bl
ZWQoODUpOyAvLyBOb3JtYWwgc3BlZWQKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJx
dWVlTG9vcENvdW50KDEpOwotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVCZWhh
dmlvcihNU0NST0xMKTsKLQotICAgICAgICAgICAgICAgIGlmIChtX3BhcmVudFN0eWxlKQotICAg
ICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXREaXNwbGF5KG1fcGFyZW50U3R5bGUtPmRpc3Bs
YXkoKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXREaXNwbGF5KCpwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXREaXNwbGF5KCpwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAg
IH0KLSNlbmRpZgotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUVtcHR5Q2Vs
bHM6Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkUoZW1w
dHlDZWxscywgRW1wdHlDZWxscykKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlGbG9hdDoKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElW
RShmbG9hdGluZywgRmxvYXRpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Rm9udFN0eWxlOgotICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBpZiAoaXNJbmhlcml0
KQotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhtX3BhcmVudFN0eWxlLT5m
b250RGVzY3JpcHRpb24oKS5pdGFsaWMoKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzSW5pdGlhbCkK
LSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoZmFsc2UpOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPYmxpcXVlOgotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBvYmxpcXVlIGlzIHRoZSBzYW1lIGFzIGl0YWxpYyBmb3IgdGhlIG1vbWVudC4u
LgotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVJdGFsaWM6Ci0gICAgICAgICAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoZmFsc2UpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fc3R5
bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKQotICAgICAgICAgICAgbV9m
b250RGlydHkgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUZvbnRWYXJpYW50OgotICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBpZiAoaXNJ
bmhlcml0KSAKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTbWFsbENhcHMobV9wYXJl
bnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuc21hbGxDYXBzKCkpOwotICAgICAgICBlbHNlIGlm
IChpc0luaXRpYWwpCi0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0U21hbGxDYXBzKGZh
bHNlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGludCBpZCA9IHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpOwotICAgICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQot
ICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTbWFsbENhcHMoZmFsc2UpOwotICAg
ICAgICAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVTbWFsbENhcHMpCi0gICAgICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldFNtYWxsQ2Fwcyh0cnVlKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fc3R5bGUt
PnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKQotICAgICAgICAgICAgbV9mb250
RGlydHkgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUZvbnRXZWlnaHQ6Ci0gICAgewotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2Ny
aXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGlmIChpc0luaGVy
aXQpCi0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KG1fcGFyZW50U3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpLndlaWdodCgpKTsKLSAgICAgICAgZWxzZSBpZiAoaXNJbml0aWFs
KQotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFs
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUJvbGRlcjoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoZm9udERlc2NyaXB0
aW9uLmJvbGRlcldlaWdodCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGlnaHRlcjoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoZm9udERlc2NyaXB0aW9uLmxpZ2h0ZXJX
ZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZUJvbGQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWU3MDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0
KEZvbnRXZWlnaHRCb2xkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgotICAgICAgICAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlNDAwOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlOTAwOgotICAgICAgICAgICAg
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0OTAwKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIENT
U1ZhbHVlODAwOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdl
aWdodChGb250V2VpZ2h0ODAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlNjAwOgotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0NjAwKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlNTAw
OgotICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250
V2VpZ2h0NTAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlMzAwOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0MzAwKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlMjAwOgotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0MjAw
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlMTAwOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldFdlaWdodChGb250V2VpZ2h0MTAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3N0
eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSkKLSAgICAgICAgICAgIG1f
Zm9udERpcnR5ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZVBvc2l0aW9uOgotICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKGxpc3RTdHlsZVBvc2l0aW9uLCBMaXN0U3R5bGVQ
b3NpdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVU
eXBlOgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKGxp
c3RTdHlsZVR5cGUsIExpc3RTdHlsZVR5cGUpCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENT
U1Byb3BlcnR5T3ZlcmZsb3c6Ci0gICAgewotICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAg
ICAgICAgICBtX3N0eWxlLT5zZXRPdmVyZmxvd1gobV9wYXJlbnRTdHlsZS0+b3ZlcmZsb3dYKCkp
OwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0T3ZlcmZsb3dZKG1fcGFyZW50U3R5bGUtPm92ZXJm
bG93WSgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0T3ZlcmZsb3dYKFJl
bmRlclN0eWxlOjppbml0aWFsT3ZlcmZsb3dYKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0
T3ZlcmZsb3dZKFJlbmRlclN0eWxlOjppbml0aWFsT3ZlcmZsb3dZKCkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgRU92ZXJmbG93IG8gPSAq
cHJpbWl0aXZlVmFsdWU7Ci0KLSAgICAgICAgbV9zdHlsZS0+c2V0T3ZlcmZsb3dYKG8pOwotICAg
ICAgICBtX3N0eWxlLT5zZXRPdmVyZmxvd1kobyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dYOgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9B
TkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKG92ZXJmbG93WCwgT3ZlcmZsb3dYKQotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93WToKLSAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRShvdmVyZmxvd1ksIE92ZXJmbG93WSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtCZWZvcmU6Ci0gICAg
ICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkVfV0lUSF9WQUxVRShw
YWdlQnJlYWtCZWZvcmUsIFBhZ2VCcmVha0JlZm9yZSwgUGFnZUJyZWFrKQotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0FmdGVyOgotICAgICAgICBIQU5ETEVf
SU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFX1dJVEhfVkFMVUUocGFnZUJyZWFrQWZ0
ZXIsIFBhZ2VCcmVha0FmdGVyLCBQYWdlQnJlYWspCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IENTU1Byb3BlcnR5UGFnZUJyZWFrSW5zaWRlOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FO
RF9JTklUSUFMX1dJVEhfVkFMVUUocGFnZUJyZWFrSW5zaWRlLCBQYWdlQnJlYWtJbnNpZGUsIFBh
Z2VCcmVhaykKLSAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgRVBhZ2VCcmVhayBwYWdlQnJlYWsgPSAqcHJpbWl0aXZlVmFsdWU7Ci0gICAg
ICAgIGlmIChwYWdlQnJlYWsgIT0gUEJBTFdBWVMpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRQ
YWdlQnJlYWtJbnNpZGUocGFnZUJyZWFrKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAg
ICAgCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVBvc2l0aW9uOgotICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKHBvc2l0aW9uLCBQb3NpdGlvbikKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJsZUxheW91dDogewotICAgICAgICBIQU5E
TEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0YWJsZUxheW91dCwgVGFibGVMYXlvdXQpCi0KLSAgICAg
ICAgRVRhYmxlTGF5b3V0IGwgPSAqcHJpbWl0aXZlVmFsdWU7Ci0gICAgICAgIGlmIChsID09IFRB
VVRPKQotICAgICAgICAgICAgbCA9IFJlbmRlclN0eWxlOjppbml0aWFsVGFibGVMYXlvdXQoKTsK
LQotICAgICAgICBtX3N0eWxlLT5zZXRUYWJsZUxheW91dChsKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpOiAKLSAgICAg
ICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRSh1bmljb2RlQmlkaSwg
VW5pY29kZUJpZGkpCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFRy
YW5zZm9ybTogCi0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJ
VkUodGV4dFRyYW5zZm9ybSwgVGV4dFRyYW5zZm9ybSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgQ1NTUHJvcGVydHlWaXNpYmlsaXR5OgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTF9BTkRfUFJJTUlUSVZFKHZpc2liaWxpdHksIFZpc2liaWxpdHkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2hpdGVTcGFjZToKLSAgICAgICAgSEFORExFX0lOSEVS
SVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRSh3aGl0ZVNwYWNlLCBXaGl0ZVNwYWNlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uOgot
ICAgICAgICBIQU5ETEVfQkFDS0dST1VORF9JTkhFUklUX0FORF9JTklUSUFMKHhQb3NpdGlvbiwg
WFBvc2l0aW9uKTsKLSAgICAgICAgSEFORExFX0JBQ0tHUk9VTkRfSU5IRVJJVF9BTkRfSU5JVElB
TCh5UG9zaXRpb24sIFlQb3NpdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDogewotICAgICAgICBIQU5ETEVfQkFDS0dST1VORF9W
QUxVRSh4UG9zaXRpb24sIFhQb3NpdGlvbiwgdmFsdWUpCi0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6IHsKLSAgICAgICAgSEFO
RExFX0JBQ0tHUk9VTkRfVkFMVUUoeVBvc2l0aW9uLCBZUG9zaXRpb24sIHZhbHVlKQotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb246
Ci0gICAgICAgIEhBTkRMRV9NQVNLX0lOSEVSSVRfQU5EX0lOSVRJQUwoeFBvc2l0aW9uLCBYUG9z
aXRpb24pOwotICAgICAgICBIQU5ETEVfTUFTS19JTkhFUklUX0FORF9JTklUSUFMKHlQb3NpdGlv
biwgWVBvc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrUG9zaXRpb25YOiB7Ci0gICAgICAgIEhBTkRMRV9NQVNLX1ZBTFVFKHhQb3NpdGlvbiwg
WFBvc2l0aW9uLCB2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWTogewotICAgICAgICBIQU5ETEVfTUFTS19WQUxVRSh5
UG9zaXRpb24sIFlQb3NpdGlvbiwgdmFsdWUpCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXQ6Ci0gICAgICAgIEhBTkRMRV9CQUNLR1JP
VU5EX0lOSEVSSVRfQU5EX0lOSVRJQUwocmVwZWF0WCwgUmVwZWF0WCk7Ci0gICAgICAgIEhBTkRM
RV9CQUNLR1JPVU5EX0lOSEVSSVRfQU5EX0lOSVRJQUwocmVwZWF0WSwgUmVwZWF0WSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFg6Ci0gICAg
ICAgIEhBTkRMRV9CQUNLR1JPVU5EX1ZBTFVFKHJlcGVhdFgsIFJlcGVhdFgsIHZhbHVlKQotICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZOgotICAg
ICAgICBIQU5ETEVfQkFDS0dST1VORF9WQUxVRShyZXBlYXRZLCBSZXBlYXRZLCB2YWx1ZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0OgotICAg
ICAgICBIQU5ETEVfTUFTS19JTkhFUklUX0FORF9JTklUSUFMKHJlcGVhdFgsIFJlcGVhdFgpOwot
ICAgICAgICBIQU5ETEVfTUFTS19JTkhFUklUX0FORF9JTklUSUFMKHJlcGVhdFksIFJlcGVhdFkp
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRY
OgotICAgICAgICBIQU5ETEVfTUFTS19WQUxVRShyZXBlYXRYLCBSZXBlYXRYLCB2YWx1ZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WToKLSAg
ICAgICAgSEFORExFX01BU0tfVkFMVUUocmVwZWF0WSwgUmVwZWF0WSwgdmFsdWUpCi0gICAgICAg
IHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyU3BhY2luZzogewotICAgICAgICBp
ZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRIb3Jpem9udGFsQm9yZGVy
U3BhY2luZyhtX3BhcmVudFN0eWxlLT5ob3Jpem9udGFsQm9yZGVyU3BhY2luZygpKTsKLSAgICAg
ICAgICAgIG1fc3R5bGUtPnNldFZlcnRpY2FsQm9yZGVyU3BhY2luZyhtX3BhcmVudFN0eWxlLT52
ZXJ0aWNhbEJvcmRlclNwYWNpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaXNJ
bml0aWFsKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRIb3Jpem9udGFsQm9yZGVyU3BhY2lu
ZygwKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFZlcnRpY2FsQm9yZGVyU3BhY2luZygwKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZzogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9B
TkRfSU5JVElBTChob3Jpem9udGFsQm9yZGVyU3BhY2luZywgSG9yaXpvbnRhbEJvcmRlclNwYWNp
bmcpCi0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHNob3J0IHNwYWNpbmcgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aFNob3J0
KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgIG1fc3R5
bGUtPnNldEhvcml6b250YWxCb3JkZXJTcGFjaW5nKHNwYWNpbmcpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmc6
IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodmVydGljYWxCb3JkZXJTcGFj
aW5nLCBWZXJ0aWNhbEJvcmRlclNwYWNpbmcpCi0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHNob3J0IHNwYWNpbmcgPSBwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aFNob3J0KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9v
bUZhY3Rvcik7Ci0gICAgICAgIG1fc3R5bGUtPnNldFZlcnRpY2FsQm9yZGVyU3BhY2luZyhzcGFj
aW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5Q3Vyc29y
OgotICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRDdXJz
b3IobV9wYXJlbnRTdHlsZS0+Y3Vyc29yKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q3Vy
c29yTGlzdChtX3BhcmVudFN0eWxlLT5jdXJzb3JzKCkpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIG1fc3R5bGUtPmNsZWFyQ3Vyc29yTGlzdCgpOwotICAgICAgICBp
ZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRDdXJzb3IoUmVuZGVyU3R5
bGU6OmluaXRpYWxDdXJzb3IoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZUxp
c3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgICAg
ICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRDdXJz
b3IoQ1VSU09SX0FVVE8pOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkr
KykgewotICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gbGlzdC0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjayhpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFs
dWUoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwotICAg
ICAgICAgICAgICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsK
LSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkg
ewotICAgICAgICAgICAgICAgICAgICBDU1NDdXJzb3JJbWFnZVZhbHVlKiBpbWFnZSA9IHN0YXRp
Y19jYXN0PENTU0N1cnNvckltYWdlVmFsdWUqPihwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChpbWFnZS0+dXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQobV9lbGVtZW50KSkg
Ly8gRWxlbWVudHMgd2l0aCBTVkcgY3Vyc29ycyBhcmUgbm90IGFsbG93ZWQgdG8gc2hhcmUgc3R5
bGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRVbmlxdWUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFRlbXBvcmFyeSBjbHVtc2luZXNzIHRvIHBhc3Mgb2Zm
IGEgQ2FjaGVkSW1hZ2UgdG8gYW4gQVBJIHRoYXQgd2lsbCBldmVudHVhbGx5IGNvbnZlcnQgdG8g
dXNpbmcKLSAgICAgICAgICAgICAgICAgICAgLy8gU3R5bGVJbWFnZS4KLSAgICAgICAgICAgICAg
ICAgICAgUmVmUHRyPFN0eWxlQ2FjaGVkSW1hZ2U+IHN0eWxlQ2FjaGVkSW1hZ2UoaW1hZ2UtPmNh
Y2hlZEltYWdlKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0eWxlQ2FjaGVkSW1hZ2UpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5hZGRDdXJzb3Ioc3R5bGVDYWNoZWRJbWFnZS0+Y2FjaGVkSW1hZ2UoKSwgaW1h
Z2UtPmhvdFNwb3QoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlKSB7Ci0gICAgICAgICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZh
bHVlLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0lERU5UICYmIG1fc3R5bGUtPmN1cnNvcigpICE9IEVDdXJzb3IoKnByaW1p
dGl2ZVZhbHVlKSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDdXJzb3IoKnByaW1pdGl2
ZVZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0vLyBjb2xvcnMgfHwgaW5oZXJp
dAotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKLSAgICAgICAgLy8gSWYgdGhlICdjdXJyZW50
Q29sb3InIGtleXdvcmQgaXMgc2V0IG9uIHRoZSAnY29sb3InIHByb3BlcnR5IGl0c2VsZiwKLSAg
ICAgICAgLy8gaXQgaXMgdHJlYXRlZCBhcyAnY29sb3I6aW5oZXJpdCcgYXQgcGFyc2UgdGltZQot
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCi0gICAgICAgICAgICBpc0luaGVyaXQgPSB0cnVlOwot
ICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUJvcmRlclRvcENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcjoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyTGVmdENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvcjoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
ZXh0RmlsbENvbG9yOiB7Ci0gICAgICAgIENvbG9yIGNvbDsKLSAgICAgICAgaWYgKGlzSW5oZXJp
dCkgewotICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvciwgYmFja2dyb3VuZENvbG9yLCBCYWNrZ3JvdW5kQ29sb3IpCi0gICAgICAgICAgICBI
QU5ETEVfSU5IRVJJVF9DT05EX1dJVEhfQkFDS1VQKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3Is
IGJvcmRlclRvcENvbG9yLCBjb2xvciwgQm9yZGVyVG9wQ29sb3IpCi0gICAgICAgICAgICBIQU5E
TEVfSU5IRVJJVF9DT05EX1dJVEhfQkFDS1VQKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3Is
IGJvcmRlckJvdHRvbUNvbG9yLCBjb2xvciwgQm9yZGVyQm90dG9tQ29sb3IpCi0gICAgICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9DT05EX1dJVEhfQkFDS1VQKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRD
b2xvciwgYm9yZGVyUmlnaHRDb2xvciwgY29sb3IsIEJvcmRlclJpZ2h0Q29sb3IpCi0gICAgICAg
ICAgICBIQU5ETEVfSU5IRVJJVF9DT05EX1dJVEhfQkFDS1VQKENTU1Byb3BlcnR5Qm9yZGVyTGVm
dENvbG9yLCBib3JkZXJMZWZ0Q29sb3IsIGNvbG9yLCBCb3JkZXJMZWZ0Q29sb3IpCi0gICAgICAg
ICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5Q29sb3IsIGNvbG9yLCBDb2xvcikK
LSAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkRfV0lUSF9CQUNLVVAoQ1NTUHJvcGVydHlP
dXRsaW5lQ29sb3IsIG91dGxpbmVDb2xvciwgY29sb3IsIE91dGxpbmVDb2xvcikKLSAgICAgICAg
ICAgIEhBTkRMRV9JTkhFUklUX0NPTkRfV0lUSF9CQUNLVVAoQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5SdWxlQ29sb3IsIGNvbHVtblJ1bGVDb2xvciwgY29sb3IsIENvbHVtblJ1bGVDb2xvcikKLSAg
ICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkRfV0lUSF9CQUNLVVAoQ1NTUHJvcGVydHlXZWJr
aXRUZXh0U3Ryb2tlQ29sb3IsIHRleHRTdHJva2VDb2xvciwgY29sb3IsIFRleHRTdHJva2VDb2xv
cikKLSAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkRfV0lUSF9CQUNLVVAoQ1NTUHJvcGVy
dHlXZWJraXRUZXh0RmlsbENvbG9yLCB0ZXh0RmlsbENvbG9yLCBjb2xvciwgVGV4dEZpbGxDb2xv
cikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNJbml0aWFs
KSB7Ci0gICAgICAgICAgICAvLyBUaGUgYm9yZGVyL291dGxpbmUgY29sb3JzIHdpbGwganVzdCBt
YXAgdG8gdGhlIGludmFsaWQgY29sb3IgfGNvbHwgYWJvdmUuICBUaGlzIHdpbGwgaGF2ZSB0aGUK
LSAgICAgICAgICAgIC8vIGVmZmVjdCBvZiBmb3JjaW5nIHRoZSB1c2Ugb2YgdGhlIGN1cnJlbnRD
b2xvciB3aGVuIGl0IGNvbWVzIHRpbWUgdG8gZHJhdyB0aGUgYm9yZGVycyAoYW5kIG9mCi0gICAg
ICAgICAgICAvLyBub3QgcGFpbnRpbmcgdGhlIGJhY2tncm91bmQgc2luY2UgdGhlIGNvbG9yIHdv
bid0IGJlIHZhbGlkKS4KLSAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUNvbG9yKQot
ICAgICAgICAgICAgICAgIGNvbCA9IFJlbmRlclN0eWxlOjppbml0aWFsQ29sb3IoKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29sID0gZ2V0Q29sb3JGcm9tUHJpbWl0aXZlVmFs
dWUocHJpbWl0aXZlVmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChpZCkgewot
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgICAgICAgICAgbV9z
dHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKGNvbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOgotICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Qm9yZGVyVG9wQ29sb3IoY29sKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcjoKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJv
cmRlclJpZ2h0Q29sb3IoY29sKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENT
U1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3I6Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3Jk
ZXJCb3R0b21Db2xvcihjb2wpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0Q29sb3I6Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJM
ZWZ0Q29sb3IoY29sKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Q29sb3I6Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2xvcihjb2wpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6Ci0gICAgICAg
ICAgICBtX3N0eWxlLT5zZXRPdXRsaW5lQ29sb3IoY29sKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yOgotICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZUNvbG9yKGNvbCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldFRleHRTdHJva2VDb2xvcihjb2wpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yOgotICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0VGV4dEZpbGxDb2xvcihjb2wpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0vLyB1cmkg
fHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6Ci0gICAgICAg
IEhBTkRMRV9CQUNLR1JPVU5EX1ZBTFVFKGltYWdlLCBJbWFnZSwgdmFsdWUpCi0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlOgotICAgICAgICBIQU5E
TEVfTUFTS19WQUxVRShpbWFnZSwgSW1hZ2UsIHZhbHVlKQotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOgotICAgIHsKLSAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUwobGlzdFN0eWxlSW1hZ2UsIExpc3RTdHlsZUltYWdlKQotICAgICAg
ICBtX3N0eWxlLT5zZXRMaXN0U3R5bGVJbWFnZShzdHlsZUltYWdlKHZhbHVlKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLS8vIGxlbmd0aAotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJU
b3BXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
ckxlZnRXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVdpZHRoOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlV2lkdGg6Ci0gICAgewotICAgICAgICBpZiAoaXNJ
bmhlcml0KSB7Ci0gICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5Qm9y
ZGVyVG9wV2lkdGgsIGJvcmRlclRvcFdpZHRoLCBCb3JkZXJUb3BXaWR0aCkKLSAgICAgICAgICAg
IEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCBib3JkZXJS
aWdodFdpZHRoLCBCb3JkZXJSaWdodFdpZHRoKQotICAgICAgICAgICAgSEFORExFX0lOSEVSSVRf
Q09ORChDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCBib3JkZXJCb3R0b21XaWR0aCwgQm9y
ZGVyQm90dG9tV2lkdGgpCi0gICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3Bl
cnR5Qm9yZGVyTGVmdFdpZHRoLCBib3JkZXJMZWZ0V2lkdGgsIEJvcmRlckxlZnRXaWR0aCkKLSAg
ICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGgsIG91
dGxpbmVXaWR0aCwgT3V0bGluZVdpZHRoKQotICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09O
RChDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVXaWR0aCwgY29sdW1uUnVsZVdpZHRoLCBDb2x1
bW5SdWxlV2lkdGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhf
VkFMVUUoQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgQm9yZGVyVG9wV2lkdGgsIEJvcmRlcldp
ZHRoKQotICAgICAgICAgICAgSEFORExFX0lOSVRJQUxfQ09ORF9XSVRIX1ZBTFVFKENTU1Byb3Bl
cnR5Qm9yZGVyUmlnaHRXaWR0aCwgQm9yZGVyUmlnaHRXaWR0aCwgQm9yZGVyV2lkdGgpCi0gICAg
ICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlCb3JkZXJC
b3R0b21XaWR0aCwgQm9yZGVyQm90dG9tV2lkdGgsIEJvcmRlcldpZHRoKQotICAgICAgICAgICAg
SEFORExFX0lOSVRJQUxfQ09ORF9XSVRIX1ZBTFVFKENTU1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRo
LCBCb3JkZXJMZWZ0V2lkdGgsIEJvcmRlcldpZHRoKQotICAgICAgICAgICAgSEFORExFX0lOSVRJ
QUxfQ09ORF9XSVRIX1ZBTFVFKENTU1Byb3BlcnR5T3V0bGluZVdpZHRoLCBPdXRsaW5lV2lkdGgs
IEJvcmRlcldpZHRoKQotICAgICAgICAgICAgSEFORExFX0lOSVRJQUxfQ09ORF9XSVRIX1ZBTFVF
KENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVdpZHRoLCBDb2x1bW5SdWxlV2lkdGgsIEJvcmRl
cldpZHRoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFw
cmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc2hvcnQgd2lkdGgg
PSAzOwotICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAg
ICAgIGNhc2UgQ1NTVmFsdWVUaGluOgotICAgICAgICAgICAgd2lkdGggPSAxOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVNZWRpdW06Ci0gICAgICAgICAgICB3aWR0
aCA9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVRoaWNrOgot
ICAgICAgICAgICAgd2lkdGggPSA1OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTVmFsdWVJbnZhbGlkOgotICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29t
cHV0ZUxlbmd0aFNob3J0KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCA8IDApIHJldHVybjsKLSAgICAgICAg
c3dpdGNoIChpZCkgewotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGg6Ci0g
ICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJUb3BXaWR0aCh3aWR0aCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGg6Ci0gICAg
ICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJSaWdodFdpZHRoKHdpZHRoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGg6Ci0gICAg
ICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJCb3R0b21XaWR0aCh3aWR0aCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aDoKLSAgICAg
ICAgICAgIG1fc3R5bGUtPnNldEJvcmRlckxlZnRXaWR0aCh3aWR0aCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVXaWR0aDoKLSAgICAgICAgICAg
IG1fc3R5bGUtPnNldE91dGxpbmVXaWR0aCh3aWR0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVXaWR0aDoKLSAgICAgICAgICAg
IG1fc3R5bGUtPnNldENvbHVtblJ1bGVXaWR0aCh3aWR0aCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTbW9vdGhp
bmc6IHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBpZiAoaXNJbmhlcml0KSAKLSAgICAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRGb250U21vb3RoaW5nKG1fcGFyZW50U3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpLmZvbnRTbW9vdGhpbmcoKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzSW5pdGlhbCkK
LSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGb250U21vb3RoaW5nKEF1dG9TbW9vdGhp
bmcpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaW50IGlkID0gcHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCk7Ci0gICAgICAgICAgICBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmc7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZUF1dG86Ci0gICAgICAgICAgICAgICAgICAgIHNtb290aGluZyA9IEF1dG9TbW9vdGhpbmc7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVO
b25lOgotICAgICAgICAgICAgICAgICAgICBzbW9vdGhpbmcgPSBOb1Ntb290aGluZzsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUFudGlh
bGlhc2VkOgotICAgICAgICAgICAgICAgICAgICBzbW9vdGhpbmcgPSBBbnRpYWxpYXNlZDsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVN1
YnBpeGVsQW50aWFsaWFzZWQ6Ci0gICAgICAgICAgICAgICAgICAgIHNtb290aGluZyA9IFN1YnBp
eGVsQW50aWFsaWFzZWQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgICAgICAgICBzbW9vdGhpbmcgPSBBdXRvU21vb3RoaW5nOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZvbnRTbW9vdGhpbmcoc21vb3Ro
aW5nKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9zdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9u
KGZvbnREZXNjcmlwdGlvbikpCi0gICAgICAgICAgICBtX2ZvbnREaXJ0eSA9IHRydWU7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5TGV0dGVyU3BhY2luZzoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V29yZFNwYWNpbmc6Ci0gICAgewotICAgICAgICAKLSAgICAg
ICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChDU1NQ
cm9wZXJ0eUxldHRlclNwYWNpbmcsIGxldHRlclNwYWNpbmcsIExldHRlclNwYWNpbmcpCi0gICAg
ICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5V29yZFNwYWNpbmcsIHdvcmRT
cGFjaW5nLCBXb3JkU3BhY2luZykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgIEhBTkRMRV9JTklUSUFMX0NP
TkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eUxldHRlclNwYWNpbmcsIExldHRlclNwYWNpbmcsIExl
dHRlcldvcmRTcGFjaW5nKQotICAgICAgICAgICAgSEFORExFX0lOSVRJQUxfQ09ORF9XSVRIX1ZB
TFVFKENTU1Byb3BlcnR5V29yZFNwYWNpbmcsIFdvcmRTcGFjaW5nLCBMZXR0ZXJXb3JkU3BhY2lu
ZykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaW50
IHdpZHRoID0gMDsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7Ci0gICAgICAgICAgICB3aWR0aCA9IDA7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUt
PmNvbXB1dGVMZW5ndGhJbnQoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB1c2VTVkdab29t
UnVsZXMgPyAxLjBmIDogem9vbUZhY3Rvcik7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChp
ZCkgewotICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGV0dGVyU3BhY2luZzoKLSAgICAgICAgICAg
IG1fc3R5bGUtPnNldExldHRlclNwYWNpbmcod2lkdGgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkU3BhY2luZzoKLSAgICAgICAgICAgIG1fc3R5bGUt
PnNldFdvcmRTcGFjaW5nKHdpZHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ly8gIyMjIG5lZWRzIHRoZSBkZWZpbml0aW9ucyBpbiByZW5kZXJzdHlsZQotICAgICAgICBkZWZh
dWx0OiBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdvcmRCcmVhazoKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJ
QUxfQU5EX1BSSU1JVElWRSh3b3JkQnJlYWssIFdvcmRCcmVhaykKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkV3JhcDoKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5E
X0lOSVRJQUxfQU5EX1BSSU1JVElWRSh3b3JkV3JhcCwgV29yZFdyYXApCi0gICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TmJzcE1vZGU6Ci0gICAgICAgIEhBTkRMRV9J
TkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkUobmJzcE1vZGUsIE5CU1BNb2RlKQotICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVCcmVhazoKLSAgICAg
ICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRShraHRtbExpbmVCcmVh
aywgS0hUTUxMaW5lQnJlYWspCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWF0Y2hOZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvcjoKLSAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRShtYXRjaE5lYXJlc3RNYWlsQmxvY2txdW90
ZUNvbG9yLCBNYXRjaE5lYXJlc3RNYWlsQmxvY2txdW90ZUNvbG9yKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5UmVzaXplOgotICAgIHsKLSAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUwocmVzaXplLCBSZXNpemUpCi0KLSAgICAgICAgaWYgKCFwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBFUmVz
aXplIHIgPSBSRVNJWkVfTk9ORTsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlQXV0bykgewotICAgICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5n
cyA9IG1fY2hlY2tlci5tX2RvY3VtZW50LT5zZXR0aW5ncygpKQotICAgICAgICAgICAgICAgIHIg
PSBzZXR0aW5ncy0+dGV4dEFyZWFzQXJlUmVzaXphYmxlKCkgPyBSRVNJWkVfQk9USCA6IFJFU0la
RV9OT05FOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHIgPSAqcHJpbWl0aXZlVmFsdWU7
Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9zdHlsZS0+c2V0UmVzaXplKHIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIC8vIGxlbmd0aCwgcGVyY2VudAotICAgIGNhc2UgQ1NT
UHJvcGVydHlNYXhXaWR0aDoKLSAgICAgICAgLy8gK25vbmUgK2luaGVyaXQKLSAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
Tm9uZSkKLSAgICAgICAgICAgIGFwcGx5ID0gdHJ1ZTsKLSAgICBjYXNlIENTU1Byb3BlcnR5VG9w
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlMZWZ0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlSaWdodDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5Qm90dG9tOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXaWR0aDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5TWluV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdp
blRvcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eU1hcmdpbkJvdHRvbToKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luTGVmdDoKLSAgICAg
ICAgLy8gK2luaGVyaXQgK2F1dG8KLSAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5V2lkdGgg
fHwgaWQgPT0gQ1NTUHJvcGVydHlNaW5XaWR0aCB8fCBpZCA9PSBDU1NQcm9wZXJ0eU1heFdpZHRo
KSB7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkgPT0gQ1NTVmFsdWVJbnRyaW5zaWMpIHsKLSAgICAgICAgICAgICAgICBsID0gTGVu
Z3RoKEludHJpbnNpYyk7Ci0gICAgICAgICAgICAgICAgYXBwbHkgPSB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVNaW5JbnRyaW5zaWMpIHsKLSAgICAgICAgICAgICAg
ICBsID0gTGVuZ3RoKE1pbkludHJpbnNpYyk7Ci0gICAgICAgICAgICAgICAgYXBwbHkgPSB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChpZCAhPSBDU1NQcm9wZXJ0
eU1heFdpZHRoICYmIHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgIGFwcGx5ID0gdHJ1ZTsKLSAgICBjYXNlIENT
U1Byb3BlcnR5UGFkZGluZ1RvcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0Ogot
ICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQ
YWRkaW5nTGVmdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEluZGVudDoKLSAgICAgICAgLy8g
K2luaGVyaXQKLSAgICB7Ci0gICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIEhB
TkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVydHlNYXhXaWR0aCwgbWF4V2lkdGgsIE1heFdpZHRo
KQotICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChDU1NQcm9wZXJ0eUJvdHRvbSwgYm90
dG9tLCBCb3R0b20pCi0gICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5
VG9wLCB0b3AsIFRvcCkKLSAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVy
dHlMZWZ0LCBsZWZ0LCBMZWZ0KQotICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChDU1NQ
cm9wZXJ0eVJpZ2h0LCByaWdodCwgUmlnaHQpCi0gICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9D
T05EKENTU1Byb3BlcnR5V2lkdGgsIHdpZHRoLCBXaWR0aCkKLSAgICAgICAgICAgIEhBTkRMRV9J
TkhFUklUX0NPTkQoQ1NTUHJvcGVydHlNaW5XaWR0aCwgbWluV2lkdGgsIE1pbldpZHRoKQotICAg
ICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsIHBhZGRp
bmdUb3AsIFBhZGRpbmdUb3ApCi0gICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1By
b3BlcnR5UGFkZGluZ1JpZ2h0LCBwYWRkaW5nUmlnaHQsIFBhZGRpbmdSaWdodCkKLSAgICAgICAg
ICAgIEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tLCBwYWRkaW5n
Qm90dG9tLCBQYWRkaW5nQm90dG9tKQotICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChD
U1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCBwYWRkaW5nTGVmdCwgUGFkZGluZ0xlZnQpCi0gICAgICAg
ICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5TWFyZ2luVG9wLCBtYXJnaW5Ub3As
IE1hcmdpblRvcCkKLSAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVydHlN
YXJnaW5SaWdodCwgbWFyZ2luUmlnaHQsIE1hcmdpblJpZ2h0KQotICAgICAgICAgICAgSEFORExF
X0lOSEVSSVRfQ09ORChDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgbWFyZ2luQm90dG9tLCBNYXJn
aW5Cb3R0b20pCi0gICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5TWFy
Z2luTGVmdCwgbWFyZ2luTGVmdCwgTWFyZ2luTGVmdCkKLSAgICAgICAgICAgIEhBTkRMRV9JTkhF
UklUX0NPTkQoQ1NTUHJvcGVydHlUZXh0SW5kZW50LCB0ZXh0SW5kZW50LCBUZXh0SW5kZW50KQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGlzSW5pdGlh
bCkgewotICAgICAgICAgICAgSEFORExFX0lOSVRJQUxfQ09ORF9XSVRIX1ZBTFVFKENTU1Byb3Bl
cnR5TWF4V2lkdGgsIE1heFdpZHRoLCBNYXhTaXplKQotICAgICAgICAgICAgSEFORExFX0lOSVRJ
QUxfQ09ORF9XSVRIX1ZBTFVFKENTU1Byb3BlcnR5Qm90dG9tLCBCb3R0b20sIE9mZnNldCkKLSAg
ICAgICAgICAgIEhBTkRMRV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eVRvcCwg
VG9wLCBPZmZzZXQpCi0gICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUo
Q1NTUHJvcGVydHlMZWZ0LCBMZWZ0LCBPZmZzZXQpCi0gICAgICAgICAgICBIQU5ETEVfSU5JVElB
TF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlSaWdodCwgUmlnaHQsIE9mZnNldCkKLSAgICAg
ICAgICAgIEhBTkRMRV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eVdpZHRoLCBX
aWR0aCwgU2l6ZSkKLSAgICAgICAgICAgIEhBTkRMRV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShD
U1NQcm9wZXJ0eU1pbldpZHRoLCBNaW5XaWR0aCwgTWluU2l6ZSkKLSAgICAgICAgICAgIEhBTkRM
RV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsIFBhZGRpbmdU
b3AsIFBhZGRpbmcpCi0gICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUo
Q1NTUHJvcGVydHlQYWRkaW5nUmlnaHQsIFBhZGRpbmdSaWdodCwgUGFkZGluZykKLSAgICAgICAg
ICAgIEhBTkRMRV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0
b20sIFBhZGRpbmdCb3R0b20sIFBhZGRpbmcpCi0gICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9D
T05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCwgUGFkZGluZ0xlZnQsIFBhZGRp
bmcpCi0gICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVy
dHlNYXJnaW5Ub3AsIE1hcmdpblRvcCwgTWFyZ2luKQotICAgICAgICAgICAgSEFORExFX0lOSVRJ
QUxfQ09ORF9XSVRIX1ZBTFVFKENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsIE1hcmdpblJpZ2h0LCBN
YXJnaW4pCi0gICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJv
cGVydHlNYXJnaW5Cb3R0b20sIE1hcmdpbkJvdHRvbSwgTWFyZ2luKQotICAgICAgICAgICAgSEFO
RExFX0lOSVRJQUxfQ09ORF9XSVRIX1ZBTFVFKENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgTWFyZ2lu
TGVmdCwgTWFyZ2luKQotICAgICAgICAgICAgSEFORExFX0lOSVRJQUxfQ09ORChDU1NQcm9wZXJ0
eVRleHRJbmRlbnQsIFRleHRJbmRlbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0g
Ci0KLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmICFhcHBseSkgewotICAgICAgICAgICAg
aW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpOwotICAgICAgICAgICAg
aWYgKENTU1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5cGUpKQotICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSBvdXIgcXVpcmt5IG1hcmdpbiB1bml0cyBpZiB3ZSBoYXZlIHRoZW0u
Ci0gICAgICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0
aEludEZvckxlbmd0aChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpLCBG
aXhlZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVWYWx1ZS0+aXNRdWly
a1ZhbHVlKCkpOwotICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0UpCi0gICAgICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVW
YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYXBwbHkgPSB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIGlmICghYXBwbHkpIHJldHVybjsKLSAgICAgICAgc3dpdGNoIChpZCkgewotICAg
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1heFdpZHRoOgotICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldE1heFdpZHRoKGwpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvdHRvbToKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3R0
b20obCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5VG9wOgotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFRvcChsKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMZWZ0OgotICAgICAgICAg
ICAgICAgIG1fc3R5bGUtPnNldExlZnQobCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5UmlnaHQ6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0UmlnaHQobCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V2lkdGg6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0V2lkdGgobCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWluV2lk
dGg6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWluV2lkdGgobCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1RvcDoKLSAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRQYWRkaW5nVG9wKGwpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodDoKLSAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRQYWRkaW5nUmlnaHQobCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0JvdHRvbToKLSAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRQYWRkaW5nQm90dG9tKGwpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0OgotICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldFBhZGRpbmdMZWZ0KGwpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpblRvcDoKLSAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRNYXJnaW5Ub3AobCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQ6Ci0gICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0TWFyZ2luUmlnaHQobCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luQm90dG9tOgotICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldE1hcmdpbkJvdHRvbShsKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5MZWZ0OgotICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldE1hcmdpbkxlZnQobCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dEluZGVudDoKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRUZXh0SW5kZW50KGwpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhIZWlnaHQ6Ci0gICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZU5vbmUpIHsKLSAgICAgICAgICAgIGwgPSBMZW5ndGgodW5kZWZpbmVkTGVuZ3RoLCBGaXhlZCk7
Ci0gICAgICAgICAgICBhcHBseSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICBjYXNlIENTU1Byb3Bl
cnR5SGVpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5IZWlnaHQ6Ci0gICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUlu
dHJpbnNpYykgewotICAgICAgICAgICAgbCA9IExlbmd0aChJbnRyaW5zaWMpOwotICAgICAgICAg
ICAgYXBwbHkgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTWluSW50cmluc2ljKSB7Ci0gICAg
ICAgICAgICBsID0gTGVuZ3RoKE1pbkludHJpbnNpYyk7Ci0gICAgICAgICAgICBhcHBseSA9IHRy
dWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoaWQgIT0gQ1NTUHJvcGVydHlNYXhIZWlnaHQgJiYgcHJp
bWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRv
KQotICAgICAgICAgICAgYXBwbHkgPSB0cnVlOwotICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0g
ICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5TWF4SGVpZ2h0LCBtYXhI
ZWlnaHQsIE1heEhlaWdodCkKLSAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJv
cGVydHlIZWlnaHQsIGhlaWdodCwgSGVpZ2h0KQotICAgICAgICAgICAgSEFORExFX0lOSEVSSVRf
Q09ORChDU1NQcm9wZXJ0eU1pbkhlaWdodCwgbWluSGVpZ2h0LCBNaW5IZWlnaHQpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAg
ICAgICAgSEFORExFX0lOSVRJQUxfQ09ORF9XSVRIX1ZBTFVFKENTU1Byb3BlcnR5TWF4SGVpZ2h0
LCBNYXhIZWlnaHQsIE1heFNpemUpCi0gICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJ
VEhfVkFMVUUoQ1NTUHJvcGVydHlIZWlnaHQsIEhlaWdodCwgU2l6ZSkKLSAgICAgICAgICAgIEhB
TkRMRV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eU1pbkhlaWdodCwgTWluSGVp
Z2h0LCBNaW5TaXplKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlICYmICFhcHBseSkgewotICAgICAgICAgICAgdW5zaWduZWQgc2hv
cnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgICAgICAgICBp
ZiAoQ1NTUHJpbWl0aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgodHlwZSkpCi0gICAgICAgICAg
ICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0
aChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCk7Ci0gICAg
ICAgICAgICBlbHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFH
RSkKLSAgICAgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVW
YWx1ZSgpLCBQZXJjZW50KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBhcHBseSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGFw
cGx5KQotICAgICAgICAgICAgc3dpdGNoIChpZCkgewotICAgICAgICAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlNYXhIZWlnaHQ6Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1heEhl
aWdodChsKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUhlaWdodDoKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0SGVp
Z2h0KGwpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
IENTU1Byb3BlcnR5TWluSGVpZ2h0OgotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRN
aW5IZWlnaHQobCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5VmVydGljYWxBbGlnbjoKLSAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodmVydGljYWxBbGlnbiwgVmVydGljYWxB
bGlnbikKLSAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgICAgRVZl
cnRpY2FsQWxpZ24gYWxpZ247Ci0KLSAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVRvcDoKLSAgICAgICAg
ICAgICAgICAgICAgYWxpZ24gPSBUT1A7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVCb3R0b206Ci0gICAgICAgICAgICAgICAgICAgIGFsaWduID0gQk9UVE9NOyBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTWlkZGxlOgotICAgICAgICAgICAgICAgICAg
ICBhbGlnbiA9IE1JRERMRTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUJh
c2VsaW5lOgotICAgICAgICAgICAgICAgICAgICBhbGlnbiA9IEJBU0VMSU5FOyBicmVhazsKLSAg
ICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlVGV4dEJvdHRvbToKLSAgICAgICAgICAgICAgICAg
ICAgYWxpZ24gPSBURVhUX0JPVFRPTTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZVRleHRUb3A6Ci0gICAgICAgICAgICAgICAgICAgIGFsaWduID0gVEVYVF9UT1A7IGJyZWFr
OwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTdWI6Ci0gICAgICAgICAgICAgICAgICAg
IGFsaWduID0gU1VCOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU3VwZXI6
Ci0gICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1VQRVI7IGJyZWFrOwotICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRCYXNlbGluZU1pZGRsZToKLSAgICAgICAgICAgICAgICAg
ICAgYWxpZ24gPSBCQVNFTElORV9NSURETEU7IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICBtX3N0eWxlLT5zZXRWZXJ0aWNhbEFsaWduKGFsaWduKTsKLSAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJp
bWl0aXZlVHlwZSgpOwotICAgICAgICAgIExlbmd0aCBsOwotICAgICAgICAgIGlmIChDU1NQcmlt
aXRpdmVWYWx1ZTo6aXNVbml0VHlwZUxlbmd0aCh0eXBlKSkKLSAgICAgICAgICAgIGwgPSBMZW5n
dGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgbV9y
b290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSwgRml4ZWQpOwotICAgICAgICAgIGVsc2UgaWYg
KHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQotICAgICAgICAgICAg
bCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7Ci0K
LSAgICAgICAgICBtX3N0eWxlLT5zZXRWZXJ0aWNhbEFsaWduKExFTkdUSCk7Ci0gICAgICAgICAg
bV9zdHlsZS0+c2V0VmVydGljYWxBbGlnbkxlbmd0aChsKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFNpemU6Ci0gICAgewotICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9u
KCk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZSgwKTsKLSAgICAgICAg
ZmxvYXQgb2xkU2l6ZSA9IDA7Ci0gICAgICAgIGZsb2F0IHNpemUgPSAwOwotICAgICAgICAKLSAg
ICAgICAgYm9vbCBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IGZhbHNlOwotICAgICAgICBpZiAobV9w
YXJlbnROb2RlKSB7Ci0gICAgICAgICAgICBvbGRTaXplID0gbV9wYXJlbnRTdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOwotICAgICAgICAgICAgcGFyZW50SXNBYnNvbHV0
ZVNpemUgPSBtX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5pc0Fic29sdXRlU2l6ZSgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgc2l6
ZSA9IG9sZFNpemU7Ci0gICAgICAgICAgICBpZiAobV9wYXJlbnROb2RlKQotICAgICAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShtX3BhcmVudFN0eWxlLT5mb250RGVz
Y3JpcHRpb24oKS5rZXl3b3JkU2l6ZSgpKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0luaXRpYWwp
IHsKLSAgICAgICAgICAgIHNpemUgPSBmb250U2l6ZUZvcktleXdvcmQobV9jaGVja2VyLm1fZG9j
dW1lbnQsIENTU1ZhbHVlTWVkaXVtLCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6
ZSgpKTsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1
ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgICAgICAvLyBLZXl3b3JkcyBhcmUgYmVp
bmcgdXNlZC4KLSAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkp
IHsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlWHhTbWFsbDoKLSAgICAgICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlWFNtYWxsOgotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFs
bDoKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTWVkaXVtOgotICAgICAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVMYXJnZToKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlWExhcmdl
OgotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYeExhcmdlOgotICAgICAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVXZWJraXRYeHhMYXJnZToKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9
IGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIubV9kb2N1bWVudCwgcHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCksIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpOwotICAg
ICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlcjoKLSAgICAg
ICAgICAgICAgICAgICAgc2l6ZSA9IGxhcmdlckZvbnRTaXplKG9sZFNpemUsIG1fc3R5bGUtPmh0
bWxIYWNrcygpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBDU1NWYWx1ZVNtYWxsZXI6Ci0gICAgICAgICAgICAgICAgICAgIHNpemUgPSBzbWFsbGVy
Rm9udFNpemUob2xkU2l6ZSwgbV9zdHlsZS0+aHRtbEhhY2tzKCkpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSAmJiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVMYXJnZXIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVTbWFs
bGVyKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQgdHlwZSA9IHByaW1pdGl2
ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0ZVNpemUgfHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BFUkNFTlRBR0UgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyAmJiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAhPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0VYUyAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkVNUykpOwotICAgICAg
ICAgICAgaWYgKENTU1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5cGUpKQotICAg
ICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEZsb2F0KG1f
cGFyZW50U3R5bGUsIG1fcm9vdEVsZW1lbnRTdHlsZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBlbHNl
IGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKLSAgICAgICAg
ICAgICAgICBzaXplID0gKHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkgKiBvbGRTaXpl
KSAvIDEwMC4wZjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoc2l6ZSA8IDApCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAgICAgaWYg
KG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKQotICAgICAgICAg
ICAgbV9mb250RGlydHkgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVpJbmRleDogewotICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAg
ICAgICBpZiAobV9wYXJlbnRTdHlsZS0+aGFzQXV0b1pJbmRleCgpKQotICAgICAgICAgICAgICAg
IG1fc3R5bGUtPnNldEhhc0F1dG9aSW5kZXgoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRaSW5kZXgobV9wYXJlbnRTdHlsZS0+ekluZGV4KCkpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCB8fCBwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pIHsKLSAgICAgICAgICAgIG1fc3R5
bGUtPnNldEhhc0F1dG9aSW5kZXgoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFNob3VsZCBjbGFtcCBhbGwgc29ydHMgb2Ygb3Ro
ZXIgaW50ZWdlciBwcm9wZXJ0aWVzIHRvby4KLSAgICAgICAgY29uc3QgZG91YmxlIG1pbkludEFz
RG91YmxlID0gSU5UX01JTjsKLSAgICAgICAgY29uc3QgZG91YmxlIG1heEludEFzRG91YmxlID0g
SU5UX01BWDsKLSAgICAgICAgbV9zdHlsZS0+c2V0WkluZGV4KHN0YXRpY19jYXN0PGludD4obWF4
KG1pbkludEFzRG91YmxlLCBtaW4ocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIG1h
eEludEFzRG91YmxlKSkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1By
b3BlcnR5V2lkb3dzOgotICAgIHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwo
d2lkb3dzLCBXaWRvd3MpCi0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUgfHwgcHJpbWl0aXZl
VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0V2lkb3dzKHByaW1pdGl2
ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAg
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU9ycGhhbnM6Ci0gICAgewotICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChvcnBoYW5zLCBPcnBoYW5zKQotICAgICAgICBpZiAoIXByaW1pdGl2
ZVZhbHVlIHx8IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgIT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUt
PnNldE9ycGhhbnMocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfSAgICAgICAgCi0KLS8vIGxlbmd0aCwgcGVyY2VudCwgbnVtYmVyCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6Ci0gICAgewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9B
TkRfSU5JVElBTChsaW5lSGVpZ2h0LCBMaW5lSGVpZ2h0KQotICAgICAgICBpZiAoIXByaW1pdGl2
ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBMZW5ndGggbGluZUhlaWdodDsK
LSAgICAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpOwotICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3JtYWwpCi0g
ICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKC0xMDAuMCwgUGVyY2VudCk7Ci0gICAgICAg
IGVsc2UgaWYgKENTU1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5cGUpKSB7Ci0g
ICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IHpvb21GYWN0b3I7Ci0gICAgICAgICAgICBp
ZiAobV9zdHlsZS0+dGV4dFNpemVBZGp1c3QoKSkgewotICAgICAgICAgICAgICAgIGlmIChGcmFt
ZVZpZXcqIHZpZXcgPSBtX2NoZWNrZXIubV9kb2N1bWVudC0+dmlldygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICh2aWV3LT5zaG91bGRBcHBseVRleHRab29tKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtdWx0aXBsaWVyICo9IHZpZXctPnRleHRab29tRmFjdG9yKCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0
aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChzdHlsZSgpLCBtX3Jv
b3RFbGVtZW50U3R5bGUsICBtdWx0aXBsaWVyKSwgRml4ZWQpOwotICAgICAgICB9IGVsc2UgaWYg
KHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQotICAgICAgICAgICAg
bGluZUhlaWdodCA9IExlbmd0aCgobV9zdHlsZS0+Zm9udFNpemUoKSAqIHByaW1pdGl2ZVZhbHVl
LT5nZXRJbnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQpOwotICAgICAgICBlbHNlIGlmICh0eXBlID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKQotICAgICAgICAgICAgbGluZUhlaWdodCA9
IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSAqIDEwMC4wLCBQZXJjZW50
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5z
ZXRMaW5lSGVpZ2h0KGxpbmVIZWlnaHQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0vLyBz
dHJpbmcKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEFsaWduOgotICAgIHsKLSAgICAgICAgSEFO
RExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodGV4dEFsaWduLCBUZXh0QWxpZ24pCi0gICAgICAgIGlm
ICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGludCBpZCA9
IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpOwotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVT
dGFydCkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFRleHRBbGlnbihtX3N0eWxlLT5kaXJlY3Rp
b24oKSA9PSBMVFIgPyBMRUZUIDogUklHSFQpOwotICAgICAgICBlbHNlIGlmIChpZCA9PSBDU1NW
YWx1ZUVuZCkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFRleHRBbGlnbihtX3N0eWxlLT5kaXJl
Y3Rpb24oKSA9PSBMVFIgPyBSSUdIVCA6IExFRlQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtX3N0eWxlLT5zZXRUZXh0QWxpZ24oKnByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotLy8gcmVjdAotICAgIGNhc2UgQ1NTUHJvcGVydHlDbGlwOgotICAgIHsKLSAg
ICAgICAgTGVuZ3RoIHRvcDsKLSAgICAgICAgTGVuZ3RoIHJpZ2h0OwotICAgICAgICBMZW5ndGgg
Ym90dG9tOwotICAgICAgICBMZW5ndGggbGVmdDsKLSAgICAgICAgYm9vbCBoYXNDbGlwID0gdHJ1
ZTsKLSAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgaWYgKG1fcGFyZW50U3R5
bGUtPmhhc0NsaXAoKSkgewotICAgICAgICAgICAgICAgIHRvcCA9IG1fcGFyZW50U3R5bGUtPmNs
aXBUb3AoKTsKLSAgICAgICAgICAgICAgICByaWdodCA9IG1fcGFyZW50U3R5bGUtPmNsaXBSaWdo
dCgpOwotICAgICAgICAgICAgICAgIGJvdHRvbSA9IG1fcGFyZW50U3R5bGUtPmNsaXBCb3R0b20o
KTsKLSAgICAgICAgICAgICAgICBsZWZ0ID0gbV9wYXJlbnRTdHlsZS0+Y2xpcExlZnQoKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaGFzQ2xpcCA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgIHRvcCA9IHJpZ2h0ID0gYm90dG9tID0gbGVmdCA9IExlbmd0aCgpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAg
aGFzQ2xpcCA9IGZhbHNlOwotICAgICAgICAgICAgdG9wID0gcmlnaHQgPSBib3R0b20gPSBsZWZ0
ID0gTGVuZ3RoKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXByaW1pdGl2ZVZhbHVlKSB7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1p
dGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JFQ1QpIHsKLSAgICAgICAgICAg
IFJlY3QqIHJlY3QgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UmVjdFZhbHVlKCk7Ci0gICAgICAgICAg
ICBpZiAoIXJlY3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgdG9wID0g
Y29udmVydFRvTGVuZ3RoKHJlY3QtPnRvcCgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUs
IHpvb21GYWN0b3IpOwotICAgICAgICAgICAgcmlnaHQgPSBjb252ZXJ0VG9MZW5ndGgocmVjdC0+
cmlnaHQoKSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAg
ICAgICAgIGJvdHRvbSA9IGNvbnZlcnRUb0xlbmd0aChyZWN0LT5ib3R0b20oKSwgc3R5bGUoKSwg
bV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGxlZnQgPSBjb252
ZXJ0VG9MZW5ndGgocmVjdC0+bGVmdCgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpv
b21GYWN0b3IpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ICE9IENTU1ZhbHVlQXV0bykgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIG1fc3R5bGUtPnNldENsaXAodG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKLSAgICAgICAg
bV9zdHlsZS0+c2V0SGFzQ2xpcChoYXNDbGlwKTsKLSAgICAKLSAgICAgICAgLy8gcmVjdCwgaWRl
bnQKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotLy8gbGlzdHMKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Q29udGVudDoKLSAgICAgICAgLy8gbGlzdCBvZiBzdHJpbmcsIHVyaSwgY291bnRlciwgYXR0
ciwgaQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEluIENTUzMsIGl0IHdpbGwgYmUgcG9zc2li
bGUgdG8gaW5oZXJpdCBjb250ZW50LiAgSW4gQ1NTMiBpdCBpcyBub3QuICBUaGlzCi0gICAgICAg
IC8vIG5vdGUgaXMgYSByZW1pbmRlciB0aGF0IGV2ZW50dWFsbHkgImluaGVyaXQiIG5lZWRzIHRv
IGJlIHN1cHBvcnRlZC4KLQotICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBt
X3N0eWxlLT5jbGVhckNvbnRlbnQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NW
YWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgIGludCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKLQot
ICAgICAgICBib29sIGRpZFNldCA9IGZhbHNlOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soaSk7Ci0gICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRv
clZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KHN0YXRpY19j
YXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihpdGVtKS0+Z2VuZXJhdGVkSW1hZ2UoKSwgZGlk
U2V0KTsKLSAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHZhbCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7
Ci0gICAgICAgICAgICBzd2l0Y2ggKHZhbC0+cHJpbWl0aXZlVHlwZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORzoKLSAgICAgICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0Q29udGVudCh2YWwtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBk
aWRTZXQpOwotICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfQVRUUjogewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ2FuIGEgbmFtZXNwYWNl
IGJlIHNwZWNpZmllZCBmb3IgYW4gYXR0cihmb28pPwotICAgICAgICAgICAgICAgICAgICBpZiAo
bV9zdHlsZS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRVbmlxdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9wYXJlbnRTdHlsZS0+c2V0VW5pcXVlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cihudWxsQXRvbSwgdmFsLT5nZXRTdHJpbmdWYWx1
ZSgpLmltcGwoKSwgbnVsbEF0b20pOwotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRD
b250ZW50KG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHIpLmltcGwoKSwgZGlkU2V0KTsKLSAg
ICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgLy8g
cmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGFmZmVjdHMgdGhlIHN0
eWxlCi0gICAgICAgICAgICAgICAgICAgIG1fc2VsZWN0b3JBdHRycy5hZGQoYXR0ci5sb2NhbE5h
bWUoKS5pbXBsKCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSTogewot
ICAgICAgICAgICAgICAgICAgICBDU1NJbWFnZVZhbHVlKiBpbWFnZSA9IHN0YXRpY19jYXN0PENT
U0ltYWdlVmFsdWUqPih2YWwpOwotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250
ZW50KGltYWdlLT5jYWNoZWRJbWFnZShtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRvY0xvYWRlcigp
KSwgZGlkU2V0KTsKLSAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNh
c2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DT1VOVEVSOiB7Ci0gICAgICAgICAgICAgICAgICAg
IENvdW50ZXIqIGNvdW50ZXJWYWx1ZSA9IHZhbC0+Z2V0Q291bnRlclZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIENvdW50ZXJDb250ZW50KiBjb3VudGVyID0gbmV3IENvdW50ZXJDb250ZW50
KGNvdW50ZXJWYWx1ZS0+aWRlbnRpZmllcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgKEVM
aXN0U3R5bGVUeXBlKWNvdW50ZXJWYWx1ZS0+bGlzdFN0eWxlTnVtYmVyKCksIGNvdW50ZXJWYWx1
ZS0+c2VwYXJhdG9yKCkpOwotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50
KGNvdW50ZXIsIGRpZFNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICgh
ZGlkU2V0KQotICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJDb250ZW50KCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Q291bnRlckluY3JlbWVudDoKLSAg
ICAgICAgYXBwbHlDb3VudGVyTGlzdChzdHlsZSgpLCB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSA/IHN0
YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKSA6IDAsIGZhbHNlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlDb3VudGVyUmVzZXQ6Ci0gICAgICAgIGFwcGx5Q291
bnRlckxpc3Qoc3R5bGUoKSwgdmFsdWUtPmlzVmFsdWVMaXN0KCkgPyBzdGF0aWNfY2FzdDxDU1NW
YWx1ZUxpc3QqPih2YWx1ZSkgOiAwLCB0cnVlKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6IHsKLSAgICAgICAgLy8gbGlzdCBvZiBzdHJpbmdzIGFu
ZCBpZHMKLSAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0
aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IG1fcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpOwotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdl
bmVyaWNGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSk7Ci0gICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5m
aXJzdEZhbWlseSgpKTsKLSAgICAgICAgICAgIGlmIChtX3N0eWxlLT5zZXRGb250RGVzY3JpcHRp
b24oZm9udERlc2NyaXB0aW9uKSkKLSAgICAgICAgICAgICAgICBtX2ZvbnREaXJ0eSA9IHRydWU7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7Ci0g
ICAgICAgICAgICBGb250RGVzY3JpcHRpb24gaW5pdGlhbERlc2MgPSBGb250RGVzY3JpcHRpb24o
KTsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxl
LT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRo
ZSBzaXplIHRvIGFjY291bnQgZm9yIHRoZSBnZW5lcmljIGZhbWlseSBjaGFuZ2UgZnJvbSBtb25v
c3BhY2UKLSAgICAgICAgICAgIC8vIHRvIG5vbi1tb25vc3BhY2UuCi0gICAgICAgICAgICBpZiAo
Zm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVk
RGVmYXVsdFNpemUoKSkKLSAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRp
b24sIGZvbnRTaXplRm9yS2V5d29yZChtX2NoZWNrZXIubV9kb2N1bWVudCwgQ1NTVmFsdWVYeFNt
YWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOwotICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoaW5pdGlhbERlc2MuZ2VuZXJp
Y0ZhbWlseSgpKTsKLSAgICAgICAgICAgIGlmICghaW5pdGlhbERlc2MuZmlyc3RGYW1pbHkoKS5m
YW1pbHlJc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWls
eShpbml0aWFsRGVzYy5maXJzdEZhbWlseSgpKTsKLSAgICAgICAgICAgIGlmIChtX3N0eWxlLT5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSkKLSAgICAgICAgICAgICAgICBtX2Zv
bnREaXJ0eSA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250
RGVzY3JpcHRpb24oKTsKLSAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8
Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwotICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7
Ci0gICAgICAgIEZvbnRGYW1pbHkmIGZpcnN0RmFtaWx5ID0gZm9udERlc2NyaXB0aW9uLmZpcnN0
RmFtaWx5KCk7Ci0gICAgICAgIEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkgPSAwOwotICAgICAgICAK
LSAgICAgICAgLy8gQmVmb3JlIG1hcHBpbmcgaW4gYSBuZXcgZm9udC1mYW1pbHkgcHJvcGVydHks
IHdlIHNob3VsZCByZXNldCB0aGUgZ2VuZXJpYyBmYW1pbHkuCi0gICAgICAgIGJvb2wgb2xkRmFt
aWx5VXNlZEZpeGVkRGVmYXVsdFNpemUgPSBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0
U2l6ZSgpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVz
Y3JpcHRpb246Ok5vRmFtaWx5KTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsg
aSsrKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soaSk7Ci0gICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiB2YWwgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwotICAgICAgICAg
ICAgQXRvbWljU3RyaW5nIGZhY2U7Ci0gICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBt
X2NoZWNrZXIubV9kb2N1bWVudC0+c2V0dGluZ3MoKTsKLSAgICAgICAgICAgIGlmICh2YWwtPnBy
aW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKLSAgICAgICAg
ICAgICAgICBmYWNlID0gc3RhdGljX2Nhc3Q8Rm9udEZhbWlseVZhbHVlKj4odmFsKS0+ZmFtaWx5
TmFtZSgpOwotICAgICAgICAgICAgZWxzZSBpZiAodmFsLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCAmJiBzZXR0aW5ncykgewotICAgICAgICAgICAgICAg
IHN3aXRjaCAodmFsLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVXZWJraXRCb2R5OgotICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSA9IHNldHRpbmdz
LT5zdGFuZGFyZEZvbnRGYW1pbHkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2VyaWY6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmYWNlID0gIi13ZWJraXQtc2VyaWYiOwotICAgICAgICAgICAgICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTZXJpZkZh
bWlseSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBDU1NWYWx1ZVNhbnNTZXJpZjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhY2Ug
PSAiLXdlYmtpdC1zYW5zLXNlcmlmIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlQ3Vyc2l2ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSAiLXdl
YmtpdC1jdXJzaXZlIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Q3Vyc2l2ZUZhbWlseSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZUZhbnRhc3k6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gIi13ZWJraXQtZmFudGFz
eSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0Zh
bWlseShGb250RGVzY3JpcHRpb246OkZhbnRhc3lGYW1pbHkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVNb25vc3BhY2U6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gIi13ZWJraXQtbW9ub3NwYWNlIjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZv
bnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKCFmYWNlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGlmICghY3VyckZhbWlseSkg
ewotICAgICAgICAgICAgICAgICAgICAvLyBGaWxsaW5nIGluIHRoZSBmaXJzdCBmYW1pbHkuCi0g
ICAgICAgICAgICAgICAgICAgIGZpcnN0RmFtaWx5LnNldEZhbWlseShmYWNlKTsKLSAgICAgICAg
ICAgICAgICAgICAgZmlyc3RGYW1pbHkuYXBwZW5kRmFtaWx5KDApOyAvLyBSZW1vdmUgYW55IGlu
aGVyaXRlZCBmYW1pbHktZmFsbGJhY2sgbGlzdC4KLSAgICAgICAgICAgICAgICAgICAgY3VyckZh
bWlseSA9ICZmaXJzdEZhbWlseTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gbmV3RmFtaWx5ID0gU2hhcmVkRm9u
dEZhbWlseTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0ZhbWlseS0+c2V0RmFt
aWx5KGZhY2UpOwotICAgICAgICAgICAgICAgICAgICBjdXJyRmFtaWx5LT5hcHBlbmRGYW1pbHko
bmV3RmFtaWx5KTsKLSAgICAgICAgICAgICAgICAgICAgY3VyckZhbWlseSA9IG5ld0ZhbWlseS5n
ZXQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBXZSBjYW4ndCBjYWxsIHVzZUZpeGVkRGVmYXVsdFNpemUoKSB1bnRpbCBhbGwgbmV3
IGZvbnQgZmFtaWxpZXMgaGF2ZSBiZWVuIGFkZGVkCi0gICAgICAgIC8vIElmIGN1cnJGYW1pbHkg
aXMgbm9uLXplcm8gdGhlbiB3ZSBzZXQgYXQgbGVhc3Qgb25lIGZhbWlseSBvbiB0aGlzIGRlc2Ny
aXB0aW9uLgotICAgICAgICBpZiAoY3VyckZhbWlseSkgewotICAgICAgICAgICAgaWYgKGZvbnRE
ZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1
bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpCi0gICAgICAgICAgICAg
ICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQobV9jaGVj
a2VyLm1fZG9jdW1lbnQsIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3Jk
U2l6ZSgpIC0gMSwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7Ci0KLSAgICAgICAg
ICAgIGlmIChtX3N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSkKLSAg
ICAgICAgICAgICAgICBtX2ZvbnREaXJ0eSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb246IHsKLSAgICAg
ICAgLy8gbGlzdCBvZiBpZGVudAotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0
ZXh0RGVjb3JhdGlvbiwgVGV4dERlY29yYXRpb24pCi0gICAgICAgIGludCB0ID0gUmVuZGVyU3R5
bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvbigpOwotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUg
JiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAg
ICAgICAvLyBkbyBub3RoaW5nCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXZh
bHVlLT5pc1ZhbHVlTGlzdCgpKSByZXR1cm47Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3QgKmxp
c3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgICAgICBpbnQg
bGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxl
bjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENTU1ZhbHVlICppdGVtID0g
bGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWl0
ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkgY29udGludWU7Ci0gICAgICAgICAgICAgICAgcHJpbWl0
aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwotICAgICAg
ICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
ID0gVEROT05FOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVVuZGVy
bGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHQgfD0gVU5ERVJMSU5FOyBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU92ZXJsaW5lOgotICAgICAgICAgICAgICAg
ICAgICAgICAgdCB8PSBPVkVSTElORTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVMaW5lVGhyb3VnaDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHQgfD0gTElORV9U
SFJPVUdIOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUJsaW5rOgot
ICAgICAgICAgICAgICAgICAgICAgICAgdCB8PSBCTElOSzsgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbV9zdHlsZS0+
c2V0VGV4dERlY29yYXRpb24odCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYXNl
IENTU1Byb3BlcnR5Wm9vbToKLSAgICB7Ci0gICAgICAgIC8vIFJlc2V0IHRoZSB6b29tIGluIGVm
ZmVjdCBiZWZvcmUgd2UgZG8gYW55dGhpbmcuICBUaGlzIGFsbG93cyB0aGUgc2V0Wm9vbSBtZXRo
b2QgdG8gYWNjdXJhdGVseSBjb21wdXRlIGEgbmV3Ci0gICAgICAgIC8vIHpvb20gaW4gZWZmZWN0
LgotICAgICAgICBtX3N0eWxlLT5zZXRFZmZlY3RpdmVab29tKG1fcGFyZW50U3R5bGUgPyBtX3Bh
cmVudFN0eWxlLT5lZmZlY3RpdmVab29tKCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7
Ci0gICAgICAgIAotICAgICAgICAvLyBOb3cgd2UgY2FuIGhhbmRsZSBpbmhlcml0IGFuZCBpbml0
aWFsLgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh6b29tLCBab29tKQotICAg
ICAgICAKLSAgICAgICAgLy8gSGFuZGxlIG5vcm1hbC9yZXNldCwgbnVtYmVycyBhbmQgcGVyY2Vu
dGFnZXMuCi0gICAgICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUo
KTsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9y
bWFsKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpv
b20oKSk7Ci0gICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENT
U1ZhbHVlUmVzZXQpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEVmZmVjdGl2ZVpvb20oUmVu
ZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Wm9vbShS
ZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVEb2N1bWVudCkgewotICAgICAgICAgICAgZmxv
YXQgZG9jWm9vbSA9IG1fY2hlY2tlci5tX2RvY3VtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT56
b29tKCk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRFZmZlY3RpdmVab29tKGRvY1pvb20pOwot
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0Wm9vbShkb2Nab29tKTsKLSAgICAgICAgfSBlbHNlIGlm
ICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkgewotICAgICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpCi0gICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0Wm9vbShwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpIC8gMTAwLjBm
KTsKLSAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKSB7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkK
LSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRab29tKHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9h
dFZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2ZvbnREaXJ0eSA9IHRy
dWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0vLyBzaG9ydGhhbmQgcHJvcGVydGllcwotICAg
IGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgotICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0g
ICAgICAgICAgICBtX3N0eWxlLT5jbGVhckJhY2tncm91bmRMYXllcnMoKTsKLSAgICAgICAgICAg
IG1fc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihDb2xvcigpKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRCYWNr
Z3JvdW5kTGF5ZXJzKCptX3BhcmVudFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOwotICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKG1fcGFyZW50U3R5bGUtPmJhY2tncm91
bmRDb2xvcigpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2s6Ci0gICAgICAgIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBtX3N0
eWxlLT5jbGVhck1hc2tMYXllcnMoKTsKLSAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQotICAg
ICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdE1hc2tMYXllcnMoKm1fcGFyZW50U3R5bGUtPm1hc2tM
YXllcnMoKSk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXI6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQ29sb3I6Ci0gICAgICAgIGlm
IChpZCA9PSBDU1NQcm9wZXJ0eUJvcmRlciB8fCBpZCA9PSBDU1NQcm9wZXJ0eUJvcmRlckNvbG9y
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0Qm9yZGVyVG9wQ29sb3IobV9wYXJlbnRTdHlsZS0+Ym9yZGVyVG9wQ29s
b3IoKS5pc1ZhbGlkKCkgPyBtX3BhcmVudFN0eWxlLT5ib3JkZXJUb3BDb2xvcigpIDogbV9wYXJl
bnRTdHlsZS0+Y29sb3IoKSk7Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyQm90
dG9tQ29sb3IobV9wYXJlbnRTdHlsZS0+Ym9yZGVyQm90dG9tQ29sb3IoKS5pc1ZhbGlkKCkgPyBt
X3BhcmVudFN0eWxlLT5ib3JkZXJCb3R0b21Db2xvcigpIDogbV9wYXJlbnRTdHlsZS0+Y29sb3Io
KSk7Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyTGVmdENvbG9yKG1fcGFyZW50
U3R5bGUtPmJvcmRlckxlZnRDb2xvcigpLmlzVmFsaWQoKSA/IG1fcGFyZW50U3R5bGUtPmJvcmRl
ckxlZnRDb2xvcigpIDogbV9wYXJlbnRTdHlsZS0+Y29sb3IoKSk7Ci0gICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0Qm9yZGVyUmlnaHRDb2xvcihtX3BhcmVudFN0eWxlLT5ib3JkZXJSaWdodENv
bG9yKCkuaXNWYWxpZCgpID8gbV9wYXJlbnRTdHlsZS0+Ym9yZGVyUmlnaHRDb2xvcigpOiBtX3Bh
cmVudFN0eWxlLT5jb2xvcigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYg
KGlzSW5pdGlhbCkgewotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclRvcENvbG9y
KENvbG9yKCkpOyAvLyBSZXNldCB0byBpbnZhbGlkIGNvbG9yIHNvIGN1cnJlbnRDb2xvciBpcyB1
c2VkIGluc3RlYWQuCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyQm90dG9tQ29s
b3IoQ29sb3IoKSk7Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyTGVmdENvbG9y
KENvbG9yKCkpOwotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclJpZ2h0Q29sb3Io
Q29sb3IoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlkID09IENT
U1Byb3BlcnR5Qm9yZGVyIHx8IGlkID09IENTU1Byb3BlcnR5Qm9yZGVyU3R5bGUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRCb3JkZXJUb3BTdHlsZShtX3BhcmVudFN0eWxlLT5ib3JkZXJUb3BTdHlsZSgpKTsKLSAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJCb3R0b21TdHlsZShtX3BhcmVudFN0eWxl
LT5ib3JkZXJCb3R0b21TdHlsZSgpKTsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3Jk
ZXJMZWZ0U3R5bGUobV9wYXJlbnRTdHlsZS0+Ym9yZGVyTGVmdFN0eWxlKCkpOwotICAgICAgICAg
ICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclJpZ2h0U3R5bGUobV9wYXJlbnRTdHlsZS0+Ym9yZGVy
UmlnaHRTdHlsZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGlzSW5p
dGlhbCkgewotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclRvcFN0eWxlKFJlbmRl
clN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGUoKSk7Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Qm9yZGVyQm90dG9tU3R5bGUoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZSgpKTsK
LSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJMZWZ0U3R5bGUoUmVuZGVyU3R5bGU6
OmluaXRpYWxCb3JkZXJTdHlsZSgpKTsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3Jk
ZXJSaWdodFN0eWxlKFJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGUoKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5Qm9yZGVyIHx8
IGlkID09IENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJUb3BXaWR0
aChtX3BhcmVudFN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKTsKLSAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRCb3JkZXJCb3R0b21XaWR0aChtX3BhcmVudFN0eWxlLT5ib3JkZXJCb3R0b21XaWR0
aCgpKTsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJMZWZ0V2lkdGgobV9wYXJl
bnRTdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpOwotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dEJvcmRlclJpZ2h0V2lkdGgobV9wYXJlbnRTdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAg
ICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclRvcFdpZHRoKFJlbmRlclN0eWxlOjppbml0aWFsQm9y
ZGVyV2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyQm90dG9tV2lk
dGgoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJXaWR0aCgpKTsKLSAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRCb3JkZXJMZWZ0V2lkdGgoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJXaWR0
aCgpKTsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJSaWdodFdpZHRoKFJlbmRl
clN0eWxlOjppbml0aWFsQm9yZGVyV2lkdGgoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3A6Ci0gICAgICAg
IGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclRvcENvbG9y
KG1fcGFyZW50U3R5bGUtPmJvcmRlclRvcENvbG9yKCkuaXNWYWxpZCgpID8gbV9wYXJlbnRTdHls
ZS0+Ym9yZGVyVG9wQ29sb3IoKSA6IG1fcGFyZW50U3R5bGUtPmNvbG9yKCkpOwotICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0Qm9yZGVyVG9wU3R5bGUobV9wYXJlbnRTdHlsZS0+Ym9yZGVyVG9wU3R5
bGUoKSk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJUb3BXaWR0aChtX3BhcmVudFN0
eWxlLT5ib3JkZXJUb3BXaWR0aCgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpc0lu
aXRpYWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5yZXNldEJvcmRlclRvcCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0OgotICAgICAgICBpZiAoaXNJ
bmhlcml0KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJSaWdodENvbG9yKG1fcGFy
ZW50U3R5bGUtPmJvcmRlclJpZ2h0Q29sb3IoKS5pc1ZhbGlkKCkgPyBtX3BhcmVudFN0eWxlLT5i
b3JkZXJSaWdodENvbG9yKCkgOiBtX3BhcmVudFN0eWxlLT5jb2xvcigpKTsKLSAgICAgICAgICAg
IG1fc3R5bGUtPnNldEJvcmRlclJpZ2h0U3R5bGUobV9wYXJlbnRTdHlsZS0+Ym9yZGVyUmlnaHRT
dHlsZSgpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclJpZ2h0V2lkdGgobV9wYXJl
bnRTdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlm
IChpc0luaXRpYWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5yZXNldEJvcmRlclJpZ2h0KCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tOgotICAgICAg
ICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJCb3R0b21D
b2xvcihtX3BhcmVudFN0eWxlLT5ib3JkZXJCb3R0b21Db2xvcigpLmlzVmFsaWQoKSA/IG1fcGFy
ZW50U3R5bGUtPmJvcmRlckJvdHRvbUNvbG9yKCkgOiBtX3BhcmVudFN0eWxlLT5jb2xvcigpKTsK
LSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlckJvdHRvbVN0eWxlKG1fcGFyZW50U3R5bGUt
PmJvcmRlckJvdHRvbVN0eWxlKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyQm90
dG9tV2lkdGgobV9wYXJlbnRTdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgbV9zdHlsZS0+cmVzZXRC
b3JkZXJCb3R0b20oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJMZWZ0OgotICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5z
ZXRCb3JkZXJMZWZ0Q29sb3IobV9wYXJlbnRTdHlsZS0+Ym9yZGVyTGVmdENvbG9yKCkuaXNWYWxp
ZCgpID8gbV9wYXJlbnRTdHlsZS0+Ym9yZGVyTGVmdENvbG9yKCkgOiBtX3BhcmVudFN0eWxlLT5j
b2xvcigpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlckxlZnRTdHlsZShtX3BhcmVu
dFN0eWxlLT5ib3JkZXJMZWZ0U3R5bGUoKSk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3Jk
ZXJMZWZ0V2lkdGgobV9wYXJlbnRTdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1fc3R5bGUtPnJlc2V0
Qm9yZGVyTGVmdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdp
bjoKLSAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFy
Z2luVG9wKG1fcGFyZW50U3R5bGUtPm1hcmdpblRvcCgpKTsKLSAgICAgICAgICAgIG1fc3R5bGUt
PnNldE1hcmdpbkJvdHRvbShtX3BhcmVudFN0eWxlLT5tYXJnaW5Cb3R0b20oKSk7Ci0gICAgICAg
ICAgICBtX3N0eWxlLT5zZXRNYXJnaW5MZWZ0KG1fcGFyZW50U3R5bGUtPm1hcmdpbkxlZnQoKSk7
Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJnaW5SaWdodChtX3BhcmVudFN0eWxlLT5tYXJn
aW5SaWdodCgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpc0luaXRpYWwpCi0gICAg
ICAgICAgICBtX3N0eWxlLT5yZXNldE1hcmdpbigpOwotICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVBhZGRpbmc6Ci0gICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldFBhZGRpbmdUb3AobV9wYXJlbnRTdHlsZS0+cGFkZGluZ1RvcCgpKTsK
LSAgICAgICAgICAgIG1fc3R5bGUtPnNldFBhZGRpbmdCb3R0b20obV9wYXJlbnRTdHlsZS0+cGFk
ZGluZ0JvdHRvbSgpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFBhZGRpbmdMZWZ0KG1fcGFy
ZW50U3R5bGUtPnBhZGRpbmdMZWZ0KCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UGFkZGlu
Z1JpZ2h0KG1fcGFyZW50U3R5bGUtPnBhZGRpbmdSaWdodCgpKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5yZXNldFBhZGRpbmco
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250OgotICAgICAgICBp
ZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gbV9wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBtX3N0
eWxlLT5zZXRMaW5lSGVpZ2h0KG1fcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSk7Ci0gICAgICAg
ICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Ci0gICAgICAgICAgICBpZiAobV9zdHlsZS0+c2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCi0gICAgICAgICAgICAgICAgbV9mb250
RGlydHkgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAg
ICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jaGVja2VyLm1fZG9jdW1lbnQtPnNldHRpbmdzKCk7
Ci0gICAgICAgICAgICBBU1NFUlQoc2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2luZyBzdHlsZSBy
ZXNvbHV0aW9uLCB0aGlzIGRvY3VtZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBmcmFtZSBhbmQg
dGh1cyBoYXZlIHNldHRpbmdzCi0gICAgICAgICAgICBpZiAoIXNldHRpbmdzKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b247Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVz
Y3JpcHRpb246OlN0YW5kYXJkRmFtaWx5KTsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKLSAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChtX2NoZWNrZXIubV9kb2N1bWVu
dC0+cHJpbnRpbmcoKSk7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0YW5kYXJk
Rm9udEZhbWlseSA9IG1fY2hlY2tlci5tX2RvY3VtZW50LT5zZXR0aW5ncygpLT5zdGFuZGFyZEZv
bnRGYW1pbHkoKTsKLSAgICAgICAgICAgIGlmICghc3RhbmRhcmRGb250RmFtaWx5LmlzRW1wdHko
KSkgewotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZh
bWlseShzdGFuZGFyZEZvbnRGYW1pbHkpOwotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5maXJzdEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1Zh
bHVlWHhTbWFsbCArIDEpOwotICAgICAgICAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9u
LCBmb250U2l6ZUZvcktleXdvcmQobV9jaGVja2VyLm1fZG9jdW1lbnQsIENTU1ZhbHVlTWVkaXVt
LCBmYWxzZSkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHls
ZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9
IDA7Ci0gICAgICAgICAgICBpZiAobV9zdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbikpCi0gICAgICAgICAgICAgICAgbV9mb250RGlydHkgPSB0cnVlOwotICAgICAgICB9
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5l
SGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgIG1f
bGluZUhlaWdodFZhbHVlID0gMDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKLSAgICAgICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0
VGhlbWUoKS0+c3lzdGVtRm9udChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSwgZm9udERlc2Ny
aXB0aW9uKTsKLSAKLSAgICAgICAgICAgIC8vIERvdWJsZS1jaGVjayBhbmQgc2VlIGlmIHRoZSB0
aGVtZSBkaWQgYW55dGhpbmcuICBJZiBub3QsIGRvbid0IGJvdGhlciB1cGRhdGluZyB0aGUgZm9u
dC4KLSAgICAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSkgewot
ICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVuZGVyaW5nIG1vZGUgYW5kIHByaW50
ZXIgZm9udCBzZXR0aW5ncyBhcmUgdXBkYXRlZC4KLSAgICAgICAgICAgICAgICBTZXR0aW5ncyog
c2V0dGluZ3MgPSBtX2NoZWNrZXIubV9kb2N1bWVudC0+c2V0dGluZ3MoKTsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoc2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2luZyBzdHlsZSByZXNvbHV0aW9u
LCB0aGlzIGRvY3VtZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBmcmFtZSBhbmQgdGh1cyBoYXZl
IHNldHRpbmdzCi0gICAgICAgICAgICAgICAgaWYgKCFzZXR0aW5ncykKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJp
bmdNb2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKLSAgICAgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQobV9jaGVja2VyLm1fZG9jdW1lbnQtPnBy
aW50aW5nKCkpOwotICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIHpv
b20gZmFjdG9yLgotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNp
emUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUobV9jaGVja2VyLm1fZG9jdW1lbnQs
IG1fc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVz
Y3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMpKTsKLSAgICAgICAgICAg
ICAgICBpZiAobV9zdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCi0g
ICAgICAgICAgICAgICAgICAgIG1fZm9udERpcnR5ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNGb250VmFsdWUoKSkgewotICAgICAgICAgICAgRm9u
dFZhbHVlICpmb250ID0gc3RhdGljX2Nhc3Q8Rm9udFZhbHVlKj4odmFsdWUpOwotICAgICAgICAg
ICAgaWYgKCFmb250LT5zdHlsZSB8fCAhZm9udC0+dmFyaWFudCB8fCAhZm9udC0+d2VpZ2h0IHx8
Ci0gICAgICAgICAgICAgICAgICFmb250LT5zaXplIHx8ICFmb250LT5saW5lSGVpZ2h0IHx8ICFm
b250LT5mYW1pbHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgZm9udC0+c3R5bGUuZ2V0KCkpOwotICAgICAg
ICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBmb250LT52YXJpYW50
LmdldCgpKTsKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0
LCBmb250LT53ZWlnaHQuZ2V0KCkpOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsKLQotICAgICAgICAgICAgbV9saW5lSGVp
Z2h0VmFsdWUgPSBmb250LT5saW5lSGVpZ2h0LmdldCgpOwotCi0gICAgICAgICAgICBhcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSwgZm9udC0+ZmFtaWx5LmdldCgpKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0
U3R5bGU6Ci0gICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNl
dExpc3RTdHlsZVR5cGUobV9wYXJlbnRTdHlsZS0+bGlzdFN0eWxlVHlwZSgpKTsKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldExpc3RTdHlsZUltYWdlKG1fcGFyZW50U3R5bGUtPmxpc3RTdHlsZUlt
YWdlKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGlzdFN0eWxlUG9zaXRpb24obV9wYXJl
bnRTdHlsZS0+bGlzdFN0eWxlUG9zaXRpb24oKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBp
ZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMaXN0U3R5bGVUeXBlKFJl
bmRlclN0eWxlOjppbml0aWFsTGlzdFN0eWxlVHlwZSgpKTsKLSAgICAgICAgICAgIG1fc3R5bGUt
PnNldExpc3RTdHlsZUltYWdlKFJlbmRlclN0eWxlOjppbml0aWFsTGlzdFN0eWxlSW1hZ2UoKSk7
Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMaXN0U3R5bGVQb3NpdGlvbihSZW5kZXJTdHlsZTo6
aW5pdGlhbExpc3RTdHlsZVBvc2l0aW9uKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZToKLSAgICAgICAgaWYgKGlzSW5oZXJpdCkgewot
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0T3V0bGluZVdpZHRoKG1fcGFyZW50U3R5bGUtPm91dGxp
bmVXaWR0aCgpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldE91dGxpbmVDb2xvcihtX3BhcmVu
dFN0eWxlLT5vdXRsaW5lQ29sb3IoKS5pc1ZhbGlkKCkgPyBtX3BhcmVudFN0eWxlLT5vdXRsaW5l
Q29sb3IoKSA6IG1fcGFyZW50U3R5bGUtPmNvbG9yKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+
c2V0T3V0bGluZVN0eWxlKG1fcGFyZW50U3R5bGUtPm91dGxpbmVTdHlsZSgpKTsKLSAgICAgICAg
fQotICAgICAgICBlbHNlIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5yZXNl
dE91dGxpbmUoKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ1NTMyBQcm9wZXJ0aWVzCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFwcGVhcmFuY2U6IHsKLSAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUwoYXBwZWFyYW5jZSwgQXBwZWFyYW5jZSkKLSAgICAgICAgaWYgKCFw
cmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0
QXBwZWFyYW5jZSgqcHJpbWl0aXZlVmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCaW5kaW5nOiB7Ci0jaWYgRU5BQkxFKFhCTCkKLSAgICAg
ICAgaWYgKGlzSW5pdGlhbCB8fCAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSkgewotICAgICAgICAgICAgbV9zdHlsZS0+ZGVsZXRl
QmluZGluZ1VSSXMoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIGlmIChtX3BhcmVudFN0eWxlLT5iaW5k
aW5nVVJJcygpKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRCaW5kaW5nVVJJcyht
X3BhcmVudFN0eWxlLT5iaW5kaW5nVVJJcygpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5kZWxldGVCaW5kaW5nVVJJcygpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgcmV0dXJu
OwotICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3Qq
Pih2YWx1ZSk7Ci0gICAgICAgIGJvb2wgZmlyc3RCaW5kaW5nID0gdHJ1ZTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsaXN0LT5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAg
ICAgICBDU1NWYWx1ZSAqaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Ci0g
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSAqdmFsID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPihpdGVtKTsKLSAgICAgICAgICAgIGlmICh2YWwtPnByaW1pdGl2ZVR5cGUoKSA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewotICAgICAgICAgICAgICAgIGlmIChmaXJz
dEJpbmRpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RCaW5kaW5nID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPmRlbGV0ZUJpbmRpbmdVUklzKCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPmFkZEJpbmRpbmdVUkkodmFsLT5n
ZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmCi0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1h
Z2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZTogewotICAgICAgICBp
ZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3Bl
cnR5V2Via2l0Qm9yZGVySW1hZ2UsIGJvcmRlckltYWdlLCBCb3JkZXJJbWFnZSkKLSAgICAgICAg
ICAgIEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2UsIG1h
c2tCb3hJbWFnZSwgTWFza0JveEltYWdlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
IGVsc2UgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgSEFORExFX0lOSVRJQUxfQ09ORF9X
SVRIX1ZBTFVFKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2UsIEJvcmRlckltYWdlLCBOaW5l
UGllY2VJbWFnZSkKLSAgICAgICAgICAgIEhBTkRMRV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSwgTWFza0JveEltYWdlLCBOaW5lUGllY2VJbWFn
ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIE5pbmVQaWVjZUlt
YWdlIGltYWdlOwotICAgICAgICBtYXBOaW5lUGllY2VJbWFnZSh2YWx1ZSwgaW1hZ2UpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2UpCi0g
ICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJJbWFnZShpbWFnZSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hc2tCb3hJbWFnZShpbWFnZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmFkaXVzOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXM6Ci0gICAgICAgIGlmIChpc0luaGVyaXQp
IHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclRvcExlZnRSYWRpdXMobV9wYXJlbnRT
dHlsZS0+Ym9yZGVyVG9wTGVmdFJhZGl1cygpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJv
cmRlclRvcFJpZ2h0UmFkaXVzKG1fcGFyZW50U3R5bGUtPmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkp
OwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyQm90dG9tTGVmdFJhZGl1cyhtX3BhcmVu
dFN0eWxlLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMobV9wYXJlbnRTdHlsZS0+Ym9yZGVyQm90dG9tUmln
aHRSYWRpdXMoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGlzSW5pdGlhbCkgewotICAgICAgICAgICAgbV9zdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBGYWxsIHRocm91Z2gK
LSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wTGVmdFJhZGl1czoKLSAgICBjYXNlIENTU1By
b3BlcnR5Qm9yZGVyVG9wUmlnaHRSYWRpdXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJv
dHRvbUxlZnRSYWRpdXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFk
aXVzOiB7Ci0gICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIEhBTkRMRV9JTkhF
UklUX0NPTkQoQ1NTUHJvcGVydHlCb3JkZXJUb3BMZWZ0UmFkaXVzLCBib3JkZXJUb3BMZWZ0UmFk
aXVzLCBCb3JkZXJUb3BMZWZ0UmFkaXVzKQotICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09O
RChDU1NQcm9wZXJ0eUJvcmRlclRvcFJpZ2h0UmFkaXVzLCBib3JkZXJUb3BSaWdodFJhZGl1cywg
Qm9yZGVyVG9wUmlnaHRSYWRpdXMpCi0gICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENT
U1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgYm9yZGVyQm90dG9tTGVmdFJhZGl1cywg
Qm9yZGVyQm90dG9tTGVmdFJhZGl1cykKLSAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkQo
Q1NTUHJvcGVydHlCb3JkZXJCb3R0b21SaWdodFJhZGl1cywgYm9yZGVyQm90dG9tUmlnaHRSYWRp
dXMsIEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBIQU5E
TEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlCb3JkZXJUb3BMZWZ0UmFkaXVz
LCBCb3JkZXJUb3BMZWZ0UmFkaXVzLCBCb3JkZXJSYWRpdXMpCi0gICAgICAgICAgICBIQU5ETEVf
SU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1cywg
Qm9yZGVyVG9wUmlnaHRSYWRpdXMsIEJvcmRlclJhZGl1cykKLSAgICAgICAgICAgIEhBTkRMRV9J
TklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUxlZnRSYWRpdXMs
IEJvcmRlckJvdHRvbUxlZnRSYWRpdXMsIEJvcmRlclJhZGl1cykKLSAgICAgICAgICAgIEhBTkRM
RV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFk
aXVzLCBCb3JkZXJCb3R0b21SaWdodFJhZGl1cywgQm9yZGVyUmFkaXVzKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdl
dFBhaXJWYWx1ZSgpOwotICAgICAgICBpZiAoIXBhaXIpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgaW50IHdpZHRoID0gcGFpci0+Zmlyc3QoKS0+Y29tcHV0ZUxlbmd0aEludChzdHls
ZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICBpbnQgaGVpZ2h0
ID0gcGFpci0+c2Vjb25kKCktPmNvbXB1dGVMZW5ndGhJbnQoc3R5bGUoKSwgbV9yb290RWxlbWVu
dFN0eWxlLCAgem9vbUZhY3Rvcik7Ci0gICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwg
MCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAod2lkdGggPT0gMCkKLSAgICAg
ICAgICAgIGhlaWdodCA9IDA7IC8vIE51bGwgb3V0IHRoZSBvdGhlciB2YWx1ZS4KLSAgICAgICAg
ZWxzZSBpZiAoaGVpZ2h0ID09IDApCi0gICAgICAgICAgICB3aWR0aCA9IDA7IC8vIE51bGwgb3V0
IHRoZSBvdGhlciB2YWx1ZS4KLQotICAgICAgICBJbnRTaXplIHNpemUod2lkdGgsIGhlaWdodCk7
Ci0gICAgICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJUb3BMZWZ0UmFkaXVzOgotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclRvcExl
ZnRSYWRpdXMoc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyVG9wUmlnaHRSYWRpdXM6Ci0gICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0Qm9yZGVyVG9wUmlnaHRSYWRpdXMoc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1czoKLSAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVzKHNpemUpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
ckJvdHRvbVJpZ2h0UmFkaXVzOgotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlckJv
dHRvbVJpZ2h0UmFkaXVzKHNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJSYWRpdXMoc2l6
ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0OgotICAgICAgICBIQU5E
TEVfSU5IRVJJVF9BTkRfSU5JVElBTChvdXRsaW5lT2Zmc2V0LCBPdXRsaW5lT2Zmc2V0KQotICAg
ICAgICBtX3N0eWxlLT5zZXRPdXRsaW5lT2Zmc2V0KHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVu
Z3RoSW50KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikpOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRSZW5kZXJpbmc6IHsKLSAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpOwotICAgICAgICBpZiAoaXNJbmhlcml0KSAKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRUZXh0UmVuZGVyaW5nTW9kZShtX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKS50
ZXh0UmVuZGVyaW5nTW9kZSgpKTsKLSAgICAgICAgZWxzZSBpZiAoaXNJbml0aWFsKQotICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldFRleHRSZW5kZXJpbmdNb2RlKEF1dG9UZXh0UmVuZGVy
aW5nKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRU
ZXh0UmVuZGVyaW5nTW9kZSgqcHJpbWl0aXZlVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChtX3N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSkKLSAgICAgICAg
ICAgIG1fZm9udERpcnR5ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNl
IENTU1Byb3BlcnR5VGV4dFNoYWRvdzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94U2hh
ZG93OiB7Ci0gICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIGlmIChpZCA9PSBD
U1NQcm9wZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fc3R5bGUtPnNl
dFRleHRTaGFkb3cobV9wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpID8gbmV3IFNoYWRvd0RhdGEo
Km1fcGFyZW50U3R5bGUtPnRleHRTaGFkb3coKSkgOiAwKTsKLSAgICAgICAgICAgIHJldHVybiBt
X3N0eWxlLT5zZXRCb3hTaGFkb3cobV9wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkgPyBuZXcgU2hh
ZG93RGF0YSgqbV9wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkpIDogMCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGlzSW5pdGlhbCB8fCBwcmltaXRpdmVWYWx1ZSkgLy8gaW5pdGlhbCB8IG5vbmUK
LSAgICAgICAgICAgIHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cgPyBtX3N0eWxl
LT5zZXRUZXh0U2hhZG93KDApIDogbV9zdHlsZS0+c2V0Qm94U2hhZG93KDApOwotCi0gICAgICAg
IGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgQ1NTVmFsdWVMaXN0ICpsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUp
OwotICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgIFNoYWRvd1ZhbHVlKiBpdGVtID0gc3Rh
dGljX2Nhc3Q8U2hhZG93VmFsdWUqPihsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsK
LSAgICAgICAgICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aEludChzdHlsZSgpLCBt
X3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgaW50IHkgPSBpdGVt
LT55LT5jb21wdXRlTGVuZ3RoSW50KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZh
Y3Rvcik7Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5j
b21wdXRlTGVuZ3RoSW50KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcikg
OiAwOwotICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0ZW0tPnNwcmVhZCA/IGl0ZW0tPnNwcmVh
ZC0+Y29tcHV0ZUxlbmd0aEludChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0
b3IpIDogMDsKLSAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+c3R5
bGUgJiYgaXRlbS0+c3R5bGUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnNldCA/IEluc2V0IDog
Tm9ybWFsOwotICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBpZiAoaXRlbS0+
Y29sb3IpCi0gICAgICAgICAgICAgICAgY29sb3IgPSBnZXRDb2xvckZyb21QcmltaXRpdmVWYWx1
ZShpdGVtLT5jb2xvci5nZXQoKSk7Ci0gICAgICAgICAgICBTaGFkb3dEYXRhKiBzaGFkb3dEYXRh
ID0gbmV3IFNoYWRvd0RhdGEoeCwgeSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwgY29sb3Iu
aXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQpOwotICAgICAgICAgICAgaWYg
KGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRUZXh0U2hhZG93KHNoYWRvd0RhdGEsIGkgIT0gMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEsIGkgIT0gMCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Qm94UmVmbGVjdDogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChib3hS
ZWZsZWN0LCBCb3hSZWZsZWN0KQotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpIHsKLSAgICAg
ICAgICAgIG1fc3R5bGUtPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hSZWZs
ZWN0KCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIENTU1JlZmxl
Y3RWYWx1ZSogcmVmbGVjdFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUmVmbGVjdFZhbHVlKj4odmFs
dWUpOwotICAgICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0aW9uID0gU3R5bGVS
ZWZsZWN0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9uKHJl
ZmxlY3RWYWx1ZS0+ZGlyZWN0aW9uKCkpOwotICAgICAgICBpZiAocmVmbGVjdFZhbHVlLT5vZmZz
ZXQoKSkgewotICAgICAgICAgICAgaW50IHR5cGUgPSByZWZsZWN0VmFsdWUtPm9mZnNldCgpLT5w
cmltaXRpdmVUeXBlKCk7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0UpCi0gICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0
KExlbmd0aChyZWZsZWN0VmFsdWUtPm9mZnNldCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zm
c2V0KExlbmd0aChyZWZsZWN0VmFsdWUtPm9mZnNldCgpLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVu
Z3RoKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvciksIEZpeGVkKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgTmluZVBpZWNlSW1hZ2UgbWFzazsKLSAgICAgICAgbWFwTmluZVBp
ZWNlSW1hZ2UocmVmbGVjdFZhbHVlLT5tYXNrKCksIG1hc2spOwotICAgICAgICByZWZsZWN0aW9u
LT5zZXRNYXNrKG1hc2spOwotICAgICAgICAKLSAgICAgICAgbV9zdHlsZS0+c2V0Qm94UmVmbGVj
dChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eU9wYWNpdHk6Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFM
KG9wYWNpdHksIE9wYWNpdHkpCi0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUgfHwgcHJpbWl0
aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
UikKLSAgICAgICAgICAgIHJldHVybjsgLy8gRXJyb3IgY2FzZS4KLSAgICAgICAgLy8gQ2xhbXAg
b3BhY2l0eSB0byB0aGUgcmFuZ2UgMC0xCi0gICAgICAgIG1fc3R5bGUtPnNldE9wYWNpdHkobWlu
KDEuMGYsIG1heCgwLjBmLCBwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKSkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEFsaWduOgotICAgIHsK
LSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoYm94QWxpZ24sIEJveEFsaWduKQot
ICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBFQm94QWxpZ25tZW50IGJveEFsaWdubWVudCA9ICpwcmltaXRpdmVWYWx1ZTsKLSAgICAgICAg
aWYgKGJveEFsaWdubWVudCAhPSBCSlVTVElGWSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJv
eEFsaWduKGJveEFsaWdubWVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVNyYzogLy8gT25seSB1c2VkIGluIEBmb250LWZhY2UgcnVsZXMuCi0gICAgICAg
IHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5VW5pY29kZVJhbmdlOiAvLyBPbmx5IHVzZWQg
aW4gQGZvbnQtZmFjZSBydWxlcy4KLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCYWNrZmFjZVZpc2liaWxpdHk6Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMKGJhY2tmYWNlVmlzaWJpbGl0eSwgQmFja2ZhY2VWaXNpYmlsaXR5KQotICAgICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRCYWNrZmFjZVZpc2li
aWxpdHkoKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVmlzaWJsZSkgPyBC
YWNrZmFjZVZpc2liaWxpdHlWaXNpYmxlIDogQmFja2ZhY2VWaXNpYmlsaXR5SGlkZGVuKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hEaXJlY3Rpb246Ci0g
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkUoYm94RGlyZWN0
aW9uLCBCb3hEaXJlY3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm94TGluZXM6Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9Q
UklNSVRJVkUoYm94TGluZXMsIEJveExpbmVzKQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJveE9yaWVudDoKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUxfQU5EX1BSSU1JVElWRShib3hPcmllbnQsIEJveE9yaWVudCkKLSAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hQYWNrOgotICAgIHsKLSAgICAgICAgSEFO
RExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoYm94UGFjaywgQm94UGFjaykKLSAgICAgICAgaWYgKCFw
cmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgRUJveEFsaWdubWVu
dCBib3hQYWNrID0gKnByaW1pdGl2ZVZhbHVlOwotICAgICAgICBpZiAoYm94UGFjayAhPSBCU1RS
RVRDSCAmJiBib3hQYWNrICE9IEJCQVNFTElORSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJv
eFBhY2soYm94UGFjayk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJveEZsZXg6Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGJv
eEZsZXgsIEJveEZsZXgpCi0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUgfHwgcHJpbWl0aXZl
VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikK
LSAgICAgICAgICAgIHJldHVybjsgLy8gRXJyb3IgY2FzZS4KLSAgICAgICAgbV9zdHlsZS0+c2V0
Qm94RmxleChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hGbGV4R3JvdXA6Ci0gICAgICAgIEhBTkRM
RV9JTkhFUklUX0FORF9JTklUSUFMKGJveEZsZXhHcm91cCwgQm94RmxleEdyb3VwKQotICAgICAg
ICBpZiAoIXByaW1pdGl2ZVZhbHVlIHx8IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkg
IT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCi0gICAgICAgICAgICByZXR1cm47IC8v
IEVycm9yIGNhc2UuCi0gICAgICAgIG1fc3R5bGUtPnNldEJveEZsZXhHcm91cCgodW5zaWduZWQg
aW50KShwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSkpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveE9yZGluYWxHcm91cDoKLSAgICAgICAgSEFO
RExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoYm94T3JkaW5hbEdyb3VwLCBCb3hPcmRpbmFsR3JvdXAp
Ci0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUgfHwgcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2
ZVR5cGUoKSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKLSAgICAgICAgICAgIHJl
dHVybjsgLy8gRXJyb3IgY2FzZS4KLSAgICAgICAgbV9zdHlsZS0+c2V0Qm94T3JkaW5hbEdyb3Vw
KCh1bnNpZ25lZCBpbnQpKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94U2l6aW5nOgotICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChib3hTaXppbmcsIEJveFNpemluZykKLSAgICAg
ICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ29udGVudEJveCkKLSAgICAg
ICAgICAgIG1fc3R5bGUtPnNldEJveFNpemluZyhDT05URU5UX0JPWCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJveFNpemluZyhCT1JERVJfQk9YKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5Db3VudDogewotICAgICAg
ICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBpZiAobV9wYXJlbnRTdHlsZS0+aGFzQXV0
b0NvbHVtbkNvdW50KCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0SGFzQXV0b0NvbHVt
bkNvdW50KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0
Q29sdW1uQ291bnQobV9wYXJlbnRTdHlsZS0+Y29sdW1uQ291bnQoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0SGFz
QXV0b0NvbHVtbkNvdW50KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgbV9zdHlsZS0+c2V0Q29sdW1uQ291bnQoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KHBy
aW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkdhcDogewotICAgICAgICBpZiAoaXNJ
bmhlcml0KSB7Ci0gICAgICAgICAgICBpZiAobV9wYXJlbnRTdHlsZS0+aGFzTm9ybWFsQ29sdW1u
R2FwKCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0SGFzTm9ybWFsQ29sdW1uR2FwKCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uR2Fw
KG1fcGFyZW50U3R5bGUtPmNvbHVtbkdhcCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfSBlbHNlIGlmIChpc0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEhhc05vcm1hbENvbHVt
bkdhcCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1fc3R5bGUt
PnNldENvbHVtbkdhcChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKCks
IG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5TcGFuOiB7Ci0gICAgICAgIEhBTkRM
RV9JTkhFUklUX0FORF9JTklUSUFMKGNvbHVtblNwYW4sIENvbHVtblNwYW4pCi0gICAgICAgIG1f
c3R5bGUtPnNldENvbHVtblNwYW4ocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVBbGwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRDb2x1bW5XaWR0aDogewotICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBp
ZiAobV9wYXJlbnRTdHlsZS0+aGFzQXV0b0NvbHVtbldpZHRoKCkpCi0gICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0SGFzQXV0b0NvbHVtbldpZHRoKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uV2lkdGgobV9wYXJlbnRTdHlsZS0+Y29sdW1u
V2lkdGgoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNJbml0
aWFsIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykgewotICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0SGFzQXV0b0NvbHVtbldpZHRoKCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uV2lkdGgocHJpbWl0
aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhGbG9hdChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUs
IHpvb21GYWN0b3IpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Q29sdW1uUnVsZVN0eWxlOgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTF9BTkRfUFJJTUlUSVZFX1dJVEhfVkFMVUUoY29sdW1uUnVsZVN0eWxlLCBDb2x1bW5SdWxl
U3R5bGUsIEJvcmRlclN0eWxlKQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdENvbHVtbkJyZWFrQmVmb3JlOgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTF9BTkRfUFJJTUlUSVZFX1dJVEhfVkFMVUUoY29sdW1uQnJlYWtCZWZvcmUsIENvbHVtbkJy
ZWFrQmVmb3JlLCBQYWdlQnJlYWspCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Q29sdW1uQnJlYWtBZnRlcjoKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUxfQU5EX1BSSU1JVElWRV9XSVRIX1ZBTFVFKGNvbHVtbkJyZWFrQWZ0ZXIsIENvbHVtbkJy
ZWFrQWZ0ZXIsIFBhZ2VCcmVhaykKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRDb2x1bW5CcmVha0luc2lkZTogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRf
SU5JVElBTF9XSVRIX1ZBTFVFKGNvbHVtbkJyZWFrSW5zaWRlLCBDb2x1bW5CcmVha0luc2lkZSwg
UGFnZUJyZWFrKQotICAgICAgICBFUGFnZUJyZWFrIHBiID0gKnByaW1pdGl2ZVZhbHVlOwotICAg
ICAgICBpZiAocGIgIT0gUEJBTFdBWVMpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5C
cmVha0luc2lkZShwYik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRDb2x1bW5SdWxlOgotICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAg
ICAgICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxlQ29sb3IobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVs
ZUNvbG9yKCkuaXNWYWxpZCgpID8gbV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBt
X3BhcmVudFN0eWxlLT5jb2xvcigpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1
bGVTdHlsZShtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlU3R5bGUoKSk7Ci0gICAgICAgICAgICBt
X3N0eWxlLT5zZXRDb2x1bW5SdWxlV2lkdGgobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZVdpZHRo
KCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAg
IG1fc3R5bGUtPnJlc2V0Q29sdW1uUnVsZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdENvbHVtbnM6Ci0gICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAg
ICAgICAgIGlmIChtX3BhcmVudFN0eWxlLT5oYXNBdXRvQ29sdW1uV2lkdGgoKSkKLSAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRIYXNBdXRvQ29sdW1uV2lkdGgoKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5XaWR0aChtX3BhcmVudFN0eWxl
LT5jb2x1bW5XaWR0aCgpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtbkNvdW50KG1f
cGFyZW50U3R5bGUtPmNvbHVtbkNvdW50KCkpOwotICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlh
bCkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0SGFzQXV0b0NvbHVtbldpZHRoKCk7Ci0gICAg
ICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5Db3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbENvbHVt
bkNvdW50KCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFycXVlZToKLSAgICAgICAgaWYgKHZhbHVlVHlwZSAhPSBDU1NWYWx1ZTo6Q1NT
X0lOSEVSSVQgfHwgIW1fcGFyZW50Tm9kZSkgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRN
YXJxdWVlRGlyZWN0aW9uKG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVEaXJlY3Rpb24oKSk7Ci0gICAg
ICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQobV9wYXJlbnRTdHlsZS0+bWFycXVlZUlu
Y3JlbWVudCgpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKG1fcGFyZW50U3R5
bGUtPm1hcnF1ZWVTcGVlZCgpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3Vu
dChtX3BhcmVudFN0eWxlLT5tYXJxdWVlTG9vcENvdW50KCkpOwotICAgICAgICBtX3N0eWxlLT5z
ZXRNYXJxdWVlQmVoYXZpb3IobV9wYXJlbnRTdHlsZS0+bWFycXVlZUJlaGF2aW9yKCkpOwotICAg
ICAgICByZXR1cm47Ci0jaWYgRU5BQkxFKFdDU1MpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdhcE1h
cnF1ZWVMb29wOgotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVSZXBl
dGl0aW9uOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKG1hcnF1ZWVMb29w
Q291bnQsIE1hcnF1ZWVMb29wQ291bnQpCi0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZUluZmluaXRlKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxv
b3BDb3VudCgtMSk7IC8vIC0xIG1lYW5zIHJlcGVhdCBmb3JldmVyLgotICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jaWYg
RU5BQkxFKFdDU1MpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdhcE1hcnF1ZWVTcGVlZDoKLSNlbmRp
ZgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3BlZWQ6IHsKLSAgICAgICAgSEFO
RExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFycXVlZVNwZWVkLCBNYXJxdWVlU3BlZWQpICAgICAg
Ci0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewotICAgICAgICAgICAgc3dpdGNo
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVTbG93OgotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQo
NTAwKTsgLy8gNTAwIG1zZWMuCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUt
PnNldE1hcnF1ZWVTcGVlZCg4NSk7IC8vIDg1bXNlYy4gVGhlIFdpbklFIGRlZmF1bHQuCi0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVGYXN0
OgotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAx
MG1zZWMuIFN1cGVyIGZhc3QuCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRp
dmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKQotICAgICAgICAgICAgbV9zdHls
ZS0+c2V0TWFycXVlZVNwZWVkKDEwMDAgKiBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7
Ci0gICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19NUykKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVT
cGVlZChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7Ci0gICAgICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpIC8vIEZvciBzY3JvbGxhbW91bnQgc3VwcG9ydC4KLSAgICAgICAgICAgIG1fc3R5bGUt
PnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVJbmNyZW1l
bnQ6IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFycXVlZUluY3JlbWVu
dCwgTWFycXVlZUluY3JlbWVudCkKLSAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAg
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsOgotICAgICAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgxLCBGaXhlZCkpOyAvLyAxcHguCi0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3Jt
YWw6Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVu
Z3RoKDYsIEZpeGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMYXJnZToKLSAgICAg
ICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZp
eGVkKSk7IC8vIDM2cHguCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7
Ci0gICAgICAgICAgICBMZW5ndGggbCA9IGNvbnZlcnRUb0xlbmd0aChwcmltaXRpdmVWYWx1ZSwg
c3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCAxLCAmb2spOwotICAgICAgICAgICAgaWYgKG9r
KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQobCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNpZiBFTkFCTEUoV0NTUykKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2FwTWFycXVlZVN0eWxlOgotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hcnF1ZWVTdHlsZToKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxf
QU5EX1BSSU1JVElWRShtYXJxdWVlQmVoYXZpb3IsIE1hcnF1ZWVCZWhhdmlvcikgICAgICAKLSAg
ICAgICAgcmV0dXJuOwotI2lmIEVOQUJMRShXQ1NTKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXYXBN
YXJxdWVlRGlyOgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXJxdWVlRGly
ZWN0aW9uLCBNYXJxdWVlRGlyZWN0aW9uKQotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYg
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMdHI6Ci0g
ICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZURpcmVjdGlvbihNUklHSFQpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVJ0bDoKLSAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlRGlyZWN0aW9uKE1MRUZUKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0TWFycXVlZURpcmVjdGlvbigqcHJpbWl0aXZlVmFsdWUpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSNl
bmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlRGlyZWN0aW9uOgotICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKG1hcnF1ZWVEaXJlY3Rp
b24sIE1hcnF1ZWVEaXJlY3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VXNlckRyYWc6Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FO
RF9QUklNSVRJVkUodXNlckRyYWcsIFVzZXJEcmFnKSAgICAgIAotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJNb2RpZnk6Ci0gICAgICAgIEhBTkRMRV9JTkhF
UklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkUodXNlck1vZGlmeSwgVXNlck1vZGlmeSkgICAg
ICAKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0
OgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKHVzZXJT
ZWxlY3QsIFVzZXJTZWxlY3QpICAgICAgCi0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgQ1NT
UHJvcGVydHlUZXh0T3ZlcmZsb3c6IHsKLSAgICAgICAgLy8gVGhpcyBwcm9wZXJ0eSBpcyBzdXBw
b3J0ZWQgYnkgV2luSUUsIGFuZCBzbyB3ZSBsZWF2ZSBvZmYgdGhlICItd2Via2l0LSIgaW4gb3Jk
ZXIgdG8KLSAgICAgICAgLy8gd29yayB3aXRoIFdpbklFLXNwZWNpZmljIHBhZ2VzIHRoYXQgdXNl
IHRoZSBwcm9wZXJ0eS4KLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodGV4dE92
ZXJmbG93LCBUZXh0T3ZlcmZsb3cpCi0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUgfHwgIXBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBt
X3N0eWxlLT5zZXRUZXh0T3ZlcmZsb3cocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVFbGxpcHNpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hcmdpbkNvbGxhcHNlOiB7Ci0gICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAg
ICAgICAgICAgIG1fc3R5bGUtPnNldE1hcmdpblRvcENvbGxhcHNlKG1fcGFyZW50U3R5bGUtPm1h
cmdpblRvcENvbGxhcHNlKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFyZ2luQm90dG9t
Q29sbGFwc2UobV9wYXJlbnRTdHlsZS0+bWFyZ2luQm90dG9tQ29sbGFwc2UoKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5z
ZXRNYXJnaW5Ub3BDb2xsYXBzZShNQ09MTEFQU0UpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0
TWFyZ2luQm90dG9tQ29sbGFwc2UoTUNPTExBUFNFKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblRvcENvbGxhcHNl
OgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKG1hcmdp
blRvcENvbGxhcHNlLCBNYXJnaW5Ub3BDb2xsYXBzZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Cb3R0b21Db2xsYXBzZToKLSAgICAgICAgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRShtYXJnaW5Cb3R0b21Db2xsYXBzZSwg
TWFyZ2luQm90dG9tQ29sbGFwc2UpCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TGluZUNsYW1wOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFM
KGxpbmVDbGFtcCwgTGluZUNsYW1wKQotICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmlt
aXRpdmVUeXBlKCk7Ci0gICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
TlVNQkVSKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUNsYW1wKExpbmVDbGFtcFZhbHVl
KHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
UiksIExpbmVDbGFtcExpbmVDb3VudCkpOwotICAgICAgICBlbHNlIGlmICh0eXBlID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldExp
bmVDbGFtcChMaW5lQ2xhbXBWYWx1ZShwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSwgTGluZUNsYW1wUGVyY2VudGFnZSkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIaWdobGlnaHQ6
IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoaGlnaGxpZ2h0LCBIaWdobGln
aHQpOwotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVO
b25lKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0SGlnaGxpZ2h0KG51bGxBdG9tKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0SGlnaGxpZ2h0KHByaW1pdGl2ZVZhbHVl
LT5nZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0SHlwaGVuczogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTChoeXBoZW5zLCBIeXBoZW5zKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0SHlwaGVucygqcHJp
bWl0aXZlVmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRIeXBoZW5hdGVDaGFyYWN0ZXI6IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5E
X0lOSVRJQUwoaHlwaGVuYXRlQ2hhcmFjdGVyLCBIeXBoZW5hdGVDaGFyYWN0ZXIpOwotICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0SHlwaGVuYXRlQ2hhcmFjdGVyKG51bGxBdG9tKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0SHlwaGVuYXRlQ2hhcmFjdGVyKHByaW1pdGl2
ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRml0OiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklU
X0FORF9JTklUSUFMKGJvcmRlckZpdCwgQm9yZGVyRml0KTsKLSAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQm9yZGVyKQotICAgICAgICAgICAgbV9zdHls
ZS0+c2V0Qm9yZGVyRml0KEJvcmRlckZpdEJvcmRlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldEJvcmRlckZpdChCb3JkZXJGaXRMaW5lcyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTaXplQWRqdXN0OiB7Ci0g
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRleHRTaXplQWRqdXN0LCBUZXh0U2l6
ZUFkanVzdCkKLSAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSB8fCAhcHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkpIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0VGV4dFNpemVBZGp1c3Qo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAgbV9m
b250RGlydHkgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUZXh0U2VjdXJpdHk6Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklU
SUFMX0FORF9QUklNSVRJVkUodGV4dFNlY3VyaXR5LCBUZXh0U2VjdXJpdHkpCi0gICAgICAgIHJl
dHVybjsKLQotI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0RGFzaGJvYXJkUmVnaW9uOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMKGRhc2hib2FyZFJlZ2lvbnMsIERhc2hib2FyZFJlZ2lvbnMpCi0gICAgICAgIGlmICgh
cHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgbV9z
dHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6bm9uZURhc2hib2FyZFJlZ2lv
bnMoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBEYXNoYm9h
cmRSZWdpb24gKnJlZ2lvbiA9IHByaW1pdGl2ZVZhbHVlLT5nZXREYXNoYm9hcmRSZWdpb25WYWx1
ZSgpOwotICAgICAgICBpZiAoIXJlZ2lvbikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIAotICAgICAgICBEYXNoYm9hcmRSZWdpb24gKmZpcnN0ID0gcmVnaW9uOwotICAgICAgICB3
aGlsZSAocmVnaW9uKSB7Ci0gICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvTGVuZ3Ro
KHJlZ2lvbi0+dG9wKCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAgICAg
ICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9MZW5ndGgocmVnaW9uLT5yaWdodCgpLCBzdHlsZSgp
LCBtX3Jvb3RFbGVtZW50U3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZl
cnRUb0xlbmd0aChyZWdpb24tPmJvdHRvbSgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUp
OwotICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgocmVnaW9uLT5sZWZ0
KCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBpZiAocmVnaW9u
LT5tX2lzQ2lyY2xlKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lv
bihTdHlsZURhc2hib2FyZFJlZ2lvbjo6Q2lyY2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmln
aHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKHJlZ2lvbi0+bV9pc1JlY3RhbmdsZSkKLSAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OlJlY3Rhbmds
ZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBm
aXJzdCA/IGZhbHNlIDogdHJ1ZSk7Ci0gICAgICAgICAgICByZWdpb24gPSByZWdpb24tPm1fbmV4
dC5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVu
dCgpLT5zZXRIYXNEYXNoYm9hcmRSZWdpb25zKHRydWUpOwotICAgICAgICAKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSNlbmRpZiAgICAgICAgCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJ0
bE9yZGVyaW5nOgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh2aXN1YWxseU9y
ZGVyZWQsIFZpc3VhbGx5T3JkZXJlZCkKLSAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSB8fCAh
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IG1fc3R5bGUtPnNldFZpc3VhbGx5T3JkZXJlZChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZVZpc3VhbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGV4dFN0cm9rZVdpZHRoOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklU
SUFMKHRleHRTdHJva2VXaWR0aCwgVGV4dFN0cm9rZVdpZHRoKQotICAgICAgICBmbG9hdCB3aWR0
aCA9IDA7Ci0gICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKLSAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVUaGluOgotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU1l
ZGl1bToKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVUaGljazogewotICAgICAgICAgICAgICAg
IGRvdWJsZSByZXN1bHQgPSAxLjAgLyA0ODsKLSAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVNZWRpdW0pCi0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdCAqPSAzOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlVGhpY2spCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCAq
PSA1OwotICAgICAgICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShy
ZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aEZsb2F0KHN0
eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhGbG9hdChzdHlsZSgpLCBt
X3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIG1fc3R5bGUtPnNldFRleHRTdHJva2VXaWR0aCh3aWR0aCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bTogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0cmFuc2Zvcm0sIFRyYW5z
Zm9ybSk7Ci0gICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAg
Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0
eWxlLCBvcGVyYXRpb25zKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0VHJhbnNmb3JtKG9wZXJhdGlv
bnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2Zvcm1PcmlnaW46Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRyYW5z
Zm9ybU9yaWdpblgsIFRyYW5zZm9ybU9yaWdpblgpCi0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FO
RF9JTklUSUFMKHRyYW5zZm9ybU9yaWdpblksIFRyYW5zZm9ybU9yaWdpblkpCi0gICAgICAgIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRyYW5zZm9ybU9yaWdpblosIFRyYW5zZm9ybU9yaWdp
blopCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3Jt
T3JpZ2luWDogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0cmFuc2Zvcm1P
cmlnaW5YLCBUcmFuc2Zvcm1PcmlnaW5YKQotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAg
ICAgICAgTGVuZ3RoIGw7Ci0gICAgICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1p
dGl2ZVR5cGUoKTsKLSAgICAgICAgaWYgKENTU1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVu
Z3RoKHR5cGUpKQotICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZUxlbmd0aEludEZvckxlbmd0aChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0
b3IpLCBGaXhlZCk7Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QRVJDRU5UQUdFKQotICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+
Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0VHJhbnNmb3JtT3JpZ2luWChsKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5Z
OiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRyYW5zZm9ybU9yaWdpblks
IFRyYW5zZm9ybU9yaWdpblkpCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBM
ZW5ndGggbDsKLSAgICAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpOwotICAgICAgICBpZiAoQ1NTUHJpbWl0aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgodHlw
ZSkpCi0gICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3Ro
SW50Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvciksIEZp
eGVkKTsKLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0UpCi0gICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3Vi
bGVWYWx1ZSgpLCBQZXJjZW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX3N0eWxlLT5zZXRUcmFuc2Zvcm1PcmlnaW5ZKGwpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblo6IHsKLSAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodHJhbnNmb3JtT3JpZ2luWiwgVHJhbnNm
b3JtT3JpZ2luWikKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIGZsb2F0IGY7
Ci0gICAgICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKLSAg
ICAgICAgaWYgKENTU1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5cGUpKQotICAg
ICAgICAgICAgZiA9IHN0YXRpY19jYXN0PGZsb2F0PihwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxl
bmd0aEludEZvckxlbmd0aChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRUcmFuc2Zvcm1P
cmlnaW5aKGYpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRyYW5zZm9ybVN0eWxlOgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0
cmFuc2Zvcm1TdHlsZTNELCBUcmFuc2Zvcm1TdHlsZTNEKQotICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRUcmFuc2Zvcm1TdHlsZTNEKChwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVByZXNlcnZlM2QpID8gVHJhbnNmb3JtU3R5
bGUzRFByZXNlcnZlM0QgOiBUcmFuc2Zvcm1TdHlsZTNERmxhdCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmU6IHsKLSAgICAgICAgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwocGVyc3BlY3RpdmUsIFBlcnNwZWN0aXZlKQotICAgICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVOb25lKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRQZXJzcGVjdGl2ZSgwKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZmxvYXQgcGVyc3Bl
Y3RpdmVWYWx1ZTsKLSAgICAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZl
VHlwZSgpOwotICAgICAgICBpZiAoQ1NTUHJpbWl0aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgo
dHlwZSkpCi0gICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9v
dEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikpOwotICAgICAgICBlbHNlIGlmICh0eXBlID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSB7Ci0gICAgICAgICAgICAvLyBGb3IgYmFja3dh
cmQgY29tcGF0aWJpbGl0eSwgdHJlYXQgdmFsdWVsZXNzIG51bWJlcnMgYXMgcHguCi0gICAgICAg
ICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShwcmltaXRp
dmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCktPmNv
bXB1dGVMZW5ndGhGbG9hdChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3Ip
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAocGVy
c3BlY3RpdmVWYWx1ZSA+PSAwLjBmKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UGVyc3BlY3Rp
dmUocGVyc3BlY3RpdmVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luOgotICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTChwZXJzcGVjdGl2ZU9yaWdpblgsIFBlcnNwZWN0aXZlT3JpZ2luWCkKLSAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwocGVyc3BlY3RpdmVPcmlnaW5ZLCBQZXJz
cGVjdGl2ZU9yaWdpblkpCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0UGVyc3BlY3RpdmVPcmlnaW5YOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklU
SUFMKHBlcnNwZWN0aXZlT3JpZ2luWCwgUGVyc3BlY3RpdmVPcmlnaW5YKQotICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgTGVuZ3RoIGw7Ci0gICAgICAgIGludCB0eXBlID0gcHJp
bWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgaWYgKENTU1ByaW1pdGl2ZVZh
bHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5cGUpKQotICAgICAgICAgICAgbCA9IExlbmd0aChwcmlt
aXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChzdHlsZSgpLCBtX3Jvb3RFbGVt
ZW50U3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCk7Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQotICAgICAgICAgICAgbCA9IExlbmd0
aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0UGVyc3BlY3RpdmVP
cmlnaW5YKGwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRQZXJzcGVjdGl2ZU9yaWdpblk6IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwocGVyc3BlY3RpdmVPcmlnaW5ZLCBQZXJzcGVjdGl2ZU9yaWdpblkpCi0gICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBMZW5ndGggbDsKLSAgICAgICAgaW50IHR5cGUgPSBw
cmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpOwotICAgICAgICBpZiAoQ1NTUHJpbWl0aXZl
VmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgodHlwZSkpCi0gICAgICAgICAgICBsID0gTGVuZ3RoKHBy
aW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9vdEVs
ZW1lbnRTdHlsZSwgem9vbUZhY3RvciksIEZpeGVkKTsKLSAgICAgICAgZWxzZSBpZiAodHlwZSA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCi0gICAgICAgICAgICBsID0gTGVu
Z3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRQZXJzcGVjdGl2
ZU9yaWdpblkobCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEFuaW1hdGlvbjoKLSAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1f
c3R5bGUtPmNsZWFyQW5pbWF0aW9ucygpOwotICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0g
ICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0QW5pbWF0aW9ucyhtX3BhcmVudFN0eWxlLT5hbmlt
YXRpb25zKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFu
aW1hdGlvbkRlbGF5OgotICAgICAgICBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVFKGRlbGF5LCBEZWxh
eSwgdmFsdWUpCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5p
bWF0aW9uRGlyZWN0aW9uOgotICAgICAgICBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVFKGRpcmVjdGlv
biwgRGlyZWN0aW9uLCB2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRBbmltYXRpb25EdXJhdGlvbjoKLSAgICAgICAgSEFORExFX0FOSU1BVElPTl9WQUxV
RShkdXJhdGlvbiwgRHVyYXRpb24sIHZhbHVlKQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkZpbGxNb2RlOgotICAgICAgICBIQU5ETEVfQU5JTUFU
SU9OX1ZBTFVFKGZpbGxNb2RlLCBGaWxsTW9kZSwgdmFsdWUpCi0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6Ci0gICAgICAg
IEhBTkRMRV9BTklNQVRJT05fVkFMVUUoaXRlcmF0aW9uQ291bnQsIEl0ZXJhdGlvbkNvdW50LCB2
YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRp
b25OYW1lOgotICAgICAgICBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVFKG5hbWUsIE5hbWUsIHZhbHVl
KQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblBs
YXlTdGF0ZToKLSAgICAgICAgSEFORExFX0FOSU1BVElPTl9WQUxVRShwbGF5U3RhdGUsIFBsYXlT
dGF0ZSwgdmFsdWUpCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
QW5pbWF0aW9uVGltaW5nRnVuY3Rpb246Ci0gICAgICAgIEhBTkRMRV9BTklNQVRJT05fVkFMVUUo
dGltaW5nRnVuY3Rpb24sIFRpbWluZ0Z1bmN0aW9uLCB2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uOgotICAgICAgICBpZiAoaXNJbml0
aWFsKQotICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJUcmFuc2l0aW9ucygpOwotICAgICAgICBl
bHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0VHJhbnNpdGlv
bnMobV9wYXJlbnRTdHlsZS0+dHJhbnNpdGlvbnMoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OgotICAgICAgICBIQU5ETEVfVFJB
TlNJVElPTl9WQUxVRShkZWxheSwgRGVsYXksIHZhbHVlKQotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbjoKLSAgICAgICAgSEFORExF
X1RSQU5TSVRJT05fVkFMVUUoZHVyYXRpb24sIER1cmF0aW9uLCB2YWx1ZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6Ci0gICAg
ICAgIEhBTkRMRV9UUkFOU0lUSU9OX1ZBTFVFKHByb3BlcnR5LCBQcm9wZXJ0eSwgdmFsdWUpCi0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWlu
Z0Z1bmN0aW9uOgotICAgICAgICBIQU5ETEVfVFJBTlNJVElPTl9WQUxVRSh0aW1pbmdGdW5jdGlv
biwgVGltaW5nRnVuY3Rpb24sIHZhbHVlKQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVBvaW50ZXJFdmVudHM6Ci0gICAgewotI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9S
VCkKLSAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzY1NjEwNzc+IFdvcmsgYXJvdW5kIHRoZSBT
dG9ja3Mgd2lkZ2V0J3MgbWlzdXNlIG9mIHRoZQotICAgICAgICAvLyBwb2ludGVyLWV2ZW50cyBw
cm9wZXJ0eSBieSBub3QgYXBwbHlpbmcgaXQgaW4gRGFzaGJvYXJkLgotICAgICAgICBTZXR0aW5n
cyogc2V0dGluZ3MgPSBtX2NoZWNrZXIubV9kb2N1bWVudC0+c2V0dGluZ3MoKTsKLSAgICAgICAg
aWYgKHNldHRpbmdzICYmIHNldHRpbmdzLT51c2VzRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmls
aXR5TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAgICAgIEhBTkRMRV9J
TkhFUklUX0FORF9JTklUSUFMKHBvaW50ZXJFdmVudHMsIFBvaW50ZXJFdmVudHMpCi0gICAgICAg
IGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5
bGUtPnNldFBvaW50ZXJFdmVudHMoKnByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sb3JDb3JyZWN0aW9uOgotICAgICAg
ICBpZiAoaXNJbmhlcml0KSAKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbG9yU3BhY2UobV9w
YXJlbnRTdHlsZS0+Y29sb3JTcGFjZSgpKTsKLSAgICAgICAgZWxzZSBpZiAoaXNJbml0aWFsKQot
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sb3JTcGFjZShEZXZpY2VDb2xvclNwYWNlKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbG9yU3BhY2UoKnByaW1p
dGl2ZVZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVNpemU6Ci0gICAgICAgIGFwcGx5UGFnZVNpemVQcm9wZXJ0eSh2YWx1ZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5SW52YWxpZDoKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gRGlyZWN0aW9uYWwgcHJvcGVydGllcyBhcmUgcmVzb2x2ZWQgYnkgcmVzb2x2ZURp
cmVjdGlvbkF3YXJlUHJvcGVydHkoKSBiZWZvcmUgdGhlIHN3aXRjaC4KLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Qm9yZGVyRW5kOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJF
bmRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kU3R5bGU6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckVuZFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJTdGFydDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3Rh
cnRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRTdHlsZToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRXaWR0aDoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFyZ2luRW5kOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5T
dGFydDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0VuZDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0UGFkZGluZ1N0YXJ0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0cmV0Y2g6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVF1b3RlczoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlU
ZXh0TGluZVRocm91Z2hDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdo
TW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoU3R5bGU6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlU
ZXh0T3ZlcmxpbmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZUNvbG9yOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlU
ZXh0T3ZlcmxpbmVTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lV2lkdGg6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVRleHRVbmRlcmxpbmVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZU1v
ZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVTdHlsZToKLSAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dFVuZGVybGluZVdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRG
b250U2l6ZURlbHRhOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJ
bkVmZmVjdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VmFyaWFibGVEZWNsYXJhdGlvbkJsb2NrOgotICAgICAgICByZXR1
cm47Ci0jaWYgRU5BQkxFKFdDU1MpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdhcElucHV0Rm9ybWF0
OgotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgbV9lbGVtZW50LT5oYXNUYWdOYW1lKFdl
YkNvcmU6OmlucHV0VGFnKSkgewotICAgICAgICAgICAgU3RyaW5nIG1hc2sgPSBwcmltaXRpdmVW
YWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1
dEVsZW1lbnQqPihtX2VsZW1lbnQpLT5zZXRXYXBJbnB1dEZvcm1hdChtYXNrKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2FwSW5wdXRSZXF1aXJl
ZDoKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIG1fZWxlbWVudC0+aXNGb3JtQ29udHJv
bEVsZW1lbnQoKSkgewotICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihtX2VsZW1lbnQpOwotICAg
ICAgICAgICAgYm9vbCByZXF1aXJlZCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
ID09ICJ0cnVlIjsKLSAgICAgICAgICAgIGVsZW1lbnQtPnNldFJlcXVpcmVkKHJlcXVpcmVkKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0jZW5kaWYgCi0KLSNpZiBFTkFCTEUoU1ZHKQot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRyeSB0aGUgU1ZHIHByb3BlcnRpZXMKLSAgICAgICAg
YXBwbHlTVkdQcm9wZXJ0eShpZCwgdmFsdWUpOwotI2VuZGlmCi0gICAgfQotfQotCi12b2lkIENT
U1N0eWxlU2VsZWN0b3I6OmFwcGx5UGFnZVNpemVQcm9wZXJ0eShDU1NWYWx1ZSogdmFsdWUpCi17
Ci0gICAgbV9zdHlsZS0+cmVzZXRQYWdlU2l6ZVR5cGUoKTsKLSAgICBpZiAoIXZhbHVlLT5pc1Zh
bHVlTGlzdCgpKQotICAgICAgICByZXR1cm47Ci0gICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3Qg
PSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgTGVuZ3RoIHdpZHRoOwot
ICAgIExlbmd0aCBoZWlnaHQ7Ci0gICAgUGFnZVNpemVUeXBlIHBhZ2VTaXplVHlwZSA9IFBBR0Vf
U0laRV9BVVRPOwotICAgIHN3aXRjaCAodmFsdWVMaXN0LT5sZW5ndGgoKSkgewotICAgIGNhc2Ug
MjogewotICAgICAgICAvLyA8bGVuZ3RoPnsyfSB8IDxwYWdlLXNpemU+IDxvcmllbnRhdGlvbj4K
LSAgICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOwotICAgICAgICBpZiAo
IXZhbHVlTGlzdC0+aXRlbSgwKS0+aXNQcmltaXRpdmVWYWx1ZSgpIHx8ICF2YWx1ZUxpc3QtPml0
ZW0oMSktPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlMCA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWVMaXN0LT5pdGVtKDApKTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlMSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWVMaXN0LT5pdGVtKDEpKTsKLSAgICAgICAgaW50IHR5cGUwID0gcHJpbWl0aXZlVmFsdWUwLT5w
cmltaXRpdmVUeXBlKCk7Ci0gICAgICAgIGludCB0eXBlMSA9IHByaW1pdGl2ZVZhbHVlMS0+cHJp
bWl0aXZlVHlwZSgpOwotICAgICAgICBpZiAoQ1NTUHJpbWl0aXZlVmFsdWU6OmlzVW5pdFR5cGVM
ZW5ndGgodHlwZTApKSB7Ci0gICAgICAgICAgICAvLyA8bGVuZ3RoPnsyfQotICAgICAgICAgICAg
aWYgKCFDU1NQcmltaXRpdmVWYWx1ZTo6aXNVbml0VHlwZUxlbmd0aCh0eXBlMSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgd2lkdGggPSBMZW5ndGgocHJpbWl0aXZlVmFs
dWUwLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHls
ZSksIEZpeGVkKTsKLSAgICAgICAgICAgIGhlaWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZTEt
PmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKSwg
Rml4ZWQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gPHBhZ2Utc2l6ZT4gPG9y
aWVudGF0aW9uPgotICAgICAgICAgICAgLy8gVGhlIHZhbHVlIG9yZGVyIGlzIGd1YXJhbnRlZWQu
IFNlZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBhcmFtZXRlci4KLSAgICAgICAgICAgIGlmICghcGFn
ZVNpemVGcm9tTmFtZShwcmltaXRpdmVWYWx1ZTAsIHByaW1pdGl2ZVZhbHVlMSwgd2lkdGgsIGhl
aWdodCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIDE6IHsKLSAgICAgICAgLy8gPGxlbmd0aD4gfCBhdXRvIHwgPHBh
Z2Utc2l6ZT4gfCBbIHBvcnRyYWl0IHwgbGFuZHNjYXBlXQotICAgICAgICBpZiAoIXZhbHVlTGlz
dC0+aXRlbSgwKS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlTGlzdC0+aXRlbSgwKSk7Ci0gICAgICAgIGludCB0eXBlID0g
cHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgaWYgKENTU1ByaW1pdGl2
ZVZhbHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5cGUpKSB7Ci0gICAgICAgICAgICAvLyA8bGVuZ3Ro
PgotICAgICAgICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOwotICAgICAg
ICAgICAgd2lkdGggPSBoZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5n
dGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKSwgRml4ZWQpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHR5cGUgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19JREVOVCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBzd2l0Y2gg
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVl
QXV0bzoKLSAgICAgICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfQVVUTzsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVQb3J0cmFpdDoK
LSAgICAgICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfQVVUT19QT1JUUkFJVDsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMYW5kc2Nh
cGU6Ci0gICAgICAgICAgICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX0FVVE9fTEFORFND
QVBFOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAvLyA8cGFnZS1zaXplPgotICAgICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9
IFBBR0VfU0laRV9SRVNPTFZFRDsKLSAgICAgICAgICAgICAgICBpZiAoIXBhZ2VTaXplRnJvbU5h
bWUocHJpbWl0aXZlVmFsdWUsIDAsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9zdHlsZS0+c2V0
UGFnZVNpemVUeXBlKHBhZ2VTaXplVHlwZSk7Ci0gICAgbV9zdHlsZS0+c2V0UGFnZVNpemUoTGVu
Z3RoU2l6ZSh3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgcmV0dXJuOwotfQotCi1ib29sIENTU1N0eWxl
U2VsZWN0b3I6OnBhZ2VTaXplRnJvbU5hbWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHBhZ2VTaXplTmFt
ZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHBhZ2VPcmllbnRhdGlvbiwgTGVuZ3RoJiB3aWR0aCwgTGVu
Z3RoJiBoZWlnaHQpCi17Ci0gICAgc3RhdGljIGNvbnN0IExlbmd0aCBhNVdpZHRoID0gbW1MZW5n
dGgoMTQ4KSwgYTVIZWlnaHQgPSBtbUxlbmd0aCgyMTApOwotICAgIHN0YXRpYyBjb25zdCBMZW5n
dGggYTRXaWR0aCA9IG1tTGVuZ3RoKDIxMCksIGE0SGVpZ2h0ID0gbW1MZW5ndGgoMjk3KTsKLSAg
ICBzdGF0aWMgY29uc3QgTGVuZ3RoIGEzV2lkdGggPSBtbUxlbmd0aCgyOTcpLCBhM0hlaWdodCA9
IG1tTGVuZ3RoKDQyMCk7Ci0gICAgc3RhdGljIGNvbnN0IExlbmd0aCBiNVdpZHRoID0gbW1MZW5n
dGgoMTc2KSwgYjVIZWlnaHQgPSBtbUxlbmd0aCgyNTApOwotICAgIHN0YXRpYyBjb25zdCBMZW5n
dGggYjRXaWR0aCA9IG1tTGVuZ3RoKDI1MCksIGI0SGVpZ2h0ID0gbW1MZW5ndGgoMzUzKTsKLSAg
ICBzdGF0aWMgY29uc3QgTGVuZ3RoIGxldHRlcldpZHRoID0gaW5jaExlbmd0aCg4LjUpLCBsZXR0
ZXJIZWlnaHQgPSBpbmNoTGVuZ3RoKDExKTsKLSAgICBzdGF0aWMgY29uc3QgTGVuZ3RoIGxlZ2Fs
V2lkdGggPSBpbmNoTGVuZ3RoKDguNSksIGxlZ2FsSGVpZ2h0ID0gaW5jaExlbmd0aCgxNCk7Ci0g
ICAgc3RhdGljIGNvbnN0IExlbmd0aCBsZWRnZXJXaWR0aCA9IGluY2hMZW5ndGgoMTEpLCBsZWRn
ZXJIZWlnaHQgPSBpbmNoTGVuZ3RoKDE3KTsKLQotICAgIGlmICghcGFnZVNpemVOYW1lIHx8IHBh
Z2VTaXplTmFtZS0+cHJpbWl0aXZlVHlwZSgpICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURF
TlQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAocGFnZVNpemVOYW1lLT5n
ZXRJZGVudCgpKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZUE1OgotICAgICAgICB3aWR0aCA9IGE1V2lk
dGg7Ci0gICAgICAgIGhlaWdodCA9IGE1SGVpZ2h0OwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1ZhbHVlQTQ6Ci0gICAgICAgIHdpZHRoID0gYTRXaWR0aDsKLSAgICAgICAgaGVpZ2h0ID0g
YTRIZWlnaHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVBMzoKLSAgICAgICAg
d2lkdGggPSBhM1dpZHRoOwotICAgICAgICBoZWlnaHQgPSBhM0hlaWdodDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUI1OgotICAgICAgICB3aWR0aCA9IGI1V2lkdGg7Ci0gICAg
ICAgIGhlaWdodCA9IGI1SGVpZ2h0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVl
QjQ6Ci0gICAgICAgIHdpZHRoID0gYjRXaWR0aDsKLSAgICAgICAgaGVpZ2h0ID0gYjRIZWlnaHQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVMZXR0ZXI6Ci0gICAgICAgIHdpZHRo
ID0gbGV0dGVyV2lkdGg7Ci0gICAgICAgIGhlaWdodCA9IGxldHRlckhlaWdodDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUxlZ2FsOgotICAgICAgICB3aWR0aCA9IGxlZ2FsV2lk
dGg7Ci0gICAgICAgIGhlaWdodCA9IGxlZ2FsSGVpZ2h0OwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU1ZhbHVlTGVkZ2VyOgotICAgICAgICB3aWR0aCA9IGxlZGdlcldpZHRoOwotICAgICAg
ICBoZWlnaHQgPSBsZWRnZXJIZWlnaHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAocGFnZU9yaWVudGF0aW9uKSB7
Ci0gICAgICAgIGlmIChwYWdlT3JpZW50YXRpb24tPnByaW1pdGl2ZVR5cGUoKSAhPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBzd2l0Y2ggKHBhZ2VPcmllbnRhdGlvbi0+Z2V0SWRlbnQoKSkgewotICAgICAgICBjYXNlIENT
U1ZhbHVlTGFuZHNjYXBlOgotICAgICAgICAgICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVQb3J0cmFpdDoKLSAgICAg
ICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotTGVuZ3RoIENTU1N0eWxlU2VsZWN0b3I6Om1tTGVuZ3RoKGRvdWJs
ZSBtbSkKLXsKLSAgICByZXR1cm4gTGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobW0s
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTU0pLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0
eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSksIEZpeGVkKTsKLX0KLQotTGVuZ3RoIENTU1N0eWxl
U2VsZWN0b3I6OmluY2hMZW5ndGgoZG91YmxlIGluY2gpCi17Ci0gICAgcmV0dXJuIExlbmd0aChD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGluY2gsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSU4p
LT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSks
IEZpeGVkKTsKLX0KLQotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsQXR0YWNobWVudChG
aWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5jc3NW
YWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKLSAgICAgICAgbGF5ZXItPnNl
dEF0dGFjaG1lbnQoRmlsbExheWVyOjppbml0aWFsRmlsbEF0dGFjaG1lbnQobGF5ZXItPnR5cGUo
KSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAg
ICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgIGNhc2UgQ1NT
VmFsdWVGaXhlZDoKLSAgICAgICAgICAgIGxheWVyLT5zZXRBdHRhY2htZW50KEZpeGVkQmFja2dy
b3VuZEF0dGFjaG1lbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFs
dWVTY3JvbGw6Ci0gICAgICAgICAgICBsYXllci0+c2V0QXR0YWNobWVudChTY3JvbGxCYWNrZ3Jv
dW5kQXR0YWNobWVudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1
ZUxvY2FsOgotICAgICAgICAgICAgbGF5ZXItPnNldEF0dGFjaG1lbnQoTG9jYWxCYWNrZ3JvdW5k
QXR0YWNobWVudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmls
bENsaXAoRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1
ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7Ci0gICAgICAgIGxh
eWVyLT5zZXRDbGlwKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxDbGlwKGxheWVyLT50eXBlKCkpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgbGF5
ZXItPnNldENsaXAoKnByaW1pdGl2ZVZhbHVlKTsKLX0KLQotdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjptYXBGaWxsQ29tcG9zaXRlKEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkg
ewotICAgICAgICBsYXllci0+c2V0Q29tcG9zaXRlKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxDb21w
b3NpdGUobGF5ZXItPnR5cGUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgbGF5ZXItPnNldENvbXBvc2l0ZSgqcHJpbWl0aXZlVmFs
dWUpOwotfQotCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxPcmlnaW4oRmlsbExheWVy
KiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBl
KCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7Ci0gICAgICAgIGxheWVyLT5zZXRPcmlnaW4o
RmlsbExheWVyOjppbml0aWFsRmlsbE9yaWdpbihsYXllci0+dHlwZSgpKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGxheWVyLT5zZXRPcmln
aW4oKnByaW1pdGl2ZVZhbHVlKTsKLX0KLQotU3R5bGVJbWFnZSogQ1NTU3R5bGVTZWxlY3Rvcjo6
c3R5bGVJbWFnZShDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc0ltYWdlVmFs
dWUoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPih2YWx1ZSkt
PmNhY2hlZEltYWdlKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCkpOwotICAgIGlm
ICh2YWx1ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlKj4odmFsdWUpLT5nZW5lcmF0ZWRJbWFnZSgpOwot
ICAgIHJldHVybiAwOwotfQotCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxJbWFnZShG
aWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5jc3NW
YWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKLSAgICAgICAgbGF5ZXItPnNl
dEltYWdlKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxJbWFnZShsYXllci0+dHlwZSgpKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsYXllci0+c2V0SW1hZ2Uoc3R5bGVJbWFnZSh2YWx1
ZSkpOwotfQotCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxSZXBlYXRYKEZpbGxMYXll
ciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlw
ZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewotICAgICAgICBsYXllci0+c2V0UmVwZWF0
WChGaWxsTGF5ZXI6OmluaXRpYWxGaWxsUmVwZWF0WChsYXllci0+dHlwZSgpKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBsYXllci0+
c2V0UmVwZWF0WCgqcHJpbWl0aXZlVmFsdWUpOwotfQotCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6
Om1hcEZpbGxSZXBlYXRZKEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewot
ICAgICAgICBsYXllci0+c2V0UmVwZWF0WShGaWxsTGF5ZXI6OmluaXRpYWxGaWxsUmVwZWF0WShs
YXllci0+dHlwZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHZhbHVlKTsKLSAgICBsYXllci0+c2V0UmVwZWF0WSgqcHJpbWl0aXZlVmFsdWUpOwotfQot
Ci12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxTaXplKEZpbGxMYXllciogbGF5ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsK
LSAgICAgICAgbGF5ZXItPnNldFNpemVUeXBlKFNpemVOb25lKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUNvbnRhaW4pCi0gICAgICAgIGxheWVyLT5zZXRTaXplVHlw
ZShDb250YWluKTsKLSAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBD
U1NWYWx1ZUNvdmVyKQotICAgICAgICBsYXllci0+c2V0U2l6ZVR5cGUoQ292ZXIpOwotICAgIGVs
c2UKLSAgICAgICAgbGF5ZXItPnNldFNpemVUeXBlKFNpemVMZW5ndGgpOwotICAgIAotICAgIExl
bmd0aFNpemUgYiA9IEZpbGxMYXllcjo6aW5pdGlhbEZpbGxTaXplTGVuZ3RoKGxheWVyLT50eXBl
KCkpOwotICAgIAotICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNT
U19JTklUSUFMIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ29udGFp
bgotICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUNvdmVy
KSB7Ci0gICAgICAgIGxheWVyLT5zZXRTaXplTGVuZ3RoKGIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgUGFpciogcGFpciA9IHByaW1pdGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKTsK
LSAgICBpZiAoIXBhaXIpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBDU1NQcmltaXRpdmVW
YWx1ZSogZmlyc3QgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXItPmZpcnN0
KCkpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHBhaXItPnNlY29uZCgpKTsKLSAgICAKLSAgICBpZiAoIWZpcnN0IHx8ICFz
ZWNvbmQpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgTGVuZ3RoIGZpcnN0TGVuZ3Ro
LCBzZWNvbmRMZW5ndGg7Ci0gICAgaW50IGZpcnN0VHlwZSA9IGZpcnN0LT5wcmltaXRpdmVUeXBl
KCk7Ci0gICAgaW50IHNlY29uZFR5cGUgPSBzZWNvbmQtPnByaW1pdGl2ZVR5cGUoKTsKLSAgICAK
LSAgICBmbG9hdCB6b29tRmFjdG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotCi0gICAg
aWYgKGZpcnN0VHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05PV04pCi0gICAgICAg
IGZpcnN0TGVuZ3RoID0gTGVuZ3RoKEF1dG8pOwotICAgIGVsc2UgaWYgKENTU1ByaW1pdGl2ZVZh
bHVlOjppc1VuaXRUeXBlTGVuZ3RoKGZpcnN0VHlwZSkpCi0gICAgICAgIGZpcnN0TGVuZ3RoID0g
TGVuZ3RoKGZpcnN0LT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9vdEVs
ZW1lbnRTdHlsZSwgem9vbUZhY3RvciksIEZpeGVkKTsKLSAgICBlbHNlIGlmIChmaXJzdFR5cGUg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQotICAgICAgICBmaXJzdExlbmd0
aCA9IExlbmd0aChmaXJzdC0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7Ci0gICAgZWxzZQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc2Vjb25kVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1VOS05PV04pCi0gICAgICAgIHNlY29uZExlbmd0aCA9IExlbmd0aChBdXRvKTsKLSAg
ICBlbHNlIGlmIChDU1NQcmltaXRpdmVWYWx1ZTo6aXNVbml0VHlwZUxlbmd0aChzZWNvbmRUeXBl
KSkKLSAgICAgICAgc2Vjb25kTGVuZ3RoID0gTGVuZ3RoKHNlY29uZC0+Y29tcHV0ZUxlbmd0aElu
dEZvckxlbmd0aChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpLCBGaXhl
ZCk7Ci0gICAgZWxzZSBpZiAoc2Vjb25kVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0UpCi0gICAgICAgIHNlY29uZExlbmd0aCA9IExlbmd0aChzZWNvbmQtPmdldERvdWJs
ZVZhbHVlKCksIFBlcmNlbnQpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGIuc2V0V2lkdGgoZmlyc3RMZW5ndGgpOwotICAgIGIuc2V0SGVpZ2h0KHNlY29uZExlbmd0aCk7
Ci0gICAgbGF5ZXItPnNldFNpemVMZW5ndGgoYik7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6bWFwRmlsbFhQb3NpdGlvbihGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCi17
Ci0gICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwp
IHsKLSAgICAgICAgbGF5ZXItPnNldFhQb3NpdGlvbihGaWxsTGF5ZXI6OmluaXRpYWxGaWxsWFBv
c2l0aW9uKGxheWVyLT50eXBlKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAg
ICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGZsb2F0IHpvb21GYWN0b3IgPSBtX3N0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0KLSAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKTsKLSAgICBMZW5ndGggbDsKLSAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZh
bHVlLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgaWYgKENTU1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRU
eXBlTGVuZ3RoKHR5cGUpKQotICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZh
Y3RvciksIEZpeGVkKTsKLSAgICBlbHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEVSQ0VOVEFHRSkKLSAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKSwgUGVyY2VudCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm47Ci0gICAgbGF5
ZXItPnNldFhQb3NpdGlvbihsKTsKLX0KLQotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxs
WVBvc2l0aW9uKEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAo
dmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewotICAgICAg
ICBsYXllci0+c2V0WVBvc2l0aW9uKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxZUG9zaXRpb24obGF5
ZXItPnR5cGUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgem9v
bUZhY3RvciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAKLSAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHZhbHVlKTsKLSAgICBMZW5ndGggbDsKLSAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5w
cmltaXRpdmVUeXBlKCk7Ci0gICAgaWYgKENTU1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVu
Z3RoKHR5cGUpKQotICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVu
Z3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvciks
IEZpeGVkKTsKLSAgICBlbHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVS
Q0VOVEFHRSkKLSAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFs
dWUoKSwgUGVyY2VudCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm47Ci0gICAgbGF5ZXItPnNl
dFlQb3NpdGlvbihsKTsKLX0KLQotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25E
ZWxheShBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2
YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7Ci0gICAgICAg
IGFuaW1hdGlvbi0+c2V0RGVsYXkoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRGVsYXkoKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBp
ZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1MpCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0RGVsYXkocHJpbWl0aXZlVmFsdWUtPmdldEZs
b2F0VmFsdWUoKSk7Ci0gICAgZWxzZQotICAgICAgICBhbmltYXRpb24tPnNldERlbGF5KHByaW1p
dGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkvMTAwMC4wZik7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6bWFwQW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpD
U1NfSU5JVElBTCkgewotICAgICAgICBsYXllci0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6aW5p
dGlhbEFuaW1hdGlvbkRpcmVjdGlvbigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGxheWVyLT5zZXREaXJlY3Rpb24ocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBbHRlcm5hdGUgPyBBbmltYXRpb246OkFuaW1hdGlv
bkRpcmVjdGlvbkFsdGVybmF0ZSA6IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uTm9ybWFs
KTsKLX0KLQotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25EdXJhdGlvbihBbmlt
YXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+Y3Nz
VmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7Ci0gICAgICAgIGFuaW1hdGlv
bi0+c2V0RHVyYXRpb24oQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRHVyYXRpb24oKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UykKLSAgICAgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihwcmltaXRpdmVWYWx1ZS0+Z2V0Rmxv
YXRWYWx1ZSgpKTsKLSAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgp
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTVMpCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0RHVy
YXRpb24ocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKS8xMDAwLjBmKTsKLX0KLQotdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25GaWxsTW9kZShBbmltYXRpb24qIGxheWVy
LCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBD
U1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKLSAgICAgICAgbGF5ZXItPnNldEZpbGxNb2RlKEFuaW1h
dGlvbjo6aW5pdGlhbEFuaW1hdGlvbkZpbGxNb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSkgewotICAgIGNhc2UgQ1NTVmFsdWVOb25lOgotICAgICAgICBsYXllci0+c2V0
RmlsbE1vZGUoQW5pbWF0aW9uRmlsbE1vZGVOb25lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDU1NWYWx1ZUZvcndhcmRzOgotICAgICAgICBsYXllci0+c2V0RmlsbE1vZGUoQW5pbWF0aW9u
RmlsbE1vZGVGb3J3YXJkcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVCYWNr
d2FyZHM6Ci0gICAgICAgIGxheWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb25GaWxsTW9kZUJhY2t3
YXJkcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVCb3RoOgotICAgICAgICBs
YXllci0+c2V0RmlsbE1vZGUoQW5pbWF0aW9uRmlsbE1vZGVCb3RoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotfQotCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbkl0ZXJhdGlv
bkNvdW50KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYg
KHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKLSAgICAg
ICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudChBbmltYXRpb246OmluaXRpYWxBbmltYXRp
b25JdGVyYXRpb25Db3VudCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSk7Ci0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlSW5maW5pdGUpCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQoLTEpOwot
ICAgIGVsc2UKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudChpbnQocHJpbWl0
aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkpOwotfQotCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6
Om1hcEFuaW1hdGlvbk5hbWUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7
Ci0gICAgICAgIGxheWVyLT5zZXROYW1lKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbk5hbWUo
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAg
ICAKLSAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQot
ICAgICAgICBsYXllci0+c2V0SXNOb25lQW5pbWF0aW9uKHRydWUpOwotICAgIGVsc2UKLSAgICAg
ICAgbGF5ZXItPnNldE5hbWUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwotfQot
Ci12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24q
IGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUo
KSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKLSAgICAgICAgbGF5ZXItPnNldFBsYXlTdGF0
ZShBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUoKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICBFQW5pbVBsYXlTdGF0ZSBw
bGF5U3RhdGUgPSAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVQYXVzZWQp
ID8gQW5pbVBsYXlTdGF0ZVBhdXNlZCA6IEFuaW1QbGF5U3RhdGVQbGF5aW5nOwotICAgIGxheWVy
LT5zZXRQbGF5U3RhdGUocGxheVN0YXRlKTsKLX0KLQotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXBBbmltYXRpb25Qcm9wZXJ0eShBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVl
KQotewotICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklU
SUFMKSB7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0UHJvcGVydHkoQW5pbWF0aW9uOjppbml0aWFs
QW5pbWF0aW9uUHJvcGVydHkoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZUFsbCkKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShjQW5pbWF0ZUFsbCk7Ci0g
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQot
ICAgICAgICBhbmltYXRpb24tPnNldFByb3BlcnR5KGNBbmltYXRlTm9uZSk7Ci0gICAgZWxzZQot
ICAgICAgICBhbmltYXRpb24tPnNldFByb3BlcnR5KHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSk7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1Zh
bHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVl
OjpDU1NfSU5JVElBTCkgewotICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKEFu
aW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0g
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGluZWFyOgotICAgICAg
ICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oVGltaW5nRnVuY3Rpb24oTGlu
ZWFyVGltaW5nRnVuY3Rpb24sIDAuMCwgMC4wLCAxLjAsIDEuMCkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2U6Ci0gICAgICAgICAgICAgICAg
YW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihUaW1pbmdGdW5jdGlvbigpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlSW46Ci0gICAgICAg
ICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihUaW1pbmdGdW5jdGlvbihDdWJp
Y0JlemllclRpbWluZ0Z1bmN0aW9uLCAwLjQyLCAwLjAsIDEuMCwgMS4wKSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlRWFzZU91dDoKLSAgICAgICAg
ICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFRpbWluZ0Z1bmN0aW9uKEN1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb24sIDAuMCwgMC4wLCAwLjU4LCAxLjApKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlSW5PdXQ6Ci0gICAgICAg
ICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihUaW1pbmdGdW5jdGlvbihDdWJp
Y0JlemllclRpbWluZ0Z1bmN0aW9uLCAwLjQyLCAwLjAsIDAuNTgsIDEuMCkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKHZhbHVlLT5pc1RpbWluZ0Z1bmN0aW9uVmFsdWUoKSkgewotICAgICAgICBDU1NUaW1p
bmdGdW5jdGlvblZhbHVlKiB0aW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PENTU1RpbWluZ0Z1
bmN0aW9uVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rp
b24oVGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiwgdGltaW5nRnVuY3Rp
b24tPngxKCksIHRpbWluZ0Z1bmN0aW9uLT55MSgpLCB0aW1pbmdGdW5jdGlvbi0+eDIoKSwgdGlt
aW5nRnVuY3Rpb24tPnkyKCkpKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
bWFwTmluZVBpZWNlSW1hZ2UoQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2Up
Ci17Ci0gICAgLy8gSWYgd2UncmUgYSBwcmltaXRpdmUgdmFsdWUsIHRoZW4gd2UgYXJlICJub25l
IiBhbmQgZG9uJ3QgbmVlZCB0byBhbHRlciB0aGUgZW1wdHkgaW1hZ2UgYXQgYWxsLgotICAgIGlm
ICghdmFsdWUgfHwgdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gUmV0cmlldmUgdGhlIGJvcmRlciBpbWFnZSB2YWx1ZS4KLSAgICBDU1NCb3JkZXJJ
bWFnZVZhbHVlKiBib3JkZXJJbWFnZSA9IHN0YXRpY19jYXN0PENTU0JvcmRlckltYWdlVmFsdWUq
Pih2YWx1ZSk7Ci0gICAgCi0gICAgLy8gU2V0IHRoZSBpbWFnZSAodGhpcyBraWNrcyBvZmYgdGhl
IGxvYWQpLgotICAgIGltYWdlLnNldEltYWdlKHN0eWxlSW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdl
VmFsdWUoKSkpOwotCi0gICAgLy8gU2V0IHVwIGEgbGVuZ3RoIGJveCB0byByZXByZXNlbnQgb3Vy
IGltYWdlIHNsaWNlcy4KLSAgICBMZW5ndGhCb3ggbDsKLSAgICBSZWN0KiByID0gYm9yZGVySW1h
Z2UtPm1faW1hZ2VTbGljZVJlY3QuZ2V0KCk7Ci0gICAgaWYgKHItPnRvcCgpLT5wcmltaXRpdmVU
eXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQotICAgICAgICBsLm1f
dG9wID0gTGVuZ3RoKHItPnRvcCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKLSAgICBl
bHNlCi0gICAgICAgIGwubV90b3AgPSBMZW5ndGgoci0+dG9wKCktPmdldEludFZhbHVlKENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSwgRml4ZWQpOwotICAgIGlmIChyLT5ib3R0b20oKS0+
cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKLSAg
ICAgICAgbC5tX2JvdHRvbSA9IExlbmd0aChyLT5ib3R0b20oKS0+Z2V0RG91YmxlVmFsdWUoKSwg
UGVyY2VudCk7Ci0gICAgZWxzZQotICAgICAgICBsLm1fYm90dG9tID0gTGVuZ3RoKChpbnQpci0+
Ym90dG9tKCktPmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBG
aXhlZCk7Ci0gICAgaWYgKHItPmxlZnQoKS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKLSAgICAgICAgbC5tX2xlZnQgPSBMZW5ndGgoci0+bGVm
dCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKLSAgICBlbHNlCi0gICAgICAgIGwubV9s
ZWZ0ID0gTGVuZ3RoKHItPmxlZnQoKS0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpLCBGaXhlZCk7Ci0gICAgaWYgKHItPnJpZ2h0KCktPnByaW1pdGl2ZVR5cGUoKSA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCi0gICAgICAgIGwubV9yaWdodCA9
IExlbmd0aChyLT5yaWdodCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKLSAgICBlbHNl
Ci0gICAgICAgIGwubV9yaWdodCA9IExlbmd0aChyLT5yaWdodCgpLT5nZXRJbnRWYWx1ZShDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIEZpeGVkKTsKLSAgICBpbWFnZS5zZXRTbGljZXMo
bCk7Ci0KLSAgICAvLyBTZXQgdGhlIGFwcHJvcHJpYXRlIHJ1bGVzIGZvciBzdHJldGNoL3JvdW5k
L3JlcGVhdCBvZiB0aGUgc2xpY2VzCi0gICAgRU5pbmVQaWVjZUltYWdlUnVsZSBob3Jpem9udGFs
UnVsZTsKLSAgICBzd2l0Y2ggKGJvcmRlckltYWdlLT5tX2hvcml6b250YWxTaXplUnVsZSkgewot
ICAgICAgICBjYXNlIENTU1ZhbHVlU3RyZXRjaDoKLSAgICAgICAgICAgIGhvcml6b250YWxSdWxl
ID0gU3RyZXRjaEltYWdlUnVsZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENT
U1ZhbHVlUm91bmQ6Ci0gICAgICAgICAgICBob3Jpem9udGFsUnVsZSA9IFJvdW5kSW1hZ2VSdWxl
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IC8vIENTU1ZhbHVlUmVwZWF0
Ci0gICAgICAgICAgICBob3Jpem9udGFsUnVsZSA9IFJlcGVhdEltYWdlUnVsZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBpbWFnZS5zZXRIb3Jpem9udGFsUnVsZShob3Jpem9udGFs
UnVsZSk7Ci0KLSAgICBFTmluZVBpZWNlSW1hZ2VSdWxlIHZlcnRpY2FsUnVsZTsKLSAgICBzd2l0
Y2ggKGJvcmRlckltYWdlLT5tX3ZlcnRpY2FsU2l6ZVJ1bGUpIHsKLSAgICAgICAgY2FzZSBDU1NW
YWx1ZVN0cmV0Y2g6Ci0gICAgICAgICAgICB2ZXJ0aWNhbFJ1bGUgPSBTdHJldGNoSW1hZ2VSdWxl
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVSb3VuZDoKLSAgICAg
ICAgICAgIHZlcnRpY2FsUnVsZSA9IFJvdW5kSW1hZ2VSdWxlOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6IC8vIENTU1ZhbHVlUmVwZWF0Ci0gICAgICAgICAgICB2ZXJ0aWNh
bFJ1bGUgPSBSZXBlYXRJbWFnZVJ1bGU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
aW1hZ2Uuc2V0VmVydGljYWxSdWxlKHZlcnRpY2FsUnVsZSk7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpCi17Ci0gICAgaWYgKG1fc3R5bGUtPnRl
eHRTaXplQWRqdXN0KCkpCi0gICAgICAgIHJldHVybjsKLSAKLSAgICBGb250RGVzY3JpcHRpb24g
bmV3Rm9udERlc2NyaXB0aW9uKG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKLSAgICBuZXdG
b250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZp
ZWRTaXplKCkpOwotICAgIG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3Jp
cHRpb24pOwotfQotCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrRm9yWm9vbUNoYW5nZShS
ZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKLXsKLSAgICBpZiAo
c3R5bGUtPmVmZmVjdGl2ZVpvb20oKSA9PSBwYXJlbnRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBjaGlsZEZv
bnQgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgRm9udERlc2NyaXB0aW9uIG5ld0Zv
bnREZXNjcmlwdGlvbihjaGlsZEZvbnQpOwotICAgIHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlw
dGlvbiwgY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSk7Ci0gICAgc3R5bGUtPnNldEZvbnREZXNj
cmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwotfQotCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6
OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSkKLXsKLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9u
dCA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgCi0gICAgaWYgKGNoaWxkRm9udC5pc0Fi
c29sdXRlU2l6ZSgpIHx8ICFwYXJlbnRTdHlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29u
c3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250ID0gcGFyZW50U3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpOwotICAgIGlmIChjaGlsZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID09IHBhcmVu
dEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBG
b3Igbm93LCBsdW1wIGFsbCBmYW1pbGllcyBidXQgbW9ub3NwYWNlIHRvZ2V0aGVyLgotICAgIGlm
IChjaGlsZEZvbnQuZ2VuZXJpY0ZhbWlseSgpICE9IEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNl
RmFtaWx5ICYmCi0gICAgICAgIHBhcmVudEZvbnQuZ2VuZXJpY0ZhbWlseSgpICE9IEZvbnREZXNj
cmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBr
bm93IHRoZSBwYXJlbnQgaXMgbW9ub3NwYWNlIG9yIHRoZSBjaGlsZCBpcyBtb25vc3BhY2UsIGFu
ZCB0aGF0IGZvbnQKLSAgICAvLyBzaXplIHdhcyB1bnNwZWNpZmllZC4gIFdlIHdhbnQgdG8gc2Nh
bGUgb3VyIGZvbnQgc2l6ZSBhcyBhcHByb3ByaWF0ZS4KLSAgICAvLyBJZiB0aGUgZm9udCB1c2Vz
IGEga2V5d29yZCBzaXplLCB0aGVuIHdlIHJlZmV0Y2ggZnJvbSB0aGUgdGFibGUgcmF0aGVyIHRo
YW4KLSAgICAvLyBtdWx0aXBseWluZyBieSBvdXIgc2NhbGUgZmFjdG9yLgotICAgIGZsb2F0IHNp
emU7Ci0gICAgaWYgKGNoaWxkRm9udC5rZXl3b3JkU2l6ZSgpKQotICAgICAgICBzaXplID0gZm9u
dFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5tX2RvY3VtZW50LCBDU1NWYWx1ZVh4U21hbGwgKyBj
aGlsZEZvbnQua2V5d29yZFNpemUoKSAtIDEsIGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRTaXpl
KCkpOwotICAgIGVsc2UgewotICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIu
bV9kb2N1bWVudC0+c2V0dGluZ3MoKTsKLSAgICAgICAgZmxvYXQgZml4ZWRTY2FsZUZhY3RvciA9
IHNldHRpbmdzCi0gICAgICAgICAgICA/IHN0YXRpY19jYXN0PGZsb2F0PihzZXR0aW5ncy0+ZGVm
YXVsdEZpeGVkRm9udFNpemUoKSkgLyBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCkKLSAgICAg
ICAgICAgIDogMTsKLSAgICAgICAgc2l6ZSA9IHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0U2l6
ZSgpID8KLSAgICAgICAgICAgICAgICBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpIC8gZml4ZWRT
Y2FsZUZhY3RvciA6Ci0gICAgICAgICAgICAgICAgY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSAq
IGZpeGVkU2NhbGVGYWN0b3I7Ci0gICAgfQotCi0gICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnRE
ZXNjcmlwdGlvbihjaGlsZEZvbnQpOwotICAgIHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlwdGlv
biwgc2l6ZSk7Ci0gICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRp
b24pOwotfQotCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNldEZvbnRTaXplKEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQotewotICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotCi0gICAgYm9vbCB1c2VTVkdab29tUnVsZXMgPSBt
X2VsZW1lbnQgJiYgbV9lbGVtZW50LT5pc1NWR0VsZW1lbnQoKTsKLSAgICBmb250RGVzY3JpcHRp
b24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKG1fY2hl
Y2tlci5tX2RvY3VtZW50LCBtX3N0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0
ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKSk7IAotfQotCi1mbG9hdCBDU1NTdHlsZVNl
bGVjdG9yOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1l
bnQsIFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lm
aWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpCi17Ci0gICAgZmxvYXQgem9vbUZhY3RvciA9
IDEuMGY7Ci0gICAgaWYgKCF1c2VTVkdab29tUnVsZXMpIHsKLSAgICAgICAgem9vbUZhY3RvciA9
IHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAgIGlmIChkb2N1bWVudC0+dmlldygpICYm
IGRvY3VtZW50LT52aWV3KCktPnNob3VsZEFwcGx5VGV4dFpvb20oKSkKLSAgICAgICAgICAgIHpv
b21GYWN0b3IgKj0gZG9jdW1lbnQtPnZpZXcoKS0+dGV4dFpvb21GYWN0b3IoKTsKLSAgICB9Ci0K
LSAgICAvLyBXZSBzdXBwb3J0IHR3byB0eXBlcyBvZiBtaW5pbXVtIGZvbnQgc2l6ZS4gIFRoZSBm
aXJzdCBpcyBhIGhhcmQgb3ZlcnJpZGUgdGhhdCBhcHBsaWVzIHRvCi0gICAgLy8gYWxsIGZvbnRz
LiAgVGhpcyBpcyAibWluU2l6ZS4iICBUaGUgc2Vjb25kIHR5cGUgb2YgbWluaW11bSBmb250IHNp
emUgaXMgYSAic21hcnQgbWluaW11bSIKLSAgICAvLyB0aGF0IGlzIGFwcGxpZWQgb25seSB3aGVu
IHRoZSBXZWIgcGFnZSBjYW4ndCBrbm93IHdoYXQgc2l6ZSBpdCByZWFsbHkgYXNrZWQgZm9yLCBl
LmcuLAotICAgIC8vIHdoZW4gaXQgdXNlcyBsb2dpY2FsIHNpemVzIGxpa2UgInNtYWxsIiBvciBl
eHByZXNzZXMgdGhlIGZvbnQtc2l6ZSBhcyBhIHBlcmNlbnRhZ2Ugb2YKLSAgICAvLyB0aGUgdXNl
cidzIGRlZmF1bHQgZm9udCBzZXR0aW5nLgotCi0gICAgLy8gV2l0aCB0aGUgc21hcnQgbWluaW11
bSwgd2UgbmV2ZXIgd2FudCB0byBnZXQgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIGZvbnQgc2l6
ZSB0byBrZWVwIGZvbnRzIHJlYWRhYmxlLgotICAgIC8vIEhvd2V2ZXIgd2UgYWx3YXlzIGFsbG93
IHRoZSBwYWdlIHRvIHNldCBhbiBleHBsaWNpdCBwaXhlbCBzaXplIHRoYXQgaXMgc21hbGxlciwK
LSAgICAvLyBzaW5jZSBzaXRlcyB3aWxsIG1pcy1yZW5kZXIgb3RoZXJ3aXNlIChlLmcuLCBodHRw
Oi8vd3d3LmdhbWVzcG90LmNvbSB3aXRoIGEgOXB4IG1pbmltdW0pLgotICAgIAotICAgIFNldHRp
bmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5zZXR0aW5ncygpOwotICAgIGlmICghc2V0dGluZ3Mp
Ci0gICAgICAgIHJldHVybiAxLjBmOwotCi0gICAgaW50IG1pblNpemUgPSBzZXR0aW5ncy0+bWlu
aW11bUZvbnRTaXplKCk7Ci0gICAgaW50IG1pbkxvZ2ljYWxTaXplID0gc2V0dGluZ3MtPm1pbmlt
dW1Mb2dpY2FsRm9udFNpemUoKTsKLSAgICBmbG9hdCB6b29tZWRTaXplID0gc3BlY2lmaWVkU2l6
ZSAqIHpvb21GYWN0b3I7Ci0KLSAgICAvLyBBcHBseSB0aGUgaGFyZCBtaW5pbXVtIGZpcnN0LiAg
V2Ugb25seSBhcHBseSB0aGUgaGFyZCBtaW5pbXVtIGlmIGFmdGVyIHpvb21pbmcgd2UncmUgc3Rp
bGwgdG9vIHNtYWxsLgotICAgIGlmICh6b29tZWRTaXplIDwgbWluU2l6ZSkKLSAgICAgICAgem9v
bWVkU2l6ZSA9IG1pblNpemU7Ci0KLSAgICAvLyBOb3cgYXBwbHkgdGhlICJzbWFydCBtaW5pbXVt
LiIgIFRoaXMgbWluaW11bSBpcyBhbHNvIG9ubHkgYXBwbGllZCBpZiB3ZSdyZSBzdGlsbCB0b28g
c21hbGwKLSAgICAvLyBhZnRlciB6b29taW5nLiAgVGhlIGZvbnQgc2l6ZSBtdXN0IGVpdGhlciBi
ZSByZWxhdGl2ZSB0byB0aGUgdXNlciBkZWZhdWx0IG9yIHRoZSBvcmlnaW5hbCBzaXplCi0gICAg
Ly8gbXVzdCBoYXZlIGJlZW4gYWNjZXB0YWJsZS4gIEluIG90aGVyIHdvcmRzLCB3ZSBvbmx5IGFw
cGx5IHRoZSBzbWFydCBtaW5pbXVtIHdoZW5ldmVyIHdlJ3JlIHBvc2l0aXZlCi0gICAgLy8gZG9p
bmcgc28gd29uJ3QgZGlzcnVwdCB0aGUgbGF5b3V0LgotICAgIGlmICh6b29tZWRTaXplIDwgbWlu
TG9naWNhbFNpemUgJiYgKHNwZWNpZmllZFNpemUgPj0gbWluTG9naWNhbFNpemUgfHwgIWlzQWJz
b2x1dGVTaXplKSkKLSAgICAgICAgem9vbWVkU2l6ZSA9IG1pbkxvZ2ljYWxTaXplOwotICAgIAot
ICAgIC8vIEFsc28gY2xhbXAgdG8gYSByZWFzb25hYmxlIG1heGltdW0gdG8gcHJldmVudCBpbnNh
bmUgZm9udCBzaXplcyBmcm9tIGNhdXNpbmcgY3Jhc2hlcyBvbiB2YXJpb3VzCi0gICAgLy8gcGxh
dGZvcm1zIChJJ20gbG9va2luZyBhdCB5b3UsIFdpbmRvd3MuKQotICAgIHJldHVybiBtaW4oMTAw
MDAwMC4wZiwgbWF4KHpvb21lZFNpemUsIDEuMGYpKTsKLX0KLQotY29uc3QgaW50IGZvbnRTaXpl
VGFibGVNYXggPSAxNjsKLWNvbnN0IGludCBmb250U2l6ZVRhYmxlTWluID0gOTsKLWNvbnN0IGlu
dCB0b3RhbEtleXdvcmRzID0gODsKLQotLy8gV2luSUUvTmF2NCB0YWJsZSBmb3IgZm9udCBzaXpl
cy4gIERlc2lnbmVkIHRvIG1hdGNoIHRoZSBsZWdhY3kgZm9udCBtYXBwaW5nIHN5c3RlbSBvZiBI
VE1MLgotc3RhdGljIGNvbnN0IGludCBxdWlya3NGb250U2l6ZVRhYmxlW2ZvbnRTaXplVGFibGVN
YXggLSBmb250U2l6ZVRhYmxlTWluICsgMV1bdG90YWxLZXl3b3Jkc10gPQotewotICAgICAgeyA5
LCAgICA5LCAgICAgOSwgICAgIDksICAgIDExLCAgICAxNCwgICAgMTgsICAgIDI4IH0sCi0gICAg
ICB7IDksICAgIDksICAgICA5LCAgICAxMCwgICAgMTIsICAgIDE1LCAgICAyMCwgICAgMzEgfSwK
LSAgICAgIHsgOSwgICAgOSwgICAgIDksICAgIDExLCAgICAxMywgICAgMTcsICAgIDIyLCAgICAz
NCB9LAotICAgICAgeyA5LCAgICA5LCAgICAxMCwgICAgMTIsICAgIDE0LCAgICAxOCwgICAgMjQs
ICAgIDM3IH0sCi0gICAgICB7IDksICAgIDksICAgIDEwLCAgICAxMywgICAgMTYsICAgIDIwLCAg
ICAyNiwgICAgNDAgfSwgLy8gZml4ZWQgZm9udCBkZWZhdWx0ICgxMykKLSAgICAgIHsgOSwgICAg
OSwgICAgMTEsICAgIDE0LCAgICAxNywgICAgMjEsICAgIDI4LCAgICA0MiB9LAotICAgICAgeyA5
LCAgIDEwLCAgICAxMiwgICAgMTUsICAgIDE3LCAgICAyMywgICAgMzAsICAgIDQ1IH0sCi0gICAg
ICB7IDksICAgMTAsICAgIDEzLCAgICAxNiwgICAgMTgsICAgIDI0LCAgICAzMiwgICAgNDggfSAg
Ly8gcHJvcG9ydGlvbmFsIGZvbnQgZGVmYXVsdCAoMTYpCi19OwotLy8gSFRNTCAgICAgICAxICAg
ICAgMiAgICAgIDMgICAgICA0ICAgICAgNSAgICAgIDYgICAgICA3Ci0vLyBDU1MgIHh4cyAgIHhz
ICAgICBzICAgICAgbSAgICAgIGwgICAgIHhsICAgICB4eGwKLS8vICAgICAgICAgICAgICAgICAg
ICAgICAgICB8Ci0vLyAgICAgICAgICAgICAgICAgICAgICB1c2VyIHByZWYKLQotLy8gU3RyaWN0
IG1vZGUgdGFibGUgbWF0Y2hlcyBNYWNJRSBhbmQgTW96aWxsYSdzIHNldHRpbmdzIGV4YWN0bHku
Ci1zdGF0aWMgY29uc3QgaW50IHN0cmljdEZvbnRTaXplVGFibGVbZm9udFNpemVUYWJsZU1heCAt
IGZvbnRTaXplVGFibGVNaW4gKyAxXVt0b3RhbEtleXdvcmRzXSA9Ci17Ci0gICAgICB7IDksICAg
IDksICAgICA5LCAgICAgOSwgICAgMTEsICAgIDE0LCAgICAxOCwgICAgMjcgfSwKLSAgICAgIHsg
OSwgICAgOSwgICAgIDksICAgIDEwLCAgICAxMiwgICAgMTUsICAgIDIwLCAgICAzMCB9LAotICAg
ICAgeyA5LCAgICA5LCAgICAxMCwgICAgMTEsICAgIDEzLCAgICAxNywgICAgMjIsICAgIDMzIH0s
Ci0gICAgICB7IDksICAgIDksICAgIDEwLCAgICAxMiwgICAgMTQsICAgIDE4LCAgICAyNCwgICAg
MzYgfSwKLSAgICAgIHsgOSwgICAxMCwgICAgMTIsICAgIDEzLCAgICAxNiwgICAgMjAsICAgIDI2
LCAgICAzOSB9LCAvLyBmaXhlZCBmb250IGRlZmF1bHQgKDEzKQotICAgICAgeyA5LCAgIDEwLCAg
ICAxMiwgICAgMTQsICAgIDE3LCAgICAyMSwgICAgMjgsICAgIDQyIH0sCi0gICAgICB7IDksICAg
MTAsICAgIDEzLCAgICAxNSwgICAgMTgsICAgIDIzLCAgICAzMCwgICAgNDUgfSwKLSAgICAgIHsg
OSwgICAxMCwgICAgMTMsICAgIDE2LCAgICAxOCwgICAgMjQsICAgIDMyLCAgICA0OCB9ICAvLyBw
cm9wb3J0aW9uYWwgZm9udCBkZWZhdWx0ICgxNikKLX07Ci0vLyBIVE1MICAgICAgIDEgICAgICAy
ICAgICAgMyAgICAgIDQgICAgICA1ICAgICAgNiAgICAgIDcKLS8vIENTUyAgeHhzICAgeHMgICAg
IHMgICAgICBtICAgICAgbCAgICAgeGwgICAgIHh4bAotLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgIHwKLS8vICAgICAgICAgICAgICAgICAgICAgIHVzZXIgcHJlZgotCi0vLyBGb3IgdmFsdWVz
IG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSB0YWJsZSwgd2UgdXNlIFRvZGQgRmFocm5lcidzIHN1
Z2dlc3RlZCBzY2FsZQotLy8gZmFjdG9ycyBmb3IgZWFjaCBrZXl3b3JkIHZhbHVlLgotc3RhdGlj
IGNvbnN0IGZsb2F0IGZvbnRTaXplRmFjdG9yc1t0b3RhbEtleXdvcmRzXSA9IHsgMC42MGYsIDAu
NzVmLCAwLjg5ZiwgMS4wZiwgMS4yZiwgMS41ZiwgMi4wZiwgMy4wZiB9OwotCi1mbG9hdCBDU1NT
dHlsZVNlbGVjdG9yOjpmb250U2l6ZUZvcktleXdvcmQoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQg
a2V5d29yZCwgYm9vbCBmaXhlZCkKLXsKLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVu
dC0+c2V0dGluZ3MoKTsKLSAgICBpZiAoIXNldHRpbmdzKQotICAgICAgICByZXR1cm4gMS4wZjsK
LQotICAgIGJvb2wgcXVpcmtzTW9kZSA9IGRvY3VtZW50LT5pbkNvbXBhdE1vZGUoKTsKLSAgICBp
bnQgbWVkaXVtU2l6ZSA9IGZpeGVkID8gc2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkg
OiBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCk7Ci0gICAgaWYgKG1lZGl1bVNpemUgPj0gZm9u
dFNpemVUYWJsZU1pbiAmJiBtZWRpdW1TaXplIDw9IGZvbnRTaXplVGFibGVNYXgpIHsKLSAgICAg
ICAgLy8gTG9vayB1cCB0aGUgZW50cnkgaW4gdGhlIHRhYmxlLgotICAgICAgICBpbnQgcm93ID0g
bWVkaXVtU2l6ZSAtIGZvbnRTaXplVGFibGVNaW47Ci0gICAgICAgIGludCBjb2wgPSAoa2V5d29y
ZCAtIENTU1ZhbHVlWHhTbWFsbCk7Ci0gICAgICAgIHJldHVybiBxdWlya3NNb2RlID8gcXVpcmtz
Rm9udFNpemVUYWJsZVtyb3ddW2NvbF0gOiBzdHJpY3RGb250U2l6ZVRhYmxlW3Jvd11bY29sXTsK
LSAgICB9Ci0gICAgCi0gICAgLy8gVmFsdWUgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIHRh
YmxlLiBBcHBseSB0aGUgc2NhbGUgZmFjdG9yIGluc3RlYWQuCi0gICAgZmxvYXQgbWluTG9naWNh
bFNpemUgPSBtYXgoc2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKSwgMSk7Ci0gICAg
cmV0dXJuIG1heChmb250U2l6ZUZhY3RvcnNba2V5d29yZCAtIENTU1ZhbHVlWHhTbWFsbF0qbWVk
aXVtU2l6ZSwgbWluTG9naWNhbFNpemUpOwotfQotCi1mbG9hdCBDU1NTdHlsZVNlbGVjdG9yOjps
YXJnZXJGb250U2l6ZShmbG9hdCBzaXplLCBib29sKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBG
aWd1cmUgb3V0IHdoZXJlIHdlIGZhbGwgaW4gdGhlIHNpemUgcmFuZ2VzICh4eC1zbWFsbCB0byB4
eHgtbGFyZ2UpIGFuZCBzY2FsZSB1cCB0bwotICAgIC8vIHRoZSBuZXh0IHNpemUgbGV2ZWwuICAK
LSAgICByZXR1cm4gc2l6ZSAqIDEuMmY7Ci19Ci0KLWZsb2F0IENTU1N0eWxlU2VsZWN0b3I6OnNt
YWxsZXJGb250U2l6ZShmbG9hdCBzaXplLCBib29sKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBG
aWd1cmUgb3V0IHdoZXJlIHdlIGZhbGwgaW4gdGhlIHNpemUgcmFuZ2VzICh4eC1zbWFsbCB0byB4
eHgtbGFyZ2UpIGFuZCBzY2FsZSBkb3duIHRvCi0gICAgLy8gdGhlIG5leHQgc2l6ZSBsZXZlbC4g
Ci0gICAgcmV0dXJuIHNpemUgLyAxLjJmOwotfQotCi1zdGF0aWMgQ29sb3IgY29sb3JGb3JDU1NW
YWx1ZShpbnQgY3NzVmFsdWVJZCkKLXsKLSAgICBzdHJ1Y3QgQ29sb3JWYWx1ZSB7Ci0gICAgICAg
IGludCBjc3NWYWx1ZUlkOwotICAgICAgICBSR0JBMzIgY29sb3I7Ci0gICAgfTsKLQotICAgIHN0
YXRpYyBjb25zdCBDb2xvclZhbHVlIGNvbG9yVmFsdWVzW10gPSB7Ci0gICAgICAgIHsgQ1NTVmFs
dWVBcXVhLCAweEZGMDBGRkZGIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVCbGFjaywgMHhGRjAwMDAw
MCB9LAotICAgICAgICB7IENTU1ZhbHVlQmx1ZSwgMHhGRjAwMDBGRiB9LAotICAgICAgICB7IENT
U1ZhbHVlRnVjaHNpYSwgMHhGRkZGMDBGRiB9LAotICAgICAgICB7IENTU1ZhbHVlR3JheSwgMHhG
RjgwODA4MCB9LAotICAgICAgICB7IENTU1ZhbHVlR3JlZW4sIDB4RkYwMDgwMDAgIH0sCi0gICAg
ICAgIHsgQ1NTVmFsdWVHcmV5LCAweEZGODA4MDgwIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVMaW1l
LCAweEZGMDBGRjAwIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVNYXJvb24sIDB4RkY4MDAwMDAgfSwK
LSAgICAgICAgeyBDU1NWYWx1ZU5hdnksIDB4RkYwMDAwODAgfSwKLSAgICAgICAgeyBDU1NWYWx1
ZU9saXZlLCAweEZGODA4MDAwICB9LAotICAgICAgICB7IENTU1ZhbHVlT3JhbmdlLCAweEZGRkZB
NTAwIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVQdXJwbGUsIDB4RkY4MDAwODAgfSwKLSAgICAgICAg
eyBDU1NWYWx1ZVJlZCwgMHhGRkZGMDAwMCB9LAotICAgICAgICB7IENTU1ZhbHVlU2lsdmVyLCAw
eEZGQzBDMEMwIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVUZWFsLCAweEZGMDA4MDgwICB9LAotICAg
ICAgICB7IENTU1ZhbHVlVHJhbnNwYXJlbnQsIDB4MDAwMDAwMDAgfSwKLSAgICAgICAgeyBDU1NW
YWx1ZVdoaXRlLCAweEZGRkZGRkZGIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVZZWxsb3csIDB4RkZG
RkZGMDAgfSwKLSAgICAgICAgeyAwLCAwIH0KLSAgICB9OwotCi0gICAgZm9yIChjb25zdCBDb2xv
clZhbHVlKiBjb2wgPSBjb2xvclZhbHVlczsgY29sLT5jc3NWYWx1ZUlkOyArK2NvbCkgewotICAg
ICAgICBpZiAoY29sLT5jc3NWYWx1ZUlkID09IGNzc1ZhbHVlSWQpCi0gICAgICAgICAgICByZXR1
cm4gY29sLT5jb2xvcjsKLSAgICB9Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhl
bWUoKS0+c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7Ci19Ci0KLUNvbG9yIENTU1N0eWxlU2VsZWN0
b3I6OmdldENvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSkKLXsKLSAgICBDb2xvciBjb2w7Ci0gICAgaW50IGlkZW50ID0gcHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCk7Ci0gICAgaWYgKGlkZW50KSB7Ci0gICAgICAgIGlmIChpZGVudCA9PSBD
U1NWYWx1ZVdlYmtpdFRleHQpCi0gICAgICAgICAgICBjb2wgPSBtX2VsZW1lbnQtPmRvY3VtZW50
KCktPnRleHRDb2xvcigpOwotICAgICAgICBlbHNlIGlmIChpZGVudCA9PSBDU1NWYWx1ZVdlYmtp
dExpbmspCi0gICAgICAgICAgICBjb2wgPSBtX2VsZW1lbnQtPmlzTGluaygpICYmIG1fY2hlY2tl
ci5tX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID8gbV9lbGVtZW50LT5kb2N1bWVudCgpLT52aXNp
dGVkTGlua0NvbG9yKCkgOiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xvcigpOwotICAg
ICAgICBlbHNlIGlmIChpZGVudCA9PSBDU1NWYWx1ZVdlYmtpdEFjdGl2ZWxpbmspCi0gICAgICAg
ICAgICBjb2wgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xvcigpOwotICAg
ICAgICBlbHNlIGlmIChpZGVudCA9PSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yKQotICAg
ICAgICAgICAgY29sID0gUmVuZGVyVGhlbWU6OmZvY3VzUmluZ0NvbG9yKCk7Ci0gICAgICAgIGVs
c2UgaWYgKGlkZW50ID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKQotICAgICAgICAgICAgY29sID0g
bV9zdHlsZS0+Y29sb3IoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29sID0gY29sb3JG
b3JDU1NWYWx1ZShpZGVudCk7Ci0gICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0
aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkdCQ09MT1IpCi0gICAgICAgIGNv
bC5zZXRSR0IocHJpbWl0aXZlVmFsdWUtPmdldFJHQkEzMlZhbHVlKCkpOwotICAgIHJldHVybiBj
b2w7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6aGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUo
Y29uc3QgQXRvbWljU3RyaW5nICZhdHRybmFtZSkKLXsKLSAgICByZXR1cm4gbV9zZWxlY3RvckF0
dHJzLmNvbnRhaW5zKGF0dHJuYW1lLmltcGwoKSk7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6YWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlF
eHAqIGV4cHIsIGJvb2wgcmVzdWx0KQotewotICAgIG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1
ZXJ5UmVzdWx0cy5hcHBlbmQobmV3IE1lZGlhUXVlcnlSZXN1bHQoKmV4cHIsIHJlc3VsdCkpOwot
fQotCi1ib29sIENTU1N0eWxlU2VsZWN0b3I6OmFmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgpIGNv
bnN0Ci17Ci0gICAgdW5zaWduZWQgcyA9IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVz
dWx0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHM7IGkrKykgewotICAg
ICAgICBpZiAobV9tZWRpdW0tPmV2YWwoJm1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVz
dWx0c1tpXS0+bV9leHByZXNzaW9uKSAhPSBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJl
c3VsdHNbaV0tPm1fcmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNr
ZXI6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKQotewotICAgIGlmIChtX2xpbmtzQ2hlY2tlZEZv
clZpc2l0ZWRTdGF0ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKE5vZGUq
IG5vZGUgPSBtX2RvY3VtZW50OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
KSB7Ci0gICAgICAgIGlmIChub2RlLT5pc0xpbmsoKSkKLSAgICAgICAgICAgIG5vZGUtPnNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6U2Vs
ZWN0b3JDaGVja2VyOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoKQot
ewotICAgIGlmICghbV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGUuY29udGFpbnModmlzaXRl
ZEhhc2gpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChOb2RlKiBub2RlID0gbV9kb2N1bWVu
dDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgewotICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcqIGF0dHIgPSBsaW5rQXR0cmlidXRlKG5vZGUpOwotICAgICAgICBpZiAo
YXR0ciAmJiB2aXNpdGVkTGlua0hhc2gobV9kb2N1bWVudC0+YmFzZVVSTCgpLCAqYXR0cikgPT0g
dmlzaXRlZEhhc2gpCi0gICAgICAgICAgICBub2RlLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0g
ICAgfQotfQotCi1zdGF0aWMgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldFRy
YW5zZm9ybU9wZXJhdGlvblR5cGUoV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zZm9ybU9w
ZXJhdGlvblR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAg
IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFOwotICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgcmV0dXJu
IFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWDsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgIHJldHVybiBUcmFu
c2Zvcm1PcGVyYXRpb246OlNDQUxFX1k7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICByZXR1cm4gVHJhbnNmb3Jt
T3BlcmF0aW9uOjpTQ0FMRV9aOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpTY2FsZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJh
dGlvbjo6U0NBTEVfM0Q7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjogICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9u
OjpUUkFOU0xBVEU7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5z
bGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb246ICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpU
UkFOU0xBVEVfWDsKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNs
YXRlWVRyYW5zZm9ybU9wZXJhdGlvbjogICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlRS
QU5TTEFURV9ZOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xh
dGVaVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJB
TlNMQVRFX1o7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0
ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFO
U0xBVEVfM0Q7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjogICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RB
VEU7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zv
cm1PcGVyYXRpb246ICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWDsK
LSAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9w
ZXJhdGlvbjogICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9ZOwotICAg
ICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVaVHJhbnNmb3JtT3BlcmF0
aW9uOiAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1o7Ci0gICAgICAg
IGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9u
OiAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfM0Q7Ci0gICAgICAgIGNh
c2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAg
ICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXOwotICAgICAgICBjYXNlIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3WFRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICAgcmV0
dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19YOwotICAgICAgICBjYXNlIFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICAgcmV0dXJuIFRy
YW5zZm9ybU9wZXJhdGlvbjo6U0tFV19ZOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgcmV0dXJuIFRyYW5zZm9y
bU9wZXJhdGlvbjo6TUFUUklYOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJh
dGlvbjo6TUFUUklYXzNEOwotICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpQ
ZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjogICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlv
bjo6UEVSU1BFQ1RJVkU7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlVu
a25vd25UcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9u
OjpOT05FOwotICAgIH0KLSAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOwotfQot
Ci1ib29sIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFs
dWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwg
VHJhbnNmb3JtT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKLXsKLSAgICBmbG9hdCB6b29tRmFj
dG9yID0gc3R5bGUgPyBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpIDogMTsKLQotICAgIFRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBpZiAoaW5WYWx1ZSAmJiAhaW5WYWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19j
YXN0PENTU1ZhbHVlTGlzdCo+KGluVmFsdWUpOwotICAgICAgICB1bnNpZ25lZCBzaXplID0gbGlz
dC0+bGVuZ3RoKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKysp
IHsKLSAgICAgICAgICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKiB2YWwgPSBzdGF0aWNfY2Fz
dDxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSo+KGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
aSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3RW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDApKTsKLSAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAodmFsLT5v
cGVyYXRpb25UeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgICAgICBjYXNlIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAg
ICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3Bl
cmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzeCA9IDEuMDsKLSAgICAgICAg
ICAgICAgICAgICAgZG91YmxlIHN5ID0gMS4wOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFs
LT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5z
Zm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gZmlyc3RWYWx1ZS0+
Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7IAotICAgICAgICAg
ICAgICAgICAgICAgICAgc3ggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmFsLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeSA9IHNlY29uZFZhbHVlLT5nZXREb3Vi
bGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzeDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShzeCwg
c3ksIDEuMCwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh2YWwtPm9wZXJhdGlvblR5cGUoKSkp
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9w
ZXJhdGlvbjoKLSAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpT
Y2FsZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSBz
eCA9IDEuMDsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIHN5ID0gMS4wOwotICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgc3ogPSAxLjA7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWwt
Pm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVaVHJhbnNm
b3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgc3ogPSBmaXJzdFZhbHVlLT5n
ZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwtPm9wZXJh
dGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3Bl
cmF0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLT5nZXREb3Vi
bGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsgCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzeCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodmFsLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh2YWwtPmxlbmd0aCgpID4gMikgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3ogPSB0aGlyZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodmFsLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzeSA9IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3kgPSBzeDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlv
bnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShzeCwgc3ksIHN6LCBn
ZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHZhbC0+b3BlcmF0aW9uVHlwZSgpKSkpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
OgotICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0
ZVhUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAg
ICAgICAgICBib29sIG9rID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIHR4ID0g
TGVuZ3RoKDAsIEZpeGVkKTsKLSAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIHR5ID0gTGVuZ3Ro
KDAsIEZpeGVkKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgp
ID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9u
KQotICAgICAgICAgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9MZW5ndGgoZmlyc3RWYWx1
ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3RvciwgJm9rKTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7IAotICAgICAgICAgICAgICAgICAgICAgICAgdHggPSBjb252ZXJ0VG9MZW5ndGgo
Zmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3RvciwgJm9rKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2YWwtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2YWwtPmxlbmd0aCgpID4gMSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvTGVuZ3RoKHNl
Y29uZFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yLCAmb2spOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmICghb2spCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKHR4LCB0eSwgTGVuZ3RoKDAsIEZpeGVkKSwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh2
YWwtPm9wZXJhdGlvblR5cGUoKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlM0RUcmFuc2Zvcm1PcGVyYXRpb246IHsK
LSAgICAgICAgICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
IExlbmd0aCB0eCA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICAgICAgICAgIExlbmd0
aCB0eSA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICAgICAgICAgIExlbmd0aCB0eiA9
IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPm9wZXJhdGlv
blR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9w
ZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHR6ID0gY29udmVydFRvTGVuZ3RoKGZp
cnN0VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IsICZvayk7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAg
ICAgICAgICAgdHkgPSBjb252ZXJ0VG9MZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHls
ZSwgem9vbUZhY3RvciwgJm9rKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7IAotICAgICAg
ICAgICAgICAgICAgICAgICAgdHggPSBjb252ZXJ0VG9MZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUs
IHJvb3RTdHlsZSwgem9vbUZhY3RvciwgJm9rKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh2YWwtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNs
YXRlWFRyYW5zZm9ybU9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh2YWwtPmxlbmd0aCgpID4gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0VG9MZW5ndGgodGhpcmRWYWx1ZSwgc3R5bGUsIHJv
b3RTdHlsZSwgem9vbUZhY3RvciwgJm9rKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+bGVuZ3RoKCkgPiAxKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgPSBjb252
ZXJ0VG9MZW5ndGgoc2Vjb25kVmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IsICZv
ayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFv
aykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpjcmVhdGUodHgsIHR5LCB0eiwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh2
YWwtPm9wZXJhdGlvblR5cGUoKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUkFEKQotICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSByYWQyZGVnKGFuZ2xl
KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfR1JBRCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFuZ2xlID0gZ3JhZDJkZWcoYW5nbGUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChmaXJzdFZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19U
VVJOKQotICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSB0dXJuMmRlZyhhbmdsZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJh
dGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoMCwgMCwgMSwg
YW5nbGUsIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodmFsLT5vcGVyYXRpb25UeXBlKCkpKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVYVHJhbnNmb3JtT3Bl
cmF0aW9uOgotICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJv
dGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6Um90YXRlWlRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgeCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSB5ID0gMDsK
LSAgICAgICAgICAgICAgICAgICAgZG91YmxlIHogPSAwOwotICAgICAgICAgICAgICAgICAgICBk
b3VibGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUkFEKQotICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSByYWQyZGVnKGFu
Z2xlKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZl
VHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfR1JBRCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGFuZ2xlID0gZ3JhZDJkZWcoYW5nbGUpOwotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpSb3RhdGVYVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAg
ICAgICAgICAgeCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbC0+b3BlcmF0
aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVZVHJhbnNmb3JtT3Bl
cmF0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgeSA9IDE7Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHogPSAxOwotICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUoeCwgeSwgeiwgYW5nbGUsIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodmFs
LT5vcGVyYXRpb25UeXBlKCkpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpSb3RhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiB0aGlyZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpOwotICAgICAgICAgICAgICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZm91cnRoVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSB4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgZG91YmxlIHkgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsK
LSAgICAgICAgICAgICAgICAgICAgZG91YmxlIHogPSB0aGlyZFZhbHVlLT5nZXREb3VibGVWYWx1
ZSgpOwotICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmb3VydGhWYWx1ZS0+Z2V0
RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZvdXJ0aFZhbHVlLT5wcmlt
aXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SQUQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBhbmdsZSA9IHJhZDJkZWcoYW5nbGUpOwotICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChmb3VydGhWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfR1JBRCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlID0gZ3JhZDJkZWcoYW5n
bGUpOwotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoeCwgeSwgeiwgYW5nbGUsIGdldFRyYW5z
Zm9ybU9wZXJhdGlvblR5cGUodmFsLT5vcGVyYXRpb25UeXBlKCkpKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAg
ICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdYVHJhbnNmb3JtT3BlcmF0
aW9uOgotICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZ
VHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZVgg
PSAwOwotICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGVZID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1JBRCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlID0g
cmFkMmRlZyhhbmdsZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZpcnN0VmFsdWUt
PnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0dSQUQpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBhbmdsZSA9IGdyYWQyZGVnKGFuZ2xlKTsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfVFVSTikKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlID0gdHVybjJk
ZWcoYW5nbGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsLT5vcGVyYXRpb25UeXBlKCkg
PT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9uKQotICAg
ICAgICAgICAgICAgICAgICAgICAgYW5nbGVZID0gYW5nbGU7Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVYID0gYW5nbGU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodmFsLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodmFsLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlY29uZFZh
bHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SQUQpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkgPSByYWQyZGVnKGFuZ2xlWSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlY29uZFZhbHVlLT5w
cmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVZID0gZ3JhZDJkZWcoYW5nbGVZKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2Vjb25kVmFsdWUtPnByaW1p
dGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1RVUk4pCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkgPSB0dXJuMmRlZyhhbmdsZVkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlv
bnMoKS5hcHBlbmQoU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlWCwgYW5nbGVZ
LCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHZhbC0+b3BlcmF0aW9uVHlwZSgpKSkpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
OiB7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhID0gZmlyc3RWYWx1ZS0+Z2V0RG91Ymxl
VmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIGIgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSktPmdldERvdWJs
ZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSBjID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpLT5nZXREb3Vi
bGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBkb3VibGUgZCA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0RG91
YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIGUgPSBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg0KSktPmdldERv
dWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSBmID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNSkpLT5nZXRE
b3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMo
KS5hcHBlbmQoTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoYSwgYiwgYywgZCwgZSwg
ZikpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4M0RUcmFuc2Zv
cm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bWF0cml4KHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDApKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDEpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0RG91YmxlVmFsdWUo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKS0+Z2V0RG91
YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDUp
KS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDYpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDcpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDgpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDkpKS0+Z2V0RG91YmxlVmFsdWUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEwKSktPmdldERvdWJs
ZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMSkp
LT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soMTIpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDEzKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxNCkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTUpKS0+Z2V0RG91YmxlVmFsdWUo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChN
YXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJpeCkpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9ICAgCi0gICAgICAgICAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246
IHsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIHAgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVW
YWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAocCA8IDAuMCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
cCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VW5rbm93blRyYW5zZm9y
bU9wZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIG91dE9wZXJhdGlvbnMgPSBvcGVyYXRpb25zOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVj
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShyZXZp
c2lvbiA2MzgyMCkKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwzNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5k
ZWYgQ1NTU3R5bGVTZWxlY3Rvcl9oCi0jZGVmaW5lIENTU1N0eWxlU2VsZWN0b3JfaAotCi0jaW5j
bHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiTGlua0hhc2guaCIKLSNpbmNsdWRl
ICJNZWRpYVF1ZXJ5RXhwLmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJT
dHJpbmdIYXNoLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b247Ci1jbGFzcyBDU1NQYWdlUnVsZTsKLWNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlOwotY2xhc3Mg
Q1NTUHJvcGVydHk7Ci1jbGFzcyBDU1NGb250RmFjZTsKLWNsYXNzIENTU0ZvbnRGYWNlUnVsZTsK
LWNsYXNzIENTU1J1bGVEYXRhOwotY2xhc3MgQ1NTUnVsZURhdGFMaXN0OwotY2xhc3MgQ1NTUnVs
ZUxpc3Q7Ci1jbGFzcyBDU1NSdWxlU2V0OwotY2xhc3MgQ1NTU2VsZWN0b3I7Ci1jbGFzcyBDU1NT
dHlsZVJ1bGU7Ci1jbGFzcyBDU1NTdHlsZVNoZWV0OwotY2xhc3MgQ1NTVmFsdWU7Ci1jbGFzcyBD
U1NWYXJpYWJsZURlcGVuZGVudFZhbHVlOwotY2xhc3MgQ1NTVmFyaWFibGVzUnVsZTsKLWNsYXNz
IERhdGFHcmlkQ29sdW1uOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBFbGVtZW50OwotY2xhc3Mg
RnJhbWU7Ci1jbGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBLVVJMOwotY2xhc3MgS2V5ZnJhbWVMaXN0
OwotY2xhc3MgTWVkaWFRdWVyeUV2YWx1YXRvcjsKLWNsYXNzIE5vZGU7Ci1jbGFzcyBTZXR0aW5n
czsKLWNsYXNzIFN0eWxlSW1hZ2U7Ci1jbGFzcyBTdHlsZVNoZWV0OwotY2xhc3MgU3R5bGVTaGVl
dExpc3Q7Ci1jbGFzcyBTdHlsZWRFbGVtZW50OwotY2xhc3MgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxl
OwotY2xhc3MgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTsKLQotY2xhc3MgTWVkaWFRdWVyeVJlc3Vs
dCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1wdWJsaWM6Ci0gICAgTWVkaWFRdWVyeVJlc3VsdChj
b25zdCBNZWRpYVF1ZXJ5RXhwJiBleHByLCBib29sIHJlc3VsdCkKLSAgICAgICAgOiBtX2V4cHJl
c3Npb24oZXhwcikKLSAgICAgICAgLCBtX3Jlc3VsdChyZXN1bHQpCi0gICAgewotICAgIH0KLQot
ICAgIE1lZGlhUXVlcnlFeHAgbV9leHByZXNzaW9uOwotICAgIGJvb2wgbV9yZXN1bHQ7Ci19Owot
Ci0gICAgLy8gVGhpcyBjbGFzcyBzZWxlY3RzIGEgUmVuZGVyU3R5bGUgZm9yIGEgZ2l2ZW4gZWxl
bWVudCBiYXNlZCBvbiBhIGNvbGxlY3Rpb24gb2Ygc3R5bGVzaGVldHMuCi0gICAgY2xhc3MgQ1NT
U3R5bGVTZWxlY3RvciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci0gICAgcHVibGljOgotICAgICAg
ICBDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiwgU3R5bGVTaGVldExpc3QqIGF1dGhvclNoZWV0
cywgQ1NTU3R5bGVTaGVldCogbWFwcGVkRWxlbWVudFNoZWV0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
Q1NTU3R5bGVTaGVldD4gPiogcGFnZUdyb3VwVXNlclNoZWV0cywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHN0cmljdFBhcnNpbmcsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
KTsKLSAgICAgICAgfkNTU1N0eWxlU2VsZWN0b3IoKTsKLQotICAgICAgICB2b2lkIGluaXRGb3JT
dHlsZVJlc29sdmUoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVk
b0lkID0gTk9QU0VVRE8pOwotICAgICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZv
ckVsZW1lbnQoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9vbCBh
bGxvd1NoYXJpbmcgPSB0cnVlLCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCA9IGZhbHNlLCBi
b29sIG1hdGNoVmlzaXRlZFBzZXVkb0NsYXNzID0gZmFsc2UpOwotICAgICAgICAKLSAgICAgICAg
dm9pZCBrZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5
bGUqLCBLZXlmcmFtZUxpc3QmIGxpc3QpOwotCi0gICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IHBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sIEVsZW1lbnQqIGUsIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIGJvb2wgbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3Mg
PSBmYWxzZSk7Ci0KLSAgICAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JQYWdl
KGludCBwYWdlSW5kZXgpOwotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBzdHlsZUZvckRvY3VtZW50KERvY3VtZW50Kik7Ci0KLSNpZiBFTkFCTEUoREFUQUdSSUQpCi0g
ICAgICAgIC8vIERhdGFncmlkIHN0eWxlIGNvbXB1dGF0aW9uICh1c2VzIHVuaXF1ZSBwc2V1ZG8g
ZWxlbWVudHMgYW5kIHN0cnVjdHVyZXMpCi0gICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IHBzZXVkb1N0eWxlRm9yRGF0YUdyaWRDb2x1bW4oRGF0YUdyaWRDb2x1bW4qLCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpOwotICAgICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9T
dHlsZUZvckRhdGFHcmlkQ29sdW1uSGVhZGVyKERhdGFHcmlkQ29sdW1uKiwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKTsKLSNlbmRpZgotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBpbml0
RWxlbWVudChFbGVtZW50Kik7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBsb2NhdGVTaGFyZWRTdHls
ZSgpOwotICAgICAgICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5z
aWduZWQgZGVwdGggPSAxKTsKLSAgICAgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQo
Tm9kZSopOwotCi0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3R5bGUuZ2V0KCk7IH0KLQotICAgICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZv
cktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxl
KiwgS2V5ZnJhbWVMaXN0Jik7Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIFRoZXNlIG1ldGhv
ZHMgd2lsbCBnaXZlIGJhY2sgdGhlIHNldCBvZiBydWxlcyB0aGF0IG1hdGNoZWQgZm9yIGEgZ2l2
ZW4gZWxlbWVudCAob3IgYSBwc2V1ZG8tZWxlbWVudCkuCi0gICAgICAgIFBhc3NSZWZQdHI8Q1NT
UnVsZUxpc3Q+IHN0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqLCBib29sIGF1dGhvck9ubHkp
OwotICAgICAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxl
bWVudChFbGVtZW50KiwgUHNldWRvSWQsIGJvb2wgYXV0aG9yT25seSk7Ci0KLSAgICAgICAgLy8g
R2l2ZW4gYSBDU1Mga2V5d29yZCBpbiB0aGUgcmFuZ2UgKHh4LXNtYWxsIHRvIC13ZWJraXQteHh4
LWxhcmdlKSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybgotICAgICAgICAvLyB0aGUgY29ycmVj
dCBmb250IHNpemUgc2NhbGVkIHJlbGF0aXZlIHRvIHRoZSB1c2VyJ3MgZGVmYXVsdCAobWVkaXVt
KS4KLSAgICAgICAgc3RhdGljIGZsb2F0IGZvbnRTaXplRm9yS2V5d29yZChEb2N1bWVudCosIGlu
dCBrZXl3b3JkLCBib29sIG1vbm9zcGFjZSk7Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAg
ICAgIC8vIFdoZW4gdGhlIENTUyBrZXl3b3JkICJsYXJnZXIiIGlzIHVzZWQsIHRoaXMgZnVuY3Rp
b24gd2lsbCBhdHRlbXB0IHRvIG1hdGNoIHdpdGhpbiB0aGUga2V5d29yZAotICAgICAgICAvLyB0
YWJsZSwgYW5kIGZhaWxpbmcgdGhhdCwgd2lsbCBzaW1wbHkgbXVsdGlwbHkgYnkgMS4yLgotICAg
ICAgICBmbG9hdCBsYXJnZXJGb250U2l6ZShmbG9hdCBzaXplLCBib29sIHF1aXJrc01vZGUpIGNv
bnN0OwotCi0gICAgICAgIC8vIExpa2UgdGhlIHByZXZpb3VzIGZ1bmN0aW9uLCBidXQgZm9yIHRo
ZSBrZXl3b3JkICJzbWFsbGVyIi4KLSAgICAgICAgZmxvYXQgc21hbGxlckZvbnRTaXplKGZsb2F0
IHNpemUsIGJvb2wgcXVpcmtzTW9kZSkgY29uc3Q7Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHZv
aWQgc2V0U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcykgeyBtX3N0eWxlID0gczsgfSAv
LyBVc2VkIGJ5IHRoZSBkb2N1bWVudCB3aGVuIHNldHRpbmcgdXAgaXRzIHJvb3Qgc3R5bGUuCi0g
ICAgICAgIHZvaWQgc2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7Ci0K
LSAgICAgICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShpbnQgaWQsIENTU1ZhbHVlKiwgUmVu
ZGVyU3R5bGUqKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBmbG9hdCBnZXRDb21w
dXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIFJlbmRlclN0eWxlKiwgYm9vbCBp
c0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMp
OwotCi0gICAgcHVibGljOgotICAgICAgICBDb2xvciBnZXRDb2xvckZyb21QcmltaXRpdmVWYWx1
ZShDU1NQcmltaXRpdmVWYWx1ZSopOwotCi0gICAgICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JBdHRy
aWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0gCi0gICAgICAgIENTU0ZvbnRTZWxlY3Rvciog
Zm9udFNlbGVjdG9yKCkgeyByZXR1cm4gbV9mb250U2VsZWN0b3IuZ2V0KCk7IH0KLQotICAgICAg
ICAvLyBDaGVja3MgaWYgYSBjb21wb3VuZCBzZWxlY3RvciAod2hpY2ggY2FuIGNvbnNpc3Qgb2Yg
bXVsdGlwbGUgc2ltcGxlIHNlbGVjdG9ycykgbWF0Y2hlcyB0aGUgY3VycmVudCBlbGVtZW50Lgot
ICAgICAgICBib29sIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqKTsKLQotICAgICAgICB2b2lk
IGFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhw
KiwgYm9vbCByZXN1bHQpOwotCi0gICAgICAgIGJvb2wgYWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdl
KCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCkgeyBtX2No
ZWNrZXIuYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgpOyB9Ci0gICAgICAgIHZvaWQgdmlzaXRlZFN0
YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNpdGVkSGFzaCkgeyBtX2NoZWNrZXIudmlzaXRlZFN0YXRl
Q2hhbmdlZCh2aXNpdGVkSGFzaCk7IH0KLQotICAgICAgICB2b2lkIGFkZFZhcmlhYmxlcyhDU1NW
YXJpYWJsZXNSdWxlKiB2YXJpYWJsZXMpOwotICAgICAgICBDU1NWYWx1ZSogcmVzb2x2ZVZhcmlh
YmxlRGVwZW5kZW50VmFsdWUoQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSopOwotICAgICAgICB2
b2lkIHJlc29sdmVWYXJpYWJsZXNGb3JEZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiogZGVjbCwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIG5ld0RlY2wsIEhhc2hTZXQ8
U3RyaW5nPiYgdXNlZEJsb2NrVmFyaWFibGVzKTsKLQotICAgICAgICB2b2lkIGFkZEtleWZyYW1l
U3R5bGUoUGFzc1JlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlPiBydWxlKTsKLSAgICAgICAg
dm9pZCBhZGRQYWdlU3R5bGUoUGFzc1JlZlB0cjxDU1NQYWdlUnVsZT4pOwotCi0gICAgICAgIHN0
YXRpYyBib29sIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJl
bmRlclN0eWxlKiBpblN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBUcmFuc2Zvcm1PcGVy
YXRpb25zJiBvdXRPcGVyYXRpb25zKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGVudW0gU2Vs
ZWN0b3JNYXRjaCB7IFNlbGVjdG9yTWF0Y2hlcywgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVj
dG9yRmFpbHNDb21wbGV0ZWx5IH07Ci0KLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBmaXhlcyB1
cCB0aGUgZGVmYXVsdCBmb250IHNpemUgaWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBjdXJyZW50IGdl
bmVyaWMgZm9udCBmYW1pbHkgaGFzIGNoYW5nZWQuIC1kd2gKLSAgICAgICAgdm9pZCBjaGVja0Zv
ckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUpOwotICAgICAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSosIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSk7Ci0gICAgICAgIHZvaWQgY2hlY2tGb3JUZXh0U2l6ZUFkanVz
dCgpOwotCi0gICAgICAgIHZvaWQgYWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqLCBFbGVt
ZW50Kik7Ci0KLSAgICAgICAgdm9pZCBhZGRNYXRjaGVkUnVsZShDU1NSdWxlRGF0YSogcnVsZSkg
eyBtX21hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0KLSAgICAgICAgdm9pZCBhZGRNYXRjaGVk
RGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wpOwotCi0gICAgICAg
IHZvaWQgbWF0Y2hSdWxlcyhDU1NSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBs
YXN0UnVsZUluZGV4KTsKLSAgICAgICAgdm9pZCBtYXRjaFJ1bGVzRm9yTGlzdChDU1NSdWxlRGF0
YUxpc3QqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgpOwotICAgICAg
ICB2b2lkIHNvcnRNYXRjaGVkUnVsZXModW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCk7Ci0K
LSAgICAgICAgdGVtcGxhdGUgPGJvb2wgZmlyc3RQYXNzPgotICAgICAgICB2b2lkIGFwcGx5RGVj
bGFyYXRpb25zKGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4KTsK
LQotICAgICAgICB2b2lkIG1hdGNoUGFnZVJ1bGVzKENTU1J1bGVTZXQqLCBib29sIGlzTGVmdFBh
Z2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwotICAgICAgICB2
b2lkIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChDU1NSdWxlRGF0YUxpc3QqLCBib29sIGlzTGVmdFBh
Z2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwotICAgICAgICBi
b29sIGlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaXNSaWdo
dFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QgeyByZXR1cm4gIWlzTGVmdFBhZ2UocGFnZUluZGV4
KTsgfQotICAgICAgICBib29sIGlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwotICAg
ICAgICBTdHJpbmcgcGFnZU5hbWUoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgICAgIAotICAg
ICAgICBDU1NSdWxlU2V0KiBtX2F1dGhvclN0eWxlOwotICAgICAgICBDU1NSdWxlU2V0KiBtX3Vz
ZXJTdHlsZTsKLQotICAgICAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOwotICAgICAgICBCb3Jk
ZXJEYXRhIG1fYm9yZGVyRGF0YTsKLSAgICAgICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERhdGE7
Ci0gICAgICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwotCi0gICAgICAgIHR5cGVkZWYgSGFz
aE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgUmVmUHRyPFdlYktpdENTU0tleWZyYW1lc1J1bGU+ID4g
S2V5ZnJhbWVzUnVsZU1hcDsKLSAgICAgICAgS2V5ZnJhbWVzUnVsZU1hcCBtX2tleWZyYW1lc1J1
bGVNYXA7Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVO
b3RZZXRBdmFpbGFibGUoKSB7IHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOyB9Ci0KLSAg
ICAgICAgY2xhc3MgU2VsZWN0b3JDaGVja2VyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLSAgICAg
ICAgcHVibGljOgotICAgICAgICAgICAgU2VsZWN0b3JDaGVja2VyKERvY3VtZW50KiwgYm9vbCBz
dHJpY3RQYXJzaW5nKTsKLQotICAgICAgICAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVj
dG9yKiwgRWxlbWVudCopIGNvbnN0OwotICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBjaGVja1Nl
bGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+
KiBzZWxlY3RvckF0dHJzLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVj
dG9yLCBib29sIGVuY291bnRlcmVkTGluaywgUmVuZGVyU3R5bGUqID0gMCwgUmVuZGVyU3R5bGUq
IGVsZW1lbnRQYXJlbnRTdHlsZSA9IDApIGNvbnN0OwotICAgICAgICAgICAgYm9vbCBjaGVja09u
ZVNlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1w
bCo+KiBzZWxlY3RvckF0dHJzLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNl
bGVjdG9yLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNv
bnN0OwotICAgICAgICAgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKENTU1NlbGVj
dG9yKiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0OwotCi0gICAgICAgICAgICBFSW5z
aWRlTGluayBkZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVudCogZWxlbWVudCkgY29uc3Q7Ci0gICAg
ICAgICAgICBFSW5zaWRlTGluayBkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50KiBl
bGVtZW50KSBjb25zdDsKLSAgICAgICAgICAgIHZvaWQgYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgp
OwotICAgICAgICAgICAgdm9pZCB2aXNpdGVkU3RhdGVDaGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRI
YXNoKTsKLQotICAgICAgICAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7Ci0gICAgICAgICAgICBi
b29sIG1fc3RyaWN0UGFyc2luZzsKLSAgICAgICAgICAgIGJvb2wgbV9jb2xsZWN0UnVsZXNPbmx5
OwotICAgICAgICAgICAgUHNldWRvSWQgbV9wc2V1ZG9TdHlsZTsKLSAgICAgICAgICAgIGJvb2wg
bV9kb2N1bWVudElzSFRNTDsKLSAgICAgICAgICAgIG11dGFibGUgYm9vbCBtX21hdGNoVmlzaXRl
ZFBzZXVkb0NsYXNzOwotICAgICAgICAgICAgbXV0YWJsZSBIYXNoU2V0PExpbmtIYXNoLCBMaW5r
SGFzaEhhc2g+IG1fbGlua3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlOwotICAgICAgICB9OwotCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzX3N0eWxlTm90WWV0QXZh
aWxhYmxlOwotCi0gICAgICAgIHZvaWQgaW5pdCgpOwotCi0gICAgICAgIHZvaWQgbWF0Y2hVQVJ1
bGVzKGludCYgZmlyc3RVQVJ1bGUsIGludCYgbGFzdFVBUnVsZSk7Ci0gICAgICAgIHZvaWQgdXBk
YXRlRm9udCgpOwotICAgICAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwotCi0g
ICAgICAgIHZvaWQgbWFwRmlsbEF0dGFjaG1lbnQoRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAg
ICAgICAgdm9pZCBtYXBGaWxsQ2xpcChGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgICAgICB2
b2lkIG1hcEZpbGxDb21wb3NpdGUoRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9p
ZCBtYXBGaWxsT3JpZ2luKEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFw
RmlsbEltYWdlKEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwRmlsbFJl
cGVhdFgoRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBGaWxsUmVwZWF0
WShGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEZpbGxTaXplKEZpbGxM
YXllciosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwRmlsbFhQb3NpdGlvbihGaWxsTGF5
ZXIqLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEZpbGxZUG9zaXRpb24oRmlsbExheWVy
KiwgQ1NTVmFsdWUqKTsKLQotICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbkRlbGF5KEFuaW1hdGlv
biosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1h
dGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uRHVyYXRpb24oQW5p
bWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBBbmltYXRpb25GaWxsTW9kZShB
bmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbkl0ZXJhdGlv
bkNvdW50KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwQW5pbWF0aW9u
TmFtZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEFuaW1hdGlvblBs
YXlTdGF0ZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcEFuaW1hdGlv
blByb3BlcnR5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwQW5pbWF0
aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLQotICAgICAgICB2b2lk
IG1hcE5pbmVQaWVjZUltYWdlKENTU1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKLQotICAgICAg
ICB2b2lkIGFwcGx5UHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIGFw
cGx5UGFnZVNpemVQcm9wZXJ0eShDU1NWYWx1ZSopOwotICAgICAgICBib29sIHBhZ2VTaXplRnJv
bU5hbWUoQ1NTUHJpbWl0aXZlVmFsdWUqLCBDU1NQcmltaXRpdmVWYWx1ZSosIExlbmd0aCYgd2lk
dGgsIExlbmd0aCYgaGVpZ2h0KTsKLSAgICAgICAgTGVuZ3RoIG1tTGVuZ3RoKGRvdWJsZSBtbSk7
Ci0gICAgICAgIExlbmd0aCBpbmNoTGVuZ3RoKGRvdWJsZSBpbmNoKTsKLSNpZiBFTkFCTEUoU1ZH
KQotICAgICAgICB2b2lkIGFwcGx5U1ZHUHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSopOwotI2Vu
ZGlmCi0KLSAgICAgICAgU3R5bGVJbWFnZSogc3R5bGVJbWFnZShDU1NWYWx1ZSogdmFsdWUpOwot
Ci0gICAgICAgIC8vIFdlIGNvbGxlY3QgdGhlIHNldCBvZiBkZWNscyB0aGF0IG1hdGNoIGluIHxt
X21hdGNoZWREZWNsc3wuICBXZSB0aGVuIHdhbGsgdGhlCi0gICAgICAgIC8vIHNldCBvZiBtYXRj
aGVkIGRlY2xzIGZvdXIgdGltZXMsIG9uY2UgZm9yIHRob3NlIHByb3BlcnRpZXMgdGhhdCBvdGhl
cnMgZGVwZW5kIG9uIChsaWtlIGZvbnQtc2l6ZSksCi0gICAgICAgIC8vIGFuZCB0aGVuIGEgc2Vj
b25kIHRpbWUgZm9yIGFsbCB0aGUgcmVtYWluaW5nIHByb3BlcnRpZXMuICBXZSB0aGVuIGRvIHRo
ZSBzYW1lIHR3byBwYXNzZXMKLSAgICAgICAgLy8gZm9yIGFueSAhaW1wb3J0YW50IHJ1bGVzLgot
ICAgICAgICBWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCA2ND4gbV9tYXRjaGVk
RGVjbHM7Ci0KLSAgICAgICAgLy8gQSBidWZmZXIgdXNlZCB0byBob2xkIHRoZSBzZXQgb2YgbWF0
Y2hlZCBydWxlcyBmb3IgYW4gZWxlbWVudCwgYW5kIGEgdGVtcG9yYXJ5IGJ1ZmZlciB1c2VkIGZv
cgotICAgICAgICAvLyBtZXJnZSBzb3J0aW5nLgotICAgICAgICBWZWN0b3I8Q1NTUnVsZURhdGEq
LCAzMj4gbV9tYXRjaGVkUnVsZXM7Ci0KLSAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtX3J1
bGVMaXN0OwotCi0gICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IqIG1fbWVkaXVtOwotICAgICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fcm9vdERlZmF1bHRTdHlsZTsKLQotICAgICAgICBQc2V1
ZG9JZCBtX2R5bmFtaWNQc2V1ZG87Ci0KLSAgICAgICAgU2VsZWN0b3JDaGVja2VyIG1fY2hlY2tl
cjsKLQotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7Ci0gICAgICAgIFJlbmRl
clN0eWxlKiBtX3BhcmVudFN0eWxlOwotICAgICAgICBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVu
dFN0eWxlOwotICAgICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7Ci0gICAgICAgIFN0eWxlZEVsZW1l
bnQqIG1fc3R5bGVkRWxlbWVudDsKLSAgICAgICAgRUluc2lkZUxpbmsgbV9lbGVtZW50TGlua1N0
YXRlOwotICAgICAgICBOb2RlKiBtX3BhcmVudE5vZGU7Ci0gICAgICAgIENTU1ZhbHVlKiBtX2xp
bmVIZWlnaHRWYWx1ZTsKLSAgICAgICAgYm9vbCBtX2ZvbnREaXJ0eTsKLSAgICAgICAgYm9vbCBt
X21hdGNoQXV0aG9yQW5kVXNlclN0eWxlczsKLSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxDU1NG
b250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOwotICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmlu
Z0ltcGwqPiBtX3NlbGVjdG9yQXR0cnM7Ci0gICAgICAgIFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbio+IG1fYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlRGVjbHM7Ci0gICAgICAgIFZl
Y3RvcjxNZWRpYVF1ZXJ5UmVzdWx0Kj4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1
bHRzOwotICAgICAgICAKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENTU1ZhcmlhYmxlc1J1bGUq
PiBtX3ZhcmlhYmxlc01hcDsKLSAgICAgICAgSGFzaE1hcDxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiosIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gPiBtX3Jlc29sdmVkVmFy
aWFibGVzRGVjbGFyYXRpb25zOwotICAgIH07Ci0KLSAgICBjbGFzcyBDU1NSdWxlRGF0YSA6IHB1
YmxpYyBOb25jb3B5YWJsZSB7Ci0gICAgcHVibGljOgotICAgICAgICBDU1NSdWxlRGF0YSh1bnNp
Z25lZCBwb3MsIENTU1N0eWxlUnVsZSogciwgQ1NTU2VsZWN0b3IqIHNlbCwgQ1NTUnVsZURhdGEq
IHByZXYgPSAwKQotICAgICAgICAgICAgOiBtX3Bvc2l0aW9uKHBvcykKLSAgICAgICAgICAgICwg
bV9ydWxlKHIpCi0gICAgICAgICAgICAsIG1fc2VsZWN0b3Ioc2VsKQotICAgICAgICAgICAgLCBt
X25leHQoMCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHByZXYpCi0gICAgICAgICAgICAg
ICAgcHJldi0+bV9uZXh0ID0gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIH5DU1NSdWxlRGF0
YSgpIAotICAgICAgICB7IAotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWduZWQgcG9zaXRpb24o
KSB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0gICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSgpIHsg
cmV0dXJuIG1fcnVsZTsgfQotICAgICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3IoKSB7IHJldHVy
biBtX3NlbGVjdG9yOyB9Ci0gICAgICAgIENTU1J1bGVEYXRhKiBuZXh0KCkgeyByZXR1cm4gbV9u
ZXh0OyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uOwotICAg
ICAgICBDU1NTdHlsZVJ1bGUqIG1fcnVsZTsKLSAgICAgICAgQ1NTU2VsZWN0b3IqIG1fc2VsZWN0
b3I7Ci0gICAgICAgIENTU1J1bGVEYXRhKiBtX25leHQ7Ci0gICAgfTsKLQotICAgIGNsYXNzIENT
U1J1bGVEYXRhTGlzdCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci0gICAgcHVibGljOgotICAgICAg
ICBDU1NSdWxlRGF0YUxpc3QodW5zaWduZWQgcG9zLCBDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1Nl
bGVjdG9yKiBzZWwpCi0gICAgICAgICAgICA6IG1fZmlyc3QobmV3IENTU1J1bGVEYXRhKHBvcywg
cnVsZSwgc2VsKSkKLSAgICAgICAgICAgICwgbV9sYXN0KG1fZmlyc3QpCi0gICAgICAgIHsKLSAg
ICAgICAgfQotCi0gICAgICAgIH5DU1NSdWxlRGF0YUxpc3QoKSAKLSAgICAgICAgeyAKLSAgICAg
ICAgICAgIENTU1J1bGVEYXRhKiBwdHI7Ci0gICAgICAgICAgICBDU1NSdWxlRGF0YSogbmV4dDsK
LSAgICAgICAgICAgIHB0ciA9IG1fZmlyc3Q7Ci0gICAgICAgICAgICB3aGlsZSAocHRyKSB7Ci0g
ICAgICAgICAgICAgICAgbmV4dCA9IHB0ci0+bmV4dCgpOwotICAgICAgICAgICAgICAgIGRlbGV0
ZSBwdHI7Ci0gICAgICAgICAgICAgICAgcHRyID0gbmV4dDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIENTU1J1bGVEYXRhKiBmaXJzdCgpIHsgcmV0dXJuIG1fZmlyc3Q7IH0K
LSAgICAgICAgQ1NTUnVsZURhdGEqIGxhc3QoKSB7IHJldHVybiBtX2xhc3Q7IH0KLQotICAgICAg
ICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBwb3MsIENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0
b3IqIHNlbCkgeyBtX2xhc3QgPSBuZXcgQ1NTUnVsZURhdGEocG9zLCBydWxlLCBzZWwsIG1fbGFz
dCk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIENTU1J1bGVEYXRhKiBtX2ZpcnN0OwotICAg
ICAgICBDU1NSdWxlRGF0YSogbV9sYXN0OwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIENTU1N0eWxlU2VsZWN0b3JfaApJbmRleDogV2ViQ29yZS9jc3MvTWVk
aWFRdWVyeUV2YWx1YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvTWVkaWFRdWVy
eUV2YWx1YXRvci5jcHAJKHJldmlzaW9uIDYzODIwKQorKysgV2ViQ29yZS9jc3MvTWVkaWFRdWVy
eUV2YWx1YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRl
ICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDU1NQcmlt
aXRpdmVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTEzMCw3ICsxMzAsNyBAQCBz
dGF0aWMgYm9vbCBhcHBseVJlc3RyaWN0b3IoTWVkaWFRdWVyeTo6CiAgICAgcmV0dXJuIHIgPT0g
TWVkaWFRdWVyeTo6Tm90ID8gIXZhbHVlIDogdmFsdWU7CiB9CiAKLWJvb2wgTWVkaWFRdWVyeUV2
YWx1YXRvcjo6ZXZhbChjb25zdCBNZWRpYUxpc3QqIG1lZGlhTGlzdCwgQ1NTU3R5bGVTZWxlY3Rv
ciogc3R5bGVTZWxlY3RvcikgY29uc3QKK2Jvb2wgTWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbChj
b25zdCBNZWRpYUxpc3QqIG1lZGlhTGlzdCwgUmVuZGVyU3R5bGVSZXNvbHZlciogc3R5bGVTZWxl
Y3RvcikgY29uc3QKIHsKICAgICBpZiAoIW1lZGlhTGlzdCkKICAgICAgICAgcmV0dXJuIHRydWU7
CkluZGV4OiBXZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCShyZXZpc2lvbiA2MzgyMCkKKysrIFdl
YkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyAr
MzEsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIENTU1N0eWxlU2VsZWN0b3I7CitjbGFzcyBSZW5kZXJTdHlsZVJlc29sdmVyOwog
Y2xhc3MgRnJhbWU7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIE1lZGlhTGlzdDsKQEAgLTc0
LDcgKzc0LDcgQEAgcHVibGljOgogICAgIGJvb2wgbWVkaWFUeXBlTWF0Y2hTcGVjaWZpYyhjb25z
dCBjaGFyKiBtZWRpYVR5cGVUb01hdGNoKSBjb25zdDsKIAogICAgIC8qKiBFdmFsdWF0ZXMgYSBs
aXN0IG9mIG1lZGlhIHF1ZXJpZXMgKi8KLSAgICBib29sIGV2YWwoY29uc3QgTWVkaWFMaXN0Kiwg
Q1NTU3R5bGVTZWxlY3RvciogPSAwKSBjb25zdDsKKyAgICBib29sIGV2YWwoY29uc3QgTWVkaWFM
aXN0KiwgUmVuZGVyU3R5bGVSZXNvbHZlciogPSAwKSBjb25zdDsKIAogICAgIC8qKiBFdmFsdWF0
ZXMgbWVkaWEgcXVlcnkgc3ViZXhwcmVzc2lvbiwgaWUgImFuZCAobWVkaWEtZmVhdHVyZTogdmFs
dWUpIiBwYXJ0ICovCiAgICAgYm9vbCBldmFsKGNvbnN0IE1lZGlhUXVlcnlFeHAqKSBjb25zdDsK
SW5kZXg6IFdlYkNvcmUvY3NzL1JlbmRlclN0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvY3NzL1JlbmRlclN0eWxlUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiA2MzgyMCkJKGZy
b20gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6NjM4MjApCisrKyBXZWJDb3JlL2Nz
cy9SZW5kZXJTdHlsZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3MDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
KyAqICAgICAgICAgICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNh
cmV3b2xmLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFua3Mg
KHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisKKyNpbmNsdWRlICJBdHRyaWJ1dGUu
aCIKKyNpbmNsdWRlICJDU1NCb3JkZXJJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ZvbnRGYWNlUnVsZS5oIgorI2luY2x1ZGUgIkNT
U0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJDU1NNZWRpYVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NQ
YWdlUnVsZS5oIgorI2luY2x1ZGUgIkNTU1BhcnNlci5oIgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2
ZVZhbHVlTWFwcGluZ3MuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVk
ZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKKyNpbmNsdWRl
ICJDU1NTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgorI2luY2x1ZGUg
IkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJD
U1NUaW1pbmdGdW5jdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCisjaW5j
bHVkZSAiQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1ZhcmlhYmxl
c0RlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTVmFyaWFibGVzUnVsZS5oIgorI2luY2x1ZGUg
IkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ291bnRlci5oIgorI2luY2x1ZGUgIkNvdW50ZXJD
b250ZW50LmgiCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRm9udEZh
bWlseVZhbHVlLmgiCisjaW5jbHVkZSAiRm9udFZhbHVlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCisjaW5j
bHVkZSAiS2V5ZnJhbWVMaXN0LmgiCisjaW5jbHVkZSAiTGlua0hhc2guaCIKKyNpbmNsdWRlICJN
YXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbi5oIgorI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgorI2luY2x1ZGUgIk1lZGlhUXVlcnlF
dmFsdWF0b3IuaCIKKyNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJQYWdl
LmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiUGFpci5oIgorI2luY2x1ZGUg
IlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUmVjdC5oIgorI2lu
Y2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclRoZW1l
LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKKyNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgorI2luY2x1ZGUgIlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUg
IlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU2hhZG93VmFsdWUuaCIKKyNp
bmNsdWRlICJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiU3R5bGVDYWNoZWRJ
bWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJTdHls
ZVNoZWV0TGlzdC5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgorI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2lu
Y2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIgorI2luY2x1ZGUg
IldlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgiCisjaW5jbHVkZSAiWE1MTmFtZXMuaCIKKyNpbmNs
dWRlICJsb2FkZXIuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQorI2luY2x1ZGUg
IkRhc2hib2FyZFJlZ2lvbi5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUg
IlhMaW5rTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2VuZGlmCisKKyNpZiBFTkFC
TEUoV01MKQorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFFU
KQorI2luY2x1ZGUgPHF3ZWJoaXN0b3J5aW50ZXJmYWNlLmg+CisjZW5kaWYKKwordXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOworCisvLyAjZGVmaW5lIFNUWUxFX1NIQVJJTkdfU1RBVFMgMQorCisjZGVmaW5lIEhB
TkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKK2lmIChpc0luaGVyaXQpIHsgXAorICAgIG1fc3R5
bGUtPnNldCMjUHJvcChtX3BhcmVudFN0eWxlLT5wcm9wKCkpOyBcCisgICAgcmV0dXJuOyBcCit9
CisKKyNkZWZpbmUgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJvcCkgXAorSEFO
RExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAoraWYgKGlzSW5pdGlhbCkgeyBcCisgICAgbV9zdHls
ZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCisgICAgcmV0dXJu
OyBcCit9CisKKyNkZWZpbmUgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfV0lUSF9WQUxVRShw
cm9wLCBQcm9wLCBWYWx1ZSkgXAorSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAoraWYgKGlz
SW5pdGlhbCkgeyBcCisgICAgbV9zdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFs
IyNWYWx1ZSgpKTtcCisgICAgcmV0dXJuO1wKK30KKworI2RlZmluZSBIQU5ETEVfSU5IRVJJVF9B
TkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKHByb3AsIFByb3ApIFwKK0hBTkRMRV9JTkhFUklUX0FO
RF9JTklUSUFMKHByb3AsIFByb3ApIFwKK2lmIChwcmltaXRpdmVWYWx1ZSkgXAorICAgIG1fc3R5
bGUtPnNldCMjUHJvcCgqcHJpbWl0aXZlVmFsdWUpOworCisjZGVmaW5lIEhBTkRMRV9JTkhFUklU
X0FORF9JTklUSUFMX0FORF9QUklNSVRJVkVfV0lUSF9WQUxVRShwcm9wLCBQcm9wLCBWYWx1ZSkg
XAorSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfV0lUSF9WQUxVRShwcm9wLCBQcm9wLCBWYWx1
ZSkgXAoraWYgKHByaW1pdGl2ZVZhbHVlKSBcCisgICAgbV9zdHlsZS0+c2V0IyNQcm9wKCpwcmlt
aXRpdmVWYWx1ZSk7CisKKyNkZWZpbmUgSEFORExFX0ZJTExfTEFZRVJfSU5IRVJJVF9BTkRfSU5J
VElBTChsYXllclR5cGUsIExheWVyVHlwZSwgcHJvcCwgUHJvcCkgXAoraWYgKGlzSW5oZXJpdCkg
eyBcCisgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSBtX3N0eWxlLT5hY2Nlc3MjI0xheWVyVHlw
ZSMjTGF5ZXJzKCk7IFwKKyAgICBGaWxsTGF5ZXIqIHByZXZDaGlsZCA9IDA7IFwKKyAgICBjb25z
dCBGaWxsTGF5ZXIqIGN1cnJQYXJlbnQgPSBtX3BhcmVudFN0eWxlLT5sYXllclR5cGUjI0xheWVy
cygpOyBcCisgICAgd2hpbGUgKGN1cnJQYXJlbnQgJiYgY3VyclBhcmVudC0+aXMjI1Byb3AjI1Nl
dCgpKSB7IFwKKyAgICAgICAgaWYgKCFjdXJyQ2hpbGQpIHsgXAorICAgICAgICAgICAgLyogTmVl
ZCB0byBtYWtlIGEgbmV3IGxheWVyLiovIFwKKyAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBG
aWxsTGF5ZXIoTGF5ZXJUeXBlIyNGaWxsTGF5ZXIpOyBcCisgICAgICAgICAgICBwcmV2Q2hpbGQt
PnNldE5leHQoY3VyckNoaWxkKTsgXAorICAgICAgICB9IFwKKyAgICAgICAgY3VyckNoaWxkLT5z
ZXQjI1Byb3AoY3VyclBhcmVudC0+cHJvcCgpKTsgXAorICAgICAgICBwcmV2Q2hpbGQgPSBjdXJy
Q2hpbGQ7IFwKKyAgICAgICAgY3VyckNoaWxkID0gcHJldkNoaWxkLT5uZXh0KCk7IFwKKyAgICAg
ICAgY3VyclBhcmVudCA9IGN1cnJQYXJlbnQtPm5leHQoKTsgXAorICAgIH0gXAorICAgIFwKKyAg
ICB3aGlsZSAoY3VyckNoaWxkKSB7IFwKKyAgICAgICAgLyogUmVzZXQgYW55IHJlbWFpbmluZyBs
YXllcnMgdG8gbm90IGhhdmUgdGhlIHByb3BlcnR5IHNldC4gKi8gXAorICAgICAgICBjdXJyQ2hp
bGQtPmNsZWFyIyNQcm9wKCk7IFwKKyAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0
KCk7IFwKKyAgICB9IFwKK30gZWxzZSBpZiAoaXNJbml0aWFsKSB7IFwKKyAgICBGaWxsTGF5ZXIq
IGN1cnJDaGlsZCA9IG1fc3R5bGUtPmFjY2VzcyMjTGF5ZXJUeXBlIyNMYXllcnMoKTsgXAorICAg
IGN1cnJDaGlsZC0+c2V0IyNQcm9wKEZpbGxMYXllcjo6aW5pdGlhbEZpbGwjI1Byb3AoTGF5ZXJU
eXBlIyNGaWxsTGF5ZXIpKTsgXAorICAgIGZvciAoY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0
KCk7IGN1cnJDaGlsZDsgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCkpIFwKKyAgICAgICAg
Y3VyckNoaWxkLT5jbGVhciMjUHJvcCgpOyBcCit9CisKKyNkZWZpbmUgSEFORExFX0ZJTExfTEFZ
RVJfVkFMVUUobGF5ZXJUeXBlLCBMYXllclR5cGUsIHByb3AsIFByb3AsIHZhbHVlKSB7IFwKK0hB
TkRMRV9GSUxMX0xBWUVSX0lOSEVSSVRfQU5EX0lOSVRJQUwobGF5ZXJUeXBlLCBMYXllclR5cGUs
IHByb3AsIFByb3ApIFwKK2lmIChpc0luaGVyaXQgfHwgaXNJbml0aWFsKSBcCisgICAgcmV0dXJu
OyBcCitGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IG1fc3R5bGUtPmFjY2VzcyMjTGF5ZXJUeXBlIyNM
YXllcnMoKTsgXAorRmlsbExheWVyKiBwcmV2Q2hpbGQgPSAwOyBcCitpZiAodmFsdWUtPmlzVmFs
dWVMaXN0KCkpIHsgXAorICAgIC8qIFdhbGsgZWFjaCB2YWx1ZSBhbmQgcHV0IGl0IGludG8gYSBs
YXllciwgY3JlYXRpbmcgbmV3IGxheWVycyBhcyBuZWVkZWQuICovIFwKKyAgICBDU1NWYWx1ZUxp
c3QqIHZhbHVlTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsgXAorICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdmFsdWVMaXN0LT5sZW5ndGgoKTsgaSsrKSB7
IFwKKyAgICAgICAgaWYgKCFjdXJyQ2hpbGQpIHsgXAorICAgICAgICAgICAgLyogTmVlZCB0byBt
YWtlIGEgbmV3IGxheWVyIHRvIGhvbGQgdGhpcyB2YWx1ZSAqLyBcCisgICAgICAgICAgICBjdXJy
Q2hpbGQgPSBuZXcgRmlsbExheWVyKExheWVyVHlwZSMjRmlsbExheWVyKTsgXAorICAgICAgICAg
ICAgcHJldkNoaWxkLT5zZXROZXh0KGN1cnJDaGlsZCk7IFwKKyAgICAgICAgfSBcCisgICAgICAg
IG1hcEZpbGwjI1Byb3AoY3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soaSkpOyBcCisgICAgICAgIHByZXZDaGlsZCA9IGN1cnJDaGlsZDsgXAorICAgICAgICBjdXJy
Q2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgXAorICAgIH0gXAorfSBlbHNlIHsgXAorICAgIG1h
cEZpbGwjI1Byb3AoY3VyckNoaWxkLCB2YWx1ZSk7IFwKKyAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hp
bGQtPm5leHQoKTsgXAorfSBcCit3aGlsZSAoY3VyckNoaWxkKSB7IFwKKyAgICAvKiBSZXNldCBh
bGwgcmVtYWluaW5nIGxheWVycyB0byBub3QgaGF2ZSB0aGUgcHJvcGVydHkgc2V0LiAqLyBcCisg
ICAgY3VyckNoaWxkLT5jbGVhciMjUHJvcCgpOyBcCisgICAgY3VyckNoaWxkID0gY3VyckNoaWxk
LT5uZXh0KCk7IFwKK30gfQorCisjZGVmaW5lIEhBTkRMRV9CQUNLR1JPVU5EX0lOSEVSSVRfQU5E
X0lOSVRJQUwocHJvcCwgUHJvcCkgXAorSEFORExFX0ZJTExfTEFZRVJfSU5IRVJJVF9BTkRfSU5J
VElBTChiYWNrZ3JvdW5kLCBCYWNrZ3JvdW5kLCBwcm9wLCBQcm9wKQorCisjZGVmaW5lIEhBTkRM
RV9CQUNLR1JPVU5EX1ZBTFVFKHByb3AsIFByb3AsIHZhbHVlKSBcCitIQU5ETEVfRklMTF9MQVlF
Ul9WQUxVRShiYWNrZ3JvdW5kLCBCYWNrZ3JvdW5kLCBwcm9wLCBQcm9wLCB2YWx1ZSkKKworI2Rl
ZmluZSBIQU5ETEVfTUFTS19JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKK0hBTkRM
RV9GSUxMX0xBWUVSX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFzaywgTWFzaywgcHJvcCwgUHJvcCkK
KworI2RlZmluZSBIQU5ETEVfTUFTS19WQUxVRShwcm9wLCBQcm9wLCB2YWx1ZSkgXAorSEFORExF
X0ZJTExfTEFZRVJfVkFMVUUobWFzaywgTWFzaywgcHJvcCwgUHJvcCwgdmFsdWUpCisKKyNkZWZp
bmUgSEFORExFX0FOSU1BVElPTl9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKK2lm
IChpc0luaGVyaXQpIHsgXAorICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBtX3N0eWxlLT5hY2Nl
c3NBbmltYXRpb25zKCk7IFwKKyAgICBjb25zdCBBbmltYXRpb25MaXN0KiBwYXJlbnRMaXN0ID0g
bV9wYXJlbnRTdHlsZS0+YW5pbWF0aW9ucygpOyBcCisgICAgc2l6ZV90IGkgPSAwLCBwYXJlbnRT
aXplID0gcGFyZW50TGlzdCA/IHBhcmVudExpc3QtPnNpemUoKSA6IDA7IFwKKyAgICBmb3IgKCA7
IGkgPCBwYXJlbnRTaXplICYmIHBhcmVudExpc3QtPmFuaW1hdGlvbihpKS0+aXMjI1Byb3AjI1Nl
dCgpOyArK2kpIHsgXAorICAgICAgICBpZiAobGlzdC0+c2l6ZSgpIDw9IGkpIFwKKyAgICAgICAg
ICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgpKTsgXAorICAgICAgICBsaXN0LT5h
bmltYXRpb24oaSktPnNldCMjUHJvcChwYXJlbnRMaXN0LT5hbmltYXRpb24oaSktPnByb3AoKSk7
IFwKKyAgICB9IFwKKyAgICBcCisgICAgLyogUmVzZXQgYW55IHJlbWFpbmluZyBhbmltYXRpb25z
IHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICovIFwKKyAgICBmb3IgKCA7IGkgPCBsaXN0
LT5zaXplKCk7ICsraSkgXAorICAgICAgICBsaXN0LT5hbmltYXRpb24oaSktPmNsZWFyIyNQcm9w
KCk7IFwKK30gZWxzZSBpZiAoaXNJbml0aWFsKSB7IFwKKyAgICBBbmltYXRpb25MaXN0KiBsaXN0
ID0gbV9zdHlsZS0+YWNjZXNzQW5pbWF0aW9ucygpOyBcCisgICAgaWYgKGxpc3QtPmlzRW1wdHko
KSkgXAorICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7IFwKKyAgICBs
aXN0LT5hbmltYXRpb24oMCktPnNldCMjUHJvcChBbmltYXRpb246OmluaXRpYWxBbmltYXRpb24j
I1Byb3AoKSk7IFwKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGxpc3QtPnNpemUoKTsgKytp
KSBcCisgICAgICAgIGxpc3QtPmFuaW1hdGlvbigwKS0+Y2xlYXIjI1Byb3AoKTsgXAorfQorCisj
ZGVmaW5lIEhBTkRMRV9BTklNQVRJT05fVkFMVUUocHJvcCwgUHJvcCwgdmFsdWUpIHsgXAorSEFO
RExFX0FOSU1BVElPTl9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKK2lmIChpc0lu
aGVyaXQgfHwgaXNJbml0aWFsKSBcCisgICAgcmV0dXJuOyBcCitBbmltYXRpb25MaXN0KiBsaXN0
ID0gbV9zdHlsZS0+YWNjZXNzQW5pbWF0aW9ucygpOyBcCitzaXplX3QgY2hpbGRJbmRleCA9IDA7
IFwKK2lmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgeyBcCisgICAgLyogV2FsayBlYWNoIHZhbHVl
IGFuZCBwdXQgaXQgaW50byBhbiBhbmltYXRpb24sIGNyZWF0aW5nIG5ldyBhbmltYXRpb25zIGFz
IG5lZWRlZC4gKi8gXAorICAgIENTU1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0gc3RhdGljX2Nhc3Q8
Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOyBcCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCB2YWx1ZUxpc3QtPmxlbmd0aCgpOyBpKyspIHsgXAorICAgICAgICBpZiAoY2hpbGRJbmRleCA8
PSBsaXN0LT5zaXplKCkpIFwKKyAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNy
ZWF0ZSgpKTsgXAorICAgICAgICBtYXBBbmltYXRpb24jI1Byb3AobGlzdC0+YW5pbWF0aW9uKGNo
aWxkSW5kZXgpLCB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOyBcCisgICAg
ICAgICsrY2hpbGRJbmRleDsgXAorICAgIH0gXAorfSBlbHNlIHsgXAorICAgIGlmIChsaXN0LT5p
c0VtcHR5KCkpIFwKKyAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOyBc
CisgICAgbWFwQW5pbWF0aW9uIyNQcm9wKGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFs
dWUpOyBcCisgICAgY2hpbGRJbmRleCA9IDE7IFwKK30gXAorZm9yICggOyBjaGlsZEluZGV4IDwg
bGlzdC0+c2l6ZSgpOyArK2NoaWxkSW5kZXgpIHsgXAorICAgIC8qIFJlc2V0IGFsbCByZW1haW5p
bmcgYW5pbWF0aW9ucyB0byBub3QgaGF2ZSB0aGUgcHJvcGVydHkgc2V0LiAqLyBcCisgICAgbGlz
dC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLT5jbGVhciMjUHJvcCgpOyBcCit9IFwKK30KKworI2Rl
ZmluZSBIQU5ETEVfVFJBTlNJVElPTl9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwK
K2lmIChpc0luaGVyaXQpIHsgXAorICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBtX3N0eWxlLT5h
Y2Nlc3NUcmFuc2l0aW9ucygpOyBcCisgICAgY29uc3QgQW5pbWF0aW9uTGlzdCogcGFyZW50TGlz
dCA9IG1fcGFyZW50U3R5bGUtPnRyYW5zaXRpb25zKCk7IFwKKyAgICBzaXplX3QgaSA9IDAsIHBh
cmVudFNpemUgPSBwYXJlbnRMaXN0ID8gcGFyZW50TGlzdC0+c2l6ZSgpIDogMDsgXAorICAgIGZv
ciAoIDsgaSA8IHBhcmVudFNpemUgJiYgcGFyZW50TGlzdC0+YW5pbWF0aW9uKGkpLT5pcyMjUHJv
cCMjU2V0KCk7ICsraSkgeyBcCisgICAgICAgIGlmIChsaXN0LT5zaXplKCkgPD0gaSkgXAorICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOyBcCisgICAgICAgIGxp
c3QtPmFuaW1hdGlvbihpKS0+c2V0IyNQcm9wKHBhcmVudExpc3QtPmFuaW1hdGlvbihpKS0+cHJv
cCgpKTsgXAorICAgIH0gXAorICAgIFwKKyAgICAvKiBSZXNldCBhbnkgcmVtYWluaW5nIHRyYW5z
aXRpb25zIHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICovIFwKKyAgICBmb3IgKCA7IGkg
PCBsaXN0LT5zaXplKCk7ICsraSkgXAorICAgICAgICBsaXN0LT5hbmltYXRpb24oaSktPmNsZWFy
IyNQcm9wKCk7IFwKK30gZWxzZSBpZiAoaXNJbml0aWFsKSB7IFwKKyAgICBBbmltYXRpb25MaXN0
KiBsaXN0ID0gbV9zdHlsZS0+YWNjZXNzVHJhbnNpdGlvbnMoKTsgXAorICAgIGlmIChsaXN0LT5p
c0VtcHR5KCkpIFwKKyAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOyBc
CisgICAgbGlzdC0+YW5pbWF0aW9uKDApLT5zZXQjI1Byb3AoQW5pbWF0aW9uOjppbml0aWFsQW5p
bWF0aW9uIyNQcm9wKCkpOyBcCisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBsaXN0LT5zaXpl
KCk7ICsraSkgXAorICAgICAgICBsaXN0LT5hbmltYXRpb24oMCktPmNsZWFyIyNQcm9wKCk7IFwK
K30KKworI2RlZmluZSBIQU5ETEVfVFJBTlNJVElPTl9WQUxVRShwcm9wLCBQcm9wLCB2YWx1ZSkg
eyBcCitIQU5ETEVfVFJBTlNJVElPTl9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwK
K2lmIChpc0luaGVyaXQgfHwgaXNJbml0aWFsKSBcCisgICAgcmV0dXJuOyBcCitBbmltYXRpb25M
aXN0KiBsaXN0ID0gbV9zdHlsZS0+YWNjZXNzVHJhbnNpdGlvbnMoKTsgXAorc2l6ZV90IGNoaWxk
SW5kZXggPSAwOyBcCitpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsgXAorICAgIC8qIFdhbGsg
ZWFjaCB2YWx1ZSBhbmQgcHV0IGl0IGludG8gYSB0cmFuc2l0aW9uLCBjcmVhdGluZyBuZXcgYW5p
bWF0aW9ucyBhcyBuZWVkZWQuICovIFwKKyAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHN0
YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsgXAorICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgdmFsdWVMaXN0LT5sZW5ndGgoKTsgaSsrKSB7IFwKKyAgICAgICAgaWYgKGNo
aWxkSW5kZXggPD0gbGlzdC0+c2l6ZSgpKSBcCisgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQW5p
bWF0aW9uOjpjcmVhdGUoKSk7IFwKKyAgICAgICAgbWFwQW5pbWF0aW9uIyNQcm9wKGxpc3QtPmFu
aW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkp
KTsgXAorICAgICAgICArK2NoaWxkSW5kZXg7IFwKKyAgICB9IFwKK30gZWxzZSB7IFwKKyAgICBp
ZiAobGlzdC0+aXNFbXB0eSgpKSBcCisgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNy
ZWF0ZSgpKTsgXAorICAgIG1hcEFuaW1hdGlvbiMjUHJvcChsaXN0LT5hbmltYXRpb24oY2hpbGRJ
bmRleCksIHZhbHVlKTsgXAorICAgIGNoaWxkSW5kZXggPSAxOyBcCit9IFwKK2ZvciAoIDsgY2hp
bGRJbmRleCA8IGxpc3QtPnNpemUoKTsgKytjaGlsZEluZGV4KSB7IFwKKyAgICAvKiBSZXNldCBh
bGwgcmVtYWluaW5nIHRyYW5zaXRpb25zIHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICov
IFwKKyAgICBsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCktPmNsZWFyIyNQcm9wKCk7IFwKK30g
XAorfQorCisjZGVmaW5lIEhBTkRMRV9JTkhFUklUX0NPTkQocHJvcElELCBwcm9wLCBQcm9wKSBc
CitpZiAoaWQgPT0gcHJvcElEKSB7IFwKKyAgICBtX3N0eWxlLT5zZXQjI1Byb3AobV9wYXJlbnRT
dHlsZS0+cHJvcCgpKTsgXAorICAgIHJldHVybjsgXAorfQorICAgIAorI2RlZmluZSBIQU5ETEVf
SU5IRVJJVF9DT05EX1dJVEhfQkFDS1VQKHByb3BJRCwgcHJvcCwgcHJvcEFsdCwgUHJvcCkgXAor
aWYgKGlkID09IHByb3BJRCkgeyBcCisgICAgaWYgKG1fcGFyZW50U3R5bGUtPnByb3AoKS5pc1Zh
bGlkKCkpIFwKKyAgICAgICAgbV9zdHlsZS0+c2V0IyNQcm9wKG1fcGFyZW50U3R5bGUtPnByb3Ao
KSk7IFwKKyAgICBlbHNlIFwKKyAgICAgICAgbV9zdHlsZS0+c2V0IyNQcm9wKG1fcGFyZW50U3R5
bGUtPnByb3BBbHQoKSk7IFwKKyAgICByZXR1cm47IFwKK30KKworI2RlZmluZSBIQU5ETEVfSU5J
VElBTF9DT05EKHByb3BJRCwgUHJvcCkgXAoraWYgKGlkID09IHByb3BJRCkgeyBcCisgICAgbV9z
dHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCisgICAgcmV0
dXJuOyBcCit9CisKKyNkZWZpbmUgSEFORExFX0lOSVRJQUxfQ09ORF9XSVRIX1ZBTFVFKHByb3BJ
RCwgUHJvcCwgVmFsdWUpIFwKK2lmIChpZCA9PSBwcm9wSUQpIHsgXAorICAgIG1fc3R5bGUtPnNl
dCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjVmFsdWUoKSk7IFwKKyAgICByZXR1cm47IFwK
K30KKworY2xhc3MgQ1NTUnVsZVNldCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6Cisg
ICAgQ1NTUnVsZVNldCgpOworICAgIH5DU1NSdWxlU2V0KCk7CisgICAgCisgICAgdHlwZWRlZiBI
YXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBDU1NSdWxlRGF0YUxpc3QqPiBBdG9tUnVsZU1hcDsK
KyAgICAKKyAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgQ1NTU3R5bGVTZWxlY3RvciogPSAwKTsKKworICAgIHZvaWQg
YWRkU3R5bGVSdWxlKFN0eWxlQmFzZSogaXRlbSk7CisgICAgdm9pZCBhZGRSdWxlKENTU1N0eWxl
UnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCk7CisgICAgdm9pZCBhZGRQYWdlUnVsZShDU1NT
dHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpOworICAgIHZvaWQgYWRkVG9SdWxlU2V0
KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwKKyAgICAgICAgICAgICAg
ICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpOworICAgIAorICAg
IENTU1J1bGVEYXRhTGlzdCogZ2V0SURSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIHsgcmV0
dXJuIG1faWRSdWxlcy5nZXQoa2V5KTsgfQorICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0Q2xhc3NS
dWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIG1fY2xhc3NSdWxlcy5nZXQoa2V5
KTsgfQorICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0VGFnUnVsZXMoQXRvbWljU3RyaW5nSW1wbCog
a2V5KSB7IHJldHVybiBtX3RhZ1J1bGVzLmdldChrZXkpOyB9CisgICAgQ1NTUnVsZURhdGFMaXN0
KiBnZXRVbml2ZXJzYWxSdWxlcygpIHsgcmV0dXJuIG1fdW5pdmVyc2FsUnVsZXM7IH0KKyAgICBD
U1NSdWxlRGF0YUxpc3QqIGdldFBhZ2VSdWxlcygpIHsgcmV0dXJuIG1fcGFnZVJ1bGVzOyB9Cisg
ICAgCitwdWJsaWM6CisgICAgQXRvbVJ1bGVNYXAgbV9pZFJ1bGVzOworICAgIEF0b21SdWxlTWFw
IG1fY2xhc3NSdWxlczsKKyAgICBBdG9tUnVsZU1hcCBtX3RhZ1J1bGVzOworICAgIENTU1J1bGVE
YXRhTGlzdCogbV91bml2ZXJzYWxSdWxlczsKKyAgICBDU1NSdWxlRGF0YUxpc3QqIG1fcGFnZVJ1
bGVzOworICAgIHVuc2lnbmVkIG1fcnVsZUNvdW50OworICAgIHVuc2lnbmVkIG1fcGFnZVJ1bGVD
b3VudDsKK307CisKK3N0YXRpYyBDU1NSdWxlU2V0KiBkZWZhdWx0U3R5bGU7CitzdGF0aWMgQ1NT
UnVsZVNldCogZGVmYXVsdFF1aXJrc1N0eWxlOworc3RhdGljIENTU1J1bGVTZXQqIGRlZmF1bHRQ
cmludFN0eWxlOworc3RhdGljIENTU1J1bGVTZXQqIGRlZmF1bHRWaWV3U291cmNlU3R5bGU7Citz
dGF0aWMgQ1NTU3R5bGVTaGVldCogc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQ7CisKK1JlbmRlclN0
eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpzX3N0eWxlTm90WWV0QXZhaWxhYmxlOworCitzdGF0aWMg
dm9pZCBsb2FkRnVsbERlZmF1bHRTdHlsZSgpOworc3RhdGljIHZvaWQgbG9hZFNpbXBsZURlZmF1
bHRTdHlsZSgpOworLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgdG8gdXNlIHNvbWUgbWVjaGFu
aXNtIHRoYXQgZ3VhcmFudGVlcyB0aGlzIGlzIGluIHN5bmMgd2l0aCB0aGUgcmVhbCBVQSBzdHls
ZXNoZWV0Lgorc3RhdGljIGNvbnN0IGNoYXIqIHNpbXBsZVVzZXJBZ2VudFN0eWxlU2hlZXQgPSAi
aHRtbCxib2R5LGRpdntkaXNwbGF5OmJsb2NrfWJvZHl7bWFyZ2luOjhweH1kaXY6Zm9jdXMsc3Bh
bjpmb2N1c3tvdXRsaW5lOmF1dG8gNXB4IC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcn1hOi13ZWJr
aXQtYW55LWxpbmt7Y29sb3I6LXdlYmtpdC1saW5rO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9
YTotd2Via2l0LWFueS1saW5rOmFjdGl2ZXtjb2xvcjotd2Via2l0LWFjdGl2ZWxpbmt9IjsKKwor
c3RhdGljIGJvb2wgZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHlsZShFbGVtZW50KiBlKQor
eworICAgIHJldHVybiBlLT5oYXNUYWdOYW1lKGh0bWxUYWcpIHx8IGUtPmhhc1RhZ05hbWUoYm9k
eVRhZykgfHwgZS0+aGFzVGFnTmFtZShkaXZUYWcpIHx8IGUtPmhhc1RhZ05hbWUoc3BhblRhZykg
fHwgZS0+aGFzVGFnTmFtZShiclRhZykgfHwgZS0+aGFzVGFnTmFtZShhVGFnKTsKK30KKworc3Rh
dGljIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIHNjcmVlbkV2YWwoKQoreworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciwgc3RhdGljU2NyZWVuRXZh
bCwgKCJzY3JlZW4iKSk7CisgICAgcmV0dXJuIHN0YXRpY1NjcmVlbkV2YWw7Cit9CisKK3N0YXRp
YyBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBwcmludEV2YWwoKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciwgc3RhdGljUHJpbnRFdmFsLCAo
InByaW50IikpOworICAgIHJldHVybiBzdGF0aWNQcmludEV2YWw7Cit9CisKK0NTU1N0eWxlU2Vs
ZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvYywgU3R5bGVTaGVldExpc3QqIHN0
eWxlU2hlZXRzLCBDU1NTdHlsZVNoZWV0KiBtYXBwZWRFbGVtZW50U2hlZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQsIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogcGFnZUdyb3VwVXNlclNoZWV0cywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdHJpY3RQYXJzaW5nLCBi
b29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKKyAgICA6IG1fYmFja2dyb3VuZERhdGEoQmFj
a2dyb3VuZEZpbGxMYXllcikKKyAgICAsIG1fY2hlY2tlcihkb2MsIHN0cmljdFBhcnNpbmcpCisg
ICAgLCBtX2VsZW1lbnQoMCkKKyAgICAsIG1fc3R5bGVkRWxlbWVudCgwKQorICAgICwgbV9lbGVt
ZW50TGlua1N0YXRlKE5vdEluc2lkZUxpbmspCisgICAgLCBtX2ZvbnRTZWxlY3RvcihDU1NGb250
U2VsZWN0b3I6OmNyZWF0ZShkb2MpKQoreworICAgIGluaXQoKTsKKyAgICAgICAgCisgICAgbV9t
YXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgPSBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXM7CisgICAg
CisgICAgRWxlbWVudCogcm9vdCA9IGRvYy0+ZG9jdW1lbnRFbGVtZW50KCk7CisKKyAgICBpZiAo
IWRlZmF1bHRTdHlsZSkgeworICAgICAgICBpZiAoIXJvb3QgfHwgZWxlbWVudENhblVzZVNpbXBs
ZURlZmF1bHRTdHlsZShyb290KSkKKyAgICAgICAgICAgIGxvYWRTaW1wbGVEZWZhdWx0U3R5bGUo
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9hZEZ1bGxEZWZhdWx0U3R5bGUoKTsKKyAg
ICB9CisKKyAgICBtX3VzZXJTdHlsZSA9IDA7CisKKyAgICAvLyBjb25zdHJ1Y3QgZG9jdW1lbnQg
cm9vdCBlbGVtZW50IGRlZmF1bHQgc3R5bGUuIHRoaXMgaXMgbmVlZGVkCisgICAgLy8gdG8gZXZh
bHVhdGUgbWVkaWEgcXVlcmllcyB0aGF0IGNvbnRhaW4gcmVsYXRpdmUgY29uc3RyYWludHMsIGxp
a2UgInNjcmVlbiBhbmQgKG1heC13aWR0aDogMTBlbSkiCisgICAgLy8gVGhpcyBpcyBoZXJlIGlu
c3RlYWQgb2YgY29uc3RydWN0b3IsIGJlY2F1c2Ugd2hlbiBjb25zdHJ1Y3RvciBpcyBydW4sCisg
ICAgLy8gZG9jdW1lbnQgZG9lc24ndCBoYXZlIGRvY3VtZW50RWxlbWVudAorICAgIC8vIE5PVEU6
IHRoaXMgYXNzdW1lcyB0aGF0IGVsZW1lbnQgdGhhdCBnZXRzIHBhc3NlZCB0byBzdHlsZUZvckVs
ZW1lbnQgLWNhbGwKKyAgICAvLyBpcyBhbHdheXMgZnJvbSB0aGUgZG9jdW1lbnQgdGhhdCBvd25z
IHRoZSBzdHlsZSBzZWxlY3RvcgorICAgIEZyYW1lVmlldyogdmlldyA9IGRvYy0+dmlldygpOwor
ICAgIGlmICh2aWV3KQorICAgICAgICBtX21lZGl1bSA9IG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9y
KHZpZXctPm1lZGlhVHlwZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fbWVkaXVtID0gbmV3IE1l
ZGlhUXVlcnlFdmFsdWF0b3IoImFsbCIpOworCisgICAgaWYgKHJvb3QpCisgICAgICAgIG1fcm9v
dERlZmF1bHRTdHlsZSA9IHN0eWxlRm9yRWxlbWVudChyb290LCAwLCBmYWxzZSwgdHJ1ZSk7IC8v
IGRvbid0IHJlZiwgYmVjYXVzZSB0aGUgUmVuZGVyU3R5bGUgaXMgYWxsb2NhdGVkIGZyb20gZ2xv
YmFsIGhlYXAKKworICAgIGlmIChtX3Jvb3REZWZhdWx0U3R5bGUgJiYgdmlldykgeworICAgICAg
ICBkZWxldGUgbV9tZWRpdW07CisgICAgICAgIG1fbWVkaXVtID0gbmV3IE1lZGlhUXVlcnlFdmFs
dWF0b3Iodmlldy0+bWVkaWFUeXBlKCksIHZpZXctPmZyYW1lKCksIG1fcm9vdERlZmF1bHRTdHls
ZS5nZXQoKSk7CisgICAgfQorCisgICAgLy8gRklYTUU6IFRoaXMgc3Vja3MhIFRoZSB1c2VyIHNo
ZWV0IGlzIHJlcGFyc2VkIGV2ZXJ5IHRpbWUhCisgICAgaWYgKHBhZ2VVc2VyU2hlZXQgfHwgcGFn
ZUdyb3VwVXNlclNoZWV0cykgeworICAgICAgICBtX3VzZXJTdHlsZSA9IG5ldyBDU1NSdWxlU2V0
KCk7CisgICAgICAgIGlmIChwYWdlVXNlclNoZWV0KQorICAgICAgICAgICAgbV91c2VyU3R5bGUt
PmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VVc2VyU2hlZXQsICptX21lZGl1bSwgdGhpcyk7CisgICAg
ICAgIGlmIChwYWdlR3JvdXBVc2VyU2hlZXRzKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBwYWdlR3JvdXBVc2VyU2hlZXRzLT5zaXplKCk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgbV91c2VyU3R5bGUt
PmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VHcm91cFVzZXJTaGVldHMtPmF0KGkpLmdldCgpLCAqbV9t
ZWRpdW0sIHRoaXMpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gYWRkIHN0eWxlc2hlZXRz
IGZyb20gZG9jdW1lbnQKKyAgICBtX2F1dGhvclN0eWxlID0gbmV3IENTU1J1bGVTZXQoKTsKKyAg
ICAKKyAgICAvLyBBZGQgcnVsZXMgZnJvbSBlbGVtZW50cyBsaWtlIFNWRydzIDxmb250LWZhY2U+
CisgICAgaWYgKG1hcHBlZEVsZW1lbnRTaGVldCkKKyAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRk
UnVsZXNGcm9tU2hlZXQobWFwcGVkRWxlbWVudFNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOworCisg
ICAgdW5zaWduZWQgbGVuZ3RoID0gc3R5bGVTaGVldHMtPmxlbmd0aCgpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBTdHlsZVNoZWV0KiBzaGVl
dCA9IHN0eWxlU2hlZXRzLT5pdGVtKGkpOworICAgICAgICBpZiAoc2hlZXQtPmlzQ1NTU3R5bGVT
aGVldCgpICYmICFzaGVldC0+ZGlzYWJsZWQoKSkKKyAgICAgICAgICAgIG1fYXV0aG9yU3R5bGUt
PmFkZFJ1bGVzRnJvbVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzaGVldCksICpt
X21lZGl1bSwgdGhpcyk7CisgICAgfQorICAgIAorICAgIGlmIChkb2MtPnJlbmRlcmVyKCkgJiYg
ZG9jLT5yZW5kZXJlcigpLT5zdHlsZSgpKQorICAgICAgICBkb2MtPnJlbmRlcmVyKCktPnN0eWxl
KCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOworfQorCisvLyBUaGlzIGlzIGEgc2lt
cGxpZmllZCBzdHlsZSBzZXR0aW5nIGZ1bmN0aW9uIGZvciBrZXlmcmFtZSBzdHlsZXMKK3ZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6YWRkS2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFdlYktpdENTU0tl
eWZyYW1lc1J1bGU+IHJ1bGUpCit7CisgICAgQXRvbWljU3RyaW5nIHMocnVsZS0+bmFtZSgpKTsK
KyAgICBtX2tleWZyYW1lc1J1bGVNYXAuYWRkKHMuaW1wbCgpLCBydWxlKTsKK30KKwordm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjppbml0KCkKK3sKKyAgICBpbml0RWxlbWVudCgwKTsKKyAgICBtX21h
dGNoZWREZWNscy5jbGVhcigpOworICAgIG1fcnVsZUxpc3QgPSAwOworICAgIG1fcm9vdERlZmF1
bHRTdHlsZSA9IDA7CisgICAgbV9tZWRpdW0gPSAwOworfQorCitDU1NTdHlsZVNlbGVjdG9yOjp+
Q1NTU3R5bGVTZWxlY3RvcigpCit7CisgICAgbV9mb250U2VsZWN0b3ItPmNsZWFyRG9jdW1lbnQo
KTsKKyAgICBkZWxldGUgbV9tZWRpdW07CisgICAgZGVsZXRlIG1fYXV0aG9yU3R5bGU7CisgICAg
ZGVsZXRlIG1fdXNlclN0eWxlOworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3ZpZXdwb3J0RGVwZW5k
ZW50TWVkaWFRdWVyeVJlc3VsdHMpOworICAgIG1fa2V5ZnJhbWVzUnVsZU1hcC5jbGVhcigpOwor
fQorCitzdGF0aWMgQ1NTU3R5bGVTaGVldCogcGFyc2VVQVNoZWV0KGNvbnN0IFN0cmluZyYgc3Ry
KQoreworICAgIENTU1N0eWxlU2hlZXQqIHNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKCku
cmVsZWFzZVJlZigpOyAvLyBsZWFrIHRoZSBzaGVldCBvbiBwdXJwb3NlCisgICAgc2hlZXQtPnBh
cnNlU3RyaW5nKHN0cik7CisgICAgcmV0dXJuIHNoZWV0OworfQorCitzdGF0aWMgQ1NTU3R5bGVT
aGVldCogcGFyc2VVQVNoZWV0KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHNpemUp
Cit7CisgICAgcmV0dXJuIHBhcnNlVUFTaGVldChTdHJpbmcoY2hhcmFjdGVycywgc2l6ZSkpOwor
fQorCitzdGF0aWMgdm9pZCBsb2FkRnVsbERlZmF1bHRTdHlsZSgpCit7CisgICAgaWYgKHNpbXBs
ZURlZmF1bHRTdHlsZVNoZWV0KSB7CisgICAgICAgIEFTU0VSVChkZWZhdWx0U3R5bGUpOworICAg
ICAgICBkZWxldGUgZGVmYXVsdFN0eWxlOworICAgICAgICBzaW1wbGVEZWZhdWx0U3R5bGVTaGVl
dC0+ZGVyZWYoKTsKKyAgICAgICAgZGVmYXVsdFN0eWxlID0gbmV3IENTU1J1bGVTZXQ7CisgICAg
ICAgIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0ID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBB
U1NFUlQoIWRlZmF1bHRTdHlsZSk7CisgICAgICAgIGRlZmF1bHRTdHlsZSA9IG5ldyBDU1NSdWxl
U2V0OworICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZSA9IG5ldyBDU1NSdWxlU2V0OworICAgICAg
ICBkZWZhdWx0UXVpcmtzU3R5bGUgPSBuZXcgQ1NTUnVsZVNldDsKKyAgICB9CisKKyAgICAvLyBT
dHJpY3QtbW9kZSBydWxlcy4KKyAgICBTdHJpbmcgZGVmYXVsdFJ1bGVzID0gU3RyaW5nKGh0bWxV
c2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YoaHRtbFVzZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJl
bmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpOworICAg
IENTU1N0eWxlU2hlZXQqIGRlZmF1bHRTaGVldCA9IHBhcnNlVUFTaGVldChkZWZhdWx0UnVsZXMp
OworICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoZGVmYXVsdFNoZWV0LCBzY3Jl
ZW5FdmFsKCkpOworICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChkZWZh
dWx0U2hlZXQsIHByaW50RXZhbCgpKTsKKworICAgIC8vIFF1aXJrcy1tb2RlIHJ1bGVzLgorICAg
IFN0cmluZyBxdWlya3NSdWxlcyA9IFN0cmluZyhxdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0LCBz
aXplb2YocXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OmRlZmF1bHRU
aGVtZSgpLT5leHRyYVF1aXJrc1N0eWxlU2hlZXQoKTsKKyAgICBDU1NTdHlsZVNoZWV0KiBxdWly
a3NTaGVldCA9IHBhcnNlVUFTaGVldChxdWlya3NSdWxlcyk7CisgICAgZGVmYXVsdFF1aXJrc1N0
eWxlLT5hZGRSdWxlc0Zyb21TaGVldChxdWlya3NTaGVldCwgc2NyZWVuRXZhbCgpKTsKK30KKwor
c3RhdGljIHZvaWQgbG9hZFNpbXBsZURlZmF1bHRTdHlsZSgpCit7CisgICAgQVNTRVJUKCFkZWZh
dWx0U3R5bGUpOworICAgIEFTU0VSVCghc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQpOworICAgIAor
ICAgIGRlZmF1bHRTdHlsZSA9IG5ldyBDU1NSdWxlU2V0OworICAgIGRlZmF1bHRQcmludFN0eWxl
ID0gbmV3IENTU1J1bGVTZXQ7CisgICAgZGVmYXVsdFF1aXJrc1N0eWxlID0gbmV3IENTU1J1bGVT
ZXQ7CisKKyAgICBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChzaW1wbGVV
c2VyQWdlbnRTdHlsZVNoZWV0LCBzdHJsZW4oc2ltcGxlVXNlckFnZW50U3R5bGVTaGVldCkpOwor
ICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2ltcGxlRGVmYXVsdFN0eWxlU2hl
ZXQsIHNjcmVlbkV2YWwoKSk7CisgICAgCisgICAgLy8gTm8gbmVlZCB0byBpbml0aWFsaXplIHF1
aXJrcyBzaGVldCB5ZXQgYXMgdGhlcmUgYXJlIG5vIHF1aXJrIHJ1bGVzIGZvciBlbGVtZW50cyBh
bGxvd2VkIGluIHNpbXBsZSBkZWZhdWx0IHN0eWxlLgorfQorICAgIAorc3RhdGljIHZvaWQgbG9h
ZFZpZXdTb3VyY2VTdHlsZSgpCit7CisgICAgQVNTRVJUKCFkZWZhdWx0Vmlld1NvdXJjZVN0eWxl
KTsKKyAgICBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlID0gbmV3IENTU1J1bGVTZXQ7CisgICAgZGVm
YXVsdFZpZXdTb3VyY2VTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFyc2VVQVNoZWV0KHNvdXJj
ZVVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihzb3VyY2VVc2VyQWdlbnRTdHlsZVNoZWV0KSks
IHNjcmVlbkV2YWwoKSk7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERl
Y2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsKQoreworICAgIGlmICgh
ZGVjbC0+aGFzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKSB7CisgICAgICAgIG1fbWF0Y2hlZERl
Y2xzLmFwcGVuZChkZWNsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNlZSBp
ZiB3ZSBoYXZlIGFscmVhZHkgcmVzb2x2ZWQgdGhlIHZhcmlhYmxlcyBpbiB0aGlzIGRlY2xhcmF0
aW9uLgorICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiByZXNvbHZlZERlY2wgPSBtX3Jl
c29sdmVkVmFyaWFibGVzRGVjbGFyYXRpb25zLmdldChkZWNsKS5nZXQoKTsKKyAgICBpZiAocmVz
b2x2ZWREZWNsKSB7CisgICAgICAgIG1fbWF0Y2hlZERlY2xzLmFwcGVuZChyZXNvbHZlZERlY2wp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgdGhpcyBkZWNsYXJhdGlvbiBo
YXMgYW55IHZhcmlhYmxlcyBpbiBpdCwgdGhlbiB3ZSBuZWVkIHRvIG1ha2UgYSBjbG9uZWQKKyAg
ICAvLyBkZWNsYXJhdGlvbiB3aXRoIGFzIG1hbnkgdmFyaWFibGVzIHJlc29sdmVkIGFzIHBvc3Np
YmxlIGZvciB0aGlzIHN0eWxlIHNlbGVjdG9yJ3MgbWVkaWEuCisgICAgUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBuZXdEZWNsID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNyZWF0ZShkZWNsLT5wYXJlbnRSdWxlKCkpOworICAgIG1fbWF0Y2hlZERlY2xzLmFwcGVuZChu
ZXdEZWNsLmdldCgpKTsKKyAgICBtX3Jlc29sdmVkVmFyaWFibGVzRGVjbGFyYXRpb25zLnNldChk
ZWNsLCBuZXdEZWNsKTsKKworICAgIEhhc2hTZXQ8U3RyaW5nPiB1c2VkQmxvY2tWYXJpYWJsZXM7
CisgICAgcmVzb2x2ZVZhcmlhYmxlc0ZvckRlY2xhcmF0aW9uKGRlY2wsIG5ld0RlY2wuZ2V0KCks
IHVzZWRCbG9ja1ZhcmlhYmxlcyk7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6cmVzb2x2
ZVZhcmlhYmxlc0ZvckRlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNs
LCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogbmV3RGVjbCwgSGFzaFNldDxTdHJpbmc+JiB1
c2VkQmxvY2tWYXJpYWJsZXMpCit7CisgICAgLy8gTm93IGl0ZXJhdGUgb3ZlciB0aGUgcHJvcGVy
dGllcyBpbiB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24uICBBcyB3ZSByZXNvbHZlIHZhcmlhYmxl
cyB3ZSdsbCBlbmQgdXAKKyAgICAvLyBtdXRhdGluZyB0aGUgbmV3IGRlY2xhcmF0aW9uIChwb3Nz
aWJseSBleHBhbmRpbmcgc2hvcnRoYW5kcykuICBUaGUgbmV3IGRlY2xhcmF0aW9uIGhhcyBubyBt
X25vZGUKKyAgICAvLyB0aG91Z2gsIHNvIGl0IGNhbid0IG1pc3Rha2VubHkgY2FsbCBzZXRDaGFu
Z2VkIG9uIGFueXRoaW5nLgorICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBkZWNsLT5lbmQoKTsKKyAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IGRlY2wtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgY3VycmVudCA9ICppdDsKKyAgICAgICAg
aWYgKCFjdXJyZW50LnZhbHVlKCktPmlzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpKSB7CisgICAg
ICAgICAgICAvLyBXZSBjYW4ganVzdCBhZGQgdGhlIHBhcnNlZCBwcm9wZXJ0eSBkaXJlY3RseS4K
KyAgICAgICAgICAgIG5ld0RlY2wtPmFkZFBhcnNlZFByb3BlcnR5KGN1cnJlbnQpOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxp
c3QgPSBzdGF0aWNfY2FzdDxDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlKj4oY3VycmVudC52YWx1
ZSgpKS0+dmFsdWVMaXN0KCk7CisgICAgICAgIGlmICghdmFsdWVMaXN0KQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCByZXNvbHZlZFZhbHVlTGlzdDsK
KyAgICAgICAgdW5zaWduZWQgcyA9IHZhbHVlTGlzdC0+bGVuZ3RoKCk7CisgICAgICAgIGJvb2wg
ZnVsbHlSZXNvbHZlZCA9IHRydWU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
OyArK2kpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlKiB2YWwgPSB2YWx1ZUxpc3QtPml0ZW0oaSk7
CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB2YWwtPmlz
UHJpbWl0aXZlVmFsdWUoKSA/IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsKSA6
IDA7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmlz
VmFyaWFibGUoKSkgeworICAgICAgICAgICAgICAgIENTU1ZhcmlhYmxlc1J1bGUqIHJ1bGUgPSBt
X3ZhcmlhYmxlc01hcC5nZXQocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAg
ICAgICAgICAgICAgIGlmICghcnVsZSB8fCAhcnVsZS0+dmFyaWFibGVzKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZnVsbHlSZXNvbHZlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgKGN1cnJlbnQuaWQoKSA9PSBDU1NQcm9wZXJ0eVdlYmtpdFZhcmlhYmxlRGVjbGFyYXRp
b25CbG9jayAmJiBzID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVsbHlSZXNvbHZlZCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZWRCbG9ja1ZhcmlhYmxlcy5jb250
YWlucyhwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsQmxvY2sgPSBydWxlLT52
YXJpYWJsZXMoKS0+Z2V0UGFyc2VkVmFyaWFibGVEZWNsYXJhdGlvbkJsb2NrKHByaW1pdGl2ZVZh
bHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNs
QmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkQmxvY2tWYXJpYWJsZXMu
YWRkKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNvbHZlVmFyaWFibGVzRm9yRGVjbGFyYXRpb24oZGVjbEJsb2NrLCBuZXdE
ZWNsLCB1c2VkQmxvY2tWYXJpYWJsZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Q1NTVmFsdWVMaXN0KiByZXNvbHZlZFZhcmlhYmxlID0gcnVsZS0+dmFyaWFibGVzKCktPmdldFBh
cnNlZFZhcmlhYmxlKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXJlc29sdmVkVmFyaWFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVs
bHlSZXNvbHZlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgdW5zaWduZWQgdmFsdWVTaXplID0gcmVzb2x2ZWRW
YXJpYWJsZS0+bGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsg
aiA8IHZhbHVlU2l6ZTsgKytqKQorICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlTGlz
dC5hZGRWYWx1ZShyZXNvbHZlZFZhcmlhYmxlLT5pdGVtKGopLT5wYXJzZXJWYWx1ZSgpKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJlc29sdmVkVmFsdWVMaXN0LmFkZFZh
bHVlKHZhbC0+cGFyc2VyVmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
ICghZnVsbHlSZXNvbHZlZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIFdl
IG5vdyBoYXZlIGEgZnVsbHkgcmVzb2x2ZWQgbmV3IHZhbHVlIGxpc3QuICBXZSB3YW50IHRoZSBw
YXJzZXIgdG8gdXNlIHRoaXMgdmFsdWUgbGlzdAorICAgICAgICAvLyBhbmQgcGFyc2Ugb3VyIG5l
dyBkZWNsYXJhdGlvbi4KKyAgICAgICAgQ1NTUGFyc2VyKG1fY2hlY2tlci5tX3N0cmljdFBhcnNp
bmcpLnBhcnNlUHJvcGVydHlXaXRoUmVzb2x2ZWRWYXJpYWJsZXMoY3VycmVudC5pZCgpLCBjdXJy
ZW50LmlzSW1wb3J0YW50KCksIG5ld0RlY2wsICZyZXNvbHZlZFZhbHVlTGlzdCk7CisgICAgfQor
fQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoQ1NTUnVsZVNldCogcnVsZXMs
IGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCkKK3sKKyAgICBtX21hdGNo
ZWRSdWxlcy5jbGVhcigpOworCisgICAgaWYgKCFydWxlcyB8fCAhbV9lbGVtZW50KQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgLy8gV2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3Ig
aWQsIGNsYXNzLCB0YWcsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKKyAg
ICAvLyB0aGVuIHNvcnQgdGhlIGJ1ZmZlci4KKyAgICBpZiAobV9lbGVtZW50LT5oYXNJRCgpKQor
ICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0SURSdWxlcyhtX2VsZW1lbnQtPmlk
Rm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5k
ZXgpOworICAgIGlmIChtX2VsZW1lbnQtPmhhc0NsYXNzKCkpIHsKKyAgICAgICAgQVNTRVJUKG1f
c3R5bGVkRWxlbWVudCk7CisgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFt
ZXMgPSBtX3N0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKTsKKyAgICAgICAgc2l6ZV90IHNpemUg
PSBjbGFzc05hbWVzLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyArK2kpCisgICAgICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0Q2xhc3NSdWxl
cyhjbGFzc05hbWVzW2ldLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsK
KyAgICB9CisgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFRhZ1J1bGVzKG1fZWxlbWVu
dC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwor
ICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRVbml2ZXJzYWxSdWxlcygpLCBmaXJzdFJ1
bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CisgICAgCisgICAgLy8gSWYgd2UgZGlkbid0IG1hdGNo
IGFueSBydWxlcywgd2UncmUgZG9uZS4KKyAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gU29ydCB0aGUgc2V0IG9mIG1hdGNoZWQg
cnVsZXMuCisgICAgc29ydE1hdGNoZWRSdWxlcygwLCBtX21hdGNoZWRSdWxlcy5zaXplKCkpOwor
ICAgIAorICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0
byBvdXIgbGlzdCBvZiBkZWNscy4KKyAgICBpZiAoIW1fY2hlY2tlci5tX2NvbGxlY3RSdWxlc09u
bHkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNp
emUoKTsgaSsrKQorICAgICAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKG1fbWF0Y2hlZFJ1
bGVzW2ldLT5ydWxlKCktPmRlY2xhcmF0aW9uKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykgeworICAg
ICAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQorICAgICAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBD
U1NSdWxlTGlzdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBtX3J1bGVMaXN0LT5hcHBlbmQobV9t
YXRjaGVkUnVsZXNbaV0tPnJ1bGUoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QoQ1NTUnVsZURhdGFMaXN0KiBydWxlcywg
aW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4KQoreworICAgIGlmICghcnVs
ZXMpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoQ1NTUnVsZURhdGEqIGQgPSBydWxlcy0+
Zmlyc3QoKTsgZDsgZCA9IGQtPm5leHQoKSkgeworICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUg
PSBkLT5ydWxlKCk7CisgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKGQtPnNlbGVjdG9yKCkpKSB7
CisgICAgICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwg
dGhlbiBpZ25vcmUgaXQuCisgICAgICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiog
ZGVjbCA9IHJ1bGUtPmRlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICBpZiAoIWRlY2wgfHwgIWRl
Y2wtPmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBJZiB3ZSdyZSBtYXRjaGluZyBub3JtYWwgcnVsZXMsIHNldCBhIHBzZXVk
byBiaXQgaWYgCisgICAgICAgICAgICAvLyB3ZSByZWFsbHkganVzdCBtYXRjaGVkIGEgcHNldWRv
LWVsZW1lbnQuCisgICAgICAgICAgICBpZiAobV9keW5hbWljUHNldWRvICE9IE5PUFNFVURPICYm
IG1fY2hlY2tlci5tX3BzZXVkb1N0eWxlID09IE5PUFNFVURPKSB7CisgICAgICAgICAgICAgICAg
aWYgKG1fY2hlY2tlci5tX2NvbGxlY3RSdWxlc09ubHkpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8gPCBGSVJTVF9JTlRF
Uk5BTF9QU0VVRE9JRCkKKyAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0SGFzUHNldWRv
U3R5bGUobV9keW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgLy8gVXBkYXRlIG91ciBmaXJzdC9sYXN0IHJ1bGUgaW5kaWNlcyBpbiB0aGUgbWF0Y2hl
ZCBydWxlcyBhcnJheS4KKyAgICAgICAgICAgICAgICBsYXN0UnVsZUluZGV4ID0gbV9tYXRjaGVk
RGVjbHMuc2l6ZSgpICsgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOworICAgICAgICAgICAgICAgIGlm
IChmaXJzdFJ1bGVJbmRleCA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RSdWxlSW5k
ZXggPSBsYXN0UnVsZUluZGV4OworCisgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgcnVsZSB0
byBvdXIgbGlzdCBvZiBtYXRjaGVkIHJ1bGVzLgorICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRS
dWxlKGQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgYm9v
bCBvcGVyYXRvciA+KENTU1J1bGVEYXRhJiByMSwgQ1NTUnVsZURhdGEmIHIyKQoreworICAgIGlu
dCBzcGVjMSA9IHIxLnNlbGVjdG9yKCktPnNwZWNpZmljaXR5KCk7CisgICAgaW50IHNwZWMyID0g
cjIuc2VsZWN0b3IoKS0+c3BlY2lmaWNpdHkoKTsKKyAgICByZXR1cm4gKHNwZWMxID09IHNwZWMy
KSA/IHIxLnBvc2l0aW9uKCkgPiByMi5wb3NpdGlvbigpIDogc3BlYzEgPiBzcGVjMjsgCit9Cisg
ICAgCitzdGF0aWMgYm9vbCBvcGVyYXRvciA8PShDU1NSdWxlRGF0YSYgcjEsIENTU1J1bGVEYXRh
JiByMikKK3sKKyAgICByZXR1cm4gIShyMSA+IHIyKTsKK30KKwordm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjpzb3J0TWF0Y2hlZFJ1bGVzKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpCit7Cisg
ICAgaWYgKHN0YXJ0ID49IGVuZCB8fCAoZW5kIC0gc3RhcnQgPT0gMSkpCisgICAgICAgIHJldHVy
bjsgLy8gU2FuaXR5IGNoZWNrLgorCisgICAgaWYgKGVuZCAtIHN0YXJ0IDw9IDYpIHsKKyAgICAg
ICAgLy8gQXBwbHkgYSBidWJibGUgc29ydCBmb3Igc21hbGxlciBsaXN0cy4KKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZW5kIC0gMTsgaSA+IHN0YXJ0OyBpLS0pIHsKKyAgICAgICAgICAgIGJv
b2wgc29ydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHN0YXJ0OyBq
IDwgaTsgaisrKSB7CisgICAgICAgICAgICAgICAgQ1NTUnVsZURhdGEqIGVsdCA9IG1fbWF0Y2hl
ZFJ1bGVzW2pdOworICAgICAgICAgICAgICAgIENTU1J1bGVEYXRhKiBlbHQyID0gbV9tYXRjaGVk
UnVsZXNbaiArIDFdOworICAgICAgICAgICAgICAgIGlmICgqZWx0ID4gKmVsdDIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc29ydGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIG1fbWF0
Y2hlZFJ1bGVzW2pdID0gZWx0MjsKKyAgICAgICAgICAgICAgICAgICAgbV9tYXRjaGVkUnVsZXNb
aiArIDFdID0gZWx0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChzb3J0ZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBQZXJmb3JtIGEgbWVyZ2Ugc29ydCBmb3IgbGFy
Z2VyIGxpc3RzLgorICAgIHVuc2lnbmVkIG1pZCA9IChzdGFydCArIGVuZCkgLyAyOworICAgIHNv
cnRNYXRjaGVkUnVsZXMoc3RhcnQsIG1pZCk7CisgICAgc29ydE1hdGNoZWRSdWxlcyhtaWQsIGVu
ZCk7CisgICAgCisgICAgQ1NTUnVsZURhdGEqIGVsdCA9IG1fbWF0Y2hlZFJ1bGVzW21pZCAtIDFd
OworICAgIENTU1J1bGVEYXRhKiBlbHQyID0gbV9tYXRjaGVkUnVsZXNbbWlkXTsKKyAgICAKKyAg
ICAvLyBIYW5kbGUgdGhlIGZhc3QgY29tbW9uIGNhc2UgKG9mIGVxdWFsIHNwZWNpZmljaXR5KS4g
IFRoZSBsaXN0IG1heSBhbHJlYWR5CisgICAgLy8gYmUgY29tcGxldGVseSBzb3J0ZWQuCisgICAg
aWYgKCplbHQgPD0gKmVsdDIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBXZSBoYXZl
IHRvIG1lcmdlIHNvcnQuICBFbnN1cmUgb3VyIG1lcmdlIGJ1ZmZlciBpcyBiaWcgZW5vdWdoIHRv
IGhvbGQKKyAgICAvLyBhbGwgdGhlIGl0ZW1zLgorICAgIFZlY3RvcjxDU1NSdWxlRGF0YSo+IHJ1
bGVzTWVyZ2VCdWZmZXI7CisgICAgcnVsZXNNZXJnZUJ1ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGVuZCAtIHN0YXJ0KTsgCisKKyAgICB1bnNpZ25lZCBpMSA9IHN0YXJ0OworICAgIHVuc2ln
bmVkIGkyID0gbWlkOworICAgIAorICAgIGVsdCA9IG1fbWF0Y2hlZFJ1bGVzW2kxXTsKKyAgICBl
bHQyID0gbV9tYXRjaGVkUnVsZXNbaTJdOworICAgIAorICAgIHdoaWxlIChpMSA8IG1pZCB8fCBp
MiA8IGVuZCkgeworICAgICAgICBpZiAoaTEgPCBtaWQgJiYgKGkyID09IGVuZCB8fCAqZWx0IDw9
ICplbHQyKSkgeworICAgICAgICAgICAgcnVsZXNNZXJnZUJ1ZmZlci5hcHBlbmQoZWx0KTsKKyAg
ICAgICAgICAgIGlmICgrK2kxIDwgbWlkKQorICAgICAgICAgICAgICAgIGVsdCA9IG1fbWF0Y2hl
ZFJ1bGVzW2kxXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJ1bGVzTWVyZ2VCdWZm
ZXIuYXBwZW5kKGVsdDIpOworICAgICAgICAgICAgaWYgKCsraTIgPCBlbmQpCisgICAgICAgICAg
ICAgICAgZWx0MiA9IG1fbWF0Y2hlZFJ1bGVzW2kyXTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKQorICAgICAgICBtX21h
dGNoZWRSdWxlc1tpXSA9IHJ1bGVzTWVyZ2VCdWZmZXJbaSAtIHN0YXJ0XTsKK30KKworaW5saW5l
IEVJbnNpZGVMaW5rIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5l
TGlua1N0YXRlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgaWYgKCFlbGVtZW50IHx8
ICFlbGVtZW50LT5pc0xpbmsoKSkKKyAgICAgICAgcmV0dXJuIE5vdEluc2lkZUxpbms7CisgICAg
cmV0dXJuIGRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKGVsZW1lbnQpOworfQorICAgIAoraW5s
aW5lIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKK3sKKyAg
ICBpZiAobV9lbGVtZW50ICE9IGUpIHsKKyAgICAgICAgbV9lbGVtZW50ID0gZTsKKyAgICAgICAg
bV9zdHlsZWRFbGVtZW50ID0gbV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50
KCkgPyBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obV9lbGVtZW50KSA6IDA7CisgICAgICAg
IG1fZWxlbWVudExpbmtTdGF0ZSA9IG1fY2hlY2tlci5kZXRlcm1pbmVMaW5rU3RhdGUobV9lbGVt
ZW50KTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRGb3JT
dHlsZVJlc29sdmUoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBQc2V1ZG9J
ZCBwc2V1ZG9JRCkKK3sKKyAgICBtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSA9IHBzZXVkb0lEOwor
CisgICAgbV9wYXJlbnROb2RlID0gZSA/IGUtPnBhcmVudE5vZGUoKSA6IDA7CisKKyNpZiBFTkFC
TEUoU1ZHKQorICAgIGlmICghbV9wYXJlbnROb2RlICYmIGUgJiYgZS0+aXNTVkdFbGVtZW50KCkg
JiYgZS0+aXNTaGFkb3dOb2RlKCkpCisgICAgICAgIG1fcGFyZW50Tm9kZSA9IGUtPnNoYWRvd1Bh
cmVudE5vZGUoKTsKKyNlbmRpZgorCisgICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICBtX3Bh
cmVudFN0eWxlID0gcGFyZW50U3R5bGU7CisgICAgZWxzZQorICAgICAgICBtX3BhcmVudFN0eWxl
ID0gbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMDsKKworICAg
IE5vZGUqIGRvY0VsZW1lbnQgPSBlID8gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkg
OiAwOworICAgIFJlbmRlclN0eWxlKiBkb2NTdHlsZSA9IG1fY2hlY2tlci5tX2RvY3VtZW50LT5y
ZW5kZXJTdHlsZSgpOworICAgIG1fcm9vdEVsZW1lbnRTdHlsZSA9IGRvY0VsZW1lbnQgJiYgZSAh
PSBkb2NFbGVtZW50ID8gZG9jRWxlbWVudC0+cmVuZGVyU3R5bGUoKSA6IGRvY1N0eWxlOworCisg
ICAgbV9zdHlsZSA9IDA7CisKKyAgICBtX21hdGNoZWREZWNscy5jbGVhcigpOworCisgICAgbV9y
dWxlTGlzdCA9IDA7CisKKyAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOworfQorCitzdGF0aWMgaW5s
aW5lIGNvbnN0IEF0b21pY1N0cmluZyogbGlua0F0dHJpYnV0ZShOb2RlKiBub2RlKQoreworICAg
IGlmICghbm9kZS0+aXNMaW5rKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgQVNTRVJUKG5v
ZGUtPmlzRWxlbWVudE5vZGUoKSk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKTsKKyAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQorICAg
ICAgICByZXR1cm4gJmVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOworCisjaWYg
RU5BQkxFKFdNTCkKKyAgICBpZiAoZWxlbWVudC0+aXNXTUxFbGVtZW50KCkpIHsKKyAgICAgICAg
Ly8gPGFuY2hvcj4gZWxlbWVudHMgZG9uJ3QgaGF2ZSBocmVmIGF0dHJpYnV0ZXMsIGJ1dCB3ZSBz
dGlsbCB3YW50IHRvCisgICAgICAgIC8vIGFwcGVhciBhcyBsaW5rLCBzbyBsaW5rQXR0cmlidXRl
KCkgaGFzIHRvIHJldHVybiBhIG5vbi1udWxsIHZhbHVlIQorICAgICAgICBpZiAoZWxlbWVudC0+
aGFzVGFnTmFtZShXTUxOYW1lczo6YW5jaG9yVGFnKSkKKyAgICAgICAgICAgIHJldHVybiAmZW1w
dHlBdG9tOworCisgICAgICAgIHJldHVybiAmZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShocmVm
QXR0cik7CisgICAgfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGlmIChlbGVtZW50
LT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuICZlbGVtZW50LT5mYXN0R2V0QXR0cmli
dXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIDA7Cit9CisK
K0NTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2VyKERvY3Vt
ZW50KiBkb2N1bWVudCwgYm9vbCBzdHJpY3RQYXJzaW5nKQorICAgIDogbV9kb2N1bWVudChkb2N1
bWVudCkKKyAgICAsIG1fc3RyaWN0UGFyc2luZyhzdHJpY3RQYXJzaW5nKQorICAgICwgbV9jb2xs
ZWN0UnVsZXNPbmx5KGZhbHNlKQorICAgICwgbV9wc2V1ZG9TdHlsZShOT1BTRVVETykKKyAgICAs
IG1fZG9jdW1lbnRJc0hUTUwoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCisgICAgLCBtX21h
dGNoVmlzaXRlZFBzZXVkb0NsYXNzKGZhbHNlKQoreworfQorCitFSW5zaWRlTGluayBDU1NTdHls
ZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKEVs
ZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGVsZW1lbnQtPmlzTGluaygpKTsK
KyAgICAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcqIGF0dHIgPSBsaW5rQXR0cmlidXRlKGVsZW1l
bnQpOworICAgIGlmICghYXR0ciB8fCBhdHRyLT5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIE5v
dEluc2lkZUxpbms7CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBWZWN0b3I8VUNoYXIsIDUxMj4g
dXJsOworICAgIHZpc2l0ZWRVUkwobV9kb2N1bWVudC0+YmFzZVVSTCgpLCAqYXR0ciwgdXJsKTsK
KyAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExp
bms7CisKKyAgICAvLyBJZiB0aGUgUXQ0LjQgaW50ZXJmYWNlIGZvciB0aGUgaGlzdG9yeSBpcyB1
c2VkLCB3ZSB3aWxsIGhhdmUgdG8gZmFsbGJhY2sKKyAgICAvLyB0byB0aGUgb2xkIGdsb2JhbCBo
aXN0b3J5LgorICAgIFFXZWJIaXN0b3J5SW50ZXJmYWNlKiBpZmFjZSA9IFFXZWJIaXN0b3J5SW50
ZXJmYWNlOjpkZWZhdWx0SW50ZXJmYWNlKCk7CisgICAgaWYgKGlmYWNlKQorICAgICAgICByZXR1
cm4gaWZhY2UtPmhpc3RvcnlDb250YWlucyhRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8UUNoYXIq
Pih1cmwuZGF0YSgpKSwgdXJsLnNpemUoKSkpID8gSW5zaWRlVmlzaXRlZExpbmsgOiBJbnNpZGVV
bnZpc2l0ZWRMaW5rOworCisgICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaCh1cmwu
ZGF0YSgpLCB1cmwuc2l6ZSgpKTsKKyAgICBpZiAoIWhhc2gpCisgICAgICAgIHJldHVybiBJbnNp
ZGVVbnZpc2l0ZWRMaW5rOworI2Vsc2UKKyAgICBMaW5rSGFzaCBoYXNoID0gdmlzaXRlZExpbmtI
YXNoKG1fZG9jdW1lbnQtPmJhc2VVUkwoKSwgKmF0dHIpOworICAgIGlmICghaGFzaCkKKyAgICAg
ICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7CisjZW5kaWYKKworICAgIEZyYW1lKiBmcmFt
ZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJu
IEluc2lkZVVudmlzaXRlZExpbms7CisKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsK
KyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBJbnNpZGVVbnZpc2l0ZWRMaW5rOworCisg
ICAgbV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGUuYWRkKGhhc2gpOworICAgIHJldHVybiBw
YWdlLT5ncm91cCgpLmlzTGlua1Zpc2l0ZWQoaGFzaCkgPyBJbnNpZGVWaXNpdGVkTGluayA6IElu
c2lkZVVudmlzaXRlZExpbms7Cit9CisKK2Jvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JD
aGVja2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGVsZW1lbnQp
IGNvbnN0Cit7CisgICAgUHNldWRvSWQgZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgIHJl
dHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZWxlbWVudCwgMCwgZHluYW1pY1BzZXVkbywgZmFsc2Us
IGZhbHNlKSA9PSBTZWxlY3Rvck1hdGNoZXM7Cit9CisKKyNpZmRlZiBTVFlMRV9TSEFSSU5HX1NU
QVRTCitzdGF0aWMgaW50IGZyYWN0aW9uID0gMDsKK3N0YXRpYyBpbnQgdG90YWwgPSAwOworI2Vu
ZGlmCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgPSAxMDsK
KworTm9kZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJl
bnQsIHVuc2lnbmVkIGRlcHRoKQoreworICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc1N0eWxl
ZEVsZW1lbnQoKSkgeworICAgICAgICBTdHlsZWRFbGVtZW50KiBwID0gc3RhdGljX2Nhc3Q8U3R5
bGVkRWxlbWVudCo+KHBhcmVudCk7CisgICAgICAgIGlmICghcC0+aW5saW5lU3R5bGVEZWNsKCkg
JiYgIXAtPmhhc0lEKCkpIHsKKyAgICAgICAgICAgIE5vZGUqIHIgPSBwLT5wcmV2aW91c1NpYmxp
bmcoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHN1YmNvdW50ID0gMDsKKyAgICAgICAgICAgIFJl
bmRlclN0eWxlKiBzdCA9IHAtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICB3aGlsZSAocikg
eworICAgICAgICAgICAgICAgIGlmIChyLT5yZW5kZXJTdHlsZSgpID09IHN0KQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gci0+bGFzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgaWYgKHN1
YmNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgICAgICByID0gci0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXIgJiYgZGVwdGggPCBjU3R5bGVTZWFyY2hUaHJl
c2hvbGQpCisgICAgICAgICAgICAgICAgciA9IGxvY2F0ZUNvdXNpbkxpc3QocGFyZW50LT5wYXJl
bnRFbGVtZW50KCksIGRlcHRoICsgMSk7CisgICAgICAgICAgICB3aGlsZSAocikgeworICAgICAg
ICAgICAgICAgIGlmIChyLT5yZW5kZXJTdHlsZSgpID09IHN0KQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gci0+bGFzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgaWYgKHN1YmNvdW50Kysg
PT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgICAgICByID0gci0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgQ1NTU3R5bGVTZWxl
Y3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KE5vZGUqIG4pCit7CisgICAgaWYgKG4tPmlz
U3R5bGVkRWxlbWVudCgpKSB7CisgICAgICAgIFN0eWxlZEVsZW1lbnQqIHMgPSBzdGF0aWNfY2Fz
dDxTdHlsZWRFbGVtZW50Kj4obik7CisgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHMtPnJl
bmRlclN0eWxlKCk7CisgICAgICAgIGlmIChzdHlsZSAmJiAhc3R5bGUtPnVuaXF1ZSgpICYmCisg
ICAgICAgICAgICAocy0+dGFnUU5hbWUoKSA9PSBtX2VsZW1lbnQtPnRhZ1FOYW1lKCkpICYmICFz
LT5oYXNJRCgpICYmCisgICAgICAgICAgICAocy0+aGFzQ2xhc3MoKSA9PSBtX2VsZW1lbnQtPmhh
c0NsYXNzKCkpICYmICFzLT5pbmxpbmVTdHlsZURlY2woKSAmJgorICAgICAgICAgICAgKHMtPmhh
c01hcHBlZEF0dHJpYnV0ZXMoKSA9PSBtX3N0eWxlZEVsZW1lbnQtPmhhc01hcHBlZEF0dHJpYnV0
ZXMoKSkgJiYKKyAgICAgICAgICAgIChzLT5pc0xpbmsoKSA9PSBtX2VsZW1lbnQtPmlzTGluaygp
KSAmJiAKKyAgICAgICAgICAgICFzdHlsZS0+YWZmZWN0ZWRCeUF0dHJpYnV0ZVNlbGVjdG9ycygp
ICYmCisgICAgICAgICAgICAocy0+aG92ZXJlZCgpID09IG1fZWxlbWVudC0+aG92ZXJlZCgpKSAm
JgorICAgICAgICAgICAgKHMtPmFjdGl2ZSgpID09IG1fZWxlbWVudC0+YWN0aXZlKCkpICYmCisg
ICAgICAgICAgICAocy0+Zm9jdXNlZCgpID09IG1fZWxlbWVudC0+Zm9jdXNlZCgpKSAmJgorICAg
ICAgICAgICAgKHMgIT0gcy0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkgJiYgbV9lbGVtZW50ICE9
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpICYmCisgICAgICAgICAgICAocy0+
ZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cikgPT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRl
KHR5cGVBdHRyKSkgJiYKKyAgICAgICAgICAgIChzLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVz
OjpsYW5nQXR0cikgPT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5n
QXR0cikpICYmCisgICAgICAgICAgICAocy0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikgPT0g
bV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSkgJiYKKyAgICAgICAgICAgIChz
LT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikgPT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0
cmlidXRlKHJlYWRvbmx5QXR0cikpICYmCisgICAgICAgICAgICAocy0+ZmFzdEdldEF0dHJpYnV0
ZShjZWxscGFkZGluZ0F0dHIpID09IG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShjZWxscGFk
ZGluZ0F0dHIpKSkgeworICAgICAgICAgICAgYm9vbCBpc0NvbnRyb2wgPSBzLT5pc0Zvcm1Db250
cm9sRWxlbWVudCgpOworICAgICAgICAgICAgaWYgKGlzQ29udHJvbCAhPSBtX2VsZW1lbnQtPmlz
Rm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgaWYgKGlzQ29udHJvbCkgeworICAgICAgICAgICAgICAgIElucHV0RWxlbWVudCog
dGhpc0lucHV0RWxlbWVudCA9IHRvSW5wdXRFbGVtZW50KHMpOworICAgICAgICAgICAgICAgIElu
cHV0RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQgPSB0b0lucHV0RWxlbWVudChtX2VsZW1lbnQp
OworICAgICAgICAgICAgICAgIGlmICh0aGlzSW5wdXRFbGVtZW50ICYmIG90aGVySW5wdXRFbGVt
ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgodGhpc0lucHV0RWxlbWVudC0+aXNBdXRv
ZmlsbGVkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmlzQXV0b2ZpbGxlZCgpKSB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAgKHRoaXNJbnB1dEVsZW1lbnQtPmlzQ2hlY2tlZCgpICE9IG90aGVy
SW5wdXRFbGVtZW50LT5pc0NoZWNrZWQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICh0
aGlzSW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+
aXNJbmRldGVybWluYXRlKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICAgICAgICAgIGlmIChzLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpICE9IG1fZWxl
bWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICAgICAgaWYgKHMtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0o
KSAhPSBtX2VsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
ICghbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgYm9vbCB3aWxsVmFsaWRhdGUgPSBzLT53aWxsVmFsaWRhdGUoKTsKKyAgICAg
ICAgICAgICAgICBpZiAod2lsbFZhbGlkYXRlICE9IG1fZWxlbWVudC0+d2lsbFZhbGlkYXRlKCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAod2lsbFZhbGlkYXRlICYmIChzLT5pc1ZhbGlkRm9ybUNvbnRyb2xF
bGVtZW50KCkgIT0gbV9lbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChzdHlsZS0+dHJhbnNpdGlvbnMoKSB8fCBzdHlsZS0+YW5pbWF0aW9ucygpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgYm9vbCBjbGFzc2VzTWF0
Y2ggPSB0cnVlOworICAgICAgICAgICAgaWYgKHMtPmhhc0NsYXNzKCkpIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNsYXNzMSA9IG1fZWxlbWVudC0+ZmFzdEdldEF0dHJp
YnV0ZShjbGFzc0F0dHIpOworICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xh
c3MyID0gcy0+ZmFzdEdldEF0dHJpYnV0ZShjbGFzc0F0dHIpOworICAgICAgICAgICAgICAgIGNs
YXNzZXNNYXRjaCA9IChjbGFzczEgPT0gY2xhc3MyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKGNsYXNzZXNNYXRjaCkgeworICAgICAgICAgICAgICAgIGJv
b2wgbWFwcGVkQXR0cnNNYXRjaCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKHMtPmhhc01h
cHBlZEF0dHJpYnV0ZXMoKSkKKyAgICAgICAgICAgICAgICAgICAgbWFwcGVkQXR0cnNNYXRjaCA9
IHMtPmF0dHJpYnV0ZU1hcCgpLT5tYXBwZWRNYXBzRXF1aXZhbGVudChtX3N0eWxlZEVsZW1lbnQt
PmF0dHJpYnV0ZU1hcCgpKTsKKyAgICAgICAgICAgICAgICBpZiAobWFwcGVkQXR0cnNNYXRjaCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAocy0+aXNMaW5rKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChtX2VsZW1lbnRMaW5rU3RhdGUgIT0gc3R5bGUtPmluc2lkZUxpbmsoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworQUxXQVlTX0lOTElORSBSZW5kZXJTdHlsZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRl
U2hhcmVkU3R5bGUoKQoreworICAgIGlmIChtX3N0eWxlZEVsZW1lbnQgJiYgIW1fc3R5bGVkRWxl
bWVudC0+aW5saW5lU3R5bGVEZWNsKCkgJiYgIW1fc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiAh
bV9zdHlsZWRFbGVtZW50LT5kb2N1bWVudCgpLT51c2VzU2libGluZ1J1bGVzKCkpIHsKKyAgICAg
ICAgLy8gQ2hlY2sgcHJldmlvdXMgc2libGluZ3MuCisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0g
MDsKKyAgICAgICAgTm9kZSogbjsKKyAgICAgICAgZm9yIChuID0gbV9lbGVtZW50LT5wcmV2aW91
c1NpYmxpbmcoKTsgbiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpOyBuID0gbi0+cHJldmlvdXNTaWJs
aW5nKCkpIHsgfQorICAgICAgICB3aGlsZSAobikgeworICAgICAgICAgICAgaWYgKGNhblNoYXJl
U3R5bGVXaXRoRWxlbWVudChuKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbi0+cmVuZGVyU3R5
bGUoKTsKKyAgICAgICAgICAgIGlmIChjb3VudCsrID09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGZvciAobiA9IG4tPnByZXZp
b3VzU2libGluZygpOyBuICYmICFuLT5pc0VsZW1lbnROb2RlKCk7IG4gPSBuLT5wcmV2aW91c1Np
YmxpbmcoKSkgeyB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFuKSAKKyAgICAgICAgICAgIG4g
PSBsb2NhdGVDb3VzaW5MaXN0KG1fZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKTsKKyAgICAgICAg
d2hpbGUgKG4pIHsKKyAgICAgICAgICAgIGlmIChjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQobikp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG4tPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICBp
ZiAoY291bnQrKyA9PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICBmb3IgKG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsgbiAmJiAh
bi0+aXNFbGVtZW50Tm9kZSgpOyBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCkpIHsgfQorICAgICAg
ICB9ICAgICAgICAKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6bWF0Y2hVQVJ1bGVzKGludCYgZmlyc3RVQVJ1bGUsIGludCYgbGFzdFVBUnVsZSkKK3sK
KyAgICAvLyBGaXJzdCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB1c2VyIGFnZW50IHNoZWV0Lgor
ICAgIENTU1J1bGVTZXQqIHVzZXJBZ2VudFN0eWxlU2hlZXQgPSBtX21lZGl1bS0+bWVkaWFUeXBl
TWF0Y2hTcGVjaWZpYygicHJpbnQiKQorICAgICAgICA/IGRlZmF1bHRQcmludFN0eWxlIDogZGVm
YXVsdFN0eWxlOworICAgIG1hdGNoUnVsZXModXNlckFnZW50U3R5bGVTaGVldCwgZmlyc3RVQVJ1
bGUsIGxhc3RVQVJ1bGUpOworCisgICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdlIG1hdGNoIHJ1bGVz
IGZyb20gdGhlIHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0LgorICAgIGlmICghbV9jaGVja2VyLm1f
c3RyaWN0UGFyc2luZykKKyAgICAgICAgbWF0Y2hSdWxlcyhkZWZhdWx0UXVpcmtzU3R5bGUsIGZp
cnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKKyAgICAgICAgCisgICAgLy8gSWYgd2UncmUgaW4gdmll
dyBzb3VyY2UgbW9kZSwgdGhlbiB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB2aWV3IHNvdXJjZSBz
dHlsZSBzaGVldC4KKyAgICBpZiAobV9jaGVja2VyLm1fZG9jdW1lbnQtPmZyYW1lKCkgJiYgbV9j
aGVja2VyLm1fZG9jdW1lbnQtPmZyYW1lKCktPmluVmlld1NvdXJjZU1vZGUoKSkgeworICAgICAg
ICBpZiAoIWRlZmF1bHRWaWV3U291cmNlU3R5bGUpCisgICAgICAgICAgICBsb2FkVmlld1NvdXJj
ZVN0eWxlKCk7CisgICAgICAgIG1hdGNoUnVsZXMoZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSwgZmly
c3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQp
Cit7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsKKworICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gZG9jdW1lbnRTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAg
ICBkb2N1bWVudFN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKKyAgICBkb2N1bWVudFN0eWxlLT5z
ZXRWaXN1YWxseU9yZGVyZWQoZG9jdW1lbnQtPnZpc3VhbGx5T3JkZXJlZCgpKTsKKyAgICBkb2N1
bWVudFN0eWxlLT5zZXRab29tKHZpZXcgPyB2aWV3LT5wYWdlWm9vbUZhY3RvcigpIDogMSk7Cisg
ICAgCisgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAgICBmb250RGVzY3Jp
cHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQtPnByaW50aW5nKCkpOworICAgIGlmIChT
ZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3MoKSkgeworICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUo
KSk7CisgICAgICAgIGlmIChkb2N1bWVudC0+cHJpbnRpbmcoKSAmJiAhc2V0dGluZ3MtPnNob3Vs
ZFByaW50QmFja2dyb3VuZHMoKSkKKyAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldEZvcmNl
QmFja2dyb3VuZHNUb1doaXRlKHRydWUpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0
ZGZvbnQgPSBzZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KCk7CisgICAgICAgIGlmICghc3Rk
Zm9udC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWls
eSgpLnNldEZhbWlseShzdGRmb250KTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJz
dEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKKyAgICAgICAgfQorICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAx
KTsKKyAgICAgICAgaW50IHNpemUgPSBDU1NTdHlsZVNlbGVjdG9yOjpmb250U2l6ZUZvcktleXdv
cmQoZG9jdW1lbnQsIENTU1ZhbHVlTWVkaXVtLCBmYWxzZSk7CisgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOworICAgICAgICBib29sIHVzZVNWR1pvb21SdWxl
cyA9IGRvY3VtZW50LT5pc1NWR0RvY3VtZW50KCk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRDb21wdXRlZFNpemUoQ1NTU3R5bGVTZWxlY3Rvcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNp
ZmllZFNpemUoZG9jdW1lbnQsIGRvY3VtZW50U3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5p
c0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1c2VTVkdab29tUnVsZXMpKTsKKyAgICB9CisKKyAgICBk
b2N1bWVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICBk
b2N1bWVudFN0eWxlLT5mb250KCkudXBkYXRlKDApOworICAgIGlmIChkb2N1bWVudC0+aW5Db21w
YXRNb2RlKCkpCisgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldEh0bWxIYWNrcyh0cnVlKTsgLy8g
ZW5hYmxlIGh0bWwgc3BlY2lmaWMgcmVuZGVyaW5nIHRyaWNrcworICAgICAgICAKKyAgICByZXR1
cm4gZG9jdW1lbnRTdHlsZS5yZWxlYXNlKCk7Cit9CisKKy8vIElmIHJlc29sdmVGb3JSb290RGVm
YXVsdCBpcyB0cnVlLCBzdHlsZSBiYXNlZCBvbiB1c2VyIGFnZW50IHN0eWxlIHNoZWV0IG9ubHku
IFRoaXMgaXMgdXNlZCBpbiBtZWRpYSBxdWVyaWVzLCB3aGVyZQorLy8gcmVsYXRpdmUgdW5pdHMg
YXJlIGludGVycHJldGVkIGFjY29yZGluZyB0byBkb2N1bWVudCByb290IGVsZW1lbnQgc3R5bGUs
IHN0eWxlZCBvbmx5IHdpdGggVUEgc3R5bGVzaGVldAorCitQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZSwgUmVuZGVyU3R5
bGUqIGRlZmF1bHRQYXJlbnQsIGJvb2wgYWxsb3dTaGFyaW5nLCBib29sIHJlc29sdmVGb3JSb290
RGVmYXVsdCwgYm9vbCBtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcykKK3sKKyAgICAvLyBPbmNlIGFu
IGVsZW1lbnQgaGFzIGEgcmVuZGVyZXIsIHdlIGRvbid0IHRyeSB0byBkZXN0cm95IGl0LCBzaW5j
ZSBvdGhlcndpc2UgdGhlIHJlbmRlcmVyCisgICAgLy8gd2lsbCB2YW5pc2ggaWYgYSBzdHlsZSBy
ZWNhbGMgaGFwcGVucyBkdXJpbmcgbG9hZGluZy4KKyAgICBpZiAoYWxsb3dTaGFyaW5nICYmICFl
LT5kb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSAmJiAhZS0+cmVuZGVyZXIoKSkg
eworICAgICAgICBpZiAoIXNfc3R5bGVOb3RZZXRBdmFpbGFibGUpIHsKKyAgICAgICAgICAgIHNf
c3R5bGVOb3RZZXRBdmFpbGFibGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCkucmVsZWFzZVJlZigp
OworICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+cmVmKCk7CisgICAgICAgICAg
ICBzX3N0eWxlTm90WWV0QXZhaWxhYmxlLT5zZXREaXNwbGF5KE5PTkUpOworICAgICAgICAgICAg
c19zdHlsZU5vdFlldEF2YWlsYWJsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7Cisg
ICAgICAgIH0KKyAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJsZS0+cmVmKCk7CisgICAgICAg
IGUtPmRvY3VtZW50KCktPnNldEhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUoKTsKKyAgICAg
ICAgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CisgICAgfQorCisgICAgaW5pdEVsZW1l
bnQoZSk7CisgICAgaWYgKGFsbG93U2hhcmluZykgeworICAgICAgICBSZW5kZXJTdHlsZSogc2hh
cmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZSgpOworICAgICAgICBpZiAoc2hhcmVkU3R5bGUp
CisgICAgICAgICAgICByZXR1cm4gc2hhcmVkU3R5bGU7CisgICAgfQorICAgIGluaXRGb3JTdHls
ZVJlc29sdmUoZSwgZGVmYXVsdFBhcmVudCk7CisKKyAgICAvLyBDb21wdXRlIG91ciBzdHlsZSBh
bGxvd2luZyA6dmlzaXRlZCB0byBtYXRjaCBmaXJzdC4KKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IHZpc2l0ZWRTdHlsZTsKKyAgICBpZiAoIW1hdGNoVmlzaXRlZFBzZXVkb0NsYXNzICYmIG1fcGFy
ZW50U3R5bGUgJiYgKG1fcGFyZW50U3R5bGUtPmluc2lkZUxpbmsoKSB8fCBlLT5pc0xpbmsoKSkg
JiYgZS0+ZG9jdW1lbnQoKS0+dXNlc0xpbmtSdWxlcygpKSB7CisgICAgICAgIC8vIEZldGNoIG91
ciBwYXJlbnQgc3R5bGUuCisgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG1fcGFy
ZW50U3R5bGU7CisgICAgICAgIGlmICghZS0+aXNMaW5rKCkpIHsKKyAgICAgICAgICAgIC8vIFVz
ZSB0aGUgcGFyZW50J3MgdmlzaXRlZCBzdHlsZSBpZiBvbmUgZXhpc3RzLgorICAgICAgICAgICAg
UmVuZGVyU3R5bGUqIHBhcmVudFZpc2l0ZWRTdHlsZSA9IG1fcGFyZW50U3R5bGUtPmdldENhY2hl
ZFBzZXVkb1N0eWxlKFZJU0lURURfTElOSyk7CisgICAgICAgICAgICBpZiAocGFyZW50VmlzaXRl
ZFN0eWxlKQorICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlID0gcGFyZW50VmlzaXRlZFN0eWxl
OworICAgICAgICB9CisgICAgICAgIHZpc2l0ZWRTdHlsZSA9IHN0eWxlRm9yRWxlbWVudChlLCBw
YXJlbnRTdHlsZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgaWYgKHZpc2l0ZWRTdHls
ZSkgeworICAgICAgICAgICAgaWYgKG1fZWxlbWVudExpbmtTdGF0ZSA9PSBJbnNpZGVVbnZpc2l0
ZWRMaW5rKQorICAgICAgICAgICAgICAgIHZpc2l0ZWRTdHlsZSA9IDA7ICAvLyBXZSBtYWRlIHRo
ZSBzdHlsZSB0byBhdm9pZCB0aW1pbmcgYXR0YWNrcy4gSnVzdCB0aHJvdyBpdCBhd2F5IG5vdyB0
aGF0IHdlIGRpZCB0aGF0LCBzaW5jZSB3ZSBkb24ndCBuZWVkIGl0LgorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHZpc2l0ZWRTdHlsZS0+c2V0U3R5bGVUeXBlKFZJU0lURURfTElO
Syk7CisgICAgICAgIH0KKyAgICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCBkZWZhdWx0UGFy
ZW50KTsKKyAgICB9CisKKyAgICBtX2NoZWNrZXIubV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9
IG1hdGNoVmlzaXRlZFBzZXVkb0NsYXNzOworCisgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpj
cmVhdGUoKTsKKworICAgIGlmIChtX3BhcmVudFN0eWxlKQorICAgICAgICBtX3N0eWxlLT5pbmhl
cml0RnJvbShtX3BhcmVudFN0eWxlKTsKKyAgICBlbHNlCisgICAgICAgIG1fcGFyZW50U3R5bGUg
PSBzdHlsZSgpOworCisgICAgaWYgKGUtPmlzTGluaygpKSB7CisgICAgICAgIG1fc3R5bGUtPnNl
dElzTGluayh0cnVlKTsKKyAgICAgICAgbV9zdHlsZS0+c2V0SW5zaWRlTGluayhtX2VsZW1lbnRM
aW5rU3RhdGUpOworICAgIH0KKyAgICAKKyAgICBpZiAoc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQg
JiYgIWVsZW1lbnRDYW5Vc2VTaW1wbGVEZWZhdWx0U3R5bGUoZSkpCisgICAgICAgIGxvYWRGdWxs
RGVmYXVsdFN0eWxlKCk7CisKKyNpZiBFTkFCTEUoU1ZHKQorICAgIHN0YXRpYyBib29sIGxvYWRl
ZFNWR1VzZXJBZ2VudFNoZWV0OworICAgIGlmIChlLT5pc1NWR0VsZW1lbnQoKSAmJiAhbG9hZGVk
U1ZHVXNlckFnZW50U2hlZXQpIHsKKyAgICAgICAgLy8gU1ZHIHJ1bGVzLgorICAgICAgICBsb2Fk
ZWRTVkdVc2VyQWdlbnRTaGVldCA9IHRydWU7CisgICAgICAgIENTU1N0eWxlU2hlZXQqIHN2Z1No
ZWV0ID0gcGFyc2VVQVNoZWV0KHN2Z1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihzdmdVc2Vy
QWdlbnRTdHlsZVNoZWV0KSk7CisgICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hl
ZXQoc3ZnU2hlZXQsIHNjcmVlbkV2YWwoKSk7CisgICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5h
ZGRSdWxlc0Zyb21TaGVldChzdmdTaGVldCwgcHJpbnRFdmFsKCkpOworICAgIH0KKyNlbmRpZgor
CisjaWYgRU5BQkxFKE1BVEhNTCkKKyAgICBzdGF0aWMgYm9vbCBsb2FkZWRNYXRoTUxVc2VyQWdl
bnRTaGVldDsKKyAgICBpZiAoZS0+aXNNYXRoTUxFbGVtZW50KCkgJiYgIWxvYWRlZE1hdGhNTFVz
ZXJBZ2VudFNoZWV0KSB7CisgICAgICAgIC8vIE1hdGhNTCBydWxlcy4KKyAgICAgICAgbG9hZGVk
TWF0aE1MVXNlckFnZW50U2hlZXQgPSB0cnVlOworICAgICAgICBDU1NTdHlsZVNoZWV0KiBtYXRo
TUxTaGVldCA9IHBhcnNlVUFTaGVldChtYXRobWxVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2Yo
bWF0aG1sVXNlckFnZW50U3R5bGVTaGVldCkpOworICAgICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1
bGVzRnJvbVNoZWV0KG1hdGhNTFNoZWV0LCBzY3JlZW5FdmFsKCkpOworICAgICAgICBkZWZhdWx0
UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWF0aE1MU2hlZXQsIHByaW50RXZhbCgpKTsK
KyAgICB9CisjZW5kaWYKKworI2lmIEVOQUJMRShXTUwpCisgICAgc3RhdGljIGJvb2wgbG9hZGVk
V01MVXNlckFnZW50U2hlZXQ7CisgICAgaWYgKGUtPmlzV01MRWxlbWVudCgpICYmICFsb2FkZWRX
TUxVc2VyQWdlbnRTaGVldCkgeworICAgICAgICAvLyBXTUwgcnVsZXMuCisgICAgICAgIGxvYWRl
ZFdNTFVzZXJBZ2VudFNoZWV0ID0gdHJ1ZTsKKyAgICAgICAgQ1NTU3R5bGVTaGVldCogd21sU2hl
ZXQgPSBwYXJzZVVBU2hlZXQod21sVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHdtbFVzZXJB
Z2VudFN0eWxlU2hlZXQpKTsKKyAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVl
dCh3bWxTaGVldCwgc2NyZWVuRXZhbCgpKTsKKyAgICAgICAgZGVmYXVsdFByaW50U3R5bGUtPmFk
ZFJ1bGVzRnJvbVNoZWV0KHdtbFNoZWV0LCBwcmludEV2YWwoKSk7CisgICAgfQorI2VuZGlmCisK
KyNpZiBFTkFCTEUoVklERU8pCisgICAgc3RhdGljIGJvb2wgbG9hZGVkTWVkaWFTdHlsZVNoZWV0
OworICAgIGlmICghbG9hZGVkTWVkaWFTdHlsZVNoZWV0ICYmIChlLT5oYXNUYWdOYW1lKHZpZGVv
VGFnKSB8fCBlLT5oYXNUYWdOYW1lKGF1ZGlvVGFnKSkpIHsKKyAgICAgICAgbG9hZGVkTWVkaWFT
dHlsZVNoZWV0ID0gdHJ1ZTsKKyAgICAgICAgU3RyaW5nIG1lZGlhUnVsZXMgPSBTdHJpbmcobWVk
aWFDb250cm9sc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzVXNlckFn
ZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5leHRyYU1lZGlh
Q29udHJvbHNTdHlsZVNoZWV0KCk7CisgICAgICAgIENTU1N0eWxlU2hlZXQqIG1lZGlhQ29udHJv
bHNTaGVldCA9IHBhcnNlVUFTaGVldChtZWRpYVJ1bGVzKTsKKyAgICAgICAgZGVmYXVsdFN0eWxl
LT5hZGRSdWxlc0Zyb21TaGVldChtZWRpYUNvbnRyb2xzU2hlZXQsIHNjcmVlbkV2YWwoKSk7Cisg
ICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtZWRpYUNvbnRyb2xz
U2hlZXQsIHByaW50RXZhbCgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIGludCBmaXJzdFVBUnVs
ZSA9IC0xLCBsYXN0VUFSdWxlID0gLTE7CisgICAgaW50IGZpcnN0VXNlclJ1bGUgPSAtMSwgbGFz
dFVzZXJSdWxlID0gLTE7CisgICAgaW50IGZpcnN0QXV0aG9yUnVsZSA9IC0xLCBsYXN0QXV0aG9y
UnVsZSA9IC0xOworICAgIG1hdGNoVUFSdWxlcyhmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSk7CisK
KyAgICBpZiAoIXJlc29sdmVGb3JSb290RGVmYXVsdCkgeworICAgICAgICAvLyA0LiBOb3cgd2Ug
Y2hlY2sgdXNlciBzaGVldCBydWxlcy4KKyAgICAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2Vy
U3R5bGVzKQorICAgICAgICAgICAgbWF0Y2hSdWxlcyhtX3VzZXJTdHlsZSwgZmlyc3RVc2VyUnVs
ZSwgbGFzdFVzZXJSdWxlKTsKKworICAgICAgICAvLyA1LiBOb3cgY2hlY2sgYXV0aG9yIHJ1bGVz
LCBiZWdpbm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRpb25hbCBhdHRyaWJ1dGVzCisgICAgICAg
IC8vIG1hcHBlZCBmcm9tIEhUTUwuCisgICAgICAgIGlmIChtX3N0eWxlZEVsZW1lbnQpIHsKKyAg
ICAgICAgICAgIC8vIEFzayBpZiB0aGUgSFRNTCBlbGVtZW50IGhhcyBtYXBwZWQgYXR0cmlidXRl
cy4KKyAgICAgICAgICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhhc01hcHBlZEF0dHJpYnV0ZXMo
KSkgeworICAgICAgICAgICAgICAgIC8vIFdhbGsgb3VyIGF0dHJpYnV0ZSBsaXN0IGFuZCBhZGQg
aW4gZWFjaCBkZWNsLgorICAgICAgICAgICAgICAgIGNvbnN0IE5hbWVkTm9kZU1hcCogbWFwID0g
bV9zdHlsZWRFbGVtZW50LT5hdHRyaWJ1dGVNYXAoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbWFwLT5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAg
ICAgIEF0dHJpYnV0ZSogYXR0ciA9IG1hcC0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGF0dHItPmlzTWFwcGVkQXR0cmlidXRlKCkgJiYgYXR0ci0+ZGVjbCgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0QXV0aG9yUnVsZSA9IG1fbWF0Y2hlZERlY2xz
LnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdEF1dGhvclJ1bGUgPT0g
LTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RBdXRob3JSdWxlID0gbGFzdEF1
dGhvclJ1bGU7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRpb24o
YXR0ci0+ZGVjbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTm93IHdlIGNoZWNrIGFkZGl0aW9uYWwg
bWFwcGVkIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgICAgIC8vIFRhYmxlcyBhbmQgdGFibGUgY2Vs
bHMgc2hhcmUgYW4gYWRkaXRpb25hbCBtYXBwZWQgcnVsZSB0aGF0IG11c3QgYmUgYXBwbGllZAor
ICAgICAgICAgICAgLy8gYWZ0ZXIgYWxsIGF0dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBz
dHlsZSBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KKyAgICAg
ICAgICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmNhbkhhdmVBZGRpdGlvbmFsQXR0cmlidXRlU3R5
bGVEZWNscygpKSB7CisgICAgICAgICAgICAgICAgbV9hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVE
ZWNscy5jbGVhcigpOworICAgICAgICAgICAgICAgIG1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25h
bEF0dHJpYnV0ZVN0eWxlRGVjbHMobV9hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNscyk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFtX2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhZGRpdGlvbmFsRGVjbHNTaXpl
ID0gbV9hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNscy5zaXplKCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChmaXJzdEF1dGhvclJ1bGUgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgICAg
ICBmaXJzdEF1dGhvclJ1bGUgPSBtX21hdGNoZWREZWNscy5zaXplKCk7CisgICAgICAgICAgICAg
ICAgICAgIGxhc3RBdXRob3JSdWxlID0gbV9tYXRjaGVkRGVjbHMuc2l6ZSgpICsgYWRkaXRpb25h
bERlY2xzU2l6ZSAtIDE7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBhZGRpdGlvbmFsRGVjbHNTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRNYXRjaGVkRGVjbGFyYXRpb24obV9hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsc1tpXSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAg
ICAgIC8vIDYuIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzIG5leHQuCisgICAgICAg
IGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKKyAgICAgICAgICAgIG1hdGNoUnVsZXMo
bV9hdXRob3JTdHlsZSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSk7CisKKyAgICAg
ICAgLy8gNy4gTm93IGNoZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgorICAgICAgICBp
ZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRFbGVtZW50KSB7CisgICAg
ICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lRGVjbCA9IG1fc3R5bGVk
RWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7CisgICAgICAgICAgICBpZiAoaW5saW5lRGVjbCkg
eworICAgICAgICAgICAgICAgIGxhc3RBdXRob3JSdWxlID0gbV9tYXRjaGVkRGVjbHMuc2l6ZSgp
OworICAgICAgICAgICAgICAgIGlmIChmaXJzdEF1dGhvclJ1bGUgPT0gLTEpCisgICAgICAgICAg
ICAgICAgICAgIGZpcnN0QXV0aG9yUnVsZSA9IGxhc3RBdXRob3JSdWxlOworICAgICAgICAgICAg
ICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihpbmxpbmVEZWNsKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIFJlc2V0IHRoZSB2YWx1ZSBiYWNrIGJlZm9yZSBhcHBs
eWluZyBwcm9wZXJ0aWVzLCBzbyB0aGF0IC13ZWJraXQtbGluayBrbm93cyB3aGF0IGNvbG9yIHRv
IHVzZS4KKyAgICBtX2NoZWNrZXIubV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IG1hdGNoVmlz
aXRlZFBzZXVkb0NsYXNzOworICAgIAorICAgIC8vIE5vdyB3ZSBoYXZlIGFsbCBvZiB0aGUgbWF0
Y2hlZCBydWxlcyBpbiB0aGUgYXBwcm9wcmlhdGUgb3JkZXIuICBXYWxrIHRoZSBydWxlcyBhbmQg
YXBwbHkKKyAgICAvLyBoaWdoLXByaW9yaXR5IHByb3BlcnRpZXMgZmlyc3QsIGkuZS4sIHRob3Nl
IHByb3BlcnRpZXMgdGhhdCBvdGhlciBwcm9wZXJ0aWVzIGRlcGVuZCBvbi4KKyAgICAvLyBUaGUg
b3JkZXIgaXMgKDEpIGhpZ2gtcHJpb3JpdHkgbm90IGltcG9ydGFudCwgKDIpIGhpZ2gtcHJpb3Jp
dHkgaW1wb3J0YW50LCAoMykgbm9ybWFsIG5vdCBpbXBvcnRhbnQKKyAgICAvLyBhbmQgKDQpIG5v
cm1hbCBpbXBvcnRhbnQuCisgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgIGFwcGx5RGVj
bGFyYXRpb25zPHRydWU+KGZhbHNlLCAwLCBtX21hdGNoZWREZWNscy5zaXplKCkgLSAxKTsKKyAg
ICBpZiAoIXJlc29sdmVGb3JSb290RGVmYXVsdCkgeworICAgICAgICBhcHBseURlY2xhcmF0aW9u
czx0cnVlPih0cnVlLCBmaXJzdEF1dGhvclJ1bGUsIGxhc3RBdXRob3JSdWxlKTsKKyAgICAgICAg
YXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4odHJ1ZSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxl
KTsKKyAgICB9CisgICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4odHJ1ZSwgZmlyc3RVQVJ1bGUs
IGxhc3RVQVJ1bGUpOworICAgIAorICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBh
aGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KKyAgICBpZiAobV9mb250RGlydHkpCisgICAgICAgIHVw
ZGF0ZUZvbnQoKTsKKworICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJl
IHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZQorICAgIGlmIChtX2xpbmVIZWlnaHRWYWx1ZSkK
KyAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fbGluZUhlaWdo
dFZhbHVlKTsKKworICAgIC8vIE5vdyBkbyB0aGUgbm9ybWFsIHByaW9yaXR5IFVBIHByb3BlcnRp
ZXMuCisgICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KGZhbHNlLCBmaXJzdFVBUnVsZSwgbGFz
dFVBUnVsZSk7CisgICAgCisgICAgLy8gQ2FjaGUgb3VyIGJvcmRlciBhbmQgYmFja2dyb3VuZCBz
byB0aGF0IHdlIGNhbiBleGFtaW5lIHRoZW0gbGF0ZXIuCisgICAgY2FjaGVCb3JkZXJBbmRCYWNr
Z3JvdW5kKCk7CisgICAgCisgICAgLy8gTm93IGRvIHRoZSBhdXRob3IgYW5kIHVzZXIgbm9ybWFs
IHByaW9yaXR5IHByb3BlcnRpZXMgYW5kIGFsbCB0aGUgIWltcG9ydGFudCBwcm9wZXJ0aWVzLgor
ICAgIGlmICghcmVzb2x2ZUZvclJvb3REZWZhdWx0KSB7CisgICAgICAgIGFwcGx5RGVjbGFyYXRp
b25zPGZhbHNlPihmYWxzZSwgbGFzdFVBUnVsZSArIDEsIG1fbWF0Y2hlZERlY2xzLnNpemUoKSAt
IDEpOworICAgICAgICBhcHBseURlY2xhcmF0aW9uczxmYWxzZT4odHJ1ZSwgZmlyc3RBdXRob3JS
dWxlLCBsYXN0QXV0aG9yUnVsZSk7CisgICAgICAgIGFwcGx5RGVjbGFyYXRpb25zPGZhbHNlPih0
cnVlLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUpOworICAgIH0KKyAgICBhcHBseURlY2xh
cmF0aW9uczxmYWxzZT4odHJ1ZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOworICAgIAorICAg
IC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkIGJ5IG9uZSBvZiB0aGUgbm9uLWVzc2VudGlhbCBm
b250IHByb3BzLCAKKyAgICAvLyBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IGEgc2Vjb25kIHRpbWUu
CisgICAgaWYgKG1fZm9udERpcnR5KQorICAgICAgICB1cGRhdGVGb250KCk7CisgICAgCisgICAg
Ly8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlv
bnMgKGFtb25nIG90aGVyIGZpeHVwcykuCisgICAgYWRqdXN0UmVuZGVyU3R5bGUoc3R5bGUoKSwg
ZSk7CisKKyAgICAvLyBJZiB3ZSBoYXZlIGZpcnN0LWxldHRlciBwc2V1ZG8gc3R5bGUsIGRvIG5v
dCBzaGFyZSB0aGlzIHN0eWxlCisgICAgaWYgKG1fc3R5bGUtPmhhc1BzZXVkb1N0eWxlKEZJUlNU
X0xFVFRFUikpCisgICAgICAgIG1fc3R5bGUtPnNldFVuaXF1ZSgpOworCisgICAgaWYgKHZpc2l0
ZWRTdHlsZSkgeworICAgICAgICAvLyBDb3B5IGFueSBwc2V1ZG8gYml0cyB0aGF0IHRoZSB2aXNp
dGVkIHN0eWxlIGhhcyB0byB0aGUgcHJpbWFyeSBzdHlsZSBzbyB0aGF0CisgICAgICAgIC8vIHBz
ZXVkbyBlbGVtZW50IHN0eWxlcyB3aWxsIGNvbnRpbnVlIHRvIHdvcmsgZm9yIHBzZXVkbyBlbGVt
ZW50cyBpbnNpZGUgOnZpc2l0ZWQKKyAgICAgICAgLy8gbGlua3MuCisgICAgICAgIGZvciAodW5z
aWduZWQgcHNldWRvID0gRklSU1RfUFVCTElDX1BTRVVET0lEOyBwc2V1ZG8gPCBGSVJTVF9JTlRF
Uk5BTF9QU0VVRE9JRDsgKytwc2V1ZG8pIHsKKyAgICAgICAgICAgIGlmICh2aXNpdGVkU3R5bGUt
Pmhhc1BzZXVkb1N0eWxlKHN0YXRpY19jYXN0PFBzZXVkb0lkPihwc2V1ZG8pKSkKKyAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShzdGF0aWNfY2FzdDxQc2V1ZG9JZD4o
cHNldWRvKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEFkZCB0aGUgdmlzaXRl
ZCBzdHlsZSBvZmYgdGhlIG1haW4gc3R5bGUuCisgICAgICAgIG1fc3R5bGUtPmFkZENhY2hlZFBz
ZXVkb1N0eWxlKHZpc2l0ZWRTdHlsZS5yZWxlYXNlKCkpOworICAgIH0KKworICAgIGlmICghbWF0
Y2hWaXNpdGVkUHNldWRvQ2xhc3MpCisgICAgICAgIGluaXRFbGVtZW50KDApOyAvLyBDbGVhciBv
dXQgZm9yIHRoZSBuZXh0IHJlc29sdmUuCisKKyAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4K
KyAgICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUq
IGVsZW1lbnRTdHlsZSwgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBrZXlmcmFtZVJ1bGUs
IEtleWZyYW1lTGlzdCYgbGlzdCkKK3sKKyAgICBpZiAoa2V5ZnJhbWVSdWxlLT5zdHlsZSgpKQor
ICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRpb24oa2V5ZnJhbWVSdWxlLT5zdHlsZSgpKTsKKwor
ICAgIEFTU0VSVCghbV9zdHlsZSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIHN0eWxlCisgICAgbV9z
dHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShlbGVtZW50U3R5bGUpOworCisgICAgbV9saW5lSGVp
Z2h0VmFsdWUgPSAwOworCisgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1w
b3J0YW50LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCisgICAgLy8gZGVjbCwgdGhlcmUn
cyBub3RoaW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4K
KyAgICBpZiAoa2V5ZnJhbWVSdWxlLT5zdHlsZSgpKQorICAgICAgICBhcHBseURlY2xhcmF0aW9u
czx0cnVlPihmYWxzZSwgMCwgbV9tYXRjaGVkRGVjbHMuc2l6ZSgpIC0gMSk7CisKKyAgICAvLyBJ
ZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cuCisgICAg
aWYgKG1fZm9udERpcnR5KQorICAgICAgICB1cGRhdGVGb250KCk7CisKKyAgICAvLyBMaW5lLWhl
aWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUK
KyAgICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7CisKKyAgICAvLyBOb3cgZG8gcmVz
dCBvZiB0aGUgcHJvcGVydGllcy4KKyAgICBpZiAoa2V5ZnJhbWVSdWxlLT5zdHlsZSgpKQorICAg
ICAgICBhcHBseURlY2xhcmF0aW9uczxmYWxzZT4oZmFsc2UsIDAsIG1fbWF0Y2hlZERlY2xzLnNp
emUoKSAtIDEpOworCisgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQgYnkgb25lIG9mIHRo
ZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsCisgICAgLy8gZ28gYWhlYWQgYW5kIHVwZGF0ZSBp
dCBhIHNlY29uZCB0aW1lLgorICAgIGlmIChtX2ZvbnREaXJ0eSkKKyAgICAgICAgdXBkYXRlRm9u
dCgpOworCisgICAgLy8gQWRkIGFsbCB0aGUgYW5pbWF0aW5nIHByb3BlcnRpZXMgdG8gdGhlIGxp
c3QKKyAgICBpZiAoa2V5ZnJhbWVSdWxlLT5zdHlsZSgpKSB7CisgICAgICAgIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBrZXlmcmFtZVJ1bGUtPnN0eWxl
KCktPmVuZCgpOworICAgICAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25z
dF9pdGVyYXRvciBpdCA9IGtleWZyYW1lUnVsZS0+c3R5bGUoKS0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgICAgICBpbnQgcHJvcGVydHkgPSAoKml0KS5pZCgpOworICAgICAg
ICAgICAgLy8gVGltaW5nLWZ1bmN0aW9uIHdpdGhpbiBrZXlmcmFtZXMgaXMgc3BlY2lhbCwgYmVj
YXVzZSBpdCBpcyBub3QgYW5pbWF0ZWQ7IGl0IGp1c3QKKyAgICAgICAgICAgIC8vIGRlc2NyaWJl
cyB0aGUgdGltaW5nIGZ1bmN0aW9uIGJldHdlZW4gdGhpcyBrZXlmcmFtZSBhbmQgdGhlIG5leHQu
CisgICAgICAgICAgICBpZiAocHJvcGVydHkgIT0gQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25U
aW1pbmdGdW5jdGlvbikKKyAgICAgICAgICAgICAgICBsaXN0LmFkZFByb3BlcnR5KHByb3BlcnR5
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKK30K
Kwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVt
ZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBLZXlmcmFtZUxpc3QmIGxp
c3QpCit7CisgICAgbGlzdC5jbGVhcigpOworICAgIAorICAgIC8vIEdldCB0aGUga2V5ZnJhbWVz
UnVsZSBmb3IgdGhpcyBuYW1lCisgICAgaWYgKCFlIHx8IGxpc3QuYW5pbWF0aW9uTmFtZSgpLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9rZXlmcmFtZXNSdWxlTWFwLmNoZWNr
Q29uc2lzdGVuY3koKTsKKyAgIAorICAgIGlmICghbV9rZXlmcmFtZXNSdWxlTWFwLmNvbnRhaW5z
KGxpc3QuYW5pbWF0aW9uTmFtZSgpLmltcGwoKSkpCisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSogcnVsZSA9IG1fa2V5ZnJhbWVzUnVs
ZU1hcC5maW5kKGxpc3QuYW5pbWF0aW9uTmFtZSgpLmltcGwoKSkuZ2V0KCktPnNlY29uZC5nZXQo
KTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGtleWZyYW1lU3R5bGU7CisgICAgCisgICAgLy8g
Q29uc3RydWN0IGFuZCBwb3B1bGF0ZSB0aGUgc3R5bGUgZm9yIGVhY2gga2V5ZnJhbWUKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAv
LyBBcHBseSB0aGUgZGVjbGFyYXRpb24gdG8gdGhlIHN0eWxlLiBUaGlzIGlzIGEgc2ltcGxpZmll
ZCB2ZXJzaW9uIG9mIHRoZSBsb2dpYyBpbiBzdHlsZUZvckVsZW1lbnQKKyAgICAgICAgaW5pdEVs
ZW1lbnQoZSk7CisgICAgICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSk7CisgICAgICAgIAorICAg
ICAgICBjb25zdCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIGtleWZyYW1lUnVsZSA9IHJ1bGUtPml0
ZW0oaSk7CisgICAgICAgIAorICAgICAgICBrZXlmcmFtZVN0eWxlID0gc3R5bGVGb3JLZXlmcmFt
ZShlbGVtZW50U3R5bGUsIGtleWZyYW1lUnVsZSwgbGlzdCk7CisKKyAgICAgICAgLy8gQWRkIHRo
aXMga2V5ZnJhbWUgc3R5bGUgdG8gYWxsIHRoZSBpbmRpY2F0ZWQga2V5IHRpbWVzCisgICAgICAg
IFZlY3RvcjxmbG9hdD4ga2V5czsKKyAgICAgICAga2V5ZnJhbWVSdWxlLT5nZXRLZXlzKGtleXMp
OworICAgICAgICBmb3IgKHNpemVfdCBrZXlJbmRleCA9IDA7IGtleUluZGV4IDwga2V5cy5zaXpl
KCk7ICsra2V5SW5kZXgpIHsKKyAgICAgICAgICAgIGZsb2F0IGtleSA9IGtleXNba2V5SW5kZXhd
OworICAgICAgICAgICAgbGlzdC5pbnNlcnQoa2V5LCBrZXlmcmFtZVN0eWxlLmdldCgpKTsKKyAg
ICAgICAgfQorICAgICAgICBrZXlmcmFtZVN0eWxlLnJlbGVhc2UoKTsKKyAgICB9CisgICAgCisg
ICAgLy8gSWYgdGhlIDAlIGtleWZyYW1lIGlzIG1pc3NpbmcsIGNyZWF0ZSBpdCAoYnV0IG9ubHkg
aWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG90aGVyIGtleWZyYW1lKQorICAgIGludCBpbml0aWFs
TGlzdFNpemUgPSBsaXN0LnNpemUoKTsKKyAgICBpZiAoaW5pdGlhbExpc3RTaXplID4gMCAmJiBs
aXN0LmJlZ2luS2V5ZnJhbWVzKCktPmtleSgpICE9IDApIHsKKyAgICAgICAgUmVmUHRyPFdlYktp
dENTU0tleWZyYW1lUnVsZT4ga2V5ZnJhbWUgPSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmNyZWF0
ZSgpOworICAgICAgICBrZXlmcmFtZS0+c2V0S2V5VGV4dCgiMCUiKTsKKyAgICAgICAga2V5ZnJh
bWVTdHlsZSA9IHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBrZXlmcmFtZS5nZXQoKSwg
bGlzdCk7CisgICAgICAgIGxpc3QuaW5zZXJ0KDAsIGtleWZyYW1lU3R5bGUucmVsZWFzZSgpKTsK
KyAgICB9CisKKyAgICAvLyBJZiB0aGUgMTAwJSBrZXlmcmFtZSBpcyBtaXNzaW5nLCBjcmVhdGUg
aXQgKGJ1dCBvbmx5IGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBvdGhlciBrZXlmcmFtZSkKKyAg
ICBpZiAoaW5pdGlhbExpc3RTaXplID4gMCAmJiAobGlzdC5lbmRLZXlmcmFtZXMoKSAtIDEpLT5r
ZXkoKSAhPSAxKSB7CisgICAgICAgIFJlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZVJ1bGU+IGtleWZy
YW1lID0gV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpjcmVhdGUoKTsKKyAgICAgICAga2V5ZnJhbWUt
PnNldEtleVRleHQoIjEwMCUiKTsKKyAgICAgICAga2V5ZnJhbWVTdHlsZSA9IHN0eWxlRm9yS2V5
ZnJhbWUoZWxlbWVudFN0eWxlLCBrZXlmcmFtZS5nZXQoKSwgbGlzdCk7CisgICAgICAgIGxpc3Qu
aW5zZXJ0KDEsIGtleWZyYW1lU3R5bGUucmVsZWFzZSgpKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQ
c2V1ZG9JZCBwc2V1ZG8sIEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgYm9v
bCBtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcykKK3sKKyAgICBpZiAoIWUpCisgICAgICAgIHJldHVy
biAwOworCisgICAgaW5pdEVsZW1lbnQoZSk7CisKKyAgICAvLyBDb21wdXRlIG91ciA6dmlzaXRl
ZCBzdHlsZSBmaXJzdCwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IHdlJ2xsIG5lZWQg
dG8gY3JlYXRlIGEgbm9ybWFsIHN0eWxlIGp1c3QgdG8gaGFuZyBpdAorICAgIC8vIG9mZiBvZi4K
KyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHZpc2l0ZWRTdHlsZTsKKyAgICBpZiAoIW1hdGNoVmlz
aXRlZFBzZXVkb0NsYXNzICYmIHBhcmVudFN0eWxlICYmIHBhcmVudFN0eWxlLT5pbnNpZGVMaW5r
KCkpIHsKKyAgICAgICAgLy8gRmV0Y2ggb3VyIHBhcmVudCBzdHlsZSB3aXRoIDp2aXNpdGVkIGlu
IGVmZmVjdC4KKyAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFZpc2l0ZWRTdHlsZSA9IHBhcmVu
dFN0eWxlLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShWSVNJVEVEX0xJTkspOworICAgICAgICB2aXNp
dGVkU3R5bGUgPSBwc2V1ZG9TdHlsZUZvckVsZW1lbnQocHNldWRvLCBlLCBwYXJlbnRWaXNpdGVk
U3R5bGUgPyBwYXJlbnRWaXNpdGVkU3R5bGUgOiBwYXJlbnRTdHlsZSwgdHJ1ZSk7CisgICAgICAg
IGlmICh2aXNpdGVkU3R5bGUpIHsKKyAgICAgICAgICAgIGlmIChtX2VsZW1lbnRMaW5rU3RhdGUg
PT0gSW5zaWRlVW52aXNpdGVkTGluaykKKyAgICAgICAgICAgICAgICB2aXNpdGVkU3R5bGUgPSAw
OyAgLy8gV2UgbWFkZSB0aGUgc3R5bGUgdG8gYXZvaWQgdGltaW5nIGF0dGFja3MuIEp1c3QgdGhy
b3cgaXQgYXdheSBub3cgdGhhdCB3ZSBkaWQgdGhhdC4KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICB2aXNpdGVkU3R5bGUtPnNldFN0eWxlVHlwZShWSVNJVEVEX0xJTkspOworICAg
ICAgICB9CisgICAgfQorCisgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCBwYXJlbnRTdHlsZSwg
cHNldWRvKTsKKyAgICBtX3N0eWxlID0gcGFyZW50U3R5bGU7CisgICAgCisgICAgbV9jaGVja2Vy
Lm1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzczsKKwor
ICAgIC8vIFNpbmNlIHdlIGRvbid0IHVzZSBwc2V1ZG8tZWxlbWVudHMgaW4gYW55IG9mIG91ciBx
dWlyay9wcmludCB1c2VyIGFnZW50IHJ1bGVzLCBkb24ndCB3YXN0ZSB0aW1lIHdhbGtpbmcKKyAg
ICAvLyB0aG9zZSBydWxlcy4KKyAgICAKKyAgICAvLyBDaGVjayBVQSwgdXNlciBhbmQgYXV0aG9y
IHJ1bGVzLgorICAgIGludCBmaXJzdFVBUnVsZSA9IC0xLCBsYXN0VUFSdWxlID0gLTEsIGZpcnN0
VXNlclJ1bGUgPSAtMSwgbGFzdFVzZXJSdWxlID0gLTEsIGZpcnN0QXV0aG9yUnVsZSA9IC0xLCBs
YXN0QXV0aG9yUnVsZSA9IC0xOworICAgIG1hdGNoVUFSdWxlcyhmaXJzdFVBUnVsZSwgbGFzdFVB
UnVsZSk7CisKKyAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpIHsKKyAgICAgICAg
bWF0Y2hSdWxlcyhtX3VzZXJTdHlsZSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlKTsKKyAg
ICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLCBmaXJzdEF1dGhvclJ1bGUsIGxhc3RBdXRo
b3JSdWxlKTsKKyAgICB9CisKKyAgICBpZiAobV9tYXRjaGVkRGVjbHMuaXNFbXB0eSgpICYmICF2
aXNpdGVkU3R5bGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgbV9zdHlsZSA9IFJlbmRlclN0
eWxlOjpjcmVhdGUoKTsKKyAgICBpZiAocGFyZW50U3R5bGUpCisgICAgICAgIG1fc3R5bGUtPmlu
aGVyaXRGcm9tKHBhcmVudFN0eWxlKTsKKworICAgIG1fc3R5bGUtPnNldFN0eWxlVHlwZShwc2V1
ZG8pOworICAgIAorICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICAKKyAgICAvLyBSZXNl
dCB0aGUgdmFsdWUgYmFjayBiZWZvcmUgYXBwbHlpbmcgcHJvcGVydGllcywgc28gdGhhdCAtd2Vi
a2l0LWxpbmsga25vd3Mgd2hhdCBjb2xvciB0byB1c2UuCisgICAgbV9jaGVja2VyLm1fbWF0Y2hW
aXNpdGVkUHNldWRvQ2xhc3MgPSBtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzczsKKworICAgIC8vIEhp
Z2gtcHJpb3JpdHkgcHJvcGVydGllcy4KKyAgICBhcHBseURlY2xhcmF0aW9uczx0cnVlPihmYWxz
ZSwgMCwgbV9tYXRjaGVkRGVjbHMuc2l6ZSgpIC0gMSk7CisgICAgYXBwbHlEZWNsYXJhdGlvbnM8
dHJ1ZT4odHJ1ZSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSk7CisgICAgYXBwbHlE
ZWNsYXJhdGlvbnM8dHJ1ZT4odHJ1ZSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlKTsKKyAg
ICBhcHBseURlY2xhcmF0aW9uczx0cnVlPih0cnVlLCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSk7
CisgICAgCisgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRh
dGUgaXQgbm93LgorICAgIGlmIChtX2ZvbnREaXJ0eSkKKyAgICAgICAgdXBkYXRlRm9udCgpOwor
CisgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBv
biB0aGUgZm9udC1zaXplCisgICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQorICAgICAgICBhcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworICAg
IAorICAgIC8vIE5vdyBkbyB0aGUgbm9ybWFsIHByaW9yaXR5IHByb3BlcnRpZXMuCisgICAgYXBw
bHlEZWNsYXJhdGlvbnM8ZmFsc2U+KGZhbHNlLCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSk7Cisg
ICAgCisgICAgLy8gQ2FjaGUgb3VyIGJvcmRlciBhbmQgYmFja2dyb3VuZCBzbyB0aGF0IHdlIGNh
biBleGFtaW5lIHRoZW0gbGF0ZXIuCisgICAgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7Cisg
ICAgCisgICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KGZhbHNlLCBsYXN0VUFSdWxlICsgMSwg
bV9tYXRjaGVkRGVjbHMuc2l6ZSgpIC0gMSk7CisgICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+
KHRydWUsIGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUpOworICAgIGFwcGx5RGVjbGFy
YXRpb25zPGZhbHNlPih0cnVlLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUpOworICAgIGFw
cGx5RGVjbGFyYXRpb25zPGZhbHNlPih0cnVlLCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSk7Cisg
ICAgCisgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQgYnkgb25lIG9mIHRoZSBub24tZXNz
ZW50aWFsIGZvbnQgcHJvcHMsIAorICAgIC8vIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgYSBzZWNv
bmQgdGltZS4KKyAgICBpZiAobV9mb250RGlydHkpCisgICAgICAgIHVwZGF0ZUZvbnQoKTsKKwor
ICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29y
YXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgorICAgIGFkanVzdFJlbmRlclN0eWxlKHN0eWxl
KCksIDApOworCisgICAgLy8gSGFuZyBvdXIgdmlzaXRlZCBzdHlsZSBvZmYgbV9zdHlsZS4KKyAg
ICBpZiAodmlzaXRlZFN0eWxlKQorICAgICAgICBtX3N0eWxlLT5hZGRDYWNoZWRQc2V1ZG9TdHls
ZSh2aXNpdGVkU3R5bGUucmVsZWFzZSgpKTsKKyAgICAgICAgCisgICAgLy8gTm93IHJldHVybiB0
aGUgc3R5bGUuCisgICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRl
eCkKK3sKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKG1fY2hlY2tlci5tX2RvY3VtZW50LT5ib2R5
KCkpOworCisgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBtX3N0eWxl
LT5pbmhlcml0RnJvbShtX3Jvb3RFbGVtZW50U3R5bGUpOworCisgICAgY29uc3QgYm9vbCBpc0xl
ZnQgPSBpc0xlZnRQYWdlKHBhZ2VJbmRleCk7CisgICAgY29uc3QgYm9vbCBpc0ZpcnN0ID0gaXNG
aXJzdFBhZ2UocGFnZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmcgcGFnZSA9IHBhZ2VOYW1lKHBh
Z2VJbmRleCk7CisgICAgbWF0Y2hQYWdlUnVsZXMoZGVmYXVsdFByaW50U3R5bGUsIGlzTGVmdCwg
aXNGaXJzdCwgcGFnZSk7CisgICAgbWF0Y2hQYWdlUnVsZXMobV91c2VyU3R5bGUsIGlzTGVmdCwg
aXNGaXJzdCwgcGFnZSk7CisgICAgbWF0Y2hQYWdlUnVsZXMobV9hdXRob3JTdHlsZSwgaXNMZWZ0
LCBpc0ZpcnN0LCBwYWdlKTsKKyAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgYXBwbHlE
ZWNsYXJhdGlvbnM8dHJ1ZT4oZmFsc2UsIDAsIG1fbWF0Y2hlZERlY2xzLnNpemUoKSAtIDEpOwor
CisgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQg
bm93LgorICAgIGlmIChtX2ZvbnREaXJ0eSkKKyAgICAgICAgdXBkYXRlRm9udCgpOworCisgICAg
Ly8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUg
Zm9udC1zaXplCisgICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQorICAgICAgICBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworCisgICAgYXBw
bHlEZWNsYXJhdGlvbnM8ZmFsc2U+KGZhbHNlLCAwLCBtX21hdGNoZWREZWNscy5zaXplKCkgLSAx
KTsKKworICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgorICAgIHJldHVybiBtX3N0eWxlLnJl
bGVhc2UoKTsKK30KKworI2lmIEVOQUJMRShEQVRBR1JJRCkKKworUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JEYXRhR3JpZENvbHVtbihEYXRh
R3JpZENvbHVtbiosIFJlbmRlclN0eWxlKikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50Cisg
ICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0
b3I6OnBzZXVkb1N0eWxlRm9yRGF0YUdyaWRDb2x1bW5IZWFkZXIoRGF0YUdyaWRDb2x1bW4qLCBS
ZW5kZXJTdHlsZSopCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudAorICAgIHJldHVybiAwOwor
fQorCisjZW5kaWYKKworc3RhdGljIHZvaWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHls
ZSogc3R5bGUpCit7CisgICAgLy8gSW50cmluc2ljIG1hcmdpbiB2YWx1ZS4KKyAgICBjb25zdCBp
bnQgaW50cmluc2ljTWFyZ2luID0gMiAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgCisg
ICAgLy8gRklYTUU6IFVzaW5nIHdpZHRoL2hlaWdodCBhbG9uZSBhbmQgbm90IGFsc28gZGVhbGlu
ZyB3aXRoIG1pbi13aWR0aC9tYXgtd2lkdGggaXMgZmxhd2VkLgorICAgIC8vIEZJWE1FOiBVc2lu
ZyAicXVpcmsiIHRvIGRlY2lkZSB0aGUgbWFyZ2luIHdhc24ndCBzZXQgaXMga2luZCBvZiBsYW1l
LgorICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKSB7CisgICAgICAg
IGlmIChzdHlsZS0+bWFyZ2luTGVmdCgpLnF1aXJrKCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0
TWFyZ2luTGVmdChMZW5ndGgoaW50cmluc2ljTWFyZ2luLCBGaXhlZCkpOworICAgICAgICBpZiAo
c3R5bGUtPm1hcmdpblJpZ2h0KCkucXVpcmsoKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJn
aW5SaWdodChMZW5ndGgoaW50cmluc2ljTWFyZ2luLCBGaXhlZCkpOworICAgIH0KKworICAgIGlm
IChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpIHsKKyAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5U
b3AoKS5xdWlyaygpKQorICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpblRvcChMZW5ndGgoaW50
cmluc2ljTWFyZ2luLCBGaXhlZCkpOworICAgICAgICBpZiAoc3R5bGUtPm1hcmdpbkJvdHRvbSgp
LnF1aXJrKCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luQm90dG9tKExlbmd0aChpbnRy
aW5zaWNNYXJnaW4sIEZpeGVkKSk7CisgICAgfQorfQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6
OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCAqZSkKK3sKKyAg
ICAvLyBDYWNoZSBvdXIgb3JpZ2luYWwgZGlzcGxheS4KKyAgICBzdHlsZS0+c2V0T3JpZ2luYWxE
aXNwbGF5KHN0eWxlLT5kaXNwbGF5KCkpOworCisgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgIT0g
Tk9ORSkgeworICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgPHRkPiB0aGF0IHNwZWNpZmllcyBhIGZs
b2F0IHByb3BlcnR5LCBpbiBxdWlya3MgbW9kZSB3ZSBqdXN0IGRyb3AgdGhlIGZsb2F0CisgICAg
ICAgIC8vIHByb3BlcnR5LgorICAgICAgICAvLyBTaXRlcyBhbHNvIGNvbW1vbmx5IHVzZSBkaXNw
bGF5OmlubGluZS9ibG9jayBvbiA8dGQ+cyBhbmQgPHRhYmxlPnMuICBJbiBxdWlya3MgbW9kZSB3
ZSBmb3JjZQorICAgICAgICAvLyB0aGVzZSB0YWdzIHRvIHJldGFpbiB0aGVpciBkaXNwbGF5IHR5
cGVzLgorICAgICAgICBpZiAoIW1fY2hlY2tlci5tX3N0cmljdFBhcnNpbmcgJiYgZSkgeworICAg
ICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUodGRUYWcpKSB7CisgICAgICAgICAgICAgICAgc3R5
bGUtPnNldERpc3BsYXkoVEFCTEVfQ0VMTCk7CisgICAgICAgICAgICAgICAgc3R5bGUtPnNldEZs
b2F0aW5nKEZOT05FKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhh
c1RhZ05hbWUodGFibGVUYWcpKQorICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KHN0
eWxlLT5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkgPyBJTkxJTkVfVEFCTEUgOiBUQUJMRSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoZSAmJiAoZS0+aGFzVGFnTmFtZSh0ZFRhZykgfHwgZS0+aGFz
VGFnTmFtZSh0aFRhZykpKSB7CisgICAgICAgICAgICBpZiAoc3R5bGUtPndoaXRlU3BhY2UoKSA9
PSBLSFRNTF9OT1dSQVApIHsKKyAgICAgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIGFy
ZSByZWFsbHkgbm93cmFwcGluZyBvciBpZiB3ZSBzaG91bGQganVzdAorICAgICAgICAgICAgICAg
IC8vIHVzZSBub3JtYWwgaW5zdGVhZC4gIElmIHRoZSB3aWR0aCBvZiB0aGUgY2VsbCBpcyBmaXhl
ZCwgdGhlbgorICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGFjdHVhbGx5IHVzZSBOT1dSQVAu
CisgICAgICAgICAgICAgICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzRml4ZWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoTk9STUFMKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKE5PV1JBUCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBUYWJsZXMgbmV2ZXIgc3Vw
cG9ydCB0aGUgLXdlYmtpdC0qIHZhbHVlcyBmb3IgdGV4dC1hbGlnbiBhbmQgd2lsbCByZXNldCBi
YWNrIHRvIHRoZSBkZWZhdWx0LgorICAgICAgICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKHRhYmxl
VGFnKSAmJiAoc3R5bGUtPnRleHRBbGlnbigpID09IFdFQktJVF9MRUZUIHx8IHN0eWxlLT50ZXh0
QWxpZ24oKSA9PSBXRUJLSVRfQ0VOVEVSIHx8IHN0eWxlLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRf
UklHSFQpKQorICAgICAgICAgICAgc3R5bGUtPnNldFRleHRBbGlnbihUQUFVVE8pOworCisgICAg
ICAgIC8vIEZyYW1lcyBhbmQgZnJhbWVzZXRzIG5ldmVyIGhvbm9yIHBvc2l0aW9uOnJlbGF0aXZl
IG9yIHBvc2l0aW9uOmFic29sdXRlLiAgVGhpcyBpcyBuZWNlc3NhcnkgdG8KKyAgICAgICAgLy8g
Zml4IGEgY3Jhc2ggd2hlcmUgYSBzaXRlIHRyaWVzIHRvIHBvc2l0aW9uIHRoZXNlIG9iamVjdHMu
ICBUaGV5IGFsc28gbmV2ZXIgaG9ub3IgZGlzcGxheS4KKyAgICAgICAgaWYgKGUgJiYgKGUtPmhh
c1RhZ05hbWUoZnJhbWVUYWcpIHx8IGUtPmhhc1RhZ05hbWUoZnJhbWVzZXRUYWcpKSkgeworICAg
ICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsKKyAgICAgICAgICAg
IHN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRhYmxl
IGhlYWRlcnMgd2l0aCBhIHRleHQtYWxpZ24gb2YgYXV0byB3aWxsIGNoYW5nZSB0aGUgdGV4dC1h
bGlnbiB0byBjZW50ZXIuCisgICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUodGhUYWcpICYm
IHN0eWxlLT50ZXh0QWxpZ24oKSA9PSBUQUFVVE8pCisgICAgICAgICAgICBzdHlsZS0+c2V0VGV4
dEFsaWduKENFTlRFUik7CisKKyAgICAgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFtZShsZWdlbmRU
YWcpKQorICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOworCisgICAgICAgIC8v
IE11dGF0ZSB0aGUgZGlzcGxheSB0byBCTE9DSyBvciBUQUJMRSBmb3IgY2VydGFpbiBjYXNlcywg
ZS5nLiwgaWYgc29tZW9uZSBhdHRlbXB0cyB0bworICAgICAgICAvLyBwb3NpdGlvbiBvciBmbG9h
dCBhbiBpbmxpbmUsIGNvbXBhY3QsIG9yIHJ1bi1pbi4gIENhY2hlIHRoZSBvcmlnaW5hbCBkaXNw
bGF5LCBzaW5jZSBpdAorICAgICAgICAvLyBtYXkgYmUgbmVlZGVkIGZvciBwb3NpdGlvbmVkIGVs
ZW1lbnRzIHRoYXQgaGF2ZSB0byBjb21wdXRlIHRoZWlyIHN0YXRpYyBub3JtYWwgZmxvdworICAg
ICAgICAvLyBwb3NpdGlvbnMuICBXZSBhbHNvIGZvcmNlIGlubGluZS1sZXZlbCByb290cyB0byBi
ZSBibG9jay1sZXZlbC4KKyAgICAgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgIT0gQkxPQ0sgJiYg
c3R5bGUtPmRpc3BsYXkoKSAhPSBUQUJMRSAmJiBzdHlsZS0+ZGlzcGxheSgpICE9IEJPWCAmJgor
ICAgICAgICAgICAgKHN0eWxlLT5wb3NpdGlvbigpID09IEFic29sdXRlUG9zaXRpb24gfHwgc3R5
bGUtPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbiB8fCBzdHlsZS0+ZmxvYXRpbmcoKSAhPSBG
Tk9ORSB8fAorICAgICAgICAgICAgIChlICYmIGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVu
dCgpID09IGUpKSkgeworICAgICAgICAgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5F
X1RBQkxFKQorICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KFRBQkxFKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX0JPWCkKKyAgICAgICAg
ICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShCT1gpOworICAgICAgICAgICAgZWxzZSBpZiAoc3R5
bGUtPmRpc3BsYXkoKSA9PSBMSVNUX0lURU0pIHsKKyAgICAgICAgICAgICAgICAvLyBJdCBpcyBh
IFdpbklFIGJ1ZyB0aGF0IGZsb2F0ZWQgbGlzdCBpdGVtcyBsb3NlIHRoZWlyIGJ1bGxldHMsIHNv
IHdlJ2xsIGVtdWxhdGUgdGhlIHF1aXJrLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBvbmx5IGlu
IHF1aXJrcyBtb2RlLgorICAgICAgICAgICAgICAgIGlmICghbV9jaGVja2VyLm1fc3RyaWN0UGFy
c2luZyAmJiBzdHlsZS0+ZmxvYXRpbmcoKSAhPSBGTk9ORSkKKyAgICAgICAgICAgICAgICAgICAg
c3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gQWZ0ZXIgcGVyZm9ybWluZyB0aGUgZGlzcGxheSBtdXRhdGlv
biwgY2hlY2sgdGFibGUgcm93cy4gIFdlIGRvIG5vdCBob25vciBwb3NpdGlvbjpyZWxhdGl2ZSBv
bgorICAgICAgICAvLyB0YWJsZSByb3dzIG9yIGNlbGxzLiAgVGhpcyBoYXMgYmVlbiBlc3RhYmxp
c2hlZCBpbiBDU1MyLjEgKGFuZCBjYXVzZWQgYSBjcmFzaCBpbiBjb250YWluaW5nQmxvY2soKQor
ICAgICAgICAvLyBvbiBzb21lIHNpdGVzKS4KKyAgICAgICAgaWYgKChzdHlsZS0+ZGlzcGxheSgp
ID09IFRBQkxFX0hFQURFUl9HUk9VUCB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPV19H
Uk9VUCB8fAorICAgICAgICAgICAgIHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfRk9PVEVSX0dS
T1VQIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XIHx8IHN0eWxlLT5kaXNwbGF5KCkg
PT0gVEFCTEVfQ0VMTCkgJiYKKyAgICAgICAgICAgICBzdHlsZS0+cG9zaXRpb24oKSA9PSBSZWxh
dGl2ZVBvc2l0aW9uKQorICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFN0YXRpY1Bvc2l0
aW9uKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgb3VyIHotaW5kZXggdmFsdWUgaXMgb25s
eSBhcHBsaWVkIGlmIHRoZSBvYmplY3QgaXMgcG9zaXRpb25lZC4KKyAgICBpZiAoc3R5bGUtPnBv
c2l0aW9uKCkgPT0gU3RhdGljUG9zaXRpb24pCisgICAgICAgIHN0eWxlLT5zZXRIYXNBdXRvWklu
ZGV4KCk7CisKKyAgICAvLyBBdXRvIHotaW5kZXggYmVjb21lcyAwIGZvciB0aGUgcm9vdCBlbGVt
ZW50IGFuZCB0cmFuc3BhcmVudCBvYmplY3RzLiAgVGhpcyBwcmV2ZW50cworICAgIC8vIGNhc2Vz
IHdoZXJlIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgYmxlbmRlZCBhcyBhIHNpbmdsZSB1bml0IGVu
ZCB1cCB3aXRoIGEgbm9uLXRyYW5zcGFyZW50CisgICAgLy8gb2JqZWN0IHdlZGdlZCBpbiBiZXR3
ZWVuIHRoZW0uICBBdXRvIHotaW5kZXggYWxzbyBiZWNvbWVzIDAgZm9yIG9iamVjdHMgdGhhdCBz
cGVjaWZ5IHRyYW5zZm9ybXMvbWFza3MvcmVmbGVjdGlvbnMuCisgICAgaWYgKHN0eWxlLT5oYXNB
dXRvWkluZGV4KCkgJiYgKChlICYmIGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpID09
IGUpIHx8IHN0eWxlLT5vcGFjaXR5KCkgPCAxLjBmIHx8IAorICAgICAgICBzdHlsZS0+aGFzVHJh
bnNmb3JtUmVsYXRlZFByb3BlcnR5KCkgfHwgc3R5bGUtPmhhc01hc2soKSB8fCBzdHlsZS0+Ym94
UmVmbGVjdCgpKSkKKyAgICAgICAgc3R5bGUtPnNldFpJbmRleCgwKTsKKyAgICAKKyAgICAvLyBC
dXR0b24sIGxlZ2VuZCwgaW5wdXQsIHNlbGVjdCBhbmQgdGV4dGFyZWEgYWxsIGNvbnNpZGVyIHdp
ZHRoIHZhbHVlcyBvZiAnYXV0bycgdG8gYmUgJ2ludHJpbnNpYycuCisgICAgLy8gVGhpcyB3aWxs
IGJlIGltcG9ydGFudCB3aGVuIHdlIHVzZSBibG9jayBmbG93cyBmb3IgYWxsIGZvcm0gY29udHJv
bHMuCisgICAgaWYgKGUgJiYgKGUtPmhhc1RhZ05hbWUobGVnZW5kVGFnKSB8fCBlLT5oYXNUYWdO
YW1lKGJ1dHRvblRhZykgfHwgZS0+aGFzVGFnTmFtZShpbnB1dFRhZykgfHwKKyAgICAgICAgICAg
ICAgZS0+aGFzVGFnTmFtZShzZWxlY3RUYWcpIHx8IGUtPmhhc1RhZ05hbWUodGV4dGFyZWFUYWcp
IHx8IGUtPmhhc1RhZ05hbWUoZGF0YWdyaWRUYWcpCisjaWYgRU5BQkxFKFdNTCkKKyAgICAgICAg
ICAgICAgfHwgZS0+aGFzVGFnTmFtZShXTUxOYW1lczo6aW5zZXJ0ZWRMZWdlbmRUYWcpCisgICAg
ICAgICAgICAgIHx8IGUtPmhhc1RhZ05hbWUoV01MTmFtZXM6OmlucHV0VGFnKQorI2VuZGlmCisg
ICAgICAgKSkgeworICAgICAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNBdXRvKCkpCisgICAgICAg
ICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKEludHJpbnNpYykpOworCisgICAgICAgIC8vIFRl
eHRhcmVhIGNvbnNpZGVycyBvdmVyZmxvdyB2aXNpYmxlIGFzIGF1dG8uCisgICAgICAgIGlmIChl
ICYmIGUtPmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpKSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0
T3ZlcmZsb3dYKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBPVklTSUJMRSA/IE9BVVRPIDogc3R5bGUt
Pm92ZXJmbG93WCgpKTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1koc3R5bGUtPm92
ZXJmbG93WSgpID09IE9WSVNJQkxFID8gT0FVVE8gOiBzdHlsZS0+b3ZlcmZsb3dZKCkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gRmluYWxseSB1cGRhdGUgb3VyIHRleHQgZGVjb3JhdGlv
bnMgaW4gZWZmZWN0LCBidXQgZG9uJ3QgYWxsb3cgdGV4dC1kZWNvcmF0aW9uIHRvIHBlcmNvbGF0
ZSB0aHJvdWdoCisgICAgLy8gdGFibGVzLCBpbmxpbmUgYmxvY2tzLCBpbmxpbmUgdGFibGVzLCBv
ciBydW4taW5zLgorICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFIHx8IHN0eWxlLT5k
aXNwbGF5KCkgPT0gSU5MSU5FX1RBQkxFIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gUlVOX0lOCisg
ICAgICAgIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX0JMT0NLIHx8IHN0eWxlLT5kaXNw
bGF5KCkgPT0gSU5MSU5FX0JPWCkKKyAgICAgICAgc3R5bGUtPnNldFRleHREZWNvcmF0aW9uc0lu
RWZmZWN0KHN0eWxlLT50ZXh0RGVjb3JhdGlvbigpKTsKKyAgICBlbHNlCisgICAgICAgIHN0eWxl
LT5hZGRUb1RleHREZWNvcmF0aW9uc0luRWZmZWN0KHN0eWxlLT50ZXh0RGVjb3JhdGlvbigpKTsK
KyAgICAKKyAgICAvLyBJZiBlaXRoZXIgb3ZlcmZsb3cgdmFsdWUgaXMgbm90IHZpc2libGUsIGNo
YW5nZSB0byBhdXRvLgorICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT01BUlFVRUUgJiYg
c3R5bGUtPm92ZXJmbG93WSgpICE9IE9NQVJRVUVFKQorICAgICAgICBzdHlsZS0+c2V0T3ZlcmZs
b3dZKE9NQVJRVUVFKTsKKyAgICBlbHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT01BUlFV
RUUgJiYgc3R5bGUtPm92ZXJmbG93WCgpICE9IE9NQVJRVUVFKQorICAgICAgICBzdHlsZS0+c2V0
T3ZlcmZsb3dYKE9NQVJRVUVFKTsKKyAgICBlbHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0g
T1ZJU0lCTEUgJiYgc3R5bGUtPm92ZXJmbG93WSgpICE9IE9WSVNJQkxFKQorICAgICAgICBzdHls
ZS0+c2V0T3ZlcmZsb3dYKE9BVVRPKTsKKyAgICBlbHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dZKCkg
PT0gT1ZJU0lCTEUgJiYgc3R5bGUtPm92ZXJmbG93WCgpICE9IE9WSVNJQkxFKQorICAgICAgICBz
dHlsZS0+c2V0T3ZlcmZsb3dZKE9BVVRPKTsKKworICAgIC8vIFRhYmxlIHJvd3MsIHNlY3Rpb25z
IGFuZCB0aGUgdGFibGUgaXRzZWxmIHdpbGwgc3VwcG9ydCBvdmVyZmxvdzpoaWRkZW4gYW5kIHdp
bGwgaWdub3JlIHNjcm9sbC9hdXRvLgorICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHRhYmxlIHNl
Y3Rpb25zIHdpbGwgc3VwcG9ydCBhdXRvIGFuZCBzY3JvbGwuCisgICAgaWYgKHN0eWxlLT5kaXNw
bGF5KCkgPT0gVEFCTEUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBJTkxJTkVfVEFCTEUgfHwKKyAg
ICAgICAgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1dfR1JPVVAgfHwgc3R5bGUtPmRpc3Bs
YXkoKSA9PSBUQUJMRV9ST1cpIHsKKyAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSAhPSBP
VklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT0hJRERFTikgCisgICAgICAgICAgICBz
dHlsZS0+c2V0T3ZlcmZsb3dYKE9WSVNJQkxFKTsKKyAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxv
d1koKSAhPSBPVklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dZKCkgIT0gT0hJRERFTikgCisgICAg
ICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9WSVNJQkxFKTsKKyAgICB9CisKKyAgICAvLyBN
ZW51bGlzdHMgc2hvdWxkIGhhdmUgdmlzaWJsZSBvdmVyZmxvdworICAgIGlmIChzdHlsZS0+YXBw
ZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkgeworICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dY
KE9WSVNJQkxFKTsKKyAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPVklTSUJMRSk7CisgICAg
fQorCisgICAgLy8gQ3VsbCBvdXQgYW55IHVzZWxlc3MgbGF5ZXJzIGFuZCBhbHNvIHJlcGVhdCBw
YXR0ZXJucyBpbnRvIGFkZGl0aW9uYWwgbGF5ZXJzLgorICAgIHN0eWxlLT5hZGp1c3RCYWNrZ3Jv
dW5kTGF5ZXJzKCk7CisgICAgc3R5bGUtPmFkanVzdE1hc2tMYXllcnMoKTsKKworICAgIC8vIERv
IHRoZSBzYW1lIGZvciBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucy4KKyAgICBzdHlsZS0+YWRq
dXN0QW5pbWF0aW9ucygpOworICAgIHN0eWxlLT5hZGp1c3RUcmFuc2l0aW9ucygpOworCisgICAg
Ly8gSW1wb3J0YW50OiBJbnRyaW5zaWMgbWFyZ2lucyBnZXQgYWRkZWQgdG8gY29udHJvbHMgYmVm
b3JlIHRoZSB0aGVtZSBoYXMgYWRqdXN0ZWQgdGhlIHN0eWxlLCBzaW5jZSB0aGUgdGhlbWUgd2ls
bAorICAgIC8vIGFsdGVyIGZvbnRzIGFuZCBoZWlnaHRzL3dpZHRocy4KKyAgICBpZiAoZSAmJiBl
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpICYmIHN0eWxlLT5mb250U2l6ZSgpID49IDExKSB7Cisg
ICAgICAgIC8vIERvbid0IGFwcGx5IGludHJpbnNpYyBtYXJnaW5zIHRvIGltYWdlIGJ1dHRvbnMu
ICBUaGUgZGVzaWduZXIga25vd3MgaG93IGJpZyB0aGUgaW1hZ2VzIGFyZSwKKyAgICAgICAgLy8g
c28gd2UgaGF2ZSB0byB0cmVhdCBhbGwgaW1hZ2UgYnV0dG9ucyBhcyB0aG91Z2ggdGhleSB3ZXJl
IGV4cGxpY2l0bHkgc2l6ZWQuCisgICAgICAgIGlmICghZS0+aGFzVGFnTmFtZShpbnB1dFRhZykg
fHwgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGUpLT5pbnB1dFR5cGUoKSAhPSBIVE1M
SW5wdXRFbGVtZW50OjpJTUFHRSkKKyAgICAgICAgICAgIGFkZEludHJpbnNpY01hcmdpbnMoc3R5
bGUpOworICAgIH0KKworICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBoYXZlIGEgY3JhY2sgYXQg
YWRqdXN0aW5nIHRoZSBzdHlsZS4KKyAgICBpZiAoc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSkKKyAg
ICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHlsZSh0aGlzLCBzdHls
ZSwgZSwgbV9oYXNVQUFwcGVhcmFuY2UsIG1fYm9yZGVyRGF0YSwgbV9iYWNrZ3JvdW5kRGF0YSwg
bV9iYWNrZ3JvdW5kQ29sb3IpOworCisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAoZSAmJiBlLT5p
c1NWR0VsZW1lbnQoKSkgeworICAgICAgICAvLyBTcGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9T
VkcvbWFza2luZy5odG1sI092ZXJmbG93UHJvcGVydHkKKyAgICAgICAgaWYgKHN0eWxlLT5vdmVy
Zmxvd1koKSA9PSBPU0NST0xMKQorICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPSElE
REVOKTsKKyAgICAgICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJmbG93WSgpID09IE9BVVRPKQorICAg
ICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPVklTSUJMRSk7CisKKyAgICAgICAgaWYgKHN0
eWxlLT5vdmVyZmxvd1goKSA9PSBPU0NST0xMKQorICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJm
bG93WChPSElEREVOKTsKKyAgICAgICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJmbG93WCgpID09IE9B
VVRPKQorICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPVklTSUJMRSk7CisKKyAgICAg
ICAgLy8gT25seSB0aGUgcm9vdCA8c3ZnPiBlbGVtZW50IGluIGFuIFNWRyBkb2N1bWVudCBmcmFn
bWVudCB0cmVlIGhvbm9ycyBjc3MgcG9zaXRpb24KKyAgICAgICAgaWYgKCEoZS0+aGFzVGFnTmFt
ZShTVkdOYW1lczo6c3ZnVGFnKSAmJiBlLT5wYXJlbnROb2RlKCkgJiYgIWUtPnBhcmVudE5vZGUo
KS0+aXNTVkdFbGVtZW50KCkpKQorICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFJlbmRl
clN0eWxlOjppbml0aWFsUG9zaXRpb24oKSk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6dXBkYXRlRm9udCgpCit7CisgICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVz
dCgpOworICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShzdHlsZSgpLCBtX3BhcmVudFN0
eWxlKTsKKyAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSk7Cisg
ICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CisgICAgbV9mb250RGly
dHkgPSBmYWxzZTsKK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjYWNoZUJvcmRlckFuZEJh
Y2tncm91bmQoKQoreworICAgIG1faGFzVUFBcHBlYXJhbmNlID0gbV9zdHlsZS0+aGFzQXBwZWFy
YW5jZSgpOworICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkgeworICAgICAgICBtX2JvcmRlckRh
dGEgPSBtX3N0eWxlLT5ib3JkZXIoKTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kRGF0YSA9ICptX3N0
eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7CisgICAgICAgIG1fYmFja2dyb3VuZENvbG9yID0gbV9z
dHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgfQorfQorCitQYXNzUmVmUHRyPENTU1J1bGVM
aXN0PiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCBi
b29sIGF1dGhvck9ubHkpCit7CisgICAgcmV0dXJuIHBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50
KGUsIE5PUFNFVURPLCBhdXRob3JPbmx5KTsKK30KKworUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4g
Q1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwg
UHNldWRvSWQgcHNldWRvSWQsIGJvb2wgYXV0aG9yT25seSkKK3sKKyAgICBpZiAoIWUgfHwgIWUt
PmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIG1fY2hlY2tlci5tX2NvbGxlY3RSdWxlc09ubHkgPSB0cnVlOworCisgICAgaW5pdEVs
ZW1lbnQoZSk7CisgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCAwLCBwc2V1ZG9JZCk7CisKKyAg
ICBpZiAoIWF1dGhvck9ubHkpIHsKKyAgICAgICAgaW50IGZpcnN0VUFSdWxlID0gLTEsIGxhc3RV
QVJ1bGUgPSAtMTsKKyAgICAgICAgLy8gRmlyc3Qgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdXNl
ciBhZ2VudCBzaGVldC4KKyAgICAgICAgbWF0Y2hVQVJ1bGVzKGZpcnN0VUFSdWxlLCBsYXN0VUFS
dWxlKTsKKworICAgICAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBydWxlcy4KKyAgICAg
ICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7CisgICAgICAgICAgICBpbnQgZmly
c3RVc2VyUnVsZSA9IC0xLCBsYXN0VXNlclJ1bGUgPSAtMTsKKyAgICAgICAgICAgIG1hdGNoUnVs
ZXMobV91c2VyU3R5bGUsIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVsZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpIHsKKyAgICAgICAg
Ly8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMuCisgICAgICAgIGludCBmaXJzdEF1
dGhvclJ1bGUgPSAtMSwgbGFzdEF1dGhvclJ1bGUgPSAtMTsKKyAgICAgICAgbWF0Y2hSdWxlcyht
X2F1dGhvclN0eWxlLCBmaXJzdEF1dGhvclJ1bGUsIGxhc3RBdXRob3JSdWxlKTsKKyAgICB9CisK
KyAgICBtX2NoZWNrZXIubV9jb2xsZWN0UnVsZXNPbmx5ID0gZmFsc2U7CisgICAgCisgICAgcmV0
dXJuIG1fcnVsZUxpc3QucmVsZWFzZSgpOworfQorCitib29sIENTU1N0eWxlU2VsZWN0b3I6OmNo
ZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCkKK3sKKyAgICBtX2R5bmFtaWNQc2V1ZG8gPSBO
T1BTRVVETzsKKworICAgIC8vIENoZWNrIHRoZSBzZWxlY3RvcgorICAgIFNlbGVjdG9yTWF0Y2gg
bWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tTZWxlY3RvcihzZWwsIG1fZWxlbWVudCwgJm1fc2VsZWN0
b3JBdHRycywgbV9keW5hbWljUHNldWRvLCBmYWxzZSwgZmFsc2UsIHN0eWxlKCksIG1fcGFyZW50
U3R5bGUpOworICAgIGlmIChtYXRjaCAhPSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAm
JiBtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSAhPSBtX2R5bmFtaWNQc2V1ZG8pCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLyBSZWN1cnNpdmUgY2hlY2sg
b2Ygc2VsZWN0b3JzIGFuZCBjb21iaW5hdG9ycworLy8gSXQgY2FuIHJldHVybiAzIGRpZmZlcmVu
dCB2YWx1ZXM6CisvLyAqIFNlbGVjdG9yTWF0Y2hlcyAgICAgICAgIC0gdGhlIHNlbGVjdG9yIG1h
dGNoZXMgdGhlIGVsZW1lbnQgZQorLy8gKiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAtIHRoZSBz
ZWxlY3RvciBmYWlscyBmb3IgdGhlIGVsZW1lbnQgZQorLy8gKiBTZWxlY3RvckZhaWxzQ29tcGxl
dGVseSAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb3IgYW5jZXN0
b3Igb2YgZQorQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JNYXRjaCBDU1NTdHlsZVNlbGVjdG9y
OjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVu
dCogZSwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIHNlbGVjdG9yQXR0cnMsIFBzZXVkb0lk
JiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5r
LCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0
eWxlKSBjb25zdAoreworI2lmIEVOQUJMRShTVkcpCisgICAgLy8gU3BlYzogQ1NTMiBzZWxlY3Rv
cnMgY2Fubm90IGJlIGFwcGxpZWQgdG8gdGhlIChjb25jZXB0dWFsbHkpIGNsb25lZCBET00gdHJl
ZQorICAgIC8vIGJlY2F1c2UgaXRzIGNvbnRlbnRzIGFyZSBub3QgcGFydCBvZiB0aGUgZm9ybWFs
IGRvY3VtZW50IHN0cnVjdHVyZS4KKyAgICBpZiAoZS0+aXNTVkdFbGVtZW50KCkgJiYgZS0+aXNT
aGFkb3dOb2RlKCkpCisgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyNl
bmRpZgorCisgICAgLy8gZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoCisgICAgaWYgKCFjaGVj
a09uZVNlbGVjdG9yKHNlbCwgZSwgc2VsZWN0b3JBdHRycywgZHluYW1pY1BzZXVkbywgaXNTdWJT
ZWxlY3RvciwgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQorICAgICAgICByZXR1
cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CisKKyAgICAvLyBUaGUgcmVzdCBvZiB0aGUgc2VsZWN0
b3JzIGhhcyB0byBtYXRjaAorICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbiA9IHNl
bC0+cmVsYXRpb24oKTsKKworICAgIC8vIFByZXBhcmUgbmV4dCBzZWwKKyAgICBzZWwgPSBzZWwt
PnRhZ0hpc3RvcnkoKTsKKyAgICBpZiAoIXNlbCkKKyAgICAgICAgcmV0dXJuIFNlbGVjdG9yTWF0
Y2hlczsKKworICAgIGlmIChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCisg
ICAgICAgIC8vIEJhaWwtb3V0IGlmIHRoaXMgc2VsZWN0b3IgaXMgaXJyZWxldmFudCBmb3IgdGhl
IHBzZXVkb1N0eWxlCisgICAgICAgIGlmIChtX3BzZXVkb1N0eWxlICE9IE5PUFNFVURPICYmIG1f
cHNldWRvU3R5bGUgIT0gZHluYW1pY1BzZXVkbykKKyAgICAgICAgICAgIHJldHVybiBTZWxlY3Rv
ckZhaWxzQ29tcGxldGVseTsKKworICAgIC8vIENoZWNrIGZvciBuZXN0ZWQgbGlua3MuCisgICAg
aWYgKG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgJiYgIWlzU3ViU2VsZWN0b3IpIHsKKyAgICAg
ICAgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRTdHls
ZSA6IGUtPnJlbmRlclN0eWxlKCk7CisgICAgICAgIGlmIChjdXJyZW50U3R5bGUgJiYgY3VycmVu
dFN0eWxlLT5pbnNpZGVMaW5rKCkgJiYgZS0+aXNMaW5rKCkpIHsKKyAgICAgICAgICAgIGlmIChl
bmNvdW50ZXJlZExpbmspCisgICAgICAgICAgICAgICAgbV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFz
cyA9IGZhbHNlOyAvLyBUaGlzIGxpbmsgaXMgbm90IHJlbGV2YW50IHRvIHRoZSBzdHlsZSBiZWlu
ZyByZXNvbHZlZCwgc28gZGlzYWJsZSBtYXRjaGluZy4KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBlbmNvdW50ZXJlZExpbmsgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisg
ICAgc3dpdGNoIChyZWxhdGlvbikgeworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpEZXNjZW5k
YW50OgorICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBu
ID0gZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVt
ZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBs
ZXRlbHk7CisgICAgICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAg
ICAgICAgICAgICAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gY2hlY2tTZWxlY3RvcihzZWwsIGUs
IHNlbGVjdG9yQXR0cnMsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOwor
ICAgICAgICAgICAgICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckZhaWxzTG9jYWxseSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxkOgorICAgICAgICB7CisgICAg
ICAgICAgICBOb2RlKiBuID0gZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgaWYgKCFuIHx8
ICFuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFp
bHNDb21wbGV0ZWx5OworICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsK
KyAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2VsZWN0b3JBdHRycywg
ZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGluayk7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5ICYmIGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJl
bnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgICAgIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBh
cmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5
bGUpCisgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVk
QnlEaXJlY3RBZGphY2VudFJ1bGVzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBOb2Rl
KiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+
aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmco
KTsKKyAgICAgICAgICAgIGlmICghbikKKyAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JG
YWlsc0xvY2FsbHk7CisgICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwor
ICAgICAgICAgICAgbV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IGZhbHNlOworICAgICAgICAg
ICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBzZWxlY3RvckF0dHJzLCBkeW5hbWljUHNl
dWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rKTsgCisgICAgICAgIH0KKyAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDoKKyAgICAgICAgICAgIGlmICghbV9jb2xsZWN0
UnVsZXNPbmx5ICYmIGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVu
dE5vZGUoKSkgeworICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVs
ZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVuZGVy
U3R5bGUoKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCisgICAgICAgICAgICAg
ICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25h
bFJ1bGVzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAg
ICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFuKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CisgICAgICAgICAg
ICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAgICAgICAgICAgICAgICBtX21h
dGNoVmlzaXRlZFBzZXVkb0NsYXNzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgU2VsZWN0b3JN
YXRjaCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBzZWxlY3RvckF0dHJzLCBkeW5hbWlj
UHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rKTsKKyAgICAgICAgICAgICAgICBpZiAobWF0
Y2ggIT0gU2VsZWN0b3JGYWlsc0xvY2FsbHkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBt
YXRjaDsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I6CisgICAgICAgICAgICAvLyBhIHNlbGVjdG9yIGlzIGlu
dmFsaWQgaWYgc29tZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8tZWxlbWVudAorICAgICAgICAgICAg
Ly8gV2UgbWFrZSBhbiBleGNlcHRpb24gZm9yIHNjcm9sbGJhciBwc2V1ZG8gZWxlbWVudHMgYW5k
IGFsbG93IGEgc2V0IG9mIHBzZXVkbyBjbGFzc2VzIChidXQgbm90aGluZyBlbHNlKQorICAgICAg
ICAgICAgLy8gdG8gZm9sbG93IHRoZSBwc2V1ZG8gZWxlbWVudHMuCisgICAgICAgICAgICBpZiAo
KGVsZW1lbnRTdHlsZSB8fCBtX2NvbGxlY3RSdWxlc09ubHkpICYmIGR5bmFtaWNQc2V1ZG8gIT0g
Tk9QU0VVRE8gJiYgZHluYW1pY1BzZXVkbyAhPSBTRUxFQ1RJT04gJiYKKyAgICAgICAgICAgICAg
ICAhKChSZW5kZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2ZSgpIHx8IGR5bmFt
aWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRvID09IFJFU0laRVIp
ICYmIHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAgICAgIHJldHVy
biBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2VsZWN0b3JBdHRycywgZHluYW1pY1BzZXVkbywgdHJ1
ZSwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworfQorCitzdGF0aWMg
dm9pZCBhZGRMb2NhbE5hbWVUb1NldChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogc2V0LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSkKK3sKKyAgICBzZXQtPmFkZChxTmFtZS5sb2NhbE5h
bWUoKS5pbXBsKCkpOworfQorCitzdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIGNy
ZWF0ZUh0bWxDYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVzU2V0KCkKK3sKKyAgICAvLyBUaGlzIGlz
IHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgaW4gSFRNTCA0LjAxIHdpdGggdmFsdWVzIG1hcmtlZCBh
cyAiW0NJXSIgb3IgY2FzZS1pbnNlbnNpdGl2ZQorICAgIC8vIE1vemlsbGEgdHJlYXRzIGFsbCBv
dGhlciB2YWx1ZXMgYXMgY2FzZS1zZW5zaXRpdmUsIHRodXMgc28gZG8gd2UuCisgICAgSGFzaFNl
dDxBdG9taWNTdHJpbmdJbXBsKj4qIGF0dHJTZXQgPSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmdJ
bXBsKj47CisKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBhY2NlcHRfY2hhcnNldEF0
dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGFjY2VwdEF0dHIpOworICAgIGFk
ZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGFsaWduQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9T
ZXQoYXR0clNldCwgYWxpbmtBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBh
eGlzQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgYmdjb2xvckF0dHIpOwor
ICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGNoYXJzZXRBdHRyKTsKKyAgICBhZGRMb2Nh
bE5hbWVUb1NldChhdHRyU2V0LCBjaGVja2VkQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQo
YXR0clNldCwgY2xlYXJBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBjb2Rl
dHlwZUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGNvbG9yQXR0cik7Cisg
ICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgY29tcGFjdEF0dHIpOworICAgIGFkZExvY2Fs
TmFtZVRvU2V0KGF0dHJTZXQsIGRlY2xhcmVBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChh
dHRyU2V0LCBkZWZlckF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGRpckF0
dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGRpc2FibGVkQXR0cik7CisgICAg
YWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgZW5jdHlwZUF0dHIpOworICAgIGFkZExvY2FsTmFt
ZVRvU2V0KGF0dHJTZXQsIGZhY2VBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0
LCBmcmFtZUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGhyZWZsYW5nQXR0
cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgaHR0cF9lcXVpdkF0dHIpOworICAg
IGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIGxhbmdBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVU
b1NldChhdHRyU2V0LCBsYW5ndWFnZUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJT
ZXQsIGxpbmtBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBtZWRpYUF0dHIp
OworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIG1ldGhvZEF0dHIpOworICAgIGFkZExv
Y2FsTmFtZVRvU2V0KGF0dHJTZXQsIG11bHRpcGxlQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9T
ZXQoYXR0clNldCwgbm9ocmVmQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwg
bm9yZXNpemVBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBub3NoYWRlQXR0
cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgbm93cmFwQXR0cik7CisgICAgYWRk
TG9jYWxOYW1lVG9TZXQoYXR0clNldCwgcmVhZG9ubHlBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVU
b1NldChhdHRyU2V0LCByZWxBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBy
ZXZBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBydWxlc0F0dHIpOworICAg
IGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHNjb3BlQXR0cik7CisgICAgYWRkTG9jYWxOYW1l
VG9TZXQoYXR0clNldCwgc2Nyb2xsaW5nQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0
clNldCwgc2VsZWN0ZWRBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBzaGFw
ZUF0dHIpOworICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHRhcmdldEF0dHIpOworICAg
IGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHRleHRBdHRyKTsKKyAgICBhZGRMb2NhbE5hbWVU
b1NldChhdHRyU2V0LCB0eXBlQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwg
dmFsaWduQXR0cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdmFsdWV0eXBlQXR0
cik7CisgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdmxpbmtBdHRyKTsKKworICAgIHJl
dHVybiBhdHRyU2V0OworfQorCitzdGF0aWMgYm9vbCBodG1sQXR0cmlidXRlSGFzQ2FzZUluc2Vu
c2l0aXZlVmFsdWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cikKK3sKKyAgICBzdGF0aWMgSGFz
aFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIGh0bWxDYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVzU2V0
ID0gY3JlYXRlSHRtbENhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQoKTsKKyAgICBib29sIGlz
UG9zc2libGVIVE1MQXR0ciA9ICFhdHRyLmhhc1ByZWZpeCgpICYmIChhdHRyLm5hbWVzcGFjZVVS
SSgpID09IG51bGxBdG9tKTsKKyAgICByZXR1cm4gaXNQb3NzaWJsZUhUTUxBdHRyICYmIGh0bWxD
YXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVzU2V0LT5jb250YWlucyhhdHRyLmxvY2FsTmFtZSgpLmlt
cGwoKSk7Cit9CisKK2Jvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVj
a09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nSW1wbCo+KiBzZWxlY3RvckF0dHJzLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9v
bCBpc1N1YlNlbGVjdG9yLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSog
ZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAoreworICAgIGlmICghZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKHNlbC0+aGFzVGFnKCkpIHsKKyAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBzZWxMb2NhbE5hbWUgPSBzZWwtPm1fdGFnLmxvY2FsTmFtZSgpOworICAgICAgICBp
ZiAoc2VsTG9jYWxOYW1lICE9IHN0YXJBdG9tICYmIHNlbExvY2FsTmFtZSAhPSBlLT5sb2NhbE5h
bWUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBzZWxOUyA9IHNlbC0+bV90YWcubmFtZXNwYWNlVVJJKCk7CisgICAgICAgIGlmIChzZWxO
UyAhPSBzdGFyQXRvbSAmJiBzZWxOUyAhPSBlLT5uYW1lc3BhY2VVUkkoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2VsLT5oYXNBdHRyaWJ1dGUoKSkgewor
ICAgICAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykKKyAgICAgICAg
ICAgIHJldHVybiBlLT5oYXNDbGFzcygpICYmIHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihl
KS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHNlbC0+bV92YWx1ZSk7CisKKyAgICAgICAgaWYgKHNl
bC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpCisgICAgICAgICAgICByZXR1cm4gZS0+aGFz
SUQoKSAmJiBlLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpID09IHNlbC0+bV92YWx1ZTsKKyAgICAg
ICAgCisgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHIgPSBzZWwtPmF0dHJpYnV0ZSgp
OworCisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIGNhc2Ugd2VyZSBlbGVtZW50U3R5bGUg
aXMgMC4KKyAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSAmJiAoIWUtPmlzU3R5bGVkRWxlbWVudCgp
IHx8ICghc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGUpLT5pc01hcHBlZEF0dHJpYnV0ZShh
dHRyKSAmJiBhdHRyICE9IHR5cGVBdHRyICYmIGF0dHIgIT0gcmVhZG9ubHlBdHRyKSkpIHsKKyAg
ICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUF0dHJpYnV0ZVNlbGVjdG9ycygp
OyAvLyBTcGVjaWFsLWNhc2UgdGhlICJ0eXBlIiBhbmQgInJlYWRvbmx5IiBhdHRyaWJ1dGVzIHNv
IGlucHV0IGZvcm0gY29udHJvbHMgY2FuIHNoYXJlIHN0eWxlLgorICAgICAgICAgICAgaWYgKHNl
bGVjdG9yQXR0cnMpCisgICAgICAgICAgICAgICAgc2VsZWN0b3JBdHRycy0+YWRkKGF0dHIubG9j
YWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUgPSBlLT5nZXRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIGlmICh2YWx1ZS5pc051
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0cmlidXRlIGlzIG5vdCBzZXQK
KworICAgICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSAhbV9kb2N1bWVudElzSFRNTCB8fCAhaHRt
bEF0dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2ZVZhbHVlKGF0dHIpOworCisgICAgICAgIHN3aXRj
aCAoc2VsLT5tX21hdGNoKSB7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkV4YWN0OgorICAg
ICAgICAgICAgaWYgKGNhc2VTZW5zaXRpdmUgPyBzZWwtPm1fdmFsdWUgIT0gdmFsdWUgOiAhZXF1
YWxJZ25vcmluZ0Nhc2Uoc2VsLT5tX3ZhbHVlLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
Okxpc3Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElnbm9yZSBlbXB0eSBzZWxlY3RvcnMg
b3Igc2VsZWN0b3JzIGNvbnRhaW5pbmcgc3BhY2VzCisgICAgICAgICAgICBpZiAoc2VsLT5tX3Zh
bHVlLmNvbnRhaW5zKCcgJykgfHwgc2VsLT5tX3ZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGludCBzdGFydFNlYXJjaEF0ID0gMDsK
KyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgaW50IGZvdW5kUG9z
ID0gdmFsdWUuZmluZChzZWwtPm1fdmFsdWUsIHN0YXJ0U2VhcmNoQXQsIGNhc2VTZW5zaXRpdmUp
OworICAgICAgICAgICAgICAgIGlmIChmb3VuZFBvcyA9PSAtMSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChmb3VuZFBvcyA9PSAwIHx8IHZh
bHVlW2ZvdW5kUG9zLTFdID09ICcgJykgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBl
bmRTdHIgPSBmb3VuZFBvcyArIHNlbC0+bV92YWx1ZS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGVuZFN0ciA9PSB2YWx1ZS5sZW5ndGgoKSB8fCB2YWx1ZVtlbmRTdHJdID09ICcg
JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBXZSBmb3VuZCBhIG1hdGNoLgor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBO
byBtYXRjaC4gIEtlZXAgbG9va2luZy4KKyAgICAgICAgICAgICAgICBzdGFydFNlYXJjaEF0ID0g
Zm91bmRQb3MgKyAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q29udGFpbjoKKyAgICAgICAgICAgIGlmICgh
dmFsdWUuY29udGFpbnMoc2VsLT5tX3ZhbHVlLCBjYXNlU2Vuc2l0aXZlKSB8fCBzZWwtPm1fdmFs
dWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpCZWdpbjoKKyAgICAgICAgICAgIGlm
ICghdmFsdWUuc3RhcnRzV2l0aChzZWwtPm1fdmFsdWUsIGNhc2VTZW5zaXRpdmUpIHx8IHNlbC0+
bV92YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkVuZDoKKyAgICAgICAgICAg
IGlmICghdmFsdWUuZW5kc1dpdGgoc2VsLT5tX3ZhbHVlLCBjYXNlU2Vuc2l0aXZlKSB8fCBzZWwt
Pm1fdmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpIeXBoZW46CisgICAgICAg
ICAgICBpZiAodmFsdWUubGVuZ3RoKCkgPCBzZWwtPm1fdmFsdWUubGVuZ3RoKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCF2YWx1ZS5zdGFydHNXaXRo
KHNlbC0+bV92YWx1ZSwgY2FzZVNlbnNpdGl2ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgLy8gSXQgdGhleSBzdGFydCB0aGUgc2FtZSwgY2hlY2sgZm9yIGV4
YWN0IG1hdGNoIG9yIGZvbGxvd2luZyAnLSc6CisgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3Ro
KCkgIT0gc2VsLT5tX3ZhbHVlLmxlbmd0aCgpICYmIHZhbHVlW3NlbC0+bV92YWx1ZS5sZW5ndGgo
KV0gIT0gJy0nKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzczoKKyAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudDoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChzZWwtPm1fbWF0Y2gg
PT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSB7CisgICAgICAgIC8vIEhhbmRsZSA6bm90IHVw
IGZyb250LgorICAgICAgICBpZiAoc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb05vdCkgeworICAgICAgICAgICAgLy8gY2hlY2sgdGhlIHNpbXBsZSBzZWxlY3RvcgorICAg
ICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsID0gc2VsLT5zaW1wbGVTZWxlY3Rvcigp
OyBzdWJTZWw7IHN1YlNlbCA9IHN1YlNlbC0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gOm5vdCBjYW5ub3QgbmVzdC4gSSBkb24ndCByZWFsbHkga25vdyB3aHkgdGhpcyBpcyBh
CisgICAgICAgICAgICAgICAgLy8gcmVzdHJpY3Rpb24gaW4gQ1NTMywgYnV0IGl0IGlzLCBzbyBs
ZXQncyBob25vciBpdC4KKyAgICAgICAgICAgICAgICAvLyB0aGUgcGFyc2VyIGVuZm9yY2VzIHRo
YXQgdGhpcyBuZXZlciBvY2N1cnMKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXN1YlNlbC0+c2lt
cGxlU2VsZWN0b3IoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrT25lU2VsZWN0b3Io
c3ViU2VsLCBlLCBzZWxlY3RvckF0dHJzLCBkeW5hbWljUHNldWRvLCB0cnVlLCBlbGVtZW50U3R5
bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGR5bmFtaWNQc2V1ZG8gIT0gTk9Q
U0VVRE8gJiYgKFJlbmRlclNjcm9sbGJhcjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwg
ZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfQ09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVT
SVpFUikpIHsKKyAgICAgICAgICAgIC8vIENTUyBzY3JvbGxiYXJzIG1hdGNoIGEgc3BlY2lmaWMg
c3Vic2V0IG9mIHBzZXVkbyBjbGFzc2VzLCBhbmQgdGhleSBoYXZlIHNwZWNpYWxpemVkIHJ1bGVz
IGZvciBlYWNoCisgICAgICAgICAgICAvLyAoc2luY2UgdGhlcmUgYXJlIG5vIGVsZW1lbnRzIGlu
dm9sdmVkKS4KKyAgICAgICAgICAgIHJldHVybiBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKHNl
bCwgZHluYW1pY1BzZXVkbyk7CisgICAgICAgIH0gZWxzZSBpZiAoZHluYW1pY1BzZXVkbyA9PSBT
RUxFQ1RJT04pIHsKKyAgICAgICAgICAgIGlmIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxl
Y3Rvcjo6UHNldWRvV2luZG93SW5hY3RpdmUpCisgICAgICAgICAgICAgICAgcmV0dXJuICFtX2Rv
Y3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBOb3JtYWwgZWxlbWVudCBwc2V1ZG8gY2xhc3MgY2hlY2tp
bmcuCisgICAgICAgIHN3aXRjaCAoc2VsLT5wc2V1ZG9UeXBlKCkpIHsKKyAgICAgICAgICAgIC8v
IFBzZXVkbyBjbGFzc2VzOgorICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90
OgorICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBBbHJlYWR5IGhhbmRsZWQgdXAgYWJvdmUuCisg
ICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbXB0eTogeworICAgICAgICAgICAg
ICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBl
LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihuKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghdGV4dE5vZGUtPmRhdGEoKS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIW1f
Y29sbGVjdFJ1bGVzT25seSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFN0eWxl
KQorICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRFbXB0eVN0YXRlKHJl
c3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRlclN0eWxlKCkgJiYg
KGUtPmRvY3VtZW50KCktPnVzZXNTaWJsaW5nUnVsZXMoKSB8fCBlLT5yZW5kZXJTdHlsZSgpLT51
bmlxdWUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBlLT5yZW5kZXJTdHlsZSgpLT5zZXRF
bXB0eVN0YXRlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9GaXJzdENoaWxkOiB7CisgICAgICAgICAgICAgICAgLy8gZmlyc3QtY2hpbGQgbWF0
Y2hlcyB0aGUgZmlyc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50CisgICAgICAgICAgICAgICAg
aWYgKGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkg
eworICAgICAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAg
ICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
bikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRTdHlsZSA6
IGUtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJl
bnROb2RlKCktPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFy
ZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENo
aWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcygpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdCAmJiBjaGlsZFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoaWxkU3R5bGUtPnNldEZpcnN0Q2hpbGRTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RPZlR5cGU6IHsKKyAgICAgICAgICAgICAgICAvLyBmaXJz
dC1vZi10eXBlIG1hdGNoZXMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgaXRzIHR5cGUKKyAgICAgICAg
ICAgICAgICBpZiAoZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50
Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlLT50YWdRTmFtZSgp
OworICAgICAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+aGFzVGFn
TmFtZSh0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIW4pCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1
bGVzT25seSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+cGFyZW50Tm9kZSgp
LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxl
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFm
ZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9MYXN0Q2hpbGQ6IHsKKyAgICAgICAgICAgICAgICAvLyBsYXN0LWNo
aWxkIG1hdGNoZXMgdGhlIGxhc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50CisgICAgICAgICAg
ICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPm5leHRTaWJsaW5nKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFtX2NvbGxlY3RSdWxlc09ubHkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVy
U3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJl
bmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0
ZWRCeUxhc3RDaGlsZFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0
ICYmIGNoaWxkU3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRTdHlsZS0+
c2V0TGFzdENoaWxkU3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0xhc3RPZlR5cGU6IHsKKyAgICAgICAgICAgICAgICAvLyBsYXN0LW9mLXR5cGUgbWF0Y2hl
cyB0aGUgbGFzdCBlbGVtZW50IG9mIGl0cyB0eXBlCisgICAgICAgICAgICAgICAgaWYgKEVsZW1l
bnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRT
dHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocGFyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50
U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVt
ZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlLT50YWdR
TmFtZSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBuID0gZS0+bmV4dFNpYmxpbmcoKTsK
KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5oYXNU
YWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Pbmx5Q2hpbGQ6IHsKKyAgICAgICAg
ICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkg
eworICAgICAgICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBsYXN0Q2hpbGQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGlsZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICYmIHBhcmVudEVsZW1lbnQt
PmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
biA9IGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobiAm
JiAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBu
LT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGlsZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0
eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQ
YXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0
ZWRCeUxhc3RDaGlsZFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCAmJiBjaGlsZFN0eWxlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkU3R5bGUtPnNldEZpcnN0Q2hpbGRTdGF0ZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RDaGlsZCAmJiBjaGlsZFN0eWxlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3R5bGUtPnNldExhc3RDaGlsZFN0YXRlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hp
bGQgJiYgbGFzdENoaWxkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb09u
bHlPZlR5cGU6IHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzZWxlY3RvciBpcyB2
ZXJ5IHNsb3cuCisgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBl
LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RS
dWxlc09ubHkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQt
PnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5B
ZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9u
YWxSdWxlcygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBh
cnNpbmdDaGlsZHJlbigpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgYm9vbCBsYXN0Q2hpbGQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FOYW1lKCk7CisgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKG4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2Rl
KCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgbiA9
IG4tPnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGlmICghbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q2hpbGQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbiA9IGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAobikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1l
bnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5oYXNUYWdOYW1lKHR5cGUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsYXN0Q2hpbGQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmaXJzdENoaWxkICYmIGxhc3RDaGlsZDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhDaGlsZDogeworICAgICAgICAgICAgICAgIGlm
ICghc2VsLT5wYXJzZU50aCgpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkg
eworICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxOworICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHdo
aWxlIChuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHMgPSBuLT5yZW5k
ZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
cyA/IHMtPmNoaWxkSW5kZXgoKSA6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IGluZGV4
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5w
cmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0
eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQ
YXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoY2hpbGRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGlsZFN0eWxlLT5zZXRDaGlsZEluZGV4KGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHls
ZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBpZiAoc2VsLT5tYXRjaE50aChjb3VudCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhPZlR5cGU6
IHsKKyAgICAgICAgICAgICAgICBpZiAoIXNlbC0+cGFyc2VOdGgoKSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQg
PSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0g
MTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRh
Z1FOYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxp
bmcoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4p
LT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7
CisgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5
bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0
eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoc2VsLT5tYXRjaE50
aChjb3VudCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhMYXN0Q2hpbGQ6IHsKKyAgICAgICAgICAg
ICAgICBpZiAoIXNlbC0+cGFyc2VOdGgoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1l
bnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxl
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3
YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIGludCBjb3VudCA9IDE7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5uZXh0
U2libGluZygpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAobikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJs
aW5nKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHNl
bC0+bWF0Y2hOdGgoY291bnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoTGFzdE9mVHlwZTogewor
ICAgICAgICAgICAgICAgIGlmICghc2VsLT5wYXJzZU50aCgpKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUt
PnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1
bGVzT25seSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+
cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZl
Y3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5n
Q2hpbGRyZW4oKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FOYW1lKCk7CisgICAgICAgICAgICAgICAgICAg
IE5vZGUqIG4gPSBlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
bikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5u
ZXh0U2libGluZygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGlmIChzZWwtPm1hdGNoTnRoKGNvdW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1RhcmdldDoKKyAg
ICAgICAgICAgICAgICBpZiAoZSA9PSBlLT5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BbnlMaW5rOgorICAgICAgICAgICAgICAg
IGlmIChlICYmIGUtPmlzTGluaygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0F1dG9maWxsOiB7CisgICAgICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250
cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBpZiAoSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0b0lucHV0RWxlbWVudChlKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+aXNBdXRvZmlsbGVkKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9MaW5rOgorICAgICAgICAgICAgICAgIGlmIChlICYmIGUtPmlzTGlu
aygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xh
c3M7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9WaXNpdGVkOgorICAgICAgICAgICAgICAgIGlmIChlICYmIGUtPmlzTGluaygpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzczsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0RyYWc6IHsKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFN0eWxlKQorICAgICAgICAgICAg
ICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlEcmFnUnVsZXModHJ1ZSk7CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZS0+cmVuZGVyU3R5bGUoKS0+c2V0QWZmZWN0ZWRCeURyYWdSdWxlcyh0cnVlKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZS0+cmVuZGVyZXIoKSAmJiBlLT5yZW5kZXJlcigpLT5pc0RyYWdnaW5n
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
Rm9jdXM6CisgICAgICAgICAgICAgICAgaWYgKGUgJiYgZS0+Zm9jdXNlZCgpICYmIGUtPmRvY3Vt
ZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5pc0ZvY3VzZWRBbmRBY3RpdmUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcjogeworICAgICAgICAgICAgICAg
IC8vIElmIHdlJ3JlIGluIHF1aXJrcyBtb2RlLCB0aGVuIGhvdmVyIHNob3VsZCBuZXZlciBtYXRj
aCBhbmNob3JzIHdpdGggbm8KKyAgICAgICAgICAgICAgICAvLyBocmVmIGFuZCAqOmhvdmVyIHNo
b3VsZCBub3QgbWF0Y2ggYW55dGhpbmcuICBUaGlzIGlzIGltcG9ydGFudCBmb3Igc2l0ZXMgbGlr
ZSB3c2ouY29tLgorICAgICAgICAgICAgICAgIGlmIChtX3N0cmljdFBhcnNpbmcgfHwgaXNTdWJT
ZWxlY3RvciB8fCAoc2VsLT5oYXNUYWcoKSAmJiAhZS0+aGFzVGFnTmFtZShhVGFnKSkgfHwgZS0+
aXNMaW5rKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVyUnVsZXMo
dHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRlclN0eWxlKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBlLT5yZW5kZXJTdHlsZSgpLT5zZXRBZmZlY3RlZEJ5SG92
ZXJSdWxlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmhvdmVyZWQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0FjdGl2ZToKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiBx
dWlya3MgbW9kZSwgdGhlbiA6YWN0aXZlIHNob3VsZCBuZXZlciBtYXRjaCBhbmNob3JzIHdpdGgg
bm8KKyAgICAgICAgICAgICAgICAvLyBocmVmIGFuZCAqOmFjdGl2ZSBzaG91bGQgbm90IG1hdGNo
IGFueXRoaW5nLiAKKyAgICAgICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IGlzU3Vi
U2VsZWN0b3IgfHwgKHNlbC0+aGFzVGFnKCkgJiYgIWUtPmhhc1RhZ05hbWUoYVRhZykpIHx8IGUt
PmlzTGluaygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50U3R5bGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlBY3RpdmVSdWxl
cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEFmZmVjdGVkQnlB
Y3RpdmVSdWxlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmFjdGl2ZSgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRW5hYmxlZDoKKyAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLT5pc0Zvcm1Db250cm9sRWxl
bWVudCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS0+aXNFbmFibGVkRm9ybUNvbnRy
b2woKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0Z1bGxQYWdlTWVkaWE6CisgICAgICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS0+
ZG9jdW1lbnQoKSAmJiBlLT5kb2N1bWVudCgpLT5pc01lZGlhRG9jdW1lbnQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0RlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS0+aXNEZWZhdWx0QnV0dG9uRm9yRm9y
bSgpOworICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRGlzYWJsZWQ6CisgICAg
ICAgICAgICAgICAgaWYgKGUgJiYgZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICFlLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvUmVhZE9u
bHk6IHsKKyAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZS0+aXNUZXh0Rm9ybUNvbnRyb2woKSAmJiBlLT5pc1JlYWRPbmx5Rm9ybUNvbnRyb2wo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Jl
YWRXcml0ZTogeworICAgICAgICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVs
ZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIHJldHVybiBlLT5pc1RleHRGb3JtQ29udHJvbCgpICYmICFlLT5pc1JlYWRPbmx5Rm9ybUNv
bnRyb2woKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb09wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiBlICYmIGUtPmlzT3B0aW9uYWxG
b3JtQ29udHJvbCgpOworICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvUmVxdWly
ZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS0+aXNSZXF1aXJlZEZvcm1Db250cm9s
KCk7CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WYWxpZDogeworICAgICAg
ICAgICAgICAgIGlmICghZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldENvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVz
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGUtPndpbGxWYWxpZGF0ZSgpICYmIGUtPmlzVmFs
aWRGb3JtQ29udHJvbEVsZW1lbnQoKTsKKyAgICAgICAgICAgIH0gY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvSW52YWxpZDogeworICAgICAgICAgICAgICAgIGlmICghZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldENv
bnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGUtPndp
bGxWYWxpZGF0ZSgpICYmICFlLT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCk7CisgICAgICAg
ICAgICB9IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NoZWNrZWQ6IHsKKyAgICAgICAgICAgICAg
ICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIFdpbklFIGFsbG93cyBj
aGVja2VkIGFuZCBpbmRldGVybWluYXRlIHRvIGNvLWV4aXN0LCB0aGUgQ1NTIHNlbGVjdG9yIHNw
ZWMgc2F5cyB0aGF0CisgICAgICAgICAgICAgICAgLy8geW91IGNhbid0IGJlIGJvdGggY2hlY2tl
ZCBhbmQgaW5kZXRlcm1pbmF0ZS4gIFdlIHdpbGwgYmVoYXZlIGxpa2UgV2luSUUgYmVoaW5kIHRo
ZSBzY2VuZXMgYW5kIGp1c3QKKyAgICAgICAgICAgICAgICAvLyBvYmV5IHRoZSBDU1Mgc3BlYyBo
ZXJlIGluIHRoZSB0ZXN0IGZvciBtYXRjaGluZyB0aGUgcHNldWRvLgorICAgICAgICAgICAgICAg
IElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9JbnB1dEVsZW1lbnQoZSk7CisgICAgICAg
ICAgICAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPmlzQ2hlY2tlZCgpICYm
ICFpbnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0luZGV0ZXJtaW5hdGU6IHsKKyAgICAgICAg
ICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVt
ZW50ID0gdG9JbnB1dEVsZW1lbnQoZSk7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVu
dCAmJiBpbnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Jvb3Q6CisgICAgICAgICAgICAgICAg
aWYgKGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFuZzogeworICAgICAgICAgICAgICAgIE5vZGUqIG4g
PSBlOworICAgICAgICAgICAgICAgIEF0b21pY1N0cmluZyB2YWx1ZTsKKyAgICAgICAgICAgICAg
ICAvLyBUaGUgbGFuZ3VhZ2UgcHJvcGVydHkgaXMgaW5oZXJpdGVkLCBzbyB3ZSBpdGVyYXRlIG92
ZXIgdGhlIHBhcmVudHMKKyAgICAgICAgICAgICAgICAvLyB0byBmaW5kIHRoZSBmaXJzdCBsYW5n
dWFnZS4KKyAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiB2YWx1ZS5pc051bGwoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTcGVjOiB4bWw6bGFuZyB0YWtlcyBwcmVjZWRlbmNlIC0tIGh0dHA6Ly93
d3cudzMub3JnL1RSL3hodG1sMS8jQ183CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFu
Z0F0dHIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4p
LT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChuLT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hl
Y2tpbmcgdGhlIE1JTUUgY29udGVudC1sYW5ndWFnZQorICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG4pLT5jb250ZW50TGFuZ3VhZ2UoKTsKKwor
ICAgICAgICAgICAgICAgICAgICBuID0gbi0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJndW1lbnQgPSBzZWwtPmFyZ3Vt
ZW50KCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVsbCgpIHx8ICF2YWx1ZS5zdGFy
dHNXaXRoKGFyZ3VtZW50LCBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgoKSAhPSBhcmd1bWVudC5sZW5ndGgoKSAmJiB2
YWx1ZVthcmd1bWVudC5sZW5ndGgoKV0gIT0gJy0nKQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Vua25vd246CisgICAgICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9Ob3RQYXJzZWQ6CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHNlbC0+bV9t
YXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCkgeworICAgICAgICBpZiAoIWVsZW1l
bnRTdHlsZSAmJiAhbV9jb2xsZWN0UnVsZXNPbmx5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gQ1NTU2VsZWN0b3I6OnBzZXVkb0lkKHNl
bC0+cHNldWRvVHlwZSgpKTsKKyAgICAgICAgaWYgKHBzZXVkb0lkID09IEZJUlNUX0xFVFRFUikg
eworICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGUtPmRvY3VtZW50KCkpCisg
ICAgICAgICAgICAgICAgZG9jdW1lbnQtPnNldFVzZXNGaXJzdExldHRlclJ1bGVzKHRydWUpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChwc2V1ZG9JZCAhPSBOT1BTRVVETykgeworICAgICAgICAg
ICAgZHluYW1pY1BzZXVkbyA9IHBzZXVkb0lkOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgLy8gIyMjIGFkZCB0aGUgcmVzdCBvZiB0aGUgY2hlY2tzLi4uCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVj
a2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKENTU1NlbGVjdG9yKiBzZWwsIFBzZXVkb0lk
JikgY29uc3QKK3sKKyAgICBSZW5kZXJTY3JvbGxiYXIqIHNjcm9sbGJhciA9IFJlbmRlclNjcm9s
bGJhcjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCk7CisgICAgU2Nyb2xsYmFyUGFydCBwYXJ0
ID0gUmVuZGVyU2Nyb2xsYmFyOjpwYXJ0Rm9yU3R5bGVSZXNvbHZlKCk7CisKKyAgICAvLyBGSVhN
RTogVGhpcyBpcyBhIHRlbXBvcmFyeSBoYWNrIGZvciByZXNpemVycyBhbmQgc2Nyb2xsYmFyIGNv
cm5lcnMuICBFdmVudHVhbGx5IDp3aW5kb3ctaW5hY3RpdmUgc2hvdWxkIGJlY29tZSBhIHJlYWwK
KyAgICAvLyBwc2V1ZG8gY2xhc3MgYW5kIGp1c3QgYXBwbHkgdG8gZXZlcnl0aGluZy4KKyAgICBp
ZiAoc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1dpbmRvd0luYWN0aXZl
KQorICAgICAgICByZXR1cm4gIW1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkt
PmlzQWN0aXZlKCk7CisgICAgCisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgQVNTRVJUKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3MpOworICAgIHN3aXRjaCAoc2VsLT5wc2V1ZG9UeXBlKCkpIHsKKyAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRW5hYmxlZDoKKyAgICAgICAgICAgIHJldHVybiBzY3Jv
bGxiYXItPmVuYWJsZWQoKTsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRGlzYWJs
ZWQ6CisgICAgICAgICAgICByZXR1cm4gIXNjcm9sbGJhci0+ZW5hYmxlZCgpOworICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcjogeworICAgICAgICAgICAgU2Nyb2xsYmFyUGFy
dCBob3ZlcmVkUGFydCA9IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKTsKKyAgICAgICAgICAgIGlm
IChwYXJ0ID09IFNjcm9sbGJhckJHUGFydCkKKyAgICAgICAgICAgICAgICByZXR1cm4gaG92ZXJl
ZFBhcnQgIT0gTm9QYXJ0OworICAgICAgICAgICAgaWYgKHBhcnQgPT0gVHJhY2tCR1BhcnQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGhvdmVyZWRQYXJ0ID09IEJhY2tUcmFja1BhcnQgfHwgaG92
ZXJlZFBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCB8fCBob3ZlcmVkUGFydCA9PSBUaHVtYlBhcnQ7
CisgICAgICAgICAgICByZXR1cm4gcGFydCA9PSBob3ZlcmVkUGFydDsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6IHsKKyAgICAgICAgICAgIFNjcm9s
bGJhclBhcnQgcHJlc3NlZFBhcnQgPSBzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCk7CisgICAgICAg
ICAgICBpZiAocGFydCA9PSBTY3JvbGxiYXJCR1BhcnQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHByZXNzZWRQYXJ0ICE9IE5vUGFydDsKKyAgICAgICAgICAgIGlmIChwYXJ0ID09IFRyYWNrQkdQ
YXJ0KQorICAgICAgICAgICAgICAgIHJldHVybiBwcmVzc2VkUGFydCA9PSBCYWNrVHJhY2tQYXJ0
IHx8IHByZXNzZWRQYXJ0ID09IEZvcndhcmRUcmFja1BhcnQgfHwgcHJlc3NlZFBhcnQgPT0gVGh1
bWJQYXJ0OworICAgICAgICAgICAgcmV0dXJuIHBhcnQgPT0gcHJlc3NlZFBhcnQ7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG9yaXpvbnRhbDoKKyAgICAgICAg
ICAgIHJldHVybiBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cjsKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmVydGljYWw6CisgICAgICAgICAg
ICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyOwor
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EZWNyZW1lbnQ6CisgICAgICAgICAgICBy
ZXR1cm4gcGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gQmFja0J1dHRvbkVu
ZFBhcnQgfHwgcGFydCA9PSBCYWNrVHJhY2tQYXJ0OworICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9JbmNyZW1lbnQ6CisgICAgICAgICAgICByZXR1cm4gcGFydCA9PSBGb3J3YXJkQnV0
dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBG
b3J3YXJkVHJhY2tQYXJ0OworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9TdGFydDoK
KyAgICAgICAgICAgIHJldHVybiBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9
PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNrUGFydDsKKyAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRW5kOgorICAgICAgICAgICAgcmV0dXJuIHBhcnQg
PT0gQmFja0J1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBw
YXJ0ID09IEZvcndhcmRUcmFja1BhcnQ7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0RvdWJsZUJ1dHRvbjogeworICAgICAgICAgICAgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBi
dXR0b25zUGxhY2VtZW50ID0gc2Nyb2xsYmFyLT50aGVtZSgpLT5idXR0b25zUGxhY2VtZW50KCk7
CisgICAgICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0g
Rm9yd2FyZEJ1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEJhY2tUcmFja1BhcnQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJs
ZVN0YXJ0IHx8IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUJvdGg7
CisgICAgICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZv
cndhcmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zRG91Ymxl
RW5kIHx8IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUJvdGg7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gCisgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb1NpbmdsZUJ1dHRvbjogeworICAgICAgICAgICAgU2Nyb2xsYmFyQnV0dG9u
c1BsYWNlbWVudCBidXR0b25zUGxhY2VtZW50ID0gc2Nyb2xsYmFyLT50aGVtZSgpLT5idXR0b25z
UGxhY2VtZW50KCk7CisgICAgICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0
IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBCYWNrVHJhY2tQYXJ0
IHx8IHBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnV0
dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zU2luZ2xlOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb05v
QnV0dG9uOiB7CisgICAgICAgICAgICBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGJ1dHRvbnNQ
bGFjZW1lbnQgPSBzY3JvbGxiYXItPnRoZW1lKCktPmJ1dHRvbnNQbGFjZW1lbnQoKTsKKyAgICAg
ICAgICAgIGlmIChwYXJ0ID09IEJhY2tUcmFja1BhcnQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUgfHwgYnV0dG9uc1BsYWNl
bWVudCA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlRW5kOworICAgICAgICAgICAgaWYgKHBhcnQg
PT0gRm9yd2FyZFRyYWNrUGFydCkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9uc1BsYWNl
bWVudCA9PSBTY3JvbGxiYXJCdXR0b25zTm9uZSB8fCBidXR0b25zUGxhY2VtZW50ID09IFNjcm9s
bGJhckJ1dHRvbnNEb3VibGVTdGFydDsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Db3JuZXJQcmVzZW50OgorICAg
ICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+Y2xpZW50KCktPnNjcm9sbGJhckNvcm5lclByZXNl
bnQoKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkVmFyaWFibGVzKENTU1ZhcmlhYmxlc1J1
bGUqIHZhcmlhYmxlcykKK3sKKyAgICBDU1NWYXJpYWJsZXNEZWNsYXJhdGlvbiogZGVjbCA9IHZh
cmlhYmxlcy0+dmFyaWFibGVzKCk7CisgICAgaWYgKCFkZWNsKQorICAgICAgICByZXR1cm47Cisg
ICAgdW5zaWduZWQgc2l6ZSA9IGRlY2wtPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBkZWNsLT5pdGVtKGkp
OworICAgICAgICBtX3ZhcmlhYmxlc01hcC5zZXQobmFtZSwgdmFyaWFibGVzKTsKKyAgICB9Cit9
CisKK0NTU1ZhbHVlKiBDU1NTdHlsZVNlbGVjdG9yOjpyZXNvbHZlVmFyaWFibGVEZXBlbmRlbnRW
YWx1ZShDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlKikKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworQ1NTUnVsZVNldDo6Q1NTUnVsZVNldCgpCit7CisgICAgbV91bml2ZXJz
YWxSdWxlcyA9IDA7CisgICAgbV9wYWdlUnVsZXMgPSAwOworICAgIG1fcnVsZUNvdW50ID0gMDsK
KyAgICBtX3BhZ2VSdWxlQ291bnQgPSAwOworfQorCitDU1NSdWxlU2V0Ojp+Q1NTUnVsZVNldCgp
Cit7IAorICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2lkUnVsZXMpOworICAgIGRlbGV0ZUFsbFZhbHVl
cyhtX2NsYXNzUnVsZXMpOworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3RhZ1J1bGVzKTsKKworICAg
IGRlbGV0ZSBtX3VuaXZlcnNhbFJ1bGVzOyAKKyAgICBkZWxldGUgbV9wYWdlUnVsZXM7Cit9CisK
Kwordm9pZCBDU1NSdWxlU2V0OjphZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBB
dG9tUnVsZU1hcCYgbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVS
dWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKQoreworICAgIGlmICgha2V5KSByZXR1cm47Cisg
ICAgQ1NTUnVsZURhdGFMaXN0KiBydWxlcyA9IG1hcC5nZXQoa2V5KTsKKyAgICBpZiAoIXJ1bGVz
KSB7CisgICAgICAgIHJ1bGVzID0gbmV3IENTU1J1bGVEYXRhTGlzdChtX3J1bGVDb3VudCsrLCBy
dWxlLCBzZWwpOworICAgICAgICBtYXAuc2V0KGtleSwgcnVsZXMpOworICAgIH0gZWxzZQorICAg
ICAgICBydWxlcy0+YXBwZW5kKG1fcnVsZUNvdW50KyssIHJ1bGUsIHNlbCk7Cit9CisKK3ZvaWQg
Q1NTUnVsZVNldDo6YWRkUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwp
Cit7CisgICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpIHsKKyAgICAgICAg
YWRkVG9SdWxlU2V0KHNlbC0+bV92YWx1ZS5pbXBsKCksIG1faWRSdWxlcywgcnVsZSwgc2VsKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVj
dG9yOjpDbGFzcykgeworICAgICAgICBhZGRUb1J1bGVTZXQoc2VsLT5tX3ZhbHVlLmltcGwoKSwg
bV9jbGFzc1J1bGVzLCBydWxlLCBzZWwpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAK
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNlbC0+bV90YWcubG9jYWxOYW1l
KCk7CisgICAgaWYgKGxvY2FsTmFtZSAhPSBzdGFyQXRvbSkgeworICAgICAgICBhZGRUb1J1bGVT
ZXQobG9jYWxOYW1lLmltcGwoKSwgbV90YWdSdWxlcywgcnVsZSwgc2VsKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBKdXN0IHB1dCBpdCBpbiB0aGUgdW5pdmVyc2FsIHJ1
bGUgc2V0LgorICAgIGlmICghbV91bml2ZXJzYWxSdWxlcykKKyAgICAgICAgbV91bml2ZXJzYWxS
dWxlcyA9IG5ldyBDU1NSdWxlRGF0YUxpc3QobV9ydWxlQ291bnQrKywgcnVsZSwgc2VsKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fdW5pdmVyc2FsUnVsZXMtPmFwcGVuZChtX3J1bGVDb3VudCsrLCBy
dWxlLCBzZWwpOworfQorCit2b2lkIENTU1J1bGVTZXQ6OmFkZFBhZ2VSdWxlKENTU1N0eWxlUnVs
ZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCkKK3sKKyAgICBpZiAoIW1fcGFnZVJ1bGVzKQorICAg
ICAgICBtX3BhZ2VSdWxlcyA9IG5ldyBDU1NSdWxlRGF0YUxpc3QobV9wYWdlUnVsZUNvdW50Kyss
IHJ1bGUsIHNlbCk7CisgICAgZWxzZQorICAgICAgICBtX3BhZ2VSdWxlcy0+YXBwZW5kKG1fcGFn
ZVJ1bGVDb3VudCsrLCBydWxlLCBzZWwpOworfQorCit2b2lkIENTU1J1bGVTZXQ6OmFkZFJ1bGVz
RnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9y
JiBtZWRpdW0sIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IpCit7CisgICAgaWYgKCFz
aGVldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTm8gbWVkaWEgaW1wbGllcyAiYWxsIiwg
YnV0IGlmIGEgbWVkaWEgbGlzdCBleGlzdHMgaXQgbXVzdAorICAgIC8vIGNvbnRhaW4gb3VyIGN1
cnJlbnQgbWVkaXVtCisgICAgaWYgKHNoZWV0LT5tZWRpYSgpICYmICFtZWRpdW0uZXZhbChzaGVl
dC0+bWVkaWEoKSwgc3R5bGVTZWxlY3RvcikpCisgICAgICAgIHJldHVybjsgLy8gdGhlIHN0eWxl
IHNoZWV0IGRvZXNuJ3QgYXBwbHkKKworICAgIGludCBsZW4gPSBzaGVldC0+bGVuZ3RoKCk7CisK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgIFN0eWxlQmFzZSog
aXRlbSA9IHNoZWV0LT5pdGVtKGkpOworICAgICAgICBpZiAoaXRlbS0+aXNTdHlsZVJ1bGUoKSkg
eworICAgICAgICAgICAgYWRkU3R5bGVSdWxlKGl0ZW0pOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKGl0ZW0tPmlzSW1wb3J0UnVsZSgpKSB7CisgICAgICAgICAgICBDU1NJbXBvcnRSdWxl
KiBpbXBvcnQgPSBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4oaXRlbSk7CisgICAgICAgICAg
ICBpZiAoIWltcG9ydC0+bWVkaWEoKSB8fCBtZWRpdW0uZXZhbChpbXBvcnQtPm1lZGlhKCksIHN0
eWxlU2VsZWN0b3IpKQorICAgICAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydC0+
c3R5bGVTaGVldCgpLCBtZWRpdW0sIHN0eWxlU2VsZWN0b3IpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKGl0ZW0tPmlzTWVkaWFSdWxlKCkpIHsKKyAgICAgICAgICAgIENTU01lZGlhUnVs
ZSogciA9IHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KGl0ZW0pOworICAgICAgICAgICAgQ1NT
UnVsZUxpc3QqIHJ1bGVzID0gci0+Y3NzUnVsZXMoKTsKKworICAgICAgICAgICAgaWYgKCghci0+
bWVkaWEoKSB8fCBtZWRpdW0uZXZhbChyLT5tZWRpYSgpLCBzdHlsZVNlbGVjdG9yKSkgJiYgcnVs
ZXMpIHsKKyAgICAgICAgICAgICAgICAvLyBUcmF2ZXJzZSBjaGlsZCBlbGVtZW50cyBvZiB0aGUg
QG1lZGlhIHJ1bGUuCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHJ1
bGVzLT5sZW5ndGgoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIENTU1J1bGUgKmNoaWxk
SXRlbSA9IHJ1bGVzLT5pdGVtKGopOworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJdGVt
LT5pc1N0eWxlUnVsZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBhIFN0
eWxlUnVsZSwgc28gYXBwZW5kIGl0IHRvIG91ciBsaXN0CisgICAgICAgICAgICAgICAgICAgICAg
ICBhZGRTdHlsZVJ1bGUoY2hpbGRJdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChjaGlsZEl0ZW0tPmlzRm9udEZhY2VSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBDU1NGb250RmFjZVJ1bGUqIGZvbnRGYWNlUnVsZSA9
IHN0YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KGNoaWxkSXRlbSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxl
KGZvbnRGYWNlUnVsZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRJdGVt
LT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBydWxlIHRvIG91ciBzZXQuCisgICAgICAgICAg
ICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0
PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihjaGlsZEl0ZW0pKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0gICAvLyBmb3IgcnVsZXMKKyAgICAgICAgICAgIH0gICAv
LyBpZiBydWxlcworICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzRm9udEZhY2VSdWxlKCkgJiYg
c3R5bGVTZWxlY3RvcikgeworICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91
ciBzZXQuCisgICAgICAgICAgICBjb25zdCBDU1NGb250RmFjZVJ1bGUqIGZvbnRGYWNlUnVsZSA9
IHN0YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KGl0ZW0pOworICAgICAgICAgICAgc3R5bGVT
ZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOwor
ICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzVmFyaWFibGVzUnVsZSgpKSB7CisgICAgICAgICAg
ICAvLyBFdmFsdWF0ZSB0aGUgbWVkaWEgcXVlcnkgYW5kIG1ha2Ugc3VyZSBpdCBtYXRjaGVzLgor
ICAgICAgICAgICAgQ1NTVmFyaWFibGVzUnVsZSogdmFyaWFibGVzID0gc3RhdGljX2Nhc3Q8Q1NT
VmFyaWFibGVzUnVsZSo+KGl0ZW0pOworICAgICAgICAgICAgaWYgKCF2YXJpYWJsZXMtPm1lZGlh
KCkgfHwgbWVkaXVtLmV2YWwodmFyaWFibGVzLT5tZWRpYSgpLCBzdHlsZVNlbGVjdG9yKSkKKyAg
ICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRWYXJpYWJsZXModmFyaWFibGVzKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0tleWZyYW1lc1J1bGUoKSkKKyAgICAgICAgICAgIHN0
eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1lU3R5bGUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJh
bWVzUnVsZSo+KGl0ZW0pKTsKKyAgICB9Cit9CisKK3ZvaWQgQ1NTUnVsZVNldDo6YWRkU3R5bGVS
dWxlKFN0eWxlQmFzZSogaXRlbSkKK3sKKyAgICBpZiAoaXRlbS0+aXNQYWdlUnVsZSgpKSB7Cisg
ICAgICAgIENTU1BhZ2VSdWxlKiBwYWdlUnVsZSA9IHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlKj4o
aXRlbSk7CisgICAgICAgIGFkZFBhZ2VSdWxlKHBhZ2VSdWxlLCBwYWdlUnVsZS0+c2VsZWN0b3JM
aXN0KCkuZmlyc3QoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxl
ID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oaXRlbSk7CisgICAgICAgIGZvciAoQ1NTU2Vs
ZWN0b3IqIHMgPSBydWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpOyBzOyBzID0gQ1NTU2VsZWN0
b3JMaXN0OjpuZXh0KHMpKQorICAgICAgICAgICAgYWRkUnVsZShydWxlLCBzKTsKKyAgICB9Cit9
CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIHRoaXMgaXMgbW9zdGx5IGJv
cmluZyBzdHVmZiBvbiBob3cgdG8gYXBwbHkgYSBjZXJ0YWluIHJ1bGUgdG8gdGhlIHJlbmRlcnN0
eWxlLi4uCisKK3N0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0
eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEsIGJvb2wgKm9rID0gMCkKK3sKKyAgICAvLyBUaGlz
IGZ1bmN0aW9uIGlzIHRvbGVyYW50IG9mIGEgbnVsbCBzdHlsZSB2YWx1ZS4gVGhlIG9ubHkgcGxh
Y2Ugc3R5bGUgaXMgdXNlZCBpcyBpbgorICAgIC8vIGxlbmd0aCBtZWFzdXJlbWVudHMsIGxpa2Ug
J2VtcycgYW5kICdweCcuIEFuZCBpbiB0aG9zZSBjYXNlcyBzdHlsZSBpcyBvbmx5IHVzZWQKKyAg
ICAvLyB3aGVuIHRoZSB1bml0cyBhcmUgRU1TIG9yIEVYUy4gU28gd2Ugd2lsbCBqdXN0IGZhaWwg
aW4gdGhvc2UgY2FzZXMuCisgICAgTGVuZ3RoIGw7CisgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkg
eworICAgICAgICBpZiAob2spCisgICAgICAgICAgICAqb2sgPSBmYWxzZTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIXN0eWxlICYmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfRU1TIHx8IHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FWFMgfHwgdHlwZSA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JFTVMpKSB7CisgICAgICAgICAgICBpZiAob2spCisg
ICAgICAgICAgICAgICAgKm9rID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoQ1NTUHJpbWl0
aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgodHlwZSkpCisgICAgICAgICAgICBsID0gTGVuZ3Ro
KHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlLCByb290U3R5
bGUsIG11bHRpcGxpZXIpLCBGaXhlZCk7CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQorICAgICAgICAgICAgbCA9IExlbmd0aChwcmlt
aXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgICAgIGVsc2UgaWYg
KHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCisgICAgICAgICAgICBsID0g
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpICogMTAwLjAsIFBlcmNlbnQp
OworICAgICAgICBlbHNlIGlmIChvaykKKyAgICAgICAgICAgICpvayA9IGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gbDsKK30KKwordGVtcGxhdGUgPGJvb2wgYXBwbHlGaXJzdD4KK3ZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbnMoYm9vbCBpc0ltcG9ydGFudCwgaW50IHN0
YXJ0SW5kZXgsIGludCBlbmRJbmRleCkKK3sKKyAgICBpZiAoc3RhcnRJbmRleCA9PSAtMSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5k
ZXg7IGkrKykgeworICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCA9IG1f
bWF0Y2hlZERlY2xzW2ldOworICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gZGVjbC0+ZW5kKCk7CisgICAgICAgIGZvciAoQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGVjbC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgY3VycmVudCA9ICpp
dDsKKyAgICAgICAgICAgIGlmIChpc0ltcG9ydGFudCA9PSBjdXJyZW50LmlzSW1wb3J0YW50KCkp
IHsKKyAgICAgICAgICAgICAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50LmlkKCk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoYXBwbHlGaXJzdCkgeworICAgICAgICAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChmaXJzdENTU1Byb3BlcnR5ID09IENTU1Byb3BlcnR5Q29sb3IsIENTU19jb2xvcl9p
c19maXJzdF9wcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKENT
U1Byb3BlcnR5Wm9vbSA9PSBDU1NQcm9wZXJ0eUNvbG9yICsgMTEsIENTU196b29tX2lzX2VuZF9v
Zl9maXJzdF9wcm9wX3JhbmdlKTsKKyAgICAgICAgICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
Q1NTUHJvcGVydHlMaW5lSGVpZ2h0ID09IENTU1Byb3BlcnR5Wm9vbSArIDEsIENTU19saW5lX2hl
aWdodF9pc19hZnRlcl96b29tKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBnaXZlIHNwZWNp
YWwgcHJpb3JpdHkgdG8gZm9udC14eHgsIGNvbG9yIHByb3BlcnRpZXMsIGV0YworICAgICAgICAg
ICAgICAgICAgICBpZiAocHJvcGVydHkgPD0gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcHBseSBsaW5lLWhlaWdodCBsYXRlcgorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5TGluZUhlaWdodCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IGN1cnJlbnQu
dmFsdWUoKTsgCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5ID4gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQorICAg
ICAgICAgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1cnJlbnQu
dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzKENTU1J1bGVT
ZXQqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmlu
ZyYgcGFnZU5hbWUpCit7CisgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKworICAgIGlmICgh
cnVsZXMpCisgICAgICAgIHJldHVybjsKKworICAgIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChydWxl
cy0+Z2V0UGFnZVJ1bGVzKCksIGlzTGVmdFBhZ2UsIGlzRmlyc3RQYWdlLCBwYWdlTmFtZSk7CisK
KyAgICAvLyBJZiB3ZSBkaWRuJ3QgbWF0Y2ggYW55IHJ1bGVzLCB3ZSdyZSBkb25lLgorICAgIGlm
IChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNv
cnQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzLgorICAgIHNvcnRNYXRjaGVkUnVsZXMoMCwgbV9t
YXRjaGVkUnVsZXMuc2l6ZSgpKTsKKworICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1h
dGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNscy4KKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspCisgICAgICAgIGFkZE1hdGNo
ZWREZWNsYXJhdGlvbihtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5kZWNsYXJhdGlvbigpKTsK
K30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFBhZ2VSdWxlc0Zvckxpc3QoQ1NTUnVs
ZURhdGFMaXN0KiBydWxlcywgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25z
dCBTdHJpbmcmIHBhZ2VOYW1lKQoreworICAgIGlmICghcnVsZXMpCisgICAgICAgIHJldHVybjsK
KworICAgIGZvciAoQ1NTUnVsZURhdGEqIGQgPSBydWxlcy0+Zmlyc3QoKTsgZDsgZCA9IGQtPm5l
eHQoKSkgeworICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBkLT5ydWxlKCk7CisgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JMb2NhbE5hbWUgPSBkLT5zZWxlY3RvcigpLT5t
X3RhZy5sb2NhbE5hbWUoKTsKKyAgICAgICAgaWYgKHNlbGVjdG9yTG9jYWxOYW1lICE9IHN0YXJB
dG9tICYmIHNlbGVjdG9yTG9jYWxOYW1lICE9IHBhZ2VOYW1lKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlIHBzZXVkb1R5cGUgPSBkLT5zZWxl
Y3RvcigpLT5wc2V1ZG9UeXBlKCk7CisgICAgICAgIGlmICgocHNldWRvVHlwZSA9PSBDU1NTZWxl
Y3Rvcjo6UHNldWRvTGVmdFBhZ2UgJiYgIWlzTGVmdFBhZ2UpCisgICAgICAgICAgICB8fCAocHNl
dWRvVHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvUmlnaHRQYWdlICYmIGlzTGVmdFBhZ2UpCisg
ICAgICAgICAgICB8fCAocHNldWRvVHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RQYWdl
ICYmICFpc0ZpcnN0UGFnZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBJ
ZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQuCisg
ICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gcnVsZS0+ZGVjbGFyYXRp
b24oKTsKKyAgICAgICAgaWYgKCFkZWNsIHx8ICFkZWNsLT5sZW5ndGgoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIC8vIEFkZCB0aGlzIHJ1bGUgdG8gb3VyIGxpc3Qgb2YgbWF0
Y2hlZCBydWxlcy4KKyAgICAgICAgYWRkTWF0Y2hlZFJ1bGUoZCk7CisgICAgfQorfQorCitib29s
IENTU1N0eWxlU2VsZWN0b3I6OmlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKK3sKKyAg
ICBib29sIGlzRmlyc3RQYWdlTGVmdCA9IGZhbHNlOworICAgIGlmIChtX3Jvb3RFbGVtZW50U3R5
bGUtPmRpcmVjdGlvbigpID09IFJUTCkKKyAgICAgICAgaXNGaXJzdFBhZ2VMZWZ0ID0gdHJ1ZTsK
KworICAgIHJldHVybiAocGFnZUluZGV4ICsgKGlzRmlyc3RQYWdlTGVmdCA/IDEgOiAwKSkgJSAy
OworfQorCitib29sIENTU1N0eWxlU2VsZWN0b3I6OmlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgp
IGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEluIGNhc2Ugb2YgZm9yY2VkIGxlZnQvcmlnaHQgcGFn
ZSwgcGFnZSBhdCBpbmRleCAxIChub3QgMCkgY2FuIGJlIHRoZSBmaXJzdCBwYWdlLgorICAgIHJl
dHVybiAoIXBhZ2VJbmRleCk7Cit9CisKK1N0cmluZyBDU1NTdHlsZVNlbGVjdG9yOjpwYWdlTmFt
ZShpbnQgLyogcGFnZUluZGV4ICovKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
cGFnZSBpbmRleCB0byBwYWdlIG5hbWUgbWFwcGluZy4KKyAgICByZXR1cm4gIiI7Cit9CisKK3N0
YXRpYyB2b2lkIGFwcGx5Q291bnRlckxpc3QoUmVuZGVyU3R5bGUqIHN0eWxlLCBDU1NWYWx1ZUxp
c3QqIGxpc3QsIGJvb2wgaXNSZXNldCkKK3sKKyAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAg
PSBzdHlsZS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKKyAgICB0eXBlZGVmIENvdW50ZXJE
aXJlY3RpdmVNYXA6Oml0ZXJhdG9yIEl0ZXJhdG9yOworCisgICAgSXRlcmF0b3IgZW5kID0gbWFw
LmVuZCgpOworICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQorICAgICAgICBpZiAoaXNSZXNldCkKKyAgICAgICAgICAgIGl0LT5zZWNvbmQubV9yZXNl
dCA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpdC0+c2Vjb25kLm1faW5jcmVt
ZW50ID0gZmFsc2U7CisKKyAgICBpbnQgbGVuZ3RoID0gbGlzdCA/IGxpc3QtPmxlbmd0aCgpIDog
MDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFBhaXIq
IHBhaXIgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGxpc3QtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soaSkpLT5nZXRQYWlyVmFsdWUoKTsKKyAgICAgICAgQXRvbWljU3RyaW5nIGlk
ZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXItPmZpcnN0KCkp
LT5nZXRTdHJpbmdWYWx1ZSgpOworICAgICAgICAvLyBGSVhNRTogV2hhdCBhYm91dCBvdmVyZmxv
dz8KKyAgICAgICAgaW50IHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihw
YWlyLT5zZWNvbmQoKSktPmdldEludFZhbHVlKCk7CisgICAgICAgIENvdW50ZXJEaXJlY3RpdmVz
JiBkaXJlY3RpdmVzID0gbWFwLmFkZChpZGVudGlmaWVyLmltcGwoKSwgQ291bnRlckRpcmVjdGl2
ZXMoKSkuZmlyc3QtPnNlY29uZDsKKyAgICAgICAgaWYgKGlzUmVzZXQpIHsKKyAgICAgICAgICAg
IGRpcmVjdGl2ZXMubV9yZXNldCA9IHRydWU7CisgICAgICAgICAgICBkaXJlY3RpdmVzLm1fcmVz
ZXRWYWx1ZSA9IHZhbHVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGRpcmVj
dGl2ZXMubV9pbmNyZW1lbnQpCisgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5tX2luY3JlbWVu
dFZhbHVlICs9IHZhbHVlOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZGly
ZWN0aXZlcy5tX2luY3JlbWVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5t
X2luY3JlbWVudFZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUoaW50IGlk
LCBDU1NWYWx1ZSAqdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICBpbml0RWxlbWVu
dCgwKTsKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKDAsIHN0eWxlKTsKKyAgICBtX3N0eWxlID0g
c3R5bGU7CisgICAgYXBwbHlQcm9wZXJ0eShpZCwgdmFsdWUpOworfQorCitpbmxpbmUgYm9vbCBp
c1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpbnQgaWQpCit7CisgICAgc3dpdGNoKHN0YXRpY19j
YXN0PENTU1Byb3BlcnR5SUQ+KGlkKSkgeworICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dy
b3VuZENvbG9yOgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yOgorICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcjoKKyAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlclRvcENvbG9yOgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90
dG9tQ29sb3I6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKKyAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eU91dGxpbmVDb2xvcjoKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENv
bHVtblJ1bGVDb2xvcjoKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29s
b3I6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3I6CisgICAg
ICAgIC8vIEFsc28gYWxsb3cgc2hvcnRoYW5kcyBzbyB0aGF0IGluaGVyaXQvaW5pdGlhbCBzdGls
bCB3b3JrLgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZDoKKyAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnQ6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJS
aWdodDoKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcDoKKyAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbToKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmU6
CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlOgorI2lmIEVOQUJMRShT
VkcpCisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsOgorICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5U3Ryb2tlOgorI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUg
KnZhbHVlKQoreworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IDA7Cisg
ICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHByaW1pdGl2ZVZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisKKyAgICBmbG9hdCB6
b29tRmFjdG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworCisgICAgLy8gU1ZHIGhhbmRs
ZXMgem9vbWluZyBpbiBhIGRpZmZlcmVudCB3YXkgY29tcGFyZWQgdG8gQ1NTLiBUaGUgd2hvbGUg
ZG9jdW1lbnQgaXMgc2NhbGVkIGluc3RlYWQKKyAgICAvLyBvZiBlYWNoIGluZGl2aWR1YWwgbGVu
Z3RoIHZhbHVlIGluIHRoZSByZW5kZXIgc3R5bGUgLyB0cmVlLiBDU1NQcmltaXRpdmVWYWx1ZTo6
Y29tcHV0ZUxlbmd0aCooKQorICAgIC8vIG11bHRpcGxpZXMgZWFjaCByZXNvbHZlZCBsZW5ndGgg
d2l0aCB0aGUgem9vbSBtdWx0aXBsaWVyIC0gc28gZm9yIFNWRyB3ZSBuZWVkIHRvIGRpc2FibGUg
dGhhdC4KKyAgICAvLyBUaG91Z2ggYWxsIENTUyB2YWx1ZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0
byBvdXRlcm1vc3QgPHN2Zz4gZWxlbWVudHMgKHdpZHRoL2hlaWdodC9ib3JkZXIvcGFkZGluZy4u
LikKKyAgICAvLyBuZWVkIHRvIHJlc3BlY3QgdGhlIHNjYWxpbmcuIFJlbmRlckJveCAodGhlIHBh
cmVudCBjbGFzcyBvZiBSZW5kZXJTVkdSb290KSBncmFicyB2YWx1ZXMgbGlrZQorICAgIC8vIHdp
ZHRoL2hlaWdodC9ib3JkZXIvcGFkZGluZy8uLi4gZnJvbSB0aGUgUmVuZGVyU3R5bGUgLT4gZm9y
IFNWRyB0aGVzZSB2YWx1ZXMgd291bGQgbmV2ZXIgc2NhbGUsCisgICAgLy8gaWYgd2UnZCBwYXNz
IGEgMS4wIHpvb20gZmFjdG9yIGV2ZXJ5aHdlcmUuIFNvIHdlIG9ubHkgcGFzcyBhIHpvb20gZmFj
dG9yIG9mIDEuMCBmb3Igc3BlY2lmaWMKKyAgICAvLyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBh
bGxvd2VkIHRvIHNjYWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQgKGxldHRlci93b3Jk
LXNwYWNpbmcvZm9udC1zaXplKS4KKyAgICBib29sIHVzZVNWR1pvb21SdWxlcyA9IG1fZWxlbWVu
dCAmJiBtX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgpOworCisgICAgTGVuZ3RoIGw7CisgICAgYm9v
bCBhcHBseSA9IGZhbHNlOworCisgICAgdW5zaWduZWQgc2hvcnQgdmFsdWVUeXBlID0gdmFsdWUt
PmNzc1ZhbHVlVHlwZSgpOworCisgICAgYm9vbCBpc0luaGVyaXQgPSBtX3BhcmVudE5vZGUgJiYg
dmFsdWVUeXBlID09IENTU1ZhbHVlOjpDU1NfSU5IRVJJVDsKKyAgICBib29sIGlzSW5pdGlhbCA9
IHZhbHVlVHlwZSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwgfHwgKCFtX3BhcmVudE5vZGUgJiYg
dmFsdWVUeXBlID09IENTU1ZhbHVlOjpDU1NfSU5IRVJJVCk7CisgICAgCisgICAgaWQgPSBDU1NQ
cm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoaWQsIG1fc3R5bGUtPmRpcmVj
dGlvbigpKTsKKworICAgIGlmIChtX2NoZWNrZXIubV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyAm
JiAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSB7CisgICAgICAgIC8vIExpbWl0IHRo
ZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0aGUgb25lcyBob25vcmVk
IGJ5IDp2aXNpdGVkLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFdoYXQg
Zm9sbG93cyBpcyBhIGxpc3QgdGhhdCBtYXBzIHRoZSBDU1MgcHJvcGVydGllcyBpbnRvIHRoZWly
IGNvcnJlc3BvbmRpbmcgZnJvbnQtZW5kCisgICAgLy8gUmVuZGVyU3R5bGUgdmFsdWVzLiAgU2hv
cnRoYW5kcyAoZS5nLiBib3JkZXIsIGJhY2tncm91bmQpIG9jY3VyIGluIHRoaXMgbGlzdCBhcyB3
ZWxsIGFuZAorICAgIC8vIGFyZSBvbmx5IGhpdCB3aGVuIG1hcHBpbmcgImluaGVyaXQiIG9yICJp
bml0aWFsIiBpbnRvIGZyb250LWVuZCB2YWx1ZXMuCisgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxD
U1NQcm9wZXJ0eUlEPihpZCkpIHsKKy8vIGlkZW50IG9ubHkgcHJvcGVydGllcworICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudDoKKyAgICAgICAgSEFORExFX0JBQ0tHUk9V
TkRfVkFMVUUoYXR0YWNobWVudCwgQXR0YWNobWVudCwgdmFsdWUpCisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJhY2tncm91bmRDbGlwOgorICAgICAgICBIQU5ETEVfQkFDS0dST1VORF9WQUxVRShj
bGlwLCBDbGlwLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCYWNrZ3JvdW5kQ29tcG9zaXRlOgorICAgICAgICBIQU5ETEVfQkFDS0dST1VORF9WQUxV
RShjb21wb3NpdGUsIENvbXBvc2l0ZSwgdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
QmFja2dyb3VuZE9yaWdpbjoKKyAgICAgICAgSEFORExFX0JBQ0tHUk9VTkRfVkFMVUUob3JpZ2lu
LCBPcmlnaW4sIHZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRTaXplOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6ZToK
KyAgICAgICAgSEFORExFX0JBQ0tHUk9VTkRfVkFMVUUoc2l6ZSwgU2l6ZSwgdmFsdWUpCisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0F0dGFjaG1lbnQ6Cisg
ICAgICAgIEhBTkRMRV9NQVNLX1ZBTFVFKGF0dGFjaG1lbnQsIEF0dGFjaG1lbnQsIHZhbHVlKQor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwOgorICAg
ICAgICBIQU5ETEVfTUFTS19WQUxVRShjbGlwLCBDbGlwLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ29tcG9zaXRlOgorICAgICAgICBIQU5E
TEVfTUFTS19WQUxVRShjb21wb3NpdGUsIENvbXBvc2l0ZSwgdmFsdWUpCisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdpbjoKKyAgICAgICAgSEFORExF
X01BU0tfVkFMVUUob3JpZ2luLCBPcmlnaW4sIHZhbHVlKQorICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplOgorICAgICAgICBIQU5ETEVfTUFTS19WQUxV
RShzaXplLCBTaXplLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJDb2xsYXBzZToKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoYm9y
ZGVyQ29sbGFwc2UsIEJvcmRlckNvbGxhcHNlKQorICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVl
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpKSB7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ29sbGFwc2U6CisgICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyQ29sbGFwc2UodHJ1ZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2VwYXJhdGU6CisgICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyQ29sbGFwc2UoZmFsc2UpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BT
dHlsZToKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRV9X
SVRIX1ZBTFVFKGJvcmRlclRvcFN0eWxlLCBCb3JkZXJUb3BTdHlsZSwgQm9yZGVyU3R5bGUpCisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRTdHlsZToKKyAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRV9XSVRIX1ZBTFVF
KGJvcmRlclJpZ2h0U3R5bGUsIEJvcmRlclJpZ2h0U3R5bGUsIEJvcmRlclN0eWxlKQorICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVN0eWxlOgorICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFX1dJVEhfVkFMVUUoYm9y
ZGVyQm90dG9tU3R5bGUsIEJvcmRlckJvdHRvbVN0eWxlLCBCb3JkZXJTdHlsZSkKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0U3R5bGU6CisgICAgICAgIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkVfV0lUSF9WQUxVRShib3JkZXJM
ZWZ0U3R5bGUsIEJvcmRlckxlZnRTdHlsZSwgQm9yZGVyU3R5bGUpCisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVN0eWxlOgorICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTF9XSVRIX1ZBTFVFKG91dGxpbmVTdHlsZSwgT3V0bGluZVN0eWxlLCBCb3Jk
ZXJTdHlsZSkKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CisgICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICAgICAg
ICAgIG1fc3R5bGUtPnNldE91dGxpbmVTdHlsZShET1RURUQsIHRydWUpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE91dGxpbmVTdHlsZSgqcHJpbWl0aXZl
VmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5
Q2FwdGlvblNpZGU6CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklN
SVRJVkUoY2FwdGlvblNpZGUsIENhcHRpb25TaWRlKQorICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUNsZWFyOgorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9B
TkRfUFJJTUlUSVZFKGNsZWFyLCBDbGVhcikKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NT
UHJvcGVydHlEaXJlY3Rpb246CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FO
RF9QUklNSVRJVkUoZGlyZWN0aW9uLCBEaXJlY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIENTU1Byb3BlcnR5RGlzcGxheToKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJ
QUxfQU5EX1BSSU1JVElWRShkaXNwbGF5LCBEaXNwbGF5KQorI2lmIEVOQUJMRShXQ1NTKQorICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdhcE1hcnF1ZWUpIHsKKyAgICAgICAgICAgICAgICAv
LyBJbml0aWFsaXplIFdBUCBNYXJxdWVlIHN0eWxlCisgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0T3ZlcmZsb3dYKE9NQVJRVUVFKTsKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRPdmVy
Zmxvd1koT01BUlFVRUUpOworICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFdoaXRlU3BhY2Uo
Tk9XUkFQKTsKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlRGlyZWN0aW9uKE1M
RUZUKTsKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAvLyBO
b3JtYWwgc3BlZWQKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50
KDEpOworICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVCZWhhdmlvcihNU0NST0xM
KTsKKworICAgICAgICAgICAgICAgIGlmIChtX3BhcmVudFN0eWxlKQorICAgICAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXREaXNwbGF5KG1fcGFyZW50U3R5bGUtPmRpc3BsYXkoKSk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXREaXNwbGF5
KCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXREaXNwbGF5KCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIH0KKyNlbmRpZgor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eUVtcHR5Q2VsbHM6CisgICAgICAg
IEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkUoZW1wdHlDZWxscywgRW1w
dHlDZWxscykKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9hdDoKKyAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRShmbG9hdGluZywg
RmxvYXRpbmcpCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0eWxl
OgorICAgIHsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBpZiAoaXNJbmhlcml0KQorICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhtX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS5pdGFsaWMoKSk7CisgICAgICAgIGVsc2UgaWYgKGlzSW5pdGlhbCkKKyAgICAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoZmFsc2UpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVPYmxpcXVlOgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBv
YmxpcXVlIGlzIHRoZSBzYW1lIGFzIGl0YWxpYyBmb3IgdGhlIG1vbWVudC4uLgorICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVJdGFsaWM6CisgICAgICAgICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRJdGFsaWModHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6CisgICAgICAgICAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fc3R5bGUtPnNldEZvbnRE
ZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKQorICAgICAgICAgICAgbV9mb250RGlydHkgPSB0
cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRW
YXJpYW50OgorICAgIHsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9
IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBpZiAoaXNJbmhlcml0KSAKKyAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTbWFsbENhcHMobV9wYXJlbnRTdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCkuc21hbGxDYXBzKCkpOworICAgICAgICBlbHNlIGlmIChpc0luaXRpYWwp
CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0U21hbGxDYXBzKGZhbHNlKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIGludCBpZCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpOworICAgICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQorICAgICAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTbWFsbENhcHMoZmFsc2UpOworICAgICAgICAgICAgZWxz
ZSBpZiAoaWQgPT0gQ1NTVmFsdWVTbWFsbENhcHMpCisgICAgICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFNtYWxsQ2Fwcyh0cnVlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fc3R5bGUtPnNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pKQorICAgICAgICAgICAgbV9mb250RGlydHkgPSB0cnVl
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRXZWln
aHQ6CisgICAgeworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9z
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGlmIChpc0luaGVyaXQpCisgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KG1fcGFyZW50U3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpLndlaWdodCgpKTsKKyAgICAgICAgZWxzZSBpZiAoaXNJbml0aWFsKQorICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewor
ICAgICAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUJvbGRlcjoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoZm9udERlc2NyaXB0aW9uLmJvbGRlcldl
aWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlTGlnaHRlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRXZWlnaHQoZm9udERlc2NyaXB0aW9uLmxpZ2h0ZXJXZWlnaHQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZUJvbGQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWU3MDA6CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWlnaHRC
b2xkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlTm9ybWFsOgorICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
NDAwOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChG
b250V2VpZ2h0Tm9ybWFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlOTAwOgorICAgICAgICAgICAgICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0OTAwKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlODAwOgor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2Vp
Z2h0ODAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlNjAwOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0NjAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlNTAwOgorICAgICAgICAg
ICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0NTAwKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlMzAwOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dFdlaWdodChGb250V2VpZ2h0MzAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlMjAwOgorICAgICAgICAgICAgICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0MjAwKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
MTAwOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChG
b250V2VpZ2h0MTAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGlmIChtX3N0eWxlLT5zZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSkKKyAgICAgICAgICAgIG1fZm9udERpcnR5ID0g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUxpc3RTdHlsZVBvc2l0aW9uOgorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TF9BTkRfUFJJTUlUSVZFKGxpc3RTdHlsZVBvc2l0aW9uLCBMaXN0U3R5bGVQb3NpdGlvbikKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVUeXBlOgorICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKGxpc3RTdHlsZVR5cGUs
IExpc3RTdHlsZVR5cGUpCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5T3Zl
cmZsb3c6CisgICAgeworICAgICAgICBpZiAoaXNJbmhlcml0KSB7CisgICAgICAgICAgICBtX3N0
eWxlLT5zZXRPdmVyZmxvd1gobV9wYXJlbnRTdHlsZS0+b3ZlcmZsb3dYKCkpOworICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0T3ZlcmZsb3dZKG1fcGFyZW50U3R5bGUtPm92ZXJmbG93WSgpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzSW5p
dGlhbCkgeworICAgICAgICAgICAgbV9zdHlsZS0+c2V0T3ZlcmZsb3dYKFJlbmRlclN0eWxlOjpp
bml0aWFsT3ZlcmZsb3dYKCkpOworICAgICAgICAgICAgbV9zdHlsZS0+c2V0T3ZlcmZsb3dZKFJl
bmRlclN0eWxlOjppbml0aWFsT3ZlcmZsb3dZKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgRU92ZXJmbG93IG8gPSAqcHJpbWl0aXZlVmFs
dWU7CisKKyAgICAgICAgbV9zdHlsZS0+c2V0T3ZlcmZsb3dYKG8pOworICAgICAgICBtX3N0eWxl
LT5zZXRPdmVyZmxvd1kobyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIENT
U1Byb3BlcnR5T3ZlcmZsb3dYOgorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9B
TkRfUFJJTUlUSVZFKG92ZXJmbG93WCwgT3ZlcmZsb3dYKQorICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93WToKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUxfQU5EX1BSSU1JVElWRShvdmVyZmxvd1ksIE92ZXJmbG93WSkKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtCZWZvcmU6CisgICAgICAgIEhBTkRMRV9J
TkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkVfV0lUSF9WQUxVRShwYWdlQnJlYWtCZWZv
cmUsIFBhZ2VCcmVha0JlZm9yZSwgUGFnZUJyZWFrKQorICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0FmdGVyOgorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRf
SU5JVElBTF9BTkRfUFJJTUlUSVZFX1dJVEhfVkFMVUUocGFnZUJyZWFrQWZ0ZXIsIFBhZ2VCcmVh
a0FmdGVyLCBQYWdlQnJlYWspCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5
UGFnZUJyZWFrSW5zaWRlOiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX1dJ
VEhfVkFMVUUocGFnZUJyZWFrSW5zaWRlLCBQYWdlQnJlYWtJbnNpZGUsIFBhZ2VCcmVhaykKKyAg
ICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
RVBhZ2VCcmVhayBwYWdlQnJlYWsgPSAqcHJpbWl0aXZlVmFsdWU7CisgICAgICAgIGlmIChwYWdl
QnJlYWsgIT0gUEJBTFdBWVMpCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRQYWdlQnJlYWtJbnNp
ZGUocGFnZUJyZWFrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVBvc2l0aW9uOgorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TF9BTkRfUFJJTUlUSVZFKHBvc2l0aW9uLCBQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ1NTUHJvcGVydHlUYWJsZUxheW91dDogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9B
TkRfSU5JVElBTCh0YWJsZUxheW91dCwgVGFibGVMYXlvdXQpCisKKyAgICAgICAgRVRhYmxlTGF5
b3V0IGwgPSAqcHJpbWl0aXZlVmFsdWU7CisgICAgICAgIGlmIChsID09IFRBVVRPKQorICAgICAg
ICAgICAgbCA9IFJlbmRlclN0eWxlOjppbml0aWFsVGFibGVMYXlvdXQoKTsKKworICAgICAgICBt
X3N0eWxlLT5zZXRUYWJsZUxheW91dChsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAg
ICAgCisgICAgY2FzZSBDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpOiAKKyAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRSh1bmljb2RlQmlkaSwgVW5pY29kZUJpZGkp
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFRyYW5zZm9ybTogCisg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkUodGV4dFRyYW5z
Zm9ybSwgVGV4dFRyYW5zZm9ybSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVy
dHlWaXNpYmlsaXR5OgorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJ
TUlUSVZFKHZpc2liaWxpdHksIFZpc2liaWxpdHkpCisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2hpdGVTcGFjZToKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJ
QUxfQU5EX1BSSU1JVElWRSh3aGl0ZVNwYWNlLCBXaGl0ZVNwYWNlKQorICAgICAgICByZXR1cm47
CisKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uOgorICAgICAgICBIQU5E
TEVfQkFDS0dST1VORF9JTkhFUklUX0FORF9JTklUSUFMKHhQb3NpdGlvbiwgWFBvc2l0aW9uKTsK
KyAgICAgICAgSEFORExFX0JBQ0tHUk9VTkRfSU5IRVJJVF9BTkRfSU5JVElBTCh5UG9zaXRpb24s
IFlQb3NpdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dy
b3VuZFBvc2l0aW9uWDogeworICAgICAgICBIQU5ETEVfQkFDS0dST1VORF9WQUxVRSh4UG9zaXRp
b24sIFhQb3NpdGlvbiwgdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6IHsKKyAgICAgICAgSEFORExFX0JBQ0tHUk9V
TkRfVkFMVUUoeVBvc2l0aW9uLCBZUG9zaXRpb24sIHZhbHVlKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb246CisgICAgICAgIEhB
TkRMRV9NQVNLX0lOSEVSSVRfQU5EX0lOSVRJQUwoeFBvc2l0aW9uLCBYUG9zaXRpb24pOworICAg
ICAgICBIQU5ETEVfTUFTS19JTkhFUklUX0FORF9JTklUSUFMKHlQb3NpdGlvbiwgWVBvc2l0aW9u
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRp
b25YOiB7CisgICAgICAgIEhBTkRMRV9NQVNLX1ZBTFVFKHhQb3NpdGlvbiwgWFBvc2l0aW9uLCB2
YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza1Bvc2l0aW9uWTogeworICAgICAgICBIQU5ETEVfTUFTS19WQUxVRSh5UG9zaXRpb24sIFlQ
b3NpdGlvbiwgdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRSZXBlYXQ6CisgICAgICAgIEhBTkRMRV9CQUNLR1JPVU5EX0lOSEVSSVRf
QU5EX0lOSVRJQUwocmVwZWF0WCwgUmVwZWF0WCk7CisgICAgICAgIEhBTkRMRV9CQUNLR1JPVU5E
X0lOSEVSSVRfQU5EX0lOSVRJQUwocmVwZWF0WSwgUmVwZWF0WSk7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFg6CisgICAgICAgIEhBTkRMRV9C
QUNLR1JPVU5EX1ZBTFVFKHJlcGVhdFgsIFJlcGVhdFgsIHZhbHVlKQorICAgICAgICByZXR1cm47
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZOgorICAgICAgICBIQU5ETEVf
QkFDS0dST1VORF9WQUxVRShyZXBlYXRZLCBSZXBlYXRZLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0OgorICAgICAgICBIQU5ETEVf
TUFTS19JTkhFUklUX0FORF9JTklUSUFMKHJlcGVhdFgsIFJlcGVhdFgpOworICAgICAgICBIQU5E
TEVfTUFTS19JTkhFUklUX0FORF9JTklUSUFMKHJlcGVhdFksIFJlcGVhdFkpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRYOgorICAgICAgICBI
QU5ETEVfTUFTS19WQUxVRShyZXBlYXRYLCBSZXBlYXRYLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WToKKyAgICAgICAgSEFORExF
X01BU0tfVkFMVUUocmVwZWF0WSwgUmVwZWF0WSwgdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyU3BhY2luZzogeworICAgICAgICBpZiAoaXNJbmhlcml0
KSB7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRIb3Jpem9udGFsQm9yZGVyU3BhY2luZyhtX3Bh
cmVudFN0eWxlLT5ob3Jpem9udGFsQm9yZGVyU3BhY2luZygpKTsKKyAgICAgICAgICAgIG1fc3R5
bGUtPnNldFZlcnRpY2FsQm9yZGVyU3BhY2luZyhtX3BhcmVudFN0eWxlLT52ZXJ0aWNhbEJvcmRl
clNwYWNpbmcoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaXNJbml0aWFsKSB7Cisg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRIb3Jpem9udGFsQm9yZGVyU3BhY2luZygwKTsKKyAgICAg
ICAgICAgIG1fc3R5bGUtPnNldFZlcnRpY2FsQm9yZGVyU3BhY2luZygwKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJI
b3Jpem9udGFsU3BhY2luZzogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCho
b3Jpem9udGFsQm9yZGVyU3BhY2luZywgSG9yaXpvbnRhbEJvcmRlclNwYWNpbmcpCisgICAgICAg
IGlmICghcHJpbWl0aXZlVmFsdWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHNob3J0
IHNwYWNpbmcgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aFNob3J0KHN0eWxlKCksIG1f
cm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgIG1fc3R5bGUtPnNldEhvcml6
b250YWxCb3JkZXJTcGFjaW5nKHNwYWNpbmcpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmc6IHsKKyAgICAgICAg
SEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodmVydGljYWxCb3JkZXJTcGFjaW5nLCBWZXJ0aWNh
bEJvcmRlclNwYWNpbmcpCisgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHNob3J0IHNwYWNpbmcgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZUxlbmd0aFNob3J0KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Cisg
ICAgICAgIG1fc3R5bGUtPnNldFZlcnRpY2FsQm9yZGVyU3BhY2luZyhzcGFjaW5nKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5Q3Vyc29yOgorICAgICAgICBp
ZiAoaXNJbmhlcml0KSB7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRDdXJzb3IobV9wYXJlbnRT
dHlsZS0+Y3Vyc29yKCkpOworICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q3Vyc29yTGlzdChtX3Bh
cmVudFN0eWxlLT5jdXJzb3JzKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIG1fc3R5bGUtPmNsZWFyQ3Vyc29yTGlzdCgpOworICAgICAgICBpZiAoaXNJbml0aWFs
KSB7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRDdXJzb3IoUmVuZGVyU3R5bGU6OmluaXRpYWxD
dXJzb3IoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZh
bHVlLT5pc1ZhbHVlTGlzdCgpKSB7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBz
dGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CisgICAgICAgICAgICBpbnQgbGVuID0g
bGlzdC0+bGVuZ3RoKCk7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRDdXJzb3IoQ1VSU09SX0FV
VE8pOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAg
ICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhp
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOworICAgICAgICAgICAgICAg
IGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgICAg
ICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgeworICAgICAgICAg
ICAgICAgICAgICBDU1NDdXJzb3JJbWFnZVZhbHVlKiBpbWFnZSA9IHN0YXRpY19jYXN0PENTU0N1
cnNvckltYWdlVmFsdWUqPihwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChpbWFnZS0+dXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQobV9lbGVtZW50KSkgLy8gRWxlbWVudHMg
d2l0aCBTVkcgY3Vyc29ycyBhcmUgbm90IGFsbG93ZWQgdG8gc2hhcmUgc3R5bGUuCisgICAgICAg
ICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFRlbXBvcmFyeSBjbHVtc2luZXNzIHRvIHBhc3Mgb2ZmIGEgQ2FjaGVkSW1h
Z2UgdG8gYW4gQVBJIHRoYXQgd2lsbCBldmVudHVhbGx5IGNvbnZlcnQgdG8gdXNpbmcKKyAgICAg
ICAgICAgICAgICAgICAgLy8gU3R5bGVJbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgUmVmUHRy
PFN0eWxlQ2FjaGVkSW1hZ2U+IHN0eWxlQ2FjaGVkSW1hZ2UoaW1hZ2UtPmNhY2hlZEltYWdlKG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHN0eWxlQ2FjaGVkSW1hZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5h
ZGRDdXJzb3Ioc3R5bGVDYWNoZWRJbWFnZS0+Y2FjaGVkSW1hZ2UoKSwgaW1hZ2UtPmhvdFNwb3Qo
KSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfSURFTlQpCisgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEN1cnNvcigqcHJp
bWl0aXZlVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlKSB7CisgICAgICAgICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRp
dmVUeXBlKCk7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0lERU5UICYmIG1fc3R5bGUtPmN1cnNvcigpICE9IEVDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKSkK
KyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm47CisvLyBjb2xvcnMgfHwgaW5oZXJpdAorICAgIGNhc2Ug
Q1NTUHJvcGVydHlDb2xvcjoKKyAgICAgICAgLy8gSWYgdGhlICdjdXJyZW50Q29sb3InIGtleXdv
cmQgaXMgc2V0IG9uIHRoZSAnY29sb3InIHByb3BlcnR5IGl0c2VsZiwKKyAgICAgICAgLy8gaXQg
aXMgdHJlYXRlZCBhcyAnY29sb3I6aW5oZXJpdCcgYXQgcGFyc2UgdGltZQorICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVD
dXJyZW50Y29sb3IpCisgICAgICAgICAgICBpc0luaGVyaXQgPSB0cnVlOworICAgIGNhc2UgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENv
bG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVm
dENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VGV4dFN0cm9rZUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9y
OiB7CisgICAgICAgIENvbG9yIGNvbDsKKyAgICAgICAgaWYgKGlzSW5oZXJpdCkgeworICAgICAg
ICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgYmFj
a2dyb3VuZENvbG9yLCBCYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9DT05EX1dJVEhfQkFDS1VQKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IsIGJvcmRlclRvcENv
bG9yLCBjb2xvciwgQm9yZGVyVG9wQ29sb3IpCisgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9D
T05EX1dJVEhfQkFDS1VQKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsIGJvcmRlckJvdHRv
bUNvbG9yLCBjb2xvciwgQm9yZGVyQm90dG9tQ29sb3IpCisgICAgICAgICAgICBIQU5ETEVfSU5I
RVJJVF9DT05EX1dJVEhfQkFDS1VQKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgYm9yZGVy
UmlnaHRDb2xvciwgY29sb3IsIEJvcmRlclJpZ2h0Q29sb3IpCisgICAgICAgICAgICBIQU5ETEVf
SU5IRVJJVF9DT05EX1dJVEhfQkFDS1VQKENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yLCBib3Jk
ZXJMZWZ0Q29sb3IsIGNvbG9yLCBCb3JkZXJMZWZ0Q29sb3IpCisgICAgICAgICAgICBIQU5ETEVf
SU5IRVJJVF9DT05EKENTU1Byb3BlcnR5Q29sb3IsIGNvbG9yLCBDb2xvcikKKyAgICAgICAgICAg
IEhBTkRMRV9JTkhFUklUX0NPTkRfV0lUSF9CQUNLVVAoQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3Is
IG91dGxpbmVDb2xvciwgY29sb3IsIE91dGxpbmVDb2xvcikKKyAgICAgICAgICAgIEhBTkRMRV9J
TkhFUklUX0NPTkRfV0lUSF9CQUNLVVAoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlQ29sb3Is
IGNvbHVtblJ1bGVDb2xvciwgY29sb3IsIENvbHVtblJ1bGVDb2xvcikKKyAgICAgICAgICAgIEhB
TkRMRV9JTkhFUklUX0NPTkRfV0lUSF9CQUNLVVAoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tl
Q29sb3IsIHRleHRTdHJva2VDb2xvciwgY29sb3IsIFRleHRTdHJva2VDb2xvcikKKyAgICAgICAg
ICAgIEhBTkRMRV9JTkhFUklUX0NPTkRfV0lUSF9CQUNLVVAoQ1NTUHJvcGVydHlXZWJraXRUZXh0
RmlsbENvbG9yLCB0ZXh0RmlsbENvbG9yLCBjb2xvciwgVGV4dEZpbGxDb2xvcikKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNJbml0aWFsKSB7CisgICAgICAg
ICAgICAvLyBUaGUgYm9yZGVyL291dGxpbmUgY29sb3JzIHdpbGwganVzdCBtYXAgdG8gdGhlIGlu
dmFsaWQgY29sb3IgfGNvbHwgYWJvdmUuICBUaGlzIHdpbGwgaGF2ZSB0aGUKKyAgICAgICAgICAg
IC8vIGVmZmVjdCBvZiBmb3JjaW5nIHRoZSB1c2Ugb2YgdGhlIGN1cnJlbnRDb2xvciB3aGVuIGl0
IGNvbWVzIHRpbWUgdG8gZHJhdyB0aGUgYm9yZGVycyAoYW5kIG9mCisgICAgICAgICAgICAvLyBu
b3QgcGFpbnRpbmcgdGhlIGJhY2tncm91bmQgc2luY2UgdGhlIGNvbG9yIHdvbid0IGJlIHZhbGlk
KS4KKyAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUNvbG9yKQorICAgICAgICAgICAg
ICAgIGNvbCA9IFJlbmRlclN0eWxlOjppbml0aWFsQ29sb3IoKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgY29sID0gZ2V0Q29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZl
VmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChpZCkgeworICAgICAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgorICAgICAgICAgICAgbV9zdHlsZS0+c2V0QmFj
a2dyb3VuZENvbG9yKGNvbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlclRvcENvbG9yOgorICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyVG9w
Q29sb3IoY29sKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyUmlnaHRDb2xvcjoKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclJpZ2h0Q29s
b3IoY29sKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyQm90dG9tQ29sb3I6CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJCb3R0b21Db2xv
cihjb2wpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJMZWZ0Q29sb3I6CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJMZWZ0Q29sb3IoY29s
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6Cisg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2xvcihjb2wpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6CisgICAgICAgICAgICBtX3N0eWxl
LT5zZXRPdXRsaW5lQ29sb3IoY29sKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yOgorICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Q29sdW1uUnVsZUNvbG9yKGNvbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKKyAgICAgICAgICAgIG1fc3R5bGUt
PnNldFRleHRTdHJva2VDb2xvcihjb2wpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yOgorICAgICAgICAgICAgbV9zdHlsZS0+
c2V0VGV4dEZpbGxDb2xvcihjb2wpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisvLyB1cmkgfHwgaW5oZXJpdAor
ICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6CisgICAgICAgIEhBTkRMRV9CQUNL
R1JPVU5EX1ZBTFVFKGltYWdlLCBJbWFnZSwgdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlOgorICAgICAgICBIQU5ETEVfTUFTS19WQUxV
RShpbWFnZSwgSW1hZ2UsIHZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUxpc3RTdHlsZUltYWdlOgorICAgIHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwobGlzdFN0eWxlSW1hZ2UsIExpc3RTdHlsZUltYWdlKQorICAgICAgICBtX3N0eWxlLT5z
ZXRMaXN0U3R5bGVJbWFnZShzdHlsZUltYWdlKHZhbHVlKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKy8vIGxlbmd0aAorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyQm90dG9tV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aDoK
KyAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRDb2x1bW5SdWxlV2lkdGg6CisgICAgeworICAgICAgICBpZiAoaXNJbmhlcml0KSB7Cisg
ICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgs
IGJvcmRlclRvcFdpZHRoLCBCb3JkZXJUb3BXaWR0aCkKKyAgICAgICAgICAgIEhBTkRMRV9JTkhF
UklUX0NPTkQoQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCBib3JkZXJSaWdodFdpZHRoLCBC
b3JkZXJSaWdodFdpZHRoKQorICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChDU1NQcm9w
ZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCBib3JkZXJCb3R0b21XaWR0aCwgQm9yZGVyQm90dG9tV2lk
dGgpCisgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5Qm9yZGVyTGVm
dFdpZHRoLCBib3JkZXJMZWZ0V2lkdGgsIEJvcmRlckxlZnRXaWR0aCkKKyAgICAgICAgICAgIEhB
TkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGgsIG91dGxpbmVXaWR0aCwg
T3V0bGluZVdpZHRoKQorICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChDU1NQcm9wZXJ0
eVdlYmtpdENvbHVtblJ1bGVXaWR0aCwgY29sdW1uUnVsZVdpZHRoLCBDb2x1bW5SdWxlV2lkdGgp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaXNJbml0
aWFsKSB7CisgICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJv
cGVydHlCb3JkZXJUb3BXaWR0aCwgQm9yZGVyVG9wV2lkdGgsIEJvcmRlcldpZHRoKQorICAgICAg
ICAgICAgSEFORExFX0lOSVRJQUxfQ09ORF9XSVRIX1ZBTFVFKENTU1Byb3BlcnR5Qm9yZGVyUmln
aHRXaWR0aCwgQm9yZGVyUmlnaHRXaWR0aCwgQm9yZGVyV2lkdGgpCisgICAgICAgICAgICBIQU5E
TEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwg
Qm9yZGVyQm90dG9tV2lkdGgsIEJvcmRlcldpZHRoKQorICAgICAgICAgICAgSEFORExFX0lOSVRJ
QUxfQ09ORF9XSVRIX1ZBTFVFKENTU1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRoLCBCb3JkZXJMZWZ0
V2lkdGgsIEJvcmRlcldpZHRoKQorICAgICAgICAgICAgSEFORExFX0lOSVRJQUxfQ09ORF9XSVRI
X1ZBTFVFKENTU1Byb3BlcnR5T3V0bGluZVdpZHRoLCBPdXRsaW5lV2lkdGgsIEJvcmRlcldpZHRo
KQorICAgICAgICAgICAgSEFORExFX0lOSVRJQUxfQ09ORF9XSVRIX1ZBTFVFKENTU1Byb3BlcnR5
V2Via2l0Q29sdW1uUnVsZVdpZHRoLCBDb2x1bW5SdWxlV2lkdGgsIEJvcmRlcldpZHRoKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc2hvcnQgd2lkdGggPSAzOworICAgICAg
ICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAgIGNhc2UgQ1NT
VmFsdWVUaGluOgorICAgICAgICAgICAgd2lkdGggPSAxOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ1NTVmFsdWVNZWRpdW06CisgICAgICAgICAgICB3aWR0aCA9IDM7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVRoaWNrOgorICAgICAgICAgICAg
d2lkdGggPSA1OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVJbnZh
bGlkOgorICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aFNo
b3J0KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh3aWR0aCA8IDApIHJldHVybjsKKyAgICAgICAgc3dpdGNoIChpZCkg
eworICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGg6CisgICAgICAgICAgICBt
X3N0eWxlLT5zZXRCb3JkZXJUb3BXaWR0aCh3aWR0aCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGg6CisgICAgICAgICAgICBtX3N0
eWxlLT5zZXRCb3JkZXJSaWdodFdpZHRoKHdpZHRoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGg6CisgICAgICAgICAgICBtX3N0
eWxlLT5zZXRCb3JkZXJCb3R0b21XaWR0aCh3aWR0aCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aDoKKyAgICAgICAgICAgIG1fc3R5
bGUtPnNldEJvcmRlckxlZnRXaWR0aCh3aWR0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVXaWR0aDoKKyAgICAgICAgICAgIG1fc3R5bGUtPnNl
dE91dGxpbmVXaWR0aCh3aWR0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVXaWR0aDoKKyAgICAgICAgICAgIG1fc3R5bGUtPnNl
dENvbHVtblJ1bGVXaWR0aCh3aWR0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTbW9vdGhpbmc6IHsKKyAgICAg
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpOworICAgICAgICBpZiAoaXNJbmhlcml0KSAKKyAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRGb250U21vb3RoaW5nKG1fcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmZv
bnRTbW9vdGhpbmcoKSk7CisgICAgICAgIGVsc2UgaWYgKGlzSW5pdGlhbCkKKyAgICAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRGb250U21vb3RoaW5nKEF1dG9TbW9vdGhpbmcpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgaW50IGlkID0gcHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCk7CisgICAgICAgICAgICBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmc7CisgICAgICAgICAg
ICBzd2l0Y2ggKGlkKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUF1dG86CisgICAg
ICAgICAgICAgICAgICAgIHNtb290aGluZyA9IEF1dG9TbW9vdGhpbmc7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb25lOgorICAgICAg
ICAgICAgICAgICAgICBzbW9vdGhpbmcgPSBOb1Ntb290aGluZzsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUFudGlhbGlhc2VkOgorICAg
ICAgICAgICAgICAgICAgICBzbW9vdGhpbmcgPSBBbnRpYWxpYXNlZDsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVN1YnBpeGVsQW50aWFs
aWFzZWQ6CisgICAgICAgICAgICAgICAgICAgIHNtb290aGluZyA9IFN1YnBpeGVsQW50aWFsaWFz
ZWQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ICAgICAgICBzbW9vdGhpbmcgPSBBdXRvU21vb3RoaW5nOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZvbnRTbW9vdGhpbmcoc21vb3RoaW5nKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAobV9zdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbikpCisgICAgICAgICAgICBtX2ZvbnREaXJ0eSA9IHRydWU7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjYXNlIENTU1Byb3BlcnR5TGV0dGVyU3BhY2luZzoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V29yZFNwYWNpbmc6CisgICAgeworICAgICAgICAKKyAgICAgICAgaWYgKGlzSW5o
ZXJpdCkgeworICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChDU1NQcm9wZXJ0eUxldHRl
clNwYWNpbmcsIGxldHRlclNwYWNpbmcsIExldHRlclNwYWNpbmcpCisgICAgICAgICAgICBIQU5E
TEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5V29yZFNwYWNpbmcsIHdvcmRTcGFjaW5nLCBXb3Jk
U3BhY2luZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChpc0luaXRpYWwpIHsKKyAgICAgICAgICAgIEhBTkRMRV9JTklUSUFMX0NPTkRfV0lUSF9WQUxV
RShDU1NQcm9wZXJ0eUxldHRlclNwYWNpbmcsIExldHRlclNwYWNpbmcsIExldHRlcldvcmRTcGFj
aW5nKQorICAgICAgICAgICAgSEFORExFX0lOSVRJQUxfQ09ORF9XSVRIX1ZBTFVFKENTU1Byb3Bl
cnR5V29yZFNwYWNpbmcsIFdvcmRTcGFjaW5nLCBMZXR0ZXJXb3JkU3BhY2luZykKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50IHdpZHRoID0gMDsK
KyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlTm9ybWFsKSB7CisgICAgICAgICAgICB3aWR0aCA9IDA7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5n
dGhJbnQoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB1c2VTVkdab29tUnVsZXMgPyAxLjBm
IDogem9vbUZhY3Rvcik7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChpZCkgeworICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5TGV0dGVyU3BhY2luZzoKKyAgICAgICAgICAgIG1fc3R5bGUtPnNl
dExldHRlclNwYWNpbmcod2lkdGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXb3JkU3BhY2luZzoKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldFdvcmRTcGFj
aW5nKHdpZHRoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gIyMjIG5lZWRz
IHRoZSBkZWZpbml0aW9ucyBpbiByZW5kZXJzdHlsZQorICAgICAgICBkZWZhdWx0OiBicmVhazsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdvcmRCcmVhazoKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1J
VElWRSh3b3JkQnJlYWssIFdvcmRCcmVhaykKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NT
UHJvcGVydHlXb3JkV3JhcDoKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5E
X1BSSU1JVElWRSh3b3JkV3JhcCwgV29yZFdyYXApCisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TmJzcE1vZGU6CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMX0FORF9QUklNSVRJVkUobmJzcE1vZGUsIE5CU1BNb2RlKQorICAgICAgICByZXR1cm47
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVCcmVhazoKKyAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRShraHRtbExpbmVCcmVhaywgS0hUTUxMaW5l
QnJlYWspCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWF0Y2hO
ZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvcjoKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUxfQU5EX1BSSU1JVElWRShtYXRjaE5lYXJlc3RNYWlsQmxvY2txdW90ZUNvbG9yLCBNYXRj
aE5lYXJlc3RNYWlsQmxvY2txdW90ZUNvbG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNl
IENTU1Byb3BlcnR5UmVzaXplOgorICAgIHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwocmVzaXplLCBSZXNpemUpCisKKyAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBFUmVzaXplIHIgPSBSRVNJ
WkVfTk9ORTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlQXV0bykgeworICAgICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2hlY2tl
ci5tX2RvY3VtZW50LT5zZXR0aW5ncygpKQorICAgICAgICAgICAgICAgIHIgPSBzZXR0aW5ncy0+
dGV4dEFyZWFzQXJlUmVzaXphYmxlKCkgPyBSRVNJWkVfQk9USCA6IFJFU0laRV9OT05FOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIHIgPSAqcHJpbWl0aXZlVmFsdWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgbV9zdHlsZS0+c2V0UmVzaXplKHIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIC8vIGxlbmd0aCwgcGVyY2VudAorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhX
aWR0aDoKKyAgICAgICAgLy8gK25vbmUgK2luaGVyaXQKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkKKyAgICAg
ICAgICAgIGFwcGx5ID0gdHJ1ZTsKKyAgICBjYXNlIENTU1Byb3BlcnR5VG9wOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlMZWZ0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlSaWdodDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5Qm90dG9tOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXaWR0aDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5TWluV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpblRvcDoKKyAgICBj
YXNlIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbkJv
dHRvbToKKyAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luTGVmdDoKKyAgICAgICAgLy8gK2luaGVy
aXQgK2F1dG8KKyAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5V2lkdGggfHwgaWQgPT0gQ1NT
UHJvcGVydHlNaW5XaWR0aCB8fCBpZCA9PSBDU1NQcm9wZXJ0eU1heFdpZHRoKSB7CisgICAgICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVJbnRyaW5zaWMpIHsKKyAgICAgICAgICAgICAgICBsID0gTGVuZ3RoKEludHJpbnNp
Yyk7CisgICAgICAgICAgICAgICAgYXBwbHkgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVNaW5JbnRyaW5zaWMpIHsKKyAgICAgICAgICAgICAgICBsID0gTGVuZ3Ro
KE1pbkludHJpbnNpYyk7CisgICAgICAgICAgICAgICAgYXBwbHkgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpZCAhPSBDU1NQcm9wZXJ0eU1heFdpZHRoICYm
IHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
QXV0bykKKyAgICAgICAgICAgIGFwcGx5ID0gdHJ1ZTsKKyAgICBjYXNlIENTU1Byb3BlcnR5UGFk
ZGluZ1RvcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0OgorICAgIGNhc2UgQ1NT
UHJvcGVydHlQYWRkaW5nQm90dG9tOgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nTGVmdDoK
KyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEluZGVudDoKKyAgICAgICAgLy8gK2luaGVyaXQKKyAg
ICB7CisgICAgICAgIGlmIChpc0luaGVyaXQpIHsKKyAgICAgICAgICAgIEhBTkRMRV9JTkhFUklU
X0NPTkQoQ1NTUHJvcGVydHlNYXhXaWR0aCwgbWF4V2lkdGgsIE1heFdpZHRoKQorICAgICAgICAg
ICAgSEFORExFX0lOSEVSSVRfQ09ORChDU1NQcm9wZXJ0eUJvdHRvbSwgYm90dG9tLCBCb3R0b20p
CisgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5VG9wLCB0b3AsIFRv
cCkKKyAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVydHlMZWZ0LCBsZWZ0
LCBMZWZ0KQorICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChDU1NQcm9wZXJ0eVJpZ2h0
LCByaWdodCwgUmlnaHQpCisgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3Bl
cnR5V2lkdGgsIHdpZHRoLCBXaWR0aCkKKyAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkQo
Q1NTUHJvcGVydHlNaW5XaWR0aCwgbWluV2lkdGgsIE1pbldpZHRoKQorICAgICAgICAgICAgSEFO
RExFX0lOSEVSSVRfQ09ORChDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsIHBhZGRpbmdUb3AsIFBhZGRp
bmdUb3ApCisgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5UGFkZGlu
Z1JpZ2h0LCBwYWRkaW5nUmlnaHQsIFBhZGRpbmdSaWdodCkKKyAgICAgICAgICAgIEhBTkRMRV9J
TkhFUklUX0NPTkQoQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tLCBwYWRkaW5nQm90dG9tLCBQYWRk
aW5nQm90dG9tKQorICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChDU1NQcm9wZXJ0eVBh
ZGRpbmdMZWZ0LCBwYWRkaW5nTGVmdCwgUGFkZGluZ0xlZnQpCisgICAgICAgICAgICBIQU5ETEVf
SU5IRVJJVF9DT05EKENTU1Byb3BlcnR5TWFyZ2luVG9wLCBtYXJnaW5Ub3AsIE1hcmdpblRvcCkK
KyAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwg
bWFyZ2luUmlnaHQsIE1hcmdpblJpZ2h0KQorICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09O
RChDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgbWFyZ2luQm90dG9tLCBNYXJnaW5Cb3R0b20pCisg
ICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgbWFy
Z2luTGVmdCwgTWFyZ2luTGVmdCkKKyAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NT
UHJvcGVydHlUZXh0SW5kZW50LCB0ZXh0SW5kZW50LCBUZXh0SW5kZW50KQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlzSW5pdGlhbCkgeworICAgICAg
ICAgICAgSEFORExFX0lOSVRJQUxfQ09ORF9XSVRIX1ZBTFVFKENTU1Byb3BlcnR5TWF4V2lkdGgs
IE1heFdpZHRoLCBNYXhTaXplKQorICAgICAgICAgICAgSEFORExFX0lOSVRJQUxfQ09ORF9XSVRI
X1ZBTFVFKENTU1Byb3BlcnR5Qm90dG9tLCBCb3R0b20sIE9mZnNldCkKKyAgICAgICAgICAgIEhB
TkRMRV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eVRvcCwgVG9wLCBPZmZzZXQp
CisgICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlM
ZWZ0LCBMZWZ0LCBPZmZzZXQpCisgICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhf
VkFMVUUoQ1NTUHJvcGVydHlSaWdodCwgUmlnaHQsIE9mZnNldCkKKyAgICAgICAgICAgIEhBTkRM
RV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eVdpZHRoLCBXaWR0aCwgU2l6ZSkK
KyAgICAgICAgICAgIEhBTkRMRV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eU1p
bldpZHRoLCBNaW5XaWR0aCwgTWluU2l6ZSkKKyAgICAgICAgICAgIEhBTkRMRV9JTklUSUFMX0NP
TkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsIFBhZGRpbmdUb3AsIFBhZGRpbmcp
CisgICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlQ
YWRkaW5nUmlnaHQsIFBhZGRpbmdSaWdodCwgUGFkZGluZykKKyAgICAgICAgICAgIEhBTkRMRV9J
TklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b20sIFBhZGRpbmdC
b3R0b20sIFBhZGRpbmcpCisgICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFM
VUUoQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCwgUGFkZGluZ0xlZnQsIFBhZGRpbmcpCisgICAgICAg
ICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlNYXJnaW5Ub3As
IE1hcmdpblRvcCwgTWFyZ2luKQorICAgICAgICAgICAgSEFORExFX0lOSVRJQUxfQ09ORF9XSVRI
X1ZBTFVFKENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsIE1hcmdpblJpZ2h0LCBNYXJnaW4pCisgICAg
ICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlNYXJnaW5C
b3R0b20sIE1hcmdpbkJvdHRvbSwgTWFyZ2luKQorICAgICAgICAgICAgSEFORExFX0lOSVRJQUxf
Q09ORF9XSVRIX1ZBTFVFKENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgTWFyZ2luTGVmdCwgTWFyZ2lu
KQorICAgICAgICAgICAgSEFORExFX0lOSVRJQUxfQ09ORChDU1NQcm9wZXJ0eVRleHRJbmRlbnQs
IFRleHRJbmRlbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gCisKKyAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlICYmICFhcHBseSkgeworICAgICAgICAgICAgaW50IHR5cGUgPSBw
cmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICAgICAgaWYgKENTU1ByaW1p
dGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5cGUpKQorICAgICAgICAgICAgICAgIC8vIEhh
bmRsZSBvdXIgcXVpcmt5IG1hcmdpbiB1bml0cyBpZiB3ZSBoYXZlIHRoZW0uCisgICAgICAgICAg
ICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0
aChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVWYWx1ZS0+aXNRdWlya1ZhbHVlKCkpOwor
ICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpCisgICAgICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgYXBwbHkgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlm
ICghYXBwbHkpIHJldHVybjsKKyAgICAgICAgc3dpdGNoIChpZCkgeworICAgICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eU1heFdpZHRoOgorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1heFdp
ZHRoKGwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvdHRvbToKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3R0b20obCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5VG9wOgorICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldFRvcChsKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMZWZ0OgorICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldExlZnQobCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IENTU1Byb3BlcnR5UmlnaHQ6CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0UmlnaHQobCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2lk
dGg6CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0V2lkdGgobCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWluV2lkdGg6CisgICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0TWluV2lkdGgobCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1RvcDoKKyAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRQYWRkaW5nVG9wKGwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodDoKKyAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRQYWRkaW5nUmlnaHQobCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0JvdHRvbToKKyAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRQYWRkaW5nQm90dG9tKGwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0OgorICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldFBhZGRpbmdMZWZ0KGwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpblRvcDoKKyAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRNYXJnaW5Ub3AobCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQ6CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0
TWFyZ2luUmlnaHQobCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IENTU1Byb3BlcnR5TWFyZ2luQm90dG9tOgorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1h
cmdpbkJvdHRvbShsKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlNYXJnaW5MZWZ0OgorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcmdp
bkxlZnQobCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1By
b3BlcnR5VGV4dEluZGVudDoKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRUZXh0SW5kZW50
KGwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhIZWlnaHQ6CisgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKKyAg
ICAgICAgICAgIGwgPSBMZW5ndGgodW5kZWZpbmVkTGVuZ3RoLCBGaXhlZCk7CisgICAgICAgICAg
ICBhcHBseSA9IHRydWU7CisgICAgICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5SGVpZ2h0Ogor
ICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5IZWlnaHQ6CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUludHJpbnNpYykgewor
ICAgICAgICAgICAgbCA9IExlbmd0aChJbnRyaW5zaWMpOworICAgICAgICAgICAgYXBwbHkgPSB0
cnVlOworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlTWluSW50cmluc2ljKSB7CisgICAgICAgICAgICBsID0g
TGVuZ3RoKE1pbkludHJpbnNpYyk7CisgICAgICAgICAgICBhcHBseSA9IHRydWU7CisgICAgICAg
IH0gZWxzZSBpZiAoaWQgIT0gQ1NTUHJvcGVydHlNYXhIZWlnaHQgJiYgcHJpbWl0aXZlVmFsdWUg
JiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICAg
ICAgYXBwbHkgPSB0cnVlOworICAgICAgICBpZiAoaXNJbmhlcml0KSB7CisgICAgICAgICAgICBI
QU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5TWF4SGVpZ2h0LCBtYXhIZWlnaHQsIE1heEhl
aWdodCkKKyAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVydHlIZWlnaHQs
IGhlaWdodCwgSGVpZ2h0KQorICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChDU1NQcm9w
ZXJ0eU1pbkhlaWdodCwgbWluSGVpZ2h0LCBNaW5IZWlnaHQpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzSW5pdGlhbCkgeworICAgICAgICAgICAgSEFORExF
X0lOSVRJQUxfQ09ORF9XSVRIX1ZBTFVFKENTU1Byb3BlcnR5TWF4SGVpZ2h0LCBNYXhIZWlnaHQs
IE1heFNpemUpCisgICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05EX1dJVEhfVkFMVUUoQ1NT
UHJvcGVydHlIZWlnaHQsIEhlaWdodCwgU2l6ZSkKKyAgICAgICAgICAgIEhBTkRMRV9JTklUSUFM
X0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eU1pbkhlaWdodCwgTWluSGVpZ2h0LCBNaW5TaXpl
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlICYmICFhcHBseSkgeworICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSA9IHBy
aW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7CisgICAgICAgICAgICBpZiAoQ1NTUHJpbWl0
aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgodHlwZSkpCisgICAgICAgICAgICAgICAgbCA9IExl
bmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChzdHlsZSgpLCBt
X3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCk7CisgICAgICAgICAgICBlbHNl
IGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKKyAgICAgICAg
ICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJj
ZW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBhcHBseSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFwcGx5KQorICAgICAg
ICAgICAgc3dpdGNoIChpZCkgeworICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhI
ZWlnaHQ6CisgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1heEhlaWdodChsKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUhlaWdodDoKKyAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0SGVpZ2h0KGwpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5
TWluSGVpZ2h0OgorICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNaW5IZWlnaHQobCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICByZXR1
cm47CisKKyAgICBjYXNlIENTU1Byb3BlcnR5VmVydGljYWxBbGlnbjoKKyAgICAgICAgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwodmVydGljYWxBbGlnbiwgVmVydGljYWxBbGlnbikKKyAgICAg
ICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAgICAgRVZlcnRpY2FsQWxpZ24g
YWxpZ247CisKKyAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7
CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVRvcDoKKyAgICAgICAgICAgICAgICAgICAg
YWxpZ24gPSBUT1A7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVCb3R0b206
CisgICAgICAgICAgICAgICAgICAgIGFsaWduID0gQk9UVE9NOyBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlTWlkZGxlOgorICAgICAgICAgICAgICAgICAgICBhbGlnbiA9IE1J
RERMRTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUJhc2VsaW5lOgorICAg
ICAgICAgICAgICAgICAgICBhbGlnbiA9IEJBU0VMSU5FOyBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlVGV4dEJvdHRvbToKKyAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBU
RVhUX0JPVFRPTTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVRleHRUb3A6
CisgICAgICAgICAgICAgICAgICAgIGFsaWduID0gVEVYVF9UT1A7IGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVTdWI6CisgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1VC
OyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU3VwZXI6CisgICAgICAgICAg
ICAgICAgICAgIGFsaWduID0gU1VQRVI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVXZWJraXRCYXNlbGluZU1pZGRsZToKKyAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBC
QVNFTElORV9NSURETEU7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBtX3N0eWxlLT5z
ZXRWZXJ0aWNhbEFsaWduKGFsaWduKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgp
OworICAgICAgICAgIExlbmd0aCBsOworICAgICAgICAgIGlmIChDU1NQcmltaXRpdmVWYWx1ZTo6
aXNVbml0VHlwZUxlbmd0aCh0eXBlKSkKKyAgICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZl
VmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0
eWxlLCB6b29tRmFjdG9yKSwgRml4ZWQpOworICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQorICAgICAgICAgICAgbCA9IExlbmd0aChw
cmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisKKyAgICAgICAgICBt
X3N0eWxlLT5zZXRWZXJ0aWNhbEFsaWduKExFTkdUSCk7CisgICAgICAgICAgbV9zdHlsZS0+c2V0
VmVydGljYWxBbGlnbkxlbmd0aChsKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAg
ICBjYXNlIENTU1Byb3BlcnR5Rm9udFNpemU6CisgICAgeworICAgICAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZSgwKTsKKyAgICAgICAgZmxvYXQgb2xkU2l6
ZSA9IDA7CisgICAgICAgIGZsb2F0IHNpemUgPSAwOworICAgICAgICAKKyAgICAgICAgYm9vbCBw
YXJlbnRJc0Fic29sdXRlU2l6ZSA9IGZhbHNlOworICAgICAgICBpZiAobV9wYXJlbnROb2RlKSB7
CisgICAgICAgICAgICBvbGRTaXplID0gbV9wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCku
c3BlY2lmaWVkU2l6ZSgpOworICAgICAgICAgICAgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBtX3Bh
cmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5pc0Fic29sdXRlU2l6ZSgpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGlzSW5oZXJpdCkgeworICAgICAgICAgICAgc2l6ZSA9IG9sZFNpemU7
CisgICAgICAgICAgICBpZiAobV9wYXJlbnROb2RlKQorICAgICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShtX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5r
ZXl3b3JkU2l6ZSgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0luaXRpYWwpIHsKKyAgICAgICAg
ICAgIHNpemUgPSBmb250U2l6ZUZvcktleXdvcmQobV9jaGVja2VyLm1fZG9jdW1lbnQsIENTU1Zh
bHVlTWVkaXVtLCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKKyAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENT
U1ZhbHVlWHhTbWFsbCArIDEpOworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpKSB7CisgICAgICAgICAgICAvLyBLZXl3b3JkcyBhcmUgYmVpbmcgdXNlZC4KKyAg
ICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlWHhTbWFsbDoKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlWFNtYWxsOgorICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKKyAgICAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlTWVkaXVtOgorICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVMYXJnZToKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlWExhcmdlOgorICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVYeExhcmdlOgorICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVXZWJraXRYeHhMYXJnZToKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGZvbnRTaXplRm9y
S2V5d29yZChtX2NoZWNrZXIubV9kb2N1bWVudCwgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCks
IGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpOworICAgICAgICAgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlcjoKKyAgICAgICAgICAgICAgICAg
ICAgc2l6ZSA9IGxhcmdlckZvbnRTaXplKG9sZFNpemUsIG1fc3R5bGUtPmh0bWxIYWNrcygpKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZVNtYWxsZXI6CisgICAgICAgICAgICAgICAgICAgIHNpemUgPSBzbWFsbGVyRm9udFNpemUob2xk
U2l6ZSwgbV9zdHlsZS0+aHRtbEhhY2tzKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRl
U2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVMYXJnZXIgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVTbWFsbGVyKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmlt
aXRpdmVUeXBlKCk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNp
emUocGFyZW50SXNBYnNvbHV0ZVNpemUgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAodHlwZSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRB
R0UgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyAmJiAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0VYUyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkVNUykpOworICAgICAgICAgICAgaWYgKENT
U1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5cGUpKQorICAgICAgICAgICAgICAg
IHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEZsb2F0KG1fcGFyZW50U3R5bGUs
IG1fcm9vdEVsZW1lbnRTdHlsZSwgdHJ1ZSk7CisgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKKyAgICAgICAgICAgICAgICBzaXpl
ID0gKHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkgKiBvbGRTaXplKSAvIDEwMC4wZjsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoc2l6ZSA8IDApCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2V0
Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAgICAgICAgaWYgKG1fc3R5bGUtPnNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKQorICAgICAgICAgICAgbV9mb250RGly
dHkgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBDU1NQcm9wZXJ0
eVpJbmRleDogeworICAgICAgICBpZiAoaXNJbmhlcml0KSB7CisgICAgICAgICAgICBpZiAobV9w
YXJlbnRTdHlsZS0+aGFzQXV0b1pJbmRleCgpKQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dEhhc0F1dG9aSW5kZXgoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRaSW5kZXgobV9wYXJlbnRTdHlsZS0+ekluZGV4KCkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pIHsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldEhhc0F1
dG9aSW5kZXgoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gRklYTUU6IFNob3VsZCBjbGFtcCBhbGwgc29ydHMgb2Ygb3RoZXIgaW50ZWdlciBw
cm9wZXJ0aWVzIHRvby4KKyAgICAgICAgY29uc3QgZG91YmxlIG1pbkludEFzRG91YmxlID0gSU5U
X01JTjsKKyAgICAgICAgY29uc3QgZG91YmxlIG1heEludEFzRG91YmxlID0gSU5UX01BWDsKKyAg
ICAgICAgbV9zdHlsZS0+c2V0WkluZGV4KHN0YXRpY19jYXN0PGludD4obWF4KG1pbkludEFzRG91
YmxlLCBtaW4ocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIG1heEludEFzRG91Ymxl
KSkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2lkb3dz
OgorICAgIHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwod2lkb3dzLCBXaWRv
d3MpCisgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUgfHwgcHJpbWl0aXZlVmFsdWUtPnByaW1p
dGl2ZVR5cGUoKSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgbV9zdHlsZS0+c2V0V2lkb3dzKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
bnRWYWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBD
U1NQcm9wZXJ0eU9ycGhhbnM6CisgICAgeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTChvcnBoYW5zLCBPcnBoYW5zKQorICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlIHx8IHBy
aW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3R5bGUtPnNldE9ycGhhbnMo
cHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOworICAgICAgICByZXR1cm47CisgICAgfSAg
ICAgICAgCisKKy8vIGxlbmd0aCwgcGVyY2VudCwgbnVtYmVyCisgICAgY2FzZSBDU1NQcm9wZXJ0
eUxpbmVIZWlnaHQ6CisgICAgeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChs
aW5lSGVpZ2h0LCBMaW5lSGVpZ2h0KQorICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBMZW5ndGggbGluZUhlaWdodDsKKyAgICAgICAgaW50
IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3JtYWwpCisgICAgICAgICAgICBs
aW5lSGVpZ2h0ID0gTGVuZ3RoKC0xMDAuMCwgUGVyY2VudCk7CisgICAgICAgIGVsc2UgaWYgKENT
U1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5cGUpKSB7CisgICAgICAgICAgICBk
b3VibGUgbXVsdGlwbGllciA9IHpvb21GYWN0b3I7CisgICAgICAgICAgICBpZiAobV9zdHlsZS0+
dGV4dFNpemVBZGp1c3QoKSkgeworICAgICAgICAgICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcg
PSBtX2NoZWNrZXIubV9kb2N1bWVudC0+dmlldygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICh2aWV3LT5zaG91bGRBcHBseVRleHRab29tKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBt
dWx0aXBsaWVyICo9IHZpZXctPnRleHRab29tRmFjdG9yKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aChwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5
bGUsICBtdWx0aXBsaWVyKSwgRml4ZWQpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQorICAgICAgICAgICAgbGluZUhlaWdodCA9
IExlbmd0aCgobV9zdHlsZS0+Zm9udFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1
ZSgpKSAvIDEwMCwgRml4ZWQpOworICAgICAgICBlbHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKQorICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aChwcmlt
aXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSAqIDEwMC4wLCBQZXJjZW50KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0
KGxpbmVIZWlnaHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisvLyBzdHJpbmcKKyAgICBj
YXNlIENTU1Byb3BlcnR5VGV4dEFsaWduOgorICAgIHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRf
QU5EX0lOSVRJQUwodGV4dEFsaWduLCBUZXh0QWxpZ24pCisgICAgICAgIGlmICghcHJpbWl0aXZl
VmFsdWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGludCBpZCA9IHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpOworICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVTdGFydCkKKyAgICAg
ICAgICAgIG1fc3R5bGUtPnNldFRleHRBbGlnbihtX3N0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIg
PyBMRUZUIDogUklHSFQpOworICAgICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZUVuZCkKKyAg
ICAgICAgICAgIG1fc3R5bGUtPnNldFRleHRBbGlnbihtX3N0eWxlLT5kaXJlY3Rpb24oKSA9PSBM
VFIgPyBSSUdIVCA6IExFRlQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRUZXh0QWxpZ24oKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
Ly8gcmVjdAorICAgIGNhc2UgQ1NTUHJvcGVydHlDbGlwOgorICAgIHsKKyAgICAgICAgTGVuZ3Ro
IHRvcDsKKyAgICAgICAgTGVuZ3RoIHJpZ2h0OworICAgICAgICBMZW5ndGggYm90dG9tOworICAg
ICAgICBMZW5ndGggbGVmdDsKKyAgICAgICAgYm9vbCBoYXNDbGlwID0gdHJ1ZTsKKyAgICAgICAg
aWYgKGlzSW5oZXJpdCkgeworICAgICAgICAgICAgaWYgKG1fcGFyZW50U3R5bGUtPmhhc0NsaXAo
KSkgeworICAgICAgICAgICAgICAgIHRvcCA9IG1fcGFyZW50U3R5bGUtPmNsaXBUb3AoKTsKKyAg
ICAgICAgICAgICAgICByaWdodCA9IG1fcGFyZW50U3R5bGUtPmNsaXBSaWdodCgpOworICAgICAg
ICAgICAgICAgIGJvdHRvbSA9IG1fcGFyZW50U3R5bGUtPmNsaXBCb3R0b20oKTsKKyAgICAgICAg
ICAgICAgICBsZWZ0ID0gbV9wYXJlbnRTdHlsZS0+Y2xpcExlZnQoKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgaGFzQ2xpcCA9IGZhbHNlOworICAgICAgICAgICAgICAg
IHRvcCA9IHJpZ2h0ID0gYm90dG9tID0gbGVmdCA9IExlbmd0aCgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgeworICAgICAgICAgICAgaGFzQ2xpcCA9IGZh
bHNlOworICAgICAgICAgICAgdG9wID0gcmlnaHQgPSBib3R0b20gPSBsZWZ0ID0gTGVuZ3RoKCk7
CisgICAgICAgIH0gZWxzZSBpZiAoIXByaW1pdGl2ZVZhbHVlKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JFQ1QpIHsKKyAgICAgICAgICAgIFJlY3QqIHJlY3Qg
PSBwcmltaXRpdmVWYWx1ZS0+Z2V0UmVjdFZhbHVlKCk7CisgICAgICAgICAgICBpZiAoIXJlY3Qp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgdG9wID0gY29udmVydFRvTGVu
Z3RoKHJlY3QtPnRvcCgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3Ip
OworICAgICAgICAgICAgcmlnaHQgPSBjb252ZXJ0VG9MZW5ndGgocmVjdC0+cmlnaHQoKSwgc3R5
bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGJvdHRv
bSA9IGNvbnZlcnRUb0xlbmd0aChyZWN0LT5ib3R0b20oKSwgc3R5bGUoKSwgbV9yb290RWxlbWVu
dFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgo
cmVjdC0+bGVmdCgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwor
ICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpICE9IENTU1ZhbHVl
QXV0bykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fc3R5bGUt
PnNldENsaXAodG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKKyAgICAgICAgbV9zdHlsZS0+c2V0
SGFzQ2xpcChoYXNDbGlwKTsKKyAgICAKKyAgICAgICAgLy8gcmVjdCwgaWRlbnQKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworLy8gbGlzdHMKKyAgICBjYXNlIENTU1Byb3BlcnR5Q29udGVudDoK
KyAgICAgICAgLy8gbGlzdCBvZiBzdHJpbmcsIHVyaSwgY291bnRlciwgYXR0ciwgaQorICAgIHsK
KyAgICAgICAgLy8gRklYTUU6IEluIENTUzMsIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gaW5oZXJp
dCBjb250ZW50LiAgSW4gQ1NTMiBpdCBpcyBub3QuICBUaGlzCisgICAgICAgIC8vIG5vdGUgaXMg
YSByZW1pbmRlciB0aGF0IGV2ZW50dWFsbHkgImluaGVyaXQiIG5lZWRzIHRvIGJlIHN1cHBvcnRl
ZC4KKworICAgICAgICBpZiAoaXNJbml0aWFsKSB7CisgICAgICAgICAgICBtX3N0eWxlLT5jbGVh
ckNvbnRlbnQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2
YWx1ZSk7CisgICAgICAgIGludCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKKworICAgICAgICBib29s
IGRpZFNldCA9IGZhbHNlOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7
CisgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soaSk7CisgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsK
KyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KHN0YXRpY19jYXN0PENTU0ltYWdl
R2VuZXJhdG9yVmFsdWUqPihpdGVtKS0+Z2VuZXJhdGVkSW1hZ2UoKSwgZGlkU2V0KTsKKyAgICAg
ICAgICAgICAgICBkaWRTZXQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHZhbCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CisgICAgICAgICAg
ICBzd2l0Y2ggKHZhbC0+cHJpbWl0aXZlVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORzoKKyAgICAgICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0Q29udGVudCh2YWwtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBkaWRTZXQpOworICAg
ICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQVRUUjogewor
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ2FuIGEgbmFtZXNwYWNlIGJlIHNwZWNpZmll
ZCBmb3IgYW4gYXR0cihmb28pPworICAgICAgICAgICAgICAgICAgICBpZiAobV9zdHlsZS0+c3R5
bGVUeXBlKCkgPT0gTk9QU0VVRE8pCisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9wYXJlbnRTdHlsZS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICAgICAgICAgIFF1
YWxpZmllZE5hbWUgYXR0cihudWxsQXRvbSwgdmFsLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwg
bnVsbEF0b20pOworICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KG1fZWxl
bWVudC0+Z2V0QXR0cmlidXRlKGF0dHIpLmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgdGhl
IGZhY3QgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGFmZmVjdHMgdGhlIHN0eWxlCisgICAgICAg
ICAgICAgICAgICAgIG1fc2VsZWN0b3JBdHRycy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSTogeworICAgICAgICAgICAg
ICAgICAgICBDU1NJbWFnZVZhbHVlKiBpbWFnZSA9IHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUq
Pih2YWwpOworICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGltYWdlLT5j
YWNoZWRJbWFnZShtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRvY0xvYWRlcigpKSwgZGlkU2V0KTsK
KyAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19DT1VOVEVSOiB7CisgICAgICAgICAgICAgICAgICAgIENvdW50ZXIqIGNv
dW50ZXJWYWx1ZSA9IHZhbC0+Z2V0Q291bnRlclZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAg
IENvdW50ZXJDb250ZW50KiBjb3VudGVyID0gbmV3IENvdW50ZXJDb250ZW50KGNvdW50ZXJWYWx1
ZS0+aWRlbnRpZmllcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgKEVMaXN0U3R5bGVUeXBl
KWNvdW50ZXJWYWx1ZS0+bGlzdFN0eWxlTnVtYmVyKCksIGNvdW50ZXJWYWx1ZS0+c2VwYXJhdG9y
KCkpOworICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvdW50ZXIsIGRp
ZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghZGlkU2V0KQorICAg
ICAgICAgICAgbV9zdHlsZS0+Y2xlYXJDb250ZW50KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBjYXNlIENTU1Byb3BlcnR5Q291bnRlckluY3JlbWVudDoKKyAgICAgICAgYXBwbHlD
b3VudGVyTGlzdChzdHlsZSgpLCB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSA/IHN0YXRpY19jYXN0PENT
U1ZhbHVlTGlzdCo+KHZhbHVlKSA6IDAsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQ1NTUHJvcGVydHlDb3VudGVyUmVzZXQ6CisgICAgICAgIGFwcGx5Q291bnRlckxpc3Qoc3R5
bGUoKSwgdmFsdWUtPmlzVmFsdWVMaXN0KCkgPyBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2
YWx1ZSkgOiAwLCB0cnVlKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBDU1NQcm9wZXJ0
eUZvbnRGYW1pbHk6IHsKKyAgICAgICAgLy8gbGlzdCBvZiBzdHJpbmdzIGFuZCBpZHMKKyAgICAg
ICAgaWYgKGlzSW5oZXJpdCkgeworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZv
bnREZXNjcmlwdGlvbiA9IG1fcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHko
cGFyZW50Rm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSk7CisgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0RmFtaWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgp
KTsKKyAgICAgICAgICAgIGlmIChtX3N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKSkKKyAgICAgICAgICAgICAgICBtX2ZvbnREaXJ0eSA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7CisgICAgICAgICAgICBG
b250RGVzY3JpcHRpb24gaW5pdGlhbERlc2MgPSBGb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAg
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3Jp
cHRpb24oKTsKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzaXplIHRvIGFj
Y291bnQgZm9yIHRoZSBnZW5lcmljIGZhbWlseSBjaGFuZ2UgZnJvbSBtb25vc3BhY2UKKyAgICAg
ICAgICAgIC8vIHRvIG5vbi1tb25vc3BhY2UuCisgICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0
aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUo
KSkKKyAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXpl
Rm9yS2V5d29yZChtX2NoZWNrZXIubV9kb2N1bWVudCwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERl
c2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOworICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoaW5pdGlhbERlc2MuZ2VuZXJpY0ZhbWlseSgpKTsK
KyAgICAgICAgICAgIGlmICghaW5pdGlhbERlc2MuZmlyc3RGYW1pbHkoKS5mYW1pbHlJc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShpbml0aWFsRGVz
Yy5maXJzdEZhbWlseSgpKTsKKyAgICAgICAgICAgIGlmIChtX3N0eWxlLT5zZXRGb250RGVzY3Jp
cHRpb24oZm9udERlc2NyaXB0aW9uKSkKKyAgICAgICAgICAgICAgICBtX2ZvbnREaXJ0eSA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
ICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEZv
bnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24o
KTsKKyAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0
Kj4odmFsdWUpOworICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7CisgICAgICAgIEZv
bnRGYW1pbHkmIGZpcnN0RmFtaWx5ID0gZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7Cisg
ICAgICAgIEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkgPSAwOworICAgICAgICAKKyAgICAgICAgLy8g
QmVmb3JlIG1hcHBpbmcgaW4gYSBuZXcgZm9udC1mYW1pbHkgcHJvcGVydHksIHdlIHNob3VsZCBy
ZXNldCB0aGUgZ2VuZXJpYyBmYW1pbHkuCisgICAgICAgIGJvb2wgb2xkRmFtaWx5VXNlZEZpeGVk
RGVmYXVsdFNpemUgPSBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpOworICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5v
RmFtaWx5KTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAg
ICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7
CisgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWwgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOworICAgICAgICAgICAgQXRvbWljU3Ry
aW5nIGZhY2U7CisgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIubV9k
b2N1bWVudC0+c2V0dGluZ3MoKTsKKyAgICAgICAgICAgIGlmICh2YWwtPnByaW1pdGl2ZVR5cGUo
KSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKKyAgICAgICAgICAgICAgICBmYWNl
ID0gc3RhdGljX2Nhc3Q8Rm9udEZhbWlseVZhbHVlKj4odmFsKS0+ZmFtaWx5TmFtZSgpOworICAg
ICAgICAgICAgZWxzZSBpZiAodmFsLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19JREVOVCAmJiBzZXR0aW5ncykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAodmFs
LT5nZXRJZGVudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRC
b2R5OgorICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSA9IHNldHRpbmdzLT5zdGFuZGFyZEZv
bnRGYW1pbHkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlU2VyaWY6CisgICAgICAgICAgICAgICAgICAgICAgICBmYWNl
ID0gIi13ZWJraXQtc2VyaWYiOworICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZVNhbnNTZXJpZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSAiLXdlYmtpdC1z
YW5zLXNlcmlmIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRH
ZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
Q3Vyc2l2ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSAiLXdlYmtpdC1jdXJzaXZl
IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFt
aWx5KEZvbnREZXNjcmlwdGlvbjo6Q3Vyc2l2ZUZhbWlseSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhbnRhc3k6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gIi13ZWJraXQtZmFudGFzeSI7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVz
Y3JpcHRpb246OkZhbnRhc3lGYW1pbHkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVNb25vc3BhY2U6CisgICAgICAgICAg
ICAgICAgICAgICAgICBmYWNlID0gIi13ZWJraXQtbW9ub3NwYWNlIjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlv
bjo6TW9ub3NwYWNlRmFtaWx5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFmYWNlLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGlmICghY3VyckZhbWlseSkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBGaWxsaW5nIGluIHRoZSBmaXJzdCBmYW1pbHkuCisgICAgICAgICAgICAg
ICAgICAgIGZpcnN0RmFtaWx5LnNldEZhbWlseShmYWNlKTsKKyAgICAgICAgICAgICAgICAgICAg
Zmlyc3RGYW1pbHkuYXBwZW5kRmFtaWx5KDApOyAvLyBSZW1vdmUgYW55IGluaGVyaXRlZCBmYW1p
bHktZmFsbGJhY2sgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgY3VyckZhbWlseSA9ICZmaXJz
dEZhbWlseTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBS
ZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gbmV3RmFtaWx5ID0gU2hhcmVkRm9udEZhbWlseTo6Y3Jl
YXRlKCk7CisgICAgICAgICAgICAgICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5KGZhY2UpOwor
ICAgICAgICAgICAgICAgICAgICBjdXJyRmFtaWx5LT5hcHBlbmRGYW1pbHkobmV3RmFtaWx5KTsK
KyAgICAgICAgICAgICAgICAgICAgY3VyckZhbWlseSA9IG5ld0ZhbWlseS5nZXQoKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBj
YW4ndCBjYWxsIHVzZUZpeGVkRGVmYXVsdFNpemUoKSB1bnRpbCBhbGwgbmV3IGZvbnQgZmFtaWxp
ZXMgaGF2ZSBiZWVuIGFkZGVkCisgICAgICAgIC8vIElmIGN1cnJGYW1pbHkgaXMgbm9uLXplcm8g
dGhlbiB3ZSBzZXQgYXQgbGVhc3Qgb25lIGZhbWlseSBvbiB0aGlzIGRlc2NyaXB0aW9uLgorICAg
ICAgICBpZiAoY3VyckZhbWlseSkgeworICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5r
ZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkgIT0g
b2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpCisgICAgICAgICAgICAgICAgc2V0Rm9udFNp
emUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQobV9jaGVja2VyLm1fZG9jdW1l
bnQsIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwg
IW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7CisKKyAgICAgICAgICAgIGlmIChtX3N0
eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSkKKyAgICAgICAgICAgICAg
ICBtX2ZvbnREaXJ0eSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb246IHsKKyAgICAgICAgLy8gbGlzdCBv
ZiBpZGVudAorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0ZXh0RGVjb3JhdGlv
biwgVGV4dERlY29yYXRpb24pCisgICAgICAgIGludCB0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxU
ZXh0RGVjb3JhdGlvbigpOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7CisgICAgICAgICAgICAvLyBkbyBu
b3RoaW5nCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVl
TGlzdCgpKSByZXR1cm47CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QgKmxpc3QgPSBzdGF0aWNf
Y2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CisgICAgICAgICAgICBpbnQgbGVuID0gbGlzdC0+
bGVuZ3RoKCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIENTU1ZhbHVlICppdGVtID0gbGlzdC0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0
aXZlVmFsdWUoKSkgY29udGludWU7CisgICAgICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOworICAgICAgICAgICAgICAgIHN3
aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBDU1NWYWx1ZU5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gVEROT05FOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVVuZGVybGluZToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHQgfD0gVU5ERVJMSU5FOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZU92ZXJsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgdCB8
PSBPVkVSTElORTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMaW5l
VGhyb3VnaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgfD0gTElORV9USFJPVUdIOyBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUJsaW5rOgorICAgICAgICAgICAg
ICAgICAgICAgICAgdCB8PSBCTElOSzsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbV9zdHlsZS0+c2V0VGV4dERlY29y
YXRpb24odCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIENTU1Byb3BlcnR5
Wm9vbToKKyAgICB7CisgICAgICAgIC8vIFJlc2V0IHRoZSB6b29tIGluIGVmZmVjdCBiZWZvcmUg
d2UgZG8gYW55dGhpbmcuICBUaGlzIGFsbG93cyB0aGUgc2V0Wm9vbSBtZXRob2QgdG8gYWNjdXJh
dGVseSBjb21wdXRlIGEgbmV3CisgICAgICAgIC8vIHpvb20gaW4gZWZmZWN0LgorICAgICAgICBt
X3N0eWxlLT5zZXRFZmZlY3RpdmVab29tKG1fcGFyZW50U3R5bGUgPyBtX3BhcmVudFN0eWxlLT5l
ZmZlY3RpdmVab29tKCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAgIAor
ICAgICAgICAvLyBOb3cgd2UgY2FuIGhhbmRsZSBpbmhlcml0IGFuZCBpbml0aWFsLgorICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh6b29tLCBab29tKQorICAgICAgICAKKyAgICAg
ICAgLy8gSGFuZGxlIG5vcm1hbC9yZXNldCwgbnVtYmVycyBhbmQgcGVyY2VudGFnZXMuCisgICAg
ICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKQorICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAg
ICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlUmVzZXQp
IHsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldEVmZmVjdGl2ZVpvb20oUmVuZGVyU3R5bGU6Omlu
aXRpYWxab29tKCkpOworICAgICAgICAgICAgbV9zdHlsZS0+c2V0Wm9vbShSZW5kZXJTdHlsZTo6
aW5pdGlhbFpvb20oKSk7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVEb2N1bWVudCkgeworICAgICAgICAgICAgZmxvYXQgZG9jWm9vbSA9
IG1fY2hlY2tlci5tX2RvY3VtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT56b29tKCk7CisgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRFZmZlY3RpdmVab29tKGRvY1pvb20pOworICAgICAgICAgICAg
bV9zdHlsZS0+c2V0Wm9vbShkb2Nab29tKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkgeworICAgICAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpCisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0
Wm9vbShwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpIC8gMTAwLjBmKTsKKyAgICAgICAg
fSBlbHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSB7CisgICAg
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkKKyAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRab29tKHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2ZvbnREaXJ0eSA9IHRydWU7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisvLyBzaG9ydGhhbmQgcHJvcGVydGllcworICAgIGNhc2UgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kOgorICAgICAgICBpZiAoaXNJbml0aWFsKSB7CisgICAgICAgICAgICBt
X3N0eWxlLT5jbGVhckJhY2tncm91bmRMYXllcnMoKTsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNl
dEJhY2tncm91bmRDb2xvcihDb2xvcigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChp
c0luaGVyaXQpIHsKKyAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRCYWNrZ3JvdW5kTGF5ZXJz
KCptX3BhcmVudFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOworICAgICAgICAgICAgbV9zdHls
ZS0+c2V0QmFja2dyb3VuZENvbG9yKG1fcGFyZW50U3R5bGUtPmJhY2tncm91bmRDb2xvcigpKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2s6CisgICAgICAgIGlmIChpc0luaXRpYWwpCisgICAgICAgICAgICBtX3N0eWxlLT5jbGVhck1h
c2tMYXllcnMoKTsKKyAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQorICAgICAgICAgICAgbV9z
dHlsZS0+aW5oZXJpdE1hc2tMYXllcnMoKm1fcGFyZW50U3R5bGUtPm1hc2tMYXllcnMoKSk7Cisg
ICAgICAgIHJldHVybjsKKworICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXI6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlclN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJXaWR0aDoK
KyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQ29sb3I6CisgICAgICAgIGlmIChpZCA9PSBDU1NQ
cm9wZXJ0eUJvcmRlciB8fCBpZCA9PSBDU1NQcm9wZXJ0eUJvcmRlckNvbG9yKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoaXNJbmhlcml0KSB7CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Qm9yZGVyVG9wQ29sb3IobV9wYXJlbnRTdHlsZS0+Ym9yZGVyVG9wQ29sb3IoKS5pc1ZhbGlk
KCkgPyBtX3BhcmVudFN0eWxlLT5ib3JkZXJUb3BDb2xvcigpIDogbV9wYXJlbnRTdHlsZS0+Y29s
b3IoKSk7CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyQm90dG9tQ29sb3IobV9w
YXJlbnRTdHlsZS0+Ym9yZGVyQm90dG9tQ29sb3IoKS5pc1ZhbGlkKCkgPyBtX3BhcmVudFN0eWxl
LT5ib3JkZXJCb3R0b21Db2xvcigpIDogbV9wYXJlbnRTdHlsZS0+Y29sb3IoKSk7CisgICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyTGVmdENvbG9yKG1fcGFyZW50U3R5bGUtPmJvcmRl
ckxlZnRDb2xvcigpLmlzVmFsaWQoKSA/IG1fcGFyZW50U3R5bGUtPmJvcmRlckxlZnRDb2xvcigp
IDogbV9wYXJlbnRTdHlsZS0+Y29sb3IoKSk7CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0
Qm9yZGVyUmlnaHRDb2xvcihtX3BhcmVudFN0eWxlLT5ib3JkZXJSaWdodENvbG9yKCkuaXNWYWxp
ZCgpID8gbV9wYXJlbnRTdHlsZS0+Ym9yZGVyUmlnaHRDb2xvcigpOiBtX3BhcmVudFN0eWxlLT5j
b2xvcigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGlzSW5pdGlhbCkg
eworICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclRvcENvbG9yKENvbG9yKCkpOyAv
LyBSZXNldCB0byBpbnZhbGlkIGNvbG9yIHNvIGN1cnJlbnRDb2xvciBpcyB1c2VkIGluc3RlYWQu
CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyQm90dG9tQ29sb3IoQ29sb3IoKSk7
CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyTGVmdENvbG9yKENvbG9yKCkpOwor
ICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclJpZ2h0Q29sb3IoQ29sb3IoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5Qm9y
ZGVyIHx8IGlkID09IENTU1Byb3BlcnR5Qm9yZGVyU3R5bGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChpc0luaGVyaXQpIHsKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJU
b3BTdHlsZShtX3BhcmVudFN0eWxlLT5ib3JkZXJUb3BTdHlsZSgpKTsKKyAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRCb3JkZXJCb3R0b21TdHlsZShtX3BhcmVudFN0eWxlLT5ib3JkZXJCb3R0
b21TdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJMZWZ0U3R5bGUo
bV9wYXJlbnRTdHlsZS0+Ym9yZGVyTGVmdFN0eWxlKCkpOworICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldEJvcmRlclJpZ2h0U3R5bGUobV9wYXJlbnRTdHlsZS0+Ym9yZGVyUmlnaHRTdHlsZSgp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGlzSW5pdGlhbCkgeworICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclRvcFN0eWxlKFJlbmRlclN0eWxlOjppbml0
aWFsQm9yZGVyU3R5bGUoKSk7CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyQm90
dG9tU3R5bGUoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZSgpKTsKKyAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRCb3JkZXJMZWZ0U3R5bGUoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3Jk
ZXJTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJSaWdodFN0eWxl
KFJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGUoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5Qm9yZGVyIHx8IGlkID09IENTU1By
b3BlcnR5Qm9yZGVyV2lkdGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpc0luaGVyaXQp
IHsKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJUb3BXaWR0aChtX3BhcmVudFN0
eWxlLT5ib3JkZXJUb3BXaWR0aCgpKTsKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3Jk
ZXJCb3R0b21XaWR0aChtX3BhcmVudFN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKKyAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJMZWZ0V2lkdGgobV9wYXJlbnRTdHlsZS0+Ym9y
ZGVyTGVmdFdpZHRoKCkpOworICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclJpZ2h0
V2lkdGgobV9wYXJlbnRTdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgaWYgKGlzSW5pdGlhbCkgeworICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldEJvcmRlclRvcFdpZHRoKFJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyV2lkdGgoKSk7
CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyQm90dG9tV2lkdGgoUmVuZGVyU3R5
bGU6OmluaXRpYWxCb3JkZXJXaWR0aCgpKTsKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRC
b3JkZXJMZWZ0V2lkdGgoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJXaWR0aCgpKTsKKyAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJSaWdodFdpZHRoKFJlbmRlclN0eWxlOjppbml0
aWFsQm9yZGVyV2lkdGgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3A6CisgICAgICAgIGlmIChpc0luaGVy
aXQpIHsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclRvcENvbG9yKG1fcGFyZW50U3R5
bGUtPmJvcmRlclRvcENvbG9yKCkuaXNWYWxpZCgpID8gbV9wYXJlbnRTdHlsZS0+Ym9yZGVyVG9w
Q29sb3IoKSA6IG1fcGFyZW50U3R5bGUtPmNvbG9yKCkpOworICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Qm9yZGVyVG9wU3R5bGUobV9wYXJlbnRTdHlsZS0+Ym9yZGVyVG9wU3R5bGUoKSk7CisgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJUb3BXaWR0aChtX3BhcmVudFN0eWxlLT5ib3JkZXJU
b3BXaWR0aCgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpc0luaXRpYWwpCisgICAg
ICAgICAgICBtX3N0eWxlLT5yZXNldEJvcmRlclRvcCgpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0OgorICAgICAgICBpZiAoaXNJbmhlcml0KSB7Cisg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJSaWdodENvbG9yKG1fcGFyZW50U3R5bGUtPmJv
cmRlclJpZ2h0Q29sb3IoKS5pc1ZhbGlkKCkgPyBtX3BhcmVudFN0eWxlLT5ib3JkZXJSaWdodENv
bG9yKCkgOiBtX3BhcmVudFN0eWxlLT5jb2xvcigpKTsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNl
dEJvcmRlclJpZ2h0U3R5bGUobV9wYXJlbnRTdHlsZS0+Ym9yZGVyUmlnaHRTdHlsZSgpKTsKKyAg
ICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclJpZ2h0V2lkdGgobV9wYXJlbnRTdHlsZS0+Ym9y
ZGVyUmlnaHRXaWR0aCgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpc0luaXRpYWwp
CisgICAgICAgICAgICBtX3N0eWxlLT5yZXNldEJvcmRlclJpZ2h0KCk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tOgorICAgICAgICBpZiAoaXNJbmhl
cml0KSB7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJCb3R0b21Db2xvcihtX3BhcmVu
dFN0eWxlLT5ib3JkZXJCb3R0b21Db2xvcigpLmlzVmFsaWQoKSA/IG1fcGFyZW50U3R5bGUtPmJv
cmRlckJvdHRvbUNvbG9yKCkgOiBtX3BhcmVudFN0eWxlLT5jb2xvcigpKTsKKyAgICAgICAgICAg
IG1fc3R5bGUtPnNldEJvcmRlckJvdHRvbVN0eWxlKG1fcGFyZW50U3R5bGUtPmJvcmRlckJvdHRv
bVN0eWxlKCkpOworICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyQm90dG9tV2lkdGgobV9w
YXJlbnRTdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAoaXNJbml0aWFsKQorICAgICAgICAgICAgbV9zdHlsZS0+cmVzZXRCb3JkZXJCb3R0b20o
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0OgorICAg
ICAgICBpZiAoaXNJbmhlcml0KSB7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJMZWZ0
Q29sb3IobV9wYXJlbnRTdHlsZS0+Ym9yZGVyTGVmdENvbG9yKCkuaXNWYWxpZCgpID8gbV9wYXJl
bnRTdHlsZS0+Ym9yZGVyTGVmdENvbG9yKCkgOiBtX3BhcmVudFN0eWxlLT5jb2xvcigpKTsKKyAg
ICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlckxlZnRTdHlsZShtX3BhcmVudFN0eWxlLT5ib3Jk
ZXJMZWZ0U3R5bGUoKSk7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJMZWZ0V2lkdGgo
bV9wYXJlbnRTdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKGlzSW5pdGlhbCkKKyAgICAgICAgICAgIG1fc3R5bGUtPnJlc2V0Qm9yZGVyTGVmdCgp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbjoKKyAgICAgICAg
aWYgKGlzSW5oZXJpdCkgeworICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFyZ2luVG9wKG1fcGFy
ZW50U3R5bGUtPm1hcmdpblRvcCgpKTsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcmdpbkJv
dHRvbShtX3BhcmVudFN0eWxlLT5tYXJnaW5Cb3R0b20oKSk7CisgICAgICAgICAgICBtX3N0eWxl
LT5zZXRNYXJnaW5MZWZ0KG1fcGFyZW50U3R5bGUtPm1hcmdpbkxlZnQoKSk7CisgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRNYXJnaW5SaWdodChtX3BhcmVudFN0eWxlLT5tYXJnaW5SaWdodCgpKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpc0luaXRpYWwpCisgICAgICAgICAgICBtX3N0
eWxlLT5yZXNldE1hcmdpbigpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVBhZGRpbmc6CisgICAgICAgIGlmIChpc0luaGVyaXQpIHsKKyAgICAgICAgICAgIG1fc3R5bGUt
PnNldFBhZGRpbmdUb3AobV9wYXJlbnRTdHlsZS0+cGFkZGluZ1RvcCgpKTsKKyAgICAgICAgICAg
IG1fc3R5bGUtPnNldFBhZGRpbmdCb3R0b20obV9wYXJlbnRTdHlsZS0+cGFkZGluZ0JvdHRvbSgp
KTsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldFBhZGRpbmdMZWZ0KG1fcGFyZW50U3R5bGUtPnBh
ZGRpbmdMZWZ0KCkpOworICAgICAgICAgICAgbV9zdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KG1fcGFy
ZW50U3R5bGUtPnBhZGRpbmdSaWdodCgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChp
c0luaXRpYWwpCisgICAgICAgICAgICBtX3N0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlGb250OgorICAgICAgICBpZiAoaXNJbmhlcml0
KSB7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9wYXJl
bnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5l
SGVpZ2h0KG1fcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSk7CisgICAgICAgICAgICBtX2xpbmVI
ZWlnaHRWYWx1ZSA9IDA7CisgICAgICAgICAgICBpZiAobV9zdHlsZS0+c2V0Rm9udERlc2NyaXB0
aW9uKGZvbnREZXNjcmlwdGlvbikpCisgICAgICAgICAgICAgICAgbV9mb250RGlydHkgPSB0cnVl
OworICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgeworICAgICAgICAgICAgU2V0dGluZ3Mq
IHNldHRpbmdzID0gbV9jaGVja2VyLm1fZG9jdW1lbnQtPnNldHRpbmdzKCk7CisgICAgICAgICAg
ICBBU1NFUlQoc2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2luZyBzdHlsZSByZXNvbHV0aW9uLCB0
aGlzIGRvY3VtZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBmcmFtZSBhbmQgdGh1cyBoYXZlIHNl
dHRpbmdzCisgICAgICAgICAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CisgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlN0
YW5kYXJkRmFtaWx5KTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdN
b2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKKyAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChtX2NoZWNrZXIubV9kb2N1bWVudC0+cHJpbnRpbmco
KSk7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0YW5kYXJkRm9udEZhbWlseSA9
IG1fY2hlY2tlci5tX2RvY3VtZW50LT5zZXR0aW5ncygpLT5zdGFuZGFyZEZvbnRGYW1pbHkoKTsK
KyAgICAgICAgICAgIGlmICghc3RhbmRhcmRGb250RmFtaWx5LmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShzdGFuZGFy
ZEZvbnRGYW1pbHkpOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWls
eSgpLmFwcGVuZEZhbWlseSgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCAr
IDEpOworICAgICAgICAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZv
cktleXdvcmQobV9jaGVja2VyLm1fZG9jdW1lbnQsIENTU1ZhbHVlTWVkaXVtLCBmYWxzZSkpOwor
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExp
bmVIZWlnaHQoKSk7CisgICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgICAg
ICAgICBpZiAobV9zdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCisg
ICAgICAgICAgICAgICAgbV9mb250RGlydHkgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlKSB7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRl
clN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIG1fbGluZUhlaWdodFZh
bHVlID0gMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lz
dGVtRm9udChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSwgZm9udERlc2NyaXB0aW9uKTsKKyAK
KyAgICAgICAgICAgIC8vIERvdWJsZS1jaGVjayBhbmQgc2VlIGlmIHRoZSB0aGVtZSBkaWQgYW55
dGhpbmcuICBJZiBub3QsIGRvbid0IGJvdGhlciB1cGRhdGluZyB0aGUgZm9udC4KKyAgICAgICAg
ICAgIGlmIChmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSkgeworICAgICAgICAgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVuZGVyaW5nIG1vZGUgYW5kIHByaW50ZXIgZm9udCBzZXR0
aW5ncyBhcmUgdXBkYXRlZC4KKyAgICAgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBt
X2NoZWNrZXIubV9kb2N1bWVudC0+c2V0dGluZ3MoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
c2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2luZyBzdHlsZSByZXNvbHV0aW9uLCB0aGlzIGRvY3Vt
ZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBmcmFtZSBhbmQgdGh1cyBoYXZlIHNldHRpbmdzCisg
ICAgICAgICAgICAgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRp
bmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKKyAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0VXNlUHJpbnRlckZvbnQobV9jaGVja2VyLm1fZG9jdW1lbnQtPnByaW50aW5nKCkpOwor
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIHpvb20gZmFjdG9yLgor
ICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0
ZWRTaXplRnJvbVNwZWNpZmllZFNpemUobV9jaGVja2VyLm1fZG9jdW1lbnQsIG1fc3R5bGUuZ2V0
KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3Bl
Y2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9z
dHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCisgICAgICAgICAgICAg
ICAgICAgIG1fZm9udERpcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmICh2YWx1ZS0+aXNGb250VmFsdWUoKSkgeworICAgICAgICAgICAgRm9udFZhbHVlICpmb250
ID0gc3RhdGljX2Nhc3Q8Rm9udFZhbHVlKj4odmFsdWUpOworICAgICAgICAgICAgaWYgKCFmb250
LT5zdHlsZSB8fCAhZm9udC0+dmFyaWFudCB8fCAhZm9udC0+d2VpZ2h0IHx8CisgICAgICAgICAg
ICAgICAgICFmb250LT5zaXplIHx8ICFmb250LT5saW5lSGVpZ2h0IHx8ICFmb250LT5mYW1pbHkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUZvbnRTdHlsZSwgZm9udC0+c3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBmb250LT52YXJpYW50LmdldCgpKTsKKyAg
ICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBmb250LT53ZWln
aHQuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXpl
LCBmb250LT5zaXplLmdldCgpKTsKKworICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSBm
b250LT5saW5lSGVpZ2h0LmdldCgpOworCisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1By
b3BlcnR5Rm9udEZhbWlseSwgZm9udC0+ZmFtaWx5LmdldCgpKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGU6CisgICAg
ICAgIGlmIChpc0luaGVyaXQpIHsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldExpc3RTdHlsZVR5
cGUobV9wYXJlbnRTdHlsZS0+bGlzdFN0eWxlVHlwZSgpKTsKKyAgICAgICAgICAgIG1fc3R5bGUt
PnNldExpc3RTdHlsZUltYWdlKG1fcGFyZW50U3R5bGUtPmxpc3RTdHlsZUltYWdlKCkpOworICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0TGlzdFN0eWxlUG9zaXRpb24obV9wYXJlbnRTdHlsZS0+bGlz
dFN0eWxlUG9zaXRpb24oKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaXNJbml0aWFs
KSB7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRMaXN0U3R5bGVUeXBlKFJlbmRlclN0eWxlOjpp
bml0aWFsTGlzdFN0eWxlVHlwZSgpKTsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldExpc3RTdHls
ZUltYWdlKFJlbmRlclN0eWxlOjppbml0aWFsTGlzdFN0eWxlSW1hZ2UoKSk7CisgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRMaXN0U3R5bGVQb3NpdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbExpc3RT
dHlsZVBvc2l0aW9uKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENT
U1Byb3BlcnR5T3V0bGluZToKKyAgICAgICAgaWYgKGlzSW5oZXJpdCkgeworICAgICAgICAgICAg
bV9zdHlsZS0+c2V0T3V0bGluZVdpZHRoKG1fcGFyZW50U3R5bGUtPm91dGxpbmVXaWR0aCgpKTsK
KyAgICAgICAgICAgIG1fc3R5bGUtPnNldE91dGxpbmVDb2xvcihtX3BhcmVudFN0eWxlLT5vdXRs
aW5lQ29sb3IoKS5pc1ZhbGlkKCkgPyBtX3BhcmVudFN0eWxlLT5vdXRsaW5lQ29sb3IoKSA6IG1f
cGFyZW50U3R5bGUtPmNvbG9yKCkpOworICAgICAgICAgICAgbV9zdHlsZS0+c2V0T3V0bGluZVN0
eWxlKG1fcGFyZW50U3R5bGUtPm91dGxpbmVTdHlsZSgpKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmIChpc0luaXRpYWwpCisgICAgICAgICAgICBtX3N0eWxlLT5yZXNldE91dGxpbmUoKTsK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ1NTMyBQcm9wZXJ0aWVzCisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEFwcGVhcmFuY2U6IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwoYXBwZWFyYW5jZSwgQXBwZWFyYW5jZSkKKyAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9zdHlsZS0+c2V0QXBwZWFyYW5jZSgq
cHJpbWl0aXZlVmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCaW5kaW5nOiB7CisjaWYgRU5BQkxFKFhCTCkKKyAgICAgICAgaWYgKGlzSW5p
dGlhbCB8fCAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVOb25lKSkgeworICAgICAgICAgICAgbV9zdHlsZS0+ZGVsZXRlQmluZGluZ1VSSXMo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpc0lu
aGVyaXQpIHsKKyAgICAgICAgICAgIGlmIChtX3BhcmVudFN0eWxlLT5iaW5kaW5nVVJJcygpKQor
ICAgICAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRCaW5kaW5nVVJJcyhtX3BhcmVudFN0eWxl
LT5iaW5kaW5nVVJJcygpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3N0
eWxlLT5kZWxldGVCaW5kaW5nVVJJcygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgcmV0dXJuOworICAgICAgICBD
U1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Cisg
ICAgICAgIGJvb2wgZmlyc3RCaW5kaW5nID0gdHJ1ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBsaXN0LT5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICBDU1NWYWx1
ZSAqaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSAqdmFsID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihp
dGVtKTsKKyAgICAgICAgICAgIGlmICh2YWwtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1VSSSkgeworICAgICAgICAgICAgICAgIGlmIChmaXJzdEJpbmRpbmcpIHsK
KyAgICAgICAgICAgICAgICAgICAgZmlyc3RCaW5kaW5nID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIG1fc3R5bGUtPmRlbGV0ZUJpbmRpbmdVUklzKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIG1fc3R5bGUtPmFkZEJpbmRpbmdVUkkodmFsLT5nZXRTdHJpbmdWYWx1
ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2U6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZTogeworICAgICAgICBpZiAoaXNJbmhlcml0
KSB7CisgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5V2Via2l0Qm9y
ZGVySW1hZ2UsIGJvcmRlckltYWdlLCBCb3JkZXJJbWFnZSkKKyAgICAgICAgICAgIEhBTkRMRV9J
TkhFUklUX0NPTkQoQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2UsIG1hc2tCb3hJbWFnZSwg
TWFza0JveEltYWdlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKGlz
SW5pdGlhbCkgeworICAgICAgICAgICAgSEFORExFX0lOSVRJQUxfQ09ORF9XSVRIX1ZBTFVFKENT
U1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2UsIEJvcmRlckltYWdlLCBOaW5lUGllY2VJbWFnZSkK
KyAgICAgICAgICAgIEhBTkRMRV9JTklUSUFMX0NPTkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tCb3hJbWFnZSwgTWFza0JveEltYWdlLCBOaW5lUGllY2VJbWFnZSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlOwor
ICAgICAgICBtYXBOaW5lUGllY2VJbWFnZSh2YWx1ZSwgaW1hZ2UpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGlkID09IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2UpCisgICAgICAgICAgICBt
X3N0eWxlLT5zZXRCb3JkZXJJbWFnZShpbWFnZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fc3R5bGUtPnNldE1hc2tCb3hJbWFnZShpbWFnZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmFkaXVzOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJSYWRpdXM6CisgICAgICAgIGlmIChpc0luaGVyaXQpIHsKKyAgICAgICAg
ICAgIG1fc3R5bGUtPnNldEJvcmRlclRvcExlZnRSYWRpdXMobV9wYXJlbnRTdHlsZS0+Ym9yZGVy
VG9wTGVmdFJhZGl1cygpKTsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclRvcFJpZ2h0
UmFkaXVzKG1fcGFyZW50U3R5bGUtPmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkpOworICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0Qm9yZGVyQm90dG9tTGVmdFJhZGl1cyhtX3BhcmVudFN0eWxlLT5ib3Jk
ZXJCb3R0b21MZWZ0UmFkaXVzKCkpOworICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVyQm90
dG9tUmlnaHRSYWRpdXMobV9wYXJlbnRTdHlsZS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzSW5pdGlhbCkg
eworICAgICAgICAgICAgbV9zdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBGYWxsIHRocm91Z2gKKyAgICBjYXNlIENT
U1Byb3BlcnR5Qm9yZGVyVG9wTGVmdFJhZGl1czoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
VG9wUmlnaHRSYWRpdXM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUxlZnRSYWRp
dXM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiB7CisgICAg
ICAgIGlmIChpc0luaGVyaXQpIHsKKyAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NT
UHJvcGVydHlCb3JkZXJUb3BMZWZ0UmFkaXVzLCBib3JkZXJUb3BMZWZ0UmFkaXVzLCBCb3JkZXJU
b3BMZWZ0UmFkaXVzKQorICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQ09ORChDU1NQcm9wZXJ0
eUJvcmRlclRvcFJpZ2h0UmFkaXVzLCBib3JkZXJUb3BSaWdodFJhZGl1cywgQm9yZGVyVG9wUmln
aHRSYWRpdXMpCisgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9DT05EKENTU1Byb3BlcnR5Qm9y
ZGVyQm90dG9tTGVmdFJhZGl1cywgYm9yZGVyQm90dG9tTGVmdFJhZGl1cywgQm9yZGVyQm90dG9t
TGVmdFJhZGl1cykKKyAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTUHJvcGVydHlC
b3JkZXJCb3R0b21SaWdodFJhZGl1cywgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMsIEJvcmRlckJv
dHRvbVJpZ2h0UmFkaXVzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoaXNJbml0aWFsKSB7CisgICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9D
T05EX1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlCb3JkZXJUb3BMZWZ0UmFkaXVzLCBCb3JkZXJUb3BM
ZWZ0UmFkaXVzLCBCb3JkZXJSYWRpdXMpCisgICAgICAgICAgICBIQU5ETEVfSU5JVElBTF9DT05E
X1dJVEhfVkFMVUUoQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1cywgQm9yZGVyVG9wUmln
aHRSYWRpdXMsIEJvcmRlclJhZGl1cykKKyAgICAgICAgICAgIEhBTkRMRV9JTklUSUFMX0NPTkRf
V0lUSF9WQUxVRShDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUxlZnRSYWRpdXMsIEJvcmRlckJvdHRv
bUxlZnRSYWRpdXMsIEJvcmRlclJhZGl1cykKKyAgICAgICAgICAgIEhBTkRMRV9JTklUSUFMX0NP
TkRfV0lUSF9WQUxVRShDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCBCb3JkZXJC
b3R0b21SaWdodFJhZGl1cywgQm9yZGVyUmFkaXVzKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgp
OworICAgICAgICBpZiAoIXBhaXIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaW50
IHdpZHRoID0gcGFpci0+Zmlyc3QoKS0+Y29tcHV0ZUxlbmd0aEludChzdHlsZSgpLCBtX3Jvb3RF
bGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICBpbnQgaGVpZ2h0ID0gcGFpci0+c2Vj
b25kKCktPmNvbXB1dGVMZW5ndGhJbnQoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCAgem9v
bUZhY3Rvcik7CisgICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBpZiAod2lkdGggPT0gMCkKKyAgICAgICAgICAgIGhlaWdo
dCA9IDA7IC8vIE51bGwgb3V0IHRoZSBvdGhlciB2YWx1ZS4KKyAgICAgICAgZWxzZSBpZiAoaGVp
Z2h0ID09IDApCisgICAgICAgICAgICB3aWR0aCA9IDA7IC8vIE51bGwgb3V0IHRoZSBvdGhlciB2
YWx1ZS4KKworICAgICAgICBJbnRTaXplIHNpemUod2lkdGgsIGhlaWdodCk7CisgICAgICAgIHN3
aXRjaCAoaWQpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BMZWZ0UmFk
aXVzOgorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlclRvcExlZnRSYWRpdXMoc2l6
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyVG9wUmlnaHRSYWRpdXM6CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVy
VG9wUmlnaHRSYWRpdXMoc2l6ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1czoKKyAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVzKHNpemUpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0
UmFkaXVzOgorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlckJvdHRvbVJpZ2h0UmFk
aXVzKHNpemUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJSYWRpdXMoc2l6ZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0OgorICAgICAgICBIQU5ETEVfSU5IRVJJVF9B
TkRfSU5JVElBTChvdXRsaW5lT2Zmc2V0LCBPdXRsaW5lT2Zmc2V0KQorICAgICAgICBtX3N0eWxl
LT5zZXRPdXRsaW5lT2Zmc2V0KHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50KHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRSZW5kZXJpbmc6IHsKKyAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAg
ICBpZiAoaXNJbmhlcml0KSAKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRUZXh0UmVu
ZGVyaW5nTW9kZShtX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKS50ZXh0UmVuZGVyaW5n
TW9kZSgpKTsKKyAgICAgICAgZWxzZSBpZiAoaXNJbml0aWFsKQorICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldFRleHRSZW5kZXJpbmdNb2RlKEF1dG9UZXh0UmVuZGVyaW5nKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRUZXh0UmVuZGVyaW5n
TW9kZSgqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICB9CisgICAgICAgIGlmIChtX3N0eWxlLT5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSkKKyAgICAgICAgICAgIG1fZm9udERp
cnR5ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dFNoYWRvdzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93OiB7CisgICAg
ICAgIGlmIChpc0luaGVyaXQpIHsKKyAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVRl
eHRTaGFkb3cpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fc3R5bGUtPnNldFRleHRTaGFkb3co
bV9wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpID8gbmV3IFNoYWRvd0RhdGEoKm1fcGFyZW50U3R5
bGUtPnRleHRTaGFkb3coKSkgOiAwKTsKKyAgICAgICAgICAgIHJldHVybiBtX3N0eWxlLT5zZXRC
b3hTaGFkb3cobV9wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkgPyBuZXcgU2hhZG93RGF0YSgqbV9w
YXJlbnRTdHlsZS0+Ym94U2hhZG93KCkpIDogMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlz
SW5pdGlhbCB8fCBwcmltaXRpdmVWYWx1ZSkgLy8gaW5pdGlhbCB8IG5vbmUKKyAgICAgICAgICAg
IHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cgPyBtX3N0eWxlLT5zZXRUZXh0U2hh
ZG93KDApIDogbV9zdHlsZS0+c2V0Qm94U2hhZG93KDApOworCisgICAgICAgIGlmICghdmFsdWUt
PmlzVmFsdWVMaXN0KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQ1NTVmFsdWVM
aXN0ICpsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOworICAgICAgICBp
bnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVu
OyBpKyspIHsKKyAgICAgICAgICAgIFNoYWRvd1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hh
ZG93VmFsdWUqPihsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKKyAgICAgICAgICAg
IGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aEludChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50
U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRl
TGVuZ3RoSW50KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAg
ICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3Ro
SW50KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikgOiAwOworICAgICAg
ICAgICAgaW50IHNwcmVhZCA9IGl0ZW0tPnNwcmVhZCA/IGl0ZW0tPnNwcmVhZC0+Y29tcHV0ZUxl
bmd0aEludChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKKyAg
ICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRlbS0+
c3R5bGUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOworICAg
ICAgICAgICAgQ29sb3IgY29sb3I7CisgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCisgICAg
ICAgICAgICAgICAgY29sb3IgPSBnZXRDb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xv
ci5nZXQoKSk7CisgICAgICAgICAgICBTaGFkb3dEYXRhKiBzaGFkb3dEYXRhID0gbmV3IFNoYWRv
d0RhdGEoeCwgeSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwgY29sb3IuaXNWYWxpZCgpID8g
Y29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgICAgICAgICAgaWYgKGlkID09IENTU1By
b3BlcnR5VGV4dFNoYWRvdykKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRUZXh0U2hhZG93
KHNoYWRvd0RhdGEsIGkgIT0gMCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEsIGkgIT0gMCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVj
dDogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChib3hSZWZsZWN0LCBCb3hS
ZWZsZWN0KQorICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpIHsKKyAgICAgICAgICAgIG1fc3R5
bGUtPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hSZWZsZWN0KCkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIENTU1JlZmxlY3RWYWx1ZSogcmVm
bGVjdFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUmVmbGVjdFZhbHVlKj4odmFsdWUpOworICAgICAg
ICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0aW9uID0gU3R5bGVSZWZsZWN0aW9uOjpj
cmVhdGUoKTsKKyAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9uKHJlZmxlY3RWYWx1ZS0+
ZGlyZWN0aW9uKCkpOworICAgICAgICBpZiAocmVmbGVjdFZhbHVlLT5vZmZzZXQoKSkgeworICAg
ICAgICAgICAgaW50IHR5cGUgPSByZWZsZWN0VmFsdWUtPm9mZnNldCgpLT5wcmltaXRpdmVUeXBl
KCk7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpCisgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KExlbmd0aChyZWZs
ZWN0VmFsdWUtPm9mZnNldCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KExlbmd0aChy
ZWZsZWN0VmFsdWUtPm9mZnNldCgpLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCks
IG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvciksIEZpeGVkKSk7CisgICAgICAgIH0KKyAg
ICAgICAgTmluZVBpZWNlSW1hZ2UgbWFzazsKKyAgICAgICAgbWFwTmluZVBpZWNlSW1hZ2UocmVm
bGVjdFZhbHVlLT5tYXNrKCksIG1hc2spOworICAgICAgICByZWZsZWN0aW9uLT5zZXRNYXNrKG1h
c2spOworICAgICAgICAKKyAgICAgICAgbV9zdHlsZS0+c2V0Qm94UmVmbGVjdChyZWZsZWN0aW9u
LnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0
eU9wYWNpdHk6CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKG9wYWNpdHksIE9w
YWNpdHkpCisgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUgfHwgcHJpbWl0aXZlVmFsdWUtPnBy
aW1pdGl2ZVR5cGUoKSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKKyAgICAgICAg
ICAgIHJldHVybjsgLy8gRXJyb3IgY2FzZS4KKyAgICAgICAgLy8gQ2xhbXAgb3BhY2l0eSB0byB0
aGUgcmFuZ2UgMC0xCisgICAgICAgIG1fc3R5bGUtPnNldE9wYWNpdHkobWluKDEuMGYsIG1heCgw
LjBmLCBwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKSkpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEFsaWduOgorICAgIHsKKyAgICAgICAgSEFO
RExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoYm94QWxpZ24sIEJveEFsaWduKQorICAgICAgICBpZiAo
IXByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBFQm94QWxpZ25t
ZW50IGJveEFsaWdubWVudCA9ICpwcmltaXRpdmVWYWx1ZTsKKyAgICAgICAgaWYgKGJveEFsaWdu
bWVudCAhPSBCSlVTVElGWSkKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldEJveEFsaWduKGJveEFs
aWdubWVudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVNy
YzogLy8gT25seSB1c2VkIGluIEBmb250LWZhY2UgcnVsZXMuCisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIENTU1Byb3BlcnR5VW5pY29kZVJhbmdlOiAvLyBPbmx5IHVzZWQgaW4gQGZvbnQtZmFj
ZSBydWxlcy4KKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNr
ZmFjZVZpc2liaWxpdHk6CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGJhY2tm
YWNlVmlzaWJpbGl0eSwgQmFja2ZhY2VWaXNpYmlsaXR5KQorICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUpCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkoKHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVmlzaWJsZSkgPyBCYWNrZmFjZVZpc2li
aWxpdHlWaXNpYmxlIDogQmFja2ZhY2VWaXNpYmlsaXR5SGlkZGVuKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hEaXJlY3Rpb246CisgICAgICAgIEhBTkRM
RV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkUoYm94RGlyZWN0aW9uLCBCb3hEaXJl
Y3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94TGlu
ZXM6CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkUoYm94
TGluZXMsIEJveExpbmVzKQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJveE9yaWVudDoKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BS
SU1JVElWRShib3hPcmllbnQsIEJveE9yaWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRCb3hQYWNrOgorICAgIHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRf
QU5EX0lOSVRJQUwoYm94UGFjaywgQm94UGFjaykKKyAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgRUJveEFsaWdubWVudCBib3hQYWNrID0g
KnByaW1pdGl2ZVZhbHVlOworICAgICAgICBpZiAoYm94UGFjayAhPSBCU1RSRVRDSCAmJiBib3hQ
YWNrICE9IEJCQVNFTElORSkKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldEJveFBhY2soYm94UGFj
ayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
eEZsZXg6CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGJveEZsZXgsIEJveEZs
ZXgpCisgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUgfHwgcHJpbWl0aXZlVmFsdWUtPnByaW1p
dGl2ZVR5cGUoKSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKKyAgICAgICAgICAg
IHJldHVybjsgLy8gRXJyb3IgY2FzZS4KKyAgICAgICAgbV9zdHlsZS0+c2V0Qm94RmxleChwcmlt
aXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRCb3hGbGV4R3JvdXA6CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FO
RF9JTklUSUFMKGJveEZsZXhHcm91cCwgQm94RmxleEdyb3VwKQorICAgICAgICBpZiAoIXByaW1p
dGl2ZVZhbHVlIHx8IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgIT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpCisgICAgICAgICAgICByZXR1cm47IC8vIEVycm9yIGNhc2Uu
CisgICAgICAgIG1fc3R5bGUtPnNldEJveEZsZXhHcm91cCgodW5zaWduZWQgaW50KShwcmltaXRp
dmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJveE9yZGluYWxHcm91cDoKKyAgICAgICAgSEFORExFX0lOSEVSSVRf
QU5EX0lOSVRJQUwoYm94T3JkaW5hbEdyb3VwLCBCb3hPcmRpbmFsR3JvdXApCisgICAgICAgIGlm
ICghcHJpbWl0aXZlVmFsdWUgfHwgcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSAhPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKKyAgICAgICAgICAgIHJldHVybjsgLy8gRXJy
b3IgY2FzZS4KKyAgICAgICAgbV9zdHlsZS0+c2V0Qm94T3JkaW5hbEdyb3VwKCh1bnNpZ25lZCBp
bnQpKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpKSk7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94U2l6aW5nOgorICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChib3hTaXppbmcsIEJveFNpemluZykKKyAgICAgICAgaWYgKCFwcmlt
aXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ29udGVudEJveCkKKyAgICAgICAgICAgIG1fc3R5
bGUtPnNldEJveFNpemluZyhDT05URU5UX0JPWCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fc3R5bGUtPnNldEJveFNpemluZyhCT1JERVJfQk9YKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5Db3VudDogeworICAgICAgICBpZiAoaXNJbmhl
cml0KSB7CisgICAgICAgICAgICBpZiAobV9wYXJlbnRTdHlsZS0+aGFzQXV0b0NvbHVtbkNvdW50
KCkpCisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0SGFzQXV0b0NvbHVtbkNvdW50KCk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uQ291bnQo
bV9wYXJlbnRTdHlsZS0+Y29sdW1uQ291bnQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlQXV0bykgeworICAgICAgICAgICAgbV9zdHlsZS0+c2V0SGFzQXV0b0NvbHVtbkNv
dW50KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9zdHlsZS0+
c2V0Q29sdW1uQ291bnQoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KHByaW1pdGl2ZVZhbHVl
LT5nZXREb3VibGVWYWx1ZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdENvbHVtbkdhcDogeworICAgICAgICBpZiAoaXNJbmhlcml0KSB7Cisg
ICAgICAgICAgICBpZiAobV9wYXJlbnRTdHlsZS0+aGFzTm9ybWFsQ29sdW1uR2FwKCkpCisgICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0SGFzTm9ybWFsQ29sdW1uR2FwKCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uR2FwKG1fcGFyZW50U3R5
bGUtPmNvbHVtbkdhcCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlm
IChpc0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3Jt
YWwpIHsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldEhhc05vcm1hbENvbHVtbkdhcCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fc3R5bGUtPnNldENvbHVtbkdh
cChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKCksIG1fcm9vdEVsZW1l
bnRTdHlsZSwgem9vbUZhY3RvcikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5TcGFuOiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FO
RF9JTklUSUFMKGNvbHVtblNwYW4sIENvbHVtblNwYW4pCisgICAgICAgIG1fc3R5bGUtPnNldENv
bHVtblNwYW4ocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBbGwpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5XaWR0
aDogeworICAgICAgICBpZiAoaXNJbmhlcml0KSB7CisgICAgICAgICAgICBpZiAobV9wYXJlbnRT
dHlsZS0+aGFzQXV0b0NvbHVtbldpZHRoKCkpCisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0
SGFzQXV0b0NvbHVtbldpZHRoKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0Q29sdW1uV2lkdGgobV9wYXJlbnRTdHlsZS0+Y29sdW1uV2lkdGgoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsIHx8IHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykgeworICAgICAgICAgICAgbV9z
dHlsZS0+c2V0SGFzQXV0b0NvbHVtbldpZHRoKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uV2lkdGgocHJpbWl0aXZlVmFsdWUtPmNv
bXB1dGVMZW5ndGhGbG9hdChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3Ip
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29s
dW1uUnVsZVN0eWxlOgorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJ
TUlUSVZFX1dJVEhfVkFMVUUoY29sdW1uUnVsZVN0eWxlLCBDb2x1bW5SdWxlU3R5bGUsIEJvcmRl
clN0eWxlKQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVt
bkJyZWFrQmVmb3JlOgorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJ
TUlUSVZFX1dJVEhfVkFMVUUoY29sdW1uQnJlYWtCZWZvcmUsIENvbHVtbkJyZWFrQmVmb3JlLCBQ
YWdlQnJlYWspCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29s
dW1uQnJlYWtBZnRlcjoKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BS
SU1JVElWRV9XSVRIX1ZBTFVFKGNvbHVtbkJyZWFrQWZ0ZXIsIENvbHVtbkJyZWFrQWZ0ZXIsIFBh
Z2VCcmVhaykKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5CcmVha0luc2lkZTogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9XSVRI
X1ZBTFVFKGNvbHVtbkJyZWFrSW5zaWRlLCBDb2x1bW5CcmVha0luc2lkZSwgUGFnZUJyZWFrKQor
ICAgICAgICBFUGFnZUJyZWFrIHBiID0gKnByaW1pdGl2ZVZhbHVlOworICAgICAgICBpZiAocGIg
IT0gUEJBTFdBWVMpCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5CcmVha0luc2lkZShw
Yik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRD
b2x1bW5SdWxlOgorICAgICAgICBpZiAoaXNJbmhlcml0KSB7CisgICAgICAgICAgICBtX3N0eWxl
LT5zZXRDb2x1bW5SdWxlQ29sb3IobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkuaXNW
YWxpZCgpID8gbV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBtX3BhcmVudFN0eWxl
LT5jb2xvcigpKTsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVTdHlsZShtX3Bh
cmVudFN0eWxlLT5jb2x1bW5SdWxlU3R5bGUoKSk7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRD
b2x1bW5SdWxlV2lkdGgobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZVdpZHRoKCkpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKGlzSW5pdGlhbCkKKyAgICAgICAgICAgIG1fc3R5bGUtPnJl
c2V0Q29sdW1uUnVsZSgpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdENvbHVtbnM6CisgICAgICAgIGlmIChpc0luaGVyaXQpIHsKKyAgICAgICAgICAgIGlmICht
X3BhcmVudFN0eWxlLT5oYXNBdXRvQ29sdW1uV2lkdGgoKSkKKyAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRIYXNBdXRvQ29sdW1uV2lkdGgoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5XaWR0aChtX3BhcmVudFN0eWxlLT5jb2x1bW5XaWR0
aCgpKTsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtbkNvdW50KG1fcGFyZW50U3R5bGUt
PmNvbHVtbkNvdW50KCkpOworICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgeworICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0SGFzQXV0b0NvbHVtbldpZHRoKCk7CisgICAgICAgICAgICBtX3N0
eWxlLT5zZXRDb2x1bW5Db3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbENvbHVtbkNvdW50KCkpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFy
cXVlZToKKyAgICAgICAgaWYgKHZhbHVlVHlwZSAhPSBDU1NWYWx1ZTo6Q1NTX0lOSEVSSVQgfHwg
IW1fcGFyZW50Tm9kZSkgcmV0dXJuOworICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlRGlyZWN0
aW9uKG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVEaXJlY3Rpb24oKSk7CisgICAgICAgIG1fc3R5bGUt
PnNldE1hcnF1ZWVJbmNyZW1lbnQobV9wYXJlbnRTdHlsZS0+bWFycXVlZUluY3JlbWVudCgpKTsK
KyAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVT
cGVlZCgpKTsKKyAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChtX3BhcmVudFN0
eWxlLT5tYXJxdWVlTG9vcENvdW50KCkpOworICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlQmVo
YXZpb3IobV9wYXJlbnRTdHlsZS0+bWFycXVlZUJlaGF2aW9yKCkpOworICAgICAgICByZXR1cm47
CisjaWYgRU5BQkxFKFdDU1MpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdhcE1hcnF1ZWVMb29wOgor
I2VuZGlmCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVSZXBldGl0aW9uOiB7Cisg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKG1hcnF1ZWVMb29wQ291bnQsIE1hcnF1
ZWVMb29wQ291bnQpCisgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZUluZmluaXRlKQorICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudCgtMSk7
IC8vIC0xIG1lYW5zIHJlcGVhdCBmb3JldmVyLgorICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKQor
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+
Z2V0SW50VmFsdWUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgRU5BQkxFKFdDU1Mp
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdhcE1hcnF1ZWVTcGVlZDoKKyNlbmRpZgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3BlZWQ6IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRf
QU5EX0lOSVRJQUwobWFycXVlZVNwZWVkLCBNYXJxdWVlU3BlZWQpICAgICAgCisgICAgICAgIGlm
ICghcHJpbWl0aXZlVmFsdWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgeworICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbG93Ogor
ICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAw
IG1zZWMuCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVOb3JtYWw6CisgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVT
cGVlZCg4NSk7IC8vIDg1bXNlYy4gVGhlIFdpbklFIGRlZmF1bHQuCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVGYXN0OgorICAgICAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAxMG1zZWMuIFN1cGVy
IGZhc3QuCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKQorICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVl
ZVNwZWVkKDEwMDAgKiBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19NUykKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRp
dmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpIC8vIEZv
ciBzY3JvbGxhbW91bnQgc3VwcG9ydC4KKyAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVT
cGVlZChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVJbmNyZW1lbnQ6IHsKKyAgICAg
ICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFycXVlZUluY3JlbWVudCwgTWFycXVlZUlu
Y3JlbWVudCkKKyAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBDU1NWYWx1ZVNtYWxsOgorICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJx
dWVlSW5jcmVtZW50KExlbmd0aCgxLCBGaXhlZCkpOyAvLyAxcHguCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6CisgICAgICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDYsIEZpeGVk
KSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMYXJnZToKKyAgICAgICAgICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2
cHguCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAgICAgICAg
ICBMZW5ndGggbCA9IGNvbnZlcnRUb0xlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3R5bGUoKSwgbV9y
b290RWxlbWVudFN0eWxlLCAxLCAmb2spOworICAgICAgICAgICAgaWYgKG9rKQorICAgICAgICAg
ICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQobCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUoV0NTUykKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2FwTWFycXVlZVN0eWxlOgorI2VuZGlmCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1
ZWVTdHlsZToKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElW
RShtYXJxdWVlQmVoYXZpb3IsIE1hcnF1ZWVCZWhhdmlvcikgICAgICAKKyAgICAgICAgcmV0dXJu
OworI2lmIEVOQUJMRShXQ1NTKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXYXBNYXJxdWVlRGlyOgor
ICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXJxdWVlRGlyZWN0aW9uLCBNYXJx
dWVlRGlyZWN0aW9uKQorICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMdHI6CisgICAgICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0TWFycXVlZURpcmVjdGlvbihNUklHSFQpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVJ0bDoKKyAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRNYXJxdWVlRGlyZWN0aW9uKE1MRUZUKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFy
cXVlZURpcmVjdGlvbigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlRGlyZWN0aW9uOgorICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKG1hcnF1ZWVEaXJlY3Rpb24sIE1hcnF1ZWVE
aXJlY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNl
ckRyYWc6CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkUo
dXNlckRyYWcsIFVzZXJEcmFnKSAgICAgIAorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFVzZXJNb2RpZnk6CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklU
SUFMX0FORF9QUklNSVRJVkUodXNlck1vZGlmeSwgVXNlck1vZGlmeSkgICAgICAKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0OgorICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKHVzZXJTZWxlY3QsIFVzZXJT
ZWxlY3QpICAgICAgCisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
T3ZlcmZsb3c6IHsKKyAgICAgICAgLy8gVGhpcyBwcm9wZXJ0eSBpcyBzdXBwb3J0ZWQgYnkgV2lu
SUUsIGFuZCBzbyB3ZSBsZWF2ZSBvZmYgdGhlICItd2Via2l0LSIgaW4gb3JkZXIgdG8KKyAgICAg
ICAgLy8gd29yayB3aXRoIFdpbklFLXNwZWNpZmljIHBhZ2VzIHRoYXQgdXNlIHRoZSBwcm9wZXJ0
eS4KKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodGV4dE92ZXJmbG93LCBUZXh0
T3ZlcmZsb3cpCisgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUgfHwgIXByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3N0eWxlLT5zZXRU
ZXh0T3ZlcmZsb3cocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVFbGxpcHNp
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
cmdpbkNvbGxhcHNlOiB7CisgICAgICAgIGlmIChpc0luaGVyaXQpIHsKKyAgICAgICAgICAgIG1f
c3R5bGUtPnNldE1hcmdpblRvcENvbGxhcHNlKG1fcGFyZW50U3R5bGUtPm1hcmdpblRvcENvbGxh
cHNlKCkpOworICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFyZ2luQm90dG9tQ29sbGFwc2UobV9w
YXJlbnRTdHlsZS0+bWFyZ2luQm90dG9tQ29sbGFwc2UoKSk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoaXNJbml0aWFsKSB7CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJnaW5Ub3BD
b2xsYXBzZShNQ09MTEFQU0UpOworICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFyZ2luQm90dG9t
Q29sbGFwc2UoTUNPTExBUFNFKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblRvcENvbGxhcHNlOgorICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKG1hcmdpblRvcENvbGxhcHNl
LCBNYXJnaW5Ub3BDb2xsYXBzZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXJnaW5Cb3R0b21Db2xsYXBzZToKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5E
X0lOSVRJQUxfQU5EX1BSSU1JVElWRShtYXJnaW5Cb3R0b21Db2xsYXBzZSwgTWFyZ2luQm90dG9t
Q29sbGFwc2UpCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGlu
ZUNsYW1wOiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGxpbmVDbGFtcCwg
TGluZUNsYW1wKQorICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7
CisgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKQorICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUNsYW1wKExpbmVDbGFtcFZhbHVlKHByaW1pdGl2ZVZh
bHVlLT5nZXRJbnRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIExpbmVDbGFt
cExpbmVDb3VudCkpOworICAgICAgICBlbHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSkKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVDbGFtcChMaW5l
Q2xhbXBWYWx1ZShwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QRVJDRU5UQUdFKSwgTGluZUNsYW1wUGVyY2VudGFnZSkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIaWdobGlnaHQ6IHsKKyAgICAgICAg
SEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoaGlnaGxpZ2h0LCBIaWdobGlnaHQpOworICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQorICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0SGlnaGxpZ2h0KG51bGxBdG9tKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0SGlnaGxpZ2h0KHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdW
YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0SHlwaGVuczogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChoeXBoZW5z
LCBIeXBoZW5zKTsKKyAgICAgICAgbV9zdHlsZS0+c2V0SHlwaGVucygqcHJpbWl0aXZlVmFsdWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBo
ZW5hdGVDaGFyYWN0ZXI6IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoaHlw
aGVuYXRlQ2hhcmFjdGVyLCBIeXBoZW5hdGVDaGFyYWN0ZXIpOworICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICAgICAgbV9zdHls
ZS0+c2V0SHlwaGVuYXRlQ2hhcmFjdGVyKG51bGxBdG9tKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0SHlwaGVuYXRlQ2hhcmFjdGVyKHByaW1pdGl2ZVZhbHVlLT5nZXRT
dHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Qm9yZGVyRml0OiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFM
KGJvcmRlckZpdCwgQm9yZGVyRml0KTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlQm9yZGVyKQorICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVy
Rml0KEJvcmRlckZpdEJvcmRlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3R5bGUt
PnNldEJvcmRlckZpdChCb3JkZXJGaXRMaW5lcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTaXplQWRqdXN0OiB7CisgICAgICAgIEhBTkRM
RV9JTkhFUklUX0FORF9JTklUSUFMKHRleHRTaXplQWRqdXN0LCBUZXh0U2l6ZUFkanVzdCkKKyAg
ICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSB8fCAhcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkp
IHJldHVybjsKKyAgICAgICAgbV9zdHlsZS0+c2V0VGV4dFNpemVBZGp1c3QocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgbV9mb250RGlydHkgPSB0
cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
ZXh0U2VjdXJpdHk6CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklN
SVRJVkUodGV4dFNlY3VyaXR5LCBUZXh0U2VjdXJpdHkpCisgICAgICAgIHJldHVybjsKKworI2lm
IEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RGFz
aGJvYXJkUmVnaW9uOiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGRhc2hi
b2FyZFJlZ2lvbnMsIERhc2hib2FyZFJlZ2lvbnMpCisgICAgICAgIGlmICghcHJpbWl0aXZlVmFs
dWUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgeworICAgICAgICAgICAgbV9zdHlsZS0+c2V0RGFz
aGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6bm9uZURhc2hib2FyZFJlZ2lvbnMoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBEYXNoYm9hcmRSZWdpb24gKnJl
Z2lvbiA9IHByaW1pdGl2ZVZhbHVlLT5nZXREYXNoYm9hcmRSZWdpb25WYWx1ZSgpOworICAgICAg
ICBpZiAoIXJlZ2lvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAg
ICBEYXNoYm9hcmRSZWdpb24gKmZpcnN0ID0gcmVnaW9uOworICAgICAgICB3aGlsZSAocmVnaW9u
KSB7CisgICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvTGVuZ3RoKHJlZ2lvbi0+dG9w
KCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7CisgICAgICAgICAgICBMZW5ndGggcmln
aHQgPSBjb252ZXJ0VG9MZW5ndGgocmVnaW9uLT5yaWdodCgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVt
ZW50U3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0xlbmd0aChy
ZWdpb24tPmJvdHRvbSgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOworICAgICAgICAg
ICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgocmVnaW9uLT5sZWZ0KCksIHN0eWxlKCks
IG1fcm9vdEVsZW1lbnRTdHlsZSk7CisgICAgICAgICAgICBpZiAocmVnaW9uLT5tX2lzQ2lyY2xl
KQorICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hi
b2FyZFJlZ2lvbjo6Q2lyY2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwg
bGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKHJlZ2lvbi0+bV9pc1JlY3RhbmdsZSkKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRE
YXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OlJlY3RhbmdsZSwgcmVnaW9uLT5t
X2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNl
IDogdHJ1ZSk7CisgICAgICAgICAgICByZWdpb24gPSByZWdpb24tPm1fbmV4dC5nZXQoKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRIYXNE
YXNoYm9hcmRSZWdpb25zKHRydWUpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZiAgICAgICAgCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJ0bE9yZGVyaW5nOgor
ICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh2aXN1YWxseU9yZGVyZWQsIFZpc3Vh
bGx5T3JkZXJlZCkKKyAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSB8fCAhcHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3R5bGUtPnNl
dFZpc3VhbGx5T3JkZXJlZChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVZp
c3VhbCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0
cm9rZVdpZHRoOiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRleHRTdHJv
a2VXaWR0aCwgVGV4dFN0cm9rZVdpZHRoKQorICAgICAgICBmbG9hdCB3aWR0aCA9IDA7CisgICAg
ICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVUaGluOgorICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU1lZGl1bToKKyAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVUaGljazogeworICAgICAgICAgICAgICAgIGRvdWJsZSByZXN1
bHQgPSAxLjAgLyA0ODsKKyAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVNZWRpdW0pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAqPSAz
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlVGhpY2spCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAqPSA1OworICAgICAg
ICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKCksIG1fcm9v
dEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHdpZHRoID0g
cHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhGbG9hdChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50
U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIG1fc3R5bGUtPnNldFRleHRTdHJva2VXaWR0aCh3aWR0aCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybTogeworICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0cmFuc2Zvcm0sIFRyYW5zZm9ybSk7CisgICAg
ICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICAgICAgY3JlYXRlVHJhbnNm
b3JtT3BlcmF0aW9ucyh2YWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCBvcGVyYXRp
b25zKTsKKyAgICAgICAgbV9zdHlsZS0+c2V0VHJhbnNmb3JtKG9wZXJhdGlvbnMpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1Pcmln
aW46CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRyYW5zZm9ybU9yaWdpblgs
IFRyYW5zZm9ybU9yaWdpblgpCisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRy
YW5zZm9ybU9yaWdpblksIFRyYW5zZm9ybU9yaWdpblkpCisgICAgICAgIEhBTkRMRV9JTkhFUklU
X0FORF9JTklUSUFMKHRyYW5zZm9ybU9yaWdpblosIFRyYW5zZm9ybU9yaWdpblopCisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWDogewor
ICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0cmFuc2Zvcm1PcmlnaW5YLCBUcmFu
c2Zvcm1PcmlnaW5YKQorICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgTGVuZ3Ro
IGw7CisgICAgICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsK
KyAgICAgICAgaWYgKENTU1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5cGUpKQor
ICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZv
ckxlbmd0aChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCk7
CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5U
QUdFKQorICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFs
dWUoKSwgUGVyY2VudCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgbV9zdHlsZS0+c2V0VHJhbnNmb3JtT3JpZ2luWChsKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5ZOiB7CisgICAgICAg
IEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRyYW5zZm9ybU9yaWdpblksIFRyYW5zZm9ybU9y
aWdpblkpCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgICAgICBMZW5ndGggbDsKKyAg
ICAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAg
ICBpZiAoQ1NTUHJpbWl0aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgodHlwZSkpCisgICAgICAg
ICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3Ro
KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvciksIEZpeGVkKTsKKyAgICAg
ICAgZWxzZSBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCisg
ICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQ
ZXJjZW50KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3N0
eWxlLT5zZXRUcmFuc2Zvcm1PcmlnaW5ZKGwpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblo6IHsKKyAgICAgICAgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwodHJhbnNmb3JtT3JpZ2luWiwgVHJhbnNmb3JtT3JpZ2luWikK
KyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgICAgIGZsb2F0IGY7CisgICAgICAgIGlu
dCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgaWYgKENT
U1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5cGUpKQorICAgICAgICAgICAgZiA9
IHN0YXRpY19jYXN0PGZsb2F0PihwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxl
bmd0aChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBtX3N0eWxlLT5zZXRUcmFuc2Zvcm1PcmlnaW5aKGYpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bVN0eWxlOgorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0cmFuc2Zvcm1TdHls
ZTNELCBUcmFuc2Zvcm1TdHlsZTNEKQorICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpCisgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRUcmFuc2Zvcm1TdHlsZTNEKChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZVByZXNlcnZlM2QpID8gVHJhbnNmb3JtU3R5bGUzRFByZXNlcnZl
M0QgOiBUcmFuc2Zvcm1TdHlsZTNERmxhdCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmU6IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5E
X0lOSVRJQUwocGVyc3BlY3RpdmUsIFBlcnNwZWN0aXZlKQorICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Cisg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRQZXJzcGVjdGl2ZSgwKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZmxvYXQgcGVyc3BlY3RpdmVWYWx1ZTsK
KyAgICAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpOworICAg
ICAgICBpZiAoQ1NTUHJpbWl0aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgodHlwZSkpCisgICAg
ICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHByaW1pdGl2ZVZh
bHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHls
ZSwgem9vbUZhY3RvcikpOworICAgICAgICBlbHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTlVNQkVSKSB7CisgICAgICAgICAgICAvLyBGb3IgYmFja3dhcmQgY29tcGF0aWJp
bGl0eSwgdHJlYXQgdmFsdWVsZXNzIG51bWJlcnMgYXMgcHguCisgICAgICAgICAgICBwZXJzcGVj
dGl2ZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShwcmltaXRpdmVWYWx1ZS0+Z2V0
RG91YmxlVmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCktPmNvbXB1dGVMZW5ndGhG
bG9hdChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAocGVyc3BlY3RpdmVWYWx1
ZSA+PSAwLjBmKQorICAgICAgICAgICAgbV9zdHlsZS0+c2V0UGVyc3BlY3RpdmUocGVyc3BlY3Rp
dmVWYWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFBlcnNwZWN0aXZlT3JpZ2luOgorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TChwZXJzcGVjdGl2ZU9yaWdpblgsIFBlcnNwZWN0aXZlT3JpZ2luWCkKKyAgICAgICAgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwocGVyc3BlY3RpdmVPcmlnaW5ZLCBQZXJzcGVjdGl2ZU9yaWdp
blkpCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGVyc3BlY3Rp
dmVPcmlnaW5YOiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHBlcnNwZWN0
aXZlT3JpZ2luWCwgUGVyc3BlY3RpdmVPcmlnaW5YKQorICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVl
KTsKKyAgICAgICAgTGVuZ3RoIGw7CisgICAgICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUt
PnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgaWYgKENTU1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRU
eXBlTGVuZ3RoKHR5cGUpKQorICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+
Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpv
b21GYWN0b3IpLCBGaXhlZCk7CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QRVJDRU5UQUdFKQorICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVW
YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgbV9zdHlsZS0+c2V0UGVyc3BlY3RpdmVPcmlnaW5YKGwpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVj
dGl2ZU9yaWdpblk6IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwocGVyc3Bl
Y3RpdmVPcmlnaW5ZLCBQZXJzcGVjdGl2ZU9yaWdpblkpCisgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWUpOworICAgICAgICBMZW5ndGggbDsKKyAgICAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1
ZS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICBpZiAoQ1NTUHJpbWl0aXZlVmFsdWU6OmlzVW5p
dFR5cGVMZW5ndGgodHlwZSkpCisgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwg
em9vbUZhY3RvciksIEZpeGVkKTsKKyAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCisgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2
ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBtX3N0eWxlLT5zZXRQZXJzcGVjdGl2ZU9yaWdpblkobCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1h
dGlvbjoKKyAgICAgICAgaWYgKGlzSW5pdGlhbCkKKyAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFy
QW5pbWF0aW9ucygpOworICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCisgICAgICAgICAgICBt
X3N0eWxlLT5pbmhlcml0QW5pbWF0aW9ucyhtX3BhcmVudFN0eWxlLT5hbmltYXRpb25zKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRlbGF5
OgorICAgICAgICBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVFKGRlbGF5LCBEZWxheSwgdmFsdWUpCisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0
aW9uOgorICAgICAgICBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVFKGRpcmVjdGlvbiwgRGlyZWN0aW9u
LCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmlt
YXRpb25EdXJhdGlvbjoKKyAgICAgICAgSEFORExFX0FOSU1BVElPTl9WQUxVRShkdXJhdGlvbiwg
RHVyYXRpb24sIHZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEFuaW1hdGlvbkZpbGxNb2RlOgorICAgICAgICBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVFKGZp
bGxNb2RlLCBGaWxsTW9kZSwgdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6CisgICAgICAgIEhBTkRMRV9BTklN
QVRJT05fVkFMVUUoaXRlcmF0aW9uQ291bnQsIEl0ZXJhdGlvbkNvdW50LCB2YWx1ZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25OYW1lOgorICAg
ICAgICBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVFKG5hbWUsIE5hbWUsIHZhbHVlKQorICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblBsYXlTdGF0ZToKKyAg
ICAgICAgSEFORExFX0FOSU1BVElPTl9WQUxVRShwbGF5U3RhdGUsIFBsYXlTdGF0ZSwgdmFsdWUp
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVGlt
aW5nRnVuY3Rpb246CisgICAgICAgIEhBTkRMRV9BTklNQVRJT05fVkFMVUUodGltaW5nRnVuY3Rp
b24sIFRpbWluZ0Z1bmN0aW9uLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2l0aW9uOgorICAgICAgICBpZiAoaXNJbml0aWFsKQorICAgICAg
ICAgICAgbV9zdHlsZS0+Y2xlYXJUcmFuc2l0aW9ucygpOworICAgICAgICBlbHNlIGlmIChpc0lu
aGVyaXQpCisgICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0VHJhbnNpdGlvbnMobV9wYXJlbnRT
dHlsZS0+dHJhbnNpdGlvbnMoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OgorICAgICAgICBIQU5ETEVfVFJBTlNJVElPTl9WQUxV
RShkZWxheSwgRGVsYXksIHZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbjoKKyAgICAgICAgSEFORExFX1RSQU5TSVRJT05f
VkFMVUUoZHVyYXRpb24sIER1cmF0aW9uLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6CisgICAgICAgIEhBTkRMRV9U
UkFOU0lUSU9OX1ZBTFVFKHByb3BlcnR5LCBQcm9wZXJ0eSwgdmFsdWUpCisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOgor
ICAgICAgICBIQU5ETEVfVFJBTlNJVElPTl9WQUxVRSh0aW1pbmdGdW5jdGlvbiwgVGltaW5nRnVu
Y3Rpb24sIHZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBvaW50
ZXJFdmVudHM6CisgICAgeworI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKKyAgICAgICAg
Ly8gPHJkYXI6Ly9wcm9ibGVtLzY1NjEwNzc+IFdvcmsgYXJvdW5kIHRoZSBTdG9ja3Mgd2lkZ2V0
J3MgbWlzdXNlIG9mIHRoZQorICAgICAgICAvLyBwb2ludGVyLWV2ZW50cyBwcm9wZXJ0eSBieSBu
b3QgYXBwbHlpbmcgaXQgaW4gRGFzaGJvYXJkLgorICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBtX2NoZWNrZXIubV9kb2N1bWVudC0+c2V0dGluZ3MoKTsKKyAgICAgICAgaWYgKHNldHRpbmdz
ICYmIHNldHRpbmdzLT51c2VzRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpKQor
ICAgICAgICAgICAgcmV0dXJuOworI2VuZGlmCisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMKHBvaW50ZXJFdmVudHMsIFBvaW50ZXJFdmVudHMpCisgICAgICAgIGlmICghcHJpbWl0
aXZlVmFsdWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3R5bGUtPnNldFBvaW50
ZXJFdmVudHMoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Q29sb3JDb3JyZWN0aW9uOgorICAgICAgICBpZiAoaXNJbmhl
cml0KSAKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbG9yU3BhY2UobV9wYXJlbnRTdHlsZS0+
Y29sb3JTcGFjZSgpKTsKKyAgICAgICAgZWxzZSBpZiAoaXNJbml0aWFsKQorICAgICAgICAgICAg
bV9zdHlsZS0+c2V0Q29sb3JTcGFjZShEZXZpY2VDb2xvclNwYWNlKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbG9yU3BhY2UoKnByaW1pdGl2ZVZhbHVlKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVNpemU6Cisg
ICAgICAgIGFwcGx5UGFnZVNpemVQcm9wZXJ0eSh2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIENTU1Byb3BlcnR5SW52YWxpZDoKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRGly
ZWN0aW9uYWwgcHJvcGVydGllcyBhcmUgcmVzb2x2ZWQgYnkgcmVzb2x2ZURpcmVjdGlvbkF3YXJl
UHJvcGVydHkoKSBiZWZvcmUgdGhlIHN3aXRjaC4KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm9yZGVyRW5kOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJFbmRDb2xvcjoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kU3R5bGU6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlckVuZFdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3Jk
ZXJTdGFydDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRDb2xvcjoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRTdHlsZToKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFyZ2luRW5kOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5TdGFydDoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0VuZDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0UGFkZGluZ1N0YXJ0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0cmV0Y2g6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVBhZ2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVF1b3RlczoKKyAgICBjYXNlIENTU1By
b3BlcnR5VGV4dExpbmVUaHJvdWdoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91
Z2hDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoTW9kZToKKyAgICBj
YXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVRleHRMaW5lVGhyb3VnaFdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmU6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZUNvbG9yOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlUZXh0T3ZlcmxpbmVNb2RlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVT
dHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lV2lkdGg6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHRVbmRlcmxpbmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxp
bmVDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZU1vZGU6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4
dFVuZGVybGluZVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250U2l6ZURlbHRh
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZToKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VmFyaWFibGVEZWNsYXJhdGlvbkJsb2NrOgorICAgICAgICByZXR1cm47CisjaWYgRU5B
QkxFKFdDU1MpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdhcElucHV0Rm9ybWF0OgorICAgICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUgJiYgbV9lbGVtZW50LT5oYXNUYWdOYW1lKFdlYkNvcmU6OmlucHV0
VGFnKSkgeworICAgICAgICAgICAgU3RyaW5nIG1hc2sgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3Ry
aW5nVmFsdWUoKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPiht
X2VsZW1lbnQpLT5zZXRXYXBJbnB1dEZvcm1hdChtYXNrKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjYXNlIENTU1Byb3BlcnR5V2FwSW5wdXRSZXF1aXJlZDoKKyAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlICYmIG1fZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkg
eworICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihtX2VsZW1lbnQpOworICAgICAgICAgICAgYm9v
bCByZXF1aXJlZCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpID09ICJ0cnVlIjsK
KyAgICAgICAgICAgIGVsZW1lbnQtPnNldFJlcXVpcmVkKHJlcXVpcmVkKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisjZW5kaWYgCisKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGRlZmF1bHQ6
CisgICAgICAgIC8vIFRyeSB0aGUgU1ZHIHByb3BlcnRpZXMKKyAgICAgICAgYXBwbHlTVkdQcm9w
ZXJ0eShpZCwgdmFsdWUpOworI2VuZGlmCisgICAgfQorfQorCit2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmFwcGx5UGFnZVNpemVQcm9wZXJ0eShDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgbV9zdHls
ZS0+cmVzZXRQYWdlU2l6ZVR5cGUoKTsKKyAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQor
ICAgICAgICByZXR1cm47CisgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2Fz
dDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CisgICAgTGVuZ3RoIHdpZHRoOworICAgIExlbmd0aCBo
ZWlnaHQ7CisgICAgUGFnZVNpemVUeXBlIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9BVVRPOwor
ICAgIHN3aXRjaCAodmFsdWVMaXN0LT5sZW5ndGgoKSkgeworICAgIGNhc2UgMjogeworICAgICAg
ICAvLyA8bGVuZ3RoPnsyfSB8IDxwYWdlLXNpemU+IDxvcmllbnRhdGlvbj4KKyAgICAgICAgcGFn
ZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOworICAgICAgICBpZiAoIXZhbHVlTGlzdC0+
aXRlbSgwKS0+aXNQcmltaXRpdmVWYWx1ZSgpIHx8ICF2YWx1ZUxpc3QtPml0ZW0oMSktPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlMCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWVMaXN0LT5pdGVtKDApKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlMSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVMaXN0LT5pdGVt
KDEpKTsKKyAgICAgICAgaW50IHR5cGUwID0gcHJpbWl0aXZlVmFsdWUwLT5wcmltaXRpdmVUeXBl
KCk7CisgICAgICAgIGludCB0eXBlMSA9IHByaW1pdGl2ZVZhbHVlMS0+cHJpbWl0aXZlVHlwZSgp
OworICAgICAgICBpZiAoQ1NTUHJpbWl0aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgodHlwZTAp
KSB7CisgICAgICAgICAgICAvLyA8bGVuZ3RoPnsyfQorICAgICAgICAgICAgaWYgKCFDU1NQcmlt
aXRpdmVWYWx1ZTo6aXNVbml0VHlwZUxlbmd0aCh0eXBlMSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgd2lkdGggPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUwLT5jb21wdXRl
TGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSksIEZpeGVkKTsK
KyAgICAgICAgICAgIGhlaWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZTEtPmNvbXB1dGVMZW5n
dGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKSwgRml4ZWQpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gPHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9uPgor
ICAgICAgICAgICAgLy8gVGhlIHZhbHVlIG9yZGVyIGlzIGd1YXJhbnRlZWQuIFNlZSBDU1NQYXJz
ZXI6OnBhcnNlU2l6ZVBhcmFtZXRlci4KKyAgICAgICAgICAgIGlmICghcGFnZVNpemVGcm9tTmFt
ZShwcmltaXRpdmVWYWx1ZTAsIHByaW1pdGl2ZVZhbHVlMSwgd2lkdGgsIGhlaWdodCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIDE6IHsKKyAgICAgICAgLy8gPGxlbmd0aD4gfCBhdXRvIHwgPHBhZ2Utc2l6ZT4gfCBb
IHBvcnRyYWl0IHwgbGFuZHNjYXBlXQorICAgICAgICBpZiAoIXZhbHVlTGlzdC0+aXRlbSgwKS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHZhbHVlTGlzdC0+aXRlbSgwKSk7CisgICAgICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFs
dWUtPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgaWYgKENTU1ByaW1pdGl2ZVZhbHVlOjppc1Vu
aXRUeXBlTGVuZ3RoKHR5cGUpKSB7CisgICAgICAgICAgICAvLyA8bGVuZ3RoPgorICAgICAgICAg
ICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOworICAgICAgICAgICAgd2lkdGgg
PSBoZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5n
dGgoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKSwgRml4ZWQpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKHR5cGUgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQXV0bzoKKyAgICAg
ICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfQVVUTzsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVQb3J0cmFpdDoKKyAgICAgICAgICAg
ICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfQVVUT19QT1JUUkFJVDsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMYW5kc2NhcGU6CisgICAgICAg
ICAgICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX0FVVE9fTEFORFNDQVBFOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAv
LyA8cGFnZS1zaXplPgorICAgICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9S
RVNPTFZFRDsKKyAgICAgICAgICAgICAgICBpZiAoIXBhZ2VTaXplRnJvbU5hbWUocHJpbWl0aXZl
VmFsdWUsIDAsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9zdHlsZS0+c2V0UGFnZVNpemVUeXBl
KHBhZ2VTaXplVHlwZSk7CisgICAgbV9zdHlsZS0+c2V0UGFnZVNpemUoTGVuZ3RoU2l6ZSh3aWR0
aCwgaGVpZ2h0KSk7CisgICAgcmV0dXJuOworfQorCitib29sIENTU1N0eWxlU2VsZWN0b3I6OnBh
Z2VTaXplRnJvbU5hbWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHBhZ2VTaXplTmFtZSwgQ1NTUHJpbWl0
aXZlVmFsdWUqIHBhZ2VPcmllbnRhdGlvbiwgTGVuZ3RoJiB3aWR0aCwgTGVuZ3RoJiBoZWlnaHQp
Cit7CisgICAgc3RhdGljIGNvbnN0IExlbmd0aCBhNVdpZHRoID0gbW1MZW5ndGgoMTQ4KSwgYTVI
ZWlnaHQgPSBtbUxlbmd0aCgyMTApOworICAgIHN0YXRpYyBjb25zdCBMZW5ndGggYTRXaWR0aCA9
IG1tTGVuZ3RoKDIxMCksIGE0SGVpZ2h0ID0gbW1MZW5ndGgoMjk3KTsKKyAgICBzdGF0aWMgY29u
c3QgTGVuZ3RoIGEzV2lkdGggPSBtbUxlbmd0aCgyOTcpLCBhM0hlaWdodCA9IG1tTGVuZ3RoKDQy
MCk7CisgICAgc3RhdGljIGNvbnN0IExlbmd0aCBiNVdpZHRoID0gbW1MZW5ndGgoMTc2KSwgYjVI
ZWlnaHQgPSBtbUxlbmd0aCgyNTApOworICAgIHN0YXRpYyBjb25zdCBMZW5ndGggYjRXaWR0aCA9
IG1tTGVuZ3RoKDI1MCksIGI0SGVpZ2h0ID0gbW1MZW5ndGgoMzUzKTsKKyAgICBzdGF0aWMgY29u
c3QgTGVuZ3RoIGxldHRlcldpZHRoID0gaW5jaExlbmd0aCg4LjUpLCBsZXR0ZXJIZWlnaHQgPSBp
bmNoTGVuZ3RoKDExKTsKKyAgICBzdGF0aWMgY29uc3QgTGVuZ3RoIGxlZ2FsV2lkdGggPSBpbmNo
TGVuZ3RoKDguNSksIGxlZ2FsSGVpZ2h0ID0gaW5jaExlbmd0aCgxNCk7CisgICAgc3RhdGljIGNv
bnN0IExlbmd0aCBsZWRnZXJXaWR0aCA9IGluY2hMZW5ndGgoMTEpLCBsZWRnZXJIZWlnaHQgPSBp
bmNoTGVuZ3RoKDE3KTsKKworICAgIGlmICghcGFnZVNpemVOYW1lIHx8IHBhZ2VTaXplTmFtZS0+
cHJpbWl0aXZlVHlwZSgpICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAocGFnZVNpemVOYW1lLT5nZXRJZGVudCgpKSB7
CisgICAgY2FzZSBDU1NWYWx1ZUE1OgorICAgICAgICB3aWR0aCA9IGE1V2lkdGg7CisgICAgICAg
IGhlaWdodCA9IGE1SGVpZ2h0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlQTQ6
CisgICAgICAgIHdpZHRoID0gYTRXaWR0aDsKKyAgICAgICAgaGVpZ2h0ID0gYTRIZWlnaHQ7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVBMzoKKyAgICAgICAgd2lkdGggPSBhM1dp
ZHRoOworICAgICAgICBoZWlnaHQgPSBhM0hlaWdodDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDU1NWYWx1ZUI1OgorICAgICAgICB3aWR0aCA9IGI1V2lkdGg7CisgICAgICAgIGhlaWdodCA9
IGI1SGVpZ2h0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlQjQ6CisgICAgICAg
IHdpZHRoID0gYjRXaWR0aDsKKyAgICAgICAgaGVpZ2h0ID0gYjRIZWlnaHQ7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ1NTVmFsdWVMZXR0ZXI6CisgICAgICAgIHdpZHRoID0gbGV0dGVyV2lk
dGg7CisgICAgICAgIGhlaWdodCA9IGxldHRlckhlaWdodDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDU1NWYWx1ZUxlZ2FsOgorICAgICAgICB3aWR0aCA9IGxlZ2FsV2lkdGg7CisgICAgICAg
IGhlaWdodCA9IGxlZ2FsSGVpZ2h0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVl
TGVkZ2VyOgorICAgICAgICB3aWR0aCA9IGxlZGdlcldpZHRoOworICAgICAgICBoZWlnaHQgPSBs
ZWRnZXJIZWlnaHQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocGFnZU9yaWVudGF0aW9uKSB7CisgICAgICAgIGlm
IChwYWdlT3JpZW50YXRpb24tPnByaW1pdGl2ZVR5cGUoKSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0lERU5UKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzd2l0Y2ggKHBh
Z2VPcmllbnRhdGlvbi0+Z2V0SWRlbnQoKSkgeworICAgICAgICBjYXNlIENTU1ZhbHVlTGFuZHNj
YXBlOgorICAgICAgICAgICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVQb3J0cmFpdDoKKyAgICAgICAgICAgIC8vIE5v
dGhpbmcgdG8gZG8uCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworTGVuZ3RoIENTU1N0eWxlU2VsZWN0b3I6Om1tTGVuZ3RoKGRvdWJsZSBtbSkKK3sKKyAg
ICByZXR1cm4gTGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobW0sIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTU0pLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9v
dEVsZW1lbnRTdHlsZSksIEZpeGVkKTsKK30KKworTGVuZ3RoIENTU1N0eWxlU2VsZWN0b3I6Omlu
Y2hMZW5ndGgoZG91YmxlIGluY2gpCit7CisgICAgcmV0dXJuIExlbmd0aChDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKGluY2gsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSU4pLT5jb21wdXRlTGVu
Z3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSksIEZpeGVkKTsKK30K
Kwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsQXR0YWNobWVudChGaWxsTGF5ZXIqIGxh
eWVyLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9
PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKKyAgICAgICAgbGF5ZXItPnNldEF0dGFjaG1lbnQo
RmlsbExheWVyOjppbml0aWFsRmlsbEF0dGFjaG1lbnQobGF5ZXItPnR5cGUoKSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICBzd2l0Y2ggKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVGaXhlZDoK
KyAgICAgICAgICAgIGxheWVyLT5zZXRBdHRhY2htZW50KEZpeGVkQmFja2dyb3VuZEF0dGFjaG1l
bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTY3JvbGw6Cisg
ICAgICAgICAgICBsYXllci0+c2V0QXR0YWNobWVudChTY3JvbGxCYWNrZ3JvdW5kQXR0YWNobWVu
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUxvY2FsOgorICAg
ICAgICAgICAgbGF5ZXItPnNldEF0dGFjaG1lbnQoTG9jYWxCYWNrZ3JvdW5kQXR0YWNobWVudCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICB9Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbENsaXAoRmlsbExh
eWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVU
eXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CisgICAgICAgIGxheWVyLT5zZXRDbGlw
KEZpbGxMYXllcjo6aW5pdGlhbEZpbGxDbGlwKGxheWVyLT50eXBlKCkpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgbGF5ZXItPnNldENsaXAo
KnByaW1pdGl2ZVZhbHVlKTsKK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsQ29t
cG9zaXRlKEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFs
dWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgeworICAgICAgICBs
YXllci0+c2V0Q29tcG9zaXRlKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxDb21wb3NpdGUobGF5ZXIt
PnR5cGUoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghdmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWx1ZSk7CisgICAgbGF5ZXItPnNldENvbXBvc2l0ZSgqcHJpbWl0aXZlVmFsdWUpOworfQorCit2
b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxPcmlnaW4oRmlsbExheWVyKiBsYXllciwgQ1NT
VmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFs
dWU6OkNTU19JTklUSUFMKSB7CisgICAgICAgIGxheWVyLT5zZXRPcmlnaW4oRmlsbExheWVyOjpp
bml0aWFsRmlsbE9yaWdpbihsYXllci0+dHlwZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGxheWVyLT5zZXRPcmlnaW4oKnByaW1pdGl2
ZVZhbHVlKTsKK30KKworU3R5bGVJbWFnZSogQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVJbWFnZShD
U1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPih2YWx1ZSktPmNhY2hlZEltYWdl
KG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCkpOworICAgIGlmICh2YWx1ZS0+aXNJ
bWFnZUdlbmVyYXRvclZhbHVlKCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlKj4odmFsdWUpLT5nZW5lcmF0ZWRJbWFnZSgpOworICAgIHJldHVybiAw
OworfQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxJbWFnZShGaWxsTGF5ZXIqIGxh
eWVyLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9
PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKKyAgICAgICAgbGF5ZXItPnNldEltYWdlKEZpbGxM
YXllcjo6aW5pdGlhbEZpbGxJbWFnZShsYXllci0+dHlwZSgpKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBsYXllci0+c2V0SW1hZ2Uoc3R5bGVJbWFnZSh2YWx1ZSkpOworfQorCit2
b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxSZXBlYXRYKEZpbGxMYXllciogbGF5ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1Zh
bHVlOjpDU1NfSU5JVElBTCkgeworICAgICAgICBsYXllci0+c2V0UmVwZWF0WChGaWxsTGF5ZXI6
OmluaXRpYWxGaWxsUmVwZWF0WChsYXllci0+dHlwZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICBsYXllci0+c2V0UmVwZWF0WCgq
cHJpbWl0aXZlVmFsdWUpOworfQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxSZXBl
YXRZKEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUt
PmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgeworICAgICAgICBsYXll
ci0+c2V0UmVwZWF0WShGaWxsTGF5ZXI6OmluaXRpYWxGaWxsUmVwZWF0WShsYXllci0+dHlwZSgp
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsK
KyAgICBsYXllci0+c2V0UmVwZWF0WSgqcHJpbWl0aXZlVmFsdWUpOworfQorCit2b2lkIENTU1N0
eWxlU2VsZWN0b3I6Om1hcEZpbGxTaXplKEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKK3sKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgbGF5
ZXItPnNldFNpemVUeXBlKFNpemVOb25lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZUNvbnRhaW4pCisgICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShDb250YWluKTsK
KyAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUNvdmVy
KQorICAgICAgICBsYXllci0+c2V0U2l6ZVR5cGUoQ292ZXIpOworICAgIGVsc2UKKyAgICAgICAg
bGF5ZXItPnNldFNpemVUeXBlKFNpemVMZW5ndGgpOworICAgIAorICAgIExlbmd0aFNpemUgYiA9
IEZpbGxMYXllcjo6aW5pdGlhbEZpbGxTaXplTGVuZ3RoKGxheWVyLT50eXBlKCkpOworICAgIAor
ICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMIHx8
IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ29udGFpbgorICAgICAgICB8
fCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUNvdmVyKSB7CisgICAgICAg
IGxheWVyLT5zZXRTaXplTGVuZ3RoKGIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
UGFpciogcGFpciA9IHByaW1pdGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKTsKKyAgICBpZiAoIXBh
aXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3Qg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXItPmZpcnN0KCkpOworICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHBhaXItPnNlY29uZCgpKTsKKyAgICAKKyAgICBpZiAoIWZpcnN0IHx8ICFzZWNvbmQpCisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgTGVuZ3RoIGZpcnN0TGVuZ3RoLCBzZWNvbmRMZW5n
dGg7CisgICAgaW50IGZpcnN0VHlwZSA9IGZpcnN0LT5wcmltaXRpdmVUeXBlKCk7CisgICAgaW50
IHNlY29uZFR5cGUgPSBzZWNvbmQtPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAKKyAgICBmbG9hdCB6
b29tRmFjdG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworCisgICAgaWYgKGZpcnN0VHlw
ZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05PV04pCisgICAgICAgIGZpcnN0TGVuZ3Ro
ID0gTGVuZ3RoKEF1dG8pOworICAgIGVsc2UgaWYgKENTU1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRU
eXBlTGVuZ3RoKGZpcnN0VHlwZSkpCisgICAgICAgIGZpcnN0TGVuZ3RoID0gTGVuZ3RoKGZpcnN0
LT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwg
em9vbUZhY3RvciksIEZpeGVkKTsKKyAgICBlbHNlIGlmIChmaXJzdFR5cGUgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQorICAgICAgICBmaXJzdExlbmd0aCA9IExlbmd0aChm
aXJzdC0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgZWxzZQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoc2Vjb25kVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05P
V04pCisgICAgICAgIHNlY29uZExlbmd0aCA9IExlbmd0aChBdXRvKTsKKyAgICBlbHNlIGlmIChD
U1NQcmltaXRpdmVWYWx1ZTo6aXNVbml0VHlwZUxlbmd0aChzZWNvbmRUeXBlKSkKKyAgICAgICAg
c2Vjb25kTGVuZ3RoID0gTGVuZ3RoKHNlY29uZC0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChz
dHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCk7CisgICAgZWxz
ZSBpZiAoc2Vjb25kVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCisg
ICAgICAgIHNlY29uZExlbmd0aCA9IExlbmd0aChzZWNvbmQtPmdldERvdWJsZVZhbHVlKCksIFBl
cmNlbnQpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGIuc2V0V2lkdGgo
Zmlyc3RMZW5ndGgpOworICAgIGIuc2V0SGVpZ2h0KHNlY29uZExlbmd0aCk7CisgICAgbGF5ZXIt
PnNldFNpemVMZW5ndGgoYik7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFhQ
b3NpdGlvbihGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZh
bHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKKyAgICAgICAg
bGF5ZXItPnNldFhQb3NpdGlvbihGaWxsTGF5ZXI6OmluaXRpYWxGaWxsWFBvc2l0aW9uKGxheWVy
LT50eXBlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIXZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHpvb21G
YWN0b3IgPSBtX3N0eWxlLT5lZmZlY3RpdmVab29tKCk7CisKKyAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVl
KTsKKyAgICBMZW5ndGggbDsKKyAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRp
dmVUeXBlKCk7CisgICAgaWYgKENTU1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5
cGUpKQorICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50
Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvciksIEZpeGVk
KTsKKyAgICBlbHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFH
RSkKKyAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwg
UGVyY2VudCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm47CisgICAgbGF5ZXItPnNldFhQb3Np
dGlvbihsKTsKK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsWVBvc2l0aW9uKEZp
bGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmNzc1Zh
bHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgeworICAgICAgICBsYXllci0+c2V0
WVBvc2l0aW9uKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxZUG9zaXRpb24obGF5ZXItPnR5cGUoKSkp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgem9vbUZhY3RvciA9IG1f
c3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAg
ICBMZW5ndGggbDsKKyAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBl
KCk7CisgICAgaWYgKENTU1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5cGUpKQor
ICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVu
Z3RoKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvciksIEZpeGVkKTsKKyAg
ICBlbHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKKyAg
ICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2Vu
dCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm47CisgICAgbGF5ZXItPnNldFlQb3NpdGlvbihs
KTsKK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25EZWxheShBbmltYXRp
b24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+Y3NzVmFs
dWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CisgICAgICAgIGFuaW1hdGlvbi0+
c2V0RGVsYXkoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRGVsYXkoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpCisgICAg
ICAgIGFuaW1hdGlvbi0+c2V0RGVsYXkocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSk7
CisgICAgZWxzZQorICAgICAgICBhbmltYXRpb24tPnNldERlbGF5KHByaW1pdGl2ZVZhbHVlLT5n
ZXRGbG9hdFZhbHVlKCkvMTAwMC4wZik7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFw
QW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3sK
KyAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkg
eworICAgICAgICBsYXllci0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlv
bkRpcmVjdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWUpOworICAgIGxheWVyLT5zZXREaXJlY3Rpb24ocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVBbHRlcm5hdGUgPyBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFs
dGVybmF0ZSA6IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uTm9ybWFsKTsKK30KKwordm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qIGFuaW1h
dGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkg
PT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRp
b24oQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRHVyYXRpb24oKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykKKyAgICAgICAg
YW5pbWF0aW9uLT5zZXREdXJhdGlvbihwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKTsK
KyAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTVMpCisgICAgICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24ocHJpbWl0
aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKS8xMDAwLjBmKTsKK30KKwordm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjptYXBBbmltYXRpb25GaWxsTW9kZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSog
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NT
X0lOSVRJQUwpIHsKKyAgICAgICAgbGF5ZXItPnNldEZpbGxNb2RlKEFuaW1hdGlvbjo6aW5pdGlh
bEFuaW1hdGlvbkZpbGxNb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZSk7CisgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkg
eworICAgIGNhc2UgQ1NTVmFsdWVOb25lOgorICAgICAgICBsYXllci0+c2V0RmlsbE1vZGUoQW5p
bWF0aW9uRmlsbE1vZGVOb25lKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZUZv
cndhcmRzOgorICAgICAgICBsYXllci0+c2V0RmlsbE1vZGUoQW5pbWF0aW9uRmlsbE1vZGVGb3J3
YXJkcyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVCYWNrd2FyZHM6CisgICAg
ICAgIGxheWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb25GaWxsTW9kZUJhY2t3YXJkcyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVCb3RoOgorICAgICAgICBsYXllci0+c2V0Rmls
bE1vZGUoQW5pbWF0aW9uRmlsbE1vZGVCb3RoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
Cit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KEFuaW1h
dGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5jc3NW
YWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKKyAgICAgICAgYW5pbWF0aW9u
LT5zZXRJdGVyYXRpb25Db3VudChBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25JdGVyYXRpb25D
b3VudCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW5maW5pdGUp
CisgICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQoLTEpOworICAgIGVsc2UKKyAg
ICAgICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudChpbnQocHJpbWl0aXZlVmFsdWUtPmdl
dEZsb2F0VmFsdWUoKSkpOworfQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlv
bk5hbWUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CisgICAgICAgIGxh
eWVyLT5zZXROYW1lKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbk5hbWUoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAKKyAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQorICAgICAgICBsYXll
ci0+c2V0SXNOb25lQW5pbWF0aW9uKHRydWUpOworICAgIGVsc2UKKyAgICAgICAgbGF5ZXItPnNl
dE5hbWUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworfQorCit2b2lkIENTU1N0
eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qIGxheWVyLCBDU1NW
YWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1
ZTo6Q1NTX0lOSVRJQUwpIHsKKyAgICAgICAgbGF5ZXItPnNldFBsYXlTdGF0ZShBbmltYXRpb246
OmluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICBFQW5pbVBsYXlTdGF0ZSBwbGF5U3RhdGUgPSAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVQYXVzZWQpID8gQW5pbVBsYXlT
dGF0ZVBhdXNlZCA6IEFuaW1QbGF5U3RhdGVQbGF5aW5nOworICAgIGxheWVyLT5zZXRQbGF5U3Rh
dGUocGxheVN0YXRlKTsKK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25Q
cm9wZXJ0eShBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CisgICAg
ICAgIGFuaW1hdGlvbi0+c2V0UHJvcGVydHkoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uUHJv
cGVydHkoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUp
OworICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUFsbCkKKyAg
ICAgICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShjQW5pbWF0ZUFsbCk7CisgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQorICAgICAgICBhbmlt
YXRpb24tPnNldFByb3BlcnR5KGNBbmltYXRlTm9uZSk7CisgICAgZWxzZQorICAgICAgICBhbmlt
YXRpb24tPnNldFByb3BlcnR5KHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpKSk7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0
aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElB
TCkgeworICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbjo6aW5p
dGlhbEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CisgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpOworICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
KSB7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGluZWFyOgorICAgICAgICAgICAgICAgIGFu
aW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oVGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVu
Y3Rpb24sIDAuMCwgMC4wLCAxLjAsIDEuMCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2U6CisgICAgICAgICAgICAgICAgYW5pbWF0aW9uLT5z
ZXRUaW1pbmdGdW5jdGlvbihUaW1pbmdGdW5jdGlvbigpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlSW46CisgICAgICAgICAgICAgICAgYW5p
bWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWlu
Z0Z1bmN0aW9uLCAwLjQyLCAwLjAsIDEuMCwgMS4wKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlRWFzZU91dDoKKyAgICAgICAgICAgICAgICBhbmlt
YXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb24sIDAuMCwgMC4wLCAwLjU4LCAxLjApKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlSW5PdXQ6CisgICAgICAgICAgICAgICAgYW5p
bWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWlu
Z0Z1bmN0aW9uLCAwLjQyLCAwLjAsIDAuNTgsIDEuMCkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKHZhbHVl
LT5pc1RpbWluZ0Z1bmN0aW9uVmFsdWUoKSkgeworICAgICAgICBDU1NUaW1pbmdGdW5jdGlvblZh
bHVlKiB0aW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUq
Pih2YWx1ZSk7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oVGltaW5nRnVu
Y3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiwgdGltaW5nRnVuY3Rpb24tPngxKCksIHRp
bWluZ0Z1bmN0aW9uLT55MSgpLCB0aW1pbmdGdW5jdGlvbi0+eDIoKSwgdGltaW5nRnVuY3Rpb24t
PnkyKCkpKTsKKyAgICB9Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwTmluZVBpZWNl
SW1hZ2UoQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCit7CisgICAgLy8g
SWYgd2UncmUgYSBwcmltaXRpdmUgdmFsdWUsIHRoZW4gd2UgYXJlICJub25lIiBhbmQgZG9uJ3Qg
bmVlZCB0byBhbHRlciB0aGUgZW1wdHkgaW1hZ2UgYXQgYWxsLgorICAgIGlmICghdmFsdWUgfHwg
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUmV0
cmlldmUgdGhlIGJvcmRlciBpbWFnZSB2YWx1ZS4KKyAgICBDU1NCb3JkZXJJbWFnZVZhbHVlKiBi
b3JkZXJJbWFnZSA9IHN0YXRpY19jYXN0PENTU0JvcmRlckltYWdlVmFsdWUqPih2YWx1ZSk7Cisg
ICAgCisgICAgLy8gU2V0IHRoZSBpbWFnZSAodGhpcyBraWNrcyBvZmYgdGhlIGxvYWQpLgorICAg
IGltYWdlLnNldEltYWdlKHN0eWxlSW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdlVmFsdWUoKSkpOwor
CisgICAgLy8gU2V0IHVwIGEgbGVuZ3RoIGJveCB0byByZXByZXNlbnQgb3VyIGltYWdlIHNsaWNl
cy4KKyAgICBMZW5ndGhCb3ggbDsKKyAgICBSZWN0KiByID0gYm9yZGVySW1hZ2UtPm1faW1hZ2VT
bGljZVJlY3QuZ2V0KCk7CisgICAgaWYgKHItPnRvcCgpLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQorICAgICAgICBsLm1fdG9wID0gTGVuZ3Ro
KHItPnRvcCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKKyAgICBlbHNlCisgICAgICAg
IGwubV90b3AgPSBMZW5ndGgoci0+dG9wKCktPmdldEludFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSKSwgRml4ZWQpOworICAgIGlmIChyLT5ib3R0b20oKS0+cHJpbWl0aXZlVHlw
ZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKKyAgICAgICAgbC5tX2Jv
dHRvbSA9IExlbmd0aChyLT5ib3R0b20oKS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7Cisg
ICAgZWxzZQorICAgICAgICBsLm1fYm90dG9tID0gTGVuZ3RoKChpbnQpci0+Ym90dG9tKCktPmdl
dEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBGaXhlZCk7CisgICAg
aWYgKHItPmxlZnQoKS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEVSQ0VOVEFHRSkKKyAgICAgICAgbC5tX2xlZnQgPSBMZW5ndGgoci0+bGVmdCgpLT5nZXREb3Vi
bGVWYWx1ZSgpLCBQZXJjZW50KTsKKyAgICBlbHNlCisgICAgICAgIGwubV9sZWZ0ID0gTGVuZ3Ro
KHItPmxlZnQoKS0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBG
aXhlZCk7CisgICAgaWYgKHItPnJpZ2h0KCktPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCisgICAgICAgIGwubV9yaWdodCA9IExlbmd0aChyLT5y
aWdodCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKKyAgICBlbHNlCisgICAgICAgIGwu
bV9yaWdodCA9IExlbmd0aChyLT5yaWdodCgpLT5nZXRJbnRWYWx1ZShDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUiksIEZpeGVkKTsKKyAgICBpbWFnZS5zZXRTbGljZXMobCk7CisKKyAgICAv
LyBTZXQgdGhlIGFwcHJvcHJpYXRlIHJ1bGVzIGZvciBzdHJldGNoL3JvdW5kL3JlcGVhdCBvZiB0
aGUgc2xpY2VzCisgICAgRU5pbmVQaWVjZUltYWdlUnVsZSBob3Jpem9udGFsUnVsZTsKKyAgICBz
d2l0Y2ggKGJvcmRlckltYWdlLT5tX2hvcml6b250YWxTaXplUnVsZSkgeworICAgICAgICBjYXNl
IENTU1ZhbHVlU3RyZXRjaDoKKyAgICAgICAgICAgIGhvcml6b250YWxSdWxlID0gU3RyZXRjaElt
YWdlUnVsZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlUm91bmQ6
CisgICAgICAgICAgICBob3Jpem9udGFsUnVsZSA9IFJvdW5kSW1hZ2VSdWxlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IC8vIENTU1ZhbHVlUmVwZWF0CisgICAgICAgICAg
ICBob3Jpem9udGFsUnVsZSA9IFJlcGVhdEltYWdlUnVsZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBpbWFnZS5zZXRIb3Jpem9udGFsUnVsZShob3Jpem9udGFsUnVsZSk7CisKKyAg
ICBFTmluZVBpZWNlSW1hZ2VSdWxlIHZlcnRpY2FsUnVsZTsKKyAgICBzd2l0Y2ggKGJvcmRlcklt
YWdlLT5tX3ZlcnRpY2FsU2l6ZVJ1bGUpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVN0cmV0Y2g6
CisgICAgICAgICAgICB2ZXJ0aWNhbFJ1bGUgPSBTdHJldGNoSW1hZ2VSdWxlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVSb3VuZDoKKyAgICAgICAgICAgIHZlcnRp
Y2FsUnVsZSA9IFJvdW5kSW1hZ2VSdWxlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6IC8vIENTU1ZhbHVlUmVwZWF0CisgICAgICAgICAgICB2ZXJ0aWNhbFJ1bGUgPSBSZXBl
YXRJbWFnZVJ1bGU7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgaW1hZ2Uuc2V0VmVy
dGljYWxSdWxlKHZlcnRpY2FsUnVsZSk7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hl
Y2tGb3JUZXh0U2l6ZUFkanVzdCgpCit7CisgICAgaWYgKG1fc3R5bGUtPnRleHRTaXplQWRqdXN0
KCkpCisgICAgICAgIHJldHVybjsKKyAKKyAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2Ny
aXB0aW9uKG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKKyAgICBuZXdGb250RGVzY3JpcHRp
b24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkpOwor
ICAgIG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOworfQor
Cit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSog
c3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3sKKyAgICBpZiAoc3R5bGUtPmVmZmVj
dGl2ZVpvb20oKSA9PSBwYXJlbnRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBjaGlsZEZvbnQgPSBzdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlv
bihjaGlsZEZvbnQpOworICAgIHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbiwgY2hpbGRG
b250LnNwZWNpZmllZFNpemUoKSk7CisgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdG
b250RGVzY3JpcHRpb24pOworfQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrRm9yR2Vu
ZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSkKK3sKKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5m
b250RGVzY3JpcHRpb24oKTsKKyAgCisgICAgaWYgKGNoaWxkRm9udC5pc0Fic29sdXRlU2l6ZSgp
IHx8ICFwYXJlbnRTdHlsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBwYXJlbnRGb250ID0gcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAg
IGlmIChjaGlsZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID09IHBhcmVudEZvbnQudXNlRml4
ZWREZWZhdWx0U2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGb3Igbm93LCBsdW1w
IGFsbCBmYW1pbGllcyBidXQgbW9ub3NwYWNlIHRvZ2V0aGVyLgorICAgIGlmIChjaGlsZEZvbnQu
Z2VuZXJpY0ZhbWlseSgpICE9IEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5ICYmCisg
ICAgICAgIHBhcmVudEZvbnQuZ2VuZXJpY0ZhbWlseSgpICE9IEZvbnREZXNjcmlwdGlvbjo6TW9u
b3NwYWNlRmFtaWx5KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBrbm93IHRoZSBwYXJl
bnQgaXMgbW9ub3NwYWNlIG9yIHRoZSBjaGlsZCBpcyBtb25vc3BhY2UsIGFuZCB0aGF0IGZvbnQK
KyAgICAvLyBzaXplIHdhcyB1bnNwZWNpZmllZC4gIFdlIHdhbnQgdG8gc2NhbGUgb3VyIGZvbnQg
c2l6ZSBhcyBhcHByb3ByaWF0ZS4KKyAgICAvLyBJZiB0aGUgZm9udCB1c2VzIGEga2V5d29yZCBz
aXplLCB0aGVuIHdlIHJlZmV0Y2ggZnJvbSB0aGUgdGFibGUgcmF0aGVyIHRoYW4KKyAgICAvLyBt
dWx0aXBseWluZyBieSBvdXIgc2NhbGUgZmFjdG9yLgorICAgIGZsb2F0IHNpemU7CisgICAgaWYg
KGNoaWxkRm9udC5rZXl3b3JkU2l6ZSgpKQorICAgICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3
b3JkKG1fY2hlY2tlci5tX2RvY3VtZW50LCBDU1NWYWx1ZVh4U21hbGwgKyBjaGlsZEZvbnQua2V5
d29yZFNpemUoKSAtIDEsIGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkpOworICAgIGVs
c2UgeworICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NoZWNrZXIubV9kb2N1bWVudC0+
c2V0dGluZ3MoKTsKKyAgICAgICAgZmxvYXQgZml4ZWRTY2FsZUZhY3RvciA9IHNldHRpbmdzCisg
ICAgICAgICAgICA/IHN0YXRpY19jYXN0PGZsb2F0PihzZXR0aW5ncy0+ZGVmYXVsdEZpeGVkRm9u
dFNpemUoKSkgLyBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCkKKyAgICAgICAgICAgIDogMTsK
KyAgICAgICAgc2l6ZSA9IHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID8KKyAgICAg
ICAgICAgICAgICBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpIC8gZml4ZWRTY2FsZUZhY3RvciA6
CisgICAgICAgICAgICAgICAgY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSAqIGZpeGVkU2NhbGVG
YWN0b3I7CisgICAgfQorCisgICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihj
aGlsZEZvbnQpOworICAgIHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7Cisg
ICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOworfQorCit2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uLCBmbG9hdCBzaXplKQoreworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZp
ZWRTaXplKHNpemUpOworCisgICAgYm9vbCB1c2VTVkdab29tUnVsZXMgPSBtX2VsZW1lbnQgJiYg
bV9lbGVtZW50LT5pc1NWR0VsZW1lbnQoKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0
ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKG1fY2hlY2tlci5tX2RvY3Vt
ZW50LCBtX3N0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6
ZSwgdXNlU1ZHWm9vbVJ1bGVzKSk7IAorfQorCitmbG9hdCBDU1NTdHlsZVNlbGVjdG9yOjpnZXRD
b21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlclN0
eWxlKiBzdHlsZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9v
bCB1c2VTVkdab29tUnVsZXMpCit7CisgICAgZmxvYXQgem9vbUZhY3RvciA9IDEuMGY7CisgICAg
aWYgKCF1c2VTVkdab29tUnVsZXMpIHsKKyAgICAgICAgem9vbUZhY3RvciA9IHN0eWxlLT5lZmZl
Y3RpdmVab29tKCk7CisgICAgICAgIGlmIChkb2N1bWVudC0+dmlldygpICYmIGRvY3VtZW50LT52
aWV3KCktPnNob3VsZEFwcGx5VGV4dFpvb20oKSkKKyAgICAgICAgICAgIHpvb21GYWN0b3IgKj0g
ZG9jdW1lbnQtPnZpZXcoKS0+dGV4dFpvb21GYWN0b3IoKTsKKyAgICB9CisKKyAgICAvLyBXZSBz
dXBwb3J0IHR3byB0eXBlcyBvZiBtaW5pbXVtIGZvbnQgc2l6ZS4gIFRoZSBmaXJzdCBpcyBhIGhh
cmQgb3ZlcnJpZGUgdGhhdCBhcHBsaWVzIHRvCisgICAgLy8gYWxsIGZvbnRzLiAgVGhpcyBpcyAi
bWluU2l6ZS4iICBUaGUgc2Vjb25kIHR5cGUgb2YgbWluaW11bSBmb250IHNpemUgaXMgYSAic21h
cnQgbWluaW11bSIKKyAgICAvLyB0aGF0IGlzIGFwcGxpZWQgb25seSB3aGVuIHRoZSBXZWIgcGFn
ZSBjYW4ndCBrbm93IHdoYXQgc2l6ZSBpdCByZWFsbHkgYXNrZWQgZm9yLCBlLmcuLAorICAgIC8v
IHdoZW4gaXQgdXNlcyBsb2dpY2FsIHNpemVzIGxpa2UgInNtYWxsIiBvciBleHByZXNzZXMgdGhl
IGZvbnQtc2l6ZSBhcyBhIHBlcmNlbnRhZ2Ugb2YKKyAgICAvLyB0aGUgdXNlcidzIGRlZmF1bHQg
Zm9udCBzZXR0aW5nLgorCisgICAgLy8gV2l0aCB0aGUgc21hcnQgbWluaW11bSwgd2UgbmV2ZXIg
d2FudCB0byBnZXQgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIGZvbnQgc2l6ZSB0byBrZWVwIGZv
bnRzIHJlYWRhYmxlLgorICAgIC8vIEhvd2V2ZXIgd2UgYWx3YXlzIGFsbG93IHRoZSBwYWdlIHRv
IHNldCBhbiBleHBsaWNpdCBwaXhlbCBzaXplIHRoYXQgaXMgc21hbGxlciwKKyAgICAvLyBzaW5j
ZSBzaXRlcyB3aWxsIG1pcy1yZW5kZXIgb3RoZXJ3aXNlIChlLmcuLCBodHRwOi8vd3d3LmdhbWVz
cG90LmNvbSB3aXRoIGEgOXB4IG1pbmltdW0pLgorICAgIAorICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IGRvY3VtZW50LT5zZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgIHJl
dHVybiAxLjBmOworCisgICAgaW50IG1pblNpemUgPSBzZXR0aW5ncy0+bWluaW11bUZvbnRTaXpl
KCk7CisgICAgaW50IG1pbkxvZ2ljYWxTaXplID0gc2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9u
dFNpemUoKTsKKyAgICBmbG9hdCB6b29tZWRTaXplID0gc3BlY2lmaWVkU2l6ZSAqIHpvb21GYWN0
b3I7CisKKyAgICAvLyBBcHBseSB0aGUgaGFyZCBtaW5pbXVtIGZpcnN0LiAgV2Ugb25seSBhcHBs
eSB0aGUgaGFyZCBtaW5pbXVtIGlmIGFmdGVyIHpvb21pbmcgd2UncmUgc3RpbGwgdG9vIHNtYWxs
LgorICAgIGlmICh6b29tZWRTaXplIDwgbWluU2l6ZSkKKyAgICAgICAgem9vbWVkU2l6ZSA9IG1p
blNpemU7CisKKyAgICAvLyBOb3cgYXBwbHkgdGhlICJzbWFydCBtaW5pbXVtLiIgIFRoaXMgbWlu
aW11bSBpcyBhbHNvIG9ubHkgYXBwbGllZCBpZiB3ZSdyZSBzdGlsbCB0b28gc21hbGwKKyAgICAv
LyBhZnRlciB6b29taW5nLiAgVGhlIGZvbnQgc2l6ZSBtdXN0IGVpdGhlciBiZSByZWxhdGl2ZSB0
byB0aGUgdXNlciBkZWZhdWx0IG9yIHRoZSBvcmlnaW5hbCBzaXplCisgICAgLy8gbXVzdCBoYXZl
IGJlZW4gYWNjZXB0YWJsZS4gIEluIG90aGVyIHdvcmRzLCB3ZSBvbmx5IGFwcGx5IHRoZSBzbWFy
dCBtaW5pbXVtIHdoZW5ldmVyIHdlJ3JlIHBvc2l0aXZlCisgICAgLy8gZG9pbmcgc28gd29uJ3Qg
ZGlzcnVwdCB0aGUgbGF5b3V0LgorICAgIGlmICh6b29tZWRTaXplIDwgbWluTG9naWNhbFNpemUg
JiYgKHNwZWNpZmllZFNpemUgPj0gbWluTG9naWNhbFNpemUgfHwgIWlzQWJzb2x1dGVTaXplKSkK
KyAgICAgICAgem9vbWVkU2l6ZSA9IG1pbkxvZ2ljYWxTaXplOworICAgIAorICAgIC8vIEFsc28g
Y2xhbXAgdG8gYSByZWFzb25hYmxlIG1heGltdW0gdG8gcHJldmVudCBpbnNhbmUgZm9udCBzaXpl
cyBmcm9tIGNhdXNpbmcgY3Jhc2hlcyBvbiB2YXJpb3VzCisgICAgLy8gcGxhdGZvcm1zIChJJ20g
bG9va2luZyBhdCB5b3UsIFdpbmRvd3MuKQorICAgIHJldHVybiBtaW4oMTAwMDAwMC4wZiwgbWF4
KHpvb21lZFNpemUsIDEuMGYpKTsKK30KKworY29uc3QgaW50IGZvbnRTaXplVGFibGVNYXggPSAx
NjsKK2NvbnN0IGludCBmb250U2l6ZVRhYmxlTWluID0gOTsKK2NvbnN0IGludCB0b3RhbEtleXdv
cmRzID0gODsKKworLy8gV2luSUUvTmF2NCB0YWJsZSBmb3IgZm9udCBzaXplcy4gIERlc2lnbmVk
IHRvIG1hdGNoIHRoZSBsZWdhY3kgZm9udCBtYXBwaW5nIHN5c3RlbSBvZiBIVE1MLgorc3RhdGlj
IGNvbnN0IGludCBxdWlya3NGb250U2l6ZVRhYmxlW2ZvbnRTaXplVGFibGVNYXggLSBmb250U2l6
ZVRhYmxlTWluICsgMV1bdG90YWxLZXl3b3Jkc10gPQoreworICAgICAgeyA5LCAgICA5LCAgICAg
OSwgICAgIDksICAgIDExLCAgICAxNCwgICAgMTgsICAgIDI4IH0sCisgICAgICB7IDksICAgIDks
ICAgICA5LCAgICAxMCwgICAgMTIsICAgIDE1LCAgICAyMCwgICAgMzEgfSwKKyAgICAgIHsgOSwg
ICAgOSwgICAgIDksICAgIDExLCAgICAxMywgICAgMTcsICAgIDIyLCAgICAzNCB9LAorICAgICAg
eyA5LCAgICA5LCAgICAxMCwgICAgMTIsICAgIDE0LCAgICAxOCwgICAgMjQsICAgIDM3IH0sCisg
ICAgICB7IDksICAgIDksICAgIDEwLCAgICAxMywgICAgMTYsICAgIDIwLCAgICAyNiwgICAgNDAg
fSwgLy8gZml4ZWQgZm9udCBkZWZhdWx0ICgxMykKKyAgICAgIHsgOSwgICAgOSwgICAgMTEsICAg
IDE0LCAgICAxNywgICAgMjEsICAgIDI4LCAgICA0MiB9LAorICAgICAgeyA5LCAgIDEwLCAgICAx
MiwgICAgMTUsICAgIDE3LCAgICAyMywgICAgMzAsICAgIDQ1IH0sCisgICAgICB7IDksICAgMTAs
ICAgIDEzLCAgICAxNiwgICAgMTgsICAgIDI0LCAgICAzMiwgICAgNDggfSAgLy8gcHJvcG9ydGlv
bmFsIGZvbnQgZGVmYXVsdCAoMTYpCit9OworLy8gSFRNTCAgICAgICAxICAgICAgMiAgICAgIDMg
ICAgICA0ICAgICAgNSAgICAgIDYgICAgICA3CisvLyBDU1MgIHh4cyAgIHhzICAgICBzICAgICAg
bSAgICAgIGwgICAgIHhsICAgICB4eGwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB8Cisv
LyAgICAgICAgICAgICAgICAgICAgICB1c2VyIHByZWYKKworLy8gU3RyaWN0IG1vZGUgdGFibGUg
bWF0Y2hlcyBNYWNJRSBhbmQgTW96aWxsYSdzIHNldHRpbmdzIGV4YWN0bHkuCitzdGF0aWMgY29u
c3QgaW50IHN0cmljdEZvbnRTaXplVGFibGVbZm9udFNpemVUYWJsZU1heCAtIGZvbnRTaXplVGFi
bGVNaW4gKyAxXVt0b3RhbEtleXdvcmRzXSA9Cit7CisgICAgICB7IDksICAgIDksICAgICA5LCAg
ICAgOSwgICAgMTEsICAgIDE0LCAgICAxOCwgICAgMjcgfSwKKyAgICAgIHsgOSwgICAgOSwgICAg
IDksICAgIDEwLCAgICAxMiwgICAgMTUsICAgIDIwLCAgICAzMCB9LAorICAgICAgeyA5LCAgICA5
LCAgICAxMCwgICAgMTEsICAgIDEzLCAgICAxNywgICAgMjIsICAgIDMzIH0sCisgICAgICB7IDks
ICAgIDksICAgIDEwLCAgICAxMiwgICAgMTQsICAgIDE4LCAgICAyNCwgICAgMzYgfSwKKyAgICAg
IHsgOSwgICAxMCwgICAgMTIsICAgIDEzLCAgICAxNiwgICAgMjAsICAgIDI2LCAgICAzOSB9LCAv
LyBmaXhlZCBmb250IGRlZmF1bHQgKDEzKQorICAgICAgeyA5LCAgIDEwLCAgICAxMiwgICAgMTQs
ICAgIDE3LCAgICAyMSwgICAgMjgsICAgIDQyIH0sCisgICAgICB7IDksICAgMTAsICAgIDEzLCAg
ICAxNSwgICAgMTgsICAgIDIzLCAgICAzMCwgICAgNDUgfSwKKyAgICAgIHsgOSwgICAxMCwgICAg
MTMsICAgIDE2LCAgICAxOCwgICAgMjQsICAgIDMyLCAgICA0OCB9ICAvLyBwcm9wb3J0aW9uYWwg
Zm9udCBkZWZhdWx0ICgxNikKK307CisvLyBIVE1MICAgICAgIDEgICAgICAyICAgICAgMyAgICAg
IDQgICAgICA1ICAgICAgNiAgICAgIDcKKy8vIENTUyAgeHhzICAgeHMgICAgIHMgICAgICBtICAg
ICAgbCAgICAgeGwgICAgIHh4bAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy8vICAg
ICAgICAgICAgICAgICAgICAgIHVzZXIgcHJlZgorCisvLyBGb3IgdmFsdWVzIG91dHNpZGUgdGhl
IHJhbmdlIG9mIHRoZSB0YWJsZSwgd2UgdXNlIFRvZGQgRmFocm5lcidzIHN1Z2dlc3RlZCBzY2Fs
ZQorLy8gZmFjdG9ycyBmb3IgZWFjaCBrZXl3b3JkIHZhbHVlLgorc3RhdGljIGNvbnN0IGZsb2F0
IGZvbnRTaXplRmFjdG9yc1t0b3RhbEtleXdvcmRzXSA9IHsgMC42MGYsIDAuNzVmLCAwLjg5Ziwg
MS4wZiwgMS4yZiwgMS41ZiwgMi4wZiwgMy4wZiB9OworCitmbG9hdCBDU1NTdHlsZVNlbGVjdG9y
Ojpmb250U2l6ZUZvcktleXdvcmQoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQga2V5d29yZCwgYm9v
bCBmaXhlZCkKK3sKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3Mo
KTsKKyAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICByZXR1cm4gMS4wZjsKKworICAgIGJvb2wg
cXVpcmtzTW9kZSA9IGRvY3VtZW50LT5pbkNvbXBhdE1vZGUoKTsKKyAgICBpbnQgbWVkaXVtU2l6
ZSA9IGZpeGVkID8gc2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkgOiBzZXR0aW5ncy0+
ZGVmYXVsdEZvbnRTaXplKCk7CisgICAgaWYgKG1lZGl1bVNpemUgPj0gZm9udFNpemVUYWJsZU1p
biAmJiBtZWRpdW1TaXplIDw9IGZvbnRTaXplVGFibGVNYXgpIHsKKyAgICAgICAgLy8gTG9vayB1
cCB0aGUgZW50cnkgaW4gdGhlIHRhYmxlLgorICAgICAgICBpbnQgcm93ID0gbWVkaXVtU2l6ZSAt
IGZvbnRTaXplVGFibGVNaW47CisgICAgICAgIGludCBjb2wgPSAoa2V5d29yZCAtIENTU1ZhbHVl
WHhTbWFsbCk7CisgICAgICAgIHJldHVybiBxdWlya3NNb2RlID8gcXVpcmtzRm9udFNpemVUYWJs
ZVtyb3ddW2NvbF0gOiBzdHJpY3RGb250U2l6ZVRhYmxlW3Jvd11bY29sXTsKKyAgICB9CisgICAg
CisgICAgLy8gVmFsdWUgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIHRhYmxlLiBBcHBseSB0
aGUgc2NhbGUgZmFjdG9yIGluc3RlYWQuCisgICAgZmxvYXQgbWluTG9naWNhbFNpemUgPSBtYXgo
c2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKSwgMSk7CisgICAgcmV0dXJuIG1heChm
b250U2l6ZUZhY3RvcnNba2V5d29yZCAtIENTU1ZhbHVlWHhTbWFsbF0qbWVkaXVtU2l6ZSwgbWlu
TG9naWNhbFNpemUpOworfQorCitmbG9hdCBDU1NTdHlsZVNlbGVjdG9yOjpsYXJnZXJGb250U2l6
ZShmbG9hdCBzaXplLCBib29sKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdo
ZXJlIHdlIGZhbGwgaW4gdGhlIHNpemUgcmFuZ2VzICh4eC1zbWFsbCB0byB4eHgtbGFyZ2UpIGFu
ZCBzY2FsZSB1cCB0bworICAgIC8vIHRoZSBuZXh0IHNpemUgbGV2ZWwuICAKKyAgICByZXR1cm4g
c2l6ZSAqIDEuMmY7Cit9CisKK2Zsb2F0IENTU1N0eWxlU2VsZWN0b3I6OnNtYWxsZXJGb250U2l6
ZShmbG9hdCBzaXplLCBib29sKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdo
ZXJlIHdlIGZhbGwgaW4gdGhlIHNpemUgcmFuZ2VzICh4eC1zbWFsbCB0byB4eHgtbGFyZ2UpIGFu
ZCBzY2FsZSBkb3duIHRvCisgICAgLy8gdGhlIG5leHQgc2l6ZSBsZXZlbC4gCisgICAgcmV0dXJu
IHNpemUgLyAxLjJmOworfQorCitzdGF0aWMgQ29sb3IgY29sb3JGb3JDU1NWYWx1ZShpbnQgY3Nz
VmFsdWVJZCkKK3sKKyAgICBzdHJ1Y3QgQ29sb3JWYWx1ZSB7CisgICAgICAgIGludCBjc3NWYWx1
ZUlkOworICAgICAgICBSR0JBMzIgY29sb3I7CisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBD
b2xvclZhbHVlIGNvbG9yVmFsdWVzW10gPSB7CisgICAgICAgIHsgQ1NTVmFsdWVBcXVhLCAweEZG
MDBGRkZGIH0sCisgICAgICAgIHsgQ1NTVmFsdWVCbGFjaywgMHhGRjAwMDAwMCB9LAorICAgICAg
ICB7IENTU1ZhbHVlQmx1ZSwgMHhGRjAwMDBGRiB9LAorICAgICAgICB7IENTU1ZhbHVlRnVjaHNp
YSwgMHhGRkZGMDBGRiB9LAorICAgICAgICB7IENTU1ZhbHVlR3JheSwgMHhGRjgwODA4MCB9LAor
ICAgICAgICB7IENTU1ZhbHVlR3JlZW4sIDB4RkYwMDgwMDAgIH0sCisgICAgICAgIHsgQ1NTVmFs
dWVHcmV5LCAweEZGODA4MDgwIH0sCisgICAgICAgIHsgQ1NTVmFsdWVMaW1lLCAweEZGMDBGRjAw
IH0sCisgICAgICAgIHsgQ1NTVmFsdWVNYXJvb24sIDB4RkY4MDAwMDAgfSwKKyAgICAgICAgeyBD
U1NWYWx1ZU5hdnksIDB4RkYwMDAwODAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZU9saXZlLCAweEZG
ODA4MDAwICB9LAorICAgICAgICB7IENTU1ZhbHVlT3JhbmdlLCAweEZGRkZBNTAwIH0sCisgICAg
ICAgIHsgQ1NTVmFsdWVQdXJwbGUsIDB4RkY4MDAwODAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZVJl
ZCwgMHhGRkZGMDAwMCB9LAorICAgICAgICB7IENTU1ZhbHVlU2lsdmVyLCAweEZGQzBDMEMwIH0s
CisgICAgICAgIHsgQ1NTVmFsdWVUZWFsLCAweEZGMDA4MDgwICB9LAorICAgICAgICB7IENTU1Zh
bHVlVHJhbnNwYXJlbnQsIDB4MDAwMDAwMDAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZVdoaXRlLCAw
eEZGRkZGRkZGIH0sCisgICAgICAgIHsgQ1NTVmFsdWVZZWxsb3csIDB4RkZGRkZGMDAgfSwKKyAg
ICAgICAgeyAwLCAwIH0KKyAgICB9OworCisgICAgZm9yIChjb25zdCBDb2xvclZhbHVlKiBjb2wg
PSBjb2xvclZhbHVlczsgY29sLT5jc3NWYWx1ZUlkOyArK2NvbCkgeworICAgICAgICBpZiAoY29s
LT5jc3NWYWx1ZUlkID09IGNzc1ZhbHVlSWQpCisgICAgICAgICAgICByZXR1cm4gY29sLT5jb2xv
cjsKKyAgICB9CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVt
Q29sb3IoY3NzVmFsdWVJZCk7Cit9CisKK0NvbG9yIENTU1N0eWxlU2VsZWN0b3I6OmdldENvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSkKK3sK
KyAgICBDb2xvciBjb2w7CisgICAgaW50IGlkZW50ID0gcHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCk7CisgICAgaWYgKGlkZW50KSB7CisgICAgICAgIGlmIChpZGVudCA9PSBDU1NWYWx1ZVdlYmtp
dFRleHQpCisgICAgICAgICAgICBjb2wgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnRleHRDb2xv
cigpOworICAgICAgICBlbHNlIGlmIChpZGVudCA9PSBDU1NWYWx1ZVdlYmtpdExpbmspCisgICAg
ICAgICAgICBjb2wgPSBtX2VsZW1lbnQtPmlzTGluaygpICYmIG1fY2hlY2tlci5tX21hdGNoVmlz
aXRlZFBzZXVkb0NsYXNzID8gbV9lbGVtZW50LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua0NvbG9y
KCkgOiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xvcigpOworICAgICAgICBlbHNlIGlm
IChpZGVudCA9PSBDU1NWYWx1ZVdlYmtpdEFjdGl2ZWxpbmspCisgICAgICAgICAgICBjb2wgPSBt
X2VsZW1lbnQtPmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xvcigpOworICAgICAgICBlbHNlIGlm
IChpZGVudCA9PSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yKQorICAgICAgICAgICAgY29s
ID0gUmVuZGVyVGhlbWU6OmZvY3VzUmluZ0NvbG9yKCk7CisgICAgICAgIGVsc2UgaWYgKGlkZW50
ID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKQorICAgICAgICAgICAgY29sID0gbV9zdHlsZS0+Y29s
b3IoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29sID0gY29sb3JGb3JDU1NWYWx1ZShp
ZGVudCk7CisgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkdCQ09MT1IpCisgICAgICAgIGNvbC5zZXRSR0IocHJp
bWl0aXZlVmFsdWUtPmdldFJHQkEzMlZhbHVlKCkpOworICAgIHJldHVybiBjb2w7Cit9CisKK2Jv
b2wgQ1NTU3R5bGVTZWxlY3Rvcjo6aGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29uc3QgQXRvbWlj
U3RyaW5nICZhdHRybmFtZSkKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RvckF0dHJzLmNvbnRhaW5z
KGF0dHJuYW1lLmltcGwoKSk7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkVmlld3Bv
cnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAqIGV4cHIsIGJv
b2wgcmVzdWx0KQoreworICAgIG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5h
cHBlbmQobmV3IE1lZGlhUXVlcnlSZXN1bHQoKmV4cHIsIHJlc3VsdCkpOworfQorCitib29sIENT
U1N0eWxlU2VsZWN0b3I6OmFmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgpIGNvbnN0Cit7CisgICAg
dW5zaWduZWQgcyA9IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5zaXplKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHM7IGkrKykgeworICAgICAgICBpZiAobV9t
ZWRpdW0tPmV2YWwoJm1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0c1tpXS0+bV9l
eHByZXNzaW9uKSAhPSBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHNbaV0tPm1f
cmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmFsbFZpc2l0
ZWRTdGF0ZUNoYW5nZWQoKQoreworICAgIGlmIChtX2xpbmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0
ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX2Rv
Y3VtZW50OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAg
IGlmIChub2RlLT5pc0xpbmsoKSkKKyAgICAgICAgICAgIG5vZGUtPnNldE5lZWRzU3R5bGVSZWNh
bGMoKTsKKyAgICB9Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2Vy
Ojp2aXNpdGVkU3RhdGVDaGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoKQoreworICAgIGlmICgh
bV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGUuY29udGFpbnModmlzaXRlZEhhc2gpKQorICAg
ICAgICByZXR1cm47CisgICAgZm9yIChOb2RlKiBub2RlID0gbV9kb2N1bWVudDsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcqIGF0dHIgPSBsaW5rQXR0cmlidXRlKG5vZGUpOworICAgICAgICBpZiAoYXR0ciAmJiB2aXNp
dGVkTGlua0hhc2gobV9kb2N1bWVudC0+YmFzZVVSTCgpLCAqYXR0cikgPT0gdmlzaXRlZEhhc2gp
CisgICAgICAgICAgICBub2RlLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgfQorfQorCitz
dGF0aWMgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldFRyYW5zZm9ybU9wZXJh
dGlvblR5cGUoV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zZm9ybU9wZXJhdGlvblR5cGUg
dHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgIHJldHVybiBUcmFu
c2Zvcm1PcGVyYXRpb246OlNDQUxFOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6U0NBTEVfWDsKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRp
b246OlNDQUxFX1k7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxl
WlRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpT
Q0FMRV9aOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZTNEVHJh
bnNmb3JtT3BlcmF0aW9uOiAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVf
M0Q7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjogICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU7
CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zv
cm1PcGVyYXRpb246ICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWDsK
KyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9y
bU9wZXJhdGlvbjogICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9ZOwor
ICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNmb3Jt
T3BlcmF0aW9uOiAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1o7Cisg
ICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZTNEVHJhbnNmb3Jt
T3BlcmF0aW9uOiAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfM0Q7Cisg
ICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbjogICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEU7CisgICAgICAg
IGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb246
ICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWDsKKyAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbjogICAg
ICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9ZOworICAgICAgICBjYXNlIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVaVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAg
cmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1o7CisgICAgICAgIGNhc2UgV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICByZXR1
cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfM0Q7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgICByZXR1cm4g
VHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTa2V3WFRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICAgcmV0dXJuIFRyYW5zZm9y
bU9wZXJhdGlvbjo6U0tFV19YOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJh
dGlvbjo6U0tFV19ZOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6
TUFUUklYOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbjogICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklY
XzNEOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpQZXJzcGVjdGl2ZVRy
YW5zZm9ybU9wZXJhdGlvbjogICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJ
VkU7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlVua25vd25UcmFuc2Zv
cm1PcGVyYXRpb246ICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOworICAg
IH0KKyAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOworfQorCitib29sIENTU1N0
eWxlU2VsZWN0b3I6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUs
IFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgVHJhbnNmb3JtT3Bl
cmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKK3sKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gc3R5bGUg
PyBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpIDogMTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uczsKKyAgICBpZiAoaW5WYWx1ZSAmJiAhaW5WYWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKSB7CisgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVl
TGlzdCo+KGluVmFsdWUpOworICAgICAgICB1bnNpZ25lZCBzaXplID0gbGlzdC0+bGVuZ3RoKCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAg
ICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKiB2YWwgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZSo+KGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3RWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDAp
KTsKKyAgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAodmFsLT5vcGVyYXRpb25UeXBl
KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uOiB7Cisg
ICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzeCA9IDEuMDsKKyAgICAgICAgICAgICAgICAgICAg
ZG91YmxlIHN5ID0gMS4wOworICAgICAgICAgICAgICAgICAgICBpZiAodmFsLT5vcGVyYXRpb25U
eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlv
bikKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFs
dWUoKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7IAorICAgICAgICAgICAgICAgICAgICAg
ICAgc3ggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodmFsLT5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzeSA9IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3kgPSBzeDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMo
KS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShzeCwgc3ksIDEuMCwgZ2V0
VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh2YWwtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNh
c2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbjoKKyAg
ICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZTNEVHJhbnNm
b3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzeCA9IDEuMDsKKyAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIHN5ID0gMS4wOworICAgICAgICAgICAgICAgICAgICBk
b3VibGUgc3ogPSAxLjA7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPm9wZXJhdGlvblR5
cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVaVHJhbnNmb3JtT3BlcmF0aW9u
KQorICAgICAgICAgICAgICAgICAgICAgICAgc3ogPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1
ZSgpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwtPm9wZXJhdGlvblR5cGUoKSA9
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAg
ICAgICAgICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsgCisgICAgICAgICAgICAgICAgICAgICAgICBzeCA9
IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmFsLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxl
WFRyYW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2
YWwtPmxlbmd0aCgpID4gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3ogPSB0aGlyZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFs
LT5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzeSA9IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3kgPSBzeDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShzeCwgc3ksIHN6LCBnZXRUcmFuc2Zvcm1P
cGVyYXRpb25UeXBlKHZhbC0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAg
ICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1P
cGVyYXRpb246CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgICAgICAgICBib29s
IG9rID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIHR4ID0gTGVuZ3RoKDAsIEZp
eGVkKTsKKyAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIHR5ID0gTGVuZ3RoKDAsIEZpeGVkKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAg
ICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9MZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJv
b3RTdHlsZSwgem9vbUZhY3RvciwgJm9rKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7IAor
ICAgICAgICAgICAgICAgICAgICAgICAgdHggPSBjb252ZXJ0VG9MZW5ndGgoZmlyc3RWYWx1ZSwg
c3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3RvciwgJm9rKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh2YWwtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh2YWwtPmxlbmd0aCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvTGVuZ3RoKHNlY29uZFZhbHVlLCBz
dHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yLCAmb2spOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGlmICghb2spCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwg
TGVuZ3RoKDAsIEZpeGVkKSwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh2YWwtPm9wZXJhdGlv
blR5cGUoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0
ZVpUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6VHJhbnNsYXRlM0RUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAg
ICAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIExlbmd0aCB0eCA9
IExlbmd0aCgwLCBGaXhlZCk7CisgICAgICAgICAgICAgICAgICAgIExlbmd0aCB0eSA9IExlbmd0
aCgwLCBGaXhlZCk7CisgICAgICAgICAgICAgICAgICAgIExlbmd0aCB0eiA9IExlbmd0aCgwLCBG
aXhlZCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPm9wZXJhdGlvblR5cGUoKSA9PSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHR6ID0gY29udmVydFRvTGVuZ3RoKGZpcnN0VmFsdWUsIHN0
eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IsICZvayk7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpU
cmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgdHkg
PSBjb252ZXJ0VG9MZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rv
ciwgJm9rKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7IAorICAgICAgICAgICAgICAgICAg
ICAgICAgdHggPSBjb252ZXJ0VG9MZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwg
em9vbUZhY3RvciwgJm9rKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPm9wZXJh
dGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9y
bU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPmxlbmd0
aCgpID4gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHogPSBjb252ZXJ0VG9MZW5ndGgodGhpcmRWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9v
bUZhY3RvciwgJm9rKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+bGVuZ3RoKCkgPiAxKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9MZW5ndGgo
c2Vjb25kVmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IsICZvayk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFvaykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBvcGVy
YXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUodHgsIHR5LCB0eiwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh2YWwtPm9wZXJhdGlv
blR5cGUoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBm
aXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZmly
c3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkFEKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSByYWQyZGVnKGFuZ2xlKTsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfR1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlID0g
Z3JhZDJkZWcoYW5nbGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmaXJzdFZhbHVl
LT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJOKQorICAgICAg
ICAgICAgICAgICAgICAgICAgYW5nbGUgPSB0dXJuMmRlZyhhbmdsZSk7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBl
bmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoMCwgMCwgMSwgYW5nbGUsIGdldFRy
YW5zZm9ybU9wZXJhdGlvblR5cGUodmFsLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNl
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVYVHJhbnNmb3JtT3BlcmF0aW9uOgorICAg
ICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVlUcmFuc2Zv
cm1PcGVyYXRpb246CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6Um90YXRlWlRyYW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUgeCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB5ID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgZG91YmxlIHogPSAwOworICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUg
PSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAo
Zmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkFE
KQorICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSByYWQyZGVnKGFuZ2xlKTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfR1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xl
ID0gZ3JhZDJkZWcoYW5nbGUpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpSb3RhdGVYVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgeCA9
IDE7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpID09
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeSA9IDE7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHogPSAxOworICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
eCwgeSwgeiwgYW5nbGUsIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodmFsLT5vcGVyYXRpb25U
eXBlKCkpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGUzRFRy
YW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRl
bVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiB0aGlyZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpOworICAgICAgICAgICAgICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogZm91cnRoVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSk7CisgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSB4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZG91YmxlIHkgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgZG91YmxlIHogPSB0aGlyZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmb3VydGhWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZvdXJ0aFZhbHVlLT5wcmltaXRpdmVUeXBlKCkg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SQUQpCisgICAgICAgICAgICAgICAgICAgICAgICBh
bmdsZSA9IHJhZDJkZWcoYW5nbGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3Vy
dGhWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfR1JBRCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlID0gZ3JhZDJkZWcoYW5nbGUpOworICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUoeCwgeSwgeiwgYW5nbGUsIGdldFRyYW5zZm9ybU9wZXJhdGlv
blR5cGUodmFsLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdYVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAg
ICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3Bl
cmF0aW9uOiB7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZVggPSAwOworICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgYW5nbGVZID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZG91
YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGZpcnN0VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlID0gcmFkMmRlZyhhbmds
ZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZpcnN0VmFsdWUtPnByaW1pdGl2ZVR5
cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0dSQUQpCisgICAgICAgICAgICAgICAgICAg
ICAgICBhbmdsZSA9IGdyYWQyZGVnKGFuZ2xlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
VFVSTikKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlID0gdHVybjJkZWcoYW5nbGUpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAodmFsLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYW5nbGVZID0gYW5nbGU7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgYW5nbGVYID0gYW5nbGU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodmFsLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmFsLT5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhbmdsZVkgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlY29uZFZhbHVlLT5wcmltaXRp
dmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SQUQpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhbmdsZVkgPSByYWQyZGVnKGFuZ2xlWSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlY29uZFZhbHVlLT5wcmltaXRpdmVUeXBl
KCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYW5nbGVZID0gZ3JhZDJkZWcoYW5nbGVZKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2Vjb25kVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1RVUk4pCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhbmdsZVkgPSB0dXJuMmRlZyhhbmdsZVkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
U2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlWCwgYW5nbGVZLCBnZXRUcmFuc2Zv
cm1PcGVyYXRpb25UeXBlKHZhbC0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSBhID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIGIgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSktPmdldERvdWJsZVZhbHVlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGRvdWJsZSBjID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpLT5nZXREb3VibGVWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgZCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0RG91YmxlVmFsdWUoKTsK
KyAgICAgICAgICAgICAgICAgICAgZG91YmxlIGUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg0KSktPmdldERvdWJsZVZhbHVlKCk7
CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBmID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNSkpLT5nZXREb3VibGVWYWx1ZSgp
OworICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0
cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoYSwgYiwgYywgZCwgZSwgZikpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246
IHsKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4KHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDAp
KS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDEpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDIpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKS0+Z2V0RG91YmxlVmFsdWUoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDUpKS0+Z2V0RG91Ymxl
VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDYpKS0+
Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDcpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDgpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDkpKS0+Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEwKSktPmdldERvdWJsZVZhbHVlKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMSkpLT5nZXREb3VibGVW
YWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTIpKS0+
Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDEzKSktPmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygxNCkpLT5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTUpKS0+Z2V0RG91YmxlVmFsdWUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXgzRFRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJpeCkpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9ICAgCisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAg
ICAgICAgICAgICAgZG91YmxlIHAgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAg
ICAgICAgICAgICAgICAgICBpZiAocCA8IDAuMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCku
YXBwZW5kKFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUocCkpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VW5rbm93blRyYW5zZm9ybU9wZXJhdGlvbjoK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIG91dE9w
ZXJhdGlvbnMgPSBvcGVyYXRpb25zOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Nzcy9SZW5kZXJTdHlsZVJlc29sdmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9SZW5kZXJTdHlsZVJlc29sdmVyLmNwcAkocmV2aXNp
b24gNjM4MjApCisrKyBXZWJDb3JlL2Nzcy9SZW5kZXJTdHlsZVJlc29sdmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGVSZXNvbHZl
ci5oIgogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiQ1NTQm9yZGVySW1hZ2VW
YWx1ZS5oIgpAQCAtMzU2LDcgKzM1Niw3IEBAIHB1YmxpYzoKICAgICAKICAgICB0eXBlZGVmIEhh
c2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIENTU1J1bGVEYXRhTGlzdCo+IEF0b21SdWxlTWFwOwog
ICAgIAotICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1l
ZGlhUXVlcnlFdmFsdWF0b3ImLCBDU1NTdHlsZVNlbGVjdG9yKiA9IDApOworICAgIHZvaWQgYWRk
UnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3Im
LCBSZW5kZXJTdHlsZVJlc29sdmVyKiA9IDApOwogCiAgICAgdm9pZCBhZGRTdHlsZVJ1bGUoU3R5
bGVCYXNlKiBpdGVtKTsKICAgICB2b2lkIGFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NT
ZWxlY3Rvciogc2VsKTsKQEAgLTM4Niw3ICszODYsNyBAQCBzdGF0aWMgQ1NTUnVsZVNldCogZGVm
YXVsdFByaW50U3R5bGU7CiBzdGF0aWMgQ1NTUnVsZVNldCogZGVmYXVsdFZpZXdTb3VyY2VTdHls
ZTsKIHN0YXRpYyBDU1NTdHlsZVNoZWV0KiBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldDsKIAotUmVu
ZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OnNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CitSZW5k
ZXJTdHlsZSogUmVuZGVyU3R5bGVSZXNvbHZlcjo6c19zdHlsZU5vdFlldEF2YWlsYWJsZTsKIAog
c3RhdGljIHZvaWQgbG9hZEZ1bGxEZWZhdWx0U3R5bGUoKTsKIHN0YXRpYyB2b2lkIGxvYWRTaW1w
bGVEZWZhdWx0U3R5bGUoKTsKQEAgLTQxMCw3ICs0MTAsNyBAQCBzdGF0aWMgY29uc3QgTWVkaWFR
dWVyeUV2YWx1YXRvciYgcHJpbnRFCiAgICAgcmV0dXJuIHN0YXRpY1ByaW50RXZhbDsKIH0KIAot
Q1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jLCBTdHlsZVNo
ZWV0TGlzdCogc3R5bGVTaGVldHMsIENTU1N0eWxlU2hlZXQqIG1hcHBlZEVsZW1lbnRTaGVldCwK
K1JlbmRlclN0eWxlUmVzb2x2ZXI6OlJlbmRlclN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqIGRvYywg
U3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZXRzLCBDU1NTdHlsZVNoZWV0KiBtYXBwZWRFbGVtZW50
U2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1N0eWxlU2hlZXQq
IHBhZ2VVc2VyU2hlZXQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogcGFn
ZUdyb3VwVXNlclNoZWV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBzdHJpY3RQYXJzaW5nLCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKICAgICA6IG1f
YmFja2dyb3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikKQEAgLTQ4NiwxMyArNDg2LDEzIEBA
IENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW0KIH0KIAogLy8gVGhpcyBp
cyBhIHNpbXBsaWZpZWQgc3R5bGUgc2V0dGluZyBmdW5jdGlvbiBmb3Iga2V5ZnJhbWUgc3R5bGVz
Ci12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZEtleWZyYW1lU3R5bGUoUGFzc1JlZlB0cjxXZWJL
aXRDU1NLZXlmcmFtZXNSdWxlPiBydWxlKQordm9pZCBSZW5kZXJTdHlsZVJlc29sdmVyOjphZGRL
ZXlmcmFtZVN0eWxlKFBhc3NSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZT4gcnVsZSkKIHsK
ICAgICBBdG9taWNTdHJpbmcgcyhydWxlLT5uYW1lKCkpOwogICAgIG1fa2V5ZnJhbWVzUnVsZU1h
cC5hZGQocy5pbXBsKCksIHJ1bGUpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXQo
KQordm9pZCBSZW5kZXJTdHlsZVJlc29sdmVyOjppbml0KCkKIHsKICAgICBpbml0RWxlbWVudCgw
KTsKICAgICBtX21hdGNoZWREZWNscy5jbGVhcigpOwpAQCAtNTAxLDcgKzUwMSw3IEBAIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6aW5pdCgpCiAgICAgbV9tZWRpdW0gPSAwOwogfQogCi1DU1NTdHls
ZVNlbGVjdG9yOjp+Q1NTU3R5bGVTZWxlY3RvcigpCitSZW5kZXJTdHlsZVJlc29sdmVyOjp+UmVu
ZGVyU3R5bGVSZXNvbHZlcigpCiB7CiAgICAgbV9mb250U2VsZWN0b3ItPmNsZWFyRG9jdW1lbnQo
KTsKICAgICBkZWxldGUgbV9tZWRpdW07CkBAIC01NzIsNyArNTcyLDcgQEAgc3RhdGljIHZvaWQg
bG9hZFZpZXdTb3VyY2VTdHlsZSgpCiAgICAgZGVmYXVsdFZpZXdTb3VyY2VTdHlsZS0+YWRkUnVs
ZXNGcm9tU2hlZXQocGFyc2VVQVNoZWV0KHNvdXJjZVVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVv
Zihzb3VyY2VVc2VyQWdlbnRTdHlsZVNoZWV0KSksIHNjcmVlbkV2YWwoKSk7CiB9CiAKLXZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiBkZWNsKQordm9pZCBSZW5kZXJTdHlsZVJlc29sdmVyOjphZGRNYXRjaGVkRGVj
bGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wpCiB7CiAgICAgaWYgKCFk
ZWNsLT5oYXNWYXJpYWJsZURlcGVuZGVudFZhbHVlKCkpIHsKICAgICAgICAgbV9tYXRjaGVkRGVj
bHMuYXBwZW5kKGRlY2wpOwpAQCAtNTk2LDcgKzU5Niw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6YWRkTWF0Y2hlZERlY2xhcmEKICAgICByZXNvbHZlVmFyaWFibGVzRm9yRGVjbGFyYXRpb24o
ZGVjbCwgbmV3RGVjbC5nZXQoKSwgdXNlZEJsb2NrVmFyaWFibGVzKTsKIH0KIAotdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjpyZXNvbHZlVmFyaWFibGVzRm9yRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qIGRlY2wsIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBuZXdEZWNs
LCBIYXNoU2V0PFN0cmluZz4mIHVzZWRCbG9ja1ZhcmlhYmxlcykKK3ZvaWQgUmVuZGVyU3R5bGVS
ZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlc0ZvckRlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiBkZWNsLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogbmV3RGVjbCwgSGFz
aFNldDxTdHJpbmc+JiB1c2VkQmxvY2tWYXJpYWJsZXMpCiB7CiAgICAgLy8gTm93IGl0ZXJhdGUg
b3ZlciB0aGUgcHJvcGVydGllcyBpbiB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24uICBBcyB3ZSBy
ZXNvbHZlIHZhcmlhYmxlcyB3ZSdsbCBlbmQgdXAKICAgICAvLyBtdXRhdGluZyB0aGUgbmV3IGRl
Y2xhcmF0aW9uIChwb3NzaWJseSBleHBhbmRpbmcgc2hvcnRoYW5kcykuICBUaGUgbmV3IGRlY2xh
cmF0aW9uIGhhcyBubyBtX25vZGUKQEAgLTY1Nyw3ICs2NTcsNyBAQCB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6OnJlc29sdmVWYXJpYWJsZXNGCiAgICAgfQogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0
b3I6Om1hdGNoUnVsZXMoQ1NTUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGlu
dCYgbGFzdFJ1bGVJbmRleCkKK3ZvaWQgUmVuZGVyU3R5bGVSZXNvbHZlcjo6bWF0Y2hSdWxlcyhD
U1NSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4
KQogewogICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAKQEAgLTY5OCw3ICs2OTgsNyBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoQ1NTUnVsCiAgICAgfQogfQogCi12b2lk
IENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KENTU1J1bGVEYXRhTGlzdCogcnVs
ZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCkKK3ZvaWQgUmVuZGVy
U3R5bGVSZXNvbHZlcjo6bWF0Y2hSdWxlc0Zvckxpc3QoQ1NTUnVsZURhdGFMaXN0KiBydWxlcywg
aW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4KQogewogICAgIGlmICghcnVs
ZXMpCiAgICAgICAgIHJldHVybjsKQEAgLTc0Myw3ICs3NDMsNyBAQCBzdGF0aWMgYm9vbCBvcGVy
YXRvciA8PShDU1NSdWxlRGF0YSYgcjEsCiAgICAgcmV0dXJuICEocjEgPiByMik7CiB9CiAKLXZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c29ydE1hdGNoZWRSdWxlcyh1bnNpZ25lZCBzdGFydCwgdW5z
aWduZWQgZW5kKQordm9pZCBSZW5kZXJTdHlsZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKHVu
c2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpCiB7CiAgICAgaWYgKHN0YXJ0ID49IGVuZCB8fCAo
ZW5kIC0gc3RhcnQgPT0gMSkpCiAgICAgICAgIHJldHVybjsgLy8gU2FuaXR5IGNoZWNrLgpAQCAt
ODA3LDE0ICs4MDcsMTQgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzb3J0TWF0Y2hlZFJ1bGVz
KAogICAgICAgICBtX21hdGNoZWRSdWxlc1tpXSA9IHJ1bGVzTWVyZ2VCdWZmZXJbaSAtIHN0YXJ0
XTsKIH0KIAotaW5saW5lIEVJbnNpZGVMaW5rIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hl
Y2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CitpbmxpbmUg
RUluc2lkZUxpbmsgUmVuZGVyU3R5bGVSZXNvbHZlcjo6U2VsZWN0b3JDaGVja2VyOjpkZXRlcm1p
bmVMaW5rU3RhdGUoRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBpZiAoIWVsZW1lbnQg
fHwgIWVsZW1lbnQtPmlzTGluaygpKQogICAgICAgICByZXR1cm4gTm90SW5zaWRlTGluazsKICAg
ICByZXR1cm4gZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UoZWxlbWVudCk7CiB9CiAgICAgCi1p
bmxpbmUgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0RWxlbWVudChFbGVtZW50KiBlKQoraW5s
aW5lIHZvaWQgUmVuZGVyU3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKIHsK
ICAgICBpZiAobV9lbGVtZW50ICE9IGUpIHsKICAgICAgICAgbV9lbGVtZW50ID0gZTsKQEAgLTgy
Myw3ICs4MjMsNyBAQCBpbmxpbmUgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0RWxlbWVuCiAg
ICAgfQogfQogCi1pbmxpbmUgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0Rm9yU3R5bGVSZXNv
bHZlKEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUHNldWRvSWQgcHNldWRv
SUQpCitpbmxpbmUgdm9pZCBSZW5kZXJTdHlsZVJlc29sdmVyOjppbml0Rm9yU3R5bGVSZXNvbHZl
KEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUHNldWRvSWQgcHNldWRvSUQp
CiB7CiAgICAgbV9jaGVja2VyLm1fcHNldWRvU3R5bGUgPSBwc2V1ZG9JRDsKIApAQCAtODgxLDcg
Kzg4MSw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nKiBsaW5rQXQKICAgICBy
ZXR1cm4gMDsKIH0KIAotQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rv
ckNoZWNrZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHN0cmljdFBhcnNpbmcpCitSZW5kZXJT
dHlsZVJlc29sdmVyOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCog
ZG9jdW1lbnQsIGJvb2wgc3RyaWN0UGFyc2luZykKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQp
CiAgICAgLCBtX3N0cmljdFBhcnNpbmcoc3RyaWN0UGFyc2luZykKICAgICAsIG1fY29sbGVjdFJ1
bGVzT25seShmYWxzZSkKQEAgLTg5MSw3ICs4OTEsNyBAQCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxl
Y3RvckNoZWNrZXI6OlNlbGVjCiB7CiB9CiAKLUVJbnNpZGVMaW5rIENTU1N0eWxlU2VsZWN0b3I6
OlNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UoRWxlbWVudCogZWxl
bWVudCkgY29uc3QKK0VJbnNpZGVMaW5rIFJlbmRlclN0eWxlUmVzb2x2ZXI6OlNlbGVjdG9yQ2hl
Y2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UoRWxlbWVudCogZWxlbWVudCkgY29uc3QK
IHsKICAgICBBU1NFUlQoZWxlbWVudC0+aXNMaW5rKCkpOwogICAgIApAQCAtOTMyLDcgKzkzMiw3
IEBAIEVJbnNpZGVMaW5rIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2gKICAgICByZXR1cm4g
cGFnZS0+Z3JvdXAoKS5pc0xpbmtWaXNpdGVkKGhhc2gpID8gSW5zaWRlVmlzaXRlZExpbmsgOiBJ
bnNpZGVVbnZpc2l0ZWRMaW5rOwogfQogCi1ib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlbGVtZW50
KSBjb25zdAorYm9vbCBSZW5kZXJTdHlsZVJlc29sdmVyOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNr
U2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAg
ICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0gTk9QU0VVRE87CiAgICAgcmV0dXJuIGNoZWNrU2Vs
ZWN0b3Ioc2VsLCBlbGVtZW50LCAwLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZmFsc2UpID09IFNl
bGVjdG9yTWF0Y2hlczsKQEAgLTk0NSw3ICs5NDUsNyBAQCBzdGF0aWMgaW50IHRvdGFsID0gMDsK
IAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHlsZVNlYXJjaFRocmVzaG9sZCA9IDEwOwogCi1O
b2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwg
dW5zaWduZWQgZGVwdGgpCitOb2RlKiBSZW5kZXJTdHlsZVJlc29sdmVyOjpsb2NhdGVDb3VzaW5M
aXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQgZGVwdGgpCiB7CiAgICAgaWYgKHBhcmVudCAm
JiBwYXJlbnQtPmlzU3R5bGVkRWxlbWVudCgpKSB7CiAgICAgICAgIFN0eWxlZEVsZW1lbnQqIHAg
PSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4ocGFyZW50KTsKQEAgLTk3NCw3ICs5NzQsNyBA
QCBOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0CiAgICAgcmV0dXJuIDA7
CiB9CiAKLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KE5v
ZGUqIG4pCitib29sIFJlbmRlclN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVu
dChOb2RlKiBuKQogewogICAgIGlmIChuLT5pc1N0eWxlZEVsZW1lbnQoKSkgewogICAgICAgICBT
dHlsZWRFbGVtZW50KiBzID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG4pOwpAQCAtMTA1
Miw3ICsxMDUyLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotQUxXQVlTX0lOTElORSBSZW5kZXJTdHlsZSogQ1NTU3R5
bGVTZWxlY3Rvcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQorQUxXQVlTX0lOTElORSBSZW5kZXJTdHls
ZSogUmVuZGVyU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogewogICAgIGlmICht
X3N0eWxlZEVsZW1lbnQgJiYgIW1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkgJiYg
IW1fc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiAhbV9zdHlsZWRFbGVtZW50LT5kb2N1bWVudCgp
LT51c2VzU2libGluZ1J1bGVzKCkpIHsKICAgICAgICAgLy8gQ2hlY2sgcHJldmlvdXMgc2libGlu
Z3MuCkBAIC0xMDc5LDcgKzEwNzksNyBAQCBBTFdBWVNfSU5MSU5FIFJlbmRlclN0eWxlKiBDU1NT
dHlsZVNlbGVjCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0
Y2hVQVJ1bGVzKGludCYgZmlyc3RVQVJ1bGUsIGludCYgbGFzdFVBUnVsZSkKK3ZvaWQgUmVuZGVy
U3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKGludCYgZmlyc3RVQVJ1bGUsIGludCYgbGFzdFVB
UnVsZSkKIHsKICAgICAvLyBGaXJzdCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB1c2VyIGFnZW50
IHNoZWV0LgogICAgIENTU1J1bGVTZXQqIHVzZXJBZ2VudFN0eWxlU2hlZXQgPSBtX21lZGl1bS0+
bWVkaWFUeXBlTWF0Y2hTcGVjaWZpYygicHJpbnQiKQpAQCAtMTA5OCw3ICsxMDk4LDcgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFVBUnVsZXMoaW50JgogICAgIH0KIH0KIAotUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JEb2N1bWVudChEb2N1
bWVudCogZG9jdW1lbnQpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJTdHlsZVJlc29s
dmVyOjpzdHlsZUZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBGcmFtZVZp
ZXcqIHZpZXcgPSBkb2N1bWVudC0+dmlldygpOwogCkBAIC0xMTE5LDEwICsxMTE5LDEwIEBAIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKICAgICAgICAgfQogICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NW
YWx1ZVh4U21hbGwgKyAxKTsKLSAgICAgICAgaW50IHNpemUgPSBDU1NTdHlsZVNlbGVjdG9yOjpm
b250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQsIENTU1ZhbHVlTWVkaXVtLCBmYWxzZSk7CisgICAg
ICAgIGludCBzaXplID0gUmVuZGVyU3R5bGVSZXNvbHZlcjo6Zm9udFNpemVGb3JLZXl3b3JkKGRv
Y3VtZW50LCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpOwogICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKICAgICAgICAgYm9vbCB1c2VTVkdab29tUnVsZXMgPSBk
b2N1bWVudC0+aXNTVkdEb2N1bWVudCgpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKENTU1N0eWxlU2VsZWN0b3I6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRT
aXplKGRvY3VtZW50LCBkb2N1bWVudFN0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNv
bHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKSk7CisgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRDb21wdXRlZFNpemUoUmVuZGVyU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXpl
RnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQsIGRvY3VtZW50U3R5bGUuZ2V0KCksIGZvbnREZXNj
cmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1c2VTVkdab29tUnVsZXMpKTsKICAgICB9
CiAKICAgICBkb2N1bWVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKQEAgLTExMzYsNyArMTEzNiw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxl
U2VsZWN0b3IKIC8vIElmIHJlc29sdmVGb3JSb290RGVmYXVsdCBpcyB0cnVlLCBzdHlsZSBiYXNl
ZCBvbiB1c2VyIGFnZW50IHN0eWxlIHNoZWV0IG9ubHkuIFRoaXMgaXMgdXNlZCBpbiBtZWRpYSBx
dWVyaWVzLCB3aGVyZQogLy8gcmVsYXRpdmUgdW5pdHMgYXJlIGludGVycHJldGVkIGFjY29yZGlu
ZyB0byBkb2N1bWVudCByb290IGVsZW1lbnQgc3R5bGUsIHN0eWxlZCBvbmx5IHdpdGggVUEgc3R5
bGVzaGVldAogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHls
ZUZvckVsZW1lbnQoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIGRlZmF1bHRQYXJlbnQsIGJvb2wg
YWxsb3dTaGFyaW5nLCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCwgYm9vbCBtYXRjaFZpc2l0
ZWRQc2V1ZG9DbGFzcykKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclN0eWxlUmVzb2x2
ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogZGVmYXVsdFBhcmVu
dCwgYm9vbCBhbGxvd1NoYXJpbmcsIGJvb2wgcmVzb2x2ZUZvclJvb3REZWZhdWx0LCBib29sIG1h
dGNoVmlzaXRlZFBzZXVkb0NsYXNzKQogewogICAgIC8vIE9uY2UgYW4gZWxlbWVudCBoYXMgYSBy
ZW5kZXJlciwgd2UgZG9uJ3QgdHJ5IHRvIGRlc3Ryb3kgaXQsIHNpbmNlIG90aGVyd2lzZSB0aGUg
cmVuZGVyZXIKICAgICAvLyB3aWxsIHZhbmlzaCBpZiBhIHN0eWxlIHJlY2FsYyBoYXBwZW5zIGR1
cmluZyBsb2FkaW5nLgpAQCAtMTM3Miw3ICsxMzcyLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKIH0KIAot
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JLZXlmcmFt
ZShjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBXZWJLaXRDU1NLZXlmcmFt
ZVJ1bGUqIGtleWZyYW1lUnVsZSwgS2V5ZnJhbWVMaXN0JiBsaXN0KQorUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gUmVuZGVyU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5k
ZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIGtleWZy
YW1lUnVsZSwgS2V5ZnJhbWVMaXN0JiBsaXN0KQogewogICAgIGlmIChrZXlmcmFtZVJ1bGUtPnN0
eWxlKCkpCiAgICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihrZXlmcmFtZVJ1bGUtPnN0eWxl
KCkpOwpAQCAtMTQyMSw3ICsxNDIxLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5
bGVTZWxlY3RvcgogICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25z
dCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBLZXlmcmFtZUxpc3QmIGxpc3QpCit2b2lkIFJl
bmRlclN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUs
IGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIEtleWZyYW1lTGlzdCYgbGlzdCkKIHsK
ICAgICBsaXN0LmNsZWFyKCk7CiAgICAgCkBAIC0xNDc1LDcgKzE0NzUsNyBAQCB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmtleWZyYW1lU3R5bGVzRm9yCiAgICAgfQogfQogCi1QYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRv
SWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGJvb2wgbWF0
Y2hWaXNpdGVkUHNldWRvQ2xhc3MpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJTdHls
ZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50
KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGJvb2wgbWF0Y2hWaXNpdGVkUHNldWRvQ2xh
c3MpCiB7CiAgICAgaWYgKCFlKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE1NjksNyArMTU2OSw3
IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKICAgICByZXR1cm4g
bV9zdHlsZS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxl
U2VsZWN0b3I6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQorUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gUmVuZGVyU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiB7
CiAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShtX2NoZWNrZXIubV9kb2N1bWVudC0+Ym9keSgpKTsK
IApAQCAtMTYwMSwxMyArMTYwMSwxMyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHls
ZVNlbGVjdG9yCiAKICNpZiBFTkFCTEUoREFUQUdSSUQpCiAKLVBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRGF0YUdyaWRDb2x1bW4oRGF0YUdy
aWRDb2x1bW4qLCBSZW5kZXJTdHlsZSopCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJT
dHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckRhdGFHcmlkQ29sdW1uKERhdGFHcmlkQ29sdW1u
KiwgUmVuZGVyU3R5bGUqKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKICAgICByZXR1cm4g
MDsKIH0KIAotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRv
U3R5bGVGb3JEYXRhR3JpZENvbHVtbkhlYWRlcihEYXRhR3JpZENvbHVtbiosIFJlbmRlclN0eWxl
KikKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0
eWxlRm9yRGF0YUdyaWRDb2x1bW5IZWFkZXIoRGF0YUdyaWRDb2x1bW4qLCBSZW5kZXJTdHlsZSop
CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudAogICAgIHJldHVybiAwOwpAQCAtMTYzNyw3ICsx
NjM3LDcgQEAgc3RhdGljIHZvaWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdAogICAgIH0K
IH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQgKmUpCit2b2lkIFJlbmRlclN0eWxlUmVzb2x2ZXI6OmFkanVzdFJl
bmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCAqZSkKIHsKICAgICAvLyBDYWNo
ZSBvdXIgb3JpZ2luYWwgZGlzcGxheS4KICAgICBzdHlsZS0+c2V0T3JpZ2luYWxEaXNwbGF5KHN0
eWxlLT5kaXNwbGF5KCkpOwpAQCAtMTgyMSw3ICsxODIxLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjphZGp1c3RSZW5kZXJTdHlsZQogI2VuZGlmCiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6dXBkYXRlRm9udCgpCit2b2lkIFJlbmRlclN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQog
ewogICAgIGNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKTsKICAgICBjaGVja0ZvckdlbmVyaWNGYW1p
bHlDaGFuZ2Uoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSk7CkBAIC0xODMwLDcgKzE4MzAsNyBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OnVwZGF0ZUZvbnQoKQogICAgIG1fZm9udERpcnR5ID0gZmFs
c2U7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5k
KCkKK3ZvaWQgUmVuZGVyU3R5bGVSZXNvbHZlcjo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCkK
IHsKICAgICBtX2hhc1VBQXBwZWFyYW5jZSA9IG1fc3R5bGUtPmhhc0FwcGVhcmFuY2UoKTsKICAg
ICBpZiAobV9oYXNVQUFwcGVhcmFuY2UpIHsKQEAgLTE4NDAsMTIgKzE4NDAsMTIgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjpjYWNoZUJvcmRlckFuZEJhYwogICAgIH0KIH0KIAotUGFzc1JlZlB0
cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxl
bWVudCogZSwgYm9vbCBhdXRob3JPbmx5KQorUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gUmVuZGVy
U3R5bGVSZXNvbHZlcjo6c3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgYm9vbCBhdXRo
b3JPbmx5KQogewogICAgIHJldHVybiBwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChlLCBOT1BT
RVVETywgYXV0aG9yT25seSk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxl
U2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFBzZXVkb0lk
IHBzZXVkb0lkLCBib29sIGF1dGhvck9ubHkpCitQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBSZW5k
ZXJTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCBQ
c2V1ZG9JZCBwc2V1ZG9JZCwgYm9vbCBhdXRob3JPbmx5KQogewogICAgIGlmICghZSB8fCAhZS0+
ZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpCiAgICAgICAgIHJldHVybiAwOwpA
QCAtMTg3OCw3ICsxODc4LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTZWxl
Y3RvcgogICAgIHJldHVybiBtX3J1bGVMaXN0LnJlbGVhc2UoKTsKIH0KIAotYm9vbCBDU1NTdHls
ZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwpCitib29sIFJlbmRlclN0
eWxlUmVzb2x2ZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCkKIHsKICAgICBtX2R5
bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKIApAQCAtMTg5OCw3ICsxODk4LDcgQEAgYm9vbCBDU1NT
dHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKENTUwogLy8gKiBTZWxlY3Rvck1hdGNoZXMgICAg
ICAgICAtIHRoZSBzZWxlY3RvciBtYXRjaGVzIHRoZSBlbGVtZW50IGUKIC8vICogU2VsZWN0b3JG
YWlsc0xvY2FsbHkgICAgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIHRoZSBlbGVtZW50IGUKIC8v
ICogU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIGUgYW5k
IGFueSBzaWJsaW5nIG9yIGFuY2VzdG9yIG9mIGUKLUNTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9y
TWF0Y2ggQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKENT
U1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+KiBz
ZWxlY3RvckF0dHJzLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9y
LCBib29sIGVuY291bnRlcmVkTGluaywgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgUmVuZGVy
U3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3QKK1JlbmRlclN0eWxlUmVzb2x2ZXI6OlNl
bGVjdG9yTWF0Y2ggUmVuZGVyU3R5bGVSZXNvbHZlcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1Nl
bGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIEhhc2hTZXQ8QXRvbWljU3RyaW5n
SW1wbCo+KiBzZWxlY3RvckF0dHJzLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1
YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVkTGluaywgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHls
ZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3QKIHsKICNpZiBFTkFCTEUo
U1ZHKQogICAgIC8vIFNwZWM6IENTUzIgc2VsZWN0b3JzIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRo
ZSAoY29uY2VwdHVhbGx5KSBjbG9uZWQgRE9NIHRyZWUKQEAgLTIwNzAsNyArMjA3MCw3IEBAIHN0
YXRpYyBib29sIGh0bWxBdHRyaWJ1dGVIYXNDYXNlSW5zZW5zaXQKICAgICByZXR1cm4gaXNQb3Nz
aWJsZUhUTUxBdHRyICYmIGh0bWxDYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVzU2V0LT5jb250YWlu
cyhhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7CiB9CiAKLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1l
bnQqIGUsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+KiBzZWxlY3RvckF0dHJzLCBQc2V1ZG9J
ZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBSZW5kZXJTdHlsZSogZWxlbWVu
dFN0eWxlLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAorYm9vbCBSZW5k
ZXJTdHlsZVJlc29sdmVyOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2Vs
ZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIHNlbGVj
dG9yQXR0cnMsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIFJl
bmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUp
IGNvbnN0CiB7CiAgICAgaWYgKCFlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNjQ3LDcg
KzI2NDcsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2Vy
OjpjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKENTU1NlbGVjdG9yKiBzZWwsIFBzZXVkb0lkJikg
Y29uc3QKK2Jvb2wgUmVuZGVyU3R5bGVSZXNvbHZlcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1Nj
cm9sbGJhclBzZXVkb0NsYXNzKENTU1NlbGVjdG9yKiBzZWwsIFBzZXVkb0lkJikgY29uc3QKIHsK
ICAgICBSZW5kZXJTY3JvbGxiYXIqIHNjcm9sbGJhciA9IFJlbmRlclNjcm9sbGJhcjo6c2Nyb2xs
YmFyRm9yU3R5bGVSZXNvbHZlKCk7CiAgICAgU2Nyb2xsYmFyUGFydCBwYXJ0ID0gUmVuZGVyU2Ny
b2xsYmFyOjpwYXJ0Rm9yU3R5bGVSZXNvbHZlKCk7CkBAIC0yNzIzLDcgKzI3MjMsNyBAQCBib29s
IENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6CiAgICAgfQogfQogCi12b2lkIENT
U1N0eWxlU2VsZWN0b3I6OmFkZFZhcmlhYmxlcyhDU1NWYXJpYWJsZXNSdWxlKiB2YXJpYWJsZXMp
Cit2b2lkIFJlbmRlclN0eWxlUmVzb2x2ZXI6OmFkZFZhcmlhYmxlcyhDU1NWYXJpYWJsZXNSdWxl
KiB2YXJpYWJsZXMpCiB7CiAgICAgQ1NTVmFyaWFibGVzRGVjbGFyYXRpb24qIGRlY2wgPSB2YXJp
YWJsZXMtPnZhcmlhYmxlcygpOwogICAgIGlmICghZGVjbCkKQEAgLTI3MzUsNyArMjczNSw3IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkVmFyaWFibGVzKENTU1YKICAgICB9CiB9CiAKLUNT
U1ZhbHVlKiBDU1NTdHlsZVNlbGVjdG9yOjpyZXNvbHZlVmFyaWFibGVEZXBlbmRlbnRWYWx1ZShD
U1NWYXJpYWJsZURlcGVuZGVudFZhbHVlKikKK0NTU1ZhbHVlKiBSZW5kZXJTdHlsZVJlc29sdmVy
OjpyZXNvbHZlVmFyaWFibGVEZXBlbmRlbnRWYWx1ZShDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVl
KikKIHsKICAgICByZXR1cm4gMDsKIH0KQEAgLTI4MDUsNyArMjgwNSw3IEBAIHZvaWQgQ1NTUnVs
ZVNldDo6YWRkUGFnZVJ1bGUoQ1NTU3R5bGVSdWwKICAgICAgICAgbV9wYWdlUnVsZXMtPmFwcGVu
ZChtX3BhZ2VSdWxlQ291bnQrKywgcnVsZSwgc2VsKTsKIH0KIAotdm9pZCBDU1NSdWxlU2V0Ojph
ZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2
YWx1YXRvciYgbWVkaXVtLCBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yKQordm9pZCBD
U1NSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3Qg
TWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtLCBSZW5kZXJTdHlsZVJlc29sdmVyKiBzdHlsZVNl
bGVjdG9yKQogewogICAgIGlmICghc2hlZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTI5MDUsNyAr
MjkwNSw3IEBAIHN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKENTU1ByaW1pdGkKIH0KIAog
dGVtcGxhdGUgPGJvb2wgYXBwbHlGaXJzdD4KLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlE
ZWNsYXJhdGlvbnMoYm9vbCBpc0ltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRl
eCkKK3ZvaWQgUmVuZGVyU3R5bGVSZXNvbHZlcjo6YXBwbHlEZWNsYXJhdGlvbnMoYm9vbCBpc0lt
cG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCkKIHsKICAgICBpZiAoc3RhcnRJ
bmRleCA9PSAtMSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjk0MCw3ICsyOTQwLDcgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjphcHBseURlY2xhcmF0aW9ucwogICAgIH0KIH0KIAotdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXRjaFBhZ2VSdWxlcyhDU1NSdWxlU2V0KiBydWxlcywgYm9vbCBpc0xl
ZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQordm9pZCBS
ZW5kZXJTdHlsZVJlc29sdmVyOjptYXRjaFBhZ2VSdWxlcyhDU1NSdWxlU2V0KiBydWxlcywgYm9v
bCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQog
ewogICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAKQEAgLTI5NjEsNyArMjk2MSw3IEBAIHZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXMoQ1MKICAgICAgICAgYWRkTWF0Y2hl
ZERlY2xhcmF0aW9uKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmRlY2xhcmF0aW9uKCkpOwog
fQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzRm9yTGlzdChDU1NSdWxl
RGF0YUxpc3QqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0
IFN0cmluZyYgcGFnZU5hbWUpCit2b2lkIFJlbmRlclN0eWxlUmVzb2x2ZXI6Om1hdGNoUGFnZVJ1
bGVzRm9yTGlzdChDU1NSdWxlRGF0YUxpc3QqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wg
aXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCiB7CiAgICAgaWYgKCFydWxlcykK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjk4Nyw3ICsyOTg3LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXRjaFBhZ2VSdWxlc0ZvcgogICAgIH0KIH0KIAotYm9vbCBDU1NTdHlsZVNlbGVjdG9y
Ojppc0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0Citib29sIFJlbmRlclN0eWxlUmVzb2x2
ZXI6OmlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKIHsKICAgICBib29sIGlzRmlyc3RQ
YWdlTGVmdCA9IGZhbHNlOwogICAgIGlmIChtX3Jvb3RFbGVtZW50U3R5bGUtPmRpcmVjdGlvbigp
ID09IFJUTCkKQEAgLTI5OTYsMTMgKzI5OTYsMTMgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpp
c0xlZnRQYWdlKGludCBwYQogICAgIHJldHVybiAocGFnZUluZGV4ICsgKGlzRmlyc3RQYWdlTGVm
dCA/IDEgOiAwKSkgJSAyOwogfQogCi1ib29sIENTU1N0eWxlU2VsZWN0b3I6OmlzRmlyc3RQYWdl
KGludCBwYWdlSW5kZXgpIGNvbnN0Citib29sIFJlbmRlclN0eWxlUmVzb2x2ZXI6OmlzRmlyc3RQ
YWdlKGludCBwYWdlSW5kZXgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IEluIGNhc2Ugb2YgZm9y
Y2VkIGxlZnQvcmlnaHQgcGFnZSwgcGFnZSBhdCBpbmRleCAxIChub3QgMCkgY2FuIGJlIHRoZSBm
aXJzdCBwYWdlLgogICAgIHJldHVybiAoIXBhZ2VJbmRleCk7CiB9CiAKLVN0cmluZyBDU1NTdHls
ZVNlbGVjdG9yOjpwYWdlTmFtZShpbnQgLyogcGFnZUluZGV4ICovKSBjb25zdAorU3RyaW5nIFJl
bmRlclN0eWxlUmVzb2x2ZXI6OnBhZ2VOYW1lKGludCAvKiBwYWdlSW5kZXggKi8pIGNvbnN0CiB7
CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBwYWdlIGluZGV4IHRvIHBhZ2UgbmFtZSBtYXBwaW5n
LgogICAgIHJldHVybiAiIjsKQEAgLTMwNDEsNyArMzA0MSw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5
Q291bnRlckxpc3QoUmVuZGVyU3R5bGUKICAgICB9CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUsIFJlbmRlclN0
eWxlKiBzdHlsZSkKK3ZvaWQgUmVuZGVyU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5
bGUoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBp
bml0RWxlbWVudCgwKTsKICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKDAsIHN0eWxlKTsKQEAgLTMw
ODIsNyArMzA4Miw3IEBAIGlubGluZSBib29sIGlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGkK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKK3ZvaWQgUmVuZGVyU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKIHsKICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSAwOwogICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQpAQCAtNTU0NCw3ICs1NTQ0LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBs
eVByb3BlcnR5KGludAogICAgIH0KIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVBh
Z2VTaXplUHJvcGVydHkoQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBSZW5kZXJTdHlsZVJlc29sdmVy
OjphcHBseVBhZ2VTaXplUHJvcGVydHkoQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIG1fc3R5bGUt
PnJlc2V0UGFnZVNpemVUeXBlKCk7CiAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKQEAg
LTU2MTcsNyArNTYxNyw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQYWdlU2l6ZVBy
b3AKICAgICByZXR1cm47CiB9CiAKLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6cGFnZVNpemVGcm9t
TmFtZShDU1NQcmltaXRpdmVWYWx1ZSogcGFnZVNpemVOYW1lLCBDU1NQcmltaXRpdmVWYWx1ZSog
cGFnZU9yaWVudGF0aW9uLCBMZW5ndGgmIHdpZHRoLCBMZW5ndGgmIGhlaWdodCkKK2Jvb2wgUmVu
ZGVyU3R5bGVSZXNvbHZlcjo6cGFnZVNpemVGcm9tTmFtZShDU1NQcmltaXRpdmVWYWx1ZSogcGFn
ZVNpemVOYW1lLCBDU1NQcmltaXRpdmVWYWx1ZSogcGFnZU9yaWVudGF0aW9uLCBMZW5ndGgmIHdp
ZHRoLCBMZW5ndGgmIGhlaWdodCkKIHsKICAgICBzdGF0aWMgY29uc3QgTGVuZ3RoIGE1V2lkdGgg
PSBtbUxlbmd0aCgxNDgpLCBhNUhlaWdodCA9IG1tTGVuZ3RoKDIxMCk7CiAgICAgc3RhdGljIGNv
bnN0IExlbmd0aCBhNFdpZHRoID0gbW1MZW5ndGgoMjEwKSwgYTRIZWlnaHQgPSBtbUxlbmd0aCgy
OTcpOwpAQCAtNTY4NSwxNyArNTY4NSwxNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OnBhZ2VT
aXplRnJvbU5hbWUoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUxlbmd0aCBDU1NTdHlsZVNlbGVj
dG9yOjptbUxlbmd0aChkb3VibGUgbW0pCitMZW5ndGggUmVuZGVyU3R5bGVSZXNvbHZlcjo6bW1M
ZW5ndGgoZG91YmxlIG1tKQogewogICAgIHJldHVybiBMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShtbSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NTSktPmNvbXB1dGVMZW5ndGhJbnRG
b3JMZW5ndGgoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKSwgRml4ZWQpOwogfQogCi1MZW5n
dGggQ1NTU3R5bGVTZWxlY3Rvcjo6aW5jaExlbmd0aChkb3VibGUgaW5jaCkKK0xlbmd0aCBSZW5k
ZXJTdHlsZVJlc29sdmVyOjppbmNoTGVuZ3RoKGRvdWJsZSBpbmNoKQogewogICAgIHJldHVybiBM
ZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShpbmNoLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0lOKS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50
U3R5bGUpLCBGaXhlZCk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbEF0dGFj
aG1lbnQoRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBSZW5kZXJTdHls
ZVJlc29sdmVyOjptYXBGaWxsQXR0YWNobWVudChGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSog
dmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NT
X0lOSVRJQUwpIHsKICAgICAgICAgbGF5ZXItPnNldEF0dGFjaG1lbnQoRmlsbExheWVyOjppbml0
aWFsRmlsbEF0dGFjaG1lbnQobGF5ZXItPnR5cGUoKSkpOwpAQCAtNTcyMSw3ICs1NzIxLDcgQEAg
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsQXR0YWNobWVudAogICAgIH0KIH0KIAotdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsQ2xpcChGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1
ZSogdmFsdWUpCit2b2lkIFJlbmRlclN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxDbGlwKEZpbGxMYXll
ciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlw
ZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewogICAgICAgICBsYXllci0+c2V0Q2xpcChG
aWxsTGF5ZXI6OmluaXRpYWxGaWxsQ2xpcChsYXllci0+dHlwZSgpKSk7CkBAIC01NzM1LDcgKzU3
MzUsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxDbGlwKEZpbGxMCiAgICAgbGF5
ZXItPnNldENsaXAoKnByaW1pdGl2ZVZhbHVlKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjptYXBGaWxsQ29tcG9zaXRlKEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3Zv
aWQgUmVuZGVyU3R5bGVSZXNvbHZlcjo6bWFwRmlsbENvbXBvc2l0ZShGaWxsTGF5ZXIqIGxheWVy
LCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBD
U1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKICAgICAgICAgbGF5ZXItPnNldENvbXBvc2l0ZShGaWxs
TGF5ZXI6OmluaXRpYWxGaWxsQ29tcG9zaXRlKGxheWVyLT50eXBlKCkpKTsKQEAgLTU3NDksNyAr
NTc0OSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbENvbXBvc2l0ZSgKICAgICBs
YXllci0+c2V0Q29tcG9zaXRlKCpwcmltaXRpdmVWYWx1ZSk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6bWFwRmlsbE9yaWdpbihGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUp
Cit2b2lkIFJlbmRlclN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxPcmlnaW4oRmlsbExheWVyKiBsYXll
ciwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0g
Q1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CiAgICAgICAgIGxheWVyLT5zZXRPcmlnaW4oRmlsbExh
eWVyOjppbml0aWFsRmlsbE9yaWdpbihsYXllci0+dHlwZSgpKSk7CkBAIC01NzYzLDcgKzU3NjMs
NyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxPcmlnaW4oRmlsCiAgICAgbGF5ZXIt
PnNldE9yaWdpbigqcHJpbWl0aXZlVmFsdWUpOwogfQogCi1TdHlsZUltYWdlKiBDU1NTdHlsZVNl
bGVjdG9yOjpzdHlsZUltYWdlKENTU1ZhbHVlKiB2YWx1ZSkKK1N0eWxlSW1hZ2UqIFJlbmRlclN0
eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UoQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1
ZS0+aXNJbWFnZVZhbHVlKCkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NJbWFnZVZh
bHVlKj4odmFsdWUpLT5jYWNoZWRJbWFnZShtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRvY0xvYWRl
cigpKTsKQEAgLTU3NzIsNyArNTc3Miw3IEBAIFN0eWxlSW1hZ2UqIENTU1N0eWxlU2VsZWN0b3I6
OnN0eWxlSW1hZ2UKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXBGaWxsSW1hZ2UoRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBSZW5k
ZXJTdHlsZVJlc29sdmVyOjptYXBGaWxsSW1hZ2UoRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUq
IHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNT
U19JTklUSUFMKSB7CiAgICAgICAgIGxheWVyLT5zZXRJbWFnZShGaWxsTGF5ZXI6OmluaXRpYWxG
aWxsSW1hZ2UobGF5ZXItPnR5cGUoKSkpOwpAQCAtNTc4Miw3ICs1NzgyLDcgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXBGaWxsSW1hZ2UoRmlsbAogICAgIGxheWVyLT5zZXRJbWFnZShzdHls
ZUltYWdlKHZhbHVlKSk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFJlcGVh
dFgoRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBSZW5kZXJTdHlsZVJl
c29sdmVyOjptYXBGaWxsUmVwZWF0WChGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUp
CiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJ
QUwpIHsKICAgICAgICAgbGF5ZXItPnNldFJlcGVhdFgoRmlsbExheWVyOjppbml0aWFsRmlsbFJl
cGVhdFgobGF5ZXItPnR5cGUoKSkpOwpAQCAtNTc5Niw3ICs1Nzk2LDcgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjptYXBGaWxsUmVwZWF0WChGaQogICAgIGxheWVyLT5zZXRSZXBlYXRYKCpwcmlt
aXRpdmVWYWx1ZSk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFJlcGVhdFko
RmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBSZW5kZXJTdHlsZVJlc29s
dmVyOjptYXBGaWxsUmVwZWF0WShGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB7
CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwp
IHsKICAgICAgICAgbGF5ZXItPnNldFJlcGVhdFkoRmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVh
dFkobGF5ZXItPnR5cGUoKSkpOwpAQCAtNTgxMCw3ICs1ODEwLDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjptYXBGaWxsUmVwZWF0WShGaQogICAgIGxheWVyLT5zZXRSZXBlYXRZKCpwcmltaXRp
dmVWYWx1ZSk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFNpemUoRmlsbExh
eWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBSZW5kZXJTdHlsZVJlc29sdmVyOjpt
YXBGaWxsU2l6ZShGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYg
KCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CiAgICAgICAgIGxheWVyLT5zZXRTaXplVHlw
ZShTaXplTm9uZSk7CkBAIC01ODcyLDcgKzU4NzIsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
Om1hcEZpbGxTaXplKEZpbGxMCiAgICAgbGF5ZXItPnNldFNpemVMZW5ndGgoYik7CiB9CiAKLXZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFhQb3NpdGlvbihGaWxsTGF5ZXIqIGxheWVyLCBD
U1NWYWx1ZSogdmFsdWUpCit2b2lkIFJlbmRlclN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxYUG9zaXRp
b24oRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+
Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CiAgICAgICAgIGxheWVy
LT5zZXRYUG9zaXRpb24oRmlsbExheWVyOjppbml0aWFsRmlsbFhQb3NpdGlvbihsYXllci0+dHlw
ZSgpKSk7CkBAIC01ODk2LDcgKzU4OTYsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZp
bGxYUG9zaXRpb24oCiAgICAgbGF5ZXItPnNldFhQb3NpdGlvbihsKTsKIH0KIAotdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXBGaWxsWVBvc2l0aW9uKEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKK3ZvaWQgUmVuZGVyU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFlQb3NpdGlvbihGaWxs
TGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1
ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKICAgICAgICAgbGF5ZXItPnNldFlQ
b3NpdGlvbihGaWxsTGF5ZXI6OmluaXRpYWxGaWxsWVBvc2l0aW9uKGxheWVyLT50eXBlKCkpKTsK
QEAgLTU5MjAsNyArNTkyMCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFlQb3Np
dGlvbigKICAgICBsYXllci0+c2V0WVBvc2l0aW9uKGwpOwogfQogCi12b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6Om1hcEFuaW1hdGlvbkRlbGF5KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSog
dmFsdWUpCit2b2lkIFJlbmRlclN0eWxlUmVzb2x2ZXI6Om1hcEFuaW1hdGlvbkRlbGF5KEFuaW1h
dGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NW
YWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKICAgICAgICAgYW5pbWF0aW9u
LT5zZXREZWxheShBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25EZWxheSgpKTsKQEAgLTU5MzQs
NyArNTkzNCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uRGVsYXkKICAg
ICAgICAgYW5pbWF0aW9uLT5zZXREZWxheShwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgp
LzEwMDAuMGYpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbkRpcmVj
dGlvbihBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIFJlbmRlclN0eWxl
UmVzb2x2ZXI6Om1hcEFuaW1hdGlvbkRpcmVjdGlvbihBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1
ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6
Q1NTX0lOSVRJQUwpIHsKICAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihBbmltYXRpb246Omlu
aXRpYWxBbmltYXRpb25EaXJlY3Rpb24oKSk7CkBAIC01OTQ1LDcgKzU5NDUsNyBAQCB2b2lkIENT
U1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbkRpcmVjCiAgICAgbGF5ZXItPnNldERpcmVjdGlv
bihwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUFsdGVybmF0ZSA/IEFuaW1h
dGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlIDogQW5pbWF0aW9uOjpBbmltYXRpb25E
aXJlY3Rpb25Ob3JtYWwpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlv
bkR1cmF0aW9uKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIFJl
bmRlclN0eWxlUmVzb2x2ZXI6Om1hcEFuaW1hdGlvbkR1cmF0aW9uKEFuaW1hdGlvbiogYW5pbWF0
aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9
PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKICAgICAgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlv
bihBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25EdXJhdGlvbigpKTsKQEAgLTU5NjIsNyArNTk2
Miw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uRHVyYXQKICAgICAgICAg
YW5pbWF0aW9uLT5zZXREdXJhdGlvbihwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpLzEw
MDAuMGYpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbkZpbGxNb2Rl
KEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgUmVuZGVyU3R5bGVSZXNv
bHZlcjo6bWFwQW5pbWF0aW9uRmlsbE1vZGUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZh
bHVlKQogewogICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19J
TklUSUFMKSB7CiAgICAgICAgIGxheWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb246OmluaXRpYWxB
bmltYXRpb25GaWxsTW9kZSgpKTsKQEAgLTU5ODYsNyArNTk4Niw3IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6bWFwQW5pbWF0aW9uRmlsbE0KICAgICB9CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6bWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uKiBhbmltYXRpb24sIENT
U1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgUmVuZGVyU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uSXRl
cmF0aW9uQ291bnQoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAg
ICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewog
ICAgICAgICBhbmltYXRpb24tPnNldEl0ZXJhdGlvbkNvdW50KEFuaW1hdGlvbjo6aW5pdGlhbEFu
aW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkpOwpAQCAtNjAwMyw3ICs2MDAzLDcgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25JdGVyYQogICAgICAgICBhbmltYXRpb24tPnNldEl0
ZXJhdGlvbkNvdW50KGludChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKSk7CiB9CiAK
LXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uTmFtZShBbmltYXRpb24qIGxheWVy
LCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIFJlbmRlclN0eWxlUmVzb2x2ZXI6Om1hcEFuaW1hdGlv
bk5hbWUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1
ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CiAgICAgICAgIGxh
eWVyLT5zZXROYW1lKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbk5hbWUoKSk7CkBAIC02MDE4
LDcgKzYwMTgsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbk5hbWUoCiAg
ICAgICAgIGxheWVyLT5zZXROYW1lKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsK
IH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25QbGF5U3RhdGUoQW5pbWF0
aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBSZW5kZXJTdHlsZVJlc29sdmVyOjpt
YXBBbmltYXRpb25QbGF5U3RhdGUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQog
ewogICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFM
KSB7CiAgICAgICAgIGxheWVyLT5zZXRQbGF5U3RhdGUoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0
aW9uUGxheVN0YXRlKCkpOwpAQCAtNjAzMCw3ICs2MDMwLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXBBbmltYXRpb25QbGF5UwogICAgIGxheWVyLT5zZXRQbGF5U3RhdGUocGxheVN0YXRl
KTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25Qcm9wZXJ0eShBbmlt
YXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBSZW5kZXJTdHlsZVJlc29s
dmVyOjptYXBBbmltYXRpb25Qcm9wZXJ0eShBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUq
IHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNT
U19JTklUSUFMKSB7CiAgICAgICAgIGFuaW1hdGlvbi0+c2V0UHJvcGVydHkoQW5pbWF0aW9uOjpp
bml0aWFsQW5pbWF0aW9uUHJvcGVydHkoKSk7CkBAIC02MDQ5LDcgKzYwNDksNyBAQCB2b2lkIENT
U1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvblByb3BlCiAgICAgICAgIGFuaW1hdGlvbi0+c2V0
UHJvcGVydHkoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4ocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkpKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25UaW1pbmdG
dW5jdGlvbihBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBSZW5k
ZXJTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbihBbmltYXRpb24qIGFu
aW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBl
KCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CiAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGlt
aW5nRnVuY3Rpb24oQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oKSk7
CkBAIC02MDg0LDcgKzYwODQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlv
blRpbWluCiAgICAgfQogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcE5pbmVQaWVjZUlt
YWdlKENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQordm9pZCBSZW5kZXJT
dHlsZVJlc29sdmVyOjptYXBOaW5lUGllY2VJbWFnZShDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVj
ZUltYWdlJiBpbWFnZSkKIHsKICAgICAvLyBJZiB3ZSdyZSBhIHByaW1pdGl2ZSB2YWx1ZSwgdGhl
biB3ZSBhcmUgIm5vbmUiIGFuZCBkb24ndCBuZWVkIHRvIGFsdGVyIHRoZSBlbXB0eSBpbWFnZSBh
dCBhbGwuCiAgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQpAQCAt
NjE0Nyw3ICs2MTQ3LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBOaW5lUGllY2VJbWFn
ZQogICAgIGltYWdlLnNldFZlcnRpY2FsUnVsZSh2ZXJ0aWNhbFJ1bGUpOwogfQogCi12b2lkIENT
U1N0eWxlU2VsZWN0b3I6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKQordm9pZCBSZW5kZXJTdHls
ZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KCkKIHsKICAgICBpZiAobV9zdHlsZS0+
dGV4dFNpemVBZGp1c3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjE1Nyw3ICs2MTU3LDcgQEAg
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja0ZvclRleHRTaXplQQogICAgIG1fc3R5bGUtPnNl
dEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwogfQogCi12b2lkIENTU1N0eWxl
U2VsZWN0b3I6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSkKK3ZvaWQgUmVuZGVyU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Jab29t
Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewog
ICAgIGlmIChzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpID09IHBhcmVudFN0eWxlLT5lZmZlY3RpdmVa
b29tKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTYxNjgsNyArNjE2OCw3IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6Y2hlY2tGb3Jab29tQ2hhbmcKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0
aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hl
Y2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKQordm9pZCBSZW5kZXJTdHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNG
YW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
CiB7CiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBjaGlsZEZvbnQgPSBzdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCk7CiAgIApAQCAtNjIwNiw3ICs2MjA2LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjpjaGVja0ZvckdlbmVyaWNGYQogICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3
Rm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzZXRGb250U2l6
ZShGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKK3ZvaWQgUmVu
ZGVyU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGZsb2F0IHNpemUpCiB7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNp
emUoc2l6ZSk7CiAKQEAgLTYyMTQsNyArNjIxNCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
c2V0Rm9udFNpemUoRm9udEQKICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdl
dENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKG1fY2hlY2tlci5tX2RvY3VtZW50LCBtX3N0
eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZH
Wm9vbVJ1bGVzKSk7IAogfQogCi1mbG9hdCBDU1NTdHlsZVNlbGVjdG9yOjpnZXRDb21wdXRlZFNp
emVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlclN0eWxlKiBzdHls
ZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkda
b29tUnVsZXMpCitmbG9hdCBSZW5kZXJTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9t
U3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlclN0eWxlKiBzdHlsZSwgYm9v
bCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVs
ZXMpCiB7CiAgICAgZmxvYXQgem9vbUZhY3RvciA9IDEuMGY7CiAgICAgaWYgKCF1c2VTVkdab29t
UnVsZXMpIHsKQEAgLTYyOTksNyArNjI5OSw3IEBAIHN0YXRpYyBjb25zdCBpbnQgc3RyaWN0Rm9u
dFNpemVUYWJsZVtmb24KIC8vIGZhY3RvcnMgZm9yIGVhY2gga2V5d29yZCB2YWx1ZS4KIHN0YXRp
YyBjb25zdCBmbG9hdCBmb250U2l6ZUZhY3RvcnNbdG90YWxLZXl3b3Jkc10gPSB7IDAuNjBmLCAw
Ljc1ZiwgMC44OWYsIDEuMGYsIDEuMmYsIDEuNWYsIDIuMGYsIDMuMGYgfTsKIAotZmxvYXQgQ1NT
U3R5bGVTZWxlY3Rvcjo6Zm9udFNpemVGb3JLZXl3b3JkKERvY3VtZW50KiBkb2N1bWVudCwgaW50
IGtleXdvcmQsIGJvb2wgZml4ZWQpCitmbG9hdCBSZW5kZXJTdHlsZVJlc29sdmVyOjpmb250U2l6
ZUZvcktleXdvcmQoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQga2V5d29yZCwgYm9vbCBmaXhlZCkK
IHsKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3MoKTsKICAgICBp
ZiAoIXNldHRpbmdzKQpAQCAtNjMxOSwxNCArNjMxOSwxNCBAQCBmbG9hdCBDU1NTdHlsZVNlbGVj
dG9yOjpmb250U2l6ZUZvcktleXdvCiAgICAgcmV0dXJuIG1heChmb250U2l6ZUZhY3RvcnNba2V5
d29yZCAtIENTU1ZhbHVlWHhTbWFsbF0qbWVkaXVtU2l6ZSwgbWluTG9naWNhbFNpemUpOwogfQog
Ci1mbG9hdCBDU1NTdHlsZVNlbGVjdG9yOjpsYXJnZXJGb250U2l6ZShmbG9hdCBzaXplLCBib29s
KSBjb25zdAorZmxvYXQgUmVuZGVyU3R5bGVSZXNvbHZlcjo6bGFyZ2VyRm9udFNpemUoZmxvYXQg
c2l6ZSwgYm9vbCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aGVyZSB3ZSBm
YWxsIGluIHRoZSBzaXplIHJhbmdlcyAoeHgtc21hbGwgdG8geHh4LWxhcmdlKSBhbmQgc2NhbGUg
dXAgdG8KICAgICAvLyB0aGUgbmV4dCBzaXplIGxldmVsLiAgCiAgICAgcmV0dXJuIHNpemUgKiAx
LjJmOwogfQogCi1mbG9hdCBDU1NTdHlsZVNlbGVjdG9yOjpzbWFsbGVyRm9udFNpemUoZmxvYXQg
c2l6ZSwgYm9vbCkgY29uc3QKK2Zsb2F0IFJlbmRlclN0eWxlUmVzb2x2ZXI6OnNtYWxsZXJGb250
U2l6ZShmbG9hdCBzaXplLCBib29sKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0
IHdoZXJlIHdlIGZhbGwgaW4gdGhlIHNpemUgcmFuZ2VzICh4eC1zbWFsbCB0byB4eHgtbGFyZ2Up
IGFuZCBzY2FsZSBkb3duIHRvCiAgICAgLy8gdGhlIG5leHQgc2l6ZSBsZXZlbC4gCkBAIC02Mzcw
LDcgKzYzNzAsNyBAQCBzdGF0aWMgQ29sb3IgY29sb3JGb3JDU1NWYWx1ZShpbnQgY3NzVmFsCiAg
ICAgcmV0dXJuIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtQ29sb3IoY3NzVmFs
dWVJZCk7CiB9CiAKLUNvbG9yIENTU1N0eWxlU2VsZWN0b3I6OmdldENvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSkKK0NvbG9yIFJlbmRlclN0
eWxlUmVzb2x2ZXI6OmdldENvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSkKIHsKICAgICBDb2xvciBjb2w7CiAgICAgaW50IGlkZW50ID0gcHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCk7CkBAIC02MzkyLDE3ICs2MzkyLDE3IEBAIENvbG9yIENT
U1N0eWxlU2VsZWN0b3I6OmdldENvbG9yRnJvbVByaW0KICAgICByZXR1cm4gY29sOwogfQogCi1i
b29sIENTU1N0eWxlU2VsZWN0b3I6Omhhc1NlbGVjdG9yRm9yQXR0cmlidXRlKGNvbnN0IEF0b21p
Y1N0cmluZyAmYXR0cm5hbWUpCitib29sIFJlbmRlclN0eWxlUmVzb2x2ZXI6Omhhc1NlbGVjdG9y
Rm9yQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyAmYXR0cm5hbWUpCiB7CiAgICAgcmV0dXJu
IG1fc2VsZWN0b3JBdHRycy5jb250YWlucyhhdHRybmFtZS5pbXBsKCkpOwogfQogCi12b2lkIENT
U1N0eWxlU2VsZWN0b3I6OmFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdChjb25z
dCBNZWRpYVF1ZXJ5RXhwKiBleHByLCBib29sIHJlc3VsdCkKK3ZvaWQgUmVuZGVyU3R5bGVSZXNv
bHZlcjo6YWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVl
cnlFeHAqIGV4cHIsIGJvb2wgcmVzdWx0KQogewogICAgIG1fdmlld3BvcnREZXBlbmRlbnRNZWRp
YVF1ZXJ5UmVzdWx0cy5hcHBlbmQobmV3IE1lZGlhUXVlcnlSZXN1bHQoKmV4cHIsIHJlc3VsdCkp
OwogfQogCi1ib29sIENTU1N0eWxlU2VsZWN0b3I6OmFmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgp
IGNvbnN0Citib29sIFJlbmRlclN0eWxlUmVzb2x2ZXI6OmFmZmVjdGVkQnlWaWV3cG9ydENoYW5n
ZSgpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgcyA9IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1
ZXJ5UmVzdWx0cy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHM7IGkrKykg
ewpAQCAtNjQxMiw3ICs2NDEyLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjphZmZlY3RlZEJ5
Vmlld3BvcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpT
ZWxlY3RvckNoZWNrZXI6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKQordm9pZCBSZW5kZXJTdHls
ZVJlc29sdmVyOjpTZWxlY3RvckNoZWNrZXI6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKQogewog
ICAgIGlmIChtX2xpbmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0ZS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTY0MjIsNyArNjQyMiw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6U2Vs
ZWN0b3JDaGVja2VyOjoKICAgICB9CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0
b3JDaGVja2VyOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoKQordm9p
ZCBSZW5kZXJTdHlsZVJlc29sdmVyOjpTZWxlY3RvckNoZWNrZXI6OnZpc2l0ZWRTdGF0ZUNoYW5n
ZWQoTGlua0hhc2ggdmlzaXRlZEhhc2gpCiB7CiAgICAgaWYgKCFtX2xpbmtzQ2hlY2tlZEZvclZp
c2l0ZWRTdGF0ZS5jb250YWlucyh2aXNpdGVkSGFzaCkpCiAgICAgICAgIHJldHVybjsKQEAgLTY0
NjIsNyArNjQ2Miw3IEBAIHN0YXRpYyBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUK
ICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOwogfQogCi1ib29sIENTU1N0eWxl
U2VsZWN0b3I6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJl
bmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgVHJhbnNmb3JtT3BlcmF0
aW9ucyYgb3V0T3BlcmF0aW9ucykKK2Jvb2wgUmVuZGVyU3R5bGVSZXNvbHZlcjo6Y3JlYXRlVHJh
bnNmb3JtT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBS
ZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdXRPcGVyYXRpb25z
KQogewogICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdHlsZSA/IHN0eWxlLT5lZmZlY3RpdmVab29t
KCkgOiAxOwogCkluZGV4OiBXZWJDb3JlL2Nzcy9SZW5kZXJTdHlsZVJlc29sdmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9jc3MvUmVuZGVyU3R5bGVSZXNvbHZlci5oCShyZXZpc2lvbiA2Mzgy
MCkJKGZyb20gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oOjYzODIwKQorKysgV2ViQ29y
ZS9jc3MvUmVuZGVyU3R5bGVSZXNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzc1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBDU1NTdHlsZVNlbGVjdG9y
X2gKKyNkZWZpbmUgQ1NTU3R5bGVTZWxlY3Rvcl9oCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0
b3IuaCIKKyNpbmNsdWRlICJMaW5rSGFzaC5oIgorI2luY2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIK
KyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENTU1BhZ2VS
dWxlOworY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7CitjbGFzcyBDU1NQcm9wZXJ0eTsKK2NsYXNz
IENTU0ZvbnRGYWNlOworY2xhc3MgQ1NTRm9udEZhY2VSdWxlOworY2xhc3MgQ1NTUnVsZURhdGE7
CitjbGFzcyBDU1NSdWxlRGF0YUxpc3Q7CitjbGFzcyBDU1NSdWxlTGlzdDsKK2NsYXNzIENTU1J1
bGVTZXQ7CitjbGFzcyBDU1NTZWxlY3RvcjsKK2NsYXNzIENTU1N0eWxlUnVsZTsKK2NsYXNzIENT
U1N0eWxlU2hlZXQ7CitjbGFzcyBDU1NWYWx1ZTsKK2NsYXNzIENTU1ZhcmlhYmxlRGVwZW5kZW50
VmFsdWU7CitjbGFzcyBDU1NWYXJpYWJsZXNSdWxlOworY2xhc3MgRGF0YUdyaWRDb2x1bW47Citj
bGFzcyBEb2N1bWVudDsKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBGcmFtZTsKK2NsYXNzIEZyYW1l
VmlldzsKK2NsYXNzIEtVUkw7CitjbGFzcyBLZXlmcmFtZUxpc3Q7CitjbGFzcyBNZWRpYVF1ZXJ5
RXZhbHVhdG9yOworY2xhc3MgTm9kZTsKK2NsYXNzIFNldHRpbmdzOworY2xhc3MgU3R5bGVJbWFn
ZTsKK2NsYXNzIFN0eWxlU2hlZXQ7CitjbGFzcyBTdHlsZVNoZWV0TGlzdDsKK2NsYXNzIFN0eWxl
ZEVsZW1lbnQ7CitjbGFzcyBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU7CitjbGFzcyBXZWJLaXRDU1NL
ZXlmcmFtZXNSdWxlOworCitjbGFzcyBNZWRpYVF1ZXJ5UmVzdWx0IDogcHVibGljIE5vbmNvcHlh
YmxlIHsKK3B1YmxpYzoKKyAgICBNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAm
IGV4cHIsIGJvb2wgcmVzdWx0KQorICAgICAgICA6IG1fZXhwcmVzc2lvbihleHByKQorICAgICAg
ICAsIG1fcmVzdWx0KHJlc3VsdCkKKyAgICB7CisgICAgfQorCisgICAgTWVkaWFRdWVyeUV4cCBt
X2V4cHJlc3Npb247CisgICAgYm9vbCBtX3Jlc3VsdDsKK307CisKKyAgICAvLyBUaGlzIGNsYXNz
IHNlbGVjdHMgYSBSZW5kZXJTdHlsZSBmb3IgYSBnaXZlbiBlbGVtZW50IGJhc2VkIG9uIGEgY29s
bGVjdGlvbiBvZiBzdHlsZXNoZWV0cy4KKyAgICBjbGFzcyBDU1NTdHlsZVNlbGVjdG9yIDogcHVi
bGljIE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIENTU1N0eWxlU2VsZWN0b3Io
RG9jdW1lbnQqLCBTdHlsZVNoZWV0TGlzdCogYXV0aG9yU2hlZXRzLCBDU1NTdHlsZVNoZWV0KiBt
YXBwZWRFbGVtZW50U2hlZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVTaGVl
dCogcGFnZVVzZXJTaGVldCwgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBw
YWdlR3JvdXBVc2VyU2hlZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RyaWN0
UGFyc2luZywgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpOworICAgICAgICB+Q1NTU3R5
bGVTZWxlY3RvcigpOworCisgICAgICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50
KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNldWRvSWQgPSBOT1BTRVVETyk7Cisg
ICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBl
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBib29sIGFsbG93U2hhcmluZyA9IHRydWUs
IGJvb2wgcmVzb2x2ZUZvclJvb3REZWZhdWx0ID0gZmFsc2UsIGJvb2wgbWF0Y2hWaXNpdGVkUHNl
dWRvQ2xhc3MgPSBmYWxzZSk7CisgICAgICAgIAorICAgICAgICB2b2lkIGtleWZyYW1lU3R5bGVz
Rm9yQW5pbWF0aW9uKEVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIEtleWZyYW1lTGlzdCYg
bGlzdCk7CisKKyAgICAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGVGb3JF
bGVtZW50KFBzZXVkb0lkIHBzZXVkbywgRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gMCwgYm9vbCBtYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IGZhbHNlKTsKKworICAgICAg
ICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCk7CisK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRG9jdW1lbnQo
RG9jdW1lbnQqKTsKKworI2lmIEVOQUJMRShEQVRBR1JJRCkKKyAgICAgICAgLy8gRGF0YWdyaWQg
c3R5bGUgY29tcHV0YXRpb24gKHVzZXMgdW5pcXVlIHBzZXVkbyBlbGVtZW50cyBhbmQgc3RydWN0
dXJlcykKKyAgICAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGVGb3JEYXRh
R3JpZENvbHVtbihEYXRhR3JpZENvbHVtbiosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Cisg
ICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVkb1N0eWxlRm9yRGF0YUdyaWRDb2x1
bW5IZWFkZXIoRGF0YUdyaWRDb2x1bW4qLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworI2Vu
ZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQqKTsK
KyAgICAgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7CisgICAgICAgIE5vZGUq
IGxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCBkZXB0aCA9IDEpOwor
ICAgICAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChOb2RlKik7CisKKyAgICAgICAg
UmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQorCisg
ICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVu
ZGVyU3R5bGUqLCBjb25zdCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqLCBLZXlmcmFtZUxpc3QmKTsK
KworICAgIHB1YmxpYzoKKyAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyB3aWxsIGdpdmUgYmFjayB0
aGUgc2V0IG9mIHJ1bGVzIHRoYXQgbWF0Y2hlZCBmb3IgYSBnaXZlbiBlbGVtZW50IChvciBhIHBz
ZXVkby1lbGVtZW50KS4KKyAgICAgICAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gc3R5bGVSdWxl
c0ZvckVsZW1lbnQoRWxlbWVudCosIGJvb2wgYXV0aG9yT25seSk7CisgICAgICAgIFBhc3NSZWZQ
dHI8Q1NTUnVsZUxpc3Q+IHBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqLCBQc2V1
ZG9JZCwgYm9vbCBhdXRob3JPbmx5KTsKKworICAgICAgICAvLyBHaXZlbiBhIENTUyBrZXl3b3Jk
IGluIHRoZSByYW5nZSAoeHgtc21hbGwgdG8gLXdlYmtpdC14eHgtbGFyZ2UpLCB0aGlzIGZ1bmN0
aW9uIHdpbGwgcmV0dXJuCisgICAgICAgIC8vIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBzY2FsZWQg
cmVsYXRpdmUgdG8gdGhlIHVzZXIncyBkZWZhdWx0IChtZWRpdW0pLgorICAgICAgICBzdGF0aWMg
ZmxvYXQgZm9udFNpemVGb3JLZXl3b3JkKERvY3VtZW50KiwgaW50IGtleXdvcmQsIGJvb2wgbW9u
b3NwYWNlKTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gV2hlbiB0aGUgQ1NT
IGtleXdvcmQgImxhcmdlciIgaXMgdXNlZCwgdGhpcyBmdW5jdGlvbiB3aWxsIGF0dGVtcHQgdG8g
bWF0Y2ggd2l0aGluIHRoZSBrZXl3b3JkCisgICAgICAgIC8vIHRhYmxlLCBhbmQgZmFpbGluZyB0
aGF0LCB3aWxsIHNpbXBseSBtdWx0aXBseSBieSAxLjIuCisgICAgICAgIGZsb2F0IGxhcmdlckZv
bnRTaXplKGZsb2F0IHNpemUsIGJvb2wgcXVpcmtzTW9kZSkgY29uc3Q7CisKKyAgICAgICAgLy8g
TGlrZSB0aGUgcHJldmlvdXMgZnVuY3Rpb24sIGJ1dCBmb3IgdGhlIGtleXdvcmQgInNtYWxsZXIi
LgorICAgICAgICBmbG9hdCBzbWFsbGVyRm9udFNpemUoZmxvYXQgc2l6ZSwgYm9vbCBxdWlya3NN
b2RlKSBjb25zdDsKKworICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBzZXRTdHlsZShQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBzKSB7IG1fc3R5bGUgPSBzOyB9IC8vIFVzZWQgYnkgdGhlIGRvY3Vt
ZW50IHdoZW4gc2V0dGluZyB1cCBpdHMgcm9vdCBzdHlsZS4KKyAgICAgICAgdm9pZCBzZXRGb250
U2l6ZShGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzaXplKTsKKworICAgICAgICB2b2lkIGFwcGx5
UHJvcGVydHlUb1N0eWxlKGludCBpZCwgQ1NTVmFsdWUqLCBSZW5kZXJTdHlsZSopOworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgc3RhdGljIGZsb2F0IGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZp
ZWRTaXplKERvY3VtZW50KiwgUmVuZGVyU3R5bGUqLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9h
dCBzcGVjaWZpZWRTaXplLCBib29sIHVzZVNWR1pvb21SdWxlcyk7CisKKyAgICBwdWJsaWM6Cisg
ICAgICAgIENvbG9yIGdldENvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
Kik7CisKKyAgICAgICAgYm9vbCBoYXNTZWxlY3RvckZvckF0dHJpYnV0ZShjb25zdCBBdG9taWNT
dHJpbmcmKTsKKyAKKyAgICAgICAgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSB7IHJl
dHVybiBtX2ZvbnRTZWxlY3Rvci5nZXQoKTsgfQorCisgICAgICAgIC8vIENoZWNrcyBpZiBhIGNv
bXBvdW5kIHNlbGVjdG9yICh3aGljaCBjYW4gY29uc2lzdCBvZiBtdWx0aXBsZSBzaW1wbGUgc2Vs
ZWN0b3JzKSBtYXRjaGVzIHRoZSBjdXJyZW50IGVsZW1lbnQuCisgICAgICAgIGJvb2wgY2hlY2tT
ZWxlY3RvcihDU1NTZWxlY3RvciopOworCisgICAgICAgIHZvaWQgYWRkVmlld3BvcnREZXBlbmRl
bnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAqLCBib29sIHJlc3VsdCk7CisK
KyAgICAgICAgYm9vbCBhZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UoKSBjb25zdDsKKworICAgICAg
ICB2b2lkIGFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKSB7IG1fY2hlY2tlci5hbGxWaXNpdGVkU3Rh
dGVDaGFuZ2VkKCk7IH0KKyAgICAgICAgdm9pZCB2aXNpdGVkU3RhdGVDaGFuZ2VkKExpbmtIYXNo
IHZpc2l0ZWRIYXNoKSB7IG1fY2hlY2tlci52aXNpdGVkU3RhdGVDaGFuZ2VkKHZpc2l0ZWRIYXNo
KTsgfQorCisgICAgICAgIHZvaWQgYWRkVmFyaWFibGVzKENTU1ZhcmlhYmxlc1J1bGUqIHZhcmlh
Ymxlcyk7CisgICAgICAgIENTU1ZhbHVlKiByZXNvbHZlVmFyaWFibGVEZXBlbmRlbnRWYWx1ZShD
U1NWYXJpYWJsZURlcGVuZGVudFZhbHVlKik7CisgICAgICAgIHZvaWQgcmVzb2x2ZVZhcmlhYmxl
c0ZvckRlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsLCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogbmV3RGVjbCwgSGFzaFNldDxTdHJpbmc+JiB1c2VkQmxvY2tW
YXJpYWJsZXMpOworCisgICAgICAgIHZvaWQgYWRkS2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFdl
YktpdENTU0tleWZyYW1lc1J1bGU+IHJ1bGUpOworICAgICAgICB2b2lkIGFkZFBhZ2VTdHlsZShQ
YXNzUmVmUHRyPENTU1BhZ2VSdWxlPik7CisKKyAgICAgICAgc3RhdGljIGJvb2wgY3JlYXRlVHJh
bnNmb3JtT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUs
IFJlbmRlclN0eWxlKiByb290U3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMmIG91dE9wZXJhdGlv
bnMpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgZW51bSBTZWxlY3Rvck1hdGNoIHsgU2VsZWN0
b3JNYXRjaGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkg
fTsKKworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQg
c2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBo
YXMgY2hhbmdlZC4gLWR3aAorICAgICAgICB2b2lkIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5n
ZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgICAgIHZvaWQg
Y2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KTsKKyAgICAgICAgdm9pZCBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7CisKKyAgICAgICAgdm9p
ZCBhZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKTsKKworICAgICAgICB2
b2lkIGFkZE1hdGNoZWRSdWxlKENTU1J1bGVEYXRhKiBydWxlKSB7IG1fbWF0Y2hlZFJ1bGVzLmFw
cGVuZChydWxlKTsgfQorICAgICAgICB2b2lkIGFkZE1hdGNoZWREZWNsYXJhdGlvbihDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCk7CisKKyAgICAgICAgdm9pZCBtYXRjaFJ1bGVzKENT
U1J1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgpOworICAg
ICAgICB2b2lkIG1hdGNoUnVsZXNGb3JMaXN0KENTU1J1bGVEYXRhTGlzdCosIGludCYgZmlyc3RS
dWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCk7CisgICAgICAgIHZvaWQgc29ydE1hdGNoZWRS
dWxlcyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKTsKKworICAgICAgICB0ZW1wbGF0ZSA8
Ym9vbCBmaXJzdFBhc3M+CisgICAgICAgIHZvaWQgYXBwbHlEZWNsYXJhdGlvbnMoYm9vbCBpbXBv
cnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgpOworCisgICAgICAgIHZvaWQgbWF0
Y2hQYWdlUnVsZXMoQ1NTUnVsZVNldCosIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFn
ZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7CisgICAgICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXNG
b3JMaXN0KENTU1J1bGVEYXRhTGlzdCosIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFn
ZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7CisgICAgICAgIGJvb2wgaXNMZWZ0UGFnZShpbnQg
cGFnZUluZGV4KSBjb25zdDsKKyAgICAgICAgYm9vbCBpc1JpZ2h0UGFnZShpbnQgcGFnZUluZGV4
KSBjb25zdCB7IHJldHVybiAhaXNMZWZ0UGFnZShwYWdlSW5kZXgpOyB9CisgICAgICAgIGJvb2wg
aXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBwYWdlTmFt
ZShpbnQgcGFnZUluZGV4KSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIENTU1J1bGVTZXQqIG1f
YXV0aG9yU3R5bGU7CisgICAgICAgIENTU1J1bGVTZXQqIG1fdXNlclN0eWxlOworCisgICAgICAg
IGJvb2wgbV9oYXNVQUFwcGVhcmFuY2U7CisgICAgICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRh
OworICAgICAgICBGaWxsTGF5ZXIgbV9iYWNrZ3JvdW5kRGF0YTsKKyAgICAgICAgQ29sb3IgbV9i
YWNrZ3JvdW5kQ29sb3I7CisKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0lt
cGwqLCBSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZT4gPiBLZXlmcmFtZXNSdWxlTWFwOwor
ICAgICAgICBLZXlmcmFtZXNSdWxlTWFwIG1fa2V5ZnJhbWVzUnVsZU1hcDsKKworICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZU5vdFlldEF2YWlsYWJsZSgpIHsg
cmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7IH0KKworICAgICAgICBjbGFzcyBTZWxlY3Rv
ckNoZWNrZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBTZWxlY3RvckNoZWNrZXIoRG9jdW1lbnQqLCBib29sIHN0cmljdFBhcnNpbmcpOworCisg
ICAgICAgICAgICBib29sIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KikgY29u
c3Q7CisgICAgICAgICAgICBTZWxlY3Rvck1hdGNoIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3Iq
LCBFbGVtZW50KiwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIHNlbGVjdG9yQXR0cnMsIFBz
ZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVy
ZWRMaW5rLCBSZW5kZXJTdHlsZSogPSAwLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxl
ID0gMCkgY29uc3Q7CisgICAgICAgICAgICBib29sIGNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0
b3IqLCBFbGVtZW50KiwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIHNlbGVjdG9yQXR0cnMs
IFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIFJlbmRlclN0eWxl
KiwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3Q7CisgICAgICAgICAgICBi
b29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3IqLCBQc2V1ZG9JZCYgZHlu
YW1pY1BzZXVkbykgY29uc3Q7CisKKyAgICAgICAgICAgIEVJbnNpZGVMaW5rIGRldGVybWluZUxp
bmtTdGF0ZShFbGVtZW50KiBlbGVtZW50KSBjb25zdDsKKyAgICAgICAgICAgIEVJbnNpZGVMaW5r
IGRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0OworICAg
ICAgICAgICAgdm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCk7CisgICAgICAgICAgICB2b2lk
IHZpc2l0ZWRTdGF0ZUNoYW5nZWQoTGlua0hhc2ggdmlzaXRlZEhhc2gpOworCisgICAgICAgICAg
ICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICAgICAgICAgIGJvb2wgbV9zdHJpY3RQYXJzaW5n
OworICAgICAgICAgICAgYm9vbCBtX2NvbGxlY3RSdWxlc09ubHk7CisgICAgICAgICAgICBQc2V1
ZG9JZCBtX3BzZXVkb1N0eWxlOworICAgICAgICAgICAgYm9vbCBtX2RvY3VtZW50SXNIVE1MOwor
ICAgICAgICAgICAgbXV0YWJsZSBib29sIG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3M7CisgICAg
ICAgICAgICBtdXRhYmxlIEhhc2hTZXQ8TGlua0hhc2gsIExpbmtIYXNoSGFzaD4gbV9saW5rc0No
ZWNrZWRGb3JWaXNpdGVkU3RhdGU7CisgICAgICAgIH07CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBzdGF0aWMgUmVuZGVyU3R5bGUqIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CisKKyAgICAgICAg
dm9pZCBpbml0KCk7CisKKyAgICAgICAgdm9pZCBtYXRjaFVBUnVsZXMoaW50JiBmaXJzdFVBUnVs
ZSwgaW50JiBsYXN0VUFSdWxlKTsKKyAgICAgICAgdm9pZCB1cGRhdGVGb250KCk7CisgICAgICAg
IHZvaWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CisKKyAgICAgICAgdm9pZCBtYXBGaWxs
QXR0YWNobWVudChGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcEZpbGxD
bGlwKEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgICAgIHZvaWQgbWFwRmlsbENvbXBvc2l0
ZShGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcEZpbGxPcmlnaW4oRmls
bExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICAgICAgdm9pZCBtYXBGaWxsSW1hZ2UoRmlsbExheWVy
KiwgQ1NTVmFsdWUqKTsKKyAgICAgICAgdm9pZCBtYXBGaWxsUmVwZWF0WChGaWxsTGF5ZXIqLCBD
U1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcEZpbGxSZXBlYXRZKEZpbGxMYXllciosIENTU1Zh
bHVlKik7CisgICAgICAgIHZvaWQgbWFwRmlsbFNpemUoRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsK
KyAgICAgICAgdm9pZCBtYXBGaWxsWFBvc2l0aW9uKEZpbGxMYXllciosIENTU1ZhbHVlKik7Cisg
ICAgICAgIHZvaWQgbWFwRmlsbFlQb3NpdGlvbihGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworCisg
ICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uRGVsYXkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAg
ICAgICAgdm9pZCBtYXBBbmltYXRpb25EaXJlY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsK
KyAgICAgICAgdm9pZCBtYXBBbmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSop
OworICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbiosIENTU1ZhbHVl
Kik7CisgICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uKiwg
Q1NTVmFsdWUqKTsKKyAgICAgICAgdm9pZCBtYXBBbmltYXRpb25OYW1lKEFuaW1hdGlvbiosIENT
U1ZhbHVlKik7CisgICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uUGxheVN0YXRlKEFuaW1hdGlvbios
IENTU1ZhbHVlKik7CisgICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uUHJvcGVydHkoQW5pbWF0aW9u
KiwgQ1NTVmFsdWUqKTsKKyAgICAgICAgdm9pZCBtYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbihB
bmltYXRpb24qLCBDU1NWYWx1ZSopOworCisgICAgICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2Uo
Q1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOworCisgICAgICAgIHZvaWQgYXBwbHlQcm9wZXJ0
eShpbnQgaWQsIENTU1ZhbHVlKik7CisgICAgICAgIHZvaWQgYXBwbHlQYWdlU2l6ZVByb3BlcnR5
KENTU1ZhbHVlKik7CisgICAgICAgIGJvb2wgcGFnZVNpemVGcm9tTmFtZShDU1NQcmltaXRpdmVW
YWx1ZSosIENTU1ByaW1pdGl2ZVZhbHVlKiwgTGVuZ3RoJiB3aWR0aCwgTGVuZ3RoJiBoZWlnaHQp
OworICAgICAgICBMZW5ndGggbW1MZW5ndGgoZG91YmxlIG1tKTsKKyAgICAgICAgTGVuZ3RoIGlu
Y2hMZW5ndGgoZG91YmxlIGluY2gpOworI2lmIEVOQUJMRShTVkcpCisgICAgICAgIHZvaWQgYXBw
bHlTVkdQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlKik7CisjZW5kaWYKKworICAgICAgICBTdHls
ZUltYWdlKiBzdHlsZUltYWdlKENTU1ZhbHVlKiB2YWx1ZSk7CisKKyAgICAgICAgLy8gV2UgY29s
bGVjdCB0aGUgc2V0IG9mIGRlY2xzIHRoYXQgbWF0Y2ggaW4gfG1fbWF0Y2hlZERlY2xzfC4gIFdl
IHRoZW4gd2FsayB0aGUKKyAgICAgICAgLy8gc2V0IG9mIG1hdGNoZWQgZGVjbHMgZm91ciB0aW1l
cywgb25jZSBmb3IgdGhvc2UgcHJvcGVydGllcyB0aGF0IG90aGVycyBkZXBlbmQgb24gKGxpa2Ug
Zm9udC1zaXplKSwKKyAgICAgICAgLy8gYW5kIHRoZW4gYSBzZWNvbmQgdGltZSBmb3IgYWxsIHRo
ZSByZW1haW5pbmcgcHJvcGVydGllcy4gIFdlIHRoZW4gZG8gdGhlIHNhbWUgdHdvIHBhc3Nlcwor
ICAgICAgICAvLyBmb3IgYW55ICFpbXBvcnRhbnQgcnVsZXMuCisgICAgICAgIFZlY3RvcjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIDY0PiBtX21hdGNoZWREZWNsczsKKworICAgICAgICAv
LyBBIGJ1ZmZlciB1c2VkIHRvIGhvbGQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIGZvciBhbiBl
bGVtZW50LCBhbmQgYSB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQgZm9yCisgICAgICAgIC8vIG1lcmdl
IHNvcnRpbmcuCisgICAgICAgIFZlY3RvcjxDU1NSdWxlRGF0YSosIDMyPiBtX21hdGNoZWRSdWxl
czsKKworICAgICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1fcnVsZUxpc3Q7CisKKyAgICAgICAg
TWVkaWFRdWVyeUV2YWx1YXRvciogbV9tZWRpdW07CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gbV9yb290RGVmYXVsdFN0eWxlOworCisgICAgICAgIFBzZXVkb0lkIG1fZHluYW1pY1BzZXVk
bzsKKworICAgICAgICBTZWxlY3RvckNoZWNrZXIgbV9jaGVja2VyOworCisgICAgICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIG1fcGFyZW50U3R5
bGU7CisgICAgICAgIFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGU7CisgICAgICAgIEVs
ZW1lbnQqIG1fZWxlbWVudDsKKyAgICAgICAgU3R5bGVkRWxlbWVudCogbV9zdHlsZWRFbGVtZW50
OworICAgICAgICBFSW5zaWRlTGluayBtX2VsZW1lbnRMaW5rU3RhdGU7CisgICAgICAgIE5vZGUq
IG1fcGFyZW50Tm9kZTsKKyAgICAgICAgQ1NTVmFsdWUqIG1fbGluZUhlaWdodFZhbHVlOworICAg
ICAgICBib29sIG1fZm9udERpcnR5OworICAgICAgICBib29sIG1fbWF0Y2hBdXRob3JBbmRVc2Vy
U3R5bGVzOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPENTU0ZvbnRTZWxlY3Rvcj4gbV9mb250
U2VsZWN0b3I7CisgICAgICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IG1fc2VsZWN0b3JB
dHRyczsKKyAgICAgICAgVmVjdG9yPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4gbV9hZGRp
dGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsczsKKyAgICAgICAgVmVjdG9yPE1lZGlhUXVlcnlSZXN1
bHQqPiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7CisgICAgICAgIAorICAg
ICAgICBIYXNoTWFwPFN0cmluZywgQ1NTVmFyaWFibGVzUnVsZSo+IG1fdmFyaWFibGVzTWFwOwor
ICAgICAgICBIYXNoTWFwPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiA+IG1fcmVzb2x2ZWRWYXJpYWJsZXNEZWNsYXJhdGlvbnM7
CisgICAgfTsKKworICAgIGNsYXNzIENTU1J1bGVEYXRhIDogcHVibGljIE5vbmNvcHlhYmxlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIENTU1J1bGVEYXRhKHVuc2lnbmVkIHBvcywgQ1NTU3R5bGVS
dWxlKiByLCBDU1NTZWxlY3Rvciogc2VsLCBDU1NSdWxlRGF0YSogcHJldiA9IDApCisgICAgICAg
ICAgICA6IG1fcG9zaXRpb24ocG9zKQorICAgICAgICAgICAgLCBtX3J1bGUocikKKyAgICAgICAg
ICAgICwgbV9zZWxlY3RvcihzZWwpCisgICAgICAgICAgICAsIG1fbmV4dCgwKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAocHJldikKKyAgICAgICAgICAgICAgICBwcmV2LT5tX25leHQgPSB0
aGlzOworICAgICAgICB9CisKKyAgICAgICAgfkNTU1J1bGVEYXRhKCkgCisgICAgICAgIHsgCisg
ICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBwb3NpdGlvbigpIHsgcmV0dXJuIG1fcG9zaXRp
b247IH0KKyAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlKCkgeyByZXR1cm4gbV9ydWxlOyB9Cisg
ICAgICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcigpIHsgcmV0dXJuIG1fc2VsZWN0b3I7IH0KKyAg
ICAgICAgQ1NTUnVsZURhdGEqIG5leHQoKSB7IHJldHVybiBtX25leHQ7IH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIHVuc2lnbmVkIG1fcG9zaXRpb247CisgICAgICAgIENTU1N0eWxlUnVsZSog
bV9ydWxlOworICAgICAgICBDU1NTZWxlY3RvciogbV9zZWxlY3RvcjsKKyAgICAgICAgQ1NTUnVs
ZURhdGEqIG1fbmV4dDsKKyAgICB9OworCisgICAgY2xhc3MgQ1NTUnVsZURhdGFMaXN0IDogcHVi
bGljIE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIENTU1J1bGVEYXRhTGlzdCh1
bnNpZ25lZCBwb3MsIENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCkKKyAgICAg
ICAgICAgIDogbV9maXJzdChuZXcgQ1NTUnVsZURhdGEocG9zLCBydWxlLCBzZWwpKQorICAgICAg
ICAgICAgLCBtX2xhc3QobV9maXJzdCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
fkNTU1J1bGVEYXRhTGlzdCgpIAorICAgICAgICB7IAorICAgICAgICAgICAgQ1NTUnVsZURhdGEq
IHB0cjsKKyAgICAgICAgICAgIENTU1J1bGVEYXRhKiBuZXh0OworICAgICAgICAgICAgcHRyID0g
bV9maXJzdDsKKyAgICAgICAgICAgIHdoaWxlIChwdHIpIHsKKyAgICAgICAgICAgICAgICBuZXh0
ID0gcHRyLT5uZXh0KCk7CisgICAgICAgICAgICAgICAgZGVsZXRlIHB0cjsKKyAgICAgICAgICAg
ICAgICBwdHIgPSBuZXh0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQ1NT
UnVsZURhdGEqIGZpcnN0KCkgeyByZXR1cm4gbV9maXJzdDsgfQorICAgICAgICBDU1NSdWxlRGF0
YSogbGFzdCgpIHsgcmV0dXJuIG1fbGFzdDsgfQorCisgICAgICAgIHZvaWQgYXBwZW5kKHVuc2ln
bmVkIHBvcywgQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKSB7IG1fbGFzdCA9
IG5ldyBDU1NSdWxlRGF0YShwb3MsIHJ1bGUsIHNlbCwgbV9sYXN0KTsgfQorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgQ1NTUnVsZURhdGEqIG1fZmlyc3Q7CisgICAgICAgIENTU1J1bGVEYXRhKiBt
X2xhc3Q7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ1NT
U3R5bGVTZWxlY3Rvcl9oCkluZGV4OiBXZWJDb3JlL2Nzcy9SZW5kZXJTdHlsZVJlc29sdmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvUmVuZGVyU3R5bGVSZXNvbHZlci5oCShyZXZpc2lv
biA2MzgyMCkKKysrIFdlYkNvcmUvY3NzL1JlbmRlclN0eWxlUmVzb2x2ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtODAsMTIgKzgwLDEyIEBAIHB1YmxpYzoKIH07CiAKICAgICAvLyBUaGlzIGNsYXNz
IHNlbGVjdHMgYSBSZW5kZXJTdHlsZSBmb3IgYSBnaXZlbiBlbGVtZW50IGJhc2VkIG9uIGEgY29s
bGVjdGlvbiBvZiBzdHlsZXNoZWV0cy4KLSAgICBjbGFzcyBDU1NTdHlsZVNlbGVjdG9yIDogcHVi
bGljIE5vbmNvcHlhYmxlIHsKKyAgICBjbGFzcyBSZW5kZXJTdHlsZVJlc29sdmVyIDogcHVibGlj
IE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENTU1N0eWxlU2VsZWN0b3IoRG9j
dW1lbnQqLCBTdHlsZVNoZWV0TGlzdCogYXV0aG9yU2hlZXRzLCBDU1NTdHlsZVNoZWV0KiBtYXBw
ZWRFbGVtZW50U2hlZXQsCisgICAgICAgIFJlbmRlclN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqLCBT
dHlsZVNoZWV0TGlzdCogYXV0aG9yU2hlZXRzLCBDU1NTdHlsZVNoZWV0KiBtYXBwZWRFbGVtZW50
U2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJT
aGVldCwgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBwYWdlR3JvdXBVc2Vy
U2hlZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RyaWN0UGFyc2luZywgYm9v
bCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpOwotICAgICAgICB+Q1NTU3R5bGVTZWxlY3Rvcigp
OworICAgICAgICB+UmVuZGVyU3R5bGVSZXNvbHZlcigpOwogCiAgICAgICAgIHZvaWQgaW5pdEZv
clN0eWxlUmVzb2x2ZShFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNl
dWRvSWQgPSBOT1BTRVVETyk7CiAgICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxl
Rm9yRWxlbWVudChFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBib29s
IGFsbG93U2hhcmluZyA9IHRydWUsIGJvb2wgcmVzb2x2ZUZvclJvb3REZWZhdWx0ID0gZmFsc2Us
IGJvb2wgbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZSk7CkluZGV4OiBXZWJDb3JlL2Nz
cy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9TVkdD
U1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gNjM4MjApCisrKyBXZWJDb3JlL2Nzcy9TVkdD
U1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJDU1NTdHlsZVNl
bGVjdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGVSZXNvbHZlci5oIgogCiAjaW5jbHVkZSAi
Q1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMu
aCIKQEAgLTEwMiw3ICsxMDIsNyBAQCBzdGF0aWMgQ29sb3IgY29sb3JGcm9tU1ZHQ29sb3JDU1NW
YWx1ZShDCiAgICAgcmV0dXJuIGNvbG9yOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFw
cGx5U1ZHUHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIFJlbmRlclN0eWxl
UmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAg
ICAgQVNTRVJUKHZhbHVlKTsKICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSAwOwpAQCAtNTYyLDcgKzU2Miw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlTVkdQ
cm9wZXJ0eSgKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLy8gSWYg
eW91IGNyYXNoIGhlcmUsIGl0J3MgYmVjYXVzZSB5b3UgYWRkZWQgYSBjc3MgcHJvcGVydHkgYW5k
IGFyZSBub3QgaGFuZGxpbmcgaXQKLSAgICAgICAgICAgIC8vIGluIGVpdGhlciB0aGlzIHN3aXRj
aCBzdGF0ZW1lbnQgb3IgdGhlIG9uZSBpbiBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5
CisgICAgICAgICAgICAvLyBpbiBlaXRoZXIgdGhpcyBzd2l0Y2ggc3RhdGVtZW50IG9yIHRoZSBv
bmUgaW4gUmVuZGVyU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eQogICAgICAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRSgwLCAidW5pbXBsZW1lbnRlZCBwcm9wZXJ0eUlEOiAlZCIsIGlkKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBXZWJDb3JlL2Nzcy9TdHlsZU1lZGlh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcAkocmV2aXNpb24g
NjM4MjApCisrKyBXZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0eWxlTWVkaWEu
aCIKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHls
ZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKQEAgLTU4LDcgKzU4LDcgQEAgYm9vbCBTdHlsZU1lZGlh
OjptYXRjaE1lZGl1bShjb25zdCBTdHJpbgogICAgIEVsZW1lbnQqIGRvY3VtZW50RWxlbWVudCA9
IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKICAgICBBU1NFUlQoZG9jdW1lbnRFbGVtZW50
KTsKIAotICAgIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IgPSBkb2N1bWVudC0+c3R5
bGVTZWxlY3RvcigpOworICAgIFJlbmRlclN0eWxlUmVzb2x2ZXIqIHN0eWxlU2VsZWN0b3IgPSBk
b2N1bWVudC0+c3R5bGVTZWxlY3RvcigpOwogICAgIGlmICghc3R5bGVTZWxlY3RvcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBXZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNS
dWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxl
LmNwcAkocmV2aXNpb24gNjM4MjApCisrKyBXZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNS
dWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCB2b2lkIFdlYktpdENTU0tl
eWZyYW1lc1J1bGU6OnNldE5hbWUoY29uCiB7CiAgICAgbV9uYW1lID0gbmFtZTsKICAgICAKLSAg
ICAvLyBTaW5jZSB0aGUgbmFtZSBpcyB1c2VkIGluIHRoZSBrZXlmcmFtZSBtYXAgbGlzdCBpbiBD
U1NTdHlsZVNlbGVjdG9yLCB3ZSBuZWVkCisgICAgLy8gU2luY2UgdGhlIG5hbWUgaXMgdXNlZCBp
biB0aGUga2V5ZnJhbWUgbWFwIGxpc3QgaW4gUmVuZGVyU3R5bGVSZXNvbHZlciwgd2UgbmVlZAog
ICAgIC8vIHRvIHJlY29tcHV0ZSB0aGUgc3R5bGUgc2hlZXQgdG8gZ2V0IHRoZSB1cGRhdGVkIG5h
bWUuCiAgICAgc3R5bGVzaGVldCgpLT5zdHlsZVNoZWV0Q2hhbmdlZCgpOwogfQpJbmRleDogV2Vi
Q29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9X
ZWJLaXRDU1NNYXRyaXguY3BwCShyZXZpc2lvbiA2MzgyMCkKKysrIFdlYkNvcmUvY3NzL1dlYktp
dENTU01hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRl
ICJXZWJLaXRDU1NNYXRyaXguaCIKIAogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgotI2luY2x1ZGUg
IkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZVJlc29sdmVyLmgiCiAj
aW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NQcm9w
ZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgpAQCAtNzIsNyArNzIsNyBA
QCB2b2lkIFdlYktpdENTU01hdHJpeDo6c2V0TWF0cml4VmFsdWUoY29uCiAgICAgICAgIC8vIHJl
cXVpcmVzIHN0eWxlIChpLmUuLCBwYXJhbSB1c2VzICdlbXMnIG9yICdleHMnKQogICAgICAgICBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiB2YWwgPSAgc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CiAgICAgICAgIFRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgaWYgKCFDU1NTdHlsZVNlbGVjdG9yOjpjcmVh
dGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbC5nZXQoKSwgMCwgMCwgb3BlcmF0aW9ucykpIHsKKyAg
ICAgICAgaWYgKCFSZW5kZXJTdHlsZVJlc29sdmVyOjpjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25z
KHZhbC5nZXQoKSwgMCwgMCwgb3BlcmF0aW9ucykpIHsKICAgICAgICAgICAgIGVjID0gU1lOVEFY
X0VSUjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2
aXNpb24gNjM4MjApCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJDREFU
QVNlY3Rpb24uaCIKICNpbmNsdWRlICJDU1NIZWxwZXIuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNl
bGVjdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIkNT
U1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAi
Q2FjaGVkQ1NTU3R5bGVTaGVldC5oIgpAQCAtMTM3Miw3ICsxMzcyLDcgQEAgdm9pZCBEb2N1bWVu
dDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgYwogICAgICAgICAvLyBzdHlsZSBzZWxlY3RvciBt
YXkgc2V0IHRoaXMgYWdhaW4gZHVyaW5nIHJlY2FsYwogICAgICAgICBtX2hhc05vZGVzV2l0aFBs
YWNlaG9sZGVyU3R5bGUgPSBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gZG9jdW1lbnRTdHlsZSA9IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRG9jdW1lbnQo
dGhpcyk7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gZG9jdW1lbnRTdHlsZSA9IFJlbmRl
clN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRG9jdW1lbnQodGhpcyk7CiAgICAgICAgIFN0eWxlQ2hh
bmdlIGNoID0gZGlmZihkb2N1bWVudFN0eWxlLmdldCgpLCByZW5kZXJlcigpLT5zdHlsZSgpKTsK
ICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgY2ggIT0gTm9DaGFuZ2UpCiAgICAgICAgICAgICBy
ZW5kZXJlcigpLT5zZXRTdHlsZShkb2N1bWVudFN0eWxlLnJlbGVhc2UoKSk7CkBAIC0xNTU1LDcg
KzE1NTUsNyBAQCB2b2lkIERvY3VtZW50OjpjcmVhdGVTdHlsZVNlbGVjdG9yKCkKICAgICBib29s
IG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyA9IHRydWU7CiAgICAgaWYgKFNldHRpbmdzKiBkb2NT
ZXR0aW5ncyA9IHNldHRpbmdzKCkpCiAgICAgICAgIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyA9
IGRvY1NldHRpbmdzLT5hdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCgpOwotICAgIG1fc3R5bGVT
ZWxlY3Rvci5zZXQobmV3IENTU1N0eWxlU2VsZWN0b3IodGhpcywgbV9zdHlsZVNoZWV0cy5nZXQo
KSwgbV9tYXBwZWRFbGVtZW50U2hlZXQuZ2V0KCksIHBhZ2VVc2VyU2hlZXQoKSwgcGFnZUdyb3Vw
VXNlclNoZWV0cygpLCAKKyAgICBtX3N0eWxlU2VsZWN0b3Iuc2V0KG5ldyBSZW5kZXJTdHlsZVJl
c29sdmVyKHRoaXMsIG1fc3R5bGVTaGVldHMuZ2V0KCksIG1fbWFwcGVkRWxlbWVudFNoZWV0Lmdl
dCgpLCBwYWdlVXNlclNoZWV0KCksIHBhZ2VHcm91cFVzZXJTaGVldHMoKSwgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaW5Db21wYXRNb2RlKCksIG1hdGNo
QXV0aG9yQW5kVXNlclN0eWxlcykpOwogfQogCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDYzODIwKQor
KysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsK
ICAgICBjbGFzcyBDaGFyYWN0ZXJEYXRhOwogICAgIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247
Ci0gICAgY2xhc3MgQ1NTU3R5bGVTZWxlY3RvcjsKKyAgICBjbGFzcyBSZW5kZXJTdHlsZVJlc29s
dmVyOwogICAgIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiAgICAgY2xhc3MgQ29tbWVudDsKICAgICBj
bGFzcyBEYXRhYmFzZTsKQEAgLTM4Nyw3ICszODcsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB2
aXJ0dWFsIGJvb2wgaXNGcmFtZVNldCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgCi0g
ICAgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcigpCisgICAgUmVuZGVyU3R5bGVSZXNv
bHZlciogc3R5bGVTZWxlY3RvcigpCiAgICAgeyAKICAgICAgICAgaWYgKCFtX3N0eWxlU2VsZWN0
b3IpCiAgICAgICAgICAgICBjcmVhdGVTdHlsZVNlbGVjdG9yKCk7CkBAIC0xMDQ3LDcgKzEwNDcs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgZW5xdWV1ZVBvcHN0YXRlRXZlbnQoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0KTsKICAgICB2b2lkIHBlbmRpbmdFdmVu
dFRpbWVyRmlyZWQoVGltZXI8RG9jdW1lbnQ+Kik7CiAKLSAgICBPd25QdHI8Q1NTU3R5bGVTZWxl
Y3Rvcj4gbV9zdHlsZVNlbGVjdG9yOworICAgIE93blB0cjxSZW5kZXJTdHlsZVJlc29sdmVyPiBt
X3N0eWxlU2VsZWN0b3I7CiAgICAgYm9vbCBtX2RpZENhbGN1bGF0ZVN0eWxlU2VsZWN0b3I7CiAK
ICAgICBGcmFtZSogbV9mcmFtZTsKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2MzgyMCkKKysrIFdl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAj
aW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1Nl
bGVjdG9yTGlzdC5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiQ2xpZW50UmVjdC5oIgogI2luY2x1ZGUg
IkNsaWVudFJlY3RMaXN0LmgiCiAjaW5jbHVkZSAiRGF0YXNldERPTVN0cmluZ01hcC5oIgpAQCAt
MTUwNiw3ICsxNTA2LDcgQEAgYm9vbCBFbGVtZW50Ojp3ZWJraXRNYXRjaGVzU2VsZWN0b3IoY29u
cwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQ1NTU3R5bGVTZWxlY3Rvcjo6
U2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihkb2N1bWVudCgpLCBzdHJpY3RQYXJzaW5n
KTsKKyAgICBSZW5kZXJTdHlsZVJlc29sdmVyOjpTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVj
a2VyKGRvY3VtZW50KCksIHN0cmljdFBhcnNpbmcpOwogICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1Nl
bGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpIHsKICAgICAgICAgaWYgKHNlbGVjdG9yQ2hlY2tl
ci5jaGVja1NlbGVjdG9yKHNlbGVjdG9yLCB0aGlzKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwpJbmRleDogV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MzgyMCkKKysrIFdlYkNvcmUvZG9t
L0lucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNs
dWRlICJDU1NSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJDU1NT
dHlsZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiUmVu
ZGVyU3R5bGVSZXNvbHZlci5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKSW5k
ZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUu
Y3BwCShyZXZpc2lvbiA2MzgyMCkKKysrIFdlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKICNpbmNsdWRl
ICJDU1NTZWxlY3Rvckxpc3QuaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKLSNpbmNsdWRl
ICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGVSZXNvbHZlci5oIgog
I2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDaGlsZE5vZGVMaXN0LmgiCiAj
aW5jbHVkZSAiQ2xhc3NOb2RlTGlzdC5oIgpAQCAtMTY3MCw3ICsxNjcwLDcgQEAgUGFzc1JlZlB0
cjxFbGVtZW50PiBOb2RlOjpxdWVyeVNlbGVjdG9yKAogICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKLSAgICBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2Vy
KGRvY3VtZW50KCksIHN0cmljdFBhcnNpbmcpOworICAgIFJlbmRlclN0eWxlUmVzb2x2ZXI6OlNl
bGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQoKSwgc3RyaWN0UGFyc2luZyk7
CiAKICAgICAvLyBGSVhNRTogd2UgY291bGQgYWxzbyBvcHRpbWl6ZSBmb3IgdGhlIHRoZSBbaWQ9
ImZvbyJdIGNhc2UKICAgICBpZiAoc3RyaWN0UGFyc2luZyAmJiBpbkRvY3VtZW50KCkgJiYgcXVl
cnlTZWxlY3Rvckxpc3QuaGFzT25lU2VsZWN0b3IoKSAmJiBxdWVyeVNlbGVjdG9yTGlzdC5maXJz
dCgpLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkgewpJbmRleDogV2ViQ29yZS9kb20vU2Vs
ZWN0b3JOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2VsZWN0b3JOb2Rl
TGlzdC5jcHAJKHJldmlzaW9uIDYzODIwKQorKysgV2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkNTU1Nl
bGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCi0jaW5jbHVkZSAiQ1NTU3R5
bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKQEAgLTQ4LDcgKzQ4LDcgQEAgUGFzc1JlZlB0cjxTdGF0aWNOb2RlTGlzdD4gY3JlYXRlU2Vs
ZWN0bwogICAgIENTU1NlbGVjdG9yKiBvbmx5U2VsZWN0b3IgPSBxdWVyeVNlbGVjdG9yTGlzdC5o
YXNPbmVTZWxlY3RvcigpID8gcXVlcnlTZWxlY3Rvckxpc3QuZmlyc3QoKSA6IDA7CiAgICAgYm9v
bCBzdHJpY3RQYXJzaW5nID0gIWRvY3VtZW50LT5pbkNvbXBhdE1vZGUoKTsKIAotICAgIENTU1N0
eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQsIHN0
cmljdFBhcnNpbmcpOworICAgIFJlbmRlclN0eWxlUmVzb2x2ZXI6OlNlbGVjdG9yQ2hlY2tlciBz
ZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQsIHN0cmljdFBhcnNpbmcpOwogCiAgICAgaWYgKHN0cmlj
dFBhcnNpbmcgJiYgcm9vdE5vZGUtPmluRG9jdW1lbnQoKSAmJiBvbmx5U2VsZWN0b3IgJiYgb25s
eVNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCAmJiAhZG9jdW1lbnQtPmNvbnRh
aW5zTXVsdGlwbGVFbGVtZW50c1dpdGhJZChvbmx5U2VsZWN0b3ItPm1fdmFsdWUpKSB7CiAgICAg
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQob25seVNlbGVj
dG9yLT5tX3ZhbHVlKTsKSW5kZXg6IFdlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MzgyMCkK
KysrIFdlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiQXR0cmli
dXRlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIlJlbmRlclN0
eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ1NT
VmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkluZGV4OiBXZWJDb3JlL2Vk
aXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2MzgyMCkKKysrIFdlYkNvcmUv
ZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1Niw3
ICsxMzU2LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpmb2N1c2VkT3JBY3RpdgogICAg
IC8vIFVwZGF0ZSBmb3IgY2FwcyBsb2NrIHN0YXRlCiAgICAgbV9mcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPmNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZCgpOwogCi0gICAgLy8gQmVjYXVzZSBDU1NT
dHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKCkgYW5kCisgICAgLy8gQmVjYXVzZSBSZW5k
ZXJTdHlsZVJlc29sdmVyOjpjaGVja09uZVNlbGVjdG9yKCkgYW5kCiAgICAgLy8gUmVuZGVyVGhl
bWU6OmlzRm9jdXNlZCgpIGNoZWNrIGlmIHRoZSBmcmFtZSBpcyBhY3RpdmUsIHdlIGhhdmUgdG8K
ICAgICAvLyB1cGRhdGUgc3R5bGUgYW5kIHRoZW1lIHN0YXRlIHRoYXQgZGVwZW5kZWQgb24gdGhv
c2UuCiAgICAgaWYgKE5vZGUqIG5vZGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9k
ZSgpKSB7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gNjM4MjApCisrKyBXZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1
ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1N0
eWxlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWUuaCIKICNpbmNsdWRlICJDU1NW
YWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiRGVsZXRlQnV0dG9uQ29udHJvbGxlci5oIgpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAJKHJldmlzaW9uIDYzODIwKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxCb2R5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAK
ICNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgot
I2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZVJlc29s
dmVyLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5
d29yZHMuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5jcHAJKHJldmlzaW9uIDYzODIwKQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwLDcgKzM4MCw3IEBAIGNvbnN0IFNlY3Vy
aXR5T3JpZ2luJiBIVE1MQ2FudmFzRWxlbWVudDoKICAgICByZXR1cm4gKmRvY3VtZW50KCktPnNl
Y3VyaXR5T3JpZ2luKCk7CiB9CiAKLUNTU1N0eWxlU2VsZWN0b3IqIEhUTUxDYW52YXNFbGVtZW50
OjpzdHlsZVNlbGVjdG9yKCkKK1JlbmRlclN0eWxlUmVzb2x2ZXIqIEhUTUxDYW52YXNFbGVtZW50
OjpzdHlsZVNlbGVjdG9yKCkKIHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rv
cigpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHJldmlzaW9uIDYzODIwKQor
KysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
Miw3ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRPcmlnaW5UYWludGVkKCkgeyBtX29y
aWdpbkNsZWFuID0gZmFsc2U7IH0KICAgICBib29sIG9yaWdpbkNsZWFuKCkgY29uc3QgeyByZXR1
cm4gbV9vcmlnaW5DbGVhbjsgfQogCi0gICAgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3Rv
cigpOworICAgIFJlbmRlclN0eWxlUmVzb2x2ZXIqIHN0eWxlU2VsZWN0b3IoKTsKIAogICAgIEFm
ZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1l
bnQuY3BwCShyZXZpc2lvbiA2MzgyMCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBACiAjaW5jbHVkZSAiSFRNTERvY3VtZW50
LmgiCiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVT
ZWxlY3Rvci5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJD
b29raWVKYXIuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50VHlwZS5oIgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNp
b24gNjM4MjApCisrKyBXZWJDb3JlL2h0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNpZiBFTkFCTEUoWEhUTUxNUCkKICNpbmNsdWRl
ICJIVE1MTm9TY3JpcHRFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgi
CisjaW5jbHVkZSAiUmVuZGVyU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9w
dEdyb3VwRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91
cEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MzgyMCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MT3B0R3Jv
dXBFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxPcHRHcm91cEVsZW1lbnQuaCIKIAotI2luY2x1ZGUg
IkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZVJlc29sdmVyLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJI
VE1MU2VsZWN0RWxlbWVudC5oIgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA2MzgyMCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVu
dC5oIgogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rv
ci5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
SW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAJKHJldmlzaW9uIDYzODIwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW5j
bHVkZSAiQ2FudmFzU3R5bGUuaCIKICNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bi5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNl
bGVjdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKQEAgLTE1NjYsNyArMTU2Niw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRGb250KGMKICAgICAgICAgbmV3U3R5bGUtPnNldEZvbnREZXNjcmlw
dGlvbihjb21wdXRlZFN0eWxlLT5mb250RGVzY3JpcHRpb24oKSk7CiAKICAgICAvLyBOb3cgbWFw
IHRoZSBmb250IHByb3BlcnR5IGludG8gdGhlIHN0eWxlLgotICAgIENTU1N0eWxlU2VsZWN0b3Iq
IHN0eWxlU2VsZWN0b3IgPSBjYW52YXMoKS0+c3R5bGVTZWxlY3RvcigpOworICAgIFJlbmRlclN0
eWxlUmVzb2x2ZXIqIHN0eWxlU2VsZWN0b3IgPSBjYW52YXMoKS0+c3R5bGVTZWxlY3RvcigpOwog
ICAgIHN0eWxlU2VsZWN0b3ItPmFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5Rm9udCwg
dGVtcERlY2wtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250KS5nZXQoKSwgbmV3
U3R5bGUuZ2V0KCkpOwogICAgIAogICAgIHN0YXRlKCkubV9mb250ID0gbmV3U3R5bGUtPmZvbnQo
KTsKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9u
IDYzODIwKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgogI2luY2x1
ZGUgIkNTU1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCi0jaW5jbHVkZSAi
Q1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlUmVzb2x2ZXIuaCIKICNp
bmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgogI2lu
Y2x1ZGUgIkNvb2tpZS5oIgpAQCAtMTAyNyw3ICsxMDI3LDcgQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6Z2V0U3R5bGVzKGxvbmcgYwogICAgICAgICByZXN1bHQtPnNldCgiaW5saW5lU3R5bGUi
LCBidWlsZE9iamVjdEZvclN0eWxlKGVsZW1lbnQtPnN0eWxlKCksIHRydWUpKTsKICAgICByZXN1
bHQtPnNldCgiY29tcHV0ZWRTdHlsZSIsIGJ1aWxkT2JqZWN0Rm9yU3R5bGUoY29tcHV0ZWRTdHls
ZUluZm8uZ2V0KCksIGZhbHNlKSk7CiAKLSAgICBDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciA9
IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOworICAgIFJlbmRlclN0
eWxlUmVzb2x2ZXIqIHNlbGVjdG9yID0gZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNl
bGVjdG9yKCk7CiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtYXRjaGVkUnVsZXMgPSBzZWxlY3Rv
ci0+c3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgYXV0aG9yT25seSk7CiAgICAgcmVzdWx0
LT5zZXQoIm1hdGNoZWRDU1NSdWxlcyIsIGJ1aWxkQXJyYXlGb3JDU1NSdWxlcyhub2RlLT5vd25l
ckRvY3VtZW50KCksIG1hdGNoZWRSdWxlcy5nZXQoKSkpOwogCkBAIC0xMDQyLDcgKzEwNDIsNyBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTdHlsZXMobG9uZyBjCiAgICAgICAgIGlmIChw
YXJlbnRFbGVtZW50LT5zdHlsZSgpICYmIHBhcmVudEVsZW1lbnQtPnN0eWxlKCktPmxlbmd0aCgp
KQogICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldCgiaW5saW5lU3R5bGUiLCBidWlsZE9iamVj
dEZvclN0eWxlKHBhcmVudEVsZW1lbnQtPnN0eWxlKCksIHRydWUpKTsKIAotICAgICAgICBDU1NT
dHlsZVNlbGVjdG9yKiBwYXJlbnRTZWxlY3RvciA9IHBhcmVudEVsZW1lbnQtPm93bmVyRG9jdW1l
bnQoKS0+c3R5bGVTZWxlY3RvcigpOworICAgICAgICBSZW5kZXJTdHlsZVJlc29sdmVyKiBwYXJl
bnRTZWxlY3RvciA9IHBhcmVudEVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rv
cigpOwogICAgICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IHBhcmVudE1hdGNoZWRSdWxlcyA9IHBh
cmVudFNlbGVjdG9yLT5zdHlsZVJ1bGVzRm9yRWxlbWVudChwYXJlbnRFbGVtZW50LCBhdXRob3JP
bmx5KTsKICAgICAgICAgcGFyZW50U3R5bGUtPnNldCgibWF0Y2hlZENTU1J1bGVzIiwgYnVpbGRB
cnJheUZvckNTU1J1bGVzKHBhcmVudEVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKSwgcGFyZW50TWF0
Y2hlZFJ1bGVzLmdldCgpKSk7CiAKQEAgLTExNTgsNyArMTE1OCw3IEBAIFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IEluc3BlY3RvckRPTUEKIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IElu
c3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9yUHNldWRvRWxlbWVudHMoRWxlbWVudCogZWxl
bWVudCwgYm9vbCBhdXRob3JPbmx5KQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcmVz
dWx0ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIENTU1N0eWxlU2VsZWN0b3IqIHNl
bGVjdG9yID0gZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7CisgICAg
UmVuZGVyU3R5bGVSZXNvbHZlciogc2VsZWN0b3IgPSBlbGVtZW50LT5vd25lckRvY3VtZW50KCkt
PnN0eWxlU2VsZWN0b3IoKTsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlbmRlclN0eWxlID0g
ZWxlbWVudC0+c3R5bGVGb3JSZW5kZXJlcigpOwogCiAgICAgZm9yIChQc2V1ZG9JZCBwc2V1ZG9J
ZCA9IEZJUlNUX1BVQkxJQ19QU0VVRE9JRDsgcHNldWRvSWQgPCBBRlRFUl9MQVNUX0lOVEVSTkFM
X1BTRVVET0lEOyBwc2V1ZG9JZCA9IHN0YXRpY19jYXN0PFBzZXVkb0lkPihwc2V1ZG9JZCArIDEp
KSB7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9QbGFjZWhvbGRlckRvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9QbGFjZWhvbGRlckRvY3VtZW50LmNwcAkocmV2aXNpb24g
NjM4MjApCisrKyBXZWJDb3JlL2xvYWRlci9QbGFjZWhvbGRlckRvY3VtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlBsYWNlaG9sZGVyRG9jdW1lbnQuaCIKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIK
KyNpbmNsdWRlICJSZW5kZXJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExp
c3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9u
IDYzODIwKQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJCZWZvcmVVbmxvYWRFdmVudC5oIgogI2luY2x1ZGUg
IkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1J1bGVMaXN0Lmgi
Ci0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlUmVz
b2x2ZXIuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiA2Mzgy
MCkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAKICNpbmNsdWRlICJBWE9iamVjdENh
Y2hlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIlJlbmRlclN0
eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGll
bnQuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDYzODIwKQor
KysgV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBA
CiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQmFja0Zvcndh
cmRMaXN0LmgiCiAjaW5jbHVkZSAiQmFzZTY0LmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rv
ci5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJDaHJvbWUu
aCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVu
dC5oIgpAQCAtNjc1LDcgKzY3NSw3IEBAIHZvaWQgUGFnZTo6YWxsVmlzaXRlZFN0YXRlQ2hhbmdl
ZChQYWdlR3IKICAgICAgICAgaWYgKHBhZ2UtPm1fZ3JvdXAgIT0gZ3JvdXApCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBwYWdlLT5tX21haW5GcmFt
ZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsK
LSAgICAgICAgICAgIGlmIChDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yID0gZnJhbWUt
PmRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKSkKKyAgICAgICAgICAgIGlmIChSZW5kZXJTdHls
ZVJlc29sdmVyKiBzdHlsZVNlbGVjdG9yID0gZnJhbWUtPmRvY3VtZW50KCktPnN0eWxlU2VsZWN0
b3IoKSkKICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hbGxWaXNpdGVkU3RhdGVDaGFu
Z2VkKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC02OTMsNyArNjkzLDcgQEAgdm9pZCBQYWdlOjp2
aXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91cAogICAgICAgICBpZiAocGFnZS0+bV9ncm91cCAh
PSBncm91cCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBmb3IgKEZyYW1lKiBmcmFt
ZSA9IHBhZ2UtPm1fbWFpbkZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LT50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKENTU1N0eWxlU2VsZWN0b3IqIHN0
eWxlU2VsZWN0b3IgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpKQorICAgICAg
ICAgICAgaWYgKFJlbmRlclN0eWxlUmVzb2x2ZXIqIHN0eWxlU2VsZWN0b3IgPSBmcmFtZS0+ZG9j
dW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpKQogICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3It
PnZpc2l0ZWRTdGF0ZUNoYW5nZWQodmlzaXRlZExpbmtIYXNoKTsKICAgICAgICAgfQogICAgIH0K
SW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNw
cAkocmV2aXNpb24gNjM4MjApCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDksNyArNTA5LDcgQEAgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gQW5pbWF0aW9uQ29udHJvbAogICAgIGlmIChibGVuZGVkU3R5bGUgIT0g
bmV3U3R5bGUpIHsKICAgICAgICAgLy8gSWYgdGhlIGFuaW1hdGlvbnMvdHJhbnNpdGlvbnMgY2hh
bmdlIG9wYWNpdHkgb3IgdHJhbnNmb3JtLCB3ZSBuZWVkIHRvIHVwZGF0ZQogICAgICAgICAvLyB0
aGUgc3R5bGUgdG8gaW1wb3NlIHRoZSBzdGFja2luZyBydWxlcy4gTm90ZSB0aGF0IHRoaXMgaXMg
YWxzbwotICAgICAgICAvLyBkb25lIGluIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0
eWxlKCkuCisgICAgICAgIC8vIGRvbmUgaW4gUmVuZGVyU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVu
ZGVyU3R5bGUoKS4KICAgICAgICAgaWYgKGJsZW5kZWRTdHlsZS0+aGFzQXV0b1pJbmRleCgpICYm
IChibGVuZGVkU3R5bGUtPm9wYWNpdHkoKSA8IDEuMGYgfHwgYmxlbmRlZFN0eWxlLT5oYXNUcmFu
c2Zvcm0oKSkpCiAgICAgICAgICAgICBibGVuZGVkU3R5bGUtPnNldFpJbmRleCgwKTsKICAgICB9
CkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAko
cmV2aXNpb24gNjM4MjApCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgi
Ci0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlUmVz
b2x2ZXIuaCIKICNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRpb24uaCIKICNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vYW5kcm9pZC9SZW5kZXJUaGVtZUFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vYW5kcm9pZC9SZW5kZXJUaGVtZUFuZHJvaWQuY3BwCShyZXZpc2lvbiA2MzgyMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9SZW5kZXJUaGVtZUFuZHJvaWQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUFuZHJvaWQ6OnN1
cHBvcnRzRm9jdXMoQwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUFu
ZHJvaWQ6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6
OmFkanVzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5
bGUsIFdlYkNvcmU6OkVsZW1lbnQqKSBjb25zdAogewogICAgIC8vIFBhZGRpbmcgY29kZSBpcyB0
YWtlbiBmcm9tIFJlbmRlclRoZW1lU2FmYXJpLmNwcAogICAgIC8vIEl0IG1ha2VzIHN1cmUgd2Ug
aGF2ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBidXR0b24gdGV4dC4KQEAgLTI0Myw3ICsyNDMsNyBA
QCB2b2lkIFJlbmRlclRoZW1lQW5kcm9pZDo6c2V0UmFkaW9TaXplKFJlCiAgICAgc2V0Q2hlY2ti
b3hTaXplKHN0eWxlKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6OmFkanVzdFRleHRG
aWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIFdlYkNvcmU6
OkVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6OmFkanVzdFRleHRGaWVs
ZFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIFdlYkNvcmU6
OkVsZW1lbnQqKSBjb25zdAogewogICAgIGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUpOwogfQpA
QCAtMjUzLDcgKzI1Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpwYWludFRleHRGaWVs
ZCgKICAgICByZXR1cm4gdHJ1ZTsgICAgCiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVBbmRyb2lkOjph
ZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IFdlYkNvcmU6OkVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6OmFkanVz
dFRleHRBcmVhU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwg
V2ViQ29yZTo6RWxlbWVudCopIGNvbnN0CiB7CiAgICAgYWRkSW50cmluc2ljTWFyZ2lucyhzdHls
ZSk7CiB9CkBAIC0zMTMsNyArMzEzLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUFuZHJvaWQ6OnBhaW50
VGV4dEFyZWEoUgogICAgIHJldHVybiB0cnVlOyAgICAKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUFu
ZHJvaWQ6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQW5kcm9pZDo6YWRq
dXN0U2VhcmNoRmllbGRTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsK
IH0KQEAgLTMyMyw3ICszMjMsNyBAQCBib29sIFJlbmRlclRoZW1lQW5kcm9pZDo6cGFpbnRTZWFy
Y2hGaWVsCiAgICAgcmV0dXJuIHRydWU7ICAgIAogfQogCi12b2lkIFJlbmRlclRoZW1lQW5kcm9p
ZDo6YWRqdXN0TGlzdGJveFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6OmFkanVzdExpc3Ri
b3hTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KikgY29uc3QKIHsKICAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChSZW5kZXJTa2lu
Q29tYm86OmV4dHJhV2lkdGgoKSwgRml4ZWQpKTsKICAgICBzdHlsZS0+c2V0TWF4SGVpZ2h0KExl
bmd0aChzdHlsZS0+Zm9udFNpemUoKSArIGxpc3Rib3hQYWRkaW5nLCBGaXhlZCkpOwpAQCAtMzM4
LDcgKzMzOCw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGVDb21tb24oUmUKICAg
ICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChSZW5kZXJTa2luQ29tYm86OmV4dHJhV2lk
dGgoKSwgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6OmFkanVzdE1lbnVM
aXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1c3RNZW51TGlzdFN0eWxlKFJl
bmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0
CiB7CiAgICAgYWRqdXN0TWVudUxpc3RTdHlsZUNvbW1vbihzdHlsZSwgZSk7CiAgICAgYWRkSW50
cmluc2ljTWFyZ2lucyhzdHlsZSk7CkBAIC0zNTYsNyArMzU2LDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZUFuZHJvaWQ6OnBhaW50TWVudUxpc3QoUgogICAgIHJldHVybiBwYWludENvbWJvKG9iaiwgaW5m
bywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1c3RNZW51TGlzdEJ1
dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
IGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQW5kcm9pZDo6YWRqdXN0TWVudUxpc3RCdXR0b25T
dHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
KSBjb25zdAogewogICAgIC8vIENvcGllZCBmcm9tIFJlbmRlclRoZW1lU2FmYXJpLgogICAgIGNv
bnN0IGZsb2F0IGJhc2VGb250U2l6ZSA9IDExLjBmOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9h
bmRyb2lkL1JlbmRlclRoZW1lQW5kcm9pZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vYW5kcm9pZC9SZW5kZXJUaGVtZUFuZHJvaWQuaAkocmV2aXNpb24gNjM4MjApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2FuZHJvaWQvUmVuZGVyVGhlbWVBbmRyb2lkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDI1ICs4MCwyNSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHBhaW50UmFk
aW8oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKIAotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBXZWJDb3JlOjpFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1
dHRvblN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIFdlYkNvcmU6OkVs
ZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lk
IGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIFdl
YkNvcmU6OkVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxk
U3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgV2ViQ29yZTo6RWxlbWVu
dCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBXZWJD
b3JlOjpFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5
bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgV2ViQ29yZTo6RWxlbWVudCop
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICAKICAgICBib29sIHBhaW50Q29t
Ym8oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgIGNvbnN0IEludFJlY3QmKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RMaXN0Ym94U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51
TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TGlzdGJveFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0TWVudUxpc3RTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lk
IGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRv
blN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgCi0gICAgdmlydHVhbCB2b2lk
IGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxl
KFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKIHByaXZhdGU6CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwCShyZXZpc2lvbiA2MzgyMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMwLDcgKzcz
MCw3IEBAIGludCBSZW5kZXJUaGVtZUVmbDo6YmFzZWxpbmVQb3NpdGlvbihjb24KICAgICByZXR1
cm4gUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24obyk7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdENoZWNrYm94U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6
OmFkanVzdENoZWNrYm94U3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICBpZiAoIW1fcGFnZSAmJiBl
ICYmIGUtPmRvY3VtZW50KCktPnBhZ2UoKSkgewogICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJU
aGVtZUVmbCo+KGUtPmRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKSktPmFkanVzdENoZWNrYm94
U3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKQEAgLTc1MSw3ICs3NTEsNyBAQCBib29sIFJlbmRl
clRoZW1lRWZsOjpwYWludENoZWNrYm94KFJlbmRlCiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0
KG8sIENoZWNrQm94LCBpLCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0
UmFkaW9TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0UmFkaW9TdHls
ZShSZW5kZXJTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KiBlKSBjb25zdAogewogICAgIGlmICghbV9wYWdlICYmIGUgJiYgZS0+ZG9jdW1lbnQoKS0+
cGFnZSgpKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsKj4oZS0+ZG9jdW1l
bnQoKS0+cGFnZSgpLT50aGVtZSgpKS0+YWRqdXN0UmFkaW9TdHlsZShzZWxlY3Rvciwgc3R5bGUs
IGUpOwpAQCAtNzcyLDcgKzc3Miw3IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50UmFkaW8o
UmVuZGVyT2IKICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQobywgUmFkaW9CdXR0b24sIGksIHJl
Y3QpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RCdXR0b25TdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGVSZXNv
bHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsK
ICAgICBpZiAoIW1fcGFnZSAmJiBlICYmIGUtPmRvY3VtZW50KCktPnBhZ2UoKSkgewogICAgICAg
ICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCo+KGUtPmRvY3VtZW50KCktPnBhZ2UoKS0+dGhl
bWUoKSktPmFkanVzdEJ1dHRvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CkBAIC03OTUsNyAr
Nzk1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRCdXR0b24oUmVuZGVyTwogICAgIHJl
dHVybiBwYWludFRoZW1lUGFydChvLCBCdXR0b24sIGksIHJlY3QpOwogfQogCi12b2lkIFJlbmRl
clRoZW1lRWZsOjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9y
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
RWZsOjphZGp1c3RNZW51TGlzdFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2Ug
JiYgZSAmJiBlLT5kb2N1bWVudCgpLT5wYWdlKCkpIHsKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVu
ZGVyVGhlbWVFZmwqPihlLT5kb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCkpLT5hZGp1c3RNZW51
TGlzdFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CkBAIC04MTMsNyArODEzLDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZUVmbDo6cGFpbnRNZW51TGlzdChSZW5kZQogICAgIHJldHVybiBwYWludFRoZW1l
UGFydChvLCBDb21ib0JveCwgaSwgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFk
anVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RU
ZXh0RmllbGRTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIGlmICghbV9wYWdlICYmIGUgJiYgZS0+
ZG9jdW1lbnQoKS0+cGFnZSgpKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZs
Kj4oZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpKS0+YWRqdXN0VGV4dEZpZWxkU3R5bGUo
c2VsZWN0b3IsIHN0eWxlLCBlKTsKQEAgLTgzMSw3ICs4MzEsNyBAQCBib29sIFJlbmRlclRoZW1l
RWZsOjpwYWludFRleHRGaWVsZChSZW5kCiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG8sIFRl
eHRGaWVsZCwgaSwgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFRleHRB
cmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFRleHRBcmVhU3R5
bGUoUmVuZGVyU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZSkgY29uc3QKIHsKICAgICBhZGp1c3RUZXh0RmllbGRTdHlsZShzZWxlY3Rvciwgc3R5
bGUsIGUpOwogfQpAQCAtODQxLDcgKzg0MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50
VGV4dEFyZWEoUmVuZGUKICAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUp
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25T
dHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KiBlKSBjb25zdAogewogICAgIGlmICghbV9wYWdlICYmIGUgJiYgZS0+ZG9jdW1lbnQo
KS0+cGFnZSgpKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsKj4oZS0+ZG9j
dW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpKS0+YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5
bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKQEAgLTg1Nyw3ICs4NTcsNyBAQCBib29sIFJlbmRlclRo
ZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkRGVjCiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG8s
IFNlYXJjaEZpZWxkRGVjb3JhdGlvbiwgaSwgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVF
Zmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
IHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShSZW5kZXJT
dHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBj
b25zdAogewogICAgIGlmICghbV9wYWdlICYmIGUgJiYgZS0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7
CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsKj4oZS0+ZG9jdW1lbnQoKS0+cGFn
ZSgpLT50aGVtZSgpKS0+YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoc2VsZWN0
b3IsIHN0eWxlLCBlKTsKQEAgLTg3Myw3ICs4NzMsNyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpw
YWludFNlYXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG8sIFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbiwgaSwgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFk
anVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFJlbmRl
clN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYgZSAmJiBlLT5kb2N1bWVudCgpLT5wYWdlKCkp
IHsKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwqPihlLT5kb2N1bWVudCgpLT5w
YWdlKCktPnRoZW1lKCkpLT5hZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUo
c2VsZWN0b3IsIHN0eWxlLCBlKTsKQEAgLTg4OSw3ICs4ODksNyBAQCBib29sIFJlbmRlclRoZW1l
RWZsOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG8sIFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24sIGksIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFJlbmRl
clN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYgZSAmJiBlLT5kb2N1bWVudCgpLT5wYWdlKCkp
IHsKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwqPihlLT5kb2N1bWVudCgpLT5w
YWdlKCktPnRoZW1lKCkpLT5hZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKHNlbGVj
dG9yLCBzdHlsZSwgZSk7CkBAIC05MDUsNyArOTA1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6
cGFpbnRTZWFyY2hGaWVsZENhbgogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvLCBTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvbiwgaSwgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFk
anVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVz
dFNlYXJjaEZpZWxkU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICBpZiAoIW1fcGFnZSAmJiBlICYm
IGUtPmRvY3VtZW50KCktPnBhZ2UoKSkgewogICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVt
ZUVmbCo+KGUtPmRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKSktPmFkanVzdFNlYXJjaEZpZWxk
U3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL1Jl
bmRlclRoZW1lRWZsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVy
VGhlbWVFZmwuaAkocmV2aXNpb24gNjM4MjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5k
ZXJUaGVtZUVmbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMzcgKzEwMiwzNyBAQCBwdWJsaWM6
CiAgICAgLy8gU3lzdGVtIGZvbnRzLgogICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBw
cm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVz
dENoZWNrYm94U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RDaGVja2JveFN0eWxlKFJlbmRlclN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdFJhZGlvU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5
bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlz
dFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25T
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShS
ZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZERlY29yYXRpb25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNv
cmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
IAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUo
UmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogcHJpdmF0ZToKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAJKHJldmlzaW9uIDYzODIwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MjQsNyArNDI0LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRSYWRpbyhSZW5kZXJP
YgogICAgIHJldHVybiBwYWludE1vemlsbGFHdGtXaWRnZXQodGhpcywgTU9aX0dUS19SQURJT0JV
VFRPTiwgbywgaSwgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdEJ1dHRv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIFdl
YkNvcmU6OkVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RCdXR0
b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBJcyB0aGlzIGNv
bmRpdGlvbiBuZWNlc3Nhcnk/CiAgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1
dHRvblBhcnQpIHsKQEAgLTQ0NSw3ICs0NDUsNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dEJ1dHRvbihSZW5kZXJPCiAgICAgcmV0dXJuIHBhaW50TW96aWxsYUd0a1dpZGdldCh0aGlzLCBN
T1pfR1RLX0JVVFRPTiwgbywgaSwgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFk
anVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxl
KiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6
OmFkanVzdE1lbnVMaXN0U3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRl
clN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCogZSkgY29uc3QKIHsKICAgICBzdHlsZS0+
cmVzZXRCb3JkZXIoKTsKICAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7CkBAIC00NTksNyArNDU5
LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdChSZW5kZQogICAgIHJldHVy
biBwYWludE1vemlsbGFHdGtXaWRnZXQodGhpcywgTU9aX0dUS19EUk9QRE9XTiwgbywgaSwgcmVj
dCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RUZXh0RmllbGRTdHlsZShSZW5kZXJTdHls
ZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25z
dAogewogICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwogICAgIHN0eWxlLT5yZXNldFBhZGRpbmco
KTsKQEAgLTQ3OCw3ICs0NzgsNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRBcmVh
KFJlbmRlCiAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwogfQogCi12b2lkIFJl
bmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5
bGUoUmVuZGVyU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZSkgY29uc3QKIHsKICAgICBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxl
KHNlbGVjdG9yLCBzdHlsZSwgZSk7CiB9CkBAIC00ODgsNyArNDg4LDcgQEAgYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlcwogICAgIHJldHVybiBwYWludE1vemlsbGFHdGtX
aWRnZXQodGhpcywgTU9aX0dUS19EUk9QRE9XTl9BUlJPVywgbywgaSwgcmVjdCk7CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7
CiAgICAgc3R5bGUtPnJlc2V0UGFkZGluZygpOwpAQCAtNTA0LDcgKzUwNCw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXMKICAgICByZXR1cm4gcGFpbnRNb3ppbGxh
R3RrV2lkZ2V0KHRoaXMsIE1PWl9HVEtfQ0hFQ0tNRU5VSVRFTSwgbywgaSwgcmVjdCk7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUo
Q1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKICAgICBz
dHlsZS0+cmVzZXRQYWRkaW5nKCk7CkBAIC01MjAsNyArNTIwLDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRTZWFyY2hGaWVsZENhbgogICAgIHJldHVybiBwYWludE1vemlsbGFHdGtXaWRn
ZXQodGhpcywgTU9aX0dUS19DSEVDS01FTlVJVEVNLCBvLCBpLCByZWN0KTsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIGFk
anVzdFRleHRGaWVsZFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CiB9CkBAIC01NDIsNyArNTQy
LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUcmFjayhSZQogICAgIHJldHVy
biBwYWludE1vemlsbGFHdGtXaWRnZXQodGhpcywgZ3RrUGFydCwgb2JqZWN0LCBpbmZvLCByZWN0
KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgc3R5bGUtPnNl
dEJveFNoYWRvdygwKTsKIH0KQEAgLTU1OSw3ICs1NTksNyBAQCBib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludFNsaWRlclRodW1iKFJlCiAgICAgcmV0dXJuIHBhaW50TW96aWxsYUd0a1dpZGdldCh0
aGlzLCBndGtQYXJ0LCBvYmplY3QsIGluZm8sIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xp
ZGVyVGh1bWJTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKIHsKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwogfQpAQCAtODQ4
LDcgKzg0OCw3IEBAIGRvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uRHVyYXRpb24KICAg
ICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0UHJvZ3Jlc3NCYXJT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoUmVuZGVyU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAg
c3R5bGUtPnNldEJveFNoYWRvdygwKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lR3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVy
VGhlbWVHdGsuaAkocmV2aXNpb24gNjM4MjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5k
ZXJUaGVtZUd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMzQgKzEwNCwzNCBAQCBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRp
b1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0VGV4dEZpZWxkU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoUmVuZGVyU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNl
YXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFJlbmRlclN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25T
dHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmll
bGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShS
ZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRo
dW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFJlbmRlclN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyT2JqZWN0KiBvYmplY3QpIGNvbnN0OwogCkBA
IC0xNDksNyArMTQ5LDcgQEAgcHJvdGVjdGVkOgogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCiAg
ICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihS
ZW5kZXJQcm9ncmVzcyopIGNvbnN0OwogICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0
aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5
bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L1JlbmRlclRoZW1lSGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvUmVuZGVyVGhlbWVIYWlrdS5jcHAJKHJldmlzaW9uIDYzODIwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9SZW5kZXJUaGVtZUhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVIYWlrdTo6c2V0UmFkaW9TaXplKFJl
bmQKICAgICBzZXRDaGVja2JveFNpemUoc3R5bGUpOwogfQogCi12b2lkIFJlbmRlclRoZW1lSGFp
a3U6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSGFpa3U6OmFkanVzdE1lbnVM
aXN0U3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0CiB7CiAgICAgLy8gTGVhdmUgc29tZSBzcGFjZSBmb3IgdGhlIGFycm93LgogICAg
IHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKDIyLCBGaXhlZCkpOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9SZW5kZXJUaGVtZUhhaWt1LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9SZW5kZXJUaGVtZUhhaWt1LmgJKHJldmlzaW9uIDYzODIwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9SZW5kZXJUaGVtZUhhaWt1LmgJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBj
b25zdDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxp
c3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAg
IH07CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAkocmV2aXNpb24g
NjM4MjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGhlbWVRdC5oIgogCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1
ZGUgIlJlbmRlclN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAj
aW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50UXQuaCIKQEAgLTQ1MCw3
ICs0NTAsNyBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50UmFkaW8oUmVuZGVyT2JqCiAgICAg
cmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lUXQ6OmFk
anVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RCdXR0b25T
dHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKIHsKICAgICAvLyBEaXRjaCB0aGUgYm9yZGVyLgogICAgIHN0eWxlLT5y
ZXNldEJvcmRlcigpOwpAQCAtNTU0LDcgKzU1NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFp
bnRCdXR0b24oUmVuZGVyT2IKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVRdDo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFRleHRG
aWVsZFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAogewogICAgIHN0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5z
cGFyZW50KTsKICAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKQEAgLTU5MSw3ICs1OTEsNyBAQCBi
b29sIFJlbmRlclRoZW1lUXQ6OnBhaW50VGV4dEZpZWxkKFJlbmRlCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0VGV4dEFyZWFTdHlsZShSZW5kZXJTdHls
ZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50
KSBjb25zdAogewogICAgIGFkanVzdFRleHRGaWVsZFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxl
bWVudCk7CiB9CkBAIC02MDEsNyArNjAxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludFRl
eHRBcmVhKFJlbmRlcgogICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVF0
OjphZGp1c3RNZW51TGlzdFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwogCkBA
IC02NTIsNyArNjUyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lbnVMaXN0KFJlbmRl
cgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51
TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0
eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAogewogI2lmIFVTRShRVF9NT0JJTEVfVEhFTUUpCiAgICAgLy8gTW9iaWxlIHRoZW1lIHVz
ZXMgYm9yZGVyIHJhZGl1cy4KQEAgLTcxOCw3ICs3MTgsNyBAQCBkb3VibGUgUmVuZGVyVGhlbWVR
dDo6YW5pbWF0aW9uRHVyYXRpb25GCiAgICAgcmV0dXJuIChvcHRpb24ucmVjdC53aWR0aCgpIC8g
cVN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fUHJvZ3Jlc3NCYXJDaHVua1dpZHRoLCAm
b3B0aW9uKSkgKiBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKHJlbmRlclBy
b2dyZXNzKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RQcm9ncmVzc0JhclN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFJlbmRlclN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIHN0eWxl
LT5zZXRCb3hTaGFkb3coMCk7CiB9CkBAIC04MTYsNyArODE2LDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZVF0OjpwYWludFNsaWRlclRyYWNrKFJlbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVF0Ojph
ZGp1c3RTbGlkZXJUcmFja1N0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7CiB9
CkBAIC04MjgsNyArODI4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludFNsaWRlclRodW1i
KFJlbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RT
bGlkZXJUaHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVtYlN0eWxl
KFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAogewogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7CiB9CkBAIC04MzksMTQgKzgzOSwxNCBA
QCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50U2VhcmNoRmllbGQoUmVuCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLAordm9pZCBSZW5kZXJU
aGVtZVF0OjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
ICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwg
ZSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLAor
dm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFJl
bmRlclN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCog
ZSkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtODYwLDcgKzg2MCw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRTZWFyY2hGaWVsZENhbmMKICAgICByZXR1cm4gUmVuZGVy
VGhlbWU6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24obywgcGksIHIpOwogfQogCi12b2lk
IFJlbmRlclRoZW1lUXQ6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsCit2b2lkIFJlbmRlclRoZW1l
UXQ6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIq
IHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKQEAgLTg3NCw3ICs4NzQsNyBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBh
aW50U2VhcmNoRmllbGREZWNvCiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpwYWludFNlYXJjaEZp
ZWxkRGVjb3JhdGlvbihvLCBwaSwgcik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsCit2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgJKHJldmlz
aW9uIDYzODIwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTk2LDQzICs5Niw0MyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29s
IHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBj
b25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRC
dXR0b25TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRU
ZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFRleHRGaWVsZFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoUmVuZGVy
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAgdmly
dHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQ
cm9ncmVzc0JhclN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAjZW5kaWYKIAogICAgIHZp
cnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBh
aW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShSZW5k
ZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVz
dFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRE
ZWNvcmF0aW9uU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFJlbmRlclN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcp
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L1JlbmRlclRoZW1lV3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vd3gvUmVuZGVyVGhlbWVXeC5jcHAJKHJldmlzaW9uIDYzODIw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9SZW5kZXJUaGVtZVd4LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzEsMTggKzcxLDE4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RS
ZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqLCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShSZW5k
ZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0Rmll
bGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAg
ICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0Owog
Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RN
ZW51TGlzdFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5
bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRy
b2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwKQEAgLTI1NCw3
ICsyNTQsNyBAQCBib29sIFJlbmRlclRoZW1lV3g6OnN1cHBvcnRzRm9jdXMoQ29udHJvCiAgICAg
fQogfQogCi12b2lkIFJlbmRlclRoZW1lV3g6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lV3g6OmFkanVzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIq
IHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAg
YWRkSW50cmluc2ljTWFyZ2lucyhzdHlsZSk7CiB9CkBAIC0zMTMsNyArMzEzLDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZVd4OjpwYWludEJ1dHRvbihSZW5kZXJPYgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZVd4OjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVXeDo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgCiB9CkBAIC0zMzYsNyArMzM2LDcg
QEAgaW50IFJlbmRlclRoZW1lV3g6Om1pbmltdW1NZW51TGlzdFNpemUoUgogICAgIHJldHVybiBN
SU5JTVVNX01FTlVfTElTVF9TSVpFOyAKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVd4OjphZGp1c3RN
ZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVd4OjphZGp1c3RNZW51TGlzdFN0eWxlKFJlbmRl
clN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewog
fQogICAgIApAQCAtMzY0LDcgKzM2NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVXeDo6cGFpbnRNZW51
TGlzdChSZW5kZXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXeDo6
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXeDo6YWRqdXN0TWVudUxpc3RCdXR0
b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRGF0YUdyaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckRhdGFHcmlkLmNwcAkocmV2aXNpb24gNjM4MjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJEYXRhR3JpZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1
ZGUgIlJlbmRlckRhdGFHcmlkLmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisj
aW5jbHVkZSAiUmVuZGVyU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbnB1dFNwZWVjaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5wdXRTcGVlY2guY3BwCShyZXZpc2lvbiA2Mzgy
MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklucHV0U3BlZWNoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQCBzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdFNwZWVjaEJ1
dHRvblNpCiBzdGF0aWMgY29uc3QgZmxvYXQgbWluU3BlZWNoQnV0dG9uU2l6ZSA9IDg7CiBzdGF0
aWMgY29uc3QgZmxvYXQgbWF4U3BlZWNoQnV0dG9uU2l6ZSA9IDQwOwogCi12b2lkIFJlbmRlcklu
cHV0U3BlZWNoOjphZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopCit2b2lkIFJlbmRlcklucHV0U3Bl
ZWNoOjphZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopCiB7CiAgICAgLy8gU2NhbGUgdGhlIGJ1
dHRvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUuCiAgICAgZmxvYXQgZm9udFNjYWxlID0g
c3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbnB1dFNwZWVjaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcklucHV0U3BlZWNoLmgJKHJldmlzaW9uIDYzODIwKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5wdXRTcGVlY2guaAkod29ya2luZyBjb3B5KQpAQCAtMzks
NyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlcklucHV0U3BlZWNo
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopOworICAgIHN0
YXRpYyB2b2lkIGFkanVzdElucHV0RmllbGRTcGVlY2hCdXR0b25TdHlsZShSZW5kZXJTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kik7CiAgICAgc3RhdGljIGJvb2wgcGFpbnRJ
bnB1dEZpZWxkU3BlZWNoQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJl
dmlzaW9uIDYzODIwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBACiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVz
LmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIkNTU1N0eWxl
U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAi
Q2hyb21lLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIu
aCIKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNp
b24gNjM4MjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgiCiAjZW5kaWYKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVk
ZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJHcmFwaGljc0xheWVyLmgiCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcAkocmV2aXNpb24gNjM4MjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxp
c3RCb3guaCIKIAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJDU1NTdHls
ZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24g
NjM4MjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogCiAj
aW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIK
KyNpbmNsdWRlICJSZW5kZXJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNjM4MjApCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAK
ICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVk
ZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA2MzgyMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcg
KzIzLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuaCIKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRl
ICJSZW5kZXJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5jcHAJKHJldmlzaW9uIDYzODIwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIFJlbmRlclRoZW1lOjpSZW5k
ZXJUaGVtZSgpCiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUsCit2b2lk
IFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiBzZWxlY3Rvciwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBVQUhhc0FwcGVhcmFuY2UsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29u
c3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQog
ewogICAgIC8vIEZvcmNlIGlubGluZSBhbmQgdGFibGUgZGlzcGxheSBzdHlsZXMgdG8gYmUgaW5s
aW5lLWJsb2NrIChleGNlcHQgZm9yIHRhYmxlLSB3aGljaCBpcyBibG9jaykKQEAgLTg3Nyw3ICs4
NzcsNyBAQCBib29sIFJlbmRlclRoZW1lOjppc0RlZmF1bHQoY29uc3QgUmVuZGVyCiAKICNpZiAh
VVNFKE5FV19USEVNRSkKIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0Q2hlY2tib3hTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdENoZWNrYm94U3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8gQSBzdW1tYXJ5
IG9mIHRoZSBydWxlcyBmb3IgY2hlY2tib3ggZGVzaWduZWQgdG8gbWF0Y2ggV2luSUU6CiAgICAg
Ly8gd2lkdGgvaGVpZ2h0IC0gaG9ub3JlZCAoV2luSUUgYWN0dWFsbHkgc2NhbGVzIGl0cyBjb250
cm9sIGZvciBzbWFsbCB3aWR0aHMsIGJ1dCBsZXRzIGl0IG92ZXJmbG93IGZvciBzbWFsbCBoZWln
aHRzLikKQEAgLTg5NCw3ICs4OTQsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RDaGVja2Jv
eFN0eWxlKENTCiAgICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZTo6YWRqdXN0UmFkaW9TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5bGUo
UmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
CiB7CiAgICAgLy8gQSBzdW1tYXJ5IG9mIHRoZSBydWxlcyBmb3IgY2hlY2tib3ggZGVzaWduZWQg
dG8gbWF0Y2ggV2luSUU6CiAgICAgLy8gd2lkdGgvaGVpZ2h0IC0gaG9ub3JlZCAoV2luSUUgYWN0
dWFsbHkgc2NhbGVzIGl0cyBjb250cm9sIGZvciBzbWFsbCB3aWR0aHMsIGJ1dCBsZXRzIGl0IG92
ZXJmbG93IGZvciBzbWFsbCBoZWlnaHRzLikKQEAgLTkxMSwzNyArOTExLDM3IEBAIHZvaWQgUmVu
ZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5bGUoQ1NTU3QKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93
KDApOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIC8vIE1vc3QgcGxhdGZvcm1zIHdpbGwg
Y29tcGxldGVseSBob25vciBhbGwgQ1NTLCBhbmQgc28gd2UgaGF2ZSBubyBuZWVkIHRvIGFkanVz
dCB0aGUgc3R5bGUKICAgICAvLyBhdCBhbGwgYnkgZGVmYXVsdC4gIFdlIHdpbGwgc3RpbGwgYWxs
b3cgdGhlIHRoZW1lIGEgY3JhY2sgYXQgc2V0dGluZyB1cCBhIGRlc2lyZWQgdmVydGljYWwgc2l6
ZS4KICAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RJbm5lclNwaW5CdXR0b25T
dHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QK
IHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0T3V0ZXJTcGluQnV0dG9uU3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lOjphZGp1c3RPdXRlclNwaW5CdXR0b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKIHsKIH0KIAogI2VuZGlmCiAKLXZvaWQgUmVu
ZGVyVGhlbWU6OmFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxk
U3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVT
ZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RUZXh0QXJlYVN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZW51TGlz
dFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWVudUxpc3RTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKIHsKIH0KIAogI2lmIEVOQUJMRShJTlBV
VF9TUEVFQ0gpCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdElucHV0RmllbGRT
cGVlY2hCdXR0b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlcklucHV0U3Bl
ZWNoOjphZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBl
bGVtZW50KTsKIH0KQEAgLTk1Myw3ICs5NTMsNyBAQCBib29sIFJlbmRlclRoZW1lOjpwYWludElu
cHV0RmllbGRTcGVlY2hCCiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRVRFUl9UQUcpCi12b2lkIFJl
bmRlclRoZW1lOjphZGp1c3RNZXRlclN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWV0ZXJT
dHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKIHsKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwogfQpAQCAtOTg2LDIwICs5ODYs
MjAgQEAgZG91YmxlIFJlbmRlclRoZW1lOjphbmltYXRpb25EdXJhdGlvbkZvcgogICAgIHJldHVy
biAwOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3QKIHsKIH0KICNlbmRpZgogCi12b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWVudUxpc3RCdXR0
b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dFNsaWRlclRodW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFJlbmRl
clN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAogewogfQogCkBA
IC0xMDA3LDIzICsxMDA3LDIzIEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1i
U2l6ZSgKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFk
anVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hG
aWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlv
blN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
U3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoUmVu
ZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkocmV2aXNpb24gNjM4MjApCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBA
IHB1YmxpYzoKICAgICAvLyBtZXRyaWNzIGFuZCBkZWZhdWx0cyBnaXZlbiB0aGUgY29udGVudHMg
b2YgdGhlIHN0eWxlLiAgVGhpcyBpbmNsdWRlcyBzb3BoaXN0aWNhdGVkIG9wZXJhdGlvbnMgbGlr
ZQogICAgIC8vIHNlbGVjdGlvbiBvZiBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LCB0
aGUgZGlzYWJsaW5nIG9mIGFwcGVhcmFuY2Ugd2hlbiBjZXJ0YWluIG90aGVyIHByb3BlcnRpZXMg
bGlrZQogICAgIC8vICJib3JkZXIiIGFyZSBzZXQsIG9yIGlmIHRoZSBhcHBlYXJhbmNlIGlzIG5v
dCBzdXBwb3J0ZWQgYnkgdGhlIHRoZW1lLgotICAgIHZvaWQgYWRqdXN0U3R5bGUoQ1NTU3R5bGVT
ZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCosICBib29sIFVBSGFzQXBwZWFyYW5jZSwK
KyAgICB2b2lkIGFkanVzdFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqLCAgYm9vbCBVQUhhc0FwcGVhcmFuY2UsCiAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91
bmRDb2xvcik7CiAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcGFpbnQgdGhlIHdp
ZGdldCBhcyBhIGJhY2tncm91bmQgb2YgdGhlIFJlbmRlck9iamVjdC4gIEEgd2lkZ2V0J3MgZm9y
ZWdyb3VuZCwgZS5nLiwgdGhlCkBAIC0yMTMsNzAgKzIxMyw3MCBAQCBwcm90ZWN0ZWQ6CiAKICNp
ZiAhVVNFKE5FV19USEVNRSkKICAgICAvLyBNZXRob2RzIGZvciBlYWNoIGFwcGVhcmFuY2UgdmFs
dWUuCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RDaGVja2JveFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdCB7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9T
dHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQg
c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShSZW5kZXJTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUo
UmVuZGVyU3R5bGUqKSBjb25zdCB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNw
aW5CdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFJlbmRl
clN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0T3V0ZXJTcGluQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RPdXRlclNwaW5CdXR0
b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50T3V0ZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAjZW5k
aWYKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFRleHRGaWVsZFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
VGV4dEFyZWFTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxp
c3RTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxp
c3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0K
IAogI2lmIEVOQUJMRShNRVRFUl9UQUcpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1ldGVyU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dy
ZXNzQmFyU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFJlbmRlclN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5QVVRf
U1BFRUNIKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoUmVuZGVyU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBwYWludElucHV0RmllbGRTcGVlY2hCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoUmVu
ZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUo
UmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5
bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZp
ZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRp
b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFJl
bmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShSZW5kZXJTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAkocmV2aXNpb24gNjM4MjAp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OnNldFNlbGVjdAogICAgIG1faW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IgPSBp
bmFjdGl2ZUZvcmVncm91bmRDb2xvcjsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIGludCB3aWR0aCA9IFNjcm9s
bGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5zY3JvbGxiYXJUaGlja25lc3MoKTsKICAgICBzdHls
ZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmgJKHJldmlzaW9uIDYzODIwKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgdm9p
ZCBzZXRDYXJldEJsaW5rSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKTsKICAgICAgICAgdmlydHVh
bCBkb3VibGUgY2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwoKSBjb25zdDsKIAotICAgICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5C
dXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
CiAgICAgICAgIHN0YXRpYyB2b2lkIHNldFNlbGVjdGlvbkNvbG9ycyh1bnNpZ25lZCBhY3RpdmVC
YWNrZ3JvdW5kQ29sb3IsCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWEuY3BwCShyZXZpc2lvbiA2MzgyMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcwLDcgKzM3MCw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50QnV0dG8KICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdEJ1dHRvblN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0QnV0dG9uU3R5bGUoUmVuZGVy
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAg
ICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQpIHsKICAgICAgICAg
Ly8gSWdub3JlIGxpbmUtaGVpZ2h0LgpAQCAtMzg5LDcgKzM4OSw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OnBhaW50VGV4dEEKICAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywg
aSwgcik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZp
ZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZFN0
eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAogewogICAgICAvLyBJZ25vcmUgbGluZS1oZWlnaHQuCiAgICAgIHN0eWxlLT5zZXRMaW5l
SGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKQEAgLTQwMCw3ICs0MDAs
NyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjCiAgICAgcmV0dXJu
IHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShSZW5kZXJTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICAv
LyBTY2FsZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZQogICAgIGZsb2F0
IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4ZWxT
aXplOwpAQCAtNDQ3LDE0ICs0NDcsMTQgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6
cGFpbnRTZWFyYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShSZW5kZXJTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICBJ
bnRTaXplIGVtcHR5U2l6ZSgxLCAxMSk7CiAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChlbXB0
eVNpemUud2lkdGgoKSwgRml4ZWQpKTsKICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChlbXB0
eVNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShS
ZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
IHsKICAgICAvLyBTY2FsZSB0aGUgZGVjb3JhdGlvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNp
emUKICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250
cm9sRm9udFBpeGVsU2l6ZTsKQEAgLTQ4OCw3ICs0ODgsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwYWludFNlYXJjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
blN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
KSBjb25zdAogewogICAgIC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9u
dCBzaXplCiAgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0
Q29udHJvbEZvbnRQaXhlbFNpemU7CkBAIC02MTQsNyArNjE0LDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYQogI2VuZGlmCiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0
b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCogZSkgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdE1lbnVMaXN0U3R5bGUoUmVuZGVyU3R5bGVS
ZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCog
ZSkgY29uc3QKIHsKICAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8gb24gYWxsIGJyb3dz
ZXJzLgogICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhl
aWdodCgpKTsKQEAgLTY0NCw3ICs2NDQsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
OjpwYWludE1lbnVMCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNl
bGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxl
UmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0
CiB7CiAgICAgYWRqdXN0TWVudUxpc3RTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGUpOwogfQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oCShyZXZpc2lv
biA2MzgyMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTczLDI0ICs3MywyNCBAQCBjbGFzcyBSZW5kZXJQcm9ncmVzczsK
ICAgICAgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0Owog
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RC
dXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICAgICAgICAgdmlydHVh
bCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICAgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGRTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERl
Y29yYXRpb25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUo
UmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAg
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lZGlhQ29udHJvbHNCYWNrZ3JvdW5kKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKQEAgLTExMSw5ICsxMTEsOSBAQCBjbGFzcyBS
ZW5kZXJQcm9ncmVzczsKICAgICAgICAgLy8gSW4gc2hvcnQsIHdlIGVpdGhlciBnbyBkb3duIHRo
ZSBNZW51TGlzdCBjb2RlIHBhdGggb3IgdGhlIE1lbnVMaXN0QnV0dG9uCiAgICAgICAgIC8vIGNv
ZGVwYXRoLiBXZSBuZXZlciBnbyBkb3duIGJvdGguIEFuZCBpbiBib3RoIGNhc2VzLCB0aGV5IHJl
bmRlciB0aGUKICAgICAgICAgLy8gZW50aXJlIG1lbnVsaXN0LgotICAgICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxl
KFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAg
ICAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVu
dUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxl
KFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAg
ICAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBw
YWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1X
aW4uY3BwCShyZXZpc2lvbiA2MzgyMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODcsNyArNjg3LDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludFRleHRGaQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUo
UmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
CiB7CiAgICAgaW50IHdpZHRoID0gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPnNjcm9s
bGJhclRoaWNrbmVzcygpOwogICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVk
KSk7CkBAIC03MzYsNyArNzM2LDcgQEAgZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OmFu
aW1hdGlvbgogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lUmF0ZTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZUNocm9taXVtV2luOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAogewogfQogCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oCShyZXZpc2lvbiA2MzgyMCkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uaAkod29ya2luZyBjb3B5KQpA
QCAtODYsMTMgKzg2LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gU2VlIGNv
bW1lbnQgaW4gUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNldERlZmF1bHRGb250U2l6ZSgpIHJl
Z2FyZGluZyB1Z2xpbmVzcyBvZiB0aGlzIGhhY2suCiAgICAgICAgIHN0YXRpYyB2b2lkIHNldERl
ZmF1bHRGb250U2l6ZShpbnQpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNw
aW5CdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShS
ZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfVEFH
KQogICAgICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dy
ZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgZG91YmxlIGFu
aW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFy
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRp
ZgogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHJldmlzaW9uIDYzODIwKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDQxICsxMDUsNDEgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1Nl
bGVjdGlvbkZvcmVncm91bmRDb2xvcnMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAg
dmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRU
ZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RU
ZXh0QXJlYVN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoUmVuZGVyU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAgdmlydHVh
bCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICNpZiBFTkFCTEUoUFJP
R1JFU1NfVEFHKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NC
YXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogI2Vu
ZGlmCiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVz
dFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFJlbmRl
clN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAogICAgIHZp
cnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBh
aW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmll
bGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZERlY29yYXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHls
ZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTE4MSw3ICsxODEsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgc2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6
ZSogc2l6ZXMpIGNvbnN0OwogICAgIEludFNpemUgc2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqLCBj
b25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7CiAgICAgSW50U2l6ZSBzaXplRm9yU3lzdGVtRm9u
dChSZW5kZXJTdHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKLSAgICB2b2lkIHNl
dEZvbnRGcm9tQ29udHJvbFNpemUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgTlND
b250cm9sU2l6ZSkgY29uc3Q7CisgICAgdm9pZCBzZXRGb250RnJvbUNvbnRyb2xTaXplKFJlbmRl
clN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIE5TQ29udHJvbFNpemUpIGNvbnN0OwogCiAg
ICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7
CiAgICAgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0
Kik7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gNjM4MjAp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjIsNyArMjIsNyBAQAogCiAjaW1wb3J0ICJCaXRtYXBJbWFnZS5oIgogI2ltcG9ydCAiQ29s
b3JNYWMuaCIKLSNpbXBvcnQgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbXBvcnQgIlJlbmRlclN0
eWxlUmVzb2x2ZXIuaCIKICNpbXBvcnQgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbXBvcnQgIkRv
Y3VtZW50LmgiCiAjaW1wb3J0ICJFbGVtZW50LmgiCkBAIC02NzgsNyArNjc4LDcgQEAgdm9pZCBS
ZW5kZXJUaGVtZU1hYzo6c2V0U2l6ZUZyb21Gb250KFJlbgogICAgICAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1l
TWFjOjpzZXRGb250RnJvbUNvbnRyb2xTaXplKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSogc3R5bGUsIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0CiB7CiAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0
SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CkBAIC03MTMsNyArNzEzLDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRUZXh0RmllbGQoUmVuZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RU
ZXh0RmllbGRTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3QKIHsKIH0KIApAQCAtNzM1LDcgKzczNSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6
OnBhaW50VGV4dEFyZWEoUmVuZGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVNYWM6OmFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0QXJl
YVN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dAogewogfQogCkBAIC05MjgsNyArOTI4LDcgQEAgZG91YmxlIFJlbmRlclRoZW1lTWFjOjphbmlt
YXRpb25EdXJhdGlvbgogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbk51bUZyYW1lcyAqIHBy
b2dyZXNzQW5pbWF0aW9uRnJhbWVSYXRlOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1
c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShS
ZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKIHsKIH0K
IApAQCAtMTE1OCw3ICsxMTU4LDcgQEAgc3RhdGljIGNvbnN0IEludFNpemUqIG1lbnVMaXN0QnV0
dG9uU2l6ZQogICAgIHJldHVybiBzaXplczsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVu
dUxpc3RTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUg
PSBjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpOwogCkBAIC0xMjI1LDcgKzEyMjUsNyBAQCBpbnQg
UmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nCiAgICAgcmV0dXJuIDA7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVT
ZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lTWFjOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIGZsb2F0IGZvbnRT
Y2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplOwogCkBAIC0xMjY3LDcgKzEy
NjcsNyBAQCBpbnQgUmVuZGVyVGhlbWVNYWM6Om1pbmltdW1NZW51TGlzdFNpemUoCiBjb25zdCBp
bnQgdHJhY2tXaWR0aCA9IDU7CiBjb25zdCBpbnQgdHJhY2tSYWRpdXMgPSAyOwogCi12b2lkIFJl
bmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwog
fQpAQCAtMTMxMSw3ICsxMzExLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJU
cmFjayhSZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0U2xpZGVyVGh1bWJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1i
U3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0CiB7CiAgICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsKIH0KQEAgLTE0NDUsNyArMTQ0
NSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaEZpZWxkU2l6ZSgKICAgICBzZXRT
aXplRnJvbUZvbnQoc3R5bGUsIHNlYXJjaEZpZWxkU2l6ZXMoKSk7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0
b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
TWFjOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9y
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIC8vIE92ZXJyaWRl
IGJvcmRlci4KICAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKQEAgLTE1MjksNyArMTUyOSw3IEBA
IGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lTWFjOjpjYW5jZWxCdXQKICAgICByZXR1cm4gc2l6
ZXM7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
blN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
KSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCBj
YW5jZWxCdXR0b25TaXplcygpKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lk
dGgoKSwgRml4ZWQpKTsKQEAgLTE1NDQsNyArMTU0NCw3IEBAIGNvbnN0IEludFNpemUqIFJlbmRl
clRoZW1lTWFjOjpyZXN1bHRzQnUKIH0KIAogY29uc3QgaW50IGVtcHR5UmVzdWx0c09mZnNldCA9
IDk7Ci12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKFJl
bmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAog
ewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0
dG9uU2l6ZXMoKSk7CiAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkgLSBl
bXB0eVJlc3VsdHNPZmZzZXQsIEZpeGVkKSk7CkBAIC0xNTU3LDcgKzE1NTcsNyBAQCBib29sIFJl
bmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkRGVjCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUs
IHJlc3VsdHNCdXR0b25TaXplcygpKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUu
d2lkdGgoKSwgRml4ZWQpKTsKQEAgLTE1OTAsNyArMTU5MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGRSZXMKIH0KIAogY29uc3QgaW50IHJlc3VsdHNBcnJvd1dpZHRo
ID0gNTsKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
U3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJl
c3VsdHNCdXR0b25TaXplcygpKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lk
dGgoKSArIHJlc3VsdHNBcnJvd1dpZHRoLCBGaXhlZCkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lU2FmYXJpLmNwcAkocmV2aXNpb24gNjM4MjApCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MSw3ICszODEs
NyBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRTaXplRnJvbUZvbnQoCiAgICAgICAgIHN0
eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVTYWZhcmk6OnNldEZvbnRGcm9tQ29udHJvbFNpemUoQ1NTU3R5bGVTZWxlY3Rv
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6
ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldEZvbnRGcm9tQ29udHJvbFNpemUo
UmVuZGVyU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgTlNDb250
cm9sU2l6ZSBjb250cm9sU2l6ZSkgY29uc3QKIHsKICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsK
QEAgLTUwMSw3ICs1MDEsNyBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRCdXR0b25QYWRk
aW5nCiAgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDAsIEZpeGVkKSk7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVy
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAogewogICAg
IC8vIFRoZXJlIGFyZSB0aHJlZSBhcHBlYXJhbmNlIGNvbnN0YW50cyBmb3IgYnV0dG9ucy4KICAg
ICAvLyAoMSkgUHVzaC1idXR0b24gaXMgdGhlIGNvbnN0YW50IGZvciB0aGUgZGVmYXVsdCBBcXVh
IHN5c3RlbSBidXR0b24uICBQdXNoIGJ1dHRvbnMgd2lsbCBub3Qgc2NhbGUgdmVydGljYWxseSBh
bmQgd2lsbCBub3QgYWxsb3cKQEAgLTYxMyw3ICs2MTMsNyBAQCBib29sIFJlbmRlclRoZW1lU2Fm
YXJpOjpwYWludFRleHRGaWVsZChSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRl
clRoZW1lU2FmYXJpOjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVz
dFRleHRGaWVsZFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdAogewogfQogCkBAIC02NDEsNyArNjQxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVNh
ZmFyaTo6cGFpbnRUZXh0QXJlYShSZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZVNhZmFyaTo6YWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVz
dFRleHRBcmVhU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0CiB7CiB9CiAKQEAgLTg2Myw3ICs4NjMsNyBAQCBib29sIFJlbmRlclRoZW1lU2Fm
YXJpOjpwYWludE1lbnVMaXN0QnV0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRl
clRoZW1lU2FmYXJpOjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lU2FmYXJpOjphZGp1c3RNZW51TGlzdFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgTlNDb250
cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7CiAKQEAgLTky
OCw3ICs5MjgsNyBAQCBpbnQgUmVuZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkCiAg
ICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1lbnVMaXN0
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1lbnVM
aXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHls
ZS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKICAgICAKQEAgLTk5MSw3ICs5OTEsNyBAQCBi
b29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNsaWRlclRyYWNrCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUp
IGNvbnN0IAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShS
ZW5kZXJTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KiBlKSBjb25zdCAKIHsgCiAgICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsgCiB9IApAQCAtMTA1
Myw3ICsxMDUzLDcgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0U2VhcmNoRmllbGRTaQog
ICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgc2VhcmNoRmllbGRTaXplcygpKTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShSZW5kZXJTdHlsZVJl
c29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAog
ewogICAgIC8vIE92ZXJyaWRlIGJvcmRlci4KICAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKQEAg
LTExMDMsNyArMTEwMyw3IEBAIGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lU2FmYXJpOjpjYW5j
ZWwKICAgICByZXR1cm4gc2l6ZXM7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVz
dFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3Is
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVT
YWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGVSZXNv
bHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsK
ICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgY2FuY2VsQnV0dG9u
U2l6ZXMoKSk7CiAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVk
KSk7CkBAIC0xMTE3LDcgKzExMTcsNyBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZVNhZmFy
aTo6cmVzdWx0CiB9CiAKIGNvbnN0IGludCBlbXB0eVJlc3VsdHNPZmZzZXQgPSA5Owotdm9pZCBS
ZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0
eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQo
c3R5bGUsIHJlc3VsdHNCdXR0b25TaXplcygpKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KHNpemUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwgRml4ZWQpKTsKQEAgLTExMjksNyAr
MTEyOSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFy
aTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFJlbmRlclN0eWxlUmVz
b2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7
CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0
b25TaXplcygpKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4
ZWQpKTsKQEAgLTExNTIsNyArMTE1Miw3IEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50
U2VhcmNoRmllbGQKIH0KIAogY29uc3QgaW50IHJlc3VsdHNBcnJvd1dpZHRoID0gNTsKLXZvaWQg
UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUp
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0
ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7CiAgICAgc3R5bGUtPnNldFdpZHRo
KExlbmd0aChzaXplLndpZHRoKCkgKyByZXN1bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuaAkocmV2aXNpb24gNjM4MjApCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXpl
KFJlbmRlclN0eWxlKikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1
bWJTaXplKFJlbmRlck9iamVjdCopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlk
ZXJUaHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsgCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoUmVuZGVyU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OyAKICAgICAKICAgICB2
aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikg
Y29uc3Q7CkBAIC05MiwzOCArOTIsMzggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBw
YWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBXZWJD
b3JlOjpFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwogCiAgICAgdmlydHVhbCBi
b29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmly
dHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0
eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
IAogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxp
c3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBh
aW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRT
bGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRD
YW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
U3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNl
YXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERl
Y29yYXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25T
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShS
ZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKICAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CkBAIC0xNTIsNyAr
MTUyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSos
IGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKICAgICBJbnRTaXplIHNpemVGb3JGb250KFJl
bmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwogICAgIEludFNpemUgc2l6
ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7
Ci0gICAgdm9pZCBzZXRGb250RnJvbUNvbnRyb2xTaXplKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSosIE5TQ29udHJvbFNpemUpIGNvbnN0OworICAgIHZvaWQgc2V0Rm9udEZyb21Db250
cm9sU2l6ZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBOU0NvbnRyb2xTaXpl
KSBjb25zdDsKIAogICAgIC8vIEhlbHBlcnMgZm9yIGFkanVzdGluZyBhcHBlYXJhbmNlIGFuZCBm
b3IgcGFpbnRpbmcKICAgICBjb25zdCBJbnRTaXplKiBjaGVja2JveFNpemVzKCkgY29uc3Q7Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCShyZXZpc2lvbiA2MzgyMCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjU5LDEzICs2NTksMTMgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdChSZW5k
ZQogICAgIHJldHVybiBwYWludE1lbnVMaXN0QnV0dG9uKG8sIGksIHIpOwogfQogCi12b2lkIFJl
bmRlclRoZW1lV2luOjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lV2luOjphZGp1c3RNZW51TGlzdFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9y
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgc3R5bGUtPnJl
c2V0Qm9yZGVyKCk7CiAgICAgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShzZWxlY3Rvciwgc3R5
bGUsIGUpOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0
eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgLy8gVGhlc2UgYXJlIHRoZSBwYWRkaW5ncyBuZWVkZWQg
dG8gcGxhY2UgdGhlIHRleHQgY29ycmVjdGx5IGluIHRoZSA8c2VsZWN0PiBib3gKICAgICBjb25z
dCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nVG9wICAgID0gMjsKQEAgLTc2Niw3ICs3NjYsNyBAQCBi
b29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkKFJlCiAgICAgcmV0dXJuIHBhaW50
VGV4dEZpZWxkKG8sIGksIHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFy
Y2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hG
aWVsZFN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgLy8gT3ZlcnJpZGUgcGFkZGluZ1NpemUgdG8g
bWF0Y2ggQXBwS2l0IHRleHQgcG9zaXRpb25pbmcuCiAgICAgY29uc3QgaW50IHBhZGRpbmcgPSAx
OwpAQCAtODAzLDcgKzgwMyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmll
bGRDYW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVz
dFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3Is
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVX
aW46OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZl
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAg
ICAvLyBTY2FsZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZQogICAgIGZs
b2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4
ZWxTaXplOwpAQCAtODEyLDE0ICs4MTIsMTQgQEAgdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0
U2VhcmNoRmllbGRDYQogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGNhbmNlbEJ1dHRvblNp
emUsIEZpeGVkKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxk
RGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFy
Y2hGaWVsZERlY29yYXRpb25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIEludFNpemUgZW1wdHlT
aXplKDEsIDExKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGVtcHR5U2l6ZS53aWR0aCgp
LCBGaXhlZCkpOwogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGVtcHR5U2l6ZS5oZWlnaHQo
KSwgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciog
c2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICAv
LyBTY2FsZSB0aGUgZGVjb3JhdGlvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKICAgICBm
bG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBp
eGVsU2l6ZTsKQEAgLTg1Miw3ICs4NTIsNyBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNl
YXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2lu
OjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoUmVuZGVyU3R5
bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29u
c3QKIHsKICAgICAvLyBTY2FsZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6
ZQogICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRy
b2xGb250UGl4ZWxTaXplOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oCShyZXZp
c2lvbiA2MzgyMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgyLDkgKzgyLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFRleHRBcmVhKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByKQogICAgIHsgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOyB9CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0TWVudUxpc3RTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGVS
ZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKQEAgLTk0LDI2ICs5NCwyNiBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgcG9wdXBPcHRpb25TdXBwb3J0c1RleHRJbmRlbnQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoUmVuZGVyU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShS
ZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmll
bGREZWNvcmF0aW9uU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0IHt9Ci0gICAgdmlydHVhbCB2b2lkIGFk
anVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqKSBjb25zdCB7fQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7
fQorICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3Qge30KKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0IHt9CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRB
cmVhU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0IHt9CiAKICAgICBzdGF0aWMgdm9pZCBzZXRXZWJLaXRJc0JlaW5nVW5sb2FkZWQo
KTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5jZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5jZS5jcHAJKHJldmlzaW9u
IDYzODIwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5jZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzNCw3ICsyMzQsNyBAQCBib29sIFJlbmRlclRoZW1lV2luY2U6OnBhaW50
VGV4dEZpZWxkKFJlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2lu
Y2U6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW5jZTo6
YWRqdXN0TWVudUxpc3RTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIHN0eWxlLT5yZXNldEJvcmRl
cigpOwogICAgIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsK
QEAgLTM1MSw3ICszNTEsNyBAQCB2b2lkIFJlbmRlclRoZW1lV2luY2U6OmFkanVzdEJ1dHRvbklu
bmVyCiAgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aCgzLCBGaXhlZCkpOwogfQogCi12
b2lkIFJlbmRlclRoZW1lV2luY2U6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxl
Y3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVXaW5jZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShSZW5kZXJTdHlsZVJl
c29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAog
ewogICAgIC8vIE92ZXJyaWRlIHBhZGRpbmcgc2l6ZSB0byBtYXRjaCBBcHBLaXQgdGV4dCBwb3Np
dGlvbmluZy4KICAgICBjb25zdCBpbnQgcGFkZGluZyA9IDE7CkBAIC0zOTEsMjEgKzM5MSwyMSBA
QCBib29sIFJlbmRlclRoZW1lV2luY2U6OnBhaW50U2VhcmNoRmllbGRDCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luY2U6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW5jZTo6YWRqdXN0U2VhcmNo
RmllbGRDYW5jZWxCdXR0b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIEludFNpemUgY2FuY2Vs
U2l6ZSgxMywgMTEpOwogICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoY2FuY2VsU2l6ZS53aWR0
aCgpLCBGaXhlZCkpOwogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGNhbmNlbFNpemUuaGVp
Z2h0KCksIEZpeGVkKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW5jZTo6YWRqdXN0U2VhcmNo
RmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW5jZTo6YWRq
dXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciogc2VsZWN0
b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICBJbnRTaXpl
IGVtcHR5U2l6ZSgxLCAxMSk7CiAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChlbXB0eVNpemUu
d2lkdGgoKSwgRml4ZWQpKTsKICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChlbXB0eVNpemUu
aGVpZ2h0KCksIEZpeGVkKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW5jZTo6YWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9y
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
V2luY2U6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShSZW5kZXJTdHls
ZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25z
dAogewogICAgIEludFNpemUgbWFnbmlmaWVyU2l6ZSgxNSwgMTEpOwogICAgIHN0eWxlLT5zZXRX
aWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZS53aWR0aCgpLCBGaXhlZCkpOwpAQCAtNDE4LDcgKzQx
OCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW5jZTo6cGFpbnRTZWFyY2hGaWVsZFIKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW5jZTo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW5jZTo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciogc2VsZWN0
b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICBJbnRTaXpl
IG1hZ25pZmllclNpemUoMTUsIDExKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKG1hZ25p
ZmllclNpemUud2lkdGgoKSwgRml4ZWQpKTsKQEAgLTQzMSw3ICs0MzEsNyBAQCBib29sIFJlbmRl
clRoZW1lV2luY2U6OnBhaW50U2VhcmNoRmllbGRSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIFJlbmRlclRoZW1lV2luY2U6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVXaW5jZTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShSZW5kZXJT
dHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBj
b25zdAogewogICAgIC8vIFRoZXNlIGFyZSB0aGUgcGFkZGluZ3MgbmVlZGVkIHRvIHBsYWNlIHRo
ZSB0ZXh0IGNvcnJlY3RseSBpbiB0aGUgPHNlbGVjdD4gYm94CiAgICAgY29uc3QgaW50IGRyb3BE
b3duQm94UGFkZGluZ1RvcCAgICA9IDI7CkBAIC01MjgsNyArNTI4LDcgQEAgYm9vbCBSZW5kZXJU
aGVtZVdpbmNlOjpwYWludFNsaWRlclRodW1iKAogICAgIHJldHVybiByYzsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZVdpbmNlOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
IHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lV2luY2U6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZl
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAg
ICBjb25zdCBpbnQgcGFkZGluZyA9IDE7CiAgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0
aChwYWRkaW5nLCBGaXhlZCkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVX
aW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luY2Uu
aAkocmV2aXNpb24gNjM4MjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbmNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDkgKzgxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKICAgICAgICAgeyByZXR1cm4gcGFpbnRU
ZXh0RmllbGQobywgaSwgcik7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxp
c3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KiBlKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5
bGUoUmVuZGVyU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZSkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2Vs
ZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3Q7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIq
IHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0OwogCiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIApAQCAtOTMsMjYgKzkzLDI2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgcG9wdXBPcHRpb25TdXBwb3J0
c1RleHRJbmRlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICAgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmll
bGRTdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERl
Y29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25T
dHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gZmFsc2U7
IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25TdHlsZShSZW5kZXJTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShSZW5kZXJT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IHRoZW1lQ2hhbmdlZCgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3Qg
e30KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7fQotICAgICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3Qge30KKyAgICAgICAgdmlydHVhbCB2b2lkIGFk
anVzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqKSBjb25zdCB7fQorICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxk
U3R5bGUoUmVuZGVyU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0IHt9CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFJlbmRl
clN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7fQog
CiAgICAgICAgIHN0YXRpYyB2b2lkIHNldFdlYktpdElzQmVpbmdVbmxvYWRlZCgpOwogCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAkocmV2aXNpb24gNjM4MjApCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjc3LDcgKzI3Nyw3IEBAIGJvb2wgU1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRl
bigKICAgICAvLyBTVkcgZG9lc24ndCBzdXBwb3J0IGluZGVwZW5kZW50IHgveSBvdmVyZmxvdwog
ICAgIEFTU0VSVChvYmplY3QtPnN0eWxlKCktPm92ZXJmbG93WCgpID09IG9iamVjdC0+c3R5bGUo
KS0+b3ZlcmZsb3dZKCkpOwogCi0gICAgLy8gT1NDUk9MTCBpcyBuZXZlciBzZXQgZm9yIFNWRyAt
IHNlZSBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZQorICAgIC8vIE9TQ1JPTEwg
aXMgbmV2ZXIgc2V0IGZvciBTVkcgLSBzZWUgUmVuZGVyU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVu
ZGVyU3R5bGUKICAgICBBU1NFUlQob2JqZWN0LT5zdHlsZSgpLT5vdmVyZmxvd1goKSAhPSBPU0NS
T0xMKTsKIAogICAgIC8vIFJlbmRlclNWR1Jvb3Qgc2hvdWxkIG5ldmVyIHF1ZXJ5IGZvciBvdmVy
ZmxvdyBzdGF0ZSAtIGl0IHNob3VsZCBhbHdheXMgY2xpcCBpdHNlbGYgdG8gdGhlIGluaXRpYWwg
dmlld3BvcnQgc2l6ZS4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5j
cHAJKHJldmlzaW9uIDYzODIwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKIAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NT
dHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGVSZXNvbHZlci5oIgogI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ291bnRlckNvbnRlbnQuaCIKICNpbmNsdWRl
ICJGb250U2VsZWN0b3IuaCIKQEAgLTE4Miw3ICsxODIsNyBAQCBib29sIFJlbmRlclN0eWxlOjpv
cGVyYXRvcj09KGNvbnN0IFJlbmRlCiAKIGJvb2wgUmVuZGVyU3R5bGU6OmlzU3R5bGVBdmFpbGFi
bGUoKSBjb25zdAogewotICAgIHJldHVybiB0aGlzICE9IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxl
Tm90WWV0QXZhaWxhYmxlKCk7CisgICAgcmV0dXJuIHRoaXMgIT0gUmVuZGVyU3R5bGVSZXNvbHZl
cjo6c3R5bGVOb3RZZXRBdmFpbGFibGUoKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgcHNldWRv
Qml0KFBzZXVkb0lkIHBzZXVkbykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaAkocmV2aXNpb24gNjM4MjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB1c2luZyBzdGQ6Om1heDsKIAotY2xhc3MgQ1NTU3R5bGVTZWxlY3RvcjsKK2NsYXNz
IFJlbmRlclN0eWxlUmVzb2x2ZXI7CiBjbGFzcyBDU1NWYWx1ZUxpc3Q7CiBjbGFzcyBDYWNoZWRJ
bWFnZTsKIGNsYXNzIFBhaXI7CkBAIC0xMTYsNyArMTE2LDcgQEAgdHlwZWRlZiBWZWN0b3I8UmVm
UHRyPFJlbmRlclN0eWxlPiwgND4gUAogY2xhc3MgUmVuZGVyU3R5bGU6IHB1YmxpYyBSZWZDb3Vu
dGVkPFJlbmRlclN0eWxlPiB7CiAgICAgZnJpZW5kIGNsYXNzIEFuaW1hdGlvbkJhc2U7IC8vIFVz
ZWQgYnkgQ1NTIGFuaW1hdGlvbnMuIFdlIGNhbid0IGFsbG93IHRoZW0gdG8gYW5pbWF0ZSBiYXNl
ZCBvZmYgdmlzaXRlZCBjb2xvcnMuCiAgICAgZnJpZW5kIGNsYXNzIEFwcGx5U3R5bGVDb21tYW5k
OyAvLyBFZGl0aW5nIGhhcyB0byBvbmx5IHJldmVhbCB1bnZpc2l0ZWQgaW5mby4KLSAgICBmcmll
bmQgY2xhc3MgQ1NTU3R5bGVTZWxlY3RvcjsgLy8gU2V0cyBtZW1iZXJzIGRpcmVjdGx5LgorICAg
IGZyaWVuZCBjbGFzcyBSZW5kZXJTdHlsZVJlc29sdmVyOyAvLyBTZXRzIG1lbWJlcnMgZGlyZWN0
bHkuCiAgICAgZnJpZW5kIGNsYXNzIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjsgLy8gSWdu
b3JlcyB2aXNpdGVkIHN0eWxlcywgc28gbmVlZHMgdG8gYmUgYWJsZSB0byBzZWUgdW52aXNpdGVk
IGluZm8uCiAgICAgZnJpZW5kIGNsYXNzIFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9y
OyAvLyBVc2VkIGJ5IENTUyBhbmltYXRpb25zLiBXZSBjYW4ndCBhbGxvdyB0aGVtIHRvIGFuaW1h
dGUgYmFzZWQgb2ZmIHZpc2l0ZWQgY29sb3JzLgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJTVkdS
ZXNvdXJjZTsgLy8gRklYTUU6IE5lZWRzIHRvIGFsdGVyIHRoZSB2aXNpdGVkIHN0YXRlIGJ5IGhh
bmQuIFNob3VsZCBjbGVhbiB0aGUgU1ZHIGNvZGUgdXAgYW5kIG1vdmUgaXQgaW50byBSZW5kZXJT
dHlsZSBwZXJoYXBzLgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9u
SW5oZXJpdGVkRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAJKHJldmlzaW9uIDYzODIwKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
dHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgiCiAKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9y
LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIkNvbnRlbnRE
YXRhLmgiCiAjaW5jbHVkZSAiUmVuZGVyQ291bnRlci5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxl
LmgiCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWRE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9u
SW5oZXJpdGVkRGF0YS5oCShyZXZpc2lvbiA2MzgyMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyAr
MzksNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBbmltYXRpb25MaXN0OwotY2xh
c3MgQ1NTU3R5bGVTZWxlY3RvcjsKK2NsYXNzIFJlbmRlclN0eWxlUmVzb2x2ZXI7CiBjbGFzcyBT
aGFkb3dEYXRhOwogY2xhc3MgU3R5bGVGbGV4aWJsZUJveERhdGE7CiBjbGFzcyBTdHlsZU1hcnF1
ZWVEYXRhOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2Mzgy
MCkKKysrIFdlYkNvcmUvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJTVkdDbGlwUGF0aEVsZW1lbnQuaCIKIAogI2lu
Y2x1ZGUgIkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNs
dWRlICJSZW5kZXJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MzgyMCkKKysrIFdl
YkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcg
KzMwLDcgQEAKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eS5o
IgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVj
dG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIkNTU1N0
eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ1NT
VmFsdWVMaXN0LmgiCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAJKHJldmlzaW9u
IDYzODIwKQorKysgV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgog
CiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgor
I2luY2x1ZGUgIlJlbmRlclN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJQYXRoLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5oIgpJbmRleDogV2ViQ29yZS9zdmcvU1ZHTWFza0Vs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAko
cmV2aXNpb24gNjM4MjApCisrKyBXZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJTVkdNYXNrRWxlbWVudC5oIgog
CiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgor
I2luY2x1ZGUgIlJlbmRlclN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZU1hc2tlci5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNjM4MjApCisrKyBX
ZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyAr
MjUsNyBAQAogCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgotI2lu
Y2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZVJlc29sdmVy
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgpJbmRleDogV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9u
IDYzODIwKQorKysgV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJTVkdVc2VFbGVtZW50LmgiCiAKICNpbmNsdWRl
ICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAi
UmVuZGVyU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RXZlbnQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDYzODM0KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA3LTIxICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtv
dkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVuYW1lIENTU1N0eWxlU2VsZWN0b3IgdG8gUmVuZGVyU3R5bGVSZXNvbHZlci4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyNzY0CisK
KyAgICAgICAgKiBzcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuY3BwOgorICAgICAgICAqIHNy
Yy9XZWJWaWV3SW1wbC5jcHA6CisKIDIwMTAtMDctMjEgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTdGV2ZSBCbG9jay4KSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9zcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuY3BwCShyZXZp
c2lvbiA2MzgyMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGll
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuaCIKIAotI2luY2x1ZGUgIkNT
U1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZVJlc29sdmVyLmgiCiAjaW5j
bHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlz
aW9uIDYzODIwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJDb250ZXh0TWVudS5oIgogI2lu
Y2x1ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51SXRl
bS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHls
ZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkN1
cnNvci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkluZGV4OiBXZWJLaXRUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MzgzNCkK
KysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBA
CisyMDEwLTA3LTIxICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIENT
U1N0eWxlU2VsZWN0b3IgdG8gUmVuZGVyU3R5bGVSZXNvbHZlci4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyNzY0CisKKyAgICAgICAgKiBTY3JpcHRz
L2RvLXdlYmNvcmUtcmVuYW1lOgorCiAyMDEwLTA3LTIxICBBZGFtIFJvYmVuICA8YXJvYmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBHaXZlIEluamVjdGVkQnVuZGxlIG91ciBzdGFuZGFyZCBzZXQg
b2YgY29uZmlndXJhdGlvbnMgKG1pbnVzIHRoZQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9k
by13ZWJjb3JlLXJlbmFtZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL2RvLXdl
YmNvcmUtcmVuYW1lCShyZXZpc2lvbiA2MzgyMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvZG8t
d2ViY29yZS1yZW5hbWUJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgc3ViIHdhbnRl
ZAogbXkgJGlzRE9NVHlwZVJlbmFtZSA9IDA7CiBteSAlcmVuYW1lcyA9ICgKICAgICAjIFJlbmFt
ZXMgZ28gaGVyZSBpbiB0aGUgZm9ybSBvZjoKLSAgICAjICJIVE1MRG9jdW1lbnRQYXJzZXIiID0+
ICJMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIiLAorICAgICMgIkNTU1N0eWxlU2VsZWN0b3IiID0+
ICJSZW5kZXJTdHlsZVJlc29sdmVyIiwKICk7CiAKIG15ICVyZW5hbWVzQ29udGVtcGxhdGVkRm9y
VGhlRnV0dXJlID0gKAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138578</attachid>
            <date>2012-04-24 09:27:31 -0700</date>
            <delta_ts>2012-04-24 09:31:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42764-20120424132714.patch</filename>
            <type>text/plain</type>
            <size>299305</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1MDYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGVmNjQzZDdhMWRhMDJm
MDE4NjliYzFiNDY2YzkzMzdlN2MzYWQ3OC4uN2E3NmFiNmY3ZTczM2Y2Nzc1N2FhOGFlMDc5Yjhh
MGZmYTk4ZWY0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwOSBAQAorMjAxMi0wNC0yNCAgQWxl
eGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZW5h
bWUgQ1NTU3R5bGVTZWxlY3RvciB0byBTdHlsZVJlc29sdmVyLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI3NjQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgbmFtZSBDU1NTdHlsZVNlbGVjdG9yIGlz
IGNvbmZ1c2luZyBhcyBpdCBjb25mbGljdHMgYSBiaXQgd2l0aAorICAgICAgICB0aGUgQ1NTIGNv
bmNlcHQgb2Ygc2VsZWN0b3JzLiBPbmUgY291bGQgdGhpbmsgaXQncyBhbiBlbmNhcHN1bGF0aW9u
CisgICAgICAgIG9mIHRoZSBDU1Mgc2VsZWN0b3JzIGJ1dCBpdCdzIG5vdCwgaW4gZmFjdCB0aGlz
IGNsYXNzIGlzIHJlc3BvbnNpYmxlCisgICAgICAgIG9mIGZpbmRpbmcgdGhlIFJlbmRlclN0eWxl
IGZvciBhIGdpdmVuIGVsZW1lbnQuIFRoaXMgaXMgdGhlIGZpcnN0IHBhdGNoCisgICAgICAgIGFz
IEkgd2lsbCBsYXRlciByZW5hbWUgdGhlIGZpbGVzLCBhbmQgdGhlbiByZW5hbWUgdGhlIGxvY2Fs
IHZhcmlhYmxlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMgOiByZW5hbWluZywgbm8gYmVoYXZp
b3IgY2hhbmdlcyBzaG91bGQgYXBwZWFyLgorCisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0aW9u
VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjp0b0Nh
bGNWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmRpc3BhdGNoSW52YWxpZGF0aW9uQ2FsbGJhY2tzKToK
KyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6cGFyc2VTaXplUGFyYW1ldGVyKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHA6CisgICAgICAgIChSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmZlYXR1
cmVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6U3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGRB
dXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxl
Y3RGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpkZXRlcm1pbmVT
Y29wZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlU2V0Rm9yU2NvcGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVl
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0dXBTY29wZVN0YWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnB1c2hTY29wZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwb3BTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpwdXNoUGFyZW50RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpwb3BQYXJlbnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnB1c2hQYXJlbnRTaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnBvcFBhcmVudFNoYWRvd1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6YWRkS2V5ZnJhbWVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp+
U3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzd2VlcE1h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
RmVhdHVyZXM6OkZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OkZl
YXR1cmVzOjp+RmVhdHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6RmVh
dHVyZXM6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpGZWF0dXJlczo6
Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRkTWF0Y2hlZFByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRkRWxlbWVudFN0eWxl
UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0
Y2hpbmdSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0
Y2hpbmdSdWxlc0ZvclJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
b3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Om1hdGNoVXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1h
dGNoVUFSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0
Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6Cisg
ICAgICAgIChTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKEZlYXR1cmVzKToKKyAgICAgICAgKiBj
c3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5
RXZhbHVhdG9yOjpldmFsKToKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNZWRpYVF1ZXJ5RXZhbHVhdG9yKToKKyAgICAg
ICAgKiBjc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFR
dWVyeU1hdGNoZXI6OnByZXBhcmVFdmFsdWF0b3IpOgorICAgICAgICAqIGNzcy9TVkdDU1NTdHls
ZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZH
UHJvcGVydHkpOgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUV4cGFuZGluZzo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUV4cGFuZGluZzo6YXBwbHlJbml0aWFsVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUV4cGFuZGluZzo6YXBwbHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U6OmFwcGx5SW5oZXJpdFZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTo6YXBwbHlJ
bml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNl
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0Ojph
cHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlOdW1iZXI6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVN0eWxlSW1hZ2U6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUF1dG86OmFwcGx5SW5oZXJp
dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBdXRvOjphcHBseUluaXRp
YWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXV0bzo6YXBwbHlWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcDo6Y29udmVydFRvTGVuZ3Ro
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwOjphcHBseUluaGVyaXRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcDo6YXBwbHlJbml0aWFsVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNsaXA6OmFwcGx5VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbG9yOjphcHBseUluaGVyaXRWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q29sb3I6OmFwcGx5SW5pdGlhbFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDb2xvcjo6YXBwbHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q29sb3I6OmFwcGx5Q29sb3JWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlyZWN0aW9uOjphcHBseVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlMZW5ndGg6OmFwcGx5VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVN0cmluZzo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVyUmFkaXVzOjphcHBseVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGaWxsTGF5ZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGaWxsTGF5ZXI6OmFwcGx5SW5pdGlhbFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGaWxsTGF5ZXI6OmFwcGx5VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg6OmFwcGx5VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5SW5oZXJpdFZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250OjphcHBseUluaXRpYWxW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udDo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFwcGx5SW5oZXJpdFZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlJbml0
aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250V2VpZ2h0OjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250VmFyaWFudExpZ2F0
dXJlczo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUZvbnRWYXJpYW50TGlnYXR1cmVzOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXM6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlOjphcHBseVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBseUlu
aGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VN
b2RpZmllcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlDb3VudGVyOjplbXB0eUZ1bmN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlDb3VudGVyOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5Q3Vyc29yOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q3Vyc29yOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q3Vyc29yOjphcHBseVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0QWxpZ246OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0aW9uOjphcHBseVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlVbmljb2RlQmlkaTo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TGluZUhlaWdodDo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5UGFnZVNpemU6OmFwcGx5SW5oZXJpdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlQYWdlU2l6ZTo6YXBwbHlJbml0aWFsVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVBhZ2VTaXplOjphcHBseVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHlsZTo6YXBw
bHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBo
YXNpc1N0eWxlOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5VGV4dEVtcGhhc2lzU3R5bGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QW5pbWF0aW9uOjptYXApOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjo6YXBwbHlJbmhlcml0VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjo6YXBwbHlJbml0aWFsVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjo6YXBwbHlWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5T3V0bGluZVN0eWxlOjphcHBseUlu
aGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5T3V0bGluZVN0eWxl
OjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5T3V0
bGluZVN0eWxlOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlS
ZXNpemU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVZlcnRp
Y2FsQWxpZ246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFz
cGVjdFJhdGlvOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5QXNwZWN0UmF0aW86OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlBc3BlY3RSYXRpbzo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5Wm9vbTo6cmVzZXRFZmZlY3RpdmVab29tKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlab29tOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5Wm9vbTo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eVpvb206OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eURpc3BsYXk6OmlzVmFsaWREaXNwbGF5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eURpc3BsYXk6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNwbGF5OjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxheTo6YXBwbHlWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5RmxleDo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZsZXg6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGbGV4OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlQnVpbGRlcjo6U3R5bGVCdWlsZGVyKToKKyAgICAgICAgKiBjc3MvU3R5bGVC
dWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFByb3BlcnR5SGFuZGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eUhhbmRsZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5SGFuZGxlcjo6YXBwbHlJbml0aWFsVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlIYW5kbGVyOjphcHBseVZhbHVlKToKKyAgICAgICAg
KiBjc3MvU3R5bGVNZWRpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZU1lZGlhOjptYXRj
aE1lZGl1bSk6CisgICAgICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6c2V0TmFtZSk6CisgICAgICAg
ICogY3NzL1dlYktpdENTU01hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NN
YXRyaXg6OnNldE1hdHJpeFZhbHVlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlY2FsY1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpjcmVhdGVTdHlsZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50Ojp0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJlY2FsYyk6CisgICAgICAgICog
ZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpzdHlsZVNlbGVjdG9ySWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnN0eWxlU2VsZWN0b3IpOgorICAgICAgICAoRG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9F
bGVtZW50LmNwcDoKKyAgICAgICAgKFN0eWxlU2VsZWN0b3JQYXJlbnRQdXNoZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpiZWdpblBhcnNpbmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4pOgorICAgICAgICAqIGRvbS9TaGFkb3dSb290LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OmF0dGFjaCk6CisgICAgICAgICogZG9t
L1NoYWRvd1RyZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93VHJlZTo6cmVjYWxjU2hh
ZG93VHJlZVN0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGVGcm9tUnVsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUZyb21SdWxlc0FuZENvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpyZW1vdmVQcm9wZXJ0aWVzSW5FbGVt
ZW50RGVmYXVsdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmxlZ2FjeUZvbnRTaXplRnJvbUNT
U1ZhbHVlKToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgor
ICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRQYWdlOjpyZXN0b3JlKToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzdHlsZVNlbGVjdG9yKToKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgIChIVE1MQ2FudmFzRWxl
bWVudCk6CisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1h
dGNoZWRTdHlsZXNGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50
OjpidWlsZEFycmF5Rm9yUnVsZUxpc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5oOgorICAgICAgICAoSW5zcGVjdG9yQ1NTQWdlbnQpOgorICAgICAgICAqIHBhZ2Uv
RE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6Z2V0TWF0Y2hlZENT
U1J1bGVzKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6YWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp2aXNp
dGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0
ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvUmVuZGVyVGhlbWVC
bGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQmxhY2tCZXJyeTo6
YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVCbGFja0Jl
cnJ5OjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
QmxhY2tCZXJyeTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVCbGFja0JlcnJ5OjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQmxhY2tCZXJyeTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUJsYWNrQmVycnk6OmFkanVz
dE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVCbGFj
a0JlcnJ5OjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQmxhY2tCZXJyeTo6YWRqdXN0Q2hlY2tib3hTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUJsYWNrQmVycnk6OmFkanVzdFJhZGlvU3R5bGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2JsYWNrYmVycnkvUmVuZGVyVGhlbWVCbGFja0JlcnJ5Lmg6CisgICAgICAgIChSZW5kZXJU
aGVtZUJsYWNrQmVycnkpOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVyVHJhY2tT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVyVGh1
bWJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0Q2hlY2ti
b3hTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0UmFkaW9T
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0QnV0dG9uU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFkanVzdE1lbnVMaXN0U3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFkanVzdE1lbnVMaXN0QnV0
dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFkanVzdFRleHRG
aWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjphZGp1c3RUZXh0
QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFy
Y2hGaWVsZERlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVm
bDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRD
YW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRq
dXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZWZsL1JlbmRlclRo
ZW1lRWZsLmg6CisgICAgICAgIChSZW5kZXJUaGVtZUVmbCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3RrL1JlbmRlclRoZW1lR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3Rr
OjphZGp1c3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6
YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25T
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmll
bGRDYW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6
YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0
azo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUd0azo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L1JlbmRlclRoZW1lR3RrLmg6CisgICAgICAgIChSZW5kZXJUaGVtZUd0ayk6CisgICAgICAgICog
cGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9x
dC9SZW5kZXJUaGVtZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFk
anVzdFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFk
anVzdFRleHRBcmVhU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRq
dXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1
c3RNZW51TGlzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
OmFkanVzdFByb2dyZXNzQmFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVR
dDo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0OjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXQ6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVRdDo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRq
dXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXQuaDoKKyAgICAgICAgKFJlbmRlclRoZW1lUXQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVR
dE1vYmlsZTo6YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRdE1vYmlsZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgICogcGxhdGZv
cm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oOgorICAgICAgICAoUmVuZGVyVGhlbWVRdE1vYmls
ZSk6CisgICAgICAgICogcGxhdGZvcm0vd3gvUmVuZGVyVGhlbWVXeC5jcHA6CisgICAgICAgIChS
ZW5kZXJUaGVtZVd4KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV3g6OmFkanVzdEJ1
dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV3g6OmFkanVzdFRleHRG
aWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV3g6OmFkanVzdE1lbnVM
aXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXeDo6YWRqdXN0TWVudUxp
c3RCdXR0b25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklucHV0U3BlZWNoLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklucHV0U3BlZWNoOjphZGp1c3RJbnB1dEZpZWxk
U3BlZWNoQnV0dG9uU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbnB1dFNwZWVj
aC5oOgorICAgICAgICAoUmVuZGVySW5wdXRTcGVlY2gpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdENoZWNrYm94U3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFRleHRBcmVhU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdElucHV0RmllbGRTcGVlY2hCdXR0b25TdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0TWV0ZXJTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25T
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRE
ZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAgICAoUmVuZGVyVGhlbWUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQW5kcm9pZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtQW5kcm9pZDo6YWRqdXN0SW5uZXJTcGluQnV0dG9u
U3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQW5kcm9pZC5o
OgorICAgICAgICAoUmVuZGVyVGhlbWVDaHJvbWl1bUFuZHJvaWQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oOgorICAgICAgICAoUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFy
Y2hGaWVsZERlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmg6CisgICAgICAgIChSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1X
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUNocm9taXVtV2luOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oOgorICAgICAgICAoUmVu
ZGVyVGhlbWVDaHJvbWl1bVdpbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lmg6CisgICAgICAgIChSZW5kZXJUaGVtZU1hYyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldEZvbnRG
cm9tQ29udHJvbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVz
dFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1
c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1
c3RQcm9ncmVzc0JhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjph
ZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjph
ZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25T
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmll
bGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lU2FmYXJpOjpzZXRGb250RnJvbUNvbnRyb2xTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lU2FmYXJpOjphZGp1c3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFRleHRBcmVhU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNsaWRlclRodW1iU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZp
ZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGhlbWVTYWZhcmkuaDoKKyAgICAgICAgKFJlbmRlclRoZW1lU2FmYXJpKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVXaW46OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lV2luOjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lV2luOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZERl
Y29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmg6CisgICAgICAgIChSZW5kZXJUaGVtZVdp
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRqdXN0QnV0dG9uU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdFRleHRGaWVsZFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RUZXh0QXJlYVN0eWxl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5DRS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVdpbkNFOjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lV2luQ0U6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW5DRTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbkNFOjphZGp1c3RT
ZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVdpbkNFOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW5DRTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW5DRTo6YWRqdXN0TWVu
dUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luQ0Uu
aDoKKyAgICAgICAgKFJlbmRlclRoZW1lV2luQ0UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVXaW5DRTo6YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVXaW5DRTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVXaW5DRTo6YWRqdXN0VGV4dEFyZWFTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpp
c1N0eWxlQXZhaWxhYmxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJh
cmVOb25Jbmhlcml0ZWREYXRhLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1JlbmRlclN1cHBvcnQ6OmlzT3ZlcmZsb3dIaWRkZW4pOgorCiAyMDEyLTA0LTI0ICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGEgYnVuY2ggb2YgaGVhcCBwcm9maWxlciBjbGVhbnVwcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCA1
ZmMzMzhmYWM1MTk5ZWRkMWJjZGVlNzcwZDFhZmM5YjRlNWEzMjI3Li4wZDAxOTcwYjVkNDQwMThh
ZWFhMzk0NWM2OTFlYzAyMzAwYzMwOWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBA
CisyMDEyLTA0LTI0ICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eub3Jn
PgorCisgICAgICAgIFJlbmFtZSBDU1NTdHlsZVNlbGVjdG9yIHRvIFN0eWxlUmVzb2x2ZXIuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mjc2NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBuYW1lIENT
U1N0eWxlU2VsZWN0b3IgaXMgY29uZnVzaW5nIGFzIGl0IGNvbmZsaWN0cyBhIGJpdCB3aXRoCisg
ICAgICAgIHRoZSBDU1MgY29uY2VwdCBvZiBzZWxlY3RvcnMuIE9uZSBjb3VsZCB0aGluayBpdCdz
IGFuIGVuY2Fwc3VsYXRpb24KKyAgICAgICAgb2YgdGhlIENTUyBzZWxlY3RvcnMgYnV0IGl0J3Mg
bm90LCBpbiBmYWN0IHRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUKKyAgICAgICAgb2YgZmluZGlu
ZyB0aGUgUmVuZGVyU3R5bGUgZm9yIGEgZ2l2ZW4gZWxlbWVudC4gVGhpcyBpcyB0aGUgZmlyc3Qg
cGF0Y2gKKyAgICAgICAgYXMgSSB3aWxsIGxhdGVyIHJlbmFtZSB0aGUgZmlsZXMsIGFuZCB0aGVu
IHJlbmFtZSB0aGUgbG9jYWwgdmFyaWFibGVzLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
UmVuZGVyVGhlbWVRU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0
eWxlOjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UVN0eWxlOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lUVN0eWxlOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25T
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9S
ZW5kZXJUaGVtZVFTdHlsZS5oOgorICAgICAgICAoUmVuZGVyVGhlbWVRU3R5bGUpOgorCiAyMDEy
LTA0LTI0ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KIAogICAgICAgICBb
UXRdIE1vdmUgbm90aWZpY2F0aW9uIGljb24gZG93bmxvYWQgb3V0IG9mIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAppbmRleCA3ODI4YzY1NDJkM2M4
MjFmMzBhNWYzOGU5NWZlNWRlZTJkYThjZWQwLi40MjM4MDA4OTk1OGRkZmM1NTFhZTkxNTU2ZWYx
NzgxZWM4ODYyYzNhIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUu
Y3BwCkBAIC0xMjMsNyArMTIzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDYWxjRXhwcmVzc2lvbk51bWJlcihtX3ZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0
PihzdHlsZSwgcm9vdFN0eWxlLCB6b29tKSkpOwogICAgICAgICBjYXNlIENhbGNQZXJjZW50Ogog
ICAgICAgICBjYXNlIENhbGNQZXJjZW50TGVuZ3RoOgotICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDYWxjRXhwcmVzc2lvbkxlbmd0aChDU1NTdHlsZVNlbGVjdG9yOjpjb252ZXJ0VG9G
bG9hdExlbmd0aChtX3ZhbHVlLmdldCgpLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tKSkpOworICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYWxjRXhwcmVzc2lvbkxlbmd0aChTdHlsZVJl
c29sdmVyOjpjb252ZXJ0VG9GbG9hdExlbmd0aChtX3ZhbHVlLmdldCgpLCBzdHlsZSwgcm9vdFN0
eWxlLCB6b29tKSkpOwogICAgICAgICAvLyBPbmx5IHR5cGVzIHRoYXQgY291bGQgYmUgcGFydCBv
ZiBhIExlbmd0aCBleHByZXNzaW9uIGNhbiBiZSBjb252ZXJ0ZWQKICAgICAgICAgLy8gdG8gYSBD
YWxjRXhwcmVzc2lvbk5vZGUuIENhbGNQZXJjZW50TnVtYmVyIG1ha2VzIG5vIHNlbnNlIGFzIGEg
TGVuZ3RoLgogICAgICAgICBjYXNlIENhbGNQZXJjZW50TnVtYmVyOgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRm9udFNlbGVjdG9yLmNwcAppbmRleCA1NzhhOGZlNzE1MzE2YzUwNDE3OTU5MzFlMTUwNDMz
NzVmMWM0NDI5Li5kOGZjOGMzZGFjNWYwY2I2NjJiOGVkMTllNzcwYzA1MDc3MTNjMWQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcApAQCAtMzMzLDcgKzMzMyw3IEBAIHZv
aWQgQ1NTRm9udFNlbGVjdG9yOjpkaXNwYXRjaEludmFsaWRhdGlvbkNhbGxiYWNrcygpCiAgICAg
Ly8gRklYTUU6IE1ha2UgRG9jdW1lbnQgYSBGb250U2VsZWN0b3JDbGllbnQgc28gdGhhdCBpdCBj
YW4gc2ltcGx5IHJlZ2lzdGVyIGZvciBpbnZhbGlkYXRpb24gY2FsbGJhY2tzLgogICAgIGlmICgh
bV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChDU1NTdHlsZVNlbGVjdG9yKiBz
dHlsZVNlbGVjdG9yID0gbV9kb2N1bWVudC0+c3R5bGVTZWxlY3RvcklmRXhpc3RzKCkpCisgICAg
aWYgKFN0eWxlUmVzb2x2ZXIqIHN0eWxlU2VsZWN0b3IgPSBtX2RvY3VtZW50LT5zdHlsZVNlbGVj
dG9ySWZFeGlzdHMoKSkKICAgICAgICAgc3R5bGVTZWxlY3Rvci0+aW52YWxpZGF0ZU1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUoKTsKICAgICBpZiAobV9kb2N1bWVudC0+aW5QYWdlQ2FjaGUoKSB8fCAh
bV9kb2N1bWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcAppbmRleCBkODBiODgxM2FiNjliY2QzYWM2ODliZGE0YTkwZjcwY2JiNDg2N2YyLi4y
Y2JkNjA4NmJhYTAxMTdhYjQwYTI3NjNkMWNmOTE4ODMxZjcwZTQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmNwcApAQCAtMzAwOSw3ICszMDA5LDcgQEAgQ1NTUGFyc2VyOjpTaXplUGFyYW1ldGVy
VHlwZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBhcmFtZXRlcihDU1NWYWx1ZUxpc3QqIHBhcnNlZFYK
ICAgICBjYXNlIENTU1ZhbHVlTGV0dGVyOgogICAgICAgICBpZiAocHJldlBhcmFtVHlwZSA9PSBO
b25lIHx8IHByZXZQYXJhbVR5cGUgPT0gT3JpZW50YXRpb24pIHsKICAgICAgICAgICAgIC8vIE5v
cm1hbGl6ZSB0byBQYWdlIFNpemUgdGhlbiBPcmllbnRhdGlvbiBvcmRlciBieSBwcmVwZW5kaW5n
LgotICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qgc3BlY2lmaWVkIGJ5IHRoZSBDU1MzIFBhZ2Vk
IE1lZGlhIHNwZWNpZmljYXRpb24sIGJ1dCBmb3Igc2ltcGxlciBwcm9jZXNzaW5nIGxhdGVyIChD
U1NTdHlsZVNlbGVjdG9yOjphcHBseVBhZ2VTaXplUHJvcGVydHkpLgorICAgICAgICAgICAgLy8g
VGhpcyBpcyBub3Qgc3BlY2lmaWVkIGJ5IHRoZSBDU1MzIFBhZ2VkIE1lZGlhIHNwZWNpZmljYXRp
b24sIGJ1dCBmb3Igc2ltcGxlciBwcm9jZXNzaW5nIGxhdGVyIChTdHlsZVJlc29sdmVyOjphcHBs
eVBhZ2VTaXplUHJvcGVydHkpLgogICAgICAgICAgICAgcGFyc2VkVmFsdWVzLT5wcmVwZW5kKGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKICAgICAgICAg
ICAgIHJldHVybiBQYWdlU2l6ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwCmluZGV4IGQ4N2M5ZGVlZThmZjE4YTI1MzA3YjVjOWJhM2YwNTU1OTZjNzQx
ZGMuLjFhZTA1MWJkMjQ1Y2MyOTg5ZjNkZjkyNzg0YTc5NDI3MmRiZGIyNTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTIzNSw3ICsyMzUsNyBAQCBwdWJsaWM6
CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIE93blB0cjxWZWN0b3I8
UnVsZURhdGE+ID4gPiBBdG9tUnVsZU1hcDsKIAotICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQo
U3R5bGVTaGVldEludGVybmFsKiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIENTU1N0eWxl
U2VsZWN0b3IqID0gMCwgY29uc3QgQ29udGFpbmVyTm9kZSogPSAwKTsKKyAgICB2b2lkIGFkZFJ1
bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0
b3ImLCBTdHlsZVJlc29sdmVyKiA9IDAsIGNvbnN0IENvbnRhaW5lck5vZGUqID0gMCk7CiAKICAg
ICB2b2lkIGFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUg
PSBmYWxzZSk7CiAgICAgdm9pZCBhZGRSdWxlKFN0eWxlUnVsZSosIENTU1NlbGVjdG9yKiwgYm9v
bCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9y
LCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNocmlua1RvRml0KCk7CiAgICAgdm9pZCBkaXNhYmxlQXV0b1Nocmlua1Rv
Rml0KCkgeyBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQgPSBmYWxzZTsgfQogCi0gICAgY29uc3Qg
Q1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMmIGZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9m
ZWF0dXJlczsgfQorICAgIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzJiBmZWF0dXJlcygp
IGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KIAogICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0
YT4qIGlkUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX2lkUnVs
ZXMuZ2V0KGtleSk7IH0KICAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBjbGFzc1J1bGVzKEF0
b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9jbGFzc1J1bGVzLmdldChrZXkp
OyB9CkBAIC0yNjksNyArMjY5LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxTdHlsZVJ1bGVQYWdl
Kj4gbV9wYWdlUnVsZXM7CiAgICAgdW5zaWduZWQgbV9ydWxlQ291bnQ7CiAgICAgYm9vbCBtX2F1
dG9TaHJpbmtUb0ZpdEVuYWJsZWQ7Ci0gICAgQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMgbV9m
ZWF0dXJlczsKKyAgICBTdHlsZVJlc29sdmVyOjpGZWF0dXJlcyBtX2ZlYXR1cmVzOwogCiAgICAg
c3RydWN0IFJ1bGVTZXRTZWxlY3RvclBhaXIgewogICAgICAgICBSdWxlU2V0U2VsZWN0b3JQYWly
KENTU1NlbGVjdG9yKiBzZWxlY3RvciwgUGFzc093blB0cjxSdWxlU2V0PiBydWxlU2V0KSA6IHNl
bGVjdG9yKHNlbGVjdG9yKSwgcnVsZVNldChydWxlU2V0KSB7IH0KQEAgLTI5Myw3ICsyOTMsNyBA
QCBzdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBtYXRoTUxTdHlsZVNoZWV0Owogc3RhdGljIFN0
eWxlU2hlZXRJbnRlcm5hbCogbWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7CiBzdGF0aWMgU3R5bGVT
aGVldEludGVybmFsKiBmdWxsc2NyZWVuU3R5bGVTaGVldDsKIAotUmVuZGVyU3R5bGUqIENTU1N0
eWxlU2VsZWN0b3I6OnNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CitSZW5kZXJTdHlsZSogU3R5bGVS
ZXNvbHZlcjo6c19zdHlsZU5vdFlldEF2YWlsYWJsZTsKIAogc3RhdGljIHZvaWQgbG9hZEZ1bGxE
ZWZhdWx0U3R5bGUoKTsKIHN0YXRpYyB2b2lkIGxvYWRTaW1wbGVEZWZhdWx0U3R5bGUoKTsKQEAg
LTMzNiw3ICszMzYsNyBAQCBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogcmlnaHRUb0xlZnREZWNs
YXJhdGlvbigpCiAgICAgcmV0dXJuIHJpZ2h0VG9MZWZ0RGVjbC5nZXQoKTsKIH0KIAotQ1NTU3R5
bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgbWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQorU3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1
bWVudCogZG9jdW1lbnQsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQogICAgIDogbV9o
YXNVQUFwcGVhcmFuY2UoZmFsc2UpCiAgICAgLCBtX2JhY2tncm91bmREYXRhKEJhY2tncm91bmRG
aWxsTGF5ZXIpCiAgICAgLCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxh
c3RTd2VlcCgwKQpAQCAtNDE4LDcgKzQxOCw3IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxl
U2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0CiAg
ICAgYXBwZW5kQXV0aG9yU3R5bGVzaGVldHMoMCwgZG9jdW1lbnQtPnN0eWxlU2hlZXRzKCktPnZl
Y3RvcigpKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRBdXRob3JSdWxlc0FuZENv
bGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldElu
dGVybmFsPiA+KiB1c2VyU2hlZXRzLCBSdWxlU2V0JiB1c2VyU3R5bGUpCit2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3Qg
VmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+ID4qIHVzZXJTaGVldHMsIFJ1bGVTZXQm
IHVzZXJTdHlsZSkKIHsKICAgICBpZiAoIXVzZXJTaGVldHMpCiAgICAgICAgIHJldHVybjsKQEAg
LTQzMyw3ICs0MzMsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZEF1dGhvclJ1bGVzQW5k
Q29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3QgVmVjdG9yPAogICAgIH0KIH0KIAotc3Rh
dGljIFBhc3NPd25QdHI8UnVsZVNldD4gbWFrZVJ1bGVTZXQoY29uc3QgVmVjdG9yPENTU1N0eWxl
U2VsZWN0b3I6OlJ1bGVGZWF0dXJlPiYgcnVsZXMpCitzdGF0aWMgUGFzc093blB0cjxSdWxlU2V0
PiBtYWtlUnVsZVNldChjb25zdCBWZWN0b3I8U3R5bGVSZXNvbHZlcjo6UnVsZUZlYXR1cmU+JiBy
dWxlcykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHJ1bGVzLnNpemUoKTsKICAgICBpZiAoIXNpemUp
CkBAIC00NDQsNyArNDQ0LDcgQEAgc3RhdGljIFBhc3NPd25QdHI8UnVsZVNldD4gbWFrZVJ1bGVT
ZXQoY29uc3QgVmVjdG9yPENTU1N0eWxlU2VsZWN0b3I6OlJ1bGVGZWF0dXIKICAgICByZXR1cm4g
cnVsZVNldC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y29sbGVjdEZl
YXR1cmVzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzKCkKIHsKICAgICBt
X2ZlYXR1cmVzLmNsZWFyKCk7CiAgICAgLy8gQ29sbGVjdCBhbGwgaWRzIGFuZCBydWxlcyB1c2lu
ZyBzaWJsaW5nIHNlbGVjdG9ycyAoOmZpcnN0LWNoaWxkIGFuZCBzaW1pbGFyKQpAQCAtNDY0LDcg
KzQ2NCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y29sbGVjdEZlYXR1cmVzKCkKIH0KIAog
I2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi1jb25zdCBDb250YWluZXJOb2RlKiBDU1NTdHlsZVNl
bGVjdG9yOjpkZXRlcm1pbmVTY29wZShjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0KQor
Y29uc3QgQ29udGFpbmVyTm9kZSogU3R5bGVSZXNvbHZlcjo6ZGV0ZXJtaW5lU2NvcGUoY29uc3Qg
U3R5bGVTaGVldEludGVybmFsKiBzaGVldCkKIHsKICAgICBBU1NFUlQoc2hlZXQpOwogCkBAIC00
ODYsNyArNDg2LDcgQEAgY29uc3QgQ29udGFpbmVyTm9kZSogQ1NTU3R5bGVTZWxlY3Rvcjo6ZGV0
ZXJtaW5lU2NvcGUoY29uc3QgU3R5bGVTaGVldEludGVybmFsKgogICAgIHJldHVybiAocGFyZW50
LT5pc0VsZW1lbnROb2RlKCkgfHwgcGFyZW50LT5pc1NoYWRvd1Jvb3QoKSkgPyBwYXJlbnQgOiAw
OwogfQogCi1pbmxpbmUgUnVsZVNldCogQ1NTU3R5bGVTZWxlY3Rvcjo6cnVsZVNldEZvclNjb3Bl
KGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKSBjb25zdAoraW5saW5lIFJ1bGVTZXQqIFN0eWxl
UmVzb2x2ZXI6OnJ1bGVTZXRGb3JTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgY29u
c3QKIHsKICAgICBpZiAoIXNjb3BlLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTQ5NSw3ICs0OTUsNyBAQCBpbmxpbmUgUnVsZVNldCogQ1NTU3R5bGVT
ZWxlY3Rvcjo6cnVsZVNldEZvclNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKSBjbwog
fQogI2VuZGlmCiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVl
dHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4gPiYg
c3R5bGVzaGVldHMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRz
KHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mIHN0
eWxlc2hlZXRzKQogewogICAgIC8vIFRoaXMgaGFuZGxlcyBzaGVldHMgYWRkZWQgdG8gdGhlIGVu
ZCBvZiB0aGUgc3R5bGVzaGVldCBsaXN0IG9ubHkuIEluIG90aGVyIGNhc2VzIHRoZSBzdHlsZSBy
ZXNvbHZlcgogICAgIC8vIG5lZWRzIHRvIGJlIHJlY29uc3RydWN0ZWQuIFRvIGhhbmRsZSBpbnNl
cnRpb25zIHRvbyB0aGUgcnVsZSBvcmRlciBudW1iZXJzIHdvdWxkIG5lZWQgdG8gYmUgdXBkYXRl
ZC4KQEAgLTUyNyw3ICs1MjcsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhv
clN0eWxlc2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UgogfQogCiAjaWYg
RU5BQkxFKFNUWUxFX1NDT1BFRCkKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c2V0dXBTY29wZVN0
YWNrKGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0
dXBTY29wZVN0YWNrKGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCkKIHsKICAgICAvLyBUaGUg
c2NvcGluZyBlbGVtZW50IHN0YWNrIHNob3VsZG4ndCBiZSB1c2VkIGlmIDxzdHlsZSBzY29wZWQ+
IGlzbid0IHVzZWQgYW55d2hlcmUuCiAgICAgQVNTRVJUKCFtX3Njb3BlZEF1dGhvclN0eWxlcy5p
c0VtcHR5KCkpOwpAQCAtNTQyLDcgKzU0Miw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c2V0
dXBTY29wZVN0YWNrKGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCkKICAgICBtX3Njb3BlU3Rh
Y2tQYXJlbnQgPSBwYXJlbnQ7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6cHVzaFNjb3Bl
KGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZVBh
cmVudCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6cHVzaFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUq
IHNjb3BlLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZVBhcmVudCkKIHsKICAgICAvLyBTaG9y
dGN1dDogRG9uJ3QgYm90aGVyIHdpdGggdGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBpZiA8c3R5
bGUgc2NvcGVkPiBpc24ndCB1c2VkIGFueXdoZXJlLgogICAgIGlmIChtX3Njb3BlZEF1dGhvclN0
eWxlcy5pc0VtcHR5KCkpIHsKQEAgLTU2Myw3ICs1NjMsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OnB1c2hTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgY29uc3QgQ29udGFpbmVy
Tm9kZQogICAgIG1fc2NvcGVTdGFja1BhcmVudCA9IHNjb3BlOwogfQogCi12b2lkIENTU1N0eWxl
U2VsZWN0b3I6OnBvcFNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQordm9pZCBTdHls
ZVJlc29sdmVyOjpwb3BTY29wZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKIHsKICAgICAv
LyBPbmx5IGJvdGhlciB0byB1cGRhdGUgdGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBpZiBpdCBp
cyBjb25zaXN0ZW50LgogICAgIGlmIChzY29wZVN0YWNrSXNDb25zaXN0ZW50KHNjb3BlKSkgewpA
QCAtNTczLDcgKzU3Myw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6cG9wU2NvcGUoY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUpCiB9CiAjZW5kaWYKIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjpwdXNoUGFyZW50RWxlbWVudChFbGVtZW50KiBwYXJlbnQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6
OnB1c2hQYXJlbnRFbGVtZW50KEVsZW1lbnQqIHBhcmVudCkKIHsKICAgICBjb25zdCBDb250YWlu
ZXJOb2RlKiBwYXJlbnRzUGFyZW50ID0gcGFyZW50LT5wYXJlbnRPckhvc3RFbGVtZW50KCk7CiAK
QEAgLTU5MCw3ICs1OTAsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnB1c2hQYXJlbnRFbGVt
ZW50KEVsZW1lbnQqIHBhcmVudCkKICAgICBwdXNoU2NvcGUocGFyZW50LCBwYXJlbnQtPnBhcmVu
dE9ySG9zdE5vZGUoKSk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6cG9wUGFyZW50RWxl
bWVudChFbGVtZW50KiBwYXJlbnQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVudEVsZW1l
bnQoRWxlbWVudCogcGFyZW50KQogewogICAgIC8vIE5vdGUgdGhhdCB3ZSBtYXkgZ2V0IGludm9r
ZWQgZm9yIHNvbWUgcmFuZG9tIGVsZW1lbnRzIGluIHNvbWUgd2Fja3kgY2FzZXMgZHVyaW5nIHN0
eWxlIHJlc29sdmUuCiAgICAgLy8gUGF1c2UgbWFpbnRhaW5pbmcgdGhlIHN0YWNrIGluIHRoaXMg
Y2FzZS4KQEAgLTU5OSwzMSArNTk5LDMxIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6cG9wUGFy
ZW50RWxlbWVudChFbGVtZW50KiBwYXJlbnQpCiAgICAgcG9wU2NvcGUocGFyZW50KTsKIH0KIAot
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpwdXNoUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dS
b290KiBzaGFkb3dSb290KQordm9pZCBTdHlsZVJlc29sdmVyOjpwdXNoUGFyZW50U2hhZG93Um9v
dChjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290KQogewogICAgIEFTU0VSVChzaGFkb3dSb290
LT5ob3N0KCkpOwogICAgIHB1c2hTY29wZShzaGFkb3dSb290LCBzaGFkb3dSb290LT5ob3N0KCkp
OwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OnBvcFBhcmVudFNoYWRvd1Jvb3QoY29uc3Qg
U2hhZG93Um9vdCogc2hhZG93Um9vdCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6cG9wUGFyZW50U2hh
ZG93Um9vdChjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290KQogewogICAgIEFTU0VSVChzaGFk
b3dSb290LT5ob3N0KCkpOwogICAgIHBvcFNjb3BlKHNoYWRvd1Jvb3QpOwogfQogCiAvLyBUaGlz
IGlzIGEgc2ltcGxpZmllZCBzdHlsZSBzZXR0aW5nIGZ1bmN0aW9uIGZvciBrZXlmcmFtZSBzdHls
ZXMKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkS2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFN0
eWxlUnVsZUtleWZyYW1lcz4gcnVsZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkS2V5ZnJhbWVT
dHlsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUtleWZyYW1lcz4gcnVsZSkKIHsKICAgICBBdG9taWNT
dHJpbmcgcyhydWxlLT5uYW1lKCkpOwogICAgIG1fa2V5ZnJhbWVzUnVsZU1hcC5zZXQocy5pbXBs
KCksIHJ1bGUpOwogfQogCi1DU1NTdHlsZVNlbGVjdG9yOjp+Q1NTU3R5bGVTZWxlY3RvcigpCitT
dHlsZVJlc29sdmVyOjp+U3R5bGVSZXNvbHZlcigpCiB7CiAgICAgbV9mb250U2VsZWN0b3ItPmNs
ZWFyRG9jdW1lbnQoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzd2VlcE1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUoKQordm9pZCBTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUoKQogewogICAgIC8vIExvb2sgZm9yIGNhY2hlIGVudHJpZXMgY29udGFpbmluZyBh
IHN0eWxlIGRlY2xhcmF0aW9uIHdpdGggYSBzaW5nbGUgcmVmIGFuZCByZW1vdmUgdGhlbS4KICAg
ICAvLyBUaGlzIG1heSBoYXBwZW4gd2hlbiBhbiBlbGVtZW50IGF0dHJpYnV0ZSBtdXRhdGlvbiBj
YXVzZXMgaXQgdG8gc3dhcCBvdXQgaXRzIEF0dHJpYnV0ZTo6ZGVjbCgpCkBAIC02NDQsMTggKzY0
NCwxOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZSgpCiAgICAgICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5yZW1vdmUodG9SZW1vdmVbaV0p
OwogfQogCi1DU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlczo6RmVhdHVyZXMoKQorU3R5bGVSZXNv
bHZlcjo6RmVhdHVyZXM6OkZlYXR1cmVzKCkKICAgICA6IHVzZXNGaXJzdExpbmVSdWxlcyhmYWxz
ZSkKICAgICAsIHVzZXNCZWZvcmVBZnRlclJ1bGVzKGZhbHNlKQogICAgICwgdXNlc0xpbmtSdWxl
cyhmYWxzZSkKIHsKIH0KIAotQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXM6On5GZWF0dXJlcygp
CitTdHlsZVJlc29sdmVyOjpGZWF0dXJlczo6fkZlYXR1cmVzKCkKIHsKIH0KICAgICAKLXZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXM6OmFkZChjb25zdCBDU1NTdHlsZVNlbGVjdG9yOjpG
ZWF0dXJlcyYgb3RoZXIpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzOjphZGQoY29uc3Qg
U3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmIG90aGVyKQogewogICAgIEhhc2hTZXQ8QXRvbWljU3Ry
aW5nSW1wbCo+OjppdGVyYXRvciBlbmQgPSBvdGhlci5pZHNJblJ1bGVzLmVuZCgpOwogICAgIGZv
ciAoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gb3RoZXIuaWRzSW5S
dWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCkBAIC02NzAsNyArNjcwLDcgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlczo6YWRkKGNvbnN0IENTU1N0eWxlU2VsZWN0b3I6OkZl
YXR1cmVzJiBvdGhlcikKICAgICB1c2VzTGlua1J1bGVzID0gdXNlc0xpbmtSdWxlcyB8fCBvdGhl
ci51c2VzTGlua1J1bGVzOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzOjpj
bGVhcigpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzOjpjbGVhcigpCiB7CiAgICAgaWRz
SW5SdWxlcy5jbGVhcigpOwogICAgIGF0dHJzSW5SdWxlcy5jbGVhcigpOwpAQCAtNzkwLDcgKzc5
MCw3IEBAIHN0YXRpYyB2b2lkIGVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoRWxl
bWVudCogZWxlbWVudCkKICAgICBBU1NFUlQobWF0aE1MU3R5bGVTaGVldCB8fCBkZWZhdWx0U3R5
bGUtPmZlYXR1cmVzKCkuc2libGluZ1J1bGVzLmlzRW1wdHkoKSk7CiB9CiAKLXZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZFByb3BlcnRpZXMoTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0
LCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVk
IGxpbmtNYXRjaFR5cGUsIGJvb2wgaW5SZWdpb25SdWxlKQordm9pZCBTdHlsZVJlc29sdmVyOjph
ZGRNYXRjaGVkUHJvcGVydGllcyhNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIFN0eWxlUHJvcGVy
dHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgbGlua01hdGNoVHlw
ZSwgYm9vbCBpblJlZ2lvblJ1bGUpCiB7CiAgICAgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRp
ZXMuZ3JvdyhtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgKyAxKTsKICAgICBN
YXRjaGVkUHJvcGVydGllcyYgbmV3UHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9w
ZXJ0aWVzLmxhc3QoKTsKQEAgLTgwMCw3ICs4MDAsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
OmFkZE1hdGNoZWRQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgU3R5bGVQcm9w
ZQogICAgIG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7CiB9CiAKLWlubGlu
ZSB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMoTWF0Y2hS
ZXN1bHQmIHJlc3VsdCwgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQsIGJvb2wgaXNDYWNo
ZWFibGUpCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjphZGRFbGVtZW50U3R5bGVQcm9wZXJ0
aWVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnR5U2V0LCBi
b29sIGlzQ2FjaGVhYmxlKQogewogICAgIGlmICghcHJvcGVydHlTZXQpCiAgICAgICAgIHJldHVy
bjsKQEAgLTgxMiw3ICs4MTIsNyBAQCBpbmxpbmUgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRF
bGVtZW50U3R5bGVQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIFN0eQogICAgICAgICBy
ZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpj
b2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwg
aW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFN0
eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZp
cnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYgb3B0
aW9ucykKIHsKICAgICBBU1NFUlQocnVsZXMpOwogICAgIEFTU0VSVChtX2VsZW1lbnQpOwpAQCAt
ODQxLDcgKzg0MSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y29sbGVjdE1hdGNoaW5nUnVs
ZXMoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsCiAgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT51bml2ZXJzYWxSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwg
bGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxl
SW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJiBvcHRpb25zKQor
dm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0
KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBN
YXRjaE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgaWYgKCFtX3JlZ2lvbkZvclN0eWxpbmcpCiAg
ICAgICAgIHJldHVybjsKQEAgLTg1Nyw3ICs4NTcsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0
UgogICAgIH0KIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzb3J0QW5kVHJhbnNmZXJNYXRj
aGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFu
ZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiB7CiAgICAgaWYgKG1f
bWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODg1LDcgKzg4NSw3
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1h
dGNoUmVzdWx0JiByZXN1bHQpCiAgICAgfQogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1h
dGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlcykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewogI2lmIEVOQUJMRShT
VFlMRV9TQ09QRUQpCiAgICAgaWYgKG1fc2NvcGVkQXV0aG9yU3R5bGVzLmlzRW1wdHkoKSkKQEAg
LTkxNiw3ICs5MTYsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoU2NvcGVkQXV0aG9y
UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRQogI2VuZGlmCiB9CiAKLXZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhv
clJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7CiAg
ICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JS
dWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CkBAIC05MzQsNyArOTM0
LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0
JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnUKICAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVk
UnVsZXMocmVzdWx0KTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFVzZXJSdWxl
cyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBTdHls
ZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzKQogewogICAgIGlmICghbV91c2VyU3R5bGUpCiAgICAgICAgIHJldHVybjsK
QEAgLTk0OCw3ICs5NDgsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoVXNlclJ1bGVz
KE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZQogICAgIHNvcnRBbmRU
cmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6
Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcykKK3ZvaWQg
U3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIFJ1bGVTZXQq
IHJ1bGVzKQogewogICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAgICAgCkBAIC05ODcsNyAr
OTg3LDcgQEAgaW5saW5lIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1
bGVzKCkKIAogYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRjaGluZ1VBUnVsZXMgPSBm
YWxzZTsKIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxp
c3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGlu
dCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJiBvcHRpb25zKQordm9pZCBTdHls
ZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVE
YXRhPiogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29u
c3QgTWF0Y2hPcHRpb25zJiBvcHRpb25zKQogewogICAgIGlmICghcnVsZXMpCiAgICAgICAgIHJl
dHVybjsKQEAgLTEwNjcsMTIgKzEwNjcsMTIgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVS
dWxlcyhjb25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRhKiByMikKICAgICByZXR1cm4g
KHNwZWNpZmljaXR5MSA9PSBzcGVjaWZpY2l0eTIpID8gcjEtPnBvc2l0aW9uKCkgPCByMi0+cG9z
aXRpb24oKSA6IHNwZWNpZmljaXR5MSA8IHNwZWNpZmljaXR5MjsKIH0KIAotdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjpzb3J0TWF0Y2hlZFJ1bGVzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydE1h
dGNoZWRSdWxlcygpCiB7CiAgICAgc3RkOjpzb3J0KG1fbWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1f
bWF0Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJlUnVsZXMpOwogfQogCi12b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKK3ZvaWQgU3R5bGVSZXNv
bHZlcjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogewogICAgIG1hdGNoVUFS
dWxlcyhyZXN1bHQpOwogCkBAIC0xMTE3LDcgKzExMTcsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKICNlbmRpZgogfQogCi1pbmxp
bmUgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0RWxlbWVudChFbGVtZW50KiBlKQoraW5saW5l
IHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKIHsKICAgICBpZiAo
bV9lbGVtZW50ICE9IGUpIHsKICAgICAgICAgbV9lbGVtZW50ID0gZTsKQEAgLTExMzAsNyArMTEz
MCw3IEBAIGlubGluZSB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRFbGVtZW50KEVsZW1lbnQq
IGUpCiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0Rm9yU3R5
bGVSZXNvbHZlKEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUHNldWRvSWQg
cHNldWRvSUQpCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0Rm9yU3R5bGVSZXNvbHZl
KEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUHNldWRvSWQgcHNldWRvSUQp
CiB7CiAgICAgbV9jaGVja2VyLnNldFBzZXVkb1N0eWxlKHBzZXVkb0lEKTsKIApAQCAtMTE1Nyw3
ICsxMTU3LDcgQEAgaW5saW5lIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEZvclN0eWxlUmVz
b2x2ZShFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW4KIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgPSAxMDsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5
bGVTZWFyY2hMZXZlbFRocmVzaG9sZCA9IDEwOwogCi1Ob2RlKiBDU1NTdHlsZVNlbGVjdG9yOjps
b2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQ291
bnQpIGNvbnN0CitOb2RlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQq
IHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQ291bnQpIGNvbnN0CiB7CiAgICAgaWYgKHZp
c2l0ZWROb2RlQ291bnQgPj0gY1N0eWxlU2VhcmNoVGhyZXNob2xkICogY1N0eWxlU2VhcmNoTGV2
ZWxUaHJlc2hvbGQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTIwNCw3ICsxMjA0LDcgQEAgTm9k
ZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVu
c2lnbmVkJiB2aXNpdGVkTm9kZUMKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBDU1NTdHlsZVNl
bGVjdG9yOjptYXRjaGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQorYm9vbCBTdHlsZVJlc29s
dmVyOjptYXRjaGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQogewogICAgIGlmICghcnVsZVNl
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIxOSw3ICsxMjE5LDcgQEAgYm9vbCBDU1NT
dHlsZVNlbGVjdG9yOjptYXRjaGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoQ29u
dHJvbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAorYm9vbCBTdHlsZVJlc29sdmVyOjpj
YW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsK
ICAgICBIVE1MSW5wdXRFbGVtZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1
dEVsZW1lbnQoKTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxlbWVudCA9IG1f
ZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKQEAgLTEyOTIsNyArMTI5Miw3IEBAIGlubGluZSBi
b29sIGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0dXJu
IGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiB0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5oYXNE
aXJlY3Rpb25BdXRvKCk7CiB9CiAKLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHls
ZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29sIFN0eWxlUmVz
b2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBj
b25zdAogewogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7
CiAKQEAgLTE0MDcsNyArMTQwNyw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVT
dHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWlubGluZSBTdHlsZWRFbGVtZW50KiBDU1NTdHlsZVNlbGVjdG9yOjpmaW5k
U2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBub2RlLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0
CitpbmxpbmUgU3R5bGVkRWxlbWVudCogU3R5bGVSZXNvbHZlcjo6ZmluZFNpYmxpbmdGb3JTdHls
ZVNoYXJpbmcoTm9kZSogbm9kZSwgdW5zaWduZWQmIGNvdW50KSBjb25zdAogewogICAgIGZvciAo
OyBub2RlOyBub2RlID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFu
b2RlLT5pc1N0eWxlZEVsZW1lbnQoKSkKQEAgLTE0MjgsNyArMTQyOCw3IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBwYXJlbnRTdHlsZVByZXZlbnRzU2hhcmluZyhjb25zdCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpCiAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVkQnlEaXJl
Y3RBZGphY2VudFJ1bGVzKCk7CiB9CiAKLVJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjps
b2NhdGVTaGFyZWRTdHlsZSgpCitSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hh
cmVkU3R5bGUoKQogewogICAgIGlmICghbV9zdHlsZWRFbGVtZW50IHx8ICFtX3BhcmVudFN0eWxl
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTE0NzcsNyArMTQ3Nyw3IEBAIFJlbmRlclN0eWxlKiBD
U1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgcmV0dXJuIHNoYXJlRWxl
bWVudC0+cmVuZGVyU3R5bGUoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFVB
UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1
bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiB7CiAgICAgTWF0Y2hpbmdVQVJ1bGVzU2NvcGUgc2Nv
cGU7CiAKQEAgLTE1MDAsNyArMTUwMCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hV
QVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiAgICAgfQogfQogCi1QYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1
bWVudCwgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCitQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCwg
Q1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQtPmZyYW1lKCk7CiAKQEAgLTE1NTEsMTAgKzE1NTEsMTAgQEAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCogZG9j
dW1lbnQsIEMKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLmFwcGVu
ZEZhbWlseSgwKTsKICAgICAgICAgfQogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29y
ZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAgICAgICAgaW50
IHNpemUgPSBDU1NTdHlsZVNlbGVjdG9yOjpmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQsIENT
U1ZhbHVlTWVkaXVtLCBmYWxzZSk7CisgICAgICAgIGludCBzaXplID0gU3R5bGVSZXNvbHZlcjo6
Zm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50LCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpOwogICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKICAgICAgICAgYm9v
bCB1c2VTVkdab29tUnVsZXMgPSBkb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpOwotICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKENTU1N0eWxlU2VsZWN0b3I6OmdldENvbXB1
dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50LCBkb2N1bWVudFN0eWxlLmdldCgpLCBm
b250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKSk7
CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGVSZXNvbHZlcjo6
Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQsIGRvY3VtZW50U3R5bGUu
Z2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1c2VTVkdab29t
UnVsZXMpKTsKICAgICB9CiAKICAgICBkb2N1bWVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKQEAgLTE1NzEsNyArMTU3MSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBpc0F0U2hhZG93Qm91bmRhcnkoRWxlbWVudCogZWxlbWVudCkKICAgICByZXR1cm4gcGFyZW50
Tm9kZSAmJiBwYXJlbnROb2RlLT5pc1NoYWRvd1Jvb3QoKTsKIH0KIAotUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1l
bnQsIFJlbmRlclN0eWxlKiBkZWZhdWx0UGFyZW50LAorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmRlclN0
eWxlKiBkZWZhdWx0UGFyZW50LAogICAgIFN0eWxlU2hhcmluZ0JlaGF2aW9yIHNoYXJpbmdCZWhh
dmlvciwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgbWF0Y2hpbmdCZWhhdmlvciwgUmVuZGVyUmVnaW9u
KiByZWdpb25Gb3JTdHlsaW5nKQogewogICAgIC8vIE9uY2UgYW4gZWxlbWVudCBoYXMgYSByZW5k
ZXJlciwgd2UgZG9uJ3QgdHJ5IHRvIGRlc3Ryb3kgaXQsIHNpbmNlIG90aGVyd2lzZSB0aGUgcmVu
ZGVyZXIKQEAgLTE2MzMsNyArMTYzMyw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0
eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kCiAgICAg
cmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBD
U1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVt
ZW50U3R5bGUsIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lLCBLZXlmcmFtZVZhbHVlJiBr
ZXlmcmFtZVZhbHVlKQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5
bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBTdHls
ZUtleWZyYW1lKiBrZXlmcmFtZSwgS2V5ZnJhbWVWYWx1ZSYga2V5ZnJhbWVWYWx1ZSkKIHsKICAg
ICBNYXRjaFJlc3VsdCByZXN1bHQ7CiAgICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCkBA
IC0xNjkwLDcgKzE2OTAsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVj
dG9yOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbAogICAgIHJldHVybiBt
X3N0eWxlLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjprZXlmcmFtZVN0
eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0
eWxlLCBLZXlmcmFtZUxpc3QmIGxpc3QpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5
bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50U3R5
bGUsIEtleWZyYW1lTGlzdCYgbGlzdCkKIHsKICAgICBsaXN0LmNsZWFyKCk7CiAKQEAgLTE3NTMs
NyArMTc1Myw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmlt
YXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqCiAgICAgfQogfQogCi1QYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQo
UHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCitQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1l
bnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
CiB7CiAgICAgaWYgKCFlKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE4MDAsNyArMTgwMCw3IEBA
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9y
RWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sCiAgICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOwog
fQogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvclBh
Z2UoaW50IHBhZ2VJbmRleCkKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6
OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogewogICAgIGluaXRGb3JTdHlsZVJlc29sdmUo
bV9jaGVja2VyLmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsgLy8gbV9yb290RWxlbWVu
dFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4KIApAQCAtMTkxMiw3ICsx
OTEyLDcgQEAgc3RhdGljIEVEaXNwbGF5IGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoRURpc3BsYXkg
ZGlzcGxheSwgYm9vbCBpc0Zsb2F0aW5nLCBib29sIHMKICAgICByZXR1cm4gQkxPQ0s7CiB9CiAK
LXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0
eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQgKmUpCit2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlLCBFbGVtZW50ICplKQogewogICAgIC8vIENhY2hlIG91ciBvcmlnaW5hbCBk
aXNwbGF5LgogICAgIHN0eWxlLT5zZXRPcmlnaW5hbERpc3BsYXkoc3R5bGUtPmRpc3BsYXkoKSk7
CkBAIC0yMTEwLDcgKzIxMTAsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRl
clN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudAogI2VuZGlmCiB9
CiAKLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tSZWdpb25TdHlsZShFbGVtZW50KiByZWdp
b25FbGVtZW50KQorYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblN0eWxlKEVsZW1lbnQq
IHJlZ2lvbkVsZW1lbnQpCiB7CiAgICAgLy8gRklYTUUgKEJVRyA3MjQ3Mik6IFdlIGRvbid0IGFk
ZCBALXdlYmtpdC1yZWdpb24gcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1v
bWVudCwKICAgICAvLyBzbyBhbGwgcmVnaW9uIHJ1bGVzIGFyZSBnbG9iYWwgYnkgZGVmYXVsdC4g
VmVyaWZ5IHdoZXRoZXIgdGhhdCBjYW4gc3RhbmQgb3IgbmVlZHMgY2hhbmdpbmcuCkBAIC0yMTM0
LDcgKzIxMzQsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrUmVnaW9uU3R5bGUoRWxl
bWVudCogcmVnaW9uRWxlbWVudCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6dXBkYXRlRm9udCgpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQo
KQogewogICAgIGlmICghbV9mb250RGlydHkpCiAgICAgICAgIHJldHVybjsKQEAgLTIxNDYsNyAr
MjE0Niw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6dXBkYXRlRm9udCgpCiAgICAgbV9mb250
RGlydHkgPSBmYWxzZTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjYWNoZUJvcmRlckFu
ZEJhY2tncm91bmQoKQordm9pZCBTdHlsZVJlc29sdmVyOjpjYWNoZUJvcmRlckFuZEJhY2tncm91
bmQoKQogewogICAgIG1faGFzVUFBcHBlYXJhbmNlID0gbV9zdHlsZS0+aGFzQXBwZWFyYW5jZSgp
OwogICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkgewpAQCAtMjE1NiwxMiArMjE1NiwxMiBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpCiAgICAgfQog
fQogCi1QYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZVJ1bGVz
Rm9yRWxlbWVudChFbGVtZW50KiBlLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKK1Bhc3NSZWZQ
dHI8Q1NTUnVsZUxpc3Q+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1l
bnQqIGUsIHVuc2lnbmVkIHJ1bGVzVG9JbmNsdWRlKQogewogICAgIHJldHVybiBwc2V1ZG9TdHls
ZVJ1bGVzRm9yRWxlbWVudChlLCBOT1BTRVVETywgcnVsZXNUb0luY2x1ZGUpOwogfQogCi1QYXNz
UmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZVJ1bGVzRm9y
RWxlbWVudChFbGVtZW50KiBlLCBQc2V1ZG9JZCBwc2V1ZG9JZCwgdW5zaWduZWQgcnVsZXNUb0lu
Y2x1ZGUpCitQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHls
ZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCBQc2V1ZG9JZCBwc2V1ZG9JZCwgdW5zaWduZWQg
cnVsZXNUb0luY2x1ZGUpCiB7CiAgICAgaWYgKCFlIHx8ICFlLT5kb2N1bWVudCgpLT5oYXZlU3R5
bGVzaGVldHNMb2FkZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMTk1LDcgKzIxOTUsNyBA
QCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLAogICAgIHJldHVybiBtX3J1bGVMaXN0LnJlbGVhc2Uo
KTsKIH0KIAotaW5saW5lIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3Rvcihjb25z
dCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQoraW5saW5l
IGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURh
dGEsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQogewogICAgIG1fZHluYW1pY1BzZXVkbyA9
IE5PUFNFVURPOwogICAgIG1fY2hlY2tlci5jbGVhckhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygp
OwpAQCAtMjIyOSw3ICsyMjI5LDcgQEAgaW5saW5lIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hl
Y2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnQKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1JlZ2lvblNlbGVjdG9y
KENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxlbWVudCogcmVnaW9uRWxlbWVudCkKK2Jv
b2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tSZWdpb25TZWxlY3RvcihDU1NTZWxlY3RvciogcmVnaW9u
U2VsZWN0b3IsIEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpCiB7CiAgICAgaWYgKCFyZWdpb25TZWxl
Y3RvciB8fCAhcmVnaW9uRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjI0NCw3
ICsyMjQ0LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1JlZ2lvblNlbGVjdG9yKENT
U1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxlbWVudCoKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAgICAgCi1ib29sIENTU1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVN0eWxlc2hlZXRTZWxlY3Rv
clNjb3BlcyhTdHlsZVNoZWV0SW50ZXJuYWwqIHN0eWxlc2hlZXQsIEhhc2hTZXQ8QXRvbWljU3Ry
aW5nSW1wbCo+JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2Nv
cGVzKQorYm9vbCBTdHlsZVJlc29sdmVyOjpkZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29w
ZXMoU3R5bGVTaGVldEludGVybmFsKiBzdHlsZXNoZWV0LCBIYXNoU2V0PEF0b21pY1N0cmluZ0lt
cGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBjbGFzc1Njb3BlcykK
IHsKICAgICBBU1NFUlQoIXN0eWxlc2hlZXQtPmlzTG9hZGluZygpKTsKIApAQCAtMjM1MCw3ICsy
MzUwLDcgQEAgUnVsZVNldDo6UnVsZVNldCgpCiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBj
b2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMmIGZl
YXR1cmVzLCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCitzdGF0aWMgaW5saW5lIHZvaWQg
Y29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzJiBmZWF0
dXJlcywgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQogewogICAgIGlmIChzZWxlY3Rvci0+
bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpCiAgICAgICAgIGZlYXR1cmVzLmlkc0luUnVsZXMu
YWRkKHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7CkBAIC0yMzczLDcgKzIzNzMsNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgY29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKENTU1N0eWxlU2VsZWN0
b3I6OkZlYXR1cmVzJiBmZWF0dQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgY29sbGVjdEZlYXR1
cmVzRnJvbVJ1bGVEYXRhKENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJiBmZWF0dXJlcywgY29u
c3QgUnVsZURhdGEmIHJ1bGVEYXRhKQorc3RhdGljIHZvaWQgY29sbGVjdEZlYXR1cmVzRnJvbVJ1
bGVEYXRhKFN0eWxlUmVzb2x2ZXI6OkZlYXR1cmVzJiBmZWF0dXJlcywgY29uc3QgUnVsZURhdGEm
IHJ1bGVEYXRhKQogewogICAgIGJvb2wgZm91bmRTaWJsaW5nU2VsZWN0b3IgPSBmYWxzZTsKICAg
ICBmb3IgKENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHJ1bGVEYXRhLnNlbGVjdG9yKCk7IHNlbGVj
dG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKQEAgLTIzODksOSArMjM4
OSw5IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RGZWF0dXJlc0Zyb21SdWxlRGF0YShDU1NTdHlsZVNl
bGVjdG9yOjpGZWF0dXJlcyYgZmVhdHVyZXMsIGNvCiAgICAgICAgICAgICBmb3VuZFNpYmxpbmdT
ZWxlY3RvciA9IHRydWU7CiAgICAgfQogICAgIGlmIChmb3VuZFNpYmxpbmdTZWxlY3RvcikKLSAg
ICAgICAgZmVhdHVyZXMuc2libGluZ1J1bGVzLmFwcGVuZChDU1NTdHlsZVNlbGVjdG9yOjpSdWxl
RmVhdHVyZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9yKCksIHJ1bGVEYXRhLmhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkpOworICAgICAgICBmZWF0dXJlcy5zaWJsaW5nUnVs
ZXMuYXBwZW5kKFN0eWxlUmVzb2x2ZXI6OlJ1bGVGZWF0dXJlKHJ1bGVEYXRhLnJ1bGUoKSwgcnVs
ZURhdGEuc2VsZWN0b3IoKSwgcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSk7
CiAgICAgaWYgKHJ1bGVEYXRhLmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQot
ICAgICAgICBmZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmFwcGVuZChDU1NTdHlsZVNl
bGVjdG9yOjpSdWxlRmVhdHVyZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9yKCks
IHJ1bGVEYXRhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkpOworICAgICAgICBmZWF0dXJl
cy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmFwcGVuZChTdHlsZVJlc29sdmVyOjpSdWxlRmVhdHVy
ZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9yKCksIHJ1bGVEYXRhLmhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4oKSkpOwogfQogICAgIAogdm9pZCBSdWxlU2V0OjphZGRUb1J1bGVT
ZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLCBjb25zdCBSdWxlRGF0
YSYgcnVsZURhdGEpCkBAIC0yNDcwLDcgKzI0NzAsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJlZ2lv
blJ1bGUoU3R5bGVSdWxlUmVnaW9uKiByZWdpb25SdWxlLCBib29sIGhhc0RvY3VtZW50U2VjdXJp
dAogICAgIG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXBwZW5kKFJ1bGVTZXRTZWxlY3Rv
clBhaXIocmVnaW9uUnVsZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3QoKSwgcmVnaW9uUnVsZVNldC5y
ZWxlYXNlKCkpKTsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChTdHlsZVNo
ZWV0SW50ZXJuYWwqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIENT
U1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3Bl
KQordm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0SW50ZXJuYWwqIHNo
ZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlU2VsZWN0b3IsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQogewogICAgIEFTU0VSVChz
aGVldCk7CiAKQEAgLTI1NzcsMTggKzI1NzcsMTggQEAgdm9pZCBSdWxlU2V0OjpzaHJpbmtUb0Zp
dCgpCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyB0aGlzIGlzIG1vc3RseSBi
b3Jpbmcgc3R1ZmYgb24gaG93IHRvIGFwcGx5IGEgY2VydGFpbiBydWxlIHRvIHRoZSByZW5kZXJz
dHlsZS4uLgogCi1MZW5ndGggQ1NTU3R5bGVTZWxlY3Rvcjo6Y29udmVydFRvSW50TGVuZ3RoKENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5k
ZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikKK0xlbmd0aCBTdHlsZVJlc29s
dmVyOjpjb252ZXJ0VG9JbnRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
LCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0
aXBsaWVyKQogewogICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZSA/IHByaW1pdGl2ZVZhbHVlLT5j
b252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9u
IHwgRnJhY3Rpb25Db252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3R5
bGUsIHJvb3RTdHlsZSwgbXVsdGlwbGllcikgOiBMZW5ndGgoVW5kZWZpbmVkKTsKIH0KIAotTGVu
Z3RoIENTU1N0eWxlU2VsZWN0b3I6OmNvbnZlcnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9v
dFN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikKK0xlbmd0aCBTdHlsZVJlc29sdmVyOjpjb252ZXJ0
VG9GbG9hdExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFJlbmRlclN0
eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIpCiB7
CiAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlID8gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xl
bmd0aDxGaXhlZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgRnJhY3Rpb25D
b252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3R5bGUsIHJvb3RTdHls
ZSwgbXVsdGlwbGllcikgOiBMZW5ndGgoVW5kZWZpbmVkKTsKIH0KIAogdGVtcGxhdGUgPGJvb2wg
YXBwbHlGaXJzdD4KLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0
IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgYm9vbCBpc0lt
cG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBib29sIGZpbHRlclJlZ2lvblByb3BlcnRpZXMp
Cit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5
U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wg
aW5oZXJpdGVkT25seSwgYm9vbCBmaWx0ZXJSZWdpb25Qcm9wZXJ0aWVzKQogewogICAgIEFTU0VS
VCghZmlsdGVyUmVnaW9uUHJvcGVydGllcyB8fCBtX3JlZ2lvbkZvclN0eWxpbmcpOwogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxQcm9jZXNzUnVsZShkb2N1bWVudCgpLCBydWxlKTsKQEAgLTI2MDcsNyArMjYw
Nyw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxl
UHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlCiAgICAgICAgIH0KICAgICAgICAgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eSA9IGN1cnJlbnQuaWQoKTsKIAotICAgICAgICBpZiAoZmlsdGVyUmVn
aW9uUHJvcGVydGllcyAmJiAhQ1NTU3R5bGVTZWxlY3Rvcjo6aXNWYWxpZFJlZ2lvblN0eWxlUHJv
cGVydHkocHJvcGVydHkpKQorICAgICAgICBpZiAoZmlsdGVyUmVnaW9uUHJvcGVydGllcyAmJiAh
U3R5bGVSZXNvbHZlcjo6aXNWYWxpZFJlZ2lvblN0eWxlUHJvcGVydHkocHJvcGVydHkpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKGFwcGx5Rmlyc3QpIHsKQEAgLTI2MzIs
NyArMjYzMiw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0
IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlCiB9CiAKIHRlbXBsYXRlIDxib29s
IGFwcGx5Rmlyc3Q+Ci12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBib29sIGlzSW1wb3J0YW50LCBpbnQg
c3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpCit2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNo
UmVzdWx0LCBib29sIGlzSW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBi
b29sIGluaGVyaXRlZE9ubHkpCiB7CiAgICAgaWYgKHN0YXJ0SW5kZXggPT0gLTEpCiAgICAgICAg
IHJldHVybjsKQEAgLTI2NTcsMTMgKzI2NTcsMTMgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjph
cHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgYm8K
ICAgICB9CiB9CiAKLXVuc2lnbmVkIENTU1N0eWxlU2VsZWN0b3I6OmNvbXB1dGVNYXRjaGVkUHJv
cGVydGllc0hhc2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMqIHByb3BlcnRpZXMsIHVuc2lnbmVk
IHNpemUpCit1bnNpZ25lZCBTdHlsZVJlc29sdmVyOjpjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNI
YXNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzKiBwcm9wZXJ0aWVzLCB1bnNpZ25lZCBzaXplKQog
ewogICAgIAogICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkocHJvcGVydGllcywg
c2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAqIHNpemUpOwogfQogCi1ib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ1NTU3R5bGVTZWxlY3Rvcjo6TWF0Y2hSYW5nZXMmIGEsIGNvbnN0IENTU1N0eWxlU2Vs
ZWN0b3I6Ok1hdGNoUmFuZ2VzJiBiKQorYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlUmVzb2x2
ZXI6Ok1hdGNoUmFuZ2VzJiBhLCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJhbmdlcyYgYikK
IHsKICAgICByZXR1cm4gYS5maXJzdFVBUnVsZSA9PSBiLmZpcnN0VUFSdWxlCiAgICAgICAgICYm
IGEubGFzdFVBUnVsZSA9PSBiLmxhc3RVQVJ1bGUKQEAgLTI2NzMsMjIgKzI2NzMsMjIgQEAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IENTU1N0eWxlU2VsZWN0b3I6Ok1hdGNoUmFuZ2VzJiBhLCBjb25z
dCBDU1NTdHlsZVNlbGVjdG9yOjoKICAgICAgICAgJiYgYS5sYXN0VXNlclJ1bGUgPT0gYi5sYXN0
VXNlclJ1bGU7CiB9CiAKLWJvb2wgb3BlcmF0b3IhPShjb25zdCBDU1NTdHlsZVNlbGVjdG9yOjpN
YXRjaFJhbmdlcyYgYSwgY29uc3QgQ1NTU3R5bGVTZWxlY3Rvcjo6TWF0Y2hSYW5nZXMmIGIpCiti
b29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMmIGEsIGNvbnN0
IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBiKQogewogICAgIHJldHVybiAhKGEgPT0gYik7
CiB9CiAKLWJvb2wgb3BlcmF0b3I9PShjb25zdCBDU1NTdHlsZVNlbGVjdG9yOjpNYXRjaGVkUHJv
cGVydGllcyYgYSwgY29uc3QgQ1NTU3R5bGVTZWxlY3Rvcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGIp
Citib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMm
IGEsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBiKQogewogICAgIHJl
dHVybiBhLnByb3BlcnRpZXMgPT0gYi5wcm9wZXJ0aWVzICYmIGEubGlua01hdGNoVHlwZSA9PSBi
LmxpbmtNYXRjaFR5cGU7CiB9CiAKLWJvb2wgb3BlcmF0b3IhPShjb25zdCBDU1NTdHlsZVNlbGVj
dG9yOjpNYXRjaGVkUHJvcGVydGllcyYgYSwgY29uc3QgQ1NTU3R5bGVTZWxlY3Rvcjo6TWF0Y2hl
ZFByb3BlcnRpZXMmIGIpCitib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0
Y2hlZFByb3BlcnRpZXMmIGEsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVz
JiBiKQogewogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKLWNvbnN0IENTU1N0eWxlU2VsZWN0
b3I6Ok1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBDU1NTdHlsZVNlbGVjdG9yOjpmaW5kRnJv
bU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUodW5zaWduZWQgaGFzaCwgY29uc3QgTWF0Y2hSZXN1bHQm
IG1hdGNoUmVzdWx0KQorY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZUl0ZW0qIFN0eWxlUmVzb2x2ZXI6OmZpbmRGcm9tTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSh1bnNp
Z25lZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQpCiB7CiAgICAgQVNTRVJU
KGhhc2gpOwogCkBAIC0yNzA5LDcgKzI3MDksNyBAQCBjb25zdCBDU1NTdHlsZVNlbGVjdG9yOjpN
YXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSogQ1NTU3R5bGVTZWxlY3Rvcjo6ZmluZEZyb21NYQog
ICAgIHJldHVybiAmY2FjaGVJdGVtOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZFRv
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgdW5zaWduZWQgaGFzaCwgY29uc3QgTWF0Y2hSZXN1bHQm
IG1hdGNoUmVzdWx0KQordm9pZCBTdHlsZVJlc29sdmVyOjphZGRUb01hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUsIHVuc2lnbmVkIGhhc2gsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCkKIHsK
ICAgICBzdGF0aWMgdW5zaWduZWQgbWF0Y2hlZERlY2xhcmF0aW9uQ2FjaGVBZGRpdGlvbnNCZXR3
ZWVuU3dlZXBzID0gMTAwOwogICAgIGlmICgrK21fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0
aW9uc1NpbmNlTGFzdFN3ZWVwID49IG1hdGNoZWREZWNsYXJhdGlvbkNhY2hlQWRkaXRpb25zQmV0
d2VlblN3ZWVwcykgewpAQCAtMjcyOCw3ICsyNzI4LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjphZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBj
b24KICAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuYWRkKGhhc2gsIGNhY2hlSXRlbSk7CiB9
CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGUoKQordm9pZCBTdHlsZVJlc29sdmVyOjppbnZhbGlkYXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZSgpCiB7CiAgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmNsZWFyKCk7CiB9CkBAIC0yNzUw
LDcgKzI3NTAsNyBAQCBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXND
YWNoZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBSZQogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3Qg
TWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0KQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCkKIHsKICAgICB1bnNp
Z25lZCBjYWNoZUhhc2ggPSBtYXRjaFJlc3VsdC5pc0NhY2hlYWJsZSA/IGNvbXB1dGVNYXRjaGVk
UHJvcGVydGllc0hhc2gobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuZGF0YSgpLCBtYXRj
aFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkpIDogMDsKICAgICBib29sIGFwcGx5SW5o
ZXJpdGVkT25seSA9IGZhbHNlOwpAQCAtMjgyOSw3ICsyODI5LDcgQEAgc3RhdGljIGlubGluZSBi
b29sIGNvbXBhcmVQYWdlUnVsZXMoY29uc3QgU3R5bGVSdWxlUGFnZSogcjEsIGNvbnN0IFN0eWxl
UnVsZVBhZ2UKICAgICByZXR1cm4gcjEtPnNlbGVjdG9yKCktPnNwZWNpZmljaXR5KCkgPCByMi0+
c2VsZWN0b3IoKS0+c3BlY2lmaWNpdHkoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXRjaFBhZ2VSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcywgYm9vbCBp
c0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQordm9p
ZCBTdHlsZVJlc29sdmVyOjptYXRjaFBhZ2VSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxl
U2V0KiBydWxlcywgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJp
bmcmIHBhZ2VOYW1lKQogewogICAgIGlmICghcnVsZXMpCiAgICAgICAgIHJldHVybjsKQEAgLTI4
NDUsNyArMjg0NSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCwgUnVsZVNldCogcnVsZXMsIGJvb2wKICAgICAgICAgYWRkTWF0Y2hl
ZFByb3BlcnRpZXMocmVzdWx0LCBtYXRjaGVkUGFnZVJ1bGVzW2ldLT5wcm9wZXJ0aWVzKCkpOwog
fQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8
U3R5bGVSdWxlUGFnZSo+JiBtYXRjaGVkUnVsZXMsIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdl
Kj4mIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmlu
ZyYgcGFnZU5hbWUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoUGFnZVJ1bGVzRm9yTGlzdChW
ZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBtYXRjaGVkUnVsZXMsIGNvbnN0IFZlY3RvcjxTdHlsZVJ1
bGVQYWdlKj4mIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0
IFN0cmluZyYgcGFnZU5hbWUpCiB7CiAgICAgdW5zaWduZWQgc2l6ZSA9IHJ1bGVzLnNpemUoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CkBAIC0yODY5LDcgKzI4
NjksNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0
b3I8U3R5bGVSdWxlUGFnZSo+JiBtYXRjaGVkUnVsZQogICAgIH0KIH0KIAotYm9vbCBDU1NTdHls
ZVNlbGVjdG9yOjppc0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0Citib29sIFN0eWxlUmVz
b2x2ZXI6OmlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKIHsKICAgICBib29sIGlzRmly
c3RQYWdlTGVmdCA9IGZhbHNlOwogICAgIGlmICghbV9yb290RWxlbWVudFN0eWxlLT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkpCkBAIC0yODc4LDEzICsyODc4LDEzIEBAIGJvb2wgQ1NTU3R5bGVT
ZWxlY3Rvcjo6aXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdAogICAgIHJldHVybiAocGFn
ZUluZGV4ICsgKGlzRmlyc3RQYWdlTGVmdCA/IDEgOiAwKSkgJSAyOwogfQogCi1ib29sIENTU1N0
eWxlU2VsZWN0b3I6OmlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0Citib29sIFN0eWxl
UmVzb2x2ZXI6OmlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0CiB7CiAgICAgLy8gRklY
TUU6IEluIGNhc2Ugb2YgZm9yY2VkIGxlZnQvcmlnaHQgcGFnZSwgcGFnZSBhdCBpbmRleCAxIChu
b3QgMCkgY2FuIGJlIHRoZSBmaXJzdCBwYWdlLgogICAgIHJldHVybiAoIXBhZ2VJbmRleCk7CiB9
CiAKLVN0cmluZyBDU1NTdHlsZVNlbGVjdG9yOjpwYWdlTmFtZShpbnQgLyogcGFnZUluZGV4ICov
KSBjb25zdAorU3RyaW5nIFN0eWxlUmVzb2x2ZXI6OnBhZ2VOYW1lKGludCAvKiBwYWdlSW5kZXgg
Ki8pIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBwYWdlIGluZGV4IHRvIHBhZ2Ug
bmFtZSBtYXBwaW5nLgogICAgIHJldHVybiAiIjsKQEAgLTI5MzIsNyArMjkzMiw3IEBAIHN0YXRp
YyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJzKEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENT
U1N0eWxlUnVsZT4gPiYgd3JhCiAgICAgY29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBlck1hcCwg
c2hlZXRXcmFwcGVyU2V0LCBkb2N1bWVudC0+cGFnZVVzZXJTaGVldCgpKTsKIH0KIAotQ1NTU3R5
bGVSdWxlKiBDU1NTdHlsZVNlbGVjdG9yOjplbnN1cmVGdWxsQ1NTT01XcmFwcGVyRm9ySW5zcGVj
dG9yKFN0eWxlUnVsZSogcnVsZSkKK0NTU1N0eWxlUnVsZSogU3R5bGVSZXNvbHZlcjo6ZW5zdXJl
RnVsbENTU09NV3JhcHBlckZvckluc3BlY3RvcihTdHlsZVJ1bGUqIHJ1bGUpCiB7CiAgICAgaWYg
KG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgIGNvbGxl
Y3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVl
dENTU09NV3JhcHBlclNldCwgc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQpOwpAQCAtMjk0OCw3ICsy
OTQ4LDcgQEAgQ1NTU3R5bGVSdWxlKiBDU1NTdHlsZVNlbGVjdG9yOjplbnN1cmVGdWxsQ1NTT01X
cmFwcGVyRm9ySW5zcGVjdG9yKFN0eWxlUnVsZSogcnUKICAgICByZXR1cm4gbV9zdHlsZVJ1bGVU
b0NTU09NV3JhcHBlck1hcC5nZXQocnVsZSkuZ2V0KCk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlLCBSZW5kZXJTdHlsZSogc3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHlUb1N0eWxlKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUq
IHN0eWxlKQogewogICAgIGluaXRFbGVtZW50KDApOwogICAgIGluaXRGb3JTdHlsZVJlc29sdmUo
MCwgc3R5bGUpOwpAQCAtMjk1Niw3ICsyOTU2LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjph
cHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFIK
ICAgICBhcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoaWQsIHZhbHVlKTsKIH0KIAotdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAg
IGlmICh2YWx1ZSkKICAgICAgICAgYXBwbHlQcm9wZXJ0eShpZCwgdmFsdWUpOwpAQCAtMjk5OCw3
ICsyOTk4LDcgQEAgaW5saW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCkKIAogLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzMy1yZWdpb25zLyN0
aGUtYXQtcmVnaW9uLXN0eWxlLXJ1bGUKIC8vIEZJWE1FOiBhZGQgaW5jcmVtZW50YWwgc3VwcG9y
dCBmb3Igb3RoZXIgcmVnaW9uIHN0eWxpbmcgcHJvcGVydGllcy4KLWlubGluZSBib29sIENTU1N0
eWxlU2VsZWN0b3I6OmlzVmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQp
CitpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjppc1ZhbGlkUmVnaW9uU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkKQogewogICAgIHN3aXRjaCAoaWQpIHsKICAgICBjYXNlIENTU1Byb3Bl
cnR5QmFja2dyb3VuZENvbG9yOgpAQCAtMzAxOCwxNCArMzAxOCwxNCBAQCBpbmxpbmUgYm9vbCBD
U1NTdHlsZVNlbGVjdG9yOjppc1ZhbGlkUmVnaW9uU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IGlkKQogLy8gd2lkdGgvaGVpZ2h0L2JvcmRlci9wYWRkaW5nLy4uLiBmcm9tIHRoZSBSZW5kZXJT
dHlsZSAtPiBmb3IgU1ZHIHRoZXNlIHZhbHVlcyB3b3VsZCBuZXZlciBzY2FsZSwKIC8vIGlmIHdl
J2QgcGFzcyBhIDEuMCB6b29tIGZhY3RvciBldmVyeWh3ZXJlLiBTbyB3ZSBvbmx5IHBhc3MgYSB6
b29tIGZhY3RvciBvZiAxLjAgZm9yIHNwZWNpZmljCiAvLyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5P
VCBhbGxvd2VkIHRvIHNjYWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQgKGxldHRlci93
b3JkLXNwYWNpbmcvZm9udC1zaXplKS4KLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6dXNlU1ZHWm9v
bVJ1bGVzKCkKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKCkKIHsKICAgICBy
ZXR1cm4gbV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCk7CiB9CiAKICNpZiBF
TkFCTEUoQ1NTX0dSSURfTEFZT1VUKQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVh
ZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgQ1NTU3R5bGVTZWxlY3Rvciog
c2VsZWN0b3IsIExlbmd0aCYgbGVuZ3RoKQorc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJl
YWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNl
bGVjdG9yLCBMZW5ndGgmIGxlbmd0aCkKIHsKICAgICBMZW5ndGggd29ya2luZ0xlbmd0aCA9IHBy
aW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBl
cmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbiB8IEF1dG9Db252
ZXJzaW9uPihzZWxlY3Rvci0+c3R5bGUoKSwgc2VsZWN0b3ItPnJvb3RFbGVtZW50U3R5bGUoKSwg
c2VsZWN0b3ItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgaWYgKHdvcmtpbmdMZW5n
dGguaXNVbmRlZmluZWQoKSkKQEAgLTMwMzgsNyArMzAzOCw3IEBAIHN0YXRpYyBib29sIGNyZWF0
ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBDU1NT
dHlsZVNlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFj
a0xpc3QoQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8TGVuZ3RoPiYgbGVuZ3RocywgQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IpCitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KENTU1Zh
bHVlKiB2YWx1ZSwgVmVjdG9yPExlbmd0aD4mIGxlbmd0aHMsIFN0eWxlUmVzb2x2ZXIqIHNlbGVj
dG9yKQogewogICAgIC8vIEhhbmRsZSAnbm9uZScuCiAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpIHsKQEAgLTMwODUsNyArMzA4NSw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRQ
b3NpdGlvbihDU1NWYWx1ZSogdmFsdWUsIExlbmd0aCYgcG9zaXRpb24pCiB9CiAjZW5kaWYKIAot
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlICp2YWx1ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSAqdmFsdWUpCiB7CiAgICAgYm9vbCBpc0luaGVyaXQgPSBtX3Bh
cmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKICAgICBib29sIGlzSW5pdGlh
bCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghbV9wYXJlbnROb2RlICYmIHZhbHVlLT5p
c0luaGVyaXRlZFZhbHVlKCkpOwpAQCAtNDE2NSw3ICs0MTY1LDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlICp2YWx1ZSkK
ICAgICB9CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbEF0dGFjaG1lbnQoQ1NT
UHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBTdHls
ZVJlc29sdmVyOjptYXBGaWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxh
eWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgp
KSB7CiAgICAgICAgIGxheWVyLT5zZXRBdHRhY2htZW50KEZpbGxMYXllcjo6aW5pdGlhbEZpbGxB
dHRhY2htZW50KGxheWVyLT50eXBlKCkpKTsKQEAgLTQxOTEsNyArNDE5MSw3IEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6bWFwRmlsbEF0dGFjaG1lbnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVy
KiBsYXllciwgQ1NTVmFsCiAgICAgfQogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZp
bGxDbGlwKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
K3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbENsaXAoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVy
KiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFs
dWUoKSkgewogICAgICAgICBsYXllci0+c2V0Q2xpcChGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQ2xp
cChsYXllci0+dHlwZSgpKSk7CkBAIC00MjA1LDcgKzQyMDUsNyBAQCB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6Om1hcEZpbGxDbGlwKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1Zh
bHVlKiB2YQogICAgIGxheWVyLT5zZXRDbGlwKCpwcmltaXRpdmVWYWx1ZSk7CiB9CiAKLXZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbENvbXBvc2l0ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5
ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxD
b21wb3NpdGUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVl
KQogewogICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+
c2V0Q29tcG9zaXRlKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxDb21wb3NpdGUobGF5ZXItPnR5cGUo
KSkpOwpAQCAtNDIxOSw3ICs0MjE5LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxs
Q29tcG9zaXRlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHUKICAgICBs
YXllci0+c2V0Q29tcG9zaXRlKCpwcmltaXRpdmVWYWx1ZSk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6bWFwRmlsbE9yaWdpbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBD
U1NWYWx1ZSogdmFsdWUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxPcmlnaW4oQ1NTUHJv
cGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2
YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+c2V0T3JpZ2luKEZpbGxM
YXllcjo6aW5pdGlhbEZpbGxPcmlnaW4obGF5ZXItPnR5cGUoKSkpOwpAQCAtNDIzMyw3ICs0MjMz
LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsT3JpZ2luKENTU1Byb3BlcnR5SUQs
IEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKgogICAgIGxheWVyLT5zZXRPcmlnaW4oKnByaW1p
dGl2ZVZhbHVlKTsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBDU1NTdHlsZVNlbGVjdG9y
OjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSkKK1Bh
c3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc0ltYWdl
VmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0
eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KHZhbHVlKSk7CkBAIC00MjQ5LDcgKzQyNDks
NyBAQCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlSW1hZ2Uo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTVgogICAgIHJldHVybiAwOwogfQogCi1QYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IENTU1N0eWxlU2VsZWN0b3I6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlVmFsdWUqIHZhbHVlKQogewogICAgIFJlZlB0
cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOwogICAg
IGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKQEAgLTQyNTcsNyArNDI1Nyw3
IEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FjaGVkT3JQZW5k
aW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwog
fQogCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1N0eWxlU2VsZWN0b3I6OmdlbmVyYXRlZE9y
UGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZUdlbmVyYXRv
clZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Z2Vu
ZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdl
R2VuZXJhdG9yVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNQZW5kaW5nKCkpIHsK
ICAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eSk7CkBAIC00MjY3
LDcgKzQyNjcsNyBAQCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1N0eWxlU2VsZWN0b3I6Omdl
bmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eQogfQogCiAjaWYgRU5BQkxFKENT
U19JTUFHRV9TRVQpCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1N0eWxlU2VsZWN0b3I6OnNl
dE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVNldFZh
bHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQ
ZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlU2V0VmFsdWUq
IHZhbHVlKQogewogICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRP
clBlbmRpbmdJbWFnZVNldChkb2N1bWVudCgpKTsKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlz
UGVuZGluZ0ltYWdlKCkpCkBAIC00Mjc2LDcgKzQyNzYsNyBAQCBQYXNzUmVmUHRyPFN0eWxlSW1h
Z2U+IENTU1N0eWxlU2VsZWN0b3I6OnNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlE
IHBybwogfQogI2VuZGlmCiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbEltYWdlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHksIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
K3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwRmlsbEltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlz
SW5pdGlhbFZhbHVlKCkpIHsKICAgICAgICAgbGF5ZXItPnNldEltYWdlKEZpbGxMYXllcjo6aW5p
dGlhbEZpbGxJbWFnZShsYXllci0+dHlwZSgpKSk7CkBAIC00Mjg2LDcgKzQyODYsNyBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBG
aWxsTGF5ZXIqIGxheWVyLCBDUwogICAgIGxheWVyLT5zZXRJbWFnZShzdHlsZUltYWdlKHByb3Bl
cnR5LCB2YWx1ZSkpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxSZXBlYXRY
KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQg
U3R5bGVSZXNvbHZlcjo6bWFwRmlsbFJlcGVhdFgoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBs
YXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUo
KSkgewogICAgICAgICBsYXllci0+c2V0UmVwZWF0WChGaWxsTGF5ZXI6OmluaXRpYWxGaWxsUmVw
ZWF0WChsYXllci0+dHlwZSgpKSk7CkBAIC00MzAwLDcgKzQzMDAsNyBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6Om1hcEZpbGxSZXBlYXRYKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIs
IENTU1ZhbHVlKgogICAgIGxheWVyLT5zZXRSZXBlYXRYKCpwcmltaXRpdmVWYWx1ZSk7CiB9CiAK
LXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFJlcGVhdFkoQ1NTUHJvcGVydHlJRCwgRmls
bExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXBG
aWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFs
dWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGxheWVy
LT5zZXRSZXBlYXRZKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxSZXBlYXRZKGxheWVyLT50eXBlKCkp
KTsKQEAgLTQzMTQsNyArNDMxNCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFJl
cGVhdFkoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqCiAgICAgbGF5
ZXItPnNldFJlcGVhdFkoKnByaW1pdGl2ZVZhbHVlKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXBGaWxsU2l6ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1
ZSogdmFsdWUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxTaXplKENTU1Byb3BlcnR5SUQs
IEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgbGF5ZXItPnNldFNpemVUeXBlKFNpemVOb25l
KTsKQEAgLTQzNTksNyArNDM1OSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFNp
emUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhCiAgICAgbGF5
ZXItPnNldFNpemVMZW5ndGgoYik7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmls
bFhQb3NpdGlvbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFs
dWUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxYUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwg
RmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNJ
bml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+c2V0WFBvc2l0aW9uKEZpbGxMYXllcjo6
aW5pdGlhbEZpbGxYUG9zaXRpb24obGF5ZXItPnR5cGUoKSkpOwpAQCAtNDM4Niw3ICs0Mzg2LDcg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsWFBvc2l0aW9uKENTU1Byb3BlcnR5SUQs
IEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHUKICAgICBsYXllci0+c2V0WFBvc2l0aW9uKGwpOwog
fQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxZUG9zaXRpb24oQ1NTUHJvcGVydHlJ
RCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBTdHlsZVJlc29sdmVy
OjptYXBGaWxsWVBvc2l0aW9uKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKICAgICAg
ICAgbGF5ZXItPnNldFlQb3NpdGlvbihGaWxsTGF5ZXI6OmluaXRpYWxGaWxsWVBvc2l0aW9uKGxh
eWVyLT50eXBlKCkpKTsKQEAgLTQ0MTMsNyArNDQxMyw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6bWFwRmlsbFlQb3NpdGlvbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NW
YWx1CiAgICAgbGF5ZXItPnNldFlQb3NpdGlvbihsKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZh
bHVlKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qIGFu
aW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFs
dWUoKSkgewogICAgICAgICBhbmltYXRpb24tPnNldERlbGF5KEFuaW1hdGlvbjo6aW5pdGlhbEFu
aW1hdGlvbkRlbGF5KCkpOwpAQCAtNDQyNyw3ICs0NDI3LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgIGFuaW1hdGlvbi0+c2V0RGVsYXkocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1l
PGZsb2F0LCBDU1NQcmltaXRpdmVWYWx1ZTo6U2Vjb25kcz4oKSk7CiB9CiAKLXZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiogbGF5ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uRGlyZWN0aW9uKEFu
aW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzSW5p
dGlhbFZhbHVlKCkpIHsKICAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihBbmltYXRpb246Omlu
aXRpYWxBbmltYXRpb25EaXJlY3Rpb24oKSk7CkBAIC00NDU0LDcgKzQ0NTQsNyBAQCB2b2lkIENT
U1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbkRpcmVjdGlvbihBbmltYXRpb24qIGxheWVyLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgfQogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFu
aW1hdGlvbkR1cmF0aW9uKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit2
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hcEFuaW1hdGlvbkR1cmF0aW9uKEFuaW1hdGlvbiogYW5pbWF0
aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgp
KSB7CiAgICAgICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oQW5pbWF0aW9uOjppbml0aWFsQW5p
bWF0aW9uRHVyYXRpb24oKSk7CkBAIC00NDY4LDcgKzQ0NjgsNyBAQCB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6Om1hcEFuaW1hdGlvbkR1cmF0aW9uKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1
ZSogdmFsdQogICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24ocHJpbWl0aXZlVmFsdWUtPmNvbXB1
dGVUaW1lPGZsb2F0LCBDU1NQcmltaXRpdmVWYWx1ZTo6U2Vjb25kcz4oKSk7CiB9CiAKLXZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uRmlsbE1vZGUoQW5pbWF0aW9uKiBsYXllciwg
Q1NTVmFsdWUqIHZhbHVlKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25GaWxsTW9k
ZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5p
c0luaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGxheWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb246
OmluaXRpYWxBbmltYXRpb25GaWxsTW9kZSgpKTsKQEAgLTQ0OTUsNyArNDQ5NSw3IEBAIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uRmlsbE1vZGUoQW5pbWF0aW9uKiBsYXllciwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIH0KIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBB
bmltYXRpb25JdGVyYXRpb25Db3VudChBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZh
bHVlKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25JdGVyYXRpb25Db3VudChBbmlt
YXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNJ
bml0aWFsVmFsdWUoKSkgewogICAgICAgICBhbmltYXRpb24tPnNldEl0ZXJhdGlvbkNvdW50KEFu
aW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkpOwpAQCAtNDUxMiw3ICs0
NTEyLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25JdGVyYXRpb25Db3Vu
dChBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUKICAgICAgICAgYW5pbWF0aW9uLT5zZXRJ
dGVyYXRpb25Db3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKTsKIH0KIAotdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25OYW1lKEFuaW1hdGlvbiogbGF5ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uTmFtZShBbmlt
YXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc0luaXRp
YWxWYWx1ZSgpKSB7CiAgICAgICAgIGxheWVyLT5zZXROYW1lKEFuaW1hdGlvbjo6aW5pdGlhbEFu
aW1hdGlvbk5hbWUoKSk7CkBAIC00NTI5LDcgKzQ1MjksNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6Om1hcEFuaW1hdGlvbk5hbWUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgICAgICBsYXllci0+c2V0TmFtZShwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7
CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uUGxheVN0YXRlKEFuaW1h
dGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwQW5p
bWF0aW9uUGxheVN0YXRlKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAg
ICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKICAgICAgICAgbGF5ZXItPnNldFBsYXlT
dGF0ZShBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUoKSk7CkBAIC00NTQ0LDcg
KzQ1NDQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvblBsYXlTdGF0ZShB
bmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgbGF5ZXItPnNldFBsYXlTdGF0
ZShwbGF5U3RhdGUpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvblBy
b3BlcnR5KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIFN0eWxl
UmVzb2x2ZXI6Om1hcEFuaW1hdGlvblByb3BlcnR5KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NW
YWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CiAgICAg
ICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFuaW1hdGVBbGwpOwpA
QCAtNDU2OCw3ICs0NTY4LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25Q
cm9wZXJ0eShBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHUKICAgICB9CiB9CiAK
LXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0
aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFw
QW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2
YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKICAgICAgICAgYW5p
bWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25UaW1p
bmdGdW5jdGlvbigpKTsKQEAgLTQ2MTMsNyArNDYxMyw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1Zh
bHVlCiAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVu
Y3Rpb246OmNyZWF0ZSgpKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBOaW5lUGll
Y2VJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVj
ZUltYWdlJiBpbWFnZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1h
Z2UpCiB7CiAgICAgLy8gSWYgd2UncmUgbm90IGEgdmFsdWUgbGlzdCwgdGhlbiB3ZSBhcmUgIm5v
bmUiIGFuZCBkb24ndCBuZWVkIHRvIGFsdGVyIHRoZSBlbXB0eSBpbWFnZSBhdCBhbGwuCiAgICAg
aWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzVmFsdWVMaXN0KCkpCkBAIC00Njc2LDcgKzQ2NzYsNyBA
QCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZQogICAgIH0KIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1h
Z2UmIGltYWdlKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKENT
U1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQogewogICAgIGlmICghdmFsdWUg
fHwgIXZhbHVlLT5pc0JvcmRlckltYWdlU2xpY2VWYWx1ZSgpKQogICAgICAgICByZXR1cm47CkBA
IC00NzA5LDcgKzQ3MDksNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcE5pbmVQaWVjZUlt
YWdlU2xpY2UoQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaQogICAgIGltYWdlLnNl
dEZpbGwoYm9yZGVySW1hZ2VTbGljZS0+bV9maWxsKTsKIH0KIAotTGVuZ3RoQm94IENTU1N0eWxl
U2VsZWN0b3I6Om1hcE5pbmVQaWVjZUltYWdlUXVhZChDU1NWYWx1ZSogdmFsdWUpCitMZW5ndGhC
b3ggU3R5bGVSZXNvbHZlcjo6bWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKiB2YWx1ZSkK
IHsKICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAg
ICByZXR1cm4gTGVuZ3RoQm94KCk7CkBAIC00NzU0LDcgKzQ3NTQsNyBAQCBMZW5ndGhCb3ggQ1NT
U3R5bGVTZWxlY3Rvcjo6bWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICByZXR1cm4gYm94OwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcE5pbmVQaWVjZUlt
YWdlUmVwZWF0KENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQordm9pZCBT
dHlsZVJlc29sdmVyOjptYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSogdmFsdWUsIE5p
bmVQaWVjZUltYWdlJiBpbWFnZSkKIHsKICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQogICAgICAgICByZXR1cm47CkBAIC00ODAyLDcgKzQ4MDIsNyBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6Om1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENTU1ZhbHVlKiB2YWx1
ZSwgTmluZVBpZWNlSW1hZ2UmCiAgICAgaW1hZ2Uuc2V0VmVydGljYWxSdWxlKHZlcnRpY2FsUnVs
ZSk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgp
Cit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKQogewogICAgIGlm
IChtX3N0eWxlLT50ZXh0U2l6ZUFkanVzdCgpKQogICAgICAgICByZXR1cm47CkBAIC00ODEyLDcg
KzQ4MTIsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3Qo
KQogICAgIG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwog
fQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHls
ZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6
Y2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKQogewogICAgIGlmIChzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpID09IHBhcmVudFN0eWxl
LT5lZmZlY3RpdmVab29tKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ4MjMsNyArNDgyMyw3IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiBz
dHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVuCiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihu
ZXdGb250RGVzY3JpcHRpb24pOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrRm9y
R2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdl
KFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
OwogCkBAIC00ODYxLDEzICs0ODYxLDEzIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tG
b3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5CiAgICAg
c3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwogfQogCi12b2lk
IENTU1N0eWxlU2VsZWN0b3I6OnNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBmbG9hdCBzaXplKQordm9pZCBTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZShGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKIHsKICAgICBmb250RGVz
Y3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0
Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKG1fY2hlY2tlci5k
b2N1bWVudCgpLCBtX3N0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUo
KSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKIH0KIAotZmxvYXQgQ1NTU3R5bGVTZWxlY3Rv
cjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBS
ZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNp
emUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKQorZmxvYXQgU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0
ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBSZW5kZXJTdHlsZSog
c3R5bGUsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNl
U1ZHWm9vbVJ1bGVzKQogewogICAgIGZsb2F0IHpvb21GYWN0b3IgPSAxLjBmOwogICAgIGlmICgh
dXNlU1ZHWm9vbVJ1bGVzKSB7CkBAIC00ODc2LDEwICs0ODc2LDEwIEBAIGZsb2F0IENTU1N0eWxl
U2VsZWN0b3I6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiBkb2N1
bWVudCwgUmVuCiAgICAgICAgICAgICB6b29tRmFjdG9yICo9IGZyYW1lLT50ZXh0Wm9vbUZhY3Rv
cigpOwogICAgIH0KIAotICAgIHJldHVybiBDU1NTdHlsZVNlbGVjdG9yOjpnZXRDb21wdXRlZFNp
emVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCwgem9vbUZhY3RvciwgaXNBYnNvbHV0ZVNpemUs
IHNwZWNpZmllZFNpemUpOworICAgIHJldHVybiBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNp
emVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCwgem9vbUZhY3RvciwgaXNBYnNvbHV0ZVNpemUs
IHNwZWNpZmllZFNpemUpOwogfQogCi1mbG9hdCBDU1NTdHlsZVNlbGVjdG9yOjpnZXRDb21wdXRl
ZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIGZsb2F0IHpvb21GYWN0
b3IsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIEVTbWFydE1pbmlt
dW1Gb3JGb250U2l6ZSB1c2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSkKK2Zsb2F0IFN0eWxlUmVz
b2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiBkb2N1bWVu
dCwgZmxvYXQgem9vbUZhY3RvciwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVk
U2l6ZSwgRVNtYXJ0TWluaW11bUZvckZvbnRTaXplIHVzZVNtYXJ0TWluaW11bUZvckZvbnRTaXpl
KQogewogICAgIC8vIFRleHQgd2l0aCBhIDBweCBmb250IHNpemUgc2hvdWxkIG5vdCBiZSB2aXNp
YmxlIGFuZCB0aGVyZWZvcmUgbmVlZHMgdG8gYmUKICAgICAvLyBleGVtcHQgZnJvbSBtaW5pbXVt
IGZvbnQgc2l6ZSBydWxlcy4gQWNpZDMgcmVsaWVzIG9uIHRoaXMgZm9yIHBpeGVsLXBlcmZlY3QK
QEAgLTQ5NjQsNyArNDk2NCw3IEBAIHN0YXRpYyBjb25zdCBpbnQgc3RyaWN0Rm9udFNpemVUYWJs
ZVtmb250U2l6ZVRhYmxlTWF4IC0gZm9udFNpemVUYWJsZU1pbiArIDFdW3RvCiAvLyBmYWN0b3Jz
IGZvciBlYWNoIGtleXdvcmQgdmFsdWUuCiBzdGF0aWMgY29uc3QgZmxvYXQgZm9udFNpemVGYWN0
b3JzW3RvdGFsS2V5d29yZHNdID0geyAwLjYwZiwgMC43NWYsIDAuODlmLCAxLjBmLCAxLjJmLCAx
LjVmLCAyLjBmLCAzLjBmIH07CiAKLWZsb2F0IENTU1N0eWxlU2VsZWN0b3I6OmZvbnRTaXplRm9y
S2V5d29yZChEb2N1bWVudCogZG9jdW1lbnQsIGludCBrZXl3b3JkLCBib29sIHNob3VsZFVzZUZp
eGVkRGVmYXVsdFNpemUpCitmbG9hdCBTdHlsZVJlc29sdmVyOjpmb250U2l6ZUZvcktleXdvcmQo
RG9jdW1lbnQqIGRvY3VtZW50LCBpbnQga2V5d29yZCwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1
bHRTaXplKQogewogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5zZXR0aW5ncygp
OwogICAgIGlmICghc2V0dGluZ3MpCkBAIC00OTk1LDcgKzQ5OTUsNyBAQCBzdGF0aWMgaW50IGZp
bmROZWFyZXN0TGVnYWN5Rm9udFNpemUoaW50IHBpeGVsRm9udFNpemUsIGNvbnN0IFQqIHRhYmxl
LCBpbnQgbXVsdAogICAgIHJldHVybiB0b3RhbEtleXdvcmRzIC0gMTsKIH0KIAotaW50IENTU1N0
eWxlU2VsZWN0b3I6OmxlZ2FjeUZvbnRTaXplKERvY3VtZW50KiBkb2N1bWVudCwgaW50IHBpeGVs
Rm9udFNpemUsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSkKK2ludCBTdHlsZVJlc29s
dmVyOjpsZWdhY3lGb250U2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIGludCBwaXhlbEZvbnRTaXpl
LCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpCiB7CiAgICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7CiAgICAgaWYgKCFzZXR0aW5ncykKQEAgLTUwNDgs
NyArNTA0OCw3IEBAIHN0YXRpYyBDb2xvciBjb2xvckZvckNTU1ZhbHVlKGludCBjc3NWYWx1ZUlk
KQogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUNvbG9yKGNz
c1ZhbHVlSWQpOwogfQogCi1Db2xvciBDU1NTdHlsZVNlbGVjdG9yOjpjb2xvckZyb21QcmltaXRp
dmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGJvb2wgZm9yVmlzaXRlZExpbmspIGNv
bnN0CitDb2xvciBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShDU1NQcmlt
aXRpdmVWYWx1ZSogdmFsdWUsIGJvb2wgZm9yVmlzaXRlZExpbmspIGNvbnN0CiB7CiAgICAgaWYg
KHZhbHVlLT5pc1JHQkNvbG9yKCkpCiAgICAgICAgIHJldHVybiBDb2xvcih2YWx1ZS0+Z2V0UkdC
QTMyVmFsdWUoKSk7CkBAIC01MDcyLDE3ICs1MDcyLDE3IEBAIENvbG9yIENTU1N0eWxlU2VsZWN0
b3I6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9v
bCBmCiAgICAgfQogfQogCi1ib29sIENTU1N0eWxlU2VsZWN0b3I6Omhhc1NlbGVjdG9yRm9yQXR0
cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyAmYXR0cm5hbWUpIGNvbnN0Citib29sIFN0eWxlUmVz
b2x2ZXI6Omhhc1NlbGVjdG9yRm9yQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyAmYXR0cm5h
bWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmNvbnRhaW5z
KGF0dHJuYW1lLmltcGwoKSk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkVmlld3Bv
cnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAqIGV4cHIsIGJv
b2wgcmVzdWx0KQordm9pZCBTdHlsZVJlc29sdmVyOjphZGRWaWV3cG9ydERlcGVuZGVudE1lZGlh
UXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCogZXhwciwgYm9vbCByZXN1bHQpCiB7CiAg
ICAgbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLmFwcGVuZChhZG9wdFB0cihu
ZXcgTWVkaWFRdWVyeVJlc3VsdCgqZXhwciwgcmVzdWx0KSkpOwogfQogCi1ib29sIENTU1N0eWxl
U2VsZWN0b3I6OmFmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgpIGNvbnN0Citib29sIFN0eWxlUmVz
b2x2ZXI6OmFmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQg
cyA9IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5zaXplKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHM7IGkrKykgewpAQCAtNTEyMSw3ICs1MTIxLDcgQEAgc3Rh
dGljIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRUcmFuc2Zvcm1PcGVyYXRp
b25UeXBlKFdlYktpdENTU1RyYW4KICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05F
OwogfQogCi1ib29sIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMo
Q1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RT
dHlsZSwgVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKK2Jvb2wgU3R5bGVSZXNv
bHZlcjo6Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBUcmFuc2Zvcm1PcGVyYXRpb25z
JiBvdXRPcGVyYXRpb25zKQogewogICAgIGlmICghaW5WYWx1ZSB8fCAhaW5WYWx1ZS0+aXNWYWx1
ZUxpc3QoKSkgewogICAgICAgICBvdXRPcGVyYXRpb25zLmNsZWFyKCk7CkBAIC01NDAyLDE0ICs1
NDAyLDE0IEBAIHN0YXRpYyBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3Bl
cmF0aW9uRm9yVHlwZShXZWJLaXRDU1NGaWx0ZXJWYWx1CiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCi1TdHlsZVNoYWRlciogQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVTaGFkZXIoQ1NTVmFs
dWUqIHZhbHVlKQorU3R5bGVTaGFkZXIqIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhZGVyKENTU1Zh
bHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzV2ViS2l0Q1NTU2hhZGVyVmFsdWUoKSkK
ICAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKHN0YXRp
Y19jYXN0PFdlYktpdENTU1NoYWRlclZhbHVlKj4odmFsdWUpKTsKICAgICByZXR1cm4gMDsKIH0K
IAotU3R5bGVTaGFkZXIqIENTU1N0eWxlU2VsZWN0b3I6OmNhY2hlZE9yUGVuZGluZ1N0eWxlU2hh
ZGVyRnJvbVZhbHVlKFdlYktpdENTU1NoYWRlclZhbHVlKiB2YWx1ZSkKK1N0eWxlU2hhZGVyKiBT
dHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShXZWJLaXRD
U1NTaGFkZXJWYWx1ZSogdmFsdWUpCiB7CiAgICAgU3R5bGVTaGFkZXIqIHNoYWRlciA9IHZhbHVl
LT5jYWNoZWRPclBlbmRpbmdTaGFkZXIoKTsKICAgICBpZiAoc2hhZGVyICYmIHNoYWRlci0+aXNQ
ZW5kaW5nU2hhZGVyKCkpCkBAIC01NDE3LDcgKzU0MTcsNyBAQCBTdHlsZVNoYWRlciogQ1NTU3R5
bGVTZWxlY3Rvcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NT
U2hhZAogICAgIHJldHVybiBzaGFkZXI7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bG9h
ZFBlbmRpbmdTaGFkZXJzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJz
KCkKIHsKICAgICBpZiAoIW1fc3R5bGUtPmhhc0ZpbHRlcigpIHx8ICFtX2hhc1BlbmRpbmdTaGFk
ZXJzKQogICAgICAgICByZXR1cm47CkBAIC01NDQ5LDcgKzU0NDksNyBAQCBzdGF0aWMgYm9vbCBz
b3J0UGFyYW1ldGVyc0J5TmFtZUNvbXBhcmF0b3IoY29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBh
cmFtZXRlcj4mCiAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihhLT5uYW1lKCks
IGItPm5hbWUoKSk7CiB9CiAKLVBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBDU1NT
dHlsZVNlbGVjdG9yOjpwYXJzZUN1c3RvbUZpbHRlck51bWJlclBhcmFtdGVyKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgQ1NTVmFsdWVMaXN0KiB2YWx1ZXMpCitQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBh
cmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbXRlcihj
b25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCogdmFsdWVzKQogewogICAgIFJlZlB0cjxD
dXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXI+IG51bWJlclBhcmFtZXRlciA9IEN1c3RvbUZpbHRl
ck51bWJlclBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB2YWx1ZXMtPmxlbmd0aCgpOyArK2kpIHsKQEAgLTU0NjQsNyArNTQ2NCw3IEBAIFBhc3NS
ZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBDU1NTdHlsZVNlbGVjdG9yOjpwYXJzZUN1c3Rv
bUZpbHRlck51bWJlclBhcmFtCiAgICAgcmV0dXJuIG51bWJlclBhcmFtZXRlci5yZWxlYXNlKCk7
CiB9CiAKLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJM
aXN0KENTU1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUsIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3Qm
IHBhcmFtZXRlckxpc3QpCitib29sIFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyTGlzdChDU1NWYWx1ZSogcGFyYW1ldGVyc1ZhbHVlLCBDdXN0b21GaWx0ZXJQYXJhbWV0
ZXJMaXN0JiBwYXJhbWV0ZXJMaXN0KQogewogICAgIEhhc2hTZXQ8U3RyaW5nPiBrbm93blBhcmFt
ZXRlck5hbWVzOwogICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIHBhcmFtZXRlckl0ZXJhdG9yKHBh
cmFtZXRlcnNWYWx1ZSk7CkBAIC01NTI2LDcgKzU1MjYsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0
b3I6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChDU1NWYWx1ZSogcGFyYW1ldGVyc1Zh
bHVlLAogICAgIHJldHVybiB0cnVlOwogfQogCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJh
dGlvbj4gQ1NTU3R5bGVTZWxlY3Rvcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFdlYktp
dENTU0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSkKK1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3Bl
cmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViS2l0
Q1NTRmlsdGVyVmFsdWUqIGZpbHRlclZhbHVlKQogewogICAgIEFTU0VSVChmaWx0ZXJWYWx1ZS0+
bGVuZ3RoKCkpOwogCkBAIC01NjEwLDcgKzU2MTAsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRl
ck9wZXJhdGlvbj4gQ1NTU3R5bGVTZWxlY3Rvcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
KAogfQogI2VuZGlmCiAKLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y3JlYXRlRmlsdGVyT3BlcmF0
aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSog
cm9vdFN0eWxlLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKQorYm9vbCBTdHlsZVJl
c29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJT
dHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91
dE9wZXJhdGlvbnMpCiB7CiAgICAgQVNTRVJUKG91dE9wZXJhdGlvbnMuaXNFbXB0eSgpKTsKICAg
ICAKQEAgLTU3NDYsNyArNTc0Niw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y3JlYXRlRmls
dGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0CiAKICNlbmRp
ZgogCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1N0eWxlU2VsZWN0b3I6OmxvYWRQZW5kaW5n
SW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqIHBlbmRpbmdJbWFnZSkKK1Bhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSog
cGVuZGluZ0ltYWdlKQogewogICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJj
ZUxvYWRlciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsK
IApAQCAtNTc3MSw3ICs1NzcxLDcgQEAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBDU1NTdHlsZVNl
bGVjdG9yOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW4KICAgICByZXR1
cm4gMDsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpsb2FkUGVuZGluZ0ltYWdlcygpCit2
b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKIHsKICAgICBpZiAobV9wZW5k
aW5nSW1hZ2VQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKaW5kZXggMDcwNjZhMGM0YzRmZGM0ZmY4MzliMDQ1NTBh
NDQ5MTU3ZGRmYzYxNS4uOGNiMmFlMWJlMjFhNGU0NjllMjZmMGQ3MzY3YmJhNDE0YzgzNmQ5MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCkBAIC0xMTgsMTEgKzExOCwxMSBA
QCBlbnVtIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIHsKIH07CiAKIC8vIFRoaXMgY2xhc3Mgc2VsZWN0
cyBhIFJlbmRlclN0eWxlIGZvciBhIGdpdmVuIGVsZW1lbnQgYmFzZWQgb24gYSBjb2xsZWN0aW9u
IG9mIHN0eWxlc2hlZXRzLgotY2xhc3MgQ1NTU3R5bGVTZWxlY3RvciB7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ1NTU3R5bGVTZWxlY3Rvcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
Y2xhc3MgU3R5bGVSZXNvbHZlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3R5bGVSZXNv
bHZlcik7V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgQ1NTU3R5bGVTZWxl
Y3RvcihEb2N1bWVudCosIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKTsKLSAgICB+Q1NT
U3R5bGVTZWxlY3RvcigpOworICAgIFN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqLCBib29sIG1hdGNo
QXV0aG9yQW5kVXNlclN0eWxlcyk7CisgICAgflN0eWxlUmVzb2x2ZXIoKTsKIAogICAgIC8vIFVz
aW5nIHRoZXNlIGR1cmluZyB0cmVlIHdhbGsgd2lsbCBhbGxvdyBzdHlsZSBzZWxlY3RvciB0byBv
cHRpbWl6ZSBjaGlsZCBhbmQgZGVzY2VuZGFudCBzZWxlY3RvciBsb29rdXBzLgogICAgIHZvaWQg
cHVzaFBhcmVudEVsZW1lbnQoRWxlbWVudCopOwpAQCAtMjc0LDcgKzI3NCw3IEBAIHB1YmxpYzoK
ICAgICBzdHJ1Y3QgRmVhdHVyZXMgewogICAgICAgICBGZWF0dXJlcygpOwogICAgICAgICB+RmVh
dHVyZXMoKTsKLSAgICAgICAgdm9pZCBhZGQoY29uc3QgQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVy
ZXMmKTsKKyAgICAgICAgdm9pZCBhZGQoY29uc3QgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXMmKTsK
ICAgICAgICAgdm9pZCBjbGVhcigpOwogICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwq
PiBpZHNJblJ1bGVzOwogICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBhdHRyc0lu
UnVsZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKaW5kZXgg
NzNkMjQzZmUwNzFiMzMwNzZhYjdmMThiYmViMWFiOWIxM2VmNzI2MS4uOGU1N2NkOTJiMDUyOGUz
NjM5NWEyOGVjODA3YzllNmY5ZmNhN2ZkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1
ZXJ5RXZhbHVhdG9yLmNwcApAQCAtMTMwLDcgKzEzMCw3IEBAIHN0YXRpYyBib29sIGFwcGx5UmVz
dHJpY3RvcihNZWRpYVF1ZXJ5OjpSZXN0cmljdG9yIHIsIGJvb2wgdmFsdWUpCiAgICAgcmV0dXJu
IHIgPT0gTWVkaWFRdWVyeTo6Tm90ID8gIXZhbHVlIDogdmFsdWU7CiB9CiAKLWJvb2wgTWVkaWFR
dWVyeUV2YWx1YXRvcjo6ZXZhbChjb25zdCBNZWRpYVF1ZXJ5U2V0KiBxdWVyeVNldCwgQ1NTU3R5
bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcikgY29uc3QKK2Jvb2wgTWVkaWFRdWVyeUV2YWx1YXRv
cjo6ZXZhbChjb25zdCBNZWRpYVF1ZXJ5U2V0KiBxdWVyeVNldCwgU3R5bGVSZXNvbHZlciogc3R5
bGVTZWxlY3RvcikgY29uc3QKIHsKICAgICBpZiAoIXF1ZXJ5U2V0KQogICAgICAgICByZXR1cm4g
dHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCmluZGV4IDI2Yjcy
Mzg5NjU0ZjI4MTk2NmUxZjk2YjdjNDkyZDRiNjgyMjhiMDguLjllZWUwZjAyMGYyODljYzcxM2I5
MzA1YThiZTdjMGEyYTdlYWVmM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRp
YVF1ZXJ5RXZhbHVhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFs
dWF0b3IuaApAQCAtMzEsMTEgKzMxLDExIEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQ1NTU3R5bGVTZWxlY3RvcjsKIGNsYXNzIEZy
YW1lOwotY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBNZWRpYVF1ZXJ5RXhwOwogY2xhc3MgTWVk
aWFRdWVyeVNldDsKK2NsYXNzIFJlbmRlclN0eWxlOworY2xhc3MgU3R5bGVSZXNvbHZlcjsKIAog
LyoqCiAgKiBDbGFzcyB0aGF0IGV2YWx1YXRlcyBjc3MgbWVkaWEgcXVlcmllcyBhcyBkZWZpbmVk
IGluCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICBib29sIG1lZGlhVHlwZU1hdGNoU3Bl
Y2lmaWMoY29uc3QgY2hhciogbWVkaWFUeXBlVG9NYXRjaCkgY29uc3Q7CiAKICAgICAvKiogRXZh
bHVhdGVzIGEgbGlzdCBvZiBtZWRpYSBxdWVyaWVzICovCi0gICAgYm9vbCBldmFsKGNvbnN0IE1l
ZGlhUXVlcnlTZXQqLCBDU1NTdHlsZVNlbGVjdG9yKiA9IDApIGNvbnN0OworICAgIGJvb2wgZXZh
bChjb25zdCBNZWRpYVF1ZXJ5U2V0KiwgU3R5bGVSZXNvbHZlciogPSAwKSBjb25zdDsKIAogICAg
IC8qKiBFdmFsdWF0ZXMgbWVkaWEgcXVlcnkgc3ViZXhwcmVzc2lvbiwgaWUgImFuZCAobWVkaWEt
ZmVhdHVyZTogdmFsdWUpIiBwYXJ0ICovCiAgICAgYm9vbCBldmFsKGNvbnN0IE1lZGlhUXVlcnlF
eHAqKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0
Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwCmluZGV4
IDM2M2JhMjFiZDFlZGMyMmY3NzdiYWE2MDAwOGUwYjgwZGVlNGU3MTYuLmVlZjBiOTA5MmEyNDM1
OThjYTlmMTI1MDUxOGM2ODgwMjFkYTJkMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVl
cnlNYXRjaGVyLmNwcApAQCAtODQsNyArODQsNyBAQCBQYXNzT3duUHRyPE1lZGlhUXVlcnlFdmFs
dWF0b3I+IE1lZGlhUXVlcnlNYXRjaGVyOjpwcmVwYXJlRXZhbHVhdG9yKCkgY29uc3QKICAgICBp
ZiAoIWRvY3VtZW50RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBDU1NT
dHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yID0gbV9kb2N1bWVudC0+c3R5bGVTZWxlY3Rvcigp
OworICAgIFN0eWxlUmVzb2x2ZXIqIHN0eWxlU2VsZWN0b3IgPSBtX2RvY3VtZW50LT5zdHlsZVNl
bGVjdG9yKCk7CiAgICAgaWYgKCFzdHlsZVNlbGVjdG9yKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDY4
MmUzNGY0ZWI4MGI5OWU0ZjY0MzkwZDczMTc5ZTg3NmM4ODY2ODYuLmQ3YzZhZDYwOWMxMWEyNzI1
MmIzODE5NDcyNWRjYTY5NjVkNmQ5N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
VkdDU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5
bGVTZWxlY3Rvci5jcHAKQEAgLTEwMiw3ICsxMDIsNyBAQCBzdGF0aWMgQ29sb3IgY29sb3JGcm9t
U1ZHQ29sb3JDU1NWYWx1ZShTVkdDb2xvciogc3ZnQ29sb3IsIGNvbnN0IENvbG9yJiBmZ0NvbG9y
KQogICAgIHJldHVybiBjb2xvcjsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVNW
R1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiB7CiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSAwOwpAQCAtNTk2LDcgKzU5Niw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgIH0KICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIElmIHlvdSBjcmFzaCBoZXJl
LCBpdCdzIGJlY2F1c2UgeW91IGFkZGVkIGEgY3NzIHByb3BlcnR5IGFuZCBhcmUgbm90IGhhbmRs
aW5nIGl0Ci0gICAgICAgICAgICAvLyBpbiBlaXRoZXIgdGhpcyBzd2l0Y2ggc3RhdGVtZW50IG9y
IHRoZSBvbmUgaW4gQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eQorICAgICAgICAgICAg
Ly8gaW4gZWl0aGVyIHRoaXMgc3dpdGNoIHN0YXRlbWVudCBvciB0aGUgb25lIGluIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHkKICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoMCwg
InVuaW1wbGVtZW50ZWQgcHJvcGVydHlJRDogJWQiLCBpZCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcAppbmRleCBkYjc4NDVmODNmOTE0
ZDdlYzMxMmM2YTU1Y2E1NTE3YjdiYTFjMjRiLi5lNDIzMWY3MTc2Y2NiOGVhYTU5NzhiYWI2YTQ0
ZjIxMmYzMjczMDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcApAQCAtNTMsNyAr
NTMsNyBAQCBjbGFzcyBBcHBseVByb3BlcnR5RXhwYW5kaW5nIHsKIHB1YmxpYzoKIAogICAgIHRl
bXBsYXRlIDxDU1NQcm9wZXJ0eUlEIGlkPgotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUlu
aGVyaXRWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvcikKKyAgICBzdGF0aWMgaW5saW5l
IHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IpCiAgICAgewog
ICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5o
ZXJpdFZhbHVlKHNlbGVjdG9yKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVy
aXRWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvcikKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvcikKICAgICB7CiAgICAgICAgIGFw
cGx5SW5oZXJpdFZhbHVlPG9uZT4oc2VsZWN0b3IpOwogICAgICAgICBhcHBseUluaGVyaXRWYWx1
ZTx0d28+KHNlbGVjdG9yKTsKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIH0KIAogICAg
IHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIGlkPgotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBs
eUluaXRpYWxWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvcikKKyAgICBzdGF0aWMgaW5s
aW5lIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IpCiAgICAg
ewogICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBoYW5kbGVyLmFwcGx5
SW5pdGlhbFZhbHVlKHNlbGVjdG9yKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvcikKKyAgICBzdGF0aWMgdm9pZCBh
cHBseUluaXRpYWxWYWx1ZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvcikKICAgICB7CiAgICAgICAg
IGFwcGx5SW5pdGlhbFZhbHVlPG9uZT4oc2VsZWN0b3IpOwogICAgICAgICBhcHBseUluaXRpYWxW
YWx1ZTx0d28+KHNlbGVjdG9yKTsKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIGlkPgotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBh
cHBseVZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBDU1NWYWx1ZSogdmFsdWUpCisg
ICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3Is
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUlu
dmFsaWQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKHNlbGVjdG9yLCB2YWx1ZSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rvciwg
Q1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZl
ciogc2VsZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghZXhwYW5k
VmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjYsOSArMTI2LDkgQEAgcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgU2V0dGVyVHlwZSB2
YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CiAgICAgc3RhdGljIEdl
dHRlclR5cGUgdmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPipnZXR0
ZXJGdW5jdGlvbikoKTsgfQogICAgIHN0YXRpYyBJbml0aWFsVHlwZSBpbml0aWFsKCkgeyByZXR1
cm4gKCppbml0aWFsRnVuY3Rpb24pKCk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvcikgeyBzZXRWYWx1ZShzZWxlY3Rvci0+c3R5
bGUoKSwgdmFsdWUoc2VsZWN0b3ItPnBhcmVudFN0eWxlKCkpKTsgfQotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5pdGlhbFZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yKSB7IHNldFZhbHVl
KHNlbGVjdG9yLT5zdHlsZSgpLCBpbml0aWFsKCkpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NTdHlsZVNlbGVjdG9yKiwgQ1NTVmFsdWUqKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBh
cHBseUluaGVyaXRWYWx1ZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvcikgeyBzZXRWYWx1ZShzZWxl
Y3Rvci0+c3R5bGUoKSwgdmFsdWUoc2VsZWN0b3ItPnBhcmVudFN0eWxlKCkpKTsgfQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yKSB7IHNl
dFZhbHVlKHNlbGVjdG9yLT5zdHlsZSgpLCBpbml0aWFsKCkpOyB9CisgICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShTdHlsZVJlc29sdmVyKiwgQ1NTVmFsdWUqKSB7IH0KICAgICBzdGF0aWMgUHJv
cGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFw
cGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQogfTsK
IApAQCAtMTM2LDcgKzEzNiw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBHZXR0ZXJUeXBlLCBHZXR0
ZXJUeXBlIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0CiBjbGFzcyBBcHBs
eVByb3BlcnR5RGVmYXVsdCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0
aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1N0eWxlU2VsZWN0
b3IqIHNlbGVjdG9yLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAg
ICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICBzZXRWYWx1ZShz
ZWxlY3Rvci0+c3R5bGUoKSwgKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUp
KTsKQEAgLTE1Miw3ICsxNTIsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTnVtYmVyVHlwZSwgTnVt
YmVyVHlwZSAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdAogY2xhc3MgQXBw
bHlQcm9wZXJ0eU51bWJlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBOdW1iZXJUeXBlIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0
aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1N0eWxlU2VsZWN0
b3IqIHNlbGVjdG9yLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAg
ICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMTczLDcgKzE3Myw3IEBAIHB1YmxpYzoKIHRlbXBsYXRlIDxTdHlsZUltYWdlKiAoUmVuZGVy
U3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0
ZXJGdW5jdGlvbikoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiksIFN0eWxlSW1hZ2UqICgqaW5pdGlh
bEZ1bmN0aW9uKSgpLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5PgogY2xhc3MgQXBwbHlQcm9wZXJ0
eVN0eWxlSW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTU3R5
bGVTZWxlY3Rvciogc2VsZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc2VsZWN0b3ItPnN0eWxl
KCktPipzZXR0ZXJGdW5jdGlvbikoc2VsZWN0b3ItPnN0eWxlSW1hZ2UocHJvcGVydHksIHZhbHVl
KSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9y
LCBDU1NWYWx1ZSogdmFsdWUpIHsgKHNlbGVjdG9yLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24p
KHNlbGVjdG9yLT5zdHlsZUltYWdlKHByb3BlcnR5LCB2YWx1ZSkpOyB9CiAgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CiAgICAgICAgIFByb3BlcnR5SGFu
ZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPFN0eWxlSW1hZ2UqLCBnZXR0
ZXJGdW5jdGlvbiwgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiwgc2V0dGVyRnVuY3Rpb24sIFN0eWxl
SW1hZ2UqLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7CkBAIC0xOTAsNyArMTkw
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGhhc0F1dG8oUmVuZGVyU3R5bGUqIHN0eWxl
KSB7IHJldHVybiAoc3R5bGUtPipoYXNBdXRvRnVuY3Rpb24pKCk7IH0KICAgICBzdGF0aWMgdm9p
ZCBzZXRBdXRvKFJlbmRlclN0eWxlKiBzdHlsZSkgeyAoc3R5bGUtPipzZXRBdXRvRnVuY3Rpb24p
KCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1N0eWxlU2VsZWN0
b3IqIHNlbGVjdG9yKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKFN0eWxlUmVz
b2x2ZXIqIHNlbGVjdG9yKQogICAgIHsKICAgICAgICAgaWYgKGhhc0F1dG8oc2VsZWN0b3ItPnBh
cmVudFN0eWxlKCkpKQogICAgICAgICAgICAgc2V0QXV0byhzZWxlY3Rvci0+c3R5bGUoKSk7CkBA
IC0xOTgsOSArMTk4LDkgQEAgcHVibGljOgogICAgICAgICAgICAgc2V0VmFsdWUoc2VsZWN0b3It
PnN0eWxlKCksIHZhbHVlKHNlbGVjdG9yLT5wYXJlbnRTdHlsZSgpKSk7CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3Ip
IHsgc2V0QXV0byhzZWxlY3Rvci0+c3R5bGUoKSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxWYWx1ZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvcikgeyBzZXRBdXRvKHNlbGVjdG9yLT5z
dHlsZSgpKTsgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
U3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTIxOSwxMiArMjE5LDEyIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUNsaXAgewog
cHJpdmF0ZToKLSAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0xlbmd0aChDU1NTdHlsZVNlbGVj
dG9yKiBzZWxlY3RvciwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyBMZW5n
dGggY29udmVydFRvTGVuZ3RoKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBDU1NQcmltaXRpdmVW
YWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICByZXR1cm4gdmFsdWUtPmNvbnZlcnRUb0xlbmd0
aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBGcmFjdGlvbkNv
bnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc2VsZWN0b3ItPnN0eWxlKCksIHNlbGVjdG9yLT5y
b290RWxlbWVudFN0eWxlKCksIHNlbGVjdG9yLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwog
ICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NTdHls
ZVNlbGVjdG9yKiBzZWxlY3RvcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShT
dHlsZVJlc29sdmVyKiBzZWxlY3RvcikKICAgICB7CiAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSA9IHNlbGVjdG9yLT5wYXJlbnRTdHlsZSgpOwogICAgICAgICBpZiAoIXBhcmVudFN0
eWxlLT5oYXNDbGlwKCkpCkBAIC0yMzMsMTMgKzIzMywxMyBAQCBwdWJsaWM6CiAgICAgICAgIHNl
bGVjdG9yLT5zdHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yKQogICAg
IHsKICAgICAgICAgc2VsZWN0b3ItPnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgp
LCBMZW5ndGgoKSwgTGVuZ3RoKCkpOwogICAgICAgICBzZWxlY3Rvci0+c3R5bGUoKS0+c2V0SGFz
Q2xpcChmYWxzZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NTdHls
ZVNlbGVjdG9yKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTI3MywxOSArMjczLDE5IEBAIHRlbXBsYXRlIDxDb2xvckluaGVyaXQgaW5oZXJp
dENvbG9yRnJvbVBhcmVudCwKICAgICAgICAgICBDb2xvciAoKmluaXRpYWxGdW5jdGlvbikoKSA9
ICZkZWZhdWx0SW5pdGlhbENvbG9yPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUNvbG9yIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShTdHlsZVJlc29sdmVy
KiBzZWxlY3RvcikKICAgICB7CiAgICAgICAgIC8vIFZpc2l0ZWQgbGluayBzdHlsZSBjYW4gbmV2
ZXIgZXhwbGljaXRseSBpbmhlcml0IGZyb20gcGFyZW50IHZpc2l0ZWQgbGluayBzdHlsZSBzbyBu
byBzZXBhcmF0ZSBnZXR0ZXJzIGFyZSBuZWVkZWQuCiAgICAgICAgIENvbG9yIGNvbG9yID0gKHNl
bGVjdG9yLT5wYXJlbnRTdHlsZSgpLT4qZ2V0dGVyRnVuY3Rpb24pKCk7CiAgICAgICAgIGFwcGx5
Q29sb3JWYWx1ZShzZWxlY3RvciwgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiAoc2VsZWN0b3It
PnBhcmVudFN0eWxlKCktPipkZWZhdWx0RnVuY3Rpb24pKCkpOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yKQog
ICAgIHsKICAgICAgICAgYXBwbHlDb2xvclZhbHVlKHNlbGVjdG9yLCBpbml0aWFsRnVuY3Rpb24o
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
U3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTMwMSw3ICszMDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUNvbG9yVmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IENv
bG9yJiBjb2xvcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUNvbG9yVmFsdWUoU3R5bGVSZXNvbHZl
ciogc2VsZWN0b3IsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICB7CiAgICAgICAgIGlmIChzZWxl
Y3Rvci0+YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCiAgICAgICAgICAgICAoc2VsZWN0
b3ItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoY29sb3IpOwpAQCAtMzE1LDcgKzMxNSw3IEBA
IHB1YmxpYzoKIHRlbXBsYXRlIDxUZXh0RGlyZWN0aW9uIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1
bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShUZXh0
RGlyZWN0aW9uKSwgVGV4dERpcmVjdGlvbiAoKmluaXRpYWxGdW5jdGlvbikoKT4KIGNsYXNzIEFw
cGx5UHJvcGVydHlEaXJlY3Rpb24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgewogICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxUZXh0RGlyZWN0aW9uLCBn
ZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgc2V0dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rp
b24sIGluaXRpYWxGdW5jdGlvbj46OmFwcGx5VmFsdWUoc2VsZWN0b3IsIHZhbHVlKTsKICAgICAg
ICAgRWxlbWVudCogZWxlbWVudCA9IHNlbGVjdG9yLT5lbGVtZW50KCk7CkBAIC0zNDYsNyArMzQ2
LDcgQEAgdGVtcGxhdGUgPExlbmd0aCAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBj
b25zdCwKIGNsYXNzIEFwcGx5UHJvcGVydHlMZW5ndGggewogcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgTGVuZ3RoIHZhbHVlKSB7IChzdHlsZS0+
KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMzg5LDcgKzM4OSw3IEBAIHRlbXBsYXRlIDxTdHJpbmdJZGVudEJlaGF2
aW9yIGlkZW50QmVoYXZpb3IsIGNvbnN0IEF0b21pY1N0cmluZyYgKFJlbmRlclN0eWxlOjoqCiBj
bGFzcyBBcHBseVByb3BlcnR5U3RyaW5nIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRW
YWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpIHsgKHN0
eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC00MTEsNyArNDExLDcgQEAgdGVtcGxhdGUgPExlbmd0aFNpemUg
KFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxl
OjoKIGNsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJSYWRpdXMgewogcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgTGVuZ3RoU2l6ZSB2YWx1ZSkgeyAo
c3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTQ4NCwxMCArNDg0LDEwIEBAIHRlbXBsYXRlIDx0eXBlbmFt
ZSBULAogICAgICAgICAgIHZvaWQgKEZpbGxMYXllcjo6KnNldEZ1bmN0aW9uKSh0eXBlbmFtZSBG
aWxsTGF5ZXJBY2Nlc3NvclR5cGVzPFQ+OjpTZXR0ZXIpLAogICAgICAgICAgIHZvaWQgKEZpbGxM
YXllcjo6KmNsZWFyRnVuY3Rpb24pKCksCiAgICAgICAgICAgdHlwZW5hbWUgRmlsbExheWVyQWNj
ZXNzb3JUeXBlczxUPjo6R2V0dGVyICgqaW5pdGlhbEZ1bmN0aW9uKShFRmlsbExheWVyVHlwZSks
Ci0gICAgICAgICAgdm9pZCAoQ1NTU3R5bGVTZWxlY3Rvcjo6Km1hcEZpbGxGdW5jdGlvbikoQ1NT
UHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKT4KKyAgICAgICAgICB2b2lkIChTdHls
ZVJlc29sdmVyOjoqbWFwRmlsbEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBD
U1NWYWx1ZSopPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUZpbGxMYXllciB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3Ip
CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0
b3IpCiAgICAgewogICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzZWxlY3Rvci0+c3R5
bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwogICAgICAgICBGaWxsTGF5ZXIqIHByZXZD
aGlsZCA9IDA7CkBAIC01MTEsNyArNTExLDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2Vs
ZWN0b3IpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoU3R5bGVSZXNvbHZlciog
c2VsZWN0b3IpCiAgICAgewogICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzZWxlY3Rv
ci0+c3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwogICAgICAgICAoY3VyckNoaWxk
LT4qc2V0RnVuY3Rpb24pKCgqaW5pdGlhbEZ1bmN0aW9uKShmaWxsTGF5ZXJUeXBlKSk7CkBAIC01
MTksNyArNTE5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgKGN1cnJDaGlsZC0+KmNsZWFyRnVu
Y3Rpb24pKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NTdHlsZVNl
bGVjdG9yKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0gKHNlbGVjdG9yLT5zdHlsZSgpLT4qYWNjZXNz
TGF5ZXJzRnVuY3Rpb24pKCk7CiAgICAgICAgIEZpbGxMYXllciogcHJldkNoaWxkID0gMDsKQEAg
LTU2Nyw3ICs1NjcsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwKIGNsYXNzIEFwcGx5UHJvcGVy
dHlDb21wdXRlTGVuZ3RoIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5k
ZXJTdHlsZSogc3R5bGUsIFQgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVl
KTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0
b3IsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVz
b2x2ZXIqIHNlbGVjdG9yLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICAvLyBub3Rl
OiBDU1NQcm9wZXJ0eUxldHRlci9Xb3JkU3BhY2luZyByaWdodCBub3cgc2V0cyB0byB6ZXJvIGlm
IGl0J3Mgbm90IGEgcHJpbWl0aXZlIHZhbHVlIGZvciBzb21lIHJlYXNvbi4uLgogICAgICAgICBp
ZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCkBAIC02MDUsMjEgKzYwNSwyMSBAQCBwdWJs
aWM6CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVCAoRm9udERlc2NyaXB0aW9uOjoqZ2V0dGVyRnVu
Y3Rpb24pKCkgY29uc3QsIHZvaWQgKEZvbnREZXNjcmlwdGlvbjo6KnNldHRlckZ1bmN0aW9uKShU
KSwgVCBpbml0aWFsVmFsdWU+CiBjbGFzcyBBcHBseVByb3BlcnR5Rm9udCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0
b3IpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5bGVSZXNvbHZlciogc2Vs
ZWN0b3IpCiAgICAgewogICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0g
c2VsZWN0b3ItPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAoZm9udERlc2NyaXB0aW9uLipz
ZXR0ZXJGdW5jdGlvbikoKHNlbGVjdG9yLT5wYXJlbnRGb250RGVzY3JpcHRpb24oKS4qZ2V0dGVy
RnVuY3Rpb24pKCkpOwogICAgICAgICBzZWxlY3Rvci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUo
Q1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFs
VmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IpCiAgICAgewogICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc2VsZWN0b3ItPmZvbnREZXNjcmlwdGlvbigpOwogICAg
ICAgICAoZm9udERlc2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoaW5pdGlhbFZhbHVlKTsKICAg
ICAgICAgc2VsZWN0b3ItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0
b3IsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVz
b2x2ZXIqIHNlbGVjdG9yLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC02NTEsNyAr
NjUxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNpemUgLyAxLjJmOwogICAgIH0KIHB1
YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShTdHlsZVJlc29s
dmVyKiBzZWxlY3RvcikKICAgICB7CiAgICAgICAgIGZsb2F0IHNpemUgPSBzZWxlY3Rvci0+cGFy
ZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOwogCkBAIC02NjUs
NyArNjY1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IpCiAg
ICAgewogICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc2VsZWN0b3It
PnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBmbG9hdCBzaXplID0gc2VsZWN0
b3ItPmZvbnRTaXplRm9yS2V5d29yZChzZWxlY3Rvci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRp
dW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpOwpAQCAtNjc5LDcgKzY3
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC03NTAsNyArNzUwLDcgQEAgcHVibGljOgogCiBj
bGFzcyBBcHBseVByb3BlcnR5Rm9udFdlaWdodCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTc4MCw3ICs3ODAsNyBAQCBwdWJsaWM6CiAKIGNs
YXNzIEFwcGx5UHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJlcyB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3Ip
CiAgICAgewogICAgICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlw
dGlvbiA9IHNlbGVjdG9yLT5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHNlbGVjdG9yLT5mb250RGVzY3JpcHRpb24oKTsK
QEAgLTc5Miw3ICs3OTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHNlbGVjdG9yLT5zZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaXRpYWxWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvcikKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaXRpYWxWYWx1ZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvcikKICAgICB7CiAgICAg
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzZWxlY3Rvci0+Zm9udERlc2Ny
aXB0aW9uKCk7CiAKQEAgLTgwMyw3ICs4MDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHNlbGVjdG9y
LT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBDU1NWYWx1ZSog
dmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShTdHlsZVJlc29sdmVyKiBzZWxlY3Rv
ciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpMaWdh
dHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFs
TGlnYXR1cmVzU3RhdGU7CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUg
ZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdh
dHVyZXNTdGF0ZTsKQEAgLTg2OSw3ICs4NjksNyBAQCB0ZW1wbGF0ZSA8Qm9yZGVySW1hZ2VUeXBl
IGJvcmRlckltYWdlVHlwZSwKICAgICAgICAgICB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1
bmN0aW9uKShjb25zdCBOaW5lUGllY2VJbWFnZSYpPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUJvcmRl
ckltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1N0eWxlU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAg
ICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2U7CiAgICAgICAgIGlmIChib3JkZXJJbWFnZVR5cGUg
PT0gTWFzaykKQEAgLTg5Miw3ICs4OTIsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBpbmxpbmUg
Y29uc3QgTmluZVBpZWNlSW1hZ2UmIGdldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1
cm4gdHlwZSA9PSBJbWFnZSA/IHN0eWxlLT5ib3JkZXJJbWFnZSgpIDogc3R5bGUtPm1hc2tCb3hJ
bWFnZSgpOyB9CiAgICAgc3RhdGljIGlubGluZSB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgTmluZVBpZWNlSW1hZ2UmIHZhbHVlKSB7IHJldHVybiB0eXBlID09IEltYWdl
ID8gc3R5bGUtPnNldEJvcmRlckltYWdlKHZhbHVlKSA6IHN0eWxlLT5zZXRNYXNrQm94SW1hZ2Uo
dmFsdWUpOyB9CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NT
U3R5bGVTZWxlY3Rvciogc2VsZWN0b3IpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IpCiAgICAgewogICAgICAgICBOaW5lUGllY2VJbWFn
ZSBpbWFnZShnZXRWYWx1ZShzZWxlY3Rvci0+c3R5bGUoKSkpOwogICAgICAgICBzd2l0Y2ggKG1v
ZGlmaWVyKSB7CkBAIC05MTIsNyArOTEyLDcgQEAgcHVibGljOgogICAgICAgICBzZXRWYWx1ZShz
ZWxlY3Rvci0+c3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5pdGlhbFZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yKQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5pdGlhbFZhbHVlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yKQogICAgIHsKICAgICAg
ICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc2VsZWN0b3ItPnN0eWxlKCkpKTsKICAg
ICAgICAgc3dpdGNoIChtb2RpZmllcikgewpAQCAtOTM2LDcgKzkzNiw3IEBAIHB1YmxpYzoKICAg
ICAgICAgc2V0VmFsdWUoc2VsZWN0b3ItPnN0eWxlKCksIGltYWdlKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBDU1NWYWx1
ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShTdHlsZVJlc29sdmVyKiBzZWxl
Y3RvciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1h
Z2UoZ2V0VmFsdWUoc2VsZWN0b3ItPnN0eWxlKCkpKTsKICAgICAgICAgc3dpdGNoIChtb2RpZmll
cikgewpAQCAtOTYyLDcgKzk2Miw3IEBAIHB1YmxpYzoKIHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlE
IGlkLCBTdHlsZUltYWdlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwg
dm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiksIFN0eWxlSW1hZ2UqICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgogY2xhc3MgQXBwbHlQcm9wZXJ0
eUJvcmRlckltYWdlU291cmNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHNlbGVjdG9y
LT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHNlbGVjdG9yLT5zdHlsZUltYWdlKGlkLCB2YWx1
ZSkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShTdHlsZVJlc29sdmVyKiBzZWxlY3Rv
ciwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzZWxlY3Rvci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9u
KShzZWxlY3Rvci0+c3R5bGVJbWFnZShpZCwgdmFsdWUpKTsgfQogICAgIHN0YXRpYyBQcm9wZXJ0
eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewogICAgICAgICBQcm9wZXJ0eUhhbmRsZXIg
aGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxTdHlsZUltYWdlKiwgZ2V0dGVyRnVu
Y3Rpb24sIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4sIHNldHRlckZ1bmN0aW9uLCBTdHlsZUltYWdl
KiwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOwpAQCAtOTc0LDggKzk3NCw4IEBA
IGVudW0gQ291bnRlckJlaGF2aW9yIHtJbmNyZW1lbnQgPSAwLCBSZXNldH07CiB0ZW1wbGF0ZSA8
Q291bnRlckJlaGF2aW9yIGNvdW50ZXJCZWhhdmlvcj4KIGNsYXNzIEFwcGx5UHJvcGVydHlDb3Vu
dGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBlbXB0eUZ1bmN0aW9uKENTU1N0eWxlU2Vs
ZWN0b3IqKSB7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NTdHlsZVNl
bGVjdG9yKiBzZWxlY3RvcikKKyAgICBzdGF0aWMgdm9pZCBlbXB0eUZ1bmN0aW9uKFN0eWxlUmVz
b2x2ZXIqKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShTdHlsZVJlc29s
dmVyKiBzZWxlY3RvcikKICAgICB7CiAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIG1hcCA9
IHNlbGVjdG9yLT5zdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwogICAgICAgICBD
b3VudGVyRGlyZWN0aXZlTWFwJiBwYXJlbnRNYXAgPSBzZWxlY3Rvci0+cGFyZW50U3R5bGUoKS0+
YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKQEAgLTEwMDIsNyArMTAwMiw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTEwNTMsMTkgKzEwNTMsMTkgQEAgcHVibGljOgogCiBjbGFzcyBBcHBs
eVByb3BlcnR5Q3Vyc29yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aGVyaXRWYWx1ZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvcikKICAgICB7CiAgICAgICAgIHNlbGVj
dG9yLT5zdHlsZSgpLT5zZXRDdXJzb3Ioc2VsZWN0b3ItPnBhcmVudFN0eWxlKCktPmN1cnNvcigp
KTsKICAgICAgICAgc2VsZWN0b3ItPnN0eWxlKCktPnNldEN1cnNvckxpc3Qoc2VsZWN0b3ItPnBh
cmVudFN0eWxlKCktPmN1cnNvcnMoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bml0aWFsVmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IpCisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IpCiAgICAgewogICAgICAg
ICBzZWxlY3Rvci0+c3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7CiAgICAgICAgIHNlbGVjdG9y
LT5zdHlsZSgpLT5zZXRDdXJzb3IoUmVuZGVyU3R5bGU6OmluaXRpYWxDdXJzb3IoKSk7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNv
bHZlciogc2VsZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHNlbGVjdG9y
LT5zdHlsZSgpLT5jbGVhckN1cnNvckxpc3QoKTsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVl
TGlzdCgpKSB7CkBAIC0xMDk3LDcgKzEwOTcsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJv
cGVydHlUZXh0QWxpZ24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
U3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0xMTIyLDcgKzExMjIsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJv
cGVydHlUZXh0RGVjb3JhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICB7CiAgICAgICAgIEVUZXh0RGVjb3JhdGlvbiB0ID0gUmVuZGVyU3R5bGU6OmluaXRp
YWxUZXh0RGVjb3JhdGlvbigpOwogICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGko
dmFsdWUpOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKQEAgLTExNDEsNyArMTE0MSw3IEBA
IHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eVVuaWNvZGVCaWRpIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBDU1NW
YWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShTdHlsZVJlc29sdmVyKiBz
ZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlLT5pc1Zh
bHVlTGlzdCgpKSB7CiAgICAgICAgICAgICBFVW5pY29kZUJpZGkgcmVuZGVyZXJVbmljb2RlQmlk
aSA9IFJlbmRlclN0eWxlOjppbml0aWFsVW5pY29kZUJpZGkoKTsKQEAgLTExNzEsNyArMTE3MSw3
IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHQgewogcHVibGljOgot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIENT
U1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2ZXIq
IHNlbGVjdG9yLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjg1LDkgKzEyODUs
OSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTU3R5bGVTZWxlY3RvciopIHsgfQotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1N0eWxlU2VsZWN0b3IqKSB7IH0KLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBDU1NW
YWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5bGVSZXNv
bHZlciopIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKFN0eWxlUmVzb2x2
ZXIqKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHNlbGVj
dG9yLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBzZWxlY3Rvci0+c3R5bGUoKS0+
cmVzZXRQYWdlU2l6ZVR5cGUoKTsKICAgICAgICAgTGVuZ3RoIHdpZHRoOwpAQCAtMTM1OCwyMSAr
MTM1OCwyMSBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHls
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5
bGVSZXNvbHZlciogc2VsZWN0b3IpCiAgICAgewogICAgICAgICBzZWxlY3Rvci0+c3R5bGUoKS0+
c2V0VGV4dEVtcGhhc2lzRmlsbChzZWxlY3Rvci0+cGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lz
RmlsbCgpKTsKICAgICAgICAgc2VsZWN0b3ItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmso
c2VsZWN0b3ItPnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc01hcmsoKSk7CiAgICAgICAgIHNl
bGVjdG9yLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHNlbGVjdG9yLT5wYXJl
bnRTdHlsZSgpLT50ZXh0RW1waGFzaXNDdXN0b21NYXJrKCkpOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yKQog
ICAgIHsKICAgICAgICAgc2VsZWN0b3ItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoUmVu
ZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNGaWxsKCkpOwogICAgICAgICBzZWxlY3Rvci0+
c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBo
YXNpc01hcmsoKSk7CiAgICAgICAgIHNlbGVjdG9yLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXND
dXN0b21NYXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNl
bGVjdG9yLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShTdHls
ZVJlc29sdmVyKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYg
KHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3Qg
PSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CkBAIC0xNDI1LDcgKzE0MjUsNyBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwKICAgICAgICAgICBib29sIChBbmltYXRpb246Oip0ZXN0
RnVuY3Rpb24pKCkgY29uc3QsCiAgICAgICAgICAgdm9pZCAoQW5pbWF0aW9uOjoqY2xlYXJGdW5j
dGlvbikoKSwKICAgICAgICAgICBUICgqaW5pdGlhbEZ1bmN0aW9uKSgpLAotICAgICAgICAgIHZv
aWQgKENTU1N0eWxlU2VsZWN0b3I6OiptYXBGdW5jdGlvbikoQW5pbWF0aW9uKiwgQ1NTVmFsdWUq
KSwKKyAgICAgICAgICB2b2lkIChTdHlsZVJlc29sdmVyOjoqbWFwRnVuY3Rpb24pKEFuaW1hdGlv
biosIENTU1ZhbHVlKiksCiAgICAgICAgICAgQW5pbWF0aW9uTGlzdCogKFJlbmRlclN0eWxlOjoq
YW5pbWF0aW9uR2V0dGVyRnVuY3Rpb24pKCksCiAgICAgICAgICAgY29uc3QgQW5pbWF0aW9uTGlz
dCogKFJlbmRlclN0eWxlOjoqaW1tdXRhYmxlQW5pbWF0aW9uR2V0dGVyRnVuY3Rpb24pKCkgY29u
c3Q+CiBjbGFzcyBBcHBseVByb3BlcnR5QW5pbWF0aW9uIHsKQEAgLTE0MzUsMTEgKzE0MzUsMTEg
QEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHRlc3QoY29uc3QgQW5pbWF0aW9uKiBhbmltYXRp
b24pIHsgcmV0dXJuIChhbmltYXRpb24tPip0ZXN0RnVuY3Rpb24pKCk7IH0KICAgICBzdGF0aWMg
dm9pZCBjbGVhcihBbmltYXRpb24qIGFuaW1hdGlvbikgeyAoYW5pbWF0aW9uLT4qY2xlYXJGdW5j
dGlvbikoKTsgfQogICAgIHN0YXRpYyBUIGluaXRpYWwoKSB7IHJldHVybiAoKmluaXRpYWxGdW5j
dGlvbikoKTsgfQotICAgIHN0YXRpYyB2b2lkIG1hcChDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc2VsZWN0b3ItPipt
YXBGdW5jdGlvbikoYW5pbWF0aW9uLCB2YWx1ZSk7IH0KKyAgICBzdGF0aWMgdm9pZCBtYXAoU3R5
bGVSZXNvbHZlciogc2VsZWN0b3IsIEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFs
dWUpIHsgKHNlbGVjdG9yLT4qbWFwRnVuY3Rpb24pKGFuaW1hdGlvbiwgdmFsdWUpOyB9CiAgICAg
c3RhdGljIEFuaW1hdGlvbkxpc3QqIGFjY2Vzc0FuaW1hdGlvbnMoUmVuZGVyU3R5bGUqIHN0eWxl
KSB7IHJldHVybiAoc3R5bGUtPiphbmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKTsgfQogICAgIHN0
YXRpYyBjb25zdCBBbmltYXRpb25MaXN0KiBhbmltYXRpb25zKFJlbmRlclN0eWxlKiBzdHlsZSkg
eyByZXR1cm4gKHN0eWxlLT4qaW1tdXRhYmxlQW5pbWF0aW9uR2V0dGVyRnVuY3Rpb24pKCk7IH0K
IAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNl
bGVjdG9yKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKFN0eWxlUmVzb2x2ZXIq
IHNlbGVjdG9yKQogICAgIHsKICAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0Fu
aW1hdGlvbnMoc2VsZWN0b3ItPnN0eWxlKCkpOwogICAgICAgICBjb25zdCBBbmltYXRpb25MaXN0
KiBwYXJlbnRMaXN0ID0gYW5pbWF0aW9ucyhzZWxlY3Rvci0+cGFyZW50U3R5bGUoKSk7CkBAIC0x
NDU2LDcgKzE0NTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjbGVhcihsaXN0LT5hbmltYXRp
b24oaSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1N0
eWxlU2VsZWN0b3IqIHNlbGVjdG9yKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVl
KFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yKQogICAgIHsKICAgICAgICAgQW5pbWF0aW9uTGlzdCog
bGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc2VsZWN0b3ItPnN0eWxlKCkpOwogICAgICAgICBpZiAo
bGlzdC0+aXNFbXB0eSgpKQpAQCAtMTQ2Niw3ICsxNDY2LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgY2xlYXIobGlzdC0+YW5pbWF0aW9uKGkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBDU1NWYWx1ZSogdmFsdWUpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0Fu
aW1hdGlvbnMoc2VsZWN0b3ItPnN0eWxlKCkpOwogICAgICAgICBzaXplX3QgY2hpbGRJbmRleCA9
IDA7CkBAIC0xNDk1LDE5ICsxNDk1LDE5IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0
eU91dGxpbmVTdHlsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhl
cml0VmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IpCiAgICAgewogICAgICAgICBBcHBseVBy
b3BlcnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5
bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNB
dXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1
dG8+OjphcHBseUluaGVyaXRWYWx1ZShzZWxlY3Rvcik7CiAgICAgICAgIEFwcGx5UHJvcGVydHlE
ZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9y
ZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlJbmhlcml0VmFsdWUoc2VsZWN0
b3IpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1N0eWxl
U2VsZWN0b3IqIHNlbGVjdG9yKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKFN0
eWxlUmVzb2x2ZXIqIHNlbGVjdG9yKQogICAgIHsKICAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1
bHRCYXNlPE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlSXNBdXRvLCBP
dXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGlu
ZUlzQXV0bywgJlJlbmRlclN0eWxlOjppbml0aWFsT3V0bGluZVN0eWxlSXNBdXRvPjo6YXBwbHlJ
bml0aWFsVmFsdWUoc2VsZWN0b3IpOwogICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8
RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAm
UmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6
OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5SW5pdGlhbFZhbHVlKHNlbGVjdG9yKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9y
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShTdHlsZVJlc29s
dmVyKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgQXBwbHlQcm9w
ZXJ0eURlZmF1bHQ8T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1
dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBP
dXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+Ojph
cHBseVZhbHVlKHNlbGVjdG9yLCB2YWx1ZSk7CiAgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0
PEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwg
JlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxl
Ojppbml0aWFsQm9yZGVyU3R5bGU+OjphcHBseVZhbHVlKHNlbGVjdG9yLCB2YWx1ZSk7CkBAIC0x
NTE4LDcgKzE1MTgsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlSZXNpemUgewog
cHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2Vs
ZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxl
UmVzb2x2ZXIqIHNlbGVjdG9yLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTQ4
LDcgKzE1NDgsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlWZXJ0aWNhbEFsaWdu
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1N0eWxlU2VsZWN0b3Iq
IHNlbGVjdG9yLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShT
dHlsZVJlc29sdmVyKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAg
aWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MTU3MCw3ICsxNTcwLDcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5QXNwZWN0UmF0
aW8gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1N0eWxl
U2VsZWN0b3IqIHNlbGVjdG9yKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKFN0
eWxlUmVzb2x2ZXIqIHNlbGVjdG9yKQogICAgIHsKICAgICAgICAgaWYgKCFzZWxlY3Rvci0+cGFy
ZW50U3R5bGUoKS0+aGFzQXNwZWN0UmF0aW8oKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1
NzksMTQgKzE1NzksMTQgQEAgcHVibGljOgogICAgICAgICBzZWxlY3Rvci0+c3R5bGUoKS0+c2V0
QXNwZWN0UmF0aW9OdW1lcmF0b3Ioc2VsZWN0b3ItPnBhcmVudFN0eWxlKCktPmFzcGVjdFJhdGlv
TnVtZXJhdG9yKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVl
KENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlh
bFZhbHVlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yKQogICAgIHsKICAgICAgICAgc2VsZWN0b3It
PnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKFJlbmRlclN0eWxlOjppbml0aWFsSGFzQXNwZWN0
UmF0aW8oKSk7CiAgICAgICAgIHNlbGVjdG9yLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9t
aW5hdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9EZW5vbWluYXRvcigpKTsKICAg
ICAgICAgc2VsZWN0b3ItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKFJlbmRlclN0
eWxlOjppbml0aWFsQXNwZWN0UmF0aW9OdW1lcmF0b3IoKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3Is
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzQXNwZWN0UmF0
aW9WYWx1ZSgpKSB7CiAgICAgICAgICAgICBzZWxlY3Rvci0+c3R5bGUoKS0+c2V0SGFzQXNwZWN0
UmF0aW8oZmFsc2UpOwpAQCAtMTYwNiwyNiArMTYwNiwyNiBAQCBwdWJsaWM6CiAKIGNsYXNzIEFw
cGx5UHJvcGVydHlab29tIHsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcmVzZXRFZmZlY3Rp
dmVab29tKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yKQorICAgIHN0YXRpYyB2b2lkIHJlc2V0
RWZmZWN0aXZlWm9vbShTdHlsZVJlc29sdmVyKiBzZWxlY3RvcikKICAgICB7CiAgICAgICAgIC8v
IFJlc2V0IHRoZSB6b29tIGluIGVmZmVjdC4gVGhpcyBhbGxvd3MgdGhlIHNldFpvb20gbWV0aG9k
IHRvIGFjY3VyYXRlbHkgY29tcHV0ZSBhIG5ldyB6b29tIGluIGVmZmVjdC4KICAgICAgICAgc2Vs
ZWN0b3ItPnNldEVmZmVjdGl2ZVpvb20oc2VsZWN0b3ItPnBhcmVudFN0eWxlKCkgPyBzZWxlY3Rv
ci0+cGFyZW50U3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxa
b29tKCkpOwogICAgIH0KIAogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZh
bHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5o
ZXJpdFZhbHVlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yKQogICAgIHsKICAgICAgICAgcmVzZXRF
ZmZlY3RpdmVab29tKHNlbGVjdG9yKTsKICAgICAgICAgc2VsZWN0b3ItPnNldFpvb20oc2VsZWN0
b3ItPnBhcmVudFN0eWxlKCktPnpvb20oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBw
bHlJbml0aWFsVmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlJbml0aWFsVmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IpCiAgICAgewogICAg
ICAgICByZXNldEVmZmVjdGl2ZVpvb20oc2VsZWN0b3IpOwogICAgICAgICBzZWxlY3Rvci0+c2V0
Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZhbHVl
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKTsKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CkBAIC0xNjU5LDcgKzE2NTksNyBA
QCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlEaXNwbGF5IHsKIHByaXZhdGU6Ci0gICAg
c3RhdGljIGlubGluZSBib29sIGlzVmFsaWREaXNwbGF5VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciog
c2VsZWN0b3IsIEVEaXNwbGF5IGRpc3BsYXlQcm9wZXJ0eVZhbHVlKQorICAgIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc1ZhbGlkRGlzcGxheVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBFRGlz
cGxheSBkaXNwbGF5UHJvcGVydHlWYWx1ZSkKICAgICB7CiAjaWYgRU5BQkxFKFNWRykKICAgICAg
ICAgaWYgKHNlbGVjdG9yLT5lbGVtZW50KCkgJiYgc2VsZWN0b3ItPmVsZW1lbnQoKS0+aXNTVkdF
bGVtZW50KCkgJiYgc2VsZWN0b3ItPnN0eWxlKCktPnN0eWxlVHlwZSgpID09IE5PUFNFVURPKQpA
QCAtMTY3MSw3ICsxNjcxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1N0eWxlU2Vs
ZWN0b3IqIHNlbGVjdG9yKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKFN0eWxl
UmVzb2x2ZXIqIHNlbGVjdG9yKQogICAgIHsKICAgICAgICAgRURpc3BsYXkgZGlzcGxheSA9IHNl
bGVjdG9yLT5wYXJlbnRTdHlsZSgpLT5kaXNwbGF5KCk7CiAgICAgICAgIGlmICghaXNWYWxpZERp
c3BsYXlWYWx1ZShzZWxlY3RvciwgZGlzcGxheSkpCkBAIC0xNjc5LDEyICsxNjc5LDEyIEBAIHB1
YmxpYzoKICAgICAgICAgc2VsZWN0b3ItPnN0eWxlKCktPnNldERpc3BsYXkoZGlzcGxheSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTU3R5bGVTZWxlY3Rv
ciogc2VsZWN0b3IpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoU3R5bGVSZXNv
bHZlciogc2VsZWN0b3IpCiAgICAgewogICAgICAgICBzZWxlY3Rvci0+c3R5bGUoKS0+c2V0RGlz
cGxheShSZW5kZXJTdHlsZTo6aW5pdGlhbERpc3BsYXkoKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3Is
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE3MDUsMjEgKzE3MDUsMjEgQEAgcHVi
bGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5RmxleCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IpCisgICAgc3Rh
dGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IpCiAgICAg
ewogICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJTdHlsZTo6
cG9zaXRpdmVGbGV4LCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRQb3NpdGl2ZUZsZXgsIGZsb2F0
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxOZWdhdGl2ZUZsZXg+OjphcHBseUluaGVyaXRWYWx1ZShz
ZWxlY3Rvcik7CiAgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxmbG9hdCwgJlJlbmRl
clN0eWxlOjpuZWdhdGl2ZUZsZXgsIGZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldE5lZ2F0aXZlRmxl
eCwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFBvc2l0aXZlRmxleD46OmFwcGx5SW5oZXJp
dFZhbHVlKHNlbGVjdG9yKTsKICAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPExlbmd0
aCwgJlJlbmRlclN0eWxlOjpmbGV4UHJlZmVycmVkU2l6ZSwgTGVuZ3RoLCAmUmVuZGVyU3R5bGU6
OnNldEZsZXhQcmVmZXJyZWRTaXplLCBMZW5ndGgsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEZsZXhQ
cmVmZXJyZWRTaXplPjo6YXBwbHlJbmhlcml0VmFsdWUoc2VsZWN0b3IpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9y
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKFN0eWxlUmVzb2x2ZXIqIHNlbGVj
dG9yKQogICAgIHsKICAgICAgICAgc2VsZWN0b3ItPnN0eWxlKCktPnNldFBvc2l0aXZlRmxleChS
ZW5kZXJTdHlsZTo6aW5pdGlhbFBvc2l0aXZlRmxleCgpKTsKICAgICAgICAgc2VsZWN0b3ItPnN0
eWxlKCktPnNldE5lZ2F0aXZlRmxleChSZW5kZXJTdHlsZTo6aW5pdGlhbE5lZ2F0aXZlRmxleCgp
KTsKICAgICAgICAgc2VsZWN0b3ItPnN0eWxlKCktPnNldEZsZXhQcmVmZXJyZWRTaXplKFJlbmRl
clN0eWxlOjppbml0aWFsRmxleFByZWZlcnJlZFNpemUoKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgQ1NTVmFsdWUqIHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3Is
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKSB7CiAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKQEAgLTE3NzYsMTggKzE3
NzYsMTggQEAgU3R5bGVCdWlsZGVyOjpTdHlsZUJ1aWxkZXIoKQogICAgICAgICBtX3Byb3BlcnR5
TWFwW2ldID0gUHJvcGVydHlIYW5kbGVyKCk7CiAKICAgICAvLyBQbGVhc2Uga2VlcCBDU1MgcHJv
cGVydHkgbGlzdCBpbiBhbHBoYWJldGljYWwgb3JkZXIuCi0gICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8
RUZpbGxBdHRhY2htZW50LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRBdHRhY2htZW50LCBCYWNrZ3Jv
dW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZSZW5k
ZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNBdHRhY2htZW50U2V0LCAm
RmlsbExheWVyOjphdHRhY2htZW50LCAmRmlsbExheWVyOjpzZXRBdHRhY2htZW50LCAmRmlsbExh
eWVyOjpjbGVhckF0dGFjaG1lbnQsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQXR0YWNobWVudCwg
JkNTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxBdHRhY2htZW50Pjo6Y3JlYXRlSGFuZGxlcigpKTsK
LSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcCwgQXBwbHlQ
cm9wZXJ0eUZpbGxMYXllcjxFRmlsbEJveCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcCwgQmFj
a2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAm
UmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZGaWxsTGF5ZXI6OmlzQ2xpcFNldCwgJkZp
bGxMYXllcjo6Y2xpcCwgJkZpbGxMYXllcjo6c2V0Q2xpcCwgJkZpbGxMYXllcjo6Y2xlYXJDbGlw
LCAmRmlsbExheWVyOjppbml0aWFsRmlsbENsaXAsICZDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxs
Q2xpcD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5QmFja2dyb3VuZEF0dGFjaG1lbnQsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8RUZpbGxBdHRh
Y2htZW50LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRBdHRhY2htZW50LCBCYWNrZ3JvdW5kRmlsbExh
eWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6
YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNBdHRhY2htZW50U2V0LCAmRmlsbExheWVy
OjphdHRhY2htZW50LCAmRmlsbExheWVyOjpzZXRBdHRhY2htZW50LCAmRmlsbExheWVyOjpjbGVh
ckF0dGFjaG1lbnQsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQXR0YWNobWVudCwgJlN0eWxlUmVz
b2x2ZXI6Om1hcEZpbGxBdHRhY2htZW50Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcCwgQXBwbHlQcm9wZXJ0eUZpbGxM
YXllcjxFRmlsbEJveCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcCwgQmFja2dyb3VuZEZpbGxM
YXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6
OmJhY2tncm91bmRMYXllcnMsICZGaWxsTGF5ZXI6OmlzQ2xpcFNldCwgJkZpbGxMYXllcjo6Y2xp
cCwgJkZpbGxMYXllcjo6c2V0Q2xpcCwgJkZpbGxMYXllcjo6Y2xlYXJDbGlwLCAmRmlsbExheWVy
Ojppbml0aWFsRmlsbENsaXAsICZTdHlsZVJlc29sdmVyOjptYXBGaWxsQ2xpcD46OmNyZWF0ZUhh
bmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yLCBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudCwgJlJlbmRlclN0eWxl
OjpiYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0QmFja2dyb3VuZENvbG9yLCAmUmVu
ZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQmFja2dyb3VuZENvbG9yLCAmUmVuZGVyU3R5bGU6Omlu
dmFsaWRDb2xvcj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5QmFja2dyb3VuZEltYWdlLCBBcHBseVByb3BlcnR5RmlsbExheWVyPFN0eWxlSW1h
Z2UqLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZSwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJl
bmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91
bmRMYXllcnMsICZGaWxsTGF5ZXI6OmlzSW1hZ2VTZXQsICZGaWxsTGF5ZXI6OmltYWdlLCAmRmls
bExheWVyOjpzZXRJbWFnZSwgJkZpbGxMYXllcjo6Y2xlYXJJbWFnZSwgJkZpbGxMYXllcjo6aW5p
dGlhbEZpbGxJbWFnZSwgJkNTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxJbWFnZT46OmNyZWF0ZUhh
bmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZE9y
aWdpbiwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbEJveCwgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kT3JpZ2luLCBCYWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tn
cm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6
aXNPcmlnaW5TZXQsICZGaWxsTGF5ZXI6Om9yaWdpbiwgJkZpbGxMYXllcjo6c2V0T3JpZ2luLCAm
RmlsbExheWVyOjpjbGVhck9yaWdpbiwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxPcmlnaW4sICZD
U1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsT3JpZ2luPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsIEFwcGx5UHJvcGVy
dHlGaWxsTGF5ZXI8U3R5bGVJbWFnZSosIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlLCBCYWNr
Z3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZS
ZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNJbWFnZVNldCwgJkZp
bGxMYXllcjo6aW1hZ2UsICZGaWxsTGF5ZXI6OnNldEltYWdlLCAmRmlsbExheWVyOjpjbGVhcklt
YWdlLCAmRmlsbExheWVyOjppbml0aWFsRmlsbEltYWdlLCAmU3R5bGVSZXNvbHZlcjo6bWFwRmls
bEltYWdlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kT3JpZ2luLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEVGaWxsQm94LCBD
U1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW4sIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJT
dHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5
ZXJzLCAmRmlsbExheWVyOjppc09yaWdpblNldCwgJkZpbGxMYXllcjo6b3JpZ2luLCAmRmlsbExh
eWVyOjpzZXRPcmlnaW4sICZGaWxsTGF5ZXI6OmNsZWFyT3JpZ2luLCAmRmlsbExheWVyOjppbml0
aWFsRmlsbE9yaWdpbiwgJlN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxPcmlnaW4+OjpjcmVhdGVIYW5k
bGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3Np
dGlvbiwgQXBwbHlQcm9wZXJ0eUV4cGFuZGluZzxTdXBwcmVzc1ZhbHVlLCBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRQb3NpdGlvblgsIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWT46OmNyZWF0
ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFBvc2l0aW9uWCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxMZW5ndGgsIENTU1Byb3BlcnR5QmFj
a2dyb3VuZFBvc2l0aW9uWCwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nl
c3NCYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZGaWxs
TGF5ZXI6OmlzWFBvc2l0aW9uU2V0LCAmRmlsbExheWVyOjp4UG9zaXRpb24sICZGaWxsTGF5ZXI6
OnNldFhQb3NpdGlvbiwgJkZpbGxMYXllcjo6Y2xlYXJYUG9zaXRpb24sICZGaWxsTGF5ZXI6Omlu
aXRpYWxGaWxsWFBvc2l0aW9uLCAmQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFhQb3NpdGlvbj46
OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFj
a2dyb3VuZFBvc2l0aW9uWSwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxMZW5ndGgsIENTU1Byb3Bl
cnR5QmFja2dyb3VuZFBvc2l0aW9uWSwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxl
OjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMs
ICZGaWxsTGF5ZXI6OmlzWVBvc2l0aW9uU2V0LCAmRmlsbExheWVyOjp5UG9zaXRpb24sICZGaWxs
TGF5ZXI6OnNldFlQb3NpdGlvbiwgJkZpbGxMYXllcjo6Y2xlYXJZUG9zaXRpb24sICZGaWxsTGF5
ZXI6OmluaXRpYWxGaWxsWVBvc2l0aW9uLCAmQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFlQb3Np
dGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5QmFja2dyb3VuZFBvc2l0aW9uWCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxMZW5ndGgsIENT
U1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRl
clN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRM
YXllcnMsICZGaWxsTGF5ZXI6OmlzWFBvc2l0aW9uU2V0LCAmRmlsbExheWVyOjp4UG9zaXRpb24s
ICZGaWxsTGF5ZXI6OnNldFhQb3NpdGlvbiwgJkZpbGxMYXllcjo6Y2xlYXJYUG9zaXRpb24sICZG
aWxsTGF5ZXI6OmluaXRpYWxGaWxsWFBvc2l0aW9uLCAmU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFhQ
b3NpdGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWSwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxMZW5ndGgs
IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWSwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJl
bmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91
bmRMYXllcnMsICZGaWxsTGF5ZXI6OmlzWVBvc2l0aW9uU2V0LCAmRmlsbExheWVyOjp5UG9zaXRp
b24sICZGaWxsTGF5ZXI6OnNldFlQb3NpdGlvbiwgJkZpbGxMYXllcjo6Y2xlYXJZUG9zaXRpb24s
ICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsWVBvc2l0aW9uLCAmU3R5bGVSZXNvbHZlcjo6bWFwRmls
bFlQb3NpdGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdCwgQXBwbHlQcm9wZXJ0eUV4cGFuZGluZzxTdXBwcmVz
c1ZhbHVlLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYLCBDU1NQcm9wZXJ0eUJhY2tncm91
bmRSZXBlYXRZPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbFJl
cGVhdCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCwgQmFja2dyb3VuZEZpbGxMYXllciwg
JlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tn
cm91bmRMYXllcnMsICZGaWxsTGF5ZXI6OmlzUmVwZWF0WFNldCwgJkZpbGxMYXllcjo6cmVwZWF0
WCwgJkZpbGxMYXllcjo6c2V0UmVwZWF0WCwgJkZpbGxMYXllcjo6Y2xlYXJSZXBlYXRYLCAmRmls
bExheWVyOjppbml0aWFsRmlsbFJlcGVhdFgsICZDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsUmVw
ZWF0WD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5QmFja2dyb3VuZFJlcGVhdFksIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8RUZpbGxSZXBlYXQs
IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFksIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5k
ZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5k
TGF5ZXJzLCAmRmlsbExheWVyOjppc1JlcGVhdFlTZXQsICZGaWxsTGF5ZXI6OnJlcGVhdFksICZG
aWxsTGF5ZXI6OnNldFJlcGVhdFksICZGaWxsTGF5ZXI6OmNsZWFyUmVwZWF0WSwgJkZpbGxMYXll
cjo6aW5pdGlhbEZpbGxSZXBlYXRZLCAmQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFJlcGVhdFk+
OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJh
Y2tncm91bmRTaXplLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEZpbGxTaXplLCBDU1NQcm9wZXJ0
eUJhY2tncm91bmRTaXplLCBCYWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vz
c0JhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxM
YXllcjo6aXNTaXplU2V0LCAmRmlsbExheWVyOjpzaXplLCAmRmlsbExheWVyOjpzZXRTaXplLCAm
RmlsbExheWVyOjpjbGVhclNpemUsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsU2l6ZSwgJkNTU1N0
eWxlU2VsZWN0b3I6Om1hcEZpbGxTaXplPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCwgQXBwbHlQcm9wZXJ0eUZp
bGxMYXllcjxFRmlsbFJlcGVhdCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCwgQmFja2dy
b3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAmUmVu
ZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZGaWxsTGF5ZXI6OmlzUmVwZWF0WFNldCwgJkZp
bGxMYXllcjo6cmVwZWF0WCwgJkZpbGxMYXllcjo6c2V0UmVwZWF0WCwgJkZpbGxMYXllcjo6Y2xl
YXJSZXBlYXRYLCAmRmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVhdFgsICZTdHlsZVJlc29sdmVy
OjptYXBGaWxsUmVwZWF0WD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5k
bGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFksIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8
RUZpbGxSZXBlYXQsIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFksIEJhY2tncm91bmRGaWxs
TGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxl
OjpiYWNrZ3JvdW5kTGF5ZXJzLCAmRmlsbExheWVyOjppc1JlcGVhdFlTZXQsICZGaWxsTGF5ZXI6
OnJlcGVhdFksICZGaWxsTGF5ZXI6OnNldFJlcGVhdFksICZGaWxsTGF5ZXI6OmNsZWFyUmVwZWF0
WSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxSZXBlYXRZLCAmU3R5bGVSZXNvbHZlcjo6bWFwRmls
bFJlcGVhdFk+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eUJhY2tncm91bmRTaXplLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEZpbGxTaXplLCBD
U1NQcm9wZXJ0eUJhY2tncm91bmRTaXplLCBCYWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5
bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVy
cywgJkZpbGxMYXllcjo6aXNTaXplU2V0LCAmRmlsbExheWVyOjpzaXplLCAmRmlsbExheWVyOjpz
ZXRTaXplLCAmRmlsbExheWVyOjpjbGVhclNpemUsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsU2l6
ZSwgJlN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxTaXplPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXIsIEFwcGx5UHJvcGVydHlFeHBhbmRp
bmc8U3VwcHJlc3NWYWx1ZSwgQ1NTUHJvcGVydHlCb3JkZXJTdHlsZSwgQ1NTUHJvcGVydHlCb3Jk
ZXJXaWR0aCwgQ1NTUHJvcGVydHlCb3JkZXJDb2xvcj46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tLCBBcHBseVByb3BlcnR5
RXhwYW5kaW5nPFN1cHByZXNzVmFsdWUsIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsIENT
U1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5bGUsIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGg+
OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJv
cmRlckJvdHRvbUNvbG9yLCBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudCwg
JlJlbmRlclN0eWxlOjpib3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJC
b3R0b21Db2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9y
LCAmUmVuZGVyU3R5bGU6OmNvbG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsKQEAgLTE4ODksMTkgKzE4
ODksMTkgQEAgU3R5bGVCdWlsZGVyOjpTdHlsZUJ1aWxkZXIoKQogICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBBcHBseVByb3BlcnR5VW5pY29kZUJpZGk6OmNy
ZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5VmVydGlj
YWxBbGlnbiwgQXBwbHlQcm9wZXJ0eVZlcnRpY2FsQWxpZ246OmNyZWF0ZUhhbmRsZXIoKSk7CiAg
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5VmlzaWJpbGl0eSwgQXBwbHlQcm9wZXJ0
eURlZmF1bHQ8RVZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6dmlzaWJpbGl0eSwgRVZpc2liaWxp
dHksICZSZW5kZXJTdHlsZTo6c2V0VmlzaWJpbGl0eSwgRVZpc2liaWxpdHksICZSZW5kZXJTdHls
ZTo6aW5pdGlhbFZpc2liaWxpdHk+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRlbGF5LCBBcHBseVByb3BlcnR5QW5p
bWF0aW9uPGRvdWJsZSwgJkFuaW1hdGlvbjo6ZGVsYXksICZBbmltYXRpb246OnNldERlbGF5LCAm
QW5pbWF0aW9uOjppc0RlbGF5U2V0LCAmQW5pbWF0aW9uOjpjbGVhckRlbGF5LCAmQW5pbWF0aW9u
Ojppbml0aWFsQW5pbWF0aW9uRGVsYXksICZDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25E
ZWxheSwgJlJlbmRlclN0eWxlOjphY2Nlc3NBbmltYXRpb25zLCAmUmVuZGVyU3R5bGU6OmFuaW1h
dGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdEFuaW1hdGlvbkRpcmVjdGlvbiwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxBbmlt
YXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiwgJkFuaW1hdGlvbjo6ZGlyZWN0aW9uLCAmQW5pbWF0
aW9uOjpzZXREaXJlY3Rpb24sICZBbmltYXRpb246OmlzRGlyZWN0aW9uU2V0LCAmQW5pbWF0aW9u
OjpjbGVhckRpcmVjdGlvbiwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkRpcmVjdGlvbiwg
JkNTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbkRpcmVjdGlvbiwgJlJlbmRlclN0eWxlOjph
Y2Nlc3NBbmltYXRpb25zLCAmUmVuZGVyU3R5bGU6OmFuaW1hdGlvbnM+OjpjcmVhdGVIYW5kbGVy
KCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkR1
cmF0aW9uLCBBcHBseVByb3BlcnR5QW5pbWF0aW9uPGRvdWJsZSwgJkFuaW1hdGlvbjo6ZHVyYXRp
b24sICZBbmltYXRpb246OnNldER1cmF0aW9uLCAmQW5pbWF0aW9uOjppc0R1cmF0aW9uU2V0LCAm
QW5pbWF0aW9uOjpjbGVhckR1cmF0aW9uLCAmQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRHVy
YXRpb24sICZDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25EdXJhdGlvbiwgJlJlbmRlclN0
eWxlOjphY2Nlc3NBbmltYXRpb25zLCAmUmVuZGVyU3R5bGU6OmFuaW1hdGlvbnM+OjpjcmVhdGVI
YW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEFuaW1h
dGlvbkZpbGxNb2RlLCBBcHBseVByb3BlcnR5QW5pbWF0aW9uPHVuc2lnbmVkLCAmQW5pbWF0aW9u
OjpmaWxsTW9kZSwgJkFuaW1hdGlvbjo6c2V0RmlsbE1vZGUsICZBbmltYXRpb246OmlzRmlsbE1v
ZGVTZXQsICZBbmltYXRpb246OmNsZWFyRmlsbE1vZGUsICZBbmltYXRpb246OmluaXRpYWxBbmlt
YXRpb25GaWxsTW9kZSwgJkNTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbkZpbGxNb2RlLCAm
UmVuZGVyU3R5bGU6OmFjY2Vzc0FuaW1hdGlvbnMsICZSZW5kZXJTdHlsZTo6YW5pbWF0aW9ucz46
OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQsIEFwcGx5UHJvcGVydHlBbmltYXRpb248ZG91Ymxl
LCAmQW5pbWF0aW9uOjppdGVyYXRpb25Db3VudCwgJkFuaW1hdGlvbjo6c2V0SXRlcmF0aW9uQ291
bnQsICZBbmltYXRpb246OmlzSXRlcmF0aW9uQ291bnRTZXQsICZBbmltYXRpb246OmNsZWFySXRl
cmF0aW9uQ291bnQsICZBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25JdGVyYXRpb25Db3VudCwg
JkNTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50LCAmUmVuZGVyU3R5
bGU6OmFjY2Vzc0FuaW1hdGlvbnMsICZSZW5kZXJTdHlsZTo6YW5pbWF0aW9ucz46OmNyZWF0ZUhh
bmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QW5pbWF0
aW9uTmFtZSwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxjb25zdCBTdHJpbmcmLCAmQW5pbWF0aW9u
OjpuYW1lLCAmQW5pbWF0aW9uOjpzZXROYW1lLCAmQW5pbWF0aW9uOjppc05hbWVTZXQsICZBbmlt
YXRpb246OmNsZWFyTmFtZSwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbk5hbWUsICZDU1NT
dHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25OYW1lLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0FuaW1h
dGlvbnMsICZSZW5kZXJTdHlsZTo6YW5pbWF0aW9ucz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uUGxheVN0YXRlLCBB
cHBseVByb3BlcnR5QW5pbWF0aW9uPEVBbmltUGxheVN0YXRlLCAmQW5pbWF0aW9uOjpwbGF5U3Rh
dGUsICZBbmltYXRpb246OnNldFBsYXlTdGF0ZSwgJkFuaW1hdGlvbjo6aXNQbGF5U3RhdGVTZXQs
ICZBbmltYXRpb246OmNsZWFyUGxheVN0YXRlLCAmQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9u
UGxheVN0YXRlLCAmQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uUGxheVN0YXRlLCAmUmVu
ZGVyU3R5bGU6OmFjY2Vzc0FuaW1hdGlvbnMsICZSZW5kZXJTdHlsZTo6YW5pbWF0aW9ucz46OmNy
ZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0
QW5pbWF0aW9uVGltaW5nRnVuY3Rpb24sIEFwcGx5UHJvcGVydHlBbmltYXRpb248Y29uc3QgUGFz
c1JlZlB0cjxUaW1pbmdGdW5jdGlvbj4sICZBbmltYXRpb246OnRpbWluZ0Z1bmN0aW9uLCAmQW5p
bWF0aW9uOjpzZXRUaW1pbmdGdW5jdGlvbiwgJkFuaW1hdGlvbjo6aXNUaW1pbmdGdW5jdGlvblNl
dCwgJkFuaW1hdGlvbjo6Y2xlYXJUaW1pbmdGdW5jdGlvbiwgJkFuaW1hdGlvbjo6aW5pdGlhbEFu
aW1hdGlvblRpbWluZ0Z1bmN0aW9uLCAmQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uVGlt
aW5nRnVuY3Rpb24sICZSZW5kZXJTdHlsZTo6YWNjZXNzQW5pbWF0aW9ucywgJlJlbmRlclN0eWxl
OjphbmltYXRpb25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EZWxheSwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxk
b3VibGUsICZBbmltYXRpb246OmRlbGF5LCAmQW5pbWF0aW9uOjpzZXREZWxheSwgJkFuaW1hdGlv
bjo6aXNEZWxheVNldCwgJkFuaW1hdGlvbjo6Y2xlYXJEZWxheSwgJkFuaW1hdGlvbjo6aW5pdGlh
bEFuaW1hdGlvbkRlbGF5LCAmU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uRGVsYXksICZSZW5k
ZXJTdHlsZTo6YWNjZXNzQW5pbWF0aW9ucywgJlJlbmRlclN0eWxlOjphbmltYXRpb25zPjo6Y3Jl
YXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRB
bmltYXRpb25EaXJlY3Rpb24sIEFwcGx5UHJvcGVydHlBbmltYXRpb248QW5pbWF0aW9uOjpBbmlt
YXRpb25EaXJlY3Rpb24sICZBbmltYXRpb246OmRpcmVjdGlvbiwgJkFuaW1hdGlvbjo6c2V0RGly
ZWN0aW9uLCAmQW5pbWF0aW9uOjppc0RpcmVjdGlvblNldCwgJkFuaW1hdGlvbjo6Y2xlYXJEaXJl
Y3Rpb24sICZBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25EaXJlY3Rpb24sICZTdHlsZVJlc29s
dmVyOjptYXBBbmltYXRpb25EaXJlY3Rpb24sICZSZW5kZXJTdHlsZTo6YWNjZXNzQW5pbWF0aW9u
cywgJlJlbmRlclN0eWxlOjphbmltYXRpb25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EdXJhdGlvbiwgQXBwbHlQ
cm9wZXJ0eUFuaW1hdGlvbjxkb3VibGUsICZBbmltYXRpb246OmR1cmF0aW9uLCAmQW5pbWF0aW9u
OjpzZXREdXJhdGlvbiwgJkFuaW1hdGlvbjo6aXNEdXJhdGlvblNldCwgJkFuaW1hdGlvbjo6Y2xl
YXJEdXJhdGlvbiwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkR1cmF0aW9uLCAmU3R5bGVS
ZXNvbHZlcjo6bWFwQW5pbWF0aW9uRHVyYXRpb24sICZSZW5kZXJTdHlsZTo6YWNjZXNzQW5pbWF0
aW9ucywgJlJlbmRlclN0eWxlOjphbmltYXRpb25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25GaWxsTW9kZSwgQXBw
bHlQcm9wZXJ0eUFuaW1hdGlvbjx1bnNpZ25lZCwgJkFuaW1hdGlvbjo6ZmlsbE1vZGUsICZBbmlt
YXRpb246OnNldEZpbGxNb2RlLCAmQW5pbWF0aW9uOjppc0ZpbGxNb2RlU2V0LCAmQW5pbWF0aW9u
OjpjbGVhckZpbGxNb2RlLCAmQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRmlsbE1vZGUsICZT
dHlsZVJlc29sdmVyOjptYXBBbmltYXRpb25GaWxsTW9kZSwgJlJlbmRlclN0eWxlOjphY2Nlc3NB
bmltYXRpb25zLCAmUmVuZGVyU3R5bGU6OmFuaW1hdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwor
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlv
bkNvdW50LCBBcHBseVByb3BlcnR5QW5pbWF0aW9uPGRvdWJsZSwgJkFuaW1hdGlvbjo6aXRlcmF0
aW9uQ291bnQsICZBbmltYXRpb246OnNldEl0ZXJhdGlvbkNvdW50LCAmQW5pbWF0aW9uOjppc0l0
ZXJhdGlvbkNvdW50U2V0LCAmQW5pbWF0aW9uOjpjbGVhckl0ZXJhdGlvbkNvdW50LCAmQW5pbWF0
aW9uOjppbml0aWFsQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQsICZTdHlsZVJlc29sdmVyOjptYXBB
bmltYXRpb25JdGVyYXRpb25Db3VudCwgJlJlbmRlclN0eWxlOjphY2Nlc3NBbmltYXRpb25zLCAm
UmVuZGVyU3R5bGU6OmFuaW1hdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbk5hbWUsIEFwcGx5UHJvcGVydHlB
bmltYXRpb248Y29uc3QgU3RyaW5nJiwgJkFuaW1hdGlvbjo6bmFtZSwgJkFuaW1hdGlvbjo6c2V0
TmFtZSwgJkFuaW1hdGlvbjo6aXNOYW1lU2V0LCAmQW5pbWF0aW9uOjpjbGVhck5hbWUsICZBbmlt
YXRpb246OmluaXRpYWxBbmltYXRpb25OYW1lLCAmU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9u
TmFtZSwgJlJlbmRlclN0eWxlOjphY2Nlc3NBbmltYXRpb25zLCAmUmVuZGVyU3R5bGU6OmFuaW1h
dGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdEFuaW1hdGlvblBsYXlTdGF0ZSwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxFQW5p
bVBsYXlTdGF0ZSwgJkFuaW1hdGlvbjo6cGxheVN0YXRlLCAmQW5pbWF0aW9uOjpzZXRQbGF5U3Rh
dGUsICZBbmltYXRpb246OmlzUGxheVN0YXRlU2V0LCAmQW5pbWF0aW9uOjpjbGVhclBsYXlTdGF0
ZSwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvblBsYXlTdGF0ZSwgJlN0eWxlUmVzb2x2ZXI6
Om1hcEFuaW1hdGlvblBsYXlTdGF0ZSwgJlJlbmRlclN0eWxlOjphY2Nlc3NBbmltYXRpb25zLCAm
UmVuZGVyU3R5bGU6OmFuaW1hdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uLCBBcHBs
eVByb3BlcnR5QW5pbWF0aW9uPGNvbnN0IFBhc3NSZWZQdHI8VGltaW5nRnVuY3Rpb24+LCAmQW5p
bWF0aW9uOjp0aW1pbmdGdW5jdGlvbiwgJkFuaW1hdGlvbjo6c2V0VGltaW5nRnVuY3Rpb24sICZB
bmltYXRpb246OmlzVGltaW5nRnVuY3Rpb25TZXQsICZBbmltYXRpb246OmNsZWFyVGltaW5nRnVu
Y3Rpb24sICZBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlvbiwgJlN0eWxl
UmVzb2x2ZXI6Om1hcEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uLCAmUmVuZGVyU3R5bGU6OmFjY2Vz
c0FuaW1hdGlvbnMsICZSZW5kZXJTdHlsZTo6YW5pbWF0aW9ucz46OmNyZWF0ZUhhbmRsZXIoKSk7
CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QXBwZWFyYW5jZSwgQXBw
bHlQcm9wZXJ0eURlZmF1bHQ8Q29udHJvbFBhcnQsICZSZW5kZXJTdHlsZTo6YXBwZWFyYW5jZSwg
Q29udHJvbFBhcnQsICZSZW5kZXJTdHlsZTo6c2V0QXBwZWFyYW5jZSwgQ29udHJvbFBhcnQsICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbEFwcGVhcmFuY2U+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJhdGlvLCBBcHBseVByb3Bl
cnR5QXNwZWN0UmF0aW86OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5LCBBcHBseVByb3BlcnR5RGVmYXVs
dDxFQmFja2ZhY2VWaXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OmJhY2tmYWNlVmlzaWJpbGl0eSwg
RUJhY2tmYWNlVmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpzZXRCYWNrZmFjZVZpc2liaWxpdHks
IEVCYWNrZmFjZVZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJhY2tmYWNlVmlzaWJp
bGl0eT46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0QmFja2dyb3VuZENsaXAsIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXApOwotICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGUs
IEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8Q29tcG9zaXRlT3BlcmF0b3IsIENTU1Byb3BlcnR5V2Vi
a2l0QmFja2dyb3VuZENvbXBvc2l0ZSwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxl
OjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMs
ICZGaWxsTGF5ZXI6OmlzQ29tcG9zaXRlU2V0LCAmRmlsbExheWVyOjpjb21wb3NpdGUsICZGaWxs
TGF5ZXI6OnNldENvbXBvc2l0ZSwgJkZpbGxMYXllcjo6Y2xlYXJDb21wb3NpdGUsICZGaWxsTGF5
ZXI6OmluaXRpYWxGaWxsQ29tcG9zaXRlLCAmQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbENvbXBv
c2l0ZT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0QmFja2dyb3VuZENvbXBvc2l0ZSwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxDb21w
b3NpdGVPcGVyYXRvciwgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ29tcG9zaXRlLCBCYWNr
Z3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZS
ZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNDb21wb3NpdGVTZXQs
ICZGaWxsTGF5ZXI6OmNvbXBvc2l0ZSwgJkZpbGxMYXllcjo6c2V0Q29tcG9zaXRlLCAmRmlsbExh
eWVyOjpjbGVhckNvbXBvc2l0ZSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxDb21wb3NpdGUsICZT
dHlsZVJlc29sdmVyOjptYXBGaWxsQ29tcG9zaXRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kT3JpZ2luLCBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRPcmlnaW4pOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdEJhY2tncm91bmRTaXplLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplKTsKICAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJGaXQsIEFwcGx5UHJv
cGVydHlEZWZhdWx0PEVCb3JkZXJGaXQsICZSZW5kZXJTdHlsZTo6Ym9yZGVyRml0LCBFQm9yZGVy
Rml0LCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckZpdCwgRUJvcmRlckZpdCwgJlJlbmRlclN0eWxl
Ojppbml0aWFsQm9yZGVyRml0Pjo6Y3JlYXRlSGFuZGxlcigpKTsKQEAgLTE5NjEsMjQgKzE5NjEs
MjQgQEAgU3R5bGVCdWlsZGVyOjpTdHlsZUJ1aWxkZXIoKQogICAgIHNldFByb3BlcnR5SGFuZGxl
cihDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblRvcENvbGxhcHNlLCBDU1NQcm9wZXJ0eVdlYmtpdE1h
cmdpbkJlZm9yZUNvbGxhcHNlKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRNYXJxdWVlRGlyZWN0aW9uLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFTWFycXVlZURpcmVj
dGlvbiwgJlJlbmRlclN0eWxlOjptYXJxdWVlRGlyZWN0aW9uLCBFTWFycXVlZURpcmVjdGlvbiwg
JlJlbmRlclN0eWxlOjpzZXRNYXJxdWVlRGlyZWN0aW9uLCBFTWFycXVlZURpcmVjdGlvbiwgJlJl
bmRlclN0eWxlOjppbml0aWFsTWFycXVlZURpcmVjdGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7CiAg
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVN0eWxlLCBBcHBs
eVByb3BlcnR5RGVmYXVsdDxFTWFycXVlZUJlaGF2aW9yLCAmUmVuZGVyU3R5bGU6Om1hcnF1ZWVC
ZWhhdmlvciwgRU1hcnF1ZWVCZWhhdmlvciwgJlJlbmRlclN0eWxlOjpzZXRNYXJxdWVlQmVoYXZp
b3IsIEVNYXJxdWVlQmVoYXZpb3IsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1hcnF1ZWVCZWhhdmlv
cj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5
V2Via2l0TWFza0F0dGFjaG1lbnQsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8RUZpbGxBdHRhY2ht
ZW50LCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tBdHRhY2htZW50LCBNYXNrRmlsbExheWVyLCAmUmVu
ZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJkZp
bGxMYXllcjo6aXNBdHRhY2htZW50U2V0LCAmRmlsbExheWVyOjphdHRhY2htZW50LCAmRmlsbExh
eWVyOjpzZXRBdHRhY2htZW50LCAmRmlsbExheWVyOjpjbGVhckF0dGFjaG1lbnQsICZGaWxsTGF5
ZXI6OmluaXRpYWxGaWxsQXR0YWNobWVudCwgJkNTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxBdHRh
Y2htZW50Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRNYXNrQXR0YWNobWVudCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbEF0
dGFjaG1lbnQsIENTU1Byb3BlcnR5V2Via2l0TWFza0F0dGFjaG1lbnQsIE1hc2tGaWxsTGF5ZXIs
ICZSZW5kZXJTdHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJz
LCAmRmlsbExheWVyOjppc0F0dGFjaG1lbnRTZXQsICZGaWxsTGF5ZXI6OmF0dGFjaG1lbnQsICZG
aWxsTGF5ZXI6OnNldEF0dGFjaG1lbnQsICZGaWxsTGF5ZXI6OmNsZWFyQXR0YWNobWVudCwgJkZp
bGxMYXllcjo6aW5pdGlhbEZpbGxBdHRhY2htZW50LCAmU3R5bGVSZXNvbHZlcjo6bWFwRmlsbEF0
dGFjaG1lbnQ+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSwgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlPE1hc2ss
IENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlLCAmUmVuZGVyU3R5bGU6Om1hc2tCb3hJbWFn
ZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrQm94SW1hZ2U+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZU91dHNldCwg
QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI8TWFzaywgT3V0c2V0Pjo6Y3JlYXRlSGFu
ZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94
SW1hZ2VSZXBlYXQsIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPE1hc2ssIFJlcGVh
dD46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5
V2Via2l0TWFza0JveEltYWdlU2xpY2UsIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVy
PE1hc2ssIFNsaWNlPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2UsIEFwcGx5UHJvcGVydHlCb3JkZXJJ
bWFnZVNvdXJjZTxDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZSwgJlJlbmRlclN0
eWxlOjptYXNrQm94SW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0JveEltYWdlU291
cmNlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxNYXNrQm94SW1hZ2VTb3VyY2U+OjpjcmVhdGVIYW5k
bGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJ
bWFnZVdpZHRoLCBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjxNYXNrLCBXaWR0aD46
OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0TWFza0NsaXAsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8RUZpbGxCb3gsIENTU1Byb3BlcnR5
V2Via2l0TWFza0NsaXAsIE1hc2tGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzTWFza0xh
eWVycywgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmRmlsbExheWVyOjppc0NsaXBTZXQsICZG
aWxsTGF5ZXI6OmNsaXAsICZGaWxsTGF5ZXI6OnNldENsaXAsICZGaWxsTGF5ZXI6OmNsZWFyQ2xp
cCwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxDbGlwLCAmQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmls
bENsaXA+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tDb21wb3NpdGUsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8Q29tcG9zaXRl
T3BlcmF0b3IsIENTU1Byb3BlcnR5V2Via2l0TWFza0NvbXBvc2l0ZSwgTWFza0ZpbGxMYXllciwg
JlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMs
ICZGaWxsTGF5ZXI6OmlzQ29tcG9zaXRlU2V0LCAmRmlsbExheWVyOjpjb21wb3NpdGUsICZGaWxs
TGF5ZXI6OnNldENvbXBvc2l0ZSwgJkZpbGxMYXllcjo6Y2xlYXJDb21wb3NpdGUsICZGaWxsTGF5
ZXI6OmluaXRpYWxGaWxsQ29tcG9zaXRlLCAmQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbENvbXBv
c2l0ZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0TWFza0ltYWdlLCBBcHBseVByb3BlcnR5RmlsbExheWVyPFN0eWxlSW1hZ2UqLCBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSwgTWFza0ZpbGxMYXllciwgJlJlbmRlclN0eWxlOjph
Y2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZGaWxsTGF5ZXI6Omlz
SW1hZ2VTZXQsICZGaWxsTGF5ZXI6OmltYWdlLCAmRmlsbExheWVyOjpzZXRJbWFnZSwgJkZpbGxM
YXllcjo6Y2xlYXJJbWFnZSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxJbWFnZSwgJkNTU1N0eWxl
U2VsZWN0b3I6Om1hcEZpbGxJbWFnZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdpbiwgQXBwbHlQcm9wZXJ0eUZpbGxM
YXllcjxFRmlsbEJveCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luLCBNYXNrRmlsbExheWVy
LCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVy
cywgJkZpbGxMYXllcjo6aXNPcmlnaW5TZXQsICZGaWxsTGF5ZXI6Om9yaWdpbiwgJkZpbGxMYXll
cjo6c2V0T3JpZ2luLCAmRmlsbExheWVyOjpjbGVhck9yaWdpbiwgJkZpbGxMYXllcjo6aW5pdGlh
bEZpbGxPcmlnaW4sICZDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsT3JpZ2luPjo6Y3JlYXRlSGFu
ZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xp
cCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbEJveCwgQ1NTUHJvcGVydHlXZWJraXRNYXNr
Q2xpcCwgTWFza0ZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVu
ZGVyU3R5bGU6Om1hc2tMYXllcnMsICZGaWxsTGF5ZXI6OmlzQ2xpcFNldCwgJkZpbGxMYXllcjo6
Y2xpcCwgJkZpbGxMYXllcjo6c2V0Q2xpcCwgJkZpbGxMYXllcjo6Y2xlYXJDbGlwLCAmRmlsbExh
eWVyOjppbml0aWFsRmlsbENsaXAsICZTdHlsZVJlc29sdmVyOjptYXBGaWxsQ2xpcD46OmNyZWF0
ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFz
a0NvbXBvc2l0ZSwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxDb21wb3NpdGVPcGVyYXRvciwgQ1NT
UHJvcGVydHlXZWJraXRNYXNrQ29tcG9zaXRlLCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6
OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJkZpbGxMYXllcjo6
aXNDb21wb3NpdGVTZXQsICZGaWxsTGF5ZXI6OmNvbXBvc2l0ZSwgJkZpbGxMYXllcjo6c2V0Q29t
cG9zaXRlLCAmRmlsbExheWVyOjpjbGVhckNvbXBvc2l0ZSwgJkZpbGxMYXllcjo6aW5pdGlhbEZp
bGxDb21wb3NpdGUsICZTdHlsZVJlc29sdmVyOjptYXBGaWxsQ29tcG9zaXRlPjo6Y3JlYXRlSGFu
ZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1h
Z2UsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8U3R5bGVJbWFnZSosIENTU1Byb3BlcnR5V2Via2l0
TWFza0ltYWdlLCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMs
ICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJkZpbGxMYXllcjo6aXNJbWFnZVNldCwgJkZpbGxM
YXllcjo6aW1hZ2UsICZGaWxsTGF5ZXI6OnNldEltYWdlLCAmRmlsbExheWVyOjpjbGVhckltYWdl
LCAmRmlsbExheWVyOjppbml0aWFsRmlsbEltYWdlLCAmU3R5bGVSZXNvbHZlcjo6bWFwRmlsbElt
YWdlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlXZWJraXRNYXNrT3JpZ2luLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEVGaWxsQm94LCBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4sIE1hc2tGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNj
ZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmRmlsbExheWVyOjppc09y
aWdpblNldCwgJkZpbGxMYXllcjo6b3JpZ2luLCAmRmlsbExheWVyOjpzZXRPcmlnaW4sICZGaWxs
TGF5ZXI6OmNsZWFyT3JpZ2luLCAmRmlsbExheWVyOjppbml0aWFsRmlsbE9yaWdpbiwgJlN0eWxl
UmVzb2x2ZXI6Om1hcEZpbGxPcmlnaW4+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbiwgQXBwbHlQcm9wZXJ0eUV4
cGFuZGluZzxTdXBwcmVzc1ZhbHVlLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblgsIENT
U1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0
UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgQXBwbHlQcm9w
ZXJ0eUZpbGxMYXllcjxMZW5ndGgsIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgTWFz
a0ZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6
Om1hc2tMYXllcnMsICZGaWxsTGF5ZXI6OmlzWFBvc2l0aW9uU2V0LCAmRmlsbExheWVyOjp4UG9z
aXRpb24sICZGaWxsTGF5ZXI6OnNldFhQb3NpdGlvbiwgJkZpbGxMYXllcjo6Y2xlYXJYUG9zaXRp
b24sICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsWFBvc2l0aW9uLCAmQ1NTU3R5bGVTZWxlY3Rvcjo6
bWFwRmlsbFhQb3NpdGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5k
bGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWSwgQXBwbHlQcm9wZXJ0eUZpbGxMYXll
cjxMZW5ndGgsIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWSwgTWFza0ZpbGxMYXllciwg
JlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMs
ICZGaWxsTGF5ZXI6OmlzWVBvc2l0aW9uU2V0LCAmRmlsbExheWVyOjp5UG9zaXRpb24sICZGaWxs
TGF5ZXI6OnNldFlQb3NpdGlvbiwgJkZpbGxMYXllcjo6Y2xlYXJZUG9zaXRpb24sICZGaWxsTGF5
ZXI6OmluaXRpYWxGaWxsWVBvc2l0aW9uLCAmQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFlQb3Np
dGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxMZW5ndGgsIENT
U1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgTWFza0ZpbGxMYXllciwgJlJlbmRlclN0eWxl
OjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZGaWxsTGF5ZXI6
OmlzWFBvc2l0aW9uU2V0LCAmRmlsbExheWVyOjp4UG9zaXRpb24sICZGaWxsTGF5ZXI6OnNldFhQ
b3NpdGlvbiwgJkZpbGxMYXllcjo6Y2xlYXJYUG9zaXRpb24sICZGaWxsTGF5ZXI6OmluaXRpYWxG
aWxsWFBvc2l0aW9uLCAmU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFhQb3NpdGlvbj46OmNyZWF0ZUhh
bmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1Bv
c2l0aW9uWSwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxMZW5ndGgsIENTU1Byb3BlcnR5V2Via2l0
TWFza1Bvc2l0aW9uWSwgTWFza0ZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5
ZXJzLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZGaWxsTGF5ZXI6OmlzWVBvc2l0aW9uU2V0
LCAmRmlsbExheWVyOjp5UG9zaXRpb24sICZGaWxsTGF5ZXI6OnNldFlQb3NpdGlvbiwgJkZpbGxM
YXllcjo6Y2xlYXJZUG9zaXRpb24sICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsWVBvc2l0aW9uLCAm
U3R5bGVSZXNvbHZlcjo6bWFwRmlsbFlQb3NpdGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdCwgQXBwbHlQcm9w
ZXJ0eUV4cGFuZGluZzxTdXBwcmVzc1ZhbHVlLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRY
LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WCwgQXBwbHlQcm9w
ZXJ0eUZpbGxMYXllcjxFRmlsbFJlcGVhdCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WCwg
TWFza0ZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5
bGU6Om1hc2tMYXllcnMsICZGaWxsTGF5ZXI6OmlzUmVwZWF0WFNldCwgJkZpbGxMYXllcjo6cmVw
ZWF0WCwgJkZpbGxMYXllcjo6c2V0UmVwZWF0WCwgJkZpbGxMYXllcjo6Y2xlYXJSZXBlYXRYLCAm
RmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVhdFgsICZDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxs
UmVwZWF0WD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5V2Via2l0TWFza1JlcGVhdFksIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8RUZpbGxSZXBl
YXQsIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFksIE1hc2tGaWxsTGF5ZXIsICZSZW5kZXJT
dHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmRmlsbExh
eWVyOjppc1JlcGVhdFlTZXQsICZGaWxsTGF5ZXI6OnJlcGVhdFksICZGaWxsTGF5ZXI6OnNldFJl
cGVhdFksICZGaWxsTGF5ZXI6OmNsZWFyUmVwZWF0WSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxS
ZXBlYXRZLCAmQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFJlcGVhdFk+OjpjcmVhdGVIYW5kbGVy
KCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplLCBB
cHBseVByb3BlcnR5RmlsbExheWVyPEZpbGxTaXplLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXpl
LCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJT
dHlsZTo6bWFza0xheWVycywgJkZpbGxMYXllcjo6aXNTaXplU2V0LCAmRmlsbExheWVyOjpzaXpl
LCAmRmlsbExheWVyOjpzZXRTaXplLCAmRmlsbExheWVyOjpjbGVhclNpemUsICZGaWxsTGF5ZXI6
OmluaXRpYWxGaWxsU2l6ZSwgJkNTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxTaXplPjo6Y3JlYXRl
SGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNr
UmVwZWF0WCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbFJlcGVhdCwgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUmVwZWF0WCwgTWFza0ZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NNYXNr
TGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZGaWxsTGF5ZXI6OmlzUmVwZWF0WFNl
dCwgJkZpbGxMYXllcjo6cmVwZWF0WCwgJkZpbGxMYXllcjo6c2V0UmVwZWF0WCwgJkZpbGxMYXll
cjo6Y2xlYXJSZXBlYXRYLCAmRmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVhdFgsICZTdHlsZVJl
c29sdmVyOjptYXBGaWxsUmVwZWF0WD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFksIEFwcGx5UHJvcGVydHlGaWxs
TGF5ZXI8RUZpbGxSZXBlYXQsIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFksIE1hc2tGaWxs
TGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxlOjptYXNr
TGF5ZXJzLCAmRmlsbExheWVyOjppc1JlcGVhdFlTZXQsICZGaWxsTGF5ZXI6OnJlcGVhdFksICZG
aWxsTGF5ZXI6OnNldFJlcGVhdFksICZGaWxsTGF5ZXI6OmNsZWFyUmVwZWF0WSwgJkZpbGxMYXll
cjo6aW5pdGlhbEZpbGxSZXBlYXRZLCAmU3R5bGVSZXNvbHZlcjo6bWFwRmlsbFJlcGVhdFk+Ojpj
cmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dE1hc2tTaXplLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEZpbGxTaXplLCBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tTaXplLCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXll
cnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJkZpbGxMYXllcjo6aXNTaXplU2V0LCAmRmls
bExheWVyOjpzaXplLCAmRmlsbExheWVyOjpzZXRTaXplLCAmRmlsbExheWVyOjpjbGVhclNpemUs
ICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsU2l6ZSwgJlN0eWxlUmVzb2x2ZXI6Om1hcEZpbGxTaXpl
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRNYXRjaE5lYXJlc3RNYWlsQmxvY2txdW90ZUNvbG9yLCBBcHBseVByb3BlcnR5RGVmYXVs
dDxFTWF0Y2hOZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvciwgJlJlbmRlclN0eWxlOjptYXRjaE5l
YXJlc3RNYWlsQmxvY2txdW90ZUNvbG9yLCBFTWF0Y2hOZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRNYXRjaE5lYXJlc3RNYWlsQmxvY2txdW90ZUNvbG9yLCBFTWF0
Y2hOZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvciwgJlJlbmRlclN0eWxlOjppbml0aWFsTWF0Y2hO
ZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvcj46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJv
cGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TmJzcE1vZGUsIEFwcGx5UHJvcGVydHlEZWZh
dWx0PEVOQlNQTW9kZSwgJlJlbmRlclN0eWxlOjpuYnNwTW9kZSwgRU5CU1BNb2RlLCAmUmVuZGVy
U3R5bGU6OnNldE5CU1BNb2RlLCBFTkJTUE1vZGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE5CU1BN
b2RlPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlXZWJraXRQZXJzcGVjdGl2ZU9yaWdpbiwgQXBwbHlQcm9wZXJ0eUV4cGFuZGluZzxTdXBwcmVz
c1ZhbHVlLCBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luWCwgQ1NTUHJvcGVydHlX
ZWJraXRQZXJzcGVjdGl2ZU9yaWdpblk+OjpjcmVhdGVIYW5kbGVyKCkpOwpAQCAtMjAwMywxMCAr
MjAwMywxMCBAQCBTdHlsZUJ1aWxkZXI6OlN0eWxlQnVpbGRlcigpCiAgICAgc2V0UHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWSwgQXBwbHlQcm9wZXJ0eUxl
bmd0aDwmUmVuZGVyU3R5bGU6OnRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHlsZTo6c2V0VHJh
bnNmb3JtT3JpZ2luWSwgJlJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNmb3JtT3JpZ2luWT46OmNy
ZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0
VHJhbnNmb3JtT3JpZ2luWiwgQXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg8ZmxvYXQsICZSZW5k
ZXJTdHlsZTo6dHJhbnNmb3JtT3JpZ2luWiwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1Pcmln
aW5aLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFuc2Zvcm1PcmlnaW5aPjo6Y3JlYXRlSGFuZGxl
cigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1T
dHlsZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVRyYW5zZm9ybVN0eWxlM0QsICZSZW5kZXJTdHls
ZTo6dHJhbnNmb3JtU3R5bGUzRCwgRVRyYW5zZm9ybVN0eWxlM0QsICZSZW5kZXJTdHlsZTo6c2V0
VHJhbnNmb3JtU3R5bGUzRCwgRVRyYW5zZm9ybVN0eWxlM0QsICZSZW5kZXJTdHlsZTo6aW5pdGlh
bFRyYW5zZm9ybVN0eWxlM0Q+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheSwgQXBwbHlQcm9wZXJ0eUFuaW1h
dGlvbjxkb3VibGUsICZBbmltYXRpb246OmRlbGF5LCAmQW5pbWF0aW9uOjpzZXREZWxheSwgJkFu
aW1hdGlvbjo6aXNEZWxheVNldCwgJkFuaW1hdGlvbjo6Y2xlYXJEZWxheSwgJkFuaW1hdGlvbjo6
aW5pdGlhbEFuaW1hdGlvbkRlbGF5LCAmQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uRGVs
YXksICZSZW5kZXJTdHlsZTo6YWNjZXNzVHJhbnNpdGlvbnMsICZSZW5kZXJTdHlsZTo6dHJhbnNp
dGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxkb3Vi
bGUsICZBbmltYXRpb246OmR1cmF0aW9uLCAmQW5pbWF0aW9uOjpzZXREdXJhdGlvbiwgJkFuaW1h
dGlvbjo6aXNEdXJhdGlvblNldCwgJkFuaW1hdGlvbjo6Y2xlYXJEdXJhdGlvbiwgJkFuaW1hdGlv
bjo6aW5pdGlhbEFuaW1hdGlvbkR1cmF0aW9uLCAmQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0
aW9uRHVyYXRpb24sICZSZW5kZXJTdHlsZTo6YWNjZXNzVHJhbnNpdGlvbnMsICZSZW5kZXJTdHls
ZTo6dHJhbnNpdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxl
cihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eSwgQXBwbHlQcm9wZXJ0eUFuaW1h
dGlvbjxDU1NQcm9wZXJ0eUlELCAmQW5pbWF0aW9uOjpwcm9wZXJ0eSwgJkFuaW1hdGlvbjo6c2V0
UHJvcGVydHksICZBbmltYXRpb246OmlzUHJvcGVydHlTZXQsICZBbmltYXRpb246OmNsZWFyUHJv
cGVydHksICZBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25Qcm9wZXJ0eSwgJkNTU1N0eWxlU2Vs
ZWN0b3I6Om1hcEFuaW1hdGlvblByb3BlcnR5LCAmUmVuZGVyU3R5bGU6OmFjY2Vzc1RyYW5zaXRp
b25zLCAmUmVuZGVyU3R5bGU6OnRyYW5zaXRpb25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rp
b24sIEFwcGx5UHJvcGVydHlBbmltYXRpb248Y29uc3QgUGFzc1JlZlB0cjxUaW1pbmdGdW5jdGlv
bj4sICZBbmltYXRpb246OnRpbWluZ0Z1bmN0aW9uLCAmQW5pbWF0aW9uOjpzZXRUaW1pbmdGdW5j
dGlvbiwgJkFuaW1hdGlvbjo6aXNUaW1pbmdGdW5jdGlvblNldCwgJkFuaW1hdGlvbjo6Y2xlYXJU
aW1pbmdGdW5jdGlvbiwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9u
LCAmQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24sICZSZW5kZXJT
dHlsZTo6YWNjZXNzVHJhbnNpdGlvbnMsICZSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbnM+OjpjcmVh
dGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRy
YW5zaXRpb25EZWxheSwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxkb3VibGUsICZBbmltYXRpb246
OmRlbGF5LCAmQW5pbWF0aW9uOjpzZXREZWxheSwgJkFuaW1hdGlvbjo6aXNEZWxheVNldCwgJkFu
aW1hdGlvbjo6Y2xlYXJEZWxheSwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkRlbGF5LCAm
U3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uRGVsYXksICZSZW5kZXJTdHlsZTo6YWNjZXNzVHJh
bnNpdGlvbnMsICZSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwor
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlv
biwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxkb3VibGUsICZBbmltYXRpb246OmR1cmF0aW9uLCAm
QW5pbWF0aW9uOjpzZXREdXJhdGlvbiwgJkFuaW1hdGlvbjo6aXNEdXJhdGlvblNldCwgJkFuaW1h
dGlvbjo6Y2xlYXJEdXJhdGlvbiwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkR1cmF0aW9u
LCAmU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uRHVyYXRpb24sICZSZW5kZXJTdHlsZTo6YWNj
ZXNzVHJhbnNpdGlvbnMsICZSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbnM+OjpjcmVhdGVIYW5kbGVy
KCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Q
cm9wZXJ0eSwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxDU1NQcm9wZXJ0eUlELCAmQW5pbWF0aW9u
Ojpwcm9wZXJ0eSwgJkFuaW1hdGlvbjo6c2V0UHJvcGVydHksICZBbmltYXRpb246OmlzUHJvcGVy
dHlTZXQsICZBbmltYXRpb246OmNsZWFyUHJvcGVydHksICZBbmltYXRpb246OmluaXRpYWxBbmlt
YXRpb25Qcm9wZXJ0eSwgJlN0eWxlUmVzb2x2ZXI6Om1hcEFuaW1hdGlvblByb3BlcnR5LCAmUmVu
ZGVyU3R5bGU6OmFjY2Vzc1RyYW5zaXRpb25zLCAmUmVuZGVyU3R5bGU6OnRyYW5zaXRpb25zPjo6
Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24sIEFwcGx5UHJvcGVydHlBbmltYXRpb248Y29uc3Qg
UGFzc1JlZlB0cjxUaW1pbmdGdW5jdGlvbj4sICZBbmltYXRpb246OnRpbWluZ0Z1bmN0aW9uLCAm
QW5pbWF0aW9uOjpzZXRUaW1pbmdGdW5jdGlvbiwgJkFuaW1hdGlvbjo6aXNUaW1pbmdGdW5jdGlv
blNldCwgJkFuaW1hdGlvbjo6Y2xlYXJUaW1pbmdGdW5jdGlvbiwgJkFuaW1hdGlvbjo6aW5pdGlh
bEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uLCAmU3R5bGVSZXNvbHZlcjo6bWFwQW5pbWF0aW9uVGlt
aW5nRnVuY3Rpb24sICZSZW5kZXJTdHlsZTo6YWNjZXNzVHJhbnNpdGlvbnMsICZSZW5kZXJTdHls
ZTo6dHJhbnNpdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxl
cihDU1NQcm9wZXJ0eVdlYmtpdFVzZXJEcmFnLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFVXNlckRy
YWcsICZSZW5kZXJTdHlsZTo6dXNlckRyYWcsIEVVc2VyRHJhZywgJlJlbmRlclN0eWxlOjpzZXRV
c2VyRHJhZywgRVVzZXJEcmFnLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxVc2VyRHJhZz46OmNyZWF0
ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VXNl
ck1vZGlmeSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVVzZXJNb2RpZnksICZSZW5kZXJTdHlsZTo6
dXNlck1vZGlmeSwgRVVzZXJNb2RpZnksICZSZW5kZXJTdHlsZTo6c2V0VXNlck1vZGlmeSwgRVVz
ZXJNb2RpZnksICZSZW5kZXJTdHlsZTo6aW5pdGlhbFVzZXJNb2RpZnk+OjpjcmVhdGVIYW5kbGVy
KCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFVzZXJTZWxlY3Qs
IEFwcGx5UHJvcGVydHlEZWZhdWx0PEVVc2VyU2VsZWN0LCAmUmVuZGVyU3R5bGU6OnVzZXJTZWxl
Y3QsIEVVc2VyU2VsZWN0LCAmUmVuZGVyU3R5bGU6OnNldFVzZXJTZWxlY3QsIEVVc2VyU2VsZWN0
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxVc2VyU2VsZWN0Pjo6Y3JlYXRlSGFuZGxlcigpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaAppbmRleCA2OTJlYWI2MzJmNmU3YTY0ZTVjMGY4NzJiOTY4
NzY2ZTBiY2M3MzVjLi5iY2NlOGY0YjgxMjYzZjYxMGNmMDA3ZTQ1ZjEwODg3NjRkNWMzNDU1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oCkBAIC0zMSwyMCArMzEsMjAgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NTdHlsZVNlbGVjdG9yOwogY2xhc3MgQ1NTVmFsdWU7
CiBjbGFzcyBTdHlsZUJ1aWxkZXI7CitjbGFzcyBTdHlsZVJlc29sdmVyOwogCiBjbGFzcyBQcm9w
ZXJ0eUhhbmRsZXIgewogcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCAoKkluaGVyaXRGdW5jdGlv
bikoQ1NTU3R5bGVTZWxlY3RvciopOwotICAgIHR5cGVkZWYgdm9pZCAoKkluaXRpYWxGdW5jdGlv
bikoQ1NTU3R5bGVTZWxlY3RvciopOwotICAgIHR5cGVkZWYgdm9pZCAoKkFwcGx5RnVuY3Rpb24p
KENTU1N0eWxlU2VsZWN0b3IqLCBDU1NWYWx1ZSopOworICAgIHR5cGVkZWYgdm9pZCAoKkluaGVy
aXRGdW5jdGlvbikoU3R5bGVSZXNvbHZlciopOworICAgIHR5cGVkZWYgdm9pZCAoKkluaXRpYWxG
dW5jdGlvbikoU3R5bGVSZXNvbHZlciopOworICAgIHR5cGVkZWYgdm9pZCAoKkFwcGx5RnVuY3Rp
b24pKFN0eWxlUmVzb2x2ZXIqLCBDU1NWYWx1ZSopOwogICAgIFByb3BlcnR5SGFuZGxlcigpIDog
bV9pbmhlcml0KDApLCBtX2luaXRpYWwoMCksIG1fYXBwbHkoMCkgeyB9CiAgICAgUHJvcGVydHlI
YW5kbGVyKEluaGVyaXRGdW5jdGlvbiBpbmhlcml0LCBJbml0aWFsRnVuY3Rpb24gaW5pdGlhbCwg
QXBwbHlGdW5jdGlvbiBhcHBseSkgOiBtX2luaGVyaXQoaW5oZXJpdCksIG1faW5pdGlhbChpbml0
aWFsKSwgbV9hcHBseShhcHBseSkgeyB9Ci0gICAgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NT
dHlsZVNlbGVjdG9yKiBzZWxlY3RvcikgY29uc3QgeyBBU1NFUlQobV9pbmhlcml0KTsgKCptX2lu
aGVyaXQpKHNlbGVjdG9yKTsgfQotICAgIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IpIGNvbnN0IHsgQVNTRVJUKG1faW5pdGlhbCk7ICgqbV9pbml0aWFs
KShzZWxlY3Rvcik7IH0KLSAgICB2b2lkIGFwcGx5VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2Vs
ZWN0b3IsIENTU1ZhbHVlKiB2YWx1ZSkgY29uc3QgeyBBU1NFUlQobV9hcHBseSk7ICgqbV9hcHBs
eSkoc2VsZWN0b3IsIHZhbHVlKTsgfQorICAgIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5bGVS
ZXNvbHZlciogc2VsZWN0b3IpIGNvbnN0IHsgQVNTRVJUKG1faW5oZXJpdCk7ICgqbV9pbmhlcml0
KShzZWxlY3Rvcik7IH0KKyAgICB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKFN0eWxlUmVzb2x2ZXIq
IHNlbGVjdG9yKSBjb25zdCB7IEFTU0VSVChtX2luaXRpYWwpOyAoKm1faW5pdGlhbCkoc2VsZWN0
b3IpOyB9CisgICAgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBDU1NW
YWx1ZSogdmFsdWUpIGNvbnN0IHsgQVNTRVJUKG1fYXBwbHkpOyAoKm1fYXBwbHkpKHNlbGVjdG9y
LCB2YWx1ZSk7IH0KICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2luaGVyaXQg
JiYgbV9pbml0aWFsICYmIG1fYXBwbHk7IH0KICAgICBJbmhlcml0RnVuY3Rpb24gaW5oZXJpdEZ1
bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbmhlcml0OyB9CiAgICAgSW5pdGlhbEZ1bmN0aW9u
IGluaXRpYWxGdW5jdGlvbigpIHsgcmV0dXJuIG1faW5pdGlhbDsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
TWVkaWEuY3BwCmluZGV4IGJhMjY2NGRkMWNkNDEzNTllYTJlM2YyOTE1MjFjMzFkYzFjMTkxMmIu
LjFhN2MzMTIzNGU5ZjllOWI3Yzk1YTRlZjVhZmUzNjI0YzIwMjhiNGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVNZWRpYS5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgYm9vbCBTdHlsZU1lZGlhOjptYXRjaE1l
ZGl1bShjb25zdCBTdHJpbmcmIHF1ZXJ5KSBjb25zdAogICAgIGlmICghZG9jdW1lbnRFbGVtZW50
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNl
bGVjdG9yID0gZG9jdW1lbnQtPnN0eWxlU2VsZWN0b3IoKTsKKyAgICBTdHlsZVJlc29sdmVyKiBz
dHlsZVNlbGVjdG9yID0gZG9jdW1lbnQtPnN0eWxlU2VsZWN0b3IoKTsKICAgICBpZiAoIXN0eWxl
U2VsZWN0b3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwCmluZGV4IGZhMGRjYmVhNGNiZDYwYzAwODUwYWJj
MzliNzI0YTU2M2JhOGY4ZDcuLjgxYjA0NzU2YjZiMjA1MzNlMWQ5NTk0MGJiMTZjMTEyZTdiNGMy
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAK
QEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpzZXROYW1lKGNv
bnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBtX2tleWZyYW1lc1J1bGUtPnNldE5hbWUobmFtZSk7
CiAKLSAgICAvLyBTaW5jZSB0aGUgbmFtZSBpcyB1c2VkIGluIHRoZSBrZXlmcmFtZSBtYXAgbGlz
dCBpbiBDU1NTdHlsZVNlbGVjdG9yLCB3ZSBuZWVkCisgICAgLy8gU2luY2UgdGhlIG5hbWUgaXMg
dXNlZCBpbiB0aGUga2V5ZnJhbWUgbWFwIGxpc3QgaW4gU3R5bGVSZXNvbHZlciwgd2UgbmVlZAog
ICAgIC8vIHRvIHJlY29tcHV0ZSB0aGUgc3R5bGUgc2hlZXQgdG8gZ2V0IHRoZSB1cGRhdGVkIG5h
bWUuCiAgICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0
KCkpCiAgICAgICAgIHN0eWxlU2hlZXQtPnN0eWxlU2hlZXRDaGFuZ2VkKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCmluZGV4IGFmZWJhNzFmODllOTkyOGI4ZjRlNWZhNTA0
MWE2MTJjOWZkZjRkZWQuLjFlODQ3MWZmNTcxMjNkNzQxZTk3ZjE1NGNmOTljOTgyZDMxOTQzZGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCkBAIC02Myw3ICs2Myw3IEBA
IHZvaWQgV2ViS2l0Q1NTTWF0cml4OjpzZXRNYXRyaXhWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmlu
ZywgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgICAgICBpZiAoIUNTU1N0eWxlU2VsZWN0
b3I6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWUuZ2V0KCksIDAsIDAsIG9wZXJhdGlv
bnMpKSB7CisgICAgICAgIGlmICghU3R5bGVSZXNvbHZlcjo6Y3JlYXRlVHJhbnNmb3JtT3BlcmF0
aW9ucyh2YWx1ZS5nZXQoKSwgMCwgMCwgb3BlcmF0aW9ucykpIHsKICAgICAgICAgICAgIGVjID0g
U1lOVEFYX0VSUjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKaW5kZXggMjk4MmQ0NWFhMjgzOTI5ZGFjM2Y2NmZmMDYwYzhiMzY3OGU0Y2Q0ZS4u
YWZhZDZiNjg1MjhjMzJiNGVkYWQ2ZDBiYmFhNzcyNjBlOTdhZWY4MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCkBAIC0xNzI1LDcgKzE3MjUsNyBAQCB2b2lkIERvY3VtZW50OjpyZWNhbGNTdHls
ZShTdHlsZUNoYW5nZSBjaGFuZ2UpCiAgICAgICAgIC8vIHN0eWxlIHNlbGVjdG9yIG1heSBzZXQg
dGhpcyBhZ2FpbiBkdXJpbmcgcmVjYWxjCiAgICAgICAgIG1faGFzTm9kZXNXaXRoUGxhY2Vob2xk
ZXJTdHlsZSA9IGZhbHNlOwogICAgICAgICAKLSAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBk
b2N1bWVudFN0eWxlID0gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JEb2N1bWVudCh0aGlzLCBt
X3N0eWxlU2VsZWN0b3IgPyBtX3N0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpIDogMCk7Cisg
ICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gZG9jdW1lbnRTdHlsZSA9IFN0eWxlUmVzb2x2ZXI6
OnN0eWxlRm9yRG9jdW1lbnQodGhpcywgbV9zdHlsZVNlbGVjdG9yID8gbV9zdHlsZVNlbGVjdG9y
LT5mb250U2VsZWN0b3IoKSA6IDApOwogICAgICAgICBTdHlsZUNoYW5nZSBjaCA9IE5vZGU6OmRp
ZmYoZG9jdW1lbnRTdHlsZS5nZXQoKSwgcmVuZGVyZXIoKS0+c3R5bGUoKSwgdGhpcyk7CiAgICAg
ICAgIGlmIChjaCAhPSBOb0NoYW5nZSkKICAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldFN0eWxl
KGRvY3VtZW50U3R5bGUucmVsZWFzZSgpKTsKQEAgLTE5NjIsNyArMTk2Miw3IEBAIHZvaWQgRG9j
dW1lbnQ6OmNyZWF0ZVN0eWxlU2VsZWN0b3IoKQogICAgIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2Vy
U3R5bGVzID0gdHJ1ZTsKICAgICBpZiAoU2V0dGluZ3MqIGRvY1NldHRpbmdzID0gc2V0dGluZ3Mo
KSkKICAgICAgICAgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzID0gZG9jU2V0dGluZ3MtPmF1dGhv
ckFuZFVzZXJTdHlsZXNFbmFibGVkKCk7Ci0gICAgbV9zdHlsZVNlbGVjdG9yID0gYWRvcHRQdHIo
bmV3IENTU1N0eWxlU2VsZWN0b3IodGhpcywgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSk7Cisg
ICAgbV9zdHlsZVNlbGVjdG9yID0gYWRvcHRQdHIobmV3IFN0eWxlUmVzb2x2ZXIodGhpcywgbWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSk7CiAgICAgY29tYmluZUNTU0ZlYXR1cmVGbGFncygpOwog
fQogCkBAIC0zMzk4LDcgKzMzOTgsNyBAQCBib29sIERvY3VtZW50Ojp0ZXN0QWRkZWRTdHlsZXNo
ZWV0UmVxdWlyZXNTdHlsZVJlY2FsYyhTdHlsZVNoZWV0SW50ZXJuYWwqIHN0eWxlcwogICAgIC8v
IFRoZW4gdGVzdCBpZiB3ZSBhY3R1YWxseSBoYXZlIGFueSBvZiB0aG9zZSBpbiB0aGUgdHJlZSBh
dCB0aGUgbW9tZW50LgogICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGlkU2NvcGVzOyAK
ICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBjbGFzc1Njb3BlczsKLSAgICBpZiAoIUNT
U1N0eWxlU2VsZWN0b3I6OmRldGVybWluZVN0eWxlc2hlZXRTZWxlY3RvclNjb3BlcyhzdHlsZXNo
ZWV0LCBpZFNjb3BlcywgY2xhc3NTY29wZXMpKQorICAgIGlmICghU3R5bGVSZXNvbHZlcjo6ZGV0
ZXJtaW5lU3R5bGVzaGVldFNlbGVjdG9yU2NvcGVzKHN0eWxlc2hlZXQsIGlkU2NvcGVzLCBjbGFz
c1Njb3BlcykpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIC8vIEludmFsaWRhdGUgdGhlIHN1
YnRyZWVzIHRoYXQgbWF0Y2ggdGhlIHNjb3Blcy4KICAgICBOb2RlKiBub2RlID0gZmlyc3RDaGls
ZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCBjNGUxZDM4NzY2ZWU1ZGQyMjQxOTAzYmI1MTk0
ZGY4MjI3NTliYWRmLi4xYjQyNWI1Nzc2ZTNjZDE1MjZhOGJiZjUxZTI5NTJkMDI4MTE1MzYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaApAQCAtNjEsNyArNjEsNiBAQCBjbGFzcyBBWE9iamVjdENhY2hl
OwogY2xhc3MgQXR0cjsKIGNsYXNzIENEQVRBU2VjdGlvbjsKIGNsYXNzIENTU1N0eWxlRGVjbGFy
YXRpb247Ci1jbGFzcyBDU1NTdHlsZVNlbGVjdG9yOwogY2xhc3MgQ1NTU3R5bGVTaGVldDsKIGNs
YXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKQEAg
LTEyNiw2ICsxMjUsNyBAQCBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIGNsYXNzIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTsKIGNsYXNzIFNlZ21lbnRlZFN0cmluZzsKIGNsYXNzIFNldHRpbmdzOworY2xh
c3MgU3R5bGVSZXNvbHZlcjsKIGNsYXNzIFN0eWxlU2hlZXQ7CiBjbGFzcyBTdHlsZVNoZWV0SW50
ZXJuYWw7CiBjbGFzcyBTdHlsZVNoZWV0TGlzdDsKQEAgLTQ1NCwxNCArNDU0LDE0IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaXNTcmNkb2NEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTcmNk
b2NEb2N1bWVudDsgfQogCi0gICAgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcklmRXhp
c3RzKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNlbGVjdG9yLmdldCgpOyB9CisgICAgU3R5bGVS
ZXNvbHZlciogc3R5bGVTZWxlY3RvcklmRXhpc3RzKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNl
bGVjdG9yLmdldCgpOyB9CiAKICAgICBib29sIGlzVmlld1NvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1faXNWaWV3U291cmNlOyB9CiAgICAgdm9pZCBzZXRJc1ZpZXdTb3VyY2UoYm9vbCk7CiAKICAg
ICBib29sIHNhd0VsZW1lbnRzSW5Lbm93bk5hbWVzcGFjZXMoKSBjb25zdCB7IHJldHVybiBtX3Nh
d0VsZW1lbnRzSW5Lbm93bk5hbWVzcGFjZXM7IH0KIAotICAgIENTU1N0eWxlU2VsZWN0b3IqIHN0
eWxlU2VsZWN0b3IoKQorICAgIFN0eWxlUmVzb2x2ZXIqIHN0eWxlU2VsZWN0b3IoKQogICAgIHsg
CiAgICAgICAgIGlmICghbV9zdHlsZVNlbGVjdG9yKQogICAgICAgICAgICAgY3JlYXRlU3R5bGVT
ZWxlY3RvcigpOwpAQCAtMTIyNCw3ICsxMjI0LDcgQEAgcHJpdmF0ZToKIAogICAgIGludCBtX2d1
YXJkUmVmQ291bnQ7CiAKLSAgICBPd25QdHI8Q1NTU3R5bGVTZWxlY3Rvcj4gbV9zdHlsZVNlbGVj
dG9yOworICAgIE93blB0cjxTdHlsZVJlc29sdmVyPiBtX3N0eWxlU2VsZWN0b3I7CiAgICAgYm9v
bCBtX2RpZENhbGN1bGF0ZVN0eWxlU2VsZWN0b3I7CiAgICAgYm9vbCBtX2hhc0RpcnR5U3R5bGVT
ZWxlY3RvcjsKICAgICBWZWN0b3I8T3duUHRyPEZvbnREYXRhPiA+IG1fY3VzdG9tRm9udHM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKaW5kZXggYzE3NTI0MTNjN2U2NWUyNGE0ZTBmZmI5MWQ4YjQ3Zjg0
NDM5ZTQzYi4uNzk3MWY2MjhjYzhhNDA3ODEwN2EyYzcwZmUzMTBmNmMxNzBhZmE4NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcApAQCAtMTE0LDcgKzExNCw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToK
ICAgICBFbGVtZW50KiBtX3BhcmVudDsKLSAgICBDU1NTdHlsZVNlbGVjdG9yKiBtX3B1c2hlZFN0
eWxlU2VsZWN0b3I7CisgICAgU3R5bGVSZXNvbHZlciogbV9wdXNoZWRTdHlsZVNlbGVjdG9yOwog
fTsKIAogUGFzc1JlZlB0cjxFbGVtZW50PiBFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQpAQCAtNjk3LDcgKzY5Nyw3IEBAIHZv
aWQgRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIpCiAgICAgICAgIHNl
dEhhc05hbWUoIWF0dHItPmlzTnVsbCgpKTsKIAogICAgIGlmICghbmVlZHNTdHlsZVJlY2FsYygp
ICYmIGRvY3VtZW50KCktPmF0dGFjaGVkKCkpIHsKLSAgICAgICAgQ1NTU3R5bGVTZWxlY3Rvciog
c3R5bGVTZWxlY3RvciA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3JJZkV4aXN0cygpOworICAg
ICAgICBTdHlsZVJlc29sdmVyKiBzdHlsZVNlbGVjdG9yID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxl
Y3RvcklmRXhpc3RzKCk7CiAgICAgICAgIGlmICghc3R5bGVTZWxlY3RvciB8fCBzdHlsZVNlbGVj
dG9yLT5oYXNTZWxlY3RvckZvckF0dHJpYnV0ZShhdHRyLT5uYW1lKCkubG9jYWxOYW1lKCkpKQog
ICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIH0KQEAgLTEzNDgsNyArMTM0
OCw3IEBAIHZvaWQgRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2Vy
LCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmCiB2b2lkIEVsZW1lbnQ6OmJlZ2luUGFyc2lu
Z0NoaWxkcmVuKCkKIHsKICAgICBjbGVhcklzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQoKTsKLSAg
ICBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxl
Y3RvcklmRXhpc3RzKCk7CisgICAgU3R5bGVSZXNvbHZlciogc3R5bGVTZWxlY3RvciA9IGRvY3Vt
ZW50KCktPnN0eWxlU2VsZWN0b3JJZkV4aXN0cygpOwogICAgIGlmIChzdHlsZVNlbGVjdG9yICYm
IGF0dGFjaGVkKCkpCiAgICAgICAgIHN0eWxlU2VsZWN0b3ItPnB1c2hQYXJlbnRFbGVtZW50KHRo
aXMpOwogfQpAQCAtMTM1OCw3ICsxMzU4LDcgQEAgdm9pZCBFbGVtZW50OjpmaW5pc2hQYXJzaW5n
Q2hpbGRyZW4oKQogICAgIENvbnRhaW5lck5vZGU6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwog
ICAgIHNldElzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQoKTsKICAgICBjaGVja0ZvclNpYmxpbmdT
dHlsZUNoYW5nZXModGhpcywgcmVuZGVyU3R5bGUoKSwgdHJ1ZSwgbGFzdENoaWxkKCksIDAsIDAp
OwotICAgIGlmIChDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yID0gZG9jdW1lbnQoKS0+
c3R5bGVTZWxlY3RvcklmRXhpc3RzKCkpCisgICAgaWYgKFN0eWxlUmVzb2x2ZXIqIHN0eWxlU2Vs
ZWN0b3IgPSBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9ySWZFeGlzdHMoKSkKICAgICAgICAgc3R5
bGVTZWxlY3Rvci0+cG9wUGFyZW50RWxlbWVudCh0aGlzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRv
d1Jvb3QuY3BwCmluZGV4IGU3NTBiYzIyYjQ0ZGI3NWE3ZWU0OTZiZTk5NDFiYmU5Zjg0MjNlYTUu
LjE5NGE1NmZlN2M0M2NhZjM4ODcxYTMyYTFmNjVhZTQ1Y2Q5OGQ4MzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2hhZG93Um9vdC5jcHAKQEAgLTIwMCw3ICsyMDAsNyBAQCB2b2lkIFNoYWRvd1Jvb3Q6OnNldEFw
cGx5QXV0aG9yU2hlZXRzKGJvb2wgdmFsdWUpCiAKIHZvaWQgU2hhZG93Um9vdDo6YXR0YWNoKCkK
IHsKLSAgICBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yID0gZG9jdW1lbnQoKS0+c3R5
bGVTZWxlY3RvcigpOworICAgIFN0eWxlUmVzb2x2ZXIqIHN0eWxlU2VsZWN0b3IgPSBkb2N1bWVu
dCgpLT5zdHlsZVNlbGVjdG9yKCk7CiAgICAgc3R5bGVTZWxlY3Rvci0+cHVzaFBhcmVudFNoYWRv
d1Jvb3QodGhpcyk7CiAgICAgRG9jdW1lbnRGcmFnbWVudDo6YXR0YWNoKCk7CiAgICAgc3R5bGVT
ZWxlY3Rvci0+cG9wUGFyZW50U2hhZG93Um9vdCh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TaGFkb3dUcmVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dUcmVl
LmNwcAppbmRleCAxNzFjZGRiMTc2MzI3Y2VlYjNlMDFkY2FmM2U1ZGI1NWE5MjUyZmE5Li43YTYw
YjdlNTFjOTQxMTM3ZGE4OTg0NzZmYTM5ZTkyNjg3MmZmOTYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2hhZG93VHJlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRv
d1RyZWUuY3BwCkBAIC0yMjEsNyArMjIxLDcgQEAgdm9pZCBTaGFkb3dUcmVlOjpyZWNhbGNTaGFk
b3dUcmVlU3R5bGUoTm9kZTo6U3R5bGVDaGFuZ2UgY2hhbmdlKQogICAgIGlmIChuZWVkc1JlYXR0
YWNoSG9zdENoaWxkcmVuQW5kU2hhZG93KCkpCiAgICAgICAgIHJlYXR0YWNoSG9zdENoaWxkcmVu
QW5kU2hhZG93KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxl
U2VsZWN0b3IgPSB5b3VuZ2VzdC0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOworICAgICAg
ICBTdHlsZVJlc29sdmVyKiBzdHlsZVNlbGVjdG9yID0geW91bmdlc3QtPmRvY3VtZW50KCktPnN0
eWxlU2VsZWN0b3IoKTsKIAogICAgICAgICBzdHlsZVNlbGVjdG9yLT5wdXNoUGFyZW50U2hhZG93
Um9vdCh5b3VuZ2VzdCk7CiAgICAgICAgIGZvciAoTm9kZSogbiA9IHlvdW5nZXN0LT5maXJzdENo
aWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmdTdHlsZS5jcHAKaW5kZXggOWRkM2NlNDAzMTk0Y2M0YTczMzNjNmFjNGJkYjlhM2EzMDBi
MjhiZC4uYjY5NmNmNDA0OGQ5NzJhN2NhMzMzZjNhYTg0YTQwOTE1MWM1MTAyOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcApAQCAtMTA0Niw3ICsxMDQ2LDcgQEAgc3Rh
dGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9y
RWxlbWVudChFbGVtZW50KiBlbGUKIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlRnJvbVJ1
bGVzKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlT
ZXQ+IHN0eWxlRnJvbU1hdGNoZWRSdWxlcyA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1l
bnQoZWxlbWVudCwKLSAgICAgICAgQ1NTU3R5bGVTZWxlY3Rvcjo6QXV0aG9yQ1NTUnVsZXMgfCBD
U1NTdHlsZVNlbGVjdG9yOjpDcm9zc09yaWdpbkNTU1J1bGVzKTsKKyAgICAgICAgU3R5bGVSZXNv
bHZlcjo6QXV0aG9yQ1NTUnVsZXMgfCBTdHlsZVJlc29sdmVyOjpDcm9zc09yaWdpbkNTU1J1bGVz
KTsKICAgICAvLyBTdHlsZXMgZnJvbSB0aGUgaW5saW5lIHN0eWxlIGRlY2xhcmF0aW9uLCBoZWxk
IGluIHRoZSB2YXJpYWJsZSAic3R5bGUiLCB0YWtlIHByZWNlZGVuY2UgCiAgICAgLy8gb3ZlciB0
aG9zZSBmcm9tIG1hdGNoZWQgcnVsZXMuCiAgICAgaWYgKG1fbXV0YWJsZVN0eWxlKQpAQCAtMTA5
OCw3ICsxMDk4LDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5k
Q29udGV4dChTdHlsZWRFbGVtZW50KiBlbGVtZW50LCBOb2RlKgogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyAxLiBSZW1vdmUgc3R5bGUgZnJvbSBtYXRjaGVkIHJ1bGVzIGJlY2F1c2Ugc3R5bGUg
cmVtYWluIHdpdGhvdXQgcmVwZWF0aW5nIGl0IGluIGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbgot
ICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZUZyb21NYXRjaGVkUnVsZXMgPSBzdHls
ZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIENTU1N0eWxlU2VsZWN0b3I6OkFs
bEJ1dEVtcHR5Q1NTUnVsZXMpOworICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZUZy
b21NYXRjaGVkUnVsZXMgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQs
IFN0eWxlUmVzb2x2ZXI6OkFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwogICAgIGlmIChzdHlsZUZyb21N
YXRjaGVkUnVsZXMgJiYgIXN0eWxlRnJvbU1hdGNoZWRSdWxlcy0+aXNFbXB0eSgpKQogICAgICAg
ICBtX211dGFibGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5nZXQo
KSwgc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkpOwog
CkBAIC0xMTI3LDcgKzExMjcsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlUHJvcGVydGll
c0luRWxlbWVudERlZmF1bHRTdHlsZShFbGVtZW50KiBlbGVtZW50KQogICAgIGlmICghbV9tdXRh
YmxlU3R5bGUgfHwgbV9tdXRhYmxlU3R5bGUtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGRlZmF1bHRTdHlsZSA9IHN0eWxlRnJvbU1h
dGNoZWRSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgQ1NTU3R5bGVTZWxlY3Rvcjo6VUFBbmRVc2Vy
Q1NTUnVsZXMpOworICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBkZWZhdWx0U3R5bGUgPSBz
dHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIFN0eWxlUmVzb2x2ZXI6OlVB
QW5kVXNlckNTU1J1bGVzKTsKIAogICAgIHJlbW92ZVByb3BlcnRpZXNJblN0eWxlKG1fbXV0YWJs
ZVN0eWxlLmdldCgpLCBkZWZhdWx0U3R5bGUuZ2V0KCkpOwogfQpAQCAtMTUzNCwxMCArMTUzNCwx
MCBAQCBpbnQgbGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUoRG9jdW1lbnQqIGRvY3VtZW50LCBD
U1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGJvbwogewogICAgIGlmIChpc0NTU1ZhbHVlTGVuZ3Ro
KHZhbHVlKSkgewogICAgICAgICBpbnQgcGl4ZWxGb250U2l6ZSA9IHZhbHVlLT5nZXRJbnRWYWx1
ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKLSAgICAgICAgaW50IGxlZ2FjeUZvbnRTaXpl
ID0gQ1NTU3R5bGVTZWxlY3Rvcjo6bGVnYWN5Rm9udFNpemUoZG9jdW1lbnQsIHBpeGVsRm9udFNp
emUsIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplKTsKKyAgICAgICAgaW50IGxlZ2FjeUZv
bnRTaXplID0gU3R5bGVSZXNvbHZlcjo6bGVnYWN5Rm9udFNpemUoZG9jdW1lbnQsIHBpeGVsRm9u
dFNpemUsIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplKTsKICAgICAgICAgLy8gVXNlIGxl
Z2FjeSBmb250IHNpemUgb25seSBpZiBwaXhlbCB2YWx1ZSBtYXRjaGVzIGV4YWN0bHkgdG8gdGhh
dCBvZiBsZWdhY3kgZm9udCBzaXplLgogICAgICAgICBpbnQgY3NzUHJpbWl0aXZlRXF1aXZhbGVu
dCA9IGxlZ2FjeUZvbnRTaXplIC0gMSArIENTU1ZhbHVlWFNtYWxsOwotICAgICAgICBpZiAobW9k
ZSA9PSBBbHdheXNVc2VMZWdhY3lGb250U2l6ZSB8fCBDU1NTdHlsZVNlbGVjdG9yOjpmb250U2l6
ZUZvcktleXdvcmQoZG9jdW1lbnQsIGNzc1ByaW1pdGl2ZUVxdWl2YWxlbnQsIHNob3VsZFVzZUZp
eGVkRm9udERlZmF1bHRTaXplKSA9PSBwaXhlbEZvbnRTaXplKQorICAgICAgICBpZiAobW9kZSA9
PSBBbHdheXNVc2VMZWdhY3lGb250U2l6ZSB8fCBTdHlsZVJlc29sdmVyOjpmb250U2l6ZUZvcktl
eXdvcmQoZG9jdW1lbnQsIGNzc1ByaW1pdGl2ZUVxdWl2YWxlbnQsIHNob3VsZFVzZUZpeGVkRm9u
dERlZmF1bHRTaXplKSA9PSBwaXhlbEZvbnRTaXplKQogICAgICAgICAgICAgcmV0dXJuIGxlZ2Fj
eUZvbnRTaXplOwogCiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmNwcAppbmRleCA4MzgyM2Q1OWFkOTcwMDhhMjkzMWY1OGYyOTQ0YTQwYThk
MWJmOTIzLi4xZmEyMDJmMjY3OWI2ZDFkNDJiMzllODY4MzIwY2Q1ZDczMTU1ZmE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMTYzMyw3ICsxNjMzLDcg
QEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKICAg
ICAvLyBVcGRhdGUgZm9yIGNhcHMgbG9jayBzdGF0ZQogICAgIG1fZnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5jYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsKIAotICAgIC8vIEJlY2F1c2UgQ1NT
U3R5bGVTZWxlY3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigpIGFuZAorICAgIC8vIEJlY2F1c2UgU3R5
bGVSZXNvbHZlcjo6Y2hlY2tPbmVTZWxlY3RvcigpIGFuZAogICAgIC8vIFJlbmRlclRoZW1lOjpp
c0ZvY3VzZWQoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLCB3ZSBoYXZlIHRvCiAgICAg
Ly8gdXBkYXRlIHN0eWxlIGFuZCB0aGVtZSBzdGF0ZSB0aGF0IGRlcGVuZGVkIG9uIHRob3NlLgog
ICAgIGlmIChOb2RlKiBub2RlID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAKaW5kZXggOGJiYTUxMTYxMTAxODRm
ZmVhMDAwNjljZjYxMTFhMmE4MWVhMjM3Ni4uMTllZWVhMWM1YTAyNmI4NzIwMWVjOGI0YjI1YWQ3
YTYyMWExMTE1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCkBAIC04OCw3
ICs4OCw3IEBAIHZvaWQgQ2FjaGVkUGFnZTo6cmVzdG9yZShQYWdlKiBwYWdlKQogCiAgICAgaWYg
KG1fbmVlZFN0eWxlUmVjYWxjRm9yVmlzaXRlZExpbmtzKSB7CiAgICAgICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkt
PnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoQ1NTU3R5bGVTZWxlY3Rvciogc3R5
bGVTZWxlY3RvciA9IGZyYW1lLT5kb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCkpCisgICAgICAg
ICAgICBpZiAoU3R5bGVSZXNvbHZlciogc3R5bGVTZWxlY3RvciA9IGZyYW1lLT5kb2N1bWVudCgp
LT5zdHlsZVNlbGVjdG9yKCkpCiAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWxsVmlz
aXRlZFN0YXRlQ2hhbmdlZCgpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCBlZDAzMzBjZTBiYjAwMDYxNWFlMTljODYyMmQ4
NTMxY2VlZDFiYmMyLi4wM2E0OTA4YzVjNzdhMmRlMWE4OWNjNzdiZDI0ZGEyZjFlMDU1M2E1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtNDYzLDcgKzQ2
Myw3IEBAIFNlY3VyaXR5T3JpZ2luKiBIVE1MQ2FudmFzRWxlbWVudDo6c2VjdXJpdHlPcmlnaW4o
KSBjb25zdAogICAgIHJldHVybiBkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpOwogfQogCi1D
U1NTdHlsZVNlbGVjdG9yKiBIVE1MQ2FudmFzRWxlbWVudDo6c3R5bGVTZWxlY3RvcigpCitTdHls
ZVJlc29sdmVyKiBIVE1MQ2FudmFzRWxlbWVudDo6c3R5bGVTZWxlY3RvcigpCiB7CiAgICAgcmV0
dXJuIGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuaAppbmRleCA0OTZmNDAxNDBhYTRmYzAzNGY4OTczODEzNDgwMTJjNGFh
MWJmNjY3Li4yMGEyMjViMDcyOTVmNTllN2E3NmFhOTIxNjE5MzdjMzNmYWE4YTI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0xMjIsNyArMTIyLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0T3JpZ2luVGFpbnRlZCgpIHsgbV9vcmlnaW5DbGVhbiA9IGZhbHNl
OyB9CiAgICAgYm9vbCBvcmlnaW5DbGVhbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luQ2xlYW47
IH0KIAotICAgIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IoKTsKKyAgICBTdHlsZVJl
c29sdmVyKiBzdHlsZVNlbGVjdG9yKCk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5z
Zm9ybSgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5r
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKaW5k
ZXggZTIyYTFlNjljYmQ4ZjU3OGU1Y2EyNmExMDgzMzVlNDJlNTNmZTgzMy4uMGZhNGYyZDhkMzg0
Zjk0ZGU5NmMxY2FmMjU0NzRmNDlkNjA0OGNjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExp
bmtFbGVtZW50LmNwcApAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50Ojpw
cm9jZXNzKCkKIAogICAgICAgICBib29sIG1lZGlhUXVlcnlNYXRjaGVzID0gdHJ1ZTsKICAgICAg
ICAgaWYgKCFtX21lZGlhLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgUmVmUHRyPFJlbmRlclN0
eWxlPiBkb2N1bWVudFN0eWxlID0gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JEb2N1bWVudChk
b2N1bWVudCgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gZG9jdW1lbnRTdHls
ZSA9IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRG9jdW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgICAg
ICAgICBSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWEgPSBNZWRpYVF1ZXJ5U2V0OjpjcmVhdGVB
bGxvd2luZ0Rlc2NyaXB0aW9uU3ludGF4KG1fbWVkaWEpOwogICAgICAgICAgICAgTWVkaWFRdWVy
eUV2YWx1YXRvciBldmFsdWF0b3IoZG9jdW1lbnQoKS0+ZnJhbWUoKS0+dmlldygpLT5tZWRpYVR5
cGUoKSwgZG9jdW1lbnQoKS0+ZnJhbWUoKSwgZG9jdW1lbnRTdHlsZS5nZXQoKSk7CiAgICAgICAg
ICAgICBtZWRpYVF1ZXJ5TWF0Y2hlcyA9IGV2YWx1YXRvci5ldmFsKG1lZGlhLmdldCgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwCmluZGV4IDY1NTEwZWJlYTE1OGUyZjgwOWYwODNkZTY5MzFhNDhjZDk3NGJkYTEu
Ljg5OTcxNWU1NWQwNjY4MTcwNjg4MDZkMmFkYzAwNWQ0MjFkMWM2ZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cApAQCAtMTk0Myw3ICsxOTQzLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNl
dEZvbnQoY29uc3QgU3RyaW5nJiBuZXdGb250KQogICAgIG5ld1N0eWxlLT5mb250KCkudXBkYXRl
KG5ld1N0eWxlLT5mb250KCkuZm9udFNlbGVjdG9yKCkpOwogCiAgICAgLy8gTm93IG1hcCB0aGUg
Zm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50byB0aGUgc3R5bGUuCi0gICAgQ1NTU3R5bGVTZWxl
Y3Rvciogc3R5bGVTZWxlY3RvciA9IGNhbnZhcygpLT5zdHlsZVNlbGVjdG9yKCk7CisgICAgU3R5
bGVSZXNvbHZlciogc3R5bGVTZWxlY3RvciA9IGNhbnZhcygpLT5zdHlsZVNlbGVjdG9yKCk7CiAg
ICAgc3R5bGVTZWxlY3Rvci0+YXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlGb250RmFt
aWx5LCB0ZW1wRGVjbC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkp
LmdldCgpLCBuZXdTdHlsZS5nZXQoKSk7CiAgICAgc3R5bGVTZWxlY3Rvci0+YXBwbHlQcm9wZXJ0
eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFN0eWxlLCB0ZW1wRGVjbC0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSkuZ2V0KCkpOwogICAgIHN0eWxlU2VsZWN0
b3ItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCB0
ZW1wRGVjbC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50KS5nZXQo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApp
bmRleCA4MTE0Mzc3NWYzYjc4YzYxYjgwZjYzYTZmMDRkMzllNDMwMDI5MGRmLi41N2JjNWNiMWUx
YTY0YzVhNWEyMWMzZjQwNWI0MjQ1YTgwODQxZjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTU3MiwxNSArNTcyLDE1IEBAIHZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgaW50IG5vCiAgICAgcmVjYWxjU3R5bGVGb3JQc2V1ZG9TdGF0ZUlmTmVlZGVk
KGVsZW1lbnQsIGZvcmNlZFBzZXVkb0NsYXNzZXMgPyBmb3JjZWRQc2V1ZG9DbGFzc2VzLT5nZXQo
KSA6IDApOwogCiAgICAgLy8gTWF0Y2hlZCBydWxlcy4KLSAgICBDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciA9IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOwotICAg
IFJlZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0gc2VsZWN0b3ItPnN0eWxlUnVsZXNG
b3JFbGVtZW50KGVsZW1lbnQsIENTU1N0eWxlU2VsZWN0b3I6OkFsbENTU1J1bGVzKTsKKyAgICBT
dHlsZVJlc29sdmVyKiBzZWxlY3RvciA9IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVT
ZWxlY3RvcigpOworICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0gc2VsZWN0
b3ItPnN0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIFN0eWxlUmVzb2x2ZXI6OkFsbENTU1J1
bGVzKTsKICAgICBtYXRjaGVkQ1NTUnVsZXMgPSBidWlsZEFycmF5Rm9yUnVsZUxpc3QobWF0Y2hl
ZFJ1bGVzLmdldCgpLCBzZWxlY3Rvcik7CiAKICAgICAvLyBQc2V1ZG8gZWxlbWVudHMuCiAgICAg
aWYgKCFpbmNsdWRlUHNldWRvIHx8ICppbmNsdWRlUHNldWRvKSB7CiAgICAgICAgIFJlZlB0cjxU
eXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6UHNldWRvSWRSdWxlcz4gPiBwc2V1
ZG9FbGVtZW50cyA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpQc2V1ZG9J
ZFJ1bGVzPjo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoUHNldWRvSWQgcHNldWRvSWQgPSBGSVJT
VF9QVUJMSUNfUFNFVURPSUQ7IHBzZXVkb0lkIDwgQUZURVJfTEFTVF9JTlRFUk5BTF9QU0VVRE9J
RDsgcHNldWRvSWQgPSBzdGF0aWNfY2FzdDxQc2V1ZG9JZD4ocHNldWRvSWQgKyAxKSkgewotICAg
ICAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtYXRjaGVkUnVsZXMgPSBzZWxlY3Rvci0+cHNl
dWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgcHNldWRvSWQsIENTU1N0eWxlU2VsZWN0
b3I6OkFsbENTU1J1bGVzKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hl
ZFJ1bGVzID0gc2VsZWN0b3ItPnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIHBz
ZXVkb0lkLCBTdHlsZVJlc29sdmVyOjpBbGxDU1NSdWxlcyk7CiAgICAgICAgICAgICBpZiAobWF0
Y2hlZFJ1bGVzICYmIG1hdGNoZWRSdWxlcy0+bGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICBS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6UHNldWRvSWRSdWxlcz4gcHNldWRvU3R5bGVzID0gVHlw
ZUJ1aWxkZXI6OkNTUzo6UHNldWRvSWRSdWxlczo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAg
ICAgLnNldFBzZXVkb0lkKHN0YXRpY19jYXN0PGludD4ocHNldWRvSWQpKQpAQCAtNTk3LDggKzU5
Nyw4IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vCiAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRl
cjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeT4gPiBpbmhlcml0
ZWRTdHlsZXMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6SW5oZXJpdGVk
U3R5bGVFbnRyeT46OmNyZWF0ZSgpOwogICAgICAgICBFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0g
ZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwogICAgICAgICB3aGlsZSAocGFyZW50RWxlbWVudCkg
ewotICAgICAgICAgICAgQ1NTU3R5bGVTZWxlY3RvciogcGFyZW50U2VsZWN0b3IgPSBwYXJlbnRF
bGVtZW50LT5vd25lckRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKTsKLSAgICAgICAgICAgIFJl
ZlB0cjxDU1NSdWxlTGlzdD4gcGFyZW50TWF0Y2hlZFJ1bGVzID0gcGFyZW50U2VsZWN0b3ItPnN0
eWxlUnVsZXNGb3JFbGVtZW50KHBhcmVudEVsZW1lbnQsIENTU1N0eWxlU2VsZWN0b3I6OkFsbENT
U1J1bGVzKTsKKyAgICAgICAgICAgIFN0eWxlUmVzb2x2ZXIqIHBhcmVudFNlbGVjdG9yID0gcGFy
ZW50RWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7CisgICAgICAgICAg
ICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IHBhcmVudE1hdGNoZWRSdWxlcyA9IHBhcmVudFNlbGVjdG9y
LT5zdHlsZVJ1bGVzRm9yRWxlbWVudChwYXJlbnRFbGVtZW50LCBTdHlsZVJlc29sdmVyOjpBbGxD
U1NSdWxlcyk7CiAgICAgICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6SW5oZXJpdGVk
U3R5bGVFbnRyeT4gcGFyZW50U3R5bGUgPSBUeXBlQnVpbGRlcjo6Q1NTOjpJbmhlcml0ZWRTdHls
ZUVudHJ5OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXRNYXRjaGVkQ1NTUnVsZXMoYnVp
bGRBcnJheUZvclJ1bGVMaXN0KHBhcmVudE1hdGNoZWRSdWxlcy5nZXQoKSwgc2VsZWN0b3IpKTsK
ICAgICAgICAgICAgIGlmIChwYXJlbnRFbGVtZW50LT5zdHlsZSgpICYmIHBhcmVudEVsZW1lbnQt
PnN0eWxlKCktPmxlbmd0aCgpKSB7CkBAIC05NDQsNyArOTQ0LDcgQEAgVHlwZUJ1aWxkZXI6OkNT
Uzo6Q1NTUnVsZTo6T3JpZ2luOjpFbnVtIEluc3BlY3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4o
Q1NTU3R5bGUKICAgICByZXR1cm4gb3JpZ2luOwogfQogCi1QYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiA+IEluc3BlY3RvckNTU0FnZW50Ojpi
dWlsZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0LCBDU1NTdHlsZVNlbGVj
dG9yKiBzdHlsZVNlbGVjdG9yKQorUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1
aWxkZXI6OkNTUzo6Q1NTUnVsZT4gPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvclJ1
bGVMaXN0KENTU1J1bGVMaXN0KiBydWxlTGlzdCwgU3R5bGVSZXNvbHZlciogc3R5bGVTZWxlY3Rv
cikKIHsKICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNT
U1J1bGU+ID4gcmVzdWx0ID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNT
U1J1bGU+OjpjcmVhdGUoKTsKICAgICBpZiAoIXJ1bGVMaXN0KQpAQCAtOTU1LDkgKzk1NSw5IEBA
IFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+
ID4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1CiAgICAgICAgIGlmICghcnVsZSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIC8vIENTU1J1bGVzIHJldHVybmVkIGJ5IENTU1N0eWxlU2Vs
ZWN0b3I6OnN0eWxlUnVsZXNGb3JFbGVtZW50IGxhY2sgcGFyZW50IHBvaW50ZXJzIHNpbmNlIHRo
YXQgaW5mb21hdGlvbiBpcyBub3QgY2hlYXBseSBhdmFpbGFibGUuCisgICAgICAgIC8vIENTU1J1
bGVzIHJldHVybmVkIGJ5IFN0eWxlUmVzb2x2ZXI6OnN0eWxlUnVsZXNGb3JFbGVtZW50IGxhY2sg
cGFyZW50IHBvaW50ZXJzIHNpbmNlIHRoYXQgaW5mb21hdGlvbiBpcyBub3QgY2hlYXBseSBhdmFp
bGFibGUuCiAgICAgICAgIC8vIFNpbmNlIHRoZSBpbnNwZWN0b3Igd2FudHMgdG8gd2FsayB0aGUg
cGFyZW50IGNoYWluLCB3ZSBjb25zdHJ1Y3QgdGhlIGZ1bGwgd3JhcHBlcnMgaGVyZS4KLSAgICAg
ICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgZmFjdG9yZWQgYmV0dGVyLiBDU1NTdHlsZVNlbGVj
dG9yOjpzdHlsZVJ1bGVzRm9yRWxlbWVudCBzaG91bGQgcmV0dXJuIGEgU3R5bGVSdWxlIHZlY3Rv
ciwgbm90IGEgQ1NTUnVsZUxpc3QuCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIGZh
Y3RvcmVkIGJldHRlci4gU3R5bGVSZXNvbHZlcjo6c3R5bGVSdWxlc0ZvckVsZW1lbnQgc2hvdWxk
IHJldHVybiBhIFN0eWxlUnVsZSB2ZWN0b3IsIG5vdCBhIENTU1J1bGVMaXN0LgogICAgICAgICBp
ZiAoIXJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSkgewogICAgICAgICAgICAgcnVsZSA9IHN0eWxl
U2VsZWN0b3ItPmVuc3VyZUZ1bGxDU1NPTVdyYXBwZXJGb3JJbnNwZWN0b3IocnVsZS0+c3R5bGVS
dWxlKCkpOwogICAgICAgICAgICAgaWYgKCFydWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCA3MTRiODZkNTM4ZGRkOGMwY2JiYWFjM2IwZDVk
YWE2ZTFmM2E5MzM3Li4yYjU2YzgyNTRkYjM2MzQ5MGRkYjcwOGQwZTVkYTE4MWM5YzQ4ZDQ5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaApAQCAtMTQ1
LDcgKzE0NSw3IEBAIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogYXNzZXJ0U3R5
bGVTaGVldEZvcklkKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJik7CiAgICAgVHlwZUJ1aWxk
ZXI6OkNTUzo6Q1NTUnVsZTo6T3JpZ2luOjpFbnVtIGRldGVjdE9yaWdpbihDU1NTdHlsZVNoZWV0
KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpOwogCi0gICAgUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gPiBidWls
ZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqLCBDU1NTdHlsZVNlbGVjdG9yKik7CisgICAg
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4g
PiBidWlsZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqLCBTdHlsZVJlc29sdmVyKik7CiAg
ICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JB
dHRyaWJ1dGVzU3R5bGUoRWxlbWVudCopOwogCiAgICAgLy8gSW5zcGVjdG9yRE9NQWdlbnQ6OkRP
TUxpc3RlbmVyIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXgg
MzcxYWY2YzhjMjJjMjFkMTNkNmFlOGJlODQ5MWE2OGI0MzA2NzA2My4uYThmY2NkYzkyYWVlNzg1
NGExNDU2Yzc4ZWNjYzdhZjVkZTFiMzliMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcApA
QCAtMTI4MywxMiArMTI4MywxMiBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBET01XaW5kb3c6
OmdldE1hdGNoZWRDU1NSdWxlcyhFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdAogICAgIGlmICgh
aXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
dW5zaWduZWQgcnVsZXNUb0luY2x1ZGUgPSBDU1NTdHlsZVNlbGVjdG9yOjpBdXRob3JDU1NSdWxl
czsKKyAgICB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9IFN0eWxlUmVzb2x2ZXI6OkF1dGhvckNT
U1J1bGVzOwogICAgIGlmICghYXV0aG9yT25seSkKLSAgICAgICAgcnVsZXNUb0luY2x1ZGUgfD0g
Q1NTU3R5bGVTZWxlY3Rvcjo6VUFBbmRVc2VyQ1NTUnVsZXM7CisgICAgICAgIHJ1bGVzVG9JbmNs
dWRlIHw9IFN0eWxlUmVzb2x2ZXI6OlVBQW5kVXNlckNTU1J1bGVzOwogICAgIGlmIChTZXR0aW5n
cyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpKSB7CiAgICAgICAgIGlmIChzZXR0aW5n
cy0+Y3Jvc3NPcmlnaW5DaGVja0luR2V0TWF0Y2hlZENTU1J1bGVzRGlzYWJsZWQoKSkKLSAgICAg
ICAgICAgIHJ1bGVzVG9JbmNsdWRlIHw9IENTU1N0eWxlU2VsZWN0b3I6OkNyb3NzT3JpZ2luQ1NT
UnVsZXM7CisgICAgICAgICAgICBydWxlc1RvSW5jbHVkZSB8PSBTdHlsZVJlc29sdmVyOjpDcm9z
c09yaWdpbkNTU1J1bGVzOwogICAgIH0KICAgICAKICAgICBQc2V1ZG9JZCBwc2V1ZG9JZCA9IENT
U1NlbGVjdG9yOjpwc2V1ZG9JZChDU1NTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9UeXBlKHBzZXVkb0Vs
ZW1lbnQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IGQxNWIxNmZkNWJlZTMxMzg4YWZiOTJhYjVk
ZDliM2JjMDZmOGUwMzkuLjAzMTUwNjlhMDYwYmViNDhjNDU0MjJjYTBhMDk1M2Y4NGM0MTBiOTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtODM0LDcgKzgzNCw3IEBAIHZvaWQgUGFnZTo6YWxsVmlz
aXRlZFN0YXRlQ2hhbmdlZChQYWdlR3JvdXAqIGdyb3VwKQogICAgICAgICBpZiAocGFnZS0+bV9n
cm91cCAhPSBncm91cCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9IHBhZ2UtPm1fbWFpbkZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKENTU1N0eWxlU2VsZWN0
b3IqIHN0eWxlU2VsZWN0b3IgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpKQor
ICAgICAgICAgICAgaWYgKFN0eWxlUmVzb2x2ZXIqIHN0eWxlU2VsZWN0b3IgPSBmcmFtZS0+ZG9j
dW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpKQogICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3It
PmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTg1Miw3ICs4
NTIsNyBAQCB2b2lkIFBhZ2U6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQoUGFnZUdyb3VwKiBncm91cCwg
TGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKQogICAgICAgICBpZiAocGFnZS0+bV9ncm91cCAhPSBn
cm91cCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
IHBhZ2UtPm1fbWFpbkZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50
cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKENTU1N0eWxlU2VsZWN0b3IqIHN0eWxl
U2VsZWN0b3IgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpKQorICAgICAgICAg
ICAgaWYgKFN0eWxlUmVzb2x2ZXIqIHN0eWxlU2VsZWN0b3IgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+
c3R5bGVTZWxlY3RvcigpKQogICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPnZpc2l0ZWRT
dGF0ZUNoYW5nZWQodmlzaXRlZExpbmtIYXNoKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAK
aW5kZXggMGYyMzMwMWExNTMwOGFlOWIyYWMzM2Y5YzZlM2ZkMzQzMjU1NGVlMS4uZTJmYjIxZWQy
YzIzN2QwZGZlMDBhOTMxMTZjOThkZDJhYTRmMWE1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTU0Nyw3ICs1
NDcsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBBbmltYXRpb25Db250cm9sbGVyOjp1cGRh
dGVBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZAogICAgIGlmIChibGVuZGVkU3R5bGUgIT0g
bmV3U3R5bGUpIHsKICAgICAgICAgLy8gSWYgdGhlIGFuaW1hdGlvbnMvdHJhbnNpdGlvbnMgY2hh
bmdlIG9wYWNpdHkgb3IgdHJhbnNmb3JtLCB3ZSBuZWVkIHRvIHVwZGF0ZQogICAgICAgICAvLyB0
aGUgc3R5bGUgdG8gaW1wb3NlIHRoZSBzdGFja2luZyBydWxlcy4gTm90ZSB0aGF0IHRoaXMgaXMg
YWxzbwotICAgICAgICAvLyBkb25lIGluIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0
eWxlKCkuCisgICAgICAgIC8vIGRvbmUgaW4gU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5
bGUoKS4KICAgICAgICAgaWYgKGJsZW5kZWRTdHlsZS0+aGFzQXV0b1pJbmRleCgpICYmIChibGVu
ZGVkU3R5bGUtPm9wYWNpdHkoKSA8IDEuMGYgfHwgYmxlbmRlZFN0eWxlLT5oYXNUcmFuc2Zvcm0o
KSkpCiAgICAgICAgICAgICBibGVuZGVkU3R5bGUtPnNldFpJbmRleCgwKTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1JlbmRlclRoZW1lQmxh
Y2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1JlbmRlclRo
ZW1lQmxhY2tCZXJyeS5jcHAKaW5kZXggYzY0Yjk2ZWMwZDBjODc2ODEwOTQwZWEwMTBkNzViMzc2
ZjBjZGFiMC4uNzBjNDM4OWI5YzUxYTI3ZWEyZGEzOWM1ZDkyOGI3ZTk3OGEyMDQxZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9SZW5kZXJUaGVtZUJsYWNr
QmVycnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUmVuZGVy
VGhlbWVCbGFja0JlcnJ5LmNwcApAQCAtMjE1LDEzICsyMTUsMTMgQEAgdm9pZCBSZW5kZXJUaGVt
ZUJsYWNrQmVycnk6OnNldEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAg
ICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbSh2ZXJ0UGFkZGluZyk7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVCbGFja0JlcnJ5OjphZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVCbGFja0Jl
cnJ5OjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKIHsKICAgICBzZXRCdXR0b25TdHlsZShzdHlsZSk7CiAgICAgc3R5
bGUtPnNldEN1cnNvcihDVVJTT1JfV0VCS0lUX0dSQUIpOwogfQogCi12b2lkIFJlbmRlclRoZW1l
QmxhY2tCZXJyeTo6YWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVCbGFja0JlcnJ5
OjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqKSBjb25zdAogewogICAgIHNldEJ1dHRvblN0eWxlKHN0eWxlKTsKIH0KQEAgLTIz
MSw3ICsyMzEsNyBAQCBib29sIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6cGFpbnRUZXh0QXJlYShS
ZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJgogICAgIHJldHVybiBwYWludFRl
eHRGaWVsZE9yVGV4dEFyZWFPclNlYXJjaEZpZWxkKG9iamVjdCwgaW5mbywgcmVjdCk7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWVCbGFja0JlcnJ5OjphZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICBzZXRCdXR0b25TdHls
ZShzdHlsZSk7CiB9CkBAIC0yNzAsMTIgKzI3MCwxMiBAQCBib29sIFJlbmRlclRoZW1lQmxhY2tC
ZXJyeTo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5m
bwogICAgIHJldHVybiBwYWludFRleHRGaWVsZE9yVGV4dEFyZWFPclNlYXJjaEZpZWxkKG9iamVj
dCwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjphZGp1c3RT
ZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUJsYWNrQmVycnk6OmFkanVzdFNlYXJjaEZp
ZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0CiB7CiAgICAgc2V0QnV0dG9uU3R5bGUoc3R5bGUpOwogfQogCi12b2lkIFJlbmRlclRoZW1l
QmxhY2tCZXJyeTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVCbGFja0JlcnJ5OjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIHN0
YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemUgPSAxMzsKICAgICBz
dGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdENhbmNlbEJ1dHRvblNpemUgPSA5OwpAQCAtMzIwLDcg
KzMyMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjpwYWludFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIC8v
IFRoZXNlIHNlZW0gdG8gYmUgcmVhc29uYWJsZSBwYWRkaW5nIHZhbHVlcyBmcm9tIG9ic2VydmF0
aW9uLgogICAgIGNvbnN0IGludCBwYWRkaW5nTGVmdCA9IDg7CkBAIC00NjAsMTIgKzQ2MCwxMiBA
QCBib29sIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBv
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZUJsYWNrQmVycnk6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciogY3NzLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVy
KiBjc3MsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAg
ICBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKGNzcywgc3R5bGUsIGVsZW1lbnQpOwogfQogCi12
b2lkIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6YWRqdXN0Q2hlY2tib3hTdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVCbGFja0JlcnJ5OjphZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIHNldENoZWNrYm94U2l6ZShz
dHlsZSk7CiAgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKQEAgLTQ3NSw3ICs0NzUs
NyBAQCB2b2lkIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6YWRqdXN0Q2hlY2tib3hTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqCiAgICAgc3R5bGUtPnNldEN1cnNvcihDVVJTT1Jf
V0VCS0lUX0dSQUIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lQmxhY2tCZXJyeTo6YWRqdXN0UmFk
aW9TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVCbGFja0JlcnJ5OjphZGp1c3RSYWRpb1N0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIHNl
dFJhZGlvU2l6ZShzdHlsZSk7CiAgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUmVuZGVyVGhlbWVC
bGFja0JlcnJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1JlbmRlclRo
ZW1lQmxhY2tCZXJyeS5oCmluZGV4IDYyY2I3MzlkODIzMDViNGVmZjZmOTU3MjBlNDNjNmNlZWVl
NjVmYWMuLmM5NzU2ODdiZmE2YTcyOGQxOTBjYzRhOThiNDQyOGU0YzI0YmNhODQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUmVuZGVyVGhlbWVCbGFja0Jl
cnJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9SZW5kZXJUaGVt
ZUJsYWNrQmVycnkuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CiAgICAgdm9pZCBjYWxjdWxhdGVCdXR0b25TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAg
dmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlz
dFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRl
clRodW1iU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNs
aWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKQEAgLTU4LDIxICs1OCwyMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9y
bUZvY3VzUmluZ0NvbG9yKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNS
aW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QgeyByZXR1cm4gc3R5bGUtPmhhc0Fw
cGVhcmFuY2UoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVT
ZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFJhZGlvU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2hl
Y2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcAppbmRleCBjNjcwMzU0YWM3Njg1YjdlMTYzMzhk
MjEwM2ZmZWJlMWU2OTViYjkwLi4yZDRlNWI4NjgwNmQ1YTEyYTA0OTBjZjI2MjBlZDcyNzQ1ZjA0
Nzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVF
ZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5j
cHAKQEAgLTg0NCw3ICs4NDQsNyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNsaWRlclRy
YWNrKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZgogICAgIHJldHVy
biBwYWludFRoZW1lUGFydChvYmplY3QsIFNsaWRlclZlcnRpY2FsLCBpbmZvLCByZWN0KTsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJl
c29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBj
b25zdAogewogICAgIGlmICghbV9wYWdlICYmIGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQo
KS0+cGFnZSgpKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsKj4oZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpKS0+YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShz
ZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOwpAQCAtODYxLDcgKzg2MSw3IEBAIHZvaWQgUmVuZGVy
VGhlbWVFZmw6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0
b3IsIFJlbmRlclN0CiAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoZGVzYy0+bWluLmhlaWdodCgp
KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVt
ZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShT
dHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVt
ZW50KSBjb25zdAogewogICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHNl
bGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7CiAgICAgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShzZWxl
Y3Rvciwgc3R5bGUsIGVsZW1lbnQpOwpAQCAtODg4LDcgKzg4OCw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVFZmw6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgaW5mCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjph
ZGp1c3RDaGVja2JveFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjph
ZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYgZWxl
bWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLT5wYWdlKCkpIHsKICAgICAgICAgc3RhdGljX2Nh
c3Q8UmVuZGVyVGhlbWVFZmwqPihlbGVtZW50LT5kb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCkp
LT5hZGp1c3RDaGVja2JveFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7CkBAIC05MDks
NyArOTA5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRDaGVja2JveChSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLAogICAgIHJldHVybiBwYWludFRoZW1l
UGFydChvYmplY3QsIENoZWNrQm94LCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZUVmbDo6YWRqdXN0UmFkaW9TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVm
bDo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIGlmICghbV9wYWdlICYmIGVs
ZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7CiAgICAgICAgIHN0YXRpY19j
YXN0PFJlbmRlclRoZW1lRWZsKj4oZWxlbWVudC0+ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgp
KS0+YWRqdXN0UmFkaW9TdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOwpAQCAtOTMwLDcg
KzkzMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBv
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uCiAgICAgcmV0dXJuIHBhaW50VGhlbWVQ
YXJ0KG9iamVjdCwgUmFkaW9CdXR0b24sIGluZm8sIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lRWZsOjphZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZUVmbDo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBpZiAoIW1fcGFnZSAm
JiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCktPnBhZ2UoKSkgewogICAgICAgICBzdGF0
aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCo+KGVsZW1lbnQtPmRvY3VtZW50KCktPnBhZ2UoKS0+dGhl
bWUoKSktPmFkanVzdEJ1dHRvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7CkBAIC05
NTMsNyArOTUzLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY28KICAgICByZXR1cm4gcGFpbnRU
aGVtZVBhcnQob2JqZWN0LCBCdXR0b24sIGluZm8sIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lRWZsOjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lRWZsOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3Bh
Z2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLT5wYWdlKCkpIHsKICAgICAgICAg
c3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwqPihlbGVtZW50LT5kb2N1bWVudCgpLT5wYWdlKCkt
PnRoZW1lKCkpLT5hZGp1c3RNZW51TGlzdFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7
CkBAIC05NzEsNyArOTcxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRNZW51TGlzdChS
ZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLAogICAgIHJldHVybiBw
YWludFRoZW1lUGFydChvYmplY3QsIENvbWJvQm94LCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZUVmbDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25z
dAogewogICAgIGFkanVzdE1lbnVMaXN0U3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlbGVtZW50KTsK
IH0KQEAgLTk4MSw3ICs5ODEsNyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludE1lbnVMaXN0
QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mCiAgICAgcmV0dXJu
IHBhaW50TWVudUxpc3Qob2JqZWN0LCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZUVmbDo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3Bh
Z2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLT5wYWdlKCkpIHsKICAgICAgICAg
c3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwqPihlbGVtZW50LT5kb2N1bWVudCgpLT5wYWdlKCkt
PnRoZW1lKCkpLT5hZGp1c3RUZXh0RmllbGRTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQp
OwpAQCAtOTk5LDcgKzk5OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGV4dEZpZWxk
KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sCiAgICAgcmV0dXJu
IHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgVGV4dEZpZWxkLCBpbmZvLCByZWN0KTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiBzZWxl
Y3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAg
IGFkanVzdFRleHRGaWVsZFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7CiB9CkBAIC0x
MDA5LDcgKzEwMDksNyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRleHRBcmVhKFJlbmRl
ck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sCiAgICAgcmV0dXJuIHBhaW50
VGV4dEZpZWxkKG9iamVjdCwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6
OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShTdHlsZVJlc29s
dmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25z
dAogewogICAgIGlmICghbV9wYWdlICYmIGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS0+
cGFnZSgpKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsKj4oZWxlbWVudC0+
ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpKS0+YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9u
U3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlbGVtZW50KTsKQEAgLTEwMjUsNyArMTAyNSw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVj
dCogb2JqZWN0LCBjb25zdCBQYWluCiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwg
U2VhcmNoRmllbGREZWNvcmF0aW9uLCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5k
b2N1bWVudCgpLT5wYWdlKCkpIHsKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwq
PihlbGVtZW50LT5kb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCkpLT5hZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOwpAQCAtMTA0MSw3
ICsxMDQxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFAKICAgICByZXR1cm4gcGFpbnRUaGVt
ZVBhcnQob2JqZWN0LCBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24sIGluZm8sIHJlY3QpOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIGlmICghbV9wYWdl
ICYmIGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7CiAgICAgICAgIHN0
YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsKj4oZWxlbWVudC0+ZG9jdW1lbnQoKS0+cGFnZSgpLT50
aGVtZSgpKS0+YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKHNlbGVjdG9y
LCBzdHlsZSwgZWxlbWVudCk7CkBAIC0xMDU3LDcgKzEwNTcsNyBAQCBib29sIFJlbmRlclRoZW1l
RWZsOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIGNvbgogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb24sIGluZm8sIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjph
ZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNv
bnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgp
LT5wYWdlKCkpIHsKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwqPihlbGVtZW50
LT5kb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCkpLT5hZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7CkBAIC0xMDczLDcgKzEwNzMsNyBA
QCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRl
ck9iamVjdCogb2JqZWN0LCBjb25zdCBQYQogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmpl
Y3QsIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uLCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxl
Y3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzZWxl
Y3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAg
IGlmICghbV9wYWdlICYmIGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7
CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsKj4oZWxlbWVudC0+ZG9jdW1lbnQo
KS0+cGFnZSgpLT50aGVtZSgpKS0+YWRqdXN0U2VhcmNoRmllbGRTdHlsZShzZWxlY3Rvciwgc3R5
bGUsIGVsZW1lbnQpOwpAQCAtMTExMiw3ICsxMTEyLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6
c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikg
Y28KIH0KIAogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi12b2lkIFJlbmRlclRoZW1lRWZsOjph
ZGp1c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZs
OjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgc3R5bGUtPnNldEJv
eFNoYWRvdyhudWxscHRyKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VmbC9SZW5kZXJUaGVtZUVmbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRl
clRoZW1lRWZsLmgKaW5kZXggY2VmMzJiODVmNTQ3MTZhMTlhM2IzOWVkYTE5ZTNiOGJjNTc3Y2Mx
Ny4uZDE1ZWUwYmNlYTFjOTg2NmQ5YjIxZWQ3NGE3OGJlM2YwNWRiOWNiYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmgKQEAgLTExNyw0NiArMTE3LDQ2
IEBAIHB1YmxpYzoKICAgICAvLyBTeXN0ZW0gZm9udHMuCiAgICAgdmlydHVhbCB2b2lkIHN5c3Rl
bUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBh
aW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xp
ZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBw
YWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJT
aXplKFJlbmRlclN0eWxlKikgY29uc3Q7CiAKQEAgLTE2NSw3ICsxNjUsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdEZvbnRTaXplKGludCBmb250c2l6ZSk7CiAKICNpZiBF
TkFCTEUoUFJPR1JFU1NfVEFHKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jl
c3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
ICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIo
UmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJh
dGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcAppbmRleCA5MjBiMDA3ZmE1YzAw
OGIzYmY0OGRlYjMyMTkyNmZhOGYyOThiOWFmLi4xMThkNjY0MDFlMGI1ZjdlZTIwNTE1N2UyZDAy
YWQzMTc5YWM3NmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVu
ZGVyVGhlbWVHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJU
aGVtZUd0ay5jcHAKQEAgLTIwNCwxNCArMjA0LDE0IEBAIHN0YXRpYyBHdGtTdGF0ZVR5cGUgZ3Rr
SWNvblN0YXRlKFJlbmRlclRoZW1lKiB0aGVtZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qp
CiAgICAgcmV0dXJuIEdUS19TVEFURV9OT1JNQUw7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6
OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHls
ZSogc3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3Rr
OjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25zdAogewogICAgIC8vIFNvbWUgbGF5b3V0
IHRlc3RzIGNoZWNrIGV4cGxpY2l0bHkgdGhhdCBidXR0b25zIGlnbm9yZSBsaW5lLWhlaWdodC4K
ICAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCkKICAgICAgICAg
c3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwog
fQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNl
bGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgLy8g
VGhlIHRlc3RzIGNoZWNrIGV4cGxpY2l0bHkgdGhhdCBzZWxlY3QgbWVudSBidXR0b25zIGlnbm9y
ZSBsaW5lIGhlaWdodC4KICAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5p
dGlhbExpbmVIZWlnaHQoKSk7CkBAIC0yMjAsNyArMjIwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUd0
azo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUKICAgICBzdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZUd0azo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxl
Y3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZUd0azo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIGFkanVzdE1l
bnVMaXN0U3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKIH0KQEAgLTI3Niw3ICsyNzYsNyBAQCBz
dGF0aWMgR3RrSWNvblNpemUgZ2V0SWNvblNpemVGb3JQaXhlbFNpemUoZ2ludCBwaXhlbFNpemUp
CiAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfRElBTE9HOwogfQogCi12b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QK
IHsKICAgICBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKHNlbGVjdG9yLCBzdHls
ZSwgZSk7CiB9CkBAIC0zMDQsNyArMzA0LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0U2VhcmNoRmll
bGRJY29uU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVu
Z3RoKGhlaWdodCwgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9y
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZl
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAg
ICBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShzdHlsZSk7CiB9CkBAIC0zNDEsNyArMzQxLDcg
QEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZSkgY29uc3QKIHsKICAgICBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShzdHlsZSk7CiB9CkBA
IC0zNjAsNyArMzYwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY28KICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NT
U3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVS
ZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QK
IHsKICAgICAvLyBXZSBjYW5ub3QgZ2l2ZSBhIHByb3BlciByZW5kZXJpbmcgd2hlbiBib3JkZXIg
cmFkaXVzIGlzIGFjdGl2ZSwgdW5mb3J0dW5hdGVseS4KICAgICBzdHlsZS0+cmVzZXRCb3JkZXJS
YWRpdXMoKTsKQEAgLTM5NywxMiArMzk3LDEyIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRy
YWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIHN0
eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFk
anVzdFNsaWRlclRodW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6
OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJUaGVtZTo6
YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOwogICAgIHN0
eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CkBAIC02NDEsNyArNjQxLDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0LCBjb25zdCBQYWkKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKLXZvaWQg
UmVuZGVyVGhlbWVHdGs6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3Rr
OjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCmluZGV4
IDlhM2QyODg0MzE5NjU2MDg2ODVhNDE1OGY5MTZlZDY3MDI3MTZlNDcuLjIzYjA4ZmZlYWE2OTJh
YjQ2YzhkM2Q4ZTQyMzViOTlkMjY4YWVkODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9SZW5kZXJUaGVtZUd0ay5oCkBAIC0xMTAsNyArMTEwLDcgQEAgcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZp
cnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CkBAIC0xMjUsMjggKzEyNSwyOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
Ly8gVGhlIGZvcm1lciBpcyB1c2VkIHdoZW4gYSBtZW51IGxpc3QgYnV0dG9uIGhhcyBiZWVuIHN0
eWxlZC4gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZQogICAgIC8vIEFxdWEgdGhlbWVkIGNvbnRyb2xz
IHdoZW5ldmVyIHBvc3NpYmxlLiBXZSBhbHdheXMgd2FudCB0byB1c2UgR1RLKyB0aGVtaW5nLCBz
bwogICAgIC8vIHdlIGRvbid0IG1haW50YWluIHRoaXMgZGlmZmVyZW50aWF0aW9uLgotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KiBlKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCBi
b29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1
bWJTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CiAKQEAgLTE3MSwxMyArMTcxLDEzIEBAIHByb3Rl
Y3RlZDoKICNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQogICAgIHZpcnR1YWwgZG91YmxlIGFuaW1h
dGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRl
clByb2dyZXNzKikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVz
c0JhcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAj
ZW5kaWYKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3Bp
bkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcAppbmRleCA1MDY3NWQx
ZTk0MGIzOGVmNjQ2Y2E5MDE2MzNlZmRkNWI5NzhiMjU1Li4wNjAzODNhYzFlNGY1ZDYwOWFjMDFk
MTVkMTNmYTE4N2VhZGVmYThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUmVuZGVyVGhlbWVHdGsyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UmVuZGVyVGhlbWVHdGsyLmNwcApAQCAtNTc0LDcgKzU3NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mCiB9CiAjZW5kaWYKIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGlu
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsK
ICAgICBHdGtTdHlsZSogZ3RrU3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShndGtTcGluQnV0
dG9uKCkpOwogICAgIGNvbnN0IFBhbmdvRm9udERlc2NyaXB0aW9uKiBmb250RGVzY3JpcHRpb24g
PSBndGtTdHlsZS0+Zm9udF9kZXNjOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UmVuZGVyVGhlbWVHdGszLmNwcAppbmRleCAxMGRmY2NmOGNkZGExZTg0YmMzMGIwYzUwZDM3M2Nk
MWJmNTkxN2M3Li41NDEzYmI3OTUzMjQ4NTNjMjBjZGQxNzdjMjdkZDU2MzAwODE1NmFiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcApAQCAt
Nzc0LDcgKzc3NCw3IEBAIHN0YXRpYyBnaW50IHNwaW5CdXR0b25BcnJvd1NpemUoR3RrU3R5bGVD
b250ZXh0KiBjb250ZXh0KQogICAgIHJldHVybiBhcnJvd1NpemUgLSBhcnJvd1NpemUgJSAyOyAv
LyBGb3JjZSBldmVuLgogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5C
dXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewog
ICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9T
UElOX0JVVFRPTik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Jl
bmRlclRoZW1lUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVR
dC5jcHAKaW5kZXggMGNhOWE5NTFhNjQ4ZjYzMmYwYTg4MmIxOWRmZDc3NzBkNGRjN2NlMy4uMjY4
OGY5ZGZhZmNjM2Y2OWU4ZDk5YjhhYmUyN2IzODYyNmEyNWRiYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKQEAgLTMxOSw3ICszMTksNyBAQCB2b2lk
IFJlbmRlclRoZW1lUXQ6OnNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAog
ICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZVF0OjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0VGV4dEZp
ZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0CiB7CiAgICAgLy8gUmVzZXR0aW5nIHRoZSBzdHlsZSBsaWtlIHRoaXMgbGVhZHMgdG8gZGlm
ZmVyZW5jZXMgbGlrZToKICAgICAvLyAtIFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQgKDIs
Mikgc2l6ZSAxNjh4MjUgW2JnY29sb3I9I0ZGRkZGRl0gYm9yZGVyOiAoMnB4IGluc2V0ICMwMDAw
MDApXQpAQCAtMzMyLDcgKzMzMiw3IEBAIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0VGV4dEZp
ZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwKICAgICBjb21w
dXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVRdDo6YWRq
dXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1
c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgYWRqdXN0VGV4dEZpZWxkU3R5bGUo
c2VsZWN0b3IsIHN0eWxlLCBlbGVtZW50KTsKIH0KQEAgLTM0Miw3ICszNDIsNyBAQCBib29sIFJl
bmRlclRoZW1lUXQ6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludElu
Zm8mIGksIGNvbnN0IEludAogICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZVF0OjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwogCkBAIC0z
NTgsNyArMzU4LDcgQEAgdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51TGlzdFN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEUKICAgICBzZXRQb3B1cFBhZGRp
bmcoc3R5bGUpOwogfQogCi12b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdE1lbnVMaXN0QnV0dG9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8g
SGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRvLgogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1
dG8pKTsKQEAgLTM4MywxOCArMzgzLDE4IEBAIGRvdWJsZSBSZW5kZXJUaGVtZVF0OjphbmltYXRp
b25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiByZW5kCiAgICAg
cmV0dXJuIDAuMTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RQcm9ncmVzc0JhclN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIHN0eWxlLT5z
ZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAjZW5kaWYKIAotdm9pZCBSZW5kZXJUaGVtZVF0Ojph
ZGp1c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUcmFj
a1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAogewogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVRdDo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9y
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVu
ZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlbGVtZW50
KTsKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwpAQCAtNDA2LDcgKzQwNiw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGksCiAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIHBpLCByKTsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsCit2b2lkIFJlbmRlclRoZW1l
UXQ6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRl
clN0eWxlKiBzdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFbGVtZW50KiBlKSBjb25zdAogewogICAgIC8vIFJlc2V0dGluZyB0aGUgc3R5bGUgbGlrZSB0
aGlzIGxlYWRzIHRvIGRpZmZlcmVuY2VzIGxpa2U6CkBAIC00MjAsNyArNDIwLDcgQEAgdm9pZCBS
ZW5kZXJUaGVtZVF0OjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNl
bGVjdG9yLCBSZW5kZXJTdHkKICAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLAordm9pZCBS
ZW5kZXJUaGVtZVF0OjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCogZSkgY29uc3QKIHsK
ICAgICAvLyBMb2dpYyB0YWtlbiBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW0uY3BwLgpAQCAtNDcy
LDcgKzQ3Miw3IEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsCit2b2lkIFJl
bmRlclRoZW1lUXQ6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKQEAgLTQ4Niw3ICs0ODYsNyBAQCBib29sIFJlbmRlclRoZW1lUXQ6
OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJgogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24o
bywgcGksIHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5
bGUqIHN0eWxlLAordm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHls
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTUw
MSw3ICs1MDEsNyBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaQogfQogCiAjaWZuZGVmIFFUX05P
X1NQSU5CT1gKLXZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUo
Q1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwKK3ZvaWQgUmVu
ZGVyVGhlbWVRdDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc2Vs
ZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICAvLyBVc2UgdGhlIHNh
bWUgd2lkdGggYXMgb3VyIG5hdGl2ZSBzY3JvbGxiYXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1JlbmRlclRoZW1lUXQuaAppbmRleCAwM2I3MTYwN2QzYWIyN2EwODY5ZjE3YzQ5MmY4ZWE0
MTJmNDVjZDE3Li41MTg1YWZlNmQ3MTMyMWRiODJkZjhkZjM5MzdjMGJjNjY5NmQ0ZmY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCkBAIC05OSwzOSArOTks
MzkgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVy
U3R5bGUqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0gICAg
dmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlz
dFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgLy8g
UmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9n
cmVzcyBiYXIuCiAgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQ
cm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OwogI2VuZGlmCiAKLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNr
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
bGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUo
Q1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAjaWZuZGVm
IFFUX05PX1NQSU5CT1gKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURF
TykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRN
b2JpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmls
ZS5jcHAKaW5kZXggMDY4NTIyYTNmNGYxODc0Mjg1YWZlOTM0MWY3NGYxZDQ0ODNkZDhlNy4uYmEy
MzdjMmQ2YzViZTMxOTZiMzE3NjcyNjEwYmE4NjEwODkzMzYyMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAKQEAgLTYzMCw3ICs2
MzAsNyBAQCB2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmNvbXB1dGVTaXplQmFzZWRPblN0eWxl
KFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSkgY29ucwogICAgICAgICByZW5kZXJTdHlsZS0+c2V0
TWluSGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCi12b2lkIFJlbmRl
clRoZW1lUXRNb2JpbGU6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZVF0TW9iaWxlOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICAvLyBEaXRjaCB0aGUgYm9y
ZGVyLgogICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwpAQCAtNjczLDcgKzY3Myw3IEBAIGJvb2wg
UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIGksIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lUXRNb2JpbGU6OmFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxl
OjphZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKIHsKICAgICAvLyBSZXNldHRpbmcgdGhlIHN0eWxlIGxpa2UgdGhp
cyBsZWFkcyB0byBkaWZmZXJlbmNlcyBsaWtlOgogICAgIC8vIC0gUmVuZGVyVGV4dENvbnRyb2wg
e0lOUFVUfSBhdCAoMiwyKSBzaXplIDE2OHgyNSBbYmdjb2xvcj0jRkZGRkZGXSBib3JkZXI6ICgy
cHggaW5zZXQgIzAwMDAwMCldCkBAIC03MjEsNyArNzIxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVF0
TW9iaWxlOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
aSwgY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6
YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjph
ZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgUmVuZGVyVGhlbWVRdDo6YWRqdXN0TWVu
dUxpc3RTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGUpOwogICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVm
dChMZW5ndGgobWVudUxpc3RQYWRkaW5nLCBGaXhlZCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oCmluZGV4IDFjMjQ4MGYzNWVhMTU0YWZj
MTA0MGRlYjdjMGNiY2I0NzRhODIzZjUuLjk1MmFhNGY4YTE3ODdjYTE2NjIwNjgxMjIwNWEzYzFi
YjVhZDI1ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXRNb2JpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVt
ZVF0TW9iaWxlLmgKQEAgLTU4LDE0ICs1OCwxNCBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvUmVuZGVyVGhlbWVXeC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9SZW5kZXJUaGVtZVd4LmNwcAppbmRleCBj
OGExNzUwZWVjNDExNjNmOGFkY2I4Mzc4MWQxZmVlZjU3ODAyYWUzLi44YWM4YTlhNjFhNzMyMjc1
NTBkNTRlNTI5NTBjNGRhYzVkNjJkOTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93eC9SZW5kZXJUaGVtZVd4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
eC9SZW5kZXJUaGVtZVd4LmNwcApAQCAtNzMsMTggKzczLDE4IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqLCBJbnRSZWN0
Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0
RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRU
ZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwogCiAgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNv
bnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHls
ZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwKQEAgLTI1Nyw3ICsyNTcs
NyBAQCBib29sIFJlbmRlclRoZW1lV3g6OnN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgcGFydCkg
Y29uc3QKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXeDo6YWRqdXN0QnV0dG9uU3R5bGUo
Q1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXeDo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsK
ICAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsKIH0KQEAgLTMwMyw3ICszMDMsNyBAQCBi
b29sIFJlbmRlclRoZW1lV3g6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZVd4OjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXeDo6YWRqdXN0
VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0CiB7CiAKIH0KQEAgLTMzNSw3ICszMzUsNyBAQCBpbnQgUmVuZGVyVGhlbWVXeDo6
bWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0CiAgICAgcmV0dXJuIE1JTklN
VU1fTUVOVV9MSVNUX1NJWkU7IAogfQogCi12b2lkIFJlbmRlclRoZW1lV3g6OmFkanVzdE1lbnVM
aXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV3g6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgIHN0eWxl
LT5yZXNldEJvcmRlcigpOwogCkBAIC0zNzMsNyArMzczLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVd4
OjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25z
dCBJbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXeDo6YWRqdXN0
TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXeDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKIHsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklucHV0U3BlZWNoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bnB1dFNwZWVjaC5jcHAKaW5kZXggOTI3YTFlZTEzYjE1NGY2ODdhYzFlZTcxODQwYzZjOTM3ZWUy
YWNjMi4uMzcwYWUwYWVjMDQ0OGNlYmUzMTg2ZjMwOTk0MjVlYzUzMDc3MTM4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklucHV0U3BlZWNoLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5wdXRTcGVlY2guY3BwCkBAIC00Niw3ICs0
Niw3IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0U3BlZWNoQnV0dG9uU2l6ZSA9IDE2Owog
c3RhdGljIGNvbnN0IGZsb2F0IG1pblNwZWVjaEJ1dHRvblNpemUgPSA4Owogc3RhdGljIGNvbnN0
IGZsb2F0IG1heFNwZWVjaEJ1dHRvblNpemUgPSA0MDsKIAotdm9pZCBSZW5kZXJJbnB1dFNwZWVj
aDo6YWRqdXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKQordm9pZCBSZW5kZXJJbnB1dFNwZWVjaDo6YWRq
dXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqKQogewogICAgIC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBiYXNl
ZCBvbiB0aGUgZm9udCBzaXplLgogICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6
ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklucHV0U3BlZWNoLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5wdXRTcGVlY2guaAppbmRleCA2M2VmOGFlNjVjNGNjODYzOTczMGUxODI3
MmZjZjJjODJiMTUxYmI2Li5mMzdiODM2ZjQ4OWFhNmJjNDEwZjViODQ1MWZiY2E4MTFjZWJmN2U2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5wdXRTcGVlY2gu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5wdXRTcGVlY2guaApAQCAt
MzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlcklucHV0U3Bl
ZWNoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0
dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopOworICAg
IHN0YXRpYyB2b2lkIGFkanVzdElucHV0RmllbGRTcGVlY2hCdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kik7CiAgICAgc3RhdGljIGJvb2wgcGFpbnRJbnB1
dEZpZWxkU3BlZWNoQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3Bw
CmluZGV4IGYxYmMxZmEyNTg5NTg1ZWI4Zjc5YjkwYzBjNzNhZjRiMmVlMzY5MGUuLmFlNzU1Y2Vm
NmZkZGQ1YTUwZjA3ZjQyODY4MzQ2OGEwNWNmNGQ1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmNwcApAQCAtNzIsNyArNzIsNyBAQCBSZW5kZXJUaGVtZTo6UmVuZGVy
VGhlbWUoKQogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlLAordm9pZCBS
ZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCogZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgVUFIYXNBcHBlYXJhbmNlLCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxM
YXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikKIHsKICAgICAv
LyBGb3JjZSBpbmxpbmUgYW5kIHRhYmxlIGRpc3BsYXkgc3R5bGVzIHRvIGJlIGlubGluZS1ibG9j
ayAoZXhjZXB0IGZvciB0YWJsZS0gd2hpY2ggaXMgYmxvY2spCkBAIC04NDQsNyArODQ0LDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZTo6aXNEZWZhdWx0KGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QK
IAogI2lmICFVU0UoTkVXX1RIRU1FKQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RDaGVja2Jv
eFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICAvLyBBIHN1bW1h
cnkgb2YgdGhlIHJ1bGVzIGZvciBjaGVja2JveCBkZXNpZ25lZCB0byBtYXRjaCBXaW5JRToKICAg
ICAvLyB3aWR0aC9oZWlnaHQgLSBob25vcmVkIChXaW5JRSBhY3R1YWxseSBzY2FsZXMgaXRzIGNv
bnRyb2wgZm9yIHNtYWxsIHdpZHRocywgYnV0IGxldHMgaXQgb3ZlcmZsb3cgZm9yIHNtYWxsIGhl
aWdodHMuKQpAQCAtODYxLDcgKzg2MSw3IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdENoZWNr
Ym94U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlCiAgICAg
c3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0UmFkaW9TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8gQSBz
dW1tYXJ5IG9mIHRoZSBydWxlcyBmb3IgY2hlY2tib3ggZGVzaWduZWQgdG8gbWF0Y2ggV2luSUU6
CiAgICAgLy8gd2lkdGgvaGVpZ2h0IC0gaG9ub3JlZCAoV2luSUUgYWN0dWFsbHkgc2NhbGVzIGl0
cyBjb250cm9sIGZvciBzbWFsbCB3aWR0aHMsIGJ1dCBsZXRzIGl0IG92ZXJmbG93IGZvciBzbWFs
bCBoZWlnaHRzLikKQEAgLTg3OCwzMiArODc4LDMyIEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dFJhZGlvU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
CiAgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZTo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAg
ICAvLyBNb3N0IHBsYXRmb3JtcyB3aWxsIGNvbXBsZXRlbHkgaG9ub3IgYWxsIENTUywgYW5kIHNv
IHdlIGhhdmUgbm8gbmVlZCB0byBhZGp1c3QgdGhlIHN0eWxlCiAgICAgLy8gYXQgYWxsIGJ5IGRl
ZmF1bHQuICBXZSB3aWxsIHN0aWxsIGFsbG93IHRoZSB0aGVtZSBhIGNyYWNrIGF0IHNldHRpbmcg
dXAgYSBkZXNpcmVkIHZlcnRpY2FsIHNpemUuCiAgICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZTo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAjZW5kaWYKIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZTo6YWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFRleHRBcmVhU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RN
ZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dAogewogfQogCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKLXZvaWQgUmVuZGVyVGhlbWU6OmFk
anVzdElucHV0RmllbGRTcGVlY2hCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZTo6YWRqdXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIq
IHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7
CiAgICAgUmVuZGVySW5wdXRTcGVlY2g6OmFkanVzdElucHV0RmllbGRTcGVlY2hCdXR0b25TdHls
ZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOwogfQpAQCAtOTE1LDcgKzkxNSw3IEBAIGJvb2wg
UmVuZGVyVGhlbWU6OnBhaW50SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbihSZW5kZXJPYmplY3QqIG9i
amVjdCwgY29uc3QgUGFpbnRJCiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRVRFUl9UQUcpCi12b2lk
IFJlbmRlclRoZW1lOjphZGp1c3RNZXRlclN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWV0
ZXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29u
c3QKIHsKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQpAQCAtOTQ4LDcgKzk0
OCw3IEBAIGRvdWJsZSBSZW5kZXJUaGVtZTo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jh
cihSZW5kZXJQcm9ncmVzcyopIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWU6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RQcm9ncmVzc0Jh
clN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAogewog
fQogI2VuZGlmCkBAIC05NTgsMTUgKzk1OCwxNSBAQCBib29sIFJlbmRlclRoZW1lOjpzaG91bGRI
YXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQpIGNvbnN0CiAgICAg
cmV0dXJuIGlucHV0RWxlbWVudC0+aXNTdGVwcGFibGUoKSAmJiAhaW5wdXRFbGVtZW50LT5pc1Jh
bmdlQ29udHJvbCgpOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZW51TGlzdEJ1dHRv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRyYWNrU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIGFkanVzdFNsaWRlclRodW1iU2l6ZShzdHlsZSk7
CiB9CkBAIC05NzUsMjMgKzk3NSwyMyBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJU
aHVtYlNpemUoUmVuZGVyU3R5bGUqKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKIHsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWU6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFk
anVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmll
bGREZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QK
IHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKIHsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAppbmRleCA5OGJhM2FhY2UwYTAzOTYyZDBjYTcz
Njg1YmM2OGYzNGM2Y2JmNThjLi40YmZiN2U2NWYwMjZmYTBjNDhkZDgyMWUzOTcwNDQ1YzZhZTgx
OTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaApAQCAtNzEsNyArNzEs
NyBAQCBwdWJsaWM6CiAgICAgLy8gbWV0cmljcyBhbmQgZGVmYXVsdHMgZ2l2ZW4gdGhlIGNvbnRl
bnRzIG9mIHRoZSBzdHlsZS4gIFRoaXMgaW5jbHVkZXMgc29waGlzdGljYXRlZCBvcGVyYXRpb25z
IGxpa2UKICAgICAvLyBzZWxlY3Rpb24gb2YgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgZm9u
dCwgdGhlIGRpc2FibGluZyBvZiBhcHBlYXJhbmNlIHdoZW4gY2VydGFpbiBvdGhlciBwcm9wZXJ0
aWVzIGxpa2UKICAgICAvLyAiYm9yZGVyIiBhcmUgc2V0LCBvciBpZiB0aGUgYXBwZWFyYW5jZSBp
cyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0aGVtZS4KLSAgICB2b2lkIGFkanVzdFN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqLCAgYm9vbCBVQUhhc0FwcGVhcmFu
Y2UsCisgICAgdm9pZCBhZGp1c3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KiwgIGJvb2wgVUFIYXNBcHBlYXJhbmNlLAogICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5k
Q29sb3IpOwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHBhaW50IHRoZSB3aWRn
ZXQgYXMgYSBiYWNrZ3JvdW5kIG9mIHRoZSBSZW5kZXJPYmplY3QuICBBIHdpZGdldCdzIGZvcmVn
cm91bmQsIGUuZy4sIHRoZQpAQCAtMjM1LDY4ICsyMzUsNjggQEAgcHJvdGVjdGVkOgogCiAjaWYg
IVVTRShORVdfVEhFTUUpCiAgICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNlIHZhbHVl
LgotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RDaGVja2JveFN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0UmFkaW9TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJhZGlvU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShS
ZW5kZXJTdHlsZSopIGNvbnN0IHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1
ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKikgY29uc3Qg
eyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0
dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0Rmll
bGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxp
c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogI2lm
IEVOQUJMRShNRVRFUl9UQUcpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1ldGVyU3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShQUk9HUkVTU19UQUcpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5bGUo
Q1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jh
cihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gdHJ1ZTsgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludElucHV0RmllbGRTcGVl
Y2hCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0
cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVl
OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZERlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVl
OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQW5kcm9pZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUFuZHJvaWQuY3BwCmluZGV4IDBhZGExNmNj
ZjRmMGU1MGExZGNjYjI3MDYyZjE5ODBmZmYwMmU5NGEuLjhiNzEyMzA4ODM2NWRjNmJmMmI2NDU1
N2YwNmM4ZTM1YmZkMjljMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtQW5kcm9pZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1BbmRyb2lkLmNwcApAQCAtNzUsNyArNzUsNyBAQCBTdHJp
bmcgUmVuZGVyVGhlbWVDaHJvbWl1bUFuZHJvaWQ6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKQog
ICAgICAgICBTdHJpbmcodGhlbWVDaHJvbWl1bUFuZHJvaWRVc2VyQWdlbnRTdHlsZVNoZWV0LCBz
aXplb2YodGhlbWVDaHJvbWl1bUFuZHJvaWRVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWVDaHJvbWl1bUFuZHJvaWQ6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZUNocm9taXVtQW5kcm9pZDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7
CiAgICAgaWYgKFBsYXRmb3JtU3VwcG9ydDo6bGF5b3V0VGVzdE1vZGUoKSkgewogICAgICAgICAv
LyBNYXRjaCBDaHJvbWl1bSBMaW51eCBzcGluIGJ1dHRvbiBzdHlsZSBpbiBsYXlvdXQgdGVzdHMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1
bUFuZHJvaWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
QW5kcm9pZC5oCmluZGV4IDUzNDkwMTM1YzY0MzJlNzFmNGMwNTNiMTgyOTI4Mjg2MmMwZmI0MWMu
LjNkY2Q2ZGY5MzY2ZDVlNTBiNzdkZDFkY2VjNjJmNzE2NDIyOTA4ZGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQW5kcm9pZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQW5kcm9pZC5oCkBA
IC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3Io
aW50IGNzc1ZhbGlkSWQpIGNvbnN0IE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVz
dElubmVyU3BpbkJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGlu
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
IE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIGRlbGVnYXRlc01lbnVMaXN0UmVuZGVyaW5n
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwCmluZGV4IGQ0ZWQy
YTFlNzg0MmFlMGFmMjExY2Q5Mjc2ZWZmYWMxMDdiNzJkMzcuLjAxOTY5NGYwZDZiNjE0NDIyMTQz
M2ZjZTZlOWNjN2U1NWRlNDRiMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwCkBAIC0zMDUsNyArMzA1LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICBJbnRTaXpl
IHNpemUgPSBQbGF0Zm9ybVN1cHBvcnQ6OmdldFRoZW1lUGFydFNpemUoUGxhdGZvcm1TdXBwb3J0
OjpQYXJ0SW5uZXJTcGluQnV0dG9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oCmluZGV4IDMzYjZmNTQyNTY1MzYzYzBiZTk5
YWYwMzRjYTYxY2U5NmZhMmRmMjMuLjdlMzA4MDgzZjYxN2QxMTVlNzFmMTEzZDdkNjJjM2UxY2Yz
M2NkYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtTGludXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4LmgKQEAgLTcxLDcgKzcxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNs
aWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJ
bm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBwb3BzTWVudUJ5U3BhY2VPclJldHVybigp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCmluZGV4IGZiNzk5ZjMxMTE4
NGI1Y2NlM2U3NTZjZTNlZDJhNzQxY2U0NDZiZDEuLjQwYmIwYTM5YmQzN2NhMGYyZTQxNGM0ZGU3
ODRhNzdhNmViODg3OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcApAQCAtMjI4LDcgKzIyOCw3IEBAIHZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
CiAgICAgc2V0Q2hlY2tib3hTaXplKHN0eWxlKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjph
ZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKIHsKICAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9u
UGFydCkgewogICAgICAgICAvLyBJZ25vcmUgbGluZS1oZWlnaHQuCkBAIC0yNDEsNyArMjQxLDcg
QEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwKICAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywg
aSwgcik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZp
ZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZFN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAog
ewogICAgICAvLyBJZ25vcmUgbGluZS1oZWlnaHQuCiAgICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0
KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKQEAgLTI1Miw3ICsyNTIsNyBAQCBi
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJgogICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCBy
KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRD
YW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8gU2NhbGUgdGhlIGJ1dHRvbiBzaXplIGJhc2Vk
IG9uIHRoZSBmb250IHNpemUKICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUo
KSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKQEAgLTI5OSwxNCArMjk5LDE0IEBAIGJv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24o
UmVuZGVyT2JqZWN0KiBjYW5jZWxCCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewog
ICAgIEludFNpemUgZW1wdHlTaXplKDEsIDExKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KGVtcHR5U2l6ZS53aWR0aCgpLCBGaXhlZCkpOwogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KGVtcHR5U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAog
ewogICAgIC8vIFNjYWxlIHRoZSBkZWNvcmF0aW9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6
ZQogICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRy
b2xGb250UGl4ZWxTaXplOwpAQCAtMzQwLDcgKzM0MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3Qq
IG1hCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
OjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIC8vIFNjYWxl
IHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplCiAgICAgZmxvYXQgZm9udFNj
YWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7CkBA
IC00NjYsMTMgKzQ2NiwxMyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1l
ZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUAogI2VuZGlmCiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5
bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVu
dCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdE1lbnVMaXN0
U3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29y
ZTo6RWxlbWVudCogZSkgY29uc3QKIHsKICAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8g
b24gYWxsIGJyb3dzZXJzLgogICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjpp
bml0aWFsTGluZUhlaWdodCgpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIGFkanVzdE1l
bnVMaXN0U3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmgKaW5kZXggODI4YTY0MGQ1NThh
ODIyZThjZWY3NmRkYjg4NjQwZDA0NjhmMzU5Ni4uYmIwMzQ3NWU0NjJiNTA0YWY3ZmE5YTRmMDYx
NGU1ZGFkYzFjMzU5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhLmgKQEAgLTcwLDIyICs3MCwyMiBAQCBjbGFzcyBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYSA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CiAKICAgICAgICAgdmlydHVhbCB2
b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICAgICAgICAg
dmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAg
ICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYUNvbnRyb2xzQmFja2dyb3VuZChSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CkBAIC0xMDYsOCArMTA2LDggQEAgY2xhc3Mg
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgOiBwdWJsaWMgUmVuZGVyVGhlbWUgewogICAgICAgICAv
LyBJbiBzaG9ydCwgd2UgZWl0aGVyIGdvIGRvd24gdGhlIE1lbnVMaXN0IGNvZGUgcGF0aCBvciB0
aGUgTWVudUxpc3RCdXR0b24KICAgICAgICAgLy8gY29kZXBhdGguIFdlIG5ldmVyIGdvIGRvd24g
Ym90aC4gQW5kIGluIGJvdGggY2FzZXMsIHRoZXkgcmVuZGVyIHRoZQogICAgICAgICAvLyBlbnRp
cmUgbWVudWxpc3QuCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICAgICAgdmly
dHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcApp
bmRleCAxZGM0ZDNjZDJlNjllNDdhMzQ5YzExNmMyYTA5MGNmMDRlODJjYTlmLi42MDU2NjU5NzZh
MzVmMWVjY2NjZjM2MjhkZWU3YmRjYWIyMzE1MmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwCkBAIC03MDYsNyArNzA2LDcg
QEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludFRleHRGaWVsZEludGVybmFsKFJl
bmRlck9iamVjdCogbywKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bVdpbjo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1XaW46OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIGludCB3aWR0aCA9IFNjcm9s
bGJhclRoZW1lOjp0aGVtZSgpLT5zY3JvbGxiYXJUaGlja25lc3MoKTsKICAgICBzdHlsZS0+c2V0
V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwpAQCAtNzYwLDcgKzc2MCw3IEBAIGRvdWJsZSBS
ZW5kZXJUaGVtZUNocm9taXVtV2luOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzKiByCiAgICAgcmV0dXJuIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVSYXRlOwog
fQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OmFkanVzdFByb2dyZXNzQmFyU3R5bGUo
Q1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lQ2hyb21pdW1XaW46OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oCmluZGV4IGM0N2E2Nzkx
MGQ4MDc4YTZlYmI3YWE1NzMyZmYzNDFhOTVlNWVlNDQuLjc4NTZkMDM5ZjlmODM2Y2RjNWI4Zjhj
MTVkMzk4YjNkYTEyZDJiODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtV2luLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lQ2hyb21pdW1XaW4uaApAQCAtODYsMTMgKzg2LDEzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OnNldERlZmF1bHRGb250U2l6ZSgpIHJlZ2FyZGluZyB1Z2xpbmVzcyBvZiB0aGlzIGhhY2suCiAg
ICAgICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRGb250U2l6ZShpbnQpOwogCi0gICAgICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICNpZiBF
TkFCTEUoUFJPR1JFU1NfVEFHKQogICAgICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBl
YXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CiAgICAgICAg
IHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJv
Z3Jlc3MqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5o
CmluZGV4IDY2YzhhZDQ5OTk1YzUxYjdlZWNkOTAxNjlmODhiMTk2MWE0MTg3NmQuLmViYmIyMzUy
YzU4YmM5ZWI1MDI0YWI5OGEzNTRjMzUzNGVhYTVhMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5oCkBAIC0xMDMsNDEgKzEwMyw0MSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9ycygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3Qo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVM
aXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAogI2lmIEVOQUJMRShQ
Uk9HUkVTU19UQUcpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0JhcihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAjZW5kaWYK
IAogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xp
ZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29s
IHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmly
dHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVj
b3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmll
bGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMTkwLDcgKzE5
MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqLCBj
b25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7CiAgICAgSW50U2l6ZSBzaXplRm9yRm9udChSZW5k
ZXJTdHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKICAgICBJbnRTaXplIHNpemVG
b3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0Owot
ICAgIHZvaWQgc2V0Rm9udEZyb21Db250cm9sU2l6ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqLCBOU0NvbnRyb2xTaXplKSBjb25zdDsKKyAgICB2b2lkIHNldEZvbnRGcm9tQ29udHJv
bFNpemUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgTlNDb250cm9sU2l6ZSkgY29uc3Q7
CiAKICAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmpl
Y3QqKTsKICAgICB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJP
YmplY3QqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRl
eCAwMDc1NDUyZTg5NTNiMTZlNGFlNjQ1NDFhYzk5OGIyMmIxNGQyODE3Li40Y2JiOGFmMmY5MTgy
MTVmZTQ2OGRmZjhiOTFjNDBmNjFlYTA4N2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tCkBAIC02ODMsNyArNjgzLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1h
Yzo6c2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6
ZXMpIGMKICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4
ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250cm9sU2l6ZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBOU0NvbnRyb2xTaXplIGNvbnRy
b2xTaXplKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250cm9sU2l6
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBOU0NvbnRyb2xTaXplIGNvbnRy
b2xTaXplKSBjb25zdAogewogICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAg
ICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOwpAQCAtNzI2LDcgKzcy
Niw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFk
anVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdAogewogfQogCkBAIC03NDgsNyArNzQ4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6
cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4
dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKQEAgLTk1Myw3ICs5NTMs
NyBAQCBkb3VibGUgUmVuZGVyVGhlbWVNYWM6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NC
YXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbk51
bUZyYW1lcyAqIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVSYXRlOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lTWFjOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UHJvZ3Jl
c3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QK
IHsKIH0KIApAQCAtMTE5Nyw3ICsxMTk3LDcgQEAgc3RhdGljIGNvbnN0IEludFNpemUqIG1lbnVM
aXN0QnV0dG9uU2l6ZXMoKQogICAgIHJldHVybiBzaXplczsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNp
emUgPSBjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpOwogCkBAIC0xMjY0LDcgKzEyNjQsNyBAQCBp
bnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVM
aXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0CiB7CiAgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBi
YXNlRm9udFNpemU7CiAKQEAgLTEzMDYsNyArMTMwNiw3IEBAIGludCBSZW5kZXJUaGVtZU1hYzo6
bWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiBjb25zdCBpbnQg
dHJhY2tXaWR0aCA9IDU7CiBjb25zdCBpbnQgdHJhY2tSYWRpdXMgPSAyOwogCi12b2lkIFJlbmRl
clRoZW1lTWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKIHsKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQpA
QCAtMTM0OCw3ICsxMzQ4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUcmFj
ayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmYKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1iU3R5bGUo
Q1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1iU3R5
bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHls
ZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOwogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVs
bHB0cik7CkBAIC0xNDc5LDcgKzE0NzksNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRTZWFy
Y2hGaWVsZFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHNldFNpemVGcm9tRm9u
dChzdHlsZSwgc2VhcmNoRmllbGRTaXplcygpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVz
dFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8gT3ZlcnJpZGUgYm9yZGVyLgogICAgIHN0
eWxlLT5yZXNldEJvcmRlcigpOwpAQCAtMTU2Nyw3ICsxNTY3LDcgQEAgY29uc3QgSW50U2l6ZSog
UmVuZGVyVGhlbWVNYWM6OmNhbmNlbEJ1dHRvblNpemVzKCkgY29uc3QKICAgICByZXR1cm4gc2l6
ZXM7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCBjYW5jZWxC
dXR0b25TaXplcygpKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwg
Rml4ZWQpKTsKQEAgLTE1ODIsNyArMTU4Miw3IEBAIGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1l
TWFjOjpyZXN1bHRzQnV0dG9uU2l6ZXMoKSBjb25zdAogfQogCiBjb25zdCBpbnQgZW1wdHlSZXN1
bHRzT2Zmc2V0ID0gOTsKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkRGVj
b3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0
aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3Vs
dHNCdXR0b25TaXplcygpKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgo
KSAtIGVtcHR5UmVzdWx0c09mZnNldCwgRml4ZWQpKTsKQEAgLTE1OTUsNyArMTU5NSw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRl
clRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAg
SW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXpl
cygpKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsK
QEAgLTE2MjgsNyArMTYyOCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmll
bGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhCiB9CiAKIGNvbnN0
IGludCByZXN1bHRzQXJyb3dXaWR0aCA9IDU7Ci12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0
ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7CiAgICAgc3R5bGUtPnNldFdpZHRo
KExlbmd0aChzaXplLndpZHRoKCkgKyByZXN1bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCmluZGV4IDQ2NzJl
ZmU0YmNlNWI5OGVlYWM5MWVlNmU4MTZmNmVmMWI5MDM0OTguLjEyYzkyNWNiMzliN2ZiZmJhNGNl
MmI3YmQyZTNjMDQzZTg5NWQxNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lU2FmYXJpLmNwcApAQCAtMzgzLDcgKzM4Myw3IEBAIHZvaWQgUmVuZGVyVGhlbWVT
YWZhcmk6OnNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUq
IHNpemVzCiAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZp
eGVkKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldEZvbnRGcm9tQ29udHJvbFNp
emUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgTlNDb250
cm9sU2l6ZSBjb250cm9sU2l6ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldEZv
bnRGcm9tQ29udHJvbFNpemUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBz
dHlsZSwgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkgY29uc3QKIHsKICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRl
U2l6ZSh0cnVlKTsKQEAgLTUwMyw3ICs1MDMsNyBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpz
ZXRCdXR0b25QYWRkaW5nRnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgTlNDbwog
ICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aCgwLCBGaXhlZCkpOwogfQogCi12b2lk
IFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZVNhZmFyaTo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3Is
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICAvLyBUaGVyZSBh
cmUgdGhyZWUgYXBwZWFyYW5jZSBjb25zdGFudHMgZm9yIGJ1dHRvbnMuCiAgICAgLy8gKDEpIFB1
c2gtYnV0dG9uIGlzIHRoZSBjb25zdGFudCBmb3IgdGhlIGRlZmF1bHQgQXF1YSBzeXN0ZW0gYnV0
dG9uLiAgUHVzaCBidXR0b25zIHdpbGwgbm90IHNjYWxlIHZlcnRpY2FsbHkgYW5kIHdpbGwgbm90
IGFsbG93CkBAIC02MTUsNyArNjE1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRU
ZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW4KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFRleHRGaWVs
ZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKQEAgLTY0Myw3ICs2NDMs
NyBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6
OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0CiB7CiB9CiAKQEAgLTg1OSw3ICs4NTksNyBAQCBib29sIFJlbmRlclRoZW1lU2Fm
YXJpOjpwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRq
dXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0
TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBj
b250cm9sU2l6ZUZvckZvbnQoc3R5bGUpOwogCkBAIC05MjQsNyArOTI0LDcgQEAgaW50IFJlbmRl
clRoZW1lU2FmYXJpOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFk
anVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6
OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICBmbG9hdCBmb250U2NhbGUg
PSBzdHlsZS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKICAgICAKQEAgLTk4OCw3ICs5ODgs
NyBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdCAKK3Zv
aWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZl
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QgCiB7IAog
ICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHNlbGVjdG9yLCBzdHlsZSwg
ZSk7CiAgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsgCkBAIC0xMDQyLDcgKzEwNDIs
NyBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRTZWFyY2hGaWVsZFNpemUoUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAogICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgc2VhcmNoRmllbGRT
aXplcygpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRT
dHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KiBlKSBjb25zdAogewogICAgIC8vIE92ZXJyaWRlIGJvcmRlci4KICAgICBzdHlsZS0+cmVzZXRC
b3JkZXIoKTsKQEAgLTEwOTIsNyArMTA5Miw3IEBAIGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1l
U2FmYXJpOjpjYW5jZWxCdXR0b25TaXplcygpIGNvbnN0CiAgICAgcmV0dXJuIHNpemVzOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3Rl
bUZvbnQoc3R5bGUsIGNhbmNlbEJ1dHRvblNpemVzKCkpOwogICAgIHN0eWxlLT5zZXRXaWR0aChM
ZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwpAQCAtMTEwNiw3ICsxMTA2LDcgQEAgY29uc3Qg
SW50U2l6ZSogUmVuZGVyVGhlbWVTYWZhcmk6OnJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0CiB9
CiAKIGNvbnN0IGludCBlbXB0eVJlc3VsdHNPZmZzZXQgPSA5Owotdm9pZCBSZW5kZXJUaGVtZVNh
ZmFyaTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciog
c2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7
CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0
b25TaXplcygpKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSAtIGVt
cHR5UmVzdWx0c09mZnNldCwgRml4ZWQpKTsKQEAgLTExMTgsNyArMTExOCw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1l
U2FmYXJpOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25TdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KiBlKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0
eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7CiAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChz
aXplLndpZHRoKCksIEZpeGVkKSk7CkBAIC0xMTQxLDcgKzExNDEsNyBAQCBib29sIFJlbmRlclRo
ZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdAogfQogCiBjb25zdCBpbnQgcmVzdWx0c0Fycm93V2lkdGggPSA1Owotdm9pZCBS
ZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NT
U3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQo
c3R5bGUsIHJlc3VsdHNCdXR0b25TaXplcygpKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KHNpemUud2lkdGgoKSArIHJlc3VsdHNBcnJvd1dpZHRoLCBGaXhlZCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuaAppbmRleCA4NWRkYjRkNTBhNDY0ZmRk
NWMzZmJhNTNiNGM3MjA0YjAyZDdlYzkzLi4wNWIxZmI1ZWEzNTMyMThlMTA4NmQ1NTU0ZDA4YTJl
ZDJiNzk0YzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVTYWZhcmkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZh
cmkuaApAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgbWluaW11bU1l
bnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVz
dFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsgCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OyAKICAgICAKICAg
ICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqKSBjb25z
dDsKICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxl
KikgY29uc3Q7CkBAIC05MiwzOCArOTIsMzggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9v
bCBwYWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBXZWJDb3Jl
OjpFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29s
IHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVT
ZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lk
IGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxp
c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHBhaW50
U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRT
ZWFyY2hGaWVsZERlY29yYXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKICAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CkBAIC0xNTQsNyAr
MTU0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSos
IGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKICAgICBJbnRTaXplIHNpemVGb3JGb250KFJl
bmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwogICAgIEludFNpemUgc2l6
ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7
Ci0gICAgdm9pZCBzZXRGb250RnJvbUNvbnRyb2xTaXplKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSosIE5TQ29udHJvbFNpemUpIGNvbnN0OworICAgIHZvaWQgc2V0Rm9udEZyb21Db250
cm9sU2l6ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBOU0NvbnRyb2xTaXplKSBjb25z
dDsKIAogICAgIC8vIEhlbHBlcnMgZm9yIGFkanVzdGluZyBhcHBlYXJhbmNlIGFuZCBmb3IgcGFp
bnRpbmcKICAgICBjb25zdCBJbnRTaXplKiBjaGVja2JveFNpemVzKCkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAppbmRleCBlZDM0ZWU3NzJhNGM5
MWEyMjY5YTM1ZGY5MzgyYThiZDc4NmJjNjE2Li4wNGQ1NGIyOTQ3ZDNjZWU1YTk0YmZiMjVhNjY2
ZTQ3YTRhMTJhOGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdp
bi5jcHAKQEAgLTY4Nyw3ICs2ODcsNyBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludEJ1dHRv
bihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UgogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0SW5uZXJTcGluQnV0
dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdElubmVyU3BpbkJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgaW50IHdpZHRoID0gOjpHZXRTeXN0ZW1NZXRyaWNzKFNN
X0NYVlNDUk9MTCk7CiAgICAgaWYgKHdpZHRoIDw9IDApCkBAIC03NTQsMTMgKzc1NCwxMyBAQCBi
b29sIFJlbmRlclRoZW1lV2luOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBpLCBjb25zdCBJbgogICAgIHJldHVybiBwYWludE1lbnVMaXN0QnV0dG9uKG8s
IGksIHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RNZW51TGlzdFN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUp
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVz
b2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7
CiAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CiAgICAgYWRqdXN0TWVudUxpc3RCdXR0b25TdHls
ZShzZWxlY3Rvciwgc3R5bGUsIGUpOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RN
ZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RN
ZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgLy8gVGhlc2UgYXJlIHRoZSBwYWRkaW5n
cyBuZWVkZWQgdG8gcGxhY2UgdGhlIHRleHQgY29ycmVjdGx5IGluIHRoZSA8c2VsZWN0PiBib3gK
ICAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nVG9wICAgID0gMjsKQEAgLTg2Miw3ICs4
NjIsNyBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdAogICAgIHJldHVybiBwYWludFRleHRGaWVs
ZChvLCBpLCByKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRTdHls
ZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
KSBjb25zdAogewogICAgIC8vIE92ZXJyaWRlIHBhZGRpbmdTaXplIHRvIG1hdGNoIEFwcEtpdCB0
ZXh0IHBvc2l0aW9uaW5nLgogICAgIGNvbnN0IGludCBwYWRkaW5nID0gMTsKQEAgLTg5OSw3ICs4
OTksNyBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KiBlKSBjb25zdAogewogICAgIC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0
aGUgZm9udCBzaXplCiAgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBk
ZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7CkBAIC05MDgsMTQgKzkwOCwxNCBAQCB2b2lkIFJl
bmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqIHNlbGVjdAogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGNhbmNlbEJ1dHRv
blNpemUsIEZpeGVkKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZp
ZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RT
ZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIEludFNpemUgZW1wdHlTaXpl
KDEsIDExKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGVtcHR5U2l6ZS53aWR0aCgpLCBG
aXhlZCkpOwogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGVtcHR5U2l6ZS5oZWlnaHQoKSwg
Rml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3Is
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICAvLyBTY2FsZSB0
aGUgZGVjb3JhdGlvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKICAgICBmbG9hdCBmb250
U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsK
QEAgLTk0OCw3ICs5NDgsNyBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgLy8gU2NhbGUgdGhlIGJ1dHRvbiBz
aXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+
Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmgKaW5kZXggMDFhM2FkOGUwODliNDI5MzhiNWNlNWE4
YWU5YzM0ODk3ZTRmOGM0OC4uZDIzMzdjMzYxZjQzY2M3NDQyZDk4MWZjNTQ0ZGI1YWU5OGFhYzc2
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmgKQEAgLTc3LDcg
Kzc3LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3Bp
bkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCBib29sIHBh
aW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKQEAgLTg1LDkgKzg1LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBwYWludFRl
eHRBcmVhKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiByKQogICAgIHsgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOyB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rvciwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RN
ZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIApAQCAtOTcsMjYgKzk3
LDI2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBwb3B1cE9wdGlvblN1cHBvcnRzVGV4
dEluZGVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERl
Y29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiBmYWxzZTsg
fQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25T
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3Qge30KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0IHt9Ci0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0IHt9CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0IHsgfQorICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7IH0KIAogICAgIHN0YXRpYyB2b2lkIHNldFdl
YktpdElzQmVpbmdVbmxvYWRlZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVXaW5DRS5jcHAKaW5kZXggNGE3YmIyNTQ2NjI3OTk1OGY5OThlYzdkNTdlYzBiY2I4
YzY1MTAwYy4uNTY5MGQ1ZjdmOTdlYjA2Y2U4MzU1ZDhiNjYwMjgyNTg0ZDY0MGQ3ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luQ0UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbkNFLmNwcApAQCAtMjM1LDcg
KzIzNSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lV2luQ0U6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxl
Y3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVXaW5DRTo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIHN0
eWxlLT5yZXNldEJvcmRlcigpOwogICAgIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoc2VsZWN0
b3IsIHN0eWxlLCBlKTsKQEAgLTM1Miw3ICszNTIsNyBAQCB2b2lkIFJlbmRlclRoZW1lV2luQ0U6
OmFkanVzdEJ1dHRvbklubmVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHN0
eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgoMywgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZVdpbkNFOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lV2luQ0U6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3Is
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICAvLyBPdmVycmlk
ZSBwYWRkaW5nIHNpemUgdG8gbWF0Y2ggQXBwS2l0IHRleHQgcG9zaXRpb25pbmcuCiAgICAgY29u
c3QgaW50IHBhZGRpbmcgPSAxOwpAQCAtMzkyLDIxICszOTIsMjEgQEAgYm9vbCBSZW5kZXJUaGVt
ZVdpbkNFOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW5DRTo6
YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxl
Y3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZVdpbkNFOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAg
ICAgSW50U2l6ZSBjYW5jZWxTaXplKDEzLCAxMSk7CiAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0
aChjYW5jZWxTaXplLndpZHRoKCksIEZpeGVkKSk7CiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5n
dGgoY2FuY2VsU2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdp
bkNFOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZVdpbkNFOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShTdHlsZVJlc29s
dmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAogewog
ICAgIEludFNpemUgZW1wdHlTaXplKDEsIDExKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KGVtcHR5U2l6ZS53aWR0aCgpLCBGaXhlZCkpOwogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KGVtcHR5U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbkNF
OjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVXaW5DRTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxl
KFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUp
IGNvbnN0CiB7CiAgICAgSW50U2l6ZSBtYWduaWZpZXJTaXplKDE1LCAxMSk7CiAgICAgc3R5bGUt
PnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJTaXplLndpZHRoKCksIEZpeGVkKSk7CkBAIC00MTks
NyArNDE5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZVdpbkNFOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25T
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbkNFOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIEludFNpemUgbWFnbmlmaWVyU2l6ZSgxNSwg
MTEpOwogICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZS53aWR0aCgpLCBG
aXhlZCkpOwpAQCAtNDMyLDcgKzQzMiw3IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWluCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luQ0U6OmFkanVzdE1lbnVMaXN0
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW5DRTo6YWRqdXN0TWVudUxp
c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIC8vIFRoZXNlIGFyZSB0aGUgcGFkZGluZ3MgbmVl
ZGVkIHRvIHBsYWNlIHRoZSB0ZXh0IGNvcnJlY3RseSBpbiB0aGUgPHNlbGVjdD4gYm94CiAgICAg
Y29uc3QgaW50IGRyb3BEb3duQm94UGFkZGluZ1RvcCAgICA9IDI7CkBAIC01MjksNyArNTI5LDcg
QEAgYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb24KICAgICByZXR1cm4gcmM7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWVXaW5DRTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZVdpbkNFOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgY29uc3Qg
aW50IHBhZGRpbmcgPSAxOwogICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGlu
ZywgRml4ZWQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZVdpbkNFLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5DRS5o
CmluZGV4IGE3ZGY0ODk2N2ZhZWM2M2ZlOTgyYjcwYWJiNzA5YTk4ZmZhYWMzZmMuLmRlZTIzN2Vh
ZjJlYjJkZDQ5YWE0MzljZjViOGQ4ZWI1MjhlMTQ4ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbkNFLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lV2luQ0UuaApAQCAtODEsOSArODEsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQogICAgICAgICB7IHJldHVy
biBwYWludFRleHRGaWVsZChvLCBpLCByKTsgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVu
dUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVz
dE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKQEAgLTkz
LDI2ICs5MywyNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCBib29s
IHBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNv
cmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24oUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIGZhbHNl
OyB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owog
ICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5n
ZWQoKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVT
ZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0IHt9Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3Qge30KLSAgICAgICAgdmlydHVhbCB2b2lk
IGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCopIGNvbnN0IHt9CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3Qg
eyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QgeyB9CisgICAgICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7IH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBzZXRX
ZWJLaXRJc0JlaW5nVW5sb2FkZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5jcHAKaW5kZXggMzgzN2E3MDMyNzcwZDhiN2ZhODM1MjNiOWU2NDVi
Y2NkZTdkNjMyMy4uNWQ3MWI5NjcxMjAxZWFjMzQ1YzEzYTI5ZGZmZDgwYjIwMmUzNGJiMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCkBAIC0y
MjIsNyArMjIyLDcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6b3BlcmF0b3I9PShjb25zdCBSZW5kZXJT
dHlsZSYgbykgY29uc3QKIAogYm9vbCBSZW5kZXJTdHlsZTo6aXNTdHlsZUF2YWlsYWJsZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHRoaXMgIT0gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVOb3RZZXRB
dmFpbGFibGUoKTsKKyAgICByZXR1cm4gdGhpcyAhPSBTdHlsZVJlc29sdmVyOjpzdHlsZU5vdFll
dEF2YWlsYWJsZSgpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBwc2V1ZG9CaXQoUHNldWRvSWQg
cHNldWRvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaApp
bmRleCBjYjhiZGI0Y2E0MTI5ZGIyODIxODQ1NjkxZDk4NDg2NzdjZWRiMTg5Li5lZTZlNDM1ZmEz
Y2Y2NTdhOWE4M2U2NWYzNjNkODAzZDE0OTQzZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaApAQCAtMTA1LDEzICsxMDUsMTMgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogdXNpbmcgc3RkOjptYXg7CiAKIGNsYXNzIEJvcmRlckRhdGE7Ci1jbGFzcyBD
U1NTdHlsZVNlbGVjdG9yOwogY2xhc3MgQ291bnRlckNvbnRlbnQ7CiBjbGFzcyBDdXJzb3JMaXN0
OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIFBhaXI7CiBjbGFzcyBTaGFkb3dEYXRhOwogY2xhc3Mg
U3R5bGVJbWFnZTsKK2NsYXNzIFN0eWxlUmVzb2x2ZXI7CiBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDsKIAogY2xhc3MgQ29udGVudERhdGE7CkBAIC0xMjIsMTIgKzEyMiwxMiBAQCBjbGFzcyBS
ZW5kZXJTdHlsZTogcHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyU3R5bGU+IHsKICAgICBmcmllbmQg
Y2xhc3MgQW5pbWF0aW9uQmFzZTsgLy8gVXNlZCBieSBDU1MgYW5pbWF0aW9ucy4gV2UgY2FuJ3Qg
YWxsb3cgdGhlbSB0byBhbmltYXRlIGJhc2VkIG9mZiB2aXNpdGVkIGNvbG9ycy4KICAgICBmcmll
bmQgY2xhc3MgQXBwbHlTdHlsZUNvbW1hbmQ7IC8vIEVkaXRpbmcgaGFzIHRvIG9ubHkgcmV2ZWFs
IHVudmlzaXRlZCBpbmZvLgogICAgIGZyaWVuZCBjbGFzcyBFZGl0aW5nU3R5bGU7IC8vIEVkaXRp
bmcgaGFzIHRvIG9ubHkgcmV2ZWFsIHVudmlzaXRlZCBpbmZvLgotICAgIGZyaWVuZCBjbGFzcyBD
U1NTdHlsZVNlbGVjdG9yOyAvLyBTZXRzIG1lbWJlcnMgZGlyZWN0bHkuCiAgICAgZnJpZW5kIGNs
YXNzIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjsgLy8gSWdub3JlcyB2aXNpdGVkIHN0eWxl
cywgc28gbmVlZHMgdG8gYmUgYWJsZSB0byBzZWUgdW52aXNpdGVkIGluZm8uCiAgICAgZnJpZW5k
IGNsYXNzIFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yOyAvLyBVc2VkIGJ5IENTUyBh
bmltYXRpb25zLiBXZSBjYW4ndCBhbGxvdyB0aGVtIHRvIGFuaW1hdGUgYmFzZWQgb2ZmIHZpc2l0
ZWQgY29sb3JzLgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZTsgLy8gRklYTUU6
IE5lZWRzIHRvIGFsdGVyIHRoZSB2aXNpdGVkIHN0YXRlIGJ5IGhhbmQuIFNob3VsZCBjbGVhbiB0
aGUgU1ZHIGNvZGUgdXAgYW5kIG1vdmUgaXQgaW50byBSZW5kZXJTdHlsZSBwZXJoYXBzLgogICAg
IGZyaWVuZCBjbGFzcyBSZW5kZXJUcmVlQXNUZXh0OyAvLyBGSVhNRTogT25seSBuZWVkZWQgc28g
dGhlIHJlbmRlciB0cmVlIGNhbiBrZWVwIGx5aW5nIGFuZCBkdW1wIHRoZSB3cm9uZyBjb2xvcnMu
ICBSZWJhc2VsaW5pbmcgd291bGQgYWxsb3cgdGhpcyB0byBiZSB5YW5rZWQuCiAgICAgZnJpZW5k
IGNsYXNzIFN0eWxlQnVpbGRlcjsgLy8gU2V0cyBtZW1iZXJzIGRpcmVjdGx5LgorICAgIGZyaWVu
ZCBjbGFzcyBTdHlsZVJlc29sdmVyOzsgLy8gU2V0cyBtZW1iZXJzIGRpcmVjdGx5LgogcHJvdGVj
dGVkOgogCiAgICAgY2xhc3MgUmVuZGVyU3R5bGVCaXRmaWVsZHMgewpAQCAtMjE5LDcgKzIxOSw3
IEBAIHByb3RlY3RlZDoKICAgICBEYXRhUmVmPFNWR1JlbmRlclN0eWxlPiBtX3N2Z1N0eWxlOwog
I2VuZGlmCiAKLS8vICFTVEFSVCBTWU5DITogS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUgY29w
eSBjb25zdHJ1Y3RvciBpbiBSZW5kZXJTdHlsZS5jcHAgYW5kIGltcGxpY2l0bHlJbmhlcml0ZWQo
KSBpbiBDU1NTdHlsZVNlbGVjdG9yLmNwcAorLy8gIVNUQVJUIFNZTkMhOiBLZWVwIHRoaXMgaW4g
c3luYyB3aXRoIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGluIFJlbmRlclN0eWxlLmNwcCBhbmQgaW1w
bGljaXRseUluaGVyaXRlZCgpIGluIFN0eWxlUmVzb2x2ZXIuY3BwCiAKICAgICAvLyBpbmhlcml0
CiAgICAgc3RydWN0IEluaGVyaXRlZEZsYWdzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCmluZGV4IGU5
NWM1NWI2MDY4YjUxYmYzOGY2Mzg1NDdjODU4M2ZkYWJjZDY4NDUuLmFlNzJiZDYwYWFiMThiZWM0
OGExNmUyNjVhODQ0ODEwM2FkZDI0OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaApAQCAtMzksNyAr
MzksNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBbmltYXRpb25MaXN0OwotY2xh
c3MgQ1NTU3R5bGVTZWxlY3RvcjsKIGNsYXNzIFNoYWRvd0RhdGE7CiBjbGFzcyBTdHlsZURlcHJl
Y2F0ZWRGbGV4aWJsZUJveERhdGE7CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAtNTMsNiAr
NTIsNyBAQCBjbGFzcyBTdHlsZUdyaWRJdGVtRGF0YTsKIGNsYXNzIFN0eWxlTWFycXVlZURhdGE7
CiBjbGFzcyBTdHlsZU11bHRpQ29sRGF0YTsKIGNsYXNzIFN0eWxlUmVmbGVjdGlvbjsKK2NsYXNz
IFN0eWxlUmVzb2x2ZXI7CiBjbGFzcyBTdHlsZVRyYW5zZm9ybURhdGE7CiAKIGNsYXNzIENvbnRl
bnREYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdJbmxpbmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW5saW5lVGV4dC5jcHAKaW5kZXggMDI5MGJhOGI1ZWI2NzE1N2JjZjg2MjdhZmE2N2M5NDllOTJm
MmJhOS4uOWE3YjIzYjJjYjkzNzVmNWMzYzA2Zjk3ZTRhYTllNDgxMzc2ZTY5NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3Bw
CkBAIC0yNTQsNyArMjU0LDcgQEAgdm9pZCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpjb21wdXRlTmV3
U2NhbGVkRm9udEZvclN0eWxlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGMKICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSByZW5kZXJlci0+ZG9jdW1lbnQoKTsKICAgICBBU1NFUlQoZG9jdW1lbnQp
OwogICAgIAotICAgIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IgPSBkb2N1bWVudC0+
c3R5bGVTZWxlY3RvcigpOworICAgIFN0eWxlUmVzb2x2ZXIqIHN0eWxlU2VsZWN0b3IgPSBkb2N1
bWVudC0+c3R5bGVTZWxlY3RvcigpOwogICAgIEFTU0VSVChzdHlsZVNlbGVjdG9yKTsKIAogICAg
IC8vIEFsdGVyIGZvbnQtc2l6ZSB0byB0aGUgcmlnaHQgb24tc2NyZWVuIHZhbHVlIHRvIGF2b2lk
IHNjYWxpbmcgdGhlIGdseXBocyB0aGVtc2VsdmVzLCBleGNlcHQgd2hlbiBHZW9tZXRyaWNQcmVj
aXNpb24gaXMgc3BlY2lmaWVkCkBAIC0yNzAsNyArMjcwLDcgQEAgdm9pZCBSZW5kZXJTVkdJbmxp
bmVUZXh0Ojpjb21wdXRlTmV3U2NhbGVkRm9udEZvclN0eWxlKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGMKICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uKHN0eWxlLT5mb250RGVz
Y3JpcHRpb24oKSk7CiAKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBiZXR0ZXIgaGFuZGxlIHRo
ZSBjYXNlIHdoZW4gd2UgY29tcHV0ZSB2ZXJ5IHNtYWxsIGZvbnRzIGJlbG93IChiZWxvdyAxcHQp
LgotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1NTU3R5bGVTZWxlY3Rvcjo6
Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQsIHNjYWxpbmdGYWN0b3Is
IGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uY29tcHV0
ZWRTaXplKCksIERvTm90VXNlU21hcnRNaW5pbXVtRm9yRm9udFNpemUpKTsKKyAgICBmb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZy
b21TcGVjaWZpZWRTaXplKGRvY3VtZW50LCBzY2FsaW5nRmFjdG9yLCBmb250RGVzY3JpcHRpb24u
aXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpLCBEb05vdFVz
ZVNtYXJ0TWluaW11bUZvckZvbnRTaXplKSk7CiAKICAgICBzY2FsZWRGb250ID0gRm9udChmb250
RGVzY3JpcHRpb24sIDAsIDApOwogICAgIHNjYWxlZEZvbnQudXBkYXRlKHN0eWxlU2VsZWN0b3It
PmZvbnRTZWxlY3RvcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclN1cHBvcnQuY3BwCmluZGV4IGNjMDc5NmMyYjVjZmM5YjVhNTcwZDA0NzdmOTkzMTNk
ZDU5Y2M0M2MuLmY5NGVlODQwNGViZDhmOWM4ZWRlMGI0MGU5Y2E1NTQ3YWZiNTI2MTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcApA
QCAtMjM0LDcgKzIzNCw3IEBAIGJvb2wgU1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRl
bihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKICAgICAvLyBTVkcgZG9lc24ndCBzdXBwb3J0
IGluZGVwZW5kZW50IHgveSBvdmVyZmxvdwogICAgIEFTU0VSVChvYmplY3QtPnN0eWxlKCktPm92
ZXJmbG93WCgpID09IG9iamVjdC0+c3R5bGUoKS0+b3ZlcmZsb3dZKCkpOwogCi0gICAgLy8gT1ND
Uk9MTCBpcyBuZXZlciBzZXQgZm9yIFNWRyAtIHNlZSBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RS
ZW5kZXJTdHlsZQorICAgIC8vIE9TQ1JPTEwgaXMgbmV2ZXIgc2V0IGZvciBTVkcgLSBzZWUgU3R5
bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUKICAgICBBU1NFUlQob2JqZWN0LT5zdHlsZSgp
LT5vdmVyZmxvd1goKSAhPSBPU0NST0xMKTsKIAogICAgIC8vIFJlbmRlclNWR1Jvb3Qgc2hvdWxk
IG5ldmVyIHF1ZXJ5IGZvciBvdmVyZmxvdyBzdGF0ZSAtIGl0IHNob3VsZCBhbHdheXMgY2xpcCBp
dHNlbGYgdG8gdGhlIGluaXRpYWwgdmlld3BvcnQgc2l6ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAKaW5kZXggYjRiZDhm
YjE1NTQ3ZjQzYzkwYzYwOTQyYmZjOTJhODRlY2UzMjJjMS4uZjI0ZmY0YzAxYzVjYzVlMDUyMjU4
ZGM2Y2FhMzE5MDk5YWViNTE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAKQEAgLTI4OSw3ICsyODksNyBAQCB2b2lk
IFJlbmRlclRoZW1lUVN0eWxlOjpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSog
cmVuZGVyU3R5bGUpIGNvbnN0CiAKIAogCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RC
dXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
KSBjb25zdAogewogICAgIC8vIERpdGNoIHRoZSBib3JkZXIuCiAgICAgc3R5bGUtPnJlc2V0Qm9y
ZGVyKCk7CkBAIC00MDcsNyArNDA3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRU
ZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnMKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFRleHRBcmVh
U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFRleHRB
cmVhU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBhZGp1c3RUZXh0RmllbGRTdHlsZShzZWxlY3Rv
ciwgc3R5bGUsIGVsZW1lbnQpOwogfQpAQCAtNDYzLDcgKzQ2Myw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVRU3R5bGU6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lUVN0eWxl
OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lUVN0
eWxlOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgLy8gV09SS0FST1VO
RCBiZWNhdXNlIGh0bWwuY3NzIHNwZWNpZmllcyAtd2Via2l0LWJvcmRlci1yYWRpdXMgZm9yIDxz
ZWxlY3Q+IHNvIHdlIG92ZXJyaWRlIGl0IGhlcmUKICAgICAvLyBzZWUgYWxzbyBodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODM5OQpAQCAtNTk0LDcgKzU5NCw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIHBpLAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZVFTdHlsZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6
OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsK
IH0KQEAgLTYyNyw3ICs2MjcsNyBAQCBib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNsaWRl
clRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU3R5
bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRo
dW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1
bWJTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOwogICAgIHN0eWxlLT5zZXRCb3hTaGFk
b3cobnVsbHB0cik7CkBAIC02MzksNyArNjM5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6
cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCiAg
ICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIHBpLCByKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6
OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9y
LCBSZW5kZXJTdHlsZSogc3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKQEAgLTY1Myw3ICs2NTMsNyBAQCBib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNl
YXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SQogICAgIHJl
dHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24obywgcGksIHIpOwog
fQogCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHls
ZSwKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5oIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5oCmluZGV4
IGE4M2UwMmY1YTM4Y2ExNjA5MTI0ZjEyMzJhNjI2YTRmN2Y5MjU2NDMuLjAyM2E3YzcyMWI1ZDcw
NzQyYjgxZjEyNDcwMDgxOGQ1ZTA2MGUzMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxlLmgKQEAgLTUxLDE4ICs1MSwxOCBAQCBw
dWJsaWM6CiAgICAgUVN0eWxlKiBxU3R5bGUoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCBi
b29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfVEFH
KQogICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBw
cm9ncmVzcyBiYXIuCkBAIC03MSwxNyArNzEsMTcgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRy
YWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3Jh
dGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogI2lmbmRlZiBRVF9OT19TUElOQk9YCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>